@carto/kepler.gl 0.0.80 → 0.1.0-alpha.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 (1725) hide show
  1. package/README.md +652 -42
  2. package/dist/actions/action-wrapper.d.ts +115 -0
  3. package/dist/actions/actions.d.ts +195 -0
  4. package/dist/actions/identity-actions.d.ts +61 -0
  5. package/dist/actions/index.d.ts +9 -0
  6. package/dist/actions/map-state-actions.d.ts +69 -0
  7. package/dist/actions/map-style-actions.d.ts +146 -0
  8. package/dist/actions/provider-actions.d.ts +153 -0
  9. package/dist/actions/ui-state-actions.d.ts +300 -0
  10. package/dist/actions/vis-state-actions.d.ts +821 -0
  11. package/dist/bundle.js +75163 -0
  12. package/dist/bundle.js.map +1 -0
  13. package/dist/cloud-providers/index.d.ts +2 -0
  14. package/dist/cloud-providers/provider.d.ts +176 -0
  15. package/dist/components/bottom-widget.d.ts +47 -0
  16. package/dist/components/common/action-panel.d.ts +27 -0
  17. package/dist/components/common/animation-control/animation-control.d.ts +24 -0
  18. package/dist/components/common/animation-control/animation-controller.d.ts +16 -0
  19. package/dist/components/common/animation-control/animation-speed-slider.d.ts +12 -0
  20. package/dist/components/common/animation-control/floating-time-display.d.ts +9 -0
  21. package/dist/components/common/animation-control/playback-controls.d.ts +72 -0
  22. package/dist/components/common/animation-control/speed-control.d.ts +13 -0
  23. package/dist/components/common/checkbox.d.ts +35 -0
  24. package/dist/components/common/color-legend.d.ts +43 -0
  25. package/dist/components/common/data-table/button.d.ts +8 -0
  26. package/dist/components/common/data-table/canvas.d.ts +2 -0
  27. package/dist/components/common/data-table/cell-size.d.ts +36 -0
  28. package/dist/components/common/data-table/grid.d.ts +7 -0
  29. package/dist/components/common/data-table/index.d.ts +143 -0
  30. package/dist/components/common/data-table/option-dropdown.d.ts +14 -0
  31. package/dist/components/common/dataset-label.d.ts +10 -0
  32. package/dist/components/common/error-boundary.d.ts +16 -0
  33. package/dist/components/common/field-selector.d.ts +47 -0
  34. package/dist/components/common/field-token.d.ts +45 -0
  35. package/dist/components/common/file-uploader/file-drop.d.ts +54 -0
  36. package/dist/components/common/file-uploader/file-upload-progress.d.ts +8 -0
  37. package/dist/components/common/file-uploader/file-upload.d.ts +27 -0
  38. package/dist/components/common/file-uploader/upload-button.d.ts +8 -0
  39. package/dist/components/common/histogram-plot.d.ts +3 -0
  40. package/dist/components/common/icons/add.d.ts +9 -0
  41. package/dist/components/common/icons/anchor_window.d.ts +11 -0
  42. package/dist/components/common/icons/arrow-down-alt.d.ts +9 -0
  43. package/dist/components/common/icons/arrow-down-solid.d.ts +9 -0
  44. package/dist/components/common/icons/arrow-down.d.ts +9 -0
  45. package/dist/components/common/icons/arrow-left.d.ts +9 -0
  46. package/dist/components/common/icons/arrow-right.d.ts +9 -0
  47. package/dist/components/common/icons/arrow-up-alt.d.ts +9 -0
  48. package/dist/components/common/icons/arrow-up-solid.d.ts +9 -0
  49. package/dist/components/common/icons/arrow-up.d.ts +9 -0
  50. package/dist/components/common/icons/base.d.ts +29 -0
  51. package/dist/components/common/icons/bug.d.ts +9 -0
  52. package/dist/components/common/icons/cancel.d.ts +9 -0
  53. package/dist/components/common/icons/checkmark.d.ts +10 -0
  54. package/dist/components/common/icons/clipboard.d.ts +9 -0
  55. package/dist/components/common/icons/clock.d.ts +9 -0
  56. package/dist/components/common/icons/close.d.ts +9 -0
  57. package/dist/components/common/icons/code-alt.d.ts +9 -0
  58. package/dist/components/common/icons/copy.d.ts +9 -0
  59. package/dist/components/common/icons/crosshairs.d.ts +9 -0
  60. package/dist/components/common/icons/cube-3d.d.ts +9 -0
  61. package/dist/components/common/icons/cursor-click.d.ts +9 -0
  62. package/dist/components/common/icons/data-table.d.ts +10 -0
  63. package/dist/components/common/icons/db.d.ts +10 -0
  64. package/dist/components/common/icons/delete.d.ts +9 -0
  65. package/dist/components/common/icons/docs.d.ts +9 -0
  66. package/dist/components/common/icons/drag-n-drop.d.ts +9 -0
  67. package/dist/components/common/icons/draw-polygon.d.ts +10 -0
  68. package/dist/components/common/icons/email.d.ts +9 -0
  69. package/dist/components/common/icons/expand.d.ts +9 -0
  70. package/dist/components/common/icons/eye-seen.d.ts +9 -0
  71. package/dist/components/common/icons/eye-unseen.d.ts +9 -0
  72. package/dist/components/common/icons/file-type.d.ts +8 -0
  73. package/dist/components/common/icons/file.d.ts +9 -0
  74. package/dist/components/common/icons/files.d.ts +9 -0
  75. package/dist/components/common/icons/filter-funnel.d.ts +9 -0
  76. package/dist/components/common/icons/free-window.d.ts +11 -0
  77. package/dist/components/common/icons/gear.d.ts +9 -0
  78. package/dist/components/common/icons/hash.d.ts +9 -0
  79. package/dist/components/common/icons/histogram.d.ts +9 -0
  80. package/dist/components/common/icons/index.d.ts +78 -0
  81. package/dist/components/common/icons/info.d.ts +12 -0
  82. package/dist/components/common/icons/layers.d.ts +9 -0
  83. package/dist/components/common/icons/left-arrow.d.ts +9 -0
  84. package/dist/components/common/icons/legend.d.ts +9 -0
  85. package/dist/components/common/icons/line-chart.d.ts +9 -0
  86. package/dist/components/common/icons/login.d.ts +9 -0
  87. package/dist/components/common/icons/logout.d.ts +9 -0
  88. package/dist/components/common/icons/map-icon.d.ts +11 -0
  89. package/dist/components/common/icons/map.d.ts +11 -0
  90. package/dist/components/common/icons/messages.d.ts +9 -0
  91. package/dist/components/common/icons/minus.d.ts +9 -0
  92. package/dist/components/common/icons/order-by-dataset.d.ts +12 -0
  93. package/dist/components/common/icons/order-by-list.d.ts +12 -0
  94. package/dist/components/common/icons/pause.d.ts +9 -0
  95. package/dist/components/common/icons/picture.d.ts +9 -0
  96. package/dist/components/common/icons/pin.d.ts +9 -0
  97. package/dist/components/common/icons/play.d.ts +9 -0
  98. package/dist/components/common/icons/polygon.d.ts +10 -0
  99. package/dist/components/common/icons/rectangle.d.ts +10 -0
  100. package/dist/components/common/icons/reduce.d.ts +9 -0
  101. package/dist/components/common/icons/reset.d.ts +9 -0
  102. package/dist/components/common/icons/rocket.d.ts +9 -0
  103. package/dist/components/common/icons/save.d.ts +9 -0
  104. package/dist/components/common/icons/save2.d.ts +9 -0
  105. package/dist/components/common/icons/search.d.ts +9 -0
  106. package/dist/components/common/icons/settings.d.ts +9 -0
  107. package/dist/components/common/icons/share.d.ts +9 -0
  108. package/dist/components/common/icons/split.d.ts +9 -0
  109. package/dist/components/common/icons/square-select.d.ts +9 -0
  110. package/dist/components/common/icons/table.d.ts +9 -0
  111. package/dist/components/common/icons/trash.d.ts +9 -0
  112. package/dist/components/common/icons/upload.d.ts +9 -0
  113. package/dist/components/common/icons/vert-dots.d.ts +9 -0
  114. package/dist/components/common/icons/vert-three-dots.d.ts +9 -0
  115. package/dist/components/common/icons/warning.d.ts +10 -0
  116. package/dist/components/common/image-preview.d.ts +15 -0
  117. package/dist/components/common/info-helper.d.ts +11 -0
  118. package/dist/components/common/item-selector/accessor.d.ts +7 -0
  119. package/dist/components/common/item-selector/chickleted-input.d.ts +21 -0
  120. package/dist/components/common/item-selector/dropdown-list.d.ts +68 -0
  121. package/dist/components/common/item-selector/item-selector.d.ts +91 -0
  122. package/dist/components/common/item-selector/typeahead.d.ts +115 -0
  123. package/dist/components/common/line-chart.d.ts +34 -0
  124. package/dist/components/common/loading-spinner.d.ts +9 -0
  125. package/dist/components/common/logo.d.ts +8 -0
  126. package/dist/components/common/map-layer-selector.d.ts +13 -0
  127. package/dist/components/common/modal.d.ts +49 -0
  128. package/dist/components/common/portaled.d.ts +527 -0
  129. package/dist/components/common/progress-bar.d.ts +12 -0
  130. package/dist/components/common/range-brush.d.ts +19 -0
  131. package/dist/components/common/range-plot.d.ts +35 -0
  132. package/dist/components/common/range-slider.d.ts +32 -0
  133. package/dist/components/common/slider/mouse-event.d.ts +27 -0
  134. package/dist/components/common/slider/slider-bar-handle.d.ts +29 -0
  135. package/dist/components/common/slider/slider-handle.d.ts +33 -0
  136. package/dist/components/common/slider/slider.d.ts +70 -0
  137. package/dist/components/common/styled-components.d.ts +119 -0
  138. package/dist/components/common/switch.d.ts +16 -0
  139. package/dist/components/common/time-range-slider-time-title.d.ts +9 -0
  140. package/dist/components/common/time-range-slider.d.ts +32 -0
  141. package/dist/components/common/time-slider-marker.d.ts +21 -0
  142. package/dist/components/common/tippy-tooltip.d.ts +4 -0
  143. package/dist/components/common/toolbar-item.d.ts +14 -0
  144. package/dist/components/common/toolbar.d.ts +5 -0
  145. package/dist/components/common/vertical-toolbar.d.ts +3 -0
  146. package/dist/components/container.d.ts +39 -0
  147. package/dist/components/context.d.ts +7 -0
  148. package/dist/components/editor/constants.d.ts +17 -0
  149. package/dist/components/editor/editor.d.ts +29 -0
  150. package/dist/components/editor/feature-action-panel.d.ts +27 -0
  151. package/dist/components/editor/feature-styles.d.ts +24 -0
  152. package/dist/components/editor/handle-style.d.ts +38 -0
  153. package/dist/components/filters/components.d.ts +3 -0
  154. package/dist/components/filters/filter-panels/filter-panel-with-field-select.d.ts +10 -0
  155. package/dist/components/filters/filter-panels/multi-select-filter-panel.d.ts +9 -0
  156. package/dist/components/filters/filter-panels/new-filter-panel.d.ts +12 -0
  157. package/dist/components/filters/filter-panels/polygon-filter-panel.d.ts +9 -0
  158. package/dist/components/filters/filter-panels/range-filter-panel.d.ts +9 -0
  159. package/dist/components/filters/filter-panels/single-select-filter-panel.d.ts +9 -0
  160. package/dist/components/filters/filter-panels/time-range-filter-panel.d.ts +8 -0
  161. package/dist/components/filters/filter-panels/types.d.ts +36 -0
  162. package/dist/components/filters/index.d.ts +5 -0
  163. package/dist/components/filters/multi-select-filter.d.ts +3 -0
  164. package/dist/components/filters/polygon-filter.d.ts +4 -0
  165. package/dist/components/filters/range-filter.d.ts +8 -0
  166. package/dist/components/filters/single-select-filter.d.ts +3 -0
  167. package/dist/components/filters/time-range-filter.d.ts +28 -0
  168. package/dist/components/filters/time-widget.d.ts +14 -0
  169. package/dist/components/filters/types.d.ts +53 -0
  170. package/dist/components/geocoder/geocoder.d.ts +33 -0
  171. package/dist/components/geocoder-panel.d.ts +28 -0
  172. package/dist/components/index.d.ts +165 -0
  173. package/dist/components/injector.d.ts +25 -0
  174. package/dist/components/kepler-gl.d.ts +302 -0
  175. package/dist/components/map/coordinate-info.d.ts +7 -0
  176. package/dist/components/map/layer-hover-info.d.ts +13 -0
  177. package/dist/components/map/layer-selector-panel.d.ts +22 -0
  178. package/dist/components/map/locale-panel.d.ts +16 -0
  179. package/dist/components/map/map-control-panel.d.ts +14 -0
  180. package/dist/components/map/map-control-toolbar.d.ts +2 -0
  181. package/dist/components/map/map-control-tooltip.d.ts +7 -0
  182. package/dist/components/map/map-control.d.ts +44 -0
  183. package/dist/components/map/map-draw-panel.d.ts +21 -0
  184. package/dist/components/map/map-legend-panel.d.ts +23 -0
  185. package/dist/components/map/map-legend.d.ts +55 -0
  186. package/dist/components/map/map-popover.d.ts +37 -0
  187. package/dist/components/map/split-map-button.d.ts +19 -0
  188. package/dist/components/map/toggle-3d-button.d.ts +16 -0
  189. package/dist/components/map-container.d.ts +58 -0
  190. package/dist/components/maps-layout.d.ts +10 -0
  191. package/dist/components/modal-container.d.ts +65 -0
  192. package/dist/components/modals/add-map-style-modal.d.ts +17 -0
  193. package/dist/components/modals/cloud-tile.d.ts +15 -0
  194. package/dist/components/modals/data-table-modal.d.ts +29 -0
  195. package/dist/components/modals/delete-data-modal.d.ts +10 -0
  196. package/dist/components/modals/error-display.d.ts +6 -0
  197. package/dist/components/modals/export-data-modal.d.ts +25 -0
  198. package/dist/components/modals/export-image-modal.d.ts +18 -0
  199. package/dist/components/modals/export-map-modal/components.d.ts +8 -0
  200. package/dist/components/modals/export-map-modal/export-html-map.d.ts +12 -0
  201. package/dist/components/modals/export-map-modal/export-json-map.d.ts +9 -0
  202. package/dist/components/modals/export-map-modal/export-map-modal.d.ts +27 -0
  203. package/dist/components/modals/image-modal-container.d.ts +18 -0
  204. package/dist/components/modals/load-data-modal.d.ts +33 -0
  205. package/dist/components/modals/load-storage-map.d.ts +26 -0
  206. package/dist/components/modals/loading-dialog.d.ts +7 -0
  207. package/dist/components/modals/modal-dialog.d.ts +2 -0
  208. package/dist/components/modals/modal-tabs.d.ts +27 -0
  209. package/dist/components/modals/overwrite-map-modal.d.ts +16 -0
  210. package/dist/components/modals/provider-modal-container.d.ts +23 -0
  211. package/dist/components/modals/save-map-modal.d.ts +29 -0
  212. package/dist/components/modals/share-map-modal.d.ts +30 -0
  213. package/dist/components/modals/status-panel.d.ts +13 -0
  214. package/dist/components/modals/storage-map-viewer.d.ts +21 -0
  215. package/dist/components/notification-panel/notification-item.d.ts +66 -0
  216. package/dist/components/notification-panel.d.ts +61 -0
  217. package/dist/components/performance.d.ts +4 -0
  218. package/dist/components/plot-container.d.ts +24 -0
  219. package/dist/components/side-panel/cloud-storage-dropdown.d.ts +6 -0
  220. package/dist/components/side-panel/common/dataset-info.d.ts +3 -0
  221. package/dist/components/side-panel/common/dataset-tag.d.ts +3 -0
  222. package/dist/components/side-panel/common/dataset-title.d.ts +8 -0
  223. package/dist/components/side-panel/common/source-data-catalog.d.ts +9 -0
  224. package/dist/components/side-panel/common/source-data-selector.d.ts +8 -0
  225. package/dist/components/side-panel/common/types.d.ts +58 -0
  226. package/dist/components/side-panel/custom-panel.d.ts +9 -0
  227. package/dist/components/side-panel/filter-manager.d.ts +20 -0
  228. package/dist/components/side-panel/filter-panel/filter-panel-header.d.ts +21 -0
  229. package/dist/components/side-panel/filter-panel/filter-panel.d.ts +23 -0
  230. package/dist/components/side-panel/interaction-manager.d.ts +14 -0
  231. package/dist/components/side-panel/interaction-panel/brush-config.d.ts +15 -0
  232. package/dist/components/side-panel/interaction-panel/interaction-panel.d.ts +19 -0
  233. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +28 -0
  234. package/dist/components/side-panel/interaction-panel/tooltip-config.d.ts +38 -0
  235. package/dist/components/side-panel/layer-manager.d.ts +46 -0
  236. package/dist/components/side-panel/layer-panel/add-layer-button.d.ts +10 -0
  237. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.d.ts +8 -0
  238. package/dist/components/side-panel/layer-panel/color-palette.d.ts +13 -0
  239. package/dist/components/side-panel/layer-panel/color-range-selector.d.ts +129 -0
  240. package/dist/components/side-panel/layer-panel/color-selector.d.ts +101 -0
  241. package/dist/components/side-panel/layer-panel/column-selector.d.ts +22 -0
  242. package/dist/components/side-panel/layer-panel/custom-markers-config-group.d.ts +6 -0
  243. package/dist/components/side-panel/layer-panel/custom-palette.d.ts +38 -0
  244. package/dist/components/side-panel/layer-panel/custom-picker.d.ts +67 -0
  245. package/dist/components/side-panel/layer-panel/dataset-layer-group.d.ts +24 -0
  246. package/dist/components/side-panel/layer-panel/dataset-layer-section.d.ts +25 -0
  247. package/dist/components/side-panel/layer-panel/dataset-section.d.ts +26 -0
  248. package/dist/components/side-panel/layer-panel/dimension-scale-selector.d.ts +10 -0
  249. package/dist/components/side-panel/layer-panel/hex-column-config.d.ts +62 -0
  250. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.d.ts +8 -0
  251. package/dist/components/side-panel/layer-panel/layer-column-config.d.ts +20 -0
  252. package/dist/components/side-panel/layer-panel/layer-config-group.d.ts +37 -0
  253. package/dist/components/side-panel/layer-panel/layer-configurator.d.ts +415 -0
  254. package/dist/components/side-panel/layer-panel/layer-list.d.ts +20 -0
  255. package/dist/components/side-panel/layer-panel/layer-panel-header.d.ts +43 -0
  256. package/dist/components/side-panel/layer-panel/layer-panel.d.ts +40 -0
  257. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.d.ts +17 -0
  258. package/dist/components/side-panel/layer-panel/layer-type-list-item.d.ts +11 -0
  259. package/dist/components/side-panel/layer-panel/layer-type-selector.d.ts +23 -0
  260. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.d.ts +23 -0
  261. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.d.ts +36 -0
  262. package/dist/components/side-panel/layer-panel/single-color-palette.d.ts +12 -0
  263. package/dist/components/side-panel/layer-panel/text-label-panel.d.ts +18 -0
  264. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.d.ts +35 -0
  265. package/dist/components/side-panel/layer-panel/vis-config-slider.d.ts +20 -0
  266. package/dist/components/side-panel/layer-panel/vis-config-switch.d.ts +16 -0
  267. package/dist/components/side-panel/map-manager.d.ts +21 -0
  268. package/dist/components/side-panel/map-style-panel/map-layer-selector.d.ts +19 -0
  269. package/dist/components/side-panel/map-style-panel/map-style-selector.d.ts +16 -0
  270. package/dist/components/side-panel/panel-dropdown.d.ts +18 -0
  271. package/dist/components/side-panel/panel-header-action.d.ts +20 -0
  272. package/dist/components/side-panel/panel-header.d.ts +78 -0
  273. package/dist/components/side-panel/panel-tab.d.ts +20 -0
  274. package/dist/components/side-panel/panel-title.d.ts +4 -0
  275. package/dist/components/side-panel/panel-toggle.d.ts +14 -0
  276. package/dist/components/side-panel/side-bar.d.ts +76 -0
  277. package/dist/components/side-panel.d.ts +134 -0
  278. package/dist/components/types.d.ts +44 -0
  279. package/dist/connect/keplergl-connect.d.ts +5 -0
  280. package/dist/connect/with-local-selector.d.ts +6 -0
  281. package/dist/constants/action-types.d.ts +111 -0
  282. package/dist/constants/color-palette.d.ts +491 -0
  283. package/dist/constants/color-ranges.d.ts +24 -0
  284. package/dist/constants/custom-color-ranges.d.ts +37 -0
  285. package/dist/constants/default-settings.d.ts +773 -0
  286. package/dist/constants/index.d.ts +9 -0
  287. package/dist/constants/keyevent.d.ts +2 -0
  288. package/dist/constants/tooltip.d.ts +165 -0
  289. package/dist/constants/user-feedbacks.d.ts +5 -0
  290. package/dist/constants/user-guides.d.ts +9 -0
  291. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.d.ts +13 -0
  292. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.d.ts +7 -0
  293. package/dist/deckgl-layers/column-layer/enhanced-column-layer.d.ts +6 -0
  294. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.d.ts +13 -0
  295. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.d.ts +13 -0
  296. package/dist/deckgl-layers/layer-utils/cluster-utils.d.ts +12 -0
  297. package/dist/deckgl-layers/layer-utils/cpu-aggregator.d.ts +91 -0
  298. package/dist/deckgl-layers/layer-utils/shader-utils.d.ts +1 -0
  299. package/dist/deckgl-layers/line-layer/line-layer.d.ts +12 -0
  300. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.d.ts +8 -0
  301. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.d.ts +18 -0
  302. package/dist/index.d.ts +11 -0
  303. package/dist/layers/aggregation-layer.d.ts +70 -0
  304. package/dist/layers/arc-layer/arc-layer-icon.d.ts +16 -0
  305. package/dist/layers/arc-layer/arc-layer.d.ts +143 -0
  306. package/dist/layers/base-layer.d.ts +436 -0
  307. package/dist/layers/cluster-layer/cluster-layer-icon.d.ts +16 -0
  308. package/dist/layers/cluster-layer/cluster-layer.d.ts +39 -0
  309. package/dist/layers/default-layer-icon.d.ts +14 -0
  310. package/dist/layers/geojson-layer/geojson-layer-icon.d.ts +15 -0
  311. package/dist/layers/geojson-layer/geojson-layer.d.ts +230 -0
  312. package/dist/layers/geojson-layer/geojson-utils.d.ts +44 -0
  313. package/dist/layers/grid-layer/grid-layer-icon.d.ts +15 -0
  314. package/dist/layers/grid-layer/grid-layer.d.ts +74 -0
  315. package/dist/layers/grid-layer/grid-utils.d.ts +24 -0
  316. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.d.ts +16 -0
  317. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.d.ts +170 -0
  318. package/dist/layers/h3-hexagon-layer/h3-utils.d.ts +20 -0
  319. package/dist/layers/heatmap-layer/heatmap-layer-icon.d.ts +15 -0
  320. package/dist/layers/heatmap-layer/heatmap-layer.d.ts +144 -0
  321. package/dist/layers/hexagon-layer/hexagon-layer-icon.d.ts +15 -0
  322. package/dist/layers/hexagon-layer/hexagon-layer.d.ts +78 -0
  323. package/dist/layers/hexagon-layer/hexagon-utils.d.ts +7 -0
  324. package/dist/layers/icon-layer/icon-info-modal.d.ts +3 -0
  325. package/dist/layers/icon-layer/icon-layer-icon.d.ts +15 -0
  326. package/dist/layers/icon-layer/icon-layer.d.ts +119 -0
  327. package/dist/layers/index.d.ts +53 -0
  328. package/dist/layers/layer-factory.d.ts +150 -0
  329. package/dist/layers/layer-text-label.d.ts +7 -0
  330. package/dist/layers/layer-update.d.ts +9 -0
  331. package/dist/layers/line-layer/line-layer-icon.d.ts +15 -0
  332. package/dist/layers/line-layer/line-layer.d.ts +136 -0
  333. package/dist/layers/mapbox-utils.d.ts +57 -0
  334. package/dist/layers/mapboxgl-layer.d.ts +87 -0
  335. package/dist/layers/point-layer/point-layer-icon.d.ts +15 -0
  336. package/dist/layers/point-layer/point-layer.d.ts +272 -0
  337. package/dist/layers/s2-geometry-layer/s2-geometry-layer.d.ts +189 -0
  338. package/dist/layers/s2-geometry-layer/s2-layer-icon.d.ts +15 -0
  339. package/dist/layers/s2-geometry-layer/s2-utils.d.ts +7 -0
  340. package/dist/layers/scenegraph-layer/scenegraph-info-modal.d.ts +3 -0
  341. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.d.ts +15 -0
  342. package/dist/layers/scenegraph-layer/scenegraph-layer.d.ts +80 -0
  343. package/dist/layers/trip-layer/trip-info-modal.d.ts +3 -0
  344. package/dist/layers/trip-layer/trip-layer-icon.d.ts +15 -0
  345. package/dist/layers/trip-layer/trip-layer.d.ts +157 -0
  346. package/dist/layers/trip-layer/trip-utils.d.ts +31 -0
  347. package/dist/layers/types.d.ts +15 -0
  348. package/dist/localization/formatted-message.d.ts +12 -0
  349. package/dist/localization/index.d.ts +5 -0
  350. package/dist/localization/locales.d.ts +27 -0
  351. package/dist/localization/messages.d.ts +4 -0
  352. package/dist/localization/translations/ca.d.ts +438 -0
  353. package/dist/localization/translations/cn.d.ts +441 -0
  354. package/dist/localization/translations/en.d.ts +466 -0
  355. package/dist/localization/translations/es.d.ts +438 -0
  356. package/dist/localization/translations/fi.d.ts +410 -0
  357. package/dist/localization/translations/ja.d.ts +439 -0
  358. package/dist/localization/translations/pt.d.ts +410 -0
  359. package/dist/localization/translations/ru.d.ts +447 -0
  360. package/dist/middleware/index.d.ts +8 -0
  361. package/dist/processors/data-processor.d.ts +242 -0
  362. package/dist/processors/file-handler.d.ts +28 -0
  363. package/dist/processors/index.d.ts +3 -0
  364. package/dist/processors/types.d.ts +21 -0
  365. package/dist/reducers/combined-updaters.d.ts +52 -0
  366. package/dist/reducers/composer-helpers.d.ts +21 -0
  367. package/dist/reducers/composers.d.ts +12 -0
  368. package/dist/reducers/core.d.ts +65 -0
  369. package/dist/reducers/index.d.ts +19 -0
  370. package/dist/reducers/map-state-updaters.d.ts +96 -0
  371. package/dist/reducers/map-state.d.ts +4 -0
  372. package/dist/reducers/map-style-updaters.d.ts +204 -0
  373. package/dist/reducers/map-style.d.ts +16 -0
  374. package/dist/reducers/provider-state-updaters.d.ts +41 -0
  375. package/dist/reducers/provider-state.d.ts +4 -0
  376. package/dist/reducers/root.d.ts +24 -0
  377. package/dist/reducers/types.d.ts +16 -0
  378. package/dist/reducers/ui-state-updaters.d.ts +434 -0
  379. package/dist/reducers/ui-state.d.ts +3 -0
  380. package/dist/reducers/vis-state-merger.d.ts +110 -0
  381. package/dist/reducers/vis-state-selectors.d.ts +10 -0
  382. package/dist/reducers/vis-state-updaters.d.ts +645 -0
  383. package/dist/reducers/vis-state.d.ts +4 -0
  384. package/dist/schemas/dataset-schema.d.ts +17 -0
  385. package/dist/schemas/index.d.ts +8 -0
  386. package/dist/schemas/map-state-schema.d.ts +23 -0
  387. package/dist/schemas/map-style-schema.d.ts +38 -0
  388. package/dist/schemas/schema-manager.d.ts +271 -0
  389. package/dist/schemas/schema-utils.d.ts +11 -0
  390. package/dist/schemas/schema.d.ts +37 -0
  391. package/dist/schemas/versions.d.ts +5 -0
  392. package/dist/schemas/vis-state-schema.d.ts +214 -0
  393. package/dist/styles/base.d.ts +1530 -0
  394. package/dist/styles/index.d.ts +2 -0
  395. package/dist/styles/media-breakpoints.d.ts +13 -0
  396. package/dist/tasks/tasks.d.ts +15 -0
  397. package/dist/templates/export-map-html.d.ts +9 -0
  398. package/dist/utils/aggregate-utils.d.ts +3 -0
  399. package/dist/utils/color-utils.d.ts +44 -0
  400. package/dist/utils/data-scale-utils.d.ts +23 -0
  401. package/dist/utils/data-utils.d.ts +115 -0
  402. package/dist/utils/dataset-utils.d.ts +38 -0
  403. package/dist/utils/dom-to-image.d.ts +73 -0
  404. package/dist/utils/dom-utils.d.ts +20 -0
  405. package/dist/utils/export-utils.d.ts +56 -0
  406. package/dist/utils/filter-utils.d.ts +267 -0
  407. package/dist/utils/gl-utils.d.ts +1 -0
  408. package/dist/utils/gpu-filter-utils.d.ts +28 -0
  409. package/dist/utils/index.d.ts +22 -0
  410. package/dist/utils/interaction-utils.d.ts +36 -0
  411. package/dist/utils/layer-utils.d.ts +54 -0
  412. package/dist/utils/locale-utils.d.ts +2 -0
  413. package/dist/utils/map-info-utils.d.ts +1 -0
  414. package/dist/utils/map-style-utils/mapbox-gl-style-editor.d.ts +64 -0
  415. package/dist/utils/map-style-utils/mapbox-utils.d.ts +3 -0
  416. package/dist/utils/mapbox-utils.d.ts +7 -0
  417. package/dist/utils/notifications-utils.d.ts +54 -0
  418. package/dist/utils/observe-dimensions.d.ts +15 -0
  419. package/dist/utils/projection-utils.d.ts +12 -0
  420. package/dist/utils/searcher-utils.d.ts +1 -0
  421. package/dist/utils/split-map-utils.d.ts +29 -0
  422. package/dist/utils/table-utils/data-container-interface.d.ts +115 -0
  423. package/dist/utils/table-utils/data-container-utils.d.ts +29 -0
  424. package/dist/utils/table-utils/data-row.d.ts +59 -0
  425. package/dist/utils/table-utils/index.d.ts +1 -0
  426. package/dist/utils/table-utils/indexed-data-container.d.ts +34 -0
  427. package/dist/utils/table-utils/kepler-table.d.ts +168 -0
  428. package/dist/utils/table-utils/row-data-container.d.ts +31 -0
  429. package/dist/utils/utils.d.ts +98 -0
  430. package/package.json +167 -94
  431. package/src/actions/action-wrapper.ts +183 -0
  432. package/src/actions/actions.ts +259 -0
  433. package/src/actions/identity-actions.ts +116 -0
  434. package/src/actions/map-state-actions.ts +116 -0
  435. package/src/actions/map-style-actions.ts +243 -0
  436. package/src/actions/provider-actions.ts +218 -0
  437. package/src/actions/ui-state-actions.ts +490 -0
  438. package/src/actions/vis-state-actions.ts +1279 -0
  439. package/src/cloud-providers/index.ts +22 -0
  440. package/src/cloud-providers/provider.ts +276 -0
  441. package/src/components/bottom-widget.tsx +277 -0
  442. package/src/components/common/action-panel.tsx +207 -0
  443. package/src/components/common/animation-control/animation-control.tsx +157 -0
  444. package/src/components/common/animation-control/animation-controller.ts +250 -0
  445. package/src/components/common/animation-control/animation-speed-slider.tsx +86 -0
  446. package/src/components/common/animation-control/floating-time-display.tsx +209 -0
  447. package/src/components/common/animation-control/playback-controls.tsx +316 -0
  448. package/src/components/common/animation-control/speed-control.tsx +71 -0
  449. package/src/components/common/checkbox.tsx +137 -0
  450. package/src/components/common/color-legend.tsx +203 -0
  451. package/src/components/common/data-table/button.tsx +54 -0
  452. package/src/components/common/data-table/cell-size.ts +185 -0
  453. package/src/components/common/data-table/grid.tsx +57 -0
  454. package/src/components/common/data-table/index.tsx +693 -0
  455. package/src/components/common/data-table/option-dropdown.tsx +122 -0
  456. package/src/components/common/dataset-label.tsx +48 -0
  457. package/src/components/common/error-boundary.tsx +47 -0
  458. package/src/components/common/field-selector.tsx +242 -0
  459. package/src/components/common/field-token.tsx +60 -0
  460. package/src/components/common/file-uploader/file-drop.tsx +209 -0
  461. package/src/components/common/file-uploader/file-upload-progress.tsx +123 -0
  462. package/src/components/common/file-uploader/file-upload.tsx +319 -0
  463. package/src/components/common/file-uploader/upload-button.tsx +89 -0
  464. package/src/components/common/histogram-plot.tsx +125 -0
  465. package/src/components/common/icons/add.tsx +37 -0
  466. package/src/components/common/icons/anchor_window.tsx +49 -0
  467. package/src/components/common/icons/arrow-down-alt.tsx +37 -0
  468. package/src/components/common/icons/arrow-down-solid.tsx +37 -0
  469. package/src/components/common/icons/arrow-down.tsx +40 -0
  470. package/src/components/common/icons/arrow-left.tsx +42 -0
  471. package/src/components/common/icons/arrow-right.tsx +40 -0
  472. package/src/components/common/icons/arrow-up-alt.tsx +40 -0
  473. package/src/components/common/icons/arrow-up-solid.tsx +37 -0
  474. package/src/components/common/icons/arrow-up.tsx +40 -0
  475. package/src/components/common/icons/base.tsx +95 -0
  476. package/src/components/common/icons/bug.tsx +40 -0
  477. package/src/components/common/icons/cancel.tsx +37 -0
  478. package/src/components/common/icons/checkmark.tsx +39 -0
  479. package/src/components/common/icons/chevron-right.js +1 -1
  480. package/src/components/common/icons/clipboard.tsx +40 -0
  481. package/src/components/common/icons/clock.tsx +38 -0
  482. package/src/components/common/icons/close.tsx +43 -0
  483. package/src/components/common/icons/code-alt.tsx +37 -0
  484. package/src/components/common/icons/copy.tsx +38 -0
  485. package/src/components/common/icons/crosshairs.tsx +37 -0
  486. package/src/components/common/icons/cube-3d.tsx +39 -0
  487. package/src/components/common/icons/cursor-click.tsx +43 -0
  488. package/src/components/common/icons/data-table.tsx +40 -0
  489. package/src/components/common/icons/db.tsx +40 -0
  490. package/src/components/common/icons/delete.tsx +39 -0
  491. package/src/components/common/icons/docs.tsx +40 -0
  492. package/src/components/common/icons/drag-n-drop.tsx +38 -0
  493. package/src/components/common/icons/draw-polygon.tsx +51 -0
  494. package/src/components/common/icons/email.tsx +39 -0
  495. package/src/components/common/icons/expand.tsx +39 -0
  496. package/src/components/common/icons/eye-seen.tsx +38 -0
  497. package/src/components/common/icons/eye-unseen.tsx +38 -0
  498. package/src/components/common/icons/file-type.tsx +71 -0
  499. package/src/components/common/icons/file.tsx +37 -0
  500. package/src/components/common/icons/files.tsx +37 -0
  501. package/src/components/common/icons/filter-funnel.tsx +37 -0
  502. package/src/components/common/icons/free-window.tsx +48 -0
  503. package/src/components/common/icons/gear.tsx +40 -0
  504. package/src/components/common/icons/hash.tsx +37 -0
  505. package/src/components/common/icons/histogram.tsx +42 -0
  506. package/src/components/common/icons/index.tsx +98 -0
  507. package/src/components/common/icons/info.tsx +48 -0
  508. package/src/components/common/icons/layers.tsx +37 -0
  509. package/src/components/common/icons/left-arrow.tsx +37 -0
  510. package/src/components/common/icons/legend.tsx +37 -0
  511. package/src/components/common/icons/line-chart.tsx +40 -0
  512. package/src/components/common/icons/login.tsx +41 -0
  513. package/src/components/common/icons/logout.tsx +38 -0
  514. package/src/components/common/icons/map-icon.tsx +62 -0
  515. package/src/components/common/icons/map.tsx +62 -0
  516. package/src/components/common/icons/messages.tsx +37 -0
  517. package/src/components/common/icons/minus.tsx +39 -0
  518. package/src/components/common/icons/order-by-dataset.tsx +49 -0
  519. package/src/components/common/icons/order-by-list.tsx +39 -0
  520. package/src/components/common/icons/pause.tsx +37 -0
  521. package/src/components/common/icons/picture.tsx +37 -0
  522. package/src/components/common/icons/pin.tsx +42 -0
  523. package/src/components/common/icons/play.tsx +37 -0
  524. package/src/components/common/icons/polygon.tsx +65 -0
  525. package/src/components/common/icons/rectangle.tsx +66 -0
  526. package/src/components/common/icons/reduce.tsx +42 -0
  527. package/src/components/common/icons/reset.tsx +37 -0
  528. package/src/components/common/icons/rocket.tsx +37 -0
  529. package/src/components/common/icons/save.tsx +38 -0
  530. package/src/components/common/icons/save2.tsx +42 -0
  531. package/src/components/common/icons/search.tsx +38 -0
  532. package/src/components/common/icons/settings.tsx +39 -0
  533. package/src/components/common/icons/share.tsx +37 -0
  534. package/src/components/common/icons/split.tsx +57 -0
  535. package/src/components/common/icons/square-select.tsx +38 -0
  536. package/src/components/common/icons/swap-horizontal.js +1 -1
  537. package/src/components/common/icons/table.tsx +41 -0
  538. package/src/components/common/icons/trash.tsx +45 -0
  539. package/src/components/common/icons/upload.tsx +37 -0
  540. package/src/components/common/icons/vert-dots.tsx +44 -0
  541. package/src/components/common/icons/vert-three-dots.tsx +39 -0
  542. package/src/components/common/icons/warning.tsx +40 -0
  543. package/src/components/common/image-preview.tsx +118 -0
  544. package/src/components/common/info-helper.tsx +91 -0
  545. package/src/components/common/item-selector/accessor.ts +45 -0
  546. package/src/components/common/item-selector/chickleted-input.tsx +153 -0
  547. package/src/components/common/item-selector/dropdown-list.tsx +269 -0
  548. package/src/components/common/item-selector/item-selector-submenu.js +1 -1
  549. package/src/components/common/item-selector/item-selector.d.ts +24 -27
  550. package/src/components/common/item-selector/item-selector.tsx +373 -0
  551. package/src/components/common/item-selector/typeahead.tsx +533 -0
  552. package/src/components/common/line-chart.tsx +170 -0
  553. package/src/components/common/loading-spinner.tsx +75 -0
  554. package/src/components/common/logo.tsx +88 -0
  555. package/src/components/common/map-layer-selector.tsx +64 -0
  556. package/src/components/common/modal.tsx +238 -0
  557. package/src/components/common/portaled.tsx +311 -0
  558. package/src/components/common/progress-bar.tsx +74 -0
  559. package/src/components/common/range-brush.tsx +276 -0
  560. package/src/components/common/range-plot.tsx +145 -0
  561. package/src/components/common/range-slider.tsx +320 -0
  562. package/src/components/common/slider/mouse-event.ts +122 -0
  563. package/src/components/common/slider/slider-bar-handle.tsx +106 -0
  564. package/src/components/common/slider/slider-handle.tsx +210 -0
  565. package/src/components/common/slider/slider.tsx +234 -0
  566. package/src/components/common/styled-components.tsx +714 -0
  567. package/src/components/common/switch.tsx +47 -0
  568. package/src/components/common/time-range-slider-time-title.tsx +87 -0
  569. package/src/components/common/time-range-slider.tsx +171 -0
  570. package/src/components/common/time-slider-marker.tsx +187 -0
  571. package/src/components/common/tippy-tooltip.tsx +130 -0
  572. package/src/components/common/toolbar-item.tsx +99 -0
  573. package/src/components/common/toolbar.tsx +49 -0
  574. package/src/components/common/vertical-toolbar.tsx +35 -0
  575. package/src/components/container.d.ts +8 -0
  576. package/src/components/container.tsx +189 -0
  577. package/src/components/context.ts +32 -0
  578. package/src/components/editor/editor.tsx +234 -0
  579. package/src/components/editor/feature-action-panel.tsx +155 -0
  580. package/src/components/editor/feature-styles.ts +76 -0
  581. package/src/components/editor/handle-style.ts +89 -0
  582. package/src/components/filters/filter-panels/filter-panel-with-field-select.tsx +118 -0
  583. package/src/components/filters/filter-panels/multi-select-filter-panel.tsx +63 -0
  584. package/src/components/filters/filter-panels/new-filter-panel.tsx +100 -0
  585. package/src/components/filters/filter-panels/polygon-filter-panel.tsx +84 -0
  586. package/src/components/filters/filter-panels/range-filter-panel.tsx +63 -0
  587. package/src/components/filters/filter-panels/single-select-filter-panel.tsx +63 -0
  588. package/src/components/filters/filter-panels/time-range-filter-panel.tsx +92 -0
  589. package/src/components/filters/filter-panels/types.ts +40 -0
  590. package/src/components/filters/multi-select-filter.tsx +37 -0
  591. package/src/components/filters/polygon-filter.tsx +74 -0
  592. package/src/components/filters/range-filter.tsx +44 -0
  593. package/src/components/filters/single-select-filter.tsx +50 -0
  594. package/src/components/filters/time-range-filter.tsx +76 -0
  595. package/src/components/filters/time-widget.tsx +240 -0
  596. package/src/components/filters/types.ts +78 -0
  597. package/src/components/geocoder/geocoder.tsx +307 -0
  598. package/src/components/geocoder-panel.tsx +199 -0
  599. package/src/components/index.ts +269 -0
  600. package/src/components/injector.d.ts +33 -0
  601. package/src/components/injector.tsx +171 -0
  602. package/src/components/kepler-gl.d.ts +1 -2
  603. package/src/components/kepler-gl.tsx +585 -0
  604. package/src/components/map/coordinate-info.tsx +58 -0
  605. package/src/components/map/layer-hover-info.tsx +192 -0
  606. package/src/components/map/layer-selector-panel.tsx +122 -0
  607. package/src/components/map/locale-panel.tsx +110 -0
  608. package/src/components/map/map-control-panel.tsx +142 -0
  609. package/src/components/map/map-control-tooltip.tsx +45 -0
  610. package/src/components/map/map-control.tsx +138 -0
  611. package/src/components/map/map-draw-panel.tsx +145 -0
  612. package/src/components/map/map-legend-panel.tsx +167 -0
  613. package/src/components/map/map-legend.tsx +284 -0
  614. package/src/components/map/map-popover.tsx +268 -0
  615. package/src/components/map/split-map-button.tsx +98 -0
  616. package/src/components/map/toggle-3d-button.tsx +90 -0
  617. package/src/components/map-container.tsx +549 -0
  618. package/src/components/maps-layout.tsx +45 -0
  619. package/src/components/modal-container.tsx +555 -0
  620. package/src/components/modals/add-map-style-modal.tsx +304 -0
  621. package/src/components/modals/cloud-tile.tsx +181 -0
  622. package/src/components/modals/data-table-modal.tsx +241 -0
  623. package/src/components/modals/delete-data-modal.tsx +55 -0
  624. package/src/components/modals/error-display.tsx +43 -0
  625. package/src/components/modals/export-data-modal.tsx +201 -0
  626. package/src/components/modals/export-image-modal.tsx +155 -0
  627. package/src/components/modals/export-map-modal/export-html-map.tsx +164 -0
  628. package/src/components/modals/export-map-modal/export-json-map.tsx +112 -0
  629. package/src/components/modals/export-map-modal/export-map-modal.tsx +109 -0
  630. package/src/components/modals/image-modal-container.tsx +86 -0
  631. package/src/components/modals/load-data-modal.tsx +120 -0
  632. package/src/components/modals/load-storage-map.tsx +414 -0
  633. package/src/components/modals/loading-dialog.tsx +77 -0
  634. package/src/components/modals/modal-tabs.tsx +137 -0
  635. package/src/components/modals/overwrite-map-modal.tsx +113 -0
  636. package/src/components/modals/provider-modal-container.tsx +62 -0
  637. package/src/components/modals/save-map-modal.tsx +277 -0
  638. package/src/components/modals/share-map-modal.tsx +217 -0
  639. package/src/components/modals/status-panel.tsx +106 -0
  640. package/src/components/modals/storage-map-viewer.tsx +190 -0
  641. package/src/components/notification-panel/notification-item.tsx +143 -0
  642. package/src/components/notification-panel.tsx +75 -0
  643. package/src/components/performance.tsx +105 -0
  644. package/src/components/plot-container.tsx +243 -0
  645. package/src/components/side-panel/common/dataset-info.tsx +46 -0
  646. package/src/components/side-panel/common/dataset-tag.tsx +86 -0
  647. package/src/components/side-panel/common/dataset-title.tsx +187 -0
  648. package/src/components/side-panel/common/source-data-catalog.tsx +67 -0
  649. package/src/components/side-panel/common/source-data-selector.tsx +90 -0
  650. package/src/components/side-panel/common/types.ts +76 -0
  651. package/src/components/side-panel/filter-manager.tsx +120 -0
  652. package/src/components/side-panel/filter-panel/filter-panel-header.tsx +96 -0
  653. package/src/components/side-panel/filter-panel/filter-panel.tsx +125 -0
  654. package/src/components/side-panel/interaction-manager.tsx +59 -0
  655. package/src/components/side-panel/interaction-panel/brush-config.tsx +58 -0
  656. package/src/components/side-panel/interaction-panel/interaction-panel.tsx +124 -0
  657. package/src/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.tsx +243 -0
  658. package/src/components/side-panel/interaction-panel/tooltip-config.tsx +238 -0
  659. package/src/components/side-panel/layer-manager.tsx +242 -0
  660. package/src/components/side-panel/layer-panel/add-layer-button.tsx +208 -0
  661. package/src/components/side-panel/layer-panel/color-dimension-scale-selector.tsx +33 -0
  662. package/src/components/side-panel/layer-panel/color-palette.tsx +98 -0
  663. package/src/components/side-panel/layer-panel/color-range-selector.tsx +388 -0
  664. package/src/components/side-panel/layer-panel/color-selector.tsx +200 -0
  665. package/src/components/side-panel/layer-panel/column-selector.tsx +102 -0
  666. package/src/components/side-panel/layer-panel/custom-markers-config-group.tsx +30 -0
  667. package/src/components/side-panel/layer-panel/custom-palette.tsx +301 -0
  668. package/src/components/side-panel/layer-panel/custom-picker.tsx +99 -0
  669. package/src/components/side-panel/layer-panel/dataset-layer-group.tsx +99 -0
  670. package/src/components/side-panel/layer-panel/dataset-layer-section.tsx +100 -0
  671. package/src/components/side-panel/layer-panel/dataset-section.tsx +125 -0
  672. package/src/components/side-panel/layer-panel/dimension-scale-selector.tsx +64 -0
  673. package/src/components/side-panel/layer-panel/hex-column-config.tsx +53 -0
  674. package/src/components/side-panel/layer-panel/layer-column-config.tsx +115 -0
  675. package/src/components/side-panel/layer-panel/layer-config-group.tsx +259 -0
  676. package/src/components/side-panel/layer-panel/layer-configurator.tsx +1419 -0
  677. package/src/components/side-panel/layer-panel/layer-list.tsx +193 -0
  678. package/src/components/side-panel/layer-panel/layer-panel-header.tsx +273 -0
  679. package/src/components/side-panel/layer-panel/layer-panel.tsx +197 -0
  680. package/src/components/side-panel/layer-panel/layer-type-dropdown-list.tsx +118 -0
  681. package/src/components/side-panel/layer-panel/layer-type-list-item.tsx +92 -0
  682. package/src/components/side-panel/layer-panel/layer-type-selector.tsx +115 -0
  683. package/src/components/side-panel/layer-panel/layer-visibility-by-zoom.tsx +123 -0
  684. package/src/components/side-panel/layer-panel/panel-view-list-toggle.tsx +132 -0
  685. package/src/components/side-panel/layer-panel/single-color-palette.tsx +94 -0
  686. package/src/components/side-panel/layer-panel/text-label-panel.tsx +189 -0
  687. package/src/components/side-panel/layer-panel/vis-config-by-field-selector.tsx +187 -0
  688. package/src/components/side-panel/layer-panel/vis-config-slider.tsx +237 -0
  689. package/src/components/side-panel/layer-panel/vis-config-switch.tsx +86 -0
  690. package/src/components/side-panel/map-manager.tsx +123 -0
  691. package/src/components/side-panel/map-style-panel/map-layer-selector.tsx +145 -0
  692. package/src/components/side-panel/map-style-panel/map-style-selector.tsx +122 -0
  693. package/src/components/side-panel/panel-dropdown.tsx +54 -0
  694. package/src/components/side-panel/panel-header-action.tsx +114 -0
  695. package/src/components/side-panel/panel-header.tsx +386 -0
  696. package/src/components/side-panel/panel-tab.tsx +79 -0
  697. package/src/components/side-panel/panel-title.tsx +35 -0
  698. package/src/components/side-panel/panel-toggle.tsx +72 -0
  699. package/src/components/side-panel/side-bar.tsx +141 -0
  700. package/src/components/side-panel.tsx +261 -0
  701. package/src/components/types.ts +41 -0
  702. package/src/connect/keplergl-connect.ts +48 -0
  703. package/src/connect/with-local-selector.tsx +70 -0
  704. package/src/constants/action-types.ts +188 -0
  705. package/src/constants/color-ranges.ts +87 -0
  706. package/src/constants/default-settings.ts +1051 -0
  707. package/src/constants/index.ts +84 -0
  708. package/src/deckgl-layers/3d-building-layer/3d-building-layer.ts +63 -0
  709. package/src/deckgl-layers/3d-building-layer/3d-building-utils.ts +211 -0
  710. package/src/deckgl-layers/3d-building-layer/types.ts +29 -0
  711. package/src/deckgl-layers/column-layer/enhanced-column-layer.ts +63 -0
  712. package/src/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.ts +70 -0
  713. package/src/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.ts +70 -0
  714. package/src/deckgl-layers/layer-utils/cluster-utils.ts +78 -0
  715. package/src/deckgl-layers/layer-utils/cpu-aggregator.ts +671 -0
  716. package/src/deckgl-layers/layer-utils/shader-utils.ts +41 -0
  717. package/src/deckgl-layers/line-layer/line-layer.ts +126 -0
  718. package/src/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.ts +68 -0
  719. package/src/deckgl-layers/svg-icon-layer/svg-icon-layer.ts +102 -0
  720. package/src/index.ts +54 -0
  721. package/src/layers/aggregation-layer.ts +400 -0
  722. package/src/layers/arc-layer/arc-layer-icon.tsx +67 -0
  723. package/src/layers/arc-layer/arc-layer.ts +294 -0
  724. package/src/layers/base-layer.ts +1744 -0
  725. package/src/layers/cluster-layer/cluster-layer.ts +162 -0
  726. package/src/layers/geojson-layer/geojson-layer-icon.tsx +68 -0
  727. package/src/layers/geojson-layer/geojson-layer.ts +462 -0
  728. package/src/layers/geojson-layer/geojson-utils.ts +200 -0
  729. package/src/layers/grid-layer/grid-layer-icon.tsx +53 -0
  730. package/src/layers/grid-layer/grid-layer.ts +154 -0
  731. package/src/layers/grid-layer/grid-utils.ts +84 -0
  732. package/src/layers/h3-hexagon-layer/h3-hexagon-layer.ts +340 -0
  733. package/src/layers/h3-hexagon-layer/h3-utils.ts +67 -0
  734. package/src/layers/heatmap-layer/heatmap-layer.ts +255 -0
  735. package/src/layers/hexagon-layer/hexagon-layer.ts +157 -0
  736. package/src/layers/hexagon-layer/hexagon-utils.ts +64 -0
  737. package/src/layers/icon-layer/icon-info-modal.tsx +155 -0
  738. package/src/layers/icon-layer/icon-layer.ts +396 -0
  739. package/src/layers/index.ts +81 -0
  740. package/src/layers/layer-factory.ts +707 -0
  741. package/src/layers/layer-text-label.ts +62 -0
  742. package/src/layers/layer-update.ts +70 -0
  743. package/src/layers/line-layer/line-layer.ts +223 -0
  744. package/src/layers/mapbox-utils.ts +204 -0
  745. package/src/layers/mapboxgl-layer.ts +176 -0
  746. package/src/layers/point-layer/point-layer.ts +507 -0
  747. package/src/layers/s2-geometry-layer/s2-geometry-layer.ts +369 -0
  748. package/src/layers/s2-geometry-layer/s2-utils.ts +42 -0
  749. package/src/layers/scenegraph-layer/scenegraph-layer.ts +237 -0
  750. package/src/layers/trip-layer/trip-layer.ts +356 -0
  751. package/src/layers/trip-layer/trip-utils.ts +177 -0
  752. package/src/localization/formatted-message.tsx +42 -0
  753. package/src/localization/index.ts +29 -0
  754. package/src/localization/locales.ts +53 -0
  755. package/src/localization/messages.ts +40 -0
  756. package/src/localization/translations/ca.ts +476 -0
  757. package/src/localization/translations/cn.ts +477 -0
  758. package/src/localization/translations/en.ts +504 -0
  759. package/src/localization/translations/es.ts +477 -0
  760. package/src/localization/translations/fi.ts +448 -0
  761. package/src/localization/translations/ja.ts +477 -0
  762. package/src/localization/translations/pt.ts +449 -0
  763. package/src/localization/translations/ru.ts +488 -0
  764. package/src/middleware/index.ts +35 -0
  765. package/src/processors/data-processor.ts +723 -0
  766. package/src/processors/file-handler.ts +250 -0
  767. package/src/processors/index.ts +23 -0
  768. package/src/processors/types.ts +22 -0
  769. package/src/reducers/combined-updaters.ts +215 -0
  770. package/src/reducers/composer-helpers.ts +75 -0
  771. package/src/reducers/core.ts +111 -0
  772. package/src/reducers/index.ts +116 -0
  773. package/src/reducers/map-state-updaters.ts +271 -0
  774. package/src/reducers/map-state.ts +47 -0
  775. package/src/reducers/map-style-updaters.ts +638 -0
  776. package/src/reducers/map-style.ts +53 -0
  777. package/src/reducers/provider-state-updaters.ts +454 -0
  778. package/src/reducers/provider-state.ts +53 -0
  779. package/src/reducers/root.ts +230 -0
  780. package/src/reducers/types.ts +18 -0
  781. package/src/reducers/ui-state-updaters.ts +925 -0
  782. package/src/reducers/ui-state.ts +75 -0
  783. package/src/reducers/vis-state-merger.ts +625 -0
  784. package/src/reducers/vis-state-selectors.ts +35 -0
  785. package/src/reducers/vis-state-updaters.ts +2567 -0
  786. package/src/reducers/vis-state.ts +157 -0
  787. package/src/schemas/dataset-schema.ts +141 -0
  788. package/src/schemas/index.ts +52 -0
  789. package/src/schemas/schema-manager.ts +445 -0
  790. package/src/schemas/schema.ts +122 -0
  791. package/src/schemas/vis-state-schema.ts +761 -0
  792. package/src/styles/base.ts +1642 -0
  793. package/src/styles/media-breakpoints.ts +56 -0
  794. package/src/tasks/tasks.ts +92 -0
  795. package/src/typedefs/deckgl.d.ts +25 -0
  796. package/src/utils/aggregate-utils.ts +71 -0
  797. package/src/utils/color-utils.ts +135 -0
  798. package/src/utils/data-scale-utils.ts +73 -0
  799. package/src/utils/data-utils.ts +459 -0
  800. package/src/utils/dataset-utils.ts +261 -0
  801. package/src/utils/dom-to-image.ts +533 -0
  802. package/src/utils/dom-utils.ts +354 -0
  803. package/src/utils/export-utils.ts +265 -0
  804. package/src/utils/filter-utils.ts +1181 -0
  805. package/src/utils/gpu-filter-utils.ts +249 -0
  806. package/src/utils/index.ts +72 -0
  807. package/src/utils/interaction-utils.ts +212 -0
  808. package/src/utils/layer-utils.ts +248 -0
  809. package/src/utils/map-style-utils/mapbox-gl-style-editor.ts +227 -0
  810. package/src/utils/notifications-utils.ts +89 -0
  811. package/src/utils/observe-dimensions.ts +127 -0
  812. package/src/utils/split-map-utils.ts +104 -0
  813. package/src/utils/table-utils/data-container-interface.ts +140 -0
  814. package/src/utils/table-utils/data-container-utils.ts +90 -0
  815. package/src/utils/table-utils/data-row.ts +110 -0
  816. package/src/utils/table-utils/indexed-data-container.ts +184 -0
  817. package/src/utils/table-utils/kepler-table.ts +638 -0
  818. package/src/utils/table-utils/row-data-container.ts +178 -0
  819. package/src/utils/utils.ts +228 -0
  820. package/CHANGELOG.md +0 -979
  821. package/actions.js +0 -21
  822. package/cloud-providers.js +0 -21
  823. package/components.js +0 -21
  824. package/constants.js +0 -21
  825. package/dist/actions/action-wrapper.js +0 -190
  826. package/dist/actions/actions.js +0 -189
  827. package/dist/actions/identity-actions.js +0 -96
  828. package/dist/actions/index.js +0 -144
  829. package/dist/actions/map-state-actions.js +0 -103
  830. package/dist/actions/map-style-actions.js +0 -152
  831. package/dist/actions/provider-actions.js +0 -113
  832. package/dist/actions/ui-state-actions.js +0 -288
  833. package/dist/actions/vis-state-actions.js +0 -985
  834. package/dist/cloud-providers/index.js +0 -22
  835. package/dist/cloud-providers/provider.js +0 -347
  836. package/dist/components/bottom-widget.js +0 -214
  837. package/dist/components/common/action-panel.js +0 -135
  838. package/dist/components/common/animation-control/animation-control.js +0 -128
  839. package/dist/components/common/animation-control/animation-controller.js +0 -250
  840. package/dist/components/common/animation-control/animation-speed-slider.js +0 -91
  841. package/dist/components/common/animation-control/floating-time-display.js +0 -146
  842. package/dist/components/common/animation-control/playback-controls.js +0 -262
  843. package/dist/components/common/animation-control/speed-control.js +0 -70
  844. package/dist/components/common/checkbox.js +0 -134
  845. package/dist/components/common/color-legend.js +0 -217
  846. package/dist/components/common/data-table/button.js +0 -53
  847. package/dist/components/common/data-table/canvas.js +0 -43
  848. package/dist/components/common/data-table/cell-size.js +0 -170
  849. package/dist/components/common/data-table/grid.js +0 -83
  850. package/dist/components/common/data-table/index.js +0 -472
  851. package/dist/components/common/data-table/option-dropdown.js +0 -99
  852. package/dist/components/common/dataset-label.js +0 -44
  853. package/dist/components/common/error-boundary.js +0 -78
  854. package/dist/components/common/field-selector.js +0 -248
  855. package/dist/components/common/field-token.js +0 -47
  856. package/dist/components/common/file-uploader/file-drop.js +0 -212
  857. package/dist/components/common/file-uploader/file-upload-progress.js +0 -104
  858. package/dist/components/common/file-uploader/file-upload.js +0 -265
  859. package/dist/components/common/file-uploader/upload-button.js +0 -100
  860. package/dist/components/common/histogram-plot.js +0 -107
  861. package/dist/components/common/icons/add.js +0 -64
  862. package/dist/components/common/icons/anchor_window.js +0 -56
  863. package/dist/components/common/icons/arrow-down-alt.js +0 -64
  864. package/dist/components/common/icons/arrow-down-solid .js +0 -64
  865. package/dist/components/common/icons/arrow-down.js +0 -64
  866. package/dist/components/common/icons/arrow-left.js +0 -67
  867. package/dist/components/common/icons/arrow-right.js +0 -64
  868. package/dist/components/common/icons/arrow-up-alt.js +0 -65
  869. package/dist/components/common/icons/arrow-up-solid.js +0 -64
  870. package/dist/components/common/icons/arrow-up.js +0 -64
  871. package/dist/components/common/icons/base.js +0 -106
  872. package/dist/components/common/icons/bug.js +0 -66
  873. package/dist/components/common/icons/cancel.js +0 -64
  874. package/dist/components/common/icons/checkmark.js +0 -70
  875. package/dist/components/common/icons/chevron-right.js +0 -69
  876. package/dist/components/common/icons/clipboard.js +0 -65
  877. package/dist/components/common/icons/clock.js +0 -66
  878. package/dist/components/common/icons/close.js +0 -69
  879. package/dist/components/common/icons/code-alt.js +0 -67
  880. package/dist/components/common/icons/copy.js +0 -69
  881. package/dist/components/common/icons/crosshairs.js +0 -67
  882. package/dist/components/common/icons/cube-3d.js +0 -68
  883. package/dist/components/common/icons/cursor-click.js +0 -68
  884. package/dist/components/common/icons/data-table.js +0 -65
  885. package/dist/components/common/icons/db.js +0 -65
  886. package/dist/components/common/icons/delete.js +0 -65
  887. package/dist/components/common/icons/docs.js +0 -80
  888. package/dist/components/common/icons/drag-n-drop.js +0 -66
  889. package/dist/components/common/icons/draw-polygon.js +0 -87
  890. package/dist/components/common/icons/email.js +0 -68
  891. package/dist/components/common/icons/expand.js +0 -66
  892. package/dist/components/common/icons/eye-seen.js +0 -66
  893. package/dist/components/common/icons/eye-unseen.js +0 -66
  894. package/dist/components/common/icons/file-type.js +0 -52
  895. package/dist/components/common/icons/file.js +0 -64
  896. package/dist/components/common/icons/files.js +0 -64
  897. package/dist/components/common/icons/filter-funnel.js +0 -64
  898. package/dist/components/common/icons/free-window.js +0 -56
  899. package/dist/components/common/icons/gear.js +0 -66
  900. package/dist/components/common/icons/hash.js +0 -64
  901. package/dist/components/common/icons/histogram.js +0 -63
  902. package/dist/components/common/icons/index.js +0 -537
  903. package/dist/components/common/icons/info.js +0 -77
  904. package/dist/components/common/icons/layers.js +0 -64
  905. package/dist/components/common/icons/left-arrow.js +0 -67
  906. package/dist/components/common/icons/legend.js +0 -64
  907. package/dist/components/common/icons/line-chart.js +0 -63
  908. package/dist/components/common/icons/login.js +0 -66
  909. package/dist/components/common/icons/logout.js +0 -65
  910. package/dist/components/common/icons/map-icon.js +0 -72
  911. package/dist/components/common/icons/map.js +0 -72
  912. package/dist/components/common/icons/messages.js +0 -64
  913. package/dist/components/common/icons/minus.js +0 -64
  914. package/dist/components/common/icons/pause.js +0 -64
  915. package/dist/components/common/icons/picture.js +0 -64
  916. package/dist/components/common/icons/pin.js +0 -64
  917. package/dist/components/common/icons/play.js +0 -64
  918. package/dist/components/common/icons/polygon.js +0 -89
  919. package/dist/components/common/icons/rectangle.js +0 -90
  920. package/dist/components/common/icons/reduce.js +0 -67
  921. package/dist/components/common/icons/reset.js +0 -64
  922. package/dist/components/common/icons/rocket.js +0 -64
  923. package/dist/components/common/icons/save.js +0 -66
  924. package/dist/components/common/icons/save2.js +0 -70
  925. package/dist/components/common/icons/search.js +0 -66
  926. package/dist/components/common/icons/settings.js +0 -66
  927. package/dist/components/common/icons/share.js +0 -64
  928. package/dist/components/common/icons/split.js +0 -92
  929. package/dist/components/common/icons/square-select.js +0 -66
  930. package/dist/components/common/icons/swap-horizontal.js +0 -67
  931. package/dist/components/common/icons/table.js +0 -63
  932. package/dist/components/common/icons/trash.js +0 -66
  933. package/dist/components/common/icons/upload.js +0 -65
  934. package/dist/components/common/icons/vert-dots.js +0 -102
  935. package/dist/components/common/icons/vert-three-dots.js +0 -77
  936. package/dist/components/common/icons/warning.js +0 -78
  937. package/dist/components/common/image-preview.js +0 -80
  938. package/dist/components/common/info-helper.js +0 -85
  939. package/dist/components/common/item-selector/accessor.js +0 -54
  940. package/dist/components/common/item-selector/chickleted-input.js +0 -116
  941. package/dist/components/common/item-selector/dropdown-list.js +0 -289
  942. package/dist/components/common/item-selector/item-selector-submenu.js +0 -90
  943. package/dist/components/common/item-selector/item-selector.js +0 -315
  944. package/dist/components/common/item-selector/typeahead.js +0 -450
  945. package/dist/components/common/line-chart.js +0 -128
  946. package/dist/components/common/loading-spinner.js +0 -66
  947. package/dist/components/common/logo.js +0 -94
  948. package/dist/components/common/map-layer-selector.js +0 -57
  949. package/dist/components/common/modal.js +0 -179
  950. package/dist/components/common/portaled.js +0 -276
  951. package/dist/components/common/progress-bar.js +0 -65
  952. package/dist/components/common/range-brush.js +0 -278
  953. package/dist/components/common/range-plot.js +0 -143
  954. package/dist/components/common/range-slider.js +0 -320
  955. package/dist/components/common/slider/mouse-event.js +0 -110
  956. package/dist/components/common/slider/slider-bar-handle.js +0 -114
  957. package/dist/components/common/slider/slider-handle.js +0 -158
  958. package/dist/components/common/slider/slider.js +0 -241
  959. package/dist/components/common/styled-components.js +0 -290
  960. package/dist/components/common/switch.js +0 -53
  961. package/dist/components/common/time-range-slider-time-title.js +0 -79
  962. package/dist/components/common/time-range-slider.js +0 -134
  963. package/dist/components/common/time-slider-marker.js +0 -136
  964. package/dist/components/common/toolbar-item.js +0 -73
  965. package/dist/components/common/toolbar.js +0 -44
  966. package/dist/components/common/vertical-toolbar.js +0 -33
  967. package/dist/components/container.js +0 -196
  968. package/dist/components/context.js +0 -38
  969. package/dist/components/editor/constants.js +0 -45
  970. package/dist/components/editor/editor.js +0 -242
  971. package/dist/components/editor/feature-action-panel.js +0 -146
  972. package/dist/components/editor/feature-styles.js +0 -67
  973. package/dist/components/editor/handle-style.js +0 -78
  974. package/dist/components/filters/components.js +0 -31
  975. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +0 -99
  976. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +0 -73
  977. package/dist/components/filters/filter-panels/new-filter-panel.js +0 -91
  978. package/dist/components/filters/filter-panels/polygon-filter-panel.js +0 -90
  979. package/dist/components/filters/filter-panels/range-filter-panel.js +0 -73
  980. package/dist/components/filters/filter-panels/single-select-filter-panel.js +0 -73
  981. package/dist/components/filters/filter-panels/time-range-filter-panel.js +0 -83
  982. package/dist/components/filters/index.js +0 -42
  983. package/dist/components/filters/multi-select-filter.js +0 -48
  984. package/dist/components/filters/polygon-filter.js +0 -86
  985. package/dist/components/filters/range-filter.js +0 -48
  986. package/dist/components/filters/single-select-filter.js +0 -57
  987. package/dist/components/filters/time-range-filter.js +0 -75
  988. package/dist/components/filters/time-widget.js +0 -163
  989. package/dist/components/geocoder/geocoder.js +0 -282
  990. package/dist/components/geocoder-panel.js +0 -199
  991. package/dist/components/index.js +0 -1343
  992. package/dist/components/injector.js +0 -162
  993. package/dist/components/kepler-gl.js +0 -470
  994. package/dist/components/map/coordinate-info.js +0 -59
  995. package/dist/components/map/layer-hover-info.js +0 -168
  996. package/dist/components/map/layer-selector-panel.js +0 -103
  997. package/dist/components/map/locale-panel.js +0 -99
  998. package/dist/components/map/map-control-panel.js +0 -82
  999. package/dist/components/map/map-control-toolbar.js +0 -35
  1000. package/dist/components/map/map-control-tooltip.js +0 -48
  1001. package/dist/components/map/map-control.js +0 -79
  1002. package/dist/components/map/map-draw-panel.js +0 -125
  1003. package/dist/components/map/map-legend-panel.js +0 -107
  1004. package/dist/components/map/map-legend.js +0 -226
  1005. package/dist/components/map/map-popover.js +0 -188
  1006. package/dist/components/map/split-map-button.js +0 -86
  1007. package/dist/components/map/toggle-3d-button.js +0 -75
  1008. package/dist/components/map-container.js +0 -515
  1009. package/dist/components/maps-layout.js +0 -56
  1010. package/dist/components/modal-container.js +0 -484
  1011. package/dist/components/modals/add-map-style-modal.js +0 -258
  1012. package/dist/components/modals/cloud-tile.js +0 -124
  1013. package/dist/components/modals/data-table-modal.js +0 -219
  1014. package/dist/components/modals/delete-data-modal.js +0 -58
  1015. package/dist/components/modals/error-display.js +0 -44
  1016. package/dist/components/modals/export-data-modal.js +0 -210
  1017. package/dist/components/modals/export-image-modal.js +0 -139
  1018. package/dist/components/modals/export-map-modal/components.js +0 -51
  1019. package/dist/components/modals/export-map-modal/export-html-map.js +0 -141
  1020. package/dist/components/modals/export-map-modal/export-json-map.js +0 -87
  1021. package/dist/components/modals/export-map-modal/export-map-modal.js +0 -113
  1022. package/dist/components/modals/image-modal-container.js +0 -83
  1023. package/dist/components/modals/load-data-modal.js +0 -93
  1024. package/dist/components/modals/load-storage-map.js +0 -253
  1025. package/dist/components/modals/loading-dialog.js +0 -54
  1026. package/dist/components/modals/modal-dialog.js +0 -33
  1027. package/dist/components/modals/modal-tabs.js +0 -99
  1028. package/dist/components/modals/overwrite-map-modal.js +0 -81
  1029. package/dist/components/modals/provider-modal-container.js +0 -84
  1030. package/dist/components/modals/save-map-modal.js +0 -202
  1031. package/dist/components/modals/share-map-modal.js +0 -191
  1032. package/dist/components/modals/status-panel.js +0 -82
  1033. package/dist/components/modals/storage-map-viewer.js +0 -122
  1034. package/dist/components/notification-panel/notification-item.js +0 -150
  1035. package/dist/components/notification-panel.js +0 -81
  1036. package/dist/components/performance.js +0 -109
  1037. package/dist/components/plot-container.js +0 -245
  1038. package/dist/components/side-panel/cloud-storage-dropdown.js +0 -57
  1039. package/dist/components/side-panel/common/dataset-info.js +0 -50
  1040. package/dist/components/side-panel/common/dataset-tag.js +0 -51
  1041. package/dist/components/side-panel/common/dataset-title.js +0 -155
  1042. package/dist/components/side-panel/common/source-data-catalog.js +0 -64
  1043. package/dist/components/side-panel/common/source-data-selector.js +0 -114
  1044. package/dist/components/side-panel/custom-panel.js +0 -56
  1045. package/dist/components/side-panel/filter-manager.js +0 -121
  1046. package/dist/components/side-panel/filter-panel/filter-panel-header.js +0 -70
  1047. package/dist/components/side-panel/filter-panel/filter-panel.js +0 -126
  1048. package/dist/components/side-panel/interaction-manager.js +0 -51
  1049. package/dist/components/side-panel/interaction-panel/brush-config.js +0 -58
  1050. package/dist/components/side-panel/interaction-panel/interaction-panel.js +0 -145
  1051. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +0 -210
  1052. package/dist/components/side-panel/interaction-panel/tooltip-config.js +0 -151
  1053. package/dist/components/side-panel/layer-manager.js +0 -290
  1054. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +0 -38
  1055. package/dist/components/side-panel/layer-panel/color-palette.js +0 -87
  1056. package/dist/components/side-panel/layer-panel/color-range-selector.js +0 -366
  1057. package/dist/components/side-panel/layer-panel/color-selector.js +0 -198
  1058. package/dist/components/side-panel/layer-panel/column-selector.js +0 -66
  1059. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +0 -36
  1060. package/dist/components/side-panel/layer-panel/custom-palette.js +0 -284
  1061. package/dist/components/side-panel/layer-panel/custom-picker.js +0 -115
  1062. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +0 -53
  1063. package/dist/components/side-panel/layer-panel/hex-column-config.js +0 -75
  1064. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +0 -18
  1065. package/dist/components/side-panel/layer-panel/layer-column-config.js +0 -97
  1066. package/dist/components/side-panel/layer-panel/layer-config-group.js +0 -211
  1067. package/dist/components/side-panel/layer-panel/layer-configurator.js +0 -970
  1068. package/dist/components/side-panel/layer-panel/layer-panel-header.js +0 -208
  1069. package/dist/components/side-panel/layer-panel/layer-panel.js +0 -180
  1070. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +0 -95
  1071. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +0 -75
  1072. package/dist/components/side-panel/layer-panel/layer-type-selector.js +0 -93
  1073. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +0 -106
  1074. package/dist/components/side-panel/layer-panel/single-color-palette.js +0 -99
  1075. package/dist/components/side-panel/layer-panel/text-label-panel.js +0 -164
  1076. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +0 -161
  1077. package/dist/components/side-panel/layer-panel/vis-config-slider.js +0 -81
  1078. package/dist/components/side-panel/layer-panel/vis-config-switch.js +0 -83
  1079. package/dist/components/side-panel/map-manager.js +0 -141
  1080. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +0 -103
  1081. package/dist/components/side-panel/map-style-panel/map-style-selector.js +0 -80
  1082. package/dist/components/side-panel/panel-dropdown.js +0 -79
  1083. package/dist/components/side-panel/panel-header-action.js +0 -116
  1084. package/dist/components/side-panel/panel-header.js +0 -313
  1085. package/dist/components/side-panel/panel-tab.js +0 -72
  1086. package/dist/components/side-panel/panel-title.js +0 -39
  1087. package/dist/components/side-panel/panel-toggle.js +0 -72
  1088. package/dist/components/side-panel/side-bar.js +0 -148
  1089. package/dist/components/side-panel.js +0 -233
  1090. package/dist/connect/keplergl-connect.js +0 -59
  1091. package/dist/connect/with-local-selector.js +0 -105
  1092. package/dist/constants/action-types.js +0 -179
  1093. package/dist/constants/color-palette.js +0 -536
  1094. package/dist/constants/color-ranges.js +0 -81
  1095. package/dist/constants/custom-color-ranges.js +0 -410
  1096. package/dist/constants/default-settings.js +0 -820
  1097. package/dist/constants/index.js +0 -362
  1098. package/dist/constants/keyevent.js +0 -43
  1099. package/dist/constants/tooltip.js +0 -202
  1100. package/dist/constants/user-feedbacks.js +0 -32
  1101. package/dist/constants/user-guides.js +0 -36
  1102. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +0 -85
  1103. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +0 -181
  1104. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +0 -313
  1105. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +0 -75
  1106. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +0 -95
  1107. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +0 -95
  1108. package/dist/deckgl-layers/layer-utils/cluster-utils.js +0 -108
  1109. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +0 -586
  1110. package/dist/deckgl-layers/layer-utils/shader-utils.js +0 -46
  1111. package/dist/deckgl-layers/line-layer/line-layer.js +0 -104
  1112. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +0 -74
  1113. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +0 -114
  1114. package/dist/index.js +0 -136
  1115. package/dist/layers/aggregation-layer.js +0 -382
  1116. package/dist/layers/arc-layer/arc-layer-icon.js +0 -77
  1117. package/dist/layers/arc-layer/arc-layer.js +0 -250
  1118. package/dist/layers/base-layer.js +0 -1687
  1119. package/dist/layers/cluster-layer/cluster-layer-icon.js +0 -80
  1120. package/dist/layers/cluster-layer/cluster-layer.js +0 -140
  1121. package/dist/layers/default-layer-icon.js +0 -87
  1122. package/dist/layers/geojson-layer/geojson-layer-icon.js +0 -91
  1123. package/dist/layers/geojson-layer/geojson-layer.js +0 -413
  1124. package/dist/layers/geojson-layer/geojson-utils.js +0 -171
  1125. package/dist/layers/grid-layer/grid-layer-icon.js +0 -136
  1126. package/dist/layers/grid-layer/grid-layer.js +0 -104
  1127. package/dist/layers/grid-layer/grid-utils.js +0 -59
  1128. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +0 -71
  1129. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +0 -314
  1130. package/dist/layers/h3-hexagon-layer/h3-utils.js +0 -86
  1131. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +0 -88
  1132. package/dist/layers/heatmap-layer/heatmap-layer.js +0 -242
  1133. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +0 -100
  1134. package/dist/layers/hexagon-layer/hexagon-layer.js +0 -108
  1135. package/dist/layers/hexagon-layer/hexagon-utils.js +0 -62
  1136. package/dist/layers/icon-layer/icon-info-modal.js +0 -114
  1137. package/dist/layers/icon-layer/icon-layer-icon.js +0 -73
  1138. package/dist/layers/icon-layer/icon-layer.js +0 -354
  1139. package/dist/layers/index.js +0 -96
  1140. package/dist/layers/layer-factory.js +0 -502
  1141. package/dist/layers/layer-text-label.js +0 -62
  1142. package/dist/layers/layer-update.js +0 -74
  1143. package/dist/layers/line-layer/line-layer-icon.js +0 -79
  1144. package/dist/layers/line-layer/line-layer.js +0 -189
  1145. package/dist/layers/mapbox-utils.js +0 -191
  1146. package/dist/layers/mapboxgl-layer.js +0 -195
  1147. package/dist/layers/point-layer/point-layer-icon.js +0 -94
  1148. package/dist/layers/point-layer/point-layer.js +0 -443
  1149. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +0 -302
  1150. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +0 -70
  1151. package/dist/layers/s2-geometry-layer/s2-utils.js +0 -45
  1152. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +0 -54
  1153. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +0 -151
  1154. package/dist/layers/scenegraph-layer/scenegraph-layer.js +0 -227
  1155. package/dist/layers/trip-layer/trip-info-modal.js +0 -59
  1156. package/dist/layers/trip-layer/trip-layer-icon.js +0 -89
  1157. package/dist/layers/trip-layer/trip-layer.js +0 -361
  1158. package/dist/layers/trip-layer/trip-utils.js +0 -181
  1159. package/dist/layers/types.js +0 -44
  1160. package/dist/localization/en.js +0 -494
  1161. package/dist/localization/formatted-message.js +0 -40
  1162. package/dist/localization/index.js +0 -54
  1163. package/dist/localization/locales.js +0 -59
  1164. package/dist/middleware/index.js +0 -44
  1165. package/dist/processors/data-processor.js +0 -720
  1166. package/dist/processors/file-handler.js +0 -356
  1167. package/dist/processors/index.js +0 -104
  1168. package/dist/reducers/combined-updaters.js +0 -184
  1169. package/dist/reducers/composer-helpers.js +0 -111
  1170. package/dist/reducers/composers.js +0 -40
  1171. package/dist/reducers/core.js +0 -123
  1172. package/dist/reducers/index.js +0 -125
  1173. package/dist/reducers/map-state-updaters.js +0 -227
  1174. package/dist/reducers/map-state.js +0 -52
  1175. package/dist/reducers/map-style-updaters.js +0 -487
  1176. package/dist/reducers/map-style.js +0 -51
  1177. package/dist/reducers/provider-state-updaters.js +0 -466
  1178. package/dist/reducers/provider-state.js +0 -53
  1179. package/dist/reducers/root.js +0 -212
  1180. package/dist/reducers/ui-state-updaters.js +0 -755
  1181. package/dist/reducers/ui-state.js +0 -53
  1182. package/dist/reducers/vis-state-merger.js +0 -565
  1183. package/dist/reducers/vis-state-selectors.js +0 -47
  1184. package/dist/reducers/vis-state-updaters.js +0 -2156
  1185. package/dist/reducers/vis-state.js +0 -53
  1186. package/dist/schemas/dataset-schema.js +0 -169
  1187. package/dist/schemas/index.js +0 -125
  1188. package/dist/schemas/map-state-schema.js +0 -53
  1189. package/dist/schemas/map-style-schema.js +0 -108
  1190. package/dist/schemas/schema-manager.js +0 -244
  1191. package/dist/schemas/schema-utils.js +0 -58
  1192. package/dist/schemas/schema.js +0 -119
  1193. package/dist/schemas/versions.js +0 -34
  1194. package/dist/schemas/vis-state-schema.js +0 -906
  1195. package/dist/styles/base.js +0 -1297
  1196. package/dist/styles/index.js +0 -28
  1197. package/dist/styles/media-breakpoints.js +0 -51
  1198. package/dist/tasks/tasks.js +0 -94
  1199. package/dist/templates/export-map-html.js +0 -42
  1200. package/dist/utils/aggregate-utils.js +0 -71
  1201. package/dist/utils/color-utils.js +0 -129
  1202. package/dist/utils/custom-scales.js +0 -22
  1203. package/dist/utils/data-scale-utils.js +0 -75
  1204. package/dist/utils/data-utils.js +0 -462
  1205. package/dist/utils/dataset-utils.js +0 -237
  1206. package/dist/utils/dom-to-image.js +0 -479
  1207. package/dist/utils/dom-utils.js +0 -343
  1208. package/dist/utils/export-utils.js +0 -260
  1209. package/dist/utils/filter-utils.js +0 -1136
  1210. package/dist/utils/gl-utils.js +0 -43
  1211. package/dist/utils/gpu-filter-utils.js +0 -248
  1212. package/dist/utils/index.js +0 -220
  1213. package/dist/utils/interaction-utils.js +0 -177
  1214. package/dist/utils/layer-utils.js +0 -201
  1215. package/dist/utils/locale-utils.js +0 -56
  1216. package/dist/utils/map-info-utils.js +0 -31
  1217. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +0 -213
  1218. package/dist/utils/map-style-utils/mapbox-utils.js +0 -33
  1219. package/dist/utils/mapbox-utils.js +0 -36
  1220. package/dist/utils/notifications-utils.js +0 -90
  1221. package/dist/utils/observe-dimensions.js +0 -142
  1222. package/dist/utils/projection-utils.js +0 -72
  1223. package/dist/utils/searcher-utils.js +0 -42
  1224. package/dist/utils/split-map-utils.js +0 -112
  1225. package/dist/utils/table-utils/data-container-utils.js +0 -73
  1226. package/dist/utils/table-utils/data-row.js +0 -71
  1227. package/dist/utils/table-utils/index.js +0 -19
  1228. package/dist/utils/table-utils/indexed-data-container.js +0 -222
  1229. package/dist/utils/table-utils/kepler-table.js +0 -520
  1230. package/dist/utils/table-utils/row-data-container.js +0 -217
  1231. package/dist/utils/utils.js +0 -216
  1232. package/layers.js +0 -21
  1233. package/localization.js +0 -21
  1234. package/middleware.js +0 -21
  1235. package/processors.js +0 -21
  1236. package/reducers.js +0 -21
  1237. package/schemas.js +0 -21
  1238. package/src/actions/action-wrapper.js +0 -183
  1239. package/src/actions/actions.d.ts +0 -104
  1240. package/src/actions/actions.js +0 -178
  1241. package/src/actions/identity-actions.d.ts +0 -53
  1242. package/src/actions/identity-actions.js +0 -83
  1243. package/src/actions/index.d.ts +0 -23
  1244. package/src/actions/map-state-actions.d.ts +0 -46
  1245. package/src/actions/map-state-actions.js +0 -90
  1246. package/src/actions/map-style-actions.d.ts +0 -116
  1247. package/src/actions/map-style-actions.js +0 -135
  1248. package/src/actions/provider-actions.d.ts +0 -203
  1249. package/src/actions/provider-actions.js +0 -94
  1250. package/src/actions/ui-state-actions.d.ts +0 -200
  1251. package/src/actions/ui-state-actions.js +0 -272
  1252. package/src/actions/vis-state-actions.d.ts +0 -502
  1253. package/src/actions/vis-state-actions.js +0 -919
  1254. package/src/cloud-providers/index.d.ts +0 -53
  1255. package/src/cloud-providers/index.js +0 -21
  1256. package/src/cloud-providers/provider.js +0 -233
  1257. package/src/components/bottom-widget.d.ts +0 -33
  1258. package/src/components/bottom-widget.js +0 -235
  1259. package/src/components/common/action-panel.d.ts +0 -24
  1260. package/src/components/common/action-panel.js +0 -177
  1261. package/src/components/common/animation-control/animation-control.js +0 -155
  1262. package/src/components/common/animation-control/animation-controller.js +0 -224
  1263. package/src/components/common/animation-control/animation-speed-slider.js +0 -79
  1264. package/src/components/common/animation-control/floating-time-display.js +0 -192
  1265. package/src/components/common/animation-control/playback-controls.js +0 -278
  1266. package/src/components/common/animation-control/speed-control.js +0 -71
  1267. package/src/components/common/checkbox.js +0 -128
  1268. package/src/components/common/color-legend.js +0 -198
  1269. package/src/components/common/data-table/button.js +0 -47
  1270. package/src/components/common/data-table/cell-size.js +0 -180
  1271. package/src/components/common/data-table/grid.js +0 -55
  1272. package/src/components/common/data-table/index.js +0 -620
  1273. package/src/components/common/data-table/option-dropdown.js +0 -110
  1274. package/src/components/common/dataset-label.js +0 -40
  1275. package/src/components/common/error-boundary.js +0 -43
  1276. package/src/components/common/field-selector.js +0 -233
  1277. package/src/components/common/field-token.js +0 -56
  1278. package/src/components/common/file-uploader/file-drop.d.ts +0 -19
  1279. package/src/components/common/file-uploader/file-drop.js +0 -196
  1280. package/src/components/common/file-uploader/file-upload-progress.d.ts +0 -11
  1281. package/src/components/common/file-uploader/file-upload-progress.js +0 -110
  1282. package/src/components/common/file-uploader/file-upload.d.ts +0 -22
  1283. package/src/components/common/file-uploader/file-upload.js +0 -301
  1284. package/src/components/common/file-uploader/upload-button.d.ts.wip +0 -11
  1285. package/src/components/common/file-uploader/upload-button.js +0 -83
  1286. package/src/components/common/histogram-plot.js +0 -102
  1287. package/src/components/common/icons/add.js +0 -43
  1288. package/src/components/common/icons/anchor_window.js +0 -53
  1289. package/src/components/common/icons/arrow-down-alt.js +0 -43
  1290. package/src/components/common/icons/arrow-down-solid .js +0 -43
  1291. package/src/components/common/icons/arrow-down.js +0 -46
  1292. package/src/components/common/icons/arrow-left.js +0 -48
  1293. package/src/components/common/icons/arrow-right.js +0 -46
  1294. package/src/components/common/icons/arrow-up-alt.js +0 -46
  1295. package/src/components/common/icons/arrow-up-solid.js +0 -43
  1296. package/src/components/common/icons/arrow-up.js +0 -46
  1297. package/src/components/common/icons/base.js +0 -90
  1298. package/src/components/common/icons/bug.js +0 -46
  1299. package/src/components/common/icons/cancel.js +0 -43
  1300. package/src/components/common/icons/checkmark.js +0 -45
  1301. package/src/components/common/icons/clipboard.js +0 -46
  1302. package/src/components/common/icons/clock.js +0 -44
  1303. package/src/components/common/icons/close.js +0 -49
  1304. package/src/components/common/icons/code-alt.js +0 -43
  1305. package/src/components/common/icons/copy.js +0 -44
  1306. package/src/components/common/icons/crosshairs.js +0 -43
  1307. package/src/components/common/icons/cube-3d.js +0 -45
  1308. package/src/components/common/icons/cursor-click.js +0 -49
  1309. package/src/components/common/icons/data-table.js +0 -45
  1310. package/src/components/common/icons/db.js +0 -45
  1311. package/src/components/common/icons/delete.js +0 -44
  1312. package/src/components/common/icons/docs.js +0 -46
  1313. package/src/components/common/icons/drag-n-drop.js +0 -44
  1314. package/src/components/common/icons/draw-polygon.js +0 -60
  1315. package/src/components/common/icons/email.js +0 -45
  1316. package/src/components/common/icons/expand.js +0 -45
  1317. package/src/components/common/icons/eye-seen.js +0 -44
  1318. package/src/components/common/icons/eye-unseen.js +0 -44
  1319. package/src/components/common/icons/file-type.js +0 -57
  1320. package/src/components/common/icons/file.js +0 -43
  1321. package/src/components/common/icons/files.js +0 -42
  1322. package/src/components/common/icons/filter-funnel.js +0 -43
  1323. package/src/components/common/icons/free-window.js +0 -53
  1324. package/src/components/common/icons/gear.js +0 -45
  1325. package/src/components/common/icons/hash.js +0 -43
  1326. package/src/components/common/icons/histogram.js +0 -47
  1327. package/src/components/common/icons/index.js +0 -96
  1328. package/src/components/common/icons/info.js +0 -54
  1329. package/src/components/common/icons/layers.js +0 -43
  1330. package/src/components/common/icons/left-arrow.js +0 -43
  1331. package/src/components/common/icons/legend.js +0 -43
  1332. package/src/components/common/icons/line-chart.js +0 -45
  1333. package/src/components/common/icons/login.js +0 -46
  1334. package/src/components/common/icons/logout.js +0 -43
  1335. package/src/components/common/icons/map-icon.js +0 -69
  1336. package/src/components/common/icons/map.js +0 -69
  1337. package/src/components/common/icons/messages.js +0 -43
  1338. package/src/components/common/icons/minus.js +0 -45
  1339. package/src/components/common/icons/pause.js +0 -43
  1340. package/src/components/common/icons/picture.js +0 -43
  1341. package/src/components/common/icons/pin.js +0 -43
  1342. package/src/components/common/icons/play.js +0 -43
  1343. package/src/components/common/icons/polygon.js +0 -74
  1344. package/src/components/common/icons/rectangle.js +0 -75
  1345. package/src/components/common/icons/reduce.js +0 -48
  1346. package/src/components/common/icons/reset.js +0 -43
  1347. package/src/components/common/icons/rocket.js +0 -43
  1348. package/src/components/common/icons/save.js +0 -44
  1349. package/src/components/common/icons/save2.js +0 -47
  1350. package/src/components/common/icons/search.js +0 -44
  1351. package/src/components/common/icons/settings.js +0 -45
  1352. package/src/components/common/icons/share.js +0 -43
  1353. package/src/components/common/icons/split.js +0 -63
  1354. package/src/components/common/icons/square-select.js +0 -44
  1355. package/src/components/common/icons/table.js +0 -46
  1356. package/src/components/common/icons/trash.js +0 -51
  1357. package/src/components/common/icons/upload.js +0 -44
  1358. package/src/components/common/icons/vert-dots.js +0 -50
  1359. package/src/components/common/icons/vert-three-dots.js +0 -45
  1360. package/src/components/common/icons/warning.js +0 -46
  1361. package/src/components/common/image-preview.js +0 -111
  1362. package/src/components/common/info-helper.js +0 -84
  1363. package/src/components/common/item-selector/accessor.js +0 -45
  1364. package/src/components/common/item-selector/chickleted-input.js +0 -143
  1365. package/src/components/common/item-selector/dropdown-list.js +0 -258
  1366. package/src/components/common/item-selector/item-selector.js +0 -360
  1367. package/src/components/common/item-selector/typeahead.js +0 -507
  1368. package/src/components/common/line-chart.js +0 -134
  1369. package/src/components/common/loading-spinner.js +0 -64
  1370. package/src/components/common/logo.js +0 -92
  1371. package/src/components/common/map-layer-selector.d.ts +0 -10
  1372. package/src/components/common/map-layer-selector.js +0 -54
  1373. package/src/components/common/modal.js +0 -233
  1374. package/src/components/common/portaled.js +0 -264
  1375. package/src/components/common/progress-bar.d.ts +0 -13
  1376. package/src/components/common/progress-bar.js +0 -49
  1377. package/src/components/common/range-brush.js +0 -256
  1378. package/src/components/common/range-plot.js +0 -139
  1379. package/src/components/common/range-slider.js +0 -299
  1380. package/src/components/common/slider/mouse-event.js +0 -97
  1381. package/src/components/common/slider/slider-bar-handle.js +0 -97
  1382. package/src/components/common/slider/slider-handle.js +0 -181
  1383. package/src/components/common/slider/slider.js +0 -213
  1384. package/src/components/common/styled-components.js +0 -657
  1385. package/src/components/common/switch.js +0 -50
  1386. package/src/components/common/time-range-slider-time-title.js +0 -76
  1387. package/src/components/common/time-range-slider.js +0 -163
  1388. package/src/components/common/time-slider-marker.js +0 -168
  1389. package/src/components/common/toolbar-item.d.ts +0 -14
  1390. package/src/components/common/toolbar-item.js +0 -83
  1391. package/src/components/common/toolbar.js +0 -45
  1392. package/src/components/common/vertical-toolbar.js +0 -35
  1393. package/src/components/container.js +0 -173
  1394. package/src/components/context.d.ts +0 -10
  1395. package/src/components/context.js +0 -32
  1396. package/src/components/editor/editor.js +0 -218
  1397. package/src/components/editor/feature-action-panel.js +0 -143
  1398. package/src/components/editor/feature-styles.js +0 -75
  1399. package/src/components/editor/handle-style.js +0 -89
  1400. package/src/components/filters/filter-panels/filter-panel-types.d.ts +0 -28
  1401. package/src/components/filters/filter-panels/filter-panel-with-field-select.js +0 -124
  1402. package/src/components/filters/filter-panels/multi-select-filter-panel.js +0 -75
  1403. package/src/components/filters/filter-panels/new-filter-panel.js +0 -99
  1404. package/src/components/filters/filter-panels/polygon-filter-panel.js +0 -96
  1405. package/src/components/filters/filter-panels/range-filter-panel.js +0 -75
  1406. package/src/components/filters/filter-panels/single-select-filter-panel.js +0 -75
  1407. package/src/components/filters/filter-panels/time-range-filter-panel.js +0 -95
  1408. package/src/components/filters/multi-select-filter.js +0 -36
  1409. package/src/components/filters/polygon-filter.d.ts +0 -13
  1410. package/src/components/filters/polygon-filter.js +0 -73
  1411. package/src/components/filters/range-filter.js +0 -43
  1412. package/src/components/filters/single-select-filter.js +0 -49
  1413. package/src/components/filters/time-range-filter.js +0 -68
  1414. package/src/components/filters/time-widget.js +0 -228
  1415. package/src/components/geocoder/geocoder.d.ts +0 -33
  1416. package/src/components/geocoder/geocoder.js +0 -272
  1417. package/src/components/geocoder-panel.js +0 -191
  1418. package/src/components/index.js +0 -247
  1419. package/src/components/injector.js +0 -161
  1420. package/src/components/kepler-gl.js +0 -518
  1421. package/src/components/map/coordinate-info.js +0 -53
  1422. package/src/components/map/layer-hover-info.d.ts +0 -12
  1423. package/src/components/map/layer-hover-info.js +0 -185
  1424. package/src/components/map/layer-selector-panel.d.ts +0 -16
  1425. package/src/components/map/layer-selector-panel.js +0 -106
  1426. package/src/components/map/locale-panel.d.ts +0 -12
  1427. package/src/components/map/locale-panel.js +0 -91
  1428. package/src/components/map/map-control-panel.d.ts +0 -11
  1429. package/src/components/map/map-control-panel.js +0 -98
  1430. package/src/components/map/map-control-tooltip.d.ts +0 -8
  1431. package/src/components/map/map-control-tooltip.js +0 -40
  1432. package/src/components/map/map-control.d.ts +0 -37
  1433. package/src/components/map/map-control.js +0 -100
  1434. package/src/components/map/map-draw-panel.d.ts +0 -16
  1435. package/src/components/map/map-draw-panel.js +0 -125
  1436. package/src/components/map/map-legend-panel.d.ts +0 -20
  1437. package/src/components/map/map-legend-panel.js +0 -100
  1438. package/src/components/map/map-legend.d.ts +0 -58
  1439. package/src/components/map/map-legend.js +0 -228
  1440. package/src/components/map/map-popover.d.ts +0 -28
  1441. package/src/components/map/map-popover.js +0 -250
  1442. package/src/components/map/split-map-button.d.ts +0 -19
  1443. package/src/components/map/split-map-button.js +0 -82
  1444. package/src/components/map/toggle-3d-button.d.ts +0 -16
  1445. package/src/components/map/toggle-3d-button.js +0 -75
  1446. package/src/components/map-container.d.ts +0 -18
  1447. package/src/components/map-container.js +0 -499
  1448. package/src/components/maps-layout.d.ts +0 -5
  1449. package/src/components/maps-layout.js +0 -40
  1450. package/src/components/modal-container.d.ts +0 -37
  1451. package/src/components/modal-container.js +0 -543
  1452. package/src/components/modals/add-map-style-modal.js +0 -298
  1453. package/src/components/modals/cloud-tile.js +0 -147
  1454. package/src/components/modals/data-table-modal.js +0 -217
  1455. package/src/components/modals/delete-data-modal.js +0 -48
  1456. package/src/components/modals/error-display.js +0 -39
  1457. package/src/components/modals/export-data-modal.js +0 -193
  1458. package/src/components/modals/export-image-modal.d.ts +0 -21
  1459. package/src/components/modals/export-image-modal.js +0 -144
  1460. package/src/components/modals/export-map-modal/export-html-map.d.ts +0 -21
  1461. package/src/components/modals/export-map-modal/export-html-map.js +0 -145
  1462. package/src/components/modals/export-map-modal/export-json-map.js +0 -100
  1463. package/src/components/modals/export-map-modal/export-map-modal.js +0 -114
  1464. package/src/components/modals/image-modal-container.d.ts +0 -13
  1465. package/src/components/modals/image-modal-container.js +0 -76
  1466. package/src/components/modals/load-data-modal.d.ts +0 -30
  1467. package/src/components/modals/load-data-modal.js +0 -94
  1468. package/src/components/modals/load-storage-map.js +0 -381
  1469. package/src/components/modals/loading-dialog.js +0 -69
  1470. package/src/components/modals/modal-tabs.js +0 -126
  1471. package/src/components/modals/overwrite-map-modal.d.ts +0 -18
  1472. package/src/components/modals/overwrite-map-modal.js +0 -97
  1473. package/src/components/modals/provider-modal-container.d.ts +0 -12
  1474. package/src/components/modals/provider-modal-container.js +0 -60
  1475. package/src/components/modals/save-map-modal.d.ts +0 -32
  1476. package/src/components/modals/save-map-modal.js +0 -244
  1477. package/src/components/modals/share-map-modal.js +0 -208
  1478. package/src/components/modals/status-panel.js +0 -95
  1479. package/src/components/modals/storage-map-viewer.js +0 -177
  1480. package/src/components/notification-panel/notification-item.js +0 -132
  1481. package/src/components/notification-panel.js +0 -72
  1482. package/src/components/performance.js +0 -103
  1483. package/src/components/plot-container.js +0 -228
  1484. package/src/components/side-panel/common/dataset-info.js +0 -45
  1485. package/src/components/side-panel/common/dataset-tag.js +0 -55
  1486. package/src/components/side-panel/common/dataset-title.js +0 -146
  1487. package/src/components/side-panel/common/source-data-catalog.js +0 -61
  1488. package/src/components/side-panel/common/source-data-selector.js +0 -79
  1489. package/src/components/side-panel/filter-manager.js +0 -105
  1490. package/src/components/side-panel/filter-panel/filter-panel-header.js +0 -83
  1491. package/src/components/side-panel/filter-panel/filter-panel.js +0 -126
  1492. package/src/components/side-panel/interaction-manager.js +0 -46
  1493. package/src/components/side-panel/interaction-panel/brush-config.js +0 -51
  1494. package/src/components/side-panel/interaction-panel/interaction-panel.js +0 -115
  1495. package/src/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +0 -199
  1496. package/src/components/side-panel/interaction-panel/tooltip-config.js +0 -190
  1497. package/src/components/side-panel/layer-manager.js +0 -290
  1498. package/src/components/side-panel/layer-panel/color-dimension-scale-selector.js +0 -33
  1499. package/src/components/side-panel/layer-panel/color-palette.js +0 -90
  1500. package/src/components/side-panel/layer-panel/color-range-selector.js +0 -359
  1501. package/src/components/side-panel/layer-panel/color-selector.js +0 -196
  1502. package/src/components/side-panel/layer-panel/column-selector.js +0 -70
  1503. package/src/components/side-panel/layer-panel/custom-markers-config-group.js +0 -30
  1504. package/src/components/side-panel/layer-panel/custom-palette.js +0 -296
  1505. package/src/components/side-panel/layer-panel/custom-picker.js +0 -88
  1506. package/src/components/side-panel/layer-panel/dimension-scale-selector.js +0 -48
  1507. package/src/components/side-panel/layer-panel/hex-column-config.js +0 -45
  1508. package/src/components/side-panel/layer-panel/layer-column-config.js +0 -113
  1509. package/src/components/side-panel/layer-panel/layer-config-group.js +0 -237
  1510. package/src/components/side-panel/layer-panel/layer-configurator.js +0 -1412
  1511. package/src/components/side-panel/layer-panel/layer-panel-header.js +0 -236
  1512. package/src/components/side-panel/layer-panel/layer-panel.js +0 -171
  1513. package/src/components/side-panel/layer-panel/layer-type-dropdown-list.js +0 -105
  1514. package/src/components/side-panel/layer-panel/layer-type-list-item.js +0 -83
  1515. package/src/components/side-panel/layer-panel/layer-type-selector.js +0 -89
  1516. package/src/components/side-panel/layer-panel/layer-visibility-by-zoom.js +0 -123
  1517. package/src/components/side-panel/layer-panel/single-color-palette.js +0 -98
  1518. package/src/components/side-panel/layer-panel/text-label-panel.js +0 -179
  1519. package/src/components/side-panel/layer-panel/vis-config-by-field-selector.js +0 -163
  1520. package/src/components/side-panel/layer-panel/vis-config-slider.js +0 -82
  1521. package/src/components/side-panel/layer-panel/vis-config-switch.js +0 -87
  1522. package/src/components/side-panel/map-manager.js +0 -114
  1523. package/src/components/side-panel/map-style-panel/map-layer-selector.js +0 -128
  1524. package/src/components/side-panel/map-style-panel/map-style-selector.js +0 -111
  1525. package/src/components/side-panel/panel-dropdown.js +0 -53
  1526. package/src/components/side-panel/panel-header-action.js +0 -106
  1527. package/src/components/side-panel/panel-header.js +0 -321
  1528. package/src/components/side-panel/panel-tab.js +0 -62
  1529. package/src/components/side-panel/panel-title.js +0 -32
  1530. package/src/components/side-panel/panel-toggle.js +0 -70
  1531. package/src/components/side-panel/side-bar.js +0 -136
  1532. package/src/components/side-panel.d.ts +0 -33
  1533. package/src/components/side-panel.js +0 -253
  1534. package/src/connect/keplergl-connect.js +0 -47
  1535. package/src/connect/with-local-selector.d.ts +0 -11
  1536. package/src/connect/with-local-selector.js +0 -67
  1537. package/src/constants/action-types.d.ts +0 -135
  1538. package/src/constants/action-types.js +0 -184
  1539. package/src/constants/color-ranges.js +0 -72
  1540. package/src/constants/default-settings.js +0 -994
  1541. package/src/constants/index.js +0 -80
  1542. package/src/deckgl-layers/3d-building-layer/3d-building-layer.js +0 -56
  1543. package/src/deckgl-layers/3d-building-layer/3d-building-utils.js +0 -192
  1544. package/src/deckgl-layers/column-layer/enhanced-column-layer.js +0 -63
  1545. package/src/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +0 -70
  1546. package/src/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +0 -70
  1547. package/src/deckgl-layers/layer-utils/cluster-utils.js +0 -76
  1548. package/src/deckgl-layers/layer-utils/cpu-aggregator.js +0 -583
  1549. package/src/deckgl-layers/layer-utils/shader-utils.js +0 -41
  1550. package/src/deckgl-layers/line-layer/line-layer.js +0 -122
  1551. package/src/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +0 -57
  1552. package/src/deckgl-layers/svg-icon-layer/svg-icon-layer.js +0 -85
  1553. package/src/index.js +0 -52
  1554. package/src/layers/aggregation-layer.js +0 -356
  1555. package/src/layers/arc-layer/arc-layer-icon.js +0 -67
  1556. package/src/layers/arc-layer/arc-layer.js +0 -221
  1557. package/src/layers/base-layer.js +0 -1545
  1558. package/src/layers/cluster-layer/cluster-layer.js +0 -125
  1559. package/src/layers/geojson-layer/geojson-layer-icon.js +0 -68
  1560. package/src/layers/geojson-layer/geojson-layer.js +0 -344
  1561. package/src/layers/geojson-layer/geojson-utils.js +0 -179
  1562. package/src/layers/grid-layer/grid-layer-icon.js +0 -53
  1563. package/src/layers/grid-layer/grid-layer.js +0 -95
  1564. package/src/layers/grid-layer/grid-utils.js +0 -71
  1565. package/src/layers/h3-hexagon-layer/h3-hexagon-layer.js +0 -264
  1566. package/src/layers/h3-hexagon-layer/h3-utils.js +0 -65
  1567. package/src/layers/heatmap-layer/heatmap-layer.js +0 -226
  1568. package/src/layers/hexagon-layer/hexagon-layer.js +0 -95
  1569. package/src/layers/hexagon-layer/hexagon-utils.js +0 -63
  1570. package/src/layers/icon-layer/icon-info-modal.js +0 -155
  1571. package/src/layers/icon-layer/icon-layer.js +0 -324
  1572. package/src/layers/index.d.ts +0 -128
  1573. package/src/layers/index.js +0 -72
  1574. package/src/layers/layer-factory.d.ts +0 -149
  1575. package/src/layers/layer-factory.js +0 -487
  1576. package/src/layers/layer-text-label.js +0 -62
  1577. package/src/layers/layer-update.js +0 -71
  1578. package/src/layers/line-layer/line-layer.js +0 -161
  1579. package/src/layers/mapbox-utils.js +0 -195
  1580. package/src/layers/mapboxgl-layer.js +0 -154
  1581. package/src/layers/point-layer/point-layer.js +0 -412
  1582. package/src/layers/s2-geometry-layer/s2-geometry-layer.js +0 -265
  1583. package/src/layers/s2-geometry-layer/s2-utils.js +0 -36
  1584. package/src/layers/scenegraph-layer/scenegraph-layer.js +0 -182
  1585. package/src/layers/trip-layer/trip-layer.js +0 -295
  1586. package/src/layers/trip-layer/trip-utils.js +0 -169
  1587. package/src/localization/en.js +0 -504
  1588. package/src/localization/formatted-message.js +0 -33
  1589. package/src/localization/index.js +0 -32
  1590. package/src/localization/locales.js +0 -46
  1591. package/src/middleware/index.js +0 -34
  1592. package/src/processors/data-processor.d.ts +0 -57
  1593. package/src/processors/data-processor.js +0 -684
  1594. package/src/processors/file-handler.d.ts +0 -46
  1595. package/src/processors/file-handler.js +0 -220
  1596. package/src/processors/index.js +0 -44
  1597. package/src/reducers/combined-updaters.d.ts +0 -26
  1598. package/src/reducers/combined-updaters.js +0 -198
  1599. package/src/reducers/composer-helpers.d.ts +0 -32
  1600. package/src/reducers/composer-helpers.js +0 -70
  1601. package/src/reducers/core.d.ts +0 -25
  1602. package/src/reducers/core.js +0 -97
  1603. package/src/reducers/index.d.ts +0 -118
  1604. package/src/reducers/index.js +0 -53
  1605. package/src/reducers/map-state-updaters.d.ts +0 -64
  1606. package/src/reducers/map-state-updaters.js +0 -224
  1607. package/src/reducers/map-state.js +0 -47
  1608. package/src/reducers/map-style-updaters.d.ts +0 -76
  1609. package/src/reducers/map-style-updaters.js +0 -541
  1610. package/src/reducers/map-style.js +0 -53
  1611. package/src/reducers/provider-state-updaters.d.ts +0 -88
  1612. package/src/reducers/provider-state-updaters.js +0 -428
  1613. package/src/reducers/provider-state.js +0 -53
  1614. package/src/reducers/root.js +0 -230
  1615. package/src/reducers/types.d.ts +0 -10
  1616. package/src/reducers/ui-state-updaters.d.ts +0 -198
  1617. package/src/reducers/ui-state-updaters.js +0 -766
  1618. package/src/reducers/ui-state.js +0 -73
  1619. package/src/reducers/vis-state-merger.d.ts +0 -78
  1620. package/src/reducers/vis-state-merger.js +0 -557
  1621. package/src/reducers/vis-state-selectors.js +0 -35
  1622. package/src/reducers/vis-state-updaters.d.ts +0 -534
  1623. package/src/reducers/vis-state-updaters.js +0 -2137
  1624. package/src/reducers/vis-state.js +0 -155
  1625. package/src/schemas/dataset-schema.js +0 -141
  1626. package/src/schemas/index.d.ts +0 -24
  1627. package/src/schemas/index.js +0 -42
  1628. package/src/schemas/schema-manager.d.ts +0 -229
  1629. package/src/schemas/schema-manager.js +0 -228
  1630. package/src/schemas/schema.d.ts +0 -47
  1631. package/src/schemas/schema.js +0 -90
  1632. package/src/schemas/versions.d.ts +0 -23
  1633. package/src/schemas/vis-state-schema.js +0 -754
  1634. package/src/styles/base.js +0 -1620
  1635. package/src/styles/media-breakpoints.js +0 -47
  1636. package/src/tasks/tasks.js +0 -92
  1637. package/src/typedefs/README.md +0 -3
  1638. package/src/typedefs/deck.gl__core.d.ts +0 -64
  1639. package/src/typedefs/deck.gl__mesh-layers.d.ts +0 -33
  1640. package/src/utils/aggregate-utils.js +0 -71
  1641. package/src/utils/color-utils.js +0 -115
  1642. package/src/utils/data-scale-utils.d.ts +0 -26
  1643. package/src/utils/data-scale-utils.js +0 -61
  1644. package/src/utils/data-utils.d.ts +0 -46
  1645. package/src/utils/data-utils.js +0 -447
  1646. package/src/utils/dataset-utils.d.ts +0 -10
  1647. package/src/utils/dataset-utils.js +0 -255
  1648. package/src/utils/dom-to-image.js +0 -533
  1649. package/src/utils/dom-utils.js +0 -354
  1650. package/src/utils/export-utils.js +0 -247
  1651. package/src/utils/filter-utils.d.ts +0 -192
  1652. package/src/utils/filter-utils.js +0 -1114
  1653. package/src/utils/gpu-filter-utils.d.ts +0 -28
  1654. package/src/utils/gpu-filter-utils.js +0 -253
  1655. package/src/utils/index.d.ts +0 -5
  1656. package/src/utils/index.js +0 -55
  1657. package/src/utils/interaction-utils.d.ts +0 -36
  1658. package/src/utils/interaction-utils.js +0 -185
  1659. package/src/utils/layer-utils.d.ts +0 -78
  1660. package/src/utils/layer-utils.js +0 -206
  1661. package/src/utils/map-style-utils/mapbox-gl-style-editor.js +0 -201
  1662. package/src/utils/notifications-utils.js +0 -83
  1663. package/src/utils/observe-dimensions.d.ts +0 -18
  1664. package/src/utils/observe-dimensions.js +0 -115
  1665. package/src/utils/split-map-utils.js +0 -104
  1666. package/src/utils/table-utils/data-container-interface.d.ts +0 -140
  1667. package/src/utils/table-utils/data-container-utils.d.ts +0 -43
  1668. package/src/utils/table-utils/data-container-utils.js +0 -61
  1669. package/src/utils/table-utils/data-row.d.ts +0 -65
  1670. package/src/utils/table-utils/data-row.js +0 -54
  1671. package/src/utils/table-utils/index.d.ts +0 -1
  1672. package/src/utils/table-utils/indexed-data-container.d.ts +0 -26
  1673. package/src/utils/table-utils/indexed-data-container.js +0 -152
  1674. package/src/utils/table-utils/kepler-table.d.ts +0 -114
  1675. package/src/utils/table-utils/kepler-table.js +0 -508
  1676. package/src/utils/table-utils/row-data-container.d.ts +0 -30
  1677. package/src/utils/table-utils/row-data-container.js +0 -151
  1678. package/src/utils/utils.js +0 -202
  1679. package/styles.js +0 -21
  1680. /package/src/actions/{index.js → index.ts} +0 -0
  1681. /package/src/components/common/data-table/{canvas.js → canvas.tsx} +0 -0
  1682. /package/src/components/editor/{constants.js → constants.ts} +0 -0
  1683. /package/src/components/filters/{components.js → components.ts} +0 -0
  1684. /package/src/components/filters/{index.js → index.ts} +0 -0
  1685. /package/src/components/map/{map-control-toolbar.js → map-control-toolbar.tsx} +0 -0
  1686. /package/src/components/modals/export-map-modal/{components.js → components.tsx} +0 -0
  1687. /package/src/components/modals/{modal-dialog.js → modal-dialog.tsx} +0 -0
  1688. /package/src/components/side-panel/{cloud-storage-dropdown.js → cloud-storage-dropdown.tsx} +0 -0
  1689. /package/src/components/side-panel/{custom-panel.js → custom-panel.tsx} +0 -0
  1690. /package/src/components/side-panel/layer-panel/{layer-aggregation-resolution.js → layer-aggregation-resolution.tsx} +0 -0
  1691. /package/src/constants/{color-palette.js → color-palette.ts} +0 -0
  1692. /package/src/constants/{custom-color-ranges.js → custom-color-ranges.ts} +0 -0
  1693. /package/src/constants/{keyevent.js → keyevent.ts} +0 -0
  1694. /package/src/constants/{tooltip.js → tooltip.ts} +0 -0
  1695. /package/src/constants/{user-feedbacks.js → user-feedbacks.ts} +0 -0
  1696. /package/src/constants/{user-guides.js → user-guides.ts} +0 -0
  1697. /package/src/layers/cluster-layer/{cluster-layer-icon.js → cluster-layer-icon.tsx} +0 -0
  1698. /package/src/layers/{default-layer-icon.js → default-layer-icon.tsx} +0 -0
  1699. /package/src/layers/h3-hexagon-layer/{h3-hexagon-layer-icon.js → h3-hexagon-layer-icon.tsx} +0 -0
  1700. /package/src/layers/heatmap-layer/{heatmap-layer-icon.js → heatmap-layer-icon.tsx} +0 -0
  1701. /package/src/layers/hexagon-layer/{hexagon-layer-icon.js → hexagon-layer-icon.tsx} +0 -0
  1702. /package/src/layers/icon-layer/{icon-layer-icon.js → icon-layer-icon.tsx} +0 -0
  1703. /package/src/layers/line-layer/{line-layer-icon.js → line-layer-icon.tsx} +0 -0
  1704. /package/src/layers/point-layer/{point-layer-icon.js → point-layer-icon.tsx} +0 -0
  1705. /package/src/layers/s2-geometry-layer/{s2-layer-icon.js → s2-layer-icon.tsx} +0 -0
  1706. /package/src/layers/scenegraph-layer/{scenegraph-info-modal.js → scenegraph-info-modal.tsx} +0 -0
  1707. /package/src/layers/scenegraph-layer/{scenegraph-layer-icon.js → scenegraph-layer-icon.tsx} +0 -0
  1708. /package/src/layers/trip-layer/{trip-info-modal.js → trip-info-modal.tsx} +0 -0
  1709. /package/src/layers/trip-layer/{trip-layer-icon.js → trip-layer-icon.tsx} +0 -0
  1710. /package/src/layers/{types.js → types.ts} +0 -0
  1711. /package/src/reducers/{composers.js → composers.ts} +0 -0
  1712. /package/src/schemas/{map-state-schema.js → map-state-schema.ts} +0 -0
  1713. /package/src/schemas/{map-style-schema.js → map-style-schema.ts} +0 -0
  1714. /package/src/schemas/{schema-utils.js → schema-utils.ts} +0 -0
  1715. /package/src/schemas/{versions.js → versions.ts} +0 -0
  1716. /package/src/styles/{index.js → index.ts} +0 -0
  1717. /package/src/templates/{export-map-html.js → export-map-html.ts} +0 -0
  1718. /package/src/utils/{gl-utils.js → gl-utils.ts} +0 -0
  1719. /package/src/utils/{locale-utils.js → locale-utils.ts} +0 -0
  1720. /package/src/utils/{map-info-utils.js → map-info-utils.ts} +0 -0
  1721. /package/src/utils/map-style-utils/{mapbox-utils.js → mapbox-utils.ts} +0 -0
  1722. /package/src/utils/{mapbox-utils.js → mapbox-utils.ts} +0 -0
  1723. /package/src/utils/{projection-utils.js → projection-utils.ts} +0 -0
  1724. /package/src/utils/{searcher-utils.js → searcher-utils.ts} +0 -0
  1725. /package/src/utils/table-utils/{index.js → index.ts} +0 -0
@@ -1,1687 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.layerColors = exports["default"] = exports.colorMaker = exports.OVERLAY_TYPE = exports.LAYER_ID_LENGTH = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
14
- var _window = require("global/window");
15
- var _keymirror = _interopRequireDefault(require("keymirror"));
16
- var _extensions = require("@deck.gl/extensions");
17
- var _core = require("@deck.gl/core");
18
- var _carto = require("@deck.gl/carto");
19
- var _defaultLayerIcon = _interopRequireDefault(require("./default-layer-icon"));
20
- var _layerUpdate = require("./layer-update");
21
- var _d3Color = require("d3-color");
22
- var _defaultSettings = require("../constants/default-settings");
23
- var _colorRanges = require("../constants/color-ranges");
24
- var _customColorRanges = require("../constants/custom-color-ranges");
25
- var _layerFactory = require("./layer-factory");
26
- var _utils = require("../utils/utils");
27
- var _dataUtils = require("../utils/data-utils");
28
- var _dataContainerUtils = require("../utils/table-utils/data-container-utils");
29
- var _colorUtils = require("../utils/color-utils");
30
- var _layerUtils = require("../utils/layer-utils");
31
- var _d3Scale = require("d3-scale");
32
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
33
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
34
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
35
- 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; }
36
- 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; }
37
- var _marked = /*#__PURE__*/_regenerator["default"].mark(generateColor); // Copyright (c) 2022 Uber Technologies, Inc.
38
- //
39
- // Permission is hereby granted, free of charge, to any person obtaining a copy
40
- // of this software and associated documentation files (the "Software"), to deal
41
- // in the Software without restriction, including without limitation the rights
42
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
43
- // copies of the Software, and to permit persons to whom the Software is
44
- // furnished to do so, subject to the following conditions:
45
- //
46
- // The above copyright notice and this permission notice shall be included in
47
- // all copies or substantial portions of the Software.
48
- //
49
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
50
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
52
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
53
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
54
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
55
- // THE SOFTWARE.
56
- /** @typedef {import('./index').Layer} LayerClass} */
57
-
58
- /**
59
- * Approx. number of points to sample in a large data set
60
- * @type {number}
61
- */
62
- var LAYER_ID_LENGTH = exports.LAYER_ID_LENGTH = 6;
63
-
64
- // Note, this is is SVG of solid circle encoded as data-uri
65
- var FALLBACK_ICON = 'data:image/svg+xml;charset=utf-8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiLz4NCjwvc3ZnPg==';
66
- var MAX_SAMPLE_SIZE = 5000;
67
- var defaultDomain = [0, 1];
68
- var dataFilterExtension = new _extensions.DataFilterExtension({
69
- filterSize: _defaultSettings.MAX_GPU_FILTERS
70
- });
71
- var collisionFilterExtension = new _extensions.CollisionFilterExtension();
72
- var defaultDataAccessor = function defaultDataAccessor(dc) {
73
- return function (d) {
74
- return d;
75
- };
76
- };
77
- var defaultGetFieldValue = function defaultGetFieldValue(field, d) {
78
- return field.valueAccessor(d);
79
- };
80
- var scaleIdentity = function scaleIdentity(v) {
81
- return v;
82
- };
83
- var OVERLAY_TYPE = exports.OVERLAY_TYPE = (0, _keymirror["default"])({
84
- deckgl: null,
85
- mapboxgl: null
86
- });
87
- var layerColors = exports.layerColors = Object.values(_customColorRanges.DataVizColors).map(_colorUtils.hexToRgb);
88
- function generateColor() {
89
- var index;
90
- return _regenerator["default"].wrap(function generateColor$(_context) {
91
- while (1) switch (_context.prev = _context.next) {
92
- case 0:
93
- index = 0;
94
- case 1:
95
- if (!(index < layerColors.length + 1)) {
96
- _context.next = 7;
97
- break;
98
- }
99
- if (index === layerColors.length) {
100
- index = 0;
101
- }
102
- _context.next = 5;
103
- return layerColors[index++];
104
- case 5:
105
- _context.next = 1;
106
- break;
107
- case 7:
108
- case "end":
109
- return _context.stop();
110
- }
111
- }, _marked);
112
- }
113
- var colorMaker = exports.colorMaker = generateColor();
114
-
115
- /** @type {LayerClass} */
116
- var Layer = /*#__PURE__*/function () {
117
- function Layer() {
118
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
119
- (0, _classCallCheck2["default"])(this, Layer);
120
- this.id = props.id || (0, _utils.generateHashId)(LAYER_ID_LENGTH);
121
- // meta
122
- this.meta = {};
123
-
124
- // legendSettings
125
- this.legendSettings = {};
126
-
127
- // visConfigSettings
128
- this.visConfigSettings = {};
129
-
130
- // interactivitySettings
131
- this._interactivitySettings = {};
132
-
133
- // @ts-ignore
134
- this.config = this.getDefaultLayerConfig(_objectSpread({
135
- columns: this.getLayerColumns()
136
- }, props));
137
- }
138
- (0, _createClass2["default"])(Layer, [{
139
- key: "layerIcon",
140
- get: function get() {
141
- return _defaultLayerIcon["default"];
142
- }
143
- }, {
144
- key: "overlayType",
145
- get: function get() {
146
- return OVERLAY_TYPE.deckgl;
147
- }
148
- }, {
149
- key: "type",
150
- get: function get() {
151
- return null;
152
- }
153
- }, {
154
- key: "name",
155
- get: function get() {
156
- return this.type;
157
- }
158
- }, {
159
- key: "isAggregated",
160
- get: function get() {
161
- return false;
162
- }
163
- }, {
164
- key: "requiredLayerColumns",
165
- get: function get() {
166
- return [];
167
- }
168
- }, {
169
- key: "optionalColumns",
170
- get: function get() {
171
- return [];
172
- }
173
- }, {
174
- key: "noneLayerDataAffectingProps",
175
- get: function get() {
176
- return ['label', 'opacity', 'thickness', 'isVisible', 'hidden'];
177
- }
178
- }, {
179
- key: "visualChannels",
180
- get: function get() {
181
- return {
182
- color: {
183
- property: 'color',
184
- field: 'colorField',
185
- scale: 'colorScale',
186
- domain: 'colorDomain',
187
- range: 'colorRange',
188
- key: 'color',
189
- channelScaleType: _defaultSettings.CHANNEL_SCALES.color,
190
- nullValue: _defaultSettings.NO_VALUE_COLOR,
191
- defaultValue: function defaultValue(config) {
192
- return config.color;
193
- }
194
- },
195
- size: {
196
- property: 'size',
197
- field: 'sizeField',
198
- scale: 'sizeScale',
199
- domain: 'sizeDomain',
200
- range: 'sizeRange',
201
- key: 'size',
202
- channelScaleType: _defaultSettings.CHANNEL_SCALES.size,
203
- nullValue: 0,
204
- defaultValue: 1
205
- }
206
- };
207
- }
208
-
209
- /*
210
- * Column pairs maps layer column to a specific field pairs,
211
- * By default, it is set to null
212
- */
213
- }, {
214
- key: "columnPairs",
215
- get: function get() {
216
- return null;
217
- }
218
-
219
- /*
220
- * Default point column pairs, can be used for point based layers: point, icon etc.
221
- */
222
- }, {
223
- key: "defaultPointColumnPairs",
224
- get: function get() {
225
- return {
226
- lat: {
227
- pair: 'lng',
228
- fieldPairKey: 'lat'
229
- },
230
- lng: {
231
- pair: 'lat',
232
- fieldPairKey: 'lng'
233
- }
234
- };
235
- }
236
-
237
- /*
238
- * Default link column pairs, can be used for link based layers: arc, line etc
239
- */
240
- }, {
241
- key: "defaultLinkColumnPairs",
242
- get: function get() {
243
- return {
244
- lat0: {
245
- pair: 'lng0',
246
- fieldPairKey: 'lat'
247
- },
248
- lng0: {
249
- pair: 'lat0',
250
- fieldPairKey: 'lng'
251
- },
252
- lat1: {
253
- pair: 'lng1',
254
- fieldPairKey: 'lat'
255
- },
256
- lng1: {
257
- pair: 'lat1',
258
- fieldPairKey: 'lng'
259
- }
260
- };
261
- }
262
-
263
- /**
264
- * Return a React component for to render layer instructions in a modal
265
- * @returns {object} - an object
266
- * @example
267
- * return {
268
- * id: 'iconInfo',
269
- * template: IconInfoModal,
270
- * modalProps: {
271
- * title: 'How to draw icons'
272
- * };
273
- * }
274
- */
275
- }, {
276
- key: "layerInfoModal",
277
- get: function get() {
278
- return null;
279
- }
280
- }, {
281
- key: "interactivitySettings",
282
- get: function get() {
283
- return this._interactivitySettings;
284
- },
285
- set: function set(interactivitySettings) {
286
- this._interactivitySettings = interactivitySettings;
287
- }
288
- }, {
289
- key: "hasTooltip",
290
- get: function get() {
291
- var _this$interactivitySe, _this$interactivitySe2, _this$interactivitySe3, _this$interactivitySe4;
292
- return Boolean(((_this$interactivitySe = this.interactivitySettings) === null || _this$interactivitySe === void 0 ? void 0 : (_this$interactivitySe2 = _this$interactivitySe.hover) === null || _this$interactivitySe2 === void 0 ? void 0 : _this$interactivitySe2.fields.length) || ((_this$interactivitySe3 = this.interactivitySettings) === null || _this$interactivitySe3 === void 0 ? void 0 : (_this$interactivitySe4 = _this$interactivitySe3.click) === null || _this$interactivitySe4 === void 0 ? void 0 : _this$interactivitySe4.fields.length));
293
- }
294
- }, {
295
- key: "hasInteractivity",
296
- get: function get() {
297
- var _this$interactivitySe5;
298
- return Boolean(this.hasTooltip && ((_this$interactivitySe5 = this.interactivitySettings) === null || _this$interactivitySe5 === void 0 ? void 0 : _this$interactivitySe5.enabled));
299
- }
300
-
301
- /*
302
- * Given a dataset, automatically find props to create layer based on it
303
- * and return the props and previous found layers.
304
- * By default, no layers will be found
305
- */
306
- }, {
307
- key: "getDefaultLayerConfig",
308
- value: function getDefaultLayerConfig() {
309
- var _props$visibilityByZo, _props$visibilityByZo2;
310
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
311
- return {
312
- dataId: props.dataId || null,
313
- visibilityByZoom: {
314
- min: ((_props$visibilityByZo = props.visibilityByZoom) === null || _props$visibilityByZo === void 0 ? void 0 : _props$visibilityByZo.min) || _defaultSettings.ZOOM_LEVEL_LIMITS.min,
315
- max: ((_props$visibilityByZo2 = props.visibilityByZoom) === null || _props$visibilityByZo2 === void 0 ? void 0 : _props$visibilityByZo2.max) || _defaultSettings.ZOOM_LEVEL_LIMITS.max
316
- },
317
- label: props.label || _layerFactory.DEFAULT_LAYER_LABEL,
318
- color: props.color || colorMaker.next().value,
319
- columns: props.columns || null,
320
- isVisible: props.isVisible || false,
321
- isConfigActive: props.isConfigActive || false,
322
- highlightColor: props.highlightColor || _layerFactory.DEFAULT_HIGHLIGHT_COLOR,
323
- hidden: props.hidden || false,
324
- // TODO: refactor this into separate visual Channel config
325
- // color by field, domain is set by filters, field, scale type
326
- colorField: null,
327
- colorDomain: [0, 1],
328
- colorScale: _defaultSettings.SCALE_TYPES.quantile,
329
- // color by size, domain is set by filters, field, scale type
330
- sizeDomain: [0, 1],
331
- sizeScale: _defaultSettings.SCALE_TYPES.linear,
332
- sizeField: null,
333
- radiusField: null,
334
- visConfig: {},
335
- textLabel: [_layerFactory.DEFAULT_TEXT_LABEL],
336
- colorUI: {
337
- color: _layerFactory.DEFAULT_COLOR_UI,
338
- colorRange: _layerFactory.DEFAULT_COLOR_UI
339
- },
340
- animation: {
341
- enabled: false
342
- }
343
- };
344
- }
345
-
346
- /**
347
- * Get the description of a visualChannel config
348
- * @param key
349
- * @returns {{label: string, measure: (string|string)}}
350
- */
351
- }, {
352
- key: "getVisualChannelDescription",
353
- value: function getVisualChannelDescription(key) {
354
- // e.g. label: Color, measure: Vehicle Type
355
- return {
356
- label: this.visConfigSettings[this.visualChannels[key].range].label,
357
- measure: this.config[this.visualChannels[key].field] ? this.config[this.visualChannels[key].field].displayName || this.config[this.visualChannels[key].field].name : this.visualChannels[key].defaultMeasure
358
- };
359
- }
360
-
361
- /**
362
- * Assign a field to layer column, return column config
363
- * @param key - Column Key
364
- * @param field - Selected field
365
- * @returns {{}} - Column config
366
- */
367
- }, {
368
- key: "assignColumn",
369
- value: function assignColumn(key, field) {
370
- // field value could be null for optional columns
371
- var update = field ? {
372
- value: field.name,
373
- fieldIdx: field.fieldIdx
374
- } : {
375
- value: null,
376
- fieldIdx: -1
377
- };
378
- return _objectSpread(_objectSpread({}, this.config.columns), {}, (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, this.config.columns[key]), update)));
379
- }
380
-
381
- /**
382
- * Assign a field pair to column config, return column config
383
- * @param key - Column Key
384
- * @param pair - field Pair
385
- * @returns {object} - Column config
386
- */
387
- }, {
388
- key: "assignColumnPairs",
389
- value: function assignColumnPairs(key, pair) {
390
- var _this$columnPairs, _this$columnPairs2, _this$columnPairs3;
391
- if (!this.columnPairs || !((_this$columnPairs = this.columnPairs) !== null && _this$columnPairs !== void 0 && _this$columnPairs[key])) {
392
- // should not end in this state
393
- return this.config.columns;
394
- }
395
- var _this$columnPairs$key = (_this$columnPairs2 = this.columnPairs) === null || _this$columnPairs2 === void 0 ? void 0 : _this$columnPairs2[key],
396
- partnerKey = _this$columnPairs$key.pair,
397
- fieldPairKey = _this$columnPairs$key.fieldPairKey;
398
- var _this$columnPairs$par = (_this$columnPairs3 = this.columnPairs) === null || _this$columnPairs3 === void 0 ? void 0 : _this$columnPairs3[partnerKey],
399
- partnerFieldPairKey = _this$columnPairs$par.fieldPairKey;
400
- return _objectSpread(_objectSpread({}, this.config.columns), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, key, pair[fieldPairKey]), partnerKey, pair[partnerFieldPairKey]));
401
- }
402
-
403
- /**
404
- * Calculate a radius zoom multiplier to render points, so they are visible in all zoom level
405
- * @param {object} mapState
406
- * @param {number} mapState.zoom - actual zoom
407
- * @param {number | void} mapState.zoomOffset - zoomOffset when render in the plot container for export image
408
- * @returns {number}
409
- */
410
- }, {
411
- key: "getZoomFactor",
412
- value: function getZoomFactor(_ref) {
413
- var zoom = _ref.zoom,
414
- _ref$zoomOffset = _ref.zoomOffset,
415
- zoomOffset = _ref$zoomOffset === void 0 ? 0 : _ref$zoomOffset;
416
- return Math.pow(2, Math.max(14 - zoom + zoomOffset, 0));
417
- }
418
-
419
- /**
420
- * Calculate a elevation zoom multiplier to render points, so they are visible in all zoom level
421
- * @param {object} mapState
422
- * @param {number} mapState.zoom - actual zoom
423
- * @param {number | void} mapState.zoomOffset - zoomOffset when render in the plot container for export image
424
- * @returns {number}
425
- */
426
- }, {
427
- key: "getElevationZoomFactor",
428
- value: function getElevationZoomFactor(_ref2) {
429
- var zoom = _ref2.zoom,
430
- _ref2$zoomOffset = _ref2.zoomOffset,
431
- zoomOffset = _ref2$zoomOffset === void 0 ? 0 : _ref2$zoomOffset;
432
- return this.config.visConfig.enableElevationZoomFactor ? Math.pow(2, Math.max(8 - zoom + zoomOffset, 0)) : 1;
433
- }
434
- }, {
435
- key: "formatLayerData",
436
- value: function formatLayerData(datasets, filteredIndex) {
437
- return {};
438
- }
439
- }, {
440
- key: "renderLayer",
441
- value: function renderLayer() {
442
- return [];
443
- }
444
- }, {
445
- key: "getHoverData",
446
- value: function getHoverData(object, dataContainer) {
447
- if (!object) {
448
- return null;
449
- }
450
-
451
- // By default, each entry of layerData should have an index of a row in the original data container.
452
- // Each layer can implement its own getHoverData method
453
- return dataContainer.row(object.index);
454
- }
455
-
456
- /**
457
- * When change layer type, try to copy over layer configs as much as possible
458
- * @param configToCopy - config to copy over
459
- * @param visConfigSettings - visConfig settings of config to copy
460
- */
461
- }, {
462
- key: "assignConfigToLayer",
463
- value: function assignConfigToLayer(configToCopy, visConfigSettings) {
464
- var _this = this;
465
- // don't deep merge visualChannel field
466
- // don't deep merge color range, reversed: is not a key by default
467
- var shallowCopy = ['colorRange', 'strokeColorRange'].concat(Object.values(this.visualChannels).map(function (v) {
468
- return v.field;
469
- }));
470
-
471
- // don't copy over domain and animation
472
- var notToCopy = ['animation'].concat(Object.values(this.visualChannels).map(function (v) {
473
- return v.domain;
474
- }));
475
- // if range is for the same property group copy it, otherwise, not to copy
476
- Object.values(this.visualChannels).forEach(function (v) {
477
- if (configToCopy.visConfig[v.range] && _this.visConfigSettings[v.range] && visConfigSettings[v.range].group !== _this.visConfigSettings[v.range].group) {
478
- notToCopy.push(v.range);
479
- }
480
- });
481
-
482
- // don't copy over visualChannel range
483
- var currentConfig = this.config;
484
- var copied = this.copyLayerConfig(currentConfig, configToCopy, {
485
- shallowCopy: shallowCopy,
486
- notToCopy: notToCopy
487
- });
488
- this.updateLayerConfig(copied);
489
- // validate visualChannel field type and scale types
490
- Object.keys(this.visualChannels).forEach(function (channel) {
491
- _this.validateVisualChannel(channel);
492
- });
493
- }
494
-
495
- /*
496
- * Recursively copy config over to an empty layer
497
- * when received saved config, or copy config over from a different layer type
498
- * make sure to only copy over value to existing keys
499
- * @param {object} currentConfig - existing config to be override
500
- * @param {object} configToCopy - new Config to copy over
501
- * @param {string[]} shallowCopy - array of properties to not to be deep copied
502
- * @param {string[]} notToCopy - array of properties not to copy
503
- * @returns {object} - copied config
504
- */
505
- }, {
506
- key: "copyLayerConfig",
507
- value: function copyLayerConfig(currentConfig, configToCopy) {
508
- var _this2 = this;
509
- var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
510
- _ref3$shallowCopy = _ref3.shallowCopy,
511
- shallowCopy = _ref3$shallowCopy === void 0 ? [] : _ref3$shallowCopy,
512
- _ref3$notToCopy = _ref3.notToCopy,
513
- notToCopy = _ref3$notToCopy === void 0 ? [] : _ref3$notToCopy;
514
- var copied = {};
515
- Object.keys(currentConfig).forEach(function (key) {
516
- if ((0, _utils.isPlainObject)(currentConfig[key]) && (0, _utils.isPlainObject)(configToCopy[key]) && !shallowCopy.includes(key) && !notToCopy.includes(key)) {
517
- // recursively assign object value
518
- copied[key] = _this2.copyLayerConfig(currentConfig[key], configToCopy[key], {
519
- shallowCopy: shallowCopy,
520
- notToCopy: notToCopy
521
- });
522
- } else if ((0, _dataUtils.notNullorUndefined)(configToCopy[key]) && !notToCopy.includes(key)) {
523
- // copy
524
- copied[key] = configToCopy[key];
525
- } else {
526
- // keep existing
527
- copied[key] = currentConfig[key];
528
- }
529
- });
530
- return copied;
531
- }
532
- }, {
533
- key: "registerVisConfig",
534
- value: function registerVisConfig(layerVisConfigs) {
535
- var _this3 = this;
536
- Object.keys(layerVisConfigs).forEach(function (item) {
537
- if (typeof item === 'string' && _layerFactory.LAYER_VIS_CONFIGS[layerVisConfigs[item]]) {
538
- // if assigned one of default LAYER_CONFIGS
539
- _this3.config.visConfig[item] = _layerFactory.LAYER_VIS_CONFIGS[layerVisConfigs[item]].defaultValue;
540
- _this3.visConfigSettings[item] = _layerFactory.LAYER_VIS_CONFIGS[layerVisConfigs[item]];
541
- } else if (['type', 'defaultValue'].every(function (p) {
542
- return layerVisConfigs[item].hasOwnProperty(p);
543
- })) {
544
- // if provided customized visConfig, and has type && defaultValue
545
- // TODO: further check if customized visConfig is valid
546
- _this3.config.visConfig[item] = layerVisConfigs[item].defaultValue;
547
- _this3.visConfigSettings[item] = layerVisConfigs[item];
548
- }
549
- });
550
- }
551
- }, {
552
- key: "getLayerColumns",
553
- value: function getLayerColumns() {
554
- var columnValidators = this.columnValidators || {};
555
- var required = this.requiredLayerColumns.reduce(function (accu, key) {
556
- return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, columnValidators[key] ? {
557
- value: null,
558
- fieldIdx: -1,
559
- validator: columnValidators[key]
560
- } : {
561
- value: null,
562
- fieldIdx: -1
563
- }));
564
- }, {});
565
- var optional = this.optionalColumns.reduce(function (accu, key) {
566
- return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, {
567
- value: null,
568
- fieldIdx: -1,
569
- optional: true
570
- }));
571
- }, {});
572
- return _objectSpread(_objectSpread({}, required), optional);
573
- }
574
- }, {
575
- key: "updateLayerConfig",
576
- value: function updateLayerConfig(newConfig) {
577
- this.config = _objectSpread(_objectSpread({}, this.config), newConfig);
578
- return this;
579
- }
580
- }, {
581
- key: "updateLayerVisConfig",
582
- value: function updateLayerVisConfig(newVisConfig) {
583
- this.config.visConfig = _objectSpread(_objectSpread({}, this.config.visConfig), newVisConfig);
584
- return this;
585
- }
586
- }, {
587
- key: "updateLayerColorUI",
588
- value: function updateLayerColorUI(prop, newConfig) {
589
- var _this$config = this.config,
590
- previous = _this$config.colorUI,
591
- visConfig = _this$config.visConfig;
592
- if (!(0, _utils.isPlainObject)(newConfig) || typeof prop !== 'string') {
593
- return this;
594
- }
595
- var colorUIProp = Object.entries(newConfig).reduce(function (accu, _ref4) {
596
- var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
597
- key = _ref5[0],
598
- value = _ref5[1];
599
- return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, (0, _utils.isPlainObject)(accu[key]) && (0, _utils.isPlainObject)(value) ? _objectSpread(_objectSpread({}, accu[key]), value) : value));
600
- }, previous[prop] || _layerFactory.DEFAULT_COLOR_UI);
601
- var colorUI = _objectSpread(_objectSpread({}, previous), {}, (0, _defineProperty2["default"])({}, prop, colorUIProp));
602
- this.updateLayerConfig({
603
- colorUI: colorUI
604
- });
605
- // if colorUI[prop] is colorRange. If type is hexColor then it's also a range
606
- var isColorRange = visConfig[prop] && (visConfig[prop].colors || visConfig[prop].type === _colorRanges.hexColor);
607
- if (isColorRange) {
608
- this.updateColorUIByColorRange(newConfig, prop);
609
- this.updateColorRangeByColorUI(newConfig, previous, prop);
610
- this.updateCustomPalette(newConfig, previous, prop);
611
- }
612
- return this;
613
- }
614
- }, {
615
- key: "updateCustomPalette",
616
- value: function updateCustomPalette(newConfig, previous, prop) {
617
- if (!newConfig.colorRangeConfig || !newConfig.colorRangeConfig.custom) {
618
- return;
619
- }
620
- var _this$config2 = this.config,
621
- colorUI = _this$config2.colorUI,
622
- visConfig = _this$config2.visConfig;
623
- if (!visConfig[prop]) return;
624
- var colors = visConfig[prop].colors;
625
- var customPalette = _objectSpread(_objectSpread({}, colorUI[prop].customPalette), {}, {
626
- name: 'Custom Palette',
627
- colors: (0, _toConsumableArray2["default"])(colors)
628
- });
629
- this.updateLayerConfig({
630
- colorUI: _objectSpread(_objectSpread({}, colorUI), {}, (0, _defineProperty2["default"])({}, prop, _objectSpread(_objectSpread({}, colorUI[prop]), {}, {
631
- customPalette: customPalette
632
- })))
633
- });
634
- }
635
- /**
636
- * if open dropdown and prop is color range
637
- * Automatically set colorRangeConfig's step, reversed and type
638
- * @param {*} newConfig
639
- * @param {*} prop
640
- */
641
- }, {
642
- key: "updateColorUIByColorRange",
643
- value: function updateColorUIByColorRange(newConfig, prop) {
644
- var _visConfig$prop$color;
645
- if (typeof newConfig.showDropdown !== 'number') return;
646
- var _this$config3 = this.config,
647
- colorUI = _this$config3.colorUI,
648
- visConfig = _this$config3.visConfig;
649
- this.updateLayerConfig({
650
- colorUI: _objectSpread(_objectSpread({}, colorUI), {}, (0, _defineProperty2["default"])({}, prop, _objectSpread(_objectSpread({}, colorUI[prop]), {}, {
651
- colorRangeConfig: _objectSpread(_objectSpread({}, colorUI[prop].colorRangeConfig), {}, {
652
- type: visConfig[prop].type,
653
- steps: (_visConfig$prop$color = visConfig[prop].colors) === null || _visConfig$prop$color === void 0 ? void 0 : _visConfig$prop$color.length,
654
- reversed: Boolean(visConfig[prop].reversed),
655
- hexColumn: this.getHexColumn(prop),
656
- isHexColumn: this.isColoredByColorColumn(prop)
657
- })
658
- })))
659
- });
660
- }
661
-
662
- // eslint-disable-next-line complexity
663
- }, {
664
- key: "updateColorRangeByColorUI",
665
- value: function updateColorRangeByColorUI(newConfig, previous, prop) {
666
- // only update colorRange if changes in UI is made to 'reversed', 'steps' or steps
667
- var shouldUpdate = newConfig.colorRangeConfig && ['reversed', 'steps'].some(function (key) {
668
- return newConfig.colorRangeConfig.hasOwnProperty(key) && newConfig.colorRangeConfig[key] !== (previous[prop] || _layerFactory.DEFAULT_COLOR_UI).colorRangeConfig[key];
669
- });
670
- if (!shouldUpdate) return;
671
- var _this$config4 = this.config,
672
- colorUI = _this$config4.colorUI,
673
- visConfig = _this$config4.visConfig;
674
- var _colorUI$prop$colorRa = colorUI[prop].colorRangeConfig,
675
- steps = _colorUI$prop$colorRa.steps,
676
- reversed = _colorUI$prop$colorRa.reversed;
677
- var colorRange = visConfig[prop];
678
- // find based on step or reversed
679
- var update;
680
- if (newConfig.colorRangeConfig.hasOwnProperty('steps')) {
681
- var group = (0, _colorUtils.getColorGroupByName)(colorRange);
682
- if (group) {
683
- var sameGroup = _colorRanges.COLOR_RANGES.filter(function (cr) {
684
- return (0, _colorUtils.getColorGroupByName)(cr) === group;
685
- });
686
- update = sameGroup.find(function (cr) {
687
- return cr.colors.length === steps;
688
- });
689
- if (update && colorRange.reversed) {
690
- update = (0, _colorUtils.reverseColorRange)(true, update);
691
- }
692
- if (update && colorRange.colorMap) {
693
- update = this.updateColorMap(prop, colorRange.colorMap, update);
694
- }
695
- }
696
- }
697
- if (newConfig.colorRangeConfig.hasOwnProperty('reversed')) {
698
- update = (0, _colorUtils.reverseColorRange)(reversed, update || colorRange);
699
- }
700
- if (update) {
701
- this.updateLayerVisConfig((0, _defineProperty2["default"])({}, prop, update));
702
- }
703
- }
704
- }, {
705
- key: "updateColorMap",
706
- value: function updateColorMap(prop, colorMap, colorRange) {
707
- var _this$config$field;
708
- // @ts-ignore
709
- var _Object$values$find = Object.values(this.visualChannels).find(function (value) {
710
- return value.range === prop;
711
- }),
712
- field = _Object$values$find.field,
713
- domain = _Object$values$find.domain;
714
- var type = (_this$config$field = this.config[field]) === null || _this$config$field === void 0 ? void 0 : _this$config$field.type;
715
- if (type === 'string' || type === 'boolean' || type === 'date') {
716
- return this.updateCategoryColorMap(colorMap, this.config[domain], colorRange);
717
- }
718
-
719
- // If no type or type is not string, boolean or date
720
- return this.updateNumericColorMap(colorMap, this.config[domain], colorRange);
721
- }
722
- }, {
723
- key: "updateCategoryColorMap",
724
- value: function updateCategoryColorMap(colorMap, domain, colorRange) {
725
- var colors = colorRange.colors;
726
- var assignedCategories = [];
727
- if (colorRange.type === _colorRanges.hexColor) {
728
- return _objectSpread(_objectSpread({}, colorRange), {}, {
729
- colorMap: []
730
- });
731
- }
732
- var newColorMap = colorMap.slice(0, colors.length).map(function (cMap, index) {
733
- assignedCategories.push(cMap[0]);
734
- return [cMap[0], colors[index]];
735
- });
736
- var unassignedColors = colors.slice(newColorMap.length, colors.length);
737
- var _iterator = _createForOfIteratorHelper(unassignedColors),
738
- _step;
739
- try {
740
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
741
- var color = _step.value;
742
- var category = domain.find(function (d) {
743
- return !assignedCategories.includes(d);
744
- });
745
- if (!category) {
746
- break;
747
- }
748
- assignedCategories.push(category);
749
- newColorMap.push([category, color]);
750
- }
751
- } catch (err) {
752
- _iterator.e(err);
753
- } finally {
754
- _iterator.f();
755
- }
756
- return _objectSpread(_objectSpread({}, colorRange), {}, {
757
- colorMap: newColorMap
758
- });
759
- }
760
- }, {
761
- key: "updateNumericColorMap",
762
- value: function updateNumericColorMap(colorMap, domain, update) {
763
- var colors = update.colors;
764
- var newColorMap = colorMap.slice(0, colors.length);
765
- newColorMap = newColorMap.map(function (cMap, index) {
766
- var value = index === newColorMap.length - 1 ? null : cMap[0];
767
- return [value, colors[index]];
768
- });
769
- var unassignedColors = colors.slice(newColorMap.length, colors.length);
770
- if (unassignedColors.length > 0) {
771
- var colorMapValues = colorMap.map(function (c) {
772
- return c[0];
773
- }).filter(function (c) {
774
- return typeof c === 'number';
775
- });
776
- var maxValue = Math.max.apply(Math, (0, _toConsumableArray2["default"])(colorMapValues).concat([domain[domain.length - 1]]));
777
- var prevValue = newColorMap[newColorMap.length - 2][0];
778
- var step = (maxValue - prevValue) / (unassignedColors.length + 1);
779
- newColorMap[newColorMap.length - 1][0] = prevValue + step;
780
- var _iterator2 = _createForOfIteratorHelper(unassignedColors.entries()),
781
- _step2;
782
- try {
783
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
784
- var _step2$value = (0, _slicedToArray2["default"])(_step2.value, 2),
785
- i = _step2$value[0],
786
- color = _step2$value[1];
787
- var value = i === unassignedColors.length - 1 ? null : prevValue + step * (i + 2);
788
- newColorMap.push([value, color]);
789
- }
790
- } catch (err) {
791
- _iterator2.e(err);
792
- } finally {
793
- _iterator2.f();
794
- }
795
- }
796
- return _objectSpread(_objectSpread({}, update), {}, {
797
- colorMap: newColorMap
798
- });
799
- }
800
-
801
- /**
802
- * Check whether layer has all columns
803
- * @returns {boolean} yes or no
804
- */
805
- }, {
806
- key: "hasAllColumns",
807
- value: function hasAllColumns() {
808
- var columns = this.config.columns;
809
- return columns && Object.values(columns).every(function (v) {
810
- return Boolean(v.optional || v.value && v.fieldIdx > -1);
811
- });
812
- }
813
-
814
- /**
815
- * Check whether layer has data
816
- *
817
- * @param {Array | Object} layerData
818
- * @returns {boolean} yes or no
819
- */
820
- }, {
821
- key: "hasLayerData",
822
- value: function hasLayerData(layerData) {
823
- if (!layerData) {
824
- return false;
825
- }
826
- return Boolean(layerData.data && layerData.data.length);
827
- }
828
- }, {
829
- key: "isValidToSave",
830
- value: function isValidToSave() {
831
- return this.type && this.hasAllColumns();
832
- }
833
- }, {
834
- key: "shouldRenderLayer",
835
- value: function shouldRenderLayer(data) {
836
- return this.type && this.hasAllColumns() && this.hasLayerData(data) && typeof this.renderLayer === 'function';
837
- }
838
- }, {
839
- key: "getColorScale",
840
- value: function getColorScale(colorScale, colorDomain, colorRange) {
841
- if (colorRange.type === _colorRanges.hexColor) {
842
- return function (_, color) {
843
- var _rgb = (0, _d3Color.rgb)(color),
844
- r = _rgb.r,
845
- g = _rgb.g,
846
- b = _rgb.b;
847
- return [r, g, b].some(isNaN) ? _defaultSettings.UNKNOWN_COLOR : [r, g, b];
848
- };
849
- } else if (Array.isArray(colorRange.colorMap)) {
850
- var cMap = new Map();
851
- colorRange.colorMap.forEach(function (_ref6) {
852
- var _ref7 = (0, _slicedToArray2["default"])(_ref6, 2),
853
- k = _ref7[0],
854
- v = _ref7[1];
855
- cMap.set(k, typeof v === 'string' ? (0, _colorUtils.hexToRgb)(v) : v);
856
- });
857
-
858
- // @ts-ignore d3 scale
859
- var scale = _defaultSettings.SCALE_FUNC[colorScale]().domain(Array.from(cMap.keys())).range(Array.from(cMap.values())).unknown(_defaultSettings.UNKNOWN_COLOR);
860
- return scale;
861
- }
862
- return this.getVisChannelScale(colorScale, colorDomain, colorRange.colors.map(_colorUtils.hexToRgb));
863
- }
864
- }, {
865
- key: "getCustomMarkersScale",
866
- value: function getCustomMarkersScale(range, fallbackIcon) {
867
- var unknownValue = fallbackIcon || FALLBACK_ICON;
868
- if (!range) {
869
- return function () {
870
- return unknownValue;
871
- };
872
- }
873
- var mapping = new Map();
874
- if (range.othersMarker) {
875
- unknownValue = range.othersMarker;
876
- }
877
- var _iterator3 = _createForOfIteratorHelper(range.markerMap),
878
- _step3;
879
- try {
880
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
881
- var _step3$value = _step3.value,
882
- value = _step3$value.value,
883
- markerUrl = _step3$value.markerUrl;
884
- if (markerUrl) {
885
- mapping.set(value, markerUrl);
886
- }
887
- }
888
-
889
- // @ts-ignore d3 scale
890
- } catch (err) {
891
- _iterator3.e(err);
892
- } finally {
893
- _iterator3.f();
894
- }
895
- var scale = (0, _d3Scale.scaleOrdinal)().domain(Array.from(mapping.keys())).range(Array.from(mapping.values())).unknown(unknownValue);
896
- return scale;
897
- }
898
-
899
- /**
900
- * Mapping from visual channels to deck.gl accesors
901
- * @param {Object} param Parameters
902
- * @param {Function} param.dataAccessor Access kepler.gl layer data from deck.gl layer
903
- * @param {import('utils/table-utils/data-container-interface').DataContainerInterface} param.dataContainer DataContainer to use use with dataAccessor
904
- * @return {Object} attributeAccessors - deck.gl layer attribute accessors
905
- */
906
- }, {
907
- key: "getAttributeAccessors",
908
- value: function getAttributeAccessors(_ref8) {
909
- var _this4 = this;
910
- var _ref8$dataAccessor = _ref8.dataAccessor,
911
- dataAccessor = _ref8$dataAccessor === void 0 ? defaultDataAccessor : _ref8$dataAccessor,
912
- dataContainer = _ref8.dataContainer;
913
- var attributeAccessors = {};
914
-
915
- // eslint-disable-next-line complexity
916
- Object.keys(this.visualChannels).forEach(function (channel) {
917
- var _this4$visualChannels = _this4.visualChannels[channel],
918
- field = _this4$visualChannels.field,
919
- fixed = _this4$visualChannels.fixed,
920
- scale = _this4$visualChannels.scale,
921
- domain = _this4$visualChannels.domain,
922
- range = _this4$visualChannels.range,
923
- accessor = _this4$visualChannels.accessor,
924
- defaultValue = _this4$visualChannels.defaultValue,
925
- getAttributeValue = _this4$visualChannels.getAttributeValue,
926
- nullValue = _this4$visualChannels.nullValue,
927
- channelScaleType = _this4$visualChannels.channelScaleType,
928
- aggregation = _this4$visualChannels.aggregation;
929
- var shouldGetScale = Boolean((scale || channelScaleType === _defaultSettings.CHANNEL_SCALES.identity) && _this4.config[field]);
930
- if (shouldGetScale) {
931
- var args = [_this4.config[scale], _this4.config[domain], _this4.config.visConfig[range]];
932
- var isFixed = fixed && _this4.config.visConfig[fixed];
933
- // It's important to declare as const all the parameters that we are going to be use in the getEncodedChannelValue call
934
- // otherwise, the oldLayerData parameter in formatLayerData method will be wrong (you can check the formatLayerData TileLayer method in Builder as example)
935
- var fieldConfig = _this4.config[field];
936
- var aggregationValue = _this4.config.visConfig[aggregation];
937
- var scaleFunction = channelScaleType === _defaultSettings.CHANNEL_SCALES.identity ? scaleIdentity : channelScaleType === _defaultSettings.CHANNEL_SCALES.color ? _this4.getColorScale.apply(_this4, args) : channelScaleType === _defaultSettings.CHANNEL_SCALES.customMarker ? _this4.getCustomMarkersScale(_this4.config.visConfig[range], _this4.config.visConfig.customMarkersUrl) : _this4.getVisChannelScale.apply(_this4, args.concat([isFixed]));
938
- attributeAccessors[accessor] = function (d) {
939
- return _this4.getEncodedChannelValue({
940
- channel: channel,
941
- dataContainer: dataContainer,
942
- scale: scaleFunction,
943
- data: dataAccessor(dataContainer)(d),
944
- field: fieldConfig,
945
- _aggregation: aggregationValue,
946
- nullValue: nullValue
947
- });
948
- };
949
- } else if (typeof getAttributeValue === 'function') {
950
- attributeAccessors[accessor] = getAttributeValue(_this4.config);
951
- } else {
952
- attributeAccessors[accessor] = typeof defaultValue === 'function' ? defaultValue(_this4.config) : defaultValue;
953
- }
954
- if (!(accessor in attributeAccessors)) {
955
- _window.console.warn("Failed to provide accessor function for ".concat(accessor || channel));
956
- }
957
- });
958
- return attributeAccessors;
959
- }
960
- }, {
961
- key: "getVisChannelScale",
962
- value: function getVisChannelScale(scale, domain, range, fixed) {
963
- if (scale === _defaultSettings.SCALE_TYPES.ordinal) {
964
- // @ts-ignore d3-scale type
965
- return _defaultSettings.SCALE_FUNC[scale]().domain(domain.slice(0, range.length)).range(range).unknown(_defaultSettings.UNKNOWN_COLOR);
966
- }
967
-
968
- // for `count` aggregation, we domain is actually `[0, Infinity]` so it doesn't make sense
969
- // to use it, so skip specyfying this domains
970
- var domainIsInfinite = domain && domain[0] === 0 && domain[1] === Infinity;
971
- var scaleFactory = _defaultSettings.SCALE_FUNC[fixed ? 'linear' : scale];
972
- // @ts-ignore d3-scale type
973
- var result = scaleFactory();
974
- if (domain && !domainIsInfinite) {
975
- result = result.domain(domain);
976
- }
977
- return result.range(fixed ? domain : range);
978
- }
979
-
980
- /**
981
- * Get longitude and latitude bounds of the data.
982
- * @param {import('utils/table-utils/data-container-interface').DataContainerInterface} dataContainer DataContainer to calculate bounds for.
983
- * @param {(d: {index: number}, dc: import('utils/table-utils/data-container-interface').DataContainerInterface) => number[]} getPosition Access kepler.gl layer data from deck.gl layer
984
- * @return {number[]|null} bounds of the data.
985
- */
986
- }, {
987
- key: "getPointsBounds",
988
- value: function getPointsBounds(dataContainer, getPosition) {
989
- // no need to loop through the entire dataset
990
- // get a sample of data to calculate bounds
991
- var sampleData = dataContainer.numRows() > MAX_SAMPLE_SIZE ? (0, _dataContainerUtils.getSampleData)(dataContainer, MAX_SAMPLE_SIZE) : dataContainer;
992
- var points = sampleData.mapIndex(getPosition);
993
- var latBounds = (0, _dataUtils.getLatLngBounds)(points, 1, [-90, 90]);
994
- var lngBounds = (0, _dataUtils.getLatLngBounds)(points, 0, [-180, 180]);
995
- if (!latBounds || !lngBounds) {
996
- return null;
997
- }
998
- return [lngBounds[0], latBounds[0], lngBounds[1], latBounds[1]];
999
- }
1000
- }, {
1001
- key: "getChangedTriggers",
1002
- value: function getChangedTriggers(dataUpdateTriggers) {
1003
- var triggerChanged = (0, _layerUpdate.diffUpdateTriggers)(dataUpdateTriggers, this._oldDataUpdateTriggers);
1004
- this._oldDataUpdateTriggers = dataUpdateTriggers;
1005
- return triggerChanged;
1006
- }
1007
- }, {
1008
- key: "getEncodedChannelValue",
1009
- value: function getEncodedChannelValue(_ref9) {
1010
- var channel = _ref9.channel,
1011
- scale = _ref9.scale,
1012
- data = _ref9.data,
1013
- field = _ref9.field,
1014
- dataContainer = _ref9.dataContainer,
1015
- _aggregation = _ref9._aggregation,
1016
- _ref9$nullValue = _ref9.nullValue,
1017
- nullValue = _ref9$nullValue === void 0 ? _defaultSettings.NO_VALUE_COLOR : _ref9$nullValue,
1018
- _ref9$getValue = _ref9.getValue,
1019
- getValue = _ref9$getValue === void 0 ? defaultGetFieldValue : _ref9$getValue;
1020
- var colorColumnValue;
1021
- var type = field.type;
1022
- var value = getValue(field, data);
1023
- var channelConfig = this.config.visConfig[this.visualChannels[channel].range];
1024
- var channelField = this.config[this.visualChannels[channel].field];
1025
- if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.type) === _colorRanges.hexColor) {
1026
- var columnField = {
1027
- id: channelField.colorColumn,
1028
- name: channelField.colorColumn,
1029
- fieldIdx: channelField.colorColumnIdx,
1030
- valueAccessor: function valueAccessor(d) {
1031
- return dataContainer.valueAt(d.index, channelField.colorColumnIdx);
1032
- }
1033
- };
1034
- colorColumnValue = getValue(columnField, data);
1035
- } else if (!(0, _dataUtils.notNullorUndefined)(value)) {
1036
- return nullValue;
1037
- }
1038
- var attributeValue;
1039
- if (type === _defaultSettings.ALL_FIELD_TYPES.timestamp) {
1040
- // shouldn't need to convert here
1041
- // scale Function should take care of it
1042
- attributeValue = scale(new Date(value), colorColumnValue);
1043
- } else {
1044
- attributeValue = scale(value, colorColumnValue);
1045
- }
1046
- if (!(0, _dataUtils.notNullorUndefined)(attributeValue)) {
1047
- attributeValue = nullValue;
1048
- }
1049
- return attributeValue;
1050
- }
1051
- }, {
1052
- key: "updateMeta",
1053
- value: function updateMeta(meta) {
1054
- this.meta = _objectSpread(_objectSpread({}, this.meta), meta);
1055
- }
1056
- }, {
1057
- key: "updateLayerLegend",
1058
- value: function updateLayerLegend(settings) {
1059
- this.legendSettings = settings;
1060
- }
1061
- }, {
1062
- key: "getDataUpdateTriggers",
1063
- value: function getDataUpdateTriggers(_ref10) {
1064
- var filteredIndex = _ref10.filteredIndex,
1065
- id = _ref10.id,
1066
- allData = _ref10.allData;
1067
- var columns = this.config.columns;
1068
- return _objectSpread({
1069
- getData: {
1070
- datasetId: id,
1071
- allData: allData,
1072
- columns: columns,
1073
- filteredIndex: filteredIndex
1074
- },
1075
- getMeta: {
1076
- datasetId: id,
1077
- allData: allData,
1078
- columns: columns
1079
- }
1080
- }, (this.config.textLabel || []).reduce(function (accu, tl, i) {
1081
- return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, "getLabelCharacterSet-".concat(i), tl.field ? tl.field.name : null));
1082
- }, {}));
1083
- }
1084
- }, {
1085
- key: "updateData",
1086
- value: function updateData(datasets, oldLayerData) {
1087
- if (!this.config.dataId) {
1088
- return {};
1089
- }
1090
- var dataset = this.getDataset(datasets);
1091
- var dataContainer = dataset.dataContainer;
1092
- this.updateVisualChannelFields(dataset);
1093
- this.updateHexColorDomain(dataset);
1094
- var getPosition = this.getPositionAccessor(dataContainer);
1095
- var dataUpdateTriggers = this.getDataUpdateTriggers(dataset);
1096
- var triggerChanged = this.getChangedTriggers(dataUpdateTriggers);
1097
- if (triggerChanged.getMeta) {
1098
- this.updateLayerMeta(dataContainer, getPosition);
1099
- }
1100
- var data = [];
1101
- if (!triggerChanged.getData && oldLayerData && oldLayerData.data) {
1102
- // same data
1103
- data = oldLayerData.data;
1104
- } else {
1105
- data = this.calculateDataAttribute(dataset, getPosition);
1106
- }
1107
- return {
1108
- data: data,
1109
- triggerChanged: triggerChanged
1110
- };
1111
- }
1112
-
1113
- /**
1114
- * Update styled fields to match ones from new dataset.
1115
- *
1116
- * @param {Object} dataset
1117
- */
1118
- }, {
1119
- key: "updateVisualChannelFields",
1120
- value: function updateVisualChannelFields(dataset) {
1121
- var _this5 = this;
1122
- var _loop = function _loop() {
1123
- var _this5$config$visConf;
1124
- var _Object$values$_i = _Object$values[_i],
1125
- field = _Object$values$_i.field,
1126
- range = _Object$values$_i.range;
1127
- var oldField = _this5.config[field];
1128
- var isUsingHexColorCode = (_this5$config$visConf = _this5.config.visConfig[range]) === null || _this5$config$visConf === void 0 ? void 0 : _this5$config$visConf.hexColor;
1129
- if (!oldField) {
1130
- return {
1131
- v: void 0
1132
- };
1133
- }
1134
- var newDataSetField = dataset.fields.find(function (fd) {
1135
- return fd.name === oldField.name;
1136
- }) || null;
1137
- if (isUsingHexColorCode) {
1138
- newDataSetField = _objectSpread(_objectSpread({}, newDataSetField), {}, {
1139
- colorColumn: newDataSetField.colorColumn || oldField.colorColumn,
1140
- colorColumnIdx: newDataSetField.colorColumnIdx || oldField.colorColumnIdx
1141
- });
1142
- }
1143
- _this5.updateLayerConfig((0, _defineProperty2["default"])({}, field, newDataSetField));
1144
- },
1145
- _ret;
1146
- for (var _i = 0, _Object$values = Object.values(this.visualChannels); _i < _Object$values.length; _i++) {
1147
- _ret = _loop();
1148
- if (_ret) return _ret.v;
1149
- }
1150
- }
1151
-
1152
- /**
1153
- * helper function to update one layer domain when state.data changed
1154
- * if state.data change is due ot update filter, newFiler will be passed
1155
- * called by updateAllLayerDomainData
1156
- * @param {Object} datasets
1157
- * @param {Object} newFilter
1158
- * @returns {object} layer
1159
- */
1160
- }, {
1161
- key: "updateLayerDomain",
1162
- value: function updateLayerDomain(datasets, newFilter) {
1163
- var _this6 = this;
1164
- var table = this.getDataset(datasets);
1165
- if (!table) {
1166
- return this;
1167
- }
1168
- Object.values(this.visualChannels).forEach(function (channel) {
1169
- var scale = channel.scale;
1170
- var scaleType = _this6.config[scale];
1171
-
1172
- // ordinal domain is based on dataContainer, if only filter changed
1173
- // no need to update ordinal domain
1174
- if (!newFilter || scaleType !== _defaultSettings.SCALE_TYPES.ordinal) {
1175
- var domain = channel.domain;
1176
- var updatedDomain = _this6.calculateLayerDomain(table, channel);
1177
- _this6.updateLayerConfig((0, _defineProperty2["default"])({}, domain, updatedDomain));
1178
- }
1179
- });
1180
- return this;
1181
- }
1182
- }, {
1183
- key: "getDataset",
1184
- value: function getDataset(datasets) {
1185
- return this.config.dataId ? datasets[this.config.dataId] : null;
1186
- }
1187
-
1188
- /**
1189
- * Validate visual channel field and scales based on supported field & scale type
1190
- * @param channel
1191
- */
1192
- }, {
1193
- key: "validateVisualChannel",
1194
- value: function validateVisualChannel(channel) {
1195
- this.validateFieldType(channel);
1196
- this.validateScale(channel);
1197
- }
1198
-
1199
- /**
1200
- * Validate field type based on channelScaleType
1201
- */
1202
- }, {
1203
- key: "validateFieldType",
1204
- value: function validateFieldType(channel) {
1205
- var visualChannel = this.visualChannels[channel];
1206
- var field = visualChannel.field,
1207
- channelScaleType = visualChannel.channelScaleType,
1208
- supportedFieldTypes = visualChannel.supportedFieldTypes;
1209
- if (this.config[field]) {
1210
- // if field is selected, check if field type is supported
1211
- var channelSupportedFieldTypes = supportedFieldTypes || _defaultSettings.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
1212
- if (!channelSupportedFieldTypes.includes(this.config[field].type)) {
1213
- // field type is not supported, set it back to null
1214
- // set scale back to default
1215
- this.updateLayerConfig((0, _defineProperty2["default"])({}, field, null));
1216
- }
1217
- }
1218
- }
1219
-
1220
- /**
1221
- * Validate scale type based on aggregation
1222
- */
1223
- }, {
1224
- key: "validateScale",
1225
- value: function validateScale(channel) {
1226
- var visualChannel = this.visualChannels[channel];
1227
- var scale = visualChannel.scale,
1228
- range = visualChannel.range;
1229
- if (!scale || this.isColoredByColorColumn(range) && this.config[scale] === _defaultSettings.SCALE_TYPES.identity) {
1230
- // visualChannel doesn't have scale
1231
- return;
1232
- }
1233
- var scaleOptions = this.getScaleOptions(channel);
1234
- // check if current selected scale is
1235
- // supported, if not, change to default
1236
- if (!scaleOptions.includes(this.config[scale])) {
1237
- this.updateLayerConfig((0, _defineProperty2["default"])({}, scale, scaleOptions[0]));
1238
- }
1239
- }
1240
-
1241
- /**
1242
- * Get scale options based on current field
1243
- * @param {string} channel
1244
- * @returns {string[]}
1245
- */
1246
- }, {
1247
- key: "getScaleOptions",
1248
- value: function getScaleOptions(channel) {
1249
- var visualChannel = this.visualChannels[channel];
1250
- var field = visualChannel.field,
1251
- scale = visualChannel.scale,
1252
- channelScaleType = visualChannel.channelScaleType;
1253
- return this.config[field] ? _defaultSettings.FIELD_OPTS[this.config[field].type].scale[channelScaleType] : [this.getDefaultLayerConfig()[scale]];
1254
- }
1255
- }, {
1256
- key: "updateLayerVisualChannel",
1257
- value: function updateLayerVisualChannel(dataset, channel) {
1258
- var visualChannel = this.visualChannels[channel];
1259
- this.validateVisualChannel(channel);
1260
- // calculate layer channel domain
1261
- var updatedDomain = this.calculateLayerDomain(dataset, visualChannel);
1262
- this.updateLayerConfig((0, _defineProperty2["default"])({}, visualChannel.domain, updatedDomain));
1263
- }
1264
- }, {
1265
- key: "getVisualChannelUpdateTriggers",
1266
- value: function getVisualChannelUpdateTriggers() {
1267
- var _this7 = this;
1268
- var updateTriggers = {};
1269
- Object.values(this.visualChannels).forEach(function (visualChannel) {
1270
- // field range scale domain
1271
- var accessor = visualChannel.accessor,
1272
- field = visualChannel.field,
1273
- scale = visualChannel.scale,
1274
- domain = visualChannel.domain,
1275
- range = visualChannel.range,
1276
- defaultValue = visualChannel.defaultValue,
1277
- fixed = visualChannel.fixed;
1278
- updateTriggers[accessor] = _objectSpread((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, field, _this7.config[field]), scale, _this7.config[scale]), domain, _this7.config[domain]), range, _this7.config.visConfig[range]), "defaultValue", typeof defaultValue === 'function' ? defaultValue(_this7.config) : defaultValue), fixed ? (0, _defineProperty2["default"])({}, fixed, _this7.config.visConfig[fixed]) : {});
1279
- });
1280
- return updateTriggers;
1281
- }
1282
- }, {
1283
- key: "calculateLayerDomain",
1284
- value: function calculateLayerDomain(dataset, visualChannel) {
1285
- var scale = visualChannel.scale;
1286
- var field = this.config[visualChannel.field];
1287
- if (!field || !scale) {
1288
- // if colorField or sizeField were set back to null
1289
- return defaultDomain;
1290
- }
1291
- var scaleType = this.config[scale];
1292
- var dataSetField = dataset.fields.find(function (f) {
1293
- return f.name === field.name;
1294
- });
1295
- if (!scaleType || !dataSetField) {
1296
- // if new dataset doesn't contain previously set field
1297
- return defaultDomain;
1298
- }
1299
- return dataset.getColumnLayerDomain(dataSetField, scaleType) || defaultDomain;
1300
- }
1301
- }, {
1302
- key: "updateHexColorDomain",
1303
- value: function updateHexColorDomain(dataset) {
1304
- var _this8 = this;
1305
- if (!dataset) {
1306
- return this;
1307
- }
1308
- Object.values(this.visualChannels).forEach(function (channel) {
1309
- var channelConfig = _this8.config.visConfig[channel.range];
1310
- var field = _this8.config[channel.field];
1311
- if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.type) === _colorRanges.hexColor && field !== null && field !== void 0 && field.colorColumn) {
1312
- var dataSetField = dataset.fields.find(function (f) {
1313
- return f.name === field.colorColumn;
1314
- });
1315
- var colors = dataset.getColumnLayerDomain(dataSetField, _defaultSettings.SCALE_TYPES.ordinal).map(function (c) {
1316
- return (0, _colorUtils.checkColorOrFallback)(c);
1317
- });
1318
- _this8.updateLayerVisConfig((0, _defineProperty2["default"])({}, channel.range, _objectSpread(_objectSpread({}, channelConfig), {}, {
1319
- colors: colors
1320
- })));
1321
- }
1322
- });
1323
- return this;
1324
- }
1325
- }, {
1326
- key: "calculateHexColumnLegend",
1327
- value: function calculateHexColumnLegend(datasets) {
1328
- var _this9 = this;
1329
- var dataset = this.getDataset(datasets);
1330
- if (!datasets) {
1331
- return;
1332
- }
1333
- var legendSettings = Object.keys(this.visualChannels).reduce(function (legends, channel) {
1334
- var _this9$visualChannels = _this9.visualChannels[channel],
1335
- range = _this9$visualChannels.range,
1336
- channelField = _this9$visualChannels.field;
1337
- var channelConfig = _this9.config.visConfig[range];
1338
- var field = _this9.config[channelField];
1339
- if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.type) === _colorRanges.hexColor && field !== null && field !== void 0 && field.colorColumn) {
1340
- var dataSetField = dataset.fields.find(function (f) {
1341
- return f.name === field.colorColumn;
1342
- });
1343
- var legend = dataset.calculateLegend(field, dataSetField);
1344
- legends[channel] = legend;
1345
- }
1346
- return legends;
1347
- }, {});
1348
- this.updateLayerLegend(legendSettings);
1349
- }
1350
- }, {
1351
- key: "hasHoveredObject",
1352
- value: function hasHoveredObject(objectInfo) {
1353
- return this.isLayerHovered(objectInfo) && objectInfo.object ? objectInfo.object : null;
1354
- }
1355
- }, {
1356
- key: "isLayerHovered",
1357
- value: function isLayerHovered(objectInfo) {
1358
- var _objectInfo$layer, _objectInfo$layer$pro;
1359
- return (objectInfo === null || objectInfo === void 0 ? void 0 : objectInfo.picked) && (objectInfo === null || objectInfo === void 0 ? void 0 : (_objectInfo$layer = objectInfo.layer) === null || _objectInfo$layer === void 0 ? void 0 : (_objectInfo$layer$pro = _objectInfo$layer.props) === null || _objectInfo$layer$pro === void 0 ? void 0 : _objectInfo$layer$pro.id) === this.id;
1360
- }
1361
- }, {
1362
- key: "getRadiusScaleByZoom",
1363
- value: function getRadiusScaleByZoom(mapState) {
1364
- var radiusChannel = Object.values(this.visualChannels).find(function (vc) {
1365
- return vc.property === 'radius';
1366
- });
1367
- if (!radiusChannel) {
1368
- return 1;
1369
- }
1370
- var field = radiusChannel.field;
1371
- var radius = this.config.visConfig.radius;
1372
-
1373
- // @ts-ignore
1374
- return (this.config[field] ? 1 : radius) * this.getZoomFactor(mapState);
1375
- }
1376
- }, {
1377
- key: "getRadiusScale",
1378
- value: function getRadiusScale() {
1379
- var radiusChannel = Object.values(this.visualChannels).find(function (vc) {
1380
- return vc.property === 'radius';
1381
- });
1382
- if (!radiusChannel || this.config[radiusChannel.field]) {
1383
- return 1;
1384
- }
1385
- return this.config.visConfig.radius;
1386
- }
1387
- }, {
1388
- key: "getMaxMarkerSize",
1389
- value: function getMaxMarkerSize() {
1390
- var _this$config5 = this.config,
1391
- radiusField = _this$config5.radiusField,
1392
- sizeField = _this$config5.sizeField,
1393
- visConfig = _this$config5.visConfig;
1394
- var radiusRange = visConfig.radiusRange,
1395
- radius = visConfig.radius;
1396
- var field = radiusField || sizeField;
1397
- return Math.ceil(field && radiusRange ? radiusRange[1] : radius);
1398
- }
1399
- }, {
1400
- key: "shouldCalculateLayerData",
1401
- value: function shouldCalculateLayerData(props) {
1402
- var _this10 = this;
1403
- return props.some(function (p) {
1404
- return !_this10.noneLayerDataAffectingProps.includes(p);
1405
- });
1406
- }
1407
- }, {
1408
- key: "getBrushingExtensionProps",
1409
- value: function getBrushingExtensionProps(interactionConfig, brushingTarget) {
1410
- var brush = interactionConfig.brush;
1411
- return {
1412
- // brushing
1413
- autoHighlight: !brush.enabled,
1414
- brushingRadius: brush.config.size * 1000,
1415
- brushingTarget: brushingTarget || 'source',
1416
- brushingEnabled: brush.enabled
1417
- };
1418
- }
1419
- }, {
1420
- key: "getDefaultDeckLayerProps",
1421
- value: function getDefaultDeckLayerProps(_ref12) {
1422
- var idx = _ref12.idx,
1423
- gpuFilter = _ref12.gpuFilter,
1424
- mapState = _ref12.mapState,
1425
- visible = _ref12.visible,
1426
- maskPolygon = _ref12.maskPolygon;
1427
- var maskExtensionProps = (0, _layerUtils.getMaskExtensionProps)(maskPolygon);
1428
- return _objectSpread(_objectSpread({}, maskExtensionProps), {}, {
1429
- id: this.id,
1430
- idx: idx,
1431
- coordinateSystem: _core.COORDINATE_SYSTEM.LNGLAT,
1432
- pickable: this.hasInteractivity,
1433
- wrapLongitude: true,
1434
- parameters: {
1435
- depthTest: Boolean(mapState.dragRotate || this.config.visConfig.enable3d)
1436
- },
1437
- hidden: this.config.hidden,
1438
- visibilityByZoom: this.config.visibilityByZoom,
1439
- // visconfig
1440
- opacity: this.config.visConfig.opacity,
1441
- highlightColor: this.config.highlightColor,
1442
- // data filtering
1443
- extensions: [dataFilterExtension].concat((0, _toConsumableArray2["default"])(maskExtensionProps.extensions)),
1444
- filterRange: gpuFilter ? gpuFilter.filterRange : undefined,
1445
- // layer should be visible and if splitMap, shown in to one of panel
1446
- visible: this.config.isVisible && visible
1447
- });
1448
- }
1449
- }, {
1450
- key: "getDefaultHoverLayerProps",
1451
- value: function getDefaultHoverLayerProps() {
1452
- return {
1453
- id: "".concat(this.id, "-hovered"),
1454
- pickable: false,
1455
- wrapLongitude: true,
1456
- coordinateSystem: _core.COORDINATE_SYSTEM.LNGLAT
1457
- };
1458
- }
1459
- }, {
1460
- key: "renderTextLabelLayer",
1461
- value: function renderTextLabelLayer(_ref13, renderOpts) {
1462
- var getPosition = _ref13.getPosition,
1463
- getRadius = _ref13.getRadius,
1464
- radiusScale = _ref13.radiusScale,
1465
- updateTriggers = _ref13.updateTriggers,
1466
- sharedProps = _ref13.sharedProps;
1467
- var data = renderOpts.data;
1468
- var _this$config6 = this.config,
1469
- textLabel = _this$config6.textLabel,
1470
- visibilityByZoom = _this$config6.visibilityByZoom;
1471
- var extensions = [].concat((0, _toConsumableArray2["default"])(sharedProps.extensions), [collisionFilterExtension]);
1472
- if (!data || !data.textLabels || !data.textLabels[0] || !data.textLabels[0].getText) {
1473
- return [];
1474
- }
1475
- var _textLabel = (0, _slicedToArray2["default"])(textLabel, 2),
1476
- mainLabel = _textLabel[0],
1477
- secondaryLabel = _textLabel[1];
1478
- var alignment = mainLabel.alignment,
1479
- anchor = mainLabel.anchor,
1480
- getColor = mainLabel.color,
1481
- mainField = mainLabel.field,
1482
- outlineColor = mainLabel.outlineColor,
1483
- sizeScale = mainLabel.size;
1484
- var _ref14 = secondaryLabel || {},
1485
- getSecondaryColor = _ref14.color,
1486
- secondaryField = _ref14.field,
1487
- secondaryOutlineColor = _ref14.outlineColor,
1488
- secondarySizeScale = _ref14.size;
1489
- return [new _carto._PointLabelLayer(_objectSpread(_objectSpread(_objectSpread({}, sharedProps), {}, {
1490
- // Recreate layer when labels change otherwise rendering breaks
1491
- // TODO could be more efficient with updateTriggers?
1492
- id: "".concat(this.id, "-").concat(mainField === null || mainField === void 0 ? void 0 : mainField.name, "-").concat(secondaryField === null || secondaryField === void 0 ? void 0 : secondaryField.name, "-label"),
1493
- data: data.data,
1494
- visibilityByZoom: visibilityByZoom,
1495
- extensions: extensions,
1496
- characterSet: 'auto',
1497
- collisionEnabled: true,
1498
- collisionGroup: "".concat(this.id, "-labels"),
1499
- getText: data.textLabels[0].getText,
1500
- getColor: getColor,
1501
- sizeScale: sizeScale,
1502
- outlineColor: outlineColor
1503
- }, secondaryField && {
1504
- getSecondaryText: data.textLabels[1].getText,
1505
- getSecondaryColor: getSecondaryColor,
1506
- secondarySizeScale: secondarySizeScale,
1507
- secondaryOutlineColor: secondaryOutlineColor
1508
- }), {}, {
1509
- // Position
1510
- getPosition: getPosition,
1511
- getRadius: getRadius,
1512
- radiusScale: radiusScale,
1513
- getTextAnchor: anchor,
1514
- getAlignmentBaseline: alignment,
1515
- // Style
1516
- fontFamily: 'Inter, sans',
1517
- fontSettings: {
1518
- sdf: true
1519
- },
1520
- fontWeight: 500,
1521
- outlineWidth: 4,
1522
- parameters: {
1523
- // text will always show on top of all layers
1524
- depthTest: false
1525
- },
1526
- getFilterValue: data.getFilterValue,
1527
- updateTriggers: _objectSpread(_objectSpread({}, updateTriggers), {}, {
1528
- getText: mainField === null || mainField === void 0 ? void 0 : mainField.name,
1529
- getColor: mainField === null || mainField === void 0 ? void 0 : mainField.color,
1530
- getTextAnchor: mainLabel.anchor,
1531
- getAlignmentBaseline: mainLabel.alignment,
1532
- getSecondaryText: secondaryField === null || secondaryField === void 0 ? void 0 : secondaryField.name
1533
- })
1534
- }))];
1535
- }
1536
-
1537
- /**
1538
- * Create deck.gl `IconLayer` "autoPack" mode accessor for custom markers.
1539
- *
1540
- * @param {*} iconUrlAccessor deck.gl accessor (or value) that resolves to URL of icon for given row
1541
- * @returns deck.gl accessor that returns UnpackedIcon ready to consume by IconLayer
1542
- */
1543
- }, {
1544
- key: "getCustomMarkerIconAccessor",
1545
- value: function getCustomMarkerIconAccessor(iconUrlAccessor) {
1546
- var mask = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1547
- var maxIconSize = this.getMaxMarkerSize();
1548
- return function (d) {
1549
- var wantedUrl = typeof iconUrlAccessor === 'function' ? iconUrlAccessor(d) : iconUrlAccessor;
1550
- var iconOk = Boolean(wantedUrl);
1551
- mask = iconOk ? mask : true;
1552
- var url = iconOk ? wantedUrl : FALLBACK_ICON;
1553
- return {
1554
- id: "".concat(url, "@@").concat(maxIconSize, "@").concat(mask ? 'm' : 'c'),
1555
- url: url,
1556
- width: maxIconSize,
1557
- height: maxIconSize,
1558
- mask: mask
1559
- };
1560
- };
1561
- }
1562
- }, {
1563
- key: "calculateDataAttribute",
1564
- value: function calculateDataAttribute(keplerTable, getPosition) {
1565
- // implemented in subclasses
1566
- return [];
1567
- }
1568
- }, {
1569
- key: "updateLayerMeta",
1570
- value: function updateLayerMeta(dataContainer, getPosition) {
1571
- // implemented in subclasses
1572
- }
1573
- }, {
1574
- key: "getPositionAccessor",
1575
- value: function getPositionAccessor(dataContainer) {
1576
- // implemented in subclasses
1577
- return function () {
1578
- return null;
1579
- };
1580
- }
1581
- }, {
1582
- key: "getHexColumn",
1583
- value: function getHexColumn(range) {
1584
- var _Object$values2, _Object$values2$find;
1585
- var field = (_Object$values2 = Object.values(this.visualChannels)) === null || _Object$values2 === void 0 ? void 0 : (_Object$values2$find = _Object$values2.find(function (value) {
1586
- return value.range === range;
1587
- })) === null || _Object$values2$find === void 0 ? void 0 : _Object$values2$find.field;
1588
- if (field) {
1589
- var _this$config$field2;
1590
- return (_this$config$field2 = this.config[field]) === null || _this$config$field2 === void 0 ? void 0 : _this$config$field2.colorColumn;
1591
- }
1592
- }
1593
- }, {
1594
- key: "isColoredByColorColumn",
1595
- value: function isColoredByColorColumn(range) {
1596
- var _this$config$visConfi;
1597
- return (_this$config$visConfi = this.config.visConfig[range]) === null || _this$config$visConfi === void 0 ? void 0 : _this$config$visConfi.hexColor;
1598
- }
1599
- }], [{
1600
- key: "findDefaultLayerProps",
1601
- value: function findDefaultLayerProps(dataset, foundLayers) {
1602
- return {
1603
- props: [],
1604
- foundLayers: foundLayers
1605
- };
1606
- }
1607
-
1608
- /**
1609
- * Given a array of preset required column names
1610
- * found field that has the same name to set as layer column
1611
- *
1612
- * @param {object} defaultFields
1613
- * @param {object[]} allFields
1614
- * @returns {object[] | null} all possible required layer column pairs
1615
- */
1616
- }, {
1617
- key: "findDefaultColumnField",
1618
- value: function findDefaultColumnField(defaultFields, allFields) {
1619
- // find all matched fields for each required col
1620
- var requiredColumns = Object.keys(defaultFields).reduce(function (prev, key) {
1621
- var requiredFields = allFields.filter(function (f) {
1622
- return f.name === defaultFields[key] || defaultFields[key].includes(f.name);
1623
- });
1624
- prev[key] = requiredFields.length ? requiredFields.map(function (f) {
1625
- return {
1626
- value: f.name,
1627
- fieldIdx: f.fieldIdx
1628
- };
1629
- }) : null;
1630
- return prev;
1631
- }, {});
1632
- if (!Object.values(requiredColumns).every(Boolean)) {
1633
- // if any field missing, return null
1634
- return null;
1635
- }
1636
- return this.getAllPossibleColumnParis(requiredColumns);
1637
- }
1638
- }, {
1639
- key: "getAllPossibleColumnParis",
1640
- value: function getAllPossibleColumnParis(requiredColumns) {
1641
- // for multiple matched field for one required column, return multiple
1642
- // combinations, e. g. if column a has 2 matched, column b has 3 matched
1643
- // 6 possible column pairs will be returned
1644
- var allKeys = Object.keys(requiredColumns);
1645
- var pointers = allKeys.map(function (k, i) {
1646
- return i === allKeys.length - 1 ? -1 : 0;
1647
- });
1648
- var countPerKey = allKeys.map(function (k) {
1649
- return requiredColumns[k].length;
1650
- });
1651
- var pairs = [];
1652
-
1653
- /* eslint-disable no-loop-func */
1654
- while (incrementPointers(pointers, countPerKey, pointers.length - 1)) {
1655
- var newPair = pointers.reduce(function (prev, cuur, i) {
1656
- prev[allKeys[i]] = requiredColumns[allKeys[i]][cuur];
1657
- return prev;
1658
- }, {});
1659
- pairs.push(newPair);
1660
- }
1661
- /* eslint-enable no-loop-func */
1662
-
1663
- // recursively increment pointers
1664
- function incrementPointers(pts, counts, index) {
1665
- if (index === 0 && pts[0] === counts[0] - 1) {
1666
- // nothing to increment
1667
- return false;
1668
- }
1669
- if (pts[index] + 1 < counts[index]) {
1670
- pts[index] = pts[index] + 1;
1671
- return true;
1672
- }
1673
- pts[index] = 0;
1674
- return incrementPointers(pts, counts, index - 1);
1675
- }
1676
- return pairs;
1677
- }
1678
- }, {
1679
- key: "hexToRgb",
1680
- value: function hexToRgb(c) {
1681
- return (0, _colorUtils.hexToRgb)(c);
1682
- }
1683
- }]);
1684
- return Layer;
1685
- }();
1686
- var _default = exports["default"] = Layer;
1687
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsIl9rZXltaXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2V4dGVuc2lvbnMiLCJfY29yZSIsIl9jYXJ0byIsIl9kZWZhdWx0TGF5ZXJJY29uIiwiX2xheWVyVXBkYXRlIiwiX2QzQ29sb3IiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2NvbG9yUmFuZ2VzIiwiX2N1c3RvbUNvbG9yUmFuZ2VzIiwiX2xheWVyRmFjdG9yeSIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfZGF0YUNvbnRhaW5lclV0aWxzIiwiX2NvbG9yVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9kM1NjYWxlIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiaSIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJfZSIsImYiLCJUeXBlRXJyb3IiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwiY2FsbCIsInN0ZXAiLCJuZXh0IiwiX2UyIiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJhcnIiLCJsZW4iLCJhcnIyIiwib3duS2V5cyIsInIiLCJ0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX21hcmtlZCIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiZXhwb3J0cyIsIkZBTExCQUNLX0lDT04iLCJNQVhfU0FNUExFX1NJWkUiLCJkZWZhdWx0RG9tYWluIiwiZGF0YUZpbHRlckV4dGVuc2lvbiIsIkRhdGFGaWx0ZXJFeHRlbnNpb24iLCJmaWx0ZXJTaXplIiwiTUFYX0dQVV9GSUxURVJTIiwiY29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uIiwiQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uIiwiZGVmYXVsdERhdGFBY2Nlc3NvciIsImRjIiwiZCIsImRlZmF1bHRHZXRGaWVsZFZhbHVlIiwiZmllbGQiLCJ2YWx1ZUFjY2Vzc29yIiwic2NhbGVJZGVudGl0eSIsInYiLCJPVkVSTEFZX1RZUEUiLCJrZXltaXJyb3IiLCJkZWNrZ2wiLCJtYXBib3hnbCIsImxheWVyQ29sb3JzIiwidmFsdWVzIiwiRGF0YVZpekNvbG9ycyIsIm1hcCIsImhleFRvUmdiIiwiaW5kZXgiLCJ3cmFwIiwiZ2VuZXJhdGVDb2xvciQiLCJfY29udGV4dCIsInByZXYiLCJzdG9wIiwiY29sb3JNYWtlciIsIkxheWVyIiwicHJvcHMiLCJ1bmRlZmluZWQiLCJfY2xhc3NDYWxsQ2hlY2syIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsIm1ldGEiLCJsZWdlbmRTZXR0aW5ncyIsInZpc0NvbmZpZ1NldHRpbmdzIiwiX2ludGVyYWN0aXZpdHlTZXR0aW5ncyIsImNvbmZpZyIsImdldERlZmF1bHRMYXllckNvbmZpZyIsImNvbHVtbnMiLCJnZXRMYXllckNvbHVtbnMiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiZ2V0IiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwic2V0IiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiX3RoaXMkaW50ZXJhY3Rpdml0eVNlIiwiX3RoaXMkaW50ZXJhY3Rpdml0eVNlMiIsIl90aGlzJGludGVyYWN0aXZpdHlTZTMiLCJfdGhpcyRpbnRlcmFjdGl2aXR5U2U0IiwiQm9vbGVhbiIsImhvdmVyIiwiZmllbGRzIiwiY2xpY2siLCJfdGhpcyRpbnRlcmFjdGl2aXR5U2U1IiwiaGFzVG9vbHRpcCIsImVuYWJsZWQiLCJfcHJvcHMkdmlzaWJpbGl0eUJ5Wm8iLCJfcHJvcHMkdmlzaWJpbGl0eUJ5Wm8yIiwiZGF0YUlkIiwidmlzaWJpbGl0eUJ5Wm9vbSIsIm1pbiIsIlpPT01fTEVWRUxfTElNSVRTIiwibWF4IiwibGFiZWwiLCJERUZBVUxUX0xBWUVSX0xBQkVMIiwiaXNWaXNpYmxlIiwiaXNDb25maWdBY3RpdmUiLCJoaWdobGlnaHRDb2xvciIsIkRFRkFVTFRfSElHSExJR0hUX0NPTE9SIiwiaGlkZGVuIiwiY29sb3JGaWVsZCIsImNvbG9yRG9tYWluIiwiY29sb3JTY2FsZSIsIlNDQUxFX1RZUEVTIiwicXVhbnRpbGUiLCJzaXplRG9tYWluIiwic2l6ZVNjYWxlIiwibGluZWFyIiwic2l6ZUZpZWxkIiwicmFkaXVzRmllbGQiLCJ2aXNDb25maWciLCJ0ZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsImNvbG9yUmFuZ2UiLCJhbmltYXRpb24iLCJnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24iLCJ2aXN1YWxDaGFubmVscyIsIm1lYXN1cmUiLCJkaXNwbGF5TmFtZSIsImRlZmF1bHRNZWFzdXJlIiwiYXNzaWduQ29sdW1uIiwidXBkYXRlIiwiZmllbGRJZHgiLCJhc3NpZ25Db2x1bW5QYWlycyIsIl90aGlzJGNvbHVtblBhaXJzIiwiX3RoaXMkY29sdW1uUGFpcnMyIiwiX3RoaXMkY29sdW1uUGFpcnMzIiwiY29sdW1uUGFpcnMiLCJfdGhpcyRjb2x1bW5QYWlycyRrZXkiLCJwYXJ0bmVyS2V5IiwiX3RoaXMkY29sdW1uUGFpcnMkcGFyIiwicGFydG5lckZpZWxkUGFpcktleSIsImdldFpvb21GYWN0b3IiLCJfcmVmIiwiem9vbSIsIl9yZWYkem9vbU9mZnNldCIsInpvb21PZmZzZXQiLCJNYXRoIiwicG93IiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsIl9yZWYyIiwiX3JlZjIkem9vbU9mZnNldCIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsImZpbHRlcmVkSW5kZXgiLCJyZW5kZXJMYXllciIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJhc3NpZ25Db25maWdUb0xheWVyIiwiY29uZmlnVG9Db3B5IiwiX3RoaXMiLCJzaGFsbG93Q29weSIsImNvbmNhdCIsIm5vdFRvQ29weSIsImdyb3VwIiwiY3VycmVudENvbmZpZyIsImNvcGllZCIsImNvcHlMYXllckNvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY2hhbm5lbCIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsIl90aGlzMiIsIl9yZWYzIiwiX3JlZjMkc2hhbGxvd0NvcHkiLCJfcmVmMyRub3RUb0NvcHkiLCJpc1BsYWluT2JqZWN0IiwiaW5jbHVkZXMiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJyZWdpc3RlclZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlncyIsIl90aGlzMyIsIml0ZW0iLCJMQVlFUl9WSVNfQ09ORklHUyIsImV2ZXJ5IiwicCIsImhhc093blByb3BlcnR5IiwiY29sdW1uVmFsaWRhdG9ycyIsInJlcXVpcmVkIiwicmVxdWlyZWRMYXllckNvbHVtbnMiLCJyZWR1Y2UiLCJhY2N1IiwidmFsaWRhdG9yIiwib3B0aW9uYWwiLCJvcHRpb25hbENvbHVtbnMiLCJuZXdDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInByb3AiLCJfdGhpcyRjb25maWciLCJwcmV2aW91cyIsImNvbG9yVUlQcm9wIiwiZW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJpc0NvbG9yUmFuZ2UiLCJjb2xvcnMiLCJoZXhDb2xvciIsInVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UiLCJ1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJIiwidXBkYXRlQ3VzdG9tUGFsZXR0ZSIsImNvbG9yUmFuZ2VDb25maWciLCJjdXN0b20iLCJfdGhpcyRjb25maWcyIiwiY3VzdG9tUGFsZXR0ZSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJfdmlzQ29uZmlnJHByb3AkY29sb3IiLCJzaG93RHJvcGRvd24iLCJfdGhpcyRjb25maWczIiwic3RlcHMiLCJyZXZlcnNlZCIsImhleENvbHVtbiIsImdldEhleENvbHVtbiIsImlzSGV4Q29sdW1uIiwiaXNDb2xvcmVkQnlDb2xvckNvbHVtbiIsInNob3VsZFVwZGF0ZSIsInNvbWUiLCJfdGhpcyRjb25maWc0IiwiX2NvbG9yVUkkcHJvcCRjb2xvclJhIiwiZ2V0Q29sb3JHcm91cEJ5TmFtZSIsInNhbWVHcm91cCIsIkNPTE9SX1JBTkdFUyIsImNyIiwiZmluZCIsInJldmVyc2VDb2xvclJhbmdlIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsIl90aGlzJGNvbmZpZyRmaWVsZCIsIl9PYmplY3QkdmFsdWVzJGZpbmQiLCJ1cGRhdGVDYXRlZ29yeUNvbG9yTWFwIiwidXBkYXRlTnVtZXJpY0NvbG9yTWFwIiwiYXNzaWduZWRDYXRlZ29yaWVzIiwibmV3Q29sb3JNYXAiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2F0ZWdvcnkiLCJjb2xvck1hcFZhbHVlcyIsImMiLCJtYXhWYWx1ZSIsInByZXZWYWx1ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiZGF0YSIsImlzVmFsaWRUb1NhdmUiLCJzaG91bGRSZW5kZXJMYXllciIsImdldENvbG9yU2NhbGUiLCJfIiwiX3JnYiIsInJnYiIsImciLCJiIiwiaXNOYU4iLCJVTktOT1dOX0NPTE9SIiwiTWFwIiwiX3JlZjYiLCJfcmVmNyIsImsiLCJTQ0FMRV9GVU5DIiwidW5rbm93biIsImdldFZpc0NoYW5uZWxTY2FsZSIsImdldEN1c3RvbU1hcmtlcnNTY2FsZSIsImZhbGxiYWNrSWNvbiIsInVua25vd25WYWx1ZSIsIm1hcHBpbmciLCJvdGhlcnNNYXJrZXIiLCJfaXRlcmF0b3IzIiwibWFya2VyTWFwIiwiX3N0ZXAzIiwiX3N0ZXAzJHZhbHVlIiwibWFya2VyVXJsIiwic2NhbGVPcmRpbmFsIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiX3JlZjgiLCJfdGhpczQiLCJfcmVmOCRkYXRhQWNjZXNzb3IiLCJkYXRhQWNjZXNzb3IiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJfdGhpczQkdmlzdWFsQ2hhbm5lbHMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJhZ2dyZWdhdGlvbiIsInNob3VsZEdldFNjYWxlIiwiaWRlbnRpdHkiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJjdXN0b21NYXJrZXIiLCJjdXN0b21NYXJrZXJzVXJsIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsIl9hZ2dyZWdhdGlvbiIsIkNvbnNvbGUiLCJ3YXJuIiwib3JkaW5hbCIsImRvbWFpbklzSW5maW5pdGUiLCJJbmZpbml0eSIsInNjYWxlRmFjdG9yeSIsInJlc3VsdCIsImdldFBvaW50c0JvdW5kcyIsImdldFBvc2l0aW9uIiwic2FtcGxlRGF0YSIsIm51bVJvd3MiLCJnZXRTYW1wbGVEYXRhIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJnZXRMYXRMbmdCb3VuZHMiLCJsbmdCb3VuZHMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsImRpZmZVcGRhdGVUcmlnZ2VycyIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJfcmVmOSIsIl9yZWY5JG51bGxWYWx1ZSIsIl9yZWY5JGdldFZhbHVlIiwiZ2V0VmFsdWUiLCJjb2xvckNvbHVtblZhbHVlIiwiY2hhbm5lbENvbmZpZyIsImNoYW5uZWxGaWVsZCIsImNvbHVtbkZpZWxkIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbklkeCIsInZhbHVlQXQiLCJhdHRyaWJ1dGVWYWx1ZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsIkRhdGUiLCJ1cGRhdGVNZXRhIiwidXBkYXRlTGF5ZXJMZWdlbmQiLCJzZXR0aW5ncyIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsIl9yZWYxMCIsImFsbERhdGEiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwidXBkYXRlRGF0YSIsIm9sZExheWVyRGF0YSIsImRhdGFzZXQiLCJnZXREYXRhc2V0IiwidXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyIsInVwZGF0ZUhleENvbG9yRG9tYWluIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsInVwZGF0ZUxheWVyTWV0YSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfdGhpczUiLCJfbG9vcCIsIl90aGlzNSRjb25maWckdmlzQ29uZiIsIl9PYmplY3QkdmFsdWVzJF9pIiwiX09iamVjdCR2YWx1ZXMiLCJfaSIsIm9sZEZpZWxkIiwiaXNVc2luZ0hleENvbG9yQ29kZSIsIm5ld0RhdGFTZXRGaWVsZCIsImZkIiwiX3JldCIsInVwZGF0ZUxheWVyRG9tYWluIiwibmV3RmlsdGVyIiwiX3RoaXM2IiwidGFibGUiLCJzY2FsZVR5cGUiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsIl90aGlzNyIsInVwZGF0ZVRyaWdnZXJzIiwiZGF0YVNldEZpZWxkIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJfdGhpczgiLCJjaGVja0NvbG9yT3JGYWxsYmFjayIsImNhbGN1bGF0ZUhleENvbHVtbkxlZ2VuZCIsIl90aGlzOSIsImxlZ2VuZHMiLCJfdGhpczkkdmlzdWFsQ2hhbm5lbHMiLCJsZWdlbmQiLCJjYWxjdWxhdGVMZWdlbmQiLCJoYXNIb3ZlcmVkT2JqZWN0Iiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkIiwiX29iamVjdEluZm8kbGF5ZXIiLCJfb2JqZWN0SW5mbyRsYXllciRwcm8iLCJwaWNrZWQiLCJsYXllciIsImdldFJhZGl1c1NjYWxlQnlab29tIiwibWFwU3RhdGUiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJyYWRpdXMiLCJnZXRSYWRpdXNTY2FsZSIsImdldE1heE1hcmtlclNpemUiLCJfdGhpcyRjb25maWc1IiwicmFkaXVzUmFuZ2UiLCJjZWlsIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwiX3RoaXMxMCIsIm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyIsImdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImJydXNoaW5nVGFyZ2V0IiwiYnJ1c2giLCJhdXRvSGlnaGxpZ2h0IiwiYnJ1c2hpbmdSYWRpdXMiLCJicnVzaGluZ0VuYWJsZWQiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJfcmVmMTIiLCJpZHgiLCJncHVGaWx0ZXIiLCJ2aXNpYmxlIiwibWFza1BvbHlnb24iLCJtYXNrRXh0ZW5zaW9uUHJvcHMiLCJnZXRNYXNrRXh0ZW5zaW9uUHJvcHMiLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJMTkdMQVQiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwicmVuZGVyVGV4dExhYmVsTGF5ZXIiLCJfcmVmMTMiLCJyZW5kZXJPcHRzIiwiZ2V0UmFkaXVzIiwicmFkaXVzU2NhbGUiLCJzaGFyZWRQcm9wcyIsIl90aGlzJGNvbmZpZzYiLCJ0ZXh0TGFiZWxzIiwiZ2V0VGV4dCIsIl90ZXh0TGFiZWwiLCJtYWluTGFiZWwiLCJzZWNvbmRhcnlMYWJlbCIsImFsaWdubWVudCIsImFuY2hvciIsImdldENvbG9yIiwibWFpbkZpZWxkIiwib3V0bGluZUNvbG9yIiwiX3JlZjE0IiwiZ2V0U2Vjb25kYXJ5Q29sb3IiLCJzZWNvbmRhcnlGaWVsZCIsInNlY29uZGFyeU91dGxpbmVDb2xvciIsInNlY29uZGFyeVNpemVTY2FsZSIsIlBvaW50TGFiZWxMYXllciIsImNoYXJhY3RlclNldCIsImNvbGxpc2lvbkVuYWJsZWQiLCJjb2xsaXNpb25Hcm91cCIsImdldFNlY29uZGFyeVRleHQiLCJnZXRUZXh0QW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJmb250RmFtaWx5IiwiZm9udFNldHRpbmdzIiwic2RmIiwiZm9udFdlaWdodCIsIm91dGxpbmVXaWR0aCIsImdldEZpbHRlclZhbHVlIiwiZ2V0Q3VzdG9tTWFya2VySWNvbkFjY2Vzc29yIiwiaWNvblVybEFjY2Vzc29yIiwibWFzayIsIm1heEljb25TaXplIiwid2FudGVkVXJsIiwiaWNvbk9rIiwidXJsIiwid2lkdGgiLCJoZWlnaHQiLCJrZXBsZXJUYWJsZSIsIl9PYmplY3QkdmFsdWVzMiIsIl9PYmplY3QkdmFsdWVzMiRmaW5kIiwiX3RoaXMkY29uZmlnJGZpZWxkMiIsIl90aGlzJGNvbmZpZyR2aXNDb25maSIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRDb2x1bW5GaWVsZCIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZENvbHVtbnMiLCJyZXF1aXJlZEZpZWxkcyIsImdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMiLCJhbGxLZXlzIiwicG9pbnRlcnMiLCJjb3VudFBlcktleSIsInBhaXJzIiwiaW5jcmVtZW50UG9pbnRlcnMiLCJuZXdQYWlyIiwiY3V1ciIsInB0cyIsImNvdW50cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVycy9iYXNlLWxheWVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBrZXltaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCB7Q29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uLCBEYXRhRmlsdGVyRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU0sIExheWVyIGFzIERlY2tMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge19Qb2ludExhYmVsTGF5ZXIgYXMgUG9pbnRMYWJlbExheWVyfSBmcm9tICdAZGVjay5nbC9jYXJ0byc7XG5pbXBvcnQgRGVmYXVsdExheWVySWNvbiBmcm9tICcuL2RlZmF1bHQtbGF5ZXItaWNvbic7XG5pbXBvcnQge2RpZmZVcGRhdGVUcmlnZ2Vyc30gZnJvbSAnLi9sYXllci11cGRhdGUnO1xuaW1wb3J0IHtyZ2J9IGZyb20gJ2QzLWNvbG9yJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVMsIGhleENvbG9yfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7RGF0YVZpekNvbG9yc30gZnJvbSAnY29uc3RhbnRzL2N1c3RvbS1jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUxcbn0gZnJvbSAnLi9sYXllci1mYWN0b3J5JztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgaXNQbGFpbk9iamVjdH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2dldExhdExuZ0JvdW5kcywgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0U2FtcGxlRGF0YX0gZnJvbSAndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItdXRpbHMnO1xuXG5pbXBvcnQge2hleFRvUmdiLCBnZXRDb2xvckdyb3VwQnlOYW1lLCByZXZlcnNlQ29sb3JSYW5nZSwgY2hlY2tDb2xvck9yRmFsbGJhY2t9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7Z2V0TWFza0V4dGVuc2lvblByb3BzfSBmcm9tICd1dGlscy9sYXllci11dGlscyc7XG5pbXBvcnQge3NjYWxlT3JkaW5hbH0gZnJvbSAnZDMtc2NhbGUnO1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLkxheWVyfSBMYXllckNsYXNzfSAqL1xuXG4vKipcbiAqIEFwcHJveC4gbnVtYmVyIG9mIHBvaW50cyB0byBzYW1wbGUgaW4gYSBsYXJnZSBkYXRhIHNldFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX0lEX0xFTkdUSCA9IDY7XG5cbi8vIE5vdGUsIHRoaXMgaXMgaXMgU1ZHIG9mIHNvbGlkIGNpcmNsZSBlbmNvZGVkIGFzIGRhdGEtdXJpXG5jb25zdCBGQUxMQkFDS19JQ09OID1cbiAgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxQSE4yWnlCMmFXVjNRbTk0UFNJd0lEQWdNVEF3SURFd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNE5DaUFnUEdOcGNtTnNaU0JqZUQwaU5UQWlJR041UFNJMU1DSWdjajBpTlRBaUx6NE5Dand2YzNablBnPT0nO1xuXG5jb25zdCBNQVhfU0FNUExFX1NJWkUgPSA1MDAwO1xuY29uc3QgZGVmYXVsdERvbWFpbiA9IFswLCAxXTtcbmNvbnN0IGRhdGFGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRGF0YUZpbHRlckV4dGVuc2lvbih7ZmlsdGVyU2l6ZTogTUFYX0dQVV9GSUxURVJTfSk7XG5jb25zdCBjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24gPSBuZXcgQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uKCk7XG5cbmNvbnN0IGRlZmF1bHREYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+IGQ7XG5jb25zdCBkZWZhdWx0R2V0RmllbGRWYWx1ZSA9IChmaWVsZCwgZCkgPT4gZmllbGQudmFsdWVBY2Nlc3NvcihkKTtcbmNvbnN0IHNjYWxlSWRlbnRpdHkgPSB2ID0+IHY7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEUgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKSB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqIEB0eXBlIHtMYXllckNsYXNzfSAqL1xuY2xhc3MgTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IHByb3BzLmlkIHx8IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gbGVnZW5kU2V0dGluZ3NcbiAgICB0aGlzLmxlZ2VuZFNldHRpbmdzID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIGludGVyYWN0aXZpdHlTZXR0aW5nc1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IHt9O1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoe1xuICAgICAgY29sdW1uczogdGhpcy5nZXRMYXllckNvbHVtbnMoKSxcbiAgICAgIC4uLnByb3BzXG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBEZWZhdWx0TGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IG92ZXJsYXlUeXBlKCkge1xuICAgIHJldHVybiBPVkVSTEFZX1RZUEUuZGVja2dsO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlzQWdncmVnYXRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2NvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnY29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgbnVsbFZhbHVlOiBOT19WQUxVRV9DT0xPUixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBwcm9wZXJ0eTogJ3NpemUnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBwb2ludCBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBwb2ludCBiYXNlZCBsYXllcnM6IHBvaW50LCBpY29uIGV0Yy5cbiAgICovXG4gIGdldCBkZWZhdWx0UG9pbnRDb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogJ2xuZycsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogJ2xhdCcsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgbGluayBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBsaW5rIGJhc2VkIGxheWVyczogYXJjLCBsaW5lIGV0Y1xuICAgKi9cbiAgZ2V0IGRlZmF1bHRMaW5rQ29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBsYXQxOiB7cGFpcjogJ2xuZzEnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzE6IHtwYWlyOiAnbGF0MScsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICBzZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKGludGVyYWN0aXZpdHlTZXR0aW5ncykge1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IGludGVyYWN0aXZpdHlTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBoYXNUb29sdGlwKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmhvdmVyPy5maWVsZHMubGVuZ3RoIHx8XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5jbGljaz8uZmllbGRzLmxlbmd0aFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzSW50ZXJhY3Rpdml0eSgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmhhc1Rvb2x0aXAgJiYgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmVuYWJsZWQpO1xuICB9XG5cbiAgLypcbiAgICogR2l2ZW4gYSBkYXRhc2V0LCBhdXRvbWF0aWNhbGx5IGZpbmQgcHJvcHMgdG8gY3JlYXRlIGxheWVyIGJhc2VkIG9uIGl0XG4gICAqIGFuZCByZXR1cm4gdGhlIHByb3BzIGFuZCBwcmV2aW91cyBmb3VuZCBsYXllcnMuXG4gICAqIEJ5IGRlZmF1bHQsIG5vIGxheWVycyB3aWxsIGJlIGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIGZvdW5kTGF5ZXJzKSB7XG4gICAgcmV0dXJuIHtwcm9wczogW10sIGZvdW5kTGF5ZXJzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGFycmF5IG9mIHByZXNldCByZXF1aXJlZCBjb2x1bW4gbmFtZXNcbiAgICogZm91bmQgZmllbGQgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSB0byBzZXQgYXMgbGF5ZXIgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmllbGRzXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFsbEZpZWxkc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0W10gfCBudWxsfSBhbGwgcG9zc2libGUgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHBhaXJzXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0RmllbGRzLCBhbGxGaWVsZHMpIHtcbiAgICAvLyBmaW5kIGFsbCBtYXRjaGVkIGZpZWxkcyBmb3IgZWFjaCByZXF1aXJlZCBjb2xcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRzKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBhbGxGaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+IGYubmFtZSA9PT0gZGVmYXVsdEZpZWxkc1trZXldIHx8IGRlZmF1bHRGaWVsZHNba2V5XS5pbmNsdWRlcyhmLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBwcmV2W2tleV0gPSByZXF1aXJlZEZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyByZXF1aXJlZEZpZWxkcy5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGYubmFtZSxcbiAgICAgICAgICAgIGZpZWxkSWR4OiBmLmZpZWxkSWR4XG4gICAgICAgICAgfSkpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhyZXF1aXJlZENvbHVtbnMpLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAvLyBpZiBhbnkgZmllbGQgbWlzc2luZywgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucykge1xuICAgIC8vIGZvciBtdWx0aXBsZSBtYXRjaGVkIGZpZWxkIGZvciBvbmUgcmVxdWlyZWQgY29sdW1uLCByZXR1cm4gbXVsdGlwbGVcbiAgICAvLyBjb21iaW5hdGlvbnMsIGUuIGcuIGlmIGNvbHVtbiBhIGhhcyAyIG1hdGNoZWQsIGNvbHVtbiBiIGhhcyAzIG1hdGNoZWRcbiAgICAvLyA2IHBvc3NpYmxlIGNvbHVtbiBwYWlycyB3aWxsIGJlIHJldHVybmVkXG4gICAgY29uc3QgYWxsS2V5cyA9IE9iamVjdC5rZXlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gICAgY29uc3QgcG9pbnRlcnMgPSBhbGxLZXlzLm1hcCgoaywgaSkgPT4gKChpID09PSBhbGxLZXlzLmxlbmd0aCAtIDEgPyAtMSA6IDApKSk7XG4gICAgY29uc3QgY291bnRQZXJLZXkgPSBhbGxLZXlzLm1hcChrID0+IHJlcXVpcmVkQ29sdW1uc1trXS5sZW5ndGgpO1xuICAgIGNvbnN0IHBhaXJzID0gW107XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB3aGlsZSAoaW5jcmVtZW50UG9pbnRlcnMocG9pbnRlcnMsIGNvdW50UGVyS2V5LCBwb2ludGVycy5sZW5ndGggLSAxKSkge1xuICAgICAgY29uc3QgbmV3UGFpciA9IHBvaW50ZXJzLnJlZHVjZSgocHJldiwgY3V1ciwgaSkgPT4ge1xuICAgICAgICBwcmV2W2FsbEtleXNbaV1dID0gcmVxdWlyZWRDb2x1bW5zW2FsbEtleXNbaV1dW2N1dXJdO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcGFpcnMucHVzaChuZXdQYWlyKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IGluY3JlbWVudCBwb2ludGVyc1xuICAgIGZ1bmN0aW9uIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwICYmIHB0c1swXSA9PT0gY291bnRzWzBdIC0gMSkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGluY3JlbWVudFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwdHNbaW5kZXhdICsgMSA8IGNvdW50c1tpbmRleF0pIHtcbiAgICAgICAgcHRzW2luZGV4XSA9IHB0c1tpbmRleF0gKyAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHRzW2luZGV4XSA9IDA7XG4gICAgICByZXR1cm4gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhaXJzO1xuICB9XG5cbiAgc3RhdGljIGhleFRvUmdiKGMpIHtcbiAgICByZXR1cm4gaGV4VG9SZ2IoYyk7XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhSWQ6IHByb3BzLmRhdGFJZCB8fCBudWxsLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbiB8fCBaT09NX0xFVkVMX0xJTUlUUy5taW4sXG4gICAgICAgIG1heDogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4IHx8IFpPT01fTEVWRUxfTElNSVRTLm1heFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCB8fCBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yIHx8IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlLFxuICAgICAgY29sdW1uczogcHJvcHMuY29sdW1ucyB8fCBudWxsLFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgfHwgZmFsc2UsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogcHJvcHMuaXNDb25maWdBY3RpdmUgfHwgZmFsc2UsXG4gICAgICBoaWdobGlnaHRDb2xvcjogcHJvcHMuaGlnaGxpZ2h0Q29sb3IgfHwgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gICAgICBoaWRkZW46IHByb3BzLmhpZGRlbiB8fCBmYWxzZSxcblxuICAgICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBpbnRvIHNlcGFyYXRlIHZpc3VhbCBDaGFubmVsIGNvbmZpZ1xuICAgICAgLy8gY29sb3IgYnkgZmllbGQsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIGNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBjb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgY29sb3JTY2FsZTogU0NBTEVfVFlQRVMucXVhbnRpbGUsXG5cbiAgICAgIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIHNpemVEb21haW46IFswLCAxXSxcbiAgICAgIHNpemVTY2FsZTogU0NBTEVfVFlQRVMubGluZWFyLFxuICAgICAgc2l6ZUZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSB2aXN1YWxDaGFubmVsIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zIHt7bGFiZWw6IHN0cmluZywgbWVhc3VyZTogKHN0cmluZ3xzdHJpbmcpfX1cbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXkpIHtcbiAgICAvLyBlLmcuIGxhYmVsOiBDb2xvciwgbWVhc3VyZTogVmVoaWNsZSBUeXBlXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZV0ubGFiZWwsXG4gICAgICBtZWFzdXJlOiB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgID8gKHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0uZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLm5hbWUpXG4gICAgICAgIDogdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCB0byBsYXllciBjb2x1bW4sIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBmaWVsZCAtIFNlbGVjdGVkIGZpZWxkXG4gICAqIEByZXR1cm5zIHt7fX0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW4oa2V5LCBmaWVsZCkge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgcGFpciB0byBjb2x1bW4gY29uZmlnLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gcGFpciAtIGZpZWxkIFBhaXJcbiAgICogQHJldHVybnMge29iamVjdH0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXksIHBhaXIpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG5cbiAgICBjb25zdCB7cGFpcjogcGFydG5lcktleSwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldO1xuICAgIGNvbnN0IHtmaWVsZFBhaXJLZXk6IHBhcnRuZXJGaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XTogcGFpcltmaWVsZFBhaXJLZXldLFxuICAgICAgW3BhcnRuZXJLZXldOiBwYWlyW3BhcnRuZXJGaWVsZFBhaXJLZXldXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSByYWRpdXMgem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Wm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgubWF4KDE0IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBlbGV2YXRpb24gem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RWxldmF0aW9uWm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yXG4gICAgICA/IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpXG4gICAgICA6IDE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIGZpbHRlcmVkSW5kZXgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZW5kZXJMYXllcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBjaGFuZ2UgbGF5ZXIgdHlwZSwgdHJ5IHRvIGNvcHkgb3ZlciBsYXllciBjb25maWdzIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICogQHBhcmFtIGNvbmZpZ1RvQ29weSAtIGNvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHZpc0NvbmZpZ1NldHRpbmdzIC0gdmlzQ29uZmlnIHNldHRpbmdzIG9mIGNvbmZpZyB0byBjb3B5XG4gICAqL1xuICBhc3NpZ25Db25maWdUb0xheWVyKGNvbmZpZ1RvQ29weSwgdmlzQ29uZmlnU2V0dGluZ3MpIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtzaGFsbG93Q29weSA9IFtdLCBub3RUb0NvcHkgPSBbXX0gPSB7fSkge1xuICAgIGNvbnN0IGNvcGllZCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChjdXJyZW50Q29uZmlnW2tleV0pICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY29uZmlnVG9Db3B5W2tleV0pICYmXG4gICAgICAgICFzaGFsbG93Q29weS5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnW2tleV0sIGNvbmZpZ1RvQ29weVtrZXldLCB7XG4gICAgICAgICAgc2hhbGxvd0NvcHksXG4gICAgICAgICAgbm90VG9Db3B5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoY29uZmlnVG9Db3B5W2tleV0pICYmICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBjb3B5XG4gICAgICAgIGNvcGllZFtrZXldID0gY29uZmlnVG9Db3B5W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBrZWVwIGV4aXN0aW5nXG4gICAgICAgIGNvcGllZFtrZXldID0gY3VycmVudENvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuXG4gIHJlZ2lzdGVyVmlzQ29uZmlnKGxheWVyVmlzQ29uZmlncykge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXSkge1xuICAgICAgICAvLyBpZiBhc3NpZ25lZCBvbmUgb2YgZGVmYXVsdCBMQVlFUl9DT05GSUdTXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXTtcbiAgICAgIH0gZWxzZSBpZiAoWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmhhc093blByb3BlcnR5KHApKSkge1xuICAgICAgICAvLyBpZiBwcm92aWRlZCBjdXN0b21pemVkIHZpc0NvbmZpZywgYW5kIGhhcyB0eXBlICYmIGRlZmF1bHRWYWx1ZVxuICAgICAgICAvLyBUT0RPOiBmdXJ0aGVyIGNoZWNrIGlmIGN1c3RvbWl6ZWQgdmlzQ29uZmlnIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXllckNvbHVtbnMoKSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldfVxuICAgICAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25hbCA9IHRoaXMub3B0aW9uYWxDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgb3B0aW9uYWw6IHRydWV9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7Li4ucmVxdWlyZWQsIC4uLm9wdGlvbmFsfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcudmlzQ29uZmlnID0gey4uLnRoaXMuY29uZmlnLnZpc0NvbmZpZywgLi4ubmV3VmlzQ29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpIHtcbiAgICBjb25zdCB7Y29sb3JVSTogcHJldmlvdXMsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChuZXdDb25maWcpIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JVSVByb3AgPSBPYmplY3QuZW50cmllcyhuZXdDb25maWcpLnJlZHVjZSgoYWNjdSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gey4uLmFjY3Vba2V5XSwgLi4udmFsdWV9IDogdmFsdWVcbiAgICAgIH07XG4gICAgfSwgcHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSk7XG5cbiAgICBjb25zdCBjb2xvclVJID0ge1xuICAgICAgLi4ucHJldmlvdXMsXG4gICAgICBbcHJvcF06IGNvbG9yVUlQcm9wXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2NvbG9yVUl9KTtcbiAgICAvLyBpZiBjb2xvclVJW3Byb3BdIGlzIGNvbG9yUmFuZ2UuIElmIHR5cGUgaXMgaGV4Q29sb3IgdGhlbiBpdCdzIGFsc28gYSByYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9XG4gICAgICB2aXNDb25maWdbcHJvcF0gJiYgKHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMgfHwgdmlzQ29uZmlnW3Byb3BdLnR5cGUgPT09IGhleENvbG9yKTtcblxuICAgIGlmIChpc0NvbG9yUmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyB8fCAhbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghdmlzQ29uZmlnW3Byb3BdKSByZXR1cm47XG4gICAgY29uc3Qge2NvbG9yc30gPSB2aXNDb25maWdbcHJvcF07XG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZSxcbiAgICAgIG5hbWU6ICdDdXN0b20gUGFsZXR0ZScsXG4gICAgICBjb2xvcnM6IFsuLi5jb2xvcnNdXG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjdXN0b21QYWxldHRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCwgcmV2ZXJzZWQgYW5kIHR5cGVcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgdHlwZTogdmlzQ29uZmlnW3Byb3BdLnR5cGUsXG4gICAgICAgICAgICBzdGVwczogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycz8ubGVuZ3RoLFxuICAgICAgICAgICAgcmV2ZXJzZWQ6IEJvb2xlYW4odmlzQ29uZmlnW3Byb3BdLnJldmVyc2VkKSxcbiAgICAgICAgICAgIGhleENvbHVtbjogdGhpcy5nZXRIZXhDb2x1bW4ocHJvcCksXG4gICAgICAgICAgICBpc0hleENvbHVtbjogdGhpcy5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3ApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJ10uc29tZShcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnW2tleV0gIT09XG4gICAgICAgICAgICAocHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSkuY29sb3JSYW5nZUNvbmZpZ1trZXldXG4gICAgICApO1xuICAgIGlmICghc2hvdWxkVXBkYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtzdGVwcywgcmV2ZXJzZWR9ID0gY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnO1xuICAgIGNvbnN0IGNvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF07XG4gICAgLy8gZmluZCBiYXNlZCBvbiBzdGVwIG9yIHJldmVyc2VkXG4gICAgbGV0IHVwZGF0ZTtcbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3N0ZXBzJykpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0Q29sb3JHcm91cEJ5TmFtZShjb2xvclJhbmdlKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNhbWVHcm91cCA9IENPTE9SX1JBTkdFUy5maWx0ZXIoY3IgPT4gZ2V0Q29sb3JHcm91cEJ5TmFtZShjcikgPT09IGdyb3VwKTtcblxuICAgICAgICB1cGRhdGUgPSBzYW1lR3JvdXAuZmluZChjciA9PiBjci5jb2xvcnMubGVuZ3RoID09PSBzdGVwcyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLnJldmVyc2VkKSB7XG4gICAgICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UodHJ1ZSwgdXBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5jb2xvck1hcCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHRoaXMudXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JSYW5nZS5jb2xvck1hcCwgdXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmV2ZXJzZWQnKSkge1xuICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UocmV2ZXJzZWQsIHVwZGF0ZSB8fCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yTWFwLCBjb2xvclJhbmdlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtmaWVsZCwgZG9tYWlufSA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcHJvcCk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnW2ZpZWxkXT8udHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyB0eXBlIG9yIHR5cGUgaXMgbm90IHN0cmluZywgYm9vbGVhbiBvciBkYXRlXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgfVxuXG4gIHVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IGNvbG9yUmFuZ2UuY29sb3JzO1xuICAgIGNvbnN0IGFzc2lnbmVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIGlmIChjb2xvclJhbmdlLnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgICBjb2xvck1hcDogW11cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCkubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY01hcFswXSk7XG4gICAgICByZXR1cm4gW2NNYXBbMF0sIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGZvciAoY29uc3QgY29sb3Igb2YgdW5hc3NpZ25lZENvbG9ycykge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBkb21haW4uZmluZChkID0+ICFhc3NpZ25lZENhdGVnb3JpZXMuaW5jbHVkZXMoZCkpO1xuICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgIG5ld0NvbG9yTWFwLnB1c2goW2NhdGVnb3J5LCBjb2xvcl0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sb3JSYW5nZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgdXBkYXRlKSB7XG4gICAgY29uc3QgY29sb3JzID0gdXBkYXRlLmNvbG9ycztcbiAgICBsZXQgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIG5ld0NvbG9yTWFwID0gbmV3Q29sb3JNYXAubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCA9PT0gbmV3Q29sb3JNYXAubGVuZ3RoIC0gMSA/IG51bGwgOiBjTWFwWzBdO1xuICAgICAgcmV0dXJuIFt2YWx1ZSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgaWYgKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sb3JNYXBWYWx1ZXMgPSBjb2xvck1hcC5tYXAoYyA9PiBjWzBdKS5maWx0ZXIoYyA9PiB0eXBlb2YgYyA9PT0gJ251bWJlcicpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi5jb2xvck1hcFZhbHVlcywgZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAyXVswXTtcbiAgICAgIGNvbnN0IHN0ZXAgPSAobWF4VmFsdWUgLSBwcmV2VmFsdWUpIC8gKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoICsgMSk7XG4gICAgICBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAxXVswXSA9IHByZXZWYWx1ZSArIHN0ZXA7XG5cbiAgICAgIGZvciAoY29uc3QgW2ksIGNvbG9yXSBvZiB1bmFzc2lnbmVkQ29sb3JzLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGkgPT09IHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoIC0gMSA/IG51bGwgOiBwcmV2VmFsdWUgKyAoc3RlcCAqIChpICsgMikpO1xuICAgICAgICBuZXdDb2xvck1hcC5wdXNoKFt2YWx1ZSwgY29sb3JdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gKFxuICAgICAgKGNvbHVtbnMgJiZcbiAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkodiA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHYub3B0aW9uYWwgfHwgKHYudmFsdWUgJiYgdi5maWVsZElkeCA+IC0xKSk7XG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gbGF5ZXJEYXRhXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0xheWVyRGF0YShsYXllckRhdGEpIHtcbiAgICBpZiAoIWxheWVyRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihsYXllckRhdGEuZGF0YSAmJiBsYXllckRhdGEuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgaXNWYWxpZFRvU2F2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHRoaXMuaGFzQWxsQ29sdW1ucygpO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyTGF5ZXIoZGF0YSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy50eXBlICYmXG4gICAgICB0aGlzLmhhc0FsbENvbHVtbnMoKSAmJlxuICAgICAgdGhpcy5oYXNMYXllckRhdGEoZGF0YSkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLnJlbmRlckxheWVyID09PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgaWYgKGNvbG9yUmFuZ2UudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIHJldHVybiAoXywgY29sb3IpID0+IHtcbiAgICAgICAgY29uc3Qge3IsIGcsIGJ9ID0gcmdiKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiXS5zb21lKGlzTmFOKSA/IFVOS05PV05fQ09MT1IgOiBbciwgZywgYl07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvclJhbmdlLmNvbG9yTWFwKSkge1xuICAgICAgY29uc3QgY01hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbG9yUmFuZ2UuY29sb3JNYXAuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgICAgY29uc3Qgc2NhbGUgPSBTQ0FMRV9GVU5DW2NvbG9yU2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihBcnJheS5mcm9tKGNNYXAua2V5cygpKSlcbiAgICAgICAgLnJhbmdlKEFycmF5LmZyb20oY01hcC52YWx1ZXMoKSkpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKSk7XG4gIH1cblxuICBnZXRDdXN0b21NYXJrZXJzU2NhbGUocmFuZ2UsIGZhbGxiYWNrSWNvbikge1xuICAgIGxldCB1bmtub3duVmFsdWUgPSBmYWxsYmFja0ljb24gfHwgRkFMTEJBQ0tfSUNPTjtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdW5rbm93blZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBuZXcgTWFwKCk7XG5cbiAgICBpZiAocmFuZ2Uub3RoZXJzTWFya2VyKSB7XG4gICAgICB1bmtub3duVmFsdWUgPSByYW5nZS5vdGhlcnNNYXJrZXI7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3ZhbHVlLCBtYXJrZXJVcmx9IG9mIHJhbmdlLm1hcmtlck1hcCkge1xuICAgICAgaWYgKG1hcmtlclVybCkge1xuICAgICAgICBtYXBwaW5nLnNldCh2YWx1ZSwgbWFya2VyVXJsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZU9yZGluYWwoKVxuICAgICAgLmRvbWFpbihBcnJheS5mcm9tKG1hcHBpbmcua2V5cygpKSlcbiAgICAgIC5yYW5nZShBcnJheS5mcm9tKG1hcHBpbmcudmFsdWVzKCkpKVxuICAgICAgLnVua25vd24odW5rbm93blZhbHVlKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHZpc3VhbCBjaGFubmVscyB0byBkZWNrLmdsIGFjY2Vzb3JzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSBQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZUFjY2Vzc29ycyA9IHt9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZml4ZWQsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBkb21haW4sXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBhY2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlLFxuICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG5cbiAgICAgIGNvbnN0IHNob3VsZEdldFNjYWxlID0gQm9vbGVhbihcbiAgICAgICAgKHNjYWxlIHx8IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmlkZW50aXR5KSAmJiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gW3RoaXMuY29uZmlnW3NjYWxlXSwgdGhpcy5jb25maWdbZG9tYWluXSwgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXV07XG4gICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBkZWNsYXJlIGFzIGNvbnN0IGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFyZSBnb2luZyB0byBiZSB1c2UgaW4gdGhlIGdldEVuY29kZWRDaGFubmVsVmFsdWUgY2FsbFxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBvbGRMYXllckRhdGEgcGFyYW1ldGVyIGluIGZvcm1hdExheWVyRGF0YSBtZXRob2Qgd2lsbCBiZSB3cm9uZyAoeW91IGNhbiBjaGVjayB0aGUgZm9ybWF0TGF5ZXJEYXRhIFRpbGVMYXllciBtZXRob2QgaW4gQnVpbGRlciBhcyBleGFtcGxlKVxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25WYWx1ZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG5cbiAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuaWRlbnRpdHlcbiAgICAgICAgICAgID8gc2NhbGVJZGVudGl0eVxuICAgICAgICAgICAgOiBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoLi4uYXJncylcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY3VzdG9tTWFya2VyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnLmN1c3RvbU1hcmtlcnNVcmxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZSguLi5hcmdzLCBpc0ZpeGVkKTtcblxuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZCA9PlxuICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSh7XG4gICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgICAgIHNjYWxlOiBzY2FsZUZ1bmN0aW9uLFxuICAgICAgICAgICAgZGF0YTogZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgZmllbGQ6IGZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgX2FnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblZhbHVlLFxuICAgICAgICAgICAgbnVsbFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBnZXRBdHRyaWJ1dGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9XG4gICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGFjY2Vzc29yIGluIGF0dHJpYnV0ZUFjY2Vzc29ycykpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZUFjY2Vzc29ycztcbiAgfVxuXG4gIGdldFZpc0NoYW5uZWxTY2FsZShzY2FsZSwgZG9tYWluLCByYW5nZSwgZml4ZWQpIHtcbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgICAgcmV0dXJuIFNDQUxFX0ZVTkNbc2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihkb21haW4uc2xpY2UoMCwgcmFuZ2UubGVuZ3RoKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgYGNvdW50YCBhZ2dyZWdhdGlvbiwgd2UgZG9tYWluIGlzIGFjdHVhbGx5IGBbMCwgSW5maW5pdHldYCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAvLyB0byB1c2UgaXQsIHNvIHNraXAgc3BlY3lmeWluZyB0aGlzIGRvbWFpbnNcbiAgICBjb25zdCBkb21haW5Jc0luZmluaXRlID0gZG9tYWluICYmIChkb21haW5bMF0gPT09IDAgJiYgZG9tYWluWzFdID09PSBJbmZpbml0eSk7XG4gICAgY29uc3Qgc2NhbGVGYWN0b3J5ID0gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdO1xuICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgIGxldCByZXN1bHQgPSBzY2FsZUZhY3RvcnkoKTtcbiAgICBpZiAoZG9tYWluICYmICFkb21haW5Jc0luZmluaXRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZG9tYWluKGRvbWFpbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIGNhbGN1bGF0ZSBib3VuZHMgZm9yLlxuICAgKiBAcGFyYW0geyhkOiB7aW5kZXg6IG51bWJlcn0sIGRjOiBpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IG51bWJlcltdfSBnZXRQb3NpdGlvbiBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEByZXR1cm4ge251bWJlcltdfG51bGx9IGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRpcmUgZGF0YXNldFxuICAgIC8vIGdldCBhIHNhbXBsZSBvZiBkYXRhIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBjb25zdCBzYW1wbGVEYXRhID1cbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpID4gTUFYX1NBTVBMRV9TSVpFXG4gICAgICAgID8gZ2V0U2FtcGxlRGF0YShkYXRhQ29udGFpbmVyLCBNQVhfU0FNUExFX1NJWkUpXG4gICAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHBvaW50cyA9IHNhbXBsZURhdGEubWFwSW5kZXgoZ2V0UG9zaXRpb24pO1xuXG4gICAgY29uc3QgbGF0Qm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMSwgWy05MCwgOTBdKTtcbiAgICBjb25zdCBsbmdCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAwLCBbLTE4MCwgMTgwXSk7XG5cbiAgICBpZiAoIWxhdEJvdW5kcyB8fCAhbG5nQm91bmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xuZ0JvdW5kc1swXSwgbGF0Qm91bmRzWzBdLCBsbmdCb3VuZHNbMV0sIGxhdEJvdW5kc1sxXV07XG4gIH1cblxuICBnZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKSB7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSBkaWZmVXBkYXRlVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzLCB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMpO1xuICAgIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IGRhdGFVcGRhdGVUcmlnZ2VycztcblxuICAgIHJldHVybiB0cmlnZ2VyQ2hhbmdlZDtcbiAgfVxuXG4gIGdldEVuY29kZWRDaGFubmVsVmFsdWUoe1xuICAgIGNoYW5uZWwsXG4gICAgc2NhbGUsXG4gICAgZGF0YSxcbiAgICBmaWVsZCxcbiAgICBkYXRhQ29udGFpbmVyLFxuICAgIC8vIEluIGJ1aWxkZXIgd2Ugb3ZlcndyaXRlIHRoZSBnZXRWYWx1ZSBmdW5jdGlvbiBhbmQgd2UgdXNlIHRoZSBfYWdncmVnYXRpb24gcGFyYW1ldGVyIGluIHNwYXRpYWwgaW5kZXggbGF5ZXJzIGFzIHRoZSBRdWFka2V5TGF5ZXIuXG4gICAgX2FnZ3JlZ2F0aW9uLFxuICAgIG51bGxWYWx1ZSA9IE5PX1ZBTFVFX0NPTE9SLFxuICAgIGdldFZhbHVlID0gZGVmYXVsdEdldEZpZWxkVmFsdWVcbiAgfSkge1xuICAgIGxldCBjb2xvckNvbHVtblZhbHVlO1xuICAgIGNvbnN0IHt0eXBlfSA9IGZpZWxkO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZmllbGQsIGRhdGEpO1xuICAgIGNvbnN0IGNoYW5uZWxDb25maWcgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5yYW5nZV07XG4gICAgY29uc3QgY2hhbm5lbEZpZWxkID0gdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5maWVsZF07XG5cbiAgICBpZiAoY2hhbm5lbENvbmZpZz8udHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkZpZWxkID0ge1xuICAgICAgICBpZDogY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uLFxuICAgICAgICBuYW1lOiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgIGZpZWxkSWR4OiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW5JZHgsXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IGQgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnZhbHVlQXQoZC5pbmRleCwgY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uSWR4KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29sb3JDb2x1bW5WYWx1ZSA9IGdldFZhbHVlKGNvbHVtbkZpZWxkLCBkYXRhKTtcbiAgICB9IGVsc2UgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGxldCBhdHRyaWJ1dGVWYWx1ZTtcbiAgICBpZiAodHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY29udmVydCBoZXJlXG4gICAgICAvLyBzY2FsZSBGdW5jdGlvbiBzaG91bGQgdGFrZSBjYXJlIG9mIGl0XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKG5ldyBEYXRlKHZhbHVlKSwgY29sb3JDb2x1bW5WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUodmFsdWUsIGNvbG9yQ29sdW1uVmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICB1cGRhdGVMYXllckxlZ2VuZChzZXR0aW5ncykge1xuICAgIHRoaXMubGVnZW5kU2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIGdldERhdGFVcGRhdGVUcmlnZ2Vycyh7ZmlsdGVyZWRJbmRleCwgaWQsIGFsbERhdGF9KSB7XG4gICAgY29uc3Qge2NvbHVtbnN9ID0gdGhpcy5jb25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0RGF0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnMsIGZpbHRlcmVkSW5kZXh9LFxuICAgICAgZ2V0TWV0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnN9LFxuICAgICAgLi4uKHRoaXMuY29uZmlnLnRleHRMYWJlbCB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdSwgdGwsIGkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICBbYGdldExhYmVsQ2hhcmFjdGVyU2V0LSR7aX1gXTogdGwuZmllbGQgPyB0bC5maWVsZC5uYW1lIDogbnVsbFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcblxuICAgIHRoaXMudXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhkYXRhc2V0KTtcbiAgICB0aGlzLnVwZGF0ZUhleENvbG9yRG9tYWluKGRhdGFzZXQpO1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YVVwZGF0ZVRyaWdnZXJzID0gdGhpcy5nZXREYXRhVXBkYXRlVHJpZ2dlcnMoZGF0YXNldCk7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSB0aGlzLmdldENoYW5nZWRUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMpO1xuXG4gICAgaWYgKHRyaWdnZXJDaGFuZ2VkLmdldE1ldGEpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IFtdO1xuXG4gICAgaWYgKCF0cmlnZ2VyQ2hhbmdlZC5nZXREYXRhICYmIG9sZExheWVyRGF0YSAmJiBvbGRMYXllckRhdGEuZGF0YSkge1xuICAgICAgLy8gc2FtZSBkYXRhXG4gICAgICBkYXRhID0gb2xkTGF5ZXJEYXRhLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoZGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzdHlsZWQgZmllbGRzIHRvIG1hdGNoIG9uZXMgZnJvbSBuZXcgZGF0YXNldC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAgICovXG4gIHVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMoZGF0YXNldCkge1xuICAgIGZvciAoY29uc3Qge2ZpZWxkLCByYW5nZX0gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKSkge1xuICAgICAgY29uc3Qgb2xkRmllbGQgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgICBjb25zdCBpc1VzaW5nSGV4Q29sb3JDb2RlID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXT8uaGV4Q29sb3I7XG4gICAgICBpZiAoIW9sZEZpZWxkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBuZXdEYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IG9sZEZpZWxkLm5hbWUpIHx8IG51bGw7XG4gICAgICBpZiAoaXNVc2luZ0hleENvbG9yQ29kZSkge1xuICAgICAgICBuZXdEYXRhU2V0RmllbGQgPSB7XG4gICAgICAgICAgLi4ubmV3RGF0YVNldEZpZWxkLFxuICAgICAgICAgIGNvbG9yQ29sdW1uOiBuZXdEYXRhU2V0RmllbGQuY29sb3JDb2x1bW4gfHwgb2xkRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgICAgY29sb3JDb2x1bW5JZHg6IG5ld0RhdGFTZXRGaWVsZC5jb2xvckNvbHVtbklkeCB8fCBvbGRGaWVsZC5jb2xvckNvbHVtbklkeFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbmV3RGF0YVNldEZpZWxkfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgb25lIGxheWVyIGRvbWFpbiB3aGVuIHN0YXRlLmRhdGEgY2hhbmdlZFxuICAgKiBpZiBzdGF0ZS5kYXRhIGNoYW5nZSBpcyBkdWUgb3QgdXBkYXRlIGZpbHRlciwgbmV3RmlsZXIgd2lsbCBiZSBwYXNzZWRcbiAgICogY2FsbGVkIGJ5IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld0ZpbHRlclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHMsIG5ld0ZpbHRlcikge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge3NjYWxlfSA9IGNoYW5uZWw7XG4gICAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG5cbiAgICAgIC8vIG9yZGluYWwgZG9tYWluIGlzIGJhc2VkIG9uIGRhdGFDb250YWluZXIsIGlmIG9ubHkgZmlsdGVyIGNoYW5nZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluXG4gICAgICBpZiAoIW5ld0ZpbHRlciB8fCBzY2FsZVR5cGUgIT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgICAgY29uc3Qge2RvbWFpbn0gPSBjaGFubmVsO1xuICAgICAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbih0YWJsZSwgY2hhbm5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tkb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhdGFzZXQoZGF0YXNldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YUlkID8gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdmlzdWFsIGNoYW5uZWwgZmllbGQgYW5kIHNjYWxlcyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmllbGQgJiBzY2FsZSB0eXBlXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCkge1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZVNjYWxlKGNoYW5uZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGZpZWxkIHR5cGUgYmFzZWQgb24gY2hhbm5lbFNjYWxlVHlwZVxuICAgKi9cbiAgdmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgY2hhbm5lbFNjYWxlVHlwZSwgc3VwcG9ydGVkRmllbGRUeXBlc30gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgLy8gaWYgZmllbGQgaXMgc2VsZWN0ZWQsIGNoZWNrIGlmIGZpZWxkIHR5cGUgaXMgc3VwcG9ydGVkXG4gICAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuXG4gICAgICBpZiAoIWNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHRoaXMuY29uZmlnW2ZpZWxkXS50eXBlKSkge1xuICAgICAgICAvLyBmaWVsZCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBiYWNrIHRvIG51bGxcbiAgICAgICAgLy8gc2V0IHNjYWxlIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBudWxsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNjYWxlIHR5cGUgYmFzZWQgb24gYWdncmVnYXRpb25cbiAgICovXG4gIHZhbGlkYXRlU2NhbGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtzY2FsZSwgcmFuZ2V9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBpZiAoXG4gICAgICAhc2NhbGUgfHxcbiAgICAgICh0aGlzLmlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4ocmFuZ2UpICYmIHRoaXMuY29uZmlnW3NjYWxlXSA9PT0gU0NBTEVfVFlQRVMuaWRlbnRpdHkpXG4gICAgKSB7XG4gICAgICAvLyB2aXN1YWxDaGFubmVsIGRvZXNuJ3QgaGF2ZSBzY2FsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSB0aGlzLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsKTtcbiAgICAvLyBjaGVjayBpZiBjdXJyZW50IHNlbGVjdGVkIHNjYWxlIGlzXG4gICAgLy8gc3VwcG9ydGVkLCBpZiBub3QsIGNoYW5nZSB0byBkZWZhdWx0XG4gICAgaWYgKCFzY2FsZU9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWdbc2NhbGVdKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3NjYWxlXTogc2NhbGVPcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIHNjYWxlLCBjaGFubmVsU2NhbGVUeXBlfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdXG4gICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICA6IFt0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZygpW3NjYWxlXV07XG4gIH1cblxuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIC8vIGNhbGN1bGF0ZSBsYXllciBjaGFubmVsIGRvbWFpblxuICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1t2aXN1YWxDaGFubmVsLmRvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgfVxuXG4gIGdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpIHtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2aXN1YWxDaGFubmVsID0+IHtcbiAgICAgIC8vIGZpZWxkIHJhbmdlIHNjYWxlIGRvbWFpblxuICAgICAgY29uc3Qge2FjY2Vzc29yLCBmaWVsZCwgc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGRlZmF1bHRWYWx1ZSwgZml4ZWR9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdID0ge1xuICAgICAgICBbZmllbGRdOiB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgIFtzY2FsZV06IHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgW2RvbWFpbl06IHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgIFtyYW5nZV06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIC4uLihmaXhlZCA/IHtbZml4ZWRdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdfSA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlVHJpZ2dlcnM7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKSB7XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgICBpZiAoIWZpZWxkIHx8ICFzY2FsZSkge1xuICAgICAgLy8gaWYgY29sb3JGaWVsZCBvciBzaXplRmllbGQgd2VyZSBzZXQgYmFjayB0byBudWxsXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG4gICAgY29uc3QgZGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQubmFtZSk7XG4gICAgaWYgKCFzY2FsZVR5cGUgfHwgIWRhdGFTZXRGaWVsZCkge1xuICAgICAgLy8gaWYgbmV3IGRhdGFzZXQgZG9lc24ndCBjb250YWluIHByZXZpb3VzbHkgc2V0IGZpZWxkXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YXNldC5nZXRDb2x1bW5MYXllckRvbWFpbihkYXRhU2V0RmllbGQsIHNjYWxlVHlwZSkgfHwgZGVmYXVsdERvbWFpbjtcbiAgfVxuXG4gIHVwZGF0ZUhleENvbG9yRG9tYWluKGRhdGFzZXQpIHtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW2NoYW5uZWwucmFuZ2VdO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1tjaGFubmVsLmZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yICYmIGZpZWxkPy5jb2xvckNvbHVtbikge1xuICAgICAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5jb2xvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IGRhdGFzZXRcbiAgICAgICAgICAuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZGF0YVNldEZpZWxkLCBTQ0FMRV9UWVBFUy5vcmRpbmFsKVxuICAgICAgICAgIC5tYXAoYyA9PiBjaGVja0NvbG9yT3JGYWxsYmFjayhjKSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1xuICAgICAgICAgIFtjaGFubmVsLnJhbmdlXTogey4uLmNoYW5uZWxDb25maWcsIGNvbG9yc31cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNhbGN1bGF0ZUhleENvbHVtbkxlZ2VuZChkYXRhc2V0cykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghZGF0YXNldHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZWdlbmRTZXR0aW5ncyA9IE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLnJlZHVjZSgobGVnZW5kcywgY2hhbm5lbCkgPT4ge1xuICAgICAgY29uc3Qge3JhbmdlLCBmaWVsZDogY2hhbm5lbEZpZWxkfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbEZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yICYmIGZpZWxkPy5jb2xvckNvbHVtbikge1xuICAgICAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5jb2xvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGxlZ2VuZCA9IGRhdGFzZXQuY2FsY3VsYXRlTGVnZW5kKGZpZWxkLCBkYXRhU2V0RmllbGQpO1xuICAgICAgICBsZWdlbmRzW2NoYW5uZWxdID0gbGVnZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZ2VuZHM7XG4gICAgfSwge30pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJMZWdlbmQobGVnZW5kU2V0dGluZ3MpO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykgJiYgb2JqZWN0SW5mby5vYmplY3QgPyBvYmplY3RJbmZvLm9iamVjdCA6IG51bGw7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIG9iamVjdEluZm8/LnBpY2tlZCAmJiBvYmplY3RJbmZvPy5sYXllcj8ucHJvcHM/LmlkID09PSB0aGlzLmlkO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGVCeVpvb20obWFwU3RhdGUpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzQ2hhbm5lbC5maWVsZDtcbiAgICBjb25zdCB7cmFkaXVzfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnW2ZpZWxkXSA/IDEgOiByYWRpdXMpICogdGhpcy5nZXRab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlKCkge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCB8fCB0aGlzLmNvbmZpZ1tyYWRpdXNDaGFubmVsLmZpZWxkXSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5yYWRpdXM7XG4gIH1cblxuICBnZXRNYXhNYXJrZXJTaXplKCkge1xuICAgIGNvbnN0IHtyYWRpdXNGaWVsZCwgc2l6ZUZpZWxkLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge3JhZGl1c1JhbmdlLCByYWRpdXN9ID0gdmlzQ29uZmlnO1xuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzRmllbGQgfHwgc2l6ZUZpZWxkO1xuICAgIHJldHVybiBNYXRoLmNlaWwoKGZpZWxkICYmIHJhZGl1c1JhbmdlID8gcmFkaXVzUmFuZ2VbMV0gOiByYWRpdXMpKTtcbiAgfVxuXG4gIHNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5zb21lKHAgPT4gIXRoaXMubm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzLmluY2x1ZGVzKHApKTtcbiAgfVxuXG4gIGdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcsIGJydXNoaW5nVGFyZ2V0KSB7XG4gICAgY29uc3Qge2JydXNofSA9IGludGVyYWN0aW9uQ29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGJydXNoaW5nXG4gICAgICBhdXRvSGlnaGxpZ2h0OiAhYnJ1c2guZW5hYmxlZCxcbiAgICAgIGJydXNoaW5nUmFkaXVzOiBicnVzaC5jb25maWcuc2l6ZSAqIDEwMDAsXG4gICAgICBicnVzaGluZ1RhcmdldDogYnJ1c2hpbmdUYXJnZXQgfHwgJ3NvdXJjZScsXG4gICAgICBicnVzaGluZ0VuYWJsZWQ6IGJydXNoLmVuYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKHtpZHgsIGdwdUZpbHRlciwgbWFwU3RhdGUsIHZpc2libGUsIG1hc2tQb2x5Z29ufSkge1xuICAgIGNvbnN0IG1hc2tFeHRlbnNpb25Qcm9wcyA9IGdldE1hc2tFeHRlbnNpb25Qcm9wcyhtYXNrUG9seWdvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1hc2tFeHRlbnNpb25Qcm9wcyxcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgaWR4LFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFULFxuICAgICAgcGlja2FibGU6IHRoaXMuaGFzSW50ZXJhY3Rpdml0eSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBwYXJhbWV0ZXJzOiB7ZGVwdGhUZXN0OiBCb29sZWFuKG1hcFN0YXRlLmRyYWdSb3RhdGUgfHwgdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZTNkKX0sXG4gICAgICBoaWRkZW46IHRoaXMuY29uZmlnLmhpZGRlbixcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20sXG4gICAgICAvLyB2aXNjb25maWdcbiAgICAgIG9wYWNpdHk6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5vcGFjaXR5LFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgLy8gZGF0YSBmaWx0ZXJpbmdcbiAgICAgIGV4dGVuc2lvbnM6IFtkYXRhRmlsdGVyRXh0ZW5zaW9uLCAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMuZXh0ZW5zaW9uc10sXG4gICAgICBmaWx0ZXJSYW5nZTogZ3B1RmlsdGVyID8gZ3B1RmlsdGVyLmZpbHRlclJhbmdlIDogdW5kZWZpbmVkLFxuICAgICAgLy8gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUgYW5kIGlmIHNwbGl0TWFwLCBzaG93biBpbiB0byBvbmUgb2YgcGFuZWxcbiAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSAmJiB2aXNpYmxlXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVRcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyVGV4dExhYmVsTGF5ZXIoXG4gICAge2dldFBvc2l0aW9uLCBnZXRSYWRpdXMsIHJhZGl1c1NjYWxlLCB1cGRhdGVUcmlnZ2Vycywgc2hhcmVkUHJvcHN9LFxuICAgIHJlbmRlck9wdHNcbiAgKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gcmVuZGVyT3B0cztcbiAgICBjb25zdCB7dGV4dExhYmVsLCB2aXNpYmlsaXR5Qnlab29tfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbLi4uc2hhcmVkUHJvcHMuZXh0ZW5zaW9ucywgY29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uXTtcblxuICAgIGlmICghZGF0YSB8fCAhZGF0YS50ZXh0TGFiZWxzIHx8ICFkYXRhLnRleHRMYWJlbHNbMF0gfHwgIWRhdGEudGV4dExhYmVsc1swXS5nZXRUZXh0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgW21haW5MYWJlbCwgc2Vjb25kYXJ5TGFiZWxdID0gdGV4dExhYmVsO1xuICAgIGNvbnN0IHtcbiAgICAgIGFsaWdubWVudCxcbiAgICAgIGFuY2hvcixcbiAgICAgIGNvbG9yOiBnZXRDb2xvcixcbiAgICAgIGZpZWxkOiBtYWluRmllbGQsXG4gICAgICBvdXRsaW5lQ29sb3IsXG4gICAgICBzaXplOiBzaXplU2NhbGVcbiAgICB9ID0gbWFpbkxhYmVsO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbG9yOiBnZXRTZWNvbmRhcnlDb2xvcixcbiAgICAgIGZpZWxkOiBzZWNvbmRhcnlGaWVsZCxcbiAgICAgIG91dGxpbmVDb2xvcjogc2Vjb25kYXJ5T3V0bGluZUNvbG9yLFxuICAgICAgc2l6ZTogc2Vjb25kYXJ5U2l6ZVNjYWxlXG4gICAgfSA9IHNlY29uZGFyeUxhYmVsIHx8IHt9O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBQb2ludExhYmVsTGF5ZXIoe1xuICAgICAgICAuLi5zaGFyZWRQcm9wcyxcblxuICAgICAgICAvLyBSZWNyZWF0ZSBsYXllciB3aGVuIGxhYmVscyBjaGFuZ2Ugb3RoZXJ3aXNlIHJlbmRlcmluZyBicmVha3NcbiAgICAgICAgLy8gVE9ETyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudCB3aXRoIHVwZGF0ZVRyaWdnZXJzP1xuICAgICAgICBpZDogYCR7dGhpcy5pZH0tJHttYWluRmllbGQ/Lm5hbWV9LSR7c2Vjb25kYXJ5RmllbGQ/Lm5hbWV9LWxhYmVsYCxcbiAgICAgICAgZGF0YTogZGF0YS5kYXRhLFxuICAgICAgICB2aXNpYmlsaXR5Qnlab29tLFxuICAgICAgICBleHRlbnNpb25zLFxuXG4gICAgICAgIGNoYXJhY3RlclNldDogJ2F1dG8nLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBjb2xsaXNpb25Hcm91cDogYCR7dGhpcy5pZH0tbGFiZWxzYCxcblxuICAgICAgICBnZXRUZXh0OiBkYXRhLnRleHRMYWJlbHNbMF0uZ2V0VGV4dCxcbiAgICAgICAgZ2V0Q29sb3IsXG4gICAgICAgIHNpemVTY2FsZSxcbiAgICAgICAgb3V0bGluZUNvbG9yLFxuXG4gICAgICAgIC4uLihzZWNvbmRhcnlGaWVsZCAmJiB7XG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5VGV4dDogZGF0YS50ZXh0TGFiZWxzWzFdLmdldFRleHQsXG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5Q29sb3IsXG4gICAgICAgICAgc2Vjb25kYXJ5U2l6ZVNjYWxlLFxuICAgICAgICAgIHNlY29uZGFyeU91dGxpbmVDb2xvclxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBQb3NpdGlvblxuICAgICAgICBnZXRQb3NpdGlvbixcbiAgICAgICAgZ2V0UmFkaXVzLFxuICAgICAgICByYWRpdXNTY2FsZSxcbiAgICAgICAgZ2V0VGV4dEFuY2hvcjogYW5jaG9yLFxuICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogYWxpZ25tZW50LFxuXG4gICAgICAgIC8vIFN0eWxlXG4gICAgICAgIGZvbnRGYW1pbHk6ICdJbnRlciwgc2FucycsXG4gICAgICAgIGZvbnRTZXR0aW5nczoge3NkZjogdHJ1ZX0sXG4gICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgb3V0bGluZVdpZHRoOiA0LFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgLy8gdGV4dCB3aWxsIGFsd2F5cyBzaG93IG9uIHRvcCBvZiBhbGwgbGF5ZXJzXG4gICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgIGdldFRleHQ6IG1haW5GaWVsZD8ubmFtZSxcbiAgICAgICAgICBnZXRDb2xvcjogbWFpbkZpZWxkPy5jb2xvcixcbiAgICAgICAgICBnZXRUZXh0QW5jaG9yOiBtYWluTGFiZWwuYW5jaG9yLFxuICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiBtYWluTGFiZWwuYWxpZ25tZW50LFxuICAgICAgICAgIGdldFNlY29uZGFyeVRleHQ6IHNlY29uZGFyeUZpZWxkPy5uYW1lXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZGVjay5nbCBgSWNvbkxheWVyYCBcImF1dG9QYWNrXCIgbW9kZSBhY2Nlc3NvciBmb3IgY3VzdG9tIG1hcmtlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gaWNvblVybEFjY2Vzc29yIGRlY2suZ2wgYWNjZXNzb3IgKG9yIHZhbHVlKSB0aGF0IHJlc29sdmVzIHRvIFVSTCBvZiBpY29uIGZvciBnaXZlbiByb3dcbiAgICogQHJldHVybnMgZGVjay5nbCBhY2Nlc3NvciB0aGF0IHJldHVybnMgVW5wYWNrZWRJY29uIHJlYWR5IHRvIGNvbnN1bWUgYnkgSWNvbkxheWVyXG4gICAqL1xuICBnZXRDdXN0b21NYXJrZXJJY29uQWNjZXNzb3IoaWNvblVybEFjY2Vzc29yLCBtYXNrID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1heEljb25TaXplID0gdGhpcy5nZXRNYXhNYXJrZXJTaXplKCk7XG5cbiAgICByZXR1cm4gZCA9PiB7XG4gICAgICBjb25zdCB3YW50ZWRVcmwgPVxuICAgICAgICAodHlwZW9mIGljb25VcmxBY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJykgPyBpY29uVXJsQWNjZXNzb3IoZCkgOiBpY29uVXJsQWNjZXNzb3I7XG4gICAgICBjb25zdCBpY29uT2sgPSBCb29sZWFuKHdhbnRlZFVybCk7XG4gICAgICBtYXNrID0gaWNvbk9rID8gbWFzayA6IHRydWU7XG4gICAgICBjb25zdCB1cmwgPSBpY29uT2sgPyB3YW50ZWRVcmwgOiBGQUxMQkFDS19JQ09OO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke3VybH1AQCR7bWF4SWNvblNpemV9QCR7bWFzayA/ICdtJyA6ICdjJ31gLFxuICAgICAgICB1cmwsXG4gICAgICAgIHdpZHRoOiBtYXhJY29uU2l6ZSxcbiAgICAgICAgaGVpZ2h0OiBtYXhJY29uU2l6ZSxcbiAgICAgICAgbWFza1xuICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShrZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9XG5cbiAgZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiAoKSA9PiBudWxsO1xuICB9XG5cbiAgZ2V0SGV4Q29sdW1uKHJhbmdlKSB7XG4gICAgY29uc3QgZmllbGQgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpPy5maW5kKHZhbHVlID0+IHZhbHVlLnJhbmdlID09PSByYW5nZSk/LmZpZWxkO1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXT8uY29sb3JDb2x1bW47XG4gICAgfVxuICB9XG5cbiAgaXNDb2xvcmVkQnlDb2xvckNvbHVtbihyYW5nZSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdPy5oZXhDb2xvcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztB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