@kepler.gl/components 3.1.0-alpha.0 → 3.1.0-alpha.2

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 (725) hide show
  1. package/dist/bottom-widget.d.ts +19 -0
  2. package/dist/bottom-widget.js +184 -0
  3. package/dist/common/action-panel.d.ts +29 -0
  4. package/dist/common/action-panel.js +136 -0
  5. package/dist/common/animation-control/animation-control.d.ts +25 -0
  6. package/dist/common/animation-control/animation-control.js +96 -0
  7. package/dist/common/animation-control/animation-controller.d.ts +19 -0
  8. package/dist/common/animation-control/animation-controller.js +269 -0
  9. package/dist/common/animation-control/animation-speed-slider.d.ts +12 -0
  10. package/dist/common/animation-control/animation-speed-slider.js +50 -0
  11. package/dist/common/animation-control/animation-window-control.d.ts +20 -0
  12. package/dist/common/animation-control/animation-window-control.js +60 -0
  13. package/dist/common/animation-control/floating-time-display.d.ts +9 -0
  14. package/dist/common/animation-control/floating-time-display.js +132 -0
  15. package/dist/common/animation-control/play-control.d.ts +12 -0
  16. package/dist/common/animation-control/play-control.js +52 -0
  17. package/dist/common/animation-control/playback-controls.d.ts +48 -0
  18. package/dist/common/animation-control/playback-controls.js +156 -0
  19. package/dist/common/animation-control/reset-control.d.ts +9 -0
  20. package/dist/common/animation-control/reset-control.js +43 -0
  21. package/dist/common/animation-control/speed-control.d.ts +12 -0
  22. package/dist/common/animation-control/speed-control.js +53 -0
  23. package/dist/common/animation-control/window-action-control.d.ts +11 -0
  24. package/dist/common/animation-control/window-action-control.js +58 -0
  25. package/dist/common/checkbox.d.ts +36 -0
  26. package/dist/common/checkbox.js +105 -0
  27. package/dist/common/color-legend.d.ts +57 -0
  28. package/dist/common/color-legend.js +262 -0
  29. package/dist/common/column-stats-chart.d.ts +37 -0
  30. package/dist/common/column-stats-chart.js +359 -0
  31. package/dist/common/data-table/button.d.ts +8 -0
  32. package/dist/common/data-table/button.js +38 -0
  33. package/dist/common/data-table/canvas.d.ts +2 -0
  34. package/dist/common/data-table/canvas.js +26 -0
  35. package/dist/common/data-table/cell-size.d.ts +43 -0
  36. package/dist/common/data-table/cell-size.js +183 -0
  37. package/dist/common/data-table/display-format.d.ts +25 -0
  38. package/dist/common/data-table/display-format.js +126 -0
  39. package/dist/common/data-table/grid.d.ts +10 -0
  40. package/dist/common/data-table/grid.js +107 -0
  41. package/dist/common/data-table/header-cell.d.ts +28 -0
  42. package/dist/common/data-table/header-cell.js +149 -0
  43. package/dist/common/data-table/index.d.ts +101 -0
  44. package/dist/common/data-table/index.js +464 -0
  45. package/dist/common/data-table/option-dropdown.d.ts +28 -0
  46. package/dist/common/data-table/option-dropdown.js +160 -0
  47. package/dist/common/dataset-label.d.ts +10 -0
  48. package/dist/common/dataset-label.js +27 -0
  49. package/dist/common/error-boundary.d.ts +16 -0
  50. package/dist/common/error-boundary.js +59 -0
  51. package/dist/common/field-selector.d.ts +49 -0
  52. package/dist/common/field-selector.js +173 -0
  53. package/dist/common/field-token.d.ts +62 -0
  54. package/dist/common/field-token.js +43 -0
  55. package/dist/common/file-uploader/file-drop.d.ts +54 -0
  56. package/dist/common/file-uploader/file-drop.js +196 -0
  57. package/dist/common/file-uploader/file-upload-progress.d.ts +8 -0
  58. package/dist/common/file-uploader/file-upload-progress.js +86 -0
  59. package/dist/common/file-uploader/file-upload.d.ts +23 -0
  60. package/dist/common/file-uploader/file-upload.js +244 -0
  61. package/dist/common/file-uploader/upload-button.d.ts +8 -0
  62. package/dist/common/file-uploader/upload-button.js +59 -0
  63. package/dist/common/flex-container.d.ts +3 -0
  64. package/dist/common/flex-container.js +15 -0
  65. package/dist/common/histogram-plot.d.ts +13 -0
  66. package/dist/common/histogram-plot.js +232 -0
  67. package/dist/common/icon-button.d.ts +27 -0
  68. package/dist/common/icon-button.js +25 -0
  69. package/dist/common/icons/add.d.ts +9 -0
  70. package/dist/common/icons/add.js +41 -0
  71. package/dist/common/icons/anchor_window.d.ts +11 -0
  72. package/dist/common/icons/anchor_window.js +34 -0
  73. package/dist/common/icons/arrow-down-alt.d.ts +9 -0
  74. package/dist/common/icons/arrow-down-alt.js +41 -0
  75. package/dist/common/icons/arrow-down-full.d.ts +16 -0
  76. package/dist/common/icons/arrow-down-full.js +50 -0
  77. package/dist/common/icons/arrow-down-small.d.ts +14 -0
  78. package/dist/common/icons/arrow-down-small.js +54 -0
  79. package/dist/common/icons/arrow-down-solid.d.ts +9 -0
  80. package/dist/common/icons/arrow-down-solid.js +41 -0
  81. package/dist/common/icons/arrow-down.d.ts +9 -0
  82. package/dist/common/icons/arrow-down.js +41 -0
  83. package/dist/common/icons/arrow-left.d.ts +9 -0
  84. package/dist/common/icons/arrow-left.js +44 -0
  85. package/dist/common/icons/arrow-right.d.ts +9 -0
  86. package/dist/common/icons/arrow-right.js +41 -0
  87. package/dist/common/icons/arrow-up-alt.d.ts +9 -0
  88. package/dist/common/icons/arrow-up-alt.js +42 -0
  89. package/dist/common/icons/arrow-up-solid.d.ts +9 -0
  90. package/dist/common/icons/arrow-up-solid.js +41 -0
  91. package/dist/common/icons/arrow-up.d.ts +9 -0
  92. package/dist/common/icons/arrow-up.js +41 -0
  93. package/dist/common/icons/base.d.ts +29 -0
  94. package/dist/common/icons/base.js +79 -0
  95. package/dist/common/icons/bug.d.ts +9 -0
  96. package/dist/common/icons/bug.js +43 -0
  97. package/dist/common/icons/calendar.d.ts +10 -0
  98. package/dist/common/icons/calendar.js +49 -0
  99. package/dist/common/icons/cancel.d.ts +9 -0
  100. package/dist/common/icons/cancel.js +41 -0
  101. package/dist/common/icons/checkmark.d.ts +10 -0
  102. package/dist/common/icons/checkmark.js +47 -0
  103. package/dist/common/icons/clipboard.d.ts +9 -0
  104. package/dist/common/icons/clipboard.js +42 -0
  105. package/dist/common/icons/clock.d.ts +9 -0
  106. package/dist/common/icons/clock.js +43 -0
  107. package/dist/common/icons/close.d.ts +9 -0
  108. package/dist/common/icons/close.js +46 -0
  109. package/dist/common/icons/code-alt.d.ts +9 -0
  110. package/dist/common/icons/code-alt.js +44 -0
  111. package/dist/common/icons/copy.d.ts +9 -0
  112. package/dist/common/icons/copy.js +46 -0
  113. package/dist/common/icons/crosshairs.d.ts +9 -0
  114. package/dist/common/icons/crosshairs.js +44 -0
  115. package/dist/common/icons/cube-3d.d.ts +9 -0
  116. package/dist/common/icons/cube-3d.js +45 -0
  117. package/dist/common/icons/cursor-click.d.ts +9 -0
  118. package/dist/common/icons/cursor-click.js +45 -0
  119. package/dist/common/icons/cursor-point.d.ts +14 -0
  120. package/dist/common/icons/cursor-point.js +51 -0
  121. package/dist/common/icons/data-table.d.ts +10 -0
  122. package/dist/common/icons/data-table.js +42 -0
  123. package/dist/common/icons/db.d.ts +10 -0
  124. package/dist/common/icons/db.js +42 -0
  125. package/dist/common/icons/delete.d.ts +9 -0
  126. package/dist/common/icons/delete.js +43 -0
  127. package/dist/common/icons/docs.d.ts +9 -0
  128. package/dist/common/icons/docs.js +57 -0
  129. package/dist/common/icons/drag-n-drop.d.ts +9 -0
  130. package/dist/common/icons/drag-n-drop.js +43 -0
  131. package/dist/common/icons/draw-polygon.d.ts +10 -0
  132. package/dist/common/icons/draw-polygon.js +61 -0
  133. package/dist/common/icons/edit.d.ts +14 -0
  134. package/dist/common/icons/edit.js +49 -0
  135. package/dist/common/icons/effects/brightness-contrast.d.ts +14 -0
  136. package/dist/common/icons/effects/brightness-contrast.js +70 -0
  137. package/dist/common/icons/effects/color-halftone.d.ts +14 -0
  138. package/dist/common/icons/effects/color-halftone.js +109 -0
  139. package/dist/common/icons/effects/dot-screen.d.ts +14 -0
  140. package/dist/common/icons/effects/dot-screen.js +104 -0
  141. package/dist/common/icons/effects/edge-work.d.ts +14 -0
  142. package/dist/common/icons/effects/edge-work.js +63 -0
  143. package/dist/common/icons/effects/hexagonal-pixelate.d.ts +14 -0
  144. package/dist/common/icons/effects/hexagonal-pixelate.js +130 -0
  145. package/dist/common/icons/effects/hue-saturation.d.ts +14 -0
  146. package/dist/common/icons/effects/hue-saturation.js +61 -0
  147. package/dist/common/icons/effects/ink.d.ts +14 -0
  148. package/dist/common/icons/effects/ink.js +60 -0
  149. package/dist/common/icons/effects/light-and-shadow.d.ts +14 -0
  150. package/dist/common/icons/effects/light-and-shadow.js +49 -0
  151. package/dist/common/icons/effects/magic-wand.d.ts +14 -0
  152. package/dist/common/icons/effects/magic-wand.js +61 -0
  153. package/dist/common/icons/effects/magnify.d.ts +14 -0
  154. package/dist/common/icons/effects/magnify.js +68 -0
  155. package/dist/common/icons/effects/noise.d.ts +14 -0
  156. package/dist/common/icons/effects/noise.js +114 -0
  157. package/dist/common/icons/effects/sepia.d.ts +14 -0
  158. package/dist/common/icons/effects/sepia.js +61 -0
  159. package/dist/common/icons/effects/tilt-shift.d.ts +14 -0
  160. package/dist/common/icons/effects/tilt-shift.js +70 -0
  161. package/dist/common/icons/effects/triangle-blur.d.ts +14 -0
  162. package/dist/common/icons/effects/triangle-blur.js +65 -0
  163. package/dist/common/icons/effects/vibrance.d.ts +14 -0
  164. package/dist/common/icons/effects/vibrance.js +61 -0
  165. package/dist/common/icons/effects/vignette.d.ts +14 -0
  166. package/dist/common/icons/effects/vignette.js +54 -0
  167. package/dist/common/icons/effects/zoom-blur.d.ts +14 -0
  168. package/dist/common/icons/effects/zoom-blur.js +89 -0
  169. package/dist/common/icons/email.d.ts +9 -0
  170. package/dist/common/icons/email.js +45 -0
  171. package/dist/common/icons/expand.d.ts +9 -0
  172. package/dist/common/icons/expand.js +43 -0
  173. package/dist/common/icons/eye-seen.d.ts +9 -0
  174. package/dist/common/icons/eye-seen.js +43 -0
  175. package/dist/common/icons/eye-unseen.d.ts +9 -0
  176. package/dist/common/icons/eye-unseen.js +43 -0
  177. package/dist/common/icons/file-type.d.ts +8 -0
  178. package/dist/common/icons/file-type.js +35 -0
  179. package/dist/common/icons/file.d.ts +9 -0
  180. package/dist/common/icons/file.js +41 -0
  181. package/dist/common/icons/files.d.ts +9 -0
  182. package/dist/common/icons/files.js +41 -0
  183. package/dist/common/icons/filter-funnel.d.ts +9 -0
  184. package/dist/common/icons/filter-funnel.js +41 -0
  185. package/dist/common/icons/free-window.d.ts +4 -0
  186. package/dist/common/icons/free-window.js +44 -0
  187. package/dist/common/icons/gear.d.ts +9 -0
  188. package/dist/common/icons/gear.js +43 -0
  189. package/dist/common/icons/globe.d.ts +15 -0
  190. package/dist/common/icons/globe.js +54 -0
  191. package/dist/common/icons/hash.d.ts +9 -0
  192. package/dist/common/icons/hash.js +41 -0
  193. package/dist/common/icons/help.d.ts +13 -0
  194. package/dist/common/icons/help.js +51 -0
  195. package/dist/common/icons/histogram.d.ts +9 -0
  196. package/dist/common/icons/histogram.js +41 -0
  197. package/dist/common/icons/index.d.ts +106 -0
  198. package/dist/common/icons/index.js +740 -0
  199. package/dist/common/icons/info.d.ts +12 -0
  200. package/dist/common/icons/info.js +54 -0
  201. package/dist/common/icons/layers.d.ts +9 -0
  202. package/dist/common/icons/layers.js +41 -0
  203. package/dist/common/icons/left-arrow.d.ts +9 -0
  204. package/dist/common/icons/left-arrow.js +44 -0
  205. package/dist/common/icons/legend.d.ts +9 -0
  206. package/dist/common/icons/legend.js +41 -0
  207. package/dist/common/icons/line-chart.d.ts +9 -0
  208. package/dist/common/icons/line-chart.js +41 -0
  209. package/dist/common/icons/location-marker.d.ts +14 -0
  210. package/dist/common/icons/location-marker.js +59 -0
  211. package/dist/common/icons/login.d.ts +9 -0
  212. package/dist/common/icons/login.js +44 -0
  213. package/dist/common/icons/logout.d.ts +9 -0
  214. package/dist/common/icons/logout.js +43 -0
  215. package/dist/common/icons/map-icon.d.ts +11 -0
  216. package/dist/common/icons/map-icon.js +48 -0
  217. package/dist/common/icons/map.d.ts +11 -0
  218. package/dist/common/icons/map.js +48 -0
  219. package/dist/common/icons/messages.d.ts +9 -0
  220. package/dist/common/icons/messages.js +41 -0
  221. package/dist/common/icons/minus.d.ts +9 -0
  222. package/dist/common/icons/minus.js +41 -0
  223. package/dist/common/icons/moon.d.ts +14 -0
  224. package/dist/common/icons/moon.js +59 -0
  225. package/dist/common/icons/order-by-dataset.d.ts +4 -0
  226. package/dist/common/icons/order-by-dataset.js +46 -0
  227. package/dist/common/icons/order-by-list.d.ts +4 -0
  228. package/dist/common/icons/order-by-list.js +38 -0
  229. package/dist/common/icons/pause.d.ts +9 -0
  230. package/dist/common/icons/pause.js +41 -0
  231. package/dist/common/icons/picture.d.ts +9 -0
  232. package/dist/common/icons/picture.js +41 -0
  233. package/dist/common/icons/pin.d.ts +9 -0
  234. package/dist/common/icons/pin.js +45 -0
  235. package/dist/common/icons/play.d.ts +9 -0
  236. package/dist/common/icons/play.js +41 -0
  237. package/dist/common/icons/polygon.d.ts +10 -0
  238. package/dist/common/icons/polygon.js +63 -0
  239. package/dist/common/icons/rectangle.d.ts +10 -0
  240. package/dist/common/icons/rectangle.js +64 -0
  241. package/dist/common/icons/reduce.d.ts +9 -0
  242. package/dist/common/icons/reduce.js +44 -0
  243. package/dist/common/icons/reset.d.ts +9 -0
  244. package/dist/common/icons/reset.js +41 -0
  245. package/dist/common/icons/rocket.d.ts +9 -0
  246. package/dist/common/icons/rocket.js +41 -0
  247. package/dist/common/icons/save.d.ts +9 -0
  248. package/dist/common/icons/save.js +43 -0
  249. package/dist/common/icons/save2.d.ts +9 -0
  250. package/dist/common/icons/save2.js +47 -0
  251. package/dist/common/icons/search.d.ts +9 -0
  252. package/dist/common/icons/search.js +43 -0
  253. package/dist/common/icons/settings.d.ts +9 -0
  254. package/dist/common/icons/settings.js +43 -0
  255. package/dist/common/icons/share.d.ts +9 -0
  256. package/dist/common/icons/share.js +41 -0
  257. package/dist/common/icons/split.d.ts +9 -0
  258. package/dist/common/icons/split.js +69 -0
  259. package/dist/common/icons/square-select.d.ts +9 -0
  260. package/dist/common/icons/square-select.js +43 -0
  261. package/dist/common/icons/sun.d.ts +14 -0
  262. package/dist/common/icons/sun.js +75 -0
  263. package/dist/common/icons/sunrise.d.ts +14 -0
  264. package/dist/common/icons/sunrise.js +71 -0
  265. package/dist/common/icons/sunset.d.ts +14 -0
  266. package/dist/common/icons/sunset.js +71 -0
  267. package/dist/common/icons/timeline-marker.d.ts +17 -0
  268. package/dist/common/icons/timeline-marker.js +56 -0
  269. package/dist/common/icons/trash.d.ts +10 -0
  270. package/dist/common/icons/trash.js +44 -0
  271. package/dist/common/icons/vert-dots.d.ts +9 -0
  272. package/dist/common/icons/vert-dots.js +79 -0
  273. package/dist/common/icons/vert-three-dots.d.ts +9 -0
  274. package/dist/common/icons/vert-three-dots.js +54 -0
  275. package/dist/common/icons/warning-sign.d.ts +15 -0
  276. package/dist/common/icons/warning-sign.js +61 -0
  277. package/dist/common/icons/warning.d.ts +10 -0
  278. package/dist/common/icons/warning.js +55 -0
  279. package/dist/common/image-preview.d.ts +15 -0
  280. package/dist/common/image-preview.js +60 -0
  281. package/dist/common/index.d.ts +4 -0
  282. package/dist/common/index.js +277 -0
  283. package/dist/common/info-helper.d.ts +10 -0
  284. package/dist/common/info-helper.js +61 -0
  285. package/dist/common/item-selector/accessor.d.ts +7 -0
  286. package/dist/common/item-selector/accessor.js +37 -0
  287. package/dist/common/item-selector/chickleted-input.d.ts +23 -0
  288. package/dist/common/item-selector/chickleted-input.js +153 -0
  289. package/dist/common/item-selector/dropdown-list.d.ts +74 -0
  290. package/dist/common/item-selector/dropdown-list.js +260 -0
  291. package/dist/common/item-selector/dropdown-select.d.ts +33 -0
  292. package/dist/common/item-selector/dropdown-select.js +79 -0
  293. package/dist/common/item-selector/item-selector.d.ts +82 -0
  294. package/dist/common/item-selector/item-selector.js +252 -0
  295. package/dist/common/item-selector/typeahead.d.ts +126 -0
  296. package/dist/common/item-selector/typeahead.js +433 -0
  297. package/dist/common/line-chart.d.ts +34 -0
  298. package/dist/common/line-chart.js +120 -0
  299. package/dist/common/loading-spinner.d.ts +10 -0
  300. package/dist/common/loading-spinner.js +51 -0
  301. package/dist/common/logo.d.ts +8 -0
  302. package/dist/common/logo.js +68 -0
  303. package/dist/common/map-layer-selector.d.ts +13 -0
  304. package/dist/common/map-layer-selector.js +38 -0
  305. package/dist/common/modal.d.ts +64 -0
  306. package/dist/common/modal.js +171 -0
  307. package/dist/common/portaled.d.ts +583 -0
  308. package/dist/common/portaled.js +285 -0
  309. package/dist/common/progress-bar.d.ts +12 -0
  310. package/dist/common/progress-bar.js +47 -0
  311. package/dist/common/radius-legend.d.ts +10 -0
  312. package/dist/common/radius-legend.js +132 -0
  313. package/dist/common/range-brush.d.ts +19 -0
  314. package/dist/common/range-brush.js +266 -0
  315. package/dist/common/range-plot.d.ts +41 -0
  316. package/dist/common/range-plot.js +207 -0
  317. package/dist/common/range-slider-timeline-panel.d.ts +11 -0
  318. package/dist/common/range-slider-timeline-panel.js +43 -0
  319. package/dist/common/range-slider-timeline.d.ts +7 -0
  320. package/dist/common/range-slider-timeline.js +114 -0
  321. package/dist/common/range-slider.d.ts +42 -0
  322. package/dist/common/range-slider.js +309 -0
  323. package/dist/common/slider/mouse-event.d.ts +27 -0
  324. package/dist/common/slider/mouse-event.js +105 -0
  325. package/dist/common/slider/slider-bar-handle.d.ts +29 -0
  326. package/dist/common/slider/slider-bar-handle.js +91 -0
  327. package/dist/common/slider/slider-handle.d.ts +33 -0
  328. package/dist/common/slider/slider-handle.js +137 -0
  329. package/dist/common/slider/slider.d.ts +72 -0
  330. package/dist/common/slider/slider.js +209 -0
  331. package/dist/common/styled-components.d.ts +159 -0
  332. package/dist/common/styled-components.js +398 -0
  333. package/dist/common/switch.d.ts +16 -0
  334. package/dist/common/switch.js +21 -0
  335. package/dist/common/sync-timeline-control.d.ts +28 -0
  336. package/dist/common/sync-timeline-control.js +61 -0
  337. package/dist/common/time-range-slider-time-title.d.ts +9 -0
  338. package/dist/common/time-range-slider-time-title.js +62 -0
  339. package/dist/common/time-range-slider.d.ts +42 -0
  340. package/dist/common/time-range-slider.js +132 -0
  341. package/dist/common/time-slider-marker.d.ts +14 -0
  342. package/dist/common/time-slider-marker.js +116 -0
  343. package/dist/common/timeline-slider.d.ts +13 -0
  344. package/dist/common/timeline-slider.js +132 -0
  345. package/dist/common/tippy-tooltip.d.ts +6 -0
  346. package/dist/common/tippy-tooltip.js +135 -0
  347. package/dist/common/toolbar-item.d.ts +14 -0
  348. package/dist/common/toolbar-item.js +60 -0
  349. package/dist/common/toolbar.d.ts +5 -0
  350. package/dist/common/toolbar.js +27 -0
  351. package/dist/common/vertical-toolbar.d.ts +3 -0
  352. package/dist/common/vertical-toolbar.js +16 -0
  353. package/dist/connect/keplergl-connect.d.ts +9 -0
  354. package/dist/connect/keplergl-connect.js +44 -0
  355. package/dist/connect/with-local-selector.d.ts +6 -0
  356. package/dist/connect/with-local-selector.js +86 -0
  357. package/dist/container.d.ts +39 -0
  358. package/dist/container.js +181 -0
  359. package/dist/context.d.ts +27 -0
  360. package/dist/context.js +44 -0
  361. package/dist/dnd-context.d.ts +13 -0
  362. package/dist/dnd-context.js +124 -0
  363. package/dist/editor/editor.d.ts +31 -0
  364. package/dist/editor/editor.js +201 -0
  365. package/dist/editor/feature-action-panel.d.ts +32 -0
  366. package/dist/editor/feature-action-panel.js +148 -0
  367. package/dist/effects/compact-color-picker.d.ts +10 -0
  368. package/dist/effects/compact-color-picker.js +111 -0
  369. package/dist/effects/effect-configurator.d.ts +17 -0
  370. package/dist/effects/effect-configurator.js +275 -0
  371. package/dist/effects/effect-list.d.ts +20 -0
  372. package/dist/effects/effect-list.js +129 -0
  373. package/dist/effects/effect-manager.d.ts +27 -0
  374. package/dist/effects/effect-manager.js +120 -0
  375. package/dist/effects/effect-panel-header.d.ts +45 -0
  376. package/dist/effects/effect-panel-header.js +180 -0
  377. package/dist/effects/effect-panel.d.ts +24 -0
  378. package/dist/effects/effect-panel.js +112 -0
  379. package/dist/effects/effect-time-configurator.d.ts +20 -0
  380. package/dist/effects/effect-time-configurator.js +302 -0
  381. package/dist/effects/effect-time-selector.d.ts +16 -0
  382. package/dist/effects/effect-time-selector.js +153 -0
  383. package/dist/effects/effect-time-slider.d.ts +34 -0
  384. package/dist/effects/effect-time-slider.js +199 -0
  385. package/dist/effects/effect-type-dropdown-list.d.ts +18 -0
  386. package/dist/effects/effect-type-dropdown-list.js +66 -0
  387. package/dist/effects/effect-type-list-item.d.ts +22 -0
  388. package/dist/effects/effect-type-list-item.js +87 -0
  389. package/dist/effects/effect-type-selector.d.ts +30 -0
  390. package/dist/effects/effect-type-selector.js +77 -0
  391. package/dist/effects/side-panel-title.d.ts +7 -0
  392. package/dist/effects/side-panel-title.js +37 -0
  393. package/dist/effects/timezone-selector.d.ts +19 -0
  394. package/dist/effects/timezone-selector.js +58 -0
  395. package/dist/filter-animation-controller.d.ts +17 -0
  396. package/dist/filter-animation-controller.js +77 -0
  397. package/dist/filters/components.d.ts +3 -0
  398. package/dist/filters/components.js +14 -0
  399. package/dist/filters/filter-panels/filter-panel-with-field-select.d.ts +10 -0
  400. package/dist/filters/filter-panels/filter-panel-with-field-select.js +78 -0
  401. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +54 -0
  402. package/dist/filters/filter-panels/filter-synced-dataset-panel.js +261 -0
  403. package/dist/filters/filter-panels/multi-select-filter-panel.d.ts +9 -0
  404. package/dist/filters/filter-panels/multi-select-filter-panel.js +49 -0
  405. package/dist/filters/filter-panels/new-filter-panel.d.ts +12 -0
  406. package/dist/filters/filter-panels/new-filter-panel.js +67 -0
  407. package/dist/filters/filter-panels/polygon-filter-panel.d.ts +9 -0
  408. package/dist/filters/filter-panels/polygon-filter-panel.js +68 -0
  409. package/dist/filters/filter-panels/range-filter-panel.d.ts +9 -0
  410. package/dist/filters/filter-panels/range-filter-panel.js +54 -0
  411. package/dist/filters/filter-panels/single-select-filter-panel.d.ts +9 -0
  412. package/dist/filters/filter-panels/single-select-filter-panel.js +49 -0
  413. package/dist/filters/filter-panels/time-range-filter-panel.d.ts +12 -0
  414. package/dist/filters/filter-panels/time-range-filter-panel.js +130 -0
  415. package/dist/filters/filter-panels/time-synced-field-selector.d.ts +7 -0
  416. package/dist/filters/filter-panels/time-synced-field-selector.js +28 -0
  417. package/dist/filters/filter-panels/types.d.ts +40 -0
  418. package/dist/filters/filter-panels/types.js +6 -0
  419. package/dist/filters/index.d.ts +7 -0
  420. package/dist/filters/index.js +56 -0
  421. package/dist/filters/multi-select-filter.d.ts +3 -0
  422. package/dist/filters/multi-select-filter.js +31 -0
  423. package/dist/filters/polygon-filter.d.ts +4 -0
  424. package/dist/filters/polygon-filter.js +77 -0
  425. package/dist/filters/range-filter.d.ts +8 -0
  426. package/dist/filters/range-filter.js +35 -0
  427. package/dist/filters/single-select-filter.d.ts +3 -0
  428. package/dist/filters/single-select-filter.js +40 -0
  429. package/dist/filters/time-range-filter.d.ts +35 -0
  430. package/dist/filters/time-range-filter.js +67 -0
  431. package/dist/filters/time-widget-top.d.ts +8 -0
  432. package/dist/filters/time-widget-top.js +88 -0
  433. package/dist/filters/time-widget.d.ts +10 -0
  434. package/dist/filters/time-widget.js +101 -0
  435. package/dist/filters/types.d.ts +67 -0
  436. package/dist/filters/types.js +6 -0
  437. package/dist/geocoder/geocoder.d.ts +31 -0
  438. package/dist/geocoder/geocoder.js +269 -0
  439. package/dist/geocoder-panel.d.ts +22 -0
  440. package/dist/geocoder-panel.js +197 -0
  441. package/dist/hooks/use-cloud-list-provider.d.ts +11 -0
  442. package/dist/hooks/use-cloud-list-provider.js +47 -0
  443. package/dist/hooks/use-dnd-effects.d.ts +9 -0
  444. package/dist/hooks/use-dnd-effects.js +69 -0
  445. package/dist/hooks/use-dnd-layers.d.ts +9 -0
  446. package/dist/hooks/use-dnd-layers.js +80 -0
  447. package/dist/hooks/use-feature-flags.d.ts +5 -0
  448. package/dist/hooks/use-feature-flags.js +17 -0
  449. package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +16 -0
  450. package/dist/hooks/use-fetch-vector-tile-metadata.js +109 -0
  451. package/dist/hooks/use-on-click-outside.d.ts +2 -0
  452. package/dist/hooks/use-on-click-outside.js +36 -0
  453. package/dist/index.d.ts +253 -0
  454. package/dist/index.js +2608 -0
  455. package/dist/injector.d.ts +29 -0
  456. package/dist/injector.js +151 -0
  457. package/dist/kepler-gl.d.ts +325 -0
  458. package/dist/kepler-gl.js +504 -0
  459. package/dist/layer-animation-controller.d.ts +13 -0
  460. package/dist/layer-animation-controller.js +54 -0
  461. package/dist/map/coordinate-info.d.ts +7 -0
  462. package/dist/map/coordinate-info.js +42 -0
  463. package/dist/map/effects/effect-control.d.ts +16 -0
  464. package/dist/map/effects/effect-control.js +52 -0
  465. package/dist/map/layer-hover-info.d.ts +29 -0
  466. package/dist/map/layer-hover-info.js +222 -0
  467. package/dist/map/layer-selector-panel.d.ts +21 -0
  468. package/dist/map/layer-selector-panel.js +85 -0
  469. package/dist/map/lazy-tippy.d.ts +8 -0
  470. package/dist/map/lazy-tippy.js +61 -0
  471. package/dist/map/locale-panel.d.ts +16 -0
  472. package/dist/map/locale-panel.js +77 -0
  473. package/dist/map/map-control-panel.d.ts +20 -0
  474. package/dist/map/map-control-panel.js +139 -0
  475. package/dist/map/map-control-toolbar.d.ts +2 -0
  476. package/dist/map/map-control-toolbar.js +18 -0
  477. package/dist/map/map-control-tooltip.d.ts +8 -0
  478. package/dist/map/map-control-tooltip.js +34 -0
  479. package/dist/map/map-control.d.ts +56 -0
  480. package/dist/map/map-control.js +71 -0
  481. package/dist/map/map-draw-panel.d.ts +20 -0
  482. package/dist/map/map-draw-panel.js +98 -0
  483. package/dist/map/map-legend-panel.d.ts +65 -0
  484. package/dist/map/map-legend-panel.js +155 -0
  485. package/dist/map/map-legend.d.ts +90 -0
  486. package/dist/map/map-legend.js +369 -0
  487. package/dist/map/map-popover-content.d.ts +28 -0
  488. package/dist/map/map-popover-content.js +28 -0
  489. package/dist/map/map-popover.d.ts +33 -0
  490. package/dist/map/map-popover.js +185 -0
  491. package/dist/map/split-map-button.d.ts +20 -0
  492. package/dist/map/split-map-button.js +65 -0
  493. package/dist/map/toggle-3d-button.d.ts +17 -0
  494. package/dist/map/toggle-3d-button.js +55 -0
  495. package/dist/map-container.d.ts +73 -0
  496. package/dist/map-container.js +903 -0
  497. package/dist/map-view-state-context.d.ts +17 -0
  498. package/dist/map-view-state-context.js +99 -0
  499. package/dist/maps-layout.d.ts +12 -0
  500. package/dist/maps-layout.js +43 -0
  501. package/dist/modal-container.d.ts +59 -0
  502. package/dist/modal-container.js +434 -0
  503. package/dist/modals/add-map-style-modal.d.ts +17 -0
  504. package/dist/modals/add-map-style-modal.js +198 -0
  505. package/dist/modals/cloud-components/cloud-header.d.ts +12 -0
  506. package/dist/modals/cloud-components/cloud-header.js +60 -0
  507. package/dist/modals/cloud-components/cloud-item.d.ts +5 -0
  508. package/dist/modals/cloud-components/cloud-item.js +59 -0
  509. package/dist/modals/cloud-components/cloud-item.spec.d.ts +1 -0
  510. package/dist/modals/cloud-components/cloud-item.spec.js +92 -0
  511. package/dist/modals/cloud-components/cloud-maps.d.ts +8 -0
  512. package/dist/modals/cloud-components/cloud-maps.js +47 -0
  513. package/dist/modals/cloud-components/cloud-maps.spec.d.ts +1 -0
  514. package/dist/modals/cloud-components/cloud-maps.spec.js +98 -0
  515. package/dist/modals/cloud-components/provider-loading.d.ts +2 -0
  516. package/dist/modals/cloud-components/provider-loading.js +20 -0
  517. package/dist/modals/cloud-components/provider-select.d.ts +7 -0
  518. package/dist/modals/cloud-components/provider-select.js +30 -0
  519. package/dist/modals/cloud-tile.d.ts +15 -0
  520. package/dist/modals/cloud-tile.js +203 -0
  521. package/dist/modals/data-table-modal.d.ts +37 -0
  522. package/dist/modals/data-table-modal.js +264 -0
  523. package/dist/modals/delete-data-modal.d.ts +10 -0
  524. package/dist/modals/delete-data-modal.js +41 -0
  525. package/dist/modals/error-display.d.ts +6 -0
  526. package/dist/modals/error-display.js +33 -0
  527. package/dist/modals/export-data-modal.d.ts +23 -0
  528. package/dist/modals/export-data-modal.js +187 -0
  529. package/dist/modals/export-image-modal.d.ts +16 -0
  530. package/dist/modals/export-image-modal.js +122 -0
  531. package/dist/modals/export-map-modal/components.d.ts +8 -0
  532. package/dist/modals/export-map-modal/components.js +34 -0
  533. package/dist/modals/export-map-modal/export-html-map.d.ts +12 -0
  534. package/dist/modals/export-map-modal/export-html-map.js +126 -0
  535. package/dist/modals/export-map-modal/export-json-map.d.ts +9 -0
  536. package/dist/modals/export-map-modal/export-json-map.js +81 -0
  537. package/dist/modals/export-map-modal/export-map-modal.d.ts +27 -0
  538. package/dist/modals/export-map-modal/export-map-modal.js +84 -0
  539. package/dist/modals/image-modal-container.d.ts +16 -0
  540. package/dist/modals/image-modal-container.js +58 -0
  541. package/dist/modals/load-data-modal.d.ts +44 -0
  542. package/dist/modals/load-data-modal.js +98 -0
  543. package/dist/modals/load-storage-map.d.ts +9 -0
  544. package/dist/modals/load-storage-map.js +80 -0
  545. package/dist/modals/load-storage-map.spec.d.ts +1 -0
  546. package/dist/modals/load-storage-map.spec.js +216 -0
  547. package/dist/modals/loading-dialog.d.ts +7 -0
  548. package/dist/modals/loading-dialog.js +37 -0
  549. package/dist/modals/modal-dialog.d.ts +2 -0
  550. package/dist/modals/modal-dialog.js +16 -0
  551. package/dist/modals/modal-tabs.d.ts +15 -0
  552. package/dist/modals/modal-tabs.js +75 -0
  553. package/dist/modals/overwrite-map-modal.d.ts +16 -0
  554. package/dist/modals/overwrite-map-modal.js +84 -0
  555. package/dist/modals/save-map-modal.d.ts +28 -0
  556. package/dist/modals/save-map-modal.js +179 -0
  557. package/dist/modals/save-map-modal.spec.d.ts +1 -0
  558. package/dist/modals/save-map-modal.spec.js +195 -0
  559. package/dist/modals/share-map-modal.d.ts +26 -0
  560. package/dist/modals/share-map-modal.js +169 -0
  561. package/dist/modals/share-map-modal.spec.d.ts +1 -0
  562. package/dist/modals/share-map-modal.spec.js +173 -0
  563. package/dist/modals/status-panel.d.ts +13 -0
  564. package/dist/modals/status-panel.js +65 -0
  565. package/dist/modals/storage-map-viewer.d.ts +21 -0
  566. package/dist/modals/storage-map-viewer.js +98 -0
  567. package/dist/modals/tilesets-modals/common.d.ts +12 -0
  568. package/dist/modals/tilesets-modals/common.js +6 -0
  569. package/dist/modals/tilesets-modals/load-data-footer.d.ts +11 -0
  570. package/dist/modals/tilesets-modals/load-data-footer.js +41 -0
  571. package/dist/modals/tilesets-modals/load-tileset.d.ts +16 -0
  572. package/dist/modals/tilesets-modals/load-tileset.js +114 -0
  573. package/dist/modals/tilesets-modals/tileset-icon.d.ts +9 -0
  574. package/dist/modals/tilesets-modals/tileset-icon.js +32 -0
  575. package/dist/modals/tilesets-modals/tileset-vector-form.d.ts +13 -0
  576. package/dist/modals/tilesets-modals/tileset-vector-form.js +165 -0
  577. package/dist/notification-panel/notification-item.d.ts +67 -0
  578. package/dist/notification-panel/notification-item.js +150 -0
  579. package/dist/notification-panel.d.ts +13 -0
  580. package/dist/notification-panel.js +61 -0
  581. package/dist/plot-container.d.ts +24 -0
  582. package/dist/plot-container.js +223 -0
  583. package/dist/side-panel/add-by-dataset-button.d.ts +12 -0
  584. package/dist/side-panel/add-by-dataset-button.js +128 -0
  585. package/dist/side-panel/cloud-storage-dropdown.d.ts +6 -0
  586. package/dist/side-panel/cloud-storage-dropdown.js +40 -0
  587. package/dist/side-panel/common/dataset-info.d.ts +11 -0
  588. package/dist/side-panel/common/dataset-info.js +34 -0
  589. package/dist/side-panel/common/dataset-tag.d.ts +17 -0
  590. package/dist/side-panel/common/dataset-tag.js +62 -0
  591. package/dist/side-panel/common/dataset-title.d.ts +22 -0
  592. package/dist/side-panel/common/dataset-title.js +143 -0
  593. package/dist/side-panel/common/source-data-catalog.d.ts +29 -0
  594. package/dist/side-panel/common/source-data-catalog.js +49 -0
  595. package/dist/side-panel/common/source-data-selector-content.d.ts +8 -0
  596. package/dist/side-panel/common/source-data-selector-content.js +65 -0
  597. package/dist/side-panel/common/source-data-selector.d.ts +8 -0
  598. package/dist/side-panel/common/source-data-selector.js +41 -0
  599. package/dist/side-panel/common/source-selector.d.ts +21 -0
  600. package/dist/side-panel/common/source-selector.js +57 -0
  601. package/dist/side-panel/common/types.d.ts +44 -0
  602. package/dist/side-panel/common/types.js +6 -0
  603. package/dist/side-panel/custom-panel.d.ts +13 -0
  604. package/dist/side-panel/custom-panel.js +39 -0
  605. package/dist/side-panel/filter-manager.d.ts +32 -0
  606. package/dist/side-panel/filter-manager.js +203 -0
  607. package/dist/side-panel/filter-panel/add-filter-button.d.ts +8 -0
  608. package/dist/side-panel/filter-panel/add-filter-button.js +28 -0
  609. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +26 -0
  610. package/dist/side-panel/filter-panel/filter-panel-header.js +53 -0
  611. package/dist/side-panel/filter-panel/filter-panel.d.ts +23 -0
  612. package/dist/side-panel/filter-panel/filter-panel.js +93 -0
  613. package/dist/side-panel/interaction-manager.d.ts +18 -0
  614. package/dist/side-panel/interaction-manager.js +45 -0
  615. package/dist/side-panel/interaction-panel/brush-config.d.ts +15 -0
  616. package/dist/side-panel/interaction-panel/brush-config.js +41 -0
  617. package/dist/side-panel/interaction-panel/interaction-panel.d.ts +20 -0
  618. package/dist/side-panel/interaction-panel/interaction-panel.js +115 -0
  619. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +30 -0
  620. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +162 -0
  621. package/dist/side-panel/interaction-panel/tooltip-config.d.ts +37 -0
  622. package/dist/side-panel/interaction-panel/tooltip-config.js +150 -0
  623. package/dist/side-panel/layer-manager.d.ts +44 -0
  624. package/dist/side-panel/layer-manager.js +200 -0
  625. package/dist/side-panel/layer-panel/add-layer-button.d.ts +8 -0
  626. package/dist/side-panel/layer-panel/add-layer-button.js +28 -0
  627. package/dist/side-panel/layer-panel/aggr-scale-selector.d.ts +13 -0
  628. package/dist/side-panel/layer-panel/aggr-scale-selector.js +35 -0
  629. package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +26 -0
  630. package/dist/side-panel/layer-panel/channel-by-value-selector.js +68 -0
  631. package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +33 -0
  632. package/dist/side-panel/layer-panel/color-breaks-panel.js +153 -0
  633. package/dist/side-panel/layer-panel/color-palette-preset.d.ts +9 -0
  634. package/dist/side-panel/layer-panel/color-palette-preset.js +45 -0
  635. package/dist/side-panel/layer-panel/color-palette.d.ts +12 -0
  636. package/dist/side-panel/layer-panel/color-palette.js +69 -0
  637. package/dist/side-panel/layer-panel/color-range-selector.d.ts +39 -0
  638. package/dist/side-panel/layer-panel/color-range-selector.js +244 -0
  639. package/dist/side-panel/layer-panel/color-scale-selector.d.ts +36 -0
  640. package/dist/side-panel/layer-panel/color-scale-selector.js +186 -0
  641. package/dist/side-panel/layer-panel/color-selector.d.ts +34 -0
  642. package/dist/side-panel/layer-panel/color-selector.js +167 -0
  643. package/dist/side-panel/layer-panel/column-selector.d.ts +18 -0
  644. package/dist/side-panel/layer-panel/column-selector.js +60 -0
  645. package/dist/side-panel/layer-panel/custom-palette.d.ts +77 -0
  646. package/dist/side-panel/layer-panel/custom-palette.js +427 -0
  647. package/dist/side-panel/layer-panel/custom-picker.d.ts +8 -0
  648. package/dist/side-panel/layer-panel/custom-picker.js +71 -0
  649. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +23 -0
  650. package/dist/side-panel/layer-panel/dataset-layer-group.js +67 -0
  651. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +25 -0
  652. package/dist/side-panel/layer-panel/dataset-layer-section.js +60 -0
  653. package/dist/side-panel/layer-panel/dataset-section.d.ts +23 -0
  654. package/dist/side-panel/layer-panel/dataset-section.js +74 -0
  655. package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +23 -0
  656. package/dist/side-panel/layer-panel/dimension-scale-selector.js +90 -0
  657. package/dist/side-panel/layer-panel/how-to-button.d.ts +6 -0
  658. package/dist/side-panel/layer-panel/how-to-button.js +27 -0
  659. package/dist/side-panel/layer-panel/layer-color-selector.d.ts +42 -0
  660. package/dist/side-panel/layer-panel/layer-color-selector.js +106 -0
  661. package/dist/side-panel/layer-panel/layer-column-config.d.ts +24 -0
  662. package/dist/side-panel/layer-panel/layer-column-config.js +86 -0
  663. package/dist/side-panel/layer-panel/layer-column-mode-config.d.ts +47 -0
  664. package/dist/side-panel/layer-panel/layer-column-mode-config.js +193 -0
  665. package/dist/side-panel/layer-panel/layer-config-group.d.ts +44 -0
  666. package/dist/side-panel/layer-panel/layer-config-group.js +141 -0
  667. package/dist/side-panel/layer-panel/layer-configurator.d.ts +67 -0
  668. package/dist/side-panel/layer-panel/layer-configurator.js +644 -0
  669. package/dist/side-panel/layer-panel/layer-error-message.d.ts +6 -0
  670. package/dist/side-panel/layer-panel/layer-error-message.js +29 -0
  671. package/dist/side-panel/layer-panel/layer-list.d.ts +21 -0
  672. package/dist/side-panel/layer-panel/layer-list.js +170 -0
  673. package/dist/side-panel/layer-panel/layer-panel-header.d.ts +73 -0
  674. package/dist/side-panel/layer-panel/layer-panel-header.js +274 -0
  675. package/dist/side-panel/layer-panel/layer-panel.d.ts +39 -0
  676. package/dist/side-panel/layer-panel/layer-panel.js +162 -0
  677. package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +22 -0
  678. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +78 -0
  679. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +22 -0
  680. package/dist/side-panel/layer-panel/layer-type-list-item.js +67 -0
  681. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +22 -0
  682. package/dist/side-panel/layer-panel/layer-type-selector.js +58 -0
  683. package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +11 -0
  684. package/dist/side-panel/layer-panel/radius-by-zoom-input.js +220 -0
  685. package/dist/side-panel/layer-panel/single-color-palette.d.ts +9 -0
  686. package/dist/side-panel/layer-panel/single-color-palette.js +86 -0
  687. package/dist/side-panel/layer-panel/text-label-panel.d.ts +17 -0
  688. package/dist/side-panel/layer-panel/text-label-panel.js +165 -0
  689. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +22 -0
  690. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +86 -0
  691. package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +24 -0
  692. package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +60 -0
  693. package/dist/side-panel/layer-panel/vis-config-slider.d.ts +20 -0
  694. package/dist/side-panel/layer-panel/vis-config-slider.js +159 -0
  695. package/dist/side-panel/layer-panel/vis-config-switch.d.ts +16 -0
  696. package/dist/side-panel/layer-panel/vis-config-switch.js +55 -0
  697. package/dist/side-panel/map-manager.d.ts +27 -0
  698. package/dist/side-panel/map-manager.js +127 -0
  699. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +14 -0
  700. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +77 -0
  701. package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +29 -0
  702. package/dist/side-panel/map-style-panel/map-layer-group-item.js +95 -0
  703. package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +23 -0
  704. package/dist/side-panel/map-style-panel/map-layer-selector.js +74 -0
  705. package/dist/side-panel/map-style-panel/map-style-selector.d.ts +23 -0
  706. package/dist/side-panel/map-style-panel/map-style-selector.js +96 -0
  707. package/dist/side-panel/panel-header-action.d.ts +22 -0
  708. package/dist/side-panel/panel-header-action.js +73 -0
  709. package/dist/side-panel/panel-header.d.ts +91 -0
  710. package/dist/side-panel/panel-header.js +303 -0
  711. package/dist/side-panel/panel-tab.d.ts +20 -0
  712. package/dist/side-panel/panel-tab.js +55 -0
  713. package/dist/side-panel/panel-title.d.ts +7 -0
  714. package/dist/side-panel/panel-title.js +40 -0
  715. package/dist/side-panel/panel-toggle.d.ts +13 -0
  716. package/dist/side-panel/panel-toggle.js +48 -0
  717. package/dist/side-panel/panel-view-list-toggle.d.ts +31 -0
  718. package/dist/side-panel/panel-view-list-toggle.js +98 -0
  719. package/dist/side-panel/side-bar.d.ts +78 -0
  720. package/dist/side-panel/side-bar.js +127 -0
  721. package/dist/side-panel.d.ts +21 -0
  722. package/dist/side-panel.js +214 -0
  723. package/dist/types.d.ts +47 -0
  724. package/dist/types.js +6 -0
  725. package/package.json +16 -16
@@ -0,0 +1,644 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AggregationTypeSelector = void 0;
9
+ exports["default"] = LayerConfiguratorFactory;
10
+ exports.getVisConfiguratorProps = exports.getLayerFields = exports.getLayerDataset = exports.getLayerConfiguratorProps = exports.getLayerChannelConfigProps = void 0;
11
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
19
+ var _localization = require("@kepler.gl/localization");
20
+ var _react = _interopRequireWildcard(require("react"));
21
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
22
+ var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
23
+ var _styledComponents2 = require("../../common/styled-components");
24
+ var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
25
+ var _aggrScaleSelector = _interopRequireDefault(require("./aggr-scale-selector"));
26
+ var _channelByValueSelector = _interopRequireDefault(require("./channel-by-value-selector"));
27
+ var _howToButton = _interopRequireDefault(require("./how-to-button"));
28
+ var _layerColorSelector = require("./layer-color-selector");
29
+ var _layerColumnModeConfig = _interopRequireDefault(require("./layer-column-mode-config"));
30
+ var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
31
+ var _layerErrorMessage = _interopRequireDefault(require("./layer-error-message"));
32
+ var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
33
+ var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
34
+ var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
35
+ var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
36
+ var _vectorTileLayerConfigurator = _interopRequireDefault(require("./vector-tile-layer-configurator"));
37
+ var _utils = require("@kepler.gl/utils");
38
+ var _constants = require("@kepler.gl/constants");
39
+ var _layers = require("@kepler.gl/layers");
40
+ var _templateObject, _templateObject2; // SPDX-License-Identifier: MIT
41
+ // Copyright contributors to the kepler.gl project
42
+ /* eslint-disable complexity */
43
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
44
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
45
+ 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; }
46
+ 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; }
47
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
48
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
49
+ var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
50
+ className: 'layer-panel__config'
51
+ })(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: ", ";\n padding: ", ";\n border-left: ", " dashed\n ", ";\n"])), function (props) {
52
+ return props.theme.layerConfiguratorMargin;
53
+ }, function (props) {
54
+ return props.theme.layerConfiguratorPadding;
55
+ }, function (props) {
56
+ return props.theme.layerConfiguratorBorder;
57
+ }, function (props) {
58
+ return props.theme.layerConfiguratorBorderColor;
59
+ });
60
+ var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
61
+ className: 'layer-panel__config__visualC-config'
62
+ })(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
63
+ var getLayerFields = exports.getLayerFields = function getLayerFields(datasets, layer) {
64
+ var _layer$config;
65
+ return datasets[((_layer$config = layer.config) === null || _layer$config === void 0 ? void 0 : _layer$config.dataId) || ''] ? datasets[layer.config.dataId].fields : [];
66
+ };
67
+
68
+ /** Return any to be able to customize the Dataset entity */
69
+ var getLayerDataset = exports.getLayerDataset = function getLayerDataset(datasets, layer) {
70
+ var _layer$config2;
71
+ return datasets[((_layer$config2 = layer.config) === null || _layer$config2 === void 0 ? void 0 : _layer$config2.dataId) || ''];
72
+ };
73
+ var getLayerConfiguratorProps = exports.getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
74
+ return {
75
+ layer: props.layer,
76
+ fields: getLayerFields(props.datasets, props.layer),
77
+ onChange: props.updateLayerConfig,
78
+ setColorUI: props.updateLayerColorUI
79
+ };
80
+ };
81
+ var getVisConfiguratorProps = exports.getVisConfiguratorProps = function getVisConfiguratorProps(props) {
82
+ return {
83
+ layer: props.layer,
84
+ fields: getLayerFields(props.datasets, props.layer),
85
+ onChange: props.updateLayerVisConfig,
86
+ setColorUI: props.updateLayerColorUI
87
+ };
88
+ };
89
+ var getLayerChannelConfigProps = exports.getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
90
+ return {
91
+ layer: props.layer,
92
+ dataset: getLayerDataset(props.datasets, props.layer),
93
+ fields: getLayerFields(props.datasets, props.layer),
94
+ onChange: props.updateLayerVisualChannelConfig,
95
+ setColorUI: props.updateLayerColorUI
96
+ };
97
+ };
98
+ LayerConfiguratorFactory.deps = [_sourceDataSelector["default"], _visConfigSlider["default"], _textLabelPanel["default"], _layerConfigGroup["default"], _channelByValueSelector["default"], _layerColumnModeConfig["default"], _layerTypeSelector["default"], _visConfigSwitch["default"], _layerColorSelector.LayerColorSelectorFactory, _layerColorSelector.LayerColorRangeSelectorFactory, _layerColorSelector.ArcLayerColorSelectorFactory, _aggrScaleSelector["default"], _vectorTileLayerConfigurator["default"]];
99
+ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabelPanel, LayerConfigGroup, ChannelByValueSelector, LayerColumnModeConfig, LayerTypeSelector, VisConfigSwitch, LayerColorSelector, LayerColorRangeSelector, ArcLayerColorSelector, AggrScaleSelector, VectorTileLayerConfigurator) {
100
+ var LayerConfigurator = /*#__PURE__*/function (_Component) {
101
+ function LayerConfigurator() {
102
+ var _this;
103
+ (0, _classCallCheck2["default"])(this, LayerConfigurator);
104
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
105
+ args[_key] = arguments[_key];
106
+ }
107
+ _this = _callSuper(this, LayerConfigurator, [].concat(args));
108
+ (0, _defineProperty2["default"])(_this, "handleSelectColumnMode", function (key) {
109
+ var updateLayerConfig = _this.props.updateLayerConfig;
110
+ updateLayerConfig({
111
+ columnMode: key
112
+ });
113
+ });
114
+ return _this;
115
+ }
116
+ (0, _inherits2["default"])(LayerConfigurator, _Component);
117
+ return (0, _createClass2["default"])(LayerConfigurator, [{
118
+ key: "_renderPointLayerConfig",
119
+ value: function _renderPointLayerConfig(props) {
120
+ return this._renderScatterplotLayerConfig(props);
121
+ }
122
+ }, {
123
+ key: "_renderIconLayerConfig",
124
+ value: function _renderIconLayerConfig(props) {
125
+ return this._renderScatterplotLayerConfig(props);
126
+ }
127
+ }, {
128
+ key: "_renderVectorTileLayerConfig",
129
+ value: function _renderVectorTileLayerConfig(props) {
130
+ return /*#__PURE__*/_react["default"].createElement(VectorTileLayerConfigurator, props);
131
+ }
132
+ }, {
133
+ key: "_renderScatterplotLayerConfig",
134
+ value: function _renderScatterplotLayerConfig(_ref) {
135
+ var layer = _ref.layer,
136
+ visConfiguratorProps = _ref.visConfiguratorProps,
137
+ layerChannelConfigProps = _ref.layerChannelConfigProps,
138
+ layerConfiguratorProps = _ref.layerConfiguratorProps;
139
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled || {
140
+ label: 'layer.color'
141
+ }, visConfiguratorProps, {
142
+ collapsible: true
143
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
144
+ channel: layer.visualChannels.color
145
+ }, layerChannelConfigProps)), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), layer.type === _constants.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
146
+ collapsible: true
147
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
148
+ channel: layer.visualChannels.strokeColor
149
+ }, layerChannelConfigProps)), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
150
+ property: "strokeColorRange"
151
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
152
+ selectedColor: layer.config.visConfig.strokeColor,
153
+ property: "strokeColor"
154
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
155
+ disabled: !layer.config.visConfig.outline
156
+ })))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
157
+ label: 'layer.radius',
158
+ collapsible: true
159
+ }, !layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
160
+ label: false,
161
+ disabled: Boolean(layer.config.sizeField)
162
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
163
+ label: false,
164
+ disabled: !layer.config.sizeField || layer.config.visConfig.fixedRadius
165
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
166
+ channel: layer.visualChannels.size
167
+ }, layerChannelConfigProps)), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedRadius, visConfiguratorProps)) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.billboard, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
168
+ id: layer.id,
169
+ fields: visConfiguratorProps.fields,
170
+ updateLayerTextLabel: this.props.updateLayerTextLabel,
171
+ textLabel: layer.config.textLabel
172
+ }), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
173
+ label: 'layer.interaction',
174
+ collapsible: true
175
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.allowHover, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.showNeighborOnHover, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.showHighlightColor, visConfiguratorProps)))));
176
+ }
177
+ }, {
178
+ key: "_renderClusterLayerConfig",
179
+ value: function _renderClusterLayerConfig(_ref2) {
180
+ var layer = _ref2.layer,
181
+ visConfiguratorProps = _ref2.visConfiguratorProps,
182
+ layerConfiguratorProps = _ref2.layerConfiguratorProps,
183
+ layerChannelConfigProps = _ref2.layerChannelConfigProps;
184
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
185
+ label: 'layer.color',
186
+ collapsible: true
187
+ }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
188
+ channel: layer.visualChannels.color
189
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
190
+ channel: layer.visualChannels.color
191
+ })), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
192
+ channel: layer.visualChannels.color
193
+ })) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
194
+ label: 'layer.radius',
195
+ collapsible: true
196
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps)))));
197
+ }
198
+ }, {
199
+ key: "_renderHeatmapLayerConfig",
200
+ value: function _renderHeatmapLayerConfig(_ref3) {
201
+ var layer = _ref3.layer,
202
+ visConfiguratorProps = _ref3.visConfiguratorProps,
203
+ layerChannelConfigProps = _ref3.layerChannelConfigProps;
204
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
205
+ label: 'layer.color',
206
+ collapsible: true
207
+ }, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
208
+ label: 'layer.radius'
209
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
210
+ label: false
211
+ }))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
212
+ label: 'layer.weight'
213
+ }, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
214
+ channel: layer.visualChannels.weight
215
+ }, layerChannelConfigProps))));
216
+ }
217
+ }, {
218
+ key: "_renderGridLayerConfig",
219
+ value: function _renderGridLayerConfig(props) {
220
+ return this._renderAggregationLayerConfig(props);
221
+ }
222
+ }, {
223
+ key: "_renderHexagonLayerConfig",
224
+ value: function _renderHexagonLayerConfig(props) {
225
+ return this._renderAggregationLayerConfig(props);
226
+ }
227
+ }, {
228
+ key: "_renderAggregationLayerConfig",
229
+ value: function _renderAggregationLayerConfig(_ref4) {
230
+ var layer = _ref4.layer,
231
+ visConfiguratorProps = _ref4.visConfiguratorProps,
232
+ layerConfiguratorProps = _ref4.layerConfiguratorProps,
233
+ layerChannelConfigProps = _ref4.layerChannelConfigProps;
234
+ var config = layer.config;
235
+ var _config$visConfig = config.visConfig,
236
+ enable3d = _config$visConfig.enable3d,
237
+ fixedHeight = _config$visConfig.fixedHeight;
238
+ var elevationByDescription = 'layer.elevationByDescription';
239
+ var colorByDescription = 'layer.colorByDescription';
240
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
241
+ label: 'layer.color',
242
+ collapsible: true
243
+ }, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
244
+ channel: layer.visualChannels.color
245
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
246
+ channel: layer.visualChannels.color
247
+ })), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
248
+ description: colorByDescription,
249
+ channel: layer.visualChannels.color
250
+ })) : null, layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
251
+ label: 'layer.radius',
252
+ collapsible: true
253
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps)))), layer.visConfigSettings.enable3d ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
254
+ collapsible: true
255
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
256
+ label: 'layerVisConfigs.heightMultiplier'
257
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
258
+ channel: layer.visualChannels.size,
259
+ description: elevationByDescription,
260
+ disabled: !enable3d
261
+ })), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
262
+ channel: layer.visualChannels.size
263
+ })) : null, /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
264
+ channel: layer.visualChannels.size,
265
+ label: 'Height Scale'
266
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
267
+ label: 'layerVisConfigs.heightRange',
268
+ disabled: fixedHeight
269
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedHeight, visConfiguratorProps)), layer.visConfigSettings.elevationPercentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
270
+ }
271
+
272
+ // TODO: Shan move these into layer class
273
+ }, {
274
+ key: "_renderHexagonIdLayerConfig",
275
+ value: function _renderHexagonIdLayerConfig(_ref5) {
276
+ var layer = _ref5.layer,
277
+ visConfiguratorProps = _ref5.visConfiguratorProps,
278
+ layerConfiguratorProps = _ref5.layerConfiguratorProps,
279
+ layerChannelConfigProps = _ref5.layerChannelConfigProps;
280
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
281
+ label: 'layer.fillColor',
282
+ collapsible: true
283
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
284
+ channel: layer.visualChannels.color
285
+ }, layerChannelConfigProps)), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps, {
286
+ disabled: !layer.config.visConfig.filled
287
+ })))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
288
+ collapsible: true
289
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
290
+ channel: layer.visualChannels.strokeColor
291
+ }, layerChannelConfigProps)), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
292
+ property: "strokeColorRange"
293
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
294
+ selectedColor: layer.config.visConfig.strokeColor,
295
+ property: "strokeColor"
296
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps, {
297
+ disabled: !layer.config.visConfig.outline
298
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
299
+ disabled: !layer.config.visConfig.outline
300
+ })))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
301
+ label: 'layer.coverage',
302
+ collapsible: true
303
+ }, !layer.config.coverageField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps, {
304
+ label: false
305
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverageRange, visConfiguratorProps, {
306
+ label: false
307
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
308
+ channel: layer.visualChannels.coverage
309
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
310
+ collapsible: true
311
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
312
+ channel: layer.visualChannels.size
313
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
314
+ label: 'layerVisConfigs.heightMultiplier'
315
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
316
+ label: "layerVisConfigs.heightRange"
317
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedHeight, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
318
+ id: layer.id,
319
+ fields: visConfiguratorProps.fields,
320
+ updateLayerTextLabel: this.props.updateLayerTextLabel,
321
+ textLabel: layer.config.textLabel
322
+ }));
323
+ }
324
+ }, {
325
+ key: "_renderArcLayerConfig",
326
+ value: function _renderArcLayerConfig(args) {
327
+ return this._renderLineLayerConfig(args);
328
+ }
329
+ }, {
330
+ key: "_renderLineLayerConfig",
331
+ value: function _renderLineLayerConfig(_ref6) {
332
+ var layer = _ref6.layer,
333
+ visConfiguratorProps = _ref6.visConfiguratorProps,
334
+ layerConfiguratorProps = _ref6.layerConfiguratorProps,
335
+ layerChannelConfigProps = _ref6.layerChannelConfigProps;
336
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
337
+ label: 'layer.color',
338
+ collapsible: true
339
+ }, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
340
+ channel: layer.visualChannels.sourceColor
341
+ }, layerChannelConfigProps)), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(ArcLayerColorSelector, {
342
+ layer: layer,
343
+ setColorUI: layerConfiguratorProps.setColorUI,
344
+ onChangeConfig: layerConfiguratorProps.onChange,
345
+ onChangeVisConfig: visConfiguratorProps.onChange
346
+ }), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
347
+ label: 'layer.stroke',
348
+ collapsible: true
349
+ }, layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
350
+ disabled: !layer.config.sizeField,
351
+ label: false
352
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
353
+ label: false
354
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
355
+ channel: layer.visualChannels.size
356
+ }, layerChannelConfigProps)))), layer.visConfigSettings.elevationScale ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
357
+ label: "layerVisConfigs.elevationScale",
358
+ collapsible: true
359
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps))) : null);
360
+ }
361
+ }, {
362
+ key: "_renderTripLayerConfig",
363
+ value: function _renderTripLayerConfig(_ref7) {
364
+ var layer = _ref7.layer,
365
+ visConfiguratorProps = _ref7.visConfiguratorProps,
366
+ layerConfiguratorProps = _ref7.layerConfiguratorProps,
367
+ layerChannelConfigProps = _ref7.layerChannelConfigProps;
368
+ var _layer$meta$featureTy = layer.meta.featureTypes,
369
+ featureTypes = _layer$meta$featureTy === void 0 ? {} : _layer$meta$featureTy;
370
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
371
+ label: 'layer.color',
372
+ collapsible: true
373
+ }, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
374
+ channel: layer.visualChannels.color
375
+ }, layerChannelConfigProps)), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
376
+ label: "layer.strokeWidth",
377
+ collapsible: true
378
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
379
+ label: false
380
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
381
+ label: false
382
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.billboard, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
383
+ channel: layer.visualChannels.size
384
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
385
+ label: "layer.trailLength",
386
+ description: "layer.trailLengthDescription",
387
+ collapsible: true
388
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.trailLength, visConfiguratorProps, {
389
+ label: false
390
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fadeTrail, visConfiguratorProps)))));
391
+ }
392
+ }, {
393
+ key: "_renderGeojsonLayerConfig",
394
+ value: function _renderGeojsonLayerConfig(_ref8) {
395
+ var layer = _ref8.layer,
396
+ visConfiguratorProps = _ref8.visConfiguratorProps,
397
+ layerConfiguratorProps = _ref8.layerConfiguratorProps,
398
+ layerChannelConfigProps = _ref8.layerChannelConfigProps;
399
+ var _layer$meta$featureTy2 = layer.meta.featureTypes,
400
+ featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
401
+ visConfig = layer.config.visConfig;
402
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, featureTypes.polygon || featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
403
+ label: "layer.fillColor",
404
+ collapsible: true
405
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
406
+ channel: layer.visualChannels.color
407
+ }, layerChannelConfigProps)), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
408
+ label: "layer.strokeColor",
409
+ collapsible: true
410
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
411
+ channel: layer.visualChannels.strokeColor
412
+ }, layerChannelConfigProps)), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
413
+ property: "strokeColorRange"
414
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
415
+ selectedColor: layer.config.visConfig.strokeColor,
416
+ property: "strokeColor"
417
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
418
+ label: "layer.strokeWidth",
419
+ collapsible: true
420
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
421
+ label: false
422
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
423
+ label: false
424
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
425
+ channel: layer.visualChannels.size
426
+ }, layerChannelConfigProps)))), featureTypes.polygon ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
427
+ disabled: !visConfig.filled,
428
+ collapsible: true
429
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
430
+ label: false
431
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
432
+ channel: layer.visualChannels.height
433
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedHeight, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))) : null, featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
434
+ label: 'layer.radius',
435
+ collapsible: true
436
+ }, !layer.config.radiusField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
437
+ label: false,
438
+ disabled: Boolean(layer.config.radiusField)
439
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
440
+ label: false,
441
+ disabled: !layer.config.radiusField
442
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
443
+ channel: layer.visualChannels.radius
444
+ }, layerChannelConfigProps)))) : null);
445
+ }
446
+ }, {
447
+ key: "_render3DLayerConfig",
448
+ value: function _render3DLayerConfig(_ref9) {
449
+ var layer = _ref9.layer,
450
+ visConfiguratorProps = _ref9.visConfiguratorProps;
451
+ return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
452
+ label: 'layer.3DModel',
453
+ collapsible: true
454
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
455
+ type: "file",
456
+ accept: ".glb,.gltf",
457
+ onChange: function onChange(e) {
458
+ if (e.target.files && e.target.files[0]) {
459
+ var url = URL.createObjectURL(e.target.files[0]);
460
+ visConfiguratorProps.onChange({
461
+ scenegraph: url
462
+ });
463
+ }
464
+ }
465
+ })), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
466
+ label: 'layer.3DModelOptions',
467
+ collapsible: true
468
+ }, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeScale, visConfiguratorProps, {
469
+ disabled: false
470
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleX, visConfiguratorProps, {
471
+ disabled: false
472
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleY, visConfiguratorProps, {
473
+ disabled: false
474
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleZ, visConfiguratorProps, {
475
+ disabled: false
476
+ }))));
477
+ }
478
+ }, {
479
+ key: "_renderS2LayerConfig",
480
+ value: function _renderS2LayerConfig(_ref10) {
481
+ var layer = _ref10.layer,
482
+ visConfiguratorProps = _ref10.visConfiguratorProps,
483
+ layerConfiguratorProps = _ref10.layerConfiguratorProps,
484
+ layerChannelConfigProps = _ref10.layerChannelConfigProps;
485
+ var visConfig = layer.config.visConfig;
486
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
487
+ label: "layer.fillColor",
488
+ collapsible: true
489
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
490
+ channel: layer.visualChannels.color
491
+ }, layerChannelConfigProps)), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
492
+ label: "layer.strokeColor",
493
+ collapsible: true
494
+ }), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
495
+ property: "strokeColorRange"
496
+ })) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
497
+ selectedColor: layer.config.visConfig.strokeColor,
498
+ property: "strokeColor"
499
+ })), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
500
+ channel: layer.visualChannels.strokeColor
501
+ }, layerChannelConfigProps))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
502
+ label: "layer.strokeWidth",
503
+ collapsible: true
504
+ }), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
505
+ label: false
506
+ })) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
507
+ label: false
508
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
509
+ channel: layer.visualChannels.size
510
+ }, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
511
+ disabled: !visConfig.filled,
512
+ collapsible: true
513
+ }), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
514
+ channel: layer.visualChannels.height
515
+ }, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
516
+ label: 'layerVisConfigs.heightMultiplier'
517
+ })), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.heightRange, visConfiguratorProps, {
518
+ label: "layerVisConfigs.heightRange"
519
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedHeight, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))));
520
+ }
521
+ }, {
522
+ key: "render",
523
+ value: function render() {
524
+ var _this$props = this.props,
525
+ layer = _this$props.layer,
526
+ datasets = _this$props.datasets,
527
+ openModal = _this$props.openModal,
528
+ updateLayerConfig = _this$props.updateLayerConfig,
529
+ layerTypeOptions = _this$props.layerTypeOptions,
530
+ updateLayerType = _this$props.updateLayerType,
531
+ _this$props$disableTy = _this$props.disableTypeSelect,
532
+ disableTypeSelect = _this$props$disableTy === void 0 ? false : _this$props$disableTy;
533
+ var _ref11 = layer.config.dataId ? datasets[layer.config.dataId] : {},
534
+ _ref11$fields = _ref11.fields,
535
+ fields = _ref11$fields === void 0 ? [] : _ref11$fields,
536
+ _ref11$fieldPairs = _ref11.fieldPairs,
537
+ fieldPairs = _ref11$fieldPairs === void 0 ? undefined : _ref11$fieldPairs;
538
+ var config = layer.config;
539
+ var visConfiguratorProps = getVisConfiguratorProps(this.props);
540
+ var layerConfiguratorProps = getLayerConfiguratorProps(this.props);
541
+ var layerChannelConfigProps = getLayerChannelConfigProps(this.props);
542
+ var dataset = getLayerDataset(datasets, layer);
543
+ var renderTemplate = layer.type && "_render".concat((0, _utils.capitalizeFirstLetter)(layer.type), "LayerConfig");
544
+
545
+ // show only datasets that can be used by the layer
546
+ var sourceDataSelectorOptions = Object.keys(datasets).reduce(function (acc, id) {
547
+ return (0, _layers.matchDatasetType)(datasets[id], layer) ? _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, id, datasets[id])) : acc;
548
+ }, {});
549
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, layer.layerInfoModal && !layer.supportedColumnModes ?
550
+ /*#__PURE__*/
551
+ // TODO figure out handler type. String or return type of layer.layerInfoModal ?
552
+ _react["default"].createElement(_howToButton["default"], {
553
+ onClick: function onClick() {
554
+ return openModal(layer.layerInfoModal);
555
+ }
556
+ }) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
557
+ label: 'layer.basic',
558
+ collapsible: true,
559
+ expanded: !layer.hasAllColumns()
560
+ }, /*#__PURE__*/_react["default"].createElement(LayerTypeSelector, {
561
+ selected: layer.type,
562
+ disabled: disableTypeSelect,
563
+ options: layerTypeOptions
564
+ // @ts-ignore
565
+ ,
566
+ onSelect: updateLayerType
567
+ }), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(SourceDataSelector, {
568
+ datasets: sourceDataSelectorOptions,
569
+ id: layer.id,
570
+ dataId: config.dataId
571
+ // @ts-ignore
572
+ ,
573
+ onSelect: function onSelect(value) {
574
+ return updateLayerConfig({
575
+ dataId: value
576
+ });
577
+ }
578
+ }), /*#__PURE__*/_react["default"].createElement(LayerColumnModeConfig, {
579
+ layer: layer,
580
+ supportedColumnModes: layer.supportedColumnModes,
581
+ id: layer.id,
582
+ layerConfig: layer.config
583
+ // TODO figure out handler type. String or return type of layer.layerInfoModal ?
584
+ ,
585
+ openModal: openModal,
586
+ updateLayerConfig: updateLayerConfig,
587
+ updateLayerType: updateLayerType,
588
+ fields: fields,
589
+ fieldPairs: fieldPairs
590
+ })), layer.errorMessage ? /*#__PURE__*/_react["default"].createElement(_layerErrorMessage["default"], {
591
+ errorMessage: layer.errorMessage
592
+ }) : null), renderTemplate && this[renderTemplate] && this[renderTemplate]({
593
+ layer: layer,
594
+ dataset: dataset,
595
+ visConfiguratorProps: visConfiguratorProps,
596
+ layerChannelConfigProps: layerChannelConfigProps,
597
+ layerConfiguratorProps: layerConfiguratorProps
598
+ }));
599
+ }
600
+ }]);
601
+ }(_react.Component);
602
+ return LayerConfigurator;
603
+ }
604
+ var AggregationTypeSelector = exports.AggregationTypeSelector = function AggregationTypeSelector(_ref12) {
605
+ var channel = _ref12.channel,
606
+ layer = _ref12.layer,
607
+ _onChange = _ref12.onChange;
608
+ var field = channel.field,
609
+ aggregation = channel.aggregation,
610
+ key = channel.key;
611
+ var selectedField = layer.config[field];
612
+ var visConfig = layer.config.visConfig;
613
+
614
+ // aggregation should only be selectable when field is selected
615
+ var layerAggregationTypes = layer.getAggregationOptions(key);
616
+ var aggregationOptions = _constants.AGGREGATION_TYPE_OPTIONS.filter(function (_ref13) {
617
+ var id = _ref13.id;
618
+ return layerAggregationTypes.includes(id);
619
+ });
620
+ var selectedAggregation = aggregation ? aggregationOptions.find(function (_ref14) {
621
+ var id = _ref14.id;
622
+ return id === visConfig[aggregation];
623
+ }) : [];
624
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
625
+ id: 'layer.aggregateBy',
626
+ values: {
627
+ field: selectedField.displayName
628
+ }
629
+ })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
630
+ selectedItems: selectedAggregation,
631
+ options: aggregationOptions,
632
+ displayOption: "label",
633
+ getOptionValue: "id",
634
+ multiSelect: false,
635
+ searchable: false,
636
+ onChange: function onChange(value) {
637
+ return _onChange({
638
+ visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, value))
639
+ }, channel.key);
640
+ }
641
+ }));
642
+ };
643
+ /* eslint-enable max-params */
644
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9jYWxpemF0aW9uIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2l0ZW1TZWxlY3RvciIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9zb3VyY2VEYXRhU2VsZWN0b3IiLCJfYWdnclNjYWxlU2VsZWN0b3IiLCJfY2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsIl9ob3dUb0J1dHRvbiIsIl9sYXllckNvbG9yU2VsZWN0b3IiLCJfbGF5ZXJDb2x1bW5Nb2RlQ29uZmlnIiwiX2xheWVyQ29uZmlnR3JvdXAiLCJfbGF5ZXJFcnJvck1lc3NhZ2UiLCJfbGF5ZXJUeXBlU2VsZWN0b3IiLCJfdGV4dExhYmVsUGFuZWwiLCJfdmlzQ29uZmlnU2xpZGVyIiwiX3Zpc0NvbmZpZ1N3aXRjaCIsIl92ZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3IiLCJfdXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIlN0eWxlZExheWVyQ29uZmlndXJhdG9yIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJsYXllckNvbmZpZ3VyYXRvck1hcmdpbiIsImxheWVyQ29uZmlndXJhdG9yUGFkZGluZyIsImxheWVyQ29uZmlndXJhdG9yQm9yZGVyIiwibGF5ZXJDb25maWd1cmF0b3JCb3JkZXJDb2xvciIsIlN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yIiwiZ2V0TGF5ZXJGaWVsZHMiLCJleHBvcnRzIiwiZGF0YXNldHMiLCJsYXllciIsIl9sYXllciRjb25maWciLCJjb25maWciLCJkYXRhSWQiLCJmaWVsZHMiLCJnZXRMYXllckRhdGFzZXQiLCJfbGF5ZXIkY29uZmlnMiIsImdldExheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJvbkNoYW5nZSIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2V0Q29sb3JVSSIsInVwZGF0ZUxheWVyQ29sb3JVSSIsImdldFZpc0NvbmZpZ3VyYXRvclByb3BzIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyIsImRhdGFzZXQiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkiLCJkZXBzIiwiU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ1NsaWRlckZhY3RvcnkiLCJUZXh0TGFiZWxQYW5lbEZhY3RvcnkiLCJMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJDb2x1bW5Nb2RlQ29uZmlnRmFjdG9yeSIsIkxheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkiLCJMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5IiwiQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSIsIkFnZ3JTY2FsZVNlbGVjdG9yRmFjdG9yeSIsIlZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkiLCJTb3VyY2VEYXRhU2VsZWN0b3IiLCJWaXNDb25maWdTbGlkZXIiLCJUZXh0TGFiZWxQYW5lbCIsIkxheWVyQ29uZmlnR3JvdXAiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yIiwiTGF5ZXJDb2x1bW5Nb2RlQ29uZmlnIiwiTGF5ZXJUeXBlU2VsZWN0b3IiLCJWaXNDb25maWdTd2l0Y2giLCJMYXllckNvbG9yU2VsZWN0b3IiLCJMYXllckNvbG9yUmFuZ2VTZWxlY3RvciIsIkFyY0xheWVyQ29sb3JTZWxlY3RvciIsIkFnZ3JTY2FsZVNlbGVjdG9yIiwiVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yIiwiTGF5ZXJDb25maWd1cmF0b3IiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJrZXkiLCJjb2x1bW5Nb2RlIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJ2YWx1ZSIsIl9yZW5kZXJQb2ludExheWVyQ29uZmlnIiwiX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWciLCJfcmVuZGVySWNvbkxheWVyQ29uZmlnIiwiX3JlbmRlclZlY3RvclRpbGVMYXllckNvbmZpZyIsImNyZWF0ZUVsZW1lbnQiLCJfcmVmIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJfZXh0ZW5kczIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImZpbGxlZCIsImxhYmVsIiwiY29sbGFwc2libGUiLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsImNvbG9yRmllbGQiLCJDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudCIsIm9wYWNpdHkiLCJ0eXBlIiwiTEFZRVJfVFlQRVMiLCJwb2ludCIsIm91dGxpbmUiLCJzdHJva2VDb2xvciIsInN0cm9rZUNvbG9yRmllbGQiLCJwcm9wZXJ0eSIsInNlbGVjdGVkQ29sb3IiLCJ2aXNDb25maWciLCJ0aGlja25lc3MiLCJkaXNhYmxlZCIsInNpemVGaWVsZCIsInJhZGl1cyIsInJhZGl1c1JhbmdlIiwiZml4ZWRSYWRpdXMiLCJzaXplIiwiYmlsbGJvYXJkIiwiaWQiLCJ1cGRhdGVMYXllclRleHRMYWJlbCIsInRleHRMYWJlbCIsImFsbG93SG92ZXIiLCJzaG93TmVpZ2hib3JPbkhvdmVyIiwic2hvd0hpZ2hsaWdodENvbG9yIiwiX3JlbmRlckNsdXN0ZXJMYXllckNvbmZpZyIsIl9yZWYyIiwiY29sb3JBZ2dyZWdhdGlvbiIsImNvbmRpdGlvbiIsIkFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yIiwiY2x1c3RlclJhZGl1cyIsIl9yZW5kZXJIZWF0bWFwTGF5ZXJDb25maWciLCJfcmVmMyIsIndlaWdodCIsIl9yZW5kZXJHcmlkTGF5ZXJDb25maWciLCJfcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyIsIl9yZW5kZXJIZXhhZ29uTGF5ZXJDb25maWciLCJfcmVmNCIsIl9jb25maWckdmlzQ29uZmlnIiwiZW5hYmxlM2QiLCJmaXhlZEhlaWdodCIsImVsZXZhdGlvbkJ5RGVzY3JpcHRpb24iLCJjb2xvckJ5RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInBlcmNlbnRpbGUiLCJ3b3JsZFVuaXRTaXplIiwiY292ZXJhZ2UiLCJlbGV2YXRpb25TY2FsZSIsInNpemVBZ2dyZWdhdGlvbiIsInNpemVSYW5nZSIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJfcmVuZGVySGV4YWdvbklkTGF5ZXJDb25maWciLCJfcmVmNSIsInN0cm9rZU9wYWNpdHkiLCJjb3ZlcmFnZUZpZWxkIiwiY292ZXJhZ2VSYW5nZSIsIl9yZW5kZXJBcmNMYXllckNvbmZpZyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJfcmVmNiIsInNvdXJjZUNvbG9yIiwib25DaGFuZ2VDb25maWciLCJvbkNoYW5nZVZpc0NvbmZpZyIsIl9yZW5kZXJUcmlwTGF5ZXJDb25maWciLCJfcmVmNyIsIl9sYXllciRtZXRhJGZlYXR1cmVUeSIsIm1ldGEiLCJmZWF0dXJlVHlwZXMiLCJwb2x5Z29uIiwic3Ryb2tlZCIsInRyYWlsTGVuZ3RoIiwiZmFkZVRyYWlsIiwiX3JlbmRlckdlb2pzb25MYXllckNvbmZpZyIsIl9yZWY4IiwiX2xheWVyJG1ldGEkZmVhdHVyZVR5MiIsImhlaWdodCIsIndpcmVmcmFtZSIsInJhZGl1c0ZpZWxkIiwiX3JlbmRlcjNETGF5ZXJDb25maWciLCJfcmVmOSIsIkZyYWdtZW50IiwiSW5wdXQiLCJhY2NlcHQiLCJ0YXJnZXQiLCJmaWxlcyIsInVybCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsInNjZW5lZ3JhcGgiLCJzaXplU2NhbGUiLCJhbmdsZVgiLCJhbmdsZVkiLCJhbmdsZVoiLCJfcmVuZGVyUzJMYXllckNvbmZpZyIsIl9yZWYxMCIsImhlaWdodFJhbmdlIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJvcGVuTW9kYWwiLCJsYXllclR5cGVPcHRpb25zIiwidXBkYXRlTGF5ZXJUeXBlIiwiX3RoaXMkcHJvcHMkZGlzYWJsZVR5IiwiZGlzYWJsZVR5cGVTZWxlY3QiLCJfcmVmMTEiLCJfcmVmMTEkZmllbGRzIiwiX3JlZjExJGZpZWxkUGFpcnMiLCJmaWVsZFBhaXJzIiwidW5kZWZpbmVkIiwicmVuZGVyVGVtcGxhdGUiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJzb3VyY2VEYXRhU2VsZWN0b3JPcHRpb25zIiwicmVkdWNlIiwiYWNjIiwibWF0Y2hEYXRhc2V0VHlwZSIsImxheWVySW5mb01vZGFsIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJvbkNsaWNrIiwiZXhwYW5kZWQiLCJoYXNBbGxDb2x1bW5zIiwic2VsZWN0ZWQiLCJvcHRpb25zIiwib25TZWxlY3QiLCJsYXllckNvbmZpZyIsImVycm9yTWVzc2FnZSIsIkNvbXBvbmVudCIsIl9yZWYxMiIsImZpZWxkIiwiYWdncmVnYXRpb24iLCJzZWxlY3RlZEZpZWxkIiwibGF5ZXJBZ2dyZWdhdGlvblR5cGVzIiwiZ2V0QWdncmVnYXRpb25PcHRpb25zIiwiYWdncmVnYXRpb25PcHRpb25zIiwiQUdHUkVHQVRJT05fVFlQRV9PUFRJT05TIiwiX3JlZjEzIiwiaW5jbHVkZXMiLCJzZWxlY3RlZEFnZ3JlZ2F0aW9uIiwiZmluZCIsIl9yZWYxNCIsIlNpZGVQYW5lbFNlY3Rpb24iLCJQYW5lbExhYmVsIiwiRm9ybWF0dGVkTWVzc2FnZSIsInZhbHVlcyIsImRpc3BsYXlOYW1lIiwic2VsZWN0ZWRJdGVtcyIsImRpc3BsYXlPcHRpb24iLCJnZXRPcHRpb25WYWx1ZSIsIm11bHRpU2VsZWN0Iiwic2VhcmNoYWJsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLWNvbmZpZ3VyYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIEZyYWdtZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IEl0ZW1TZWxlY3RvciBmcm9tICcuLi8uLi9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcbmltcG9ydCB7SW5wdXQsIFBhbmVsTGFiZWwsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4uL2NvbW1vbi9zb3VyY2UtZGF0YS1zZWxlY3Rvcic7XG5pbXBvcnQgQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vYWdnci1zY2FsZS1zZWxlY3Rvcic7XG5pbXBvcnQgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9jaGFubmVsLWJ5LXZhbHVlLXNlbGVjdG9yJztcbmltcG9ydCBIb3dUb0J1dHRvbiBmcm9tICcuL2hvdy10by1idXR0b24nO1xuaW1wb3J0IHtcbiAgQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5XG59IGZyb20gJy4vbGF5ZXItY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IExheWVyQ29sdW1uTW9kZUNvbmZpZ0ZhY3RvcnkgZnJvbSAnLi9sYXllci1jb2x1bW4tbW9kZS1jb25maWcnO1xuaW1wb3J0IExheWVyQ29uZmlnR3JvdXBGYWN0b3J5LCB7Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnR9IGZyb20gJy4vbGF5ZXItY29uZmlnLWdyb3VwJztcbmltcG9ydCBMYXllckVycm9yTWVzc2FnZSBmcm9tICcuL2xheWVyLWVycm9yLW1lc3NhZ2UnO1xuaW1wb3J0IExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL2xheWVyLXR5cGUtc2VsZWN0b3InO1xuaW1wb3J0IFRleHRMYWJlbFBhbmVsRmFjdG9yeSBmcm9tICcuL3RleHQtbGFiZWwtcGFuZWwnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctc3dpdGNoJztcbmltcG9ydCBWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5IGZyb20gJy4vdmVjdG9yLXRpbGUtbGF5ZXItY29uZmlndXJhdG9yJztcblxuaW1wb3J0IHtjYXBpdGFsaXplRmlyc3RMZXR0ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0FHR1JFR0FUSU9OX1RZUEVfT1BUSU9OUywgTEFZRVJfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uTGF5ZXIsXG4gIExheWVyLFxuICBMYXllckJhc2VDb25maWcsXG4gIFZpc3VhbENoYW5uZWwsXG4gIG1hdGNoRGF0YXNldFR5cGVcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuXG5pbXBvcnQge0FjdGlvbkhhbmRsZXIsIHRvZ2dsZU1vZGFsfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0NvbG9yVUksIExheWVyVmlzQ29uZmlnLCBOZXN0ZWRQYXJ0aWFsfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxudHlwZSBMYXllckNvbmZpZ3VyYXRvclByb3BzID0ge1xuICBsYXllcjogTGF5ZXI7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgbGF5ZXJUeXBlT3B0aW9uczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpY29uOiBSZWFjdC5FbGVtZW50VHlwZTtcbiAgICByZXF1aXJlRGF0YTogYm9vbGVhbjtcbiAgfVtdO1xuICBvcGVuTW9kYWw6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZU1vZGFsPjtcbiAgdXBkYXRlTGF5ZXJDb25maWc6IChuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPikgPT4gdm9pZDtcbiAgdXBkYXRlTGF5ZXJUeXBlOiAobmV3VHlwZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclZpc0NvbmZpZzogKG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz4pID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZzogKFxuICAgIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICAgIGNoYW5uZWw6IHN0cmluZyxcbiAgICBuZXdWaXNDb25maWc/OiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPlxuICApID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyQ29sb3JVSTogKHByb3A6IHN0cmluZywgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+KSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclRleHRMYWJlbDogKGlkeDogbnVtYmVyIHwgJ2FsbCcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgZGlzYWJsZVR5cGVTZWxlY3Q/OiBib29sZWFuO1xufTtcblxudHlwZSBBZ2dyZWdhdGlvblNlbGVjdG9yUHJvcHMgPSB7XG4gIGNoYW5uZWw6IFZpc3VhbENoYW5uZWw7XG4gIGxheWVyOiBBZ2dyZWdhdGlvbkxheWVyO1xuICBvbkNoYW5nZTogKFxuICAgIHZhbDogUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdIHwgbnVsbFxuICAgID4sXG4gICAga2V5OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufTtcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yUGFkZGluZ307XG4gIGJvcmRlci1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyfSBkYXNoZWRcbiAgICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZ19fdmlzdWFsQy1jb25maWcnXG59KWBcbiAgbWFyZ2luLXRvcDogMTJweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckZpZWxkcyA9IChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyOiBMYXllcikgPT5cbiAgZGF0YXNldHNbbGF5ZXIuY29uZmlnPy5kYXRhSWQgfHwgJyddID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0uZmllbGRzIDogW107XG5cbi8qKiBSZXR1cm4gYW55IHRvIGJlIGFibGUgdG8gY3VzdG9taXplIHRoZSBEYXRhc2V0IGVudGl0eSAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyRGF0YXNldCA9IChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyOiBMYXllcik6IGFueSA9PlxuICBkYXRhc2V0c1tsYXllci5jb25maWc/LmRhdGFJZCB8fCAnJ107XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzID0gKHByb3BzOiBMYXllckNvbmZpZ3VyYXRvclByb3BzKSA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHMgPSAocHJvcHM6IExheWVyQ29uZmlndXJhdG9yUHJvcHMpID0+ICh7XG4gIGxheWVyOiBwcm9wcy5sYXllcixcbiAgZmllbGRzOiBnZXRMYXllckZpZWxkcyhwcm9wcy5kYXRhc2V0cywgcHJvcHMubGF5ZXIpLFxuICBvbkNoYW5nZTogcHJvcHMudXBkYXRlTGF5ZXJWaXNDb25maWcsXG4gIHNldENvbG9yVUk6IHByb3BzLnVwZGF0ZUxheWVyQ29sb3JVSVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyA9IChwcm9wczogTGF5ZXJDb25maWd1cmF0b3JQcm9wcykgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBkYXRhc2V0OiBnZXRMYXllckRhdGFzZXQocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgZmllbGRzOiBnZXRMYXllckZpZWxkcyhwcm9wcy5kYXRhc2V0cywgcHJvcHMubGF5ZXIpLFxuICBvbkNoYW5nZTogcHJvcHMudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5MYXllckNvbmZpZ3VyYXRvckZhY3RvcnkuZGVwcyA9IFtcbiAgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSxcbiAgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSxcbiAgVGV4dExhYmVsUGFuZWxGYWN0b3J5LFxuICBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSxcbiAgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnksXG4gIExheWVyQ29sdW1uTW9kZUNvbmZpZ0ZhY3RvcnksXG4gIExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5LFxuICBBZ2dyU2NhbGVTZWxlY3RvckZhY3RvcnksXG4gIFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3Rvcnlcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExheWVyQ29uZmlndXJhdG9yRmFjdG9yeShcbiAgU291cmNlRGF0YVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5PixcbiAgVmlzQ29uZmlnU2xpZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTbGlkZXJGYWN0b3J5PixcbiAgVGV4dExhYmVsUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIFRleHRMYWJlbFBhbmVsRmFjdG9yeT4sXG4gIExheWVyQ29uZmlnR3JvdXA6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5PixcbiAgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3Rvcnk+LFxuICBMYXllckNvbHVtbk1vZGVDb25maWc6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sdW1uTW9kZUNvbmZpZ0ZhY3Rvcnk+LFxuICBMYXllclR5cGVTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJUeXBlU2VsZWN0b3JGYWN0b3J5PixcbiAgVmlzQ29uZmlnU3dpdGNoOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTd2l0Y2hGYWN0b3J5PixcbiAgTGF5ZXJDb2xvclNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeT4sXG4gIEFyY0xheWVyQ29sb3JTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeT4sXG4gIEFnZ3JTY2FsZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBBZ2dyU2NhbGVTZWxlY3RvckZhY3Rvcnk+LFxuICBWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3I6IFJldHVyblR5cGU8dHlwZW9mIFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPExheWVyQ29uZmlndXJhdG9yUHJvcHM+IHtcbiAgY2xhc3MgTGF5ZXJDb25maWd1cmF0b3IgZXh0ZW5kcyBDb21wb25lbnQ8TGF5ZXJDb25maWd1cmF0b3JQcm9wcz4ge1xuICAgIF9yZW5kZXJQb2ludExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckljb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJWZWN0b3JUaWxlTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiA8VmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yIHsuLi5wcm9wc30gLz47XG4gICAgfVxuXG4gICAgX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogRmlsbCBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLihsYXllci52aXNDb25maWdTZXR0aW5ncy5maWxsZWQgfHwge2xhYmVsOiAnbGF5ZXIuY29sb3InfSl9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7Lyogb3V0bGluZSBjb2xvciAqL31cbiAgICAgICAgICB7bGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMucG9pbnQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3V0bGluZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHByb3BlcnR5PVwic3Ryb2tlQ29sb3JSYW5nZVwiIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcudmlzQ29uZmlnLm91dGxpbmV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihsYXllci5jb25maWcuc2l6ZUZpZWxkKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGQgfHwgbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1c31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci5jb25maWcuc2l6ZUZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maXhlZFJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYmlsbGJvYXJkfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiB0ZXh0IGxhYmVsICovfVxuICAgICAgICAgIDxUZXh0TGFiZWxQYW5lbFxuICAgICAgICAgICAgaWQ9e2xheWVyLmlkfVxuICAgICAgICAgICAgZmllbGRzPXt2aXNDb25maWd1cmF0b3JQcm9wcy5maWVsZHN9XG4gICAgICAgICAgICB1cGRhdGVMYXllclRleHRMYWJlbD17dGhpcy5wcm9wcy51cGRhdGVMYXllclRleHRMYWJlbH1cbiAgICAgICAgICAgIHRleHRMYWJlbD17bGF5ZXIuY29uZmlnLnRleHRMYWJlbH1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgey8qIEludGVyYWN0aW9uICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuaW50ZXJhY3Rpb24nfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFsbG93SG92ZXJ9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaG93TmVpZ2hib3JPbkhvdmVyfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaG93SGlnaGxpZ2h0Q29sb3J9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJDbHVzdGVyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8QWdnclNjYWxlU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfSAvPlxuICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENsdXN0ZXIgUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jbHVzdGVyUmFkaXVzfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckhlYXRtYXBMYXllckNvbmZpZyh7bGF5ZXIsIHZpc0NvbmZpZ3VyYXRvclByb3BzLCBsYXllckNoYW5uZWxDb25maWdQcm9wc30pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnJhZGl1cyd9PlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHsvKiBXZWlnaHQgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci53ZWlnaHQnfT5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLndlaWdodH1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJHcmlkTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVySGV4YWdvbkxheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtjb25maWd9ID0gbGF5ZXI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpc0NvbmZpZzoge2VuYWJsZTNkLCBmaXhlZEhlaWdodH1cbiAgICAgIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBlbGV2YXRpb25CeURlc2NyaXB0aW9uID0gJ2xheWVyLmVsZXZhdGlvbkJ5RGVzY3JpcHRpb24nO1xuICAgICAgY29uc3QgY29sb3JCeURlc2NyaXB0aW9uID0gJ2xheWVyLmNvbG9yQnlEZXNjcmlwdGlvbic7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPEFnZ3JTY2FsZVNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn0gLz5cblxuICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2NvbG9yQnlEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZSAmJlxuICAgICAgICAgICAgICBsYXllci52aXNDb25maWdTZXR0aW5ncy5wZXJjZW50aWxlLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5wZXJjZW50aWxlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBDZWxsIHNpemUgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLndvcmxkVW5pdFNpemV9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2V9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIEVsZXZhdGlvbiAqL31cbiAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2QgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9eydsYXllclZpc0NvbmZpZ3MuaGVpZ2h0TXVsdGlwbGllcid9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtlbGV2YXRpb25CeURlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFlbmFibGUzZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8QWdnclNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXsnSGVpZ2h0IFNjYWxlJ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17J2xheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZSd9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Zml4ZWRIZWlnaHR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZml4ZWRIZWlnaHR9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uUGVyY2VudGlsZS5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblBlcmNlbnRpbGV9XG4gICAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFNoYW4gbW92ZSB0aGVzZSBpbnRvIGxheWVyIGNsYXNzXG4gICAgX3JlbmRlckhleGFnb25JZExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWxsZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD17J2xheWVyLmZpbGxDb2xvcid9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcudmlzQ29uZmlnLmZpbGxlZH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIE91dGxpbmUgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vdXRsaW5lfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gcHJvcGVydHk9XCJzdHJva2VDb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlT3BhY2l0eX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcudmlzQ29uZmlnLm91dGxpbmV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy52aXNDb25maWcub3V0bGluZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENvdmVyYWdlICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY292ZXJhZ2UnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLmNvdmVyYWdlRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2VSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb3ZlcmFnZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBoZWlnaHQgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZH1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXsnbGF5ZXJWaXNDb25maWdzLmhlaWdodE11bHRpcGxpZXInfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZml4ZWRIZWlnaHR9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRleHQgbGFiZWwgKi99XG4gICAgICAgICAgPFRleHRMYWJlbFBhbmVsXG4gICAgICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgICAgICBmaWVsZHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmZpZWxkc31cbiAgICAgICAgICAgIHVwZGF0ZUxheWVyVGV4dExhYmVsPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVGV4dExhYmVsfVxuICAgICAgICAgICAgdGV4dExhYmVsPXtsYXllci5jb25maWcudGV4dExhYmVsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJBcmNMYXllckNvbmZpZyhhcmdzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGluZUxheWVyQ29uZmlnKGFyZ3MpO1xuICAgIH1cblxuICAgIF9yZW5kZXJMaW5lTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc291cmNlQ29sb3J9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8QXJjTGF5ZXJDb2xvclNlbGVjdG9yXG4gICAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICAgIHNldENvbG9yVUk9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuc2V0Q29sb3JVSX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZUNvbmZpZz17bGF5ZXJDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZz17dmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiB0aGlja25lc3MgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5zdHJva2UnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc2l6ZUZpZWxkID8gKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcuc2l6ZUZpZWxkfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogZWxldmF0aW9uIHNjYWxlICovfVxuICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZSA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmVsZXZhdGlvblNjYWxlXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyVHJpcExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtmZWF0dXJlVHlwZXMgPSB7fX1cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmJpbGxib2FyZH0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogVHJhaWwgTGVuZ3RoKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci50cmFpbExlbmd0aFwiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj1cImxheWVyLnRyYWlsTGVuZ3RoRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50cmFpbExlbmd0aH1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5mYWRlVHJhaWx9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR2VvanNvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtmZWF0dXJlVHlwZXMgPSB7fX0sXG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiB8fCBmZWF0dXJlVHlwZXMucG9pbnQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7Lyogc3Ryb2tlIGNvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZH1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gcHJvcGVydHk9XCJzdHJva2VDb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlT3BhY2l0eX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc2l6ZUZpZWxkID8gKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgICAge2ZlYXR1cmVUeXBlcy5wb2x5Z29uID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshdmlzQ29uZmlnLmZpbGxlZH1cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maXhlZEhlaWdodH1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICB7ZmVhdHVyZVR5cGVzLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgeyFsYXllci5jb25maWcucmFkaXVzRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyM0RMYXllckNvbmZpZyh7bGF5ZXIsIHZpc0NvbmZpZ3VyYXRvclByb3BzfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbCd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLmdsYiwuZ2x0ZlwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe3NjZW5lZ3JhcGg6IHVybH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbE9wdGlvbnMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVTY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVYfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVl9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWn1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclMyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gcHJvcGVydHk9XCJzdHJva2VDb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIEVsZXZhdGlvbiAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF2aXNDb25maWcuZmlsbGVkfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17J2xheWVyVmlzQ29uZmlncy5oZWlnaHRNdWx0aXBsaWVyJ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuaGVpZ2h0UmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZml4ZWRIZWlnaHR9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53aXJlZnJhbWV9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2VsZWN0Q29sdW1uTW9kZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qge3VwZGF0ZUxheWVyQ29uZmlnfSA9IHRoaXMucHJvcHM7XG4gICAgICB1cGRhdGVMYXllckNvbmZpZyh7Y29sdW1uTW9kZToga2V5fSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBvcGVuTW9kYWwsXG4gICAgICAgIHVwZGF0ZUxheWVyQ29uZmlnLFxuICAgICAgICBsYXllclR5cGVPcHRpb25zLFxuICAgICAgICB1cGRhdGVMYXllclR5cGUsXG4gICAgICAgIGRpc2FibGVUeXBlU2VsZWN0ID0gZmFsc2VcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpZWxkcyA9IFtdLCBmaWVsZFBhaXJzID0gdW5kZWZpbmVkfSA9IGxheWVyLmNvbmZpZy5kYXRhSWRcbiAgICAgICAgPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcblxuICAgICAgY29uc3QgdmlzQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRWaXNDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBnZXRMYXllckRhdGFzZXQoZGF0YXNldHMsIGxheWVyKTtcbiAgICAgIGNvbnN0IHJlbmRlclRlbXBsYXRlID0gbGF5ZXIudHlwZSAmJiBgX3JlbmRlciR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxheWVyLnR5cGUpfUxheWVyQ29uZmlnYDtcblxuICAgICAgLy8gc2hvdyBvbmx5IGRhdGFzZXRzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGxheWVyXG4gICAgICBjb25zdCBzb3VyY2VEYXRhU2VsZWN0b3JPcHRpb25zID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLnJlZHVjZShcbiAgICAgICAgKGFjYywgaWQpID0+IChtYXRjaERhdGFzZXRUeXBlKGRhdGFzZXRzW2lkXSwgbGF5ZXIpID8gey4uLmFjYywgW2lkXTogZGF0YXNldHNbaWRdfSA6IGFjYyksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICAgICAge2xheWVyLmxheWVySW5mb01vZGFsICYmICFsYXllci5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyA/IChcbiAgICAgICAgICAgIC8vIFRPRE8gZmlndXJlIG91dCBoYW5kbGVyIHR5cGUuIFN0cmluZyBvciByZXR1cm4gdHlwZSBvZiBsYXllci5sYXllckluZm9Nb2RhbCA/XG4gICAgICAgICAgICA8SG93VG9CdXR0b24gb25DbGljaz17KCkgPT4gb3Blbk1vZGFsKGxheWVyLmxheWVySW5mb01vZGFsIGFzIGFueSl9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5iYXNpYyd9IGNvbGxhcHNpYmxlIGV4cGFuZGVkPXshbGF5ZXIuaGFzQWxsQ29sdW1ucygpfT5cbiAgICAgICAgICAgIDxMYXllclR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICBzZWxlY3RlZD17bGF5ZXIudHlwZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVUeXBlU2VsZWN0fVxuICAgICAgICAgICAgICBvcHRpb25zPXtsYXllclR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt1cGRhdGVMYXllclR5cGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e3NvdXJjZURhdGFTZWxlY3Rvck9wdGlvbnN9XG4gICAgICAgICAgICAgICAgaWQ9e2xheWVyLmlkfVxuICAgICAgICAgICAgICAgIGRhdGFJZD17Y29uZmlnLmRhdGFJZH1cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9eyh2YWx1ZTogc3RyaW5nKSA9PiB1cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiB2YWx1ZX0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8TGF5ZXJDb2x1bW5Nb2RlQ29uZmlnXG4gICAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICAgIHN1cHBvcnRlZENvbHVtbk1vZGVzPXtsYXllci5zdXBwb3J0ZWRDb2x1bW5Nb2Rlc31cbiAgICAgICAgICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgICAgICAgICAgbGF5ZXJDb25maWc9e2xheWVyLmNvbmZpZ31cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGZpZ3VyZSBvdXQgaGFuZGxlciB0eXBlLiBTdHJpbmcgb3IgcmV0dXJuIHR5cGUgb2YgbGF5ZXIubGF5ZXJJbmZvTW9kYWwgP1xuICAgICAgICAgICAgICAgIG9wZW5Nb2RhbD17b3Blbk1vZGFsIGFzIGFueX1cbiAgICAgICAgICAgICAgICB1cGRhdGVMYXllckNvbmZpZz17dXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUeXBlPXt1cGRhdGVMYXllclR5cGV9XG4gICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgZmllbGRQYWlycz17ZmllbGRQYWlyc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICB7bGF5ZXIuZXJyb3JNZXNzYWdlID8gPExheWVyRXJyb3JNZXNzYWdlIGVycm9yTWVzc2FnZT17bGF5ZXIuZXJyb3JNZXNzYWdlfSAvPiA6IG51bGx9XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHtyZW5kZXJUZW1wbGF0ZSAmJlxuICAgICAgICAgICAgdGhpc1tyZW5kZXJUZW1wbGF0ZV0gJiZcbiAgICAgICAgICAgIHRoaXNbcmVuZGVyVGVtcGxhdGVdKHtcbiAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgIGRhdGFzZXQsXG4gICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgICAgICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcyxcbiAgICAgICAgICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wc1xuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBMYXllckNvbmZpZ3VyYXRvcjtcbn1cblxuZXhwb3J0IGNvbnN0IEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yID0gKHtjaGFubmVsLCBsYXllciwgb25DaGFuZ2V9OiBBZ2dyZWdhdGlvblNlbGVjdG9yUHJvcHMpID0+IHtcbiAgY29uc3Qge2ZpZWxkLCBhZ2dyZWdhdGlvbiwga2V5fSA9IGNoYW5uZWw7XG4gIGNvbnN0IHNlbGVjdGVkRmllbGQgPSBsYXllci5jb25maWdbZmllbGRdO1xuICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcblxuICAvLyBhZ2dyZWdhdGlvbiBzaG91bGQgb25seSBiZSBzZWxlY3RhYmxlIHdoZW4gZmllbGQgaXMgc2VsZWN0ZWRcbiAgY29uc3QgbGF5ZXJBZ2dyZWdhdGlvblR5cGVzID0gbGF5ZXIuZ2V0QWdncmVnYXRpb25PcHRpb25zKGtleSk7XG5cbiAgY29uc3QgYWdncmVnYXRpb25PcHRpb25zID0gQUdHUkVHQVRJT05fVFlQRV9PUFRJT05TLmZpbHRlcigoe2lkfSkgPT5cbiAgICBsYXllckFnZ3JlZ2F0aW9uVHlwZXMuaW5jbHVkZXMoaWQpXG4gICk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRBZ2dyZWdhdGlvbiA9IGFnZ3JlZ2F0aW9uXG4gICAgPyBhZ2dyZWdhdGlvbk9wdGlvbnMuZmluZCgoe2lkfSkgPT4gaWQgPT09IHZpc0NvbmZpZ1thZ2dyZWdhdGlvbl0pXG4gICAgOiBbXTtcblxuICByZXR1cm4gKFxuICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgaWQ9eydsYXllci5hZ2dyZWdhdGVCeSd9XG4gICAgICAgICAgdmFsdWVzPXt7XG4gICAgICAgICAgICBmaWVsZDogc2VsZWN0ZWRGaWVsZC5kaXNwbGF5TmFtZVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgIHNlbGVjdGVkSXRlbXM9e3NlbGVjdGVkQWdncmVnYXRpb259XG4gICAgICAgIG9wdGlvbnM9e2FnZ3JlZ2F0aW9uT3B0aW9uc31cbiAgICAgICAgZGlzcGxheU9wdGlvbj1cImxhYmVsXCJcbiAgICAgICAgZ2V0T3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgc2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgIG9uQ2hhbmdlPXt2YWx1ZSA9PlxuICAgICAgICAgIG9uQ2hhbmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2aXNDb25maWc6IHtcbiAgICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgICAgICAgICAgICAgIFthZ2dyZWdhdGlvbiBhcyBzdHJpbmddOiB2YWx1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2hhbm5lbC5rZXlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICApO1xufTtcbi8qIGVzbGludC1lbmFibGUgbWF4LXBhcmFtcyAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBRUEsSUFBQUssYUFBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFB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