@carto/kepler.gl 0.0.86-alpha.deck9.1 → 0.0.86

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 (423) hide show
  1. package/dist/actions/action-wrapper.js +41 -36
  2. package/dist/actions/actions.js +21 -15
  3. package/dist/actions/identity-actions.js +20 -14
  4. package/dist/actions/index.js +16 -16
  5. package/dist/actions/map-state-actions.js +18 -12
  6. package/dist/actions/map-style-actions.js +46 -30
  7. package/dist/actions/provider-actions.js +73 -49
  8. package/dist/actions/ui-state-actions.js +113 -73
  9. package/dist/actions/vis-state-actions.js +148 -152
  10. package/dist/cloud-providers/index.js +7 -6
  11. package/dist/cloud-providers/provider.js +279 -189
  12. package/dist/components/bottom-widget.js +117 -105
  13. package/dist/components/common/action-panel.js +74 -122
  14. package/dist/components/common/animation-control/animation-control.js +54 -69
  15. package/dist/components/common/animation-control/animation-controller.js +160 -134
  16. package/dist/components/common/animation-control/animation-speed-slider.js +54 -47
  17. package/dist/components/common/animation-control/floating-time-display.js +100 -120
  18. package/dist/components/common/animation-control/playback-controls.js +144 -147
  19. package/dist/components/common/animation-control/speed-control.js +23 -31
  20. package/dist/components/common/checkbox.js +70 -56
  21. package/dist/components/common/color-legend.js +110 -83
  22. package/dist/components/common/data-table/button.js +23 -31
  23. package/dist/components/common/data-table/canvas.js +5 -11
  24. package/dist/components/common/data-table/cell-size.js +61 -51
  25. package/dist/components/common/data-table/grid.js +59 -40
  26. package/dist/components/common/data-table/index.js +348 -464
  27. package/dist/components/common/data-table/option-dropdown.js +33 -50
  28. package/dist/components/common/dataset-label.js +13 -17
  29. package/dist/components/common/error-boundary.js +45 -27
  30. package/dist/components/common/field-selector.js +139 -99
  31. package/dist/components/common/field-token.js +9 -24
  32. package/dist/components/common/file-uploader/file-drop.js +115 -96
  33. package/dist/components/common/file-uploader/file-upload-progress.js +45 -68
  34. package/dist/components/common/file-uploader/file-upload.js +187 -215
  35. package/dist/components/common/file-uploader/upload-button.js +22 -35
  36. package/dist/components/common/histogram-plot.js +58 -47
  37. package/dist/components/common/icons/add.js +27 -14
  38. package/dist/components/common/icons/anchor_window.js +18 -16
  39. package/dist/components/common/icons/arrow-down-alt.js +27 -14
  40. package/dist/components/common/icons/arrow-down-solid.js +27 -14
  41. package/dist/components/common/icons/arrow-down.js +27 -14
  42. package/dist/components/common/icons/arrow-left.js +30 -17
  43. package/dist/components/common/icons/arrow-right.js +27 -14
  44. package/dist/components/common/icons/arrow-up-alt.js +28 -15
  45. package/dist/components/common/icons/arrow-up-solid.js +27 -14
  46. package/dist/components/common/icons/arrow-up.js +27 -14
  47. package/dist/components/common/icons/base.js +57 -39
  48. package/dist/components/common/icons/bug.js +29 -16
  49. package/dist/components/common/icons/cancel.js +27 -14
  50. package/dist/components/common/icons/checkmark.js +31 -18
  51. package/dist/components/common/icons/chevron-right.js +33 -20
  52. package/dist/components/common/icons/clipboard.js +28 -15
  53. package/dist/components/common/icons/clock.js +29 -16
  54. package/dist/components/common/icons/close.js +32 -19
  55. package/dist/components/common/icons/code-alt.js +29 -16
  56. package/dist/components/common/icons/copy.js +31 -18
  57. package/dist/components/common/icons/crosshairs.js +29 -16
  58. package/dist/components/common/icons/cube-3d.js +31 -18
  59. package/dist/components/common/icons/cursor-click.js +31 -18
  60. package/dist/components/common/icons/data-table.js +28 -15
  61. package/dist/components/common/icons/db.js +28 -15
  62. package/dist/components/common/icons/delete.js +29 -16
  63. package/dist/components/common/icons/docs.js +43 -30
  64. package/dist/components/common/icons/drag-n-drop.js +29 -16
  65. package/dist/components/common/icons/draw-polygon.js +46 -33
  66. package/dist/components/common/icons/email.js +31 -18
  67. package/dist/components/common/icons/expand.js +29 -16
  68. package/dist/components/common/icons/eye-seen.js +29 -16
  69. package/dist/components/common/icons/eye-unseen.js +29 -16
  70. package/dist/components/common/icons/file-type.js +19 -35
  71. package/dist/components/common/icons/file.js +27 -14
  72. package/dist/components/common/icons/files.js +26 -14
  73. package/dist/components/common/icons/filter-funnel.js +27 -14
  74. package/dist/components/common/icons/free-window.js +18 -16
  75. package/dist/components/common/icons/gear.js +29 -16
  76. package/dist/components/common/icons/hash.js +27 -14
  77. package/dist/components/common/icons/histogram.js +27 -15
  78. package/dist/components/common/icons/index.js +156 -156
  79. package/dist/components/common/icons/info.js +38 -25
  80. package/dist/components/common/icons/layers.js +27 -14
  81. package/dist/components/common/icons/left-arrow.js +29 -16
  82. package/dist/components/common/icons/legend.js +27 -14
  83. package/dist/components/common/icons/line-chart.js +27 -14
  84. package/dist/components/common/icons/login.js +30 -17
  85. package/dist/components/common/icons/logout.js +29 -16
  86. package/dist/components/common/icons/map-icon.js +32 -18
  87. package/dist/components/common/icons/map.js +32 -18
  88. package/dist/components/common/icons/messages.js +27 -14
  89. package/dist/components/common/icons/minus.js +27 -14
  90. package/dist/components/common/icons/order-by-dataset.js +17 -15
  91. package/dist/components/common/icons/order-by-list.js +9 -7
  92. package/dist/components/common/icons/pause.js +27 -14
  93. package/dist/components/common/icons/picture.js +26 -14
  94. package/dist/components/common/icons/pin.js +30 -17
  95. package/dist/components/common/icons/play.js +27 -14
  96. package/dist/components/common/icons/polygon.js +48 -35
  97. package/dist/components/common/icons/rectangle.js +49 -36
  98. package/dist/components/common/icons/reduce.js +30 -17
  99. package/dist/components/common/icons/reset.js +27 -14
  100. package/dist/components/common/icons/rocket.js +27 -14
  101. package/dist/components/common/icons/save.js +29 -16
  102. package/dist/components/common/icons/save2.js +33 -20
  103. package/dist/components/common/icons/search.js +29 -16
  104. package/dist/components/common/icons/settings.js +29 -16
  105. package/dist/components/common/icons/share.js +27 -14
  106. package/dist/components/common/icons/split.js +55 -42
  107. package/dist/components/common/icons/square-select.js +29 -16
  108. package/dist/components/common/icons/swap-horizontal.js +31 -18
  109. package/dist/components/common/icons/table.js +27 -14
  110. package/dist/components/common/icons/trash.js +29 -16
  111. package/dist/components/common/icons/upload.js +27 -14
  112. package/dist/components/common/icons/vert-dots.js +65 -52
  113. package/dist/components/common/icons/vert-three-dots.js +40 -27
  114. package/dist/components/common/icons/warning.js +39 -26
  115. package/dist/components/common/image-preview.js +33 -71
  116. package/dist/components/common/info-helper.js +29 -36
  117. package/dist/components/common/item-selector/accessor.js +13 -7
  118. package/dist/components/common/item-selector/chickleted-input.js +56 -72
  119. package/dist/components/common/item-selector/dropdown-list.js +214 -182
  120. package/dist/components/common/item-selector/item-selector-submenu.js +55 -34
  121. package/dist/components/common/item-selector/item-selector.js +194 -183
  122. package/dist/components/common/item-selector/typeahead.js +248 -236
  123. package/dist/components/common/line-chart.js +58 -80
  124. package/dist/components/common/loading-spinner.js +31 -46
  125. package/dist/components/common/logo.js +48 -61
  126. package/dist/components/common/map-layer-selector.js +25 -31
  127. package/dist/components/common/modal.js +106 -167
  128. package/dist/components/common/portaled.js +189 -169
  129. package/dist/components/common/progress-bar.js +24 -27
  130. package/dist/components/common/range-brush.js +215 -176
  131. package/dist/components/common/range-plot.js +63 -52
  132. package/dist/components/common/range-slider.js +231 -206
  133. package/dist/components/common/slider/mouse-event.js +66 -59
  134. package/dist/components/common/slider/slider-bar-handle.js +61 -51
  135. package/dist/components/common/slider/slider-handle.js +102 -127
  136. package/dist/components/common/slider/slider.js +162 -143
  137. package/dist/components/common/styled-components.js +256 -518
  138. package/dist/components/common/switch.js +11 -11
  139. package/dist/components/common/time-range-slider-time-title.js +32 -49
  140. package/dist/components/common/time-range-slider.js +45 -56
  141. package/dist/components/common/time-slider-marker.js +52 -71
  142. package/dist/components/common/tippy-tooltip.js +59 -89
  143. package/dist/components/common/toolbar-item.js +45 -53
  144. package/dist/components/common/toolbar.js +18 -24
  145. package/dist/components/common/vertical-toolbar.js +6 -13
  146. package/dist/components/container.js +119 -87
  147. package/dist/components/context.js +8 -6
  148. package/dist/components/editor/constants.js +4 -4
  149. package/dist/components/editor/editor.js +157 -122
  150. package/dist/components/editor/feature-action-panel.js +59 -52
  151. package/dist/components/editor/feature-styles.js +29 -46
  152. package/dist/components/editor/handle-style.js +29 -38
  153. package/dist/components/filters/components.js +4 -8
  154. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +43 -33
  155. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +21 -20
  156. package/dist/components/filters/filter-panels/new-filter-panel.js +31 -24
  157. package/dist/components/filters/filter-panels/polygon-filter-panel.js +31 -26
  158. package/dist/components/filters/filter-panels/range-filter-panel.js +21 -20
  159. package/dist/components/filters/filter-panels/single-select-filter-panel.js +21 -20
  160. package/dist/components/filters/filter-panels/time-range-filter-panel.js +31 -28
  161. package/dist/components/filters/index.js +10 -10
  162. package/dist/components/filters/multi-select-filter.js +9 -11
  163. package/dist/components/filters/polygon-filter.js +41 -26
  164. package/dist/components/filters/range-filter.js +7 -9
  165. package/dist/components/filters/single-select-filter.js +13 -11
  166. package/dist/components/filters/time-range-filter.js +14 -16
  167. package/dist/components/filters/time-widget.js +84 -125
  168. package/dist/components/geocoder/geocoder.js +177 -158
  169. package/dist/components/geocoder-panel.js +87 -66
  170. package/dist/components/index.js +329 -328
  171. package/dist/components/injector.js +63 -44
  172. package/dist/components/kepler-gl.js +361 -325
  173. package/dist/components/map/coordinate-info.js +16 -18
  174. package/dist/components/map/layer-hover-info.js +86 -108
  175. package/dist/components/map/layer-selector-panel.js +48 -50
  176. package/dist/components/map/locale-panel.js +44 -38
  177. package/dist/components/map/map-control-panel.js +47 -70
  178. package/dist/components/map/map-control-toolbar.js +6 -9
  179. package/dist/components/map/map-control-tooltip.js +8 -10
  180. package/dist/components/map/map-control.js +27 -35
  181. package/dist/components/map/map-draw-panel.js +48 -38
  182. package/dist/components/map/map-legend-panel.js +50 -47
  183. package/dist/components/map/map-legend.js +116 -133
  184. package/dist/components/map/map-popover.js +100 -155
  185. package/dist/components/map/split-map-button.js +34 -30
  186. package/dist/components/map/toggle-3d-button.js +27 -25
  187. package/dist/components/map-container.js +359 -313
  188. package/dist/components/maps-layout.js +26 -16
  189. package/dist/components/modal-container.js +355 -359
  190. package/dist/components/modals/add-map-style-modal.js +194 -233
  191. package/dist/components/modals/cloud-tile.js +67 -96
  192. package/dist/components/modals/data-table-modal.js +152 -155
  193. package/dist/components/modals/delete-data-modal.js +20 -20
  194. package/dist/components/modals/error-display.js +7 -9
  195. package/dist/components/modals/export-data-modal.js +140 -118
  196. package/dist/components/modals/export-image-modal.js +69 -82
  197. package/dist/components/modals/export-map-modal/components.js +18 -20
  198. package/dist/components/modals/export-map-modal/export-html-map.js +74 -82
  199. package/dist/components/modals/export-map-modal/export-json-map.js +45 -65
  200. package/dist/components/modals/export-map-modal/export-map-modal.js +47 -42
  201. package/dist/components/modals/image-modal-container.js +21 -20
  202. package/dist/components/modals/load-data-modal.js +30 -28
  203. package/dist/components/modals/load-storage-map.js +178 -277
  204. package/dist/components/modals/loading-dialog.js +19 -41
  205. package/dist/components/modals/modal-dialog.js +6 -4
  206. package/dist/components/modals/modal-tabs.js +48 -83
  207. package/dist/components/modals/overwrite-map-modal.js +30 -41
  208. package/dist/components/modals/provider-modal-container.js +42 -23
  209. package/dist/components/modals/save-map-modal.js +83 -107
  210. package/dist/components/modals/share-map-modal.js +95 -101
  211. package/dist/components/modals/status-panel.js +43 -63
  212. package/dist/components/modals/storage-map-viewer.js +70 -133
  213. package/dist/components/notification-panel/notification-item.js +97 -94
  214. package/dist/components/notification-panel.js +43 -35
  215. package/dist/components/performance.js +53 -49
  216. package/dist/components/plot-container.js +169 -151
  217. package/dist/components/side-panel/cloud-storage-dropdown.js +15 -13
  218. package/dist/components/side-panel/common/dataset-info.js +12 -16
  219. package/dist/components/side-panel/common/dataset-tag.js +27 -48
  220. package/dist/components/side-panel/common/dataset-title.js +116 -119
  221. package/dist/components/side-panel/common/source-data-catalog.js +32 -31
  222. package/dist/components/side-panel/common/source-data-selector.js +77 -52
  223. package/dist/components/side-panel/custom-panel.js +8 -6
  224. package/dist/components/side-panel/filter-manager.js +62 -48
  225. package/dist/components/side-panel/filter-panel/filter-panel-header.js +25 -35
  226. package/dist/components/side-panel/filter-panel/filter-panel.js +64 -46
  227. package/dist/components/side-panel/interaction-manager.js +18 -20
  228. package/dist/components/side-panel/interaction-panel/brush-config.js +17 -17
  229. package/dist/components/side-panel/interaction-panel/interaction-panel.js +95 -76
  230. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +143 -118
  231. package/dist/components/side-panel/interaction-panel/tooltip-config.js +76 -95
  232. package/dist/components/side-panel/layer-manager.js +115 -105
  233. package/dist/components/side-panel/layer-panel/add-layer-button.js +54 -92
  234. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +5 -5
  235. package/dist/components/side-panel/layer-panel/color-palette.js +37 -50
  236. package/dist/components/side-panel/layer-panel/color-range-selector.js +207 -196
  237. package/dist/components/side-panel/layer-panel/color-selector.js +110 -104
  238. package/dist/components/side-panel/layer-panel/column-selector.js +22 -34
  239. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +4 -4
  240. package/dist/components/side-panel/layer-panel/custom-palette.js +205 -248
  241. package/dist/components/side-panel/layer-panel/custom-picker.js +69 -51
  242. package/dist/components/side-panel/layer-panel/dataset-layer-group.js +42 -37
  243. package/dist/components/side-panel/layer-panel/dataset-layer-section.js +27 -31
  244. package/dist/components/side-panel/layer-panel/dataset-section.js +35 -45
  245. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +13 -14
  246. package/dist/components/side-panel/layer-panel/hex-column-config.js +55 -32
  247. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +5 -5
  248. package/dist/components/side-panel/layer-panel/layer-column-config.js +46 -42
  249. package/dist/components/side-panel/layer-panel/layer-config-group.js +144 -178
  250. package/dist/components/side-panel/layer-panel/layer-configurator.js +830 -826
  251. package/dist/components/side-panel/layer-panel/layer-list.js +94 -101
  252. package/dist/components/side-panel/layer-panel/layer-panel-header.js +82 -124
  253. package/dist/components/side-panel/layer-panel/layer-panel.js +105 -111
  254. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +58 -67
  255. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +32 -47
  256. package/dist/components/side-panel/layer-panel/layer-type-selector.js +41 -30
  257. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +43 -42
  258. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +57 -55
  259. package/dist/components/side-panel/layer-panel/single-color-palette.js +33 -48
  260. package/dist/components/side-panel/layer-panel/text-label-panel.js +116 -81
  261. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +102 -88
  262. package/dist/components/side-panel/layer-panel/vis-config-slider.js +85 -99
  263. package/dist/components/side-panel/layer-panel/vis-config-switch.js +29 -38
  264. package/dist/components/side-panel/map-manager.js +89 -70
  265. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +60 -72
  266. package/dist/components/side-panel/map-style-panel/map-style-selector.js +42 -64
  267. package/dist/components/side-panel/panel-dropdown.js +37 -21
  268. package/dist/components/side-panel/panel-header-action.js +65 -60
  269. package/dist/components/side-panel/panel-header.js +184 -165
  270. package/dist/components/side-panel/panel-tab.js +29 -35
  271. package/dist/components/side-panel/panel-title.js +18 -15
  272. package/dist/components/side-panel/panel-toggle.js +31 -30
  273. package/dist/components/side-panel/side-bar.js +91 -100
  274. package/dist/components/side-panel.js +123 -108
  275. package/dist/connect/keplergl-connect.js +26 -17
  276. package/dist/connect/with-local-selector.js +63 -31
  277. package/dist/constants/action-types.js +115 -113
  278. package/dist/constants/color-palette.js +16 -14
  279. package/dist/constants/color-ranges.js +28 -23
  280. package/dist/constants/custom-color-ranges.js +12 -12
  281. package/dist/constants/default-settings.js +254 -323
  282. package/dist/constants/index.js +63 -63
  283. package/dist/constants/keyevent.js +4 -4
  284. package/dist/constants/tooltip.js +5 -5
  285. package/dist/constants/user-feedbacks.js +5 -9
  286. package/dist/constants/user-guides.js +10 -10
  287. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +63 -37
  288. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +56 -52
  289. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +168 -165
  290. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +43 -24
  291. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +40 -27
  292. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +40 -27
  293. package/dist/deckgl-layers/layer-utils/cluster-utils.js +68 -60
  294. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +282 -276
  295. package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
  296. package/dist/deckgl-layers/line-layer/line-layer.js +70 -62
  297. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +51 -37
  298. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +85 -65
  299. package/dist/index.js +16 -15
  300. package/dist/layers/aggregation-layer.js +331 -299
  301. package/dist/layers/arc-layer/arc-layer-icon.js +41 -27
  302. package/dist/layers/arc-layer/arc-layer.js +201 -174
  303. package/dist/layers/base-layer.js +1544 -1371
  304. package/dist/layers/cluster-layer/cluster-layer-icon.js +44 -30
  305. package/dist/layers/cluster-layer/cluster-layer.js +103 -89
  306. package/dist/layers/default-layer-icon.js +53 -39
  307. package/dist/layers/geojson-layer/geojson-layer-icon.js +55 -42
  308. package/dist/layers/geojson-layer/geojson-layer.js +353 -292
  309. package/dist/layers/geojson-layer/geojson-utils.js +36 -31
  310. package/dist/layers/grid-layer/grid-layer-icon.js +100 -87
  311. package/dist/layers/grid-layer/grid-layer.js +61 -51
  312. package/dist/layers/grid-layer/grid-utils.js +9 -13
  313. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +35 -21
  314. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +260 -225
  315. package/dist/layers/h3-hexagon-layer/h3-utils.js +16 -16
  316. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +52 -39
  317. package/dist/layers/heatmap-layer/heatmap-layer.js +171 -140
  318. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +64 -51
  319. package/dist/layers/hexagon-layer/hexagon-layer.js +63 -49
  320. package/dist/layers/hexagon-layer/hexagon-utils.js +14 -15
  321. package/dist/layers/icon-layer/icon-info-modal.js +75 -82
  322. package/dist/layers/icon-layer/icon-layer-icon.js +37 -24
  323. package/dist/layers/icon-layer/icon-layer.js +303 -274
  324. package/dist/layers/index.js +29 -43
  325. package/dist/layers/layer-factory.js +41 -25
  326. package/dist/layers/layer-text-label.js +23 -21
  327. package/dist/layers/layer-update.js +18 -16
  328. package/dist/layers/line-layer/line-layer-icon.js +43 -30
  329. package/dist/layers/line-layer/line-layer.js +142 -123
  330. package/dist/layers/mapbox-utils.js +62 -61
  331. package/dist/layers/mapboxgl-layer.js +169 -124
  332. package/dist/layers/point-layer/point-layer-icon.js +59 -45
  333. package/dist/layers/point-layer/point-layer.js +386 -355
  334. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +238 -208
  335. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +35 -21
  336. package/dist/layers/s2-geometry-layer/s2-utils.js +8 -9
  337. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +25 -24
  338. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +115 -102
  339. package/dist/layers/scenegraph-layer/scenegraph-layer.js +172 -148
  340. package/dist/layers/trip-layer/trip-info-modal.js +30 -50
  341. package/dist/layers/trip-layer/trip-layer-icon.js +53 -40
  342. package/dist/layers/trip-layer/trip-layer.js +307 -239
  343. package/dist/layers/trip-layer/trip-utils.js +50 -34
  344. package/dist/layers/types.js +2 -2
  345. package/dist/localization/formatted-message.js +10 -8
  346. package/dist/localization/index.js +7 -7
  347. package/dist/localization/locales.js +9 -6
  348. package/dist/localization/messages.js +10 -13
  349. package/dist/localization/translations/ca.js +13 -11
  350. package/dist/localization/translations/cn.js +13 -11
  351. package/dist/localization/translations/en.js +13 -11
  352. package/dist/localization/translations/es.js +13 -11
  353. package/dist/localization/translations/fi.js +13 -11
  354. package/dist/localization/translations/ja.js +13 -11
  355. package/dist/localization/translations/pt.js +13 -11
  356. package/dist/localization/translations/ru.js +13 -11
  357. package/dist/middleware/index.js +5 -3
  358. package/dist/processors/data-processor.js +201 -164
  359. package/dist/processors/file-handler.js +233 -111
  360. package/dist/processors/index.js +4 -4
  361. package/dist/reducers/combined-updaters.js +41 -41
  362. package/dist/reducers/composer-helpers.js +45 -20
  363. package/dist/reducers/composers.js +8 -9
  364. package/dist/reducers/core.js +35 -31
  365. package/dist/reducers/index.js +22 -21
  366. package/dist/reducers/map-state-updaters.js +47 -65
  367. package/dist/reducers/map-state.js +15 -23
  368. package/dist/reducers/map-style-updaters.js +159 -233
  369. package/dist/reducers/map-style.js +16 -30
  370. package/dist/reducers/provider-state-updaters.js +229 -217
  371. package/dist/reducers/provider-state.js +17 -29
  372. package/dist/reducers/root.js +58 -86
  373. package/dist/reducers/ui-state-updaters.js +218 -337
  374. package/dist/reducers/ui-state.js +16 -45
  375. package/dist/reducers/vis-state-merger.js +209 -205
  376. package/dist/reducers/vis-state-selectors.js +19 -5
  377. package/dist/reducers/vis-state-updaters.js +876 -1003
  378. package/dist/reducers/vis-state.js +16 -75
  379. package/dist/schemas/dataset-schema.js +108 -84
  380. package/dist/schemas/index.js +29 -28
  381. package/dist/schemas/map-state-schema.js +18 -21
  382. package/dist/schemas/map-style-schema.js +55 -47
  383. package/dist/schemas/schema-manager.js +161 -147
  384. package/dist/schemas/schema-utils.js +9 -8
  385. package/dist/schemas/schema.js +87 -72
  386. package/dist/schemas/versions.js +3 -3
  387. package/dist/schemas/vis-state-schema.js +583 -441
  388. package/dist/styles/base.js +1021 -1217
  389. package/dist/styles/index.js +3 -3
  390. package/dist/styles/media-breakpoints.js +18 -23
  391. package/dist/tasks/tasks.js +39 -36
  392. package/dist/templates/export-map-html.js +4 -233
  393. package/dist/utils/aggregate-utils.js +16 -13
  394. package/dist/utils/color-utils.js +37 -29
  395. package/dist/utils/custom-scales.js +3 -3
  396. package/dist/utils/data-scale-utils.js +13 -6
  397. package/dist/utils/data-utils.js +83 -60
  398. package/dist/utils/dataset-utils.js +77 -48
  399. package/dist/utils/dom-to-image.js +163 -108
  400. package/dist/utils/dom-utils.js +105 -88
  401. package/dist/utils/export-utils.js +103 -116
  402. package/dist/utils/filter-utils.js +374 -379
  403. package/dist/utils/gl-utils.js +15 -16
  404. package/dist/utils/gpu-filter-utils.js +73 -54
  405. package/dist/utils/index.js +48 -47
  406. package/dist/utils/interaction-utils.js +46 -53
  407. package/dist/utils/layer-utils.js +78 -89
  408. package/dist/utils/locale-utils.js +16 -24
  409. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +76 -67
  410. package/dist/utils/map-style-utils/mapbox-utils.js +3 -4
  411. package/dist/utils/mapbox-utils.js +4 -3
  412. package/dist/utils/notifications-utils.js +38 -33
  413. package/dist/utils/observe-dimensions.js +54 -42
  414. package/dist/utils/projection-utils.js +11 -14
  415. package/dist/utils/split-map-utils.js +33 -30
  416. package/dist/utils/table-utils/data-container-utils.js +14 -15
  417. package/dist/utils/table-utils/data-row.js +65 -58
  418. package/dist/utils/table-utils/index.js +2 -2
  419. package/dist/utils/table-utils/indexed-data-container.js +173 -105
  420. package/dist/utils/table-utils/kepler-table.js +386 -362
  421. package/dist/utils/table-utils/row-data-container.js +164 -99
  422. package/dist/utils/utils.js +30 -29
  423. package/package.json +1 -1
@@ -35,237 +35,8 @@ var _defaultSettings = require("../constants/default-settings");
35
35
  * @param {Object} options.config this object will contain the full kepler.gl instance configuration {mapState, mapStyle, visState}
36
36
  * @param {string} version which version of Kepler.gl to load.
37
37
  */
38
- const exportMapToHTML = function (options) {
39
- let version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _defaultSettings.KEPLER_GL_VERSION;
40
- return `
41
- <!DOCTYPE html>
42
- <html>
43
- <head>
44
- <meta charset="UTF-8"/>
45
- <title>Kepler.gl embedded map</title>
46
-
47
- <!--Uber Font-->
48
- <link rel="stylesheet" href="https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/uber-fonts/4.0.0/superfine.css">
49
-
50
- <!--MapBox css-->
51
- <link href="https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.css" rel="stylesheet">
52
-
53
- <!-— facebook open graph tags -->
54
- <meta property="og:url" content="http://kepler.gl/" />
55
- <meta property="og:title" content="Large-scale WebGL-powered Geospatial Data Visualization Tool" />
56
- <meta property="og:description" content="Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets." />
57
- <meta property="og:site_name" content="kepler.gl" />
58
- <meta property="og:image" content="https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png" />
59
- <meta property="og:image:type" content="image/png" />
60
- <meta property="og:image:width" content="800" />
61
- <meta property="og:image:height" content="800" />
62
-
63
- <!-— twitter card tags -->
64
- <meta name="twitter:card" content="summary_large_image">
65
- <meta name="twitter:site" content="@uber">
66
- <meta name="twitter:creator" content="@uber">
67
- <meta name="twitter:title" content="Large-scale WebGL-powered Geospatial Data Visualization Tool">
68
- <meta name="twitter:description" content="Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.">
69
- <meta name="twitter:image" content="https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png" />
70
-
71
- <!-- Load React/Redux -->
72
- <script src="https://unpkg.com/react@16.8.4/umd/react.production.min.js" crossorigin></script>
73
- <script src="https://unpkg.com/react-dom@16.8.4/umd/react-dom.production.min.js" crossorigin></script>
74
- <script src="https://unpkg.com/redux@3.7.2/dist/redux.js" crossorigin></script>
75
- <script src="https://unpkg.com/react-redux@7.1.3/dist/react-redux.min.js" crossorigin></script>
76
- <script src="https://unpkg.com/styled-components@4.1.3/dist/styled-components.min.js" crossorigin></script>
77
-
78
- <!-- Load Kepler.gl -->
79
- <script src="https://unpkg.com/kepler.gl@${version}/umd/keplergl.min.js" crossorigin></script>
80
-
81
- <style type="text/css">
82
- body {margin: 0; padding: 0; overflow: hidden;}
83
- </style>
84
-
85
- <!--MapBox token-->
86
- <script>
87
- /**
88
- * Provide your MapBox Token
89
- **/
90
- const MAPBOX_TOKEN = '${options.mapboxApiAccessToken || 'PROVIDE_MAPBOX_TOKEN'}';
91
- const WARNING_MESSAGE = 'Please Provide a Mapbox Token in order to use Kepler.gl. Edit this file and fill out MAPBOX_TOKEN with your access key';
92
- </script>
93
-
94
- <!-- GA: Delete this as you wish, However to pat ourselves on the back, we only track anonymous pageview to understand how many people are using kepler.gl. -->
95
- <script>
96
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
97
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
98
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
99
- })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
100
- ga('create', 'UA-64694404-19', {
101
- 'storage': 'none',
102
- 'clientId': localStorage.getItem('ga:clientId')
103
- });
104
- ga(function(tracker) {
105
- localStorage.setItem('ga:clientId', tracker.get('clientId'));
106
- });
107
- ga('set', 'checkProtocolTask', null); // Disable file protocol checking.
108
- ga('set', 'checkStorageTask', null); // Disable cookie storage checking.
109
- ga('set', 'historyImportTask', null); // Disable history checking (requires reading from cookies).
110
- ga('set', 'page', 'keplergl-html');
111
- ga('send', 'pageview');
112
- </script>
113
- </head>
114
- <body>
115
- <!-- We will put our React component inside this div. -->
116
- <div id="app">
117
- <!-- Kepler.gl map will be placed here-->
118
- </div>
119
-
120
- <!-- Load our React component. -->
121
- <script>
122
- /* Validate Mapbox Token */
123
- if ((MAPBOX_TOKEN || '') === '' || MAPBOX_TOKEN === 'PROVIDE_MAPBOX_TOKEN') {
124
- alert(WARNING_MESSAGE);
125
- }
126
-
127
- /** STORE **/
128
- const reducers = (function createReducers(redux, keplerGl) {
129
- return redux.combineReducers({
130
- // mount keplerGl reducer
131
- keplerGl: keplerGl.keplerGlReducer.initialState({
132
- uiState: {
133
- readOnly: ${options.mode === _defaultSettings.EXPORT_HTML_MAP_MODES.READ},
134
- currentModal: null
135
- }
136
- })
137
- });
138
- }(Redux, KeplerGl));
139
-
140
- const middleWares = (function createMiddlewares(keplerGl) {
141
- return keplerGl.enhanceReduxMiddleware([
142
- // Add other middlewares here
143
- ]);
144
- }(KeplerGl));
145
-
146
- const enhancers = (function craeteEnhancers(redux, middles) {
147
- return redux.applyMiddleware(...middles);
148
- }(Redux, middleWares));
149
-
150
- const store = (function createStore(redux, enhancers) {
151
- const initialState = {};
152
-
153
- return redux.createStore(
154
- reducers,
155
- initialState,
156
- redux.compose(enhancers)
157
- );
158
- }(Redux, enhancers));
159
- /** END STORE **/
160
-
161
- /** COMPONENTS **/
162
- var KeplerElement = (function makeKeplerElement(react, keplerGl, mapboxToken) {
163
- var LogoSvg = function LogoSvg() {
164
- return react.createElement(
165
- "div",
166
- { className: "logo-container", style: {position: 'fixed', zIndex: 10000, padding: '4px'} },
167
- react.createElement(
168
- "svg",
169
- {
170
- className: "kepler_gl__logo",
171
- width: "107px",
172
- height: "21px",
173
- viewBox: "0 0 124 24"
174
- },
175
- react.createElement(
176
- "g",
177
- { transform: "translate(13.500000, 13.500000) rotate(45.000000) translate(-13.500000, -13.500000) translate(4.000000, 4.000000)" },
178
- react.createElement("rect", { x: "0", y: "6", transform: "matrix(2.535181e-06 1 -1 2.535181e-06 18.1107 6.0369)", fill: "#535C6C", width: "12.1", height: "12.1" }),
179
- react.createElement("rect", { x: "6", y: "0", transform: "matrix(2.535182e-06 1 -1 2.535182e-06 18.1107 -6.0369)", fill:"#1FBAD6", width: "12.1", height: "12.1" })
180
- ),
181
- react.createElement(
182
- "g",
183
- {},
184
- react.createElement("path", { fill:"#1FBAD6", d: "M39,8.7h2.2l-2.8,4.2l2.9,5.1H39l-2.4-4.2h-1.3V18h-2V5l2-0.1v7.3h1.3L39,8.7z" }),
185
- react.createElement("path", { fill:"#1FBAD6", d: "M42.4,13.3c0-1.5,0.4-2.7,1.1-3.5s1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C42.8,16.1,42.4,14.9,42.4,13.3z M46.6,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S47.2,10.1,46.6,10.1z" }),
186
- react.createElement("path", { fill:"#1FBAD6", d: "M57.1,18.2c-1,0-1.8-0.3-2.3-0.9l0,0l0,1.3v2.5h-2V8.7h1.5l0.3,0.9h0c0.3-0.3,0.7-0.6,1.2-0.7 c0.4-0.2,0.9-0.3,1.4-0.3c1.2,0,2.1,0.4,2.7,1.1c0.6,0.7,0.9,2,0.9,3.7c0,1.6-0.3,2.8-1,3.7C59.2,17.8,58.3,18.2,57.1,18.2z M56.7,10.3c-0.4,0-0.8,0.1-1.1,0.2c-0.3,0.2-0.6,0.4-0.8,0.7v4.3c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.7,0.3,1.1,0.3 c0.7,0,1.2-0.2,1.6-0.7c0.4-0.5,0.5-1.3,0.5-2.5c0-0.8-0.1-1.4-0.2-1.8s-0.4-0.7-0.7-0.9C57.6,10.4,57.2,10.3,56.7,10.3z" }),
187
- react.createElement("path", { fill:"#1FBAD6", d: "M63.2,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S63.2,16.8,63.2,16z" }),
188
- react.createElement("path", { fill:"#1FBAD6", d: "M68.2,13.3c0-1.5,0.4-2.7,1.1-3.5c0.7-0.8,1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C68.6,16.1,68.2,14.9,68.2,13.3z M72.4,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S73,10.1,72.4,10.1z" }),
189
- react.createElement("path", { fill:"#1FBAD6", d: "M80.2,8.7l0.1,1.7h0c0.3-0.6,0.7-1.1,1.1-1.4c0.4-0.3,1-0.5,1.6-0.5c0.4,0,0.7,0,1,0.1l-0.1,2 c-0.3-0.1-0.7-0.2-1-0.2c-0.7,0-1.3,0.3-1.7,0.8c-0.4,0.5-0.7,1.2-0.7,2.1V18h-2V8.7H80.2z" }),
190
- react.createElement("path", { fill:"#1FBAD6", d: "M83.8,17c0-0.8,0.4-1.2,1.2-1.2c0.8,0,1.2,0.4,1.2,1.2c0,0.8-0.4,1.1-1.2,1.1C84.2,18.2,83.8,17.8,83.8,17z" }),
191
- react.createElement("path", { fill:"#1FBAD6", d: "M88.5,18.7c0-0.8,0.4-1.4,1.2-1.8c-0.6-0.3-0.9-0.8-0.9-1.5c0-0.7,0.4-1.2,1.1-1.6c-0.3-0.3-0.6-0.6-0.7-0.9 c-0.2-0.4-0.2-0.8-0.2-1.3c0-1,0.3-1.8,0.9-2.3c0.6-0.5,1.6-0.8,2.8-0.8c0.5,0,1,0,1.4,0.1c0.4,0.1,0.8,0.2,1.1,0.4l2.4-0.2v1.5 h-1.5c0.2,0.4,0.2,0.8,0.2,1.3c0,1-0.3,1.7-0.9,2.2s-1.5,0.8-2.7,0.8c-0.7,0-1.2-0.1-1.6-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 c-0.1,0.1-0.1,0.2-0.1,0.4c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.6,0.2l2.7,0.2c1,0.1,1.7,0.3,2.2,0.6c0.5,0.3,0.8,0.9,0.8,1.7 c0,0.6-0.2,1.1-0.5,1.5c-0.4,0.4-0.9,0.8-1.5,1c-0.7,0.2-1.5,0.4-2.4,0.4c-1.3,0-2.3-0.2-3-0.6C88.8,20.1,88.5,19.5,88.5,18.7z M95.1,18.4c0-0.3-0.1-0.5-0.3-0.7s-0.6-0.2-1.1-0.3l-2.7-0.3c-0.2,0.1-0.4,0.3-0.5,0.5c-0.1,0.2-0.2,0.4-0.2,0.6 c0,0.4,0.2,0.8,0.5,1c0.4,0.2,1,0.3,1.8,0.3C94.2,19.5,95.1,19.2,95.1,18.4z M94.3,11.5c0-0.6-0.1-1-0.4-1.2 c-0.3-0.2-0.7-0.3-1.3-0.3c-0.7,0-1.1,0.1-1.4,0.3c-0.3,0.2-0.4,0.6-0.4,1.2s0.1,1,0.4,1.2c0.3,0.2,0.7,0.3,1.4,0.3 c0.6,0,1.1-0.1,1.3-0.4S94.3,12,94.3,11.5z" }),
192
- react.createElement("path", { fill:"#1FBAD6", d: "M99.4,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S99.4,16.8,99.4,16z" })
193
- )
194
- )
195
- );
196
- };
197
-
198
- return function App() {
199
- var rootElm = react.useRef(null);
200
- var _useState = react.useState({
201
- width: window.innerWidth,
202
- height: window.innerHeight
203
- });
204
- var windowDimension = _useState[0];
205
- var setDimension = _useState[1];
206
- react.useEffect(function sideEffect(){
207
- function handleResize() {
208
- setDimension({width: window.innerWidth, height: window.innerHeight});
209
- };
210
- window.addEventListener('resize', handleResize);
211
- return function() {window.removeEventListener('resize', handleResize);};
212
- }, []);
213
- return react.createElement(
214
- 'div',
215
- {style: {position: 'absolute', left: 0, width: '100vw', height: '100vh'}},
216
- ${options.mode === _defaultSettings.EXPORT_HTML_MAP_MODES.READ ? 'LogoSvg(),' : ''}
217
- react.createElement(keplerGl.KeplerGl, {
218
- mapboxApiAccessToken: mapboxToken,
219
- id: "map",
220
- width: windowDimension.width,
221
- height: windowDimension.height
222
- })
223
- )
224
- }
225
- }(React, KeplerGl, MAPBOX_TOKEN));
226
-
227
- const app = (function createReactReduxProvider(react, reactRedux, KeplerElement) {
228
- return react.createElement(
229
- reactRedux.Provider,
230
- {store},
231
- react.createElement(KeplerElement, null)
232
- )
233
- }(React, ReactRedux, KeplerElement));
234
- /** END COMPONENTS **/
235
-
236
- /** Render **/
237
- (function render(react, reactDOM, app) {
238
- reactDOM.render(app, document.getElementById('app'));
239
- }(React, ReactDOM, app));
240
- </script>
241
- <!-- The next script will show how to interact directly with Kepler map store -->
242
- <script>
243
- /**
244
- * Customize map.
245
- * In the following section you can use the store object to dispatch Kepler.gl actions
246
- * to add new data and customize behavior
247
- */
248
- (function customize(keplerGl, store) {
249
- const datasets = ${JSON.stringify(options.datasets)};
250
- const config = ${JSON.stringify(options.config)};
251
-
252
- const loadedData = keplerGl.KeplerGlSchema.load(
253
- datasets,
254
- config
255
- );
256
-
257
- store.dispatch(keplerGl.addDataToMap({
258
- datasets: loadedData.datasets,
259
- config: loadedData.config,
260
- options: {
261
- centerMap: false
262
- }
263
- }));
264
- }(KeplerGl, store))
265
- </script>
266
- </body>
267
- </html>
268
- `;
38
+ var exportMapToHTML = exports.exportMapToHTML = function exportMapToHTML(options) {
39
+ var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _defaultSettings.KEPLER_GL_VERSION;
40
+ return "\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"UTF-8\"/>\n <title>Kepler.gl embedded map</title>\n\n <!--Uber Font-->\n <link rel=\"stylesheet\" href=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/uber-fonts/4.0.0/superfine.css\">\n\n <!--MapBox css-->\n <link href=\"https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.css\" rel=\"stylesheet\">\n\n <!-\u2014 facebook open graph tags -->\n <meta property=\"og:url\" content=\"http://kepler.gl/\" />\n <meta property=\"og:title\" content=\"Large-scale WebGL-powered Geospatial Data Visualization Tool\" />\n <meta property=\"og:description\" content=\"Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.\" />\n <meta property=\"og:site_name\" content=\"kepler.gl\" />\n <meta property=\"og:image\" content=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png\" />\n <meta property=\"og:image:type\" content=\"image/png\" />\n <meta property=\"og:image:width\" content=\"800\" />\n <meta property=\"og:image:height\" content=\"800\" />\n\n <!-\u2014 twitter card tags -->\n <meta name=\"twitter:card\" content=\"summary_large_image\">\n <meta name=\"twitter:site\" content=\"@uber\">\n <meta name=\"twitter:creator\" content=\"@uber\">\n <meta name=\"twitter:title\" content=\"Large-scale WebGL-powered Geospatial Data Visualization Tool\">\n <meta name=\"twitter:description\" content=\"Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.\">\n <meta name=\"twitter:image\" content=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png\" />\n\n <!-- Load React/Redux -->\n <script src=\"https://unpkg.com/react@16.8.4/umd/react.production.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/react-dom@16.8.4/umd/react-dom.production.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/redux@3.7.2/dist/redux.js\" crossorigin></script>\n <script src=\"https://unpkg.com/react-redux@7.1.3/dist/react-redux.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/styled-components@4.1.3/dist/styled-components.min.js\" crossorigin></script>\n\n <!-- Load Kepler.gl -->\n <script src=\"https://unpkg.com/kepler.gl@".concat(version, "/umd/keplergl.min.js\" crossorigin></script>\n\n <style type=\"text/css\">\n body {margin: 0; padding: 0; overflow: hidden;}\n </style>\n\n <!--MapBox token-->\n <script>\n /**\n * Provide your MapBox Token\n **/\n const MAPBOX_TOKEN = '").concat(options.mapboxApiAccessToken || 'PROVIDE_MAPBOX_TOKEN', "';\n const WARNING_MESSAGE = 'Please Provide a Mapbox Token in order to use Kepler.gl. Edit this file and fill out MAPBOX_TOKEN with your access key';\n </script>\n\n <!-- GA: Delete this as you wish, However to pat ourselves on the back, we only track anonymous pageview to understand how many people are using kepler.gl. -->\n <script>\n (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n ga('create', 'UA-64694404-19', {\n 'storage': 'none',\n 'clientId': localStorage.getItem('ga:clientId')\n });\n ga(function(tracker) {\n localStorage.setItem('ga:clientId', tracker.get('clientId'));\n });\n ga('set', 'checkProtocolTask', null); // Disable file protocol checking.\n ga('set', 'checkStorageTask', null); // Disable cookie storage checking.\n ga('set', 'historyImportTask', null); // Disable history checking (requires reading from cookies).\n ga('set', 'page', 'keplergl-html');\n ga('send', 'pageview');\n </script>\n </head>\n <body>\n <!-- We will put our React component inside this div. -->\n <div id=\"app\">\n <!-- Kepler.gl map will be placed here-->\n </div>\n\n <!-- Load our React component. -->\n <script>\n /* Validate Mapbox Token */\n if ((MAPBOX_TOKEN || '') === '' || MAPBOX_TOKEN === 'PROVIDE_MAPBOX_TOKEN') {\n alert(WARNING_MESSAGE);\n }\n\n /** STORE **/\n const reducers = (function createReducers(redux, keplerGl) {\n return redux.combineReducers({\n // mount keplerGl reducer\n keplerGl: keplerGl.keplerGlReducer.initialState({\n uiState: {\n readOnly: ").concat(options.mode === _defaultSettings.EXPORT_HTML_MAP_MODES.READ, ",\n currentModal: null\n }\n })\n });\n }(Redux, KeplerGl));\n\n const middleWares = (function createMiddlewares(keplerGl) {\n return keplerGl.enhanceReduxMiddleware([\n // Add other middlewares here\n ]);\n }(KeplerGl));\n\n const enhancers = (function craeteEnhancers(redux, middles) {\n return redux.applyMiddleware(...middles);\n }(Redux, middleWares));\n\n const store = (function createStore(redux, enhancers) {\n const initialState = {};\n\n return redux.createStore(\n reducers,\n initialState,\n redux.compose(enhancers)\n );\n }(Redux, enhancers));\n /** END STORE **/\n\n /** COMPONENTS **/\n var KeplerElement = (function makeKeplerElement(react, keplerGl, mapboxToken) {\n var LogoSvg = function LogoSvg() {\n return react.createElement(\n \"div\",\n { className: \"logo-container\", style: {position: 'fixed', zIndex: 10000, padding: '4px'} },\n react.createElement(\n \"svg\",\n {\n className: \"kepler_gl__logo\",\n width: \"107px\",\n height: \"21px\",\n viewBox: \"0 0 124 24\"\n },\n react.createElement(\n \"g\",\n { transform: \"translate(13.500000, 13.500000) rotate(45.000000) translate(-13.500000, -13.500000) translate(4.000000, 4.000000)\" },\n react.createElement(\"rect\", { x: \"0\", y: \"6\", transform: \"matrix(2.535181e-06 1 -1 2.535181e-06 18.1107 6.0369)\", fill: \"#535C6C\", width: \"12.1\", height: \"12.1\" }),\n react.createElement(\"rect\", { x: \"6\", y: \"0\", transform: \"matrix(2.535182e-06 1 -1 2.535182e-06 18.1107 -6.0369)\", fill:\"#1FBAD6\", width: \"12.1\", height: \"12.1\" })\n ),\n react.createElement(\n \"g\",\n {},\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M39,8.7h2.2l-2.8,4.2l2.9,5.1H39l-2.4-4.2h-1.3V18h-2V5l2-0.1v7.3h1.3L39,8.7z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M42.4,13.3c0-1.5,0.4-2.7,1.1-3.5s1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C42.8,16.1,42.4,14.9,42.4,13.3z M46.6,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S47.2,10.1,46.6,10.1z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M57.1,18.2c-1,0-1.8-0.3-2.3-0.9l0,0l0,1.3v2.5h-2V8.7h1.5l0.3,0.9h0c0.3-0.3,0.7-0.6,1.2-0.7 c0.4-0.2,0.9-0.3,1.4-0.3c1.2,0,2.1,0.4,2.7,1.1c0.6,0.7,0.9,2,0.9,3.7c0,1.6-0.3,2.8-1,3.7C59.2,17.8,58.3,18.2,57.1,18.2z M56.7,10.3c-0.4,0-0.8,0.1-1.1,0.2c-0.3,0.2-0.6,0.4-0.8,0.7v4.3c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.7,0.3,1.1,0.3 c0.7,0,1.2-0.2,1.6-0.7c0.4-0.5,0.5-1.3,0.5-2.5c0-0.8-0.1-1.4-0.2-1.8s-0.4-0.7-0.7-0.9C57.6,10.4,57.2,10.3,56.7,10.3z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M63.2,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S63.2,16.8,63.2,16z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M68.2,13.3c0-1.5,0.4-2.7,1.1-3.5c0.7-0.8,1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C68.6,16.1,68.2,14.9,68.2,13.3z M72.4,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S73,10.1,72.4,10.1z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M80.2,8.7l0.1,1.7h0c0.3-0.6,0.7-1.1,1.1-1.4c0.4-0.3,1-0.5,1.6-0.5c0.4,0,0.7,0,1,0.1l-0.1,2 c-0.3-0.1-0.7-0.2-1-0.2c-0.7,0-1.3,0.3-1.7,0.8c-0.4,0.5-0.7,1.2-0.7,2.1V18h-2V8.7H80.2z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M83.8,17c0-0.8,0.4-1.2,1.2-1.2c0.8,0,1.2,0.4,1.2,1.2c0,0.8-0.4,1.1-1.2,1.1C84.2,18.2,83.8,17.8,83.8,17z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M88.5,18.7c0-0.8,0.4-1.4,1.2-1.8c-0.6-0.3-0.9-0.8-0.9-1.5c0-0.7,0.4-1.2,1.1-1.6c-0.3-0.3-0.6-0.6-0.7-0.9 c-0.2-0.4-0.2-0.8-0.2-1.3c0-1,0.3-1.8,0.9-2.3c0.6-0.5,1.6-0.8,2.8-0.8c0.5,0,1,0,1.4,0.1c0.4,0.1,0.8,0.2,1.1,0.4l2.4-0.2v1.5 h-1.5c0.2,0.4,0.2,0.8,0.2,1.3c0,1-0.3,1.7-0.9,2.2s-1.5,0.8-2.7,0.8c-0.7,0-1.2-0.1-1.6-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 c-0.1,0.1-0.1,0.2-0.1,0.4c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.6,0.2l2.7,0.2c1,0.1,1.7,0.3,2.2,0.6c0.5,0.3,0.8,0.9,0.8,1.7 c0,0.6-0.2,1.1-0.5,1.5c-0.4,0.4-0.9,0.8-1.5,1c-0.7,0.2-1.5,0.4-2.4,0.4c-1.3,0-2.3-0.2-3-0.6C88.8,20.1,88.5,19.5,88.5,18.7z M95.1,18.4c0-0.3-0.1-0.5-0.3-0.7s-0.6-0.2-1.1-0.3l-2.7-0.3c-0.2,0.1-0.4,0.3-0.5,0.5c-0.1,0.2-0.2,0.4-0.2,0.6 c0,0.4,0.2,0.8,0.5,1c0.4,0.2,1,0.3,1.8,0.3C94.2,19.5,95.1,19.2,95.1,18.4z M94.3,11.5c0-0.6-0.1-1-0.4-1.2 c-0.3-0.2-0.7-0.3-1.3-0.3c-0.7,0-1.1,0.1-1.4,0.3c-0.3,0.2-0.4,0.6-0.4,1.2s0.1,1,0.4,1.2c0.3,0.2,0.7,0.3,1.4,0.3 c0.6,0,1.1-0.1,1.3-0.4S94.3,12,94.3,11.5z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M99.4,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S99.4,16.8,99.4,16z\" })\n )\n )\n );\n };\n\n return function App() {\n var rootElm = react.useRef(null);\n var _useState = react.useState({\n width: window.innerWidth,\n height: window.innerHeight\n });\n var windowDimension = _useState[0];\n var setDimension = _useState[1];\n react.useEffect(function sideEffect(){\n function handleResize() {\n setDimension({width: window.innerWidth, height: window.innerHeight});\n };\n window.addEventListener('resize', handleResize);\n return function() {window.removeEventListener('resize', handleResize);};\n }, []);\n return react.createElement(\n 'div',\n {style: {position: 'absolute', left: 0, width: '100vw', height: '100vh'}},\n ").concat(options.mode === _defaultSettings.EXPORT_HTML_MAP_MODES.READ ? 'LogoSvg(),' : '', "\n react.createElement(keplerGl.KeplerGl, {\n mapboxApiAccessToken: mapboxToken,\n id: \"map\",\n width: windowDimension.width,\n height: windowDimension.height\n })\n )\n }\n }(React, KeplerGl, MAPBOX_TOKEN));\n\n const app = (function createReactReduxProvider(react, reactRedux, KeplerElement) {\n return react.createElement(\n reactRedux.Provider,\n {store},\n react.createElement(KeplerElement, null)\n )\n }(React, ReactRedux, KeplerElement));\n /** END COMPONENTS **/\n\n /** Render **/\n (function render(react, reactDOM, app) {\n reactDOM.render(app, document.getElementById('app'));\n }(React, ReactDOM, app));\n </script>\n <!-- The next script will show how to interact directly with Kepler map store -->\n <script>\n /**\n * Customize map.\n * In the following section you can use the store object to dispatch Kepler.gl actions\n * to add new data and customize behavior\n */\n (function customize(keplerGl, store) {\n const datasets = ").concat(JSON.stringify(options.datasets), ";\n const config = ").concat(JSON.stringify(options.config), ";\n\n const loadedData = keplerGl.KeplerGlSchema.load(\n datasets,\n config\n );\n\n store.dispatch(keplerGl.addDataToMap({\n datasets: loadedData.datasets,\n config: loadedData.config,\n options: {\n centerMap: false\n }\n }));\n }(KeplerGl, store))\n </script>\n </body>\n </html>\n ");
269
41
  };
270
- exports.exportMapToHTML = exportMapToHTML;
271
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdFNldHRpbmdzIiwicmVxdWlyZSIsImV4cG9ydE1hcFRvSFRNTCIsIm9wdGlvbnMiLCJ2ZXJzaW9uIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiS0VQTEVSX0dMX1ZFUlNJT04iLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1vZGUiLCJFWFBPUlRfSFRNTF9NQVBfTU9ERVMiLCJSRUFEIiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGFzZXRzIiwiY29uZmlnIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZXMvZXhwb3J0LW1hcC1odG1sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge0tFUExFUl9HTF9WRVJTSU9OLCBFWFBPUlRfSFRNTF9NQVBfTU9ERVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBodG1sIGZpbGUgd2hpY2ggd2lsbCBpbmxjdWRlIGtlcGxlciBhbmQgbWFwIGRhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9iamVjdCB0aGF0IGNvbGxlY3RzIGFsbCBuZWNlc3NhcnkgZGF0YSB0byAgY3JlYXRlIHRoZSBodG1sIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1hcGJveEFwaUFjY2Vzc1Rva2VuIE1hcGJveCB0b2tlbiB1c2VkIHRvIGZldGNoIG1hcGJveCB0aWxlc1xuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBvcHRpb25zLmRhdGFzZXRzIERhdGEgdG8gaW5jbHVkZSBpbiB0aGUgbWFwXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5jb25maWcgdGhpcyBvYmplY3Qgd2lsbCBjb250YWluIHRoZSBmdWxsIGtlcGxlci5nbCBpbnN0YW5jZSBjb25maWd1cmF0aW9uIHttYXBTdGF0ZSwgbWFwU3R5bGUsIHZpc1N0YXRlfVxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gd2hpY2ggdmVyc2lvbiBvZiBLZXBsZXIuZ2wgdG8gbG9hZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4cG9ydE1hcFRvSFRNTCA9IChvcHRpb25zLCB2ZXJzaW9uID0gS0VQTEVSX0dMX1ZFUlNJT04pID0+IHtcbiAgcmV0dXJuIGBcbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIi8+XG4gICAgICAgIDx0aXRsZT5LZXBsZXIuZ2wgZW1iZWRkZWQgbWFwPC90aXRsZT5cblxuICAgICAgICA8IS0tVWJlciBGb250LS0+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiaHR0cHM6Ly9kMWEzZjRzcGF6enJwNC5jbG91ZGZyb250Lm5ldC9rZXBsZXIuZ2wvdWJlci1mb250cy80LjAuMC9zdXBlcmZpbmUuY3NzXCI+XG5cbiAgICAgICAgPCEtLU1hcEJveCBjc3MtLT5cbiAgICAgICAgPGxpbmsgaHJlZj1cImh0dHBzOi8vYXBpLnRpbGVzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3YxLjEuMS9tYXBib3gtZ2wuY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPlxuXG4gICAgICAgIDwhLeKAlCBmYWNlYm9vayBvcGVuIGdyYXBoIHRhZ3MgLS0+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6dXJsXCIgY29udGVudD1cImh0dHA6Ly9rZXBsZXIuZ2wvXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzp0aXRsZVwiIGNvbnRlbnQ9XCJMYXJnZS1zY2FsZSBXZWJHTC1wb3dlcmVkIEdlb3NwYXRpYWwgRGF0YSBWaXN1YWxpemF0aW9uIFRvb2xcIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOmRlc2NyaXB0aW9uXCIgY29udGVudD1cIktlcGxlci5nbCBpcyBhIHBvd2VyZnVsIHdlYi1iYXNlZCBnZW9zcGF0aWFsIGRhdGEgYW5hbHlzaXMgdG9vbC4gQnVpbHQgb24gYSBoaWdoIHBlcmZvcm1hbmNlIHJlbmRlcmluZyBlbmdpbmUgYW5kIGRlc2lnbmVkIGZvciBsYXJnZS1zY2FsZSBkYXRhIHNldHMuXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzpzaXRlX25hbWVcIiBjb250ZW50PVwia2VwbGVyLmdsXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzppbWFnZVwiIGNvbnRlbnQ9XCJodHRwczovL2QxYTNmNHNwYXp6cnA0LmNsb3VkZnJvbnQubmV0L2tlcGxlci5nbC9rZXBsZXIuZ2wtbWV0YS10YWcucG5nXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzppbWFnZTp0eXBlXCIgY29udGVudD1cImltYWdlL3BuZ1wiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6aW1hZ2U6d2lkdGhcIiBjb250ZW50PVwiODAwXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzppbWFnZTpoZWlnaHRcIiBjb250ZW50PVwiODAwXCIgLz5cblxuICAgICAgICA8IS3igJQgdHdpdHRlciBjYXJkIHRhZ3MgLS0+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmNhcmRcIiBjb250ZW50PVwic3VtbWFyeV9sYXJnZV9pbWFnZVwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidHdpdHRlcjpzaXRlXCIgY29udGVudD1cIkB1YmVyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmNyZWF0b3JcIiBjb250ZW50PVwiQHViZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInR3aXR0ZXI6dGl0bGVcIiBjb250ZW50PVwiTGFyZ2Utc2NhbGUgV2ViR0wtcG93ZXJlZCBHZW9zcGF0aWFsIERhdGEgVmlzdWFsaXphdGlvbiBUb29sXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmRlc2NyaXB0aW9uXCIgY29udGVudD1cIktlcGxlci5nbCBpcyBhIHBvd2VyZnVsIHdlYi1iYXNlZCBnZW9zcGF0aWFsIGRhdGEgYW5hbHlzaXMgdG9vbC4gQnVpbHQgb24gYSBoaWdoIHBlcmZvcm1hbmNlIHJlbmRlcmluZyBlbmdpbmUgYW5kIGRlc2lnbmVkIGZvciBsYXJnZS1zY2FsZSBkYXRhIHNldHMuXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmltYWdlXCIgY29udGVudD1cImh0dHBzOi8vZDFhM2Y0c3BhenpycDQuY2xvdWRmcm9udC5uZXQva2VwbGVyLmdsL2tlcGxlci5nbC1tZXRhLXRhZy5wbmdcIiAvPlxuXG4gICAgICAgIDwhLS0gTG9hZCBSZWFjdC9SZWR1eCAtLT5cbiAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL3VucGtnLmNvbS9yZWFjdEAxNi44LjQvdW1kL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vcmVhY3QtZG9tQDE2LjguNC91bWQvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vcmVkdXhAMy43LjIvZGlzdC9yZWR1eC5qc1wiIGNyb3Nzb3JpZ2luPjwvc2NyaXB0PlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL3JlYWN0LXJlZHV4QDcuMS4zL2Rpc3QvcmVhY3QtcmVkdXgubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vc3R5bGVkLWNvbXBvbmVudHNANC4xLjMvZGlzdC9zdHlsZWQtY29tcG9uZW50cy5taW4uanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cblxuICAgICAgICA8IS0tIExvYWQgS2VwbGVyLmdsIC0tPlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL2tlcGxlci5nbEAke3ZlcnNpb259L3VtZC9rZXBsZXJnbC5taW4uanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cblxuICAgICAgICA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4gICAgICAgICAgYm9keSB7bWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBvdmVyZmxvdzogaGlkZGVuO31cbiAgICAgICAgPC9zdHlsZT5cblxuICAgICAgICA8IS0tTWFwQm94IHRva2VuLS0+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUHJvdmlkZSB5b3VyIE1hcEJveCBUb2tlblxuICAgICAgICAgICAqKi9cbiAgICAgICAgICBjb25zdCBNQVBCT1hfVE9LRU4gPSAnJHtvcHRpb25zLm1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICdQUk9WSURFX01BUEJPWF9UT0tFTid9JztcbiAgICAgICAgICBjb25zdCBXQVJOSU5HX01FU1NBR0UgPSAnUGxlYXNlIFByb3ZpZGUgYSBNYXBib3ggVG9rZW4gaW4gb3JkZXIgdG8gdXNlIEtlcGxlci5nbC4gRWRpdCB0aGlzIGZpbGUgYW5kIGZpbGwgb3V0IE1BUEJPWF9UT0tFTiB3aXRoIHlvdXIgYWNjZXNzIGtleSc7XG4gICAgICAgIDwvc2NyaXB0PlxuXG4gICAgICAgIDwhLS0gR0E6IERlbGV0ZSB0aGlzIGFzIHlvdSB3aXNoLCBIb3dldmVyIHRvIHBhdCBvdXJzZWx2ZXMgb24gdGhlIGJhY2ssIHdlIG9ubHkgdHJhY2sgYW5vbnltb3VzIHBhZ2V2aWV3IHRvIHVuZGVyc3RhbmQgaG93IG1hbnkgcGVvcGxlIGFyZSB1c2luZyBrZXBsZXIuZ2wuIC0tPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXtcbiAgICAgICAgICAoaVtyXS5xPWlbcl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVtyXS5sPTEqbmV3IERhdGUoKTthPXMuY3JlYXRlRWxlbWVudChvKSxcbiAgICAgICAgICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG0pXG4gICAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpO1xuICAgICAgICAgIGdhKCdjcmVhdGUnLCAnVUEtNjQ2OTQ0MDQtMTknLCB7XG4gICAgICAgICAgICAnc3RvcmFnZSc6ICdub25lJyxcbiAgICAgICAgICAgICdjbGllbnRJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdnYTpjbGllbnRJZCcpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ2EoZnVuY3Rpb24odHJhY2tlcikge1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ2E6Y2xpZW50SWQnLCB0cmFja2VyLmdldCgnY2xpZW50SWQnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ2EoJ3NldCcsICdjaGVja1Byb3RvY29sVGFzaycsIG51bGwpOyAvLyBEaXNhYmxlIGZpbGUgcHJvdG9jb2wgY2hlY2tpbmcuXG4gICAgICAgICAgZ2EoJ3NldCcsICdjaGVja1N0b3JhZ2VUYXNrJywgbnVsbCk7IC8vIERpc2FibGUgY29va2llIHN0b3JhZ2UgY2hlY2tpbmcuXG4gICAgICAgICAgZ2EoJ3NldCcsICdoaXN0b3J5SW1wb3J0VGFzaycsIG51bGwpOyAvLyBEaXNhYmxlIGhpc3RvcnkgY2hlY2tpbmcgKHJlcXVpcmVzIHJlYWRpbmcgZnJvbSBjb29raWVzKS5cbiAgICAgICAgICBnYSgnc2V0JywgJ3BhZ2UnLCAna2VwbGVyZ2wtaHRtbCcpO1xuICAgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7XG4gICAgICAgIDwvc2NyaXB0PlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDwhLS0gV2Ugd2lsbCBwdXQgb3VyIFJlYWN0IGNvbXBvbmVudCBpbnNpZGUgdGhpcyBkaXYuIC0tPlxuICAgICAgICA8ZGl2IGlkPVwiYXBwXCI+XG4gICAgICAgICAgPCEtLSBLZXBsZXIuZ2wgbWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBMb2FkIG91ciBSZWFjdCBjb21wb25lbnQuIC0tPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIC8qIFZhbGlkYXRlIE1hcGJveCBUb2tlbiAqL1xuICAgICAgICAgIGlmICgoTUFQQk9YX1RPS0VOIHx8ICcnKSA9PT0gJycgfHwgTUFQQk9YX1RPS0VOID09PSAnUFJPVklERV9NQVBCT1hfVE9LRU4nKSB7XG4gICAgICAgICAgICBhbGVydChXQVJOSU5HX01FU1NBR0UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qKiBTVE9SRSAqKi9cbiAgICAgICAgICBjb25zdCByZWR1Y2VycyA9IChmdW5jdGlvbiBjcmVhdGVSZWR1Y2VycyhyZWR1eCwga2VwbGVyR2wpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1eC5jb21iaW5lUmVkdWNlcnMoe1xuICAgICAgICAgICAgICAvLyBtb3VudCBrZXBsZXJHbCByZWR1Y2VyXG4gICAgICAgICAgICAgIGtlcGxlckdsOiBrZXBsZXJHbC5rZXBsZXJHbFJlZHVjZXIuaW5pdGlhbFN0YXRlKHtcbiAgICAgICAgICAgICAgICB1aVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgICByZWFkT25seTogJHtvcHRpb25zLm1vZGUgPT09IEVYUE9SVF9IVE1MX01BUF9NT0RFUy5SRUFEfSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2RhbDogbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0oUmVkdXgsIEtlcGxlckdsKSk7XG5cbiAgICAgICAgICBjb25zdCBtaWRkbGVXYXJlcyA9IChmdW5jdGlvbiBjcmVhdGVNaWRkbGV3YXJlcyhrZXBsZXJHbCkge1xuICAgICAgICAgICAgcmV0dXJuIGtlcGxlckdsLmVuaGFuY2VSZWR1eE1pZGRsZXdhcmUoW1xuICAgICAgICAgICAgICAvLyBBZGQgb3RoZXIgbWlkZGxld2FyZXMgaGVyZVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfShLZXBsZXJHbCkpO1xuXG4gICAgICAgICAgY29uc3QgZW5oYW5jZXJzID0gKGZ1bmN0aW9uIGNyYWV0ZUVuaGFuY2VycyhyZWR1eCwgbWlkZGxlcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHV4LmFwcGx5TWlkZGxld2FyZSguLi5taWRkbGVzKTtcbiAgICAgICAgICB9KFJlZHV4LCBtaWRkbGVXYXJlcykpO1xuXG4gICAgICAgICAgY29uc3Qgc3RvcmUgPSAoZnVuY3Rpb24gY3JlYXRlU3RvcmUocmVkdXgsIGVuaGFuY2Vycykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge307XG5cbiAgICAgICAgICAgIHJldHVybiByZWR1eC5jcmVhdGVTdG9yZShcbiAgICAgICAgICAgICAgcmVkdWNlcnMsXG4gICAgICAgICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgICAgICAgICAgcmVkdXguY29tcG9zZShlbmhhbmNlcnMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0oUmVkdXgsIGVuaGFuY2VycykpO1xuICAgICAgICAgIC8qKiBFTkQgU1RPUkUgKiovXG5cbiAgICAgICAgICAvKiogQ09NUE9ORU5UUyAqKi9cbiAgICAgICAgICB2YXIgS2VwbGVyRWxlbWVudCA9IChmdW5jdGlvbiBtYWtlS2VwbGVyRWxlbWVudChyZWFjdCwga2VwbGVyR2wsIG1hcGJveFRva2VuKSB7XG4gICAgICAgICAgICB2YXIgTG9nb1N2ZyA9IGZ1bmN0aW9uIExvZ29TdmcoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6IFwibG9nby1jb250YWluZXJcIiwgc3R5bGU6IHtwb3NpdGlvbjogJ2ZpeGVkJywgekluZGV4OiAxMDAwMCwgcGFkZGluZzogJzRweCd9IH0sXG4gICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImtlcGxlcl9nbF9fbG9nb1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwN3B4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIxcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgIFwiZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxMy41MDAwMDAsIDEzLjUwMDAwMCkgcm90YXRlKDQ1LjAwMDAwMCkgdHJhbnNsYXRlKC0xMy41MDAwMDAsIC0xMy41MDAwMDApIHRyYW5zbGF0ZSg0LjAwMDAwMCwgNC4wMDAwMDApXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7IHg6IFwiMFwiLCB5OiBcIjZcIiwgdHJhbnNmb3JtOiBcIm1hdHJpeCgyLjUzNTE4MWUtMDYgMSAtMSAyLjUzNTE4MWUtMDYgMTguMTEwNyA2LjAzNjkpXCIsIGZpbGw6IFwiIzUzNUM2Q1wiLCB3aWR0aDogXCIxMi4xXCIsIGhlaWdodDogXCIxMi4xXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwgeyB4OiBcIjZcIiwgeTogXCIwXCIsIHRyYW5zZm9ybTogXCJtYXRyaXgoMi41MzUxODJlLTA2IDEgLTEgMi41MzUxODJlLTA2IDE4LjExMDcgLTYuMDM2OSlcIiwgZmlsbDpcIiMxRkJBRDZcIiwgd2lkdGg6IFwiMTIuMVwiLCBoZWlnaHQ6IFwiMTIuMVwiIH0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk0zOSw4LjdoMi4ybC0yLjgsNC4ybDIuOSw1LjFIMzlsLTIuNC00LjJoLTEuM1YxOGgtMlY1bDItMC4xdjcuM2gxLjNMMzksOC43elwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNNDIuNCwxMy4zYzAtMS41LDAuNC0yLjcsMS4xLTMuNXMxLjgtMS4yLDMuMS0xLjJjMS4zLDAsMi4yLDAuNCwyLjgsMS4xYzAuNiwwLjcsMC45LDEuOCwwLjksMy4zIGMwLDAuNCwwLDAuOCwwLDEuMWgtNS44YzAsMS42LDAuOCwyLjQsMi40LDIuNGMxLDAsMi0wLjIsMi45LTAuNmwwLjIsMS43Yy0wLjQsMC4yLTAuOSwwLjQtMS40LDAuNXMtMS4xLDAuMi0xLjcsMC4yIGMtMS41LDAtMi42LTAuNC0zLjMtMS4yQzQyLjgsMTYuMSw0Mi40LDE0LjksNDIuNCwxMy4zeiBNNDYuNiwxMC4xYy0wLjcsMC0xLjIsMC4yLTEuNSwwLjVjLTAuNCwwLjQtMC42LDAuOS0wLjYsMS43aDQgYzAtMC44LTAuMi0xLjQtMC41LTEuN1M0Ny4yLDEwLjEsNDYuNiwxMC4xelwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNNTcuMSwxOC4yYy0xLDAtMS44LTAuMy0yLjMtMC45bDAsMGwwLDEuM3YyLjVoLTJWOC43aDEuNWwwLjMsMC45aDBjMC4zLTAuMywwLjctMC42LDEuMi0wLjcgYzAuNC0wLjIsMC45LTAuMywxLjQtMC4zYzEuMiwwLDIuMSwwLjQsMi43LDEuMWMwLjYsMC43LDAuOSwyLDAuOSwzLjdjMCwxLjYtMC4zLDIuOC0xLDMuN0M1OS4yLDE3LjgsNTguMywxOC4yLDU3LjEsMTguMnogTTU2LjcsMTAuM2MtMC40LDAtMC44LDAuMS0xLjEsMC4yYy0wLjMsMC4yLTAuNiwwLjQtMC44LDAuN3Y0LjNjMC4yLDAuMywwLjQsMC41LDAuNywwLjdjMC4zLDAuMiwwLjcsMC4zLDEuMSwwLjMgYzAuNywwLDEuMi0wLjIsMS42LTAuN2MwLjQtMC41LDAuNS0xLjMsMC41LTIuNWMwLTAuOC0wLjEtMS40LTAuMi0xLjhzLTAuNC0wLjctMC43LTAuOUM1Ny42LDEwLjQsNTcuMiwxMC4zLDU2LjcsMTAuM3pcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTYzLjIsMTZWNWwyLTAuMXYxMC44YzAsMC4zLDAuMSwwLjUsMC4yLDAuNmMwLjEsMC4xLDAuMywwLjIsMC42LDAuMmMwLjMsMCwwLjYsMCwwLjktMC4xVjE4IGMtMC40LDAuMS0xLDAuMi0xLjYsMC4yYy0wLjgsMC0xLjMtMC4yLTEuNy0wLjVTNjMuMiwxNi44LDYzLjIsMTZ6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk02OC4yLDEzLjNjMC0xLjUsMC40LTIuNywxLjEtMy41YzAuNy0wLjgsMS44LTEuMiwzLjEtMS4yYzEuMywwLDIuMiwwLjQsMi44LDEuMWMwLjYsMC43LDAuOSwxLjgsMC45LDMuMyBjMCwwLjQsMCwwLjgsMCwxLjFoLTUuOGMwLDEuNiwwLjgsMi40LDIuNCwyLjRjMSwwLDItMC4yLDIuOS0wLjZsMC4yLDEuN2MtMC40LDAuMi0wLjksMC40LTEuNCwwLjVzLTEuMSwwLjItMS43LDAuMiBjLTEuNSwwLTIuNi0wLjQtMy4zLTEuMkM2OC42LDE2LjEsNjguMiwxNC45LDY4LjIsMTMuM3ogTTcyLjQsMTAuMWMtMC43LDAtMS4yLDAuMi0xLjUsMC41Yy0wLjQsMC40LTAuNiwwLjktMC42LDEuN2g0IGMwLTAuOC0wLjItMS40LTAuNS0xLjdTNzMsMTAuMSw3Mi40LDEwLjF6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk04MC4yLDguN2wwLjEsMS43aDBjMC4zLTAuNiwwLjctMS4xLDEuMS0xLjRjMC40LTAuMywxLTAuNSwxLjYtMC41YzAuNCwwLDAuNywwLDEsMC4xbC0wLjEsMiBjLTAuMy0wLjEtMC43LTAuMi0xLTAuMmMtMC43LDAtMS4zLDAuMy0xLjcsMC44Yy0wLjQsMC41LTAuNywxLjItMC43LDIuMVYxOGgtMlY4LjdIODAuMnpcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTgzLjgsMTdjMC0wLjgsMC40LTEuMiwxLjItMS4yYzAuOCwwLDEuMiwwLjQsMS4yLDEuMmMwLDAuOC0wLjQsMS4xLTEuMiwxLjFDODQuMiwxOC4yLDgzLjgsMTcuOCw4My44LDE3elwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNODguNSwxOC43YzAtMC44LDAuNC0xLjQsMS4yLTEuOGMtMC42LTAuMy0wLjktMC44LTAuOS0xLjVjMC0wLjcsMC40LTEuMiwxLjEtMS42Yy0wLjMtMC4zLTAuNi0wLjYtMC43LTAuOSBjLTAuMi0wLjQtMC4yLTAuOC0wLjItMS4zYzAtMSwwLjMtMS44LDAuOS0yLjNjMC42LTAuNSwxLjYtMC44LDIuOC0wLjhjMC41LDAsMSwwLDEuNCwwLjFjMC40LDAuMSwwLjgsMC4yLDEuMSwwLjRsMi40LTAuMnYxLjUgaC0xLjVjMC4yLDAuNCwwLjIsMC44LDAuMiwxLjNjMCwxLTAuMywxLjctMC45LDIuMnMtMS41LDAuOC0yLjcsMC44Yy0wLjcsMC0xLjItMC4xLTEuNi0wLjJjLTAuMSwwLjEtMC4yLDAuMi0wLjMsMC4zIGMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjRjMCwwLjIsMC4xLDAuMywwLjIsMC40YzAuMSwwLjEsMC4zLDAuMiwwLjYsMC4ybDIuNywwLjJjMSwwLjEsMS43LDAuMywyLjIsMC42YzAuNSwwLjMsMC44LDAuOSwwLjgsMS43IGMwLDAuNi0wLjIsMS4xLTAuNSwxLjVjLTAuNCwwLjQtMC45LDAuOC0xLjUsMWMtMC43LDAuMi0xLjUsMC40LTIuNCwwLjRjLTEuMywwLTIuMy0wLjItMy0wLjZDODguOCwyMC4xLDg4LjUsMTkuNSw4OC41LDE4Ljd6IE05NS4xLDE4LjRjMC0wLjMtMC4xLTAuNS0wLjMtMC43cy0wLjYtMC4yLTEuMS0wLjNsLTIuNy0wLjNjLTAuMiwwLjEtMC40LDAuMy0wLjUsMC41Yy0wLjEsMC4yLTAuMiwwLjQtMC4yLDAuNiBjMCwwLjQsMC4yLDAuOCwwLjUsMWMwLjQsMC4yLDEsMC4zLDEuOCwwLjNDOTQuMiwxOS41LDk1LjEsMTkuMiw5NS4xLDE4LjR6IE05NC4zLDExLjVjMC0wLjYtMC4xLTEtMC40LTEuMiBjLTAuMy0wLjItMC43LTAuMy0xLjMtMC4zYy0wLjcsMC0xLjEsMC4xLTEuNCwwLjNjLTAuMywwLjItMC40LDAuNi0wLjQsMS4yczAuMSwxLDAuNCwxLjJjMC4zLDAuMiwwLjcsMC4zLDEuNCwwLjMgYzAuNiwwLDEuMS0wLjEsMS4zLTAuNFM5NC4zLDEyLDk0LjMsMTEuNXpcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTk5LjQsMTZWNWwyLTAuMXYxMC44YzAsMC4zLDAuMSwwLjUsMC4yLDAuNmMwLjEsMC4xLDAuMywwLjIsMC42LDAuMmMwLjMsMCwwLjYsMCwwLjktMC4xVjE4IGMtMC40LDAuMS0xLDAuMi0xLjYsMC4yYy0wLjgsMC0xLjMtMC4yLTEuNy0wLjVTOTkuNCwxNi44LDk5LjQsMTZ6XCIgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBBcHAoKSB7XG4gICAgICAgICAgICAgIHZhciByb290RWxtID0gcmVhY3QudXNlUmVmKG51bGwpO1xuICAgICAgICAgICAgICB2YXIgX3VzZVN0YXRlID0gcmVhY3QudXNlU3RhdGUoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdmFyIHdpbmRvd0RpbWVuc2lvbiA9IF91c2VTdGF0ZVswXTtcbiAgICAgICAgICAgICAgdmFyIHNldERpbWVuc2lvbiA9IF91c2VTdGF0ZVsxXTtcbiAgICAgICAgICAgICAgcmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uIHNpZGVFZmZlY3QoKXtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICAgICAgICAgICAgICBzZXREaW1lbnNpb24oe3dpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCwgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHR9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTt9O1xuICAgICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICAgIHJldHVybiByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgIHtzdHlsZToge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAwLCB3aWR0aDogJzEwMHZ3JywgaGVpZ2h0OiAnMTAwdmgnfX0sXG4gICAgICAgICAgICAgICAgJHtvcHRpb25zLm1vZGUgPT09IEVYUE9SVF9IVE1MX01BUF9NT0RFUy5SRUFEID8gJ0xvZ29TdmcoKSwnIDogJyd9XG4gICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChrZXBsZXJHbC5LZXBsZXJHbCwge1xuICAgICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcGJveFRva2VuLFxuICAgICAgICAgICAgICAgICAgaWQ6IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogd2luZG93RGltZW5zaW9uLndpZHRoLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB3aW5kb3dEaW1lbnNpb24uaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0oUmVhY3QsIEtlcGxlckdsLCBNQVBCT1hfVE9LRU4pKTtcblxuICAgICAgICAgIGNvbnN0IGFwcCA9IChmdW5jdGlvbiBjcmVhdGVSZWFjdFJlZHV4UHJvdmlkZXIocmVhY3QsIHJlYWN0UmVkdXgsIEtlcGxlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICByZWFjdFJlZHV4LlByb3ZpZGVyLFxuICAgICAgICAgICAgICB7c3RvcmV9LFxuICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KEtlcGxlckVsZW1lbnQsIG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfShSZWFjdCwgUmVhY3RSZWR1eCwgS2VwbGVyRWxlbWVudCkpO1xuICAgICAgICAgIC8qKiBFTkQgQ09NUE9ORU5UUyAqKi9cblxuICAgICAgICAgIC8qKiBSZW5kZXIgKiovXG4gICAgICAgICAgKGZ1bmN0aW9uIHJlbmRlcihyZWFjdCwgcmVhY3RET00sIGFwcCkge1xuICAgICAgICAgICAgcmVhY3RET00ucmVuZGVyKGFwcCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpKTtcbiAgICAgICAgICB9KFJlYWN0LCBSZWFjdERPTSwgYXBwKSk7XG4gICAgICAgIDwvc2NyaXB0PlxuICAgICAgICA8IS0tIFRoZSBuZXh0IHNjcmlwdCB3aWxsIHNob3cgaG93IHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggS2VwbGVyIG1hcCBzdG9yZSAtLT5cbiAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDdXN0b21pemUgbWFwLlxuICAgICAgICAgICAqIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiB5b3UgY2FuIHVzZSB0aGUgc3RvcmUgb2JqZWN0IHRvIGRpc3BhdGNoIEtlcGxlci5nbCBhY3Rpb25zXG4gICAgICAgICAgICogdG8gYWRkIG5ldyBkYXRhIGFuZCBjdXN0b21pemUgYmVoYXZpb3JcbiAgICAgICAgICAgKi9cbiAgICAgICAgICAoZnVuY3Rpb24gY3VzdG9taXplKGtlcGxlckdsLCBzdG9yZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNldHMgPSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YXNldHMpfTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucy5jb25maWcpfTtcblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkRGF0YSA9IGtlcGxlckdsLktlcGxlckdsU2NoZW1hLmxvYWQoXG4gICAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGtlcGxlckdsLmFkZERhdGFUb01hcCh7XG4gICAgICAgICAgICAgIGRhdGFzZXRzOiBsb2FkZWREYXRhLmRhdGFzZXRzLFxuICAgICAgICAgICAgICBjb25maWc6IGxvYWRlZERhdGEuY29uZmlnLFxuICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgY2VudGVyTWFwOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfShLZXBsZXJHbCwgc3RvcmUpKVxuICAgICAgICA8L3NjcmlwdD5cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gIGA7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFxQkEsSUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQXJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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
42
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdFNldHRpbmdzIiwicmVxdWlyZSIsImV4cG9ydE1hcFRvSFRNTCIsImV4cG9ydHMiLCJvcHRpb25zIiwidmVyc2lvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIktFUExFUl9HTF9WRVJTSU9OIiwiY29uY2F0IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhc2V0cyIsImNvbmZpZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZXMvZXhwb3J0LW1hcC1odG1sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQge0tFUExFUl9HTF9WRVJTSU9OLCBFWFBPUlRfSFRNTF9NQVBfTU9ERVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBodG1sIGZpbGUgd2hpY2ggd2lsbCBpbmxjdWRlIGtlcGxlciBhbmQgbWFwIGRhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9iamVjdCB0aGF0IGNvbGxlY3RzIGFsbCBuZWNlc3NhcnkgZGF0YSB0byAgY3JlYXRlIHRoZSBodG1sIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1hcGJveEFwaUFjY2Vzc1Rva2VuIE1hcGJveCB0b2tlbiB1c2VkIHRvIGZldGNoIG1hcGJveCB0aWxlc1xuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBvcHRpb25zLmRhdGFzZXRzIERhdGEgdG8gaW5jbHVkZSBpbiB0aGUgbWFwXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5jb25maWcgdGhpcyBvYmplY3Qgd2lsbCBjb250YWluIHRoZSBmdWxsIGtlcGxlci5nbCBpbnN0YW5jZSBjb25maWd1cmF0aW9uIHttYXBTdGF0ZSwgbWFwU3R5bGUsIHZpc1N0YXRlfVxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gd2hpY2ggdmVyc2lvbiBvZiBLZXBsZXIuZ2wgdG8gbG9hZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4cG9ydE1hcFRvSFRNTCA9IChvcHRpb25zLCB2ZXJzaW9uID0gS0VQTEVSX0dMX1ZFUlNJT04pID0+IHtcbiAgcmV0dXJuIGBcbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIi8+XG4gICAgICAgIDx0aXRsZT5LZXBsZXIuZ2wgZW1iZWRkZWQgbWFwPC90aXRsZT5cblxuICAgICAgICA8IS0tVWJlciBGb250LS0+XG4gICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiaHR0cHM6Ly9kMWEzZjRzcGF6enJwNC5jbG91ZGZyb250Lm5ldC9rZXBsZXIuZ2wvdWJlci1mb250cy80LjAuMC9zdXBlcmZpbmUuY3NzXCI+XG5cbiAgICAgICAgPCEtLU1hcEJveCBjc3MtLT5cbiAgICAgICAgPGxpbmsgaHJlZj1cImh0dHBzOi8vYXBpLnRpbGVzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3YxLjEuMS9tYXBib3gtZ2wuY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPlxuXG4gICAgICAgIDwhLeKAlCBmYWNlYm9vayBvcGVuIGdyYXBoIHRhZ3MgLS0+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6dXJsXCIgY29udGVudD1cImh0dHA6Ly9rZXBsZXIuZ2wvXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzp0aXRsZVwiIGNvbnRlbnQ9XCJMYXJnZS1zY2FsZSBXZWJHTC1wb3dlcmVkIEdlb3NwYXRpYWwgRGF0YSBWaXN1YWxpemF0aW9uIFRvb2xcIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOmRlc2NyaXB0aW9uXCIgY29udGVudD1cIktlcGxlci5nbCBpcyBhIHBvd2VyZnVsIHdlYi1iYXNlZCBnZW9zcGF0aWFsIGRhdGEgYW5hbHlzaXMgdG9vbC4gQnVpbHQgb24gYSBoaWdoIHBlcmZvcm1hbmNlIHJlbmRlcmluZyBlbmdpbmUgYW5kIGRlc2lnbmVkIGZvciBsYXJnZS1zY2FsZSBkYXRhIHNldHMuXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzpzaXRlX25hbWVcIiBjb250ZW50PVwia2VwbGVyLmdsXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzppbWFnZVwiIGNvbnRlbnQ9XCJodHRwczovL2QxYTNmNHNwYXp6cnA0LmNsb3VkZnJvbnQubmV0L2tlcGxlci5nbC9rZXBsZXIuZ2wtbWV0YS10YWcucG5nXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzppbWFnZTp0eXBlXCIgY29udGVudD1cImltYWdlL3BuZ1wiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6aW1hZ2U6d2lkdGhcIiBjb250ZW50PVwiODAwXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzppbWFnZTpoZWlnaHRcIiBjb250ZW50PVwiODAwXCIgLz5cblxuICAgICAgICA8IS3igJQgdHdpdHRlciBjYXJkIHRhZ3MgLS0+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmNhcmRcIiBjb250ZW50PVwic3VtbWFyeV9sYXJnZV9pbWFnZVwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidHdpdHRlcjpzaXRlXCIgY29udGVudD1cIkB1YmVyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmNyZWF0b3JcIiBjb250ZW50PVwiQHViZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInR3aXR0ZXI6dGl0bGVcIiBjb250ZW50PVwiTGFyZ2Utc2NhbGUgV2ViR0wtcG93ZXJlZCBHZW9zcGF0aWFsIERhdGEgVmlzdWFsaXphdGlvbiBUb29sXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmRlc2NyaXB0aW9uXCIgY29udGVudD1cIktlcGxlci5nbCBpcyBhIHBvd2VyZnVsIHdlYi1iYXNlZCBnZW9zcGF0aWFsIGRhdGEgYW5hbHlzaXMgdG9vbC4gQnVpbHQgb24gYSBoaWdoIHBlcmZvcm1hbmNlIHJlbmRlcmluZyBlbmdpbmUgYW5kIGRlc2lnbmVkIGZvciBsYXJnZS1zY2FsZSBkYXRhIHNldHMuXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOmltYWdlXCIgY29udGVudD1cImh0dHBzOi8vZDFhM2Y0c3BhenpycDQuY2xvdWRmcm9udC5uZXQva2VwbGVyLmdsL2tlcGxlci5nbC1tZXRhLXRhZy5wbmdcIiAvPlxuXG4gICAgICAgIDwhLS0gTG9hZCBSZWFjdC9SZWR1eCAtLT5cbiAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL3VucGtnLmNvbS9yZWFjdEAxNi44LjQvdW1kL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vcmVhY3QtZG9tQDE2LjguNC91bWQvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vcmVkdXhAMy43LjIvZGlzdC9yZWR1eC5qc1wiIGNyb3Nzb3JpZ2luPjwvc2NyaXB0PlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL3JlYWN0LXJlZHV4QDcuMS4zL2Rpc3QvcmVhY3QtcmVkdXgubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vc3R5bGVkLWNvbXBvbmVudHNANC4xLjMvZGlzdC9zdHlsZWQtY29tcG9uZW50cy5taW4uanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cblxuICAgICAgICA8IS0tIExvYWQgS2VwbGVyLmdsIC0tPlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL2tlcGxlci5nbEAke3ZlcnNpb259L3VtZC9rZXBsZXJnbC5taW4uanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cblxuICAgICAgICA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4gICAgICAgICAgYm9keSB7bWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBvdmVyZmxvdzogaGlkZGVuO31cbiAgICAgICAgPC9zdHlsZT5cblxuICAgICAgICA8IS0tTWFwQm94IHRva2VuLS0+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUHJvdmlkZSB5b3VyIE1hcEJveCBUb2tlblxuICAgICAgICAgICAqKi9cbiAgICAgICAgICBjb25zdCBNQVBCT1hfVE9LRU4gPSAnJHtvcHRpb25zLm1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICdQUk9WSURFX01BUEJPWF9UT0tFTid9JztcbiAgICAgICAgICBjb25zdCBXQVJOSU5HX01FU1NBR0UgPSAnUGxlYXNlIFByb3ZpZGUgYSBNYXBib3ggVG9rZW4gaW4gb3JkZXIgdG8gdXNlIEtlcGxlci5nbC4gRWRpdCB0aGlzIGZpbGUgYW5kIGZpbGwgb3V0IE1BUEJPWF9UT0tFTiB3aXRoIHlvdXIgYWNjZXNzIGtleSc7XG4gICAgICAgIDwvc2NyaXB0PlxuXG4gICAgICAgIDwhLS0gR0E6IERlbGV0ZSB0aGlzIGFzIHlvdSB3aXNoLCBIb3dldmVyIHRvIHBhdCBvdXJzZWx2ZXMgb24gdGhlIGJhY2ssIHdlIG9ubHkgdHJhY2sgYW5vbnltb3VzIHBhZ2V2aWV3IHRvIHVuZGVyc3RhbmQgaG93IG1hbnkgcGVvcGxlIGFyZSB1c2luZyBrZXBsZXIuZ2wuIC0tPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXtcbiAgICAgICAgICAoaVtyXS5xPWlbcl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVtyXS5sPTEqbmV3IERhdGUoKTthPXMuY3JlYXRlRWxlbWVudChvKSxcbiAgICAgICAgICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG0pXG4gICAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpO1xuICAgICAgICAgIGdhKCdjcmVhdGUnLCAnVUEtNjQ2OTQ0MDQtMTknLCB7XG4gICAgICAgICAgICAnc3RvcmFnZSc6ICdub25lJyxcbiAgICAgICAgICAgICdjbGllbnRJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdnYTpjbGllbnRJZCcpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ2EoZnVuY3Rpb24odHJhY2tlcikge1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ2E6Y2xpZW50SWQnLCB0cmFja2VyLmdldCgnY2xpZW50SWQnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ2EoJ3NldCcsICdjaGVja1Byb3RvY29sVGFzaycsIG51bGwpOyAvLyBEaXNhYmxlIGZpbGUgcHJvdG9jb2wgY2hlY2tpbmcuXG4gICAgICAgICAgZ2EoJ3NldCcsICdjaGVja1N0b3JhZ2VUYXNrJywgbnVsbCk7IC8vIERpc2FibGUgY29va2llIHN0b3JhZ2UgY2hlY2tpbmcuXG4gICAgICAgICAgZ2EoJ3NldCcsICdoaXN0b3J5SW1wb3J0VGFzaycsIG51bGwpOyAvLyBEaXNhYmxlIGhpc3RvcnkgY2hlY2tpbmcgKHJlcXVpcmVzIHJlYWRpbmcgZnJvbSBjb29raWVzKS5cbiAgICAgICAgICBnYSgnc2V0JywgJ3BhZ2UnLCAna2VwbGVyZ2wtaHRtbCcpO1xuICAgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7XG4gICAgICAgIDwvc2NyaXB0PlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDwhLS0gV2Ugd2lsbCBwdXQgb3VyIFJlYWN0IGNvbXBvbmVudCBpbnNpZGUgdGhpcyBkaXYuIC0tPlxuICAgICAgICA8ZGl2IGlkPVwiYXBwXCI+XG4gICAgICAgICAgPCEtLSBLZXBsZXIuZ2wgbWFwIHdpbGwgYmUgcGxhY2VkIGhlcmUtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBMb2FkIG91ciBSZWFjdCBjb21wb25lbnQuIC0tPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIC8qIFZhbGlkYXRlIE1hcGJveCBUb2tlbiAqL1xuICAgICAgICAgIGlmICgoTUFQQk9YX1RPS0VOIHx8ICcnKSA9PT0gJycgfHwgTUFQQk9YX1RPS0VOID09PSAnUFJPVklERV9NQVBCT1hfVE9LRU4nKSB7XG4gICAgICAgICAgICBhbGVydChXQVJOSU5HX01FU1NBR0UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qKiBTVE9SRSAqKi9cbiAgICAgICAgICBjb25zdCByZWR1Y2VycyA9IChmdW5jdGlvbiBjcmVhdGVSZWR1Y2VycyhyZWR1eCwga2VwbGVyR2wpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1eC5jb21iaW5lUmVkdWNlcnMoe1xuICAgICAgICAgICAgICAvLyBtb3VudCBrZXBsZXJHbCByZWR1Y2VyXG4gICAgICAgICAgICAgIGtlcGxlckdsOiBrZXBsZXJHbC5rZXBsZXJHbFJlZHVjZXIuaW5pdGlhbFN0YXRlKHtcbiAgICAgICAgICAgICAgICB1aVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgICByZWFkT25seTogJHtvcHRpb25zLm1vZGUgPT09IEVYUE9SVF9IVE1MX01BUF9NT0RFUy5SRUFEfSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2RhbDogbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0oUmVkdXgsIEtlcGxlckdsKSk7XG5cbiAgICAgICAgICBjb25zdCBtaWRkbGVXYXJlcyA9IChmdW5jdGlvbiBjcmVhdGVNaWRkbGV3YXJlcyhrZXBsZXJHbCkge1xuICAgICAgICAgICAgcmV0dXJuIGtlcGxlckdsLmVuaGFuY2VSZWR1eE1pZGRsZXdhcmUoW1xuICAgICAgICAgICAgICAvLyBBZGQgb3RoZXIgbWlkZGxld2FyZXMgaGVyZVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfShLZXBsZXJHbCkpO1xuXG4gICAgICAgICAgY29uc3QgZW5oYW5jZXJzID0gKGZ1bmN0aW9uIGNyYWV0ZUVuaGFuY2VycyhyZWR1eCwgbWlkZGxlcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHV4LmFwcGx5TWlkZGxld2FyZSguLi5taWRkbGVzKTtcbiAgICAgICAgICB9KFJlZHV4LCBtaWRkbGVXYXJlcykpO1xuXG4gICAgICAgICAgY29uc3Qgc3RvcmUgPSAoZnVuY3Rpb24gY3JlYXRlU3RvcmUocmVkdXgsIGVuaGFuY2Vycykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge307XG5cbiAgICAgICAgICAgIHJldHVybiByZWR1eC5jcmVhdGVTdG9yZShcbiAgICAgICAgICAgICAgcmVkdWNlcnMsXG4gICAgICAgICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgICAgICAgICAgcmVkdXguY29tcG9zZShlbmhhbmNlcnMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0oUmVkdXgsIGVuaGFuY2VycykpO1xuICAgICAgICAgIC8qKiBFTkQgU1RPUkUgKiovXG5cbiAgICAgICAgICAvKiogQ09NUE9ORU5UUyAqKi9cbiAgICAgICAgICB2YXIgS2VwbGVyRWxlbWVudCA9IChmdW5jdGlvbiBtYWtlS2VwbGVyRWxlbWVudChyZWFjdCwga2VwbGVyR2wsIG1hcGJveFRva2VuKSB7XG4gICAgICAgICAgICB2YXIgTG9nb1N2ZyA9IGZ1bmN0aW9uIExvZ29TdmcoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzc05hbWU6IFwibG9nby1jb250YWluZXJcIiwgc3R5bGU6IHtwb3NpdGlvbjogJ2ZpeGVkJywgekluZGV4OiAxMDAwMCwgcGFkZGluZzogJzRweCd9IH0sXG4gICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImtlcGxlcl9nbF9fbG9nb1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwN3B4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIxcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgIFwiZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxMy41MDAwMDAsIDEzLjUwMDAwMCkgcm90YXRlKDQ1LjAwMDAwMCkgdHJhbnNsYXRlKC0xMy41MDAwMDAsIC0xMy41MDAwMDApIHRyYW5zbGF0ZSg0LjAwMDAwMCwgNC4wMDAwMDApXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7IHg6IFwiMFwiLCB5OiBcIjZcIiwgdHJhbnNmb3JtOiBcIm1hdHJpeCgyLjUzNTE4MWUtMDYgMSAtMSAyLjUzNTE4MWUtMDYgMTguMTEwNyA2LjAzNjkpXCIsIGZpbGw6IFwiIzUzNUM2Q1wiLCB3aWR0aDogXCIxMi4xXCIsIGhlaWdodDogXCIxMi4xXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwgeyB4OiBcIjZcIiwgeTogXCIwXCIsIHRyYW5zZm9ybTogXCJtYXRyaXgoMi41MzUxODJlLTA2IDEgLTEgMi41MzUxODJlLTA2IDE4LjExMDcgLTYuMDM2OSlcIiwgZmlsbDpcIiMxRkJBRDZcIiwgd2lkdGg6IFwiMTIuMVwiLCBoZWlnaHQ6IFwiMTIuMVwiIH0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk0zOSw4LjdoMi4ybC0yLjgsNC4ybDIuOSw1LjFIMzlsLTIuNC00LjJoLTEuM1YxOGgtMlY1bDItMC4xdjcuM2gxLjNMMzksOC43elwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNNDIuNCwxMy4zYzAtMS41LDAuNC0yLjcsMS4xLTMuNXMxLjgtMS4yLDMuMS0xLjJjMS4zLDAsMi4yLDAuNCwyLjgsMS4xYzAuNiwwLjcsMC45LDEuOCwwLjksMy4zIGMwLDAuNCwwLDAuOCwwLDEuMWgtNS44YzAsMS42LDAuOCwyLjQsMi40LDIuNGMxLDAsMi0wLjIsMi45LTAuNmwwLjIsMS43Yy0wLjQsMC4yLTAuOSwwLjQtMS40LDAuNXMtMS4xLDAuMi0xLjcsMC4yIGMtMS41LDAtMi42LTAuNC0zLjMtMS4yQzQyLjgsMTYuMSw0Mi40LDE0LjksNDIuNCwxMy4zeiBNNDYuNiwxMC4xYy0wLjcsMC0xLjIsMC4yLTEuNSwwLjVjLTAuNCwwLjQtMC42LDAuOS0wLjYsMS43aDQgYzAtMC44LTAuMi0xLjQtMC41LTEuN1M0Ny4yLDEwLjEsNDYuNiwxMC4xelwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNNTcuMSwxOC4yYy0xLDAtMS44LTAuMy0yLjMtMC45bDAsMGwwLDEuM3YyLjVoLTJWOC43aDEuNWwwLjMsMC45aDBjMC4zLTAuMywwLjctMC42LDEuMi0wLjcgYzAuNC0wLjIsMC45LTAuMywxLjQtMC4zYzEuMiwwLDIuMSwwLjQsMi43LDEuMWMwLjYsMC43LDAuOSwyLDAuOSwzLjdjMCwxLjYtMC4zLDIuOC0xLDMuN0M1OS4yLDE3LjgsNTguMywxOC4yLDU3LjEsMTguMnogTTU2LjcsMTAuM2MtMC40LDAtMC44LDAuMS0xLjEsMC4yYy0wLjMsMC4yLTAuNiwwLjQtMC44LDAuN3Y0LjNjMC4yLDAuMywwLjQsMC41LDAuNywwLjdjMC4zLDAuMiwwLjcsMC4zLDEuMSwwLjMgYzAuNywwLDEuMi0wLjIsMS42LTAuN2MwLjQtMC41LDAuNS0xLjMsMC41LTIuNWMwLTAuOC0wLjEtMS40LTAuMi0xLjhzLTAuNC0wLjctMC43LTAuOUM1Ny42LDEwLjQsNTcuMiwxMC4zLDU2LjcsMTAuM3pcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTYzLjIsMTZWNWwyLTAuMXYxMC44YzAsMC4zLDAuMSwwLjUsMC4yLDAuNmMwLjEsMC4xLDAuMywwLjIsMC42LDAuMmMwLjMsMCwwLjYsMCwwLjktMC4xVjE4IGMtMC40LDAuMS0xLDAuMi0xLjYsMC4yYy0wLjgsMC0xLjMtMC4yLTEuNy0wLjVTNjMuMiwxNi44LDYzLjIsMTZ6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk02OC4yLDEzLjNjMC0xLjUsMC40LTIuNywxLjEtMy41YzAuNy0wLjgsMS44LTEuMiwzLjEtMS4yYzEuMywwLDIuMiwwLjQsMi44LDEuMWMwLjYsMC43LDAuOSwxLjgsMC45LDMuMyBjMCwwLjQsMCwwLjgsMCwxLjFoLTUuOGMwLDEuNiwwLjgsMi40LDIuNCwyLjRjMSwwLDItMC4yLDIuOS0wLjZsMC4yLDEuN2MtMC40LDAuMi0wLjksMC40LTEuNCwwLjVzLTEuMSwwLjItMS43LDAuMiBjLTEuNSwwLTIuNi0wLjQtMy4zLTEuMkM2OC42LDE2LjEsNjguMiwxNC45LDY4LjIsMTMuM3ogTTcyLjQsMTAuMWMtMC43LDAtMS4yLDAuMi0xLjUsMC41Yy0wLjQsMC40LTAuNiwwLjktMC42LDEuN2g0IGMwLTAuOC0wLjItMS40LTAuNS0xLjdTNzMsMTAuMSw3Mi40LDEwLjF6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk04MC4yLDguN2wwLjEsMS43aDBjMC4zLTAuNiwwLjctMS4xLDEuMS0xLjRjMC40LTAuMywxLTAuNSwxLjYtMC41YzAuNCwwLDAuNywwLDEsMC4xbC0wLjEsMiBjLTAuMy0wLjEtMC43LTAuMi0xLTAuMmMtMC43LDAtMS4zLDAuMy0xLjcsMC44Yy0wLjQsMC41LTAuNywxLjItMC43LDIuMVYxOGgtMlY4LjdIODAuMnpcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTgzLjgsMTdjMC0wLjgsMC40LTEuMiwxLjItMS4yYzAuOCwwLDEuMiwwLjQsMS4yLDEuMmMwLDAuOC0wLjQsMS4xLTEuMiwxLjFDODQuMiwxOC4yLDgzLjgsMTcuOCw4My44LDE3elwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNODguNSwxOC43YzAtMC44LDAuNC0xLjQsMS4yLTEuOGMtMC42LTAuMy0wLjktMC44LTAuOS0xLjVjMC0wLjcsMC40LTEuMiwxLjEtMS42Yy0wLjMtMC4zLTAuNi0wLjYtMC43LTAuOSBjLTAuMi0wLjQtMC4yLTAuOC0wLjItMS4zYzAtMSwwLjMtMS44LDAuOS0yLjNjMC42LTAuNSwxLjYtMC44LDIuOC0wLjhjMC41LDAsMSwwLDEuNCwwLjFjMC40LDAuMSwwLjgsMC4yLDEuMSwwLjRsMi40LTAuMnYxLjUgaC0xLjVjMC4yLDAuNCwwLjIsMC44LDAuMiwxLjNjMCwxLTAuMywxLjctMC45LDIuMnMtMS41LDAuOC0yLjcsMC44Yy0wLjcsMC0xLjItMC4xLTEuNi0wLjJjLTAuMSwwLjEtMC4yLDAuMi0wLjMsMC4zIGMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjRjMCwwLjIsMC4xLDAuMywwLjIsMC40YzAuMSwwLjEsMC4zLDAuMiwwLjYsMC4ybDIuNywwLjJjMSwwLjEsMS43LDAuMywyLjIsMC42YzAuNSwwLjMsMC44LDAuOSwwLjgsMS43IGMwLDAuNi0wLjIsMS4xLTAuNSwxLjVjLTAuNCwwLjQtMC45LDAuOC0xLjUsMWMtMC43LDAuMi0xLjUsMC40LTIuNCwwLjRjLTEuMywwLTIuMy0wLjItMy0wLjZDODguOCwyMC4xLDg4LjUsMTkuNSw4OC41LDE4Ljd6IE05NS4xLDE4LjRjMC0wLjMtMC4xLTAuNS0wLjMtMC43cy0wLjYtMC4yLTEuMS0wLjNsLTIuNy0wLjNjLTAuMiwwLjEtMC40LDAuMy0wLjUsMC41Yy0wLjEsMC4yLTAuMiwwLjQtMC4yLDAuNiBjMCwwLjQsMC4yLDAuOCwwLjUsMWMwLjQsMC4yLDEsMC4zLDEuOCwwLjNDOTQuMiwxOS41LDk1LjEsMTkuMiw5NS4xLDE4LjR6IE05NC4zLDExLjVjMC0wLjYtMC4xLTEtMC40LTEuMiBjLTAuMy0wLjItMC43LTAuMy0xLjMtMC4zYy0wLjcsMC0xLjEsMC4xLTEuNCwwLjNjLTAuMywwLjItMC40LDAuNi0wLjQsMS4yczAuMSwxLDAuNCwxLjJjMC4zLDAuMiwwLjcsMC4zLDEuNCwwLjMgYzAuNiwwLDEuMS0wLjEsMS4zLTAuNFM5NC4zLDEyLDk0LjMsMTEuNXpcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTk5LjQsMTZWNWwyLTAuMXYxMC44YzAsMC4zLDAuMSwwLjUsMC4yLDAuNmMwLjEsMC4xLDAuMywwLjIsMC42LDAuMmMwLjMsMCwwLjYsMCwwLjktMC4xVjE4IGMtMC40LDAuMS0xLDAuMi0xLjYsMC4yYy0wLjgsMC0xLjMtMC4yLTEuNy0wLjVTOTkuNCwxNi44LDk5LjQsMTZ6XCIgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBBcHAoKSB7XG4gICAgICAgICAgICAgIHZhciByb290RWxtID0gcmVhY3QudXNlUmVmKG51bGwpO1xuICAgICAgICAgICAgICB2YXIgX3VzZVN0YXRlID0gcmVhY3QudXNlU3RhdGUoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdmFyIHdpbmRvd0RpbWVuc2lvbiA9IF91c2VTdGF0ZVswXTtcbiAgICAgICAgICAgICAgdmFyIHNldERpbWVuc2lvbiA9IF91c2VTdGF0ZVsxXTtcbiAgICAgICAgICAgICAgcmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uIHNpZGVFZmZlY3QoKXtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICAgICAgICAgICAgICBzZXREaW1lbnNpb24oe3dpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCwgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHR9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTt9O1xuICAgICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICAgIHJldHVybiByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICAgIHtzdHlsZToge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAwLCB3aWR0aDogJzEwMHZ3JywgaGVpZ2h0OiAnMTAwdmgnfX0sXG4gICAgICAgICAgICAgICAgJHtvcHRpb25zLm1vZGUgPT09IEVYUE9SVF9IVE1MX01BUF9NT0RFUy5SRUFEID8gJ0xvZ29TdmcoKSwnIDogJyd9XG4gICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChrZXBsZXJHbC5LZXBsZXJHbCwge1xuICAgICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcGJveFRva2VuLFxuICAgICAgICAgICAgICAgICAgaWQ6IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogd2luZG93RGltZW5zaW9uLndpZHRoLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB3aW5kb3dEaW1lbnNpb24uaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0oUmVhY3QsIEtlcGxlckdsLCBNQVBCT1hfVE9LRU4pKTtcblxuICAgICAgICAgIGNvbnN0IGFwcCA9IChmdW5jdGlvbiBjcmVhdGVSZWFjdFJlZHV4UHJvdmlkZXIocmVhY3QsIHJlYWN0UmVkdXgsIEtlcGxlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICByZWFjdFJlZHV4LlByb3ZpZGVyLFxuICAgICAgICAgICAgICB7c3RvcmV9LFxuICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KEtlcGxlckVsZW1lbnQsIG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfShSZWFjdCwgUmVhY3RSZWR1eCwgS2VwbGVyRWxlbWVudCkpO1xuICAgICAgICAgIC8qKiBFTkQgQ09NUE9ORU5UUyAqKi9cblxuICAgICAgICAgIC8qKiBSZW5kZXIgKiovXG4gICAgICAgICAgKGZ1bmN0aW9uIHJlbmRlcihyZWFjdCwgcmVhY3RET00sIGFwcCkge1xuICAgICAgICAgICAgcmVhY3RET00ucmVuZGVyKGFwcCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpKTtcbiAgICAgICAgICB9KFJlYWN0LCBSZWFjdERPTSwgYXBwKSk7XG4gICAgICAgIDwvc2NyaXB0PlxuICAgICAgICA8IS0tIFRoZSBuZXh0IHNjcmlwdCB3aWxsIHNob3cgaG93IHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggS2VwbGVyIG1hcCBzdG9yZSAtLT5cbiAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDdXN0b21pemUgbWFwLlxuICAgICAgICAgICAqIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiB5b3UgY2FuIHVzZSB0aGUgc3RvcmUgb2JqZWN0IHRvIGRpc3BhdGNoIEtlcGxlci5nbCBhY3Rpb25zXG4gICAgICAgICAgICogdG8gYWRkIG5ldyBkYXRhIGFuZCBjdXN0b21pemUgYmVoYXZpb3JcbiAgICAgICAgICAgKi9cbiAgICAgICAgICAoZnVuY3Rpb24gY3VzdG9taXplKGtlcGxlckdsLCBzdG9yZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNldHMgPSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YXNldHMpfTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucy5jb25maWcpfTtcblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkRGF0YSA9IGtlcGxlckdsLktlcGxlckdsU2NoZW1hLmxvYWQoXG4gICAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGtlcGxlckdsLmFkZERhdGFUb01hcCh7XG4gICAgICAgICAgICAgIGRhdGFzZXRzOiBsb2FkZWREYXRhLmRhdGFzZXRzLFxuICAgICAgICAgICAgICBjb25maWc6IGxvYWRlZERhdGEuY29uZmlnLFxuICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgY2VudGVyTWFwOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfShLZXBsZXJHbCwgc3RvcmUpKVxuICAgICAgICA8L3NjcmlwdD5cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gIGA7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFxQkEsSUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQXJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSUUsT0FBTyxFQUFrQztFQUFBLElBQWhDQyxPQUFPLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHRyxrQ0FBaUI7RUFDbEUsa2hGQUFBQyxNQUFBLENBdUNpREwsT0FBTyw4VEFBQUssTUFBQSxDQVd4Qk4sT0FBTyxDQUFDTyxvQkFBb0IsSUFBSSxzQkFBc0IscWxFQUFBRCxNQUFBLENBMkMxRE4sT0FBTyxDQUFDUSxJQUFJLEtBQUtDLHNDQUFxQixDQUFDQyxJQUFJLDBvTkFBQUosTUFBQSxDQW1GdkROLE9BQU8sQ0FBQ1EsSUFBSSxLQUFLQyxzQ0FBcUIsQ0FBQ0MsSUFBSSxHQUFHLFlBQVksR0FBRyxFQUFFLHF4Q0FBQUosTUFBQSxDQWlDbERLLElBQUksQ0FBQ0MsU0FBUyxDQUFDWixPQUFPLENBQUNhLFFBQVEsQ0FBQyxvQ0FBQVAsTUFBQSxDQUNsQ0ssSUFBSSxDQUFDQyxTQUFTLENBQUNaLE9BQU8sQ0FBQ2MsTUFBTSxDQUFDO0FBbUIzRCxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,13 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.aggregate = aggregate;
7
8
  exports.getMode = exports.getFrequency = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
10
  var _d3Array = require("d3-array");
9
11
  var _defaultSettings = require("../constants/default-settings");
10
- // Copyright (c) 2022 Uber Technologies, Inc.
12
+ 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; }
13
+ 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; } // Copyright (c) 2022 Uber Technologies, Inc.
11
14
  //
12
15
  // Permission is hereby granted, free of charge, to any person obtaining a copy
13
16
  // of this software and associated documentation files (the "Software"), to deal
@@ -26,23 +29,23 @@ var _defaultSettings = require("../constants/default-settings");
26
29
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
30
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28
31
  // THE SOFTWARE.
29
-
30
- const getFrequency = data => data.reduce((uniques, val) => ({
31
- ...uniques,
32
- [val]: (uniques[val] || 0) + 1
33
- }), {});
34
- exports.getFrequency = getFrequency;
35
- const getMode = data => {
36
- const occur = getFrequency(data);
37
- return Object.keys(occur).reduce((prev, key) => occur[prev] >= occur[key] ? prev : key, Object.keys(occur)[0]);
32
+ var getFrequency = exports.getFrequency = function getFrequency(data) {
33
+ return data.reduce(function (uniques, val) {
34
+ return _objectSpread(_objectSpread({}, uniques), {}, (0, _defineProperty2["default"])({}, val, (uniques[val] || 0) + 1));
35
+ }, {});
36
+ };
37
+ var getMode = exports.getMode = function getMode(data) {
38
+ var occur = getFrequency(data);
39
+ return Object.keys(occur).reduce(function (prev, key) {
40
+ return occur[prev] >= occur[key] ? prev : key;
41
+ }, Object.keys(occur)[0]);
38
42
  };
39
- exports.getMode = getMode;
40
43
  function aggregate(data, technique) {
41
44
  switch (technique) {
42
45
  case _defaultSettings.AGGREGATION_TYPES.average:
43
46
  return (0, _d3Array.mean)(data);
44
47
  case _defaultSettings.AGGREGATION_TYPES.countUnique:
45
- return Object.keys(data.reduce((uniques, val) => {
48
+ return Object.keys(data.reduce(function (uniques, val) {
46
49
  uniques[val] = uniques[val] || 0;
47
50
  uniques[val] += 1;
48
51
  return uniques;
@@ -65,4 +68,4 @@ function aggregate(data, technique) {
65
68
  return data.length;
66
69
  }
67
70
  }
68
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfZGVmYXVsdFNldHRpbmdzIiwiZ2V0RnJlcXVlbmN5IiwiZGF0YSIsInJlZHVjZSIsInVuaXF1ZXMiLCJ2YWwiLCJleHBvcnRzIiwiZ2V0TW9kZSIsIm9jY3VyIiwiT2JqZWN0Iiwia2V5cyIsInByZXYiLCJrZXkiLCJhZ2dyZWdhdGUiLCJ0ZWNobmlxdWUiLCJBR0dSRUdBVElPTl9UWVBFUyIsImF2ZXJhZ2UiLCJtZWFuIiwiY291bnRVbmlxdWUiLCJsZW5ndGgiLCJtb2RlIiwibWF4aW11bSIsIm1heCIsIm1pbmltdW0iLCJtaW4iLCJtZWRpYW4iLCJzdGRldiIsImRldmlhdGlvbiIsInN1bSIsInZhcmlhbmNlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2FnZ3JlZ2F0ZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2RldmlhdGlvbiwgbWluLCBtYXgsIG1lYW4sIG1lZGlhbiwgc3VtLCB2YXJpYW5jZX0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5leHBvcnQgY29uc3QgZ2V0RnJlcXVlbmN5ID0gZGF0YSA9PlxuICBkYXRhLnJlZHVjZShcbiAgICAodW5pcXVlcywgdmFsKSA9PiAoe1xuICAgICAgLi4udW5pcXVlcyxcbiAgICAgIFt2YWxdOiAodW5pcXVlc1t2YWxdIHx8IDApICsgMVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbmV4cG9ydCBjb25zdCBnZXRNb2RlID0gZGF0YSA9PiB7XG4gIGNvbnN0IG9jY3VyID0gZ2V0RnJlcXVlbmN5KGRhdGEpO1xuICByZXR1cm4gT2JqZWN0LmtleXMob2NjdXIpLnJlZHVjZShcbiAgICAocHJldiwga2V5KSA9PiAob2NjdXJbcHJldl0gPj0gb2NjdXJba2V5XSA/IHByZXYgOiBrZXkpLFxuICAgIE9iamVjdC5rZXlzKG9jY3VyKVswXVxuICApO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0ZShkYXRhLCB0ZWNobmlxdWUpIHtcbiAgc3dpdGNoICh0ZWNobmlxdWUpIHtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2U6XG4gICAgICByZXR1cm4gbWVhbihkYXRhKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlOlxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKFxuICAgICAgICBkYXRhLnJlZHVjZSgodW5pcXVlcywgdmFsKSA9PiB7XG4gICAgICAgICAgdW5pcXVlc1t2YWxdID0gdW5pcXVlc1t2YWxdIHx8IDA7XG4gICAgICAgICAgdW5pcXVlc1t2YWxdICs9IDE7XG4gICAgICAgICAgcmV0dXJuIHVuaXF1ZXM7XG4gICAgICAgIH0sIHt9KVxuICAgICAgKS5sZW5ndGg7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tb2RlOlxuICAgICAgcmV0dXJuIGdldE1vZGUoZGF0YSk7XG5cbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW06XG4gICAgICByZXR1cm4gbWF4KGRhdGEpO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bTpcbiAgICAgIHJldHVybiBtaW4oZGF0YSk7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tZWRpYW46XG4gICAgICByZXR1cm4gbWVkaWFuKGRhdGEpO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMuc3RkZXY6XG4gICAgICByZXR1cm4gZGV2aWF0aW9uKGRhdGEpO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMuc3VtOlxuICAgICAgcmV0dXJuIHN1bShkYXRhKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnZhcmlhbmNlOlxuICAgICAgcmV0dXJuIHZhcmlhbmNlKGRhdGEpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQW9CQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUtPLE1BQU1FLFlBQVksR0FBR0MsSUFBSSxJQUM5QkEsSUFBSSxDQUFDQyxNQUFNLENBQ1QsQ0FBQ0MsT0FBTyxFQUFFQyxHQUFHLE1BQU07RUFDakIsR0FBR0QsT0FBTztFQUNWLENBQUNDLEdBQUcsR0FBRyxDQUFDRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUMvQixDQUFDLENBQUMsRUFDRixDQUFDLENBQ0gsQ0FBQztBQUFDQyxPQUFBLENBQUFMLFlBQUEsR0FBQUEsWUFBQTtBQUVHLE1BQU1NLE9BQU8sR0FBR0wsSUFBSSxJQUFJO0VBQzdCLE1BQU1NLEtBQUssR0FBR1AsWUFBWSxDQUFDQyxJQUFJLENBQUM7RUFDaEMsT0FBT08sTUFBTSxDQUFDQyxJQUFJLENBQUNGLEtBQUssQ0FBQyxDQUFDTCxNQUFNLENBQzlCLENBQUNRLElBQUksRUFBRUMsR0FBRyxLQUFNSixLQUFLLENBQUNHLElBQUksQ0FBQyxJQUFJSCxLQUFLLENBQUNJLEdBQUcsQ0FBQyxHQUFHRCxJQUFJLEdBQUdDLEdBQUksRUFDdkRILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3RCLENBQUM7QUFDSCxDQUFDO0FBQUNGLE9BQUEsQ0FBQUMsT0FBQSxHQUFBQSxPQUFBO0FBRUssU0FBU00sU0FBU0EsQ0FBQ1gsSUFBSSxFQUFFWSxTQUFTLEVBQUU7RUFDekMsUUFBUUEsU0FBUztJQUNmLEtBQUtDLGtDQUFpQixDQUFDQyxPQUFPO01BQzVCLE9BQU8sSUFBQUMsYUFBSSxFQUFDZixJQUFJLENBQUM7SUFDbkIsS0FBS2Esa0NBQWlCLENBQUNHLFdBQVc7TUFDaEMsT0FBT1QsTUFBTSxDQUFDQyxJQUFJLENBQ2hCUixJQUFJLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLEdBQUcsS0FBSztRQUM1QkQsT0FBTyxDQUFDQyxHQUFHLENBQUMsR0FBR0QsT0FBTyxDQUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ2hDRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDakIsT0FBT0QsT0FBTztNQUNoQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ1AsQ0FBQyxDQUFDZSxNQUFNO0lBQ1YsS0FBS0osa0NBQWlCLENBQUNLLElBQUk7TUFDekIsT0FBT2IsT0FBTyxDQUFDTCxJQUFJLENBQUM7SUFFdEIsS0FBS2Esa0NBQWlCLENBQUNNLE9BQU87TUFDNUIsT0FBTyxJQUFBQyxZQUFHLEVBQUNwQixJQUFJLENBQUM7SUFDbEIsS0FBS2Esa0NBQWlCLENBQUNRLE9BQU87TUFDNUIsT0FBTyxJQUFBQyxZQUFHLEVBQUN0QixJQUFJLENBQUM7SUFDbEIsS0FBS2Esa0NBQWlCLENBQUNVLE1BQU07TUFDM0IsT0FBTyxJQUFBQSxlQUFNLEVBQUN2QixJQUFJLENBQUM7SUFDckIsS0FBS2Esa0NBQWlCLENBQUNXLEtBQUs7TUFDMUIsT0FBTyxJQUFBQyxrQkFBUyxFQUFDekIsSUFBSSxDQUFDO0lBQ3hCLEtBQUthLGtDQUFpQixDQUFDYSxHQUFHO01BQ3hCLE9BQU8sSUFBQUEsWUFBRyxFQUFDMUIsSUFBSSxDQUFDO0lBQ2xCLEtBQUthLGtDQUFpQixDQUFDYyxRQUFRO01BQzdCLE9BQU8sSUFBQUEsaUJBQVEsRUFBQzNCLElBQUksQ0FBQztJQUN2QjtNQUNFLE9BQU9BLElBQUksQ0FBQ2lCLE1BQU07RUFDdEI7QUFDRiIsImlnbm9yZUxpc3QiOltdfQ==
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfZGVmYXVsdFNldHRpbmdzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRGcmVxdWVuY3kiLCJleHBvcnRzIiwiZGF0YSIsInJlZHVjZSIsInVuaXF1ZXMiLCJ2YWwiLCJnZXRNb2RlIiwib2NjdXIiLCJwcmV2Iiwia2V5IiwiYWdncmVnYXRlIiwidGVjaG5pcXVlIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJhdmVyYWdlIiwibWVhbiIsImNvdW50VW5pcXVlIiwibW9kZSIsIm1heGltdW0iLCJtYXgiLCJtaW5pbXVtIiwibWluIiwibWVkaWFuIiwic3RkZXYiLCJkZXZpYXRpb24iLCJzdW0iLCJ2YXJpYW5jZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hZ2dyZWdhdGUtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtkZXZpYXRpb24sIG1pbiwgbWF4LCBtZWFuLCBtZWRpYW4sIHN1bSwgdmFyaWFuY2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuZXhwb3J0IGNvbnN0IGdldEZyZXF1ZW5jeSA9IGRhdGEgPT5cbiAgZGF0YS5yZWR1Y2UoXG4gICAgKHVuaXF1ZXMsIHZhbCkgPT4gKHtcbiAgICAgIC4uLnVuaXF1ZXMsXG4gICAgICBbdmFsXTogKHVuaXF1ZXNbdmFsXSB8fCAwKSArIDFcbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG5leHBvcnQgY29uc3QgZ2V0TW9kZSA9IGRhdGEgPT4ge1xuICBjb25zdCBvY2N1ciA9IGdldEZyZXF1ZW5jeShkYXRhKTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9jY3VyKS5yZWR1Y2UoXG4gICAgKHByZXYsIGtleSkgPT4gKG9jY3VyW3ByZXZdID49IG9jY3VyW2tleV0gPyBwcmV2IDoga2V5KSxcbiAgICBPYmplY3Qua2V5cyhvY2N1cilbMF1cbiAgKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGUoZGF0YSwgdGVjaG5pcXVlKSB7XG4gIHN3aXRjaCAodGVjaG5pcXVlKSB7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlOlxuICAgICAgcmV0dXJuIG1lYW4oZGF0YSk7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5jb3VudFVuaXF1ZTpcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhcbiAgICAgICAgZGF0YS5yZWR1Y2UoKHVuaXF1ZXMsIHZhbCkgPT4ge1xuICAgICAgICAgIHVuaXF1ZXNbdmFsXSA9IHVuaXF1ZXNbdmFsXSB8fCAwO1xuICAgICAgICAgIHVuaXF1ZXNbdmFsXSArPSAxO1xuICAgICAgICAgIHJldHVybiB1bmlxdWVzO1xuICAgICAgICB9LCB7fSlcbiAgICAgICkubGVuZ3RoO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMubW9kZTpcbiAgICAgIHJldHVybiBnZXRNb2RlKGRhdGEpO1xuXG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtOlxuICAgICAgcmV0dXJuIG1heChkYXRhKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW06XG4gICAgICByZXR1cm4gbWluKGRhdGEpO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMubWVkaWFuOlxuICAgICAgcmV0dXJuIG1lZGlhbihkYXRhKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2OlxuICAgICAgcmV0dXJuIGRldmlhdGlvbihkYXRhKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnN1bTpcbiAgICAgIHJldHVybiBzdW0oZGF0YSk7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy52YXJpYW5jZTpcbiAgICAgIHJldHVybiB2YXJpYW5jZShkYXRhKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQW9CQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBQWdFLFNBQUFFLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBLElBckJoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtPLElBQU1vQixZQUFZLEdBQUFDLE9BQUEsQ0FBQUQsWUFBQSxHQUFHLFNBQWZBLFlBQVlBLENBQUdFLElBQUk7RUFBQSxPQUM5QkEsSUFBSSxDQUFDQyxNQUFNLENBQ1QsVUFBQ0MsT0FBTyxFQUFFQyxHQUFHO0lBQUEsT0FBQWIsYUFBQSxDQUFBQSxhQUFBLEtBQ1JZLE9BQU8sV0FBQVIsZ0JBQUEsaUJBQ1RTLEdBQUcsRUFBRyxDQUFDRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQUEsQ0FDOUIsRUFDRixDQUFDLENBQ0gsQ0FBQztBQUFBO0FBRUksSUFBTUMsT0FBTyxHQUFBTCxPQUFBLENBQUFLLE9BQUEsR0FBRyxTQUFWQSxPQUFPQSxDQUFHSixJQUFJLEVBQUk7RUFDN0IsSUFBTUssS0FBSyxHQUFHUCxZQUFZLENBQUNFLElBQUksQ0FBQztFQUNoQyxPQUFPbkIsTUFBTSxDQUFDQyxJQUFJLENBQUN1QixLQUFLLENBQUMsQ0FBQ0osTUFBTSxDQUM5QixVQUFDSyxJQUFJLEVBQUVDLEdBQUc7SUFBQSxPQUFNRixLQUFLLENBQUNDLElBQUksQ0FBQyxJQUFJRCxLQUFLLENBQUNFLEdBQUcsQ0FBQyxHQUFHRCxJQUFJLEdBQUdDLEdBQUc7RUFBQSxDQUFDLEVBQ3ZEMUIsTUFBTSxDQUFDQyxJQUFJLENBQUN1QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3RCLENBQUM7QUFDSCxDQUFDO0FBRU0sU0FBU0csU0FBU0EsQ0FBQ1IsSUFBSSxFQUFFUyxTQUFTLEVBQUU7RUFDekMsUUFBUUEsU0FBUztJQUNmLEtBQUtDLGtDQUFpQixDQUFDQyxPQUFPO01BQzVCLE9BQU8sSUFBQUMsYUFBSSxFQUFDWixJQUFJLENBQUM7SUFDbkIsS0FBS1Usa0NBQWlCLENBQUNHLFdBQVc7TUFDaEMsT0FBT2hDLE1BQU0sQ0FBQ0MsSUFBSSxDQUNoQmtCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLFVBQUNDLE9BQU8sRUFBRUMsR0FBRyxFQUFLO1FBQzVCRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxHQUFHRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDaENELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNqQixPQUFPRCxPQUFPO01BQ2hCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDUCxDQUFDLENBQUNWLE1BQU07SUFDVixLQUFLa0Isa0NBQWlCLENBQUNJLElBQUk7TUFDekIsT0FBT1YsT0FBTyxDQUFDSixJQUFJLENBQUM7SUFFdEIsS0FBS1Usa0NBQWlCLENBQUNLLE9BQU87TUFDNUIsT0FBTyxJQUFBQyxZQUFHLEVBQUNoQixJQUFJLENBQUM7SUFDbEIsS0FBS1Usa0NBQWlCLENBQUNPLE9BQU87TUFDNUIsT0FBTyxJQUFBQyxZQUFHLEVBQUNsQixJQUFJLENBQUM7SUFDbEIsS0FBS1Usa0NBQWlCLENBQUNTLE1BQU07TUFDM0IsT0FBTyxJQUFBQSxlQUFNLEVBQUNuQixJQUFJLENBQUM7SUFDckIsS0FBS1Usa0NBQWlCLENBQUNVLEtBQUs7TUFDMUIsT0FBTyxJQUFBQyxrQkFBUyxFQUFDckIsSUFBSSxDQUFDO0lBQ3hCLEtBQUtVLGtDQUFpQixDQUFDWSxHQUFHO01BQ3hCLE9BQU8sSUFBQUEsWUFBRyxFQUFDdEIsSUFBSSxDQUFDO0lBQ2xCLEtBQUtVLGtDQUFpQixDQUFDYSxRQUFRO01BQzdCLE9BQU8sSUFBQUEsaUJBQVEsRUFBQ3ZCLElBQUksQ0FBQztJQUN2QjtNQUNFLE9BQU9BLElBQUksQ0FBQ1IsTUFBTTtFQUN0QjtBQUNGIiwiaWdub3JlTGlzdCI6W119