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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/dist/actions/action-wrapper.js +36 -41
  2. package/dist/actions/actions.js +15 -21
  3. package/dist/actions/identity-actions.js +14 -20
  4. package/dist/actions/index.js +16 -16
  5. package/dist/actions/map-state-actions.js +12 -18
  6. package/dist/actions/map-style-actions.js +30 -46
  7. package/dist/actions/provider-actions.js +49 -73
  8. package/dist/actions/ui-state-actions.js +73 -113
  9. package/dist/actions/vis-state-actions.js +152 -148
  10. package/dist/cloud-providers/index.js +6 -7
  11. package/dist/cloud-providers/provider.js +189 -279
  12. package/dist/components/bottom-widget.js +105 -117
  13. package/dist/components/common/action-panel.js +122 -74
  14. package/dist/components/common/animation-control/animation-control.js +69 -54
  15. package/dist/components/common/animation-control/animation-controller.js +134 -160
  16. package/dist/components/common/animation-control/animation-speed-slider.js +47 -54
  17. package/dist/components/common/animation-control/floating-time-display.js +120 -100
  18. package/dist/components/common/animation-control/playback-controls.js +147 -144
  19. package/dist/components/common/animation-control/speed-control.js +31 -23
  20. package/dist/components/common/checkbox.js +56 -70
  21. package/dist/components/common/color-legend.js +83 -110
  22. package/dist/components/common/data-table/button.js +31 -23
  23. package/dist/components/common/data-table/canvas.js +11 -5
  24. package/dist/components/common/data-table/cell-size.js +51 -61
  25. package/dist/components/common/data-table/grid.js +40 -59
  26. package/dist/components/common/data-table/index.js +464 -348
  27. package/dist/components/common/data-table/option-dropdown.js +50 -33
  28. package/dist/components/common/dataset-label.js +17 -13
  29. package/dist/components/common/error-boundary.js +27 -45
  30. package/dist/components/common/field-selector.js +99 -139
  31. package/dist/components/common/field-token.js +24 -9
  32. package/dist/components/common/file-uploader/file-drop.js +96 -115
  33. package/dist/components/common/file-uploader/file-upload-progress.js +68 -45
  34. package/dist/components/common/file-uploader/file-upload.js +215 -187
  35. package/dist/components/common/file-uploader/upload-button.js +35 -22
  36. package/dist/components/common/histogram-plot.js +47 -58
  37. package/dist/components/common/icons/add.js +14 -27
  38. package/dist/components/common/icons/anchor_window.js +16 -18
  39. package/dist/components/common/icons/arrow-down-alt.js +14 -27
  40. package/dist/components/common/icons/arrow-down-solid.js +14 -27
  41. package/dist/components/common/icons/arrow-down.js +14 -27
  42. package/dist/components/common/icons/arrow-left.js +17 -30
  43. package/dist/components/common/icons/arrow-right.js +14 -27
  44. package/dist/components/common/icons/arrow-up-alt.js +15 -28
  45. package/dist/components/common/icons/arrow-up-solid.js +14 -27
  46. package/dist/components/common/icons/arrow-up.js +14 -27
  47. package/dist/components/common/icons/base.js +39 -57
  48. package/dist/components/common/icons/bug.js +16 -29
  49. package/dist/components/common/icons/cancel.js +14 -27
  50. package/dist/components/common/icons/checkmark.js +18 -31
  51. package/dist/components/common/icons/chevron-right.js +20 -33
  52. package/dist/components/common/icons/clipboard.js +15 -28
  53. package/dist/components/common/icons/clock.js +16 -29
  54. package/dist/components/common/icons/close.js +19 -32
  55. package/dist/components/common/icons/code-alt.js +16 -29
  56. package/dist/components/common/icons/copy.js +18 -31
  57. package/dist/components/common/icons/crosshairs.js +16 -29
  58. package/dist/components/common/icons/cube-3d.js +18 -31
  59. package/dist/components/common/icons/cursor-click.js +18 -31
  60. package/dist/components/common/icons/data-table.js +15 -28
  61. package/dist/components/common/icons/db.js +15 -28
  62. package/dist/components/common/icons/delete.js +16 -29
  63. package/dist/components/common/icons/docs.js +30 -43
  64. package/dist/components/common/icons/drag-n-drop.js +16 -29
  65. package/dist/components/common/icons/draw-polygon.js +33 -46
  66. package/dist/components/common/icons/email.js +18 -31
  67. package/dist/components/common/icons/expand.js +16 -29
  68. package/dist/components/common/icons/eye-seen.js +16 -29
  69. package/dist/components/common/icons/eye-unseen.js +16 -29
  70. package/dist/components/common/icons/file-type.js +35 -19
  71. package/dist/components/common/icons/file.js +14 -27
  72. package/dist/components/common/icons/files.js +14 -26
  73. package/dist/components/common/icons/filter-funnel.js +14 -27
  74. package/dist/components/common/icons/free-window.js +16 -18
  75. package/dist/components/common/icons/gear.js +16 -29
  76. package/dist/components/common/icons/hash.js +14 -27
  77. package/dist/components/common/icons/histogram.js +15 -27
  78. package/dist/components/common/icons/index.js +156 -156
  79. package/dist/components/common/icons/info.js +25 -38
  80. package/dist/components/common/icons/layers.js +14 -27
  81. package/dist/components/common/icons/left-arrow.js +16 -29
  82. package/dist/components/common/icons/legend.js +14 -27
  83. package/dist/components/common/icons/line-chart.js +14 -27
  84. package/dist/components/common/icons/login.js +17 -30
  85. package/dist/components/common/icons/logout.js +16 -29
  86. package/dist/components/common/icons/map-icon.js +18 -32
  87. package/dist/components/common/icons/map.js +18 -32
  88. package/dist/components/common/icons/messages.js +14 -27
  89. package/dist/components/common/icons/minus.js +14 -27
  90. package/dist/components/common/icons/order-by-dataset.js +15 -17
  91. package/dist/components/common/icons/order-by-list.js +7 -9
  92. package/dist/components/common/icons/pause.js +14 -27
  93. package/dist/components/common/icons/picture.js +14 -26
  94. package/dist/components/common/icons/pin.js +17 -30
  95. package/dist/components/common/icons/play.js +14 -27
  96. package/dist/components/common/icons/polygon.js +35 -48
  97. package/dist/components/common/icons/rectangle.js +36 -49
  98. package/dist/components/common/icons/reduce.js +17 -30
  99. package/dist/components/common/icons/reset.js +14 -27
  100. package/dist/components/common/icons/rocket.js +14 -27
  101. package/dist/components/common/icons/save.js +16 -29
  102. package/dist/components/common/icons/save2.js +20 -33
  103. package/dist/components/common/icons/search.js +16 -29
  104. package/dist/components/common/icons/settings.js +16 -29
  105. package/dist/components/common/icons/share.js +14 -27
  106. package/dist/components/common/icons/split.js +42 -55
  107. package/dist/components/common/icons/square-select.js +16 -29
  108. package/dist/components/common/icons/swap-horizontal.js +18 -31
  109. package/dist/components/common/icons/table.js +14 -27
  110. package/dist/components/common/icons/trash.js +16 -29
  111. package/dist/components/common/icons/upload.js +14 -27
  112. package/dist/components/common/icons/vert-dots.js +52 -65
  113. package/dist/components/common/icons/vert-three-dots.js +27 -40
  114. package/dist/components/common/icons/warning.js +26 -39
  115. package/dist/components/common/image-preview.js +71 -33
  116. package/dist/components/common/info-helper.js +36 -29
  117. package/dist/components/common/item-selector/accessor.js +7 -13
  118. package/dist/components/common/item-selector/chickleted-input.js +72 -56
  119. package/dist/components/common/item-selector/dropdown-list.js +182 -214
  120. package/dist/components/common/item-selector/item-selector-submenu.js +34 -55
  121. package/dist/components/common/item-selector/item-selector.js +183 -194
  122. package/dist/components/common/item-selector/typeahead.js +236 -248
  123. package/dist/components/common/line-chart.js +80 -58
  124. package/dist/components/common/loading-spinner.js +46 -31
  125. package/dist/components/common/logo.js +61 -48
  126. package/dist/components/common/map-layer-selector.js +31 -25
  127. package/dist/components/common/modal.js +167 -106
  128. package/dist/components/common/portaled.js +169 -189
  129. package/dist/components/common/progress-bar.js +27 -24
  130. package/dist/components/common/range-brush.js +176 -215
  131. package/dist/components/common/range-plot.js +52 -63
  132. package/dist/components/common/range-slider.js +206 -231
  133. package/dist/components/common/slider/mouse-event.js +59 -66
  134. package/dist/components/common/slider/slider-bar-handle.js +51 -61
  135. package/dist/components/common/slider/slider-handle.js +127 -102
  136. package/dist/components/common/slider/slider.js +143 -162
  137. package/dist/components/common/styled-components.js +518 -256
  138. package/dist/components/common/switch.js +11 -11
  139. package/dist/components/common/time-range-slider-time-title.js +49 -32
  140. package/dist/components/common/time-range-slider.js +56 -45
  141. package/dist/components/common/time-slider-marker.js +71 -52
  142. package/dist/components/common/tippy-tooltip.js +89 -59
  143. package/dist/components/common/toolbar-item.js +53 -45
  144. package/dist/components/common/toolbar.js +24 -18
  145. package/dist/components/common/vertical-toolbar.js +13 -6
  146. package/dist/components/container.js +87 -119
  147. package/dist/components/context.js +6 -8
  148. package/dist/components/editor/constants.js +4 -4
  149. package/dist/components/editor/editor.js +122 -157
  150. package/dist/components/editor/feature-action-panel.js +52 -59
  151. package/dist/components/editor/feature-styles.js +46 -29
  152. package/dist/components/editor/handle-style.js +38 -29
  153. package/dist/components/filters/components.js +8 -4
  154. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +33 -43
  155. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +20 -21
  156. package/dist/components/filters/filter-panels/new-filter-panel.js +24 -31
  157. package/dist/components/filters/filter-panels/polygon-filter-panel.js +26 -31
  158. package/dist/components/filters/filter-panels/range-filter-panel.js +20 -21
  159. package/dist/components/filters/filter-panels/single-select-filter-panel.js +20 -21
  160. package/dist/components/filters/filter-panels/time-range-filter-panel.js +28 -31
  161. package/dist/components/filters/index.js +10 -10
  162. package/dist/components/filters/multi-select-filter.js +11 -9
  163. package/dist/components/filters/polygon-filter.js +26 -41
  164. package/dist/components/filters/range-filter.js +9 -7
  165. package/dist/components/filters/single-select-filter.js +11 -13
  166. package/dist/components/filters/time-range-filter.js +16 -14
  167. package/dist/components/filters/time-widget.js +125 -84
  168. package/dist/components/geocoder/geocoder.js +158 -177
  169. package/dist/components/geocoder-panel.js +66 -87
  170. package/dist/components/index.js +328 -329
  171. package/dist/components/injector.js +44 -63
  172. package/dist/components/kepler-gl.js +325 -361
  173. package/dist/components/map/coordinate-info.js +18 -16
  174. package/dist/components/map/layer-hover-info.js +108 -86
  175. package/dist/components/map/layer-selector-panel.js +50 -48
  176. package/dist/components/map/locale-panel.js +38 -44
  177. package/dist/components/map/map-control-panel.js +70 -47
  178. package/dist/components/map/map-control-toolbar.js +9 -6
  179. package/dist/components/map/map-control-tooltip.js +10 -8
  180. package/dist/components/map/map-control.js +35 -27
  181. package/dist/components/map/map-draw-panel.js +38 -48
  182. package/dist/components/map/map-legend-panel.js +47 -50
  183. package/dist/components/map/map-legend.js +133 -116
  184. package/dist/components/map/map-popover.js +155 -100
  185. package/dist/components/map/split-map-button.js +30 -34
  186. package/dist/components/map/toggle-3d-button.js +25 -27
  187. package/dist/components/map-container.js +313 -359
  188. package/dist/components/maps-layout.js +16 -26
  189. package/dist/components/modal-container.js +359 -355
  190. package/dist/components/modals/add-map-style-modal.js +233 -194
  191. package/dist/components/modals/cloud-tile.js +96 -67
  192. package/dist/components/modals/data-table-modal.js +155 -152
  193. package/dist/components/modals/delete-data-modal.js +20 -20
  194. package/dist/components/modals/error-display.js +9 -7
  195. package/dist/components/modals/export-data-modal.js +118 -140
  196. package/dist/components/modals/export-image-modal.js +82 -69
  197. package/dist/components/modals/export-map-modal/components.js +20 -18
  198. package/dist/components/modals/export-map-modal/export-html-map.js +82 -74
  199. package/dist/components/modals/export-map-modal/export-json-map.js +65 -45
  200. package/dist/components/modals/export-map-modal/export-map-modal.js +42 -47
  201. package/dist/components/modals/image-modal-container.js +20 -21
  202. package/dist/components/modals/load-data-modal.js +28 -30
  203. package/dist/components/modals/load-storage-map.js +277 -178
  204. package/dist/components/modals/loading-dialog.js +41 -19
  205. package/dist/components/modals/modal-dialog.js +4 -6
  206. package/dist/components/modals/modal-tabs.js +83 -48
  207. package/dist/components/modals/overwrite-map-modal.js +41 -30
  208. package/dist/components/modals/provider-modal-container.js +23 -42
  209. package/dist/components/modals/save-map-modal.js +107 -83
  210. package/dist/components/modals/share-map-modal.js +101 -95
  211. package/dist/components/modals/status-panel.js +63 -43
  212. package/dist/components/modals/storage-map-viewer.js +133 -70
  213. package/dist/components/notification-panel/notification-item.js +94 -97
  214. package/dist/components/notification-panel.js +35 -43
  215. package/dist/components/performance.js +49 -53
  216. package/dist/components/plot-container.js +151 -169
  217. package/dist/components/side-panel/cloud-storage-dropdown.js +13 -15
  218. package/dist/components/side-panel/common/dataset-info.js +16 -12
  219. package/dist/components/side-panel/common/dataset-tag.js +48 -27
  220. package/dist/components/side-panel/common/dataset-title.js +119 -116
  221. package/dist/components/side-panel/common/source-data-catalog.js +31 -32
  222. package/dist/components/side-panel/common/source-data-selector.js +52 -77
  223. package/dist/components/side-panel/custom-panel.js +6 -8
  224. package/dist/components/side-panel/filter-manager.js +48 -62
  225. package/dist/components/side-panel/filter-panel/filter-panel-header.js +35 -25
  226. package/dist/components/side-panel/filter-panel/filter-panel.js +46 -64
  227. package/dist/components/side-panel/interaction-manager.js +20 -18
  228. package/dist/components/side-panel/interaction-panel/brush-config.js +17 -17
  229. package/dist/components/side-panel/interaction-panel/interaction-panel.js +76 -95
  230. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +118 -143
  231. package/dist/components/side-panel/interaction-panel/tooltip-config.js +95 -76
  232. package/dist/components/side-panel/layer-manager.js +105 -115
  233. package/dist/components/side-panel/layer-panel/add-layer-button.js +92 -54
  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 +50 -37
  236. package/dist/components/side-panel/layer-panel/color-range-selector.js +196 -207
  237. package/dist/components/side-panel/layer-panel/color-selector.js +104 -110
  238. package/dist/components/side-panel/layer-panel/column-selector.js +34 -22
  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 +248 -205
  241. package/dist/components/side-panel/layer-panel/custom-picker.js +51 -69
  242. package/dist/components/side-panel/layer-panel/dataset-layer-group.js +37 -42
  243. package/dist/components/side-panel/layer-panel/dataset-layer-section.js +31 -27
  244. package/dist/components/side-panel/layer-panel/dataset-section.js +45 -35
  245. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +14 -13
  246. package/dist/components/side-panel/layer-panel/hex-column-config.js +32 -55
  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 +42 -46
  249. package/dist/components/side-panel/layer-panel/layer-config-group.js +178 -144
  250. package/dist/components/side-panel/layer-panel/layer-configurator.js +826 -830
  251. package/dist/components/side-panel/layer-panel/layer-list.js +101 -94
  252. package/dist/components/side-panel/layer-panel/layer-panel-header.js +124 -82
  253. package/dist/components/side-panel/layer-panel/layer-panel.js +111 -105
  254. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +67 -58
  255. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +47 -32
  256. package/dist/components/side-panel/layer-panel/layer-type-selector.js +30 -41
  257. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +42 -43
  258. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +55 -57
  259. package/dist/components/side-panel/layer-panel/single-color-palette.js +48 -33
  260. package/dist/components/side-panel/layer-panel/text-label-panel.js +81 -116
  261. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +88 -102
  262. package/dist/components/side-panel/layer-panel/vis-config-slider.js +99 -85
  263. package/dist/components/side-panel/layer-panel/vis-config-switch.js +38 -29
  264. package/dist/components/side-panel/map-manager.js +70 -89
  265. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +72 -60
  266. package/dist/components/side-panel/map-style-panel/map-style-selector.js +64 -42
  267. package/dist/components/side-panel/panel-dropdown.js +21 -37
  268. package/dist/components/side-panel/panel-header-action.js +60 -65
  269. package/dist/components/side-panel/panel-header.js +165 -184
  270. package/dist/components/side-panel/panel-tab.js +35 -29
  271. package/dist/components/side-panel/panel-title.js +15 -18
  272. package/dist/components/side-panel/panel-toggle.js +30 -31
  273. package/dist/components/side-panel/side-bar.js +100 -91
  274. package/dist/components/side-panel.js +108 -123
  275. package/dist/connect/keplergl-connect.js +17 -26
  276. package/dist/connect/with-local-selector.js +31 -63
  277. package/dist/constants/action-types.js +113 -115
  278. package/dist/constants/color-palette.js +14 -16
  279. package/dist/constants/color-ranges.js +23 -28
  280. package/dist/constants/custom-color-ranges.js +12 -12
  281. package/dist/constants/default-settings.js +323 -254
  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 +9 -5
  286. package/dist/constants/user-guides.js +10 -10
  287. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +37 -63
  288. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +52 -56
  289. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +165 -168
  290. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +24 -43
  291. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.d.ts +2 -2
  292. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +27 -40
  293. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +27 -40
  294. package/dist/deckgl-layers/layer-utils/cluster-utils.js +60 -68
  295. package/dist/deckgl-layers/layer-utils/cpu-aggregator.d.ts +4 -4
  296. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +281 -282
  297. package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
  298. package/dist/deckgl-layers/line-layer/line-layer.js +62 -70
  299. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +37 -51
  300. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +65 -85
  301. package/dist/index.js +15 -16
  302. package/dist/layers/aggregation-layer.js +299 -331
  303. package/dist/layers/arc-layer/arc-layer-icon.js +27 -41
  304. package/dist/layers/arc-layer/arc-layer.js +174 -201
  305. package/dist/layers/base-layer.d.ts +1 -1
  306. package/dist/layers/base-layer.js +1371 -1544
  307. package/dist/layers/cluster-layer/cluster-layer-icon.js +30 -44
  308. package/dist/layers/cluster-layer/cluster-layer.js +89 -103
  309. package/dist/layers/default-layer-icon.js +39 -53
  310. package/dist/layers/geojson-layer/geojson-layer-icon.js +42 -55
  311. package/dist/layers/geojson-layer/geojson-layer.js +292 -353
  312. package/dist/layers/geojson-layer/geojson-utils.js +31 -36
  313. package/dist/layers/grid-layer/grid-layer-icon.js +87 -100
  314. package/dist/layers/grid-layer/grid-layer.js +51 -61
  315. package/dist/layers/grid-layer/grid-utils.js +13 -9
  316. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +21 -35
  317. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +225 -260
  318. package/dist/layers/h3-hexagon-layer/h3-utils.js +16 -16
  319. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +39 -52
  320. package/dist/layers/heatmap-layer/heatmap-layer.js +140 -171
  321. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +51 -64
  322. package/dist/layers/hexagon-layer/hexagon-layer.js +49 -63
  323. package/dist/layers/hexagon-layer/hexagon-utils.js +15 -14
  324. package/dist/layers/icon-layer/icon-info-modal.js +82 -75
  325. package/dist/layers/icon-layer/icon-layer-icon.js +24 -37
  326. package/dist/layers/icon-layer/icon-layer.js +274 -303
  327. package/dist/layers/index.js +43 -29
  328. package/dist/layers/layer-factory.js +25 -41
  329. package/dist/layers/layer-text-label.js +21 -23
  330. package/dist/layers/layer-update.js +16 -18
  331. package/dist/layers/line-layer/line-layer-icon.js +30 -43
  332. package/dist/layers/line-layer/line-layer.js +123 -142
  333. package/dist/layers/mapbox-utils.js +61 -62
  334. package/dist/layers/mapboxgl-layer.js +124 -169
  335. package/dist/layers/point-layer/point-layer-icon.js +45 -59
  336. package/dist/layers/point-layer/point-layer.d.ts +2 -2
  337. package/dist/layers/point-layer/point-layer.js +355 -386
  338. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +208 -238
  339. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +21 -35
  340. package/dist/layers/s2-geometry-layer/s2-utils.js +9 -8
  341. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +24 -25
  342. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +102 -115
  343. package/dist/layers/scenegraph-layer/scenegraph-layer.js +148 -172
  344. package/dist/layers/trip-layer/trip-info-modal.js +50 -30
  345. package/dist/layers/trip-layer/trip-layer-icon.js +40 -53
  346. package/dist/layers/trip-layer/trip-layer.js +239 -307
  347. package/dist/layers/trip-layer/trip-utils.js +34 -50
  348. package/dist/layers/types.js +2 -2
  349. package/dist/localization/formatted-message.js +8 -10
  350. package/dist/localization/index.js +7 -7
  351. package/dist/localization/locales.js +6 -9
  352. package/dist/localization/messages.js +13 -10
  353. package/dist/localization/translations/ca.js +11 -13
  354. package/dist/localization/translations/cn.js +11 -13
  355. package/dist/localization/translations/en.js +11 -13
  356. package/dist/localization/translations/es.js +11 -13
  357. package/dist/localization/translations/fi.js +11 -13
  358. package/dist/localization/translations/ja.js +11 -13
  359. package/dist/localization/translations/pt.js +11 -13
  360. package/dist/localization/translations/ru.js +11 -13
  361. package/dist/middleware/index.js +3 -5
  362. package/dist/processors/data-processor.js +164 -201
  363. package/dist/processors/file-handler.js +111 -233
  364. package/dist/processors/index.js +4 -4
  365. package/dist/reducers/combined-updaters.js +41 -41
  366. package/dist/reducers/composer-helpers.js +20 -45
  367. package/dist/reducers/composers.js +9 -8
  368. package/dist/reducers/core.js +31 -35
  369. package/dist/reducers/index.js +21 -22
  370. package/dist/reducers/map-state-updaters.js +65 -47
  371. package/dist/reducers/map-state.js +23 -15
  372. package/dist/reducers/map-style-updaters.js +233 -159
  373. package/dist/reducers/map-style.js +30 -16
  374. package/dist/reducers/provider-state-updaters.js +217 -229
  375. package/dist/reducers/provider-state.js +29 -17
  376. package/dist/reducers/root.js +86 -58
  377. package/dist/reducers/ui-state-updaters.js +337 -218
  378. package/dist/reducers/ui-state.js +45 -16
  379. package/dist/reducers/vis-state-merger.js +205 -209
  380. package/dist/reducers/vis-state-selectors.js +5 -19
  381. package/dist/reducers/vis-state-updaters.js +1003 -876
  382. package/dist/reducers/vis-state.js +75 -16
  383. package/dist/schemas/dataset-schema.js +84 -108
  384. package/dist/schemas/index.js +28 -29
  385. package/dist/schemas/map-state-schema.js +21 -18
  386. package/dist/schemas/map-style-schema.js +47 -55
  387. package/dist/schemas/schema-manager.js +147 -161
  388. package/dist/schemas/schema-utils.js +8 -9
  389. package/dist/schemas/schema.js +72 -87
  390. package/dist/schemas/versions.js +3 -3
  391. package/dist/schemas/vis-state-schema.js +441 -583
  392. package/dist/styles/base.js +1217 -1021
  393. package/dist/styles/index.js +3 -3
  394. package/dist/styles/media-breakpoints.js +23 -18
  395. package/dist/tasks/tasks.js +36 -39
  396. package/dist/templates/export-map-html.js +233 -4
  397. package/dist/utils/aggregate-utils.js +13 -16
  398. package/dist/utils/color-utils.js +29 -37
  399. package/dist/utils/custom-scales.js +3 -3
  400. package/dist/utils/data-scale-utils.js +6 -13
  401. package/dist/utils/data-utils.js +60 -83
  402. package/dist/utils/dataset-utils.js +48 -77
  403. package/dist/utils/dom-to-image.js +108 -163
  404. package/dist/utils/dom-utils.js +88 -105
  405. package/dist/utils/export-utils.js +116 -103
  406. package/dist/utils/filter-utils.js +379 -374
  407. package/dist/utils/gl-utils.js +16 -15
  408. package/dist/utils/gpu-filter-utils.js +54 -73
  409. package/dist/utils/index.js +47 -48
  410. package/dist/utils/interaction-utils.js +53 -46
  411. package/dist/utils/layer-utils.js +89 -78
  412. package/dist/utils/locale-utils.js +24 -16
  413. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +67 -76
  414. package/dist/utils/map-style-utils/mapbox-utils.js +4 -3
  415. package/dist/utils/mapbox-utils.js +3 -4
  416. package/dist/utils/notifications-utils.js +33 -38
  417. package/dist/utils/observe-dimensions.js +42 -54
  418. package/dist/utils/projection-utils.js +14 -11
  419. package/dist/utils/split-map-utils.js +30 -33
  420. package/dist/utils/table-utils/data-container-utils.js +15 -14
  421. package/dist/utils/table-utils/data-row.js +58 -65
  422. package/dist/utils/table-utils/index.js +2 -2
  423. package/dist/utils/table-utils/indexed-data-container.js +105 -173
  424. package/dist/utils/table-utils/kepler-table.js +362 -386
  425. package/dist/utils/table-utils/row-data-container.js +99 -164
  426. package/dist/utils/utils.js +29 -30
  427. package/package.json +21 -21
  428. package/src/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.ts +2 -2
  429. package/src/deckgl-layers/layer-utils/cpu-aggregator.ts +21 -11
  430. package/src/layers/base-layer.ts +17 -10
@@ -95,9 +95,9 @@ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
95
95
  */
96
96
  function layerConfigChange(oldLayer, newConfig) {
97
97
  return {
98
- type: _actionTypes["default"].LAYER_CONFIG_CHANGE,
99
- oldLayer: oldLayer,
100
- newConfig: newConfig
98
+ type: _actionTypes.default.LAYER_CONFIG_CHANGE,
99
+ oldLayer,
100
+ newConfig
101
101
  };
102
102
  }
103
103
  /**
@@ -111,11 +111,11 @@ function layerConfigChange(oldLayer, newConfig) {
111
111
  */
112
112
  function layerTextLabelChange(oldLayer, idx, prop, value) {
113
113
  return {
114
- type: _actionTypes["default"].LAYER_TEXT_LABEL_CHANGE,
115
- oldLayer: oldLayer,
116
- idx: idx,
117
- prop: prop,
118
- value: value
114
+ type: _actionTypes.default.LAYER_TEXT_LABEL_CHANGE,
115
+ oldLayer,
116
+ idx,
117
+ prop,
118
+ value
119
119
  };
120
120
  }
121
121
  /**
@@ -127,9 +127,9 @@ function layerTextLabelChange(oldLayer, idx, prop, value) {
127
127
  */
128
128
  function layerTypeChange(oldLayer, newType) {
129
129
  return {
130
- type: _actionTypes["default"].LAYER_TYPE_CHANGE,
131
- oldLayer: oldLayer,
132
- newType: newType
130
+ type: _actionTypes.default.LAYER_TYPE_CHANGE,
131
+ oldLayer,
132
+ newType
133
133
  };
134
134
  }
135
135
  /**
@@ -143,10 +143,10 @@ function layerTypeChange(oldLayer, newType) {
143
143
  */
144
144
  function layerVisualChannelConfigChange(oldLayer, newConfig, channel) {
145
145
  return {
146
- type: _actionTypes["default"].LAYER_VISUAL_CHANNEL_CHANGE,
147
- oldLayer: oldLayer,
148
- newConfig: newConfig,
149
- channel: channel
146
+ type: _actionTypes.default.LAYER_VISUAL_CHANNEL_CHANGE,
147
+ oldLayer,
148
+ newConfig,
149
+ channel
150
150
  };
151
151
  }
152
152
  /**
@@ -159,9 +159,9 @@ function layerVisualChannelConfigChange(oldLayer, newConfig, channel) {
159
159
  */
160
160
  function layerVisConfigChange(oldLayer, newVisConfig) {
161
161
  return {
162
- type: _actionTypes["default"].LAYER_VIS_CONFIG_CHANGE,
163
- oldLayer: oldLayer,
164
- newVisConfig: newVisConfig
162
+ type: _actionTypes.default.LAYER_VIS_CONFIG_CHANGE,
163
+ oldLayer,
164
+ newVisConfig
165
165
  };
166
166
  }
167
167
  /**
@@ -175,10 +175,10 @@ function layerVisConfigChange(oldLayer, newVisConfig) {
175
175
  */
176
176
  function layerColorUIChange(oldLayer, prop, newConfig) {
177
177
  return {
178
- type: _actionTypes["default"].LAYER_COLOR_UI_CHANGE,
179
- oldLayer: oldLayer,
180
- prop: prop,
181
- newConfig: newConfig
178
+ type: _actionTypes.default.LAYER_COLOR_UI_CHANGE,
179
+ oldLayer,
180
+ prop,
181
+ newConfig
182
182
  };
183
183
  }
184
184
  /**
@@ -190,8 +190,8 @@ function layerColorUIChange(oldLayer, prop, newConfig) {
190
190
  */
191
191
  function updateLayerBlending(mode) {
192
192
  return {
193
- type: _actionTypes["default"].UPDATE_LAYER_BLENDING,
194
- mode: mode
193
+ type: _actionTypes.default.UPDATE_LAYER_BLENDING,
194
+ mode
195
195
  };
196
196
  }
197
197
  /**
@@ -203,8 +203,8 @@ function updateLayerBlending(mode) {
203
203
  */
204
204
  function interactionConfigChange(config) {
205
205
  return {
206
- type: _actionTypes["default"].INTERACTION_CONFIG_CHANGE,
207
- config: config
206
+ type: _actionTypes.default.INTERACTION_CONFIG_CHANGE,
207
+ config
208
208
  };
209
209
  }
210
210
  /**
@@ -219,11 +219,11 @@ function interactionConfigChange(config) {
219
219
  */
220
220
  function setFilter(idx, prop, value, valueIndex) {
221
221
  return {
222
- type: _actionTypes["default"].SET_FILTER,
223
- idx: idx,
224
- prop: prop,
225
- value: value,
226
- valueIndex: valueIndex
222
+ type: _actionTypes.default.SET_FILTER,
223
+ idx,
224
+ prop,
225
+ value,
226
+ valueIndex
227
227
  };
228
228
  }
229
229
  /**
@@ -238,11 +238,11 @@ function setFilter(idx, prop, value, valueIndex) {
238
238
  */
239
239
  function setFilterAnimationTime(idx, prop, value, valueIndex) {
240
240
  return {
241
- type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME,
242
- idx: idx,
243
- prop: prop,
244
- value: value,
245
- valueIndex: valueIndex
241
+ type: _actionTypes.default.SET_FILTER_ANIMATION_TIME,
242
+ idx,
243
+ prop,
244
+ value,
245
+ valueIndex
246
246
  };
247
247
  }
248
248
  /**
@@ -251,12 +251,14 @@ function setFilterAnimationTime(idx, prop, value, valueIndex) {
251
251
  * @public
252
252
  */
253
253
  function setFilterAnimationWindow(_ref) {
254
- var id = _ref.id,
255
- animationWindow = _ref.animationWindow;
254
+ let {
255
+ id,
256
+ animationWindow
257
+ } = _ref;
256
258
  return {
257
- type: _actionTypes["default"].SET_FILTER_ANIMATION_WINDOW,
258
- id: id,
259
- animationWindow: animationWindow
259
+ type: _actionTypes.default.SET_FILTER_ANIMATION_WINDOW,
260
+ id,
261
+ animationWindow
260
262
  };
261
263
  }
262
264
  /**
@@ -268,8 +270,8 @@ function setFilterAnimationWindow(_ref) {
268
270
  */
269
271
  function addFilter(dataId) {
270
272
  return {
271
- type: _actionTypes["default"].ADD_FILTER,
272
- dataId: dataId
273
+ type: _actionTypes.default.ADD_FILTER,
274
+ dataId
273
275
  };
274
276
  }
275
277
  /**
@@ -282,9 +284,9 @@ function addFilter(dataId) {
282
284
  */
283
285
  function addLayer(config, datasetId) {
284
286
  return {
285
- type: _actionTypes["default"].ADD_LAYER,
286
- config: config,
287
- datasetId: datasetId
287
+ type: _actionTypes.default.ADD_LAYER,
288
+ config,
289
+ datasetId
288
290
  };
289
291
  }
290
292
  /**
@@ -301,8 +303,8 @@ function addLayer(config, datasetId) {
301
303
  */
302
304
  function reorderLayer(order) {
303
305
  return {
304
- type: _actionTypes["default"].REORDER_LAYER,
305
- order: order
306
+ type: _actionTypes.default.REORDER_LAYER,
307
+ order
306
308
  };
307
309
  }
308
310
  /**
@@ -314,8 +316,8 @@ function reorderLayer(order) {
314
316
  */
315
317
  function removeFilter(idx) {
316
318
  return {
317
- type: _actionTypes["default"].REMOVE_FILTER,
318
- idx: idx
319
+ type: _actionTypes.default.REMOVE_FILTER,
320
+ idx
319
321
  };
320
322
  }
321
323
  /**
@@ -327,8 +329,8 @@ function removeFilter(idx) {
327
329
  */
328
330
  function removeLayer(idx) {
329
331
  return {
330
- type: _actionTypes["default"].REMOVE_LAYER,
331
- idx: idx
332
+ type: _actionTypes.default.REMOVE_LAYER,
333
+ idx
332
334
  };
333
335
  }
334
336
  /**
@@ -340,8 +342,8 @@ function removeLayer(idx) {
340
342
  */
341
343
  function duplicateLayer(idx) {
342
344
  return {
343
- type: _actionTypes["default"].DUPLICATE_LAYER,
344
- idx: idx
345
+ type: _actionTypes.default.DUPLICATE_LAYER,
346
+ idx
345
347
  };
346
348
  }
347
349
  /**
@@ -353,8 +355,8 @@ function duplicateLayer(idx) {
353
355
  */
354
356
  function removeDataset(dataId) {
355
357
  return {
356
- type: _actionTypes["default"].REMOVE_DATASET,
357
- dataId: dataId
358
+ type: _actionTypes.default.REMOVE_DATASET,
359
+ dataId
358
360
  };
359
361
  }
360
362
  /**
@@ -366,8 +368,8 @@ function removeDataset(dataId) {
366
368
  */
367
369
  function showDatasetTable(dataId) {
368
370
  return {
369
- type: _actionTypes["default"].SHOW_DATASET_TABLE,
370
- dataId: dataId
371
+ type: _actionTypes.default.SHOW_DATASET_TABLE,
372
+ dataId
371
373
  };
372
374
  }
373
375
  /**
@@ -380,9 +382,9 @@ function showDatasetTable(dataId) {
380
382
  */
381
383
  function updateTableColor(dataId, newColor) {
382
384
  return {
383
- type: _actionTypes["default"].UPDATE_TABLE_COLOR,
384
- dataId: dataId,
385
- newColor: newColor
385
+ type: _actionTypes.default.UPDATE_TABLE_COLOR,
386
+ dataId,
387
+ newColor
386
388
  };
387
389
  }
388
390
  /**
@@ -396,10 +398,10 @@ function updateTableColor(dataId, newColor) {
396
398
  */
397
399
  function sortTableColumn(dataId, column, mode) {
398
400
  return {
399
- type: _actionTypes["default"].SORT_TABLE_COLUMN,
400
- dataId: dataId,
401
- column: column,
402
- mode: mode
401
+ type: _actionTypes.default.SORT_TABLE_COLUMN,
402
+ dataId,
403
+ column,
404
+ mode
403
405
  };
404
406
  }
405
407
  /**
@@ -411,9 +413,9 @@ function sortTableColumn(dataId, column, mode) {
411
413
  */
412
414
  function pinTableColumn(dataId, column) {
413
415
  return {
414
- type: _actionTypes["default"].PIN_TABLE_COLUMN,
415
- dataId: dataId,
416
- column: column
416
+ type: _actionTypes.default.PIN_TABLE_COLUMN,
417
+ dataId,
418
+ column
417
419
  };
418
420
  }
419
421
  /**
@@ -425,9 +427,9 @@ function pinTableColumn(dataId, column) {
425
427
  */
426
428
  function copyTableColumn(dataId, column) {
427
429
  return {
428
- type: _actionTypes["default"].COPY_TABLE_COLUMN,
429
- dataId: dataId,
430
- column: column
430
+ type: _actionTypes.default.COPY_TABLE_COLUMN,
431
+ dataId,
432
+ column
431
433
  };
432
434
  }
433
435
  // * @param dataset.info -info of a dataset
@@ -453,10 +455,10 @@ function copyTableColumn(dataId, column) {
453
455
  */
454
456
  function updateVisData(datasets, options, config) {
455
457
  return {
456
- type: _actionTypes["default"].UPDATE_VIS_DATA,
457
- datasets: datasets,
458
- options: options,
459
- config: config
458
+ type: _actionTypes.default.UPDATE_VIS_DATA,
459
+ datasets,
460
+ options,
461
+ config
460
462
  };
461
463
  }
462
464
  /**
@@ -469,9 +471,9 @@ function updateVisData(datasets, options, config) {
469
471
  */
470
472
  function renameDataset(dataId, label) {
471
473
  return {
472
- type: _actionTypes["default"].RENAME_DATASET,
473
- dataId: dataId,
474
- label: label
474
+ type: _actionTypes.default.RENAME_DATASET,
475
+ dataId,
476
+ label
475
477
  };
476
478
  }
477
479
  /**
@@ -483,8 +485,8 @@ function renameDataset(dataId, label) {
483
485
  */
484
486
  function toggleFilterAnimation(idx) {
485
487
  return {
486
- type: _actionTypes["default"].TOGGLE_FILTER_ANIMATION,
487
- idx: idx
488
+ type: _actionTypes.default.TOGGLE_FILTER_ANIMATION,
489
+ idx
488
490
  };
489
491
  }
490
492
  /**
@@ -497,9 +499,9 @@ function toggleFilterAnimation(idx) {
497
499
  */
498
500
  function updateFilterAnimationSpeed(idx, speed) {
499
501
  return {
500
- type: _actionTypes["default"].UPDATE_FILTER_ANIMATION_SPEED,
501
- idx: idx,
502
- speed: speed
502
+ type: _actionTypes.default.UPDATE_FILTER_ANIMATION_SPEED,
503
+ idx,
504
+ speed
503
505
  };
504
506
  }
505
507
  /**
@@ -511,8 +513,8 @@ function updateFilterAnimationSpeed(idx, speed) {
511
513
  */
512
514
  function setLayerAnimationTime(value) {
513
515
  return {
514
- type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME,
515
- value: value
516
+ type: _actionTypes.default.SET_LAYER_ANIMATION_TIME,
517
+ value
516
518
  };
517
519
  }
518
520
  /**
@@ -524,8 +526,8 @@ function setLayerAnimationTime(value) {
524
526
  */
525
527
  function updateLayerAnimationSpeed(speed) {
526
528
  return {
527
- type: _actionTypes["default"].UPDATE_LAYER_ANIMATION_SPEED,
528
- speed: speed
529
+ type: _actionTypes.default.UPDATE_LAYER_ANIMATION_SPEED,
530
+ speed
529
531
  };
530
532
  }
531
533
  /**
@@ -536,7 +538,7 @@ function updateLayerAnimationSpeed(speed) {
536
538
  */
537
539
  function toggleLayerAnimation() {
538
540
  return {
539
- type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION
541
+ type: _actionTypes.default.TOGGLE_LAYER_ANIMATION
540
542
  };
541
543
  }
542
544
  /**
@@ -547,7 +549,7 @@ function toggleLayerAnimation() {
547
549
  */
548
550
  function toggleLayerAnimationControl() {
549
551
  return {
550
- type: _actionTypes["default"].TOGGLE_LAYER_ANIMATION_CONTROL
552
+ type: _actionTypes.default.TOGGLE_LAYER_ANIMATION_CONTROL
551
553
  };
552
554
  }
553
555
  /**
@@ -559,8 +561,8 @@ function toggleLayerAnimationControl() {
559
561
  */
560
562
  function enlargeFilter(idx) {
561
563
  return {
562
- type: _actionTypes["default"].ENLARGE_FILTER,
563
- idx: idx
564
+ type: _actionTypes.default.ENLARGE_FILTER,
565
+ idx
564
566
  };
565
567
  }
566
568
  /**
@@ -571,8 +573,8 @@ function enlargeFilter(idx) {
571
573
  */
572
574
  function toggleFilterFeature(idx) {
573
575
  return {
574
- type: _actionTypes["default"].TOGGLE_FILTER_FEATURE,
575
- idx: idx
576
+ type: _actionTypes.default.TOGGLE_FILTER_FEATURE,
577
+ idx
576
578
  };
577
579
  }
578
580
  /**
@@ -584,8 +586,8 @@ function toggleFilterFeature(idx) {
584
586
  */
585
587
  function onLayerHover(info) {
586
588
  return {
587
- type: _actionTypes["default"].LAYER_HOVER,
588
- info: info
589
+ type: _actionTypes.default.LAYER_HOVER,
590
+ info
589
591
  };
590
592
  }
591
593
  /**
@@ -597,8 +599,8 @@ function onLayerHover(info) {
597
599
  */
598
600
  function onLayerClick(info) {
599
601
  return {
600
- type: _actionTypes["default"].LAYER_CLICK,
601
- info: info
602
+ type: _actionTypes.default.LAYER_CLICK,
603
+ info
602
604
  };
603
605
  }
604
606
  /**
@@ -609,7 +611,7 @@ function onLayerClick(info) {
609
611
  */
610
612
  function onMapClick() {
611
613
  return {
612
- type: _actionTypes["default"].MAP_CLICK
614
+ type: _actionTypes.default.MAP_CLICK
613
615
  };
614
616
  }
615
617
  /**
@@ -624,8 +626,8 @@ function onMapClick() {
624
626
  */
625
627
  function onMouseMove(evt) {
626
628
  return {
627
- type: _actionTypes["default"].MOUSE_MOVE,
628
- evt: evt
629
+ type: _actionTypes.default.MOUSE_MOVE,
630
+ evt
629
631
  };
630
632
  }
631
633
  /**
@@ -638,9 +640,9 @@ function onMouseMove(evt) {
638
640
  */
639
641
  function toggleLayerForMap(mapIndex, layerId) {
640
642
  return {
641
- type: _actionTypes["default"].TOGGLE_LAYER_FOR_MAP,
642
- mapIndex: mapIndex,
643
- layerId: layerId
643
+ type: _actionTypes.default.TOGGLE_LAYER_FOR_MAP,
644
+ mapIndex,
645
+ layerId
644
646
  };
645
647
  }
646
648
  /**
@@ -654,10 +656,10 @@ function toggleLayerForMap(mapIndex, layerId) {
654
656
  */
655
657
  function setFilterPlot(idx, newProp, valueIndex) {
656
658
  return {
657
- type: _actionTypes["default"].SET_FILTER_PLOT,
658
- idx: idx,
659
- newProp: newProp,
660
- valueIndex: valueIndex
659
+ type: _actionTypes.default.SET_FILTER_PLOT,
660
+ idx,
661
+ newProp,
662
+ valueIndex
661
663
  };
662
664
  }
663
665
  /**
@@ -669,8 +671,8 @@ function setFilterPlot(idx, newProp, valueIndex) {
669
671
  */
670
672
  function setMapInfo(info) {
671
673
  return {
672
- type: _actionTypes["default"].SET_MAP_INFO,
673
- info: info
674
+ type: _actionTypes.default.SET_MAP_INFO,
675
+ info
674
676
  };
675
677
  }
676
678
  /**
@@ -682,9 +684,9 @@ function setMapInfo(info) {
682
684
  */
683
685
  function loadFiles(files, onFinish) {
684
686
  return {
685
- type: _actionTypes["default"].LOAD_FILES,
686
- files: files,
687
- onFinish: onFinish
687
+ type: _actionTypes.default.LOAD_FILES,
688
+ files,
689
+ onFinish
688
690
  };
689
691
  }
690
692
 
@@ -696,7 +698,7 @@ function loadFiles(files, onFinish) {
696
698
  */
697
699
  function loadNextFile() {
698
700
  return {
699
- type: _actionTypes["default"].LOAD_NEXT_FILE
701
+ type: _actionTypes.default.LOAD_NEXT_FILE
700
702
  };
701
703
  }
702
704
  /**
@@ -707,8 +709,8 @@ function loadNextFile() {
707
709
  */
708
710
  function loadFilesSuccess(result) {
709
711
  return {
710
- type: _actionTypes["default"].LOAD_FILES_SUCCESS,
711
- result: result
712
+ type: _actionTypes.default.LOAD_FILES_SUCCESS,
713
+ result
712
714
  };
713
715
  }
714
716
  /**
@@ -718,12 +720,14 @@ function loadFilesSuccess(result) {
718
720
  * @returns action
719
721
  */
720
722
  function loadFileStepSuccess(_ref2) {
721
- var fileName = _ref2.fileName,
722
- fileCache = _ref2.fileCache;
723
+ let {
724
+ fileName,
725
+ fileCache
726
+ } = _ref2;
723
727
  return {
724
- type: _actionTypes["default"].LOAD_FILE_STEP_SUCCESS,
725
- fileName: fileName,
726
- fileCache: fileCache
728
+ type: _actionTypes.default.LOAD_FILE_STEP_SUCCESS,
729
+ fileName,
730
+ fileCache
727
731
  };
728
732
  }
729
733
  /**
@@ -736,9 +740,9 @@ function loadFileStepSuccess(_ref2) {
736
740
 
737
741
  function loadFilesErr(fileName, error) {
738
742
  return {
739
- type: _actionTypes["default"].LOAD_FILES_ERR,
740
- fileName: fileName,
741
- error: error
743
+ type: _actionTypes.default.LOAD_FILES_ERR,
744
+ fileName,
745
+ error
742
746
  };
743
747
  }
744
748
  /**
@@ -749,8 +753,8 @@ function loadFilesErr(fileName, error) {
749
753
  */
750
754
  function setFeatures(features) {
751
755
  return {
752
- type: _actionTypes["default"].SET_FEATURES,
753
- features: features
756
+ type: _actionTypes.default.SET_FEATURES,
757
+ features
754
758
  };
755
759
  }
756
760
  /**
@@ -763,9 +767,9 @@ function setFeatures(features) {
763
767
  */
764
768
  function setPolygonFilterLayer(layer, feature) {
765
769
  return {
766
- type: _actionTypes["default"].SET_POLYGON_FILTER_LAYER,
767
- layer: layer,
768
- feature: feature
770
+ type: _actionTypes.default.SET_POLYGON_FILTER_LAYER,
771
+ layer,
772
+ feature
769
773
  };
770
774
  }
771
775
  /**
@@ -776,8 +780,8 @@ function setPolygonFilterLayer(layer, feature) {
776
780
  */
777
781
  function setSelectedFeature(feature) {
778
782
  return {
779
- type: _actionTypes["default"].SET_SELECTED_FEATURE,
780
- feature: feature
783
+ type: _actionTypes.default.SET_SELECTED_FEATURE,
784
+ feature
781
785
  };
782
786
  }
783
787
  /**
@@ -788,8 +792,8 @@ function setSelectedFeature(feature) {
788
792
  */
789
793
  function deleteFeature(feature) {
790
794
  return {
791
- type: _actionTypes["default"].DELETE_FEATURE,
792
- feature: feature
795
+ type: _actionTypes.default.DELETE_FEATURE,
796
+ feature
793
797
  };
794
798
  }
795
799
  /** Set the map mode
@@ -805,8 +809,8 @@ function deleteFeature(feature) {
805
809
  */
806
810
  function setEditorMode(mode) {
807
811
  return {
808
- type: _actionTypes["default"].SET_EDITOR_MODE,
809
- mode: mode
812
+ type: _actionTypes.default.SET_EDITOR_MODE,
813
+ mode
810
814
  };
811
815
  }
812
816
  /**
@@ -818,8 +822,8 @@ function setEditorMode(mode) {
818
822
  */
819
823
  function applyCPUFilter(dataId) {
820
824
  return {
821
- type: _actionTypes["default"].APPLY_CPU_FILTER,
822
- dataId: dataId
825
+ type: _actionTypes.default.APPLY_CPU_FILTER,
826
+ dataId
823
827
  };
824
828
  }
825
829
  /**
@@ -829,7 +833,7 @@ function applyCPUFilter(dataId) {
829
833
  */
830
834
  function toggleEditorVisibility() {
831
835
  return {
832
- type: _actionTypes["default"].TOGGLE_EDITOR_VISIBILITY
836
+ type: _actionTypes.default.TOGGLE_EDITOR_VISIBILITY
833
837
  };
834
838
  }
835
839
  /**
@@ -840,8 +844,8 @@ function toggleEditorVisibility() {
840
844
  */
841
845
  function nextFileBatch(payload) {
842
846
  return {
843
- type: _actionTypes["default"].NEXT_FILE_BATCH,
844
- payload: payload
847
+ type: _actionTypes.default.NEXT_FILE_BATCH,
848
+ payload
845
849
  };
846
850
  }
847
851
  /**
@@ -852,8 +856,8 @@ function nextFileBatch(payload) {
852
856
  */
853
857
  function processFileContent(payload) {
854
858
  return {
855
- type: _actionTypes["default"].PROCESS_FILE_CONTENT,
856
- payload: payload
859
+ type: _actionTypes.default.PROCESS_FILE_CONTENT,
860
+ payload
857
861
  };
858
862
  }
859
863
  /**
@@ -864,8 +868,8 @@ function processFileContent(payload) {
864
868
  */
865
869
  function setLayerAnimationTimeConfig(config) {
866
870
  return {
867
- type: _actionTypes["default"].SET_LAYER_ANIMATION_TIME_CONFIG,
868
- config: config
871
+ type: _actionTypes.default.SET_LAYER_ANIMATION_TIME_CONFIG,
872
+ config
869
873
  };
870
874
  }
871
875
  /**
@@ -877,9 +881,9 @@ function setLayerAnimationTimeConfig(config) {
877
881
  */
878
882
  function setFilterAnimationTimeConfig(idx, config) {
879
883
  return {
880
- type: _actionTypes["default"].SET_FILTER_ANIMATION_TIME_CONFIG,
881
- idx: idx,
882
- config: config
884
+ type: _actionTypes.default.SET_FILTER_ANIMATION_TIME_CONFIG,
885
+ idx,
886
+ config
883
887
  };
884
888
  }
885
889
 
@@ -895,6 +899,6 @@ function setFilterAnimationTimeConfig(idx, config) {
895
899
  */
896
900
  /* eslint-disable no-unused-vars */
897
901
  // @ts-ignore
898
- var visStateActions = null;
902
+ const visStateActions = null;
899
903
  /* eslint-enable no-unused-vars */
900
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImxheWVyQ29uZmlnQ2hhbmdlIiwib2xkTGF5ZXIiLCJuZXdDb25maWciLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJMQVlFUl9DT05GSUdfQ0hBTkdFIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2UiLCJpZHgiLCJwcm9wIiwidmFsdWUiLCJMQVlFUl9URVhUX0xBQkVMX0NIQU5HRSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZSIsImNvbmZpZyIsIklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0UiLCJzZXRGaWx0ZXIiLCJ2YWx1ZUluZGV4IiwiU0VUX0ZJTFRFUiIsInNldEZpbHRlckFuaW1hdGlvblRpbWUiLCJTRVRfRklMVEVSX0FOSU1BVElPTl9USU1FIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwiX3JlZiIsImlkIiwiYW5pbWF0aW9uV2luZG93IiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XIiwiYWRkRmlsdGVyIiwiZGF0YUlkIiwiQUREX0ZJTFRFUiIsImFkZExheWVyIiwiZGF0YXNldElkIiwiQUREX0xBWUVSIiwicmVvcmRlckxheWVyIiwib3JkZXIiLCJSRU9SREVSX0xBWUVSIiwicmVtb3ZlRmlsdGVyIiwiUkVNT1ZFX0ZJTFRFUiIsInJlbW92ZUxheWVyIiwiUkVNT1ZFX0xBWUVSIiwiZHVwbGljYXRlTGF5ZXIiLCJEVVBMSUNBVEVfTEFZRVIiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInRvZ2dsZUZpbHRlckFuaW1hdGlvbiIsIlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJzcGVlZCIsIlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lIiwiU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsIlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQiLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsIlRPR0dMRV9MQVlFUl9BTklNQVRJT04iLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2wiLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0wiLCJlbmxhcmdlRmlsdGVyIiwiRU5MQVJHRV9GSUxURVIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIkxBWUVSX0hPVkVSIiwib25MYXllckNsaWNrIiwiTEFZRVJfQ0xJQ0siLCJvbk1hcENsaWNrIiwiTUFQX0NMSUNLIiwib25Nb3VzZU1vdmUiLCJldnQiLCJNT1VTRV9NT1ZFIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJtYXBJbmRleCIsImxheWVySWQiLCJUT0dHTEVfTEFZRVJfRk9SX01BUCIsInNldEZpbHRlclBsb3QiLCJuZXdQcm9wIiwiU0VUX0ZJTFRFUl9QTE9UIiwic2V0TWFwSW5mbyIsIlNFVF9NQVBfSU5GTyIsImxvYWRGaWxlcyIsImZpbGVzIiwib25GaW5pc2giLCJMT0FEX0ZJTEVTIiwibG9hZE5leHRGaWxlIiwiTE9BRF9ORVhUX0ZJTEUiLCJsb2FkRmlsZXNTdWNjZXNzIiwicmVzdWx0IiwiTE9BRF9GSUxFU19TVUNDRVNTIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsIl9yZWYyIiwiZmlsZU5hbWUiLCJmaWxlQ2FjaGUiLCJMT0FEX0ZJTEVfU1RFUF9TVUNDRVNTIiwibG9hZEZpbGVzRXJyIiwiZXJyb3IiLCJMT0FEX0ZJTEVTX0VSUiIsInNldEZlYXR1cmVzIiwiZmVhdHVyZXMiLCJTRVRfRkVBVFVSRVMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJsYXllciIsImZlYXR1cmUiLCJTRVRfUE9MWUdPTl9GSUxURVJfTEFZRVIiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJ2aXNTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyB2aXMtc3RhdGUtcmVkdWNlclxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtBZGREYXRhVG9NYXBQYXlsb2FkfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICcuLi9wcm9jZXNzb3JzL3R5cGVzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZywgTGF5ZXJWaXNDb25maWd9IGZyb20gJ2xheWVycyc7XG5pbXBvcnQge0ZlYXR1cmUsIEludGVyYWN0aW9uQ29uZmlnfSBmcm9tICdyZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtWYWx1ZU9mLCBNZXJnZSwgUkdCQ29sb3IsIE5lc3RlZFBhcnRpYWx9IGZyb20gJy4uL3JlZHVjZXJzL3R5cGVzJztcbmltcG9ydCB7Q29sb3JVSX0gZnJvbSAnbGF5ZXJzL2xheWVyLWZhY3RvcnknO1xuLy8gVE9ETyAtIGltcG9ydCBMb2FkZXJPYmplY3QgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcbi8vIFRPRE8gLSBpbXBvcnQgTG9hZE9wdGlvbnMgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIG5ldyBjb25maWcgdG8gYmUgbWVyZ2VkIHdpdGggb2xkIGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NPTkZJR19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpZHg6IG51bWJlciB8ICdhbGwnO1xuICBwcm9wOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB0ZXh0IGxhYmVsXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiB0ZXh0IGxhYmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIHRleHQgbGFiZWwsIGUsZywgYGFuY2hvcmAsIGBhbGlnbm1lbnRgLCBgY29sb3JgLCBgc2l6ZWAsIGBmaWVsZGBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpZHg6IG51bWJlciB8ICdhbGwnLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IE1lcmdlPExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdUeXBlOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3VHlwZSAtIG5ldyB0eXBlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdUeXBlOiBzdHJpbmdcbik6IE1lcmdlPExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3VHlwZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPjtcbiAgY2hhbm5lbDogc3RyaW5nO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmdcbik6IE1lcmdlPFxuICBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWcsXG4gICAgY2hhbm5lbFxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdWaXNDb25maWcgLSBuZXcgdmlzQ29uZmlnIGFzIGEga2V5IHZhbHVlIG1hcDogZS5nLiBge29wYWNpdHk6IDAuOH1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz5cbik6IE1lcmdlPExheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdWaXNDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgcHJvcDogc3RyaW5nO1xuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST47XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29sb3IgcGFsZXR0ZSB1aSBmb3IgbGF5ZXIgY29sb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gd2hpY2ggY29sb3IgcHJvcFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIHRvIGJlIG1lcmdlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbG9yVUlDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgcHJvcDogc3RyaW5nLFxuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST5cbik6IE1lcmdlPExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NPTE9SX1VJX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBwcm9wLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYGFkZGl0aXZlYCwgYG5vcm1hbGAgYW5kIGBzdWJ0cmFjdGl2ZWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJCbGVuZGluZyhcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJ1xuKTogTWVyZ2U8VXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB2YWx1ZUluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe1xuICBpZCxcbiAgYW5pbWF0aW9uV2luZG93XG59OiBTZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XLFxuICAgIGlkLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtIGRhdGFzZXQgYGlkYCB0aGlzIG5ldyBmaWx0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcihcbiAgZGF0YUlkOiBzdHJpbmcgfCBudWxsXG4pOiBNZXJnZTxBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQUREX0ZJTFRFUixcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc/OiBvYmplY3Q7XG4gIGRhdGFzZXRJZD86IHN0cmluZztcbn07XG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGNvbmZpZyAtIG5ldyBsYXllciBjb25maWdcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBkYXRhc2V0IGlkIHVzZWQgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyKFxuICBjb25maWc/OiBvYmplY3QsXG4gIGRhdGFzZXRJZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfTEFZRVIsXG4gICAgY29uZmlnLFxuICAgIGRhdGFzZXRJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogbnVtYmVyW107XG59O1xuLyoqXG4gKiBSZW9yZGVyIGxheWVyLCBvcmRlciBpcyBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzLCBpbmRleCAwIHdpbGwgYmUgdGhlIG9uZSBhdCB0aGUgYm90dG9tXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgbGF5ZXIgaW5kZXhlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGJyaW5nIGBsYXllcnNbMV1gIGJlbG93IGBsYXllcnNbMF1gLCB0aGUgc2VxdWVuY2UgbGF5ZXJzIHdpbGwgYmUgcmVuZGVyZWQgaXMgYDFgLCBgMGAsIGAyYCwgYDNgLlxuICogLy8gYDFgIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSwgYDNgIHdpbGwgYmUgYXQgdGhlIHRvcC5cbiAqIHRoaXMucHJvcHMuZGlzcGF0Y2gocmVvcmRlckxheWVyKFsxLCAwLCAyLCAzXSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyKFxuICBvcmRlcjogbnVtYmVyW11cbik6IE1lcmdlPFJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVPUkRFUl9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU9SREVSX0xBWUVSLFxuICAgIG9yZGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyIGZyb20gYHZpc1N0YXRlLmZpbHRlcnNgLCBvbmNlIGEgZmlsdGVyIGlzIHJlbW92ZWQsIGRhdGEgd2lsbCBiZSByZS1maWx0ZXJlZCBhbmQgbGF5ZXIgd2lsbCBiZSB1cGRhdGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBmaWx0ZXIgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGaWx0ZXIoXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxSZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0ZJTFRFUixcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBsYXllciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8UmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfTEFZRVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBEdXBsaWNhdGUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCBpZHggb2YgbGF5ZXIgdG8gYmUgZHVwbGljYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGVMYXllcihcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRFVQTElDQVRFX0xBWUVSLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVCxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZCB0byBzaG93IGluIHRhYmxlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhc2V0VGFibGUoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxTaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TSE9XX0RBVEFTRVRfVEFCTEV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgbmV3Q29sb3I6IFJHQkNvbG9yO1xufTtcbi8qKlxuICogVXBkYXRlIGRhdGFzZXQgY29sb3IgdG8gY3VzdG9tIGJ5IG1lYW5zIG9mIGNvbG9yIHBpY2tlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGBpZGAgdGhpcyBjdXN0b20gY29sb3IgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gbmV3Q29sb3IgY3VzdG9tIGNvbG9yIGluIFJHQmZvcm1hdFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbG9yKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbmV3Q29sb3I6IFJHQkNvbG9yXG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9UQUJMRV9DT0xPUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1IsXG4gICAgZGF0YUlkLFxuICAgIG5ld0NvbG9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIFNvcnQgZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW4oXG4gIGRhdGFJZDogc3RyaW5nLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogTWVyZ2U8U29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTixcbiAgICBkYXRhSWQsXG4gICAgY29sdW1uLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBQaW4gZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBJTl9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBDb3B5IGNvbHVtbiwgZm9yIHRhYmxlIGRpc3BsYXlcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPENvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGREYXRhVG9NYXBVcGRhdGVyT3B0aW9ucyA9IHtcbiAgY2VudHJNYXA/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtlZXBFeGlzdGluZ0NvbmZpZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YXNldHM6IEFkZERhdGFUb01hcFBheWxvYWRbJ2RhdGFzZXRzJ107XG4gIG9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbiAgY29uZmlnOiBBZGREYXRhVG9NYXBQYXlsb2FkWydjb25maWcnXTtcbn0gJiBBZGREYXRhVG9NYXBQYXlsb2FkO1xuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2VudGVyTWFwIGBkZWZhdWx0OiB0cnVlYCBpZiBgY2VudGVyTWFwYCBpcyBzZXQgdG8gYHRydWVgIGtlcGxlci5nbCB3aWxsXG4gKiBwbGFjZSB0aGUgbWFwIHZpZXcgd2l0aGluIHRoZSBkYXRhIHBvaW50cyBib3VuZGFyaWVzXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFkT25seSBgZGVmYXVsdDogZmFsc2VgIGlmIGByZWFkT25seWAgaXMgc2V0IHRvIGB0cnVlYFxuICogdGhlIGxlZnQgc2V0dGluZyBwYW5lbCB3aWxsIGJlIGhpZGRlblxuICogQHBhcmFtIGNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpc0RhdGEoXG4gIGRhdGFzZXRzOiBBZGREYXRhVG9NYXBQYXlsb2FkWydkYXRhc2V0cyddLFxuICBvcHRpb25zOiBBZGREYXRhVG9NYXBQYXlsb2FkWydvcHRpb25zJ10sXG4gIGNvbmZpZzogQWRkRGF0YVRvTWFwUGF5bG9hZFsnY29uZmlnJ11cbik6IE1lcmdlPFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEEsXG4gICAgZGF0YXNldHMsXG4gICAgb3B0aW9ucyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gbGFiZWwgLSAqKipyZXF1aXJlZCoqIE5ldyBuYW1lIGZvciB0aGUgZGF0YXNldFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZ1xuKTogTWVyZ2U8UmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gaWR4IG9mIGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJBbmltYXRpb24oXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSAgYGlkeGAgb2YgZmlsdGVyXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQoXG4gIGlkeDogbnVtYmVyLFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgaWR4LFxuICAgIHNwZWVkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuLyoqXG4gKiBSZXNldCBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSB2YWx1ZSAtICBDdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lKFxuICB2YWx1ZTogbnVtYmVyXG4pOiBNZXJnZTxTZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHNwZWVkOiBudW1iZXI7XG59O1xuLyoqXG4gKiB1cGRhdGUgdHJpcCBsYXllciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzcGVlZCAtIGBzcGVlZGAgdG8gY2hhbmdlIGl0IHRvLiBgc3BlZWRgIGlzIGEgbXVsdGlwbGllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkKFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgc3BlZWRcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBzdGFydCBlbmQgZW5kIGxheWVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbigpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT059XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB7fTtcbi8qKlxuICogaGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2woKTogTWVyZ2U8XG4gIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEVubGFyZ2VGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgdG8gZW5sYXJnZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmxhcmdlRmlsdGVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8RW5sYXJnZUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cvaGlkZSBmaWx0ZXIgZmVhdHVyZSBvbiBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgZmVhdHVyZSB0byBzaG93L2hpZGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJGZWF0dXJlKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0ZJTFRFUl9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRSxcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25MYXllckhvdmVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbDtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgaG92ZXJlZCwgcmV0dXJuZWQgYnkgZGVjay5nbFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVySG92ZXIoXG4gIGluZm86IHtwaWNrZWQ/OiBib29sZWFufSB8IG51bGxcbik6IE1lcmdlPE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVIsXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiB7cGlja2VkPzogYm9vbGVhbn0gfCBudWxsO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBjbGlja2VkLCByZXR1cm5lZCBieSBkZWNrLmdsXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTGF5ZXJDbGljayhcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbFxuKTogTWVyZ2U8T25MYXllckNsaWNrVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDSyxcbiAgICBpbmZvXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uID0ge307XG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1hcENsaWNrKCk6IE1lcmdlPE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1BUF9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uID0ge1xuICBldnQ7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3VzZSBtb3ZlZXZlbnQsIHBheWxvYWQgd291bGQgYmVcbiAqIFJlYWN0LW1hcC1nbCBQb2ludGVyRXZlbnRcbiAqIGh0dHBzOi8vdWJlci5naXRodWIuaW8vcmVhY3QtbWFwLWdsLyMvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BvaW50ZXItZXZlbnRcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZXZ0IC0gUG9pbnRlckV2ZW50XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKFxuICBldnRcbik6IE1lcmdlPE9uTW91c2VNb3ZlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5NT1VTRV9NT1ZFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLk1PVVNFX01PVkUsXG4gICAgZXZ0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvbiA9IHtcbiAgbWFwSW5kZXg6IG51bWJlcjtcbiAgbGF5ZXJJZDogc3RyaW5nO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1hcEluZGV4IC0gaW5kZXggb2YgdGhlIHNwbGl0IG1hcFxuICogQHBhcmFtIGxheWVySWQgLSBpZCBvZiB0aGUgbGF5ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTGF5ZXJGb3JNYXAoXG4gIG1hcEluZGV4OiBudW1iZXIsXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTWVyZ2U8VG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQLFxuICAgIG1hcEluZGV4LFxuICAgIGxheWVySWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBuZXdQcm9wOiBvYmplY3Q7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBuZXdQcm9wIGtleSB2YWx1ZSBtYXBwaW5nIG9mIG5ldyBwcm9wIGB7eUF4aXM6ICdoaXN0b2dyYW0nfWBcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJQbG90KFxuICBpZHg6IG51bWJlcixcbiAgbmV3UHJvcDogb2JqZWN0LFxuICB2YWx1ZUluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxTZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1BMT1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9QTE9ULFxuICAgIGlkeCxcbiAgICBuZXdQcm9wLFxuICAgIHZhbHVlSW5kZXhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IGFueTtcbn07XG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm9cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWFwSW5mbyhcbiAgaW5mbzogYW55XG4pOiBNZXJnZTxTZXRNYXBJbmZvVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0lORk99PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX01BUF9JTkZPLFxuICAgIGluZm9cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgb25GaW5pc2g/KHJlc3VsdDogYW55KTogYW55O1xufTtcbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmlsZXMgYXJyYXkgb2YgZmlsZWJsb2JcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzKFxuICBmaWxlczogRmlsZVtdLFxuICBvbkZpbmlzaD86IChyZXN1bHQ6IGFueSkgPT4gYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFUyxcbiAgICBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xufVxuXG4vKipcbiAqIENhbGxlZCB3aXRoIG5leHQgZmlsZSB0byBsb2FkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZSgpOiB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfTkVYVF9GSUxFfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9ORVhUX0ZJTEVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHJlc3VsdDogRmlsZUNhY2hlSXRlbVtdO1xufTtcbi8qKlxuICogY2FsbGVkIHdoZW4gYWxsIGZpbGVzIGFyZSBwcm9jZXNzZWQgYW5kIGxvYWRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNTdWNjZXNzKFxuICByZXN1bHQ6IEZpbGVDYWNoZUl0ZW1bXVxuKTogTWVyZ2U8bG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19TVUNDRVNTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfU1VDQ0VTUyxcbiAgICByZXN1bHRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG59O1xuLyoqXG4gKiBjYWxsZWQgd2hlbiBzdWNjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCByZWFkeSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtcbiAgZmlsZU5hbWUsXG4gIGZpbGVDYWNoZVxufToge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlQ2FjaGU6IEZpbGVDYWNoZUl0ZW1bXTtcbn0pOiBNZXJnZTxMb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRV9TVEVQX1NVQ0NFU1N9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFX1NURVBfU1VDQ0VTUyxcbiAgICBmaWxlTmFtZSxcbiAgICBmaWxlQ2FjaGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZXJyb3I6IGFueTtcbn07XG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gIGVycm9yXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzRXJyKFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBlcnJvcjogYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSLFxuICAgIGZpbGVOYW1lLFxuICAgIGVycm9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbn07XG4vKipcbiAqIFN0b3JlIGZlYXR1cmVzIHRvIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmVhdHVyZXNcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXMoXG4gIGZlYXR1cmVzOiBGZWF0dXJlW11cbik6IE1lcmdlPFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRkVBVFVSRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZFQVRVUkVTLFxuICAgIGZlYXR1cmVzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgZmVhdHVyZTogRmVhdHVyZTtcbn07XG4vKipcbiAqIEl0IHdpbGwgYXBwbHkgdGhlIHByb3ZpZGUgZmVhdHVyZSBhcyBmaWx0ZXIgdG8gdGhlIGdpdmVuIGxheWVyLlxuICogSWYgdGhlIGdpdmVuIGZlYXR1cmUgaXMgYWxyZWFkeSBhcHBsaWVkIGFzIGZpbHRlciB0byB0aGUgbGF5ZXIsIGl0IHdpbGwgcmVtb3ZlIHRoZSBsYXllciBmcm9tIHRoZSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsYXllclxuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyKFxuICBsYXllcjogTGF5ZXIsXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX1BPTFlHT05fRklMVEVSX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUixcbiAgICBsYXllcixcbiAgICBmZWF0dXJlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZmVhdHVyZSB0byBiZSBlZGl0ZWQvZGVsZXRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0ZWRGZWF0dXJlKFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxTZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBEZWxldGUgdGhlIGdpdmVuIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6IHN0cmluZztcbn07XG4vKiogU2V0IHRoZSBtYXAgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIEVESVRPUl9NT0RFU1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtzZXRNYXBNb2RlfSBmcm9tICdrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge0VESVRPUl9NT0RFU30gZnJvbSAna2VwbGVyLmdsL2NvbnN0YW50cyc7XG4gKlxuICogdGhpcy5wcm9wcy5kaXNwYXRjaChzZXRNYXBNb2RlKEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvck1vZGUoXG4gIG1vZGU6IHN0cmluZ1xuKTogTWVyZ2U8U2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9FRElUT1JfTU9ERSxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFRyaWdnZXIgQ1BVIGZpbHRlciBvZiBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gc2luZ2xlIGRhdGFJZCBvciBhbiBhcnJheSBvZiBkYXRhSWRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q1BVRmlsdGVyKFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBNZXJnZTxBcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfQ1BVX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBUb2dnbGUgZWRpdG9yIGxheWVyIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5KCk6IE1lcmdlPFxuICBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFl9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFlcbiAgfTtcbn1cblxudHlwZSBGaWxlQ29udGVudCA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmdbXTtcbiAgZGF0YTogYW55O1xufTtcbmV4cG9ydCB0eXBlIE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgZ2VuOiBBc3luY0dlbmVyYXRvcjxGaWxlQ29udGVudD47XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBwcm9ncmVzcz86IGFueTtcbiAgICBhY2N1bXVsYXRlZD86IGFueTtcbiAgICBvbkZpbmlzaDogKHJlc3VsdDogYW55KSA9PiBhbnk7XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBuZXh0IGZpbGUgYmF0Y2hcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gYmF0Y2ggcGF5bG9hZFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRGaWxlQmF0Y2goXG4gIHBheWxvYWQ6IE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbik6IE1lcmdlPE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk5FWFRfRklMRV9CQVRDSH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0gsXG4gICAgcGF5bG9hZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgY29udGVudDogRmlsZUNvbnRlbnQ7XG4gICAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIGZpbGUgY29udGVudFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudChcbiAgcGF5bG9hZDogUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5ULFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBjb25maWc6IHtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xuICB9O1xufTtcbi8qKlxuICogU2V0IGxheWVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSB7dGltZUZvcm1hdDogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nfVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyhcbiAgY29uZmlnOiBTZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUd9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBGaWx0ZXIgYW5pbWF0aW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGlkeDogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnaWR4J10sXG4gIGNvbmZpZzogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnY29uZmlnJ11cbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUcsXG4gICAgaWR4LFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZGVjbGFyYXRpb24gaXMgbmVlZGVkIHRvIGdyb3VwIGFjdGlvbnMgaW4gZG9jc1xuICovXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgYHZpc1N0YXRlYCByZWR1Y2VyLlxuICogVGhleSBtYW5hZ2UgaG93IGRhdGEgaXMgcHJvY2Vzc2VkLCBmaWx0ZXJlZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBtYXAgYnkgb3BlcmF0ZXMgb24gbGF5ZXJzLFxuICogZmlsdGVycyBhbmQgaW50ZXJhY3Rpb24gc2V0dGluZ3MuXG4gKlxuICogQHB1YmxpY1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQVFBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQy9CQyxRQUFlLEVBQ2ZDLFNBQW1DLEVBQ29EO0VBQ3ZGLE9BQU87SUFDTEMsSUFBSSxFQUFFQyx1QkFBVyxDQUFDQyxtQkFBbUI7SUFDckNKLFFBQVEsRUFBUkEsUUFBUTtJQUNSQyxTQUFTLEVBQVRBO0VBQ0YsQ0FBQztBQUNIO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ksb0JBQW9CQSxDQUNsQ0wsUUFBZSxFQUNmTSxHQUFtQixFQUNuQkMsSUFBWSxFQUNaQyxLQUFVLEVBQ29GO0VBQzlGLE9BQU87SUFDTE4sSUFBSSxFQUFFQyx1QkFBVyxDQUFDTSx1QkFBdUI7SUFDekNULFFBQVEsRUFBUkEsUUFBUTtJQUNSTSxHQUFHLEVBQUhBLEdBQUc7SUFD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
904
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImxheWVyQ29uZmlnQ2hhbmdlIiwib2xkTGF5ZXIiLCJuZXdDb25maWciLCJ0eXBlIiwiQWN0aW9uVHlwZXMiLCJMQVlFUl9DT05GSUdfQ0hBTkdFIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2UiLCJpZHgiLCJwcm9wIiwidmFsdWUiLCJMQVlFUl9URVhUX0xBQkVMX0NIQU5HRSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1R5cGUiLCJMQVlFUl9UWVBFX0NIQU5HRSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImNoYW5uZWwiLCJMQVlFUl9WSVNVQUxfQ0hBTk5FTF9DSEFOR0UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsIkxBWUVSX1ZJU19DT05GSUdfQ0hBTkdFIiwibGF5ZXJDb2xvclVJQ2hhbmdlIiwiTEFZRVJfQ09MT1JfVUlfQ0hBTkdFIiwidXBkYXRlTGF5ZXJCbGVuZGluZyIsIm1vZGUiLCJVUERBVEVfTEFZRVJfQkxFTkRJTkciLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZSIsImNvbmZpZyIsIklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0UiLCJzZXRGaWx0ZXIiLCJ2YWx1ZUluZGV4IiwiU0VUX0ZJTFRFUiIsInNldEZpbHRlckFuaW1hdGlvblRpbWUiLCJTRVRfRklMVEVSX0FOSU1BVElPTl9USU1FIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwiX3JlZiIsImlkIiwiYW5pbWF0aW9uV2luZG93IiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XIiwiYWRkRmlsdGVyIiwiZGF0YUlkIiwiQUREX0ZJTFRFUiIsImFkZExheWVyIiwiZGF0YXNldElkIiwiQUREX0xBWUVSIiwicmVvcmRlckxheWVyIiwib3JkZXIiLCJSRU9SREVSX0xBWUVSIiwicmVtb3ZlRmlsdGVyIiwiUkVNT1ZFX0ZJTFRFUiIsInJlbW92ZUxheWVyIiwiUkVNT1ZFX0xBWUVSIiwiZHVwbGljYXRlTGF5ZXIiLCJEVVBMSUNBVEVfTEFZRVIiLCJyZW1vdmVEYXRhc2V0IiwiUkVNT1ZFX0RBVEFTRVQiLCJzaG93RGF0YXNldFRhYmxlIiwiU0hPV19EQVRBU0VUX1RBQkxFIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiVVBEQVRFX1RBQkxFX0NPTE9SIiwic29ydFRhYmxlQ29sdW1uIiwiY29sdW1uIiwiU09SVF9UQUJMRV9DT0xVTU4iLCJwaW5UYWJsZUNvbHVtbiIsIlBJTl9UQUJMRV9DT0xVTU4iLCJjb3B5VGFibGVDb2x1bW4iLCJDT1BZX1RBQkxFX0NPTFVNTiIsInVwZGF0ZVZpc0RhdGEiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJVUERBVEVfVklTX0RBVEEiLCJyZW5hbWVEYXRhc2V0IiwibGFiZWwiLCJSRU5BTUVfREFUQVNFVCIsInRvZ2dsZUZpbHRlckFuaW1hdGlvbiIsIlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJzcGVlZCIsIlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lIiwiU0VUX0xBWUVSX0FOSU1BVElPTl9USU1FIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsIlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQiLCJ0b2dnbGVMYXllckFuaW1hdGlvbiIsIlRPR0dMRV9MQVlFUl9BTklNQVRJT04iLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2wiLCJUT0dHTEVfTEFZRVJfQU5JTUFUSU9OX0NPTlRST0wiLCJlbmxhcmdlRmlsdGVyIiwiRU5MQVJHRV9GSUxURVIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlIiwiVE9HR0xFX0ZJTFRFUl9GRUFUVVJFIiwib25MYXllckhvdmVyIiwiaW5mbyIsIkxBWUVSX0hPVkVSIiwib25MYXllckNsaWNrIiwiTEFZRVJfQ0xJQ0siLCJvbk1hcENsaWNrIiwiTUFQX0NMSUNLIiwib25Nb3VzZU1vdmUiLCJldnQiLCJNT1VTRV9NT1ZFIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJtYXBJbmRleCIsImxheWVySWQiLCJUT0dHTEVfTEFZRVJfRk9SX01BUCIsInNldEZpbHRlclBsb3QiLCJuZXdQcm9wIiwiU0VUX0ZJTFRFUl9QTE9UIiwic2V0TWFwSW5mbyIsIlNFVF9NQVBfSU5GTyIsImxvYWRGaWxlcyIsImZpbGVzIiwib25GaW5pc2giLCJMT0FEX0ZJTEVTIiwibG9hZE5leHRGaWxlIiwiTE9BRF9ORVhUX0ZJTEUiLCJsb2FkRmlsZXNTdWNjZXNzIiwicmVzdWx0IiwiTE9BRF9GSUxFU19TVUNDRVNTIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsIl9yZWYyIiwiZmlsZU5hbWUiLCJmaWxlQ2FjaGUiLCJMT0FEX0ZJTEVfU1RFUF9TVUNDRVNTIiwibG9hZEZpbGVzRXJyIiwiZXJyb3IiLCJMT0FEX0ZJTEVTX0VSUiIsInNldEZlYXR1cmVzIiwiZmVhdHVyZXMiLCJTRVRfRkVBVFVSRVMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJsYXllciIsImZlYXR1cmUiLCJTRVRfUE9MWUdPTl9GSUxURVJfTEFZRVIiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJTRVRfU0VMRUNURURfRkVBVFVSRSIsImRlbGV0ZUZlYXR1cmUiLCJERUxFVEVfRkVBVFVSRSIsInNldEVkaXRvck1vZGUiLCJTRVRfRURJVE9SX01PREUiLCJhcHBseUNQVUZpbHRlciIsIkFQUExZX0NQVV9GSUxURVIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwiVE9HR0xFX0VESVRPUl9WSVNJQklMSVRZIiwibmV4dEZpbGVCYXRjaCIsInBheWxvYWQiLCJORVhUX0ZJTEVfQkFUQ0giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJQUk9DRVNTX0ZJTEVfQ09OVEVOVCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyIsIlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIiwiU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUciLCJ2aXNTdGF0ZUFjdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyB2aXMtc3RhdGUtcmVkdWNlclxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJ2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtBZGREYXRhVG9NYXBQYXlsb2FkfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHtGaWxlQ2FjaGVJdGVtfSBmcm9tICcuLi9wcm9jZXNzb3JzL3R5cGVzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZywgTGF5ZXJWaXNDb25maWd9IGZyb20gJ2xheWVycyc7XG5pbXBvcnQge0ZlYXR1cmUsIEludGVyYWN0aW9uQ29uZmlnfSBmcm9tICdyZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtWYWx1ZU9mLCBNZXJnZSwgUkdCQ29sb3IsIE5lc3RlZFBhcnRpYWx9IGZyb20gJy4uL3JlZHVjZXJzL3R5cGVzJztcbmltcG9ydCB7Q29sb3JVSX0gZnJvbSAnbGF5ZXJzL2xheWVyLWZhY3RvcnknO1xuLy8gVE9ETyAtIGltcG9ydCBMb2FkZXJPYmplY3QgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcbi8vIFRPRE8gLSBpbXBvcnQgTG9hZE9wdGlvbnMgdHlwZSBmcm9tIEBsb2FkZXJzLmdsL2NvcmUgd2hlbiBzdXBwb3J0ZWRcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQHBhcmFtIG9sZExheWVyIC0gbGF5ZXIgdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIG5ldyBjb25maWcgdG8gYmUgbWVyZ2VkIHdpdGggb2xkIGNvbmZpZ1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPlxuKTogTWVyZ2U8TGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX0NPTkZJR19DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBpZHg6IG51bWJlciB8ICdhbGwnO1xuICBwcm9wOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB0ZXh0IGxhYmVsXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gaWR4IC1gaWR4YCBvZiB0ZXh0IGxhYmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIHRleHQgbGFiZWwsIGUsZywgYGFuY2hvcmAsIGBhbGlnbm1lbnRgLCBgY29sb3JgLCBgc2l6ZWAsIGBmaWVsZGBcbiAqIEBwYXJhbSB2YWx1ZSAtIG5ldyB2YWx1ZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBpZHg6IG51bWJlciB8ICdhbGwnLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnlcbik6IE1lcmdlPExheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9URVhUX0xBQkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdUeXBlOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3VHlwZSAtIG5ldyB0eXBlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZShcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBuZXdUeXBlOiBzdHJpbmdcbik6IE1lcmdlPExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0V9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfVFlQRV9DSEFOR0UsXG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3VHlwZVxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgb2xkTGF5ZXI6IExheWVyO1xuICBuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPjtcbiAgY2hhbm5lbDogc3RyaW5nO1xufTtcbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb2xkTGF5ZXIgLSBsYXllciB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gbmV3Q29uZmlnIC0gbmV3IHZpc3VhbCBjaGFubmVsIGNvbmZpZ1xuICogQHBhcmFtIGNoYW5uZWwgLSBjaGFubmVsIHRvIGJlIHVwZGF0ZWRcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICBjaGFubmVsOiBzdHJpbmdcbik6IE1lcmdlPFxuICBMYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRX1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWcsXG4gICAgY2hhbm5lbFxuICB9O1xufVxuZXhwb3J0IHR5cGUgTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uID0ge1xuICBvbGRMYXllcjogTGF5ZXI7XG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59O1xuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBuZXdWaXNDb25maWcgLSBuZXcgdmlzQ29uZmlnIGFzIGEga2V5IHZhbHVlIG1hcDogZS5nLiBge29wYWNpdHk6IDAuOH1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlKFxuICBvbGRMYXllcjogTGF5ZXIsXG4gIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz5cbik6IE1lcmdlPExheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9WSVNfQ09ORklHX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBuZXdWaXNDb25maWdcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG9sZExheWVyOiBMYXllcjtcbiAgcHJvcDogc3RyaW5nO1xuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST47XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29sb3IgcGFsZXR0ZSB1aSBmb3IgbGF5ZXIgY29sb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBvbGRMYXllciAtIGxheWVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gd2hpY2ggY29sb3IgcHJvcFxuICogQHBhcmFtIG5ld0NvbmZpZyAtIHRvIGJlIG1lcmdlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbG9yVUlDaGFuZ2UoXG4gIG9sZExheWVyOiBMYXllcixcbiAgcHJvcDogc3RyaW5nLFxuICBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST5cbik6IE1lcmdlPExheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfQ09MT1JfVUlfQ0hBTkdFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxBWUVSX0NPTE9SX1VJX0NIQU5HRSxcbiAgICBvbGRMYXllcixcbiAgICBwcm9wLFxuICAgIG5ld0NvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvbiA9IHtcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJztcbn07XG4vKipcbiAqIFVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gbW9kZSBvbmUgb2YgYGFkZGl0aXZlYCwgYG5vcm1hbGAgYW5kIGBzdWJ0cmFjdGl2ZWBcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJCbGVuZGluZyhcbiAgbW9kZTogJ2FkZGl0aXZlJyB8ICdub3JtYWwnIHwgJ3N1YnRyYWN0aXZlJ1xuKTogTWVyZ2U8VXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0JMRU5ESU5HfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9CTEVORElORyxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvbiA9IHtcbiAgY29uZmlnOiBWYWx1ZU9mPEludGVyYWN0aW9uQ29uZmlnPjtcbn07XG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gY29uZmlnIC0gbmV3IGNvbmZpZyBhcyBrZXkgdmFsdWUgbWFwOiBge3Rvb2x0aXA6IHtlbmFibGVkOiB0cnVlfX1gXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlKFxuICBjb25maWc6IFZhbHVlT2Y8SW50ZXJhY3Rpb25Db25maWc+XG4pOiBNZXJnZTxcbiAgSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLklOVEVSQUNUSU9OX0NPTkZJR19DSEFOR0V9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTlRFUkFDVElPTl9DT05GSUdfQ0hBTkdFLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgcHJvcDogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB2YWx1ZUluZGV4PzogbnVtYmVyO1xufTtcbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgaWR4OiBudW1iZXIsXG4gIHByb3A6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgdmFsdWVJbmRleD86IG51bWJlclxuKTogTWVyZ2U8U2V0RmlsdGVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9GSUxURVIsXG4gICAgaWR4LFxuICAgIHByb3AsXG4gICAgdmFsdWUsXG4gICAgdmFsdWVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG4gIHByb3A6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgdmFsdWVJbmRleD86IG51bWJlcjtcbn07XG4vKipcbiAqIFNhbWUgYXMgVXBkYXRlIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCAtYGlkeGAgb2YgZmlsdGVyIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBwcm9wIC0gYHByb3BgIG9mIGZpbHRlciwgZSxnLCBgZGF0YUlkYCwgYG5hbWVgLCBgdmFsdWVgXG4gKiBAcGFyYW0gdmFsdWUgLSBuZXcgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IC0gZGF0YUlkIGluZGV4XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWUoXG4gIGlkeDogbnVtYmVyLFxuICBwcm9wOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIHZhbHVlSW5kZXg/OiBudW1iZXJcbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX0FOSU1BVElPTl9USU1FfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRSxcbiAgICBpZHgsXG4gICAgcHJvcCxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZUluZGV4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xufTtcbi8qKlxuICogU2FtZSBhcyBVcGRhdGUgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3coe1xuICBpZCxcbiAgYW5pbWF0aW9uV2luZG93XG59OiBTZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uKTogTWVyZ2U8XG4gIFNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fV0lORE9XLFxuICAgIGlkLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ/OiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtIGRhdGFzZXQgYGlkYCB0aGlzIG5ldyBmaWx0ZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcihcbiAgZGF0YUlkOiBzdHJpbmcgfCBudWxsXG4pOiBNZXJnZTxBZGRGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQUREX0ZJTFRFUixcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQWRkTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBjb25maWc/OiBvYmplY3Q7XG4gIGRhdGFzZXRJZD86IHN0cmluZztcbn07XG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGNvbmZpZyAtIG5ldyBsYXllciBjb25maWdcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBkYXRhc2V0IGlkIHVzZWQgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGxheWVyXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyKFxuICBjb25maWc/OiBvYmplY3QsXG4gIGRhdGFzZXRJZD86IHN0cmluZ1xuKTogTWVyZ2U8QWRkTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkFERF9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BRERfTEFZRVIsXG4gICAgY29uZmlnLFxuICAgIGRhdGFzZXRJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBvcmRlcjogbnVtYmVyW107XG59O1xuLyoqXG4gKiBSZW9yZGVyIGxheWVyLCBvcmRlciBpcyBhbiBhcnJheSBvZiBsYXllciBpbmRleGVzLCBpbmRleCAwIHdpbGwgYmUgdGhlIG9uZSBhdCB0aGUgYm90dG9tXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gb3JkZXIgYW4gYXJyYXkgb2YgbGF5ZXIgaW5kZXhlc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGJyaW5nIGBsYXllcnNbMV1gIGJlbG93IGBsYXllcnNbMF1gLCB0aGUgc2VxdWVuY2UgbGF5ZXJzIHdpbGwgYmUgcmVuZGVyZWQgaXMgYDFgLCBgMGAsIGAyYCwgYDNgLlxuICogLy8gYDFgIHdpbGwgYmUgYXQgdGhlIGJvdHRvbSwgYDNgIHdpbGwgYmUgYXQgdGhlIHRvcC5cbiAqIHRoaXMucHJvcHMuZGlzcGF0Y2gocmVvcmRlckxheWVyKFsxLCAwLCAyLCAzXSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyKFxuICBvcmRlcjogbnVtYmVyW11cbik6IE1lcmdlPFJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVPUkRFUl9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU9SREVSX0xBWUVSLFxuICAgIG9yZGVyXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyIGZyb20gYHZpc1N0YXRlLmZpbHRlcnNgLCBvbmNlIGEgZmlsdGVyIGlzIHJlbW92ZWQsIGRhdGEgd2lsbCBiZSByZS1maWx0ZXJlZCBhbmQgbGF5ZXIgd2lsbCBiZSB1cGRhdGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBmaWx0ZXIgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGaWx0ZXIoXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxSZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVNT1ZFX0ZJTFRFUixcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFJlbW92ZSBhIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaWR4IGlkeCBvZiBsYXllciB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8UmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlJFTU9WRV9MQVlFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfTEFZRVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaWR4OiBudW1iZXI7XG59O1xuLyoqXG4gKiBEdXBsaWNhdGUgYSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeCBpZHggb2YgbGF5ZXIgdG8gYmUgZHVwbGljYXRlZFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGVMYXllcihcbiAgaWR4OiBudW1iZXJcbik6IE1lcmdlPER1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5EVVBMSUNBVEVfTEFZRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRFVQTElDQVRFX0xBWUVSLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXQoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxSZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRU1PVkVfREFUQVNFVCxcbiAgICBkYXRhSWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xufTtcbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBkYXRhSWQgZGF0YXNldCBpZCB0byBzaG93IGluIHRhYmxlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhc2V0VGFibGUoXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBNZXJnZTxTaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TSE9XX0RBVEFTRVRfVEFCTEV9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0hPV19EQVRBU0VUX1RBQkxFLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgbmV3Q29sb3I6IFJHQkNvbG9yO1xufTtcbi8qKlxuICogVXBkYXRlIGRhdGFzZXQgY29sb3IgdG8gY3VzdG9tIGJ5IG1lYW5zIG9mIGNvbG9yIHBpY2tlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCBkYXRhc2V0IGBpZGAgdGhpcyBjdXN0b20gY29sb3IgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0gbmV3Q29sb3IgY3VzdG9tIGNvbG9yIGluIFJHQmZvcm1hdFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZUNvbG9yKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbmV3Q29sb3I6IFJHQkNvbG9yXG4pOiBNZXJnZTxVcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9UQUJMRV9DT0xPUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVEFCTEVfQ09MT1IsXG4gICAgZGF0YUlkLFxuICAgIG5ld0NvbG9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIFNvcnQgZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW4oXG4gIGRhdGFJZDogc3RyaW5nLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogTWVyZ2U8U29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TT1JUX1RBQkxFX0NPTFVNTixcbiAgICBkYXRhSWQsXG4gICAgY29sdW1uLFxuICAgIG1vZGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBQaW4gZGF0YXNldCBjb2x1bW4sIGZvciB0YWJsZSBkaXNwbGF5XG4gKiBAcGFyYW0gZGF0YUlkXG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPFBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5QSU5fVEFCTEVfQ09MVU1OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBJTl9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDb3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uID0ge1xuICBkYXRhSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBDb3B5IGNvbHVtbiwgZm9yIHRhYmxlIGRpc3BsYXlcbiAqIEBwYXJhbSBkYXRhSWRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgY29sdW1uOiBzdHJpbmdcbik6IE1lcmdlPENvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU59PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuQ09QWV9UQUJMRV9DT0xVTU4sXG4gICAgZGF0YUlkLFxuICAgIGNvbHVtblxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBBZGREYXRhVG9NYXBVcGRhdGVyT3B0aW9ucyA9IHtcbiAgY2VudHJNYXA/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtlZXBFeGlzdGluZ0NvbmZpZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YXNldHM6IEFkZERhdGFUb01hcFBheWxvYWRbJ2RhdGFzZXRzJ107XG4gIG9wdGlvbnM6IEFkZERhdGFUb01hcFBheWxvYWRbJ29wdGlvbnMnXTtcbiAgY29uZmlnOiBBZGREYXRhVG9NYXBQYXlsb2FkWydjb25maWcnXTtcbn0gJiBBZGREYXRhVG9NYXBQYXlsb2FkO1xuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuLy8gKiBAcGFyYW0gZGF0YXNldC5pbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4vLyAqIEBwYXJhbSBkYXRhc2V0LmRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuLy8gKiBAcGFyYW0gZGF0YXNldC5kYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2VudGVyTWFwIGBkZWZhdWx0OiB0cnVlYCBpZiBgY2VudGVyTWFwYCBpcyBzZXQgdG8gYHRydWVgIGtlcGxlci5nbCB3aWxsXG4gKiBwbGFjZSB0aGUgbWFwIHZpZXcgd2l0aGluIHRoZSBkYXRhIHBvaW50cyBib3VuZGFyaWVzXG4gKiBAcGFyYW0gb3B0aW9ucy5yZWFkT25seSBgZGVmYXVsdDogZmFsc2VgIGlmIGByZWFkT25seWAgaXMgc2V0IHRvIGB0cnVlYFxuICogdGhlIGxlZnQgc2V0dGluZyBwYW5lbCB3aWxsIGJlIGhpZGRlblxuICogQHBhcmFtIGNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpc0RhdGEoXG4gIGRhdGFzZXRzOiBBZGREYXRhVG9NYXBQYXlsb2FkWydkYXRhc2V0cyddLFxuICBvcHRpb25zOiBBZGREYXRhVG9NYXBQYXlsb2FkWydvcHRpb25zJ10sXG4gIGNvbmZpZzogQWRkRGF0YVRvTWFwUGF5bG9hZFsnY29uZmlnJ11cbik6IE1lcmdlPFVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9WSVNfREFUQX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5VUERBVEVfVklTX0RBVEEsXG4gICAgZGF0YXNldHMsXG4gICAgb3B0aW9ucyxcbiAgICBjb25maWdcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGRhdGFJZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufTtcbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGRhdGFJZCAtICoqKnJlcXVpcmVkKiogSWQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlXG4gKiBAcGFyYW0gbGFiZWwgLSAqKipyZXF1aXJlZCoqIE5ldyBuYW1lIGZvciB0aGUgZGF0YXNldFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0KFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZ1xuKTogTWVyZ2U8UmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVR9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuUkVOQU1FX0RBVEFTRVQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xufTtcbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gaWR4IG9mIGZpbHRlclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJBbmltYXRpb24oXG4gIGlkeDogbnVtYmVyXG4pOiBNZXJnZTxUb2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfQU5JTUFUSU9OLFxuICAgIGlkeFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBVcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xufTtcbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSAgYGlkeGAgb2YgZmlsdGVyXG4gKiBAcGFyYW0gc3BlZWQgLSBgc3BlZWRgIHRvIGNoYW5nZSBpdCB0by4gYHNwZWVkYCBpcyBhIG11bHRpcGxpZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQoXG4gIGlkeDogbnVtYmVyLFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlVQREFURV9GSUxURVJfQU5JTUFUSU9OX1NQRUVEfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVVBEQVRFX0ZJTFRFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgaWR4LFxuICAgIHNwZWVkXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuLyoqXG4gKiBSZXNldCBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSB2YWx1ZSAtICBDdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lKFxuICB2YWx1ZTogbnVtYmVyXG4pOiBNZXJnZTxTZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRX0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24gPSB7XG4gIHNwZWVkOiBudW1iZXI7XG59O1xuLyoqXG4gKiB1cGRhdGUgdHJpcCBsYXllciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBzcGVlZCAtIGBzcGVlZGAgdG8gY2hhbmdlIGl0IHRvLiBgc3BlZWRgIGlzIGEgbXVsdGlwbGllclxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkKFxuICBzcGVlZDogbnVtYmVyXG4pOiBNZXJnZTxcbiAgVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVVBEQVRFX0xBWUVSX0FOSU1BVElPTl9TUEVFRH1cbj4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlVQREFURV9MQVlFUl9BTklNQVRJT05fU1BFRUQsXG4gICAgc3BlZWRcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBzdGFydCBlbmQgZW5kIGxheWVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbigpOiBNZXJnZTxcbiAgVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9BTklNQVRJT059XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfTEFZRVJfQU5JTUFUSU9OXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24gPSB7fTtcbi8qKlxuICogaGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2woKTogTWVyZ2U8XG4gIFRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJBY3Rpb24sXG4gIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuVE9HR0xFX0xBWUVSX0FOSU1BVElPTl9DT05UUk9MXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEVubGFyZ2VGaWx0ZXJVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgdG8gZW5sYXJnZVxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmxhcmdlRmlsdGVyKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8RW5sYXJnZUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuRU5MQVJHRV9GSUxURVIsXG4gICAgaWR4XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbn07XG4vKipcbiAqIFNob3cvaGlkZSBmaWx0ZXIgZmVhdHVyZSBvbiBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHggLSBpbmRleCBvZiBmaWx0ZXIgZmVhdHVyZSB0byBzaG93L2hpZGVcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVGaWx0ZXJGZWF0dXJlKFxuICBpZHg6IG51bWJlclxuKTogTWVyZ2U8VG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuVE9HR0xFX0ZJTFRFUl9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9GSUxURVJfRkVBVFVSRSxcbiAgICBpZHhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25MYXllckhvdmVyVXBkYXRlckFjdGlvbiA9IHtcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbDtcbn07XG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm8gLSBPYmplY3QgaG92ZXJlZCwgcmV0dXJuZWQgYnkgZGVjay5nbFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkxheWVySG92ZXIoXG4gIGluZm86IHtwaWNrZWQ/OiBib29sZWFufSB8IG51bGxcbik6IE1lcmdlPE9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVJ9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfSE9WRVIsXG4gICAgaW5mb1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBPbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uID0ge1xuICBpbmZvOiB7cGlja2VkPzogYm9vbGVhbn0gfCBudWxsO1xufTtcbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gaW5mbyAtIE9iamVjdCBjbGlja2VkLCByZXR1cm5lZCBieSBkZWNrLmdsXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTGF5ZXJDbGljayhcbiAgaW5mbzoge3BpY2tlZD86IGJvb2xlYW59IHwgbnVsbFxuKTogTWVyZ2U8T25MYXllckNsaWNrVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9DTElDSyxcbiAgICBpbmZvXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uID0ge307XG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbk1hcENsaWNrKCk6IE1lcmdlPE9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk1BUF9DTElDS30+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5NQVBfQ0xJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uID0ge1xuICBldnQ7XG59O1xuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3VzZSBtb3ZlZXZlbnQsIHBheWxvYWQgd291bGQgYmVcbiAqIFJlYWN0LW1hcC1nbCBQb2ludGVyRXZlbnRcbiAqIGh0dHBzOi8vdWJlci5naXRodWIuaW8vcmVhY3QtbWFwLWdsLyMvZG9jdW1lbnRhdGlvbi9hcGktcmVmZXJlbmNlL3BvaW50ZXItZXZlbnRcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZXZ0IC0gUG9pbnRlckV2ZW50XG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKFxuICBldnRcbik6IE1lcmdlPE9uTW91c2VNb3ZlVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5NT1VTRV9NT1ZFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLk1PVVNFX01PVkUsXG4gICAgZXZ0XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvbiA9IHtcbiAgbWFwSW5kZXg6IG51bWJlcjtcbiAgbGF5ZXJJZDogc3RyaW5nO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1hcEluZGV4IC0gaW5kZXggb2YgdGhlIHNwbGl0IG1hcFxuICogQHBhcmFtIGxheWVySWQgLSBpZCBvZiB0aGUgbGF5ZXJcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTGF5ZXJGb3JNYXAoXG4gIG1hcEluZGV4OiBudW1iZXIsXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTWVyZ2U8VG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlRPR0dMRV9MQVlFUl9GT1JfTUFQLFxuICAgIG1hcEluZGV4LFxuICAgIGxheWVySWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb24gPSB7XG4gIGlkeDogbnVtYmVyO1xuICBuZXdQcm9wOiBvYmplY3Q7XG4gIHZhbHVlSW5kZXg/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBpZHhcbiAqIEBwYXJhbSBuZXdQcm9wIGtleSB2YWx1ZSBtYXBwaW5nIG9mIG5ldyBwcm9wIGB7eUF4aXM6ICdoaXN0b2dyYW0nfWBcbiAqIEBwYXJhbSB2YWx1ZUluZGV4IGRhdGFJZCBpbmRleFxuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJQbG90KFxuICBpZHg6IG51bWJlcixcbiAgbmV3UHJvcDogb2JqZWN0LFxuICB2YWx1ZUluZGV4PzogbnVtYmVyXG4pOiBNZXJnZTxTZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRklMVEVSX1BMT1R9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9QTE9ULFxuICAgIGlkeCxcbiAgICBuZXdQcm9wLFxuICAgIHZhbHVlSW5kZXhcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb24gPSB7XG4gIGluZm86IGFueTtcbn07XG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGluZm9cbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWFwSW5mbyhcbiAgaW5mbzogYW55XG4pOiBNZXJnZTxTZXRNYXBJbmZvVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfTUFQX0lORk99PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX01BUF9JTkZPLFxuICAgIGluZm9cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgb25GaW5pc2g/KHJlc3VsdDogYW55KTogYW55O1xufTtcbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmlsZXMgYXJyYXkgb2YgZmlsZWJsb2JcbiAqIEByZXR1cm5zIGFjdGlvblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzKFxuICBmaWxlczogRmlsZVtdLFxuICBvbkZpbmlzaD86IChyZXN1bHQ6IGFueSkgPT4gYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFUyxcbiAgICBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xufVxuXG4vKipcbiAqIENhbGxlZCB3aXRoIG5leHQgZmlsZSB0byBsb2FkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZSgpOiB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfTkVYVF9GSUxFfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9ORVhUX0ZJTEVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24gPSB7XG4gIHJlc3VsdDogRmlsZUNhY2hlSXRlbVtdO1xufTtcbi8qKlxuICogY2FsbGVkIHdoZW4gYWxsIGZpbGVzIGFyZSBwcm9jZXNzZWQgYW5kIGxvYWRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNTdWNjZXNzKFxuICByZXN1bHQ6IEZpbGVDYWNoZUl0ZW1bXVxuKTogTWVyZ2U8bG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuTE9BRF9GSUxFU19TVUNDRVNTfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfU1VDQ0VTUyxcbiAgICByZXN1bHRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG59O1xuLyoqXG4gKiBjYWxsZWQgd2hlbiBzdWNjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCByZWFkeSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIHJlc3VsdFxuICogQHJldHVybnMgYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtcbiAgZmlsZU5hbWUsXG4gIGZpbGVDYWNoZVxufToge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlQ2FjaGU6IEZpbGVDYWNoZUl0ZW1bXTtcbn0pOiBNZXJnZTxMb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRV9TVEVQX1NVQ0NFU1N9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuTE9BRF9GSUxFX1NURVBfU1VDQ0VTUyxcbiAgICBmaWxlTmFtZSxcbiAgICBmaWxlQ2FjaGVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbiA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZXJyb3I6IGFueTtcbn07XG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gIGVycm9yXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzRXJyKFxuICBmaWxlTmFtZTogc3RyaW5nLFxuICBlcnJvcjogYW55XG4pOiBNZXJnZTxMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQURfRklMRVNfRVJSLFxuICAgIGZpbGVOYW1lLFxuICAgIGVycm9yXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiA9IHtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbn07XG4vKipcbiAqIFN0b3JlIGZlYXR1cmVzIHRvIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZmVhdHVyZXNcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXMoXG4gIGZlYXR1cmVzOiBGZWF0dXJlW11cbik6IE1lcmdlPFNldEZlYXR1cmVzVXBkYXRlckFjdGlvbiwge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5TRVRfRkVBVFVSRVN9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZFQVRVUkVTLFxuICAgIGZlYXR1cmVzXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24gPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgZmVhdHVyZTogRmVhdHVyZTtcbn07XG4vKipcbiAqIEl0IHdpbGwgYXBwbHkgdGhlIHByb3ZpZGUgZmVhdHVyZSBhcyBmaWx0ZXIgdG8gdGhlIGdpdmVuIGxheWVyLlxuICogSWYgdGhlIGdpdmVuIGZlYXR1cmUgaXMgYWxyZWFkeSBhcHBsaWVkIGFzIGZpbHRlciB0byB0aGUgbGF5ZXIsIGl0IHdpbGwgcmVtb3ZlIHRoZSBsYXllciBmcm9tIHRoZSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBsYXllclxuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyKFxuICBsYXllcjogTGF5ZXIsXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPFNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX1BPTFlHT05fRklMVEVSX0xBWUVSfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9QT0xZR09OX0ZJTFRFUl9MQVlFUixcbiAgICBsYXllcixcbiAgICBmZWF0dXJlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgZmVhdHVyZSB0byBiZSBlZGl0ZWQvZGVsZXRlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGZlYXR1cmVcbiAqIEByZXR1cm5zIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0ZWRGZWF0dXJlKFxuICBmZWF0dXJlOiBGZWF0dXJlXG4pOiBNZXJnZTxTZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9TRUxFQ1RFRF9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIGZlYXR1cmU6IEZlYXR1cmU7XG59O1xuLyoqXG4gKiBEZWxldGUgdGhlIGdpdmVuIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBmZWF0dXJlXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmUoXG4gIGZlYXR1cmU6IEZlYXR1cmVcbik6IE1lcmdlPERlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURV9GRUFUVVJFLFxuICAgIGZlYXR1cmVcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24gPSB7XG4gIG1vZGU6IHN0cmluZztcbn07XG4vKiogU2V0IHRoZSBtYXAgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIG1vZGUgb25lIG9mIEVESVRPUl9NT0RFU1xuICogQHJldHVybnMgYWN0aW9uXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtzZXRNYXBNb2RlfSBmcm9tICdrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge0VESVRPUl9NT0RFU30gZnJvbSAna2VwbGVyLmdsL2NvbnN0YW50cyc7XG4gKlxuICogdGhpcy5wcm9wcy5kaXNwYXRjaChzZXRNYXBNb2RlKEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvck1vZGUoXG4gIG1vZGU6IHN0cmluZ1xuKTogTWVyZ2U8U2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuU0VUX0VESVRPUl9NT0RFfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlNFVF9FRElUT1JfTU9ERSxcbiAgICBtb2RlXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvbiA9IHtcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn07XG4vKipcbiAqIFRyaWdnZXIgQ1BVIGZpbHRlciBvZiBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVBY3Rpb25zXG4gKiBAcGFyYW0gZGF0YUlkIC0gc2luZ2xlIGRhdGFJZCBvciBhbiBhcnJheSBvZiBkYXRhSWRzXG4gKiBAcmV0dXJucyBhY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q1BVRmlsdGVyKFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdXG4pOiBNZXJnZTxBcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb24sIHt0eXBlOiB0eXBlb2YgQWN0aW9uVHlwZXMuQVBQTFlfQ1BVX0ZJTFRFUn0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5BUFBMWV9DUFVfRklMVEVSLFxuICAgIGRhdGFJZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbiA9IHt9O1xuLyoqXG4gKiBUb2dnbGUgZWRpdG9yIGxheWVyIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEByZXR1cm4gYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5KCk6IE1lcmdlPFxuICBUb2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvbixcbiAge3R5cGU6IHR5cGVvZiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFl9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5UT0dHTEVfRURJVE9SX1ZJU0lCSUxJVFlcbiAgfTtcbn1cblxudHlwZSBGaWxlQ29udGVudCA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmdbXTtcbiAgZGF0YTogYW55O1xufTtcbmV4cG9ydCB0eXBlIE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgZ2VuOiBBc3luY0dlbmVyYXRvcjxGaWxlQ29udGVudD47XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBwcm9ncmVzcz86IGFueTtcbiAgICBhY2N1bXVsYXRlZD86IGFueTtcbiAgICBvbkZpbmlzaDogKHJlc3VsdDogYW55KSA9PiBhbnk7XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBuZXh0IGZpbGUgYmF0Y2hcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gYmF0Y2ggcGF5bG9hZFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRGaWxlQmF0Y2goXG4gIHBheWxvYWQ6IE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ11cbik6IE1lcmdlPE5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLk5FWFRfRklMRV9CQVRDSH0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5ORVhUX0ZJTEVfQkFUQ0gsXG4gICAgcGF5bG9hZFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uID0ge1xuICBwYXlsb2FkOiB7XG4gICAgY29udGVudDogRmlsZUNvbnRlbnQ7XG4gICAgZmlsZUNhY2hlOiBGaWxlQ2FjaGVJdGVtW107XG4gIH07XG59O1xuLyoqXG4gKiBQcm9jZXNzIHRoZSBmaWxlIGNvbnRlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBwYXlsb2FkIC0gdGhlIGZpbGUgY29udGVudFxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudChcbiAgcGF5bG9hZDogUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblsncGF5bG9hZCddXG4pOiBNZXJnZTxQcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uLCB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5UfT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0NFU1NfRklMRV9DT05URU5ULFxuICAgIHBheWxvYWRcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBjb25maWc6IHtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xuICB9O1xufTtcbi8qKlxuICogU2V0IGxheWVyIGFuaW1hdGlvbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZUFjdGlvbnNcbiAqIEBwYXJhbSBjb25maWcgLSB7dGltZUZvcm1hdDogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nfVxuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyhcbiAgY29uZmlnOiBTZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25bJ2NvbmZpZyddXG4pOiBNZXJnZTxcbiAgU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9MQVlFUl9BTklNQVRJT05fVElNRV9DT05GSUd9XG4+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5TRVRfTEFZRVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uID0ge1xuICBpZHg6IG51bWJlcjtcbiAgY29uZmlnOiB7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZUZvcm1hdD86IHN0cmluZztcbiAgfTtcbn07XG4vKipcbiAqIFNldCBGaWx0ZXIgYW5pbWF0aW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlQWN0aW9uc1xuICogQHBhcmFtIGlkeFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHJldHVybiBhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcoXG4gIGlkeDogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnaWR4J10sXG4gIGNvbmZpZzogU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblsnY29uZmlnJ11cbik6IE1lcmdlPFxuICBTZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uLFxuICB7dHlwZTogdHlwZW9mIEFjdGlvblR5cGVzLlNFVF9GSUxURVJfQU5JTUFUSU9OX1RJTUVfQ09ORklHfVxuPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuU0VUX0ZJTFRFUl9BTklNQVRJT05fVElNRV9DT05GSUcsXG4gICAgaWR4LFxuICAgIGNvbmZpZ1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZGVjbGFyYXRpb24gaXMgbmVlZGVkIHRvIGdyb3VwIGFjdGlvbnMgaW4gZG9jc1xuICovXG4vKipcbiAqIEFjdGlvbnMgaGFuZGxlZCBtb3N0bHkgYnkgYHZpc1N0YXRlYCByZWR1Y2VyLlxuICogVGhleSBtYW5hZ2UgaG93IGRhdGEgaXMgcHJvY2Vzc2VkLCBmaWx0ZXJlZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBtYXAgYnkgb3BlcmF0ZXMgb24gbGF5ZXJzLFxuICogZmlsdGVycyBhbmQgaW50ZXJhY3Rpb24gc2V0dGluZ3MuXG4gKlxuICogQHB1YmxpY1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVBY3Rpb25zID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQVFBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQy9CQyxRQUFlLEVBQ2ZDLFNBQW1DLEVBQ29EO0VBQ3ZGLE9BQU87SUFDTEMsSUFBSSxFQUFFQyxvQkFBVyxDQUFDQyxtQkFBbUI7SUFDckNKLFFBQVE7SUFDUkM7RUFDRixDQUFDO0FBQ0g7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxvQkFBb0JBLENBQ2xDTCxRQUFlLEVBQ2ZNLEdBQW1CLEVBQ25CQyxJQUFZLEVBQ1pDLEtBQVUsRUFDb0Y7RUFDOUYsT0FBTztJQUNMTixJQUFJLEVBQUVDLG9CQUFXLENBQUNNLHVCQUF1QjtJQUN6Q1QsUUFBUTtJQUNSTSxHQUFHO0lBQ0hDLElBQUk7SUFDSkM7RUFDRixDQUFDO0FBQ0g7QUFLQTtBQUNBO0FBQ0E7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