@carto/kepler.gl 0.0.74 → 0.0.75-alpha.deckv9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/dist/actions/action-wrapper.js +20 -48
  2. package/dist/actions/actions.js +10 -19
  3. package/dist/actions/identity-actions.js +8 -17
  4. package/dist/actions/index.js +7 -24
  5. package/dist/actions/map-state-actions.js +10 -19
  6. package/dist/actions/map-style-actions.js +20 -35
  7. package/dist/actions/provider-actions.js +26 -42
  8. package/dist/actions/ui-state-actions.js +42 -70
  9. package/dist/actions/vis-state-actions.js +102 -162
  10. package/dist/cloud-providers/index.js +8 -8
  11. package/dist/cloud-providers/provider.js +55 -94
  12. package/dist/components/bottom-widget.js +47 -48
  13. package/dist/components/common/action-panel.js +39 -38
  14. package/dist/components/common/animation-control/animation-control.js +40 -38
  15. package/dist/components/common/animation-control/animation-controller.js +47 -70
  16. package/dist/components/common/animation-control/animation-speed-slider.js +28 -38
  17. package/dist/components/common/animation-control/floating-time-display.js +56 -67
  18. package/dist/components/common/animation-control/playback-controls.js +64 -80
  19. package/dist/components/common/animation-control/speed-control.js +26 -24
  20. package/dist/components/common/checkbox.js +31 -52
  21. package/dist/components/common/color-legend.js +40 -72
  22. package/dist/components/common/data-table/button.js +29 -22
  23. package/dist/components/common/data-table/canvas.js +21 -10
  24. package/dist/components/common/data-table/cell-size.js +54 -58
  25. package/dist/components/common/data-table/grid.js +30 -31
  26. package/dist/components/common/data-table/index.js +91 -133
  27. package/dist/components/common/data-table/option-dropdown.js +29 -33
  28. package/dist/components/common/dataset-label.js +21 -13
  29. package/dist/components/common/error-boundary.js +25 -30
  30. package/dist/components/common/field-selector.js +35 -69
  31. package/dist/components/common/field-token.js +21 -16
  32. package/dist/components/common/file-uploader/file-drop.js +40 -55
  33. package/dist/components/common/file-uploader/file-upload-progress.js +32 -30
  34. package/dist/components/common/file-uploader/file-upload.js +52 -91
  35. package/dist/components/common/file-uploader/upload-button.js +31 -42
  36. package/dist/components/common/histogram-plot.js +32 -27
  37. package/dist/components/common/icons/add.js +27 -27
  38. package/dist/components/common/icons/anchor_window.js +3 -9
  39. package/dist/components/common/icons/arrow-down-alt.js +27 -27
  40. package/dist/components/common/icons/arrow-down-solid .js +27 -27
  41. package/dist/components/common/icons/arrow-down.js +27 -27
  42. package/dist/components/common/icons/arrow-left.js +27 -27
  43. package/dist/components/common/icons/arrow-right.js +27 -27
  44. package/dist/components/common/icons/arrow-up-alt.js +27 -27
  45. package/dist/components/common/icons/arrow-up-solid.js +27 -27
  46. package/dist/components/common/icons/arrow-up.js +27 -27
  47. package/dist/components/common/icons/base.js +38 -42
  48. package/dist/components/common/icons/bug.js +27 -27
  49. package/dist/components/common/icons/cancel.js +27 -27
  50. package/dist/components/common/icons/checkmark.js +27 -28
  51. package/dist/components/common/icons/chevron-right.js +27 -27
  52. package/dist/components/common/icons/clipboard.js +27 -27
  53. package/dist/components/common/icons/clock.js +27 -27
  54. package/dist/components/common/icons/close.js +27 -27
  55. package/dist/components/common/icons/code-alt.js +27 -28
  56. package/dist/components/common/icons/copy.js +27 -28
  57. package/dist/components/common/icons/crosshairs.js +27 -28
  58. package/dist/components/common/icons/cube-3d.js +27 -27
  59. package/dist/components/common/icons/cursor-click.js +27 -27
  60. package/dist/components/common/icons/data-table.js +27 -27
  61. package/dist/components/common/icons/db.js +27 -27
  62. package/dist/components/common/icons/delete.js +27 -27
  63. package/dist/components/common/icons/docs.js +27 -27
  64. package/dist/components/common/icons/drag-n-drop.js +27 -27
  65. package/dist/components/common/icons/draw-polygon.js +27 -27
  66. package/dist/components/common/icons/email.js +27 -27
  67. package/dist/components/common/icons/expand.js +27 -27
  68. package/dist/components/common/icons/eye-seen.js +27 -27
  69. package/dist/components/common/icons/eye-unseen.js +27 -27
  70. package/dist/components/common/icons/file-type.js +23 -16
  71. package/dist/components/common/icons/file.js +27 -27
  72. package/dist/components/common/icons/files.js +24 -26
  73. package/dist/components/common/icons/filter-funnel.js +27 -27
  74. package/dist/components/common/icons/free-window.js +3 -9
  75. package/dist/components/common/icons/gear.js +27 -27
  76. package/dist/components/common/icons/hash.js +27 -27
  77. package/dist/components/common/icons/histogram.js +24 -25
  78. package/dist/components/common/icons/index.js +63 -138
  79. package/dist/components/common/icons/info.js +27 -28
  80. package/dist/components/common/icons/layers.js +27 -27
  81. package/dist/components/common/icons/left-arrow.js +27 -28
  82. package/dist/components/common/icons/legend.js +27 -27
  83. package/dist/components/common/icons/line-chart.js +27 -27
  84. package/dist/components/common/icons/login.js +27 -27
  85. package/dist/components/common/icons/logout.js +27 -27
  86. package/dist/components/common/icons/map-icon.js +27 -28
  87. package/dist/components/common/icons/map.js +27 -28
  88. package/dist/components/common/icons/messages.js +27 -27
  89. package/dist/components/common/icons/minus.js +27 -27
  90. package/dist/components/common/icons/pause.js +27 -27
  91. package/dist/components/common/icons/picture.js +24 -26
  92. package/dist/components/common/icons/pin.js +27 -27
  93. package/dist/components/common/icons/play.js +27 -27
  94. package/dist/components/common/icons/polygon.js +27 -27
  95. package/dist/components/common/icons/rectangle.js +27 -27
  96. package/dist/components/common/icons/reduce.js +27 -27
  97. package/dist/components/common/icons/reset.js +27 -27
  98. package/dist/components/common/icons/rocket.js +27 -27
  99. package/dist/components/common/icons/save.js +27 -27
  100. package/dist/components/common/icons/save2.js +27 -27
  101. package/dist/components/common/icons/search.js +27 -27
  102. package/dist/components/common/icons/settings.js +27 -27
  103. package/dist/components/common/icons/share.js +27 -27
  104. package/dist/components/common/icons/split.js +27 -27
  105. package/dist/components/common/icons/square-select.js +27 -27
  106. package/dist/components/common/icons/swap-horizontal.js +27 -28
  107. package/dist/components/common/icons/table.js +27 -27
  108. package/dist/components/common/icons/trash.js +27 -27
  109. package/dist/components/common/icons/upload.js +27 -27
  110. package/dist/components/common/icons/vert-dots.js +27 -27
  111. package/dist/components/common/icons/vert-three-dots.js +27 -27
  112. package/dist/components/common/icons/warning.js +27 -28
  113. package/dist/components/common/image-preview.js +36 -29
  114. package/dist/components/common/info-helper.js +26 -25
  115. package/dist/components/common/item-selector/accessor.js +3 -5
  116. package/dist/components/common/item-selector/chickleted-input.js +41 -43
  117. package/dist/components/common/item-selector/dropdown-list.js +44 -74
  118. package/dist/components/common/item-selector/item-selector-submenu.js +29 -38
  119. package/dist/components/common/item-selector/item-selector.js +36 -84
  120. package/dist/components/common/item-selector/typeahead.js +37 -83
  121. package/dist/components/common/line-chart.js +39 -36
  122. package/dist/components/common/loading-spinner.js +33 -25
  123. package/dist/components/common/logo.js +24 -22
  124. package/dist/components/common/map-layer-selector.js +23 -16
  125. package/dist/components/common/modal.js +36 -61
  126. package/dist/components/common/portaled.js +56 -97
  127. package/dist/components/common/progress-bar.js +29 -20
  128. package/dist/components/common/range-brush.js +63 -104
  129. package/dist/components/common/range-plot.js +47 -52
  130. package/dist/components/common/range-slider.js +52 -78
  131. package/dist/components/common/slider/mouse-event.js +11 -37
  132. package/dist/components/common/slider/slider-bar-handle.js +31 -39
  133. package/dist/components/common/slider/slider-handle.js +35 -44
  134. package/dist/components/common/slider/slider.js +55 -82
  135. package/dist/components/common/styled-components.js +64 -169
  136. package/dist/components/common/switch.js +22 -16
  137. package/dist/components/common/time-range-slider-time-title.js +24 -19
  138. package/dist/components/common/time-range-slider.js +41 -38
  139. package/dist/components/common/time-slider-marker.js +36 -41
  140. package/dist/components/common/toolbar-item.js +22 -16
  141. package/dist/components/common/toolbar.js +21 -10
  142. package/dist/components/common/vertical-toolbar.js +21 -10
  143. package/dist/components/container.js +49 -70
  144. package/dist/components/context.js +6 -10
  145. package/dist/components/editor/constants.js +6 -8
  146. package/dist/components/editor/editor.js +40 -72
  147. package/dist/components/editor/feature-action-panel.js +35 -43
  148. package/dist/components/editor/feature-styles.js +35 -40
  149. package/dist/components/editor/handle-style.js +35 -37
  150. package/dist/components/filters/components.js +21 -10
  151. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +14 -25
  152. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +14 -21
  153. package/dist/components/filters/filter-panels/new-filter-panel.js +13 -23
  154. package/dist/components/filters/filter-panels/polygon-filter-panel.js +13 -25
  155. package/dist/components/filters/filter-panels/range-filter-panel.js +14 -21
  156. package/dist/components/filters/filter-panels/single-select-filter-panel.js +14 -21
  157. package/dist/components/filters/filter-panels/time-range-filter-panel.js +14 -23
  158. package/dist/components/filters/index.js +11 -17
  159. package/dist/components/filters/multi-select-filter.js +3 -9
  160. package/dist/components/filters/polygon-filter.js +8 -18
  161. package/dist/components/filters/range-filter.js +3 -8
  162. package/dist/components/filters/single-select-filter.js +3 -9
  163. package/dist/components/filters/time-range-filter.js +7 -18
  164. package/dist/components/filters/time-widget.js +41 -51
  165. package/dist/components/geocoder/geocoder.js +95 -128
  166. package/dist/components/geocoder-panel.js +37 -62
  167. package/dist/components/index.js +356 -498
  168. package/dist/components/injector.js +42 -58
  169. package/dist/components/kepler-gl.js +65 -158
  170. package/dist/components/map/coordinate-info.js +4 -13
  171. package/dist/components/map/layer-hover-info.js +40 -48
  172. package/dist/components/map/layer-selector-panel.js +17 -30
  173. package/dist/components/map/locale-panel.js +13 -27
  174. package/dist/components/map/map-control-panel.js +27 -24
  175. package/dist/components/map/map-control-toolbar.js +21 -11
  176. package/dist/components/map/map-control-tooltip.js +4 -11
  177. package/dist/components/map/map-control.js +26 -27
  178. package/dist/components/map/map-draw-panel.js +12 -29
  179. package/dist/components/map/map-legend-panel.js +17 -34
  180. package/dist/components/map/map-legend.js +52 -70
  181. package/dist/components/map/map-popover.js +41 -57
  182. package/dist/components/map/split-map-button.js +13 -25
  183. package/dist/components/map/toggle-3d-button.js +10 -21
  184. package/dist/components/map-container.js +98 -145
  185. package/dist/components/maps-layout.js +24 -26
  186. package/dist/components/modal-container.js +60 -112
  187. package/dist/components/modals/add-map-style-modal.js +37 -67
  188. package/dist/components/modals/cloud-tile.js +36 -36
  189. package/dist/components/modals/data-table-modal.js +51 -81
  190. package/dist/components/modals/delete-data-modal.js +24 -20
  191. package/dist/components/modals/error-display.js +3 -10
  192. package/dist/components/modals/export-data-modal.js +37 -54
  193. package/dist/components/modals/export-image-modal.js +31 -28
  194. package/dist/components/modals/export-map-modal/components.js +27 -27
  195. package/dist/components/modals/export-map-modal/export-html-map.js +27 -27
  196. package/dist/components/modals/export-map-modal/export-json-map.js +22 -22
  197. package/dist/components/modals/export-map-modal/export-map-modal.js +20 -40
  198. package/dist/components/modals/image-modal-container.js +9 -16
  199. package/dist/components/modals/load-data-modal.js +29 -33
  200. package/dist/components/modals/load-storage-map.js +42 -77
  201. package/dist/components/modals/loading-dialog.js +24 -18
  202. package/dist/components/modals/modal-dialog.js +3 -7
  203. package/dist/components/modals/modal-tabs.js +29 -29
  204. package/dist/components/modals/overwrite-map-modal.js +29 -28
  205. package/dist/components/modals/provider-modal-container.js +27 -27
  206. package/dist/components/modals/save-map-modal.js +43 -48
  207. package/dist/components/modals/share-map-modal.js +42 -53
  208. package/dist/components/modals/status-panel.js +24 -25
  209. package/dist/components/modals/storage-map-viewer.js +30 -43
  210. package/dist/components/notification-panel/notification-item.js +33 -47
  211. package/dist/components/notification-panel.js +30 -36
  212. package/dist/components/performance.js +11 -36
  213. package/dist/components/plot-container.js +42 -72
  214. package/dist/components/side-panel/cloud-storage-dropdown.js +4 -10
  215. package/dist/components/side-panel/common/dataset-info.js +20 -13
  216. package/dist/components/side-panel/common/dataset-tag.js +21 -12
  217. package/dist/components/side-panel/common/dataset-title.js +37 -52
  218. package/dist/components/side-panel/common/source-data-catalog.js +26 -22
  219. package/dist/components/side-panel/common/source-data-selector.js +34 -40
  220. package/dist/components/side-panel/custom-panel.js +5 -9
  221. package/dist/components/side-panel/filter-manager.js +18 -29
  222. package/dist/components/side-panel/filter-panel/filter-panel-header.js +30 -30
  223. package/dist/components/side-panel/filter-panel/filter-panel.js +36 -55
  224. package/dist/components/side-panel/interaction-manager.js +5 -12
  225. package/dist/components/side-panel/interaction-panel/brush-config.js +23 -19
  226. package/dist/components/side-panel/interaction-panel/interaction-panel.js +36 -59
  227. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +34 -74
  228. package/dist/components/side-panel/interaction-panel/tooltip-config.js +28 -40
  229. package/dist/components/side-panel/layer-manager.js +51 -82
  230. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +3 -10
  231. package/dist/components/side-panel/layer-panel/color-palette.js +27 -23
  232. package/dist/components/side-panel/layer-panel/color-range-selector.js +52 -98
  233. package/dist/components/side-panel/layer-panel/color-selector.js +36 -67
  234. package/dist/components/side-panel/layer-panel/column-selector.js +26 -25
  235. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +2 -6
  236. package/dist/components/side-panel/layer-panel/custom-palette.js +37 -71
  237. package/dist/components/side-panel/layer-panel/custom-picker.js +32 -45
  238. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +8 -16
  239. package/dist/components/side-panel/layer-panel/hex-column-config.js +12 -34
  240. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +2 -10
  241. package/dist/components/side-panel/layer-panel/layer-column-config.js +31 -27
  242. package/dist/components/side-panel/layer-panel/layer-config-group.js +46 -80
  243. package/dist/components/side-panel/layer-panel/layer-configurator.js +158 -249
  244. package/dist/components/side-panel/layer-panel/layer-panel-header.js +52 -66
  245. package/dist/components/side-panel/layer-panel/layer-panel.js +33 -54
  246. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +28 -22
  247. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +22 -18
  248. package/dist/components/side-panel/layer-panel/layer-type-selector.js +29 -32
  249. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +35 -40
  250. package/dist/components/side-panel/layer-panel/single-color-palette.js +32 -42
  251. package/dist/components/side-panel/layer-panel/text-label-panel.js +31 -42
  252. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +39 -52
  253. package/dist/components/side-panel/layer-panel/vis-config-slider.js +10 -19
  254. package/dist/components/side-panel/layer-panel/vis-config-switch.js +28 -29
  255. package/dist/components/side-panel/map-manager.js +32 -46
  256. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +28 -31
  257. package/dist/components/side-panel/map-style-panel/map-style-selector.js +26 -24
  258. package/dist/components/side-panel/panel-dropdown.js +28 -35
  259. package/dist/components/side-panel/panel-header-action.js +38 -43
  260. package/dist/components/side-panel/panel-header.js +54 -92
  261. package/dist/components/side-panel/panel-tab.js +24 -20
  262. package/dist/components/side-panel/panel-title.js +21 -10
  263. package/dist/components/side-panel/panel-toggle.js +26 -23
  264. package/dist/components/side-panel/side-bar.js +37 -53
  265. package/dist/components/side-panel.js +56 -65
  266. package/dist/connect/keplergl-connect.js +5 -14
  267. package/dist/connect/with-local-selector.js +33 -38
  268. package/dist/constants/action-types.js +5 -6
  269. package/dist/constants/color-palette.js +12 -23
  270. package/dist/constants/color-ranges.js +32 -31
  271. package/dist/constants/custom-color-ranges.js +9 -14
  272. package/dist/constants/default-settings.js +154 -239
  273. package/dist/constants/index.js +95 -103
  274. package/dist/constants/keyevent.js +3 -7
  275. package/dist/constants/tooltip.js +7 -10
  276. package/dist/constants/user-feedbacks.js +5 -6
  277. package/dist/constants/user-guides.js +12 -20
  278. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +29 -32
  279. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +10 -43
  280. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +54 -75
  281. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +29 -32
  282. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +29 -30
  283. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +29 -30
  284. package/dist/deckgl-layers/layer-utils/cluster-utils.js +10 -21
  285. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +75 -132
  286. package/dist/deckgl-layers/layer-utils/shader-utils.js +1 -5
  287. package/dist/deckgl-layers/line-layer/line-layer.js +27 -34
  288. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +26 -30
  289. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +33 -39
  290. package/dist/index.js +4 -23
  291. package/dist/layers/aggregation-layer.js +63 -97
  292. package/dist/layers/arc-layer/arc-layer-icon.js +27 -27
  293. package/dist/layers/arc-layer/arc-layer.js +48 -73
  294. package/dist/layers/base-layer.js +255 -406
  295. package/dist/layers/cluster-layer/cluster-layer-icon.js +27 -27
  296. package/dist/layers/cluster-layer/cluster-layer.js +33 -44
  297. package/dist/layers/default-layer-icon.js +27 -27
  298. package/dist/layers/geojson-layer/geojson-layer-icon.js +27 -27
  299. package/dist/layers/geojson-layer/geojson-layer.js +54 -87
  300. package/dist/layers/geojson-layer/geojson-utils.js +35 -47
  301. package/dist/layers/grid-layer/grid-layer-icon.js +27 -27
  302. package/dist/layers/grid-layer/grid-layer.js +30 -41
  303. package/dist/layers/grid-layer/grid-utils.js +6 -9
  304. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +27 -27
  305. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +48 -80
  306. package/dist/layers/h3-hexagon-layer/h3-utils.js +10 -21
  307. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +27 -27
  308. package/dist/layers/heatmap-layer/heatmap-layer.js +45 -72
  309. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +27 -27
  310. package/dist/layers/hexagon-layer/hexagon-layer.js +30 -42
  311. package/dist/layers/hexagon-layer/hexagon-utils.js +3 -15
  312. package/dist/layers/icon-layer/icon-info-modal.js +23 -26
  313. package/dist/layers/icon-layer/icon-layer-icon.js +27 -27
  314. package/dist/layers/icon-layer/icon-layer.js +59 -97
  315. package/dist/layers/index.js +38 -39
  316. package/dist/layers/layer-factory.js +38 -42
  317. package/dist/layers/layer-text-label.js +7 -17
  318. package/dist/layers/layer-update.js +3 -14
  319. package/dist/layers/line-layer/line-layer-icon.js +27 -27
  320. package/dist/layers/line-layer/line-layer.js +46 -66
  321. package/dist/layers/mapbox-utils.js +38 -51
  322. package/dist/layers/mapboxgl-layer.js +43 -58
  323. package/dist/layers/point-layer/point-layer-icon.js +27 -27
  324. package/dist/layers/point-layer/point-layer.js +57 -90
  325. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +41 -73
  326. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +27 -27
  327. package/dist/layers/s2-geometry-layer/s2-utils.js +5 -11
  328. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +21 -15
  329. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +27 -27
  330. package/dist/layers/scenegraph-layer/scenegraph-layer.js +52 -75
  331. package/dist/layers/trip-layer/trip-info-modal.js +21 -16
  332. package/dist/layers/trip-layer/trip-layer-icon.js +27 -27
  333. package/dist/layers/trip-layer/trip-layer.js +51 -93
  334. package/dist/layers/trip-layer/trip-utils.js +16 -39
  335. package/dist/layers/types.js +3 -6
  336. package/dist/localization/en.js +22 -11
  337. package/dist/localization/formatted-message.js +5 -10
  338. package/dist/localization/index.js +7 -13
  339. package/dist/localization/locales.js +7 -12
  340. package/dist/middleware/index.js +2 -5
  341. package/dist/processors/data-processor.js +113 -177
  342. package/dist/processors/file-handler.js +200 -276
  343. package/dist/processors/index.js +33 -35
  344. package/dist/reducers/combined-updaters.js +35 -46
  345. package/dist/reducers/composer-helpers.js +28 -27
  346. package/dist/reducers/composers.js +25 -12
  347. package/dist/reducers/core.js +13 -46
  348. package/dist/reducers/index.js +24 -38
  349. package/dist/reducers/map-state-updaters.js +53 -65
  350. package/dist/reducers/map-state.js +31 -26
  351. package/dist/reducers/map-style-updaters.js +92 -136
  352. package/dist/reducers/map-style.js +31 -26
  353. package/dist/reducers/provider-state-updaters.js +92 -167
  354. package/dist/reducers/provider-state.js +32 -25
  355. package/dist/reducers/root.js +44 -50
  356. package/dist/reducers/ui-state-updaters.js +102 -202
  357. package/dist/reducers/ui-state.js +32 -26
  358. package/dist/reducers/vis-state-merger.js +102 -166
  359. package/dist/reducers/vis-state-selectors.js +5 -10
  360. package/dist/reducers/vis-state-updaters.js +386 -663
  361. package/dist/reducers/vis-state.js +32 -25
  362. package/dist/schemas/dataset-schema.js +36 -56
  363. package/dist/schemas/index.js +38 -45
  364. package/dist/schemas/map-state-schema.js +28 -24
  365. package/dist/schemas/map-style-schema.js +34 -48
  366. package/dist/schemas/schema-manager.js +44 -62
  367. package/dist/schemas/schema-utils.js +11 -15
  368. package/dist/schemas/schema.js +32 -27
  369. package/dist/schemas/versions.js +5 -9
  370. package/dist/schemas/vis-state-schema.js +109 -309
  371. package/dist/styles/base.js +367 -640
  372. package/dist/styles/index.js +1 -5
  373. package/dist/styles/media-breakpoints.js +21 -9
  374. package/dist/tasks/tasks.js +22 -50
  375. package/dist/templates/export-map-html.js +3 -6
  376. package/dist/utils/aggregate-utils.js +23 -27
  377. package/dist/utils/color-utils.js +36 -38
  378. package/dist/utils/custom-scales.js +1 -7
  379. package/dist/utils/data-scale-utils.js +11 -20
  380. package/dist/utils/data-utils.js +78 -137
  381. package/dist/utils/dataset-utils.js +71 -88
  382. package/dist/utils/dom-to-image.js +15 -93
  383. package/dist/utils/dom-utils.js +34 -116
  384. package/dist/utils/export-utils.js +65 -102
  385. package/dist/utils/filter-utils.js +170 -320
  386. package/dist/utils/gl-utils.js +25 -17
  387. package/dist/utils/gpu-filter-utils.js +46 -59
  388. package/dist/utils/index.js +68 -80
  389. package/dist/utils/interaction-utils.js +26 -50
  390. package/dist/utils/layer-utils.js +58 -63
  391. package/dist/utils/locale-utils.js +23 -21
  392. package/dist/utils/map-info-utils.js +2 -3
  393. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +72 -71
  394. package/dist/utils/map-style-utils/mapbox-utils.js +3 -5
  395. package/dist/utils/mapbox-utils.js +2 -5
  396. package/dist/utils/notifications-utils.js +36 -35
  397. package/dist/utils/observe-dimensions.js +36 -41
  398. package/dist/utils/projection-utils.js +9 -20
  399. package/dist/utils/searcher-utils.js +1 -4
  400. package/dist/utils/split-map-utils.js +36 -32
  401. package/dist/utils/table-utils/data-container-utils.js +27 -23
  402. package/dist/utils/table-utils/data-row.js +2 -13
  403. package/dist/utils/table-utils/index.js +1 -2
  404. package/dist/utils/table-utils/indexed-data-container.js +65 -84
  405. package/dist/utils/table-utils/kepler-table.js +83 -126
  406. package/dist/utils/table-utils/row-data-container.js +62 -87
  407. package/dist/utils/utils.js +51 -69
  408. package/package.json +4 -3
  409. package/src/components/kepler-gl.d.ts +0 -1
  410. package/src/components/kepler-gl.js +0 -7
  411. package/src/components/map-container.js +0 -3
  412. package/src/components/modal-container.d.ts +0 -1
  413. package/src/components/modal-container.js +0 -2
  414. package/src/components/modals/add-map-style-modal.js +0 -3
  415. package/src/utils/gl-utils.js +2 -4
  416. package/CHANGELOG.md +0 -954
@@ -1,110 +1,98 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports["default"] = exports.visStateSchema = exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.propertiesV1 = exports.propertiesV0 = exports.filterPropsV1 = exports.SplitMapsSchema = exports.DimensionFieldSchema = exports.filterPropsV0 = exports.InteractionSchemaV1 = exports.FilterSchemaV0 = exports.LayerSchemaV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.dimensionPropsV0 = void 0;
9
-
7
+ exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.visStateSchema = exports.propertiesV1 = exports.propertiesV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.filterPropsV1 = exports.filterPropsV0 = exports.dimensionPropsV0 = exports["default"] = exports.SplitMapsSchema = exports.LayerSchemaV0 = exports.InteractionSchemaV1 = exports.FilterSchemaV0 = exports.DimensionFieldSchema = void 0;
10
8
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
-
12
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
12
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
13
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
26
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
-
28
17
  var _lodash = _interopRequireDefault(require("lodash.pick"));
29
-
30
18
  var _versions = require("./versions");
31
-
32
19
  var _filterUtils = require("../utils/filter-utils");
33
-
34
20
  var _layerFactory = require("../layers/layer-factory");
35
-
36
21
  var _schema = _interopRequireDefault(require("./schema"));
37
-
38
22
  var _lodash2 = _interopRequireDefault(require("lodash.clonedeep"));
39
-
40
23
  var _dataUtils = require("../utils/data-utils");
41
-
42
- var _visStateSchema;
43
-
44
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
45
-
46
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
47
-
48
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
49
-
50
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
-
24
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
27
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // Copyright (c) 2022 Uber Technologies, Inc.
28
+ //
29
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
30
+ // of this software and associated documentation files (the "Software"), to deal
31
+ // in the Software without restriction, including without limitation the rights
32
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
33
+ // copies of the Software, and to permit persons to whom the Software is
34
+ // furnished to do so, subject to the following conditions:
35
+ //
36
+ // The above copyright notice and this permission notice shall be included in
37
+ // all copies or substantial portions of the Software.
38
+ //
39
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
40
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
42
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
43
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
44
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
45
+ // THE SOFTWARE.
52
46
  /**
53
47
  * V0 Schema
54
48
  */
55
- var dimensionPropsV0 = ['name', 'type']; // in v0 geojson there is only sizeField
49
+
50
+ var dimensionPropsV0 = exports.dimensionPropsV0 = ['name', 'type'];
51
+
52
+ // in v0 geojson there is only sizeField
53
+
56
54
  // in v1 geojson
57
55
  // stroke base on -> sizeField
58
56
  // height based on -> heightField
59
57
  // radius based on -> radiusField
60
58
  // here we make our wiredst guess on which channel sizeField belongs to
61
-
62
- exports.dimensionPropsV0 = dimensionPropsV0;
63
-
64
59
  function geojsonSizeFieldV0ToV1(config) {
65
60
  var defaultRaiuds = 10;
66
- var defaultRadiusRange = [0, 50]; // if extruded, sizeField is most likely used for height
61
+ var defaultRadiusRange = [0, 50];
67
62
 
63
+ // if extruded, sizeField is most likely used for height
68
64
  if (config.visConfig.extruded) {
69
65
  return 'heightField';
70
- } // if show stroke enabled, sizeField is most likely used for stroke
71
-
66
+ }
72
67
 
68
+ // if show stroke enabled, sizeField is most likely used for stroke
73
69
  if (config.visConfig.stroked) {
74
70
  return 'sizeField';
75
- } // if radius changed, or radius Range Changed, sizeField is most likely used for radius
76
- // this is the most unreliable guess, that's why we put it in the end
77
-
71
+ }
78
72
 
73
+ // if radius changed, or radius Range Changed, sizeField is most likely used for radius
74
+ // this is the most unreliable guess, that's why we put it in the end
79
75
  if (config.visConfig.radius !== defaultRaiuds || config.visConfig.radiusRange.some(function (d, i) {
80
76
  return d !== defaultRadiusRange[i];
81
77
  })) {
82
78
  return 'radiusField';
83
79
  }
84
-
85
80
  return 'sizeField';
86
- } // convert v0 to v1 layer config
87
-
81
+ }
88
82
 
83
+ // convert v0 to v1 layer config
89
84
  var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
90
85
  (0, _inherits2["default"])(DimensionFieldSchemaV0, _Schema);
91
-
92
- var _super = _createSuper(DimensionFieldSchemaV0);
93
-
94
86
  function DimensionFieldSchemaV0() {
95
87
  var _this;
96
-
97
88
  (0, _classCallCheck2["default"])(this, DimensionFieldSchemaV0);
98
-
99
89
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
100
90
  args[_key] = arguments[_key];
101
91
  }
102
-
103
- _this = _super.call.apply(_super, [this].concat(args));
92
+ _this = _callSuper(this, DimensionFieldSchemaV0, [].concat(args));
104
93
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "version", _versions.VERSIONS.v0);
105
94
  return _this;
106
95
  }
107
-
108
96
  (0, _createClass2["default"])(DimensionFieldSchemaV0, [{
109
97
  key: "save",
110
98
  value: function save(field) {
@@ -115,16 +103,13 @@ var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
115
103
  key: "load",
116
104
  value: function load(field, parents, accumulated) {
117
105
  var _parents$slice = parents.slice(-1),
118
- _parents$slice2 = (0, _slicedToArray2["default"])(_parents$slice, 1),
119
- config = _parents$slice2[0];
120
-
106
+ _parents$slice2 = (0, _slicedToArray2["default"])(_parents$slice, 1),
107
+ config = _parents$slice2[0];
121
108
  var fieldName = this.key;
122
-
123
109
  if (config.type === 'geojson' && this.key === 'sizeField' && field) {
124
110
  fieldName = geojsonSizeFieldV0ToV1(config);
125
- } // fold into visualChannels to be load by VisualChannelSchemaV1
126
-
127
-
111
+ }
112
+ // fold into visualChannels to be load by VisualChannelSchemaV1
128
113
  return {
129
114
  visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, fieldName, field))
130
115
  };
@@ -132,26 +117,18 @@ var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
132
117
  }]);
133
118
  return DimensionFieldSchemaV0;
134
119
  }(_schema["default"]);
135
-
136
120
  var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
137
121
  (0, _inherits2["default"])(DimensionScaleSchemaV0, _Schema2);
138
-
139
- var _super2 = _createSuper(DimensionScaleSchemaV0);
140
-
141
122
  function DimensionScaleSchemaV0() {
142
123
  var _this2;
143
-
144
124
  (0, _classCallCheck2["default"])(this, DimensionScaleSchemaV0);
145
-
146
125
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
147
126
  args[_key2] = arguments[_key2];
148
127
  }
149
-
150
- _this2 = _super2.call.apply(_super2, [this].concat(args));
128
+ _this2 = _callSuper(this, DimensionScaleSchemaV0, [].concat(args));
151
129
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "version", _versions.VERSIONS.v0);
152
130
  return _this2;
153
131
  }
154
-
155
132
  (0, _createClass2["default"])(DimensionScaleSchemaV0, [{
156
133
  key: "save",
157
134
  value: function save(scale) {
@@ -161,16 +138,14 @@ var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
161
138
  key: "load",
162
139
  value: function load(scale, parents, accumulated) {
163
140
  var _parents$slice3 = parents.slice(-1),
164
- _parents$slice4 = (0, _slicedToArray2["default"])(_parents$slice3, 1),
165
- config = _parents$slice4[0]; // fold into visualChannels to be load by VisualChannelSchemaV1
166
-
167
-
141
+ _parents$slice4 = (0, _slicedToArray2["default"])(_parents$slice3, 1),
142
+ config = _parents$slice4[0];
143
+ // fold into visualChannels to be load by VisualChannelSchemaV1
168
144
  if (this.key === 'sizeScale' && config.type === 'geojson') {
169
145
  // sizeScale now split into radiusScale, heightScale
170
146
  // no user customization, just use default
171
147
  return {};
172
148
  }
173
-
174
149
  return {
175
150
  visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, this.key, scale))
176
151
  };
@@ -178,27 +153,18 @@ var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
178
153
  }]);
179
154
  return DimensionScaleSchemaV0;
180
155
  }(_schema["default"]); // used to convert v0 to v1 layer config
181
-
182
-
183
156
  var LayerConfigSchemaV0 = /*#__PURE__*/function (_Schema3) {
184
157
  (0, _inherits2["default"])(LayerConfigSchemaV0, _Schema3);
185
-
186
- var _super3 = _createSuper(LayerConfigSchemaV0);
187
-
188
158
  function LayerConfigSchemaV0() {
189
159
  var _this3;
190
-
191
160
  (0, _classCallCheck2["default"])(this, LayerConfigSchemaV0);
192
-
193
161
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
194
162
  args[_key3] = arguments[_key3];
195
163
  }
196
-
197
- _this3 = _super3.call.apply(_super3, [this].concat(args));
164
+ _this3 = _callSuper(this, LayerConfigSchemaV0, [].concat(args));
198
165
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "version", _versions.VERSIONS.v0);
199
166
  return _this3;
200
167
  }
201
-
202
168
  (0, _createClass2["default"])(LayerConfigSchemaV0, [{
203
169
  key: "load",
204
170
  value: function load(saved, parents, accumulated) {
@@ -211,27 +177,18 @@ var LayerConfigSchemaV0 = /*#__PURE__*/function (_Schema3) {
211
177
  return LayerConfigSchemaV0;
212
178
  }(_schema["default"]); // used to convert v0 to v1 layer columns
213
179
  // only return column value for each column
214
-
215
-
216
180
  var LayerColumnsSchemaV0 = /*#__PURE__*/function (_Schema4) {
217
181
  (0, _inherits2["default"])(LayerColumnsSchemaV0, _Schema4);
218
-
219
- var _super4 = _createSuper(LayerColumnsSchemaV0);
220
-
221
182
  function LayerColumnsSchemaV0() {
222
183
  var _this4;
223
-
224
184
  (0, _classCallCheck2["default"])(this, LayerColumnsSchemaV0);
225
-
226
185
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
227
186
  args[_key4] = arguments[_key4];
228
187
  }
229
-
230
- _this4 = _super4.call.apply(_super4, [this].concat(args));
188
+ _this4 = _callSuper(this, LayerColumnsSchemaV0, [].concat(args));
231
189
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this4), "version", _versions.VERSIONS.v0);
232
190
  return _this4;
233
191
  }
234
-
235
192
  (0, _createClass2["default"])(LayerColumnsSchemaV0, [{
236
193
  key: "load",
237
194
  value: function load(saved, parents, accumulated) {
@@ -247,27 +204,18 @@ var LayerColumnsSchemaV0 = /*#__PURE__*/function (_Schema4) {
247
204
  }]);
248
205
  return LayerColumnsSchemaV0;
249
206
  }(_schema["default"]); // used to convert v0 to v1 layer config.visConfig
250
-
251
-
252
207
  var LayerConfigToVisConfigSchemaV0 = /*#__PURE__*/function (_Schema5) {
253
208
  (0, _inherits2["default"])(LayerConfigToVisConfigSchemaV0, _Schema5);
254
-
255
- var _super5 = _createSuper(LayerConfigToVisConfigSchemaV0);
256
-
257
209
  function LayerConfigToVisConfigSchemaV0() {
258
210
  var _this5;
259
-
260
211
  (0, _classCallCheck2["default"])(this, LayerConfigToVisConfigSchemaV0);
261
-
262
212
  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
263
213
  args[_key5] = arguments[_key5];
264
214
  }
265
-
266
- _this5 = _super5.call.apply(_super5, [this].concat(args));
215
+ _this5 = _callSuper(this, LayerConfigToVisConfigSchemaV0, [].concat(args));
267
216
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this5), "version", _versions.VERSIONS.v0);
268
217
  return _this5;
269
218
  }
270
-
271
219
  (0, _createClass2["default"])(LayerConfigToVisConfigSchemaV0, [{
272
220
  key: "load",
273
221
  value: function load(saved, parents, accumulated) {
@@ -282,41 +230,31 @@ var LayerConfigToVisConfigSchemaV0 = /*#__PURE__*/function (_Schema5) {
282
230
  }]);
283
231
  return LayerConfigToVisConfigSchemaV0;
284
232
  }(_schema["default"]);
285
-
286
233
  var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
287
234
  (0, _inherits2["default"])(LayerVisConfigSchemaV0, _Schema6);
288
-
289
- var _super6 = _createSuper(LayerVisConfigSchemaV0);
290
-
291
235
  function LayerVisConfigSchemaV0() {
292
236
  var _this6;
293
-
294
237
  (0, _classCallCheck2["default"])(this, LayerVisConfigSchemaV0);
295
-
296
238
  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
297
239
  args[_key6] = arguments[_key6];
298
240
  }
299
-
300
- _this6 = _super6.call.apply(_super6, [this].concat(args));
241
+ _this6 = _callSuper(this, LayerVisConfigSchemaV0, [].concat(args));
301
242
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this6), "version", _versions.VERSIONS.v0);
302
243
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this6), "key", 'visConfig');
303
244
  return _this6;
304
245
  }
305
-
306
246
  (0, _createClass2["default"])(LayerVisConfigSchemaV0, [{
307
247
  key: "load",
308
248
  value: function load(visConfig, parents, accumulator) {
309
249
  var _parents$slice5 = parents.slice(-1),
310
- _parents$slice6 = (0, _slicedToArray2["default"])(_parents$slice5, 1),
311
- config = _parents$slice6[0];
312
-
250
+ _parents$slice6 = (0, _slicedToArray2["default"])(_parents$slice5, 1),
251
+ config = _parents$slice6[0];
313
252
  var rename = {
314
253
  geojson: {
315
254
  extruded: 'enable3d',
316
255
  elevationRange: 'heightRange'
317
256
  }
318
257
  };
319
-
320
258
  if (config.type in rename) {
321
259
  var propToRename = rename[config.type];
322
260
  return {
@@ -327,7 +265,6 @@ var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
327
265
  })
328
266
  };
329
267
  }
330
-
331
268
  return {
332
269
  config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
333
270
  visConfig: visConfig
@@ -337,26 +274,18 @@ var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
337
274
  }]);
338
275
  return LayerVisConfigSchemaV0;
339
276
  }(_schema["default"]);
340
-
341
277
  var LayerConfigSchemaDeleteV0 = /*#__PURE__*/function (_Schema7) {
342
278
  (0, _inherits2["default"])(LayerConfigSchemaDeleteV0, _Schema7);
343
-
344
- var _super7 = _createSuper(LayerConfigSchemaDeleteV0);
345
-
346
279
  function LayerConfigSchemaDeleteV0() {
347
280
  var _this7;
348
-
349
281
  (0, _classCallCheck2["default"])(this, LayerConfigSchemaDeleteV0);
350
-
351
282
  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
352
283
  args[_key7] = arguments[_key7];
353
284
  }
354
-
355
- _this7 = _super7.call.apply(_super7, [this].concat(args));
285
+ _this7 = _callSuper(this, LayerConfigSchemaDeleteV0, [].concat(args));
356
286
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this7), "version", _versions.VERSIONS.v0);
357
287
  return _this7;
358
288
  }
359
-
360
289
  (0, _createClass2["default"])(LayerConfigSchemaDeleteV0, [{
361
290
  key: "load",
362
291
  value: function load(value) {
@@ -375,9 +304,7 @@ var LayerConfigSchemaDeleteV0 = /*#__PURE__*/function (_Schema7) {
375
304
  * - enable3d, colorAggregation and sizeAggregation are moved into visConfig
376
305
  * - GeojsonLayer - added height, radius specific properties
377
306
  */
378
-
379
-
380
- var layerPropsV0 = {
307
+ var layerPropsV0 = exports.layerPropsV0 = {
381
308
  id: null,
382
309
  type: null,
383
310
  // move into layer.config
@@ -434,22 +361,16 @@ var layerPropsV0 = {
434
361
  // delete
435
362
  isAggregated: new LayerConfigSchemaDeleteV0()
436
363
  };
364
+
437
365
  /**
438
366
  * V1 Schema
439
367
  */
440
-
441
- exports.layerPropsV0 = layerPropsV0;
442
-
443
368
  var ColumnSchemaV1 = /*#__PURE__*/function (_Schema8) {
444
369
  (0, _inherits2["default"])(ColumnSchemaV1, _Schema8);
445
-
446
- var _super8 = _createSuper(ColumnSchemaV1);
447
-
448
370
  function ColumnSchemaV1() {
449
371
  (0, _classCallCheck2["default"])(this, ColumnSchemaV1);
450
- return _super8.apply(this, arguments);
372
+ return _callSuper(this, ColumnSchemaV1, arguments);
451
373
  }
452
-
453
374
  (0, _createClass2["default"])(ColumnSchemaV1, [{
454
375
  key: "save",
455
376
  value: function save(columns, state) {
@@ -469,17 +390,12 @@ var ColumnSchemaV1 = /*#__PURE__*/function (_Schema8) {
469
390
  }]);
470
391
  return ColumnSchemaV1;
471
392
  }(_schema["default"]);
472
-
473
393
  var TextLabelSchemaV1 = /*#__PURE__*/function (_Schema9) {
474
394
  (0, _inherits2["default"])(TextLabelSchemaV1, _Schema9);
475
-
476
- var _super9 = _createSuper(TextLabelSchemaV1);
477
-
478
395
  function TextLabelSchemaV1() {
479
396
  (0, _classCallCheck2["default"])(this, TextLabelSchemaV1);
480
- return _super9.apply(this, arguments);
397
+ return _callSuper(this, TextLabelSchemaV1, arguments);
481
398
  }
482
-
483
399
  (0, _createClass2["default"])(TextLabelSchemaV1, [{
484
400
  key: "save",
485
401
  value: function save(textLabel) {
@@ -499,17 +415,14 @@ var TextLabelSchemaV1 = /*#__PURE__*/function (_Schema9) {
499
415
  }]);
500
416
  return TextLabelSchemaV1;
501
417
  }(_schema["default"]);
502
-
503
418
  var visualChannelModificationV1 = {
504
419
  geojson: function geojson(vc, parents, accumulator) {
505
420
  var _parents$slice7 = parents.slice(-1),
506
- _parents$slice8 = (0, _slicedToArray2["default"])(_parents$slice7, 1),
507
- layer = _parents$slice8[0];
508
-
509
- var isOld = !vc.hasOwnProperty('strokeColorField'); // make our best guess if this geojson layer contains point
510
-
421
+ _parents$slice8 = (0, _slicedToArray2["default"])(_parents$slice7, 1),
422
+ layer = _parents$slice8[0];
423
+ var isOld = !vc.hasOwnProperty('strokeColorField');
424
+ // make our best guess if this geojson layer contains point
511
425
  var isPoint = vc.radiusField || layer.config.visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
512
-
513
426
  if (isOld && !isPoint && layer.config.visConfig.stroked) {
514
427
  // if stroked is true, copy color config to stroke color config
515
428
  return {
@@ -517,37 +430,29 @@ var visualChannelModificationV1 = {
517
430
  strokeColorScale: vc.colorScale
518
431
  };
519
432
  }
520
-
521
433
  return {};
522
434
  }
523
435
  };
524
436
  /**
525
437
  * V1: save [field]: {name, type}, [scale]: '' for each channel
526
438
  */
527
-
528
439
  var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
529
440
  (0, _inherits2["default"])(VisualChannelSchemaV1, _Schema10);
530
-
531
- var _super10 = _createSuper(VisualChannelSchemaV1);
532
-
533
441
  function VisualChannelSchemaV1() {
534
442
  (0, _classCallCheck2["default"])(this, VisualChannelSchemaV1);
535
- return _super10.apply(this, arguments);
443
+ return _callSuper(this, VisualChannelSchemaV1, arguments);
536
444
  }
537
-
538
445
  (0, _createClass2["default"])(VisualChannelSchemaV1, [{
539
446
  key: "save",
540
447
  value: function save(visualChannels, parents) {
541
448
  // only save field and scale of each channel
542
449
  var _parents$slice9 = parents.slice(-1),
543
- _parents$slice10 = (0, _slicedToArray2["default"])(_parents$slice9, 1),
544
- layer = _parents$slice10[0];
545
-
546
- return (0, _defineProperty2["default"])({}, this.key, Object.keys(visualChannels).reduce( // save channel to null if didn't select any field
450
+ _parents$slice10 = (0, _slicedToArray2["default"])(_parents$slice9, 1),
451
+ layer = _parents$slice10[0];
452
+ return (0, _defineProperty2["default"])({}, this.key, Object.keys(visualChannels).reduce(
453
+ // save channel to null if didn't select any field
547
454
  function (accu, key) {
548
- var _objectSpread8;
549
-
550
- return _objectSpread(_objectSpread({}, accu), {}, (_objectSpread8 = {}, (0, _defineProperty2["default"])(_objectSpread8, visualChannels[key].field, layer.config[visualChannels[key].field] ? (0, _lodash["default"])(layer.config[visualChannels[key].field], ['name', 'type', 'colorColumn']) : null), (0, _defineProperty2["default"])(_objectSpread8, visualChannels[key].scale, layer.config[visualChannels[key].scale]), _objectSpread8));
455
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, visualChannels[key].field, layer.config[visualChannels[key].field] ? (0, _lodash["default"])(layer.config[visualChannels[key].field], ['name', 'type', 'colorColumn']) : null), visualChannels[key].scale, layer.config[visualChannels[key].scale]));
551
456
  }, {}));
552
457
  }
553
458
  }, {
@@ -555,9 +460,8 @@ var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
555
460
  value: function load(vc, parents, accumulator) {
556
461
  // fold channels into config
557
462
  var _parents$slice11 = parents.slice(-1),
558
- _parents$slice12 = (0, _slicedToArray2["default"])(_parents$slice11, 1),
559
- layer = _parents$slice12[0];
560
-
463
+ _parents$slice12 = (0, _slicedToArray2["default"])(_parents$slice11, 1),
464
+ layer = _parents$slice12[0];
561
465
  var modified = visualChannelModificationV1[layer.type] ? visualChannelModificationV1[layer.type](vc, parents, accumulator) : {};
562
466
  return _objectSpread(_objectSpread({}, accumulator), {}, {
563
467
  config: _objectSpread(_objectSpread(_objectSpread({}, accumulator.config || {}), vc), modified)
@@ -569,18 +473,12 @@ var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
569
473
  /**
570
474
  * V1: save [channel]: [{ label, color }, ...] for legend
571
475
  */
572
-
573
-
574
476
  var LegendSettingsV1 = /*#__PURE__*/function (_Schema11) {
575
477
  (0, _inherits2["default"])(LegendSettingsV1, _Schema11);
576
-
577
- var _super11 = _createSuper(LegendSettingsV1);
578
-
579
478
  function LegendSettingsV1() {
580
479
  (0, _classCallCheck2["default"])(this, LegendSettingsV1);
581
- return _super11.apply(this, arguments);
480
+ return _callSuper(this, LegendSettingsV1, arguments);
582
481
  }
583
-
584
482
  (0, _createClass2["default"])(LegendSettingsV1, [{
585
483
  key: "save",
586
484
  value: function save(legendSettings, parents) {
@@ -597,22 +495,17 @@ var LegendSettingsV1 = /*#__PURE__*/function (_Schema11) {
597
495
  }]);
598
496
  return LegendSettingsV1;
599
497
  }(_schema["default"]);
600
-
601
498
  var visConfigModificationV1 = {
602
499
  point: function point(visConfig, parents, accumulated) {
603
500
  var modified = {};
604
-
605
501
  var _parents$slice13 = parents.slice(-2, -1),
606
- _parents$slice14 = (0, _slicedToArray2["default"])(_parents$slice13, 1),
607
- layer = _parents$slice14[0];
608
-
502
+ _parents$slice14 = (0, _slicedToArray2["default"])(_parents$slice13, 1),
503
+ layer = _parents$slice14[0];
609
504
  var isOld = !visConfig.hasOwnProperty('filled') && !visConfig.strokeColor && !visConfig.strokeColorRange;
610
-
611
505
  if (isOld) {
612
506
  // color color & color range to stroke color
613
507
  modified.strokeColor = layer.config.color;
614
508
  modified.strokeColorRange = (0, _lodash2["default"])(visConfig.colorRange);
615
-
616
509
  if (visConfig.outline) {
617
510
  // point layer now supports both outline and fill
618
511
  // for older schema where filled has not been added to point layer
@@ -620,63 +513,48 @@ var visConfigModificationV1 = {
620
513
  modified.filled = false;
621
514
  }
622
515
  }
623
-
624
516
  return modified;
625
517
  },
626
518
  geojson: function geojson(visConfig, parents, accumulated) {
627
519
  // is points?
628
520
  var modified = {};
629
-
630
521
  var _parents$slice15 = parents.slice(-2, -1),
631
- _parents$slice16 = (0, _slicedToArray2["default"])(_parents$slice15, 1),
632
- layer = _parents$slice16[0];
633
-
634
- var isOld = layer.visualChannels && !layer.visualChannels.hasOwnProperty('strokeColorField') && !visConfig.strokeColor && !visConfig.strokeColorRange; // make our best guess if this geojson layer contains point
635
-
522
+ _parents$slice16 = (0, _slicedToArray2["default"])(_parents$slice15, 1),
523
+ layer = _parents$slice16[0];
524
+ var isOld = layer.visualChannels && !layer.visualChannels.hasOwnProperty('strokeColorField') && !visConfig.strokeColor && !visConfig.strokeColorRange;
525
+ // make our best guess if this geojson layer contains point
636
526
  var isPoint = layer.visualChannels && layer.visualChannels.radiusField || visConfig && visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
637
-
638
527
  if (isOld) {
639
528
  // color color & color range to stroke color
640
529
  modified.strokeColor = layer.config.color;
641
530
  modified.strokeColorRange = (0, _lodash2["default"])(visConfig.colorRange);
642
-
643
531
  if (isPoint) {
644
532
  // if is point, set stroke to false
645
533
  modified.filled = true;
646
534
  modified.stroked = false;
647
535
  }
648
536
  }
649
-
650
537
  return modified;
651
538
  }
652
539
  };
653
-
654
540
  var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema12) {
655
541
  (0, _inherits2["default"])(VisConfigSchemaV1, _Schema12);
656
-
657
- var _super12 = _createSuper(VisConfigSchemaV1);
658
-
659
542
  function VisConfigSchemaV1() {
660
543
  var _this8;
661
-
662
544
  (0, _classCallCheck2["default"])(this, VisConfigSchemaV1);
663
-
664
545
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
665
546
  args[_key8] = arguments[_key8];
666
547
  }
667
-
668
- _this8 = _super12.call.apply(_super12, [this].concat(args));
548
+ _this8 = _callSuper(this, VisConfigSchemaV1, [].concat(args));
669
549
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this8), "key", 'visConfig');
670
550
  return _this8;
671
551
  }
672
-
673
552
  (0, _createClass2["default"])(VisConfigSchemaV1, [{
674
553
  key: "load",
675
554
  value: function load(visConfig, parents, accumulated) {
676
555
  var _parents$slice17 = parents.slice(-2, -1),
677
- _parents$slice18 = (0, _slicedToArray2["default"])(_parents$slice17, 1),
678
- layer = _parents$slice18[0];
679
-
556
+ _parents$slice18 = (0, _slicedToArray2["default"])(_parents$slice17, 1),
557
+ layer = _parents$slice18[0];
680
558
  var modified = visConfigModificationV1[layer.type] ? visConfigModificationV1[layer.type](visConfig, parents, accumulated) : {};
681
559
  return {
682
560
  visConfig: _objectSpread(_objectSpread({}, visConfig), modified)
@@ -685,8 +563,7 @@ var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema12) {
685
563
  }]);
686
564
  return VisConfigSchemaV1;
687
565
  }(_schema["default"]);
688
-
689
- var layerPropsV1 = {
566
+ var layerPropsV1 = exports.layerPropsV1 = {
690
567
  id: null,
691
568
  type: null,
692
569
  config: new _schema["default"]({
@@ -722,44 +599,31 @@ var layerPropsV1 = {
722
599
  key: 'visualChannels'
723
600
  })
724
601
  };
725
- exports.layerPropsV1 = layerPropsV1;
726
-
727
- var LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
602
+ var LayerSchemaV0 = exports.LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
728
603
  (0, _inherits2["default"])(LayerSchemaV0, _Schema13);
729
-
730
- var _super13 = _createSuper(LayerSchemaV0);
731
-
732
604
  function LayerSchemaV0() {
733
605
  var _this9;
734
-
735
606
  (0, _classCallCheck2["default"])(this, LayerSchemaV0);
736
-
737
607
  for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
738
608
  args[_key9] = arguments[_key9];
739
609
  }
740
-
741
- _this9 = _super13.call.apply(_super13, [this].concat(args));
610
+ _this9 = _callSuper(this, LayerSchemaV0, [].concat(args));
742
611
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this9), "key", 'layers');
743
612
  return _this9;
744
613
  }
745
-
746
614
  (0, _createClass2["default"])(LayerSchemaV0, [{
747
615
  key: "save",
748
616
  value: function save(layers, parents) {
749
617
  var _this10 = this;
750
-
751
618
  var _parents$slice19 = parents.slice(-1),
752
- _parents$slice20 = (0, _slicedToArray2["default"])(_parents$slice19, 1),
753
- visState = _parents$slice20[0];
754
-
619
+ _parents$slice20 = (0, _slicedToArray2["default"])(_parents$slice19, 1),
620
+ visState = _parents$slice20[0];
755
621
  return (0, _defineProperty2["default"])({}, this.key, visState.layerOrder.reduce(function (saved, index) {
756
622
  // save layers according to their rendering order
757
623
  var layer = layers[index];
758
-
759
624
  if (layer.isValidToSave()) {
760
625
  saved.push(_this10.savePropertiesOrApplySchema(layer).layers);
761
626
  }
762
-
763
627
  return saved;
764
628
  }, []));
765
629
  }
@@ -767,7 +631,6 @@ var LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
767
631
  key: "load",
768
632
  value: function load(layers) {
769
633
  var _this11 = this;
770
-
771
634
  return (0, _defineProperty2["default"])({}, this.key, layers.map(function (layer) {
772
635
  return _this11.loadPropertiesOrApplySchema(layer, layers).layers;
773
636
  }));
@@ -775,33 +638,22 @@ var LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
775
638
  }]);
776
639
  return LayerSchemaV0;
777
640
  }(_schema["default"]);
778
-
779
- exports.LayerSchemaV0 = LayerSchemaV0;
780
-
781
- var FilterSchemaV0 = /*#__PURE__*/function (_Schema14) {
641
+ var FilterSchemaV0 = exports.FilterSchemaV0 = /*#__PURE__*/function (_Schema14) {
782
642
  (0, _inherits2["default"])(FilterSchemaV0, _Schema14);
783
-
784
- var _super14 = _createSuper(FilterSchemaV0);
785
-
786
643
  function FilterSchemaV0() {
787
644
  var _this12;
788
-
789
645
  (0, _classCallCheck2["default"])(this, FilterSchemaV0);
790
-
791
646
  for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
792
647
  args[_key10] = arguments[_key10];
793
648
  }
794
-
795
- _this12 = _super14.call.apply(_super14, [this].concat(args));
649
+ _this12 = _callSuper(this, FilterSchemaV0, [].concat(args));
796
650
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this12), "key", 'filters');
797
651
  return _this12;
798
652
  }
799
-
800
653
  (0, _createClass2["default"])(FilterSchemaV0, [{
801
654
  key: "save",
802
655
  value: function save(filters) {
803
656
  var _this13 = this;
804
-
805
657
  return {
806
658
  filters: filters.filter(_filterUtils.isValidFilterValue).map(function (filter) {
807
659
  return _this13.savePropertiesOrApplySchema(filter).filters;
@@ -818,29 +670,19 @@ var FilterSchemaV0 = /*#__PURE__*/function (_Schema14) {
818
670
  }]);
819
671
  return FilterSchemaV0;
820
672
  }(_schema["default"]);
821
-
822
- exports.FilterSchemaV0 = FilterSchemaV0;
823
673
  var interactionPropsV0 = ['tooltip', 'brush'];
824
-
825
674
  var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) {
826
675
  (0, _inherits2["default"])(InteractionSchemaV0, _Schema15);
827
-
828
- var _super15 = _createSuper(InteractionSchemaV0);
829
-
830
676
  function InteractionSchemaV0() {
831
677
  var _this14;
832
-
833
678
  (0, _classCallCheck2["default"])(this, InteractionSchemaV0);
834
-
835
679
  for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
836
680
  args[_key11] = arguments[_key11];
837
681
  }
838
-
839
- _this14 = _super15.call.apply(_super15, [this].concat(args));
682
+ _this14 = _callSuper(this, InteractionSchemaV0, [].concat(args));
840
683
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "key", 'interactionConfig');
841
684
  return _this14;
842
685
  }
843
-
844
686
  (0, _createClass2["default"])(InteractionSchemaV0, [{
845
687
  key: "save",
846
688
  value: function save(interactionConfig) {
@@ -862,28 +704,19 @@ var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) {
862
704
  }]);
863
705
  return InteractionSchemaV0;
864
706
  }(_schema["default"]);
865
-
866
707
  var interactionPropsV1 = [].concat(interactionPropsV0, ['geocoder', 'coordinate']);
867
-
868
- var InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
708
+ var InteractionSchemaV1 = exports.InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
869
709
  (0, _inherits2["default"])(InteractionSchemaV1, _Schema16);
870
-
871
- var _super16 = _createSuper(InteractionSchemaV1);
872
-
873
710
  function InteractionSchemaV1() {
874
711
  var _this15;
875
-
876
712
  (0, _classCallCheck2["default"])(this, InteractionSchemaV1);
877
-
878
713
  for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
879
714
  args[_key12] = arguments[_key12];
880
715
  }
881
-
882
- _this15 = _super16.call.apply(_super16, [this].concat(args));
716
+ _this15 = _callSuper(this, InteractionSchemaV1, [].concat(args));
883
717
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this15), "key", 'interactionConfig');
884
718
  return _this15;
885
719
  }
886
-
887
720
  (0, _createClass2["default"])(InteractionSchemaV1, [{
888
721
  key: "save",
889
722
  value: function save(interactionConfig) {
@@ -898,16 +731,13 @@ var InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
898
731
  key: "load",
899
732
  value: function load(interactionConfig) {
900
733
  var _this16 = this;
901
-
902
734
  var modifiedConfig = interactionConfig;
903
735
  Object.keys(interactionConfig).forEach(function (configType) {
904
736
  if (configType === 'tooltip') {
905
737
  var fieldsToShow = modifiedConfig[configType].fieldsToShow;
906
-
907
738
  if (!(0, _dataUtils.notNullorUndefined)(fieldsToShow)) {
908
739
  return (0, _defineProperty2["default"])({}, _this16.key, modifiedConfig);
909
740
  }
910
-
911
741
  Object.keys(fieldsToShow).forEach(function (key) {
912
742
  fieldsToShow[key] = fieldsToShow[key].map(function (fieldData) {
913
743
  if (!fieldData.name) {
@@ -916,12 +746,10 @@ var InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
916
746
  format: null
917
747
  };
918
748
  }
919
-
920
749
  return fieldData;
921
750
  });
922
751
  });
923
752
  }
924
-
925
753
  return;
926
754
  });
927
755
  return (0, _defineProperty2["default"])({}, this.key, modifiedConfig);
@@ -929,9 +757,7 @@ var InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
929
757
  }]);
930
758
  return InteractionSchemaV1;
931
759
  }(_schema["default"]);
932
-
933
- exports.InteractionSchemaV1 = InteractionSchemaV1;
934
- var filterPropsV0 = {
760
+ var filterPropsV0 = exports.filterPropsV0 = {
935
761
  dataId: null,
936
762
  id: null,
937
763
  name: null,
@@ -939,18 +765,12 @@ var filterPropsV0 = {
939
765
  value: null,
940
766
  enlarged: null
941
767
  };
942
- exports.filterPropsV0 = filterPropsV0;
943
-
944
- var DimensionFieldSchema = /*#__PURE__*/function (_Schema17) {
768
+ var DimensionFieldSchema = exports.DimensionFieldSchema = /*#__PURE__*/function (_Schema17) {
945
769
  (0, _inherits2["default"])(DimensionFieldSchema, _Schema17);
946
-
947
- var _super17 = _createSuper(DimensionFieldSchema);
948
-
949
770
  function DimensionFieldSchema() {
950
771
  (0, _classCallCheck2["default"])(this, DimensionFieldSchema);
951
- return _super17.apply(this, arguments);
772
+ return _callSuper(this, DimensionFieldSchema, arguments);
952
773
  }
953
-
954
774
  (0, _createClass2["default"])(DimensionFieldSchema, [{
955
775
  key: "save",
956
776
  value: function save(field) {
@@ -964,46 +784,36 @@ var DimensionFieldSchema = /*#__PURE__*/function (_Schema17) {
964
784
  }]);
965
785
  return DimensionFieldSchema;
966
786
  }(_schema["default"]);
967
-
968
- exports.DimensionFieldSchema = DimensionFieldSchema;
969
-
970
- var SplitMapsSchema = /*#__PURE__*/function (_Schema18) {
787
+ var SplitMapsSchema = exports.SplitMapsSchema = /*#__PURE__*/function (_Schema18) {
971
788
  (0, _inherits2["default"])(SplitMapsSchema, _Schema18);
972
-
973
- var _super18 = _createSuper(SplitMapsSchema);
974
-
975
789
  function SplitMapsSchema() {
976
790
  (0, _classCallCheck2["default"])(this, SplitMapsSchema);
977
- return _super18.apply(this, arguments);
791
+ return _callSuper(this, SplitMapsSchema, arguments);
978
792
  }
979
-
980
793
  (0, _createClass2["default"])(SplitMapsSchema, [{
981
794
  key: "convertLayerSettings",
982
795
  value: function convertLayerSettings(accu, _ref19) {
983
796
  var _ref20 = (0, _slicedToArray2["default"])(_ref19, 2),
984
- key = _ref20[0],
985
- value = _ref20[1];
986
-
797
+ key = _ref20[0],
798
+ value = _ref20[1];
987
799
  if (typeof value === 'boolean') {
988
800
  return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, value));
989
801
  } else if (value && (0, _typeof2["default"])(value) === 'object' && value.isAvailable) {
990
802
  return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, Boolean(value.isVisible)));
991
803
  }
992
-
993
804
  return accu;
994
805
  }
995
806
  }, {
996
807
  key: "load",
997
808
  value: function load(splitMaps) {
998
809
  var _this17 = this;
999
-
1000
810
  // previous splitMaps Schema {layers: {layerId: {isVisible, isAvailable}}}
811
+
1001
812
  if (!Array.isArray(splitMaps) || !splitMaps.length) {
1002
813
  return {
1003
814
  splitMaps: []
1004
815
  };
1005
816
  }
1006
-
1007
817
  return {
1008
818
  splitMaps: splitMaps.map(function (settings) {
1009
819
  return _objectSpread(_objectSpread({}, settings), {}, {
@@ -1015,10 +825,7 @@ var SplitMapsSchema = /*#__PURE__*/function (_Schema18) {
1015
825
  }]);
1016
826
  return SplitMapsSchema;
1017
827
  }(_schema["default"]);
1018
-
1019
- exports.SplitMapsSchema = SplitMapsSchema;
1020
-
1021
- var filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, {
828
+ var filterPropsV1 = exports.filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, {
1022
829
  plotType: null,
1023
830
  animationWindow: null,
1024
831
  yAxis: new DimensionFieldSchema({
@@ -1033,9 +840,7 @@ var filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, {
1033
840
  layerId: null,
1034
841
  speed: null
1035
842
  });
1036
-
1037
- exports.filterPropsV1 = filterPropsV1;
1038
- var propertiesV0 = {
843
+ var propertiesV0 = exports.propertiesV0 = {
1039
844
  filters: new FilterSchemaV0({
1040
845
  version: _versions.VERSIONS.v0,
1041
846
  properties: filterPropsV0
@@ -1050,8 +855,7 @@ var propertiesV0 = {
1050
855
  }),
1051
856
  layerBlending: null
1052
857
  };
1053
- exports.propertiesV0 = propertiesV0;
1054
- var propertiesV1 = {
858
+ var propertiesV1 = exports.propertiesV1 = {
1055
859
  filters: new FilterSchemaV0({
1056
860
  version: _versions.VERSIONS.v1,
1057
861
  properties: filterPropsV1
@@ -1078,29 +882,25 @@ var propertiesV1 = {
1078
882
  key: 'animationConfig'
1079
883
  })
1080
884
  };
1081
- exports.propertiesV1 = propertiesV1;
1082
- var visStateSchemaV0 = new _schema["default"]({
885
+ var visStateSchemaV0 = exports.visStateSchemaV0 = new _schema["default"]({
1083
886
  version: _versions.VERSIONS.v0,
1084
887
  properties: propertiesV0,
1085
888
  key: 'visState'
1086
889
  });
1087
- exports.visStateSchemaV0 = visStateSchemaV0;
1088
- var visStateSchemaV1 = new _schema["default"]({
890
+ var visStateSchemaV1 = exports.visStateSchemaV1 = new _schema["default"]({
1089
891
  version: _versions.VERSIONS.v1,
1090
892
  properties: propertiesV1,
1091
893
  key: 'visState'
1092
894
  });
1093
- exports.visStateSchemaV1 = visStateSchemaV1;
1094
- var visStateSchema = (_visStateSchema = {}, (0, _defineProperty2["default"])(_visStateSchema, _versions.VERSIONS.v0, {
895
+ var visStateSchema = exports.visStateSchema = (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _versions.VERSIONS.v0, {
1095
896
  save: function save(toSave) {
1096
897
  return visStateSchemaV0.save(toSave);
1097
898
  },
1098
899
  load: function load(toLoad) {
1099
900
  return visStateSchemaV1.load(visStateSchemaV0.load(toLoad).visState);
1100
901
  }
1101
- }), (0, _defineProperty2["default"])(_visStateSchema, _versions.VERSIONS.v1, visStateSchemaV1), _visStateSchema); // test load v0
902
+ }), _versions.VERSIONS.v1, visStateSchemaV1);
1102
903
 
1103
- exports.visStateSchema = visStateSchema;
1104
- var _default = visStateSchema;
1105
- exports["default"] = _default;
1106
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwibmFtZXMiOlsiZGltZW5zaW9uUHJvcHNWMCIsImdlb2pzb25TaXplRmllbGRWMFRvVjEiLCJjb25maWciLCJkZWZhdWx0UmFpdWRzIiwiZGVmYXVsdFJhZGl1c1JhbmdlIiwidmlzQ29uZmlnIiwiZXh0cnVkZWQiLCJzdHJva2VkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzb21lIiwiZCIsImkiLCJEaW1lbnNpb25GaWVsZFNjaGVtYVYwIiwiVkVSU0lPTlMiLCJ2MCIsImZpZWxkIiwia2V5Iiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwic2xpY2UiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwic2NhbGUiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsImNvbHVtbnMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsInZhbHVlIiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0b3IiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUJ5Wm9vbSIsImNvbG9yRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29sb3JTY2FsZSIsInNpemVGaWVsZCIsInNpemVTY2FsZSIsImVuYWJsZTNkIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImlzQWdncmVnYXRlZCIsIkNvbHVtblNjaGVtYVYxIiwic3RhdGUiLCJja2V5IiwiVGV4dExhYmVsU2NoZW1hVjEiLCJ0ZXh0TGFiZWwiLCJtYXAiLCJ0bCIsIkFycmF5IiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIm1vZGlmaWVkIiwiTGVnZW5kU2V0dGluZ3NWMSIsImxlZ2VuZFNldHRpbmdzIiwibHMiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50Iiwic3Ryb2tlQ29sb3IiLCJzdHJva2VDb2xvclJhbmdlIiwiY29sb3JSYW5nZSIsIm91dGxpbmUiLCJmaWxsZWQiLCJWaXNDb25maWdTY2hlbWFWMSIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsImxheWVycyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsInB1c2giLCJsb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJGaWx0ZXJTY2hlbWFWMCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiaW50ZXJhY3Rpb25Db25maWciLCJlbmFibGVkIiwiQm9vbGVhbiIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJtb2RpZmllZENvbmZpZyIsImZvckVhY2giLCJjb25maWdUeXBlIiwiZmllbGRzVG9TaG93IiwiZmllbGREYXRhIiwibmFtZSIsImZvcm1hdCIsImZpbHRlclByb3BzVjAiLCJlbmxhcmdlZCIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hIiwiU3BsaXRNYXBzU2NoZW1hIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJzZXR0aW5ncyIsImVudHJpZXMiLCJjb252ZXJ0TGF5ZXJTZXR0aW5ncyIsImZpbHRlclByb3BzVjEiLCJwbG90VHlwZSIsImFuaW1hdGlvbldpbmRvdyIsInlBeGlzIiwibGF5ZXJJZCIsInNwZWVkIiwicHJvcGVydGllc1YwIiwibGF5ZXJCbGVuZGluZyIsInByb3BlcnRpZXNWMSIsImFuaW1hdGlvbkNvbmZpZyIsImN1cnJlbnRUaW1lIiwidmlzU3RhdGVTY2hlbWFWMCIsInZpc1N0YXRlU2NoZW1hVjEiLCJ2aXNTdGF0ZVNjaGVtYSIsInNhdmUiLCJ0b1NhdmUiLCJsb2FkIiwidG9Mb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVPLElBQU1BLGdCQUFnQixHQUFHLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBekIsQyxDQUVQO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUNBLFNBQVNDLHNCQUFULENBQWdDQyxNQUFoQyxFQUF3QztBQUN0QyxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUFDLENBQUQsRUFBSSxFQUFKLENBQTNCLENBRnNDLENBSXRDOztBQUNBLE1BQUlGLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkMsUUFBckIsRUFBK0I7QUFDN0IsV0FBTyxhQUFQO0FBQ0QsR0FQcUMsQ0FTdEM7OztBQUNBLE1BQUlKLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkUsT0FBckIsRUFBOEI7QUFDNUIsV0FBTyxXQUFQO0FBQ0QsR0FacUMsQ0FjdEM7QUFDQTs7O0FBQ0EsTUFDRUwsTUFBTSxDQUFDRyxTQUFQLENBQWlCRyxNQUFqQixL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R0FBRyxJQUFJMUgsa0JBQUosQ0FBVztBQUN6Q3dFLEVBQUFBLE9BQU8sRUFBRW5GLG1CQUFTQyxFQUR1QjtBQUV6Q3dDLEVBQUFBLFVBQVUsRUFBRXVGLFlBRjZCO0FBR3pDN0gsRUFBQUEsR0FBRyxFQUFFO0FBSG9DLENBQVgsQ0FBekI7O0FBTUEsSUFBTW1JLGdCQUFnQixHQUFHLElBQUkzSCxrQkFBSixDQUFXO0FBQ3pDd0UsRUFBQUEsT0FBTyxFQUFFbkYsbUJBQVNvRixFQUR1QjtBQUV6QzNDLEVBQUFBLFVBQVUsRUFBRXlGLFlBRjZCO0FBR3pDL0gsRUFBQUEsR0FBRyxFQUFFO0FBSG9DLENBQVgsQ0FBekI7O0FBTUEsSUFBTW9JLGNBQWMsNEVBQ3hCdkksbUJBQVNDLEVBRGUsRUFDVjtBQUNidUksRUFBQUEsSUFBSSxFQUFFLGNBQUFDLE1BQU07QUFBQSxXQUFJSixnQkFBZ0IsQ0FBQ0csSUFBakIsQ0FBc0JDLE1BQXRCLENBQUo7QUFBQSxHQURDO0FBRWJDLEVBQUFBLElBQUksRUFBRSxjQUFBQyxNQUFNO0FBQUEsV0FBSUwsZ0JBQWdCLENBQUNJLElBQWpCLENBQXNCTCxnQkFBZ0IsQ0FBQ0ssSUFBakIsQ0FBc0JDLE1BQXRCLEVBQThCbkQsUUFBcEQsQ0FBSjtBQUFBO0FBRkMsQ0FEVSxxREFLeEJ4RixtQkFBU29GLEVBTGUsRUFLVmtELGdCQUxVLG1CQUFwQixDLENBUVA7OztlQUNlQyxjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IHtWRVJTSU9OU30gZnJvbSAnLi92ZXJzaW9ucyc7XG5pbXBvcnQge2lzVmFsaWRGaWx0ZXJWYWx1ZX0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcblxuLyoqXG4gKiBWMCBTY2hlbWFcbiAqL1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uUHJvcHNWMCA9IFsnbmFtZScsICd0eXBlJ107XG5cbi8vIGluIHYwIGdlb2pzb24gdGhlcmUgaXMgb25seSBzaXplRmllbGRcblxuLy8gaW4gdjEgZ2VvanNvblxuLy8gc3Ryb2tlIGJhc2Ugb24gLT4gc2l6ZUZpZWxkXG4vLyBoZWlnaHQgYmFzZWQgb24gLT4gaGVpZ2h0RmllbGRcbi8vIHJhZGl1cyBiYXNlZCBvbiAtPiByYWRpdXNGaWVsZFxuLy8gaGVyZSB3ZSBtYWtlIG91ciB3aXJlZHN0IGd1ZXNzIG9uIHdoaWNoIGNoYW5uZWwgc2l6ZUZpZWxkIGJlbG9uZ3MgdG9cbmZ1bmN0aW9uIGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKSB7XG4gIGNvbnN0IGRlZmF1bHRSYWl1ZHMgPSAxMDtcbiAgY29uc3QgZGVmYXVsdFJhZGl1c1JhbmdlID0gWzAsIDUwXTtcblxuICAvLyBpZiBleHRydWRlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIGhlaWdodFxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5leHRydWRlZCkge1xuICAgIHJldHVybiAnaGVpZ2h0RmllbGQnO1xuICB9XG5cbiAgLy8gaWYgc2hvdyBzdHJva2UgZW5hYmxlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHN0cm9rZVxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgcmV0dXJuICdzaXplRmllbGQnO1xuICB9XG5cbiAgLy8gaWYgcmFkaXVzIGNoYW5nZWQsIG9yIHJhZGl1cyBSYW5nZSBDaGFuZ2VkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgcmFkaXVzXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3QgdW5yZWxpYWJsZSBndWVzcywgdGhhdCdzIHdoeSB3ZSBwdXQgaXQgaW4gdGhlIGVuZFxuICBpZiAoXG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IGRlZmF1bHRSYWl1ZHMgfHxcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1c1JhbmdlLnNvbWUoKGQsIGkpID0+IGQgIT09IGRlZmF1bHRSYWRpdXNSYW5nZVtpXSlcbiAgKSB7XG4gICAgcmV0dXJuICdyYWRpdXNGaWVsZCc7XG4gIH1cblxuICByZXR1cm4gJ3NpemVGaWVsZCc7XG59XG5cbi8vIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKGZpZWxkKSB7XG4gICAgLy8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYW55bW9yZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCAhPT0gbnVsbCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBsZXQgZmllbGROYW1lID0gdGhpcy5rZXk7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicgJiYgdGhpcy5rZXkgPT09ICdzaXplRmllbGQnICYmIGZpZWxkKSB7XG4gICAgICBmaWVsZE5hbWUgPSBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZyk7XG4gICAgfVxuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIERpbWVuc2lvblNjYWxlU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoc2NhbGUpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IHNjYWxlfTtcbiAgfVxuICBsb2FkKHNjYWxlLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgaWYgKHRoaXMua2V5ID09PSAnc2l6ZVNjYWxlJyAmJiBjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAvLyBzaXplU2NhbGUgbm93IHNwbGl0IGludG8gcmFkaXVzU2NhbGUsIGhlaWdodFNjYWxlXG4gICAgICAvLyBubyB1c2VyIGN1c3RvbWl6YXRpb24sIGp1c3QgdXNlIGRlZmF1bHRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2NhbGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXlcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbHVtbnNcbi8vIG9ubHkgcmV0dXJuIGNvbHVtbiB2YWx1ZSBmb3IgZWFjaCBjb2x1bW5cbmNsYXNzIExheWVyQ29sdW1uc1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5LCBmbGF0dGVuIGNvbHVtbnNcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBjb2x1bW5zOiBPYmplY3Qua2V5cyhzYXZlZCkucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2tleV06IHNhdmVkW2tleV0udmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnLnZpc0NvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcudmlzQ29uZmlnXG4gICAgY29uc3QgYWNjdW11bGF0ZWRDb25maWcgPSBhY2N1bXVsYXRlZC5jb25maWcgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5hY2N1bXVsYXRlZENvbmZpZyxcbiAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdGVkQ29uZmlnLnZpc0NvbmZpZyB8fCB7fSksXG4gICAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCByZW5hbWUgPSB7XG4gICAgICBnZW9qc29uOiB7XG4gICAgICAgIGV4dHJ1ZGVkOiAnZW5hYmxlM2QnLFxuICAgICAgICBlbGV2YXRpb25SYW5nZTogJ2hlaWdodFJhbmdlJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnR5cGUgaW4gcmVuYW1lKSB7XG4gICAgICBjb25zdCBwcm9wVG9SZW5hbWUgPSByZW5hbWVbY29uZmlnLnR5cGVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgICAgdmlzQ29uZmlnOiBPYmplY3Qua2V5cyh2aXNDb25maWcpLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihwcm9wVG9SZW5hbWVba2V5XVxuICAgICAgICAgICAgICAgID8ge1twcm9wVG9SZW5hbWVba2V5XV06IHZpc0NvbmZpZ1trZXldfVxuICAgICAgICAgICAgICAgIDoge1trZXldOiB2aXNDb25maWdba2V5XX0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIHZpc0NvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZCh2YWx1ZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFYwIC0+IFYxIENoYW5nZXNcbiAqIC0gbGF5ZXIgaXMgbm93IGEgY2xhc3NcbiAqIC0gY29uZmlnIHNhdmVkIGluIGEgY29uZmlnIG9iamVjdFxuICogLSBpZCwgdHlwZSwgaXNBZ2dyZWdhdGVkIGlzIG91dHNpZGUgbGF5ZXIuY29uZmlnXG4gKiAtIHZpc3VhbENoYW5uZWxzIGlzIG91dHNpZGUgY29uZmlnLCBpdCBkZWZpbmVzIGF2YWlsYWJsZSB2aXN1YWwgY2hhbm5lbCBhbmRcbiAqICAgcHJvcGVydHkgbmFtZXMgZm9yIGZpZWxkLCBzY2FsZSwgZG9tYWluIGFuZCByYW5nZSBvZiBlYWNoIHZpc3VhbCBjaGFuZWwuXG4gKiAtIGVuYWJsZTNkLCBjb2xvckFnZ3JlZ2F0aW9uIGFuZCBzaXplQWdncmVnYXRpb24gYXJlIG1vdmVkIGludG8gdmlzQ29uZmlnXG4gKiAtIEdlb2pzb25MYXllciAtIGFkZGVkIGhlaWdodCwgcmFkaXVzIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YwID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIGRhdGFJZDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2RhdGFJZCd9KSxcbiAgbGFiZWw6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdsYWJlbCd9KSxcbiAgY29sb3I6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdjb2xvcid9KSxcbiAgaXNWaXNpYmxlOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaXNWaXNpYmxlJ30pLFxuICBoaWRkZW46IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdoaWRkZW4nfSksXG4gIHZpc2liaWxpdHlCeVpvb206IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNpYmlsaXR5Qnlab29tJ30pLFxuXG4gIC8vIGNvbnZlcnQgdmlzQ29uZmlnXG4gIHZpc0NvbmZpZzogbmV3IExheWVyVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc0NvbmZpZyd9KSxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIC8vIGZsYXR0ZW5cbiAgY29sdW1uczogbmV3IExheWVyQ29sdW1uc1NjaGVtYVYwKCksXG5cbiAgLy8gc2F2ZSBpbnRvIHZpc3VhbENoYW5uZWxzXG4gIGNvbG9yRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ2NvbG9yRmllbGQnXG4gIH0pLFxuICBjb2xvclNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JTY2FsZSdcbiAgfSksXG4gIHNpemVGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnc2l6ZUZpZWxkJ1xuICB9KSxcbiAgc2l6ZVNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnc2l6ZVNjYWxlJ1xuICB9KSxcblxuICAvLyBtb3ZlIGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICBlbmFibGUzZDogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnZW5hYmxlM2QnfSksXG4gIGNvbG9yQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yQWdncmVnYXRpb24nXG4gIH0pLFxuICBzaXplQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3NpemVBZ2dyZWdhdGlvbid9KSxcblxuICAvLyBkZWxldGVcbiAgaXNBZ2dyZWdhdGVkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCgpXG59O1xuXG4vKipcbiAqIFYxIFNjaGVtYVxuICovXG5jbGFzcyBDb2x1bW5TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoY29sdW1ucywgc3RhdGUpIHtcbiAgICAvLyBzdGFydGluZyBmcm9tIHYxLCBvbmx5IHNhdmUgY29sdW1uIHZhbHVlXG4gICAgLy8gZmllbGRJZHggd2lsbCBiZSBjYWxjdWxhdGVkIGR1cmluZyBtZXJnZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhjb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBja2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2NrZXldOiBjb2x1bW5zW2NrZXldLnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGNvbHVtbnMpIHtcbiAgICByZXR1cm4ge2NvbHVtbnN9O1xuICB9XG59XG5cbmNsYXNzIFRleHRMYWJlbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdGV4dExhYmVsLm1hcCh0bCA9PiAoe1xuICAgICAgICAuLi50bCxcbiAgICAgICAgZmllbGQ6IHRsLmZpZWxkID8gcGljayh0bC5maWVsZCwgWyduYW1lJywgJ3R5cGUnXSkgOiBudWxsXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZCh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge3RleHRMYWJlbDogQXJyYXkuaXNBcnJheSh0ZXh0TGFiZWwpID8gdGV4dExhYmVsIDogW3RleHRMYWJlbF19O1xuICB9XG59XG5cbmNvbnN0IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSA9IHtcbiAgZ2VvanNvbjogKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikgPT4ge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBpc09sZCA9ICF2Yy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICB2Yy5yYWRpdXNGaWVsZCB8fCBsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChpc09sZCAmJiAhaXNQb2ludCAmJiBsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICAgIC8vIGlmIHN0cm9rZWQgaXMgdHJ1ZSwgY29weSBjb2xvciBjb25maWcgdG8gc3Ryb2tlIGNvbG9yIGNvbmZpZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogdmMuY29sb3JGaWVsZCxcbiAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdmMuY29sb3JTY2FsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuLyoqXG4gKiBWMTogc2F2ZSBbZmllbGRdOiB7bmFtZSwgdHlwZX0sIFtzY2FsZV06ICcnIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuY2xhc3MgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh2aXN1YWxDaGFubmVscywgcGFyZW50cykge1xuICAgIC8vIG9ubHkgc2F2ZSBmaWVsZCBhbmQgc2NhbGUgb2YgZWFjaCBjaGFubmVsXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykucmVkdWNlKFxuICAgICAgICAvLyAgc2F2ZSBjaGFubmVsIHRvIG51bGwgaWYgZGlkbid0IHNlbGVjdCBhbnkgZmllbGRcbiAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgICAgICA/IHBpY2sobGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLCBbJ25hbWUnLCAndHlwZScsICdjb2xvckNvbHVtbiddKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cbiAgbG9hZCh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICAvLyBmb2xkIGNoYW5uZWxzIGludG8gY29uZmlnXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAuLi52YyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4vKipcbiAqIFYxOiBzYXZlIFtjaGFubmVsXTogW3sgbGFiZWwsIGNvbG9yIH0sIC4uLl0gZm9yIGxlZ2VuZFxuICovXG5jbGFzcyBMZWdlbmRTZXR0aW5nc1YxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShsZWdlbmRTZXR0aW5ncywgcGFyZW50cykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhsZWdlbmRTZXR0aW5ncykucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgICAgYWNjdVtrZXldID0gbGVnZW5kU2V0dGluZ3Nba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSlcbiAgICB9O1xuICB9XG4gIGxvYWQobHMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgW3RoaXMua2V5XTogbHNcbiAgICB9O1xuICB9XG59XG5jb25zdCB2aXNDb25maWdNb2RpZmljYXRpb25WMSA9IHtcbiAgcG9pbnQ6ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgICF2aXNDb25maWcuaGFzT3duUHJvcGVydHkoJ2ZpbGxlZCcpICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAodmlzQ29uZmlnLm91dGxpbmUpIHtcbiAgICAgICAgLy8gcG9pbnQgbGF5ZXIgbm93IHN1cHBvcnRzIGJvdGggb3V0bGluZSBhbmQgZmlsbFxuICAgICAgICAvLyBmb3Igb2xkZXIgc2NoZW1hIHdoZXJlIGZpbGxlZCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gcG9pbnQgbGF5ZXJcbiAgICAgICAgLy8gc2V0IGl0IHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZDtcbiAgfSxcbiAgZ2VvanNvbjogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICAvLyBpcyBwb2ludHM/XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgIGxheWVyLnZpc3VhbENoYW5uZWxzICYmXG4gICAgICAhbGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKSAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICAobGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiYgbGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzRmllbGQpIHx8XG4gICAgICAodmlzQ29uZmlnICYmIHZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmIChpc1BvaW50KSB7XG4gICAgICAgIC8vIGlmIGlzIHBvaW50LCBzZXQgc3Ryb2tlIHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IHRydWU7XG4gICAgICAgIG1vZGlmaWVkLnN0cm9rZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH1cbn07XG5cbmNsYXNzIFZpc0NvbmZpZ1NjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAuLi52aXNDb25maWcsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YxID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgY29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdjb25maWcnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGRhdGFJZDogbnVsbCxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgY29sb3I6IG51bGwsXG4gICAgICBoaWdobGlnaHRDb2xvcjogbnVsbCxcbiAgICAgIGNvbHVtbnM6IG5ldyBDb2x1bW5TY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICdjb2x1bW5zJ1xuICAgICAgfSksXG4gICAgICBpc1Zpc2libGU6IG51bGwsXG4gICAgICB2aXNDb25maWc6IG5ldyBWaXNDb25maWdTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gICAgICB9KSxcbiAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IG51bGwsXG4gICAgICB0ZXh0TGFiZWw6IG5ldyBUZXh0TGFiZWxTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICd0ZXh0TGFiZWwnXG4gICAgICB9KVxuICAgIH1cbiAgfSksXG4gIGxlZ2VuZFNldHRpbmdzOiBuZXcgTGVnZW5kU2V0dGluZ3NWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnbGVnZW5kU2V0dGluZ3MnXG4gIH0pLFxuICB2aXN1YWxDaGFubmVsczogbmV3IFZpc3VhbENoYW5uZWxTY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAndmlzdWFsQ2hhbm5lbHMnXG4gIH0pXG59O1xuXG5leHBvcnQgY2xhc3MgTGF5ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdsYXllcnMnO1xuXG4gIHNhdmUobGF5ZXJzLCBwYXJlbnRzKSB7XG4gICAgY29uc3QgW3Zpc1N0YXRlXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IHZpc1N0YXRlLmxheWVyT3JkZXIucmVkdWNlKChzYXZlZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gc2F2ZSBsYXllcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlbmRlcmluZyBvcmRlclxuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpbmRleF07XG4gICAgICAgIGlmIChsYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgICAgICBzYXZlZC5wdXNoKHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyKS5sYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGxheWVycykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBsYXllcnMubWFwKGxheWVyID0+IHRoaXMubG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyLCBsYXllcnMpLmxheWVycylcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdmaWx0ZXJzJztcbiAgc2F2ZShmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnNcbiAgICAgICAgLmZpbHRlcihpc1ZhbGlkRmlsdGVyVmFsdWUpXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpbHRlcikuZmlsdGVycylcbiAgICB9O1xuICB9XG4gIGxvYWQoZmlsdGVycykge1xuICAgIHJldHVybiB7ZmlsdGVyc307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YwID0gWyd0b29sdGlwJywgJ2JydXNoJ107XG5cbmNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZCA/IHtba2V5XTogaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWd9IDoge30pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBjb252ZXJ0IHYwIC0+IHYxXG4gICAgLy8gcmV0dXJuIGVuYWJsZWQ6IGZhbHNlIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oaW50ZXJhY3Rpb25Db25maWdba2V5XSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YxID0gWy4uLmludGVyYWN0aW9uUHJvcHNWMCwgJ2dlb2NvZGVyJywgJ2Nvb3JkaW5hdGUnXTtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBzYXZlIGNvbmZpZyBldmVuIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICBjb25zdCBtb2RpZmllZENvbmZpZyA9IGludGVyYWN0aW9uQ29uZmlnO1xuICAgIE9iamVjdC5rZXlzKGludGVyYWN0aW9uQ29uZmlnKS5mb3JFYWNoKGNvbmZpZ1R5cGUgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1R5cGUgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1Nob3cgPSBtb2RpZmllZENvbmZpZ1tjb25maWdUeXBlXS5maWVsZHNUb1Nob3c7XG4gICAgICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGZpZWxkc1RvU2hvdykpIHtcbiAgICAgICAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNUb1Nob3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3dba2V5XSA9IGZpZWxkc1RvU2hvd1trZXldLm1hcChmaWVsZERhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZERhdGEubmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkRGF0YSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWVsZERhdGE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogbW9kaWZpZWRDb25maWd9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YwID0ge1xuICBkYXRhSWQ6IG51bGwsXG4gIGlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICB0eXBlOiBudWxsLFxuICB2YWx1ZTogbnVsbCxcbiAgZW5sYXJnZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoZmllbGQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogZmllbGQgPyB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShmaWVsZClbdGhpcy5rZXldIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBsb2FkKGZpZWxkKSB7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBmaWVsZH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNwbGl0TWFwc1NjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIGNvbnZlcnRMYXllclNldHRpbmdzKGFjY3UsIFtrZXksIHZhbHVlXSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IEJvb2xlYW4odmFsdWUuaXNWaXNpYmxlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH1cblxuICBsb2FkKHNwbGl0TWFwcykge1xuICAgIC8vIHByZXZpb3VzIHNwbGl0TWFwcyBTY2hlbWEge2xheWVyczoge2xheWVySWQ6IHtpc1Zpc2libGUsIGlzQXZhaWxhYmxlfX19XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BsaXRNYXBzKSB8fCAhc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtzcGxpdE1hcHM6IFtdfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKHNldHRpbmdzID0+ICh7XG4gICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICBsYXllcnM6IE9iamVjdC5lbnRyaWVzKHNldHRpbmdzLmxheWVycyB8fCB7fSkucmVkdWNlKHRoaXMuY29udmVydExheWVyU2V0dGluZ3MsIHt9KVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyUHJvcHNWMSA9IHtcbiAgLi4uZmlsdGVyUHJvcHNWMCxcbiAgcGxvdFR5cGU6IG51bGwsXG4gIGFuaW1hdGlvbldpbmRvdzogbnVsbCxcbiAgeUF4aXM6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAneUF4aXMnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG5hbWU6IG51bGwsXG4gICAgICB0eXBlOiBudWxsXG4gICAgfVxuICB9KSxcblxuICAvLyBwb2x5Z29uIGZpbHRlciBwcm9wZXJ0aWVzXG4gIGxheWVySWQ6IG51bGwsXG4gIHNwZWVkOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydGllc1YwID0ge1xuICBmaWx0ZXJzOiBuZXcgRmlsdGVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGZpbHRlclByb3BzVjBcbiAgfSksXG4gIGxheWVyczogbmV3IExheWVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGxheWVyUHJvcHNWMFxuICB9KSxcbiAgaW50ZXJhY3Rpb25Db25maWc6IG5ldyBJbnRlcmFjdGlvblNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBpbnRlcmFjdGlvblByb3BzVjBcbiAgfSksXG4gIGxheWVyQmxlbmRpbmc6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjEgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YxXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbCxcbiAgc3BsaXRNYXBzOiBuZXcgU3BsaXRNYXBzU2NoZW1hKHtcbiAgICBrZXk6ICdzcGxpdE1hcHMnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gIH0pLFxuICBhbmltYXRpb25Db25maWc6IG5ldyBTY2hlbWEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGN1cnJlbnRUaW1lOiBudWxsLFxuICAgICAgc3BlZWQ6IG51bGxcbiAgICB9LFxuICAgIGtleTogJ2FuaW1hdGlvbkNvbmZpZydcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYwID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjAsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYxID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjEsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYSA9IHtcbiAgW1ZFUlNJT05TLnYwXToge1xuICAgIHNhdmU6IHRvU2F2ZSA9PiB2aXNTdGF0ZVNjaGVtYVYwLnNhdmUodG9TYXZlKSxcbiAgICBsb2FkOiB0b0xvYWQgPT4gdmlzU3RhdGVTY2hlbWFWMS5sb2FkKHZpc1N0YXRlU2NoZW1hVjAubG9hZCh0b0xvYWQpLnZpc1N0YXRlKVxuICB9LFxuICBbVkVSU0lPTlMudjFdOiB2aXNTdGF0ZVNjaGVtYVYxXG59O1xuXG4vLyB0ZXN0IGxvYWQgdjBcbmV4cG9ydCBkZWZhdWx0IHZpc1N0YXRlU2NoZW1hO1xuIl19
904
+ // test load v0
905
+ var _default = exports["default"] = visStateSchema;
906
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdmVyc2lvbnMiLCJfZmlsdGVyVXRpbHMiLCJfbGF5ZXJGYWN0b3J5IiwiX3NjaGVtYSIsIl9sb2Rhc2gyIiwiX2RhdGFVdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiZGltZW5zaW9uUHJvcHNWMCIsImV4cG9ydHMiLCJnZW9qc29uU2l6ZUZpZWxkVjBUb1YxIiwiY29uZmlnIiwiZGVmYXVsdFJhaXVkcyIsImRlZmF1bHRSYWRpdXNSYW5nZSIsInZpc0NvbmZpZyIsImV4dHJ1ZGVkIiwic3Ryb2tlZCIsInJhZGl1cyIsInJhZGl1c1JhbmdlIiwic29tZSIsImQiLCJpIiwiRGltZW5zaW9uRmllbGRTY2hlbWFWMCIsIl9TY2hlbWEiLCJfaW5oZXJpdHMyIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkMiIsIlZFUlNJT05TIiwidjAiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJzYXZlIiwiZmllbGQiLCJzYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJsb2FkIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwiX3BhcmVudHMkc2xpY2UiLCJzbGljZSIsIl9wYXJlbnRzJHNsaWNlMiIsIl9zbGljZWRUb0FycmF5MiIsImZpZWxkTmFtZSIsInR5cGUiLCJ2aXN1YWxDaGFubmVscyIsIlNjaGVtYSIsIkRpbWVuc2lvblNjYWxlU2NoZW1hVjAiLCJfU2NoZW1hMiIsIl90aGlzMiIsIl9sZW4yIiwiX2tleTIiLCJzY2FsZSIsIl9wYXJlbnRzJHNsaWNlMyIsIl9wYXJlbnRzJHNsaWNlNCIsIkxheWVyQ29uZmlnU2NoZW1hVjAiLCJfU2NoZW1hMyIsIl90aGlzMyIsIl9sZW4zIiwiX2tleTMiLCJzYXZlZCIsIkxheWVyQ29sdW1uc1NjaGVtYVYwIiwiX1NjaGVtYTQiLCJfdGhpczQiLCJfbGVuNCIsIl9rZXk0IiwiY29sdW1ucyIsInJlZHVjZSIsImFjY3UiLCJMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAiLCJfU2NoZW1hNSIsIl90aGlzNSIsIl9sZW41IiwiX2tleTUiLCJhY2N1bXVsYXRlZENvbmZpZyIsIkxheWVyVmlzQ29uZmlnU2NoZW1hVjAiLCJfU2NoZW1hNiIsIl90aGlzNiIsIl9sZW42IiwiX2tleTYiLCJhY2N1bXVsYXRvciIsIl9wYXJlbnRzJHNsaWNlNSIsIl9wYXJlbnRzJHNsaWNlNiIsInJlbmFtZSIsImdlb2pzb24iLCJlbGV2YXRpb25SYW5nZSIsInByb3BUb1JlbmFtZSIsIkxheWVyQ29uZmlnU2NoZW1hRGVsZXRlVjAiLCJfU2NoZW1hNyIsIl90aGlzNyIsIl9sZW43IiwiX2tleTciLCJsYXllclByb3BzVjAiLCJpZCIsImRhdGFJZCIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Qnlab29tIiwiY29sb3JGaWVsZCIsInByb3BlcnRpZXMiLCJjb2xvclNjYWxlIiwic2l6ZUZpZWxkIiwic2l6ZVNjYWxlIiwiZW5hYmxlM2QiLCJjb2xvckFnZ3JlZ2F0aW9uIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaXNBZ2dyZWdhdGVkIiwiQ29sdW1uU2NoZW1hVjEiLCJfU2NoZW1hOCIsInN0YXRlIiwiY2tleSIsIlRleHRMYWJlbFNjaGVtYVYxIiwiX1NjaGVtYTkiLCJ0ZXh0TGFiZWwiLCJtYXAiLCJ0bCIsInBpY2siLCJpc0FycmF5IiwidmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxIiwidmMiLCJfcGFyZW50cyRzbGljZTciLCJfcGFyZW50cyRzbGljZTgiLCJsYXllciIsImlzT2xkIiwiaGFzT3duUHJvcGVydHkiLCJpc1BvaW50IiwicmFkaXVzRmllbGQiLCJMQVlFUl9WSVNfQ09ORklHUyIsImRlZmF1bHRWYWx1ZSIsInN0cm9rZUNvbG9yRmllbGQiLCJzdHJva2VDb2xvclNjYWxlIiwiVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIiwiX1NjaGVtYTEwIiwiX3BhcmVudHMkc2xpY2U5IiwiX3BhcmVudHMkc2xpY2UxMCIsIl9wYXJlbnRzJHNsaWNlMTEiLCJfcGFyZW50cyRzbGljZTEyIiwibW9kaWZpZWQiLCJMZWdlbmRTZXR0aW5nc1YxIiwiX1NjaGVtYTExIiwibGVnZW5kU2V0dGluZ3MiLCJscyIsInZpc0NvbmZpZ01vZGlmaWNhdGlvblYxIiwicG9pbnQiLCJfcGFyZW50cyRzbGljZTEzIiwiX3BhcmVudHMkc2xpY2UxNCIsInN0cm9rZUNvbG9yIiwic3Ryb2tlQ29sb3JSYW5nZSIsImNsb25lRGVlcCIsImNvbG9yUmFuZ2UiLCJvdXRsaW5lIiwiZmlsbGVkIiwiX3BhcmVudHMkc2xpY2UxNSIsIl9wYXJlbnRzJHNsaWNlMTYiLCJWaXNDb25maWdTY2hlbWFWMSIsIl9TY2hlbWExMiIsIl90aGlzOCIsIl9sZW44IiwiX2tleTgiLCJfcGFyZW50cyRzbGljZTE3IiwiX3BhcmVudHMkc2xpY2UxOCIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsIl9TY2hlbWExMyIsIl90aGlzOSIsIl9sZW45IiwiX2tleTkiLCJsYXllcnMiLCJfdGhpczEwIiwiX3BhcmVudHMkc2xpY2UxOSIsIl9wYXJlbnRzJHNsaWNlMjAiLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJpbmRleCIsImlzVmFsaWRUb1NhdmUiLCJfdGhpczExIiwibG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwiRmlsdGVyU2NoZW1hVjAiLCJfU2NoZW1hMTQiLCJfdGhpczEyIiwiX2xlbjEwIiwiX2tleTEwIiwiZmlsdGVycyIsIl90aGlzMTMiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiX1NjaGVtYTE1IiwiX3RoaXMxNCIsIl9sZW4xMSIsIl9rZXkxMSIsImludGVyYWN0aW9uQ29uZmlnIiwiZW5hYmxlZCIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJfU2NoZW1hMTYiLCJfdGhpczE1IiwiX2xlbjEyIiwiX2tleTEyIiwiX3RoaXMxNiIsIm1vZGlmaWVkQ29uZmlnIiwiY29uZmlnVHlwZSIsImZpZWxkc1RvU2hvdyIsIm5vdE51bGxvclVuZGVmaW5lZCIsImZpZWxkRGF0YSIsIm5hbWUiLCJmb3JtYXQiLCJmaWx0ZXJQcm9wc1YwIiwiZW5sYXJnZWQiLCJEaW1lbnNpb25GaWVsZFNjaGVtYSIsIl9TY2hlbWExNyIsIlNwbGl0TWFwc1NjaGVtYSIsIl9TY2hlbWExOCIsImNvbnZlcnRMYXllclNldHRpbmdzIiwiX3JlZjE5IiwiX3JlZjIwIiwiX3R5cGVvZjIiLCJpc0F2YWlsYWJsZSIsInNwbGl0TWFwcyIsIl90aGlzMTciLCJzZXR0aW5ncyIsImVudHJpZXMiLCJmaWx0ZXJQcm9wc1YxIiwicGxvdFR5cGUiLCJhbmltYXRpb25XaW5kb3ciLCJ5QXhpcyIsImxheWVySWQiLCJzcGVlZCIsInByb3BlcnRpZXNWMCIsImxheWVyQmxlbmRpbmciLCJwcm9wZXJ0aWVzVjEiLCJhbmltYXRpb25Db25maWciLCJjdXJyZW50VGltZSIsInZpc1N0YXRlU2NoZW1hVjAiLCJ2aXNTdGF0ZVNjaGVtYVYxIiwidmlzU3RhdGVTY2hlbWEiLCJ0b1NhdmUiLCJ0b0xvYWQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IHtWRVJTSU9OU30gZnJvbSAnLi92ZXJzaW9ucyc7XG5pbXBvcnQge2lzVmFsaWRGaWx0ZXJWYWx1ZX0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcblxuLyoqXG4gKiBWMCBTY2hlbWFcbiAqL1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uUHJvcHNWMCA9IFsnbmFtZScsICd0eXBlJ107XG5cbi8vIGluIHYwIGdlb2pzb24gdGhlcmUgaXMgb25seSBzaXplRmllbGRcblxuLy8gaW4gdjEgZ2VvanNvblxuLy8gc3Ryb2tlIGJhc2Ugb24gLT4gc2l6ZUZpZWxkXG4vLyBoZWlnaHQgYmFzZWQgb24gLT4gaGVpZ2h0RmllbGRcbi8vIHJhZGl1cyBiYXNlZCBvbiAtPiByYWRpdXNGaWVsZFxuLy8gaGVyZSB3ZSBtYWtlIG91ciB3aXJlZHN0IGd1ZXNzIG9uIHdoaWNoIGNoYW5uZWwgc2l6ZUZpZWxkIGJlbG9uZ3MgdG9cbmZ1bmN0aW9uIGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKSB7XG4gIGNvbnN0IGRlZmF1bHRSYWl1ZHMgPSAxMDtcbiAgY29uc3QgZGVmYXVsdFJhZGl1c1JhbmdlID0gWzAsIDUwXTtcblxuICAvLyBpZiBleHRydWRlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIGhlaWdodFxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5leHRydWRlZCkge1xuICAgIHJldHVybiAnaGVpZ2h0RmllbGQnO1xuICB9XG5cbiAgLy8gaWYgc2hvdyBzdHJva2UgZW5hYmxlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHN0cm9rZVxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgcmV0dXJuICdzaXplRmllbGQnO1xuICB9XG5cbiAgLy8gaWYgcmFkaXVzIGNoYW5nZWQsIG9yIHJhZGl1cyBSYW5nZSBDaGFuZ2VkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgcmFkaXVzXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3QgdW5yZWxpYWJsZSBndWVzcywgdGhhdCdzIHdoeSB3ZSBwdXQgaXQgaW4gdGhlIGVuZFxuICBpZiAoXG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IGRlZmF1bHRSYWl1ZHMgfHxcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1c1JhbmdlLnNvbWUoKGQsIGkpID0+IGQgIT09IGRlZmF1bHRSYWRpdXNSYW5nZVtpXSlcbiAgKSB7XG4gICAgcmV0dXJuICdyYWRpdXNGaWVsZCc7XG4gIH1cblxuICByZXR1cm4gJ3NpemVGaWVsZCc7XG59XG5cbi8vIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKGZpZWxkKSB7XG4gICAgLy8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYW55bW9yZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCAhPT0gbnVsbCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBsZXQgZmllbGROYW1lID0gdGhpcy5rZXk7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicgJiYgdGhpcy5rZXkgPT09ICdzaXplRmllbGQnICYmIGZpZWxkKSB7XG4gICAgICBmaWVsZE5hbWUgPSBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZyk7XG4gICAgfVxuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIERpbWVuc2lvblNjYWxlU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoc2NhbGUpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IHNjYWxlfTtcbiAgfVxuICBsb2FkKHNjYWxlLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgaWYgKHRoaXMua2V5ID09PSAnc2l6ZVNjYWxlJyAmJiBjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAvLyBzaXplU2NhbGUgbm93IHNwbGl0IGludG8gcmFkaXVzU2NhbGUsIGhlaWdodFNjYWxlXG4gICAgICAvLyBubyB1c2VyIGN1c3RvbWl6YXRpb24sIGp1c3QgdXNlIGRlZmF1bHRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2NhbGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXlcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbHVtbnNcbi8vIG9ubHkgcmV0dXJuIGNvbHVtbiB2YWx1ZSBmb3IgZWFjaCBjb2x1bW5cbmNsYXNzIExheWVyQ29sdW1uc1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5LCBmbGF0dGVuIGNvbHVtbnNcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBjb2x1bW5zOiBPYmplY3Qua2V5cyhzYXZlZCkucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2tleV06IHNhdmVkW2tleV0udmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnLnZpc0NvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcudmlzQ29uZmlnXG4gICAgY29uc3QgYWNjdW11bGF0ZWRDb25maWcgPSBhY2N1bXVsYXRlZC5jb25maWcgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5hY2N1bXVsYXRlZENvbmZpZyxcbiAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdGVkQ29uZmlnLnZpc0NvbmZpZyB8fCB7fSksXG4gICAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCByZW5hbWUgPSB7XG4gICAgICBnZW9qc29uOiB7XG4gICAgICAgIGV4dHJ1ZGVkOiAnZW5hYmxlM2QnLFxuICAgICAgICBlbGV2YXRpb25SYW5nZTogJ2hlaWdodFJhbmdlJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnR5cGUgaW4gcmVuYW1lKSB7XG4gICAgICBjb25zdCBwcm9wVG9SZW5hbWUgPSByZW5hbWVbY29uZmlnLnR5cGVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgICAgdmlzQ29uZmlnOiBPYmplY3Qua2V5cyh2aXNDb25maWcpLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihwcm9wVG9SZW5hbWVba2V5XVxuICAgICAgICAgICAgICAgID8ge1twcm9wVG9SZW5hbWVba2V5XV06IHZpc0NvbmZpZ1trZXldfVxuICAgICAgICAgICAgICAgIDoge1trZXldOiB2aXNDb25maWdba2V5XX0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIHZpc0NvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZCh2YWx1ZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFYwIC0+IFYxIENoYW5nZXNcbiAqIC0gbGF5ZXIgaXMgbm93IGEgY2xhc3NcbiAqIC0gY29uZmlnIHNhdmVkIGluIGEgY29uZmlnIG9iamVjdFxuICogLSBpZCwgdHlwZSwgaXNBZ2dyZWdhdGVkIGlzIG91dHNpZGUgbGF5ZXIuY29uZmlnXG4gKiAtIHZpc3VhbENoYW5uZWxzIGlzIG91dHNpZGUgY29uZmlnLCBpdCBkZWZpbmVzIGF2YWlsYWJsZSB2aXN1YWwgY2hhbm5lbCBhbmRcbiAqICAgcHJvcGVydHkgbmFtZXMgZm9yIGZpZWxkLCBzY2FsZSwgZG9tYWluIGFuZCByYW5nZSBvZiBlYWNoIHZpc3VhbCBjaGFuZWwuXG4gKiAtIGVuYWJsZTNkLCBjb2xvckFnZ3JlZ2F0aW9uIGFuZCBzaXplQWdncmVnYXRpb24gYXJlIG1vdmVkIGludG8gdmlzQ29uZmlnXG4gKiAtIEdlb2pzb25MYXllciAtIGFkZGVkIGhlaWdodCwgcmFkaXVzIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YwID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIGRhdGFJZDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2RhdGFJZCd9KSxcbiAgbGFiZWw6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdsYWJlbCd9KSxcbiAgY29sb3I6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdjb2xvcid9KSxcbiAgaXNWaXNpYmxlOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaXNWaXNpYmxlJ30pLFxuICBoaWRkZW46IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdoaWRkZW4nfSksXG4gIHZpc2liaWxpdHlCeVpvb206IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNpYmlsaXR5Qnlab29tJ30pLFxuXG4gIC8vIGNvbnZlcnQgdmlzQ29uZmlnXG4gIHZpc0NvbmZpZzogbmV3IExheWVyVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc0NvbmZpZyd9KSxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIC8vIGZsYXR0ZW5cbiAgY29sdW1uczogbmV3IExheWVyQ29sdW1uc1NjaGVtYVYwKCksXG5cbiAgLy8gc2F2ZSBpbnRvIHZpc3VhbENoYW5uZWxzXG4gIGNvbG9yRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ2NvbG9yRmllbGQnXG4gIH0pLFxuICBjb2xvclNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JTY2FsZSdcbiAgfSksXG4gIHNpemVGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnc2l6ZUZpZWxkJ1xuICB9KSxcbiAgc2l6ZVNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnc2l6ZVNjYWxlJ1xuICB9KSxcblxuICAvLyBtb3ZlIGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICBlbmFibGUzZDogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnZW5hYmxlM2QnfSksXG4gIGNvbG9yQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yQWdncmVnYXRpb24nXG4gIH0pLFxuICBzaXplQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3NpemVBZ2dyZWdhdGlvbid9KSxcblxuICAvLyBkZWxldGVcbiAgaXNBZ2dyZWdhdGVkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCgpXG59O1xuXG4vKipcbiAqIFYxIFNjaGVtYVxuICovXG5jbGFzcyBDb2x1bW5TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoY29sdW1ucywgc3RhdGUpIHtcbiAgICAvLyBzdGFydGluZyBmcm9tIHYxLCBvbmx5IHNhdmUgY29sdW1uIHZhbHVlXG4gICAgLy8gZmllbGRJZHggd2lsbCBiZSBjYWxjdWxhdGVkIGR1cmluZyBtZXJnZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhjb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBja2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2NrZXldOiBjb2x1bW5zW2NrZXldLnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGNvbHVtbnMpIHtcbiAgICByZXR1cm4ge2NvbHVtbnN9O1xuICB9XG59XG5cbmNsYXNzIFRleHRMYWJlbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdGV4dExhYmVsLm1hcCh0bCA9PiAoe1xuICAgICAgICAuLi50bCxcbiAgICAgICAgZmllbGQ6IHRsLmZpZWxkID8gcGljayh0bC5maWVsZCwgWyduYW1lJywgJ3R5cGUnXSkgOiBudWxsXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZCh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge3RleHRMYWJlbDogQXJyYXkuaXNBcnJheSh0ZXh0TGFiZWwpID8gdGV4dExhYmVsIDogW3RleHRMYWJlbF19O1xuICB9XG59XG5cbmNvbnN0IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSA9IHtcbiAgZ2VvanNvbjogKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikgPT4ge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBpc09sZCA9ICF2Yy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICB2Yy5yYWRpdXNGaWVsZCB8fCBsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChpc09sZCAmJiAhaXNQb2ludCAmJiBsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICAgIC8vIGlmIHN0cm9rZWQgaXMgdHJ1ZSwgY29weSBjb2xvciBjb25maWcgdG8gc3Ryb2tlIGNvbG9yIGNvbmZpZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogdmMuY29sb3JGaWVsZCxcbiAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdmMuY29sb3JTY2FsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuLyoqXG4gKiBWMTogc2F2ZSBbZmllbGRdOiB7bmFtZSwgdHlwZX0sIFtzY2FsZV06ICcnIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuY2xhc3MgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh2aXN1YWxDaGFubmVscywgcGFyZW50cykge1xuICAgIC8vIG9ubHkgc2F2ZSBmaWVsZCBhbmQgc2NhbGUgb2YgZWFjaCBjaGFubmVsXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykucmVkdWNlKFxuICAgICAgICAvLyAgc2F2ZSBjaGFubmVsIHRvIG51bGwgaWYgZGlkbid0IHNlbGVjdCBhbnkgZmllbGRcbiAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgICAgICA/IHBpY2sobGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLCBbJ25hbWUnLCAndHlwZScsICdjb2xvckNvbHVtbiddKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cbiAgbG9hZCh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICAvLyBmb2xkIGNoYW5uZWxzIGludG8gY29uZmlnXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAuLi52YyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4vKipcbiAqIFYxOiBzYXZlIFtjaGFubmVsXTogW3sgbGFiZWwsIGNvbG9yIH0sIC4uLl0gZm9yIGxlZ2VuZFxuICovXG5jbGFzcyBMZWdlbmRTZXR0aW5nc1YxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShsZWdlbmRTZXR0aW5ncywgcGFyZW50cykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhsZWdlbmRTZXR0aW5ncykucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgICAgYWNjdVtrZXldID0gbGVnZW5kU2V0dGluZ3Nba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSlcbiAgICB9O1xuICB9XG4gIGxvYWQobHMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgW3RoaXMua2V5XTogbHNcbiAgICB9O1xuICB9XG59XG5jb25zdCB2aXNDb25maWdNb2RpZmljYXRpb25WMSA9IHtcbiAgcG9pbnQ6ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgICF2aXNDb25maWcuaGFzT3duUHJvcGVydHkoJ2ZpbGxlZCcpICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAodmlzQ29uZmlnLm91dGxpbmUpIHtcbiAgICAgICAgLy8gcG9pbnQgbGF5ZXIgbm93IHN1cHBvcnRzIGJvdGggb3V0bGluZSBhbmQgZmlsbFxuICAgICAgICAvLyBmb3Igb2xkZXIgc2NoZW1hIHdoZXJlIGZpbGxlZCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gcG9pbnQgbGF5ZXJcbiAgICAgICAgLy8gc2V0IGl0IHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZDtcbiAgfSxcbiAgZ2VvanNvbjogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICAvLyBpcyBwb2ludHM/XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgIGxheWVyLnZpc3VhbENoYW5uZWxzICYmXG4gICAgICAhbGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKSAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICAobGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiYgbGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzRmllbGQpIHx8XG4gICAgICAodmlzQ29uZmlnICYmIHZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmIChpc1BvaW50KSB7XG4gICAgICAgIC8vIGlmIGlzIHBvaW50LCBzZXQgc3Ryb2tlIHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IHRydWU7XG4gICAgICAgIG1vZGlmaWVkLnN0cm9rZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH1cbn07XG5cbmNsYXNzIFZpc0NvbmZpZ1NjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAuLi52aXNDb25maWcsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YxID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgY29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdjb25maWcnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGRhdGFJZDogbnVsbCxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgY29sb3I6IG51bGwsXG4gICAgICBoaWdobGlnaHRDb2xvcjogbnVsbCxcbiAgICAgIGNvbHVtbnM6IG5ldyBDb2x1bW5TY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICdjb2x1bW5zJ1xuICAgICAgfSksXG4gICAgICBpc1Zpc2libGU6IG51bGwsXG4gICAgICB2aXNDb25maWc6IG5ldyBWaXNDb25maWdTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gICAgICB9KSxcbiAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IG51bGwsXG4gICAgICB0ZXh0TGFiZWw6IG5ldyBUZXh0TGFiZWxTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICd0ZXh0TGFiZWwnXG4gICAgICB9KVxuICAgIH1cbiAgfSksXG4gIGxlZ2VuZFNldHRpbmdzOiBuZXcgTGVnZW5kU2V0dGluZ3NWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnbGVnZW5kU2V0dGluZ3MnXG4gIH0pLFxuICB2aXN1YWxDaGFubmVsczogbmV3IFZpc3VhbENoYW5uZWxTY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAndmlzdWFsQ2hhbm5lbHMnXG4gIH0pXG59O1xuXG5leHBvcnQgY2xhc3MgTGF5ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdsYXllcnMnO1xuXG4gIHNhdmUobGF5ZXJzLCBwYXJlbnRzKSB7XG4gICAgY29uc3QgW3Zpc1N0YXRlXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IHZpc1N0YXRlLmxheWVyT3JkZXIucmVkdWNlKChzYXZlZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gc2F2ZSBsYXllcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlbmRlcmluZyBvcmRlclxuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpbmRleF07XG4gICAgICAgIGlmIChsYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgICAgICBzYXZlZC5wdXNoKHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyKS5sYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGxheWVycykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBsYXllcnMubWFwKGxheWVyID0+IHRoaXMubG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyLCBsYXllcnMpLmxheWVycylcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdmaWx0ZXJzJztcbiAgc2F2ZShmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnNcbiAgICAgICAgLmZpbHRlcihpc1ZhbGlkRmlsdGVyVmFsdWUpXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpbHRlcikuZmlsdGVycylcbiAgICB9O1xuICB9XG4gIGxvYWQoZmlsdGVycykge1xuICAgIHJldHVybiB7ZmlsdGVyc307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YwID0gWyd0b29sdGlwJywgJ2JydXNoJ107XG5cbmNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZCA/IHtba2V5XTogaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWd9IDoge30pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBjb252ZXJ0IHYwIC0+IHYxXG4gICAgLy8gcmV0dXJuIGVuYWJsZWQ6IGZhbHNlIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oaW50ZXJhY3Rpb25Db25maWdba2V5XSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YxID0gWy4uLmludGVyYWN0aW9uUHJvcHNWMCwgJ2dlb2NvZGVyJywgJ2Nvb3JkaW5hdGUnXTtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBzYXZlIGNvbmZpZyBldmVuIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICBjb25zdCBtb2RpZmllZENvbmZpZyA9IGludGVyYWN0aW9uQ29uZmlnO1xuICAgIE9iamVjdC5rZXlzKGludGVyYWN0aW9uQ29uZmlnKS5mb3JFYWNoKGNvbmZpZ1R5cGUgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1R5cGUgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1Nob3cgPSBtb2RpZmllZENvbmZpZ1tjb25maWdUeXBlXS5maWVsZHNUb1Nob3c7XG4gICAgICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGZpZWxkc1RvU2hvdykpIHtcbiAgICAgICAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNUb1Nob3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3dba2V5XSA9IGZpZWxkc1RvU2hvd1trZXldLm1hcChmaWVsZERhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZERhdGEubmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkRGF0YSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWVsZERhdGE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogbW9kaWZpZWRDb25maWd9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YwID0ge1xuICBkYXRhSWQ6IG51bGwsXG4gIGlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICB0eXBlOiBudWxsLFxuICB2YWx1ZTogbnVsbCxcbiAgZW5sYXJnZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoZmllbGQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogZmllbGQgPyB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShmaWVsZClbdGhpcy5rZXldIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBsb2FkKGZpZWxkKSB7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBmaWVsZH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNwbGl0TWFwc1NjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIGNvbnZlcnRMYXllclNldHRpbmdzKGFjY3UsIFtrZXksIHZhbHVlXSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IEJvb2xlYW4odmFsdWUuaXNWaXNpYmxlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH1cblxuICBsb2FkKHNwbGl0TWFwcykge1xuICAgIC8vIHByZXZpb3VzIHNwbGl0TWFwcyBTY2hlbWEge2xheWVyczoge2xheWVySWQ6IHtpc1Zpc2libGUsIGlzQXZhaWxhYmxlfX19XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BsaXRNYXBzKSB8fCAhc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtzcGxpdE1hcHM6IFtdfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKHNldHRpbmdzID0+ICh7XG4gICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICBsYXllcnM6IE9iamVjdC5lbnRyaWVzKHNldHRpbmdzLmxheWVycyB8fCB7fSkucmVkdWNlKHRoaXMuY29udmVydExheWVyU2V0dGluZ3MsIHt9KVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyUHJvcHNWMSA9IHtcbiAgLi4uZmlsdGVyUHJvcHNWMCxcbiAgcGxvdFR5cGU6IG51bGwsXG4gIGFuaW1hdGlvbldpbmRvdzogbnVsbCxcbiAgeUF4aXM6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAneUF4aXMnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG5hbWU6IG51bGwsXG4gICAgICB0eXBlOiBudWxsXG4gICAgfVxuICB9KSxcblxuICAvLyBwb2x5Z29uIGZpbHRlciBwcm9wZXJ0aWVzXG4gIGxheWVySWQ6IG51bGwsXG4gIHNwZWVkOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydGllc1YwID0ge1xuICBmaWx0ZXJzOiBuZXcgRmlsdGVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGZpbHRlclByb3BzVjBcbiAgfSksXG4gIGxheWVyczogbmV3IExheWVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGxheWVyUHJvcHNWMFxuICB9KSxcbiAgaW50ZXJhY3Rpb25Db25maWc6IG5ldyBJbnRlcmFjdGlvblNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBpbnRlcmFjdGlvblByb3BzVjBcbiAgfSksXG4gIGxheWVyQmxlbmRpbmc6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjEgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YxXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbCxcbiAgc3BsaXRNYXBzOiBuZXcgU3BsaXRNYXBzU2NoZW1hKHtcbiAgICBrZXk6ICdzcGxpdE1hcHMnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gIH0pLFxuICBhbmltYXRpb25Db25maWc6IG5ldyBTY2hlbWEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGN1cnJlbnRUaW1lOiBudWxsLFxuICAgICAgc3BlZWQ6IG51bGxcbiAgICB9LFxuICAgIGtleTogJ2FuaW1hdGlvbkNvbmZpZydcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYwID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjAsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYxID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjEsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYSA9IHtcbiAgW1ZFUlNJT05TLnYwXToge1xuICAgIHNhdmU6IHRvU2F2ZSA9PiB2aXNTdGF0ZVNjaGVtYVYwLnNhdmUodG9TYXZlKSxcbiAgICBsb2FkOiB0b0xvYWQgPT4gdmlzU3RhdGVTY2hlbWFWMS5sb2FkKHZpc1N0YXRlU2NoZW1hVjAubG9hZCh0b0xvYWQpLnZpc1N0YXRlKVxuICB9LFxuICBbVkVSU0lPTlMudjFdOiB2aXNTdGF0ZVNjaGVtYVYxXG59O1xuXG4vLyB0ZXN0IGxvYWQgdjBcbmV4cG9ydCBkZWZhdWx0IHZpc1N0YXRlU2NoZW1hO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFB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