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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/dist/actions/action-wrapper.js +41 -36
  2. package/dist/actions/actions.js +21 -15
  3. package/dist/actions/identity-actions.js +20 -14
  4. package/dist/actions/index.js +16 -16
  5. package/dist/actions/map-state-actions.js +18 -12
  6. package/dist/actions/map-style-actions.js +46 -30
  7. package/dist/actions/provider-actions.js +73 -49
  8. package/dist/actions/ui-state-actions.js +113 -73
  9. package/dist/actions/vis-state-actions.js +148 -152
  10. package/dist/cloud-providers/index.js +7 -6
  11. package/dist/cloud-providers/provider.js +279 -189
  12. package/dist/components/bottom-widget.js +117 -105
  13. package/dist/components/common/action-panel.js +74 -122
  14. package/dist/components/common/animation-control/animation-control.js +54 -69
  15. package/dist/components/common/animation-control/animation-controller.js +160 -134
  16. package/dist/components/common/animation-control/animation-speed-slider.js +54 -47
  17. package/dist/components/common/animation-control/floating-time-display.js +100 -120
  18. package/dist/components/common/animation-control/playback-controls.js +144 -147
  19. package/dist/components/common/animation-control/speed-control.js +23 -31
  20. package/dist/components/common/checkbox.js +70 -56
  21. package/dist/components/common/color-legend.js +110 -83
  22. package/dist/components/common/data-table/button.js +23 -31
  23. package/dist/components/common/data-table/canvas.js +5 -11
  24. package/dist/components/common/data-table/cell-size.js +61 -51
  25. package/dist/components/common/data-table/grid.js +59 -40
  26. package/dist/components/common/data-table/index.js +348 -464
  27. package/dist/components/common/data-table/option-dropdown.js +33 -50
  28. package/dist/components/common/dataset-label.js +13 -17
  29. package/dist/components/common/error-boundary.js +45 -27
  30. package/dist/components/common/field-selector.js +139 -99
  31. package/dist/components/common/field-token.js +9 -24
  32. package/dist/components/common/file-uploader/file-drop.js +115 -96
  33. package/dist/components/common/file-uploader/file-upload-progress.js +45 -68
  34. package/dist/components/common/file-uploader/file-upload.js +187 -215
  35. package/dist/components/common/file-uploader/upload-button.js +22 -35
  36. package/dist/components/common/histogram-plot.js +58 -47
  37. package/dist/components/common/icons/add.js +27 -14
  38. package/dist/components/common/icons/anchor_window.js +18 -16
  39. package/dist/components/common/icons/arrow-down-alt.js +27 -14
  40. package/dist/components/common/icons/arrow-down-solid.js +27 -14
  41. package/dist/components/common/icons/arrow-down.js +27 -14
  42. package/dist/components/common/icons/arrow-left.js +30 -17
  43. package/dist/components/common/icons/arrow-right.js +27 -14
  44. package/dist/components/common/icons/arrow-up-alt.js +28 -15
  45. package/dist/components/common/icons/arrow-up-solid.js +27 -14
  46. package/dist/components/common/icons/arrow-up.js +27 -14
  47. package/dist/components/common/icons/base.js +57 -39
  48. package/dist/components/common/icons/bug.js +29 -16
  49. package/dist/components/common/icons/cancel.js +27 -14
  50. package/dist/components/common/icons/checkmark.js +31 -18
  51. package/dist/components/common/icons/chevron-right.js +33 -20
  52. package/dist/components/common/icons/clipboard.js +28 -15
  53. package/dist/components/common/icons/clock.js +29 -16
  54. package/dist/components/common/icons/close.js +32 -19
  55. package/dist/components/common/icons/code-alt.js +29 -16
  56. package/dist/components/common/icons/copy.js +31 -18
  57. package/dist/components/common/icons/crosshairs.js +29 -16
  58. package/dist/components/common/icons/cube-3d.js +31 -18
  59. package/dist/components/common/icons/cursor-click.js +31 -18
  60. package/dist/components/common/icons/data-table.js +28 -15
  61. package/dist/components/common/icons/db.js +28 -15
  62. package/dist/components/common/icons/delete.js +29 -16
  63. package/dist/components/common/icons/docs.js +43 -30
  64. package/dist/components/common/icons/drag-n-drop.js +29 -16
  65. package/dist/components/common/icons/draw-polygon.js +46 -33
  66. package/dist/components/common/icons/email.js +31 -18
  67. package/dist/components/common/icons/expand.js +29 -16
  68. package/dist/components/common/icons/eye-seen.js +29 -16
  69. package/dist/components/common/icons/eye-unseen.js +29 -16
  70. package/dist/components/common/icons/file-type.js +19 -35
  71. package/dist/components/common/icons/file.js +27 -14
  72. package/dist/components/common/icons/files.js +26 -14
  73. package/dist/components/common/icons/filter-funnel.js +27 -14
  74. package/dist/components/common/icons/free-window.js +18 -16
  75. package/dist/components/common/icons/gear.js +29 -16
  76. package/dist/components/common/icons/hash.js +27 -14
  77. package/dist/components/common/icons/histogram.js +27 -15
  78. package/dist/components/common/icons/index.js +156 -156
  79. package/dist/components/common/icons/info.js +38 -25
  80. package/dist/components/common/icons/layers.js +27 -14
  81. package/dist/components/common/icons/left-arrow.js +29 -16
  82. package/dist/components/common/icons/legend.js +27 -14
  83. package/dist/components/common/icons/line-chart.js +27 -14
  84. package/dist/components/common/icons/login.js +30 -17
  85. package/dist/components/common/icons/logout.js +29 -16
  86. package/dist/components/common/icons/map-icon.js +32 -18
  87. package/dist/components/common/icons/map.js +32 -18
  88. package/dist/components/common/icons/messages.js +27 -14
  89. package/dist/components/common/icons/minus.js +27 -14
  90. package/dist/components/common/icons/order-by-dataset.js +17 -15
  91. package/dist/components/common/icons/order-by-list.js +9 -7
  92. package/dist/components/common/icons/pause.js +27 -14
  93. package/dist/components/common/icons/picture.js +26 -14
  94. package/dist/components/common/icons/pin.js +30 -17
  95. package/dist/components/common/icons/play.js +27 -14
  96. package/dist/components/common/icons/polygon.js +48 -35
  97. package/dist/components/common/icons/rectangle.js +49 -36
  98. package/dist/components/common/icons/reduce.js +30 -17
  99. package/dist/components/common/icons/reset.js +27 -14
  100. package/dist/components/common/icons/rocket.js +27 -14
  101. package/dist/components/common/icons/save.js +29 -16
  102. package/dist/components/common/icons/save2.js +33 -20
  103. package/dist/components/common/icons/search.js +29 -16
  104. package/dist/components/common/icons/settings.js +29 -16
  105. package/dist/components/common/icons/share.js +27 -14
  106. package/dist/components/common/icons/split.js +55 -42
  107. package/dist/components/common/icons/square-select.js +29 -16
  108. package/dist/components/common/icons/swap-horizontal.js +31 -18
  109. package/dist/components/common/icons/table.js +27 -14
  110. package/dist/components/common/icons/trash.js +29 -16
  111. package/dist/components/common/icons/upload.js +27 -14
  112. package/dist/components/common/icons/vert-dots.js +65 -52
  113. package/dist/components/common/icons/vert-three-dots.js +40 -27
  114. package/dist/components/common/icons/warning.js +39 -26
  115. package/dist/components/common/image-preview.js +33 -71
  116. package/dist/components/common/info-helper.js +29 -36
  117. package/dist/components/common/item-selector/accessor.js +13 -7
  118. package/dist/components/common/item-selector/chickleted-input.js +56 -72
  119. package/dist/components/common/item-selector/dropdown-list.js +214 -182
  120. package/dist/components/common/item-selector/item-selector-submenu.js +55 -34
  121. package/dist/components/common/item-selector/item-selector.js +194 -183
  122. package/dist/components/common/item-selector/typeahead.js +248 -236
  123. package/dist/components/common/line-chart.js +58 -80
  124. package/dist/components/common/loading-spinner.js +31 -46
  125. package/dist/components/common/logo.js +48 -61
  126. package/dist/components/common/map-layer-selector.js +25 -31
  127. package/dist/components/common/modal.js +106 -167
  128. package/dist/components/common/portaled.js +189 -169
  129. package/dist/components/common/progress-bar.js +24 -27
  130. package/dist/components/common/range-brush.js +215 -176
  131. package/dist/components/common/range-plot.js +63 -52
  132. package/dist/components/common/range-slider.js +231 -206
  133. package/dist/components/common/slider/mouse-event.js +66 -59
  134. package/dist/components/common/slider/slider-bar-handle.js +61 -51
  135. package/dist/components/common/slider/slider-handle.js +102 -127
  136. package/dist/components/common/slider/slider.js +162 -143
  137. package/dist/components/common/styled-components.js +256 -518
  138. package/dist/components/common/switch.js +11 -11
  139. package/dist/components/common/time-range-slider-time-title.js +32 -49
  140. package/dist/components/common/time-range-slider.js +45 -56
  141. package/dist/components/common/time-slider-marker.js +52 -71
  142. package/dist/components/common/tippy-tooltip.js +59 -89
  143. package/dist/components/common/toolbar-item.js +45 -53
  144. package/dist/components/common/toolbar.js +18 -24
  145. package/dist/components/common/vertical-toolbar.js +6 -13
  146. package/dist/components/container.js +119 -87
  147. package/dist/components/context.js +8 -6
  148. package/dist/components/editor/constants.js +4 -4
  149. package/dist/components/editor/editor.js +157 -122
  150. package/dist/components/editor/feature-action-panel.js +59 -52
  151. package/dist/components/editor/feature-styles.js +29 -46
  152. package/dist/components/editor/handle-style.js +29 -38
  153. package/dist/components/filters/components.js +4 -8
  154. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +43 -33
  155. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +21 -20
  156. package/dist/components/filters/filter-panels/new-filter-panel.js +31 -24
  157. package/dist/components/filters/filter-panels/polygon-filter-panel.js +31 -26
  158. package/dist/components/filters/filter-panels/range-filter-panel.js +21 -20
  159. package/dist/components/filters/filter-panels/single-select-filter-panel.js +21 -20
  160. package/dist/components/filters/filter-panels/time-range-filter-panel.js +31 -28
  161. package/dist/components/filters/index.js +10 -10
  162. package/dist/components/filters/multi-select-filter.js +9 -11
  163. package/dist/components/filters/polygon-filter.js +41 -26
  164. package/dist/components/filters/range-filter.js +7 -9
  165. package/dist/components/filters/single-select-filter.js +13 -11
  166. package/dist/components/filters/time-range-filter.js +14 -16
  167. package/dist/components/filters/time-widget.js +84 -125
  168. package/dist/components/geocoder/geocoder.js +177 -158
  169. package/dist/components/geocoder-panel.js +87 -66
  170. package/dist/components/index.js +329 -328
  171. package/dist/components/injector.js +63 -44
  172. package/dist/components/kepler-gl.js +361 -325
  173. package/dist/components/map/coordinate-info.js +16 -18
  174. package/dist/components/map/layer-hover-info.js +86 -108
  175. package/dist/components/map/layer-selector-panel.js +48 -50
  176. package/dist/components/map/locale-panel.js +44 -38
  177. package/dist/components/map/map-control-panel.js +47 -70
  178. package/dist/components/map/map-control-toolbar.js +6 -9
  179. package/dist/components/map/map-control-tooltip.js +8 -10
  180. package/dist/components/map/map-control.js +27 -35
  181. package/dist/components/map/map-draw-panel.js +48 -38
  182. package/dist/components/map/map-legend-panel.js +50 -47
  183. package/dist/components/map/map-legend.js +116 -133
  184. package/dist/components/map/map-popover.js +100 -155
  185. package/dist/components/map/split-map-button.js +34 -30
  186. package/dist/components/map/toggle-3d-button.js +27 -25
  187. package/dist/components/map-container.js +359 -313
  188. package/dist/components/maps-layout.js +26 -16
  189. package/dist/components/modal-container.js +355 -359
  190. package/dist/components/modals/add-map-style-modal.js +194 -233
  191. package/dist/components/modals/cloud-tile.js +67 -96
  192. package/dist/components/modals/data-table-modal.js +152 -155
  193. package/dist/components/modals/delete-data-modal.js +20 -20
  194. package/dist/components/modals/error-display.js +7 -9
  195. package/dist/components/modals/export-data-modal.js +140 -118
  196. package/dist/components/modals/export-image-modal.js +69 -82
  197. package/dist/components/modals/export-map-modal/components.js +18 -20
  198. package/dist/components/modals/export-map-modal/export-html-map.js +74 -82
  199. package/dist/components/modals/export-map-modal/export-json-map.js +45 -65
  200. package/dist/components/modals/export-map-modal/export-map-modal.js +47 -42
  201. package/dist/components/modals/image-modal-container.js +21 -20
  202. package/dist/components/modals/load-data-modal.js +30 -28
  203. package/dist/components/modals/load-storage-map.js +178 -277
  204. package/dist/components/modals/loading-dialog.js +19 -41
  205. package/dist/components/modals/modal-dialog.js +6 -4
  206. package/dist/components/modals/modal-tabs.js +48 -83
  207. package/dist/components/modals/overwrite-map-modal.js +30 -41
  208. package/dist/components/modals/provider-modal-container.js +42 -23
  209. package/dist/components/modals/save-map-modal.js +83 -107
  210. package/dist/components/modals/share-map-modal.js +95 -101
  211. package/dist/components/modals/status-panel.js +43 -63
  212. package/dist/components/modals/storage-map-viewer.js +70 -133
  213. package/dist/components/notification-panel/notification-item.js +97 -94
  214. package/dist/components/notification-panel.js +43 -35
  215. package/dist/components/performance.js +53 -49
  216. package/dist/components/plot-container.js +169 -151
  217. package/dist/components/side-panel/cloud-storage-dropdown.js +15 -13
  218. package/dist/components/side-panel/common/dataset-info.js +12 -16
  219. package/dist/components/side-panel/common/dataset-tag.js +27 -48
  220. package/dist/components/side-panel/common/dataset-title.js +116 -119
  221. package/dist/components/side-panel/common/source-data-catalog.js +32 -31
  222. package/dist/components/side-panel/common/source-data-selector.js +77 -52
  223. package/dist/components/side-panel/custom-panel.js +8 -6
  224. package/dist/components/side-panel/filter-manager.js +62 -48
  225. package/dist/components/side-panel/filter-panel/filter-panel-header.js +25 -35
  226. package/dist/components/side-panel/filter-panel/filter-panel.js +64 -46
  227. package/dist/components/side-panel/interaction-manager.js +18 -20
  228. package/dist/components/side-panel/interaction-panel/brush-config.js +17 -17
  229. package/dist/components/side-panel/interaction-panel/interaction-panel.js +95 -76
  230. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +143 -118
  231. package/dist/components/side-panel/interaction-panel/tooltip-config.js +76 -95
  232. package/dist/components/side-panel/layer-manager.js +115 -105
  233. package/dist/components/side-panel/layer-panel/add-layer-button.js +54 -92
  234. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +5 -5
  235. package/dist/components/side-panel/layer-panel/color-palette.js +37 -50
  236. package/dist/components/side-panel/layer-panel/color-range-selector.js +207 -196
  237. package/dist/components/side-panel/layer-panel/color-selector.js +110 -104
  238. package/dist/components/side-panel/layer-panel/column-selector.js +22 -34
  239. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +4 -4
  240. package/dist/components/side-panel/layer-panel/custom-palette.js +205 -248
  241. package/dist/components/side-panel/layer-panel/custom-picker.js +69 -51
  242. package/dist/components/side-panel/layer-panel/dataset-layer-group.js +42 -37
  243. package/dist/components/side-panel/layer-panel/dataset-layer-section.js +27 -31
  244. package/dist/components/side-panel/layer-panel/dataset-section.js +35 -45
  245. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +13 -14
  246. package/dist/components/side-panel/layer-panel/hex-column-config.js +55 -32
  247. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +5 -5
  248. package/dist/components/side-panel/layer-panel/layer-column-config.js +46 -42
  249. package/dist/components/side-panel/layer-panel/layer-config-group.js +144 -178
  250. package/dist/components/side-panel/layer-panel/layer-configurator.js +830 -826
  251. package/dist/components/side-panel/layer-panel/layer-list.js +94 -101
  252. package/dist/components/side-panel/layer-panel/layer-panel-header.js +82 -124
  253. package/dist/components/side-panel/layer-panel/layer-panel.js +105 -111
  254. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +58 -67
  255. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +32 -47
  256. package/dist/components/side-panel/layer-panel/layer-type-selector.js +41 -30
  257. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +43 -42
  258. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +57 -55
  259. package/dist/components/side-panel/layer-panel/single-color-palette.js +33 -48
  260. package/dist/components/side-panel/layer-panel/text-label-panel.js +116 -81
  261. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +102 -88
  262. package/dist/components/side-panel/layer-panel/vis-config-slider.js +85 -99
  263. package/dist/components/side-panel/layer-panel/vis-config-switch.js +29 -38
  264. package/dist/components/side-panel/map-manager.js +89 -70
  265. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +60 -72
  266. package/dist/components/side-panel/map-style-panel/map-style-selector.js +42 -64
  267. package/dist/components/side-panel/panel-dropdown.js +37 -21
  268. package/dist/components/side-panel/panel-header-action.js +65 -60
  269. package/dist/components/side-panel/panel-header.js +184 -165
  270. package/dist/components/side-panel/panel-tab.js +29 -35
  271. package/dist/components/side-panel/panel-title.js +18 -15
  272. package/dist/components/side-panel/panel-toggle.js +31 -30
  273. package/dist/components/side-panel/side-bar.js +91 -100
  274. package/dist/components/side-panel.js +123 -108
  275. package/dist/connect/keplergl-connect.js +26 -17
  276. package/dist/connect/with-local-selector.js +63 -31
  277. package/dist/constants/action-types.js +115 -113
  278. package/dist/constants/color-palette.js +16 -14
  279. package/dist/constants/color-ranges.js +28 -23
  280. package/dist/constants/custom-color-ranges.js +12 -12
  281. package/dist/constants/default-settings.js +254 -323
  282. package/dist/constants/index.js +63 -63
  283. package/dist/constants/keyevent.js +4 -4
  284. package/dist/constants/tooltip.js +5 -5
  285. package/dist/constants/user-feedbacks.js +5 -9
  286. package/dist/constants/user-guides.js +10 -10
  287. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +63 -37
  288. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +56 -52
  289. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +168 -165
  290. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +43 -24
  291. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +40 -27
  292. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +40 -27
  293. package/dist/deckgl-layers/layer-utils/cluster-utils.js +68 -60
  294. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +282 -276
  295. package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
  296. package/dist/deckgl-layers/line-layer/line-layer.js +70 -62
  297. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +51 -37
  298. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +85 -65
  299. package/dist/index.js +16 -15
  300. package/dist/layers/aggregation-layer.js +331 -299
  301. package/dist/layers/arc-layer/arc-layer-icon.js +41 -27
  302. package/dist/layers/arc-layer/arc-layer.js +201 -174
  303. package/dist/layers/base-layer.js +1544 -1371
  304. package/dist/layers/cluster-layer/cluster-layer-icon.js +44 -30
  305. package/dist/layers/cluster-layer/cluster-layer.js +103 -89
  306. package/dist/layers/default-layer-icon.js +53 -39
  307. package/dist/layers/geojson-layer/geojson-layer-icon.js +55 -42
  308. package/dist/layers/geojson-layer/geojson-layer.js +353 -292
  309. package/dist/layers/geojson-layer/geojson-utils.js +36 -31
  310. package/dist/layers/grid-layer/grid-layer-icon.js +100 -87
  311. package/dist/layers/grid-layer/grid-layer.js +61 -51
  312. package/dist/layers/grid-layer/grid-utils.js +9 -13
  313. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +35 -21
  314. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +260 -225
  315. package/dist/layers/h3-hexagon-layer/h3-utils.js +16 -16
  316. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +52 -39
  317. package/dist/layers/heatmap-layer/heatmap-layer.js +171 -140
  318. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +64 -51
  319. package/dist/layers/hexagon-layer/hexagon-layer.js +63 -49
  320. package/dist/layers/hexagon-layer/hexagon-utils.js +14 -15
  321. package/dist/layers/icon-layer/icon-info-modal.js +75 -82
  322. package/dist/layers/icon-layer/icon-layer-icon.js +37 -24
  323. package/dist/layers/icon-layer/icon-layer.js +303 -274
  324. package/dist/layers/index.js +29 -43
  325. package/dist/layers/layer-factory.js +41 -25
  326. package/dist/layers/layer-text-label.js +23 -21
  327. package/dist/layers/layer-update.js +18 -16
  328. package/dist/layers/line-layer/line-layer-icon.js +43 -30
  329. package/dist/layers/line-layer/line-layer.js +142 -123
  330. package/dist/layers/mapbox-utils.js +62 -61
  331. package/dist/layers/mapboxgl-layer.js +169 -124
  332. package/dist/layers/point-layer/point-layer-icon.js +59 -45
  333. package/dist/layers/point-layer/point-layer.js +386 -355
  334. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +238 -208
  335. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +35 -21
  336. package/dist/layers/s2-geometry-layer/s2-utils.js +8 -9
  337. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +25 -24
  338. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +115 -102
  339. package/dist/layers/scenegraph-layer/scenegraph-layer.js +172 -148
  340. package/dist/layers/trip-layer/trip-info-modal.js +30 -50
  341. package/dist/layers/trip-layer/trip-layer-icon.js +53 -40
  342. package/dist/layers/trip-layer/trip-layer.js +307 -239
  343. package/dist/layers/trip-layer/trip-utils.js +50 -34
  344. package/dist/layers/types.js +2 -2
  345. package/dist/localization/formatted-message.js +10 -8
  346. package/dist/localization/index.js +7 -7
  347. package/dist/localization/locales.js +9 -6
  348. package/dist/localization/messages.js +10 -13
  349. package/dist/localization/translations/ca.js +13 -11
  350. package/dist/localization/translations/cn.js +13 -11
  351. package/dist/localization/translations/en.js +13 -11
  352. package/dist/localization/translations/es.js +13 -11
  353. package/dist/localization/translations/fi.js +13 -11
  354. package/dist/localization/translations/ja.js +13 -11
  355. package/dist/localization/translations/pt.js +13 -11
  356. package/dist/localization/translations/ru.js +13 -11
  357. package/dist/middleware/index.js +5 -3
  358. package/dist/processors/data-processor.js +201 -164
  359. package/dist/processors/file-handler.js +233 -111
  360. package/dist/processors/index.js +4 -4
  361. package/dist/reducers/combined-updaters.js +41 -41
  362. package/dist/reducers/composer-helpers.js +45 -20
  363. package/dist/reducers/composers.js +8 -9
  364. package/dist/reducers/core.js +35 -31
  365. package/dist/reducers/index.js +22 -21
  366. package/dist/reducers/map-state-updaters.js +47 -65
  367. package/dist/reducers/map-state.js +15 -23
  368. package/dist/reducers/map-style-updaters.js +159 -233
  369. package/dist/reducers/map-style.js +16 -30
  370. package/dist/reducers/provider-state-updaters.js +229 -217
  371. package/dist/reducers/provider-state.js +17 -29
  372. package/dist/reducers/root.js +58 -86
  373. package/dist/reducers/ui-state-updaters.js +218 -337
  374. package/dist/reducers/ui-state.js +16 -45
  375. package/dist/reducers/vis-state-merger.js +209 -205
  376. package/dist/reducers/vis-state-selectors.js +19 -5
  377. package/dist/reducers/vis-state-updaters.js +876 -1003
  378. package/dist/reducers/vis-state.js +16 -75
  379. package/dist/schemas/dataset-schema.js +108 -84
  380. package/dist/schemas/index.js +29 -28
  381. package/dist/schemas/map-state-schema.js +18 -21
  382. package/dist/schemas/map-style-schema.js +55 -47
  383. package/dist/schemas/schema-manager.js +161 -147
  384. package/dist/schemas/schema-utils.js +9 -8
  385. package/dist/schemas/schema.js +87 -72
  386. package/dist/schemas/versions.js +3 -3
  387. package/dist/schemas/vis-state-schema.js +583 -441
  388. package/dist/styles/base.js +1021 -1217
  389. package/dist/styles/index.js +3 -3
  390. package/dist/styles/media-breakpoints.js +18 -23
  391. package/dist/tasks/tasks.js +39 -36
  392. package/dist/templates/export-map-html.js +4 -233
  393. package/dist/utils/aggregate-utils.js +16 -13
  394. package/dist/utils/color-utils.js +37 -29
  395. package/dist/utils/custom-scales.js +3 -3
  396. package/dist/utils/data-scale-utils.js +13 -6
  397. package/dist/utils/data-utils.js +83 -60
  398. package/dist/utils/dataset-utils.js +77 -48
  399. package/dist/utils/dom-to-image.js +163 -108
  400. package/dist/utils/dom-utils.js +105 -88
  401. package/dist/utils/export-utils.js +103 -116
  402. package/dist/utils/filter-utils.js +374 -379
  403. package/dist/utils/gl-utils.js +15 -16
  404. package/dist/utils/gpu-filter-utils.js +73 -54
  405. package/dist/utils/index.js +48 -47
  406. package/dist/utils/interaction-utils.js +46 -53
  407. package/dist/utils/layer-utils.js +78 -89
  408. package/dist/utils/locale-utils.js +16 -24
  409. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +76 -67
  410. package/dist/utils/map-style-utils/mapbox-utils.js +3 -4
  411. package/dist/utils/mapbox-utils.js +4 -3
  412. package/dist/utils/notifications-utils.js +38 -33
  413. package/dist/utils/observe-dimensions.js +54 -42
  414. package/dist/utils/projection-utils.js +11 -14
  415. package/dist/utils/split-map-utils.js +33 -30
  416. package/dist/utils/table-utils/data-container-utils.js +14 -15
  417. package/dist/utils/table-utils/data-row.js +65 -58
  418. package/dist/utils/table-utils/index.js +2 -2
  419. package/dist/utils/table-utils/indexed-data-container.js +173 -105
  420. package/dist/utils/table-utils/kepler-table.js +386 -362
  421. package/dist/utils/table-utils/row-data-container.js +164 -99
  422. package/dist/utils/utils.js +30 -29
  423. package/package.json +1 -1
@@ -4,7 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.visStateSchema = exports.propertiesV1 = exports.propertiesV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.filterPropsV1 = exports.filterPropsV0 = exports.dimensionPropsV0 = exports.default = exports.SplitMapsSchema = exports.LayerSchemaV0 = exports.InteractionSchemaV1 = exports.FilterSchemaV0 = exports.DimensionFieldSchema = void 0;
7
+ exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.visStateSchema = exports.propertiesV1 = exports.propertiesV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.filterPropsV1 = exports.filterPropsV0 = exports.dimensionPropsV0 = exports["default"] = exports.SplitMapsSchema = exports.LayerSchemaV0 = exports.InteractionSchemaV1 = exports.FilterSchemaV0 = exports.DimensionFieldSchema = void 0;
8
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
8
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
16
  var _pick = _interopRequireDefault(require("lodash/pick"));
10
17
  var _versions = require("./versions");
@@ -13,7 +20,10 @@ var _layerFactory = require("../layers/layer-factory");
13
20
  var _schema = _interopRequireDefault(require("./schema"));
14
21
  var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
15
22
  var _dataUtils = require("../utils/data-utils");
16
- // Copyright (c) 2022 Uber Technologies, Inc.
23
+ 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; }
24
+ 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; }
25
+ 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)); }
26
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // Copyright (c) 2022 Uber Technologies, Inc.
17
27
  //
18
28
  // Permission is hereby granted, free of charge, to any person obtaining a copy
19
29
  // of this software and associated documentation files (the "Software"), to deal
@@ -32,12 +42,11 @@ var _dataUtils = require("../utils/data-utils");
32
42
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
33
43
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
34
44
  // THE SOFTWARE.
35
-
36
45
  /**
37
46
  * V0 Schema
38
47
  */
39
48
 
40
- const dimensionPropsV0 = exports.dimensionPropsV0 = ['name', 'type'];
49
+ var dimensionPropsV0 = exports.dimensionPropsV0 = ['name', 'type'];
41
50
  // in v0 geojson there is only sizeField
42
51
 
43
52
  // in v1 geojson
@@ -46,8 +55,8 @@ const dimensionPropsV0 = exports.dimensionPropsV0 = ['name', 'type'];
46
55
  // radius based on -> radiusField
47
56
  // here we make our wiredst guess on which channel sizeField belongs to
48
57
  function geojsonSizeFieldV0ToV1(config) {
49
- const defaultRaiuds = 10;
50
- const defaultRadiusRange = [0, 50];
58
+ var defaultRaiuds = 10;
59
+ var defaultRadiusRange = [0, 50];
51
60
 
52
61
  // if extruded, sizeField is most likely used for height
53
62
  if (config.visConfig.extruded) {
@@ -61,172 +70,221 @@ function geojsonSizeFieldV0ToV1(config) {
61
70
 
62
71
  // if radius changed, or radius Range Changed, sizeField is most likely used for radius
63
72
  // this is the most unreliable guess, that's why we put it in the end
64
- if (config.visConfig.radius !== defaultRaiuds || config.visConfig.radiusRange.some((d, i) => d !== defaultRadiusRange[i])) {
73
+ if (config.visConfig.radius !== defaultRaiuds || config.visConfig.radiusRange.some(function (d, i) {
74
+ return d !== defaultRadiusRange[i];
75
+ })) {
65
76
  return 'radiusField';
66
77
  }
67
78
  return 'sizeField';
68
79
  }
69
80
 
70
81
  // convert v0 to v1 layer config
71
- class DimensionFieldSchemaV0 extends _schema.default {
72
- constructor() {
73
- super(...arguments);
74
- (0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
75
- }
76
- save(field) {
77
- // should not be called anymore
78
- return {
79
- [this.key]: field !== null ? this.savePropertiesOrApplySchema(field)[this.key] : null
80
- };
81
- }
82
- load(field, parents, accumulated) {
83
- const [config] = parents.slice(-1);
84
- let fieldName = this.key;
85
- if (config.type === 'geojson' && this.key === 'sizeField' && field) {
86
- fieldName = geojsonSizeFieldV0ToV1(config);
87
- }
88
- // fold into visualChannels to be load by VisualChannelSchemaV1
89
- return {
90
- visualChannels: {
91
- ...(accumulated.visualChannels || {}),
92
- [fieldName]: field
93
- }
94
- };
95
- }
96
- }
97
- class DimensionScaleSchemaV0 extends _schema.default {
98
- constructor() {
99
- super(...arguments);
100
- (0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
101
- }
102
- save(scale) {
103
- return {
104
- [this.key]: scale
105
- };
106
- }
107
- load(scale, parents, accumulated) {
108
- const [config] = parents.slice(-1);
109
- // fold into visualChannels to be load by VisualChannelSchemaV1
110
- if (this.key === 'sizeScale' && config.type === 'geojson') {
111
- // sizeScale now split into radiusScale, heightScale
112
- // no user customization, just use default
113
- return {};
82
+ var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
83
+ function DimensionFieldSchemaV0() {
84
+ var _this;
85
+ (0, _classCallCheck2["default"])(this, DimensionFieldSchemaV0);
86
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
87
+ args[_key] = arguments[_key];
88
+ }
89
+ _this = _callSuper(this, DimensionFieldSchemaV0, [].concat(args));
90
+ (0, _defineProperty2["default"])(_this, "version", _versions.VERSIONS.v0);
91
+ return _this;
92
+ }
93
+ (0, _inherits2["default"])(DimensionFieldSchemaV0, _Schema);
94
+ return (0, _createClass2["default"])(DimensionFieldSchemaV0, [{
95
+ key: "save",
96
+ value: function save(field) {
97
+ // should not be called anymore
98
+ return (0, _defineProperty2["default"])({}, this.key, field !== null ? this.savePropertiesOrApplySchema(field)[this.key] : null);
114
99
  }
115
- return {
116
- visualChannels: {
117
- ...(accumulated.visualChannels || {}),
118
- [this.key]: scale
100
+ }, {
101
+ key: "load",
102
+ value: function load(field, parents, accumulated) {
103
+ var _parents$slice = parents.slice(-1),
104
+ _parents$slice2 = (0, _slicedToArray2["default"])(_parents$slice, 1),
105
+ config = _parents$slice2[0];
106
+ var fieldName = this.key;
107
+ if (config.type === 'geojson' && this.key === 'sizeField' && field) {
108
+ fieldName = geojsonSizeFieldV0ToV1(config);
119
109
  }
120
- };
121
- }
122
- }
123
-
124
- // used to convert v0 to v1 layer config
125
- class LayerConfigSchemaV0 extends _schema.default {
126
- constructor() {
127
- super(...arguments);
128
- (0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
129
- }
130
- load(saved, parents, accumulated) {
131
- // fold v0 layer property into config.key
132
- return {
133
- config: {
134
- ...(accumulated.config || {}),
135
- [this.key]: saved
110
+ // fold into visualChannels to be load by VisualChannelSchemaV1
111
+ return {
112
+ visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, fieldName, field))
113
+ };
114
+ }
115
+ }]);
116
+ }(_schema["default"]);
117
+ var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
118
+ function DimensionScaleSchemaV0() {
119
+ var _this2;
120
+ (0, _classCallCheck2["default"])(this, DimensionScaleSchemaV0);
121
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
122
+ args[_key2] = arguments[_key2];
123
+ }
124
+ _this2 = _callSuper(this, DimensionScaleSchemaV0, [].concat(args));
125
+ (0, _defineProperty2["default"])(_this2, "version", _versions.VERSIONS.v0);
126
+ return _this2;
127
+ }
128
+ (0, _inherits2["default"])(DimensionScaleSchemaV0, _Schema2);
129
+ return (0, _createClass2["default"])(DimensionScaleSchemaV0, [{
130
+ key: "save",
131
+ value: function save(scale) {
132
+ return (0, _defineProperty2["default"])({}, this.key, scale);
133
+ }
134
+ }, {
135
+ key: "load",
136
+ value: function load(scale, parents, accumulated) {
137
+ var _parents$slice3 = parents.slice(-1),
138
+ _parents$slice4 = (0, _slicedToArray2["default"])(_parents$slice3, 1),
139
+ config = _parents$slice4[0];
140
+ // fold into visualChannels to be load by VisualChannelSchemaV1
141
+ if (this.key === 'sizeScale' && config.type === 'geojson') {
142
+ // sizeScale now split into radiusScale, heightScale
143
+ // no user customization, just use default
144
+ return {};
136
145
  }
137
- };
138
- }
139
- }
140
-
141
- // used to convert v0 to v1 layer columns
146
+ return {
147
+ visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, this.key, scale))
148
+ };
149
+ }
150
+ }]);
151
+ }(_schema["default"]); // used to convert v0 to v1 layer config
152
+ var LayerConfigSchemaV0 = /*#__PURE__*/function (_Schema3) {
153
+ function LayerConfigSchemaV0() {
154
+ var _this3;
155
+ (0, _classCallCheck2["default"])(this, LayerConfigSchemaV0);
156
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
157
+ args[_key3] = arguments[_key3];
158
+ }
159
+ _this3 = _callSuper(this, LayerConfigSchemaV0, [].concat(args));
160
+ (0, _defineProperty2["default"])(_this3, "version", _versions.VERSIONS.v0);
161
+ return _this3;
162
+ }
163
+ (0, _inherits2["default"])(LayerConfigSchemaV0, _Schema3);
164
+ return (0, _createClass2["default"])(LayerConfigSchemaV0, [{
165
+ key: "load",
166
+ value: function load(saved, parents, accumulated) {
167
+ // fold v0 layer property into config.key
168
+ return {
169
+ config: _objectSpread(_objectSpread({}, accumulated.config || {}), {}, (0, _defineProperty2["default"])({}, this.key, saved))
170
+ };
171
+ }
172
+ }]);
173
+ }(_schema["default"]); // used to convert v0 to v1 layer columns
142
174
  // only return column value for each column
143
- class LayerColumnsSchemaV0 extends _schema.default {
144
- constructor() {
145
- super(...arguments);
146
- (0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
147
- }
148
- load(saved, parents, accumulated) {
149
- // fold v0 layer property into config.key, flatten columns
150
- return {
151
- config: {
152
- ...(accumulated.config || {}),
153
- columns: Object.keys(saved).reduce((accu, key) => ({
154
- ...accu,
155
- [key]: saved[key].value
156
- }), {})
157
- }
158
- };
159
- }
160
- }
161
-
162
- // used to convert v0 to v1 layer config.visConfig
163
- class LayerConfigToVisConfigSchemaV0 extends _schema.default {
164
- constructor() {
165
- super(...arguments);
166
- (0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
167
- }
168
- load(saved, parents, accumulated) {
169
- // fold v0 layer property into config.visConfig
170
- const accumulatedConfig = accumulated.config || {};
171
- return {
172
- config: {
173
- ...accumulatedConfig,
174
- visConfig: {
175
- ...(accumulatedConfig.visConfig || {}),
176
- [this.key]: saved
175
+ var LayerColumnsSchemaV0 = /*#__PURE__*/function (_Schema4) {
176
+ function LayerColumnsSchemaV0() {
177
+ var _this4;
178
+ (0, _classCallCheck2["default"])(this, LayerColumnsSchemaV0);
179
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
180
+ args[_key4] = arguments[_key4];
181
+ }
182
+ _this4 = _callSuper(this, LayerColumnsSchemaV0, [].concat(args));
183
+ (0, _defineProperty2["default"])(_this4, "version", _versions.VERSIONS.v0);
184
+ return _this4;
185
+ }
186
+ (0, _inherits2["default"])(LayerColumnsSchemaV0, _Schema4);
187
+ return (0, _createClass2["default"])(LayerColumnsSchemaV0, [{
188
+ key: "load",
189
+ value: function load(saved, parents, accumulated) {
190
+ // fold v0 layer property into config.key, flatten columns
191
+ return {
192
+ config: _objectSpread(_objectSpread({}, accumulated.config || {}), {}, {
193
+ columns: Object.keys(saved).reduce(function (accu, key) {
194
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, saved[key].value));
195
+ }, {})
196
+ })
197
+ };
198
+ }
199
+ }]);
200
+ }(_schema["default"]); // used to convert v0 to v1 layer config.visConfig
201
+ var LayerConfigToVisConfigSchemaV0 = /*#__PURE__*/function (_Schema5) {
202
+ function LayerConfigToVisConfigSchemaV0() {
203
+ var _this5;
204
+ (0, _classCallCheck2["default"])(this, LayerConfigToVisConfigSchemaV0);
205
+ for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
206
+ args[_key5] = arguments[_key5];
207
+ }
208
+ _this5 = _callSuper(this, LayerConfigToVisConfigSchemaV0, [].concat(args));
209
+ (0, _defineProperty2["default"])(_this5, "version", _versions.VERSIONS.v0);
210
+ return _this5;
211
+ }
212
+ (0, _inherits2["default"])(LayerConfigToVisConfigSchemaV0, _Schema5);
213
+ return (0, _createClass2["default"])(LayerConfigToVisConfigSchemaV0, [{
214
+ key: "load",
215
+ value: function load(saved, parents, accumulated) {
216
+ // fold v0 layer property into config.visConfig
217
+ var accumulatedConfig = accumulated.config || {};
218
+ return {
219
+ config: _objectSpread(_objectSpread({}, accumulatedConfig), {}, {
220
+ visConfig: _objectSpread(_objectSpread({}, accumulatedConfig.visConfig || {}), {}, (0, _defineProperty2["default"])({}, this.key, saved))
221
+ })
222
+ };
223
+ }
224
+ }]);
225
+ }(_schema["default"]);
226
+ var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
227
+ function LayerVisConfigSchemaV0() {
228
+ var _this6;
229
+ (0, _classCallCheck2["default"])(this, LayerVisConfigSchemaV0);
230
+ for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
231
+ args[_key6] = arguments[_key6];
232
+ }
233
+ _this6 = _callSuper(this, LayerVisConfigSchemaV0, [].concat(args));
234
+ (0, _defineProperty2["default"])(_this6, "version", _versions.VERSIONS.v0);
235
+ (0, _defineProperty2["default"])(_this6, "key", 'visConfig');
236
+ return _this6;
237
+ }
238
+ (0, _inherits2["default"])(LayerVisConfigSchemaV0, _Schema6);
239
+ return (0, _createClass2["default"])(LayerVisConfigSchemaV0, [{
240
+ key: "load",
241
+ value: function load(visConfig, parents, accumulator) {
242
+ var _parents$slice5 = parents.slice(-1),
243
+ _parents$slice6 = (0, _slicedToArray2["default"])(_parents$slice5, 1),
244
+ config = _parents$slice6[0];
245
+ var rename = {
246
+ geojson: {
247
+ extruded: 'enable3d',
248
+ elevationRange: 'heightRange'
177
249
  }
250
+ };
251
+ if (config.type in rename) {
252
+ var propToRename = rename[config.type];
253
+ return {
254
+ config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
255
+ visConfig: Object.keys(visConfig).reduce(function (accu, key) {
256
+ return _objectSpread(_objectSpread({}, accu), propToRename[key] ? (0, _defineProperty2["default"])({}, propToRename[key], visConfig[key]) : (0, _defineProperty2["default"])({}, key, visConfig[key]));
257
+ }, {})
258
+ })
259
+ };
178
260
  }
179
- };
180
- }
181
- }
182
- class LayerVisConfigSchemaV0 extends _schema.default {
183
- constructor() {
184
- super(...arguments);
185
- (0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
186
- (0, _defineProperty2.default)(this, "key", 'visConfig');
187
- }
188
- load(visConfig, parents, accumulator) {
189
- const [config] = parents.slice(-1);
190
- const rename = {
191
- geojson: {
192
- extruded: 'enable3d',
193
- elevationRange: 'heightRange'
194
- }
195
- };
196
- if (config.type in rename) {
197
- const propToRename = rename[config.type];
198
261
  return {
199
- config: {
200
- ...(accumulator.config || {}),
201
- visConfig: Object.keys(visConfig).reduce((accu, key) => ({
202
- ...accu,
203
- ...(propToRename[key] ? {
204
- [propToRename[key]]: visConfig[key]
205
- } : {
206
- [key]: visConfig[key]
207
- })
208
- }), {})
209
- }
262
+ config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
263
+ visConfig: visConfig
264
+ })
210
265
  };
211
266
  }
212
- return {
213
- config: {
214
- ...(accumulator.config || {}),
215
- visConfig
216
- }
217
- };
218
- }
219
- }
220
- class LayerConfigSchemaDeleteV0 extends _schema.default {
221
- constructor() {
222
- super(...arguments);
223
- (0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
224
- }
225
- load(value) {
226
- return {};
227
- }
228
- }
229
-
267
+ }]);
268
+ }(_schema["default"]);
269
+ var LayerConfigSchemaDeleteV0 = /*#__PURE__*/function (_Schema7) {
270
+ function LayerConfigSchemaDeleteV0() {
271
+ var _this7;
272
+ (0, _classCallCheck2["default"])(this, LayerConfigSchemaDeleteV0);
273
+ for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
274
+ args[_key7] = arguments[_key7];
275
+ }
276
+ _this7 = _callSuper(this, LayerConfigSchemaDeleteV0, [].concat(args));
277
+ (0, _defineProperty2["default"])(_this7, "version", _versions.VERSIONS.v0);
278
+ return _this7;
279
+ }
280
+ (0, _inherits2["default"])(LayerConfigSchemaDeleteV0, _Schema7);
281
+ return (0, _createClass2["default"])(LayerConfigSchemaDeleteV0, [{
282
+ key: "load",
283
+ value: function load(value) {
284
+ return {};
285
+ }
286
+ }]);
287
+ }(_schema["default"]);
230
288
  /**
231
289
  * V0 -> V1 Changes
232
290
  * - layer is now a class
@@ -237,8 +295,7 @@ class LayerConfigSchemaDeleteV0 extends _schema.default {
237
295
  * - enable3d, colorAggregation and sizeAggregation are moved into visConfig
238
296
  * - GeojsonLayer - added height, radius specific properties
239
297
  */
240
-
241
- const layerPropsV0 = exports.layerPropsV0 = {
298
+ var layerPropsV0 = exports.layerPropsV0 = {
242
299
  id: null,
243
300
  type: null,
244
301
  // move into layer.config
@@ -299,44 +356,62 @@ const layerPropsV0 = exports.layerPropsV0 = {
299
356
  /**
300
357
  * V1 Schema
301
358
  */
302
- class ColumnSchemaV1 extends _schema.default {
303
- save(columns, state) {
304
- // starting from v1, only save column value
305
- // fieldIdx will be calculated during merge
306
- return {
307
- [this.key]: Object.keys(columns).reduce((accu, ckey) => ({
308
- ...accu,
309
- [ckey]: columns[ckey].value
310
- }), {})
311
- };
312
- }
313
- load(columns) {
314
- return {
315
- columns
316
- };
317
- }
318
- }
319
- class TextLabelSchemaV1 extends _schema.default {
320
- save(textLabel) {
321
- return {
322
- [this.key]: textLabel.map(tl => ({
323
- ...tl,
324
- field: tl.field ? (0, _pick.default)(tl.field, ['name', 'type']) : null
325
- }))
326
- };
327
- }
328
- load(textLabel) {
329
- return {
330
- textLabel: Array.isArray(textLabel) ? textLabel : [textLabel]
331
- };
332
- }
333
- }
334
- const visualChannelModificationV1 = {
335
- geojson: (vc, parents, accumulator) => {
336
- const [layer] = parents.slice(-1);
337
- const isOld = !vc.hasOwnProperty('strokeColorField');
359
+ var ColumnSchemaV1 = /*#__PURE__*/function (_Schema8) {
360
+ function ColumnSchemaV1() {
361
+ (0, _classCallCheck2["default"])(this, ColumnSchemaV1);
362
+ return _callSuper(this, ColumnSchemaV1, arguments);
363
+ }
364
+ (0, _inherits2["default"])(ColumnSchemaV1, _Schema8);
365
+ return (0, _createClass2["default"])(ColumnSchemaV1, [{
366
+ key: "save",
367
+ value: function save(columns, state) {
368
+ // starting from v1, only save column value
369
+ // fieldIdx will be calculated during merge
370
+ return (0, _defineProperty2["default"])({}, this.key, Object.keys(columns).reduce(function (accu, ckey) {
371
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, ckey, columns[ckey].value));
372
+ }, {}));
373
+ }
374
+ }, {
375
+ key: "load",
376
+ value: function load(columns) {
377
+ return {
378
+ columns: columns
379
+ };
380
+ }
381
+ }]);
382
+ }(_schema["default"]);
383
+ var TextLabelSchemaV1 = /*#__PURE__*/function (_Schema9) {
384
+ function TextLabelSchemaV1() {
385
+ (0, _classCallCheck2["default"])(this, TextLabelSchemaV1);
386
+ return _callSuper(this, TextLabelSchemaV1, arguments);
387
+ }
388
+ (0, _inherits2["default"])(TextLabelSchemaV1, _Schema9);
389
+ return (0, _createClass2["default"])(TextLabelSchemaV1, [{
390
+ key: "save",
391
+ value: function save(textLabel) {
392
+ return (0, _defineProperty2["default"])({}, this.key, textLabel.map(function (tl) {
393
+ return _objectSpread(_objectSpread({}, tl), {}, {
394
+ field: tl.field ? (0, _pick["default"])(tl.field, ['name', 'type']) : null
395
+ });
396
+ }));
397
+ }
398
+ }, {
399
+ key: "load",
400
+ value: function load(textLabel) {
401
+ return {
402
+ textLabel: Array.isArray(textLabel) ? textLabel : [textLabel]
403
+ };
404
+ }
405
+ }]);
406
+ }(_schema["default"]);
407
+ var visualChannelModificationV1 = {
408
+ geojson: function geojson(vc, parents, accumulator) {
409
+ var _parents$slice7 = parents.slice(-1),
410
+ _parents$slice8 = (0, _slicedToArray2["default"])(_parents$slice7, 1),
411
+ layer = _parents$slice8[0];
412
+ var isOld = !vc.hasOwnProperty('strokeColorField');
338
413
  // make our best guess if this geojson layer contains point
339
- const isPoint = vc.radiusField || layer.config.visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
414
+ var isPoint = vc.radiusField || layer.config.visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
340
415
  if (isOld && !isPoint && layer.config.visConfig.stroked) {
341
416
  // if stroked is true, copy color config to stroke color config
342
417
  return {
@@ -350,62 +425,74 @@ const visualChannelModificationV1 = {
350
425
  /**
351
426
  * V1: save [field]: {name, type}, [scale]: '' for each channel
352
427
  */
353
- class VisualChannelSchemaV1 extends _schema.default {
354
- save(visualChannels, parents) {
355
- // only save field and scale of each channel
356
- const [layer] = parents.slice(-1);
357
- return {
358
- [this.key]: Object.keys(visualChannels).reduce(
428
+ var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
429
+ function VisualChannelSchemaV1() {
430
+ (0, _classCallCheck2["default"])(this, VisualChannelSchemaV1);
431
+ return _callSuper(this, VisualChannelSchemaV1, arguments);
432
+ }
433
+ (0, _inherits2["default"])(VisualChannelSchemaV1, _Schema10);
434
+ return (0, _createClass2["default"])(VisualChannelSchemaV1, [{
435
+ key: "save",
436
+ value: function save(visualChannels, parents) {
437
+ // only save field and scale of each channel
438
+ var _parents$slice9 = parents.slice(-1),
439
+ _parents$slice10 = (0, _slicedToArray2["default"])(_parents$slice9, 1),
440
+ layer = _parents$slice10[0];
441
+ return (0, _defineProperty2["default"])({}, this.key, Object.keys(visualChannels).reduce(
359
442
  // save channel to null if didn't select any field
360
- (accu, key) => ({
361
- ...accu,
362
- [visualChannels[key].field]: layer.config[visualChannels[key].field] ? (0, _pick.default)(layer.config[visualChannels[key].field], ['name', 'type', 'colorColumn']) : null,
363
- [visualChannels[key].scale]: layer.config[visualChannels[key].scale]
364
- }), {})
365
- };
366
- }
367
- load(vc, parents, accumulator) {
368
- // fold channels into config
369
- const [layer] = parents.slice(-1);
370
- const modified = visualChannelModificationV1[layer.type] ? visualChannelModificationV1[layer.type](vc, parents, accumulator) : {};
371
- return {
372
- ...accumulator,
373
- config: {
374
- ...(accumulator.config || {}),
375
- ...vc,
376
- ...modified
377
- }
378
- };
379
- }
380
- }
443
+ function (accu, key) {
444
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, visualChannels[key].field, layer.config[visualChannels[key].field] ? (0, _pick["default"])(layer.config[visualChannels[key].field], ['name', 'type', 'colorColumn']) : null), visualChannels[key].scale, layer.config[visualChannels[key].scale]));
445
+ }, {}));
446
+ }
447
+ }, {
448
+ key: "load",
449
+ value: function load(vc, parents, accumulator) {
450
+ // fold channels into config
451
+ var _parents$slice11 = parents.slice(-1),
452
+ _parents$slice12 = (0, _slicedToArray2["default"])(_parents$slice11, 1),
453
+ layer = _parents$slice12[0];
454
+ var modified = visualChannelModificationV1[layer.type] ? visualChannelModificationV1[layer.type](vc, parents, accumulator) : {};
455
+ return _objectSpread(_objectSpread({}, accumulator), {}, {
456
+ config: _objectSpread(_objectSpread(_objectSpread({}, accumulator.config || {}), vc), modified)
457
+ });
458
+ }
459
+ }]);
460
+ }(_schema["default"]);
381
461
  /**
382
462
  * V1: save [channel]: [{ label, color }, ...] for legend
383
463
  */
384
- class LegendSettingsV1 extends _schema.default {
385
- save(legendSettings, parents) {
386
- return {
387
- [this.key]: Object.keys(legendSettings).reduce((accu, key) => {
464
+ var LegendSettingsV1 = /*#__PURE__*/function (_Schema11) {
465
+ function LegendSettingsV1() {
466
+ (0, _classCallCheck2["default"])(this, LegendSettingsV1);
467
+ return _callSuper(this, LegendSettingsV1, arguments);
468
+ }
469
+ (0, _inherits2["default"])(LegendSettingsV1, _Schema11);
470
+ return (0, _createClass2["default"])(LegendSettingsV1, [{
471
+ key: "save",
472
+ value: function save(legendSettings, parents) {
473
+ return (0, _defineProperty2["default"])({}, this.key, Object.keys(legendSettings).reduce(function (accu, key) {
388
474
  accu[key] = legendSettings[key];
389
475
  return accu;
390
- }, {})
391
- };
392
- }
393
- load(ls, parents, accumulator) {
394
- return {
395
- ...accumulator,
396
- [this.key]: ls
397
- };
398
- }
399
- }
400
- const visConfigModificationV1 = {
401
- point: (visConfig, parents, accumulated) => {
402
- const modified = {};
403
- const [layer] = parents.slice(-2, -1);
404
- const isOld = !visConfig.hasOwnProperty('filled') && !visConfig.strokeColor && !visConfig.strokeColorRange;
476
+ }, {}));
477
+ }
478
+ }, {
479
+ key: "load",
480
+ value: function load(ls, parents, accumulator) {
481
+ return _objectSpread(_objectSpread({}, accumulator), {}, (0, _defineProperty2["default"])({}, this.key, ls));
482
+ }
483
+ }]);
484
+ }(_schema["default"]);
485
+ var visConfigModificationV1 = {
486
+ point: function point(visConfig, parents, accumulated) {
487
+ var modified = {};
488
+ var _parents$slice13 = parents.slice(-2, -1),
489
+ _parents$slice14 = (0, _slicedToArray2["default"])(_parents$slice13, 1),
490
+ layer = _parents$slice14[0];
491
+ var isOld = !visConfig.hasOwnProperty('filled') && !visConfig.strokeColor && !visConfig.strokeColorRange;
405
492
  if (isOld) {
406
493
  // color color & color range to stroke color
407
494
  modified.strokeColor = layer.config.color;
408
- modified.strokeColorRange = (0, _cloneDeep.default)(visConfig.colorRange);
495
+ modified.strokeColorRange = (0, _cloneDeep["default"])(visConfig.colorRange);
409
496
  if (visConfig.outline) {
410
497
  // point layer now supports both outline and fill
411
498
  // for older schema where filled has not been added to point layer
@@ -415,17 +502,19 @@ const visConfigModificationV1 = {
415
502
  }
416
503
  return modified;
417
504
  },
418
- geojson: (visConfig, parents, accumulated) => {
505
+ geojson: function geojson(visConfig, parents, accumulated) {
419
506
  // is points?
420
- const modified = {};
421
- const [layer] = parents.slice(-2, -1);
422
- const isOld = layer.visualChannels && !layer.visualChannels.hasOwnProperty('strokeColorField') && !visConfig.strokeColor && !visConfig.strokeColorRange;
507
+ var modified = {};
508
+ var _parents$slice15 = parents.slice(-2, -1),
509
+ _parents$slice16 = (0, _slicedToArray2["default"])(_parents$slice15, 1),
510
+ layer = _parents$slice16[0];
511
+ var isOld = layer.visualChannels && !layer.visualChannels.hasOwnProperty('strokeColorField') && !visConfig.strokeColor && !visConfig.strokeColorRange;
423
512
  // make our best guess if this geojson layer contains point
424
- const isPoint = layer.visualChannels && layer.visualChannels.radiusField || visConfig && visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
513
+ var isPoint = layer.visualChannels && layer.visualChannels.radiusField || visConfig && visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
425
514
  if (isOld) {
426
515
  // color color & color range to stroke color
427
516
  modified.strokeColor = layer.config.color;
428
- modified.strokeColorRange = (0, _cloneDeep.default)(visConfig.colorRange);
517
+ modified.strokeColorRange = (0, _cloneDeep["default"])(visConfig.colorRange);
429
518
  if (isPoint) {
430
519
  // if is point, set stroke to false
431
520
  modified.filled = true;
@@ -435,26 +524,35 @@ const visConfigModificationV1 = {
435
524
  return modified;
436
525
  }
437
526
  };
438
- class VisConfigSchemaV1 extends _schema.default {
439
- constructor() {
440
- super(...arguments);
441
- (0, _defineProperty2.default)(this, "key", 'visConfig');
442
- }
443
- load(visConfig, parents, accumulated) {
444
- const [layer] = parents.slice(-2, -1);
445
- const modified = visConfigModificationV1[layer.type] ? visConfigModificationV1[layer.type](visConfig, parents, accumulated) : {};
446
- return {
447
- visConfig: {
448
- ...visConfig,
449
- ...modified
450
- }
451
- };
452
- }
453
- }
454
- const layerPropsV1 = exports.layerPropsV1 = {
527
+ var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema12) {
528
+ function VisConfigSchemaV1() {
529
+ var _this8;
530
+ (0, _classCallCheck2["default"])(this, VisConfigSchemaV1);
531
+ for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
532
+ args[_key8] = arguments[_key8];
533
+ }
534
+ _this8 = _callSuper(this, VisConfigSchemaV1, [].concat(args));
535
+ (0, _defineProperty2["default"])(_this8, "key", 'visConfig');
536
+ return _this8;
537
+ }
538
+ (0, _inherits2["default"])(VisConfigSchemaV1, _Schema12);
539
+ return (0, _createClass2["default"])(VisConfigSchemaV1, [{
540
+ key: "load",
541
+ value: function load(visConfig, parents, accumulated) {
542
+ var _parents$slice17 = parents.slice(-2, -1),
543
+ _parents$slice18 = (0, _slicedToArray2["default"])(_parents$slice17, 1),
544
+ layer = _parents$slice18[0];
545
+ var modified = visConfigModificationV1[layer.type] ? visConfigModificationV1[layer.type](visConfig, parents, accumulated) : {};
546
+ return {
547
+ visConfig: _objectSpread(_objectSpread({}, visConfig), modified)
548
+ };
549
+ }
550
+ }]);
551
+ }(_schema["default"]);
552
+ var layerPropsV1 = exports.layerPropsV1 = {
455
553
  id: null,
456
554
  type: null,
457
- config: new _schema.default({
555
+ config: new _schema["default"]({
458
556
  version: _versions.VERSIONS.v1,
459
557
  key: 'config',
460
558
  properties: {
@@ -487,129 +585,161 @@ const layerPropsV1 = exports.layerPropsV1 = {
487
585
  key: 'visualChannels'
488
586
  })
489
587
  };
490
- class LayerSchemaV0 extends _schema.default {
491
- constructor() {
492
- super(...arguments);
493
- (0, _defineProperty2.default)(this, "key", 'layers');
494
- }
495
- save(layers, parents) {
496
- const [visState] = parents.slice(-1);
497
- return {
498
- [this.key]: visState.layerOrder.reduce((saved, index) => {
588
+ var LayerSchemaV0 = exports.LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
589
+ function LayerSchemaV0() {
590
+ var _this9;
591
+ (0, _classCallCheck2["default"])(this, LayerSchemaV0);
592
+ for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
593
+ args[_key9] = arguments[_key9];
594
+ }
595
+ _this9 = _callSuper(this, LayerSchemaV0, [].concat(args));
596
+ (0, _defineProperty2["default"])(_this9, "key", 'layers');
597
+ return _this9;
598
+ }
599
+ (0, _inherits2["default"])(LayerSchemaV0, _Schema13);
600
+ return (0, _createClass2["default"])(LayerSchemaV0, [{
601
+ key: "save",
602
+ value: function save(layers, parents) {
603
+ var _this10 = this;
604
+ var _parents$slice19 = parents.slice(-1),
605
+ _parents$slice20 = (0, _slicedToArray2["default"])(_parents$slice19, 1),
606
+ visState = _parents$slice20[0];
607
+ return (0, _defineProperty2["default"])({}, this.key, visState.layerOrder.reduce(function (saved, index) {
499
608
  // save layers according to their rendering order
500
- const layer = layers[index];
609
+ var layer = layers[index];
501
610
  if (layer.isValidToSave()) {
502
- saved.push(this.savePropertiesOrApplySchema(layer).layers);
611
+ saved.push(_this10.savePropertiesOrApplySchema(layer).layers);
503
612
  }
504
613
  return saved;
505
- }, [])
506
- };
507
- }
508
- load(layers) {
509
- return {
510
- [this.key]: layers.map(layer => this.loadPropertiesOrApplySchema(layer, layers).layers)
511
- };
512
- }
513
- }
514
- exports.LayerSchemaV0 = LayerSchemaV0;
515
- class FilterSchemaV0 extends _schema.default {
516
- constructor() {
517
- super(...arguments);
518
- (0, _defineProperty2.default)(this, "key", 'filters');
519
- }
520
- save(filters) {
521
- return {
522
- filters: filters.filter(_filterUtils.isValidFilterValue).map(filter => this.savePropertiesOrApplySchema(filter).filters)
523
- };
524
- }
525
- load(filters) {
526
- return {
527
- filters
528
- };
529
- }
530
- }
531
- exports.FilterSchemaV0 = FilterSchemaV0;
532
- const interactionPropsV0 = ['tooltip', 'brush'];
533
- class InteractionSchemaV0 extends _schema.default {
534
- constructor() {
535
- super(...arguments);
536
- (0, _defineProperty2.default)(this, "key", 'interactionConfig');
537
- }
538
- save(interactionConfig) {
539
- return Array.isArray(this.properties) ? {
540
- [this.key]: this.properties.reduce((accu, key) => ({
541
- ...accu,
542
- ...(interactionConfig[key].enabled ? {
543
- [key]: interactionConfig[key].config
544
- } : {})
545
- }), {})
546
- } : {};
547
- }
548
- load(interactionConfig) {
549
- // convert v0 -> v1
550
- // return enabled: false if disabled,
551
- return Array.isArray(this.properties) ? {
552
- [this.key]: this.properties.reduce((accu, key) => ({
553
- ...accu,
554
- ...{
555
- [key]: {
556
- ...(interactionConfig[key] || {}),
557
- enabled: Boolean(interactionConfig[key])
558
- }
559
- }
560
- }), {})
561
- } : {};
562
- }
563
- }
564
- const interactionPropsV1 = [...interactionPropsV0, 'geocoder', 'coordinate'];
565
- class InteractionSchemaV1 extends _schema.default {
566
- constructor() {
567
- super(...arguments);
568
- (0, _defineProperty2.default)(this, "key", 'interactionConfig');
569
- }
570
- save(interactionConfig) {
571
- // save config even if disabled,
572
- return Array.isArray(this.properties) ? {
573
- [this.key]: this.properties.reduce((accu, key) => ({
574
- ...accu,
575
- [key]: {
576
- ...interactionConfig[key].config,
614
+ }, []));
615
+ }
616
+ }, {
617
+ key: "load",
618
+ value: function load(layers) {
619
+ var _this11 = this;
620
+ return (0, _defineProperty2["default"])({}, this.key, layers.map(function (layer) {
621
+ return _this11.loadPropertiesOrApplySchema(layer, layers).layers;
622
+ }));
623
+ }
624
+ }]);
625
+ }(_schema["default"]);
626
+ var FilterSchemaV0 = exports.FilterSchemaV0 = /*#__PURE__*/function (_Schema14) {
627
+ function FilterSchemaV0() {
628
+ var _this12;
629
+ (0, _classCallCheck2["default"])(this, FilterSchemaV0);
630
+ for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
631
+ args[_key10] = arguments[_key10];
632
+ }
633
+ _this12 = _callSuper(this, FilterSchemaV0, [].concat(args));
634
+ (0, _defineProperty2["default"])(_this12, "key", 'filters');
635
+ return _this12;
636
+ }
637
+ (0, _inherits2["default"])(FilterSchemaV0, _Schema14);
638
+ return (0, _createClass2["default"])(FilterSchemaV0, [{
639
+ key: "save",
640
+ value: function save(filters) {
641
+ var _this13 = this;
642
+ return {
643
+ filters: filters.filter(_filterUtils.isValidFilterValue).map(function (filter) {
644
+ return _this13.savePropertiesOrApplySchema(filter).filters;
645
+ })
646
+ };
647
+ }
648
+ }, {
649
+ key: "load",
650
+ value: function load(filters) {
651
+ return {
652
+ filters: filters
653
+ };
654
+ }
655
+ }]);
656
+ }(_schema["default"]);
657
+ var interactionPropsV0 = ['tooltip', 'brush'];
658
+ var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) {
659
+ function InteractionSchemaV0() {
660
+ var _this14;
661
+ (0, _classCallCheck2["default"])(this, InteractionSchemaV0);
662
+ for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
663
+ args[_key11] = arguments[_key11];
664
+ }
665
+ _this14 = _callSuper(this, InteractionSchemaV0, [].concat(args));
666
+ (0, _defineProperty2["default"])(_this14, "key", 'interactionConfig');
667
+ return _this14;
668
+ }
669
+ (0, _inherits2["default"])(InteractionSchemaV0, _Schema15);
670
+ return (0, _createClass2["default"])(InteractionSchemaV0, [{
671
+ key: "save",
672
+ value: function save(interactionConfig) {
673
+ return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
674
+ return _objectSpread(_objectSpread({}, accu), interactionConfig[key].enabled ? (0, _defineProperty2["default"])({}, key, interactionConfig[key].config) : {});
675
+ }, {})) : {};
676
+ }
677
+ }, {
678
+ key: "load",
679
+ value: function load(interactionConfig) {
680
+ // convert v0 -> v1
681
+ // return enabled: false if disabled,
682
+ return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
683
+ return _objectSpread(_objectSpread({}, accu), (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, interactionConfig[key] || {}), {}, {
684
+ enabled: Boolean(interactionConfig[key])
685
+ })));
686
+ }, {})) : {};
687
+ }
688
+ }]);
689
+ }(_schema["default"]);
690
+ var interactionPropsV1 = [].concat(interactionPropsV0, ['geocoder', 'coordinate']);
691
+ var InteractionSchemaV1 = exports.InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
692
+ function InteractionSchemaV1() {
693
+ var _this15;
694
+ (0, _classCallCheck2["default"])(this, InteractionSchemaV1);
695
+ for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
696
+ args[_key12] = arguments[_key12];
697
+ }
698
+ _this15 = _callSuper(this, InteractionSchemaV1, [].concat(args));
699
+ (0, _defineProperty2["default"])(_this15, "key", 'interactionConfig');
700
+ return _this15;
701
+ }
702
+ (0, _inherits2["default"])(InteractionSchemaV1, _Schema16);
703
+ return (0, _createClass2["default"])(InteractionSchemaV1, [{
704
+ key: "save",
705
+ value: function save(interactionConfig) {
706
+ // save config even if disabled,
707
+ return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
708
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, interactionConfig[key].config), {}, {
577
709
  enabled: interactionConfig[key].enabled
578
- }
579
- }), {})
580
- } : {};
581
- }
582
- load(interactionConfig) {
583
- const modifiedConfig = interactionConfig;
584
- Object.keys(interactionConfig).forEach(configType => {
585
- if (configType === 'tooltip') {
586
- const fieldsToShow = modifiedConfig[configType].fieldsToShow;
587
- if (!(0, _dataUtils.notNullorUndefined)(fieldsToShow)) {
588
- return {
589
- [this.key]: modifiedConfig
590
- };
591
- }
592
- Object.keys(fieldsToShow).forEach(key => {
593
- fieldsToShow[key] = fieldsToShow[key].map(fieldData => {
594
- if (!fieldData.name) {
595
- return {
596
- name: fieldData,
597
- format: null
598
- };
599
- }
600
- return fieldData;
710
+ })));
711
+ }, {})) : {};
712
+ }
713
+ }, {
714
+ key: "load",
715
+ value: function load(interactionConfig) {
716
+ var _this16 = this;
717
+ var modifiedConfig = interactionConfig;
718
+ Object.keys(interactionConfig).forEach(function (configType) {
719
+ if (configType === 'tooltip') {
720
+ var fieldsToShow = modifiedConfig[configType].fieldsToShow;
721
+ if (!(0, _dataUtils.notNullorUndefined)(fieldsToShow)) {
722
+ return (0, _defineProperty2["default"])({}, _this16.key, modifiedConfig);
723
+ }
724
+ Object.keys(fieldsToShow).forEach(function (key) {
725
+ fieldsToShow[key] = fieldsToShow[key].map(function (fieldData) {
726
+ if (!fieldData.name) {
727
+ return {
728
+ name: fieldData,
729
+ format: null
730
+ };
731
+ }
732
+ return fieldData;
733
+ });
601
734
  });
602
- });
603
- }
604
- return undefined;
605
- });
606
- return {
607
- [this.key]: modifiedConfig
608
- };
609
- }
610
- }
611
- exports.InteractionSchemaV1 = InteractionSchemaV1;
612
- const filterPropsV0 = exports.filterPropsV0 = {
735
+ }
736
+ return undefined;
737
+ });
738
+ return (0, _defineProperty2["default"])({}, this.key, modifiedConfig);
739
+ }
740
+ }]);
741
+ }(_schema["default"]);
742
+ var filterPropsV0 = exports.filterPropsV0 = {
613
743
  dataId: null,
614
744
  id: null,
615
745
  name: null,
@@ -617,54 +747,65 @@ const filterPropsV0 = exports.filterPropsV0 = {
617
747
  value: null,
618
748
  enlarged: null
619
749
  };
620
- class DimensionFieldSchema extends _schema.default {
621
- save(field) {
622
- return {
623
- [this.key]: field ? this.savePropertiesOrApplySchema(field)[this.key] : null
624
- };
625
- }
626
- load(field) {
627
- return {
628
- [this.key]: field
629
- };
630
- }
631
- }
632
- exports.DimensionFieldSchema = DimensionFieldSchema;
633
- class SplitMapsSchema extends _schema.default {
634
- convertLayerSettings(accu, _ref) {
635
- let [key, value] = _ref;
636
- if (typeof value === 'boolean') {
637
- return {
638
- ...accu,
639
- [key]: value
640
- };
641
- } else if (value && typeof value === 'object' && value.isAvailable) {
642
- return {
643
- ...accu,
644
- [key]: Boolean(value.isVisible)
645
- };
750
+ var DimensionFieldSchema = exports.DimensionFieldSchema = /*#__PURE__*/function (_Schema17) {
751
+ function DimensionFieldSchema() {
752
+ (0, _classCallCheck2["default"])(this, DimensionFieldSchema);
753
+ return _callSuper(this, DimensionFieldSchema, arguments);
754
+ }
755
+ (0, _inherits2["default"])(DimensionFieldSchema, _Schema17);
756
+ return (0, _createClass2["default"])(DimensionFieldSchema, [{
757
+ key: "save",
758
+ value: function save(field) {
759
+ return (0, _defineProperty2["default"])({}, this.key, field ? this.savePropertiesOrApplySchema(field)[this.key] : null);
646
760
  }
647
- return accu;
648
- }
649
- load(splitMaps) {
650
- // previous splitMaps Schema {layers: {layerId: {isVisible, isAvailable}}}
761
+ }, {
762
+ key: "load",
763
+ value: function load(field) {
764
+ return (0, _defineProperty2["default"])({}, this.key, field);
765
+ }
766
+ }]);
767
+ }(_schema["default"]);
768
+ var SplitMapsSchema = exports.SplitMapsSchema = /*#__PURE__*/function (_Schema18) {
769
+ function SplitMapsSchema() {
770
+ (0, _classCallCheck2["default"])(this, SplitMapsSchema);
771
+ return _callSuper(this, SplitMapsSchema, arguments);
772
+ }
773
+ (0, _inherits2["default"])(SplitMapsSchema, _Schema18);
774
+ return (0, _createClass2["default"])(SplitMapsSchema, [{
775
+ key: "convertLayerSettings",
776
+ value: function convertLayerSettings(accu, _ref19) {
777
+ var _ref20 = (0, _slicedToArray2["default"])(_ref19, 2),
778
+ key = _ref20[0],
779
+ value = _ref20[1];
780
+ if (typeof value === 'boolean') {
781
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, value));
782
+ } else if (value && (0, _typeof2["default"])(value) === 'object' && value.isAvailable) {
783
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, Boolean(value.isVisible)));
784
+ }
785
+ return accu;
786
+ }
787
+ }, {
788
+ key: "load",
789
+ value: function load(splitMaps) {
790
+ var _this17 = this;
791
+ // previous splitMaps Schema {layers: {layerId: {isVisible, isAvailable}}}
651
792
 
652
- if (!Array.isArray(splitMaps) || !splitMaps.length) {
793
+ if (!Array.isArray(splitMaps) || !splitMaps.length) {
794
+ return {
795
+ splitMaps: []
796
+ };
797
+ }
653
798
  return {
654
- splitMaps: []
799
+ splitMaps: splitMaps.map(function (settings) {
800
+ return _objectSpread(_objectSpread({}, settings), {}, {
801
+ layers: Object.entries(settings.layers || {}).reduce(_this17.convertLayerSettings, {})
802
+ });
803
+ })
655
804
  };
656
805
  }
657
- return {
658
- splitMaps: splitMaps.map(settings => ({
659
- ...settings,
660
- layers: Object.entries(settings.layers || {}).reduce(this.convertLayerSettings, {})
661
- }))
662
- };
663
- }
664
- }
665
- exports.SplitMapsSchema = SplitMapsSchema;
666
- const filterPropsV1 = exports.filterPropsV1 = {
667
- ...filterPropsV0,
806
+ }]);
807
+ }(_schema["default"]);
808
+ var filterPropsV1 = exports.filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, {
668
809
  plotType: null,
669
810
  animationWindow: null,
670
811
  yAxis: new DimensionFieldSchema({
@@ -678,8 +819,8 @@ const filterPropsV1 = exports.filterPropsV1 = {
678
819
  // polygon filter properties
679
820
  layerId: null,
680
821
  speed: null
681
- };
682
- const propertiesV0 = exports.propertiesV0 = {
822
+ });
823
+ var propertiesV0 = exports.propertiesV0 = {
683
824
  filters: new FilterSchemaV0({
684
825
  version: _versions.VERSIONS.v0,
685
826
  properties: filterPropsV0
@@ -694,7 +835,7 @@ const propertiesV0 = exports.propertiesV0 = {
694
835
  }),
695
836
  layerBlending: null
696
837
  };
697
- const propertiesV1 = exports.propertiesV1 = {
838
+ var propertiesV1 = exports.propertiesV1 = {
698
839
  filters: new FilterSchemaV0({
699
840
  version: _versions.VERSIONS.v1,
700
841
  properties: filterPropsV1
@@ -712,7 +853,7 @@ const propertiesV1 = exports.propertiesV1 = {
712
853
  key: 'splitMaps',
713
854
  version: _versions.VERSIONS.v1
714
855
  }),
715
- animationConfig: new _schema.default({
856
+ animationConfig: new _schema["default"]({
716
857
  version: _versions.VERSIONS.v1,
717
858
  properties: {
718
859
  currentTime: null,
@@ -721,24 +862,25 @@ const propertiesV1 = exports.propertiesV1 = {
721
862
  key: 'animationConfig'
722
863
  })
723
864
  };
724
- const visStateSchemaV0 = exports.visStateSchemaV0 = new _schema.default({
865
+ var visStateSchemaV0 = exports.visStateSchemaV0 = new _schema["default"]({
725
866
  version: _versions.VERSIONS.v0,
726
867
  properties: propertiesV0,
727
868
  key: 'visState'
728
869
  });
729
- const visStateSchemaV1 = exports.visStateSchemaV1 = new _schema.default({
870
+ var visStateSchemaV1 = exports.visStateSchemaV1 = new _schema["default"]({
730
871
  version: _versions.VERSIONS.v1,
731
872
  properties: propertiesV1,
732
873
  key: 'visState'
733
874
  });
734
- const visStateSchema = exports.visStateSchema = {
735
- [_versions.VERSIONS.v0]: {
736
- save: toSave => visStateSchemaV0.save(toSave),
737
- load: toLoad => visStateSchemaV1.load(visStateSchemaV0.load(toLoad).visState)
875
+ var visStateSchema = exports.visStateSchema = (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _versions.VERSIONS.v0, {
876
+ save: function save(toSave) {
877
+ return visStateSchemaV0.save(toSave);
738
878
  },
739
- [_versions.VERSIONS.v1]: visStateSchemaV1
740
- };
879
+ load: function load(toLoad) {
880
+ return visStateSchemaV1.load(visStateSchemaV0.load(toLoad).visState);
881
+ }
882
+ }), _versions.VERSIONS.v1, visStateSchemaV1);
741
883
 
742
884
  // test load v0
743
- var _default = exports.default = visStateSchema;
744
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGljayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnNpb25zIiwiX2ZpbHRlclV0aWxzIiwiX2xheWVyRmFjdG9yeSIsIl9zY2hlbWEiLCJfY2xvbmVEZWVwIiwiX2RhdGFVdGlscyIsImRpbWVuc2lvblByb3BzVjAiLCJleHBvcnRzIiwiZ2VvanNvblNpemVGaWVsZFYwVG9WMSIsImNvbmZpZyIsImRlZmF1bHRSYWl1ZHMiLCJkZWZhdWx0UmFkaXVzUmFuZ2UiLCJ2aXNDb25maWciLCJleHRydWRlZCIsInN0cm9rZWQiLCJyYWRpdXMiLCJyYWRpdXNSYW5nZSIsInNvbWUiLCJkIiwiaSIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hVjAiLCJTY2hlbWEiLCJjb25zdHJ1Y3RvciIsImFyZ3VtZW50cyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiVkVSU0lPTlMiLCJ2MCIsInNhdmUiLCJmaWVsZCIsImtleSIsInNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYSIsImxvYWQiLCJwYXJlbnRzIiwiYWNjdW11bGF0ZWQiLCJzbGljZSIsImZpZWxkTmFtZSIsInR5cGUiLCJ2aXN1YWxDaGFubmVscyIsIkRpbWVuc2lvblNjYWxlU2NoZW1hVjAiLCJzY2FsZSIsIkxheWVyQ29uZmlnU2NoZW1hVjAiLCJzYXZlZCIsIkxheWVyQ29sdW1uc1NjaGVtYVYwIiwiY29sdW1ucyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhY2N1IiwidmFsdWUiLCJMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAiLCJhY2N1bXVsYXRlZENvbmZpZyIsIkxheWVyVmlzQ29uZmlnU2NoZW1hVjAiLCJhY2N1bXVsYXRvciIsInJlbmFtZSIsImdlb2pzb24iLCJlbGV2YXRpb25SYW5nZSIsInByb3BUb1JlbmFtZSIsIkxheWVyQ29uZmlnU2NoZW1hRGVsZXRlVjAiLCJsYXllclByb3BzVjAiLCJpZCIsImRhdGFJZCIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Qnlab29tIiwiY29sb3JGaWVsZCIsInByb3BlcnRpZXMiLCJjb2xvclNjYWxlIiwic2l6ZUZpZWxkIiwic2l6ZVNjYWxlIiwiZW5hYmxlM2QiLCJjb2xvckFnZ3JlZ2F0aW9uIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaXNBZ2dyZWdhdGVkIiwiQ29sdW1uU2NoZW1hVjEiLCJzdGF0ZSIsImNrZXkiLCJUZXh0TGFiZWxTY2hlbWFWMSIsInRleHRMYWJlbCIsIm1hcCIsInRsIiwicGljayIsIkFycmF5IiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIm1vZGlmaWVkIiwiTGVnZW5kU2V0dGluZ3NWMSIsImxlZ2VuZFNldHRpbmdzIiwibHMiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50Iiwic3Ryb2tlQ29sb3IiLCJzdHJva2VDb2xvclJhbmdlIiwiY2xvbmVEZWVwIiwiY29sb3JSYW5nZSIsIm91dGxpbmUiLCJmaWxsZWQiLCJWaXNDb25maWdTY2hlbWFWMSIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsImxheWVycyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsInB1c2giLCJsb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJGaWx0ZXJTY2hlbWFWMCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiaW50ZXJhY3Rpb25Db25maWciLCJlbmFibGVkIiwiQm9vbGVhbiIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJtb2RpZmllZENvbmZpZyIsImZvckVhY2giLCJjb25maWdUeXBlIiwiZmllbGRzVG9TaG93Iiwibm90TnVsbG9yVW5kZWZpbmVkIiwiZmllbGREYXRhIiwibmFtZSIsImZvcm1hdCIsInVuZGVmaW5lZCIsImZpbHRlclByb3BzVjAiLCJlbmxhcmdlZCIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hIiwiU3BsaXRNYXBzU2NoZW1hIiwiY29udmVydExheWVyU2V0dGluZ3MiLCJfcmVmIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJzZXR0aW5ncyIsImVudHJpZXMiLCJmaWx0ZXJQcm9wc1YxIiwicGxvdFR5cGUiLCJhbmltYXRpb25XaW5kb3ciLCJ5QXhpcyIsImxheWVySWQiLCJzcGVlZCIsInByb3BlcnRpZXNWMCIsImxheWVyQmxlbmRpbmciLCJwcm9wZXJ0aWVzVjEiLCJhbmltYXRpb25Db25maWciLCJjdXJyZW50VGltZSIsInZpc1N0YXRlU2NoZW1hVjAiLCJ2aXNTdGF0ZVNjaGVtYVYxIiwidmlzU3RhdGVTY2hlbWEiLCJ0b1NhdmUiLCJ0b0xvYWQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHtWRVJTSU9OU30gZnJvbSAnLi92ZXJzaW9ucyc7XG5pbXBvcnQge2lzVmFsaWRGaWx0ZXJWYWx1ZX0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcblxuLyoqXG4gKiBWMCBTY2hlbWFcbiAqL1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uUHJvcHNWMCA9IFsnbmFtZScsICd0eXBlJ107XG5cbmV4cG9ydCB0eXBlIG1vZGlmaWVkVHlwZSA9IHtcbiAgc3Ryb2tlQ29sb3I/OiBhbnk7XG4gIHN0cm9rZUNvbG9yUmFuZ2U/OiBhbnk7XG4gIGZpbGxlZD86IGJvb2xlYW47XG4gIHN0cm9rZWQ/OiBib29sZWFuO1xufTtcblxuLy8gaW4gdjAgZ2VvanNvbiB0aGVyZSBpcyBvbmx5IHNpemVGaWVsZFxuXG4vLyBpbiB2MSBnZW9qc29uXG4vLyBzdHJva2UgYmFzZSBvbiAtPiBzaXplRmllbGRcbi8vIGhlaWdodCBiYXNlZCBvbiAtPiBoZWlnaHRGaWVsZFxuLy8gcmFkaXVzIGJhc2VkIG9uIC0+IHJhZGl1c0ZpZWxkXG4vLyBoZXJlIHdlIG1ha2Ugb3VyIHdpcmVkc3QgZ3Vlc3Mgb24gd2hpY2ggY2hhbm5lbCBzaXplRmllbGQgYmVsb25ncyB0b1xuZnVuY3Rpb24gZ2VvanNvblNpemVGaWVsZFYwVG9WMShjb25maWcpIHtcbiAgY29uc3QgZGVmYXVsdFJhaXVkcyA9IDEwO1xuICBjb25zdCBkZWZhdWx0UmFkaXVzUmFuZ2UgPSBbMCwgNTBdO1xuXG4gIC8vIGlmIGV4dHJ1ZGVkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgaGVpZ2h0XG4gIGlmIChjb25maWcudmlzQ29uZmlnLmV4dHJ1ZGVkKSB7XG4gICAgcmV0dXJuICdoZWlnaHRGaWVsZCc7XG4gIH1cblxuICAvLyBpZiBzaG93IHN0cm9rZSBlbmFibGVkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3Igc3Ryb2tlXG4gIGlmIChjb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICByZXR1cm4gJ3NpemVGaWVsZCc7XG4gIH1cblxuICAvLyBpZiByYWRpdXMgY2hhbmdlZCwgb3IgcmFkaXVzIFJhbmdlIENoYW5nZWQsIHNpemVGaWVsZCBpcyBtb3N0IGxpa2VseSB1c2VkIGZvciByYWRpdXNcbiAgLy8gdGhpcyBpcyB0aGUgbW9zdCB1bnJlbGlhYmxlIGd1ZXNzLCB0aGF0J3Mgd2h5IHdlIHB1dCBpdCBpbiB0aGUgZW5kXG4gIGlmIChcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gZGVmYXVsdFJhaXVkcyB8fFxuICAgIGNvbmZpZy52aXNDb25maWcucmFkaXVzUmFuZ2Uuc29tZSgoZCwgaSkgPT4gZCAhPT0gZGVmYXVsdFJhZGl1c1JhbmdlW2ldKVxuICApIHtcbiAgICByZXR1cm4gJ3JhZGl1c0ZpZWxkJztcbiAgfVxuXG4gIHJldHVybiAnc2l6ZUZpZWxkJztcbn1cblxuLy8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIERpbWVuc2lvbkZpZWxkU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoZmllbGQpIHtcbiAgICAvLyBzaG91bGQgbm90IGJlIGNhbGxlZCBhbnltb3JlXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IGZpZWxkICE9PSBudWxsID8gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZmllbGQpW3RoaXMua2V5XSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgbG9hZChmaWVsZCwgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICBjb25zdCBbY29uZmlnXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGxldCBmaWVsZE5hbWUgPSB0aGlzLmtleTtcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdnZW9qc29uJyAmJiB0aGlzLmtleSA9PT0gJ3NpemVGaWVsZCcgJiYgZmllbGQpIHtcbiAgICAgIGZpZWxkTmFtZSA9IGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKTtcbiAgICB9XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc3VhbENoYW5uZWxzOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC52aXN1YWxDaGFubmVscyB8fCB7fSksXG4gICAgICAgIFtmaWVsZE5hbWVdOiBmaWVsZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgc2F2ZShzY2FsZSkge1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogc2NhbGV9O1xuICB9XG4gIGxvYWQoc2NhbGUsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICAvLyBmb2xkIGludG8gdmlzdWFsQ2hhbm5lbHMgdG8gYmUgbG9hZCBieSBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgICBpZiAodGhpcy5rZXkgPT09ICdzaXplU2NhbGUnICYmIGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicpIHtcbiAgICAgIC8vIHNpemVTY2FsZSBub3cgc3BsaXQgaW50byByYWRpdXNTY2FsZSwgaGVpZ2h0U2NhbGVcbiAgICAgIC8vIG5vIHVzZXIgY3VzdG9taXphdGlvbiwganVzdCB1c2UgZGVmYXVsdFxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzY2FsZVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZChzYXZlZCwgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICAvLyBmb2xkIHYwIGxheWVyIHByb3BlcnR5IGludG8gY29uZmlnLmtleVxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIFt0aGlzLmtleV06IHNhdmVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29sdW1uc1xuLy8gb25seSByZXR1cm4gY29sdW1uIHZhbHVlIGZvciBlYWNoIGNvbHVtblxuY2xhc3MgTGF5ZXJDb2x1bW5zU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXksIGZsYXR0ZW4gY29sdW1uc1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIGNvbHVtbnM6IE9iamVjdC5rZXlzKHNhdmVkKS5yZWR1Y2UoXG4gICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICBba2V5XTogc2F2ZWRba2V5XS52YWx1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWcudmlzQ29uZmlnXG5jbGFzcyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy52aXNDb25maWdcbiAgICBjb25zdCBhY2N1bXVsYXRlZENvbmZpZyA9IGFjY3VtdWxhdGVkLmNvbmZpZyB8fCB7fTtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLmFjY3VtdWxhdGVkQ29uZmlnLFxuICAgICAgICB2aXNDb25maWc6IHtcbiAgICAgICAgICAuLi4oYWNjdW11bGF0ZWRDb25maWcudmlzQ29uZmlnIHx8IHt9KSxcbiAgICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBMYXllclZpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBrZXkgPSAndmlzQ29uZmlnJztcblxuICBsb2FkKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICBjb25zdCBbY29uZmlnXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IHJlbmFtZSA9IHtcbiAgICAgIGdlb2pzb246IHtcbiAgICAgICAgZXh0cnVkZWQ6ICdlbmFibGUzZCcsXG4gICAgICAgIGVsZXZhdGlvblJhbmdlOiAnaGVpZ2h0UmFuZ2UnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChjb25maWcudHlwZSBpbiByZW5hbWUpIHtcbiAgICAgIGNvbnN0IHByb3BUb1JlbmFtZSA9IHJlbmFtZVtjb25maWcudHlwZV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi4oYWNjdW11bGF0b3IuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgICB2aXNDb25maWc6IE9iamVjdC5rZXlzKHZpc0NvbmZpZykucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKHByb3BUb1JlbmFtZVtrZXldXG4gICAgICAgICAgICAgICAgPyB7W3Byb3BUb1JlbmFtZVtrZXldXTogdmlzQ29uZmlnW2tleV19XG4gICAgICAgICAgICAgICAgOiB7W2tleV06IHZpc0NvbmZpZ1trZXldfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi4oYWNjdW11bGF0b3IuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgdmlzQ29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogVjAgLT4gVjEgQ2hhbmdlc1xuICogLSBsYXllciBpcyBub3cgYSBjbGFzc1xuICogLSBjb25maWcgc2F2ZWQgaW4gYSBjb25maWcgb2JqZWN0XG4gKiAtIGlkLCB0eXBlLCBpc0FnZ3JlZ2F0ZWQgaXMgb3V0c2lkZSBsYXllci5jb25maWdcbiAqIC0gdmlzdWFsQ2hhbm5lbHMgaXMgb3V0c2lkZSBjb25maWcsIGl0IGRlZmluZXMgYXZhaWxhYmxlIHZpc3VhbCBjaGFubmVsIGFuZFxuICogICBwcm9wZXJ0eSBuYW1lcyBmb3IgZmllbGQsIHNjYWxlLCBkb21haW4gYW5kIHJhbmdlIG9mIGVhY2ggdmlzdWFsIGNoYW5lbC5cbiAqIC0gZW5hYmxlM2QsIGNvbG9yQWdncmVnYXRpb24gYW5kIHNpemVBZ2dyZWdhdGlvbiBhcmUgbW92ZWQgaW50byB2aXNDb25maWdcbiAqIC0gR2VvanNvbkxheWVyIC0gYWRkZWQgaGVpZ2h0LCByYWRpdXMgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5cbmV4cG9ydCBjb25zdCBsYXllclByb3BzVjAgPSB7XG4gIGlkOiBudWxsLFxuICB0eXBlOiBudWxsLFxuXG4gIC8vIG1vdmUgaW50byBsYXllci5jb25maWdcbiAgZGF0YUlkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnZGF0YUlkJ30pLFxuICBsYWJlbDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2xhYmVsJ30pLFxuICBjb2xvcjogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2NvbG9yJ30pLFxuICBpc1Zpc2libGU6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdpc1Zpc2libGUnfSksXG4gIGhpZGRlbjogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2hpZGRlbid9KSxcbiAgdmlzaWJpbGl0eUJ5Wm9vbTogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc2liaWxpdHlCeVpvb20nfSksXG5cbiAgLy8gY29udmVydCB2aXNDb25maWdcbiAgdmlzQ29uZmlnOiBuZXcgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCh7a2V5OiAndmlzQ29uZmlnJ30pLFxuXG4gIC8vIG1vdmUgaW50byBsYXllci5jb25maWdcbiAgLy8gZmxhdHRlblxuICBjb2x1bW5zOiBuZXcgTGF5ZXJDb2x1bW5zU2NoZW1hVjAoKSxcblxuICAvLyBzYXZlIGludG8gdmlzdWFsQ2hhbm5lbHNcbiAgY29sb3JGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnY29sb3JGaWVsZCdcbiAgfSksXG4gIGNvbG9yU2NhbGU6IG5ldyBEaW1lbnNpb25TY2FsZVNjaGVtYVYwKHtcbiAgICBrZXk6ICdjb2xvclNjYWxlJ1xuICB9KSxcbiAgc2l6ZUZpZWxkOiBuZXcgRGltZW5zaW9uRmllbGRTY2hlbWFWMCh7XG4gICAgcHJvcGVydGllczogZGltZW5zaW9uUHJvcHNWMCxcbiAgICBrZXk6ICdzaXplRmllbGQnXG4gIH0pLFxuICBzaXplU2NhbGU6IG5ldyBEaW1lbnNpb25TY2FsZVNjaGVtYVYwKHtcbiAgICBrZXk6ICdzaXplU2NhbGUnXG4gIH0pLFxuXG4gIC8vIG1vdmUgaW50byBjb25maWcudmlzQ29uZmlnXG4gIGVuYWJsZTNkOiBuZXcgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwKHtrZXk6ICdlbmFibGUzZCd9KSxcbiAgY29sb3JBZ2dyZWdhdGlvbjogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JBZ2dyZWdhdGlvbidcbiAgfSksXG4gIHNpemVBZ2dyZWdhdGlvbjogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnc2l6ZUFnZ3JlZ2F0aW9uJ30pLFxuXG4gIC8vIGRlbGV0ZVxuICBpc0FnZ3JlZ2F0ZWQ6IG5ldyBMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwKClcbn07XG5cbi8qKlxuICogVjEgU2NoZW1hXG4gKi9cbmNsYXNzIENvbHVtblNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShjb2x1bW5zLCBzdGF0ZSkge1xuICAgIC8vIHN0YXJ0aW5nIGZyb20gdjEsIG9ubHkgc2F2ZSBjb2x1bW4gdmFsdWVcbiAgICAvLyBmaWVsZElkeCB3aWxsIGJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lcmdlXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IE9iamVjdC5rZXlzKGNvbHVtbnMpLnJlZHVjZShcbiAgICAgICAgKGFjY3UsIGNrZXkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICBbY2tleV06IGNvbHVtbnNbY2tleV0udmFsdWVcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoY29sdW1ucykge1xuICAgIHJldHVybiB7Y29sdW1uc307XG4gIH1cbn1cblxuY2xhc3MgVGV4dExhYmVsU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKHRleHRMYWJlbCkge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiB0ZXh0TGFiZWwubWFwKHRsID0+ICh7XG4gICAgICAgIC4uLnRsLFxuICAgICAgICBmaWVsZDogdGwuZmllbGQgPyBwaWNrKHRsLmZpZWxkLCBbJ25hbWUnLCAndHlwZSddKSA6IG51bGxcbiAgICAgIH0pKVxuICAgIH07XG4gIH1cblxuICBsb2FkKHRleHRMYWJlbCkge1xuICAgIHJldHVybiB7dGV4dExhYmVsOiBBcnJheS5pc0FycmF5KHRleHRMYWJlbCkgPyB0ZXh0TGFiZWwgOiBbdGV4dExhYmVsXX07XG4gIH1cbn1cblxuY29uc3QgdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxID0ge1xuICBnZW9qc29uOiAodmMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSA9PiB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IGlzT2xkID0gIXZjLmhhc093blByb3BlcnR5KCdzdHJva2VDb2xvckZpZWxkJyk7XG4gICAgLy8gbWFrZSBvdXIgYmVzdCBndWVzcyBpZiB0aGlzIGdlb2pzb24gbGF5ZXIgY29udGFpbnMgcG9pbnRcbiAgICBjb25zdCBpc1BvaW50ID1cbiAgICAgIHZjLnJhZGl1c0ZpZWxkIHx8IGxheWVyLmNvbmZpZy52aXNDb25maWcucmFkaXVzICE9PSBMQVlFUl9WSVNfQ09ORklHUy5yYWRpdXMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGlzT2xkICYmICFpc1BvaW50ICYmIGxheWVyLmNvbmZpZy52aXNDb25maWcuc3Ryb2tlZCkge1xuICAgICAgLy8gaWYgc3Ryb2tlZCBpcyB0cnVlLCBjb3B5IGNvbG9yIGNvbmZpZyB0byBzdHJva2UgY29sb3IgY29uZmlnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHJva2VDb2xvckZpZWxkOiB2Yy5jb2xvckZpZWxkLFxuICAgICAgICBzdHJva2VDb2xvclNjYWxlOiB2Yy5jb2xvclNjYWxlXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cbn07XG4vKipcbiAqIFYxOiBzYXZlIFtmaWVsZF06IHtuYW1lLCB0eXBlfSwgW3NjYWxlXTogJycgZm9yIGVhY2ggY2hhbm5lbFxuICovXG5jbGFzcyBWaXN1YWxDaGFubmVsU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKHZpc3VhbENoYW5uZWxzLCBwYXJlbnRzKSB7XG4gICAgLy8gb25seSBzYXZlIGZpZWxkIGFuZCBzY2FsZSBvZiBlYWNoIGNoYW5uZWxcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IE9iamVjdC5rZXlzKHZpc3VhbENoYW5uZWxzKS5yZWR1Y2UoXG4gICAgICAgIC8vICBzYXZlIGNoYW5uZWwgdG8gbnVsbCBpZiBkaWRuJ3Qgc2VsZWN0IGFueSBmaWVsZFxuICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF1cbiAgICAgICAgICAgID8gcGljayhsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0sIFsnbmFtZScsICd0eXBlJywgJ2NvbG9yQ29sdW1uJ10pXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbHNba2V5XS5zY2FsZV1cbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuICBsb2FkKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikge1xuICAgIC8vIGZvbGQgY2hhbm5lbHMgaW50byBjb25maWdcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB2aXN1YWxDaGFubmVsTW9kaWZpY2F0aW9uVjFbbGF5ZXIudHlwZV1cbiAgICAgID8gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcilcbiAgICAgIDoge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjdW11bGF0b3IsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIC4uLnZjLFxuICAgICAgICAuLi5tb2RpZmllZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogVjE6IHNhdmUgW2NoYW5uZWxdOiBbeyBsYWJlbCwgY29sb3IgfSwgLi4uXSBmb3IgbGVnZW5kXG4gKi9cbmNsYXNzIExlZ2VuZFNldHRpbmdzVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKGxlZ2VuZFNldHRpbmdzLCBwYXJlbnRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IE9iamVjdC5rZXlzKGxlZ2VuZFNldHRpbmdzKS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgICBhY2N1W2tleV0gPSBsZWdlbmRTZXR0aW5nc1trZXldO1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH0sIHt9KVxuICAgIH07XG4gIH1cbiAgbG9hZChscywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjdW11bGF0b3IsXG4gICAgICBbdGhpcy5rZXldOiBsc1xuICAgIH07XG4gIH1cbn1cbmNvbnN0IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxID0ge1xuICBwb2ludDogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICBjb25zdCBtb2RpZmllZDogbW9kaWZpZWRUeXBlID0ge307XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBpc09sZCA9XG4gICAgICAhdmlzQ29uZmlnLmhhc093blByb3BlcnR5KCdmaWxsZWQnKSAmJiAhdmlzQ29uZmlnLnN0cm9rZUNvbG9yICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3JSYW5nZTtcbiAgICBpZiAoaXNPbGQpIHtcbiAgICAgIC8vIGNvbG9yIGNvbG9yICYgY29sb3IgcmFuZ2UgdG8gc3Ryb2tlIGNvbG9yXG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvciA9IGxheWVyLmNvbmZpZy5jb2xvcjtcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yUmFuZ2UgPSBjbG9uZURlZXAodmlzQ29uZmlnLmNvbG9yUmFuZ2UpO1xuICAgICAgaWYgKHZpc0NvbmZpZy5vdXRsaW5lKSB7XG4gICAgICAgIC8vIHBvaW50IGxheWVyIG5vdyBzdXBwb3J0cyBib3RoIG91dGxpbmUgYW5kIGZpbGxcbiAgICAgICAgLy8gZm9yIG9sZGVyIHNjaGVtYSB3aGVyZSBmaWxsZWQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHBvaW50IGxheWVyXG4gICAgICAgIC8vIHNldCBpdCB0byBmYWxzZVxuICAgICAgICBtb2RpZmllZC5maWxsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH0sXG4gIGdlb2pzb246ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgLy8gaXMgcG9pbnRzP1xuICAgIGNvbnN0IG1vZGlmaWVkOiBtb2RpZmllZFR5cGUgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgIGxheWVyLnZpc3VhbENoYW5uZWxzICYmXG4gICAgICAhbGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKSAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICAobGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiYgbGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzRmllbGQpIHx8XG4gICAgICAodmlzQ29uZmlnICYmIHZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmIChpc1BvaW50KSB7XG4gICAgICAgIC8vIGlmIGlzIHBvaW50LCBzZXQgc3Ryb2tlIHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IHRydWU7XG4gICAgICAgIG1vZGlmaWVkLnN0cm9rZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH1cbn07XG5cbmNsYXNzIFZpc0NvbmZpZ1NjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAuLi52aXNDb25maWcsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YxID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgY29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdjb25maWcnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGRhdGFJZDogbnVsbCxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgY29sb3I6IG51bGwsXG4gICAgICBoaWdobGlnaHRDb2xvcjogbnVsbCxcbiAgICAgIGNvbHVtbnM6IG5ldyBDb2x1bW5TY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICdjb2x1bW5zJ1xuICAgICAgfSksXG4gICAgICBpc1Zpc2libGU6IG51bGwsXG4gICAgICB2aXNDb25maWc6IG5ldyBWaXNDb25maWdTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gICAgICB9KSxcbiAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IG51bGwsXG4gICAgICB0ZXh0TGFiZWw6IG5ldyBUZXh0TGFiZWxTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICd0ZXh0TGFiZWwnXG4gICAgICB9KVxuICAgIH1cbiAgfSksXG4gIGxlZ2VuZFNldHRpbmdzOiBuZXcgTGVnZW5kU2V0dGluZ3NWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnbGVnZW5kU2V0dGluZ3MnXG4gIH0pLFxuICB2aXN1YWxDaGFubmVsczogbmV3IFZpc3VhbENoYW5uZWxTY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAndmlzdWFsQ2hhbm5lbHMnXG4gIH0pXG59O1xuXG5leHBvcnQgY2xhc3MgTGF5ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdsYXllcnMnO1xuXG4gIHNhdmUobGF5ZXJzLCBwYXJlbnRzKSB7XG4gICAgY29uc3QgW3Zpc1N0YXRlXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IHZpc1N0YXRlLmxheWVyT3JkZXIucmVkdWNlKChzYXZlZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gc2F2ZSBsYXllcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlbmRlcmluZyBvcmRlclxuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpbmRleF07XG4gICAgICAgIGlmIChsYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgICAgICBzYXZlZC5wdXNoKHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyKS5sYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGxheWVycykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBsYXllcnMubWFwKGxheWVyID0+IHRoaXMubG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyLCBsYXllcnMpLmxheWVycylcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdmaWx0ZXJzJztcbiAgc2F2ZShmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnNcbiAgICAgICAgLmZpbHRlcihpc1ZhbGlkRmlsdGVyVmFsdWUpXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpbHRlcikuZmlsdGVycylcbiAgICB9O1xuICB9XG4gIGxvYWQoZmlsdGVycykge1xuICAgIHJldHVybiB7ZmlsdGVyc307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YwID0gWyd0b29sdGlwJywgJ2JydXNoJ107XG5cbmNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZCA/IHtba2V5XTogaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWd9IDoge30pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBjb252ZXJ0IHYwIC0+IHYxXG4gICAgLy8gcmV0dXJuIGVuYWJsZWQ6IGZhbHNlIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oaW50ZXJhY3Rpb25Db25maWdba2V5XSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YxID0gWy4uLmludGVyYWN0aW9uUHJvcHNWMCwgJ2dlb2NvZGVyJywgJ2Nvb3JkaW5hdGUnXTtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBzYXZlIGNvbmZpZyBldmVuIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICBjb25zdCBtb2RpZmllZENvbmZpZyA9IGludGVyYWN0aW9uQ29uZmlnO1xuICAgIE9iamVjdC5rZXlzKGludGVyYWN0aW9uQ29uZmlnKS5mb3JFYWNoKGNvbmZpZ1R5cGUgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1R5cGUgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1Nob3cgPSBtb2RpZmllZENvbmZpZ1tjb25maWdUeXBlXS5maWVsZHNUb1Nob3c7XG4gICAgICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGZpZWxkc1RvU2hvdykpIHtcbiAgICAgICAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNUb1Nob3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3dba2V5XSA9IGZpZWxkc1RvU2hvd1trZXldLm1hcChmaWVsZERhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZERhdGEubmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkRGF0YSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWVsZERhdGE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyUHJvcHNWMCA9IHtcbiAgZGF0YUlkOiBudWxsLFxuICBpZDogbnVsbCxcbiAgbmFtZTogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgdmFsdWU6IG51bGwsXG4gIGVubGFyZ2VkOiBudWxsXG59O1xuXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uRmllbGRTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKGZpZWxkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IGZpZWxkID8gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZmllbGQpW3RoaXMua2V5XSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgbG9hZChmaWVsZCkge1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogZmllbGR9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGxpdE1hcHNTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBjb252ZXJ0TGF5ZXJTZXR0aW5ncyhhY2N1LCBba2V5LCB2YWx1ZV0pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBCb29sZWFuKHZhbHVlLmlzVmlzaWJsZSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9XG5cbiAgbG9hZChzcGxpdE1hcHMpIHtcbiAgICAvLyBwcmV2aW91cyBzcGxpdE1hcHMgU2NoZW1hIHtsYXllcnM6IHtsYXllcklkOiB7aXNWaXNpYmxlLCBpc0F2YWlsYWJsZX19fVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNwbGl0TWFwcykgfHwgIXNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7c3BsaXRNYXBzOiBbXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiAoe1xuICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgbGF5ZXJzOiBPYmplY3QuZW50cmllcyhzZXR0aW5ncy5sYXllcnMgfHwge30pLnJlZHVjZSh0aGlzLmNvbnZlcnRMYXllclNldHRpbmdzLCB7fSlcbiAgICAgIH0pKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlclByb3BzVjEgPSB7XG4gIC4uLmZpbHRlclByb3BzVjAsXG4gIHBsb3RUeXBlOiBudWxsLFxuICBhbmltYXRpb25XaW5kb3c6IG51bGwsXG4gIHlBeGlzOiBuZXcgRGltZW5zaW9uRmllbGRTY2hlbWEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIGtleTogJ3lBeGlzJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBuYW1lOiBudWxsLFxuICAgICAgdHlwZTogbnVsbFxuICAgIH1cbiAgfSksXG5cbiAgLy8gcG9seWdvbiBmaWx0ZXIgcHJvcGVydGllc1xuICBsYXllcklkOiBudWxsLFxuICBzcGVlZDogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnRpZXNWMCA9IHtcbiAgZmlsdGVyczogbmV3IEZpbHRlclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJQcm9wc1YwXG4gIH0pLFxuICBsYXllcnM6IG5ldyBMYXllclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBsYXllclByb3BzVjBcbiAgfSksXG4gIGludGVyYWN0aW9uQ29uZmlnOiBuZXcgSW50ZXJhY3Rpb25TY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogaW50ZXJhY3Rpb25Qcm9wc1YwXG4gIH0pLFxuICBsYXllckJsZW5kaW5nOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydGllc1YxID0ge1xuICBmaWx0ZXJzOiBuZXcgRmlsdGVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGZpbHRlclByb3BzVjFcbiAgfSksXG4gIGxheWVyczogbmV3IExheWVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGxheWVyUHJvcHNWMVxuICB9KSxcbiAgaW50ZXJhY3Rpb25Db25maWc6IG5ldyBJbnRlcmFjdGlvblNjaGVtYVYxKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBpbnRlcmFjdGlvblByb3BzVjFcbiAgfSksXG4gIGxheWVyQmxlbmRpbmc6IG51bGwsXG4gIHNwbGl0TWFwczogbmV3IFNwbGl0TWFwc1NjaGVtYSh7XG4gICAga2V5OiAnc3BsaXRNYXBzJyxcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MVxuICB9KSxcbiAgYW5pbWF0aW9uQ29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBjdXJyZW50VGltZTogbnVsbCxcbiAgICAgIHNwZWVkOiBudWxsXG4gICAgfSxcbiAgICBrZXk6ICdhbmltYXRpb25Db25maWcnXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgdmlzU3RhdGVTY2hlbWFWMCA9IG5ldyBTY2hlbWEoe1xuICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgcHJvcGVydGllczogcHJvcGVydGllc1YwLFxuICBrZXk6ICd2aXNTdGF0ZSdcbn0pO1xuXG5leHBvcnQgY29uc3QgdmlzU3RhdGVTY2hlbWFWMSA9IG5ldyBTY2hlbWEoe1xuICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgcHJvcGVydGllczogcHJvcGVydGllc1YxLFxuICBrZXk6ICd2aXNTdGF0ZSdcbn0pO1xuXG5leHBvcnQgY29uc3QgdmlzU3RhdGVTY2hlbWEgPSB7XG4gIFtWRVJTSU9OUy52MF06IHtcbiAgICBzYXZlOiB0b1NhdmUgPT4gdmlzU3RhdGVTY2hlbWFWMC5zYXZlKHRvU2F2ZSksXG4gICAgbG9hZDogdG9Mb2FkID0+IHZpc1N0YXRlU2NoZW1hVjEubG9hZCh2aXNTdGF0ZVNjaGVtYVYwLmxvYWQodG9Mb2FkKS52aXNTdGF0ZSlcbiAgfSxcbiAgW1ZFUlNJT05TLnYxXTogdmlzU3RhdGVTY2hlbWFWMVxufTtcblxuLy8gdGVzdCBsb2FkIHYwXG5leHBvcnQgZGVmYXVsdCB2aXNTdGF0ZVNjaGVtYTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFvQkEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQVVBO0FBQ0E7QUFDQTs7QUFFTyxNQUFNTyxnQkFBZ0IsR0FBQUMsT0FBQSxDQUFBRCxnQkFBQSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FB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VUFBVSxFQUFFMkM7RUFDZCxDQUFDLENBQUM7RUFDRmtCLGlCQUFpQixFQUFFLElBQUlJLG1CQUFtQixDQUFDO0lBQ3pDckIsT0FBTyxFQUFFdEYsa0JBQVEsQ0FBQ3VGLEVBQUU7SUFDcEI3QyxVQUFVLEVBQUVnRTtFQUNkLENBQUMsQ0FBQztFQUNGNkIsYUFBYSxFQUFFLElBQUk7RUFDbkJYLFNBQVMsRUFBRSxJQUFJSixlQUFlLENBQUM7SUFDN0JwSCxHQUFHLEVBQUUsV0FBVztJQUNoQmtGLE9BQU8sRUFBRXRGLGtCQUFRLENBQUN1RjtFQUNwQixDQUFDLENBQUM7RUFDRmtELGVBQWUsRUFBRSxJQUFJOUksZUFBTSxDQUFDO0lBQzFCMkYsT0FBTyxFQUFFdEYsa0JBQVEsQ0FBQ3VGLEVBQUU7SUFDcEI3QyxVQUFVLEVBQUU7TUFDVmdHLFdBQVcsRUFBRSxJQUFJO01BQ2pCTCxLQUFLLEVBQUU7SUFDVCxDQUFDO0lBQ0RqSSxHQUFHLEVBQUU7RUFDUCxDQUFDO0FBQ0gsQ0FBQztBQUVNLE1BQU11SSxnQkFBZ0IsR0FBQTlKLE9BQUEsQ0FBQThKLGdCQUFBLEdBQUcsSUFBSWhKLGVBQU0sQ0FBQztFQUN6QzJGLE9BQU8sRUFBRXRGLGtCQUFRLENBQUNDLEVBQUU7RUFDcEJ5QyxVQUFVLEVBQUU0RixZQUFZO0VBQ3hCbEksR0FBRyxFQUFFO0FBQ1AsQ0FBQyxDQUFDO0FBRUssTUFBTXdJLGdCQUFnQixHQUFBL0osT0FBQSxDQUFBK0osZ0JBQUEsR0FBRyxJQUFJakosZUFBTSxDQUFDO0VBQ3pDMkYsT0FBTyxFQUFFdEYsa0JBQVEsQ0FBQ3VGLEVBQUU7RUFDcEI3QyxVQUFVLEVBQUU4RixZQUFZO0VBQ3hCcEksR0FBRyxFQUFFO0FBQ1AsQ0FBQyxDQUFDO0FBRUssTUFBTXlJLGNBQWMsR0FBQWhLLE9BQUEsQ0FBQWdLLGNBQUEsR0FBRztFQUM1QixDQUFDN0ksa0JBQVEsQ0FBQ0MsRUFBRSxHQUFHO0lBQ2JDLElBQUksRUFBRTRJLE1BQU0sSUFBSUgsZ0JBQWdCLENBQUN6SSxJQUFJLENBQUM0SSxNQUFNLENBQUM7SUFDN0N4SSxJQUFJLEVBQUV5SSxNQUFNLElBQUlILGdCQUFnQixDQUFDdEksSUFBSSxDQUFDcUksZ0JBQWdCLENBQUNySSxJQUFJLENBQUN5SSxNQUFNLENBQUMsQ0FBQ3BELFFBQVE7RUFDOUUsQ0FBQztFQUNELENBQUMzRixrQkFBUSxDQUFDdUYsRUFBRSxHQUFHcUQ7QUFDakIsQ0FBQzs7QUFFRDtBQUFBLElBQUFJLFFBQUEsR0FBQW5LLE9BQUEsQ0FBQWtCLE9BQUEsR0FDZThJLGNBQWMiLCJpZ25vcmVMaXN0IjpbXX0=
885
+ var _default = exports["default"] = visStateSchema;
886
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGljayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnNpb25zIiwiX2ZpbHRlclV0aWxzIiwiX2xheWVyRmFjdG9yeSIsIl9zY2hlbWEiLCJfY2xvbmVEZWVwIiwiX2RhdGFVdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiZGltZW5zaW9uUHJvcHNWMCIsImV4cG9ydHMiLCJnZW9qc29uU2l6ZUZpZWxkVjBUb1YxIiwiY29uZmlnIiwiZGVmYXVsdFJhaXVkcyIsImRlZmF1bHRSYWRpdXNSYW5nZSIsInZpc0NvbmZpZyIsImV4dHJ1ZGVkIiwic3Ryb2tlZCIsInJhZGl1cyIsInJhZGl1c1JhbmdlIiwic29tZSIsImQiLCJpIiwiRGltZW5zaW9uRmllbGRTY2hlbWFWMCIsIl9TY2hlbWEiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsIlZFUlNJT05TIiwidjAiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwic2F2ZSIsImZpZWxkIiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwibG9hZCIsInBhcmVudHMiLCJhY2N1bXVsYXRlZCIsIl9wYXJlbnRzJHNsaWNlIiwic2xpY2UiLCJfcGFyZW50cyRzbGljZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwiX1NjaGVtYTIiLCJfdGhpczIiLCJfbGVuMiIsIl9rZXkyIiwic2NhbGUiLCJfcGFyZW50cyRzbGljZTMiLCJfcGFyZW50cyRzbGljZTQiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwiX1NjaGVtYTMiLCJfdGhpczMiLCJfbGVuMyIsIl9rZXkzIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsIl9TY2hlbWE0IiwiX3RoaXM0IiwiX2xlbjQiLCJfa2V5NCIsImNvbHVtbnMiLCJyZWR1Y2UiLCJhY2N1IiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiX1NjaGVtYTUiLCJfdGhpczUiLCJfbGVuNSIsIl9rZXk1IiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiX1NjaGVtYTYiLCJfdGhpczYiLCJfbGVuNiIsIl9rZXk2IiwiYWNjdW11bGF0b3IiLCJfcGFyZW50cyRzbGljZTUiLCJfcGFyZW50cyRzbGljZTYiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwiX1NjaGVtYTciLCJfdGhpczciLCJfbGVuNyIsIl9rZXk3IiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUJ5Wm9vbSIsImNvbG9yRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29sb3JTY2FsZSIsInNpemVGaWVsZCIsInNpemVTY2FsZSIsImVuYWJsZTNkIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImlzQWdncmVnYXRlZCIsIkNvbHVtblNjaGVtYVYxIiwiX1NjaGVtYTgiLCJzdGF0ZSIsImNrZXkiLCJUZXh0TGFiZWxTY2hlbWFWMSIsIl9TY2hlbWE5IiwidGV4dExhYmVsIiwibWFwIiwidGwiLCJwaWNrIiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwiX3BhcmVudHMkc2xpY2U3IiwiX3BhcmVudHMkc2xpY2U4IiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIl9TY2hlbWExMCIsIl9wYXJlbnRzJHNsaWNlOSIsIl9wYXJlbnRzJHNsaWNlMTAiLCJfcGFyZW50cyRzbGljZTExIiwiX3BhcmVudHMkc2xpY2UxMiIsIm1vZGlmaWVkIiwiTGVnZW5kU2V0dGluZ3NWMSIsIl9TY2hlbWExMSIsImxlZ2VuZFNldHRpbmdzIiwibHMiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50IiwiX3BhcmVudHMkc2xpY2UxMyIsIl9wYXJlbnRzJHNsaWNlMTQiLCJzdHJva2VDb2xvciIsInN0cm9rZUNvbG9yUmFuZ2UiLCJjbG9uZURlZXAiLCJjb2xvclJhbmdlIiwib3V0bGluZSIsImZpbGxlZCIsIl9wYXJlbnRzJHNsaWNlMTUiLCJfcGFyZW50cyRzbGljZTE2IiwiVmlzQ29uZmlnU2NoZW1hVjEiLCJfU2NoZW1hMTIiLCJfdGhpczgiLCJfbGVuOCIsIl9rZXk4IiwiX3BhcmVudHMkc2xpY2UxNyIsIl9wYXJlbnRzJHNsaWNlMTgiLCJsYXllclByb3BzVjEiLCJ2ZXJzaW9uIiwidjEiLCJoaWdobGlnaHRDb2xvciIsIkxheWVyU2NoZW1hVjAiLCJfU2NoZW1hMTMiLCJfdGhpczkiLCJfbGVuOSIsIl9rZXk5IiwibGF5ZXJzIiwiX3RoaXMxMCIsIl9wYXJlbnRzJHNsaWNlMTkiLCJfcGFyZW50cyRzbGljZTIwIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwiaW5kZXgiLCJpc1ZhbGlkVG9TYXZlIiwiX3RoaXMxMSIsImxvYWRQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYSIsIkZpbHRlclNjaGVtYVYwIiwiX1NjaGVtYTE0IiwiX3RoaXMxMiIsIl9sZW4xMCIsIl9rZXkxMCIsImZpbHRlcnMiLCJfdGhpczEzIiwiaXNWYWxpZEZpbHRlclZhbHVlIiwiaW50ZXJhY3Rpb25Qcm9wc1YwIiwiSW50ZXJhY3Rpb25TY2hlbWFWMCIsIl9TY2hlbWExNSIsIl90aGlzMTQiLCJfbGVuMTEiLCJfa2V5MTEiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImVuYWJsZWQiLCJpbnRlcmFjdGlvblByb3BzVjEiLCJJbnRlcmFjdGlvblNjaGVtYVYxIiwiX1NjaGVtYTE2IiwiX3RoaXMxNSIsIl9sZW4xMiIsIl9rZXkxMiIsIl90aGlzMTYiLCJtb2RpZmllZENvbmZpZyIsImNvbmZpZ1R5cGUiLCJmaWVsZHNUb1Nob3ciLCJub3ROdWxsb3JVbmRlZmluZWQiLCJmaWVsZERhdGEiLCJuYW1lIiwiZm9ybWF0IiwidW5kZWZpbmVkIiwiZmlsdGVyUHJvcHNWMCIsImVubGFyZ2VkIiwiRGltZW5zaW9uRmllbGRTY2hlbWEiLCJfU2NoZW1hMTciLCJTcGxpdE1hcHNTY2hlbWEiLCJfU2NoZW1hMTgiLCJjb252ZXJ0TGF5ZXJTZXR0aW5ncyIsIl9yZWYxOSIsIl9yZWYyMCIsIl90eXBlb2YyIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJfdGhpczE3Iiwic2V0dGluZ3MiLCJlbnRyaWVzIiwiZmlsdGVyUHJvcHNWMSIsInBsb3RUeXBlIiwiYW5pbWF0aW9uV2luZG93IiwieUF4aXMiLCJsYXllcklkIiwic3BlZWQiLCJwcm9wZXJ0aWVzVjAiLCJsYXllckJsZW5kaW5nIiwicHJvcGVydGllc1YxIiwiYW5pbWF0aW9uQ29uZmlnIiwiY3VycmVudFRpbWUiLCJ2aXNTdGF0ZVNjaGVtYVYwIiwidmlzU3RhdGVTY2hlbWFWMSIsInZpc1N0YXRlU2NoZW1hIiwidG9TYXZlIiwidG9Mb2FkIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hcy92aXMtc3RhdGUtc2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC9waWNrJztcbmltcG9ydCB7VkVSU0lPTlN9IGZyb20gJy4vdmVyc2lvbnMnO1xuaW1wb3J0IHtpc1ZhbGlkRmlsdGVyVmFsdWV9IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge0xBWUVSX1ZJU19DT05GSUdTfSBmcm9tICdsYXllcnMvbGF5ZXItZmFjdG9yeSc7XG5pbXBvcnQgU2NoZW1hIGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAndXRpbHMvZGF0YS11dGlscyc7XG5cbi8qKlxuICogVjAgU2NoZW1hXG4gKi9cblxuZXhwb3J0IGNvbnN0IGRpbWVuc2lvblByb3BzVjAgPSBbJ25hbWUnLCAndHlwZSddO1xuXG5leHBvcnQgdHlwZSBtb2RpZmllZFR5cGUgPSB7XG4gIHN0cm9rZUNvbG9yPzogYW55O1xuICBzdHJva2VDb2xvclJhbmdlPzogYW55O1xuICBmaWxsZWQ/OiBib29sZWFuO1xuICBzdHJva2VkPzogYm9vbGVhbjtcbn07XG5cbi8vIGluIHYwIGdlb2pzb24gdGhlcmUgaXMgb25seSBzaXplRmllbGRcblxuLy8gaW4gdjEgZ2VvanNvblxuLy8gc3Ryb2tlIGJhc2Ugb24gLT4gc2l6ZUZpZWxkXG4vLyBoZWlnaHQgYmFzZWQgb24gLT4gaGVpZ2h0RmllbGRcbi8vIHJhZGl1cyBiYXNlZCBvbiAtPiByYWRpdXNGaWVsZFxuLy8gaGVyZSB3ZSBtYWtlIG91ciB3aXJlZHN0IGd1ZXNzIG9uIHdoaWNoIGNoYW5uZWwgc2l6ZUZpZWxkIGJlbG9uZ3MgdG9cbmZ1bmN0aW9uIGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKSB7XG4gIGNvbnN0IGRlZmF1bHRSYWl1ZHMgPSAxMDtcbiAgY29uc3QgZGVmYXVsdFJhZGl1c1JhbmdlID0gWzAsIDUwXTtcblxuICAvLyBpZiBleHRydWRlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIGhlaWdodFxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5leHRydWRlZCkge1xuICAgIHJldHVybiAnaGVpZ2h0RmllbGQnO1xuICB9XG5cbiAgLy8gaWYgc2hvdyBzdHJva2UgZW5hYmxlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHN0cm9rZVxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgcmV0dXJuICdzaXplRmllbGQnO1xuICB9XG5cbiAgLy8gaWYgcmFkaXVzIGNoYW5nZWQsIG9yIHJhZGl1cyBSYW5nZSBDaGFuZ2VkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgcmFkaXVzXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3QgdW5yZWxpYWJsZSBndWVzcywgdGhhdCdzIHdoeSB3ZSBwdXQgaXQgaW4gdGhlIGVuZFxuICBpZiAoXG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IGRlZmF1bHRSYWl1ZHMgfHxcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1c1JhbmdlLnNvbWUoKGQsIGkpID0+IGQgIT09IGRlZmF1bHRSYWRpdXNSYW5nZVtpXSlcbiAgKSB7XG4gICAgcmV0dXJuICdyYWRpdXNGaWVsZCc7XG4gIH1cblxuICByZXR1cm4gJ3NpemVGaWVsZCc7XG59XG5cbi8vIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKGZpZWxkKSB7XG4gICAgLy8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYW55bW9yZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCAhPT0gbnVsbCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBsZXQgZmllbGROYW1lID0gdGhpcy5rZXk7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicgJiYgdGhpcy5rZXkgPT09ICdzaXplRmllbGQnICYmIGZpZWxkKSB7XG4gICAgICBmaWVsZE5hbWUgPSBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZyk7XG4gICAgfVxuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIERpbWVuc2lvblNjYWxlU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoc2NhbGUpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IHNjYWxlfTtcbiAgfVxuICBsb2FkKHNjYWxlLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgaWYgKHRoaXMua2V5ID09PSAnc2l6ZVNjYWxlJyAmJiBjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAvLyBzaXplU2NhbGUgbm93IHNwbGl0IGludG8gcmFkaXVzU2NhbGUsIGhlaWdodFNjYWxlXG4gICAgICAvLyBubyB1c2VyIGN1c3RvbWl6YXRpb24sIGp1c3QgdXNlIGRlZmF1bHRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2NhbGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXlcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbHVtbnNcbi8vIG9ubHkgcmV0dXJuIGNvbHVtbiB2YWx1ZSBmb3IgZWFjaCBjb2x1bW5cbmNsYXNzIExheWVyQ29sdW1uc1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5LCBmbGF0dGVuIGNvbHVtbnNcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBjb2x1bW5zOiBPYmplY3Qua2V5cyhzYXZlZCkucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2tleV06IHNhdmVkW2tleV0udmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnLnZpc0NvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcudmlzQ29uZmlnXG4gICAgY29uc3QgYWNjdW11bGF0ZWRDb25maWcgPSBhY2N1bXVsYXRlZC5jb25maWcgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5hY2N1bXVsYXRlZENvbmZpZyxcbiAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdGVkQ29uZmlnLnZpc0NvbmZpZyB8fCB7fSksXG4gICAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCByZW5hbWUgPSB7XG4gICAgICBnZW9qc29uOiB7XG4gICAgICAgIGV4dHJ1ZGVkOiAnZW5hYmxlM2QnLFxuICAgICAgICBlbGV2YXRpb25SYW5nZTogJ2hlaWdodFJhbmdlJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnR5cGUgaW4gcmVuYW1lKSB7XG4gICAgICBjb25zdCBwcm9wVG9SZW5hbWUgPSByZW5hbWVbY29uZmlnLnR5cGVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgICAgdmlzQ29uZmlnOiBPYmplY3Qua2V5cyh2aXNDb25maWcpLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihwcm9wVG9SZW5hbWVba2V5XVxuICAgICAgICAgICAgICAgID8ge1twcm9wVG9SZW5hbWVba2V5XV06IHZpc0NvbmZpZ1trZXldfVxuICAgICAgICAgICAgICAgIDoge1trZXldOiB2aXNDb25maWdba2V5XX0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIHZpc0NvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZCh2YWx1ZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFYwIC0+IFYxIENoYW5nZXNcbiAqIC0gbGF5ZXIgaXMgbm93IGEgY2xhc3NcbiAqIC0gY29uZmlnIHNhdmVkIGluIGEgY29uZmlnIG9iamVjdFxuICogLSBpZCwgdHlwZSwgaXNBZ2dyZWdhdGVkIGlzIG91dHNpZGUgbGF5ZXIuY29uZmlnXG4gKiAtIHZpc3VhbENoYW5uZWxzIGlzIG91dHNpZGUgY29uZmlnLCBpdCBkZWZpbmVzIGF2YWlsYWJsZSB2aXN1YWwgY2hhbm5lbCBhbmRcbiAqICAgcHJvcGVydHkgbmFtZXMgZm9yIGZpZWxkLCBzY2FsZSwgZG9tYWluIGFuZCByYW5nZSBvZiBlYWNoIHZpc3VhbCBjaGFuZWwuXG4gKiAtIGVuYWJsZTNkLCBjb2xvckFnZ3JlZ2F0aW9uIGFuZCBzaXplQWdncmVnYXRpb24gYXJlIG1vdmVkIGludG8gdmlzQ29uZmlnXG4gKiAtIEdlb2pzb25MYXllciAtIGFkZGVkIGhlaWdodCwgcmFkaXVzIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YwID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIGRhdGFJZDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2RhdGFJZCd9KSxcbiAgbGFiZWw6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdsYWJlbCd9KSxcbiAgY29sb3I6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdjb2xvcid9KSxcbiAgaXNWaXNpYmxlOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaXNWaXNpYmxlJ30pLFxuICBoaWRkZW46IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdoaWRkZW4nfSksXG4gIHZpc2liaWxpdHlCeVpvb206IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNpYmlsaXR5Qnlab29tJ30pLFxuXG4gIC8vIGNvbnZlcnQgdmlzQ29uZmlnXG4gIHZpc0NvbmZpZzogbmV3IExheWVyVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc0NvbmZpZyd9KSxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIC8vIGZsYXR0ZW5cbiAgY29sdW1uczogbmV3IExheWVyQ29sdW1uc1NjaGVtYVYwKCksXG5cbiAgLy8gc2F2ZSBpbnRvIHZpc3VhbENoYW5uZWxzXG4gIGNvbG9yRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ2NvbG9yRmllbGQnXG4gIH0pLFxuICBjb2xvclNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JTY2FsZSdcbiAgfSksXG4gIHNpemVGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnc2l6ZUZpZWxkJ1xuICB9KSxcbiAgc2l6ZVNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnc2l6ZVNjYWxlJ1xuICB9KSxcblxuICAvLyBtb3ZlIGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICBlbmFibGUzZDogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnZW5hYmxlM2QnfSksXG4gIGNvbG9yQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yQWdncmVnYXRpb24nXG4gIH0pLFxuICBzaXplQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3NpemVBZ2dyZWdhdGlvbid9KSxcblxuICAvLyBkZWxldGVcbiAgaXNBZ2dyZWdhdGVkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCgpXG59O1xuXG4vKipcbiAqIFYxIFNjaGVtYVxuICovXG5jbGFzcyBDb2x1bW5TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoY29sdW1ucywgc3RhdGUpIHtcbiAgICAvLyBzdGFydGluZyBmcm9tIHYxLCBvbmx5IHNhdmUgY29sdW1uIHZhbHVlXG4gICAgLy8gZmllbGRJZHggd2lsbCBiZSBjYWxjdWxhdGVkIGR1cmluZyBtZXJnZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhjb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBja2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2NrZXldOiBjb2x1bW5zW2NrZXldLnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGNvbHVtbnMpIHtcbiAgICByZXR1cm4ge2NvbHVtbnN9O1xuICB9XG59XG5cbmNsYXNzIFRleHRMYWJlbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdGV4dExhYmVsLm1hcCh0bCA9PiAoe1xuICAgICAgICAuLi50bCxcbiAgICAgICAgZmllbGQ6IHRsLmZpZWxkID8gcGljayh0bC5maWVsZCwgWyduYW1lJywgJ3R5cGUnXSkgOiBudWxsXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZCh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge3RleHRMYWJlbDogQXJyYXkuaXNBcnJheSh0ZXh0TGFiZWwpID8gdGV4dExhYmVsIDogW3RleHRMYWJlbF19O1xuICB9XG59XG5cbmNvbnN0IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSA9IHtcbiAgZ2VvanNvbjogKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikgPT4ge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBpc09sZCA9ICF2Yy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICB2Yy5yYWRpdXNGaWVsZCB8fCBsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChpc09sZCAmJiAhaXNQb2ludCAmJiBsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICAgIC8vIGlmIHN0cm9rZWQgaXMgdHJ1ZSwgY29weSBjb2xvciBjb25maWcgdG8gc3Ryb2tlIGNvbG9yIGNvbmZpZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogdmMuY29sb3JGaWVsZCxcbiAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdmMuY29sb3JTY2FsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuLyoqXG4gKiBWMTogc2F2ZSBbZmllbGRdOiB7bmFtZSwgdHlwZX0sIFtzY2FsZV06ICcnIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuY2xhc3MgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh2aXN1YWxDaGFubmVscywgcGFyZW50cykge1xuICAgIC8vIG9ubHkgc2F2ZSBmaWVsZCBhbmQgc2NhbGUgb2YgZWFjaCBjaGFubmVsXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykucmVkdWNlKFxuICAgICAgICAvLyAgc2F2ZSBjaGFubmVsIHRvIG51bGwgaWYgZGlkbid0IHNlbGVjdCBhbnkgZmllbGRcbiAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgICAgICA/IHBpY2sobGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLCBbJ25hbWUnLCAndHlwZScsICdjb2xvckNvbHVtbiddKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cbiAgbG9hZCh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICAvLyBmb2xkIGNoYW5uZWxzIGludG8gY29uZmlnXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAuLi52YyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4vKipcbiAqIFYxOiBzYXZlIFtjaGFubmVsXTogW3sgbGFiZWwsIGNvbG9yIH0sIC4uLl0gZm9yIGxlZ2VuZFxuICovXG5jbGFzcyBMZWdlbmRTZXR0aW5nc1YxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShsZWdlbmRTZXR0aW5ncywgcGFyZW50cykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhsZWdlbmRTZXR0aW5ncykucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgICAgYWNjdVtrZXldID0gbGVnZW5kU2V0dGluZ3Nba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSlcbiAgICB9O1xuICB9XG4gIGxvYWQobHMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgW3RoaXMua2V5XTogbHNcbiAgICB9O1xuICB9XG59XG5jb25zdCB2aXNDb25maWdNb2RpZmljYXRpb25WMSA9IHtcbiAgcG9pbnQ6ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgY29uc3QgbW9kaWZpZWQ6IG1vZGlmaWVkVHlwZSA9IHt9O1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0yLCAtMSk7XG4gICAgY29uc3QgaXNPbGQgPVxuICAgICAgIXZpc0NvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnZmlsbGVkJykgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJiAhdmlzQ29uZmlnLnN0cm9rZUNvbG9yUmFuZ2U7XG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmICh2aXNDb25maWcub3V0bGluZSkge1xuICAgICAgICAvLyBwb2ludCBsYXllciBub3cgc3VwcG9ydHMgYm90aCBvdXRsaW5lIGFuZCBmaWxsXG4gICAgICAgIC8vIGZvciBvbGRlciBzY2hlbWEgd2hlcmUgZmlsbGVkIGhhcyBub3QgYmVlbiBhZGRlZCB0byBwb2ludCBsYXllclxuICAgICAgICAvLyBzZXQgaXQgdG8gZmFsc2VcbiAgICAgICAgbW9kaWZpZWQuZmlsbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkO1xuICB9LFxuICBnZW9qc29uOiAodmlzQ29uZmlnLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkgPT4ge1xuICAgIC8vIGlzIHBvaW50cz9cbiAgICBjb25zdCBtb2RpZmllZDogbW9kaWZpZWRUeXBlID0ge307XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBpc09sZCA9XG4gICAgICBsYXllci52aXN1YWxDaGFubmVscyAmJlxuICAgICAgIWxheWVyLnZpc3VhbENoYW5uZWxzLmhhc093blByb3BlcnR5KCdzdHJva2VDb2xvckZpZWxkJykgJiZcbiAgICAgICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiZcbiAgICAgICF2aXNDb25maWcuc3Ryb2tlQ29sb3JSYW5nZTtcbiAgICAvLyBtYWtlIG91ciBiZXN0IGd1ZXNzIGlmIHRoaXMgZ2VvanNvbiBsYXllciBjb250YWlucyBwb2ludFxuICAgIGNvbnN0IGlzUG9pbnQgPVxuICAgICAgKGxheWVyLnZpc3VhbENoYW5uZWxzICYmIGxheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c0ZpZWxkKSB8fFxuICAgICAgKHZpc0NvbmZpZyAmJiB2aXNDb25maWcucmFkaXVzICE9PSBMQVlFUl9WSVNfQ09ORklHUy5yYWRpdXMuZGVmYXVsdFZhbHVlKTtcblxuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAoaXNQb2ludCkge1xuICAgICAgICAvLyBpZiBpcyBwb2ludCwgc2V0IHN0cm9rZSB0byBmYWxzZVxuICAgICAgICBtb2RpZmllZC5maWxsZWQgPSB0cnVlO1xuICAgICAgICBtb2RpZmllZC5zdHJva2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkO1xuICB9XG59O1xuXG5jbGFzcyBWaXNDb25maWdTY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICd2aXNDb25maWcnO1xuXG4gIGxvYWQodmlzQ29uZmlnLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0yLCAtMSk7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB2aXNDb25maWdNb2RpZmljYXRpb25WMVtsYXllci50eXBlXVxuICAgICAgPyB2aXNDb25maWdNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKVxuICAgICAgOiB7fTtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNDb25maWc6IHtcbiAgICAgICAgLi4udmlzQ29uZmlnLFxuICAgICAgICAuLi5tb2RpZmllZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxheWVyUHJvcHNWMSA9IHtcbiAgaWQ6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIGNvbmZpZzogbmV3IFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnY29uZmlnJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBkYXRhSWQ6IG51bGwsXG4gICAgICBsYWJlbDogbnVsbCxcbiAgICAgIGNvbG9yOiBudWxsLFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IG51bGwsXG4gICAgICBjb2x1bW5zOiBuZXcgQ29sdW1uU2NoZW1hVjEoe1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICAgICAga2V5OiAnY29sdW1ucydcbiAgICAgIH0pLFxuICAgICAgaXNWaXNpYmxlOiBudWxsLFxuICAgICAgdmlzQ29uZmlnOiBuZXcgVmlzQ29uZmlnU2NoZW1hVjEoe1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MVxuICAgICAgfSksXG4gICAgICBoaWRkZW46IG51bGwsXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiBudWxsLFxuICAgICAgdGV4dExhYmVsOiBuZXcgVGV4dExhYmVsU2NoZW1hVjEoe1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICAgICAga2V5OiAndGV4dExhYmVsJ1xuICAgICAgfSlcbiAgICB9XG4gIH0pLFxuICBsZWdlbmRTZXR0aW5nczogbmV3IExlZ2VuZFNldHRpbmdzVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIGtleTogJ2xlZ2VuZFNldHRpbmdzJ1xuICB9KSxcbiAgdmlzdWFsQ2hhbm5lbHM6IG5ldyBWaXN1YWxDaGFubmVsU2NoZW1hVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIGtleTogJ3Zpc3VhbENoYW5uZWxzJ1xuICB9KVxufTtcblxuZXhwb3J0IGNsYXNzIExheWVyU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnbGF5ZXJzJztcblxuICBzYXZlKGxheWVycywgcGFyZW50cykge1xuICAgIGNvbnN0IFt2aXNTdGF0ZV0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcblxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiB2aXNTdGF0ZS5sYXllck9yZGVyLnJlZHVjZSgoc2F2ZWQsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIHNhdmUgbGF5ZXJzIGFjY29yZGluZyB0byB0aGVpciByZW5kZXJpbmcgb3JkZXJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbaW5kZXhdO1xuICAgICAgICBpZiAobGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICAgICAgc2F2ZWQucHVzaCh0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShsYXllcikubGF5ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2F2ZWQ7XG4gICAgICB9LCBbXSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZChsYXllcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogbGF5ZXJzLm1hcChsYXllciA9PiB0aGlzLmxvYWRQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShsYXllciwgbGF5ZXJzKS5sYXllcnMpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnZmlsdGVycyc7XG4gIHNhdmUoZmlsdGVycykge1xuICAgIHJldHVybiB7XG4gICAgICBmaWx0ZXJzOiBmaWx0ZXJzXG4gICAgICAgIC5maWx0ZXIoaXNWYWxpZEZpbHRlclZhbHVlKVxuICAgICAgICAubWFwKGZpbHRlciA9PiB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShmaWx0ZXIpLmZpbHRlcnMpXG4gICAgfTtcbiAgfVxuICBsb2FkKGZpbHRlcnMpIHtcbiAgICByZXR1cm4ge2ZpbHRlcnN9O1xuICB9XG59XG5cbmNvbnN0IGludGVyYWN0aW9uUHJvcHNWMCA9IFsndG9vbHRpcCcsICdicnVzaCddO1xuXG5jbGFzcyBJbnRlcmFjdGlvblNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2ludGVyYWN0aW9uQ29uZmlnJztcblxuICBzYXZlKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wZXJ0aWVzKVxuICAgICAgPyB7XG4gICAgICAgICAgW3RoaXMua2V5XTogdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldLmVuYWJsZWQgPyB7W2tleV06IGludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnfSA6IHt9KVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgfVxuICBsb2FkKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgLy8gY29udmVydCB2MCAtPiB2MVxuICAgIC8vIHJldHVybiBlbmFibGVkOiBmYWxzZSBpZiBkaXNhYmxlZCxcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICAgICAgICAuLi4oaW50ZXJhY3Rpb25Db25maWdba2V5XSB8fCB7fSksXG4gICAgICAgICAgICAgICAgICBlbmFibGVkOiBCb29sZWFuKGludGVyYWN0aW9uQ29uZmlnW2tleV0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG59XG5cbmNvbnN0IGludGVyYWN0aW9uUHJvcHNWMSA9IFsuLi5pbnRlcmFjdGlvblByb3BzVjAsICdnZW9jb2RlcicsICdjb29yZGluYXRlJ107XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2ludGVyYWN0aW9uQ29uZmlnJztcblxuICBzYXZlKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgLy8gc2F2ZSBjb25maWcgZXZlbiBpZiBkaXNhYmxlZCxcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBpbnRlcmFjdGlvbkNvbmZpZ1trZXldLmVuYWJsZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgfVxuICBsb2FkKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgY29uc3QgbW9kaWZpZWRDb25maWcgPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgICBPYmplY3Qua2V5cyhpbnRlcmFjdGlvbkNvbmZpZykuZm9yRWFjaChjb25maWdUeXBlID0+IHtcbiAgICAgIGlmIChjb25maWdUeXBlID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gbW9kaWZpZWRDb25maWdbY29uZmlnVHlwZV0uZmllbGRzVG9TaG93O1xuICAgICAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChmaWVsZHNUb1Nob3cpKSB7XG4gICAgICAgICAgcmV0dXJuIHtbdGhpcy5rZXldOiBtb2RpZmllZENvbmZpZ307XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRzVG9TaG93KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmllbGRzVG9TaG93W2tleV0gPSBmaWVsZHNUb1Nob3dba2V5XS5tYXAoZmllbGREYXRhID0+IHtcbiAgICAgICAgICAgIGlmICghZmllbGREYXRhLm5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZERhdGEsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBudWxsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmllbGREYXRhO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBtb2RpZmllZENvbmZpZ307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlclByb3BzVjAgPSB7XG4gIGRhdGFJZDogbnVsbCxcbiAgaWQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbFxufTtcblxuZXhwb3J0IGNsYXNzIERpbWVuc2lvbkZpZWxkU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShmaWVsZCkge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IGZpZWxkfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3BsaXRNYXBzU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgY29udmVydExheWVyU2V0dGluZ3MoYWNjdSwgW2tleSwgdmFsdWVdKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogQm9vbGVhbih2YWx1ZS5pc1Zpc2libGUpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfVxuXG4gIGxvYWQoc3BsaXRNYXBzKSB7XG4gICAgLy8gcHJldmlvdXMgc3BsaXRNYXBzIFNjaGVtYSB7bGF5ZXJzOiB7bGF5ZXJJZDoge2lzVmlzaWJsZSwgaXNBdmFpbGFibGV9fX1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzcGxpdE1hcHMpIHx8ICFzcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge3NwbGl0TWFwczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4gKHtcbiAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgIGxheWVyczogT2JqZWN0LmVudHJpZXMoc2V0dGluZ3MubGF5ZXJzIHx8IHt9KS5yZWR1Y2UodGhpcy5jb252ZXJ0TGF5ZXJTZXR0aW5ncywge30pXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YxID0ge1xuICAuLi5maWx0ZXJQcm9wc1YwLFxuICBwbG90VHlwZTogbnVsbCxcbiAgYW5pbWF0aW9uV2luZG93OiBudWxsLFxuICB5QXhpczogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICd5QXhpcycsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgbmFtZTogbnVsbCxcbiAgICAgIHR5cGU6IG51bGxcbiAgICB9XG4gIH0pLFxuXG4gIC8vIHBvbHlnb24gZmlsdGVyIHByb3BlcnRpZXNcbiAgbGF5ZXJJZDogbnVsbCxcbiAgc3BlZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjAgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YwXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnRpZXNWMSA9IHtcbiAgZmlsdGVyczogbmV3IEZpbHRlclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJQcm9wc1YxXG4gIH0pLFxuICBsYXllcnM6IG5ldyBMYXllclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBsYXllclByb3BzVjFcbiAgfSksXG4gIGludGVyYWN0aW9uQ29uZmlnOiBuZXcgSW50ZXJhY3Rpb25TY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogaW50ZXJhY3Rpb25Qcm9wc1YxXG4gIH0pLFxuICBsYXllckJsZW5kaW5nOiBudWxsLFxuICBzcGxpdE1hcHM6IG5ldyBTcGxpdE1hcHNTY2hlbWEoe1xuICAgIGtleTogJ3NwbGl0TWFwcycsXG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjFcbiAgfSksXG4gIGFuaW1hdGlvbkNvbmZpZzogbmV3IFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgY3VycmVudFRpbWU6IG51bGwsXG4gICAgICBzcGVlZDogbnVsbFxuICAgIH0sXG4gICAga2V5OiAnYW5pbWF0aW9uQ29uZmlnJ1xuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjAgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMCxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjEgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMSxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hID0ge1xuICBbVkVSU0lPTlMudjBdOiB7XG4gICAgc2F2ZTogdG9TYXZlID0+IHZpc1N0YXRlU2NoZW1hVjAuc2F2ZSh0b1NhdmUpLFxuICAgIGxvYWQ6IHRvTG9hZCA9PiB2aXNTdGF0ZVNjaGVtYVYxLmxvYWQodmlzU3RhdGVTY2hlbWFWMC5sb2FkKHRvTG9hZCkudmlzU3RhdGUpXG4gIH0sXG4gIFtWRVJTSU9OUy52MV06IHZpc1N0YXRlU2NoZW1hVjFcbn07XG5cbi8vIHRlc3QgbG9hZCB2MFxuZXhwb3J0IGRlZmF1bHQgdmlzU3RhdGVTY2hlbWE7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFBb0QsU0FBQU8sUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFBQSxTQUFBb0IsV0FBQWxCLENBQUEsRUFBQUksQ0FBQSxFQUFBTixDQUFBLFdBQUFNLENBQUEsT0FBQWUsZ0JBQUEsYUFBQWYsQ0FBQSxPQUFBZ0IsMkJBQUEsYUFBQXBCLENBQUEsRUFBQXFCLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBbkIsQ0FBQSxFQUFBTixDQUFBLFlBQUFxQixnQkFBQSxhQUFBbkIsQ0FBQSxFQUFBd0IsV0FBQSxJQUFBcEIsQ0FBQSxDQUFBSyxLQUFBLENBQUFULENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUF1QiwwQkFBQSxjQUFBckIsQ0FBQSxJQUFBeUIsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQUMsSUFBQSxDQUFBTixPQUFBLENBQUFDLFNBQUEsQ0FBQUUsT0FBQSxpQ0FBQXpCLENBQUEsYUFBQXFCLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFyQixDQUFBLFVBMUJwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTs7QUFFTyxJQUFNNkIsZ0JBQWdCLEdBQUFDLE9BQUEsQ0FBQUQsZ0JBQUEsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFTaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNFLHNCQUFzQkEsQ0FBQ0MsTUFBTSxFQUFFO0VBQ3RDLElBQU1DLGFBQWEsR0FBRyxFQUFFO0VBQ3hCLElBQU1DLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7RUFFbEM7RUFDQSxJQUFJRixNQUFNLENBQUNHLFNBQVMsQ0FBQ0MsUUFBUSxFQUFFO0lBQzdCLE9BQU8sYUFBYTtFQUN0Qjs7RUFFQTtFQUNBLElBQUlKLE1BQU0sQ0FBQ0csU0FBUyxDQUFDRSxPQUFPLEVBQUU7SUFDNUIsT0FBTyxXQUFXO0VBQ3BCOztFQUVBO0VBQ0E7RUFDQSxJQUNFTCxNQUFNLENBQUNHLFNBQVMsQ0FBQ0csTUFBTSxLQUFLTCxhQUFhLElBQ3pDRCxNQUFNLENBQUNHLFNBQVMsQ0FBQ0ksV0FBVyxDQUFDQyxJQUFJLENBQUMsVUFBQ0MsQ0FBQyxFQUFFQyxDQUFDO0lBQUEsT0FBS0QsQ0FBQyxLQUFLUCxrQkFBa0IsQ0FBQ1EsQ0FBQyxDQUFDO0VBQUEsRUFBQyxFQUN4RTtJQUNBLE9BQU8sYUFBYTtFQUN0QjtFQUVBLE9BQU8sV0FBVztBQUNwQjs7QUFFQTtBQUFBLElBQ01DLHNCQUFzQiwwQkFBQUMsT0FBQTtFQUFBLFNBQUFELHVCQUFBO0lBQUEsSUFBQUUsS0FBQTtJQUFBLElBQUFDLGdCQUFBLG1CQUFBSCxzQkFBQTtJQUFBLFNBQUFJLElBQUEsR0FBQXBDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBb0MsSUFBQSxPQUFBQyxLQUFBLENBQUFGLElBQUEsR0FBQUcsSUFBQSxNQUFBQSxJQUFBLEdBQUFILElBQUEsRUFBQUcsSUFBQTtNQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQXZDLFNBQUEsQ0FBQXVDLElBQUE7SUFBQTtJQUFBTCxLQUFBLEdBQUEzQixVQUFBLE9BQUF5QixzQkFBQSxLQUFBUSxNQUFBLENBQUFILElBQUE7SUFBQSxJQUFBbEMsZ0JBQUEsYUFBQStCLEtBQUEsYUFDaEJPLGtCQUFRLENBQUNDLEVBQUU7SUFBQSxPQUFBUixLQUFBO0VBQUE7RUFBQSxJQUFBUyxVQUFBLGFBQUFYLHNCQUFBLEVBQUFDLE9BQUE7RUFBQSxXQUFBVyxhQUFBLGFBQUFaLHNCQUFBO0lBQUFhLEdBQUE7SUFBQUMsS0FBQSxFQUNyQixTQUFBQyxJQUFJQSxDQUFDQyxLQUFLLEVBQUU7TUFDVjtNQUNBLFdBQUE3QyxnQkFBQSxpQkFDRyxJQUFJLENBQUMwQyxHQUFHLEVBQUdHLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQ0QsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDSCxHQUFHLENBQUMsR0FBRyxJQUFJO0lBRXpGO0VBQUM7SUFBQUEsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUksSUFBSUEsQ0FBQ0YsS0FBSyxFQUFFRyxPQUFPLEVBQUVDLFdBQVcsRUFBRTtNQUNoQyxJQUFBQyxjQUFBLEdBQWlCRixPQUFPLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFBQyxlQUFBLE9BQUFDLGVBQUEsYUFBQUgsY0FBQTtRQUEzQmhDLE1BQU0sR0FBQWtDLGVBQUE7TUFDYixJQUFJRSxTQUFTLEdBQUcsSUFBSSxDQUFDWixHQUFHO01BQ3hCLElBQUl4QixNQUFNLENBQUNxQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQ2IsR0FBRyxLQUFLLFdBQVcsSUFBSUcsS0FBSyxFQUFFO1FBQ2xFUyxTQUFTLEdBQUdyQyxzQkFBc0IsQ0FBQ0MsTUFBTSxDQUFDO01BQzVDO01BQ0E7TUFDQSxPQUFPO1FBQ0xzQyxjQUFjLEVBQUE1RCxhQUFBLENBQUFBLGFBQUEsS0FDUnFELFdBQVcsQ0FBQ08sY0FBYyxJQUFJLENBQUMsQ0FBQyxXQUFBeEQsZ0JBQUEsaUJBQ25Dc0QsU0FBUyxFQUFHVCxLQUFLO01BRXRCLENBQUM7SUFDSDtFQUFDO0FBQUEsRUF0QmtDWSxrQkFBTTtBQUFBLElBeUJyQ0Msc0JBQXNCLDBCQUFBQyxRQUFBO0VBQUEsU0FBQUQsdUJBQUE7SUFBQSxJQUFBRSxNQUFBO0lBQUEsSUFBQTVCLGdCQUFBLG1CQUFBMEIsc0JBQUE7SUFBQSxTQUFBRyxLQUFBLEdBQUFoRSxTQUFBLENBQUFDLE1BQUEsRUFBQW9DLElBQUEsT0FBQUMsS0FBQSxDQUFBMEIsS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO01BQUE1QixJQUFBLENBQUE0QixLQUFBLElBQUFqRSxTQUFBLENBQUFpRSxLQUFBO0lBQUE7SUFBQUYsTUFBQSxHQUFBeEQsVUFBQSxPQUFBc0Qsc0JBQUEsS0FBQXJCLE1BQUEsQ0FBQUgsSUFBQTtJQUFBLElBQUFsQyxnQkFBQSxhQUFBNEQsTUFBQSxhQUNoQnRCLGtCQUFRLENBQUNDLEVBQUU7SUFBQSxPQUFBcUIsTUFBQTtFQUFBO0VBQUEsSUFBQXBCLFVBQUEsYUFBQWtCLHNCQUFBLEVBQUFDLFFBQUE7RUFBQSxXQUFBbEIsYUFBQSxhQUFBaUIsc0JBQUE7SUFBQWhCLEdBQUE7SUFBQUMsS0FBQSxFQUNyQixTQUFBQyxJQUFJQSxDQUFDbUIsS0FBSyxFQUFFO01BQ1YsV0FBQS9ELGdCQUFBLGlCQUFTLElBQUksQ0FBQzBDLEdBQUcsRUFBR3FCLEtBQUs7SUFDM0I7RUFBQztJQUFBckIsR0FBQTtJQUFBQyxLQUFBLEVBQ0QsU0FBQUksSUFBSUEsQ0FBQ2dCLEtBQUssRUFBRWYsT0FBTyxFQUFFQyxXQUFXLEVBQUU7TUFDaEMsSUFBQWUsZUFBQSxHQUFpQmhCLE9BQU8sQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUFjLGVBQUEsT0FBQVosZUFBQSxhQUFBVyxlQUFBO1FBQTNCOUMsTUFBTSxHQUFBK0MsZUFBQTtNQUNiO01BQ0EsSUFBSSxJQUFJLENBQUN2QixHQUFHLEtBQUssV0FBVyxJQUFJeEIsTUFBTSxDQUFDcUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUN6RDtRQUNBO1FBQ0EsT0FBTyxDQUFDLENBQUM7TUFDWDtNQUVBLE9BQU87UUFDTEMsY0FBYyxFQUFBNUQsYUFBQSxDQUFBQSxhQUFBLEtBQ1JxRCxXQUFXLENBQUNPLGNBQWMsSUFBSSxDQUFDLENBQUMsV0FBQXhELGdCQUFBLGlCQUNuQyxJQUFJLENBQUMwQyxHQUFHLEVBQUdxQixLQUFLO01BRXJCLENBQUM7SUFDSDtFQUFDO0FBQUEsRUFwQmtDTixrQkFBTSxHQXVCM0M7QUFBQSxJQUNNUyxtQkFBbUIsMEJBQUFDLFFBQUE7RUFBQSxTQUFBRCxvQkFBQTtJQUFBLElBQUFFLE1BQUE7SUFBQSxJQUFBcEMsZ0JBQUEsbUJBQUFrQyxtQkFBQTtJQUFBLFNBQUFHLEtBQUEsR0FBQXhFLFNBQUEsQ0FBQUMsTUFBQSxFQUFBb0MsSUFBQSxPQUFBQyxLQUFBLENBQUFrQyxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7TUFBQXBDLElBQUEsQ0FBQW9DLEtBQUEsSUFBQXpFLFNBQUEsQ0FBQXlFLEtBQUE7SUFBQTtJQUFBRixNQUFBLEdBQUFoRSxVQUFBLE9BQUE4RCxtQkFBQSxLQUFBN0IsTUFBQSxDQUFBSCxJQUFBO0lBQUEsSUFBQWxDLGdCQUFBLGFBQUFvRSxNQUFBLGFBQ2I5QixrQkFBUSxDQUFDQyxFQUFFO0lBQUEsT0FBQTZCLE1BQUE7RUFBQTtFQUFBLElBQUE1QixVQUFBLGFBQUEwQixtQkFBQSxFQUFBQyxRQUFBO0VBQUEsV0FBQTFCLGFBQUEsYUFBQXlCLG1CQUFBO0lBQUF4QixHQUFBO0lBQUFDLEtBQUEsRUFDckIsU0FBQUksSUFBSUEsQ0FBQ3dCLEtBQUssRUFBRXZCLE9BQU8sRUFBRUMsV0FBVyxFQUFFO01BQ2hDO01BQ0EsT0FBTztRQUNML0IsTUFBTSxFQUFBdEIsYUFBQSxDQUFBQSxhQUFBLEtBQ0FxRCxXQUFXLENBQUMvQixNQUFNLElBQUksQ0FBQyxDQUFDLFdBQUFsQixnQkFBQSxpQkFDM0IsSUFBSSxDQUFDMEMsR0FBRyxFQUFHNkIsS0FBSztNQUVyQixDQUFDO0lBQ0g7RUFBQztBQUFBLEVBVitCZCxrQkFBTSxHQWF4QztBQUNBO0FBQUEsSUFDTWUsb0JBQW9CLDBCQUFBQyxRQUFBO0VBQUEsU0FBQUQscUJBQUE7SUFBQSxJQUFBRSxNQUFBO0lBQUEsSUFBQTFDLGdCQUFBLG1CQUFBd0Msb0JBQUE7SUFBQSxTQUFBRyxLQUFBLEdBQUE5RSxTQUFBLENBQUFDLE1BQUEsRUFBQW9DLElBQUEsT0FBQUMsS0FBQSxDQUFBd0MsS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO01BQUExQyxJQUFBLENBQUEwQyxLQUFBLElBQUEvRSxTQUFBLENBQUErRSxLQUFBO0lBQUE7SUFBQUYsTUFBQSxHQUFBdEUsVUFBQSxPQUFBb0Usb0JBQUEsS0FBQW5DLE1BQUEsQ0FBQUgsSUFBQTtJQUFBLElBQUFsQyxnQkFBQSxhQUFBMEUsTUFBQSxhQUNkcEMsa0JBQVEsQ0FBQ0MsRUFBRTtJQUFBLE9BQUFtQyxNQUFBO0VBQUE7RUFBQSxJQUFBbEMsVUFBQSxhQUFBZ0Msb0JBQUEsRUFBQUMsUUFBQTtFQUFBLFdBQUFoQyxhQUFBLGFBQUErQixvQkFBQTtJQUFBOUIsR0FBQTtJQUFBQyxLQUFBLEVBQ3JCLFNBQUFJLElBQUlBLENBQUN3QixLQUFLLEVBQUV2QixPQUFPLEVBQUVDLFdBQVcsRUFBRTtNQUNoQztNQUNBLE9BQU87UUFDTC9CLE1BQU0sRUFBQXRCLGFBQUEsQ0FBQUEsYUFBQSxLQUNBcUQsV0FBVyxDQUFDL0IsTUFBTSxJQUFJLENBQUMsQ0FBQztVQUM1QjJELE9BQU8sRUFBRTFGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbUYsS0FBSyxDQUFDLENBQUNPLE1BQU0sQ0FDaEMsVUFBQ0MsSUFBSSxFQUFFckMsR0FBRztZQUFBLE9BQUE5QyxhQUFBLENBQUFBLGFBQUEsS0FDTG1GLElBQUksV0FBQS9FLGdCQUFBLGlCQUNOMEMsR0FBRyxFQUFHNkIsS0FBSyxDQUFDN0IsR0FBRyxDQUFDLENBQUNDLEtBQUs7VUFBQSxDQUN2QixFQUNGLENBQUMsQ0FDSDtRQUFDO01BRUwsQ0FBQztJQUNIO0VBQUM7QUFBQSxFQWhCZ0NjLGtCQUFNLEdBbUJ6QztBQUFBLElBQ011Qiw4QkFBOEIsMEJBQUFDLFFBQUE7RUFBQSxTQUFBRCwrQkFBQTtJQUFBLElBQUFFLE1BQUE7SUFBQSxJQUFBbEQsZ0JBQUEsbUJBQUFnRCw4QkFBQTtJQUFBLFNBQUFHLEtBQUEsR0FBQXRGLFNBQUEsQ0FBQUMsTUFBQSxFQUFBb0MsSUFBQSxPQUFBQyxLQUFBLENBQUFnRCxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7TUFBQWxELElBQUEsQ0FBQWtELEtBQUEsSUFBQXZGLFNBQUEsQ0FBQXVGLEtBQUE7SUFBQTtJQUFBRixNQUFBLEdBQUE5RSxVQUFBLE9BQUE0RSw4QkFBQSxLQUFBM0MsTUFBQSxDQUFBSCxJQUFBO0lBQUEsSUFBQWxDLGdCQUFBLGFBQUFrRixNQUFBLGFBQ3hCNUMsa0JBQVEsQ0FBQ0MsRUFBRTtJQUFBLE9BQUEyQyxNQUFBO0VBQUE7RUFBQSxJQUFBMUMsVUFBQSxhQUFBd0MsOEJBQUEsRUFBQUMsUUFBQTtFQUFBLFdBQUF4QyxhQUFBLGFBQUF1Qyw4QkFBQTtJQUFBdEMsR0FBQTtJQUFBQyxLQUFBLEVBQ3JCLFNBQUFJLElBQUlBLENBQUN3QixLQUFLLEVBQUV2QixPQUFPLEVBQUVDLFdBQVcsRUFBRTtNQUNoQztNQUNBLElBQU1vQyxpQkFBaUIsR0FBR3BDLFdBQVcsQ0FBQy9CLE1BQU0sSUFBSSxDQUFDLENBQUM7TUFDbEQsT0FBTztRQUNMQSxNQUFNLEVBQUF0QixhQUFBLENBQUFBLGFBQUEsS0FDRHlGLGlCQUFpQjtVQUNwQmhFLFNBQVMsRUFBQXpCLGFBQUEsQ0FBQUEsYUFBQSxLQUNIeUYsaUJBQWlCLENBQUNoRSxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQUFyQixnQkFBQSxpQkFDcEMsSUFBSSxDQUFDMEMsR0FBRyxFQUFHNkIsS0FBSztRQUNsQjtNQUVMLENBQUM7SUFDSDtFQUFDO0FBQUEsRUFkMENkLGtCQUFNO0FBQUEsSUFpQjdDNkIsc0JBQXNCLDBCQUFBQyxRQUFBO0VBQUEsU0FBQUQsdUJBQUE7SUFBQSxJQUFBRSxNQUFBO0lBQUEsSUFBQXhELGdCQUFBLG1CQUFBc0Qsc0JBQUE7SUFBQSxTQUFBRyxLQUFBLEdBQUE1RixTQUFBLENBQUFDLE1BQUEsRUFBQW9DLElBQUEsT0FBQUMsS0FBQSxDQUFBc0QsS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO01BQUF4RCxJQUFBLENBQUF3RCxLQUFBLElBQUE3RixTQUFBLENBQUE2RixLQUFBO0lBQUE7SUFBQUYsTUFBQSxHQUFBcEYsVUFBQSxPQUFBa0Ysc0JBQUEsS0FBQWpELE1BQUEsQ0FBQUgsSUFBQTtJQUFBLElBQUFsQyxnQkFBQSxhQUFBd0YsTUFBQSxhQUNoQmxELGtCQUFRLENBQUNDLEVBQUU7SUFBQSxJQUFBdkMsZ0JBQUEsYUFBQXdGLE1BQUEsU0FDZixXQUFXO0lBQUEsT0FBQUEsTUFBQTtFQUFBO0VBQUEsSUFBQWhELFVBQUEsYUFBQThDLHNCQUFBLEVBQUFDLFFBQUE7RUFBQSxXQUFBOUMsYUFBQSxhQUFBNkMsc0JBQUE7SUFBQTVDLEdBQUE7SUFBQUMsS0FBQSxFQUVqQixTQUFBSSxJQUFJQSxDQUFDMUIsU0FBUyxFQUFFMkIsT0FBTyxFQUFFMkMsV0FBVyxFQUFFO01BQ3BDLElBQUFDLGVBQUEsR0FBaUI1QyxPQUFPLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFBMEMsZUFBQSxPQUFBeEMsZUFBQSxhQUFBdUMsZUFBQTtRQUEzQjFFLE1BQU0sR0FBQTJFLGVBQUE7TUFDYixJQUFNQyxNQUFNLEdBQUc7UUFDYkMsT0FBTyxFQUFFO1VBQ1B6RSxRQUFRLEVBQUUsVUFBVTtVQUNwQjBFLGNBQWMsRUFBRTtRQUNsQjtNQUNGLENBQUM7TUFFRCxJQUFJOUUsTUFBTSxDQUFDcUMsSUFBSSxJQUFJdUMsTUFBTSxFQUFFO1FBQ3pCLElBQU1HLFlBQVksR0FBR0gsTUFBTSxDQUFDNUUsTUFBTSxDQUFDcUMsSUFBSSxDQUFDO1FBQ3hDLE9BQU87VUFDTHJDLE1BQU0sRUFBQXRCLGFBQUEsQ0FBQUEsYUFBQSxLQUNBK0YsV0FBVyxDQUFDekUsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUM1QkcsU0FBUyxFQUFFbEMsTUFBTSxDQUFDQyxJQUFJLENBQUNpQyxTQUFTLENBQUMsQ0FBQ3lELE1BQU0sQ0FDdEMsVUFBQ0MsSUFBSSxFQUFFckMsR0FBRztjQUFBLE9BQUE5QyxhQUFBLENBQUFBLGFBQUEsS0FDTG1GLElBQUksR0FDSGtCLFlBQVksQ0FBQ3ZELEdBQUcsQ0FBQyxPQUFBMUMsZ0JBQUEsaUJBQ2ZpRyxZQUFZLENBQUN2RCxHQUFHLENBQUMsRUFBR3JCLFNBQVMsQ0FBQ3FCLEdBQUcsQ0FBQyxRQUFBMUMsZ0JBQUEsaUJBQ2xDMEMsR0FBRyxFQUFHckIsU0FBUyxDQUFDcUIsR0FBRyxDQUFDLENBQUM7WUFBQSxDQUMzQixFQUNGLENBQUMsQ0FDSDtVQUFDO1FBRUwsQ0FBQztNQUNIO01BRUEsT0FBTztRQUNMeEIsTUFBTSxFQUFBdEIsYUFBQSxDQUFBQSxhQUFBLEtBQ0ErRixXQUFXLENBQUN6RSxNQUFNLElBQUksQ0FBQyxDQUFDO1VBQzVCRyxTQUFTLEVBQVRBO1FBQVM7TUFFYixDQUFDO0lBQ0g7RUFBQztBQUFBLEVBckNrQ29DLGtCQUFNO0FBQUEsSUF3Q3JDeUMseUJBQXlCLDBCQUFBQyxRQUFBO0VBQUEsU0FBQUQsMEJBQUE7SUFBQSxJQUFBRSxNQUFBO0lBQUEsSUFBQXBFLGdCQUFBLG1CQUFBa0UseUJBQUE7SUFBQSxTQUFBRyxLQUFBLEdBQUF4RyxTQUFBLENBQUFDLE1BQUEsRUFBQW9DLElBQUEsT0FBQUMsS0FBQSxDQUFBa0UsS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO01BQUFwRSxJQUFBLENBQUFvRSxLQUFBLElBQUF6RyxTQUFBLENBQUF5RyxLQUFBO0lBQUE7SUFBQUYsTUFBQSxHQUFBaEcsVUFBQSxPQUFBOEYseUJBQUEsS0FBQTdELE1BQUEsQ0FBQUgsSUFBQTtJQUFBLElBQUFsQyxnQkFBQSxhQUFBb0csTUFBQSxhQUNuQjlELGtCQUFRLENBQUNDLEVBQUU7SUFBQSxPQUFBNkQsTUFBQTtFQUFBO0VBQUEsSUFBQTVELFVBQUEsYUFBQTBELHlCQUFBLEVBQUFDLFFBQUE7RUFBQSxXQUFBMUQsYUFBQSxhQUFBeUQseUJBQUE7SUFBQXhELEdBQUE7SUFBQUMsS0FBQSxFQUNyQixTQUFBSSxJQUFJQSxDQUFDSixLQUFLLEVBQUU7TUFDVixPQUFPLENBQUMsQ0FBQztJQUNYO0VBQUM7QUFBQSxFQUpxQ2Msa0JBQU07QUFPOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFTyxJQUFNOEMsWUFBWSxHQUFBdkYsT0FBQSxDQUFBdUYsWUFBQSxHQUFHO0VBQzFCQyxFQUFFLEVBQUUsSUFBSTtFQUNSakQsSUFBSSxFQUFFLElBQUk7RUFFVjtFQUNBa0QsTUFBTSxFQUFFLElBQUl2QyxtQkFBbUIsQ0FBQztJQUFDeEIsR0FBRyxFQUFFO0VBQVEsQ0FBQyxDQUFDO0VBQ2hEZ0UsS0FBSyxFQUFFLElBQUl4QyxtQkFBbUIsQ0FBQztJQUFDeEIsR0FBRyxFQUFFO0VBQU8sQ0FBQyxDQUFDO0VBQzlDaUUsS0FBSyxFQUFFLElBQUl6QyxtQkFBbUIsQ0FBQztJQUFDeEIsR0FBRyxFQUFFO0VBQU8sQ0FBQyxDQUFDO0VBQzlDa0UsU0FBUyxFQUFFLElBQUkxQyxtQkFBbUIsQ0FBQztJQUFDeEIsR0FBRyxFQUFFO0VBQVcsQ0FBQyxDQUFDO0VBQ3REbUUsTUFBTSxFQUFFLElBQUkzQyxtQkFBbUIsQ0FBQztJQUFDeEIsR0FBRyxFQUFFO0VBQVEsQ0FBQyxDQUFDO0VBQ2hEb0UsZ0JBQWdCLEVBQUUsSUFBSTVDLG1CQUFtQixDQUFDO0lBQUN4QixHQUFHLEVBQUU7RUFBa0IsQ0FBQyxDQUFDO0VBRXBFO0VBQ0FyQixTQUFTLEVBQUUsSUFBSWlFLHNCQUFzQixDQUFDO0lBQUM1QyxHQUFHLEVBQUU7RUFBVyxDQUFDLENBQUM7RUFFekQ7RUFDQTtFQUNBbUMsT0FBTyxFQUFFLElBQUlMLG9CQUFvQixDQUFDLENBQUM7RUFFbkM7RUFDQXVDLFVBQVUsRUFBRSxJQUFJbEYsc0JBQXNCLENBQUM7SUFDckNtRixVQUFVLEVBQUVqRyxnQkFBZ0I7SUFDNUIyQixHQUFHLEVBQUU7RUFDUCxDQUFDLENBQUM7RUFDRnVFLFVBQVUsRUFBRSxJQUFJdkQsc0JBQXNCLENBQUM7SUFDckNoQixHQUFHLEVBQUU7RUFDUCxDQUFDLENBQUM7RUFDRndFLFNBQVMsRUFBRSxJQUFJckYsc0JBQXNCLENBQUM7SUFDcENtRixVQUFVLEVBQUVqRyxnQkFBZ0I7SUFDNUIyQixHQUFHLEVBQUU7RUFDUCxDQUFDLENBQUM7RUFDRnlFLFNBQVMsRUFBRSxJQUFJekQsc0JBQXNCLENBQUM7SUFDcENoQixHQUFHLEVBQUU7RUFDUCxDQUFDLENBQUM7RUFFRjtFQUNBMEUsUUFBUSxFQUFFLElBQUlwQyw4QkFBOEIsQ0FBQztJQUFDdEMsR0FBRyxFQUFFO0VBQVUsQ0FBQyxDQUFDO0VBQy9EMkUsZ0JBQWdCLEVBQUUsSUFBSXJDLDhCQUE4QixDQUFDO0lBQ25EdEMsR0FBRyxFQUFFO0VBQ1AsQ0FBQyxDQUFDO0VBQ0Y0RSxlQUFlLEVBQUUsSUFBSXRDLDhCQUE4QixDQUFDO0lBQUN0QyxHQUFHLEVBQUU7RUFBaUIsQ0FBQyxDQUFDO0VBRTdFO0VBQ0E2RSxZQUFZLEVBQUUsSUFBSXJCLHlCQUF5QixDQUFDO0FBQzlDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBRkEsSUFHTXNCLGNBQWMsMEJBQUFDLFFBQUE7RUFBQSxTQUFBRCxlQUFBO0lBQUEsSUFBQXhGLGdCQUFBLG1CQUFBd0YsY0FBQTtJQUFBLE9BQUFwSCxVQUFBLE9BQUFvSCxjQUFBLEVBQUEzSCxTQUFBO0VBQUE7RUFBQSxJQUFBMkMsVUFBQSxhQUFBZ0YsY0FBQSxFQUFBQyxRQUFBO0VBQUEsV0FBQWhGLGFBQUEsYUFBQStFLGNBQUE7SUFBQTlFLEdBQUE7SUFBQUMsS0FBQSxFQUNsQixTQUFBQyxJQUFJQSxDQUFDaUMsT0FBTyxFQUFFNkMsS0FBSyxFQUFFO01BQ25CO01BQ0E7TUFDQSxXQUFBMUgsZ0JBQUEsaUJBQ0csSUFBSSxDQUFDMEMsR0FBRyxFQUFHdkQsTUFBTSxDQUFDQyxJQUFJLENBQUN5RixPQUFPLENBQUMsQ0FBQ0MsTUFBTSxDQUNyQyxVQUFDQyxJQUFJLEVBQUU0QyxJQUFJO1FBQUEsT0FBQS9ILGFBQUEsQ0FBQUEsYUFBQSxLQUNObUYsSUFBSSxXQUFBL0UsZ0JBQUEsaUJBQ04ySCxJQUFJLEVBQUc5QyxPQUFPLENBQUM4QyxJQUFJLENBQUMsQ0FBQ2hGLEtBQUs7TUFBQSxDQUMzQixFQUNGLENBQUMsQ0FDSCxDQUFDO0lBRUw7RUFBQztJQUFBRCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSSxJQUFJQSxDQUFDOEIsT0FBTyxFQUFFO01BQ1osT0FBTztRQUFDQSxPQUFPLEVBQVBBO01BQU8sQ0FBQztJQUNsQjtFQUFDO0FBQUEsRUFqQjBCcEIsa0JBQU07QUFBQSxJQW9CN0JtRSxpQkFBaUIsMEJBQUFDLFFBQUE7RUFBQSxTQUFBRCxrQkFBQTtJQUFBLElBQUE1RixnQkFBQSxtQkFBQTRGLGlCQUFBO0lBQUEsT0FBQXhILFVBQUEsT0FBQXdILGlCQUFBLEVBQUEvSCxTQUFBO0VBQUE7RUFBQSxJQUFBMkMsVUFBQSxhQUFBb0YsaUJBQUEsRUFBQUMsUUFBQTtFQUFBLFdBQUFwRixhQUFBLGFBQUFtRixpQkFBQTtJQUFBbEYsR0FBQTtJQUFBQyxLQUFBLEVBQ3JCLFNBQUFDLElBQUlBLENBQUNrRixTQUFTLEVBQUU7TUFDZCxXQUFBOUgsZ0JBQUEsaUJBQ0csSUFBSSxDQUFDMEMsR0FBRyxFQUFHb0YsU0FBUyxDQUFDQyxHQUFHLENBQUMsVUFBQUMsRUFBRTtRQUFBLE9BQUFwSSxhQUFBLENBQUFBLGFBQUEsS0FDdkJvSSxFQUFFO1VBQ0xuRixLQUFLLEVBQUVtRixFQUFFLENBQUNuRixLQUFLLEdBQUcsSUFBQW9GLGdCQUFJLEVBQUNELEVBQUUsQ0FBQ25GLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHO1FBQUk7TUFBQSxDQUN6RCxDQUFDO0lBRVA7RUFBQztJQUFBSCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSSxJQUFJQSxDQUFDK0UsU0FBUyxFQUFFO01BQ2QsT0FBTztRQUFDQSxTQUFTLEVBQUUzRixLQUFLLENBQUMrRixPQUFPLENBQUNKLFNBQVMsQ0FBQyxHQUFHQSxTQUFTLEdBQUcsQ0FBQ0EsU0FBUztNQUFDLENBQUM7SUFDeEU7RUFBQztBQUFBLEVBWjZCckUsa0JBQU07QUFldEMsSUFBTTBFLDJCQUEyQixHQUFHO0VBQ2xDcEMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUdxQyxFQUFFLEVBQUVwRixPQUFPLEVBQUUyQyxXQUFXLEVBQUs7SUFDckMsSUFBQTBDLGVBQUEsR0FBZ0JyRixPQUFPLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFBbUYsZUFBQSxPQUFBakYsZUFBQSxhQUFBZ0YsZUFBQTtNQUExQkUsS0FBSyxHQUFBRCxlQUFBO0lBQ1osSUFBTUUsS0FBSyxHQUFHLENBQUNKLEVBQUUsQ0FBQ0ssY0FBYyxDQUFDLGtCQUFrQixDQUFDO0lBQ3BEO0lBQ0EsSUFBTUMsT0FBTyxHQUNYTixFQUFFLENBQUNPLFdBQVcsSUFBSUosS0FBSyxDQUFDckgsTUFBTSxDQUFDRyxTQUFTLENBQUNHLE1BQU0sS0FBS29ILCtCQUFpQixDQUFDcEgsTUFBTSxDQUFDcUgsWUFBWTtJQUUzRixJQUFJTCxLQUFLLElBQUksQ0FBQ0UsT0FBTyxJQUFJSCxLQUFLLENBQUNySCxNQUFNLENBQUNHLFNBQVMsQ0FBQ0UsT0FBTyxFQUFFO01BQ3ZEO01BQ0EsT0FBTztRQUNMdUgsZ0JBQWdCLEVBQUVWLEVBQUUsQ0FBQ3JCLFVBQVU7UUFDL0JnQyxnQkFBZ0IsRUFBRVgsRUFBRSxDQUFDbkI7TUFDdkIsQ0FBQztJQUNIO0lBQ0EsT0FBTyxDQUFDLENBQUM7RUFDWDtBQUNGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFGQSxJQUdNK0IscUJBQXFCLDBCQUFBQyxTQUFBO0VBQUEsU0FBQUQsc0JBQUE7SUFBQSxJQUFBaEgsZ0JBQUEsbUJBQUFnSCxxQkFBQTtJQUFBLE9BQUE1SSxVQUFBLE9BQUE0SSxxQkFBQSxFQUFBbkosU0FBQTtFQUFBO0VBQUEsSUFBQTJDLFVBQUEsYUFBQXdHLHFCQUFBLEVBQUFDLFNBQUE7RUFBQSxXQUFBeEcsYUFBQSxhQUFBdUcscUJBQUE7SUFBQXRHLEdBQUE7SUFBQUMsS0FBQSxFQUN6QixTQUFBQyxJQUFJQSxDQUFDWSxjQUFjLEVBQUVSLE9BQU8sRUFBRTtNQUM1QjtNQUNBLElBQUFrRyxlQUFBLEdBQWdCbEcsT0FBTyxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQWdHLGdCQUFBLE9BQUE5RixlQUFBLGFBQUE2RixlQUFBO1FBQTFCWCxLQUFLLEdBQUFZLGdCQUFBO01BQ1osV0FBQW5KLGdCQUFBLGlCQUNHLElBQUksQ0FBQzBDLEdBQUcsRUFBR3ZELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDb0UsY0FBYyxDQUFDLENBQUNzQixNQUFNO01BQzVDO01BQ0EsVUFBQ0MsSUFBSSxFQUFFckMsR0FBRztRQUFBLE9BQUE5QyxhQUFBLENBQUFBLGFBQUEsS0FDTG1GLElBQUksV0FBQS9FLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFDTndELGNBQWMsQ0FBQ2QsR0FBRyxDQUFDLENBQUNHLEtBQUssRUFBRzBGLEtBQUssQ0FBQ3JILE1BQU0sQ0FBQ3NDLGNBQWMsQ0FBQ2QsR0FBRyxDQUFDLENBQUNHLEtBQUssQ0FBQyxHQUNoRSxJQUFBb0YsZ0JBQUksRUFBQ00sS0FBSyxDQUFDckgsTUFBTSxDQUFDc0MsY0FBYyxDQUFDZCxHQUFHLENBQUMsQ0FBQ0csS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEdBQzlFLElBQUksR0FDUFcsY0FBYyxDQUFDZCxHQUFHLENBQUMsQ0FBQ3FCLEtBQUssRUFBR3dFLEtBQUssQ0FBQ3JILE1BQU0sQ0FBQ3NDLGNBQWMsQ0FBQ2QsR0FBRyxDQUFDLENBQUNxQixLQUFLLENBQUM7TUFBQSxDQUNwRSxFQUNGLENBQUMsQ0FDSCxDQUFDO0lBRUw7RUFBQztJQUFBckIsR0FBQTtJQUFBQyxLQUFBLEVBQ0QsU0FBQUksSUFBSUEsQ0FBQ3FGLEVBQUUsRUFBRXBGLE9BQU8sRUFBRTJDLFdBQVcsRUFBRTtNQUM3QjtNQUNBLElBQUF5RCxnQkFBQSxHQUFnQnBHLE9BQU8sQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUFrRyxnQkFBQSxPQUFBaEcsZUFBQSxhQUFBK0YsZ0JBQUE7UUFBMUJiLEtBQUssR0FBQWMsZ0JBQUE7TUFDWixJQUFNQyxRQUFRLEdBQUduQiwyQkFBMkIsQ0FBQ0ksS0FBSyxDQUFDaEYsSUFBSSxDQUFDLEdBQ3BENEUsMkJBQTJCLENBQUNJLEtBQUssQ0FBQ2hGLElBQUksQ0FBQyxDQUFDNkUsRUFBRSxFQUFFcEYsT0FBTyxFQUFFMkMsV0FBVyxDQUFDLEdBQ2pFLENBQUMsQ0FBQztNQUVOLE9BQUEvRixhQUFBLENBQUFBLGFBQUEsS0FDSytGLFdBQVc7UUFDZHpFLE1BQU0sRUFBQXRCLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ0ErRixXQUFXLENBQUN6RSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQ3pCa0gsRUFBRSxHQUNGa0IsUUFBUTtNQUNaO0lBRUw7RUFBQztBQUFBLEVBakNpQzdGLGtCQUFNO0FBbUMxQztBQUNBO0FBQ0E7QUFGQSxJQUdNOEYsZ0JBQWdCLDBCQUFBQyxTQUFBO0VBQUEsU0FBQUQsaUJBQUE7SUFBQSxJQUFBdkgsZ0JBQUEsbUJBQUF1SCxnQkFBQTtJQUFBLE9BQUFuSixVQUFBLE9BQUFtSixnQkFBQSxFQUFBMUosU0FBQTtFQUFBO0VBQUEsSUFBQTJDLFVBQUEsYUFBQStHLGdCQUFBLEVBQUFDLFNBQUE7RUFBQSxXQUFBL0csYUFBQSxhQUFBOEcsZ0JBQUE7SUFBQTdHLEdBQUE7SUFBQUMsS0FBQSxFQUNwQixTQUFBQyxJQUFJQSxDQUFDNkcsY0FBYyxFQUFFekcsT0FBTyxFQUFFO01BQzVCLFdBQUFoRCxnQkFBQSxpQkFDRyxJQUFJLENBQUMwQyxHQUFHLEVBQUd2RCxNQUFNLENBQUNDLElBQUksQ0FBQ3FLLGNBQWMsQ0FBQyxDQUFDM0UsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXJDLEdBQUcsRUFBSztRQUM1RHFDLElBQUksQ0FBQ3JDLEdBQUcsQ0FBQyxHQUFHK0csY0FBYyxDQUFDL0csR0FBRyxDQUFDO1FBQy9CLE9BQU9xQyxJQUFJO01BQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRVY7RUFBQztJQUFBckMsR0FBQTtJQUFBQyxLQUFBLEVBQ0QsU0FBQUksSUFBSUEsQ0FBQzJHLEVBQUUsRUFBRTFHLE9BQU8sRUFBRTJDLFdBQVcsRUFBRTtNQUM3QixPQUFBL0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0srRixXQUFXLFdBQUEzRixnQkFBQSxpQkFDYixJQUFJLENBQUMwQyxHQUFHLEVBQUdnSCxFQUFFO0lBRWxCO0VBQUM7QUFBQSxFQWQ0QmpHLGtCQUFNO0FBZ0JyQyxJQUFNa0csdUJBQXVCLEdBQUc7RUFDOUJDLEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFHdkksU0FBUyxFQUFFMkIsT0FBTyxFQUFFQyxXQUFXLEVBQUs7SUFDMUMsSUFBTXFHLFFBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLElBQUFPLGdCQUFBLEdBQWdCN0csT0FBTyxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFBQTJHLGdCQUFBLE9BQUF6RyxlQUFBLGFBQUF3RyxnQkFBQTtNQUE5QnRCLEtBQUssR0FBQXVCLGdCQUFBO0lBQ1osSUFBTXRCLEtBQUssR0FDVCxDQUFDbkgsU0FBUyxDQUFDb0gsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUNwSCxTQUFTLENBQUMwSSxXQUFXLElBQUksQ0FBQzFJLFNBQVMsQ0FBQzJJLGdCQUFnQjtJQUM5RixJQUFJeEIsS0FBSyxFQUFFO01BQ1Q7TUFDQWMsUUFBUSxDQUFDUyxXQUFXLEdBQUd4QixLQUFLLENBQUNySCxNQUFNLENBQUN5RixLQUFLO01BQ3pDMkMsUUFBUSxDQUFDVSxnQkFBZ0IsR0FBRyxJQUFBQyxxQkFBUyxFQUFDNUksU0FBUyxDQUFDNkksVUFBVSxDQUFDO01BQzNELElBQUk3SSxTQUFTLENBQUM4SSxPQUFPLEVBQUU7UUFDckI7UUFDQTtRQUNBO1FBQ0FiLFFBQVEsQ0FBQ2MsTUFBTSxHQUFHLEtBQUs7TUFDekI7SUFDRjtJQUVBLE9BQU9kLFFBQVE7RUFDakIsQ0FBQztFQUNEdkQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUcxRSxTQUFTLEVBQUUyQixPQUFPLEVBQUVDLFdBQVcsRUFBSztJQUM1QztJQUNBLElBQU1xRyxRQUFzQixHQUFHLENBQUMsQ0FBQztJQUNqQyxJQUFBZSxnQkFBQSxHQUFnQnJILE9BQU8sQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQUFtSCxnQkFBQSxPQUFBakgsZUFBQSxhQUFBZ0gsZ0JBQUE7TUFBOUI5QixLQUFLLEdBQUErQixnQkFBQTtJQUNaLElBQU05QixLQUFLLEdBQ1RELEtBQUssQ0FBQy9FLGNBQWMsSUFDcEIsQ0FBQytFLEtBQUssQ0FBQy9FLGNBQWMsQ0FBQ2lGLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUN4RCxDQUFDcEgsU0FBUyxDQUFDMEksV0FBVyxJQUN0QixDQUFDMUksU0FBUyxDQUFDMkksZ0JBQWdCO0lBQzdCO0lBQ0EsSUFBTXRCLE9BQU8sR0FDVkgsS0FBSyxDQUFDL0UsY0FBYyxJQUFJK0UsS0FBSyxDQUFDL0UsY0FBYyxDQUFDbUYsV0FBVyxJQUN4RHRILFNBQVMsSUFBSUEsU0FBUyxDQUFDRyxNQUFNLEtBQUtvSCwrQkFBaUIsQ0FBQ3BILE1BQU0sQ0FBQ3FILFlBQWE7SUFFM0UsSUFBSUwsS0FBSyxFQUFFO01BQ1Q7TUFDQWMsUUFBUSxDQUFDUyxXQUFXLEdBQUd4QixLQUFLLENBQUNySCxNQUFNLENBQUN5RixLQUFLO01BQ3pDMkMsUUFBUSxDQUFDVSxnQkFBZ0IsR0FBRyxJQUFBQyxxQkFBUyxFQUFDNUksU0FBUyxDQUFDNkksVUFBVSxDQUFDO01BQzNELElBQUl4QixPQUFPLEVBQUU7UUFDWDtRQUNBWSxRQUFRLENBQUNjLE1BQU0sR0FBRyxJQUFJO1FBQ3RCZCxRQUFRLENBQUMvSCxPQUFPLEdBQUcsS0FBSztNQUMxQjtJQUNGO0lBRUEsT0FBTytILFFBQVE7RUFDakI7QUFDRixDQUFDO0FBQUMsSUFFSWlCLGlCQUFpQiwwQkFBQUMsU0FBQTtFQUFBLFNBQUFELGtCQUFBO0lBQUEsSUFBQUUsTUFBQTtJQUFBLElBQUF6SSxnQkFBQSxtQkFBQXVJLGlCQUFBO0lBQUEsU0FBQUcsS0FBQSxHQUFBN0ssU0FBQSxDQUFBQyxNQUFBLEVBQUFvQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQXVJLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtNQUFBekksSUFBQSxDQUFBeUksS0FBQSxJQUFBOUssU0FBQSxDQUFBOEssS0FBQTtJQUFBO0lBQUFGLE1BQUEsR0FBQXJLLFVBQUEsT0FBQW1LLGlCQUFBLEtBQUFsSSxNQUFBLENBQUFILElBQUE7SUFBQSxJQUFBbEMsZ0JBQUEsYUFBQXlLLE1BQUEsU0FDZixXQUFXO0lBQUEsT0FBQUEsTUFBQTtFQUFBO0VBQUEsSUFBQWpJLFVBQUEsYUFBQStILGlCQUFBLEVBQUFDLFNBQUE7RUFBQSxXQUFBL0gsYUFBQSxhQUFBOEgsaUJBQUE7SUFBQTdILEdBQUE7SUFBQUMsS0FBQSxFQUVqQixTQUFBSSxJQUFJQSxDQUFDMUIsU0FBUyxFQUFFMkIsT0FBTyxFQUFFQyxXQUFXLEVBQUU7TUFDcEMsSUFBQTJILGdCQUFBLEdBQWdCNUgsT0FBTyxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFBQTBILGdCQUFBLE9BQUF4SCxlQUFBLGFBQUF1SCxnQkFBQTtRQUE5QnJDLEtBQUssR0FBQXNDLGdCQUFBO01BQ1osSUFBTXZCLFFBQVEsR0FBR0ssdUJBQXVCLENBQUNwQixLQUFLLENBQUNoRixJQUFJLENBQUMsR0FDaERvRyx1QkFBdUIsQ0FBQ3BCLEtBQUssQ0FBQ2hGLElBQUksQ0FBQyxDQUFDbEMsU0FBUyxFQUFFMkIsT0FBTyxFQUFFQyxXQUFXLENBQUMsR0FDcEUsQ0FBQyxDQUFDO01BRU4sT0FBTztRQUNMNUIsU0FBUyxFQUFBekIsYUFBQSxDQUFBQSxhQUFBLEtBQ0p5QixTQUFTLEdBQ1RpSSxRQUFRO01BRWYsQ0FBQztJQUNIO0VBQUM7QUFBQSxFQWY2QjdGLGtCQUFNO0FBa0IvQixJQUFNcUgsWUFBWSxHQUFBOUosT0FBQSxDQUFBOEosWUFBQSxHQUFHO0VBQzFCdEUsRUFBRSxFQUFFLElBQUk7RUFDUmpELElBQUksRUFBRSxJQUFJO0VBQ1ZyQyxNQUFNLEVBQUUsSUFBSXVDLGtCQUFNLENBQUM7SUFDakJzSCxPQUFPLEVBQUV6SSxrQkFBUSxDQUFDMEksRUFBRTtJQUNwQnRJLEdBQUcsRUFBRSxRQUFRO0lBQ2JzRSxVQUFVLEVBQUU7TUFDVlAsTUFBTSxFQUFFLElBQUk7TUFDWkMsS0FBSyxFQUFFLElBQUk7TUFDWEMsS0FBSyxFQUFFLElBQUk7TUFDWHNFLGNBQWMsRUFBRSxJQUFJO01BQ3BCcEcsT0FBTyxFQUFFLElBQUkyQyxjQUFjLENBQUM7UUFDMUJ1RCxPQUFPLEVBQUV6SSxrQkFBUSxDQUFDMEksRUFBRTtRQUNwQnRJLEdBQUcsRUFBRTtNQUNQLENBQUMsQ0FBQztNQUNGa0UsU0FBUyxFQUFFLElBQUk7TUFDZnZGLFNBQVMsRUFBRSxJQUFJa0osaUJBQWlCLENBQUM7UUFDL0JRLE9BQU8sRUFBRXpJLGtCQUFRLENBQUMwSTtNQUNwQixDQUFDLENBQUM7TUFDRm5FLE1BQU0sRUFBRSxJQUFJO01BQ1pDLGdCQUFnQixFQUFFLElBQUk7TUFDdEJnQixTQUFTLEVBQUUsSUFBSUYsaUJBQWlCLENBQUM7UUFDL0JtRCxPQUFPLEVBQUV6SSxrQkFBUSxDQUFDMEksRUFBRTtRQUNwQnRJLEdBQUcsRUFBRTtNQUNQLENBQUM7SUFDSDtFQUNGLENBQUMsQ0FBQztFQUNGK0csY0FBYyxFQUFFLElBQUlGLGdCQUFnQixDQUFDO0lBQ25Dd0IsT0FBTyxFQUFFekksa0JBQVEsQ0FBQzBJLEVBQUU7SUFDcEJ0SSxHQUFHLEVBQUU7RUFDUCxDQUFDLENBQUM7RUFDRmMsY0FBYyxFQUFFLElBQUl3RixxQkFBcUIsQ0FBQztJQUN4QytCLE9BQU8sRUFBRXpJLGtCQUFRLENBQUMwSSxFQUFFO0lBQ3BCdEksR0FBRyxFQUFFO0VBQ1AsQ0FBQztBQUNILENBQUM7QUFBQyxJQUVXd0ksYUFBYSxHQUFBbEssT0FBQSxDQUFBa0ssYUFBQSwwQkFBQUMsU0FBQTtFQUFBLFNBQUFELGNBQUE7SUFBQSxJQUFBRSxNQUFBO0lBQUEsSUFBQXBKLGdCQUFBLG1CQUFBa0osYUFBQTtJQUFBLFNBQUFHLEtBQUEsR0FBQXhMLFNBQUEsQ0FBQUMsTUFBQSxFQUFBb0MsSUFBQSxPQUFBQyxLQUFBLENBQUFrSixLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7TUFBQXBKLElBQUEsQ0FBQW9KLEtBQUEsSUFBQXpMLFNBQUEsQ0FBQXlMLEtBQUE7SUFBQTtJQUFBRixNQUFBLEdBQUFoTCxVQUFBLE9BQUE4SyxhQUFBLEtBQUE3SSxNQUFBLENBQUFILElBQUE7SUFBQSxJQUFBbEMsZ0JBQUEsYUFBQW9MLE1BQUEsU0FDbEIsUUFBUTtJQUFBLE9BQUFBLE1BQUE7RUFBQTtFQUFBLElBQUE1SSxVQUFBLGFBQUEwSSxhQUFBLEVBQUFDLFNBQUE7RUFBQSxXQUFBMUksYUFBQSxhQUFBeUksYUFBQTtJQUFBeEksR0FBQTtJQUFBQyxLQUFBLEVBRWQsU0FBQUMsSUFBSUEsQ0FBQzJJLE1BQU0sRUFBRXZJLE9BQU8sRUFBRTtNQUFBLElBQUF3SSxPQUFBO01BQ3BCLElBQUFDLGdCQUFBLEdBQW1CekksT0FBTyxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQXVJLGdCQUFBLE9BQUFySSxlQUFBLGFBQUFvSSxnQkFBQTtRQUE3QkUsUUFBUSxHQUFBRCxnQkFBQTtNQUVmLFdBQUExTCxnQkFBQSxpQkFDRyxJQUFJLENBQUMwQyxHQUFHLEVBQUdpSixRQUFRLENBQUNDLFVBQVUsQ0FBQzlHLE1BQU0sQ0FBQyxVQUFDUCxLQUFLLEVBQUVzSCxLQUFLLEVBQUs7UUFDdkQ7UUFDQSxJQUFNdEQsS0FBSyxHQUFHZ0QsTUFBTSxDQUFDTSxLQUFLLENBQUM7UUFDM0IsSUFBSXRELEtBQUssQ0FBQ3VELGFBQWEsQ0FBQyxDQUFDLEVBQUU7VUFDekJ2SCxLQUFLLENBQUM3RSxJQUFJLENBQUM4TCxPQUFJLENBQUMxSSwyQkFBMkIsQ0FBQ3lGLEtBQUssQ0FBQyxDQUFDZ0QsTUFBTSxDQUFDO1FBQzVEO1FBQ0EsT0FBT2hILEtBQUs7TUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBRVY7RUFBQztJQUFBN0IsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUksSUFBSUEsQ0FBQ3dJLE1BQU0sRUFBRTtNQUFBLElBQUFRLE9BQUE7TUFDWCxXQUFBL0wsZ0JBQUEsaUJBQ0csSUFBSSxDQUFDMEMsR0FBRyxFQUFHNkksTUFBTSxDQUFDeEQsR0FBRyxDQUFDLFVBQUFRLEtBQUs7UUFBQSxPQUFJd0QsT0FBSSxDQUFDQywyQkFBMkIsQ0FBQ3pELEtBQUssRUFBRWdELE1BQU0sQ0FBQyxDQUFDQSxNQUFNO01BQUEsRUFBQztJQUUzRjtFQUFDO0FBQUEsRUF0QmdDOUgsa0JBQU07QUFBQSxJQXlCNUJ3SSxjQUFjLEdBQUFqTCxPQUFBLENBQUFpTCxjQUFBLDBCQUFBQyxTQUFBO0VBQUEsU0FBQUQsZUFBQTtJQUFBLElBQUFFLE9BQUE7SUFBQSxJQUFBbkssZ0JBQUEsbUJBQUFpSyxjQUFBO0lBQUEsU0FBQUcsTUFBQSxHQUFBdk0sU0FBQSxDQUFBQyxNQUFBLEVBQUFvQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQWlLLE1BQUEsR0FBQUMsTUFBQSxNQUFBQSxNQUFBLEdBQUFELE1BQUEsRUFBQUMsTUFBQTtNQUFBbkssSUFBQSxDQUFBbUssTUFBQSxJQUFBeE0sU0FBQSxDQUFBd00sTUFBQTtJQUFBO0lBQUFGLE9BQUEsR0FBQS9MLFVBQUEsT0FBQTZMLGNBQUEsS0FBQTVKLE1BQUEsQ0FBQUgsSUFBQTtJQUFBLElBQUFsQyxnQkFBQSxhQUFBbU0sT0FBQSxTQUNuQixTQUFTO0lBQUEsT0FBQUEsT0FBQTtFQUFBO0VBQUEsSUFBQTNKLFVBQUEsYUFBQXlKLGNBQUEsRUFBQUMsU0FBQTtFQUFBLFdBQUF6SixhQUFBLGFBQUF3SixjQUFBO0lBQUF2SixHQUFBO0lBQUFDLEtBQUEsRUFDZixTQUFBQyxJQUFJQSxDQUFDMEosT0FBTyxFQUFFO01BQUEsSUFBQUMsT0FBQTtNQUNaLE9BQU87UUFDTEQsT0FBTyxFQUFFQSxPQUFPLENBQ2IvTSxNQUFNLENBQUNpTiwrQkFBa0IsQ0FBQyxDQUMxQnpFLEdBQUcsQ0FBQyxVQUFBeEksTUFBTTtVQUFBLE9BQUlnTixPQUFJLENBQUN6SiwyQkFBMkIsQ0FBQ3ZELE1BQU0sQ0FBQyxDQUFDK00sT0FBTztRQUFBO01BQ25FLENBQUM7SUFDSDtFQUFDO0lBQUE1SixHQUFBO0lBQUFDLEtBQUEsRUFDRCxTQUFBSSxJQUFJQSxDQUFDdUosT0FBTyxFQUFFO01BQ1osT0FBTztRQUFDQSxPQUFPLEVBQVBBO01BQU8sQ0FBQztJQUNsQjtFQUFDO0FBQUEsRUFYaUM3SSxrQkFBTTtBQWMxQyxJQUFNZ0osa0JBQWtCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0FBQUMsSUFFMUNDLG1CQUFtQiwwQkFBQUMsU0FBQTtFQUFBLFNBQUFELG9CQUFBO0lBQUEsSUFBQUUsT0FBQTtJQUFBLElBQUE1SyxnQkFBQSxtQkFBQTBLLG1CQUFBO0lBQUEsU0FBQUcsTUFBQSxHQUFBaE4sU0FBQSxDQUFBQyxNQUFBLEVBQUFvQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQTBLLE1BQUEsR0FBQUMsTUFBQSxNQUFBQSxNQUFBLEdBQUFELE1BQUEsRUFBQUMsTUFBQTtNQUFBNUssSUFBQSxDQUFBNEssTUFBQSxJQUFBak4sU0FBQSxDQUFBaU4sTUFBQTtJQUFBO0lBQUFGLE9BQUEsR0FBQXhNLFVBQUEsT0FBQXNNLG1CQUFBLEtBQUFySyxNQUFBLENBQUFILElBQUE7SUFBQSxJQUFBbEMsZ0JBQUEsYUFBQTRNLE9BQUEsU0FDakIsbUJBQW1CO0lBQUEsT0FBQUEsT0FBQTtFQUFBO0VBQUEsSUFBQXBLLFVBQUEsYUFBQWtLLG1CQUFBLEVBQUFDLFNBQUE7RUFBQSxXQUFBbEssYUFBQSxhQUFBaUssbUJBQUE7SUFBQWhLLEdBQUE7SUFBQUMsS0FBQSxFQUV6QixTQUFBQyxJQUFJQSxDQUFDbUssaUJBQWlCLEVBQUU7TUFDdEIsT0FBTzVLLEtBQUssQ0FBQytGLE9BQU8sQ0FBQyxJQUFJLENBQUNsQixVQUFVLENBQUMsT0FBQWhILGdCQUFBLGlCQUU5QixJQUFJLENBQUMwQyxHQUFHLEVBQUcsSUFBSSxDQUFDc0UsVUFBVSxDQUFDbEMsTUFBTSxDQUNoQyxVQUFDQyxJQUFJLEVBQUVyQyxHQUFHO1FBQUEsT0FBQTlDLGFBQUEsQ0FBQUEsYUFBQSxLQUNMbUYsSUFBSSxHQUNIZ0ksaUJBQWlCLENBQUNySyxHQUFHLENBQUMsQ0FBQ3NLLE9BQU8sT0FBQWhOLGdCQUFBLGlCQUFLMEMsR0FBRyxFQUFHcUssaUJBQWlCLENBQUNySyxHQUFHLENBQUMsQ0FBQ3hCLE1BQU0sSUFBSSxDQUFDLENBQUM7TUFBQSxDQUNoRixFQUNGLENBQUMsQ0FDSCxDQUFDLElBRUgsQ0FBQyxDQUFDO0lBQ1I7RUFBQztJQUFBd0IsR0FBQTtJQUFBQyxLQUFBLEVBQ0QsU0FBQUksSUFBSUEsQ0FBQ2dLLGlCQUFpQixFQUFFO01BQ3RCO01BQ0E7TUFDQSxPQUFPNUssS0FBSyxDQUFDK0YsT0FBTyxDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQyxPQUFBaEgsZ0JBQUEsaUJBRTlCLElBQUksQ0FBQzBDLEdBQUcsRUFBRyxJQUFJLENBQUNzRSxVQUFVLENBQUNsQyxNQUFNLENBQ2hDLFVBQUNDLElBQUksRUFBRXJDLEdBQUc7UUFBQSxPQUFBOUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0xtRixJQUFJLE9BQUEvRSxnQkFBQSxpQkFFSjBDLEdBQUcsRUFBQTlDLGFBQUEsQ0FBQUEsYUFBQSxLQUNFbU4saUJBQWlCLENBQUNySyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDaENzSyxPQUFPLEVBQUVyTSxPQUFPLENBQUNvTSxpQkFBaUIsQ0FBQ3JLLEdBQUcsQ0FBQztRQUFDO01BQUEsQ0FHNUMsRUFDRixDQUFDLENBQ0gsQ0FBQyxJQUVILENBQUMsQ0FBQztJQUNSO0VBQUM7QUFBQSxFQW5DK0JlLGtCQUFNO0FBc0N4QyxJQUFNd0osa0JBQWtCLE1BQUE1SyxNQUFBLENBQU9vSyxrQkFBa0IsR0FBRSxVQUFVLEVBQUUsWUFBWSxFQUFDO0FBQUMsSUFFaEVTLG1CQUFtQixHQUFBbE0sT0FBQSxDQUFBa00sbUJBQUEsMEJBQUFDLFNBQUE7RUFBQSxTQUFBRCxvQkFBQTtJQUFBLElBQUFFLE9BQUE7SUFBQSxJQUFBcEwsZ0JBQUEsbUJBQUFrTCxtQkFBQTtJQUFBLFNBQUFHLE1BQUEsR0FBQXhOLFNBQUEsQ0FBQUMsTUFBQSxFQUFBb0MsSUFBQSxPQUFBQyxLQUFBLENBQUFrTCxNQUFBLEdBQUFDLE1BQUEsTUFBQUEsTUFBQSxHQUFBRCxNQUFBLEVBQUFDLE1BQUE7TUFBQXBMLElBQUEsQ0FBQW9MLE1BQUEsSUFBQXpOLFNBQUEsQ0FBQXlOLE1BQUE7SUFBQTtJQUFBRixPQUFBLEdBQUFoTixVQUFBLE9BQUE4TSxtQkFBQSxLQUFBN0ssTUFBQSxDQUFBSCxJQUFBO0lBQUEsSUFBQWxDLGdCQUFBLGFBQUFvTixPQUFBLFNBQ3hCLG1CQUFtQjtJQUFBLE9BQUFBLE9BQUE7RUFBQTtFQUFBLElBQUE1SyxVQUFBLGFBQUEwSyxtQkFBQSxFQUFBQyxTQUFBO0VBQUEsV0FBQTFLLGFBQUEsYUFBQXlLLG1CQUFBO0lBQUF4SyxHQUFBO0lBQUFDLEtBQUEsRUFFekIsU0FBQUMsSUFBSUEsQ0FBQ21LLGlCQUFpQixFQUFFO01BQ3RCO01BQ0EsT0FBTzVLLEtBQUssQ0FBQytGLE9BQU8sQ0FBQyxJQUFJLENBQUNsQixVQUFVLENBQUMsT0FBQWhILGdCQUFBLGlCQUU5QixJQUFJLENBQUMwQyxHQUFHLEVBQUcsSUFBSSxDQUFDc0UsVUFBVSxDQUFDbEMsTUFBTSxDQUNoQyxVQUFDQyxJQUFJLEVBQUVyQyxHQUFHO1FBQUEsT0FBQTlDLGFBQUEsQ0FBQUEsYUFBQSxLQUNMbUYsSUFBSSxXQUFBL0UsZ0JBQUEsaUJBQ04wQyxHQUFHLEVBQUE5QyxhQUFBLENBQUFBLGFBQUEsS0FDQ21OLGlCQUFpQixDQUFDckssR0FBRyxDQUFDLENBQUN4QixNQUFNO1VBQ2hDOEwsT0FBTyxFQUFFRCxpQkFBaUIsQ0FBQ3JLLEdBQUcsQ0FBQyxDQUFDc0s7UUFBTztNQUFBLENBRXpDLEVBQ0YsQ0FBQyxDQUNILENBQUMsSUFFSCxDQUFDLENBQUM7SUFDUjtFQUFDO0lBQUF0SyxHQUFBO0lBQUFDLEtBQUEsRUFDRCxTQUFBSSxJQUFJQSxDQUFDZ0ssaUJBQWlCLEVBQUU7TUFBQSxJQUFBUSxPQUFBO01BQ3RCLElBQU1DLGNBQWMsR0FBR1QsaUJBQWlCO01BQ3hDNU4sTUFBTSxDQUFDQyxJQUFJLENBQUMyTixpQkFBaUIsQ0FBQyxDQUFDaE4sT0FBTyxDQUFDLFVBQUEwTixVQUFVLEVBQUk7UUFDbkQsSUFBSUEsVUFBVSxLQUFLLFNBQVMsRUFBRTtVQUM1QixJQUFNQyxZQUFZLEdBQUdGLGNBQWMsQ0FBQ0MsVUFBVSxDQUFDLENBQUNDLFlBQVk7VUFDNUQsSUFBSSxDQUFDLElBQUFDLDZCQUFrQixFQUFDRCxZQUFZLENBQUMsRUFBRTtZQUNyQyxXQUFBMU4sZ0JBQUEsaUJBQVN1TixPQUFJLENBQUM3SyxHQUFHLEVBQUc4SyxjQUFjO1VBQ3BDO1VBQ0FyTyxNQUFNLENBQUNDLElBQUksQ0FBQ3NPLFlBQVksQ0FBQyxDQUFDM04sT0FBTyxDQUFDLFVBQUEyQyxHQUFHLEVBQUk7WUFDdkNnTCxZQUFZLENBQUNoTCxHQUFHLENBQUMsR0FBR2dMLFlBQVksQ0FBQ2hMLEdBQUcsQ0FBQyxDQUFDcUYsR0FBRyxDQUFDLFVBQUE2RixTQUFTLEVBQUk7Y0FDckQsSUFBSSxDQUFDQSxTQUFTLENBQUNDLElBQUksRUFBRTtnQkFDbkIsT0FBTztrQkFDTEEsSUFBSSxFQUFFRCxTQUFTO2tCQUNmRSxNQUFNLEVBQUU7Z0JBQ1YsQ0FBQztjQUNIO2NBQ0EsT0FBT0YsU0FBUztZQUNsQixDQUFDLENBQUM7VUFDSixDQUFDLENBQUM7UUFDSjtRQUNBLE9BQU9HLFNBQVM7TUFDbEIsQ0FBQyxDQUFDO01BQ0YsV0FBQS9OLGdCQUFBLGlCQUFTLElBQUksQ0FBQzBDLEdBQUcsRUFBRzhLLGNBQWM7SUFDcEM7RUFBQztBQUFBLEVBM0NzQy9KLGtCQUFNO0FBOEN4QyxJQUFNdUssYUFBYSxHQUFBaE4sT0FBQSxDQUFBZ04sYUFBQSxHQUFHO0VBQzNCdkgsTUFBTSxFQUFFLElBQUk7RUFDWkQsRUFBRSxFQUFFLElBQUk7RUFDUnFILElBQUksRUFBRSxJQUFJO0VBQ1Z0SyxJQUFJLEVBQUUsSUFBSTtFQUNWWixLQUFLLEVBQUUsSUFBSTtFQUNYc0wsUUFBUSxFQUFFO0FBQ1osQ0FBQztBQUFDLElBRVdDLG9CQUFvQixHQUFBbE4sT0FBQSxDQUFBa04sb0JBQUEsMEJBQUFDLFNBQUE7RUFBQSxTQUFBRCxxQkFBQTtJQUFBLElBQUFsTSxnQkFBQSxtQkFBQWtNLG9CQUFBO0lBQUEsT0FBQTlOLFVBQUEsT0FBQThOLG9CQUFBLEVBQUFyTyxTQUFBO0VBQUE7RUFBQSxJQUFBMkMsVUFBQSxhQUFBMEwsb0JBQUEsRUFBQUMsU0FBQTtFQUFBLFdBQUExTCxhQUFBLGFBQUF5TCxvQkFBQTtJQUFBeEwsR0FBQTtJQUFBQyxLQUFBLEVBQy9CLFNBQUFDLElBQUlBLENBQUNDLEtBQUssRUFBRTtNQUNWLFdBQUE3QyxnQkFBQSxpQkFDRyxJQUFJLENBQUMwQyxHQUFHLEVBQUdHLEtBQUssR0FBRyxJQUFJLENBQUNDLDJCQUEyQixDQUFDRCxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUNILEdBQUcsQ0FBQyxHQUFHLElBQUk7SUFFaEY7RUFBQztJQUFBQSxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSSxJQUFJQSxDQUFDRixLQUFLLEVBQUU7TUFDVixXQUFBN0MsZ0JBQUEsaUJBQVMsSUFBSSxDQUFDMEMsR0FBRyxFQUFHRyxLQUFLO0lBQzNCO0VBQUM7QUFBQSxFQVR1Q1ksa0JBQU07QUFBQSxJQVluQzJLLGVBQWUsR0FBQXBOLE9BQUEsQ0FBQW9OLGVBQUEsMEJBQUFDLFNBQUE7RUFBQSxTQUFBRCxnQkFBQTtJQUFBLElBQUFwTSxnQkFBQSxtQkFBQW9NLGVBQUE7SUFBQSxPQUFBaE8sVUFBQSxPQUFBZ08sZUFBQSxFQUFBdk8sU0FBQTtFQUFBO0VBQUEsSUFBQTJDLFVBQUEsYUFBQTRMLGVBQUEsRUFBQUMsU0FBQTtFQUFBLFdBQUE1TCxhQUFBLGFBQUEyTCxlQUFBO0lBQUExTCxHQUFBO0lBQUFDLEtBQUEsRUFDMUIsU0FBQTJMLG9CQUFvQkEsQ0FBQ3ZKLElBQUksRUFBQXdKLE1BQUEsRUFBZ0I7TUFBQSxJQUFBQyxNQUFBLE9BQUFuTCxlQUFBLGFBQUFrTCxNQUFBO1FBQWI3TCxHQUFHLEdBQUE4TCxNQUFBO1FBQUU3TCxLQUFLLEdBQUE2TCxNQUFBO01BQ3BDLElBQUksT0FBTzdMLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDOUIsT0FBQS9DLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbUYsSUFBSSxXQUFBL0UsZ0JBQUEsaUJBQ04wQyxHQUFHLEVBQUdDLEtBQUs7TUFFaEIsQ0FBQyxNQUFNLElBQUlBLEtBQUssSUFBSSxJQUFBOEwsUUFBQSxhQUFPOUwsS0FBSyxNQUFLLFFBQVEsSUFBSUEsS0FBSyxDQUFDK0wsV0FBVyxFQUFFO1FBQ2xFLE9BQUE5TyxhQUFBLENBQUFBLGFBQUEsS0FDS21GLElBQUksV0FBQS9FLGdCQUFBLGlCQUNOMEMsR0FBRyxFQUFHL0IsT0FBTyxDQUFDZ0MsS0FBSyxDQUFDaUUsU0FBUyxDQUFDO01BRW5DO01BQ0EsT0FBTzdCLElBQUk7SUFDYjtFQUFDO0lBQUFyQyxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBSSxJQUFJQSxDQUFDNEwsU0FBUyxFQUFFO01BQUEsSUFBQUMsT0FBQTtNQUNkOztNQUVBLElBQUksQ0FBQ3pNLEtBQUssQ0FBQytGLE9BQU8sQ0FBQ3lHLFNBQVMsQ0FBQyxJQUFJLENBQUNBLFNBQVMsQ0FBQzdPLE1BQU0sRUFBRTtRQUNsRCxPQUFPO1VBQUM2TyxTQUFTLEVBQUU7UUFBRSxDQUFDO01BQ3hCO01BRUEsT0FBTztRQUNMQSxTQUFTLEVBQUVBLFNBQVMsQ0FBQzVHLEdBQUcsQ0FBQyxVQUFBOEcsUUFBUTtVQUFBLE9BQUFqUCxhQUFBLENBQUFBLGFBQUEsS0FDNUJpUCxRQUFRO1lBQ1h0RCxNQUFNLEVBQUVwTSxNQUFNLENBQUMyUCxPQUFPLENBQUNELFFBQVEsQ0FBQ3RELE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDekcsTUFBTSxDQUFDOEosT0FBSSxDQUFDTixvQkFBb0IsRUFBRSxDQUFDLENBQUM7VUFBQztRQUFBLENBQ25GO01BQ0osQ0FBQztJQUNIO0VBQUM7QUFBQSxFQTdCa0M3SyxrQkFBTTtBQWdDcEMsSUFBTXNMLGFBQWEsR0FBQS9OLE9BQUEsQ0FBQStOLGFBQUEsR0FBQW5QLGFBQUEsQ0FBQUEsYUFBQSxLQUNyQm9PLGFBQWE7RUFDaEJnQixRQUFRLEVBQUUsSUFBSTtFQUNkQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsS0FBSyxFQUFFLElBQUloQixvQkFBb0IsQ0FBQztJQUM5Qm5ELE9BQU8sRUFBRXpJLGtCQUFRLENBQUMwSSxFQUFFO0lBQ3BCdEksR0FBRyxFQUFFLE9BQU87SUFDWnNFLFVBQVUsRUFBRTtNQUNWNkcsSUFBSSxFQUFFLElBQUk7TUFDVnRLLElBQUksRUFBRTtJQUNSO0VBQ0YsQ0FBQyxDQUFDO0VBRUY7RUFDQTRMLE9BQU8sRUFBRSxJQUFJO0VBQ2JDLEtBQUssRUFBRTtBQUFJLEVBQ1o7QUFFTSxJQUFNQyxZQUFZLEdBQUFyTyxPQUFBLENBQUFxTyxZQUFBLEdBQUc7RUFDMUIvQyxPQUFPLEVBQUUsSUFBSUwsY0FBYyxDQUFDO0lBQzFCbEIsT0FBTyxFQUFFekksa0JBQVEsQ0FBQ0MsRUFBRTtJQUNwQnlFLFVBQVUsRUFBRWdIO0VBQ2QsQ0FBQyxDQUFDO0VBQ0Z6QyxNQUFNLEVBQUUsSUFBSUwsYUFBYSxDQUFDO0lBQ3hCSCxPQUFPLEVBQUV6SSxrQkFBUSxDQUFDQyxFQUFFO0lBQ3BCeUUsVUFBVSxFQUFFVDtFQUNkLENBQUMsQ0FBQztFQUNGd0csaUJBQWlCLEVBQUUsSUFBSUwsbUJBQW1CLENBQUM7SUFDekMzQixPQUFPLEVBQUV6SSxrQkFBUSxDQUFDQyxFQUFFO0lBQ3BCeUUsVUFBVSxFQUFFeUY7RUFDZCxDQUFDLENBQUM7RUFDRjZDLGFBQWEsRUFBRTtBQUNqQixDQUFDO0FBRU0sSUFBTUMsWUFBWSxHQUFBdk8sT0FBQSxDQUFBdU8sWUFBQSxHQUFHO0VBQzFCakQsT0FBTyxFQUFFLElBQUlMLGNBQWMsQ0FBQztJQUMxQmxCLE9BQU8sRUFBRXpJLGtCQUFRLENBQUMwSSxFQUFFO0lBQ3BCaEUsVUFBVSxFQUFFK0g7RUFDZCxDQUFDLENBQUM7RUFDRnhELE1BQU0sRUFBRSxJQUFJTCxhQUFhLENBQUM7SUFDeEJILE9BQU8sRUFBRXpJLGtCQUFRLENBQUMwSSxFQUFFO0lBQ3BCaEUsVUFBVSxFQUFFOEQ7RUFDZCxDQUFDLENBQUM7RUFDRmlDLGlCQUFpQixFQUFFLElBQUlHLG1CQUFtQixDQUFDO0lBQ3pDbkMsT0FBTyxFQUFFekksa0JBQVEsQ0FBQzBJLEVBQUU7SUFDcEJoRSxVQUFVLEVBQUVpRztFQUNkLENBQUMsQ0FBQztFQUNGcUMsYUFBYSxFQUFFLElBQUk7RUFDbkJYLFNBQVMsRUFBRSxJQUFJUCxlQUFlLENBQUM7SUFDN0IxTCxHQUFHLEVBQUUsV0FBVztJQUNoQnFJLE9BQU8sRUFBRXpJLGtCQUFRLENBQUMwSTtFQUNwQixDQUFDLENBQUM7RUFDRndFLGVBQWUsRUFBRSxJQUFJL0wsa0JBQU0sQ0FBQztJQUMxQnNILE9BQU8sRUFBRXpJLGtCQUFRLENBQUMwSSxFQUFFO0lBQ3BCaEUsVUFBVSxFQUFFO01BQ1Z5SSxXQUFXLEVBQUUsSUFBSTtNQUNqQkwsS0FBSyxFQUFFO0lBQ1QsQ0FBQztJQUNEMU0sR0FBRyxFQUFFO0VBQ1AsQ0FBQztBQUNILENBQUM7QUFFTSxJQUFNZ04sZ0JBQWdCLEdBQUExTyxPQUFBLENBQUEwTyxnQkFBQSxHQUFHLElBQUlqTSxrQkFBTSxDQUFDO0VBQ3pDc0gsT0FBTyxFQUFFekksa0JBQVEsQ0FBQ0MsRUFBRTtFQUNwQnlFLFVBQVUsRUFBRXFJLFlBQVk7RUFDeEIzTSxHQUFHLEVBQUU7QUFDUCxDQUFDLENBQUM7QUFFSyxJQUFNaU4sZ0JBQWdCLEdBQUEzTyxPQUFBLENBQUEyTyxnQkFBQSxHQUFHLElBQUlsTSxrQkFBTSxDQUFDO0VBQ3pDc0gsT0FBTyxFQUFFekksa0JBQVEsQ0FBQzBJLEVBQUU7RUFDcEJoRSxVQUFVLEVBQUV1SSxZQUFZO0VBQ3hCN00sR0FBRyxFQUFFO0FBQ1AsQ0FBQyxDQUFDO0FBRUssSUFBTWtOLGNBQWMsR0FBQTVPLE9BQUEsQ0FBQTRPLGNBQUEsT0FBQTVQLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFDeEJzQyxrQkFBUSxDQUFDQyxFQUFFLEVBQUc7RUFDYkssSUFBSSxFQUFFLFNBQU5BLElBQUlBLENBQUVpTixNQUFNO0lBQUEsT0FBSUgsZ0JBQWdCLENBQUM5TSxJQUFJLENBQUNpTixNQUFNLENBQUM7RUFBQTtFQUM3QzlNLElBQUksRUFBRSxTQUFOQSxJQUFJQSxDQUFFK00sTUFBTTtJQUFBLE9BQUlILGdCQUFnQixDQUFDNU0sSUFBSSxDQUFDMk0sZ0JBQWdCLENBQUMzTSxJQUFJLENBQUMrTSxNQUFNLENBQUMsQ0FBQ25FLFFBQVEsQ0FBQztFQUFBO0FBQy9FLENBQUMsR0FDQXJKLGtCQUFRLENBQUMwSSxFQUFFLEVBQUcyRSxnQkFBZ0IsQ0FDaEM7O0FBRUQ7QUFBQSxJQUFBSSxRQUFBLEdBQUEvTyxPQUFBLGNBQ2U0TyxjQUFjIiwiaWdub3JlTGlzdCI6W119