@carto/kepler.gl 0.0.74 → 0.0.75-alpha.lodash.0

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 (445) hide show
  1. package/dist/actions/action-wrapper.js +21 -49
  2. package/dist/actions/actions.js +10 -19
  3. package/dist/actions/identity-actions.js +8 -17
  4. package/dist/actions/index.js +7 -24
  5. package/dist/actions/map-state-actions.js +10 -19
  6. package/dist/actions/map-style-actions.js +20 -35
  7. package/dist/actions/provider-actions.js +26 -42
  8. package/dist/actions/ui-state-actions.js +42 -70
  9. package/dist/actions/vis-state-actions.js +102 -162
  10. package/dist/cloud-providers/index.js +8 -8
  11. package/dist/cloud-providers/provider.js +55 -94
  12. package/dist/components/bottom-widget.js +47 -48
  13. package/dist/components/common/action-panel.js +39 -38
  14. package/dist/components/common/animation-control/animation-control.js +40 -38
  15. package/dist/components/common/animation-control/animation-controller.js +47 -70
  16. package/dist/components/common/animation-control/animation-speed-slider.js +28 -38
  17. package/dist/components/common/animation-control/floating-time-display.js +56 -67
  18. package/dist/components/common/animation-control/playback-controls.js +64 -80
  19. package/dist/components/common/animation-control/speed-control.js +26 -24
  20. package/dist/components/common/checkbox.js +34 -55
  21. package/dist/components/common/color-legend.js +40 -72
  22. package/dist/components/common/data-table/button.js +29 -22
  23. package/dist/components/common/data-table/canvas.js +21 -10
  24. package/dist/components/common/data-table/cell-size.js +54 -58
  25. package/dist/components/common/data-table/grid.js +32 -33
  26. package/dist/components/common/data-table/index.js +96 -138
  27. package/dist/components/common/data-table/option-dropdown.js +29 -33
  28. package/dist/components/common/dataset-label.js +21 -13
  29. package/dist/components/common/error-boundary.js +25 -30
  30. package/dist/components/common/field-selector.js +35 -69
  31. package/dist/components/common/field-token.js +21 -16
  32. package/dist/components/common/file-uploader/file-drop.js +40 -55
  33. package/dist/components/common/file-uploader/file-upload-progress.js +32 -30
  34. package/dist/components/common/file-uploader/file-upload.js +52 -91
  35. package/dist/components/common/file-uploader/upload-button.js +31 -42
  36. package/dist/components/common/histogram-plot.js +32 -27
  37. package/dist/components/common/icons/add.js +27 -27
  38. package/dist/components/common/icons/anchor_window.js +3 -9
  39. package/dist/components/common/icons/arrow-down-alt.js +27 -27
  40. package/dist/components/common/icons/arrow-down-solid .js +27 -27
  41. package/dist/components/common/icons/arrow-down.js +27 -27
  42. package/dist/components/common/icons/arrow-left.js +27 -27
  43. package/dist/components/common/icons/arrow-right.js +27 -27
  44. package/dist/components/common/icons/arrow-up-alt.js +27 -27
  45. package/dist/components/common/icons/arrow-up-solid.js +27 -27
  46. package/dist/components/common/icons/arrow-up.js +27 -27
  47. package/dist/components/common/icons/base.js +38 -42
  48. package/dist/components/common/icons/bug.js +27 -27
  49. package/dist/components/common/icons/cancel.js +27 -27
  50. package/dist/components/common/icons/checkmark.js +27 -28
  51. package/dist/components/common/icons/chevron-right.js +27 -27
  52. package/dist/components/common/icons/clipboard.js +27 -27
  53. package/dist/components/common/icons/clock.js +27 -27
  54. package/dist/components/common/icons/close.js +27 -27
  55. package/dist/components/common/icons/code-alt.js +27 -28
  56. package/dist/components/common/icons/copy.js +27 -28
  57. package/dist/components/common/icons/crosshairs.js +27 -28
  58. package/dist/components/common/icons/cube-3d.js +27 -27
  59. package/dist/components/common/icons/cursor-click.js +27 -27
  60. package/dist/components/common/icons/data-table.js +27 -27
  61. package/dist/components/common/icons/db.js +27 -27
  62. package/dist/components/common/icons/delete.js +27 -27
  63. package/dist/components/common/icons/docs.js +27 -27
  64. package/dist/components/common/icons/drag-n-drop.js +27 -27
  65. package/dist/components/common/icons/draw-polygon.js +27 -27
  66. package/dist/components/common/icons/email.js +27 -27
  67. package/dist/components/common/icons/expand.js +27 -27
  68. package/dist/components/common/icons/eye-seen.js +27 -27
  69. package/dist/components/common/icons/eye-unseen.js +27 -27
  70. package/dist/components/common/icons/file-type.js +23 -16
  71. package/dist/components/common/icons/file.js +27 -27
  72. package/dist/components/common/icons/files.js +24 -26
  73. package/dist/components/common/icons/filter-funnel.js +27 -27
  74. package/dist/components/common/icons/free-window.js +3 -9
  75. package/dist/components/common/icons/gear.js +27 -27
  76. package/dist/components/common/icons/hash.js +27 -27
  77. package/dist/components/common/icons/histogram.js +24 -25
  78. package/dist/components/common/icons/index.js +63 -138
  79. package/dist/components/common/icons/info.js +27 -28
  80. package/dist/components/common/icons/layers.js +27 -27
  81. package/dist/components/common/icons/left-arrow.js +27 -28
  82. package/dist/components/common/icons/legend.js +27 -27
  83. package/dist/components/common/icons/line-chart.js +27 -27
  84. package/dist/components/common/icons/login.js +27 -27
  85. package/dist/components/common/icons/logout.js +27 -27
  86. package/dist/components/common/icons/map-icon.js +27 -28
  87. package/dist/components/common/icons/map.js +27 -28
  88. package/dist/components/common/icons/messages.js +27 -27
  89. package/dist/components/common/icons/minus.js +27 -27
  90. package/dist/components/common/icons/pause.js +27 -27
  91. package/dist/components/common/icons/picture.js +24 -26
  92. package/dist/components/common/icons/pin.js +27 -27
  93. package/dist/components/common/icons/play.js +27 -27
  94. package/dist/components/common/icons/polygon.js +27 -27
  95. package/dist/components/common/icons/rectangle.js +27 -27
  96. package/dist/components/common/icons/reduce.js +27 -27
  97. package/dist/components/common/icons/reset.js +27 -27
  98. package/dist/components/common/icons/rocket.js +27 -27
  99. package/dist/components/common/icons/save.js +27 -27
  100. package/dist/components/common/icons/save2.js +27 -27
  101. package/dist/components/common/icons/search.js +27 -27
  102. package/dist/components/common/icons/settings.js +27 -27
  103. package/dist/components/common/icons/share.js +27 -27
  104. package/dist/components/common/icons/split.js +27 -27
  105. package/dist/components/common/icons/square-select.js +27 -27
  106. package/dist/components/common/icons/swap-horizontal.js +27 -28
  107. package/dist/components/common/icons/table.js +27 -27
  108. package/dist/components/common/icons/trash.js +27 -27
  109. package/dist/components/common/icons/upload.js +27 -27
  110. package/dist/components/common/icons/vert-dots.js +27 -27
  111. package/dist/components/common/icons/vert-three-dots.js +27 -27
  112. package/dist/components/common/icons/warning.js +27 -28
  113. package/dist/components/common/image-preview.js +36 -29
  114. package/dist/components/common/info-helper.js +26 -25
  115. package/dist/components/common/item-selector/accessor.js +3 -5
  116. package/dist/components/common/item-selector/chickleted-input.js +41 -43
  117. package/dist/components/common/item-selector/dropdown-list.js +44 -74
  118. package/dist/components/common/item-selector/item-selector-submenu.js +29 -38
  119. package/dist/components/common/item-selector/item-selector.js +38 -86
  120. package/dist/components/common/item-selector/typeahead.js +37 -83
  121. package/dist/components/common/line-chart.js +39 -36
  122. package/dist/components/common/loading-spinner.js +33 -25
  123. package/dist/components/common/logo.js +24 -22
  124. package/dist/components/common/map-layer-selector.js +23 -16
  125. package/dist/components/common/modal.js +36 -61
  126. package/dist/components/common/portaled.js +61 -102
  127. package/dist/components/common/progress-bar.js +29 -20
  128. package/dist/components/common/range-brush.js +63 -104
  129. package/dist/components/common/range-plot.js +47 -52
  130. package/dist/components/common/range-slider.js +52 -78
  131. package/dist/components/common/slider/mouse-event.js +11 -37
  132. package/dist/components/common/slider/slider-bar-handle.js +31 -39
  133. package/dist/components/common/slider/slider-handle.js +35 -44
  134. package/dist/components/common/slider/slider.js +55 -82
  135. package/dist/components/common/styled-components.js +64 -169
  136. package/dist/components/common/switch.js +22 -16
  137. package/dist/components/common/time-range-slider-time-title.js +24 -19
  138. package/dist/components/common/time-range-slider.js +43 -40
  139. package/dist/components/common/time-slider-marker.js +36 -41
  140. package/dist/components/common/toolbar-item.js +22 -16
  141. package/dist/components/common/toolbar.js +21 -10
  142. package/dist/components/common/vertical-toolbar.js +21 -10
  143. package/dist/components/container.js +52 -73
  144. package/dist/components/context.js +6 -10
  145. package/dist/components/editor/constants.js +6 -8
  146. package/dist/components/editor/editor.js +45 -77
  147. package/dist/components/editor/feature-action-panel.js +35 -43
  148. package/dist/components/editor/feature-styles.js +37 -42
  149. package/dist/components/editor/handle-style.js +37 -39
  150. package/dist/components/filters/components.js +21 -10
  151. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +14 -25
  152. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +14 -21
  153. package/dist/components/filters/filter-panels/new-filter-panel.js +13 -23
  154. package/dist/components/filters/filter-panels/polygon-filter-panel.js +16 -28
  155. package/dist/components/filters/filter-panels/range-filter-panel.js +14 -21
  156. package/dist/components/filters/filter-panels/single-select-filter-panel.js +14 -21
  157. package/dist/components/filters/filter-panels/time-range-filter-panel.js +14 -23
  158. package/dist/components/filters/index.js +11 -17
  159. package/dist/components/filters/multi-select-filter.js +3 -9
  160. package/dist/components/filters/polygon-filter.js +8 -18
  161. package/dist/components/filters/range-filter.js +3 -8
  162. package/dist/components/filters/single-select-filter.js +3 -9
  163. package/dist/components/filters/time-range-filter.js +7 -18
  164. package/dist/components/filters/time-widget.js +41 -51
  165. package/dist/components/geocoder/geocoder.js +95 -128
  166. package/dist/components/geocoder-panel.js +37 -62
  167. package/dist/components/index.js +356 -498
  168. package/dist/components/injector.js +42 -58
  169. package/dist/components/kepler-gl.js +65 -149
  170. package/dist/components/map/coordinate-info.js +4 -13
  171. package/dist/components/map/layer-hover-info.js +40 -48
  172. package/dist/components/map/layer-selector-panel.js +17 -30
  173. package/dist/components/map/locale-panel.js +13 -27
  174. package/dist/components/map/map-control-panel.js +27 -24
  175. package/dist/components/map/map-control-toolbar.js +21 -11
  176. package/dist/components/map/map-control-tooltip.js +4 -11
  177. package/dist/components/map/map-control.js +26 -27
  178. package/dist/components/map/map-draw-panel.js +12 -29
  179. package/dist/components/map/map-legend-panel.js +17 -34
  180. package/dist/components/map/map-legend.js +52 -70
  181. package/dist/components/map/map-popover.js +41 -57
  182. package/dist/components/map/split-map-button.js +13 -25
  183. package/dist/components/map/toggle-3d-button.js +10 -21
  184. package/dist/components/map-container.js +99 -143
  185. package/dist/components/maps-layout.js +24 -26
  186. package/dist/components/modal-container.js +62 -112
  187. package/dist/components/modals/add-map-style-modal.js +37 -64
  188. package/dist/components/modals/cloud-tile.js +36 -36
  189. package/dist/components/modals/data-table-modal.js +51 -81
  190. package/dist/components/modals/delete-data-modal.js +24 -20
  191. package/dist/components/modals/error-display.js +3 -10
  192. package/dist/components/modals/export-data-modal.js +37 -54
  193. package/dist/components/modals/export-image-modal.js +31 -28
  194. package/dist/components/modals/export-map-modal/components.js +27 -27
  195. package/dist/components/modals/export-map-modal/export-html-map.js +27 -27
  196. package/dist/components/modals/export-map-modal/export-json-map.js +22 -22
  197. package/dist/components/modals/export-map-modal/export-map-modal.js +20 -40
  198. package/dist/components/modals/image-modal-container.js +12 -19
  199. package/dist/components/modals/load-data-modal.js +31 -35
  200. package/dist/components/modals/load-storage-map.js +42 -77
  201. package/dist/components/modals/loading-dialog.js +24 -18
  202. package/dist/components/modals/modal-dialog.js +3 -7
  203. package/dist/components/modals/modal-tabs.js +29 -29
  204. package/dist/components/modals/overwrite-map-modal.js +29 -28
  205. package/dist/components/modals/provider-modal-container.js +27 -27
  206. package/dist/components/modals/save-map-modal.js +43 -48
  207. package/dist/components/modals/share-map-modal.js +42 -53
  208. package/dist/components/modals/status-panel.js +24 -25
  209. package/dist/components/modals/storage-map-viewer.js +30 -43
  210. package/dist/components/notification-panel/notification-item.js +34 -48
  211. package/dist/components/notification-panel.js +31 -37
  212. package/dist/components/performance.js +11 -36
  213. package/dist/components/plot-container.js +44 -74
  214. package/dist/components/side-panel/cloud-storage-dropdown.js +4 -10
  215. package/dist/components/side-panel/common/dataset-info.js +20 -13
  216. package/dist/components/side-panel/common/dataset-tag.js +21 -12
  217. package/dist/components/side-panel/common/dataset-title.js +37 -52
  218. package/dist/components/side-panel/common/source-data-catalog.js +26 -22
  219. package/dist/components/side-panel/common/source-data-selector.js +34 -40
  220. package/dist/components/side-panel/custom-panel.js +5 -9
  221. package/dist/components/side-panel/filter-manager.js +18 -29
  222. package/dist/components/side-panel/filter-panel/filter-panel-header.js +30 -30
  223. package/dist/components/side-panel/filter-panel/filter-panel.js +39 -58
  224. package/dist/components/side-panel/interaction-manager.js +5 -12
  225. package/dist/components/side-panel/interaction-panel/brush-config.js +23 -19
  226. package/dist/components/side-panel/interaction-panel/interaction-panel.js +37 -60
  227. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +34 -74
  228. package/dist/components/side-panel/interaction-panel/tooltip-config.js +28 -40
  229. package/dist/components/side-panel/layer-manager.js +51 -82
  230. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +3 -10
  231. package/dist/components/side-panel/layer-panel/color-palette.js +27 -23
  232. package/dist/components/side-panel/layer-panel/color-range-selector.js +53 -99
  233. package/dist/components/side-panel/layer-panel/color-selector.js +36 -67
  234. package/dist/components/side-panel/layer-panel/column-selector.js +26 -25
  235. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +2 -6
  236. package/dist/components/side-panel/layer-panel/custom-palette.js +37 -71
  237. package/dist/components/side-panel/layer-panel/custom-picker.js +32 -45
  238. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +8 -16
  239. package/dist/components/side-panel/layer-panel/hex-column-config.js +12 -34
  240. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +2 -10
  241. package/dist/components/side-panel/layer-panel/layer-column-config.js +31 -27
  242. package/dist/components/side-panel/layer-panel/layer-config-group.js +46 -80
  243. package/dist/components/side-panel/layer-panel/layer-configurator.js +158 -249
  244. package/dist/components/side-panel/layer-panel/layer-panel-header.js +52 -66
  245. package/dist/components/side-panel/layer-panel/layer-panel.js +33 -54
  246. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +28 -22
  247. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +22 -18
  248. package/dist/components/side-panel/layer-panel/layer-type-selector.js +29 -32
  249. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +35 -40
  250. package/dist/components/side-panel/layer-panel/single-color-palette.js +32 -42
  251. package/dist/components/side-panel/layer-panel/text-label-panel.js +31 -42
  252. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +39 -52
  253. package/dist/components/side-panel/layer-panel/vis-config-slider.js +10 -19
  254. package/dist/components/side-panel/layer-panel/vis-config-switch.js +28 -29
  255. package/dist/components/side-panel/map-manager.js +32 -46
  256. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +28 -31
  257. package/dist/components/side-panel/map-style-panel/map-style-selector.js +26 -24
  258. package/dist/components/side-panel/panel-dropdown.js +28 -35
  259. package/dist/components/side-panel/panel-header-action.js +38 -43
  260. package/dist/components/side-panel/panel-header.js +56 -94
  261. package/dist/components/side-panel/panel-tab.js +24 -20
  262. package/dist/components/side-panel/panel-title.js +21 -10
  263. package/dist/components/side-panel/panel-toggle.js +26 -23
  264. package/dist/components/side-panel/side-bar.js +39 -55
  265. package/dist/components/side-panel.js +58 -67
  266. package/dist/connect/keplergl-connect.js +5 -14
  267. package/dist/connect/with-local-selector.js +33 -38
  268. package/dist/constants/action-types.js +5 -6
  269. package/dist/constants/color-palette.js +12 -23
  270. package/dist/constants/color-ranges.js +32 -31
  271. package/dist/constants/custom-color-ranges.js +9 -14
  272. package/dist/constants/default-settings.js +154 -239
  273. package/dist/constants/index.js +95 -103
  274. package/dist/constants/keyevent.js +3 -7
  275. package/dist/constants/tooltip.js +7 -10
  276. package/dist/constants/user-feedbacks.js +5 -6
  277. package/dist/constants/user-guides.js +12 -20
  278. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +29 -32
  279. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +10 -43
  280. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +54 -75
  281. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +29 -32
  282. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +29 -30
  283. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +29 -30
  284. package/dist/deckgl-layers/layer-utils/cluster-utils.js +12 -23
  285. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +75 -132
  286. package/dist/deckgl-layers/layer-utils/shader-utils.js +1 -5
  287. package/dist/deckgl-layers/line-layer/line-layer.js +27 -34
  288. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +26 -30
  289. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +33 -39
  290. package/dist/index.js +4 -23
  291. package/dist/layers/aggregation-layer.js +66 -100
  292. package/dist/layers/arc-layer/arc-layer-icon.js +27 -27
  293. package/dist/layers/arc-layer/arc-layer.js +48 -73
  294. package/dist/layers/base-layer.js +255 -406
  295. package/dist/layers/cluster-layer/cluster-layer-icon.js +27 -27
  296. package/dist/layers/cluster-layer/cluster-layer.js +33 -44
  297. package/dist/layers/default-layer-icon.js +27 -27
  298. package/dist/layers/geojson-layer/geojson-layer-icon.js +27 -27
  299. package/dist/layers/geojson-layer/geojson-layer.js +56 -89
  300. package/dist/layers/geojson-layer/geojson-utils.js +35 -47
  301. package/dist/layers/grid-layer/grid-layer-icon.js +27 -27
  302. package/dist/layers/grid-layer/grid-layer.js +30 -41
  303. package/dist/layers/grid-layer/grid-utils.js +6 -9
  304. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +27 -27
  305. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +48 -80
  306. package/dist/layers/h3-hexagon-layer/h3-utils.js +10 -21
  307. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +27 -27
  308. package/dist/layers/heatmap-layer/heatmap-layer.js +47 -74
  309. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +27 -27
  310. package/dist/layers/hexagon-layer/hexagon-layer.js +30 -42
  311. package/dist/layers/hexagon-layer/hexagon-utils.js +3 -15
  312. package/dist/layers/icon-layer/icon-info-modal.js +23 -26
  313. package/dist/layers/icon-layer/icon-layer-icon.js +27 -27
  314. package/dist/layers/icon-layer/icon-layer.js +59 -97
  315. package/dist/layers/index.js +38 -39
  316. package/dist/layers/layer-factory.js +38 -42
  317. package/dist/layers/layer-text-label.js +8 -18
  318. package/dist/layers/layer-update.js +3 -14
  319. package/dist/layers/line-layer/line-layer-icon.js +27 -27
  320. package/dist/layers/line-layer/line-layer.js +46 -66
  321. package/dist/layers/mapbox-utils.js +38 -51
  322. package/dist/layers/mapboxgl-layer.js +43 -58
  323. package/dist/layers/point-layer/point-layer-icon.js +27 -27
  324. package/dist/layers/point-layer/point-layer.js +57 -90
  325. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +41 -73
  326. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +27 -27
  327. package/dist/layers/s2-geometry-layer/s2-utils.js +5 -11
  328. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +21 -15
  329. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +27 -27
  330. package/dist/layers/scenegraph-layer/scenegraph-layer.js +52 -75
  331. package/dist/layers/trip-layer/trip-info-modal.js +21 -16
  332. package/dist/layers/trip-layer/trip-layer-icon.js +27 -27
  333. package/dist/layers/trip-layer/trip-layer.js +55 -97
  334. package/dist/layers/trip-layer/trip-utils.js +16 -39
  335. package/dist/layers/types.js +3 -6
  336. package/dist/localization/en.js +22 -11
  337. package/dist/localization/formatted-message.js +5 -10
  338. package/dist/localization/index.js +7 -13
  339. package/dist/localization/locales.js +7 -12
  340. package/dist/middleware/index.js +2 -5
  341. package/dist/processors/data-processor.js +113 -177
  342. package/dist/processors/file-handler.js +200 -276
  343. package/dist/processors/index.js +33 -35
  344. package/dist/reducers/combined-updaters.js +35 -46
  345. package/dist/reducers/composer-helpers.js +28 -27
  346. package/dist/reducers/composers.js +25 -12
  347. package/dist/reducers/core.js +13 -46
  348. package/dist/reducers/index.js +24 -38
  349. package/dist/reducers/map-state-updaters.js +53 -65
  350. package/dist/reducers/map-state.js +31 -26
  351. package/dist/reducers/map-style-updaters.js +94 -138
  352. package/dist/reducers/map-style.js +31 -26
  353. package/dist/reducers/provider-state-updaters.js +92 -167
  354. package/dist/reducers/provider-state.js +32 -25
  355. package/dist/reducers/root.js +44 -50
  356. package/dist/reducers/ui-state-updaters.js +102 -202
  357. package/dist/reducers/ui-state.js +32 -26
  358. package/dist/reducers/vis-state-merger.js +107 -171
  359. package/dist/reducers/vis-state-selectors.js +5 -10
  360. package/dist/reducers/vis-state-updaters.js +397 -674
  361. package/dist/reducers/vis-state.js +32 -25
  362. package/dist/schemas/dataset-schema.js +39 -59
  363. package/dist/schemas/index.js +38 -45
  364. package/dist/schemas/map-state-schema.js +28 -24
  365. package/dist/schemas/map-style-schema.js +34 -48
  366. package/dist/schemas/schema-manager.js +44 -62
  367. package/dist/schemas/schema-utils.js +11 -15
  368. package/dist/schemas/schema.js +32 -27
  369. package/dist/schemas/versions.js +5 -9
  370. package/dist/schemas/vis-state-schema.js +114 -314
  371. package/dist/styles/base.js +367 -640
  372. package/dist/styles/index.js +1 -5
  373. package/dist/styles/media-breakpoints.js +21 -9
  374. package/dist/tasks/tasks.js +22 -50
  375. package/dist/templates/export-map-html.js +3 -6
  376. package/dist/utils/aggregate-utils.js +23 -27
  377. package/dist/utils/color-utils.js +36 -38
  378. package/dist/utils/custom-scales.js +1 -7
  379. package/dist/utils/data-scale-utils.js +11 -20
  380. package/dist/utils/data-utils.js +78 -137
  381. package/dist/utils/dataset-utils.js +73 -90
  382. package/dist/utils/dom-to-image.js +15 -93
  383. package/dist/utils/dom-utils.js +34 -116
  384. package/dist/utils/export-utils.js +67 -104
  385. package/dist/utils/filter-utils.js +176 -326
  386. package/dist/utils/gl-utils.js +22 -13
  387. package/dist/utils/gpu-filter-utils.js +46 -59
  388. package/dist/utils/index.js +68 -80
  389. package/dist/utils/interaction-utils.js +26 -50
  390. package/dist/utils/layer-utils.js +58 -63
  391. package/dist/utils/locale-utils.js +23 -21
  392. package/dist/utils/map-info-utils.js +2 -3
  393. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +75 -74
  394. package/dist/utils/map-style-utils/mapbox-utils.js +3 -5
  395. package/dist/utils/mapbox-utils.js +2 -5
  396. package/dist/utils/notifications-utils.js +36 -35
  397. package/dist/utils/observe-dimensions.js +38 -43
  398. package/dist/utils/projection-utils.js +9 -20
  399. package/dist/utils/searcher-utils.js +1 -4
  400. package/dist/utils/split-map-utils.js +38 -34
  401. package/dist/utils/table-utils/data-container-utils.js +27 -23
  402. package/dist/utils/table-utils/data-row.js +2 -13
  403. package/dist/utils/table-utils/index.js +1 -2
  404. package/dist/utils/table-utils/indexed-data-container.js +65 -84
  405. package/dist/utils/table-utils/kepler-table.js +83 -126
  406. package/dist/utils/table-utils/row-data-container.js +62 -87
  407. package/dist/utils/utils.js +51 -69
  408. package/package.json +2 -13
  409. package/src/actions/action-wrapper.js +1 -1
  410. package/src/components/common/checkbox.js +1 -1
  411. package/src/components/common/data-table/grid.js +1 -1
  412. package/src/components/common/data-table/index.js +2 -2
  413. package/src/components/common/item-selector/item-selector.js +1 -1
  414. package/src/components/common/portaled.js +2 -2
  415. package/src/components/common/time-range-slider.js +1 -1
  416. package/src/components/container.js +1 -1
  417. package/src/components/editor/editor.js +1 -1
  418. package/src/components/editor/feature-styles.js +1 -1
  419. package/src/components/editor/handle-style.js +1 -1
  420. package/src/components/filters/filter-panels/polygon-filter-panel.js +1 -1
  421. package/src/components/modal-container.js +1 -1
  422. package/src/components/modals/image-modal-container.js +1 -1
  423. package/src/components/modals/load-data-modal.js +1 -1
  424. package/src/components/plot-container.js +1 -1
  425. package/src/components/side-panel/filter-panel/filter-panel.js +1 -1
  426. package/src/components/side-panel/layer-panel/color-range-selector.js +1 -1
  427. package/src/components/side-panel.js +1 -1
  428. package/src/deckgl-layers/layer-utils/cluster-utils.js +1 -1
  429. package/src/layers/aggregation-layer.js +1 -1
  430. package/src/layers/geojson-layer/geojson-layer.js +1 -1
  431. package/src/layers/heatmap-layer/heatmap-layer.js +1 -1
  432. package/src/layers/layer-text-label.js +1 -1
  433. package/src/layers/trip-layer/trip-layer.js +2 -2
  434. package/src/reducers/map-style-updaters.js +1 -1
  435. package/src/reducers/vis-state-merger.js +3 -3
  436. package/src/reducers/vis-state-updaters.js +4 -4
  437. package/src/schemas/dataset-schema.js +1 -1
  438. package/src/schemas/vis-state-schema.js +2 -2
  439. package/src/utils/dataset-utils.js +1 -1
  440. package/src/utils/export-utils.js +1 -1
  441. package/src/utils/filter-utils.js +2 -2
  442. package/src/utils/map-style-utils/mapbox-gl-style-editor.js +1 -1
  443. package/src/utils/observe-dimensions.js +1 -1
  444. package/src/utils/split-map-utils.js +1 -1
  445. package/CHANGELOG.md +0 -954
@@ -1,97 +1,82 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
-
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports["default"] = MapContainerFactory;
11
-
12
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
-
16
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
21
-
22
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
13
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
-
26
14
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
-
15
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
28
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
29
-
30
18
  var _react = _interopRequireWildcard(require("react"));
31
-
32
19
  var _propTypes = _interopRequireDefault(require("prop-types"));
33
-
34
20
  var _reactMapGl = _interopRequireDefault(require("react-map-gl"));
35
-
36
21
  var _react2 = _interopRequireDefault(require("@deck.gl/react"));
37
-
38
22
  var _reselect = require("reselect");
39
-
40
23
  var _core = require("@deck.gl/core");
41
-
42
24
  var _layers = require("@deck.gl/layers");
43
-
44
25
  var _geoLayers = require("@deck.gl/geo-layers");
45
-
46
26
  var _notificationsUtils = require("../utils/notifications-utils");
47
-
48
27
  var _mapPopover = _interopRequireDefault(require("./map/map-popover"));
49
-
50
28
  var _mapControl = _interopRequireDefault(require("./map/map-control"));
51
-
52
29
  var _styledComponents = require("./common/styled-components");
53
-
54
30
  var _editor = _interopRequireDefault(require("./editor/editor"));
55
-
56
31
  var _mapboxUtils = require("../layers/mapbox-utils");
57
-
58
32
  var _glUtils = require("../utils/gl-utils");
59
-
60
33
  var _mapboxUtils2 = require("../utils/map-style-utils/mapbox-utils");
61
-
62
34
  var _layerUtils = require("../utils/layer-utils");
63
-
64
35
  var _dBuildingLayer = _interopRequireDefault(require("../deckgl-layers/3d-building-layer/3d-building-layer"));
65
-
66
36
  var _defaultSettings = require("../constants/default-settings");
67
-
68
37
  var _observeDimensions = require("../utils/observe-dimensions");
69
-
70
38
  var _locales = require("../localization/locales");
71
-
72
39
  var _performance = require("./performance");
73
-
74
- var _window, _window$location, _window$location$sear;
75
-
76
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
77
-
78
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
79
-
80
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
81
-
82
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
83
-
40
+ var _excluded = ["width", "height"];
41
+ var _window, _window$location, _window$location$sear; // Copyright (c) 2022 Uber Technologies, Inc.
42
+ //
43
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
44
+ // of this software and associated documentation files (the "Software"), to deal
45
+ // in the Software without restriction, including without limitation the rights
46
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
47
+ // copies of the Software, and to permit persons to whom the Software is
48
+ // furnished to do so, subject to the following conditions:
49
+ //
50
+ // The above copyright notice and this permission notice shall be included in
51
+ // all copies or substantial portions of the Software.
52
+ //
53
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
54
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
55
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
56
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
57
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
58
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
59
+ // THE SOFTWARE.
60
+ // libraries
61
+ // components
62
+ // utils
63
+ // default-settings
64
+ // Performance debugging
65
+ 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); }
66
+ 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 && Object.prototype.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; }
67
+ 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; }
68
+ 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; }
69
+ 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)); }
70
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
84
71
  var trackers = {};
85
72
  var PERF_DEBUG = (_window = window) === null || _window === void 0 ? void 0 : (_window$location = _window.location) === null || _window$location === void 0 ? void 0 : (_window$location$sear = _window$location.search) === null || _window$location$sear === void 0 ? void 0 : _window$location$sear.includes('PERF_DEBUG');
86
-
87
73
  if (PERF_DEBUG) {
88
74
  trackers.drawCount = (0, _performance.createTracker)('draws');
89
75
  trackers.viewportChangeCount = (0, _performance.createTracker)('viewport changes');
90
76
  (0, _performance.createLayerUpdateTracker)('state updates', [_core.Layer, _geoLayers.TileLayer]);
91
77
  }
92
- /** @type {{[key: string]: React.CSSProperties}} */
93
-
94
78
 
79
+ /** @type {{[key: string]: React.CSSProperties}} */
95
80
  var MAP_STYLE = {
96
81
  container: {
97
82
  display: 'inline-block',
@@ -109,26 +94,19 @@ var MAP_STYLE = {
109
94
  };
110
95
  var TRANSITION_DURATION = 0;
111
96
  MapContainerFactory.deps = [_mapPopover["default"], _mapControl["default"], _editor["default"]];
112
-
113
97
  function MapContainerFactory(MapPopover, MapControl, Editor) {
114
98
  var MapContainer = /*#__PURE__*/function (_Component) {
115
99
  (0, _inherits2["default"])(MapContainer, _Component);
116
-
117
- var _super = _createSuper(MapContainer);
118
-
119
100
  function MapContainer(_props) {
120
101
  var _this;
121
-
122
102
  (0, _classCallCheck2["default"])(this, MapContainer);
123
- _this = _super.call(this, _props);
103
+ _this = _callSuper(this, MapContainer, [_props]);
124
104
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleResize", function (dimensions) {
125
105
  var _this$props = _this.props,
126
- primary = _this$props.primary,
127
- isExport = _this$props.isExport;
128
-
106
+ primary = _this$props.primary,
107
+ isExport = _this$props.isExport;
129
108
  if (primary) {
130
109
  var mapStateActions = _this.props.mapStateActions;
131
-
132
110
  if (!isExport && dimensions && dimensions.width > 0 && dimensions.height > 0) {
133
111
  mapStateActions.updateMap(dimensions);
134
112
  }
@@ -160,6 +138,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
160
138
  });
161
139
  }));
162
140
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "mapboxLayersSelector", (0, _reselect.createSelector)(_this.layersSelector, _this.layerDataSelector, _this.layerOrderSelector, _this.layersToRenderSelector, _mapboxUtils.generateMapboxLayers));
141
+ /* component private functions */
163
142
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onCloseMapPopover", function () {
164
143
  _this.props.visStateActions.onLayerClick(null);
165
144
  });
@@ -170,9 +149,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
170
149
  });
171
150
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleMapToggleLayer", function (layerId) {
172
151
  var _this$props2 = _this.props,
173
- _this$props2$index = _this$props2.index,
174
- mapIndex = _this$props2$index === void 0 ? 0 : _this$props2$index,
175
- visStateActions = _this$props2.visStateActions;
152
+ _this$props2$index = _this$props2.index,
153
+ mapIndex = _this$props2$index === void 0 ? 0 : _this$props2$index,
154
+ visStateActions = _this$props2.visStateActions;
176
155
  visStateActions.toggleLayerForMap(mapIndex, layerId);
177
156
  });
178
157
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onBeforeRender", function (_ref) {
@@ -184,20 +163,19 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
184
163
  _this.setState({
185
164
  contextLost: true
186
165
  });
187
-
188
166
  return;
189
167
  }
190
-
191
168
  var errorMessage = "An error in deck.gl: ".concat(error === null || error === void 0 ? void 0 : error.message, " in ").concat(layer === null || layer === void 0 ? void 0 : layer.id);
192
- var notificationId = "".concat(layer === null || layer === void 0 ? void 0 : layer.id, "-").concat(error === null || error === void 0 ? void 0 : error.message); // Throttle error notifications, as React doesn't like too many state changes from here.
169
+ var notificationId = "".concat(layer === null || layer === void 0 ? void 0 : layer.id, "-").concat(error === null || error === void 0 ? void 0 : error.message);
193
170
 
171
+ // Throttle error notifications, as React doesn't like too many state changes from here.
194
172
  _this._deckGLErrorsElapsed = _this._deckGLErrorsElapsed || {};
195
173
  var lastShown = _this._deckGLErrorsElapsed[notificationId];
196
-
197
174
  if (!lastShown || lastShown < Date.now() - _defaultSettings.THROTTLE_NOTIFICATION_TIME) {
198
- _this._deckGLErrorsElapsed[notificationId] = Date.now(); // Create new error notification or update existing one with same id.
199
- // Update is required to preserve the order of notifications as they probably are going to "jump" based on order of errors.
175
+ _this._deckGLErrorsElapsed[notificationId] = Date.now();
200
176
 
177
+ // Create new error notification or update existing one with same id.
178
+ // Update is required to preserve the order of notifications as they probably are going to "jump" based on order of errors.
201
179
  var uiStateActions = _this.props.uiStateActions;
202
180
  uiStateActions.addNotification((0, _notificationsUtils.errorNotification)({
203
181
  message: errorMessage,
@@ -207,43 +185,40 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
207
185
  });
208
186
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onViewportChange", function (viewState) {
209
187
  var _trackers$viewportCha;
210
-
211
188
  (_trackers$viewportCha = trackers.viewportChangeCount) === null || _trackers$viewportCha === void 0 ? void 0 : _trackers$viewportCha.increment();
212
189
  var width = viewState.width,
213
- height = viewState.height,
214
- restViewState = (0, _objectWithoutProperties2["default"])(viewState, ["width", "height"]);
190
+ height = viewState.height,
191
+ restViewState = (0, _objectWithoutProperties2["default"])(viewState, _excluded);
215
192
  var _this$props3 = _this.props,
216
- primary = _this$props3.primary,
217
- isExport = _this$props3.isExport; // react-map-gl sends 0,0 dimensions during initialization
193
+ primary = _this$props3.primary,
194
+ isExport = _this$props3.isExport;
195
+ // react-map-gl sends 0,0 dimensions during initialization
218
196
  // after we have received proper dimensions from observeDimensions
219
-
220
197
  var next = _objectSpread(_objectSpread({}, width > 0 && height > 0 ? viewState : restViewState), {}, {
221
198
  // enabling transition in two maps may lead to endless update loops
222
199
  transitionDuration: primary ? TRANSITION_DURATION : 0
223
200
  });
224
-
225
201
  if (typeof _this.props.onViewStateChange === 'function') {
226
202
  _this.props.onViewStateChange(next);
227
203
  }
228
-
229
204
  if (!isExport) {
230
205
  _this.props.mapStateActions.updateMap(next);
231
206
  }
232
207
  });
233
208
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_toggleMapControl", function (panelId) {
234
209
  var _this$props4 = _this.props,
235
- index = _this$props4.index,
236
- uiStateActions = _this$props4.uiStateActions;
210
+ index = _this$props4.index,
211
+ uiStateActions = _this$props4.uiStateActions;
237
212
  uiStateActions.toggleMapControl(panelId, index);
238
213
  });
239
214
  _this._deck = null;
240
- _this._ref = /*#__PURE__*/(0, _react.createRef)(); // Render limiting mechanism
215
+ _this._ref = /*#__PURE__*/(0, _react.createRef)();
241
216
 
217
+ // Render limiting mechanism
242
218
  _this._hasRendered = /*#__PURE__*/(0, _react.createRef)();
243
219
  _this._mousePosition = /*#__PURE__*/(0, _react.createRef)();
244
220
  return _this;
245
221
  }
246
-
247
222
  (0, _createClass2["default"])(MapContainer, [{
248
223
  key: "componentDidMount",
249
224
  value: function componentDidMount() {
@@ -253,9 +228,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
253
228
  key: "componentDidUpdate",
254
229
  value: function componentDidUpdate() {
255
230
  var _this$state;
256
-
257
231
  var contextLost = (_this$state = this.state) === null || _this$state === void 0 ? void 0 : _this$state.contextLost;
258
-
259
232
  if (contextLost) {
260
233
  // eslint-disable-next-line react/no-did-update-set-state
261
234
  this.setState({
@@ -277,16 +250,15 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
277
250
  }
278
251
  }, {
279
252
  key: "_renderMapPopover",
280
- value:
281
- /* component render functions */
253
+ value: /* component render functions */
282
254
 
283
255
  /* eslint-disable complexity */
284
256
  function _renderMapPopover(layersToRender) {
285
257
  // Overriden in Builder: features/builder/ui/KeplerGl/MapContainer/MapContainer.tsx
286
258
  return null;
287
259
  }
288
- /* eslint-enable complexity */
289
260
 
261
+ /* eslint-enable complexity */
290
262
  }, {
291
263
  key: "_getHoverXY",
292
264
  value: function _getHoverXY(viewport, lngLat) {
@@ -300,25 +272,26 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
300
272
  key: "_renderDeckOverlay",
301
273
  value: function _renderDeckOverlay(layersForDeck) {
302
274
  var _trackers$drawCount,
303
- _this$props$deckGlPro,
304
- _this2 = this,
305
- _this$props$deckGlPro2;
306
-
275
+ _this$props$deckGlPro,
276
+ _this2 = this,
277
+ _this$props$deckGlPro2;
307
278
  var _this$props5 = this.props,
308
- mapState = _this$props5.mapState,
309
- mapStyle = _this$props5.mapStyle,
310
- layerData = _this$props5.layerData,
311
- layerOrder = _this$props5.layerOrder,
312
- layers = _this$props5.layers,
313
- visStateActions = _this$props5.visStateActions,
314
- mapboxApiAccessToken = _this$props5.mapboxApiAccessToken,
315
- mapboxApiUrl = _this$props5.mapboxApiUrl,
316
- maskPolygon = _this$props5.maskPolygon;
279
+ mapState = _this$props5.mapState,
280
+ mapStyle = _this$props5.mapStyle,
281
+ layerData = _this$props5.layerData,
282
+ layerOrder = _this$props5.layerOrder,
283
+ layers = _this$props5.layers,
284
+ visStateActions = _this$props5.visStateActions,
285
+ mapboxApiAccessToken = _this$props5.mapboxApiAccessToken,
286
+ mapboxApiUrl = _this$props5.mapboxApiUrl,
287
+ maskPolygon = _this$props5.maskPolygon;
317
288
  var mousePosition = this._mousePosition;
318
- (_trackers$drawCount = trackers.drawCount) === null || _trackers$drawCount === void 0 ? void 0 : _trackers$drawCount.increment(); // initialise layers from props if exists
289
+ (_trackers$drawCount = trackers.drawCount) === null || _trackers$drawCount === void 0 ? void 0 : _trackers$drawCount.increment();
319
290
 
320
- var deckGlLayers = ((_this$props$deckGlPro = this.props.deckGlProps) === null || _this$props$deckGlPro === void 0 ? void 0 : _this$props$deckGlPro.layers) || []; // wait until data is ready before render data layers
291
+ // initialise layers from props if exists
292
+ var deckGlLayers = ((_this$props$deckGlPro = this.props.deckGlProps) === null || _this$props$deckGlPro === void 0 ? void 0 : _this$props$deckGlPro.layers) || [];
321
293
 
294
+ // wait until data is ready before render data layers
322
295
  if (layerData && layerData.length) {
323
296
  // last layer render first
324
297
  var dataLayers = layerOrder.slice().reverse().filter(function (idx) {
@@ -334,11 +307,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
334
307
  }, []);
335
308
  deckGlLayers = deckGlLayers.concat(dataLayers);
336
309
  }
337
-
338
310
  if ((_this$props$deckGlPro2 = this.props.deckGlProps) !== null && _this$props$deckGlPro2 !== void 0 && _this$props$deckGlPro2.layersOnTop) {
339
311
  deckGlLayers = deckGlLayers.concat(this.props.deckGlProps.layersOnTop);
340
312
  }
341
-
342
313
  if (maskPolygon) {
343
314
  deckGlLayers.push(new _layers.SolidPolygonLayer({
344
315
  id: _defaultSettings.MASK_LAYER_ID,
@@ -353,7 +324,6 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
353
324
  getFillColor: [255, 255, 255, 255]
354
325
  }));
355
326
  }
356
-
357
327
  if (mapStyle.visibleLayerGroups['3d building']) {
358
328
  deckGlLayers.push(new _dBuildingLayer["default"]({
359
329
  id: '_keplergl_3d-building',
@@ -364,15 +334,13 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
364
334
  getFillColor: mapStyle.threeDBuildingColor
365
335
  }
366
336
  }));
367
- } // Limit renders
368
-
337
+ }
369
338
 
339
+ // Limit renders
370
340
  var hasRendered = this._hasRendered;
371
-
372
341
  var resetHasRendered = function resetHasRendered() {
373
342
  return hasRendered.current = false;
374
343
  };
375
-
376
344
  return /*#__PURE__*/_react["default"].createElement(_react2["default"], (0, _extends2["default"])({
377
345
  controller: true
378
346
  }, this.props.deckGlProps, {
@@ -382,11 +350,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
382
350
  viewState: mapState,
383
351
  onViewStateChange: function onViewStateChange(_ref2) {
384
352
  var viewState = _ref2.viewState;
385
-
386
353
  // Limit updates (prevents freezes when dev tools open)
387
354
  if (!hasRendered.current && viewState.width > 1 && viewState.height > 1) {
388
355
  hasRendered.current = true;
389
-
390
356
  _this2._onViewportChange(viewState);
391
357
  }
392
358
  },
@@ -394,9 +360,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
394
360
  layers: deckGlLayers,
395
361
  onBeforeRender: function onBeforeRender(opts) {
396
362
  resetHasRendered();
397
-
398
363
  _this2._onBeforeRender(opts);
399
- } // onHover={visStateActions.onLayerHover}
364
+ }
365
+ // onHover={visStateActions.onLayerHover}
400
366
  ,
401
367
  onHover: function onHover(info) {
402
368
  visStateActions.onLayerHover(info);
@@ -419,14 +385,11 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
419
385
  },
420
386
  layerFilter: function layerFilter(_ref3) {
421
387
  var _layer$props$visibili, _layer$props$visibili2;
422
-
423
388
  var layer = _ref3.layer,
424
- viewport = _ref3.viewport;
425
-
389
+ viewport = _ref3.viewport;
426
390
  if (isNaN((_layer$props$visibili = layer.props.visibilityByZoom) === null || _layer$props$visibili === void 0 ? void 0 : _layer$props$visibili.min) || isNaN((_layer$props$visibili2 = layer.props.visibilityByZoom) === null || _layer$props$visibili2 === void 0 ? void 0 : _layer$props$visibili2.max)) {
427
391
  return true;
428
392
  }
429
-
430
393
  var currentZoomRange = Math.round(mapState.zoom);
431
394
  return layer.props.visibilityByZoom.min <= currentZoomRange && layer.props.visibilityByZoom.max >= currentZoomRange;
432
395
  }
@@ -434,29 +397,27 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
434
397
  }
435
398
  }, {
436
399
  key: "_renderMap",
437
- value:
438
- /* eslint-disable complexity */
400
+ value: /* eslint-disable complexity */
439
401
  function _renderMap() {
440
402
  var _this$props6 = this.props,
441
- mapState = _this$props6.mapState,
442
- mapStyle = _this$props6.mapStyle,
443
- mapStateActions = _this$props6.mapStateActions,
444
- layers = _this$props6.layers,
445
- MapComponent = _this$props6.MapComponent,
446
- datasets = _this$props6.datasets,
447
- mapControls = _this$props6.mapControls,
448
- isExport = _this$props6.isExport,
449
- locale = _this$props6.locale,
450
- uiStateActions = _this$props6.uiStateActions,
451
- visStateActions = _this$props6.visStateActions,
452
- interactionConfig = _this$props6.interactionConfig,
453
- editor = _this$props6.editor,
454
- index = _this$props6.index,
455
- primary = _this$props6.primary,
456
- generateThumbnail = _this$props6.generateThumbnail;
403
+ mapState = _this$props6.mapState,
404
+ mapStyle = _this$props6.mapStyle,
405
+ mapStateActions = _this$props6.mapStateActions,
406
+ layers = _this$props6.layers,
407
+ MapComponent = _this$props6.MapComponent,
408
+ datasets = _this$props6.datasets,
409
+ mapControls = _this$props6.mapControls,
410
+ isExport = _this$props6.isExport,
411
+ locale = _this$props6.locale,
412
+ uiStateActions = _this$props6.uiStateActions,
413
+ visStateActions = _this$props6.visStateActions,
414
+ interactionConfig = _this$props6.interactionConfig,
415
+ editor = _this$props6.editor,
416
+ index = _this$props6.index,
417
+ primary = _this$props6.primary,
418
+ generateThumbnail = _this$props6.generateThumbnail;
457
419
  var layersToRender = this.layersToRenderSelector(this.props);
458
420
  var layersForDeck = this.layersForDeckSelector(this.props);
459
-
460
421
  var mapProps = _objectSpread(_objectSpread({}, mapState), {}, {
461
422
  width: '100%',
462
423
  height: '100%',
@@ -464,7 +425,6 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
464
425
  transformRequest: _mapboxUtils2.transformRequest,
465
426
  generateThumbnail: generateThumbnail
466
427
  });
467
-
468
428
  var isSplit = Boolean(mapState.isSplit);
469
429
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(MapControl, {
470
430
  datasets: datasets,
@@ -498,16 +458,13 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
498
458
  key: "render",
499
459
  value: function render() {
500
460
  var _this$state2;
501
-
502
461
  var _this$props7 = this.props,
503
- mapState = _this$props7.mapState,
504
- mapStyle = _this$props7.mapStyle;
462
+ mapState = _this$props7.mapState,
463
+ mapStyle = _this$props7.mapStyle;
505
464
  var contextLost = (_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : _this$state2.contextLost;
506
-
507
465
  if (contextLost) {
508
466
  return null;
509
467
  }
510
-
511
468
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledMapContainer, {
512
469
  ref: this._ref,
513
470
  style: MAP_STYLE.container,
@@ -517,7 +474,6 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
517
474
  }]);
518
475
  return MapContainer;
519
476
  }(_react.Component);
520
-
521
477
  (0, _defineProperty2["default"])(MapContainer, "propTypes", {
522
478
  // required
523
479
  datasets: _propTypes["default"].object,
@@ -559,4 +515,4 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
559
515
  MapContainer.displayName = 'MapContainer';
560
516
  return MapContainer;
561
517
  }
562
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL21hcC1jb250YWluZXIuanMiXSwibmFtZXMiOlsidHJhY2tlcnMiLCJQRVJGX0RFQlVHIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJpbmNsdWRlcyIsImRyYXdDb3VudCIsInZpZXdwb3J0Q2hhbmdlQ291bnQiLCJMYXllciIsIlRpbGVMYXllciIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIlRSQU5TSVRJT05fRFVSQVRJT04iLCJNYXBDb250YWluZXJGYWN0b3J5IiwiZGVwcyIsIk1hcFBvcG92ZXJGYWN0b3J5IiwiTWFwQ29udHJvbEZhY3RvcnkiLCJFZGl0b3JGYWN0b3J5IiwiTWFwUG9wb3ZlciIsIk1hcENvbnRyb2wiLCJFZGl0b3IiLCJNYXBDb250YWluZXIiLCJwcm9wcyIsImRpbWVuc2lvbnMiLCJwcmltYXJ5IiwiaXNFeHBvcnQiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ1cGRhdGVNYXAiLCJsYXllcnMiLCJsYXllckRhdGEiLCJtYXBMYXllcnMiLCJsYXllck9yZGVyIiwicG9wdXBTZXR0aW5ncyIsImxheWVyc1NlbGVjdG9yIiwibGF5ZXJEYXRhU2VsZWN0b3IiLCJtYXBMYXllcnNTZWxlY3RvciIsInBvcHVwU2V0dGluZ3NTZWxlY3RvciIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiZmlsdGVycyIsImZpbHRlcnNTZWxlY3RvciIsImZpbHRlciIsImYiLCJ0eXBlIiwiRklMVEVSX1RZUEVTIiwicG9seWdvbiIsImxheWVyT3JkZXJTZWxlY3RvciIsImxheWVyc1RvUmVuZGVyU2VsZWN0b3IiLCJnZW5lcmF0ZU1hcGJveExheWVycyIsInZpc1N0YXRlQWN0aW9ucyIsIm9uTGF5ZXJDbGljayIsImlkeCIsImNvbG9yRG9tYWluIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllcklkIiwiaW5kZXgiLCJtYXBJbmRleCIsInRvZ2dsZUxheWVyRm9yTWFwIiwiZ2wiLCJsYXllckJsZW5kaW5nIiwiZXJyb3IiLCJsYXllciIsIm1lc3NhZ2UiLCJzZXRTdGF0ZSIsImNvbnRleHRMb3N0IiwiZXJyb3JNZXNzYWdlIiwiaWQiLCJub3RpZmljYXRpb25JZCIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwibGFzdFNob3duIiwiRGF0ZSIsIm5vdyIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwidWlTdGF0ZUFjdGlvbnMiLCJhZGROb3RpZmljYXRpb24iLCJ2aWV3U3RhdGUiLCJpbmNyZW1lbnQiLCJyZXN0Vmlld1N0YXRlIiwibmV4dCIsInRyYW5zaXRpb25EdXJhdGlvbiIsIm9uVmlld1N0YXRlQ2hhbmdlIiwicGFuZWxJZCIsInRvZ2dsZU1hcENvbnRyb2wiLCJfZGVjayIsIl9yZWYiLCJfaGFzUmVuZGVyZWQiLCJfbW91c2VQb3NpdGlvbiIsImN1cnJlbnQiLCJfaGFuZGxlUmVzaXplIiwic3RhdGUiLCJvbkRlY2tJbml0aWFsaXplZCIsImxheWVyc1RvUmVuZGVyIiwidmlld3BvcnQiLCJsbmdMYXQiLCJzY3JlZW5Db29yZCIsInByb2plY3QiLCJ4IiwieSIsImxheWVyc0ZvckRlY2siLCJtYXBTdGF0ZSIsIm1hcFN0eWxlIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJtYXNrUG9seWdvbiIsIm1vdXNlUG9zaXRpb24iLCJkZWNrR2xMYXllcnMiLCJkZWNrR2xQcm9wcyIsImxlbmd0aCIsImRhdGFMYXllcnMiLCJzbGljZSIsInJldmVyc2UiLCJyZWR1Y2UiLCJvdmVybGF5cyIsImxheWVyQ2FsbGJhY2tzIiwib25TZXRMYXllckRvbWFpbiIsInZhbCIsIl9vbkxheWVyU2V0RG9tYWluIiwibGF5ZXJPdmVybGF5IiwiY29uY2F0IiwibGF5ZXJzT25Ub3AiLCJwdXNoIiwiU29saWRQb2x5Z29uTGF5ZXIiLCJNQVNLX0xBWUVSX0lEIiwib3BlcmF0aW9uIiwiT1BFUkFUSU9OIiwiTUFTSyIsImRhdGEiLCJkYXRhQ29tcGFyYXRvciIsIm9sZERhdGEiLCJnZXRQb2x5Z29uIiwiZCIsImdldEZpbGxDb2xvciIsInZpc2libGVMYXllckdyb3VwcyIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJoYXNSZW5kZXJlZCIsInJlc2V0SGFzUmVuZGVyZWQiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJfb25WaWV3cG9ydENoYW5nZSIsIm9wdHMiLCJfb25CZWZvcmVSZW5kZXIiLCJpbmZvIiwib25MYXllckhvdmVyIiwicGl4ZWwiLCJfb25EZWNrRXJyb3IiLCJjb21wIiwiZGVjayIsIl9vbkRlY2tJbml0aWFsaXplZCIsImlzTmFOIiwidmlzaWJpbGl0eUJ5Wm9vbSIsIm1pbiIsIm1heCIsImN1cnJlbnRab29tUmFuZ2UiLCJNYXRoIiwicm91bmQiLCJ6b29tIiwiTWFwQ29tcG9uZW50IiwiZGF0YXNldHMiLCJtYXBDb250cm9scyIsImxvY2FsZSIsImludGVyYWN0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZ2VuZXJhdGVUaHVtYm5haWwiLCJsYXllcnNGb3JEZWNrU2VsZWN0b3IiLCJtYXBQcm9wcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJpc1NwbGl0IiwiQm9vbGVhbiIsIk9iamVjdCIsImtleXMiLCJMT0NBTEVfQ09ERVMiLCJkcmFnUm90YXRlIiwicmVhZE9ubHkiLCJzY2FsZSIsImdlb2NvZGVyIiwiZW5hYmxlZCIsInRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlU3BsaXRNYXAiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJfdG9nZ2xlTWFwQ29udHJvbCIsInNldEVkaXRvck1vZGUiLCJzZXRMb2NhbGUiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiYm90dG9tTWFwU3R5bGUiLCJfcmVuZGVyRGVja092ZXJsYXkiLCJfcmVuZGVyTWFwUG9wb3ZlciIsImdsb2JlIiwiX3JlbmRlck1hcCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJhcnJheU9mIiwiYW55IiwiYm9vbCIsImNsaWNrZWQiLCJob3ZlckluZm8iLCJvbk1hcFRvZ2dsZUxheWVyIiwiZnVuYyIsIm9uTWFwU3R5bGVMb2FkZWQiLCJnZXRNYXBib3hSZWYiLCJudW1iZXIiLCJNYXBib3hHTE1hcCIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFHQTs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBTUEsUUFBUSxHQUFHLEVBQWpCO0FBQ0EsSUFBTUMsVUFBVSxjQUFHQyxNQUFILGdFQUFHLFFBQVFDLFFBQVgsOEVBQUcsaUJBQWtCQyxNQUFyQiwwREFBRyxzQkFBMEJDLFFBQTFCLENBQW1DLFlBQW5DLENBQW5COztBQUNBLElBQUlKLFVBQUosRUFBZ0I7QUFDZEQsRUFBQUEsUUFBUSxDQUFDTSxTQUFULEdBQXFCLGdDQUFjLE9BQWQsQ0FBckI7QUFDQU4sRUFBQUEsUUFBUSxDQUFDTyxtQkFBVCxHQUErQixnQ0FBYyxrQkFBZCxDQUEvQjtBQUNBLDZDQUF5QixlQUF6QixFQUEwQyxDQUFDQyxXQUFELEVBQVFDLG9CQUFSLENBQTFDO0FBQ0Q7QUFFRDs7O0FBQ0EsSUFBTUMsU0FBUyxHQUFHO0FBQ2hCQyxFQUFBQSxTQUFTLEVBQUU7QUFDVEMsSUFBQUEsT0FBTyxFQUFFLGNBREE7QUFFVEMsSUFBQUEsUUFBUSxFQUFFLFVBRkQ7QUFHVEMsSUFBQUEsS0FBSyxFQUFFLE1BSEU7QUFJVEMsSUFBQUEsTUFBTSxFQUFFO0FBSkMsR0FESztBQU9oQkMsRUFBQUEsR0FBRyxFQUFFO0FBQ0hILElBQUFBLFFBQVEsRUFBRSxVQURQO0FBRUhHLElBQUFBLEdBQUcsRUFBRSxLQUZGO0FBR0hDLElBQUFBLGFBQWEsRUFBRSxNQUhaO0FBSUhILElBQUFBLEtBQUssRUFBRSxNQUpKO0FBS0hDLElBQUFBLE1BQU0sRUFBRTtBQUxMO0FBUFcsQ0FBbEI7QUFnQkEsSUFBTUcsbUJBQW1CLEdBQUcsQ0FBNUI7QUFFQUMsbUJBQW1CLENBQUNDLElBQXBCLEdBQTJCLENBQUNDLHNCQUFELEVBQW9CQyxzQkFBcEIsRUFBdUNDLGtCQUF2QyxDQUEzQjs7QUFFZSxTQUFTSixtQkFBVCxDQUE2QkssVUFBN0IsRUFBeUNDLFVBQXpDLEVBQXFEQyxNQUFyRCxFQUE2RDtBQUFBLE1BQ3BFQyxZQURvRTtBQUFBOztBQUFBOztBQTBDeEUsMEJBQVlDLE1BQVosRUFBbUI7QUFBQTs7QUFBQTtBQUNqQixnQ0FBTUEsTUFBTjtBQURpQix3R0E0QkgsVUFBQUMsVUFBVSxFQUFJO0FBQUEsMEJBQ0EsTUFBS0QsS0FETDtBQUFBLFlBQ3JCRSxPQURxQixlQUNyQkEsT0FEcUI7QUFBQSxZQUNaQyxRQURZLGVBQ1pBLFFBRFk7O0FBRTVCLFlBQUlELE9BQUosRUFBYTtBQUFBLGNBQ0pFLGVBREksR0FDZSxNQUFLSixLQURwQixDQUNKSSxlQURJOztBQUVYLGNBQUksQ0FBQ0QsUUFBRCxJQUFhRixVQUFiLElBQTJCQSxVQUFVLENBQUNmLEtBQVgsR0FBbUIsQ0FBOUMsSUFBbURlLFVBQVUsQ0FBQ2QsTUFBWCxHQUFvQixDQUEzRSxFQUE4RTtBQUM1RWlCLFlBQUFBLGVBQWUsQ0FBQ0MsU0FBaEIsQ0FBMEJKLFVBQTFCO0FBQ0Q7QUFDRjtBQUNGLE9BcENrQjtBQUFBLHlHQXNDRixVQUFBRCxLQUFLO0FBQUEsZUFBSUEsS0FBSyxDQUFDTSxNQUFWO0FBQUEsT0F0Q0g7QUFBQSw0R0F1Q0MsVUFBQU4sS0FBSztBQUFBLGVBQUlBLEtBQUssQ0FBQ08sU0FBVjtBQUFBLE9BdkNOO0FBQUEsNEdBd0NDLFVBQUFQLEtBQUs7QUFBQSxlQUFJQSxLQUFLLENBQUNRLFNBQVY7QUFBQSxPQXhDTjtBQUFBLDZHQXlDRSxVQUFBUixLQUFLO0FBQUEsZUFBSUEsS0FBSyxDQUFDUyxVQUFWO0FBQUEsT0F6Q1A7QUFBQSxnSEEwQ0ssVUFBQVQsS0FBSztBQUFBLGVBQUlBLEtBQUssQ0FBQ1UsYUFBVjtBQUFBLE9BMUNWO0FBQUEsaUhBNENNLDhCQUN2QixNQUFLQyxjQURrQixFQUV2QixNQUFLQyxpQkFGa0IsRUFHdkIsTUFBS0MsaUJBSGtCLEVBSXZCLE1BQUtDLHFCQUprQixFQUt2QkMsaUNBTHVCLENBNUNOO0FBQUEsZ0hBbURLLDhCQUN0QixNQUFLSixjQURpQixFQUV0QixNQUFLQyxpQkFGaUIsRUFHdEJJLGdDQUhzQixDQW5ETDtBQUFBLDBHQXdERCxVQUFBaEIsS0FBSztBQUFBLGVBQUlBLEtBQUssQ0FBQ2lCLE9BQVY7QUFBQSxPQXhESjtBQUFBLHlHQXlERiw4QkFBZSxNQUFLQyxlQUFwQixFQUFxQyxVQUFBRCxPQUFPO0FBQUEsZUFDM0RBLE9BQU8sQ0FBQ0UsTUFBUixDQUFlLFVBQUFDLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDQyxJQUFGLEtBQVdDLDhCQUFhQyxPQUE1QjtBQUFBLFNBQWhCLENBRDJEO0FBQUEsT0FBNUMsQ0F6REU7QUFBQSwrR0E2REksOEJBQ3JCLE1BQUtaLGNBRGdCLEVBRXJCLE1BQUtDLGlCQUZnQixFQUdyQixNQUFLWSxrQkFIZ0IsRUFJckIsTUFBS0Msc0JBSmdCLEVBS3JCQyxpQ0FMcUIsQ0E3REo7QUFBQSw2R0FzRUUsWUFBTTtBQUN6QixjQUFLMUIsS0FBTCxDQUFXMkIsZUFBWCxDQUEyQkMsWUFBM0IsQ0FBd0MsSUFBeEM7QUFDRCxPQXhFa0I7QUFBQSw0R0EwRUMsVUFBQ0MsR0FBRCxFQUFNQyxXQUFOLEVBQXNCO0FBQ3hDLGNBQUs5QixLQUFMLENBQVcyQixlQUFYLENBQTJCSSxpQkFBM0IsQ0FBNkMsTUFBSy9CLEtBQUwsQ0FBV00sTUFBWCxDQUFrQnVCLEdBQWxCLENBQTdDLEVBQXFFO0FBQ25FQyxVQUFBQSxXQUFXLEVBQVhBO0FBRG1FLFNBQXJFO0FBR0QsT0E5RWtCO0FBQUEsZ0hBZ0ZLLFVBQUFFLE9BQU8sRUFBSTtBQUFBLDJCQUNjLE1BQUtoQyxLQURuQjtBQUFBLDhDQUMxQmlDLEtBRDBCO0FBQUEsWUFDbkJDLFFBRG1CLG1DQUNSLENBRFE7QUFBQSxZQUNMUCxlQURLLGdCQUNMQSxlQURLO0FBRWpDQSxRQUFBQSxlQUFlLENBQUNRLGlCQUFoQixDQUFrQ0QsUUFBbEMsRUFBNENGLE9BQTVDO0FBQ0QsT0FuRmtCO0FBQUEsMEdBMkZELGdCQUFVO0FBQUEsWUFBUkksRUFBUSxRQUFSQSxFQUFRO0FBQzFCLHVDQUFpQkEsRUFBakIsRUFBcUIsTUFBS3BDLEtBQUwsQ0FBV3FDLGFBQWhDO0FBQ0QsT0E3RmtCO0FBQUEsdUdBK0ZKLFVBQUNDLEtBQUQsRUFBUUMsS0FBUixFQUFrQjtBQUMvQixZQUFJLENBQUFELEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsWUFBQUEsS0FBSyxDQUFFRSxPQUFQLE1BQW1CLHVCQUF2QixFQUFnRDtBQUM5QyxnQkFBS0MsUUFBTCxDQUFjO0FBQUNDLFlBQUFBLFdBQVcsRUFBRTtBQUFkLFdBQWQ7O0FBQ0E7QUFDRDs7QUFFRCxZQUFNQyxZQUFZLGtDQUEyQkwsS0FBM0IsYUFBMkJBLEtBQTNCLHVCQUEyQkEsS0FBSyxDQUFFRSxPQUFsQyxpQkFBZ0RELEtBQWhELGFBQWdEQSxLQUFoRCx1QkFBZ0RBLEtBQUssQ0FBRUssRUFBdkQsQ0FBbEI7QUFDQSxZQUFNQyxjQUFjLGFBQU1OLEtBQU4sYUFBTUEsS0FBTix1QkFBTUEsS0FBSyxDQUFFSyxFQUFiLGNBQW1CTixLQUFuQixhQUFtQkEsS0FBbkIsdUJBQW1CQSxLQUFLLENBQUVFLE9BQTFCLENBQXBCLENBUCtCLENBUy9COztBQUNBLGNBQUtNLG9CQUFMLEdBQTRCLE1BQUtBLG9CQUFMLElBQTZCLEVBQXpEO0FBQ0EsWUFBTUMsU0FBUyxHQUFHLE1BQUtELG9CQUFMLENBQTBCRCxjQUExQixDQUFsQjs7QUFDQSxZQUFJLENBQUNFLFNBQUQsSUFBY0EsU0FBUyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsS0FBYUMsMkNBQTNDLEVBQXVFO0FBQ3JFLGdCQUFLSixvQkFBTCxDQUEwQkQsY0FBMUIsSUFBNENHLElBQUksQ0FBQ0MsR0FBTCxFQUE1QyxDQURxRSxDQUdyRTtBQUNBOztBQUpxRSxjQUs5REUsY0FMOEQsR0FLNUMsTUFBS25ELEtBTHVDLENBSzlEbUQsY0FMOEQ7QUFNckVBLFVBQUFBLGNBQWMsQ0FBQ0MsZUFBZixDQUNFLDJDQUFrQjtBQUNoQlosWUFBQUEsT0FBTyxFQUFFRyxZQURPO0FBRWhCQyxZQUFBQSxFQUFFLEVBQUVDO0FBRlksV0FBbEIsQ0FERjtBQU1EO0FBQ0YsT0F4SGtCO0FBQUEsNEdBc1FDLFVBQUFRLFNBQVMsRUFBSTtBQUFBOztBQUMvQixpQ0FBQWpGLFFBQVEsQ0FBQ08sbUJBQVQsZ0ZBQThCMkUsU0FBOUI7QUFEK0IsWUFFeEJwRSxLQUZ3QixHQUVXbUUsU0FGWCxDQUV4Qm5FLEtBRndCO0FBQUEsWUFFakJDLE1BRmlCLEdBRVdrRSxTQUZYLENBRWpCbEUsTUFGaUI7QUFBQSxZQUVOb0UsYUFGTSw2Q0FFV0YsU0FGWDtBQUFBLDJCQUdILE1BQUtyRCxLQUhGO0FBQUEsWUFHeEJFLE9BSHdCLGdCQUd4QkEsT0FId0I7QUFBQSxZQUdmQyxRQUhlLGdCQUdmQSxRQUhlLEVBSS9CO0FBQ0E7O0FBQ0EsWUFBTXFELElBQUksbUNBQ0p0RSxLQUFLLEdBQUcsQ0FBUixJQUFhQyxNQUFNLEdBQUcsQ0FBdEIsR0FBMEJrRSxTQUExQixHQUFzQ0UsYUFEbEM7QUFFUjtBQUNBRSxVQUFBQSxrQkFBa0IsRUFBRXZELE9BQU8sR0FBR1osbUJBQUgsR0FBeUI7QUFINUMsVUFBVjs7QUFLQSxZQUFJLE9BQU8sTUFBS1UsS0FBTCxDQUFXMEQsaUJBQWxCLEtBQXdDLFVBQTVDLEVBQXdEO0FBQ3RELGdCQUFLMUQsS0FBTCxDQUFXMEQsaUJBQVgsQ0FBNkJGLElBQTdCO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDckQsUUFBTCxFQUFlO0FBQ2IsZ0JBQUtILEtBQUwsQ0FBV0ksZUFBWCxDQUEyQkMsU0FBM0IsQ0FBcUNtRCxJQUFyQztBQUNEO0FBQ0YsT0F4UmtCO0FBQUEsNEdBMFJDLFVBQUFHLE9BQU8sRUFBSTtBQUFBLDJCQUNHLE1BQUszRCxLQURSO0FBQUEsWUFDdEJpQyxLQURzQixnQkFDdEJBLEtBRHNCO0FBQUEsWUFDZmtCLGNBRGUsZ0JBQ2ZBLGNBRGU7QUFHN0JBLFFBQUFBLGNBQWMsQ0FBQ1MsZ0JBQWYsQ0FBZ0NELE9BQWhDLEVBQXlDMUIsS0FBekM7QUFDRCxPQTlSa0I7QUFHakIsWUFBSzRCLEtBQUwsR0FBYSxJQUFiO0FBQ0EsWUFBS0MsSUFBTCxnQkFBWSx1QkFBWixDQUppQixDQU1qQjs7QUFDQSxZQUFLQyxZQUFMLGdCQUFvQix1QkFBcEI7QUFDQSxZQUFLQyxjQUFMLGdCQUFzQix1QkFBdEI7QUFSaUI7QUFTbEI7O0FBbkR1RTtBQUFBO0FBQUEsYUFxRHhFLDZCQUFvQjtBQUNsQixrREFBa0IsS0FBS0YsSUFBTCxDQUFVRyxPQUE1QixFQUFxQyxLQUFLQyxhQUExQztBQUNEO0FBdkR1RTtBQUFBO0FBQUEsYUF5RHhFLDhCQUFxQjtBQUFBOztBQUNuQixZQUFNeEIsV0FBVyxrQkFBRyxLQUFLeUIsS0FBUixnREFBRyxZQUFZekIsV0FBaEM7O0FBRUEsWUFBSUEsV0FBSixFQUFpQjtBQUNmO0FBQ0EsZUFBS0QsUUFBTCxDQUFjO0FBQUNDLFlBQUFBLFdBQVcsRUFBRTtBQUFkLFdBQWQ7QUFDRDtBQUNGO0FBaEV1RTtBQUFBO0FBQUEsYUFrRXhFLGdDQUF1QjtBQUNyQixvREFBb0IsS0FBS29CLElBQUwsQ0FBVUcsT0FBOUI7QUFDRDtBQXBFdUU7QUFBQTtBQUFBLGFBK0h4RSw0QkFBbUI3QixFQUFuQixFQUF1QjtBQUNyQixZQUFJLEtBQUtwQyxLQUFMLENBQVdvRSxpQkFBZixFQUFrQztBQUNoQyxlQUFLcEUsS0FBTCxDQUFXb0UsaUJBQVgsQ0FBNkIsS0FBS1AsS0FBbEMsRUFBeUN6QixFQUF6QztBQUNEO0FBQ0Y7QUFuSXVFO0FBQUE7QUFBQTtBQW9LeEU7O0FBRUE7QUFDQSxpQ0FBa0JpQyxjQUFsQixFQUFrQztBQUNoQztBQUNBLGVBQU8sSUFBUDtBQUNEO0FBRUQ7O0FBNUt3RTtBQUFBO0FBQUEsYUE4S3hFLHFCQUFZQyxRQUFaLEVBQXNCQyxNQUF0QixFQUE4QjtBQUM1QixZQUFNQyxXQUFXLEdBQUcsQ0FBQ0YsUUFBRCxJQUFhLENBQUNDLE1BQWQsR0FBdUIsSUFBdkIsR0FBOEJELFFBQVEsQ0FBQ0csT0FBVCxDQUFpQkYsTUFBakIsQ0FBbEQ7QUFDQSxlQUFPQyxXQUFXLElBQUk7QUFBQ0UsVUFBQUEsQ0FBQyxFQUFFRixXQUFXLENBQUMsQ0FBRCxDQUFmO0FBQW9CRyxVQUFBQSxDQUFDLEVBQUVILFdBQVcsQ0FBQyxDQUFEO0FBQWxDLFNBQXRCO0FBQ0Q7QUFqTHVFO0FBQUE7QUFBQSxhQW1MeEUsNEJBQW1CSSxhQUFuQixFQUFrQztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLDJCQVc1QixLQUFLNUUsS0FYdUI7QUFBQSxZQUU5QjZFLFFBRjhCLGdCQUU5QkEsUUFGOEI7QUFBQSxZQUc5QkMsUUFIOEIsZ0JBRzlCQSxRQUg4QjtBQUFBLFlBSTlCdkUsU0FKOEIsZ0JBSTlCQSxTQUo4QjtBQUFBLFlBSzlCRSxVQUw4QixnQkFLOUJBLFVBTDhCO0FBQUEsWUFNOUJILE1BTjhCLGdCQU05QkEsTUFOOEI7QUFBQSxZQU85QnFCLGVBUDhCLGdCQU85QkEsZUFQOEI7QUFBQSxZQVE5Qm9ELG9CQVI4QixnQkFROUJBLG9CQVI4QjtBQUFBLFlBUzlCQyxZQVQ4QixnQkFTOUJBLFlBVDhCO0FBQUEsWUFVOUJDLFdBVjhCLGdCQVU5QkEsV0FWOEI7QUFhaEMsWUFBTUMsYUFBYSxHQUFHLEtBQUtsQixjQUEzQjtBQUVBLCtCQUFBNUYsUUFBUSxDQUFDTSxTQUFULDRFQUFvQjRFLFNBQXBCLEdBZmdDLENBaUJoQzs7QUFDQSxZQUFJNkIsWUFBWSxHQUFHLCtCQUFLbkYsS0FBTCxDQUFXb0YsV0FBWCxnRkFBd0I5RSxNQUF4QixLQUFrQyxFQUFyRCxDQWxCZ0MsQ0FvQmhDOztBQUNBLFlBQUlDLFNBQVMsSUFBSUEsU0FBUyxDQUFDOEUsTUFBM0IsRUFBbUM7QUFDakM7QUFDQSxjQUFNQyxVQUFVLEdBQUc3RSxVQUFVLENBQzFCOEUsS0FEZ0IsR0FFaEJDLE9BRmdCLEdBR2hCckUsTUFIZ0IsQ0FHVCxVQUFBVSxHQUFHO0FBQUEsbUJBQUkrQyxhQUFhLENBQUN0RSxNQUFNLENBQUN1QixHQUFELENBQU4sQ0FBWWUsRUFBYixDQUFqQjtBQUFBLFdBSE0sRUFJaEI2QyxNQUpnQixDQUlULFVBQUNDLFFBQUQsRUFBVzdELEdBQVgsRUFBbUI7QUFDekIsZ0JBQU04RCxjQUFjLEdBQUc7QUFDckJDLGNBQUFBLGdCQUFnQixFQUFFLDBCQUFBQyxHQUFHO0FBQUEsdUJBQUksTUFBSSxDQUFDQyxpQkFBTCxDQUF1QmpFLEdBQXZCLEVBQTRCZ0UsR0FBNUIsQ0FBSjtBQUFBO0FBREEsYUFBdkI7QUFHQSxnQkFBTUUsWUFBWSxHQUFHLG1DQUFrQixNQUFJLENBQUMvRixLQUF2QixFQUE4QjJGLGNBQTlCLEVBQThDOUQsR0FBOUMsQ0FBckI7QUFDQSxtQkFBTzZELFFBQVEsQ0FBQ00sTUFBVCxDQUFnQkQsWUFBWSxJQUFJLEVBQWhDLENBQVA7QUFDRCxXQVZnQixFQVVkLEVBVmMsQ0FBbkI7QUFXQVosVUFBQUEsWUFBWSxHQUFHQSxZQUFZLENBQUNhLE1BQWIsQ0FBb0JWLFVBQXBCLENBQWY7QUFDRDs7QUFFRCxzQ0FBSSxLQUFLdEYsS0FBTCxDQUFXb0YsV0FBZixtREFBSSx1QkFBd0JhLFdBQTVCLEVBQXlDO0FBQ3ZDZCxVQUFBQSxZQUFZLEdBQUdBLFlBQVksQ0FBQ2EsTUFBYixDQUFvQixLQUFLaEcsS0FBTCxDQUFXb0YsV0FBWCxDQUF1QmEsV0FBM0MsQ0FBZjtBQUNEOztBQUVELFlBQUloQixXQUFKLEVBQWlCO0FBQ2ZFLFVBQUFBLFlBQVksQ0FBQ2UsSUFBYixDQUNFLElBQUlDLHlCQUFKLENBQXNCO0FBQ3BCdkQsWUFBQUEsRUFBRSxFQUFFd0QsOEJBRGdCO0FBRXBCQyxZQUFBQSxTQUFTLEVBQUVDLGdCQUFVQyxJQUZEO0FBR3BCQyxZQUFBQSxJQUFJLEVBQUUsQ0FBQ3ZCLFdBQUQsQ0FIYztBQUlwQndCLFlBQUFBLGNBQWMsRUFBRSx3QkFBQ0QsSUFBRCxFQUFPRSxPQUFQO0FBQUEscUJBQW1CRixJQUFJLENBQUMsQ0FBRCxDQUFKLEtBQVlFLE9BQU8sQ0FBQyxDQUFELENBQXRDO0FBQUEsYUFKSTtBQUtwQkMsWUFBQUEsVUFBVSxFQUFFLG9CQUFBQyxDQUFDO0FBQUEscUJBQUlBLENBQUo7QUFBQSxhQUxPO0FBTXBCQyxZQUFBQSxZQUFZLEVBQUUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEI7QUFOTSxXQUF0QixDQURGO0FBVUQ7O0FBRUQsWUFBSS9CLFFBQVEsQ0FBQ2dDLGtCQUFULENBQTRCLGFBQTVCLENBQUosRUFBZ0Q7QUFDOUMzQixVQUFBQSxZQUFZLENBQUNlLElBQWIsQ0FDRSxJQUFJYSwwQkFBSixDQUF3QjtBQUN0Qm5FLFlBQUFBLEVBQUUsRUFBRSx1QkFEa0I7QUFFdEJtQyxZQUFBQSxvQkFBb0IsRUFBcEJBLG9CQUZzQjtBQUd0QkMsWUFBQUEsWUFBWSxFQUFaQSxZQUhzQjtBQUl0QmdDLFlBQUFBLG1CQUFtQixFQUFFbEMsUUFBUSxDQUFDa0MsbUJBSlI7QUFLdEJDLFlBQUFBLGNBQWMsRUFBRTtBQUNkSixjQUFBQSxZQUFZLEVBQUUvQixRQUFRLENBQUNrQztBQURUO0FBTE0sV0FBeEIsQ0FERjtBQVdELFNBbEUrQixDQW9FaEM7OztBQUNBLFlBQU1FLFdBQVcsR0FBRyxLQUFLbkQsWUFBekI7O0FBQ0EsWUFBTW9ELGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUI7QUFBQSxpQkFBT0QsV0FBVyxDQUFDakQsT0FBWixHQUFzQixLQUE3QjtBQUFBLFNBQXpCOztBQUVBLDRCQUNFLGdDQUFDLGtCQUFEO0FBQ0UsVUFBQSxVQUFVLEVBQUU7QUFEZCxXQUVNLEtBQUtqRSxLQUFMLENBQVdvRixXQUZqQjtBQUdFLFVBQUEsU0FBUyxFQUFFO0FBQUNnQyxZQUFBQSxxQkFBcUIsRUFBRTtBQUF4QixXQUhiO0FBSUUsVUFBQSxTQUFTLEVBQUV2QyxRQUpiO0FBS0UsVUFBQSxpQkFBaUIsRUFBRSxrQ0FBaUI7QUFBQSxnQkFBZnhCLFNBQWUsU0FBZkEsU0FBZTs7QUFDbEM7QUFDQSxnQkFBSSxDQUFDNkQsV0FBVyxDQUFDakQsT0FBYixJQUF3QlosU0FBUyxDQUFDbkUsS0FBVixHQUFrQixDQUExQyxJQUErQ21FLFNBQVMsQ0FBQ2xFLE1BQVYsR0FBbUIsQ0FBdEUsRUFBeUU7QUFDdkUrSCxjQUFBQSxXQUFXLENBQUNqRCxPQUFaLEdBQXNCLElBQXRCOztBQUNBLGNBQUEsTUFBSSxDQUFDb0QsaUJBQUwsQ0FBdUJoRSxTQUF2QjtBQUNEO0FBQ0YsV0FYSDtBQVlFLFVBQUEsRUFBRSxFQUFDLHdCQVpMO0FBYUUsVUFBQSxNQUFNLEVBQUU4QixZQWJWO0FBY0UsVUFBQSxjQUFjLEVBQUUsd0JBQUFtQyxJQUFJLEVBQUk7QUFDdEJILFlBQUFBLGdCQUFnQjs7QUFDaEIsWUFBQSxNQUFJLENBQUNJLGVBQUwsQ0FBcUJELElBQXJCO0FBQ0QsV0FqQkgsQ0FrQkU7QUFsQkY7QUFtQkUsVUFBQSxPQUFPLEVBQUUsaUJBQUFFLElBQUksRUFBSTtBQUNmN0YsWUFBQUEsZUFBZSxDQUFDOEYsWUFBaEIsQ0FBNkJELElBQTdCO0FBQ0F0QyxZQUFBQSxhQUFhLENBQUNqQixPQUFkLEdBQXdCO0FBQUNpQixjQUFBQSxhQUFhLEVBQUVzQyxJQUFJLENBQUNFO0FBQXJCLGFBQXhCO0FBQ0QsV0F0Qkg7QUF1QkUsVUFBQSxPQUFPLEVBQUUvRixlQUFlLENBQUNDLFlBdkIzQjtBQXdCRSxVQUFBLFdBQVcsRUFBRSx1QkFBTTtBQUNqQnNELFlBQUFBLGFBQWEsQ0FBQ2pCLE9BQWQsR0FBd0IsSUFBeEI7QUFDRCxXQTFCSDtBQTJCRSxVQUFBLE9BQU8sRUFBRSxLQUFLMEQsWUEzQmhCO0FBNEJFLFVBQUEsR0FBRyxFQUFFLGFBQUFDLElBQUksRUFBSTtBQUNYLGdCQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQ0MsSUFBYixJQUFxQkQsSUFBSSxDQUFDQyxJQUFMLEtBQWMsTUFBSSxDQUFDaEUsS0FBNUMsRUFBbUQ7QUFDakQsY0FBQSxNQUFJLENBQUNBLEtBQUwsR0FBYStELElBQUksQ0FBQ0MsSUFBbEI7QUFDRDtBQUNGLFdBaENIO0FBaUNFLFVBQUEsa0JBQWtCLEVBQUUsNEJBQUF6RixFQUFFO0FBQUEsbUJBQUksTUFBSSxDQUFDMEYsa0JBQUwsQ0FBd0IxRixFQUF4QixDQUFKO0FBQUEsV0FqQ3hCO0FBa0NFLFVBQUEsV0FBVyxFQUFFLDRCQUF1QjtBQUFBOztBQUFBLGdCQUFyQkcsS0FBcUIsU0FBckJBLEtBQXFCO0FBQUEsZ0JBQWQrQixRQUFjLFNBQWRBLFFBQWM7O0FBQ2xDLGdCQUNFeUQsS0FBSywwQkFBQ3hGLEtBQUssQ0FBQ3ZDLEtBQU4sQ0FBWWdJLGdCQUFiLDBEQUFDLHNCQUE4QkMsR0FBL0IsQ0FBTCxJQUNBRixLQUFLLDJCQUFDeEYsS0FBSyxDQUFDdkMsS0FBTixDQUFZZ0ksZ0JBQWIsMkRBQUMsdUJBQThCRSxHQUEvQixDQUZQLEVBR0U7QUFDQSxxQkFBTyxJQUFQO0FBQ0Q7O0FBQ0QsZ0JBQU1DLGdCQUFnQixHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV3hELFFBQVEsQ0FBQ3lELElBQXBCLENBQXpCO0FBRUEsbUJBQ0UvRixLQUFLLENBQUN2QyxLQUFOLENBQVlnSSxnQkFBWixDQUE2QkMsR0FBN0IsSUFBb0NFLGdCQUFwQyxJQUNBNUYsS0FBSyxDQUFDdkMsS0FBTixDQUFZZ0ksZ0JBQVosQ0FBNkJFLEdBQTdCLElBQW9DQyxnQkFGdEM7QUFJRDtBQS9DSCxXQURGO0FBbUREO0FBOVN1RTtBQUFBO0FBQUE7QUEwVXhFO0FBQ0EsNEJBQWE7QUFBQSwyQkFrQlAsS0FBS25JLEtBbEJFO0FBQUEsWUFFVDZFLFFBRlMsZ0JBRVRBLFFBRlM7QUFBQSxZQUdUQyxRQUhTLGdCQUdUQSxRQUhTO0FBQUEsWUFJVDFFLGVBSlMsZ0JBSVRBLGVBSlM7QUFBQSxZQUtURSxNQUxTLGdCQUtUQSxNQUxTO0FBQUEsWUFNVGlJLFlBTlMsZ0JBTVRBLFlBTlM7QUFBQSxZQU9UQyxRQVBTLGdCQU9UQSxRQVBTO0FBQUEsWUFRVEMsV0FSUyxnQkFRVEEsV0FSUztBQUFBLFlBU1R0SSxRQVRTLGdCQVNUQSxRQVRTO0FBQUEsWUFVVHVJLE1BVlMsZ0JBVVRBLE1BVlM7QUFBQSxZQVdUdkYsY0FYUyxnQkFXVEEsY0FYUztBQUFBLFlBWVR4QixlQVpTLGdCQVlUQSxlQVpTO0FBQUEsWUFhVGdILGlCQWJTLGdCQWFUQSxpQkFiUztBQUFBLFlBY1RDLE1BZFMsZ0JBY1RBLE1BZFM7QUFBQSxZQWVUM0csS0FmUyxnQkFlVEEsS0FmUztBQUFBLFlBZ0JUL0IsT0FoQlMsZ0JBZ0JUQSxPQWhCUztBQUFBLFlBaUJUMkksaUJBakJTLGdCQWlCVEEsaUJBakJTO0FBb0JYLFlBQU14RSxjQUFjLEdBQUcsS0FBSzVDLHNCQUFMLENBQTRCLEtBQUt6QixLQUFqQyxDQUF2QjtBQUNBLFlBQU00RSxhQUFhLEdBQUcsS0FBS2tFLHFCQUFMLENBQTJCLEtBQUs5SSxLQUFoQyxDQUF0Qjs7QUFFQSxZQUFNK0ksUUFBUSxtQ0FDVGxFLFFBRFM7QUFFWjNGLFVBQUFBLEtBQUssRUFBRSxNQUZLO0FBR1pDLFVBQUFBLE1BQU0sRUFBRSxNQUhJO0FBSVppSSxVQUFBQSxxQkFBcUIsRUFBRSxJQUpYO0FBS1o0QixVQUFBQSxnQkFBZ0IsRUFBaEJBLDhCQUxZO0FBTVpILFVBQUFBLGlCQUFpQixFQUFqQkE7QUFOWSxVQUFkOztBQVNBLFlBQU1JLE9BQU8sR0FBR0MsT0FBTyxDQUFDckUsUUFBUSxDQUFDb0UsT0FBVixDQUF2QjtBQUVBLDRCQUNFLCtFQUNFLGdDQUFDLFVBQUQ7QUFDRSxVQUFBLFFBQVEsRUFBRVQsUUFEWjtBQUVFLFVBQUEsZ0JBQWdCLEVBQUVXLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZQyxxQkFBWixDQUZwQjtBQUdFLFVBQUEsVUFBVSxFQUFFeEUsUUFBUSxDQUFDeUUsVUFIdkI7QUFJRSxVQUFBLE9BQU8sRUFBRUwsT0FKWDtBQUtFLFVBQUEsT0FBTyxFQUFFL0ksT0FMWDtBQU1FLFVBQUEsUUFBUSxFQUFFQyxRQU5aO0FBT0UsVUFBQSxNQUFNLEVBQUVHLE1BUFY7QUFRRSxVQUFBLGNBQWMsRUFBRStELGNBUmxCO0FBU0UsVUFBQSxRQUFRLEVBQUVwQyxLQVRaO0FBVUUsVUFBQSxXQUFXLEVBQUV3RyxXQVZmO0FBV0UsVUFBQSxRQUFRLEVBQUUsS0FBS3pJLEtBQUwsQ0FBV3VKLFFBWHZCO0FBWUUsVUFBQSxLQUFLLEVBQUUxRSxRQUFRLENBQUMyRSxLQUFULElBQWtCLENBWjNCO0FBYUUsVUFBQSxHQUFHLEVBQUViLGlCQUFpQixDQUFDYyxRQUFsQixJQUE4QmQsaUJBQWlCLENBQUNjLFFBQWxCLENBQTJCQyxPQUF6RCxHQUFtRSxFQUFuRSxHQUF3RSxDQWIvRTtBQWNFLFVBQUEsTUFBTSxFQUFFZCxNQWRWO0FBZUUsVUFBQSxNQUFNLEVBQUVGLE1BZlY7QUFnQkUsVUFBQSxtQkFBbUIsRUFBRXRJLGVBQWUsQ0FBQ3VKLGlCQWhCdkM7QUFpQkUsVUFBQSxnQkFBZ0IsRUFBRXZKLGVBQWUsQ0FBQ3dKLGNBakJwQztBQWtCRSxVQUFBLGdCQUFnQixFQUFFLEtBQUtDLHFCQWxCekI7QUFtQkUsVUFBQSxrQkFBa0IsRUFBRSxLQUFLQyxpQkFuQjNCO0FBb0JFLFVBQUEsZUFBZSxFQUFFbkksZUFBZSxDQUFDb0ksYUFwQm5DO0FBcUJFLFVBQUEsV0FBVyxFQUFFNUcsY0FBYyxDQUFDNkcsU0FyQjlCO0FBc0JFLFVBQUEsd0JBQXdCLEVBQUVySSxlQUFlLENBQUNzSTtBQXRCNUMsVUFERixlQXlCRSxnQ0FBQyxZQUFELGdDQUFrQmxCLFFBQWxCO0FBQTRCLFVBQUEsR0FBRyxFQUFDLFFBQWhDO0FBQXlDLFVBQUEsUUFBUSxFQUFFakUsUUFBUSxDQUFDb0Y7QUFBNUQsWUFDRzdMLFVBQVUsSUFBSSwwQ0FEakIsRUFFRyxLQUFLOEwsa0JBQUwsQ0FBd0J2RixhQUF4QixDQUZILENBekJGLEVBNkJHLEtBQUt3RixpQkFBTCxDQUF1Qi9GLGNBQXZCLENBN0JILENBREY7QUFpQ0Q7QUE5WXVFO0FBQUE7QUFBQSxhQWdaeEUsa0JBQVM7QUFBQTs7QUFBQSwyQkFDc0IsS0FBS3JFLEtBRDNCO0FBQUEsWUFDQTZFLFFBREEsZ0JBQ0FBLFFBREE7QUFBQSxZQUNVQyxRQURWLGdCQUNVQSxRQURWO0FBRVAsWUFBTXBDLFdBQVcsbUJBQUcsS0FBS3lCLEtBQVIsaURBQUcsYUFBWXpCLFdBQWhDOztBQUVBLFlBQUlBLFdBQUosRUFBaUI7QUFDZixpQkFBTyxJQUFQO0FBQ0Q7O0FBRUQsNEJBQ0UsZ0NBQUMsb0NBQUQ7QUFBb0IsVUFBQSxHQUFHLEVBQUUsS0FBS29CLElBQTlCO0FBQW9DLFVBQUEsS0FBSyxFQUFFaEYsU0FBUyxDQUFDQyxTQUFyRDtBQUFnRSxVQUFBLEtBQUssRUFBRThGLFFBQVEsQ0FBQ3dGO0FBQWhGLFdBQ0d2RixRQUFRLENBQUNvRixjQUFULElBQTJCLEtBQUtJLFVBQUwsRUFEOUIsQ0FERjtBQUtEO0FBN1p1RTtBQUFBO0FBQUEsSUFDL0NDLGdCQUQrQzs7QUFBQSxtQ0FDcEV4SyxZQURvRSxlQUVyRDtBQUNqQjtBQUNBeUksSUFBQUEsUUFBUSxFQUFFZ0Msc0JBQVVDLE1BRkg7QUFHakI5QixJQUFBQSxpQkFBaUIsRUFBRTZCLHNCQUFVQyxNQUFWLENBQWlCQyxVQUhuQjtBQUlqQnJJLElBQUFBLGFBQWEsRUFBRW1JLHNCQUFVRyxNQUFWLENBQWlCRCxVQUpmO0FBS2pCakssSUFBQUEsVUFBVSxFQUFFK0osc0JBQVVJLE9BQVYsQ0FBa0JKLHNCQUFVSyxHQUE1QixFQUFpQ0gsVUFMNUI7QUFNakJuSyxJQUFBQSxTQUFTLEVBQUVpSyxzQkFBVUksT0FBVixDQUFrQkosc0JBQVVLLEdBQTVCLEVBQWlDSCxVQU4zQjtBQU9qQnBLLElBQUFBLE1BQU0sRUFBRWtLLHNCQUFVSSxPQUFWLENBQWtCSixzQkFBVUssR0FBNUIsRUFBaUNILFVBUHhCO0FBUWpCekosSUFBQUEsT0FBTyxFQUFFdUosc0JBQVVJLE9BQVYsQ0FBa0JKLHNCQUFVSyxHQUE1QixFQUFpQ0gsVUFSekI7QUFTakI3RixJQUFBQSxRQUFRLEVBQUUyRixzQkFBVUMsTUFBVixDQUFpQkMsVUFUVjtBQVVqQmpDLElBQUFBLFdBQVcsRUFBRStCLHNCQUFVQyxNQUFWLENBQWlCQyxVQVZiO0FBV2pCNUYsSUFBQUEsUUFBUSxFQUFFMEYsc0JBQVVDLE1BQVYsQ0FBaUJDLFVBWFY7QUFZakIzRixJQUFBQSxvQkFBb0IsRUFBRXlGLHNCQUFVRyxNQUFWLENBQWlCRCxVQVp0QjtBQWFqQjFGLElBQUFBLFlBQVksRUFBRXdGLHNCQUFVRyxNQWJQO0FBY2pCaEosSUFBQUEsZUFBZSxFQUFFNkksc0JBQVVDLE1BQVYsQ0FBaUJDLFVBZGpCO0FBZWpCdEssSUFBQUEsZUFBZSxFQUFFb0ssc0JBQVVDLE1BQVYsQ0FBaUJDLFVBZmpCO0FBZ0JqQnZILElBQUFBLGNBQWMsRUFBRXFILHNCQUFVQyxNQUFWLENBQWlCQyxVQWhCaEI7QUFrQmpCO0FBQ0F4SyxJQUFBQSxPQUFPLEVBQUVzSyxzQkFBVU0sSUFuQkY7QUFtQlE7QUFDekJ2QixJQUFBQSxRQUFRLEVBQUVpQixzQkFBVU0sSUFwQkg7QUFxQmpCM0ssSUFBQUEsUUFBUSxFQUFFcUssc0JBQVVNLElBckJIO0FBc0JqQkMsSUFBQUEsT0FBTyxFQUFFUCxzQkFBVUMsTUF0QkY7QUF1QmpCTyxJQUFBQSxTQUFTLEVBQUVSLHNCQUFVQyxNQXZCSjtBQXdCakJqSyxJQUFBQSxTQUFTLEVBQUVnSyxzQkFBVUMsTUF4Qko7QUF5QmpCUSxJQUFBQSxnQkFBZ0IsRUFBRVQsc0JBQVVVLElBekJYO0FBMEJqQkMsSUFBQUEsZ0JBQWdCLEVBQUVYLHNCQUFVVSxJQTFCWDtBQTJCakJyQyxJQUFBQSxpQkFBaUIsRUFBRTJCLHNCQUFVVSxJQTNCWjtBQTRCakJFLElBQUFBLFlBQVksRUFBRVosc0JBQVVVLElBNUJQO0FBNkJqQmpKLElBQUFBLEtBQUssRUFBRXVJLHNCQUFVYSxNQTdCQTtBQThCakIzSyxJQUFBQSxhQUFhLEVBQUU4SixzQkFBVUM7QUE5QlIsR0FGcUQ7QUFBQSxtQ0FDcEUxSyxZQURvRSxrQkFtQ2xEO0FBQ3BCd0ksSUFBQUEsWUFBWSxFQUFFK0Msc0JBRE07QUFFcEJsRyxJQUFBQSxXQUFXLEVBQUUsRUFGTztBQUdwQm5ELElBQUFBLEtBQUssRUFBRSxDQUhhO0FBSXBCL0IsSUFBQUEsT0FBTyxFQUFFO0FBSlcsR0FuQ2tEO0FBZ2ExRUgsRUFBQUEsWUFBWSxDQUFDd0wsV0FBYixHQUEyQixjQUEzQjtBQUVBLFNBQU94TCxZQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyBsaWJyYXJpZXNcbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IE1hcGJveEdMTWFwIGZyb20gJ3JlYWN0LW1hcC1nbCc7XG5pbXBvcnQgRGVja0dMIGZyb20gJ0BkZWNrLmdsL3JlYWN0JztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7T1BFUkFUSU9OLCBMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NvbGlkUG9seWdvbkxheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtUaWxlTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2dlby1sYXllcnMnO1xuaW1wb3J0IHtlcnJvck5vdGlmaWNhdGlvbn0gZnJvbSAndXRpbHMvbm90aWZpY2F0aW9ucy11dGlscyc7XG5cbi8vIGNvbXBvbmVudHNcbmltcG9ydCBNYXBQb3BvdmVyRmFjdG9yeSBmcm9tICdjb21wb25lbnRzL21hcC9tYXAtcG9wb3Zlcic7XG5pbXBvcnQgTWFwQ29udHJvbEZhY3RvcnkgZnJvbSAnY29tcG9uZW50cy9tYXAvbWFwLWNvbnRyb2wnO1xuaW1wb3J0IHtTdHlsZWRNYXBDb250YWluZXJ9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcblxuLy8gdXRpbHNcbmltcG9ydCB7Z2VuZXJhdGVNYXBib3hMYXllcnN9IGZyb20gJ2xheWVycy9tYXBib3gtdXRpbHMnO1xuaW1wb3J0IHtzZXRMYXllckJsZW5kaW5nfSBmcm9tICd1dGlscy9nbC11dGlscyc7XG5pbXBvcnQge3RyYW5zZm9ybVJlcXVlc3R9IGZyb20gJ3V0aWxzL21hcC1zdHlsZS11dGlscy9tYXBib3gtdXRpbHMnO1xuaW1wb3J0IHtyZW5kZXJEZWNrR2xMYXllciwgcHJlcGFyZUxheWVyc1RvUmVuZGVyLCBwcmVwYXJlTGF5ZXJzRm9yRGVja30gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuXG4vLyBkZWZhdWx0LXNldHRpbmdzXG5pbXBvcnQgVGhyZWVEQnVpbGRpbmdMYXllciBmcm9tICdkZWNrZ2wtbGF5ZXJzLzNkLWJ1aWxkaW5nLWxheWVyLzNkLWJ1aWxkaW5nLWxheWVyJztcbmltcG9ydCB7RklMVEVSX1RZUEVTLCBNQVNLX0xBWUVSX0lELCBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRX0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5pbXBvcnQge29ic2VydmVEaW1lbnNpb25zLCB1bm9ic2VydmVEaW1lbnNpb25zfSBmcm9tICcuLi91dGlscy9vYnNlcnZlLWRpbWVuc2lvbnMnO1xuaW1wb3J0IHtMT0NBTEVfQ09ERVN9IGZyb20gJ2xvY2FsaXphdGlvbi9sb2NhbGVzJztcblxuLy8gUGVyZm9ybWFuY2UgZGVidWdnaW5nXG5pbXBvcnQge2NyZWF0ZVRyYWNrZXIsIGNyZWF0ZUxheWVyVXBkYXRlVHJhY2tlciwgcmVuZGVyUGVyZm9ybWFuY2VTdGF0c30gZnJvbSAnLi9wZXJmb3JtYW5jZSc7XG5jb25zdCB0cmFja2VycyA9IHt9O1xuY29uc3QgUEVSRl9ERUJVRyA9IHdpbmRvdz8ubG9jYXRpb24/LnNlYXJjaD8uaW5jbHVkZXMoJ1BFUkZfREVCVUcnKTtcbmlmIChQRVJGX0RFQlVHKSB7XG4gIHRyYWNrZXJzLmRyYXdDb3VudCA9IGNyZWF0ZVRyYWNrZXIoJ2RyYXdzJyk7XG4gIHRyYWNrZXJzLnZpZXdwb3J0Q2hhbmdlQ291bnQgPSBjcmVhdGVUcmFja2VyKCd2aWV3cG9ydCBjaGFuZ2VzJyk7XG4gIGNyZWF0ZUxheWVyVXBkYXRlVHJhY2tlcignc3RhdGUgdXBkYXRlcycsIFtMYXllciwgVGlsZUxheWVyXSk7XG59XG5cbi8qKiBAdHlwZSB7e1trZXk6IHN0cmluZ106IFJlYWN0LkNTU1Byb3BlcnRpZXN9fSAqL1xuY29uc3QgTUFQX1NUWUxFID0ge1xuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH0sXG4gIHRvcDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzBweCcsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJSdcbiAgfVxufTtcblxuY29uc3QgVFJBTlNJVElPTl9EVVJBVElPTiA9IDA7XG5cbk1hcENvbnRhaW5lckZhY3RvcnkuZGVwcyA9IFtNYXBQb3BvdmVyRmFjdG9yeSwgTWFwQ29udHJvbEZhY3RvcnksIEVkaXRvckZhY3RvcnldO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXBDb250YWluZXJGYWN0b3J5KE1hcFBvcG92ZXIsIE1hcENvbnRyb2wsIEVkaXRvcikge1xuICBjbGFzcyBNYXBDb250YWluZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAvLyByZXF1aXJlZFxuICAgICAgZGF0YXNldHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBpbnRlcmFjdGlvbkNvbmZpZzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbGF5ZXJCbGVuZGluZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgbGF5ZXJPcmRlcjogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyRGF0YTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIGZpbHRlcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBtYXBTdGF0ZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbWFwQ29udHJvbHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIG1hcFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgbWFwYm94QXBpVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdmlzU3RhdGVBY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBtYXBTdGF0ZUFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIHVpU3RhdGVBY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG5cbiAgICAgIC8vIG9wdGlvbmFsXG4gICAgICBwcmltYXJ5OiBQcm9wVHlwZXMuYm9vbCwgLy8gcHJpbWFyeSBvbmUgd2lsbCBiZSByZXBvcnRpbmcgaXRzIHNpemUgdG8gYXBwU3RhdGVcbiAgICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGlzRXhwb3J0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGNsaWNrZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBob3ZlckluZm86IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBtYXBMYXllcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBvbk1hcFRvZ2dsZUxheWVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIG9uTWFwU3R5bGVMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgZ2VuZXJhdGVUaHVtYm5haWw6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgZ2V0TWFwYm94UmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgcG9wdXBTZXR0aW5nczogUHJvcFR5cGVzLm9iamVjdFxuICAgIH07XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgTWFwQ29tcG9uZW50OiBNYXBib3hHTE1hcCxcbiAgICAgIGRlY2tHbFByb3BzOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICB0aGlzLl9kZWNrID0gbnVsbDtcbiAgICAgIHRoaXMuX3JlZiA9IGNyZWF0ZVJlZigpO1xuXG4gICAgICAvLyBSZW5kZXIgbGltaXRpbmcgbWVjaGFuaXNtXG4gICAgICB0aGlzLl9oYXNSZW5kZXJlZCA9IGNyZWF0ZVJlZigpO1xuICAgICAgdGhpcy5fbW91c2VQb3NpdGlvbiA9IGNyZWF0ZVJlZigpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgY29udGV4dExvc3QgPSB0aGlzLnN0YXRlPy5jb250ZXh0TG9zdDtcblxuICAgICAgaWYgKGNvbnRleHRMb3N0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjb250ZXh0TG9zdDogZmFsc2V9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCBpc0V4cG9ydH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHByaW1hcnkpIHtcbiAgICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoIWlzRXhwb3J0ICYmIGRpbWVuc2lvbnMgJiYgZGltZW5zaW9ucy53aWR0aCA+IDAgJiYgZGltZW5zaW9ucy5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcChkaW1lbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBsYXllcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmxheWVycztcbiAgICBsYXllckRhdGFTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmxheWVyRGF0YTtcbiAgICBtYXBMYXllcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcExheWVycztcbiAgICBsYXllck9yZGVyU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5sYXllck9yZGVyO1xuICAgIHBvcHVwU2V0dGluZ3NTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnBvcHVwU2V0dGluZ3M7XG5cbiAgICBsYXllcnNUb1JlbmRlclNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwTGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLnBvcHVwU2V0dGluZ3NTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNUb1JlbmRlclxuICAgICk7XG4gICAgbGF5ZXJzRm9yRGVja1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNGb3JEZWNrXG4gICAgKTtcbiAgICBmaWx0ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5maWx0ZXJzO1xuICAgIHBvbHlnb25GaWx0ZXJzID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWx0ZXJzU2VsZWN0b3IsIGZpbHRlcnMgPT5cbiAgICAgIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbilcbiAgICApO1xuXG4gICAgbWFwYm94TGF5ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllck9yZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IsXG4gICAgICBnZW5lcmF0ZU1hcGJveExheWVyc1xuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyU2V0RG9tYWluID0gKGlkeCwgY29sb3JEb21haW4pID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKHRoaXMucHJvcHMubGF5ZXJzW2lkeF0sIHtcbiAgICAgICAgY29sb3JEb21haW5cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIgPSBsYXllcklkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleDogbWFwSW5kZXggPSAwLCB2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCk7XG4gICAgfTtcblxuICAgIF9vbkRlY2tJbml0aWFsaXplZChnbCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCh0aGlzLl9kZWNrLCBnbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX29uQmVmb3JlUmVuZGVyID0gKHtnbH0pID0+IHtcbiAgICAgIHNldExheWVyQmxlbmRpbmcoZ2wsIHRoaXMucHJvcHMubGF5ZXJCbGVuZGluZyk7XG4gICAgfTtcblxuICAgIF9vbkRlY2tFcnJvciA9IChlcnJvciwgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChlcnJvcj8ubWVzc2FnZSA9PT0gJ1dlYkdMIGNvbnRleHQgaXMgbG9zdCcpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y29udGV4dExvc3Q6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQW4gZXJyb3IgaW4gZGVjay5nbDogJHtlcnJvcj8ubWVzc2FnZX0gaW4gJHtsYXllcj8uaWR9YDtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbklkID0gYCR7bGF5ZXI/LmlkfS0ke2Vycm9yPy5tZXNzYWdlfWA7XG5cbiAgICAgIC8vIFRocm90dGxlIGVycm9yIG5vdGlmaWNhdGlvbnMsIGFzIFJlYWN0IGRvZXNuJ3QgbGlrZSB0b28gbWFueSBzdGF0ZSBjaGFuZ2VzIGZyb20gaGVyZS5cbiAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWQgPSB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkIHx8IHt9O1xuICAgICAgY29uc3QgbGFzdFNob3duID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtub3RpZmljYXRpb25JZF07XG4gICAgICBpZiAoIWxhc3RTaG93biB8fCBsYXN0U2hvd24gPCBEYXRlLm5vdygpIC0gVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUpIHtcbiAgICAgICAgdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtub3RpZmljYXRpb25JZF0gPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgZXJyb3Igbm90aWZpY2F0aW9uIG9yIHVwZGF0ZSBleGlzdGluZyBvbmUgd2l0aCBzYW1lIGlkLlxuICAgICAgICAvLyBVcGRhdGUgaXMgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIG5vdGlmaWNhdGlvbnMgYXMgdGhleSBwcm9iYWJseSBhcmUgZ29pbmcgdG8gXCJqdW1wXCIgYmFzZWQgb24gb3JkZXIgb2YgZXJyb3JzLlxuICAgICAgICBjb25zdCB7dWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGlkOiBub3RpZmljYXRpb25JZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb25zICovXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcFBvcG92ZXIobGF5ZXJzVG9SZW5kZXIpIHtcbiAgICAgIC8vIE92ZXJyaWRlbiBpbiBCdWlsZGVyOiBmZWF0dXJlcy9idWlsZGVyL3VpL0tlcGxlckdsL01hcENvbnRhaW5lci9NYXBDb250YWluZXIudHN4XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIF9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpIHtcbiAgICAgIGNvbnN0IHNjcmVlbkNvb3JkID0gIXZpZXdwb3J0IHx8ICFsbmdMYXQgPyBudWxsIDogdmlld3BvcnQucHJvamVjdChsbmdMYXQpO1xuICAgICAgcmV0dXJuIHNjcmVlbkNvb3JkICYmIHt4OiBzY3JlZW5Db29yZFswXSwgeTogc2NyZWVuQ29vcmRbMV19O1xuICAgIH1cblxuICAgIF9yZW5kZXJEZWNrT3ZlcmxheShsYXllcnNGb3JEZWNrKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICBsYXllck9yZGVyLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgbWFza1BvbHlnb25cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBtb3VzZVBvc2l0aW9uID0gdGhpcy5fbW91c2VQb3NpdGlvbjtcblxuICAgICAgdHJhY2tlcnMuZHJhd0NvdW50Py5pbmNyZW1lbnQoKTtcblxuICAgICAgLy8gaW5pdGlhbGlzZSBsYXllcnMgZnJvbSBwcm9wcyBpZiBleGlzdHNcbiAgICAgIGxldCBkZWNrR2xMYXllcnMgPSB0aGlzLnByb3BzLmRlY2tHbFByb3BzPy5sYXllcnMgfHwgW107XG5cbiAgICAgIC8vIHdhaXQgdW50aWwgZGF0YSBpcyByZWFkeSBiZWZvcmUgcmVuZGVyIGRhdGEgbGF5ZXJzXG4gICAgICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8gbGFzdCBsYXllciByZW5kZXIgZmlyc3RcbiAgICAgICAgY29uc3QgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAuZmlsdGVyKGlkeCA9PiBsYXllcnNGb3JEZWNrW2xheWVyc1tpZHhdLmlkXSlcbiAgICAgICAgICAucmVkdWNlKChvdmVybGF5cywgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYXllckNhbGxiYWNrcyA9IHtcbiAgICAgICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdmFsID0+IHRoaXMuX29uTGF5ZXJTZXREb21haW4oaWR4LCB2YWwpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIodGhpcy5wcm9wcywgbGF5ZXJDYWxsYmFja3MsIGlkeCk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICAgICAgfSwgW10pO1xuICAgICAgICBkZWNrR2xMYXllcnMgPSBkZWNrR2xMYXllcnMuY29uY2F0KGRhdGFMYXllcnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5kZWNrR2xQcm9wcz8ubGF5ZXJzT25Ub3ApIHtcbiAgICAgICAgZGVja0dsTGF5ZXJzID0gZGVja0dsTGF5ZXJzLmNvbmNhdCh0aGlzLnByb3BzLmRlY2tHbFByb3BzLmxheWVyc09uVG9wKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1hc2tQb2x5Z29uKSB7XG4gICAgICAgIGRlY2tHbExheWVycy5wdXNoKFxuICAgICAgICAgIG5ldyBTb2xpZFBvbHlnb25MYXllcih7XG4gICAgICAgICAgICBpZDogTUFTS19MQVlFUl9JRCxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogT1BFUkFUSU9OLk1BU0ssXG4gICAgICAgICAgICBkYXRhOiBbbWFza1BvbHlnb25dLFxuICAgICAgICAgICAgZGF0YUNvbXBhcmF0b3I6IChkYXRhLCBvbGREYXRhKSA9PiBkYXRhWzBdID09PSBvbGREYXRhWzBdLFxuICAgICAgICAgICAgZ2V0UG9seWdvbjogZCA9PiBkLFxuICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NSwgMjU1XVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXBTdHlsZS52aXNpYmxlTGF5ZXJHcm91cHNbJzNkIGJ1aWxkaW5nJ10pIHtcbiAgICAgICAgZGVja0dsTGF5ZXJzLnB1c2goXG4gICAgICAgICAgbmV3IFRocmVlREJ1aWxkaW5nTGF5ZXIoe1xuICAgICAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTGltaXQgcmVuZGVyc1xuICAgICAgY29uc3QgaGFzUmVuZGVyZWQgPSB0aGlzLl9oYXNSZW5kZXJlZDtcbiAgICAgIGNvbnN0IHJlc2V0SGFzUmVuZGVyZWQgPSAoKSA9PiAoaGFzUmVuZGVyZWQuY3VycmVudCA9IGZhbHNlKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERlY2tHTFxuICAgICAgICAgIGNvbnRyb2xsZXI9e3RydWV9XG4gICAgICAgICAgey4uLnRoaXMucHJvcHMuZGVja0dsUHJvcHN9XG4gICAgICAgICAgZ2xPcHRpb25zPXt7cHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlfX1cbiAgICAgICAgICB2aWV3U3RhdGU9e21hcFN0YXRlfVxuICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXsoe3ZpZXdTdGF0ZX0pID0+IHtcbiAgICAgICAgICAgIC8vIExpbWl0IHVwZGF0ZXMgKHByZXZlbnRzIGZyZWV6ZXMgd2hlbiBkZXYgdG9vbHMgb3BlbilcbiAgICAgICAgICAgIGlmICghaGFzUmVuZGVyZWQuY3VycmVudCAmJiB2aWV3U3RhdGUud2lkdGggPiAxICYmIHZpZXdTdGF0ZS5oZWlnaHQgPiAxKSB7XG4gICAgICAgICAgICAgIGhhc1JlbmRlcmVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlKHZpZXdTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBpZD1cImRlZmF1bHQtZGVja2dsLW92ZXJsYXlcIlxuICAgICAgICAgIGxheWVycz17ZGVja0dsTGF5ZXJzfVxuICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXtvcHRzID0+IHtcbiAgICAgICAgICAgIHJlc2V0SGFzUmVuZGVyZWQoKTtcbiAgICAgICAgICAgIHRoaXMuX29uQmVmb3JlUmVuZGVyKG9wdHMpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgLy8gb25Ib3Zlcj17dmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3Zlcn1cbiAgICAgICAgICBvbkhvdmVyPXtpbmZvID0+IHtcbiAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoaW5mbyk7XG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmN1cnJlbnQgPSB7bW91c2VQb3NpdGlvbjogaW5mby5waXhlbH07XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsaWNrPXt2aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrfVxuICAgICAgICAgIG9uRHJhZ1N0YXJ0PXsoKSA9PiB7XG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25FcnJvcj17dGhpcy5fb25EZWNrRXJyb3J9XG4gICAgICAgICAgcmVmPXtjb21wID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wICYmIGNvbXAuZGVjayAmJiBjb21wLmRlY2sgIT09IHRoaXMuX2RlY2spIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGVjayA9IGNvbXAuZGVjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uV2ViR0xJbml0aWFsaXplZD17Z2wgPT4gdGhpcy5fb25EZWNrSW5pdGlhbGl6ZWQoZ2wpfVxuICAgICAgICAgIGxheWVyRmlsdGVyPXsoe2xheWVyLCB2aWV3cG9ydH0pID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNOYU4obGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWluKSB8fFxuICAgICAgICAgICAgICBpc05hTihsYXllci5wcm9wcy52aXNpYmlsaXR5Qnlab29tPy5tYXgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Wm9vbVJhbmdlID0gTWF0aC5yb3VuZChtYXBTdGF0ZS56b29tKTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgbGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbS5taW4gPD0gY3VycmVudFpvb21SYW5nZSAmJlxuICAgICAgICAgICAgICBsYXllci5wcm9wcy52aXNpYmlsaXR5Qnlab29tLm1heCA+PSBjdXJyZW50Wm9vbVJhbmdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9vblZpZXdwb3J0Q2hhbmdlID0gdmlld1N0YXRlID0+IHtcbiAgICAgIHRyYWNrZXJzLnZpZXdwb3J0Q2hhbmdlQ291bnQ/LmluY3JlbWVudCgpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIC4uLnJlc3RWaWV3U3RhdGV9ID0gdmlld1N0YXRlO1xuICAgICAgY29uc3Qge3ByaW1hcnksIGlzRXhwb3J0fSA9IHRoaXMucHJvcHM7XG4gICAgICAvLyByZWFjdC1tYXAtZ2wgc2VuZHMgMCwwIGRpbWVuc2lvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBhZnRlciB3ZSBoYXZlIHJlY2VpdmVkIHByb3BlciBkaW1lbnNpb25zIGZyb20gb2JzZXJ2ZURpbWVuc2lvbnNcbiAgICAgIGNvbnN0IG5leHQgPSB7XG4gICAgICAgIC4uLih3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHZpZXdTdGF0ZSA6IHJlc3RWaWV3U3RhdGUpLFxuICAgICAgICAvLyBlbmFibGluZyB0cmFuc2l0aW9uIGluIHR3byBtYXBzIG1heSBsZWFkIHRvIGVuZGxlc3MgdXBkYXRlIGxvb3BzXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogcHJpbWFyeSA/IFRSQU5TSVRJT05fRFVSQVRJT04gOiAwXG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UobmV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFeHBvcnQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKG5leHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIGluZGV4KTtcbiAgICB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXAoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIE1hcENvbXBvbmVudCxcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBpc0V4cG9ydCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgZ2VuZXJhdGVUaHVtYm5haWxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyc0ZvckRlY2sgPSB0aGlzLmxheWVyc0ZvckRlY2tTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3QgbWFwUHJvcHMgPSB7XG4gICAgICAgIC4uLm1hcFN0YXRlLFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlLFxuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0LFxuICAgICAgICBnZW5lcmF0ZVRodW1ibmFpbFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaXNTcGxpdCA9IEJvb2xlYW4obWFwU3RhdGUuaXNTcGxpdCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPE1hcENvbnRyb2xcbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXM9e09iamVjdC5rZXlzKExPQ0FMRV9DT0RFUyl9XG4gICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgaXNTcGxpdD17aXNTcGxpdH1cbiAgICAgICAgICAgIHByaW1hcnk9e3ByaW1hcnl9XG4gICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIGxheWVyc1RvUmVuZGVyPXtsYXllcnNUb1JlbmRlcn1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleH1cbiAgICAgICAgICAgIG1hcENvbnRyb2xzPXttYXBDb250cm9sc31cbiAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgc2NhbGU9e21hcFN0YXRlLnNjYWxlIHx8IDF9XG4gICAgICAgICAgICB0b3A9e2ludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgPyA1MiA6IDB9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgb25NYXBUb2dnbGVMYXllcj17dGhpcy5faGFuZGxlTWFwVG9nZ2xlTGF5ZXJ9XG4gICAgICAgICAgICBvblRvZ2dsZU1hcENvbnRyb2w9e3RoaXMuX3RvZ2dsZU1hcENvbnRyb2x9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8TWFwQ29tcG9uZW50IHsuLi5tYXBQcm9wc30ga2V5PVwiYm90dG9tXCIgbWFwU3R5bGU9e21hcFN0eWxlLmJvdHRvbU1hcFN0eWxlfT5cbiAgICAgICAgICAgIHtQRVJGX0RFQlVHICYmIHJlbmRlclBlcmZvcm1hbmNlU3RhdHMoKX1cbiAgICAgICAgICAgIHt0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShsYXllcnNGb3JEZWNrKX1cbiAgICAgICAgICA8L01hcENvbXBvbmVudD5cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwUG9wb3ZlcihsYXllcnNUb1JlbmRlcil9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7bWFwU3RhdGUsIG1hcFN0eWxlfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBjb250ZXh0TG9zdCA9IHRoaXMuc3RhdGU/LmNvbnRleHRMb3N0O1xuXG4gICAgICBpZiAoY29udGV4dExvc3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRNYXBDb250YWluZXIgcmVmPXt0aGlzLl9yZWZ9IHN0eWxlPXtNQVBfU1RZTEUuY29udGFpbmVyfSBnbG9iZT17bWFwU3RhdGUuZ2xvYmV9PlxuICAgICAgICAgIHttYXBTdHlsZS5ib3R0b21NYXBTdHlsZSAmJiB0aGlzLl9yZW5kZXJNYXAoKX1cbiAgICAgICAgPC9TdHlsZWRNYXBDb250YWluZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIE1hcENvbnRhaW5lci5kaXNwbGF5TmFtZSA9ICdNYXBDb250YWluZXInO1xuXG4gIHJldHVybiBNYXBDb250YWluZXI7XG59XG4iXX0=
518
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdE1hcEdsIiwiX3JlYWN0MiIsIl9yZXNlbGVjdCIsIl9jb3JlIiwiX2xheWVycyIsIl9nZW9MYXllcnMiLCJfbm90aWZpY2F0aW9uc1V0aWxzIiwiX21hcFBvcG92ZXIiLCJfbWFwQ29udHJvbCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2VkaXRvciIsIl9tYXBib3hVdGlscyIsIl9nbFV0aWxzIiwiX21hcGJveFV0aWxzMiIsIl9sYXllclV0aWxzIiwiX2RCdWlsZGluZ0xheWVyIiwiX2RlZmF1bHRTZXR0aW5ncyIsIl9vYnNlcnZlRGltZW5zaW9ucyIsIl9sb2NhbGVzIiwiX3BlcmZvcm1hbmNlIiwiX2V4Y2x1ZGVkIiwiX3dpbmRvdyIsIl93aW5kb3ckbG9jYXRpb24iLCJfd2luZG93JGxvY2F0aW9uJHNlYXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwidmFsdWVPZiIsInRyYWNrZXJzIiwiUEVSRl9ERUJVRyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaW5jbHVkZXMiLCJkcmF3Q291bnQiLCJjcmVhdGVUcmFja2VyIiwidmlld3BvcnRDaGFuZ2VDb3VudCIsImNyZWF0ZUxheWVyVXBkYXRlVHJhY2tlciIsIkxheWVyIiwiVGlsZUxheWVyIiwiTUFQX1NUWUxFIiwiY29udGFpbmVyIiwiZGlzcGxheSIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJ0b3AiLCJwb2ludGVyRXZlbnRzIiwiVFJBTlNJVElPTl9EVVJBVElPTiIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlckZhY3RvcnkiLCJNYXBDb250cm9sRmFjdG9yeSIsIkVkaXRvckZhY3RvcnkiLCJNYXBQb3BvdmVyIiwiTWFwQ29udHJvbCIsIkVkaXRvciIsIk1hcENvbnRhaW5lciIsIl9Db21wb25lbnQiLCJfaW5oZXJpdHMyIiwicHJvcHMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkMiIsImRpbWVuc2lvbnMiLCJfdGhpcyRwcm9wcyIsInByaW1hcnkiLCJpc0V4cG9ydCIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsIm1hcExheWVycyIsImxheWVyT3JkZXIiLCJwb3B1cFNldHRpbmdzIiwiY3JlYXRlU2VsZWN0b3IiLCJsYXllcnNTZWxlY3RvciIsImxheWVyRGF0YVNlbGVjdG9yIiwibWFwTGF5ZXJzU2VsZWN0b3IiLCJwb3B1cFNldHRpbmdzU2VsZWN0b3IiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJwcmVwYXJlTGF5ZXJzRm9yRGVjayIsImZpbHRlcnMiLCJmaWx0ZXJzU2VsZWN0b3IiLCJmIiwidHlwZSIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJ2aXNTdGF0ZUFjdGlvbnMiLCJvbkxheWVyQ2xpY2siLCJpZHgiLCJjb2xvckRvbWFpbiIsImxheWVyQ29uZmlnQ2hhbmdlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMiIsIl90aGlzJHByb3BzMiRpbmRleCIsImluZGV4IiwibWFwSW5kZXgiLCJ0b2dnbGVMYXllckZvck1hcCIsIl9yZWYiLCJnbCIsInNldExheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiZXJyb3IiLCJsYXllciIsIm1lc3NhZ2UiLCJzZXRTdGF0ZSIsImNvbnRleHRMb3N0IiwiZXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiaWQiLCJub3RpZmljYXRpb25JZCIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwibGFzdFNob3duIiwiRGF0ZSIsIm5vdyIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwidWlTdGF0ZUFjdGlvbnMiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsInZpZXdTdGF0ZSIsIl90cmFja2VycyR2aWV3cG9ydENoYSIsImluY3JlbWVudCIsInJlc3RWaWV3U3RhdGUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiX3RoaXMkcHJvcHMzIiwibmV4dCIsInRyYW5zaXRpb25EdXJhdGlvbiIsIm9uVmlld1N0YXRlQ2hhbmdlIiwicGFuZWxJZCIsIl90aGlzJHByb3BzNCIsInRvZ2dsZU1hcENvbnRyb2wiLCJfZGVjayIsImNyZWF0ZVJlZiIsIl9oYXNSZW5kZXJlZCIsIl9tb3VzZVBvc2l0aW9uIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiY29tcG9uZW50RGlkTW91bnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsImN1cnJlbnQiLCJfaGFuZGxlUmVzaXplIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX3RoaXMkc3RhdGUiLCJzdGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsIl9vbkRlY2tJbml0aWFsaXplZCIsIm9uRGVja0luaXRpYWxpemVkIiwiX3JlbmRlck1hcFBvcG92ZXIiLCJsYXllcnNUb1JlbmRlciIsIl9nZXRIb3ZlclhZIiwidmlld3BvcnQiLCJsbmdMYXQiLCJzY3JlZW5Db29yZCIsInByb2plY3QiLCJ4IiwieSIsIl9yZW5kZXJEZWNrT3ZlcmxheSIsImxheWVyc0ZvckRlY2siLCJfdHJhY2tlcnMkZHJhd0NvdW50IiwiX3RoaXMkcHJvcHMkZGVja0dsUHJvIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMkZGVja0dsUHJvMiIsIl90aGlzJHByb3BzNSIsIm1hcFN0YXRlIiwibWFwU3R5bGUiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIm1hc2tQb2x5Z29uIiwibW91c2VQb3NpdGlvbiIsImRlY2tHbExheWVycyIsImRlY2tHbFByb3BzIiwiZGF0YUxheWVycyIsInNsaWNlIiwicmV2ZXJzZSIsInJlZHVjZSIsIm92ZXJsYXlzIiwibGF5ZXJDYWxsYmFja3MiLCJvblNldExheWVyRG9tYWluIiwidmFsIiwiX29uTGF5ZXJTZXREb21haW4iLCJsYXllck92ZXJsYXkiLCJyZW5kZXJEZWNrR2xMYXllciIsImxheWVyc09uVG9wIiwiU29saWRQb2x5Z29uTGF5ZXIiLCJNQVNLX0xBWUVSX0lEIiwib3BlcmF0aW9uIiwiT1BFUkFUSU9OIiwiTUFTSyIsImRhdGEiLCJkYXRhQ29tcGFyYXRvciIsIm9sZERhdGEiLCJnZXRQb2x5Z29uIiwiZCIsImdldEZpbGxDb2xvciIsInZpc2libGVMYXllckdyb3VwcyIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJoYXNSZW5kZXJlZCIsInJlc2V0SGFzUmVuZGVyZWQiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiY29udHJvbGxlciIsImdsT3B0aW9ucyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIl9yZWYyIiwiX29uVmlld3BvcnRDaGFuZ2UiLCJvbkJlZm9yZVJlbmRlciIsIm9wdHMiLCJfb25CZWZvcmVSZW5kZXIiLCJvbkhvdmVyIiwiaW5mbyIsIm9uTGF5ZXJIb3ZlciIsInBpeGVsIiwib25DbGljayIsIm9uRHJhZ1N0YXJ0Iiwib25FcnJvciIsIl9vbkRlY2tFcnJvciIsInJlZiIsImNvbXAiLCJkZWNrIiwib25XZWJHTEluaXRpYWxpemVkIiwibGF5ZXJGaWx0ZXIiLCJfcmVmMyIsIl9sYXllciRwcm9wcyR2aXNpYmlsaSIsIl9sYXllciRwcm9wcyR2aXNpYmlsaTIiLCJpc05hTiIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJtYXgiLCJjdXJyZW50Wm9vbVJhbmdlIiwiTWF0aCIsInJvdW5kIiwiem9vbSIsIl9yZW5kZXJNYXAiLCJfdGhpcyRwcm9wczYiLCJNYXBDb21wb25lbnQiLCJkYXRhc2V0cyIsIm1hcENvbnRyb2xzIiwibG9jYWxlIiwiaW50ZXJhY3Rpb25Db25maWciLCJlZGl0b3IiLCJnZW5lcmF0ZVRodW1ibmFpbCIsImxheWVyc0ZvckRlY2tTZWxlY3RvciIsIm1hcFByb3BzIiwidHJhbnNmb3JtUmVxdWVzdCIsImlzU3BsaXQiLCJGcmFnbWVudCIsImF2YWlsYWJsZUxvY2FsZXMiLCJMT0NBTEVfQ09ERVMiLCJkcmFnUm90YXRlIiwicmVhZE9ubHkiLCJzY2FsZSIsImdlb2NvZGVyIiwiZW5hYmxlZCIsIm9uVG9nZ2xlUGVyc3BlY3RpdmUiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uU2V0RWRpdG9yTW9kZSIsInNldEVkaXRvck1vZGUiLCJvblNldExvY2FsZSIsInNldExvY2FsZSIsIm9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJib3R0b21NYXBTdHlsZSIsInJlbmRlclBlcmZvcm1hbmNlU3RhdHMiLCJyZW5kZXIiLCJfdGhpcyRzdGF0ZTIiLCJfdGhpcyRwcm9wczciLCJTdHlsZWRNYXBDb250YWluZXIiLCJzdHlsZSIsImdsb2JlIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsInN0cmluZyIsImFycmF5T2YiLCJhbnkiLCJib29sIiwiY2xpY2tlZCIsImhvdmVySW5mbyIsImZ1bmMiLCJvbk1hcFN0eWxlTG9hZGVkIiwiZ2V0TWFwYm94UmVmIiwibnVtYmVyIiwiTWFwYm94R0xNYXAiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL21hcC1jb250YWluZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLy8gbGlicmFyaWVzXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBNYXBib3hHTE1hcCBmcm9tICdyZWFjdC1tYXAtZ2wnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQge09QRVJBVElPTiwgTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtTb2xpZFBvbHlnb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7VGlsZUxheWVyfSBmcm9tICdAZGVjay5nbC9nZW8tbGF5ZXJzJztcbmltcG9ydCB7ZXJyb3JOb3RpZmljYXRpb259IGZyb20gJ3V0aWxzL25vdGlmaWNhdGlvbnMtdXRpbHMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnY29tcG9uZW50cy9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvbWFwL21hcC1jb250cm9sJztcbmltcG9ydCB7U3R5bGVkTWFwQ29udGFpbmVyfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCBFZGl0b3JGYWN0b3J5IGZyb20gJy4vZWRpdG9yL2VkaXRvcic7XG5cbi8vIHV0aWxzXG5pbXBvcnQge2dlbmVyYXRlTWFwYm94TGF5ZXJzfSBmcm9tICdsYXllcnMvbWFwYm94LXV0aWxzJztcbmltcG9ydCB7c2V0TGF5ZXJCbGVuZGluZ30gZnJvbSAndXRpbHMvZ2wtdXRpbHMnO1xuaW1wb3J0IHt0cmFuc2Zvcm1SZXF1ZXN0fSBmcm9tICd1dGlscy9tYXAtc3R5bGUtdXRpbHMvbWFwYm94LXV0aWxzJztcbmltcG9ydCB7cmVuZGVyRGVja0dsTGF5ZXIsIHByZXBhcmVMYXllcnNUb1JlbmRlciwgcHJlcGFyZUxheWVyc0ZvckRlY2t9IGZyb20gJ3V0aWxzL2xheWVyLXV0aWxzJztcblxuLy8gZGVmYXVsdC1zZXR0aW5nc1xuaW1wb3J0IFRocmVlREJ1aWxkaW5nTGF5ZXIgZnJvbSAnZGVja2dsLWxheWVycy8zZC1idWlsZGluZy1sYXllci8zZC1idWlsZGluZy1sYXllcic7XG5pbXBvcnQge0ZJTFRFUl9UWVBFUywgTUFTS19MQVlFUl9JRCwgVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUV9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuaW1wb3J0IHtvYnNlcnZlRGltZW5zaW9ucywgdW5vYnNlcnZlRGltZW5zaW9uc30gZnJvbSAnLi4vdXRpbHMvb2JzZXJ2ZS1kaW1lbnNpb25zJztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdsb2NhbGl6YXRpb24vbG9jYWxlcyc7XG5cbi8vIFBlcmZvcm1hbmNlIGRlYnVnZ2luZ1xuaW1wb3J0IHtjcmVhdGVUcmFja2VyLCBjcmVhdGVMYXllclVwZGF0ZVRyYWNrZXIsIHJlbmRlclBlcmZvcm1hbmNlU3RhdHN9IGZyb20gJy4vcGVyZm9ybWFuY2UnO1xuY29uc3QgdHJhY2tlcnMgPSB7fTtcbmNvbnN0IFBFUkZfREVCVUcgPSB3aW5kb3c/LmxvY2F0aW9uPy5zZWFyY2g/LmluY2x1ZGVzKCdQRVJGX0RFQlVHJyk7XG5pZiAoUEVSRl9ERUJVRykge1xuICB0cmFja2Vycy5kcmF3Q291bnQgPSBjcmVhdGVUcmFja2VyKCdkcmF3cycpO1xuICB0cmFja2Vycy52aWV3cG9ydENoYW5nZUNvdW50ID0gY3JlYXRlVHJhY2tlcigndmlld3BvcnQgY2hhbmdlcycpO1xuICBjcmVhdGVMYXllclVwZGF0ZVRyYWNrZXIoJ3N0YXRlIHVwZGF0ZXMnLCBbTGF5ZXIsIFRpbGVMYXllcl0pO1xufVxuXG4vKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBSZWFjdC5DU1NQcm9wZXJ0aWVzfX0gKi9cbmNvbnN0IE1BUF9TVFlMRSA9IHtcbiAgY29udGFpbmVyOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJ1xuICB9LFxuICB0b3A6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICcwcHgnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH1cbn07XG5cbmNvbnN0IFRSQU5TSVRJT05fRFVSQVRJT04gPSAwO1xuXG5NYXBDb250YWluZXJGYWN0b3J5LmRlcHMgPSBbTWFwUG9wb3ZlckZhY3RvcnksIE1hcENvbnRyb2xGYWN0b3J5LCBFZGl0b3JGYWN0b3J5XTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFwQ29udGFpbmVyRmFjdG9yeShNYXBQb3BvdmVyLCBNYXBDb250cm9sLCBFZGl0b3IpIHtcbiAgY2xhc3MgTWFwQ29udGFpbmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgLy8gcmVxdWlyZWRcbiAgICAgIGRhdGFzZXRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgaW50ZXJhY3Rpb25Db25maWc6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyQmxlbmRpbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyT3JkZXI6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBsYXllckRhdGE6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBsYXllcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuICAgICAgbWFwU3RhdGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIG1hcENvbnRyb2xzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBtYXBTdHlsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIG1hcGJveEFwaVVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHZpc1N0YXRlQWN0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbWFwU3RhdGVBY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICB1aVN0YXRlQWN0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuXG4gICAgICAvLyBvcHRpb25hbFxuICAgICAgcHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsIC8vIHByaW1hcnkgb25lIHdpbGwgYmUgcmVwb3J0aW5nIGl0cyBzaXplIHRvIGFwcFN0YXRlXG4gICAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBpc0V4cG9ydDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBjbGlja2VkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgaG92ZXJJbmZvOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgbWFwTGF5ZXJzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgb25NYXBUb2dnbGVMYXllcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbk1hcFN0eWxlTG9hZGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGdlbmVyYXRlVGh1bWJuYWlsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGdldE1hcGJveFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIHBvcHVwU2V0dGluZ3M6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIE1hcENvbXBvbmVudDogTWFwYm94R0xNYXAsXG4gICAgICBkZWNrR2xQcm9wczoge30sXG4gICAgICBpbmRleDogMCxcbiAgICAgIHByaW1hcnk6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgdGhpcy5fZGVjayA9IG51bGw7XG4gICAgICB0aGlzLl9yZWYgPSBjcmVhdGVSZWYoKTtcblxuICAgICAgLy8gUmVuZGVyIGxpbWl0aW5nIG1lY2hhbmlzbVxuICAgICAgdGhpcy5faGFzUmVuZGVyZWQgPSBjcmVhdGVSZWYoKTtcbiAgICAgIHRoaXMuX21vdXNlUG9zaXRpb24gPSBjcmVhdGVSZWYoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IGNvbnRleHRMb3N0ID0gdGhpcy5zdGF0ZT8uY29udGV4dExvc3Q7XG5cbiAgICAgIGlmIChjb250ZXh0TG9zdCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y29udGV4dExvc3Q6IGZhbHNlfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgaXNFeHBvcnR9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChwcmltYXJ5KSB7XG4gICAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKCFpc0V4cG9ydCAmJiBkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMud2lkdGggPiAwICYmIGRpbWVuc2lvbnMuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoZGltZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGF5ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5sYXllcnM7XG4gICAgbGF5ZXJEYXRhU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5sYXllckRhdGE7XG4gICAgbWFwTGF5ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBMYXllcnM7XG4gICAgbGF5ZXJPcmRlclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubGF5ZXJPcmRlcjtcbiAgICBwb3B1cFNldHRpbmdzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5wb3B1cFNldHRpbmdzO1xuXG4gICAgbGF5ZXJzVG9SZW5kZXJTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcExheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5wb3B1cFNldHRpbmdzU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXJcbiAgICApO1xuICAgIGxheWVyc0ZvckRlY2tTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzRm9yRGVja1xuICAgICk7XG4gICAgZmlsdGVyc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZmlsdGVycztcbiAgICBwb2x5Z29uRmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZmlsdGVyc1NlbGVjdG9yLCBmaWx0ZXJzID0+XG4gICAgICBmaWx0ZXJzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24pXG4gICAgKTtcblxuICAgIG1hcGJveExheWVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJPcmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yLFxuICAgICAgZ2VuZXJhdGVNYXBib3hMYXllcnNcbiAgICApO1xuXG4gICAgLyogY29tcG9uZW50IHByaXZhdGUgZnVuY3Rpb25zICovXG4gICAgX29uQ2xvc2VNYXBQb3BvdmVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrKG51bGwpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChpZHgsIGNvbG9yRG9tYWluKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyc1tpZHhdLCB7XG4gICAgICAgIGNvbG9yRG9tYWluXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2hhbmRsZU1hcFRvZ2dsZUxheWVyID0gbGF5ZXJJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXg6IG1hcEluZGV4ID0gMCwgdmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpO1xuICAgIH07XG5cbiAgICBfb25EZWNrSW5pdGlhbGl6ZWQoZ2wpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQodGhpcy5fZGVjaywgZ2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJlZm9yZVJlbmRlciA9ICh7Z2x9KSA9PiB7XG4gICAgICBzZXRMYXllckJsZW5kaW5nKGdsLCB0aGlzLnByb3BzLmxheWVyQmxlbmRpbmcpO1xuICAgIH07XG5cbiAgICBfb25EZWNrRXJyb3IgPSAoZXJyb3IsIGxheWVyKSA9PiB7XG4gICAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UgPT09ICdXZWJHTCBjb250ZXh0IGlzIGxvc3QnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NvbnRleHRMb3N0OiB0cnVlfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYEFuIGVycm9yIGluIGRlY2suZ2w6ICR7ZXJyb3I/Lm1lc3NhZ2V9IGluICR7bGF5ZXI/LmlkfWA7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25JZCA9IGAke2xheWVyPy5pZH0tJHtlcnJvcj8ubWVzc2FnZX1gO1xuXG4gICAgICAvLyBUaHJvdHRsZSBlcnJvciBub3RpZmljYXRpb25zLCBhcyBSZWFjdCBkb2Vzbid0IGxpa2UgdG9vIG1hbnkgc3RhdGUgY2hhbmdlcyBmcm9tIGhlcmUuXG4gICAgICB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZCB8fCB7fTtcbiAgICAgIGNvbnN0IGxhc3RTaG93biA9IHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbbm90aWZpY2F0aW9uSWRdO1xuICAgICAgaWYgKCFsYXN0U2hvd24gfHwgbGFzdFNob3duIDwgRGF0ZS5ub3coKSAtIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FKSB7XG4gICAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbbm90aWZpY2F0aW9uSWRdID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIG5vdGlmaWNhdGlvbiBvciB1cGRhdGUgZXhpc3Rpbmcgb25lIHdpdGggc2FtZSBpZC5cbiAgICAgICAgLy8gVXBkYXRlIGlzIHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBvcmRlciBvZiBub3RpZmljYXRpb25zIGFzIHRoZXkgcHJvYmFibHkgYXJlIGdvaW5nIHRvIFwianVtcFwiIGJhc2VkIG9uIG9yZGVyIG9mIGVycm9ycy5cbiAgICAgICAgY29uc3Qge3VpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICBpZDogbm90aWZpY2F0aW9uSWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9ucyAqL1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXBQb3BvdmVyKGxheWVyc1RvUmVuZGVyKSB7XG4gICAgICAvLyBPdmVycmlkZW4gaW4gQnVpbGRlcjogZmVhdHVyZXMvYnVpbGRlci91aS9LZXBsZXJHbC9NYXBDb250YWluZXIvTWFwQ29udGFpbmVyLnRzeFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgICBfZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KSB7XG4gICAgICBjb25zdCBzY3JlZW5Db29yZCA9ICF2aWV3cG9ydCB8fCAhbG5nTGF0ID8gbnVsbCA6IHZpZXdwb3J0LnByb2plY3QobG5nTGF0KTtcbiAgICAgIHJldHVybiBzY3JlZW5Db29yZCAmJiB7eDogc2NyZWVuQ29vcmRbMF0sIHk6IHNjcmVlbkNvb3JkWzFdfTtcbiAgICB9XG5cbiAgICBfcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgbGF5ZXJPcmRlcixcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hc2tQb2x5Z29uXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgbW91c2VQb3NpdGlvbiA9IHRoaXMuX21vdXNlUG9zaXRpb247XG5cbiAgICAgIHRyYWNrZXJzLmRyYXdDb3VudD8uaW5jcmVtZW50KCk7XG5cbiAgICAgIC8vIGluaXRpYWxpc2UgbGF5ZXJzIGZyb20gcHJvcHMgaWYgZXhpc3RzXG4gICAgICBsZXQgZGVja0dsTGF5ZXJzID0gdGhpcy5wcm9wcy5kZWNrR2xQcm9wcz8ubGF5ZXJzIHx8IFtdO1xuXG4gICAgICAvLyB3YWl0IHVudGlsIGRhdGEgaXMgcmVhZHkgYmVmb3JlIHJlbmRlciBkYXRhIGxheWVyc1xuICAgICAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vIGxhc3QgbGF5ZXIgcmVuZGVyIGZpcnN0XG4gICAgICAgIGNvbnN0IGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgLmZpbHRlcihpZHggPT4gbGF5ZXJzRm9yRGVja1tsYXllcnNbaWR4XS5pZF0pXG4gICAgICAgICAgLnJlZHVjZSgob3ZlcmxheXMsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJDYWxsYmFja3MgPSB7XG4gICAgICAgICAgICAgIG9uU2V0TGF5ZXJEb21haW46IHZhbCA9PiB0aGlzLl9vbkxheWVyU2V0RG9tYWluKGlkeCwgdmFsKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyT3ZlcmxheSA9IHJlbmRlckRlY2tHbExheWVyKHRoaXMucHJvcHMsIGxheWVyQ2FsbGJhY2tzLCBpZHgpO1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgZGVja0dsTGF5ZXJzID0gZGVja0dsTGF5ZXJzLmNvbmNhdChkYXRhTGF5ZXJzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZGVja0dsUHJvcHM/LmxheWVyc09uVG9wKSB7XG4gICAgICAgIGRlY2tHbExheWVycyA9IGRlY2tHbExheWVycy5jb25jYXQodGhpcy5wcm9wcy5kZWNrR2xQcm9wcy5sYXllcnNPblRvcCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXNrUG9seWdvbikge1xuICAgICAgICBkZWNrR2xMYXllcnMucHVzaChcbiAgICAgICAgICBuZXcgU29saWRQb2x5Z29uTGF5ZXIoe1xuICAgICAgICAgICAgaWQ6IE1BU0tfTEFZRVJfSUQsXG4gICAgICAgICAgICBvcGVyYXRpb246IE9QRVJBVElPTi5NQVNLLFxuICAgICAgICAgICAgZGF0YTogW21hc2tQb2x5Z29uXSxcbiAgICAgICAgICAgIGRhdGFDb21wYXJhdG9yOiAoZGF0YSwgb2xkRGF0YSkgPT4gZGF0YVswXSA9PT0gb2xkRGF0YVswXSxcbiAgICAgICAgICAgIGdldFBvbHlnb246IGQgPT4gZCxcbiAgICAgICAgICAgIGdldEZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTUsIDI1NV1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWFwU3R5bGUudmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddKSB7XG4gICAgICAgIGRlY2tHbExheWVycy5wdXNoKFxuICAgICAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbWl0IHJlbmRlcnNcbiAgICAgIGNvbnN0IGhhc1JlbmRlcmVkID0gdGhpcy5faGFzUmVuZGVyZWQ7XG4gICAgICBjb25zdCByZXNldEhhc1JlbmRlcmVkID0gKCkgPT4gKGhhc1JlbmRlcmVkLmN1cnJlbnQgPSBmYWxzZSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEZWNrR0xcbiAgICAgICAgICBjb250cm9sbGVyPXt0cnVlfVxuICAgICAgICAgIHsuLi50aGlzLnByb3BzLmRlY2tHbFByb3BzfVxuICAgICAgICAgIGdsT3B0aW9ucz17e3ByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZX19XG4gICAgICAgICAgdmlld1N0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgICBvblZpZXdTdGF0ZUNoYW5nZT17KHt2aWV3U3RhdGV9KSA9PiB7XG4gICAgICAgICAgICAvLyBMaW1pdCB1cGRhdGVzIChwcmV2ZW50cyBmcmVlemVzIHdoZW4gZGV2IHRvb2xzIG9wZW4pXG4gICAgICAgICAgICBpZiAoIWhhc1JlbmRlcmVkLmN1cnJlbnQgJiYgdmlld1N0YXRlLndpZHRoID4gMSAmJiB2aWV3U3RhdGUuaGVpZ2h0ID4gMSkge1xuICAgICAgICAgICAgICBoYXNSZW5kZXJlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5fb25WaWV3cG9ydENoYW5nZSh2aWV3U3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgaWQ9XCJkZWZhdWx0LWRlY2tnbC1vdmVybGF5XCJcbiAgICAgICAgICBsYXllcnM9e2RlY2tHbExheWVyc31cbiAgICAgICAgICBvbkJlZm9yZVJlbmRlcj17b3B0cyA9PiB7XG4gICAgICAgICAgICByZXNldEhhc1JlbmRlcmVkKCk7XG4gICAgICAgICAgICB0aGlzLl9vbkJlZm9yZVJlbmRlcihvcHRzKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIC8vIG9uSG92ZXI9e3Zpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXJ9XG4gICAgICAgICAgb25Ib3Zlcj17aW5mbyA9PiB7XG4gICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGluZm8pO1xuICAgICAgICAgICAgbW91c2VQb3NpdGlvbi5jdXJyZW50ID0ge21vdXNlUG9zaXRpb246IGluZm8ucGl4ZWx9O1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbGljaz17dmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGlja31cbiAgICAgICAgICBvbkRyYWdTdGFydD17KCkgPT4ge1xuICAgICAgICAgICAgbW91c2VQb3NpdGlvbi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uRXJyb3I9e3RoaXMuX29uRGVja0Vycm9yfVxuICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcCAmJiBjb21wLmRlY2sgJiYgY29tcC5kZWNrICE9PSB0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbldlYkdMSW5pdGlhbGl6ZWQ9e2dsID0+IHRoaXMuX29uRGVja0luaXRpYWxpemVkKGdsKX1cbiAgICAgICAgICBsYXllckZpbHRlcj17KHtsYXllciwgdmlld3BvcnR9KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzTmFOKGxheWVyLnByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbikgfHxcbiAgICAgICAgICAgICAgaXNOYU4obGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VycmVudFpvb21SYW5nZSA9IE1hdGgucm91bmQobWFwU3RhdGUuem9vbSk7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGxheWVyLnByb3BzLnZpc2liaWxpdHlCeVpvb20ubWluIDw9IGN1cnJlbnRab29tUmFuZ2UgJiZcbiAgICAgICAgICAgICAgbGF5ZXIucHJvcHMudmlzaWJpbGl0eUJ5Wm9vbS5tYXggPj0gY3VycmVudFpvb21SYW5nZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfb25WaWV3cG9ydENoYW5nZSA9IHZpZXdTdGF0ZSA9PiB7XG4gICAgICB0cmFja2Vycy52aWV3cG9ydENoYW5nZUNvdW50Py5pbmNyZW1lbnQoKTtcbiAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCAuLi5yZXN0Vmlld1N0YXRlfSA9IHZpZXdTdGF0ZTtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCBpc0V4cG9ydH0gPSB0aGlzLnByb3BzO1xuICAgICAgLy8gcmVhY3QtbWFwLWdsIHNlbmRzIDAsMCBkaW1lbnNpb25zIGR1cmluZyBpbml0aWFsaXphdGlvblxuICAgICAgLy8gYWZ0ZXIgd2UgaGF2ZSByZWNlaXZlZCBwcm9wZXIgZGltZW5zaW9ucyBmcm9tIG9ic2VydmVEaW1lbnNpb25zXG4gICAgICBjb25zdCBuZXh0ID0ge1xuICAgICAgICAuLi4od2lkdGggPiAwICYmIGhlaWdodCA+IDAgPyB2aWV3U3RhdGUgOiByZXN0Vmlld1N0YXRlKSxcbiAgICAgICAgLy8gZW5hYmxpbmcgdHJhbnNpdGlvbiBpbiB0d28gbWFwcyBtYXkgbGVhZCB0byBlbmRsZXNzIHVwZGF0ZSBsb29wc1xuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IHByaW1hcnkgPyBUUkFOU0lUSU9OX0RVUkFUSU9OIDogMFxuICAgICAgfTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlKG5leHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRXhwb3J0KSB7XG4gICAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcChuZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RvZ2dsZU1hcENvbnRyb2wgPSBwYW5lbElkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleCwgdWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdWlTdGF0ZUFjdGlvbnMudG9nZ2xlTWFwQ29udHJvbChwYW5lbElkLCBpbmRleCk7XG4gICAgfTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIG1hcFN0YXRlQWN0aW9ucyxcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICBNYXBDb21wb25lbnQsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgaXNFeHBvcnQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgIGVkaXRvcixcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHByaW1hcnksXG4gICAgICAgIGdlbmVyYXRlVGh1bWJuYWlsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllcnNGb3JEZWNrID0gdGhpcy5sYXllcnNGb3JEZWNrU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IG1hcFByb3BzID0ge1xuICAgICAgICAuLi5tYXBTdGF0ZSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZSxcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdCxcbiAgICAgICAgZ2VuZXJhdGVUaHVtYm5haWxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxNYXBDb250cm9sXG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzPXtPYmplY3Qua2V5cyhMT0NBTEVfQ09ERVMpfVxuICAgICAgICAgICAgZHJhZ1JvdGF0ZT17bWFwU3RhdGUuZHJhZ1JvdGF0ZX1cbiAgICAgICAgICAgIGlzU3BsaXQ9e2lzU3BsaXR9XG4gICAgICAgICAgICBwcmltYXJ5PXtwcmltYXJ5fVxuICAgICAgICAgICAgaXNFeHBvcnQ9e2lzRXhwb3J0fVxuICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICBtYXBJbmRleD17aW5kZXh9XG4gICAgICAgICAgICBtYXBDb250cm9scz17bWFwQ29udHJvbHN9XG4gICAgICAgICAgICByZWFkT25seT17dGhpcy5wcm9wcy5yZWFkT25seX1cbiAgICAgICAgICAgIHNjYWxlPXttYXBTdGF0ZS5zY2FsZSB8fCAxfVxuICAgICAgICAgICAgdG9wPXtpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2RlciAmJiBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkID8gNTIgOiAwfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlUGVyc3BlY3RpdmU9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVQZXJzcGVjdGl2ZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXA9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcH1cbiAgICAgICAgICAgIG9uTWFwVG9nZ2xlTGF5ZXI9e3RoaXMuX2hhbmRsZU1hcFRvZ2dsZUxheWVyfVxuICAgICAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sPXt0aGlzLl90b2dnbGVNYXBDb250cm9sfVxuICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgIG9uU2V0TG9jYWxlPXt1aVN0YXRlQWN0aW9ucy5zZXRMb2NhbGV9XG4gICAgICAgICAgICBvblRvZ2dsZUVkaXRvclZpc2liaWxpdHk9e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVFZGl0b3JWaXNpYmlsaXR5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPE1hcENvbXBvbmVudCB7Li4ubWFwUHJvcHN9IGtleT1cImJvdHRvbVwiIG1hcFN0eWxlPXttYXBTdHlsZS5ib3R0b21NYXBTdHlsZX0+XG4gICAgICAgICAgICB7UEVSRl9ERUJVRyAmJiByZW5kZXJQZXJmb3JtYW5jZVN0YXRzKCl9XG4gICAgICAgICAgICB7dGhpcy5fcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjayl9XG4gICAgICAgICAgPC9NYXBDb21wb25lbnQ+XG4gICAgICAgICAge3RoaXMuX3JlbmRlck1hcFBvcG92ZXIobGF5ZXJzVG9SZW5kZXIpfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge21hcFN0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29udGV4dExvc3QgPSB0aGlzLnN0YXRlPy5jb250ZXh0TG9zdDtcblxuICAgICAgaWYgKGNvbnRleHRMb3N0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwQ29udGFpbmVyIHJlZj17dGhpcy5fcmVmfSBzdHlsZT17TUFQX1NUWUxFLmNvbnRhaW5lcn0gZ2xvYmU9e21hcFN0YXRlLmdsb2JlfT5cbiAgICAgICAgICB7bWFwU3R5bGUuYm90dG9tTWFwU3R5bGUgJiYgdGhpcy5fcmVuZGVyTWFwKCl9XG4gICAgICAgIDwvU3R5bGVkTWFwQ29udGFpbmVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBNYXBDb250YWluZXIuZGlzcGxheU5hbWUgPSAnTWFwQ29udGFpbmVyJztcblxuICByZXR1cm4gTWFwQ29udGFpbmVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxLQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxVQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxtQkFBQSxHQUFBVCxPQUFBO0FBR0EsSUFBQVUsV0FBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsV0FBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVksaUJBQUEsR0FBQVosT0FBQTtBQUVBLElBQUFhLE9BQUEsR0FBQVgsc0JB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