kepler.gl 3.1.0 → 3.1.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 (234) hide show
  1. package/README.md +27 -132
  2. package/dist/src/common-utils/src/data-type.d.ts +9 -1
  3. package/dist/src/components/src/common/data-table/header-cell.d.ts +1 -0
  4. package/dist/src/components/src/common/data-table/index.d.ts +1 -0
  5. package/dist/src/components/src/common/file-uploader/file-drop.d.ts +1 -32
  6. package/dist/src/components/src/common/item-selector/dropdown-list.d.ts +2 -2
  7. package/dist/src/components/src/common/item-selector/item-selector.d.ts +1 -1
  8. package/dist/src/components/src/common/item-selector/typeahead.d.ts +1 -1
  9. package/dist/src/components/src/geocoder/geocoder.d.ts +7 -0
  10. package/dist/src/components/src/geocoder-panel.d.ts +2 -2
  11. package/dist/src/components/src/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
  12. package/dist/src/constants/src/default-settings.d.ts +14 -1
  13. package/dist/src/deckgl-arrow-layers/src/constants.d.ts +0 -12
  14. package/dist/src/deckgl-arrow-layers/src/index.d.ts +0 -1
  15. package/dist/src/deckgl-arrow-layers/src/utils/utils.d.ts +12 -1
  16. package/dist/src/duckdb/src/components/preview-data-panel.d.ts +7 -2
  17. package/dist/src/duckdb/src/components/schema-panel.d.ts +12 -3
  18. package/dist/src/duckdb/src/processors/data-processor.d.ts +1 -0
  19. package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +106 -0
  20. package/dist/src/duckdb/src/table/duckdb-table.d.ts +5 -3
  21. package/dist/src/processors/src/data-processor.d.ts +15 -1
  22. package/dist/src/reducers/src/provider-state-updaters.d.ts +1 -0
  23. package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -1
  24. package/dist/src/table/src/dataset-utils.d.ts +1 -1
  25. package/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
  26. package/dist/src/utils/src/application-config.d.ts +4 -3
  27. package/dist/src/utils/src/data-utils.d.ts +9 -3
  28. package/dist/src/utils/src/indexed-data-container.d.ts +2 -2
  29. package/dist/src/utils/src/map-style-utils/mapbox-utils.d.ts +1 -1
  30. package/dist/src/utils/src/map-utils.d.ts +1 -1
  31. package/dist/src/utils/src/plot.d.ts +2 -2
  32. package/package.json +5 -5
  33. package/src/actions/package.json +8 -8
  34. package/src/ai-assistant/dist/components/ai-assistant-component.js +2 -1
  35. package/src/ai-assistant/package.json +7 -7
  36. package/src/ai-assistant/src/components/ai-assistant-component.tsx +1 -0
  37. package/src/cloud-providers/package.json +2 -2
  38. package/src/common-utils/dist/data-type.d.ts +9 -1
  39. package/src/common-utils/dist/data-type.js +50 -1
  40. package/src/common-utils/package.json +3 -3
  41. package/src/common-utils/src/data-type.ts +49 -1
  42. package/src/components/dist/common/data-table/header-cell.d.ts +1 -0
  43. package/src/components/dist/common/data-table/header-cell.js +2 -2
  44. package/src/components/dist/common/data-table/index.d.ts +1 -0
  45. package/src/components/dist/common/data-table/index.js +5 -1
  46. package/src/components/dist/common/file-uploader/file-drop.d.ts +1 -32
  47. package/src/components/dist/common/file-uploader/file-drop.js +152 -167
  48. package/src/components/dist/common/item-selector/dropdown-list.d.ts +2 -2
  49. package/src/components/dist/common/item-selector/dropdown-list.js +2 -3
  50. package/src/components/dist/common/item-selector/item-selector.d.ts +1 -1
  51. package/src/components/dist/common/item-selector/typeahead.d.ts +1 -1
  52. package/src/components/dist/common/range-brush.js +3 -3
  53. package/src/components/dist/geocoder/geocoder.d.ts +7 -0
  54. package/src/components/dist/geocoder/geocoder.js +19 -11
  55. package/src/components/dist/geocoder-panel.d.ts +2 -2
  56. package/src/components/dist/geocoder-panel.js +64 -91
  57. package/src/components/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
  58. package/src/components/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
  59. package/src/components/dist/hooks/use-legend-position.js +8 -4
  60. package/src/components/dist/map/map-legend-panel.js +2 -3
  61. package/src/components/dist/modal-container.js +8 -8
  62. package/src/components/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
  63. package/src/components/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
  64. package/src/components/dist/side-panel/layer-panel/color-range-selector.js +10 -11
  65. package/src/components/dist/side-panel/layer-panel/color-selector.js +3 -3
  66. package/src/components/dist/side-panel/layer-panel/custom-palette.js +1 -2
  67. package/src/components/dist/side-panel/layer-panel/layer-configurator.js +6 -8
  68. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
  69. package/src/components/package.json +16 -16
  70. package/src/components/src/common/data-table/header-cell.tsx +2 -1
  71. package/src/components/src/common/data-table/index.tsx +4 -0
  72. package/src/components/src/common/file-uploader/file-drop.tsx +186 -161
  73. package/src/components/src/common/item-selector/dropdown-list.tsx +1 -6
  74. package/src/components/src/common/range-brush.tsx +2 -2
  75. package/src/components/src/geocoder/geocoder.tsx +16 -8
  76. package/src/components/src/geocoder-panel.tsx +95 -85
  77. package/src/components/src/hooks/use-fetch-vector-tile-metadata.ts +27 -25
  78. package/src/components/src/hooks/use-legend-position.ts +5 -2
  79. package/src/components/src/map/map-legend-panel.tsx +1 -2
  80. package/src/components/src/modal-container.tsx +7 -7
  81. package/src/components/src/modals/tilesets-modals/tileset-vector-form.tsx +12 -3
  82. package/src/components/src/side-panel/layer-panel/color-palette-preset.tsx +1 -1
  83. package/src/components/src/side-panel/layer-panel/color-range-selector.tsx +6 -11
  84. package/src/components/src/side-panel/layer-panel/color-selector.tsx +2 -2
  85. package/src/components/src/side-panel/layer-panel/custom-palette.tsx +0 -1
  86. package/src/components/src/side-panel/layer-panel/layer-configurator.tsx +23 -33
  87. package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +0 -1
  88. package/src/constants/dist/default-settings.d.ts +14 -1
  89. package/src/constants/dist/default-settings.js +20 -5
  90. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/4f/6c65f3a1eba584ffd2d892cabc25ab5804d4a9ef53694c98707372a83e56343a274bec04f15927a6fe7602615f0f23f73ccf599f524ef97ad6c77c8832ea +1 -0
  91. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/a6/b2/5424aa4477192fb44cc90fd80892efdc96731f2ff0f48e8f28abf64243cc +2 -0
  92. package/src/constants/package.json +2 -2
  93. package/src/constants/src/default-settings.ts +16 -1
  94. package/src/constants/umd/keplergl.min.js +2 -2
  95. package/src/deckgl-arrow-layers/dist/constants.d.ts +0 -12
  96. package/src/deckgl-arrow-layers/dist/constants.js +4 -15
  97. package/src/deckgl-arrow-layers/dist/index.d.ts +0 -1
  98. package/src/deckgl-arrow-layers/dist/index.js +1 -8
  99. package/src/deckgl-arrow-layers/dist/layers/geo-arrow-scatterplot-layer.js +4 -4
  100. package/src/deckgl-arrow-layers/dist/layers/geo-arrow-text-layer.js +5 -5
  101. package/src/deckgl-arrow-layers/dist/utils/utils.d.ts +12 -1
  102. package/src/deckgl-arrow-layers/dist/utils/utils.js +7 -5
  103. package/src/deckgl-arrow-layers/package.json +2 -1
  104. package/src/deckgl-arrow-layers/src/constants.ts +0 -13
  105. package/src/deckgl-arrow-layers/src/index.ts +0 -2
  106. package/src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts +5 -3
  107. package/src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts +8 -4
  108. package/src/deckgl-arrow-layers/src/utils/utils.ts +7 -5
  109. package/src/deckgl-layers/dist/deckgl-extensions/filter-arrow-layer.d.ts +1 -1
  110. package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.d.ts +1 -1
  111. package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.js +3 -3
  112. package/src/deckgl-layers/package.json +5 -5
  113. package/src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts +4 -3
  114. package/src/duckdb/dist/components/monaco-editor.js +4 -5
  115. package/src/duckdb/dist/components/preview-data-panel.d.ts +7 -2
  116. package/src/duckdb/dist/components/preview-data-panel.js +7 -8
  117. package/src/duckdb/dist/components/schema-panel.d.ts +12 -3
  118. package/src/duckdb/dist/components/schema-panel.js +41 -24
  119. package/src/duckdb/dist/components/sql-panel.js +245 -56
  120. package/src/duckdb/dist/init.js +20 -14
  121. package/src/duckdb/dist/processors/data-processor.d.ts +1 -0
  122. package/src/duckdb/dist/processors/data-processor.js +4 -4
  123. package/src/duckdb/dist/table/duckdb-table-utils.d.ts +106 -0
  124. package/src/duckdb/dist/table/duckdb-table-utils.js +493 -2
  125. package/src/duckdb/dist/table/duckdb-table.d.ts +5 -3
  126. package/src/duckdb/dist/table/duckdb-table.js +153 -261
  127. package/src/duckdb/package.json +6 -6
  128. package/src/duckdb/src/components/monaco-editor.tsx +3 -3
  129. package/src/duckdb/src/components/preview-data-panel.tsx +15 -8
  130. package/src/duckdb/src/components/schema-panel.tsx +92 -21
  131. package/src/duckdb/src/components/sql-panel.tsx +160 -22
  132. package/src/duckdb/src/init.ts +4 -1
  133. package/src/duckdb/src/processors/data-processor.ts +2 -2
  134. package/src/duckdb/src/table/duckdb-table-utils.ts +407 -1
  135. package/src/duckdb/src/table/duckdb-table.ts +61 -92
  136. package/src/effects/package.json +5 -5
  137. package/src/layers/dist/arc-layer/arc-layer.d.ts +1 -1
  138. package/src/layers/dist/arc-layer/arc-layer.js +2 -3
  139. package/src/layers/dist/base-layer.d.ts +7 -6
  140. package/src/layers/dist/base-layer.js +36 -19
  141. package/src/layers/dist/geojson-layer/geojson-layer.js +4 -2
  142. package/src/layers/dist/geojson-layer/geojson-utils.js +10 -3
  143. package/src/layers/dist/heatmap-layer/heatmap-layer.d.ts +2 -0
  144. package/src/layers/dist/heatmap-layer/heatmap-layer.js +16 -9
  145. package/src/layers/dist/icon-layer/icon-layer.d.ts +6 -3
  146. package/src/layers/dist/icon-layer/icon-layer.js +19 -11
  147. package/src/layers/dist/index.d.ts +1 -1
  148. package/src/layers/dist/index.js +1 -1
  149. package/src/layers/dist/layer-text-label.d.ts +9 -0
  150. package/src/layers/dist/layer-text-label.js +51 -6
  151. package/src/layers/dist/layer-utils.d.ts +39 -30
  152. package/src/layers/dist/layer-utils.js +69 -9
  153. package/src/layers/dist/line-layer/line-layer.d.ts +1 -1
  154. package/src/layers/dist/line-layer/line-layer.js +2 -3
  155. package/src/layers/dist/point-layer/point-layer.d.ts +10 -7
  156. package/src/layers/dist/point-layer/point-layer.js +16 -8
  157. package/src/layers/dist/trip-layer/trip-layer.d.ts +2 -2
  158. package/src/layers/dist/trip-layer/trip-layer.js +4 -2
  159. package/src/layers/dist/vector-tile/abstract-tile-layer.d.ts +3 -7
  160. package/src/layers/dist/vector-tile/abstract-tile-layer.js +7 -6
  161. package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +5 -7
  162. package/src/layers/dist/vector-tile/vector-tile-layer.js +23 -2
  163. package/src/layers/package.json +11 -10
  164. package/src/layers/src/arc-layer/arc-layer.ts +1 -1
  165. package/src/layers/src/base-layer.ts +50 -9
  166. package/src/layers/src/geojson-layer/geojson-layer.ts +3 -1
  167. package/src/layers/src/geojson-layer/geojson-utils.ts +4 -1
  168. package/src/layers/src/heatmap-layer/heatmap-layer.ts +17 -12
  169. package/src/layers/src/icon-layer/icon-layer.ts +7 -3
  170. package/src/layers/src/index.ts +1 -2
  171. package/src/layers/src/layer-text-label.ts +53 -4
  172. package/src/layers/src/layer-utils.ts +88 -9
  173. package/src/layers/src/line-layer/line-layer.ts +1 -1
  174. package/src/layers/src/point-layer/point-layer.ts +15 -11
  175. package/src/layers/src/trip-layer/trip-layer.ts +4 -2
  176. package/src/layers/src/vector-tile/abstract-tile-layer.ts +11 -5
  177. package/src/layers/src/vector-tile/vector-tile-layer.ts +33 -4
  178. package/src/localization/package.json +1 -1
  179. package/src/processors/dist/data-processor.d.ts +15 -1
  180. package/src/processors/dist/data-processor.js +104 -11
  181. package/src/processors/package.json +8 -7
  182. package/src/processors/src/data-processor.ts +116 -13
  183. package/src/reducers/dist/export-utils.js +2 -2
  184. package/src/reducers/dist/layer-utils.js +1 -1
  185. package/src/reducers/dist/provider-state-updaters.d.ts +1 -0
  186. package/src/reducers/dist/provider-state-updaters.js +5 -2
  187. package/src/reducers/dist/vis-state-updaters.d.ts +1 -1
  188. package/src/reducers/dist/vis-state-updaters.js +23 -12
  189. package/src/reducers/package.json +16 -16
  190. package/src/reducers/src/export-utils.ts +1 -1
  191. package/src/reducers/src/layer-utils.ts +2 -1
  192. package/src/reducers/src/provider-state-updaters.ts +4 -1
  193. package/src/reducers/src/vis-state-updaters.ts +45 -10
  194. package/src/schemas/dist/dataset-schema.js +35 -6
  195. package/src/schemas/package.json +7 -7
  196. package/src/schemas/src/dataset-schema.ts +36 -8
  197. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/a9/7f26bbc52905b0e21e9366a30ef0ba98f4ccf9aa8dd8326d90ba90191ba2e305323f505bf134c825356156c793bf9386ed2cef2aeb48eb327c26d106f69a +1 -0
  198. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/7e/51/b8756555a0e2e696d944445ac23f7febf769006013fbc8419f39a701649d +2 -0
  199. package/src/styles/package.json +2 -2
  200. package/src/styles/umd/keplergl.min.js +2 -2
  201. package/src/table/dist/dataset-utils.js +23 -14
  202. package/src/table/dist/src/table/src/dataset-utils.d.ts +1 -1
  203. package/src/table/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
  204. package/src/table/dist/tileset/vector-tile-utils.js +122 -2
  205. package/src/table/package.json +5 -5
  206. package/src/table/src/dataset-utils.ts +16 -6
  207. package/src/table/src/tileset/vector-tile-utils.ts +131 -8
  208. package/src/tasks/package.json +2 -2
  209. package/src/types/actions.d.ts +1 -0
  210. package/src/types/layers.d.ts +1 -0
  211. package/src/types/package.json +1 -1
  212. package/src/types/types.d.ts +17 -0
  213. package/src/utils/dist/application-config.d.ts +4 -3
  214. package/src/utils/dist/application-config.js +3 -2
  215. package/src/utils/dist/data-scale-utils.js +4 -4
  216. package/src/utils/dist/data-utils.d.ts +9 -3
  217. package/src/utils/dist/data-utils.js +40 -7
  218. package/src/utils/dist/dataset-utils.js +23 -8
  219. package/src/utils/dist/indexed-data-container.d.ts +2 -2
  220. package/src/utils/dist/indexed-data-container.js +1 -1
  221. package/src/utils/dist/map-style-utils/mapbox-utils.d.ts +1 -1
  222. package/src/utils/dist/map-style-utils/mapbox-utils.js +3 -3
  223. package/src/utils/dist/plot.d.ts +2 -2
  224. package/src/utils/dist/plot.js +6 -6
  225. package/src/utils/map-utils.spec.js +1 -2
  226. package/src/utils/package.json +5 -4
  227. package/src/utils/src/application-config.ts +11 -8
  228. package/src/utils/src/data-scale-utils.ts +3 -3
  229. package/src/utils/src/data-utils.ts +36 -7
  230. package/src/utils/src/dataset-utils.ts +41 -9
  231. package/src/utils/src/indexed-data-container.ts +1 -1
  232. package/src/utils/src/map-style-utils/mapbox-utils.ts +2 -2
  233. package/src/utils/src/plot.ts +5 -5
  234. package/umd/keplergl.min.js +1279 -1295
@@ -54,8 +54,8 @@ function isStyleUsingOpenStreetMapTiles(mapStyle) {
54
54
  * @param mapboxKey mapbox api key
55
55
  * @returns transformed url
56
56
  */
57
- var transformRequest = exports.transformRequest = function transformRequest(mapboxKey) {
58
- return function (url, resourceType) {
57
+ var transformRequest = exports.transformRequest = function transformRequest(_mapboxKey) {
58
+ return function (url, _resourceType) {
59
59
  /*
60
60
  if (isMapboxURL(url)) {
61
61
  // ! TODO - use MapBox directly?
@@ -78,4 +78,4 @@ var getBaseMapLibrary = exports.getBaseMapLibrary = function getBaseMapLibrary(b
78
78
  }
79
79
  return _constants.MAP_LIB_OPTIONS.MAPLIBRE;
80
80
  };
81
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwibWFwU3R5bGUiLCJfbWFwU3R5bGUkc3R5bGVzaGVldCIsInNvdXJjZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJzb3VyY2VJZCIsIl9yZWYiLCJ1cmwiLCJ0aWxlcyIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsInRpbGVVcmwiLCJpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMiLCJfbWFwU3R5bGUkc3R5bGVzaGVldDIiLCJfcmVmMiIsImF0dHJpYnV0aW9uIiwiaW5jbHVkZXMiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiZXhwb3J0cyIsIm1hcGJveEtleSIsInJlc291cmNlVHlwZSIsImdldEJhc2VNYXBMaWJyYXJ5IiwiYmFzZU1hcFN0eWxlIiwiX2Jhc2VNYXBTdHlsZSR1cmwiLCJfYmFzZU1hcFN0eWxlJHVybDIiLCJfYmFzZU1hcFN0eWxlJHN0eWxlIiwiTUFQX0xJQl9PUFRJT05TIiwiTUFQQk9YIiwic3R5bGUiLCJNQVBMSUJSRSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAtc3R5bGUtdXRpbHMvbWFwYm94LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGltcG9ydCB7aXNNYXBib3hVUkwsIHRyYW5zZm9ybU1hcGJveFVybH0gZnJvbSAnbWFwbGlicmVnbC1tYXBib3gtcmVxdWVzdC10cmFuc2Zvcm1lcic7XG5cbmltcG9ydCB7TUFQX0xJQl9PUFRJT05TLCBCYXNlTWFwTGlicmFyeVR5cGV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBNYXAgU3R5bGUgaXMgdXNpbmcgTWFwYm94IFRpbGVzXG4gKiBAcGFyYW0ge2FueX0gbWFwU3R5bGUgdGhlIG1hcFN0eWxlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzdHlsZSBpcyB1c2luZyBNYXBib3ggdGlsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3R5bGVVc2luZ01hcGJveFRpbGVzKG1hcFN0eWxlKSB7XG4gIGNvbnN0IHNvdXJjZXMgPSBtYXBTdHlsZS5zdHlsZXNoZWV0Py5zb3VyY2VzIHx8IHt9O1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2VzKS5zb21lKHNvdXJjZUlkID0+IHtcbiAgICBjb25zdCB7dXJsLCB0aWxlc30gPSBzb3VyY2VzW3NvdXJjZUlkXSB8fCB7fTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdtYXBib3g6Ly8nKTtcbiAgICB9XG5cbiAgICBpZiAodGlsZXMpIHtcbiAgICAgIHJldHVybiB0aWxlcy5zb21lKHRpbGVVcmwgPT4gdGlsZVVybC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ21hcGJveDovLycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzKG1hcFN0eWxlOiBhbnkpIHtcbiAgY29uc3Qgc291cmNlcyA9IG1hcFN0eWxlPy5zdHlsZXNoZWV0Py5zb3VyY2VzIHx8IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlcykuc29tZShzb3VyY2VJZCA9PiB7XG4gICAgY29uc3Qge2F0dHJpYnV0aW9ufSA9IHNvdXJjZXNbc291cmNlSWRdIHx8IHt9O1xuICAgIGlmICh0eXBlb2YgYXR0cmlidXRpb24/LmF0dHJpYnV0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGF0dHJpYnV0aW9uLmF0dHJpYnV0aW9uLmluY2x1ZGVzKCdvcGVuc3RyZWV0bWFwLm9yZycpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBtYXBib3ggcHJvdG9jb2wgc28gY2FuIGJlIHVzZWQgd2l0aCBtYXBsaWJyZVxuICogQHBhcmFtIG1hcGJveEtleSBtYXBib3ggYXBpIGtleVxuICogQHJldHVybnMgdHJhbnNmb3JtZWQgdXJsXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1SZXF1ZXN0ID0gKFxuICBtYXBib3hLZXk6IHN0cmluZ1xuKTogKCh1cmw6IHN0cmluZywgcmVzb3VyY2VUeXBlOiBzdHJpbmcpID0+IHt1cmw6IHN0cmluZ30pID0+IHtcbiAgcmV0dXJuICh1cmw6IHN0cmluZywgcmVzb3VyY2VUeXBlOiBzdHJpbmcpID0+IHtcbiAgICAvKlxuICAgIGlmIChpc01hcGJveFVSTCh1cmwpKSB7XG4gICAgICAvLyAhIFRPRE8gLSB1c2UgTWFwQm94IGRpcmVjdGx5P1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybU1hcGJveFVybCh1cmwsIHJlc291cmNlVHlwZSwgbWFwYm94S2V5KTtcbiAgICB9XG4gICAgKi9cblxuICAgIHJldHVybiB7dXJsfTtcbiAgfTtcbn07XG5cbnR5cGUgU3R5bGVXaXRoU291cmNlcyA9IHtcbiAgc291cmNlcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmFzZU1hcExpYnJhcnkgPSAoYmFzZU1hcFN0eWxlPzoge1xuICB1cmw/OiBzdHJpbmcgfCBudWxsO1xuICBzdHlsZT86IGFueTtcbn0pOiBCYXNlTWFwTGlicmFyeVR5cGUgPT4ge1xuICBpZiAoYmFzZU1hcFN0eWxlKSB7XG4gICAgaWYgKGJhc2VNYXBTdHlsZS51cmw/LnN0YXJ0c1dpdGgoJ21hcGJveDovLycpIHx8IGJhc2VNYXBTdHlsZS51cmw/LmluY2x1ZGVzKCdtYXBib3guY29tJykpIHtcbiAgICAgIHJldHVybiBNQVBfTElCX09QVElPTlMuTUFQQk9YO1xuICAgIH1cblxuICAgIGlmICgoYmFzZU1hcFN0eWxlLnN0eWxlIGFzIFN0eWxlV2l0aFNvdXJjZXMpPy5zb3VyY2VzPy5bJ21hcGJveCddKVxuICAgICAgcmV0dXJuIE1BUF9MSUJfT1BUSU9OUy5NQVBCT1g7XG4gIH1cblxuICByZXR1cm4gTUFQX0xJQl9PUFRJT05TLk1BUExJQlJFO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBS0EsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBTEE7QUFDQTs7QUFFQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsdUJBQXVCQSxDQUFDQyxRQUFRLEVBQUU7RUFBQSxJQUFBQyxvQkFBQTtFQUNoRCxJQUFNQyxPQUFPLEdBQUcsRUFBQUQsb0JBQUEsR0FBQUQsUUFBUSxDQUFDRyxVQUFVLGNBQUFGLG9CQUFBLHVCQUFuQkEsb0JBQUEsQ0FBcUJDLE9BQU8sS0FBSSxDQUFDLENBQUM7RUFFbEQsT0FBT0UsTUFBTSxDQUFDQyxJQUFJLENBQUNILE9BQU8sQ0FBQyxDQUFDSSxJQUFJLENBQUMsVUFBQUMsUUFBUSxFQUFJO0lBQzNDLElBQUFDLElBQUEsR0FBcUJOLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQXJDRSxHQUFHLEdBQUFELElBQUEsQ0FBSEMsR0FBRztNQUFFQyxLQUFLLEdBQUFGLElBQUEsQ0FBTEUsS0FBSztJQUVqQixJQUFJRCxHQUFHLEVBQUU7TUFDUCxPQUFPQSxHQUFHLENBQUNFLFdBQVcsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFDbEQ7SUFFQSxJQUFJRixLQUFLLEVBQUU7TUFDVCxPQUFPQSxLQUFLLENBQUNKLElBQUksQ0FBQyxVQUFBTyxPQUFPO1FBQUEsT0FBSUEsT0FBTyxDQUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUMsV0FBVyxDQUFDO01BQUEsRUFBQztJQUM3RTtJQUVBLE9BQU8sS0FBSztFQUNkLENBQUMsQ0FBQztBQUNKO0FBRU8sU0FBU0UsOEJBQThCQSxDQUFDZCxRQUFhLEVBQUU7RUFBQSxJQUFBZSxxQkFBQTtFQUM1RCxJQUFNYixPQUFPLEdBQUcsQ0FBQUYsUUFBUSxhQUFSQSxRQUFRLGdCQUFBZSxxQkFBQSxHQUFSZixRQUFRLENBQUVHLFVBQVUsY0FBQVkscUJBQUEsdUJBQXBCQSxxQkFBQSxDQUFzQmIsT0FBTyxLQUFJLENBQUMsQ0FBQztFQUNuRCxPQUFPRSxNQUFNLENBQUNDLElBQUksQ0FBQ0gsT0FBTyxDQUFDLENBQUNJLElBQUksQ0FBQyxVQUFBQyxRQUFRLEVBQUk7SUFDM0MsSUFBQVMsS0FBQSxHQUFzQmQsT0FBTyxDQUFDSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFBdENVLFdBQVcsR0FBQUQsS0FBQSxDQUFYQyxXQUFXO0lBQ2xCLElBQUksUUFBT0EsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVBLFdBQVcsTUFBSyxRQUFRLEVBQUU7TUFDaEQsT0FBT0EsV0FBVyxDQUFDQSxXQUFXLENBQUNDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztJQUM5RDtJQUNBLE9BQU8sS0FBSztFQUNkLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxnQkFBZ0IsR0FBQUMsT0FBQSxDQUFBRCxnQkFBQSxHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCRSxTQUFpQixFQUMwQztFQUMzRCxPQUFPLFVBQUNaLEdBQVcsRUFBRWEsWUFBb0IsRUFBSztJQUM1QztBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRUksT0FBTztNQUFDYixHQUFHLEVBQUhBO0lBQUcsQ0FBQztFQUNkLENBQUM7QUFDSCxDQUFDO0FBTU0sSUFBTWMsaUJBQWlCLEdBQUFILE9BQUEsQ0FBQUcsaUJBQUEsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFJQyxZQUdqQyxFQUF5QjtFQUN4QixJQUFJQSxZQUFZLEVBQUU7SUFBQSxJQUFBQyxpQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxtQkFBQTtJQUNoQixJQUFJLENBQUFGLGlCQUFBLEdBQUFELFlBQVksQ0FBQ2YsR0FBRyxjQUFBZ0IsaUJBQUEsZUFBaEJBLGlCQUFBLENBQWtCYixVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUFjLGtCQUFBLEdBQUlGLFlBQVksQ0FBQ2YsR0FBRyxjQUFBaUIsa0JBQUEsZUFBaEJBLGtCQUFBLENBQWtCUixRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7TUFDekYsT0FBT1UsMEJBQWUsQ0FBQ0MsTUFBTTtJQUMvQjtJQUVBLEtBQUFGLG1CQUFBLEdBQUtILFlBQVksQ0FBQ00sS0FBSyxjQUFBSCxtQkFBQSxnQkFBQUEsbUJBQUEsR0FBbkJBLG1CQUFBLENBQTBDekIsT0FBTyxjQUFBeUIsbUJBQUEsZUFBakRBLG1CQUFBLENBQW9ELFFBQVEsQ0FBQyxFQUMvRCxPQUFPQywwQkFBZSxDQUFDQyxNQUFNO0VBQ2pDO0VBRUEsT0FBT0QsMEJBQWUsQ0FBQ0csUUFBUTtBQUNqQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
81
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwibWFwU3R5bGUiLCJfbWFwU3R5bGUkc3R5bGVzaGVldCIsInNvdXJjZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJzb3VyY2VJZCIsIl9yZWYiLCJ1cmwiLCJ0aWxlcyIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsInRpbGVVcmwiLCJpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMiLCJfbWFwU3R5bGUkc3R5bGVzaGVldDIiLCJfcmVmMiIsImF0dHJpYnV0aW9uIiwiaW5jbHVkZXMiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiZXhwb3J0cyIsIl9tYXBib3hLZXkiLCJfcmVzb3VyY2VUeXBlIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJiYXNlTWFwU3R5bGUiLCJfYmFzZU1hcFN0eWxlJHVybCIsIl9iYXNlTWFwU3R5bGUkdXJsMiIsIl9iYXNlTWFwU3R5bGUkc3R5bGUiLCJNQVBfTElCX09QVElPTlMiLCJNQVBCT1giLCJzdHlsZSIsIk1BUExJQlJFIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC1zdHlsZS11dGlscy9tYXBib3gtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gaW1wb3J0IHtpc01hcGJveFVSTCwgdHJhbnNmb3JtTWFwYm94VXJsfSBmcm9tICdtYXBsaWJyZWdsLW1hcGJveC1yZXF1ZXN0LXRyYW5zZm9ybWVyJztcblxuaW1wb3J0IHtNQVBfTElCX09QVElPTlMsIEJhc2VNYXBMaWJyYXJ5VHlwZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIE1hcCBTdHlsZSBpcyB1c2luZyBNYXBib3ggVGlsZXNcbiAqIEBwYXJhbSB7YW55fSBtYXBTdHlsZSB0aGUgbWFwU3R5bGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHN0eWxlIGlzIHVzaW5nIE1hcGJveCB0aWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMobWFwU3R5bGUpIHtcbiAgY29uc3Qgc291cmNlcyA9IG1hcFN0eWxlLnN0eWxlc2hlZXQ/LnNvdXJjZXMgfHwge307XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZXMpLnNvbWUoc291cmNlSWQgPT4ge1xuICAgIGNvbnN0IHt1cmwsIHRpbGVzfSA9IHNvdXJjZXNbc291cmNlSWRdIHx8IHt9O1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ21hcGJveDovLycpO1xuICAgIH1cblxuICAgIGlmICh0aWxlcykge1xuICAgICAgcmV0dXJuIHRpbGVzLnNvbWUodGlsZVVybCA9PiB0aWxlVXJsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnbWFwYm94Oi8vJykpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMobWFwU3R5bGU6IGFueSkge1xuICBjb25zdCBzb3VyY2VzID0gbWFwU3R5bGU/LnN0eWxlc2hlZXQ/LnNvdXJjZXMgfHwge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2VzKS5zb21lKHNvdXJjZUlkID0+IHtcbiAgICBjb25zdCB7YXR0cmlidXRpb259ID0gc291cmNlc1tzb3VyY2VJZF0gfHwge307XG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGlvbj8uYXR0cmlidXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYXR0cmlidXRpb24uYXR0cmlidXRpb24uaW5jbHVkZXMoJ29wZW5zdHJlZXRtYXAub3JnJyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIG1hcGJveCBwcm90b2NvbCBzbyBjYW4gYmUgdXNlZCB3aXRoIG1hcGxpYnJlXG4gKiBAcGFyYW0gbWFwYm94S2V5IG1hcGJveCBhcGkga2V5XG4gKiBAcmV0dXJucyB0cmFuc2Zvcm1lZCB1cmxcbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVJlcXVlc3QgPSAoXG4gIF9tYXBib3hLZXk6IHN0cmluZ1xuKTogKCh1cmw6IHN0cmluZywgcmVzb3VyY2VUeXBlOiBzdHJpbmcpID0+IHt1cmw6IHN0cmluZ30pID0+IHtcbiAgcmV0dXJuICh1cmw6IHN0cmluZywgX3Jlc291cmNlVHlwZTogc3RyaW5nKSA9PiB7XG4gICAgLypcbiAgICBpZiAoaXNNYXBib3hVUkwodXJsKSkge1xuICAgICAgLy8gISBUT0RPIC0gdXNlIE1hcEJveCBkaXJlY3RseT9cbiAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXBib3hVcmwodXJsLCByZXNvdXJjZVR5cGUsIG1hcGJveEtleSk7XG4gICAgfVxuICAgICovXG5cbiAgICByZXR1cm4ge3VybH07XG4gIH07XG59O1xuXG50eXBlIFN0eWxlV2l0aFNvdXJjZXMgPSB7XG4gIHNvdXJjZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJhc2VNYXBMaWJyYXJ5ID0gKGJhc2VNYXBTdHlsZT86IHtcbiAgdXJsPzogc3RyaW5nIHwgbnVsbDtcbiAgc3R5bGU/OiBhbnk7XG59KTogQmFzZU1hcExpYnJhcnlUeXBlID0+IHtcbiAgaWYgKGJhc2VNYXBTdHlsZSkge1xuICAgIGlmIChiYXNlTWFwU3R5bGUudXJsPy5zdGFydHNXaXRoKCdtYXBib3g6Ly8nKSB8fCBiYXNlTWFwU3R5bGUudXJsPy5pbmNsdWRlcygnbWFwYm94LmNvbScpKSB7XG4gICAgICByZXR1cm4gTUFQX0xJQl9PUFRJT05TLk1BUEJPWDtcbiAgICB9XG5cbiAgICBpZiAoKGJhc2VNYXBTdHlsZS5zdHlsZSBhcyBTdHlsZVdpdGhTb3VyY2VzKT8uc291cmNlcz8uWydtYXBib3gnXSlcbiAgICAgIHJldHVybiBNQVBfTElCX09QVElPTlMuTUFQQk9YO1xuICB9XG5cbiAgcmV0dXJuIE1BUF9MSUJfT1BUSU9OUy5NQVBMSUJSRTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUtBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUxBO0FBQ0E7O0FBRUE7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLHVCQUF1QkEsQ0FBQ0MsUUFBUSxFQUFFO0VBQUEsSUFBQUMsb0JBQUE7RUFDaEQsSUFBTUMsT0FBTyxHQUFHLEVBQUFELG9CQUFBLEdBQUFELFFBQVEsQ0FBQ0csVUFBVSxjQUFBRixvQkFBQSx1QkFBbkJBLG9CQUFBLENBQXFCQyxPQUFPLEtBQUksQ0FBQyxDQUFDO0VBRWxELE9BQU9FLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxPQUFPLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLFVBQUFDLFFBQVEsRUFBSTtJQUMzQyxJQUFBQyxJQUFBLEdBQXFCTixPQUFPLENBQUNLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUFyQ0UsR0FBRyxHQUFBRCxJQUFBLENBQUhDLEdBQUc7TUFBRUMsS0FBSyxHQUFBRixJQUFBLENBQUxFLEtBQUs7SUFFakIsSUFBSUQsR0FBRyxFQUFFO01BQ1AsT0FBT0EsR0FBRyxDQUFDRSxXQUFXLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ2xEO0lBRUEsSUFBSUYsS0FBSyxFQUFFO01BQ1QsT0FBT0EsS0FBSyxDQUFDSixJQUFJLENBQUMsVUFBQU8sT0FBTztRQUFBLE9BQUlBLE9BQU8sQ0FBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsVUFBVSxDQUFDLFdBQVcsQ0FBQztNQUFBLEVBQUM7SUFDN0U7SUFFQSxPQUFPLEtBQUs7RUFDZCxDQUFDLENBQUM7QUFDSjtBQUVPLFNBQVNFLDhCQUE4QkEsQ0FBQ2QsUUFBYSxFQUFFO0VBQUEsSUFBQWUscUJBQUE7RUFDNUQsSUFBTWIsT0FBTyxHQUFHLENBQUFGLFFBQVEsYUFBUkEsUUFBUSxnQkFBQWUscUJBQUEsR0FBUmYsUUFBUSxDQUFFRyxVQUFVLGNBQUFZLHFCQUFBLHVCQUFwQkEscUJBQUEsQ0FBc0JiLE9BQU8sS0FBSSxDQUFDLENBQUM7RUFDbkQsT0FBT0UsTUFBTSxDQUFDQyxJQUFJLENBQUNILE9BQU8sQ0FBQyxDQUFDSSxJQUFJLENBQUMsVUFBQUMsUUFBUSxFQUFJO0lBQzNDLElBQUFTLEtBQUEsR0FBc0JkLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQXRDVSxXQUFXLEdBQUFELEtBQUEsQ0FBWEMsV0FBVztJQUNsQixJQUFJLFFBQU9BLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFQSxXQUFXLE1BQUssUUFBUSxFQUFFO01BQ2hELE9BQU9BLFdBQVcsQ0FBQ0EsV0FBVyxDQUFDQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7SUFDOUQ7SUFDQSxPQUFPLEtBQUs7RUFDZCxDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZ0JBQWdCLEdBQUFDLE9BQUEsQ0FBQUQsZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQkUsVUFBa0IsRUFDeUM7RUFDM0QsT0FBTyxVQUFDWixHQUFXLEVBQUVhLGFBQXFCLEVBQUs7SUFDN0M7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUVJLE9BQU87TUFBQ2IsR0FBRyxFQUFIQTtJQUFHLENBQUM7RUFDZCxDQUFDO0FBQ0gsQ0FBQztBQU1NLElBQU1jLGlCQUFpQixHQUFBSCxPQUFBLENBQUFHLGlCQUFBLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUMsWUFHakMsRUFBeUI7RUFDeEIsSUFBSUEsWUFBWSxFQUFFO0lBQUEsSUFBQUMsaUJBQUEsRUFBQUMsa0JBQUEsRUFBQUMsbUJBQUE7SUFDaEIsSUFBSSxDQUFBRixpQkFBQSxHQUFBRCxZQUFZLENBQUNmLEdBQUcsY0FBQWdCLGlCQUFBLGVBQWhCQSxpQkFBQSxDQUFrQmIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFBYyxrQkFBQSxHQUFJRixZQUFZLENBQUNmLEdBQUcsY0FBQWlCLGtCQUFBLGVBQWhCQSxrQkFBQSxDQUFrQlIsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO01BQ3pGLE9BQU9VLDBCQUFlLENBQUNDLE1BQU07SUFDL0I7SUFFQSxLQUFBRixtQkFBQSxHQUFLSCxZQUFZLENBQUNNLEtBQUssY0FBQUgsbUJBQUEsZ0JBQUFBLG1CQUFBLEdBQW5CQSxtQkFBQSxDQUEwQ3pCLE9BQU8sY0FBQXlCLG1CQUFBLGVBQWpEQSxtQkFBQSxDQUFvRCxRQUFRLENBQUMsRUFDL0QsT0FBT0MsMEJBQWUsQ0FBQ0MsTUFBTTtFQUNqQztFQUVBLE9BQU9ELDBCQUFlLENBQUNHLFFBQVE7QUFDakMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -115,9 +115,9 @@ export declare function adjustValueToAnimationWindow<S extends MinVisStateForAni
115
115
  * @param datasets
116
116
  * @param dataId
117
117
  */
118
- export declare function updateTimeFilterPlotType(filter: TimeRangeFilter, plotType: TimeRangeFilter['plotType'], datasets: Datasets, dataId?: string): TimeRangeFilter;
118
+ export declare function updateTimeFilterPlotType(filter: TimeRangeFilter, plotType: TimeRangeFilter['plotType'], datasets: Datasets, _dataId?: string): TimeRangeFilter;
119
119
  export declare function getRangeFilterBins(filter: any, datasets: any, numBins: any): any;
120
- export declare function updateRangeFilterPlotType(filter: RangeFilter, plotType: RangeFilter['plotType'], datasets: Datasets, dataId?: string): RangeFilter;
120
+ export declare function updateRangeFilterPlotType(filter: RangeFilter, plotType: RangeFilter['plotType'], datasets: Datasets, _dataId?: string): RangeFilter;
121
121
  export declare function getChartTitle(yAxis: Field, plotType: PlotType): string;
122
122
  export declare function getDefaultPlotType(filter: any, datasets: any): {
123
123
  interval: string;
@@ -165,7 +165,7 @@ function histogramFromDomain(domain, values, numBins, valueAccessor) {
165
165
  */
166
166
  function getTimeBins(filter, datasets, interval) {
167
167
  var bins = filter.timeBins || {};
168
- filter.dataId.forEach(function (dataId, dataIdIdx) {
168
+ filter.dataId.forEach(function (dataId) {
169
169
  // reuse bins if filterData did not change
170
170
  if (bins[dataId] && bins[dataId][interval]) {
171
171
  return;
@@ -362,7 +362,7 @@ var getAggregationOptiosnBasedOnField = exports.getAggregationOptiosnBasedOnFiel
362
362
  }
363
363
  return _constants.TIME_AGGREGATION;
364
364
  };
365
- function getDelta(bins, y, interval) {
365
+ function getDelta(bins, y, _interval) {
366
366
  // if (WOW[interval]) return getWow(bins, y, interval);
367
367
  var lastBin = bins[bins.length - 1];
368
368
  return {
@@ -401,7 +401,7 @@ function getLineChart(datasets, filter) {
401
401
  var dataset = datasets[seriesDataId];
402
402
  var getYValue = getValueAggrFunc(yAxis, aggregation, dataset);
403
403
  var init = [];
404
- var series = (bins || []).reduce(function (accu, bin, i) {
404
+ var series = (bins || []).reduce(function (accu, bin) {
405
405
  var y = getYValue(bin);
406
406
  var delta = getDelta(accu, y, interval);
407
407
  accu.push(_objectSpread({
@@ -540,7 +540,7 @@ function getFilterPlotColorsByDataId(filter, datasets, oldColorsByDataId) {
540
540
  * @param datasets
541
541
  * @param dataId
542
542
  */
543
- function updateTimeFilterPlotType(filter, plotType, datasets, dataId) {
543
+ function updateTimeFilterPlotType(filter, plotType, datasets, _dataId) {
544
544
  var nextFilter = filter;
545
545
  var nextPlotType = plotType;
546
546
  if ((0, _typeof2["default"])(nextPlotType) !== 'object' || !nextPlotType.aggregation || !nextPlotType.interval) {
@@ -595,7 +595,7 @@ function getRangeFilterBins(filter, datasets, numBins) {
595
595
  return acc;
596
596
  }, {});
597
597
  }
598
- function updateRangeFilterPlotType(filter, plotType, datasets, dataId) {
598
+ function updateRangeFilterPlotType(filter, plotType, datasets, _dataId) {
599
599
  var nextFilter = _objectSpread(_objectSpread({}, filter), {}, {
600
600
  plotType: plotType
601
601
  });
@@ -634,4 +634,4 @@ function getDefaultPlotType(filter, datasets) {
634
634
  aggregation: _constants.AGGREGATION_TYPES.sum
635
635
  };
636
636
  }
637
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl90aW1lIiwiX21vbWVudCIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfZGF0YVV0aWxzIiwiX2FnZ3JlZ2F0aW9uIiwiX3N0cmluZ3MiLCJfZm9ybWF0IiwiX2NvbG9yVXRpbHMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJoaXN0b2dyYW1Gcm9tVGhyZXNob2xkIiwidGhyZXNob2xkcyIsInZhbHVlcyIsInZhbHVlQWNjZXNzb3IiLCJmaWx0ZXJFbXB0eUJpbnMiLCJ1bmRlZmluZWQiLCJnZXRCaW5zIiwiZDNIaXN0b2dyYW0iLCJkb21haW4iLCJiaW5zIiwibWFwIiwiYmluIiwiY291bnQiLCJpbmRleGVzIiwieDAiLCJ4MSIsImIiLCJoaXN0b2dyYW1Gcm9tVmFsdWVzIiwibnVtQmlucyIsImlzTnVtYmVyIiwiaGlzdG9ncmFtRnJvbU9yZGluYWwiLCJoaXN0b2dyYW1Gcm9tRG9tYWluIiwidGlja3MiLCJnZXRUaW1lQmlucyIsImRhdGFzZXRzIiwiaW50ZXJ2YWwiLCJ0aW1lQmlucyIsImRhdGFJZCIsImRhdGFJZElkeCIsImRhdGFzZXQiLCJydW5HcHVGaWx0ZXJGb3JQbG90IiwiYmluQnlUaW1lIiwibWFwcGVkVmFsdWUiLCJnZXRGaWx0ZXJNYXBwZWRWYWx1ZSIsImludGVydmFsQmlucyIsImdldEJpblRocmVzaG9sZHMiLCJpZHgiLCJ0aW1lSW50ZXJ2YWwiLCJpbnRlcnZhbFRvRnVuY3Rpb24iLCJfZG9tYWluIiwiX3NsaWNlZFRvQXJyYXkyIiwidDAiLCJ0MSIsImZsb29yIiwiZ2V0VGltZSIsImNlaWxpbmciLCJjZWlsIiwiZHVyYXRpb25EYXkiLCJiaW5UaHJlc2hvbGRzIiwicmFuZ2UiLCJtb21lbnQiLCJ1dGMiLCJ2YWx1ZU9mIiwibGFzdFN0ZXAiLCJvZmZzZXQiLCJza2lwSW5kZXhlcyIsImdldFNraXBJbmRleGVzIiwiX2RhdGFzZXQkZ3B1RmlsdGVyIiwiZ3B1RmlsdGVyIiwiZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycyIsImZpbHRlclJhbmdlIiwiZmlsdGVyVmFsdWVBY2Nlc3NvciIsImZpbHRlcmVkSW5kZXgiLCJnZXRGaWx0ZXJWYWx1ZSIsImRhdGFDb250YWluZXIiLCJhbGxDaGFubmVscyIsIl8iLCJpIiwic2tpcEFsbCIsImluY2x1ZGVzIiwiZmlsdGVyRGF0YSIsImdldEZpbHRlckRhdGFGdW5jIiwiZ3B1RmlsdGVycyIsInZhbHVlSW5kZXgiLCJmaW5kSW5kZXgiLCJpZCIsImZpbHRlckNvbHVtbiIsInJlZHVjZSIsImFjY3UiLCJpdGVtIiwic2tpcHMiLCJpbmRleCIsImV2ZXJ5IiwidmFsIiwidmFsaWRCaW4iLCJzbmFwVG9NYXJrcyIsIm1hcmtzIiwiYmlzZWN0TGVmdCIsIm5vcm1hbGl6ZVZhbHVlIiwibWluVmFsdWUiLCJzdGVwIiwicm91bmRWYWxUb1N0ZXAiLCJpc1BlcmNlbnRGaWVsZCIsImZpZWxkIiwibWV0YWRhdGEiLCJudW1lcmF0b3IiLCJkZW5vbWluYXRvciIsInVwZGF0ZUFnZ3JlZ2F0aW9uQnlGaWVsZCIsImFnZ3JlZ2F0aW9uIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJhdmVyYWdlIiwiZ2V0QWdyZWdhdGlvblR5cGUiLCJnZXRBZ2dyZWdhdGlvbkFjY2Vzc29yIiwiZmllbGRzIiwibnVtZXJhdG9ySWR4IiwiZGVub21pbmF0b3JJZHgiLCJnZXROdW1lcmF0b3IiLCJ2YWx1ZUF0IiwiZ2V0RGVub21pbmF0b3IiLCJnZXRWYWx1ZUFnZ3JGdW5jIiwiZXhwb3J0cyIsImRhdGFzZXRGaWVsZCIsImZpbmQiLCJhZ2dyZWdhdGUiLCJnZXRBZ2dyZWdhdGlvbk9wdGlvc25CYXNlZE9uRmllbGQiLCJUSU1FX0FHR1JFR0FUSU9OIiwiX3JlZiIsInN1bSIsImdldERlbHRhIiwieSIsImxhc3RCaW4iLCJkZWx0YSIsInBjdCIsImdldFBjdENoYW5nZSIsInkwIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJnZXRMaW5lQ2hhcnQiLCJfdGltZUJpbnMiLCJ5QXhpcyIsInBsb3RUeXBlIiwibGluZUNoYXJ0Iiwic2VyaWVzRGF0YUlkIiwiaXNFcXVhbCIsImdldFlWYWx1ZSIsImluaXQiLCJzZXJpZXMiLCJ4IiwieURvbWFpbiIsImV4dGVudCIsImQiLCJ4RG9tYWluIiwic3BsaXQiLCJzcGxpdFNlcmllcyIsImFnZ3JOYW1lIiwiQUdHUkVHQVRJT05fTkFNRSIsInRpdGxlIiwiY29uY2F0IiwiZmllbGRUeXBlIiwidHlwZSIsImFsbFRpbWUiLCJsaW5lcyIsInRlbXAiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJtYXJrZXJzIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInN0YXRlIiwiX2ZpbHRlciR2YWx1ZSIsInZhbHVlMCIsInZhbHVlMSIsImFuaW1hdGlvbldpbmRvdyIsImdldEluaXRpYWxJbnRlcnZhbCIsImRhdGFzZXRCaW5zIiwidmFsMCIsInZhbDEiLCJBTklNQVRJT05fV0lORE9XIiwiaW5kZXhPZiIsIk5hTiIsInVwZGF0ZWRGaWx0ZXIiLCJnZXRGaWx0ZXJQbG90Q29sb3JzQnlEYXRhSWQiLCJvbGRDb2xvcnNCeURhdGFJZCIsImNvbG9yc0J5RGF0YUlkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJyZ2JUb0hleCIsImNvbG9yIiwiZXJyIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwibmV4dEZpbHRlciIsIm5leHRQbG90VHlwZSIsIl90eXBlb2YyIiwiZ2V0RGVmYXVsdFBsb3RUeXBlIiwiUExPVF9UWVBFUyIsImhpc3RvZ3JhbSIsImdldFJhbmdlRmlsdGVyQmlucyIsImFjYyIsImRhdGFzZXRJZHgiLCJfZmlsdGVyJGJpbnMiLCJmaWVsZE5hbWUiLCJnZXRDb2x1bW5GaWVsZCIsInVwZGF0ZVJhbmdlRmlsdGVyUGxvdFR5cGUiLCJCSU5TIiwiZ2V0Q2hhcnRUaXRsZSIsInlBeGlzTmFtZSIsImRpc3BsYXlOYW1lIiwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJnZXREZWZhdWx0VGltZUZvcm1hdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wbG90LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmlzZWN0TGVmdCwgZXh0ZW50LCBoaXN0b2dyYW0gYXMgZDNIaXN0b2dyYW0sIHRpY2tzfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5pbXBvcnQge2dldEZpbHRlck1hcHBlZFZhbHVlLCBnZXRJbml0aWFsSW50ZXJ2YWwsIGludGVydmFsVG9GdW5jdGlvbn0gZnJvbSAnLi90aW1lJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIEJpbixcbiAgVGltZUJpbnMsXG4gIE1pbGxpc2Vjb25kLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIFJhbmdlRmlsdGVyLFxuICBQbG90VHlwZSxcbiAgRmlsdGVyLFxuICBMaW5lQ2hhcnQsXG4gIEZpZWxkLFxuICBWYWx1ZU9mLFxuICBMaW5lRGF0dW1cbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQklOUyxcbiAgZHVyYXRpb25EYXksXG4gIFRJTUVfQUdHUkVHQVRJT04sXG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBQTE9UX1RZUEVTLFxuICBBZ2dyZWdhdGlvblR5cGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtpc051bWJlciwgcm91bmRWYWxUb1N0ZXB9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge2FnZ3JlZ2F0ZSwgQUdHUkVHQVRJT05fTkFNRX0gZnJvbSAnLi9hZ2dyZWdhdGlvbic7XG5pbXBvcnQge2NhcGl0YWxpemVGaXJzdExldHRlcn0gZnJvbSAnLi9zdHJpbmdzJztcbmltcG9ydCB7Z2V0RGVmYXVsdFRpbWVGb3JtYXR9IGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCB7cmdiVG9IZXh9IGZyb20gJy4vY29sb3ItdXRpbHMnO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICcuJztcbmltcG9ydCB7S2VwbGVyVGFibGVNb2RlbH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIFRPRE8ga2VwbGVyLXRhYmxlIG1vZHVsZSBpc24ndCBhY2Nlc3NpYmxlIGZyb20gdXRpbHMuIEFkZCBjb21wYXRpYmxlIGludGVyZmFjZSB0byB0eXBlc1xudHlwZSBEYXRhc2V0cyA9IGFueTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHRocmVzaG9sZHNcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBpbmRleGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b2dyYW1Gcm9tVGhyZXNob2xkKFxuICB0aHJlc2hvbGRzOiBudW1iZXJbXSxcbiAgdmFsdWVzOiBudW1iZXJbXSxcbiAgdmFsdWVBY2Nlc3Nvcj86IChkOiB1bmtub3duKSA9PiBudW1iZXIsXG4gIGZpbHRlckVtcHR5QmlucyA9IHRydWVcbik6IEJpbltdIHtcbiAgY29uc3QgZ2V0QmlucyA9IGQzSGlzdG9ncmFtKClcbiAgICAuZG9tYWluKFt0aHJlc2hvbGRzWzBdLCB0aHJlc2hvbGRzW3RocmVzaG9sZHMubGVuZ3RoIC0gMV1dKVxuICAgIC50aHJlc2hvbGRzKHRocmVzaG9sZHMpO1xuXG4gIGlmICh2YWx1ZUFjY2Vzc29yKSB7XG4gICAgZ2V0Qmlucy52YWx1ZSh2YWx1ZUFjY2Vzc29yKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgYmlucyA9IGdldEJpbnModmFsdWVzKS5tYXAoYmluID0+ICh7XG4gICAgY291bnQ6IGJpbi5sZW5ndGgsXG4gICAgaW5kZXhlczogYmluLFxuICAgIHgwOiBiaW4ueDAsXG4gICAgeDE6IGJpbi54MVxuICB9KSk7XG5cbiAgLy8gZDMtaGlzdG9ncmFtIGlnbm9yZXMgdGhyZXNob2xkIHZhbHVlcyBvdXRzaWRlIHRoZSBkb21haW5cbiAgLy8gVGhlIGZpcnN0IGJpbi54MCBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gZG9tYWluIHZhbHVlLCBhbmQgdGhlIGxhc3QgYmluLngxIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWF4aW11bSBkb21haW4gdmFsdWUuXG5cbiAgLy8gYmluc1swXS54MCA9IHRocmVzaG9sZHNbMF07XG4gIC8vIGJpbnNbYmlucy5sZW5ndGggLSAxXS54MSA9IHRocmVzaG9sZHNbdGhyZXNob2xkcy5sZW5ndGggLSAxXTtcblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBmaWx0ZXJFbXB0eUJpbnMgPyBiaW5zLmZpbHRlcihiID0+IGIuY291bnQgPiAwKSA6IGJpbnM7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBudW1CaW5zXG4gKiBAcGFyYW0gdmFsdWVBY2Nlc3NvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9ncmFtRnJvbVZhbHVlcyhcbiAgdmFsdWVzOiAoTWlsbGlzZWNvbmQgfCBudWxsIHwgbnVtYmVyKVtdLFxuICBudW1CaW5zOiBudW1iZXIsXG4gIHZhbHVlQWNjZXNzb3I/OiAoZDogbnVtYmVyKSA9PiBudW1iZXJcbikge1xuICBjb25zdCBnZXRCaW5zID0gZDNIaXN0b2dyYW0oKS50aHJlc2hvbGRzKG51bUJpbnMpO1xuXG4gIGlmICh2YWx1ZUFjY2Vzc29yKSB7XG4gICAgZ2V0Qmlucy52YWx1ZSh2YWx1ZUFjY2Vzc29yKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmUgZDMtYXJyYXkgdHlwZXMgZG9lc24ndCBtYXRjaFxuICByZXR1cm4gZ2V0Qmlucyh2YWx1ZXMpXG4gICAgLm1hcChiaW4gPT4gKHtcbiAgICAgIGNvdW50OiBiaW4ubGVuZ3RoLFxuICAgICAgaW5kZXhlczogYmluLFxuICAgICAgeDA6IGJpbi54MCxcbiAgICAgIHgxOiBiaW4ueDFcbiAgICB9KSlcbiAgICAuZmlsdGVyKGIgPT4ge1xuICAgICAgY29uc3Qge3gwLCB4MX0gPSBiO1xuICAgICAgcmV0dXJuIGlzTnVtYmVyKHgwKSAmJiBpc051bWJlcih4MSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b2dyYW1Gcm9tT3JkaW5hbChcbiAgZG9tYWluOiBbc3RyaW5nXSxcbiAgdmFsdWVzOiAoTWlsbGlzZWNvbmQgfCBudWxsIHwgbnVtYmVyKVtdLFxuICB2YWx1ZUFjY2Vzc29yPzogKGQ6IHVua25vd24pID0+IHN0cmluZ1xuKTogQmluW10ge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHRvIHR5cGVkIHRvIGV4cGVjdCBzdHJpbmdzXG4gIGNvbnN0IGdldEJpbnMgPSBkM0hpc3RvZ3JhbSgpLnRocmVzaG9sZHMoZG9tYWluKTtcbiAgaWYgKHZhbHVlQWNjZXNzb3IpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRvIHR5cGVkIHRvIGV4cGVjdCBzdHJpbmdzXG4gICAgZ2V0Qmlucy52YWx1ZSh2YWx1ZUFjY2Vzc29yKTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgbnVsbCB2YWx1ZXMgYXJlbid0IGV4cGVjdGVkXG4gIGNvbnN0IGJpbnMgPSBnZXRCaW5zKHZhbHVlcyk7XG5cbiAgLy8gQHRzLWlnbm9yZSBkMy1hcnJheSB0eXBlcyBkb2Vzbid0IG1hdGNoXG4gIHJldHVybiBiaW5zLm1hcChiaW4gPT4gKHtcbiAgICBjb3VudDogYmluLmxlbmd0aCxcbiAgICBpbmRleGVzOiBiaW4sXG4gICAgeDA6IGJpbi54MCxcbiAgICB4MTogYmluLngwXG4gIH0pKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGRvbWFpblxuICogQHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIG51bUJpbnNcbiAqIEBwYXJhbSB2YWx1ZUFjY2Vzc29yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b2dyYW1Gcm9tRG9tYWluKFxuICBkb21haW46IFtudW1iZXIsIG51bWJlcl0sXG4gIHZhbHVlczogKE1pbGxpc2Vjb25kIHwgbnVsbCB8IG51bWJlcilbXSxcbiAgbnVtQmluczogbnVtYmVyLFxuICB2YWx1ZUFjY2Vzc29yPzogKGQ6IHVua25vd24pID0+IG51bWJlclxuKTogQmluW10ge1xuICBjb25zdCBnZXRCaW5zID0gZDNIaXN0b2dyYW0oKS50aHJlc2hvbGRzKHRpY2tzKGRvbWFpblswXSwgZG9tYWluWzFdLCBudW1CaW5zKSkuZG9tYWluKGRvbWFpbik7XG4gIGlmICh2YWx1ZUFjY2Vzc29yKSB7XG4gICAgZ2V0Qmlucy52YWx1ZSh2YWx1ZUFjY2Vzc29yKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmUgZDMtYXJyYXkgdHlwZXMgZG9lc24ndCBtYXRjaFxuICByZXR1cm4gZ2V0Qmlucyh2YWx1ZXMpLm1hcChiaW4gPT4gKHtcbiAgICBjb3VudDogYmluLmxlbmd0aCxcbiAgICBpbmRleGVzOiBiaW4sXG4gICAgeDA6IGJpbi54MCxcbiAgICB4MTogYmluLngxXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gZGF0YXNldHNcbiAqIEBwYXJhbSBpbnRlcnZhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZUJpbnMoXG4gIGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGludGVydmFsOiBQbG90VHlwZVsnaW50ZXJ2YWwnXVxuKTogVGltZUJpbnMge1xuICBsZXQgYmlucyA9IGZpbHRlci50aW1lQmlucyB8fCB7fTtcblxuICBmaWx0ZXIuZGF0YUlkLmZvckVhY2goKGRhdGFJZCwgZGF0YUlkSWR4KSA9PiB7XG4gICAgLy8gcmV1c2UgYmlucyBpZiBmaWx0ZXJEYXRhIGRpZCBub3QgY2hhbmdlXG4gICAgaWYgKGJpbnNbZGF0YUlkXSAmJiBiaW5zW2RhdGFJZF1baW50ZXJ2YWxdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gICAgLy8gZG8gbm90IGFwcGx5IGN1cnJlbnQgZmlsdGVyXG4gICAgY29uc3QgaW5kZXhlcyA9IHJ1bkdwdUZpbHRlckZvclBsb3QoZGF0YXNldCwgZmlsdGVyKTtcblxuICAgIGJpbnMgPSB7XG4gICAgICAuLi5iaW5zLFxuICAgICAgW2RhdGFJZF06IHtcbiAgICAgICAgLi4uYmluc1tkYXRhSWRdLFxuICAgICAgICBbaW50ZXJ2YWxdOiBiaW5CeVRpbWUoaW5kZXhlcywgZGF0YXNldCwgaW50ZXJ2YWwsIGZpbHRlcilcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gYmlucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbkJ5VGltZShpbmRleGVzLCBkYXRhc2V0LCBpbnRlcnZhbCwgZmlsdGVyKSB7XG4gIC8vIGdwdUZpbHRlcnMgbmVlZCB0byBiZSBhcHBseSB0byBmaWx0ZXJlZEluZGV4XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0RmlsdGVyTWFwcGVkVmFsdWUoZGF0YXNldCwgZmlsdGVyKTtcbiAgaWYgKCFtYXBwZWRWYWx1ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGludGVydmFsQmlucyA9IGdldEJpblRocmVzaG9sZHMoaW50ZXJ2YWwsIGZpbHRlci5kb21haW4pO1xuICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gaWR4ID0+IG1hcHBlZFZhbHVlW2lkeF07XG4gIGNvbnN0IGJpbnMgPSBoaXN0b2dyYW1Gcm9tVGhyZXNob2xkKGludGVydmFsQmlucywgaW5kZXhlcywgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgcmV0dXJuIGJpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCaW5UaHJlc2hvbGRzKGludGVydmFsOiBzdHJpbmcsIGRvbWFpbjogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHRpbWVJbnRlcnZhbCA9IGludGVydmFsVG9GdW5jdGlvbihpbnRlcnZhbCk7XG4gIGNvbnN0IFt0MCwgdDFdID0gZG9tYWluO1xuICBjb25zdCBmbG9vciA9IHRpbWVJbnRlcnZhbC5mbG9vcih0MCkuZ2V0VGltZSgpO1xuICBjb25zdCBjZWlsaW5nID0gdGltZUludGVydmFsLmNlaWwodDEpLmdldFRpbWUoKTtcblxuICBpZiAoIXRpbWVJbnRlcnZhbCkge1xuICAgIC8vIGlmIHRpbWUgaW50ZXJ2YWwgaXMgbm90IGRlZmluZWRcbiAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuXG4gICAgcmV0dXJuIFt0MCwgdDAgKyBkdXJhdGlvbkRheV07XG4gIH1cbiAgY29uc3QgYmluVGhyZXNob2xkcyA9IHRpbWVJbnRlcnZhbC5yYW5nZShmbG9vciwgY2VpbGluZyArIDEpLm1hcCh0ID0+IG1vbWVudC51dGModCkudmFsdWVPZigpKTtcbiAgY29uc3QgbGFzdFN0ZXAgPSBiaW5UaHJlc2hvbGRzW2JpblRocmVzaG9sZHMubGVuZ3RoIC0gMV07XG4gIGlmIChsYXN0U3RlcCA9PT0gdDEpIHtcbiAgICAvLyB3aGVuIGxhc3Qgc3RlcCBlcXVhbCB0byBkb21haW4gbWF4LCBhZGQgb25lIG1vcmUgc3RlcFxuICAgIGJpblRocmVzaG9sZHMucHVzaChtb21lbnQudXRjKHRpbWVJbnRlcnZhbC5vZmZzZXQobGFzdFN0ZXApKS52YWx1ZU9mKCkpO1xuICB9XG5cbiAgcmV0dXJuIGJpblRocmVzaG9sZHM7XG59XG5cbi8qKlxuICogUnVuIEdQVSBmaWx0ZXIgb24gY3VycmVudCBmaWx0ZXIgcmVzdWx0IHRvIGdlbmVyYXRlIGluZGV4ZXMgZm9yIHBsb3RpbmcgY2hhcnRcbiAqIFNraXAgcnV1bmluZyBmb3IgdGhlIHNhbWUgZmllbGRcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5HcHVGaWx0ZXJGb3JQbG90PEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyPzogRmlsdGVyXG4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHNraXBJbmRleGVzID0gZ2V0U2tpcEluZGV4ZXMoZGF0YXNldCwgZmlsdGVyKTtcblxuICBjb25zdCB7XG4gICAgZ3B1RmlsdGVyOiB7ZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycywgZmlsdGVyUmFuZ2UsIGZpbHRlclZhbHVlQWNjZXNzb3J9LFxuICAgIGZpbHRlcmVkSW5kZXhcbiAgfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IGdldEZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhc2V0LmRhdGFDb250YWluZXIpKCk7XG5cbiAgY29uc3QgYWxsQ2hhbm5lbHMgPSBPYmplY3Qua2V5cyhmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzKVxuICAgIC5tYXAoKF8sIGkpID0+IGkpXG4gICAgLmZpbHRlcihpID0+IE9iamVjdC52YWx1ZXMoZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycylbaV0pO1xuICBjb25zdCBza2lwQWxsID0gIWFsbENoYW5uZWxzLmZpbHRlcihpID0+ICFza2lwSW5kZXhlcy5pbmNsdWRlcyhpKSkubGVuZ3RoO1xuICBpZiAoc2tpcEFsbCkge1xuICAgIHJldHVybiBmaWx0ZXJlZEluZGV4O1xuICB9XG5cbiAgY29uc3QgZmlsdGVyRGF0YSA9IGdldEZpbHRlckRhdGFGdW5jKFxuICAgIGZpbHRlclJhbmdlLFxuICAgIGdldEZpbHRlclZhbHVlLFxuICAgIGRhdGFzZXQuZGF0YUNvbnRhaW5lcixcbiAgICBza2lwSW5kZXhlc1xuICApO1xuXG4gIHJldHVybiBmaWx0ZXJlZEluZGV4LmZpbHRlcihmaWx0ZXJEYXRhKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2tpcEluZGV4ZXMoZGF0YXNldCwgZmlsdGVyKSB7XG4gIC8vIGFycmF5IG9mIGdwdSBmaWx0ZXIgbmFtZXNcbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgZ3B1RmlsdGVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldC5ncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycykgYXMgKHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH0gfCBudWxsKVtdO1xuICBjb25zdCB2YWx1ZUluZGV4ID0gZmlsdGVyLmRhdGFJZC5maW5kSW5kZXgoaWQgPT4gaWQgPT09IGRhdGFzZXQuaWQpO1xuICBjb25zdCBmaWx0ZXJDb2x1bW4gPSBmaWx0ZXIubmFtZVt2YWx1ZUluZGV4XTtcblxuICByZXR1cm4gZ3B1RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGl0ZW0sIGlkeCkgPT4ge1xuICAgIGlmIChpdGVtICYmIGZpbHRlckNvbHVtbiA9PT0gaXRlbS5uYW1lKSB7XG4gICAgICBhY2N1LnB1c2goaWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIFtdIGFzIG51bWJlcltdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckRhdGFGdW5jKFxuICBmaWx0ZXJSYW5nZSxcbiAgZ2V0RmlsdGVyVmFsdWUsXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHNraXBzXG4pIHtcbiAgcmV0dXJuIGluZGV4ID0+XG4gICAgZ2V0RmlsdGVyVmFsdWUoe2luZGV4fSkuZXZlcnkoXG4gICAgICAodmFsLCBpKSA9PiBza2lwcy5pbmNsdWRlcyhpKSB8fCAodmFsID49IGZpbHRlclJhbmdlW2ldWzBdICYmIHZhbCA8PSBmaWx0ZXJSYW5nZVtpXVsxXSlcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRCaW4oYikge1xuICByZXR1cm4gYi54MCAhPT0gdW5kZWZpbmVkICYmIGIueDEgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBVc2UgaW4gc2xpZGVyLCBnaXZlbiBhIG51bWJlciBhbmQgYW4gYXJyYXkgb2YgbnVtYmVycywgcmV0dXJuIHRoZSBuZWFycyBudW1iZXIgZnJvbSB0aGUgYXJyYXkuXG4gKiBUYWtlcyBhIHZhbHVlLCB0aW1lc3RlcHMgYW5kIHJldHVybiB0aGUgYWN0dWFsIHN0ZXAuXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBtYXJrc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcFRvTWFya3ModmFsdWU6IG51bWJlciwgbWFya3M6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgLy8gYWx3YXlzIHVzZSBiaW4geDBcbiAgaWYgKCFtYXJrcy5sZW5ndGgpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvb2tpbmcgYXQgdGhlIHVzYWdlIG51bGwgcmV0dXJuIHZhbHVlIGlzbid0IGV4cGVjdGVkIGFuZCByZXF1aXJlcyBleHRyYSBoYW5kbGluZyBpbiBhIGxvdCBvZiBwbGFjZXNcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBpID0gYmlzZWN0TGVmdChtYXJrcywgdmFsdWUpO1xuICBpZiAoaSA9PT0gMCkge1xuICAgIHJldHVybiBtYXJrc1tpXTtcbiAgfSBlbHNlIGlmIChpID09PSBtYXJrcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbWFya3NbaSAtIDFdO1xuICB9XG4gIGNvbnN0IGlkeCA9IG1hcmtzW2ldIC0gdmFsdWUgPCB2YWx1ZSAtIG1hcmtzW2kgLSAxXSA/IGkgOiBpIC0gMTtcbiAgcmV0dXJuIG1hcmtzW2lkeF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWwsIG1pblZhbHVlLCBzdGVwLCBtYXJrcykge1xuICBpZiAobWFya3MgJiYgbWFya3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNuYXBUb01hcmtzKHZhbCwgbWFya3MpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlLCBzdGVwLCB2YWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQZXJjZW50RmllbGQoZmllbGQpIHtcbiAgcmV0dXJuIGZpZWxkLm1ldGFkYXRhICYmIGZpZWxkLm1ldGFkYXRhLm51bWVyYXRvciAmJiBmaWVsZC5tZXRhZGF0YS5kZW5vbWluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFnZ3JlZ2F0aW9uQnlGaWVsZChmaWVsZDogRmllbGQsIGFnZ3JlZ2F0aW9uOiBWYWx1ZU9mPEFnZ3JlZ2F0aW9uVHlwZXM+KSB7XG4gIC8vIHNob3VsZG4ndCBhcHBseSBzdW0gdG8gcGVyY2VudCBmaWVsZSB0eXBlXG4gIC8vIGRlZmF1bHQgYWdncmVnYXRpb24gaXMgYXZlcmFnZVxuICByZXR1cm4gZmllbGQgJiYgaXNQZXJjZW50RmllbGQoZmllbGQpXG4gICAgPyBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlXG4gICAgOiBhZ2dyZWdhdGlvbiB8fCBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlO1xufVxuXG5jb25zdCBnZXRBZ3JlZ2F0aW9uVHlwZSA9IChmaWVsZCwgYWdncmVnYXRpb24pID0+IHtcbiAgaWYgKGlzUGVyY2VudEZpZWxkKGZpZWxkKSkge1xuICAgIHJldHVybiAnbWVhbl9vZl9wZXJjZW50JztcbiAgfVxuICByZXR1cm4gYWdncmVnYXRpb247XG59O1xuXG5jb25zdCBnZXRBZ2dyZWdhdGlvbkFjY2Vzc29yID0gKGZpZWxkLCBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBmaWVsZHMpID0+IHtcbiAgaWYgKGlzUGVyY2VudEZpZWxkKGZpZWxkKSkge1xuICAgIGNvbnN0IG51bWVyYXRvcklkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGZpZWxkLm1ldGFkYXRhLm51bWVyYXRvcik7XG4gICAgY29uc3QgZGVub21pbmF0b3JJZHggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBmaWVsZC5tZXRhZGF0YS5kZW5vbWluYXRvcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0TnVtZXJhdG9yOiBpID0+IGRhdGFDb250YWluZXIudmFsdWVBdChpLCBudW1lcmF0b3JJZHgpLFxuICAgICAgZ2V0RGVub21pbmF0b3I6IGkgPT4gZGF0YUNvbnRhaW5lci52YWx1ZUF0KGksIGRlbm9taW5hdG9ySWR4KVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gaSA9PiBmaWVsZC52YWx1ZUFjY2Vzc29yKHtpbmRleDogaX0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlQWdnckZ1bmMgPSAoXG4gIGZpZWxkOiBGaWVsZCB8IHN0cmluZyB8IG51bGwsXG4gIGFnZ3JlZ2F0aW9uOiBzdHJpbmcsXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlTW9kZWw8YW55LCBhbnk+XG4pOiAoKGJpbjogQmluKSA9PiBudW1iZXIpID0+IHtcbiAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpZWxkc30gPSBkYXRhc2V0O1xuXG4gIC8vIFRoZSBwYXNzZWQtaW4gZmllbGQgbWlnaHQgbm90IGhhdmUgYWxsIHRoZSBmaWVsZHMgc2V0IChlLmcuIHZhbHVlQWNjZXNzb3IpXG4gIGNvbnN0IGRhdGFzZXRGaWVsZCA9IGZpZWxkcy5maW5kKFxuICAgIGYgPT4gZmllbGQgJiYgKGYubmFtZSA9PT0gZmllbGQgfHwgZi5uYW1lID09PSAoZmllbGQgYXMgRmllbGQpLm5hbWUpXG4gICk7XG5cbiAgcmV0dXJuIGRhdGFzZXRGaWVsZCAmJiBhZ2dyZWdhdGlvblxuICAgID8gYmluID0+XG4gICAgICAgIGFnZ3JlZ2F0ZShcbiAgICAgICAgICBiaW4uaW5kZXhlcyxcbiAgICAgICAgICBnZXRBZ3JlZ2F0aW9uVHlwZShkYXRhc2V0RmllbGQsIGFnZ3JlZ2F0aW9uKSxcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbiByZXR1cm4ge2dldE51bWVyYXRvciwgZ2V0RGVub21pbmF0b3J9XG4gICAgICAgICAgZ2V0QWdncmVnYXRpb25BY2Nlc3NvcihkYXRhc2V0RmllbGQsIGRhdGFDb250YWluZXIsIGZpZWxkcylcbiAgICAgICAgKVxuICAgIDogYmluID0+IGJpbi5jb3VudDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGlvbk9wdGlvc25CYXNlZE9uRmllbGQgPSBmaWVsZCA9PiB7XG4gIGlmIChpc1BlcmNlbnRGaWVsZChmaWVsZCkpIHtcbiAgICAvLyBkb24ndCBzaG93IHN1bVxuICAgIHJldHVybiBUSU1FX0FHR1JFR0FUSU9OLmZpbHRlcigoe2lkfSkgPT4gaWQgIT09IEFHR1JFR0FUSU9OX1RZUEVTLnN1bSk7XG4gIH1cbiAgcmV0dXJuIFRJTUVfQUdHUkVHQVRJT047XG59O1xuXG5mdW5jdGlvbiBnZXREZWx0YShcbiAgYmluczogTGluZURhdHVtW10sXG4gIHk6IG51bWJlcixcbiAgaW50ZXJ2YWw6IFBsb3RUeXBlWydpbnRlcnZhbCddXG4pOiBQYXJ0aWFsPExpbmVEYXR1bT4gJiB7ZGVsdGE6ICdsYXN0JzsgcGN0OiBudW1iZXIgfCBudWxsfSB7XG4gIC8vIGlmIChXT1dbaW50ZXJ2YWxdKSByZXR1cm4gZ2V0V293KGJpbnMsIHksIGludGVydmFsKTtcbiAgY29uc3QgbGFzdEJpbiA9IGJpbnNbYmlucy5sZW5ndGggLSAxXTtcblxuICByZXR1cm4ge1xuICAgIGRlbHRhOiAnbGFzdCcsXG4gICAgcGN0OiBsYXN0QmluID8gZ2V0UGN0Q2hhbmdlKHksIGxhc3RCaW4ueSkgOiBudWxsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQY3RDaGFuZ2UoeTogdW5rbm93biwgeTA6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKE51bWJlci5pc0Zpbml0ZSh5KSAmJiBOdW1iZXIuaXNGaW5pdGUoeTApICYmIHkwICE9PSAwKSB7XG4gICAgcmV0dXJuICgoeSBhcyBudW1iZXIpIC0gKHkwIGFzIG51bWJlcikpIC8gKHkwIGFzIG51bWJlcik7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhc2V0c1xuICogQHBhcmFtIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGluZUNoYXJ0KGRhdGFzZXRzOiBEYXRhc2V0cywgZmlsdGVyOiBGaWx0ZXIpOiBMaW5lQ2hhcnQge1xuICBjb25zdCB7ZGF0YUlkLCB5QXhpcywgcGxvdFR5cGUsIGxpbmVDaGFydH0gPSBmaWx0ZXI7XG4gIGNvbnN0IHthZ2dyZWdhdGlvbiwgaW50ZXJ2YWx9ID0gcGxvdFR5cGU7XG4gIGNvbnN0IHNlcmllc0RhdGFJZCA9IGRhdGFJZFswXTtcbiAgY29uc3QgYmlucyA9IChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS50aW1lQmlucz8uW3Nlcmllc0RhdGFJZF0/LltpbnRlcnZhbF07XG5cbiAgaWYgKFxuICAgIGxpbmVDaGFydCAmJlxuICAgIGxpbmVDaGFydC5hZ2dyZWdhdGlvbiA9PT0gYWdncmVnYXRpb24gJiZcbiAgICBsaW5lQ2hhcnQuaW50ZXJ2YWwgPT09IGludGVydmFsICYmXG4gICAgbGluZUNoYXJ0LnlBeGlzID09PSB5QXhpcz8ubmFtZSAmJlxuICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIHZhbGlkYXRlIGJpbnMgYmVjYXVzZSBvZiBjcm9zcyBmaWx0ZXIgZGF0YSBjaGFuZ2VzXG4gICAgaXNFcXVhbChiaW5zLCBsaW5lQ2hhcnQ/LmJpbnMpXG4gICkge1xuICAgIC8vIGRvbid0IHVwZGF0ZSBsaW5lQ2hhcnQgaWYgcGxvdFR5cGUgaGFzbid0IGNoYW5nZVxuICAgIHJldHVybiBsaW5lQ2hhcnQ7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbc2VyaWVzRGF0YUlkXTtcbiAgY29uc3QgZ2V0WVZhbHVlID0gZ2V0VmFsdWVBZ2dyRnVuYyh5QXhpcywgYWdncmVnYXRpb24sIGRhdGFzZXQpO1xuXG4gIGNvbnN0IGluaXQ6IExpbmVEYXR1bVtdID0gW107XG4gIGNvbnN0IHNlcmllcyA9IChiaW5zIHx8IFtdKS5yZWR1Y2UoKGFjY3UsIGJpbiwgaSkgPT4ge1xuICAgIGNvbnN0IHkgPSBnZXRZVmFsdWUoYmluKTtcbiAgICBjb25zdCBkZWx0YSA9IGdldERlbHRhKGFjY3UsIHksIGludGVydmFsKTtcbiAgICBhY2N1LnB1c2goe1xuICAgICAgeDogYmluLngwLFxuICAgICAgeSxcbiAgICAgIC4uLmRlbHRhXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIGluaXQpO1xuXG4gIGNvbnN0IHlEb21haW4gPSBleHRlbnQ8e3k6IGFueX0+KHNlcmllcywgZCA9PiBkLnkpO1xuICBjb25zdCB4RG9tYWluID0gYmlucyA/IFtiaW5zWzBdLngwLCBiaW5zW2JpbnMubGVuZ3RoIC0gMV0ueDFdIDogW107XG5cbiAgLy8gdHJlYXQgbWlzc2luZyBkYXRhIGFzIGFub3RoZXIgc2VyaWVzXG4gIGNvbnN0IHNwbGl0ID0gc3BsaXRTZXJpZXMoc2VyaWVzKTtcbiAgY29uc3QgYWdnck5hbWUgPSBBR0dSRUdBVElPTl9OQU1FW2FnZ3JlZ2F0aW9uXTtcblxuICByZXR1cm4ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB5RG9tYWluLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB4RG9tYWluLFxuICAgIGludGVydmFsLFxuICAgIGFnZ3JlZ2F0aW9uLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzZXJpZXM6IHNwbGl0LFxuICAgIHRpdGxlOiBgJHthZ2dyTmFtZX0keycgb2YgJ30ke3lBeGlzID8geUF4aXMubmFtZSA6ICdDb3VudCd9YCxcbiAgICBmaWVsZFR5cGU6IHlBeGlzID8geUF4aXMudHlwZSA6ICdpbnRlZ2VyJyxcbiAgICB5QXhpczogeUF4aXMgPyB5QXhpcy5uYW1lIDogbnVsbCxcbiAgICBhbGxUaW1lOiB7XG4gICAgICB0aXRsZTogYEFsbCBUaW1lIEF2ZXJhZ2VgLFxuICAgICAgdmFsdWU6IGFnZ3JlZ2F0ZShzZXJpZXMsIEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsIGQgPT4gZC55KVxuICAgIH0sXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBiaW5zIGlzIEJpbnNbXSwgbm90IGEgQmlucyBtYXAuIFJlZmFjdG9yIHRvIHVzZSBjb3JyZWN0IHR5cGVzLlxuICAgIGJpbnNcbiAgfTtcbn1cblxuLy8gc3BsaXQgaW50byBtdWx0aXBsZSBzZXJpZXMgd2hlbiBzZWUgbWlzc2luZyBkYXRhXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRTZXJpZXMoc2VyaWVzKSB7XG4gIGNvbnN0IGxpbmVzOiBhbnlbXSA9IFtdO1xuICBsZXQgdGVtcDogYW55W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkID0gc2VyaWVzW2ldO1xuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGQueSkgJiYgdGVtcC5sZW5ndGgpIHtcbiAgICAgIC8vIGVuZHMgdGVtcFxuICAgICAgbGluZXMucHVzaCh0ZW1wKTtcbiAgICAgIHRlbXAgPSBbXTtcbiAgICB9IGVsc2UgaWYgKG5vdE51bGxvclVuZGVmaW5lZChkLnkpKSB7XG4gICAgICB0ZW1wLnB1c2goZCk7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IHNlcmllcy5sZW5ndGggLSAxICYmIHRlbXAubGVuZ3RoKSB7XG4gICAgICBsaW5lcy5wdXNoKHRlbXApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hcmtlcnMgPSBsaW5lcy5sZW5ndGggPiAxID8gc2VyaWVzLmZpbHRlcihkID0+IG5vdE51bGxvclVuZGVmaW5lZChkLnkpKSA6IFtdO1xuXG4gIHJldHVybiB7bGluZXMsIG1hcmtlcnN9O1xufVxuXG50eXBlIE1pblZpc1N0YXRlRm9yQW5pbWF0aW9uV2luZG93ID0ge1xuICBkYXRhc2V0czogRGF0YXNldHM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdzxTIGV4dGVuZHMgTWluVmlzU3RhdGVGb3JBbmltYXRpb25XaW5kb3c+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXJcbikge1xuICBjb25zdCB7XG4gICAgcGxvdFR5cGUsXG4gICAgdmFsdWU6IFt2YWx1ZTAsIHZhbHVlMV0sXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH0gPSBmaWx0ZXI7XG5cbiAgY29uc3QgaW50ZXJ2YWwgPSBwbG90VHlwZS5pbnRlcnZhbCB8fCBnZXRJbml0aWFsSW50ZXJ2YWwoZmlsdGVyLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IGJpbnMgPSBnZXRUaW1lQmlucyhmaWx0ZXIsIHN0YXRlLmRhdGFzZXRzLCBpbnRlcnZhbCk7XG4gIGNvbnN0IGRhdGFzZXRCaW5zID0gYmlucyAmJiBPYmplY3Qua2V5cyhiaW5zKS5sZW5ndGggJiYgT2JqZWN0LnZhbHVlcyhiaW5zKVswXVtpbnRlcnZhbF07XG4gIGNvbnN0IHRocmVzaG9sZHMgPSAoZGF0YXNldEJpbnMgfHwgW10pLm1hcChiID0+IGIueDApO1xuXG4gIGxldCB2YWwwID0gdmFsdWUwO1xuICBsZXQgdmFsMSA9IHZhbHVlMTtcbiAgbGV0IGlkeDtcbiAgaWYgKGFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgIHZhbDAgPSBzbmFwVG9NYXJrcyh2YWx1ZTEsIHRocmVzaG9sZHMpO1xuICAgIGlkeCA9IHRocmVzaG9sZHMuaW5kZXhPZih2YWwwKTtcbiAgICB2YWwxID0gaWR4ID4gLTEgPyBkYXRhc2V0Qmluc1tpZHhdLngxIDogTmFOO1xuICB9IGVsc2Uge1xuICAgIC8vIGZpdCBjdXJyZW50IHZhbHVlIHRvIHdpbmRvd1xuICAgIHZhbDAgPSBzbmFwVG9NYXJrcyh2YWx1ZTAsIHRocmVzaG9sZHMpO1xuICAgIHZhbDEgPSBzbmFwVG9NYXJrcyh2YWx1ZTEsIHRocmVzaG9sZHMpO1xuXG4gICAgaWYgKHZhbDAgPT09IHZhbDEpIHtcbiAgICAgIGlkeCA9IHRocmVzaG9sZHMuaW5kZXhPZih2YWwwKTtcbiAgICAgIGlmIChpZHggPT09IHRocmVzaG9sZHMubGVuZ3RoIC0gMSkge1xuICAgICAgICB2YWwwID0gdGhyZXNob2xkc1tpZHggLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbDEgPSB0aHJlc2hvbGRzW2lkeCArIDFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHBsb3RUeXBlOiB7XG4gICAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgICBpbnRlcnZhbFxuICAgIH0sXG4gICAgdGltZUJpbnM6IGJpbnMsXG4gICAgdmFsdWU6IFt2YWwwLCB2YWwxXVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVkRmlsdGVyO1xufVxuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgY29sb3JzIGZvciBhIGZpbHRlciBwbG90XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gZGF0YXNldHNcbiAqIEBwYXJhbSBvbGRDb2xvcnNCeURhdGFJZFxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJQbG90Q29sb3JzQnlEYXRhSWQoZmlsdGVyLCBkYXRhc2V0cywgb2xkQ29sb3JzQnlEYXRhSWQpIHtcbiAgbGV0IGNvbG9yc0J5RGF0YUlkID0gb2xkQ29sb3JzQnlEYXRhSWQgfHwge307XG4gIGZvciAoY29uc3QgZGF0YUlkIG9mIGZpbHRlci5kYXRhSWQpIHtcbiAgICBpZiAoIWNvbG9yc0J5RGF0YUlkW2RhdGFJZF0gJiYgZGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgY29sb3JzQnlEYXRhSWQgPSB7XG4gICAgICAgIC4uLmNvbG9yc0J5RGF0YUlkLFxuICAgICAgICBbZGF0YUlkXTogcmdiVG9IZXgoZGF0YXNldHNbZGF0YUlkXS5jb2xvcilcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBjb2xvcnNCeURhdGFJZDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGZpbHRlclxuICogQHBhcmFtIHBsb3RUeXBlXG4gKiBAcGFyYW0gZGF0YXNldHNcbiAqIEBwYXJhbSBkYXRhSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShcbiAgZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsXG4gIHBsb3RUeXBlOiBUaW1lUmFuZ2VGaWx0ZXJbJ3Bsb3RUeXBlJ10sXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgZGF0YUlkPzogc3RyaW5nXG4pOiBUaW1lUmFuZ2VGaWx0ZXIge1xuICBsZXQgbmV4dEZpbHRlciA9IGZpbHRlcjtcbiAgbGV0IG5leHRQbG90VHlwZSA9IHBsb3RUeXBlO1xuICBpZiAodHlwZW9mIG5leHRQbG90VHlwZSAhPT0gJ29iamVjdCcgfHwgIW5leHRQbG90VHlwZS5hZ2dyZWdhdGlvbiB8fCAhbmV4dFBsb3RUeXBlLmludGVydmFsKSB7XG4gICAgbmV4dFBsb3RUeXBlID0gZ2V0RGVmYXVsdFBsb3RUeXBlKGZpbHRlciwgZGF0YXNldHMpO1xuICB9XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgIG5leHRQbG90VHlwZSA9IHtcbiAgICAgIC4uLm5leHRQbG90VHlwZSxcbiAgICAgIGNvbG9yc0J5RGF0YUlkOiBnZXRGaWx0ZXJQbG90Q29sb3JzQnlEYXRhSWQoZmlsdGVyLCBkYXRhc2V0cywgbmV4dFBsb3RUeXBlLmNvbG9yc0J5RGF0YUlkKVxuICAgIH07XG4gIH1cbiAgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHBsb3RUeXBlOiBuZXh0UGxvdFR5cGVcbiAgfTtcblxuICBjb25zdCBiaW5zID0gZ2V0VGltZUJpbnMobmV4dEZpbHRlciwgZGF0YXNldHMsIG5leHRQbG90VHlwZS5pbnRlcnZhbCk7XG5cbiAgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHRpbWVCaW5zOiBiaW5zXG4gIH07XG5cbiAgaWYgKHBsb3RUeXBlLnR5cGUgPT09IFBMT1RfVFlQRVMuaGlzdG9ncmFtKSB7XG4gICAgLy8gSGlzdG9ncmFtIGlzIGNhbGN1bGF0ZWQgYW5kIG1lbW9pemVkIGluIHRoZSBjaGFydCBpdHNlbGZcbiAgfSBlbHNlIGlmIChwbG90VHlwZS50eXBlID09PSBQTE9UX1RZUEVTLmxpbmVDaGFydCkge1xuICAgIC8vIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1vdmUgdGhpcyBpbnRvIGl0cyBvd24gY29tcG9uZW50IHNvIHJlYWN0IHdpbGwgZG8gdGhlIHNoYWxsb3cgY29tcGFyaXNvbiBmb3IgdXMuXG4gICAgbmV4dEZpbHRlciA9IHtcbiAgICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgICBsaW5lQ2hhcnQ6IGdldExpbmVDaGFydChkYXRhc2V0cywgbmV4dEZpbHRlcilcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG5leHRGaWx0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5nZUZpbHRlckJpbnMoZmlsdGVyLCBkYXRhc2V0cywgbnVtQmlucykge1xuICBjb25zdCB7ZG9tYWlufSA9IGZpbHRlcjtcbiAgaWYgKCFmaWx0ZXIuZGF0YUlkKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gZmlsdGVyLmRhdGFJZC5yZWR1Y2UoKGFjYywgZGF0YUlkLCBkYXRhc2V0SWR4KSA9PiB7XG4gICAgaWYgKGZpbHRlci5iaW5zPy5bZGF0YUlkXSkge1xuICAgICAgLy8gZG9uJ3QgcmVjYWxjdWxhdGUgYmluc1xuICAgICAgYWNjW2RhdGFJZF0gPSBmaWx0ZXIuYmluc1tkYXRhSWRdO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgY29uc3QgZmllbGROYW1lID0gZmlsdGVyLm5hbWVbZGF0YXNldElkeF07XG4gICAgaWYgKGRhdGFJZCAmJiBmaWVsZE5hbWUpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAgICAgY29uc3QgZmllbGQgPSBkYXRhc2V0Py5nZXRDb2x1bW5GaWVsZChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGRhdGFzZXQgJiYgZmllbGQpIHtcbiAgICAgICAgY29uc3QgaW5kZXhlcyA9IHJ1bkdwdUZpbHRlckZvclBsb3QoZGF0YXNldCwgZmlsdGVyKTtcbiAgICAgICAgY29uc3QgdmFsdWVBY2Nlc3NvciA9IGluZGV4ID0+IGZpZWxkLnZhbHVlQWNjZXNzb3Ioe2luZGV4fSk7XG4gICAgICAgIGFjY1tkYXRhSWRdID0gaGlzdG9ncmFtRnJvbURvbWFpbihkb21haW4sIGluZGV4ZXMsIG51bUJpbnMsIHZhbHVlQWNjZXNzb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVSYW5nZUZpbHRlclBsb3RUeXBlKFxuICBmaWx0ZXI6IFJhbmdlRmlsdGVyLFxuICBwbG90VHlwZTogUmFuZ2VGaWx0ZXJbJ3Bsb3RUeXBlJ10sXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgZGF0YUlkPzogc3RyaW5nXG4pOiBSYW5nZUZpbHRlciB7XG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHBsb3RUeXBlXG4gIH07XG5cbiAgLy8gaWYgKGRhdGFJZCkge1xuICAvLyAgIC8vIGNsZWFyIGJpbnNcbiAgLy8gICBuZXh0RmlsdGVyID0ge1xuICAvLyAgICAgLi4ubmV4dEZpbHRlcixcbiAgLy8gICAgIGJpbnM6IHtcbiAgLy8gICAgICAgLi4ubmV4dEZpbHRlci5iaW5zLFxuICAvLyAgICAgICBbZGF0YUlkXTogbnVsbFxuICAvLyAgICAgfVxuICAvLyAgIH07XG4gIC8vIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmZpbHRlcixcbiAgICBwbG90VHlwZSxcbiAgICBiaW5zOiBnZXRSYW5nZUZpbHRlckJpbnMobmV4dEZpbHRlciwgZGF0YXNldHMsIEJJTlMpXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFydFRpdGxlKHlBeGlzOiBGaWVsZCwgcGxvdFR5cGU6IFBsb3RUeXBlKTogc3RyaW5nIHtcbiAgY29uc3QgeUF4aXNOYW1lID0geUF4aXM/LmRpc3BsYXlOYW1lO1xuICBjb25zdCB7YWdncmVnYXRpb259ID0gcGxvdFR5cGU7XG5cbiAgaWYgKHlBeGlzTmFtZSkge1xuICAgIHJldHVybiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoYCR7YWdncmVnYXRpb259ICR7eUF4aXNOYW1lfSBvdmVyIFRpbWVgKTtcbiAgfVxuXG4gIHJldHVybiBgQ291bnQgb2YgUm93cyBvdmVyIFRpbWVgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFBsb3RUeXBlKGZpbHRlciwgZGF0YXNldHMpIHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBnZXRJbml0aWFsSW50ZXJ2YWwoZmlsdGVyLCBkYXRhc2V0cyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICByZXR1cm4ge1xuICAgIGludGVydmFsLFxuICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgIHR5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtLFxuICAgIGFnZ3JlZ2F0aW9uOiBBR0dSRUdBVElPTl9UWVBFUy5zdW1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FB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UUFDM0R3RyxHQUFHLENBQUM5SixNQUFNLENBQUMsR0FBR04sbUJBQW1CLENBQUNiLE1BQU0sRUFBRUssT0FBTyxFQUFFSyxPQUFPLEVBQUVmLGFBQWEsQ0FBQztNQUM1RTtJQUNGO0lBQ0EsT0FBT3NMLEdBQUc7RUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUjtBQUVPLFNBQVNLLHlCQUF5QkEsQ0FDdkMxTSxNQUFtQixFQUNuQjhJLFFBQWlDLEVBQ2pDMUcsUUFBa0IsRUFDbEJHLE1BQWUsRUFDRjtFQUNiLElBQU11SixVQUFVLEdBQUF6TCxhQUFBLENBQUFBLGFBQUEsS0FDWEwsTUFBTTtJQUNUOEksUUFBUSxFQUFSQTtFQUFRLEVBQ1Q7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUEsT0FBQXpJLGFBQUEsQ0FBQUEsYUFBQSxLQUNLTCxNQUFNO0lBQ1Q4SSxRQUFRLEVBQVJBLFFBQVE7SUFDUnpILElBQUksRUFBRStLLGtCQUFrQixDQUFDTixVQUFVLEVBQUUxSixRQUFRLEVBQUV1SyxlQUFJO0VBQUM7QUFFeEQ7QUFFTyxTQUFTQyxhQUFhQSxDQUFDL0QsS0FBWSxFQUFFQyxRQUFrQixFQUFVO0VBQ3RFLElBQU0rRCxTQUFTLEdBQUdoRSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWlFLFdBQVc7RUFDcEMsSUFBT2hHLFdBQVcsR0FBSWdDLFFBQVEsQ0FBdkJoQyxXQUFXO0VBRWxCLElBQUkrRixTQUFTLEVBQUU7SUFDYixPQUFPLElBQUFFLDhCQUFxQixLQUFBaEQsTUFBQSxDQUFJakQsV0FBVyxPQUFBaUQsTUFBQSxDQUFJOEMsU0FBUyxlQUFZLENBQUM7RUFDdkU7RUFFQTtBQUNGO0FBRU8sU0FBU1osa0JBQWtCQSxDQUFDak0sTUFBTSxFQUFFb0MsUUFBUSxFQUFFO0VBQ25ELElBQU1DLFFBQVEsR0FBRyxJQUFBd0ksd0JBQWtCLEVBQUM3SyxNQUFNLEVBQUVvQyxRQUFRLENBQUM7RUFDckQsSUFBTTRLLGlCQUFpQixHQUFHLElBQUFDLDRCQUFvQixFQUFDNUssUUFBUSxDQUFDO0VBQ3hELE9BQU87SUFDTEEsUUFBUSxFQUFSQSxRQUFRO0lBQ1IySyxpQkFBaUIsRUFBakJBLGlCQUFpQjtJQUNqQi9DLElBQUksRUFBRWlDLHFCQUFVLENBQUNDLFNBQVM7SUFDMUJyRixXQUFXLEVBQUVDLDRCQUFpQixDQUFDa0I7RUFDakMsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
637
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl90aW1lIiwiX21vbWVudCIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfZGF0YVV0aWxzIiwiX2FnZ3JlZ2F0aW9uIiwiX3N0cmluZ3MiLCJfZm9ybWF0IiwiX2NvbG9yVXRpbHMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJoaXN0b2dyYW1Gcm9tVGhyZXNob2xkIiwidGhyZXNob2xkcyIsInZhbHVlcyIsInZhbHVlQWNjZXNzb3IiLCJmaWx0ZXJFbXB0eUJpbnMiLCJ1bmRlZmluZWQiLCJnZXRCaW5zIiwiZDNIaXN0b2dyYW0iLCJkb21haW4iLCJiaW5zIiwibWFwIiwiYmluIiwiY291bnQiLCJpbmRleGVzIiwieDAiLCJ4MSIsImIiLCJoaXN0b2dyYW1Gcm9tVmFsdWVzIiwibnVtQmlucyIsImlzTnVtYmVyIiwiaGlzdG9ncmFtRnJvbU9yZGluYWwiLCJoaXN0b2dyYW1Gcm9tRG9tYWluIiwidGlja3MiLCJnZXRUaW1lQmlucyIsImRhdGFzZXRzIiwiaW50ZXJ2YWwiLCJ0aW1lQmlucyIsImRhdGFJZCIsImRhdGFzZXQiLCJydW5HcHVGaWx0ZXJGb3JQbG90IiwiYmluQnlUaW1lIiwibWFwcGVkVmFsdWUiLCJnZXRGaWx0ZXJNYXBwZWRWYWx1ZSIsImludGVydmFsQmlucyIsImdldEJpblRocmVzaG9sZHMiLCJpZHgiLCJ0aW1lSW50ZXJ2YWwiLCJpbnRlcnZhbFRvRnVuY3Rpb24iLCJfZG9tYWluIiwiX3NsaWNlZFRvQXJyYXkyIiwidDAiLCJ0MSIsImZsb29yIiwiZ2V0VGltZSIsImNlaWxpbmciLCJjZWlsIiwiZHVyYXRpb25EYXkiLCJiaW5UaHJlc2hvbGRzIiwicmFuZ2UiLCJtb21lbnQiLCJ1dGMiLCJ2YWx1ZU9mIiwibGFzdFN0ZXAiLCJvZmZzZXQiLCJza2lwSW5kZXhlcyIsImdldFNraXBJbmRleGVzIiwiX2RhdGFzZXQkZ3B1RmlsdGVyIiwiZ3B1RmlsdGVyIiwiZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycyIsImZpbHRlclJhbmdlIiwiZmlsdGVyVmFsdWVBY2Nlc3NvciIsImZpbHRlcmVkSW5kZXgiLCJnZXRGaWx0ZXJWYWx1ZSIsImRhdGFDb250YWluZXIiLCJhbGxDaGFubmVscyIsIl8iLCJpIiwic2tpcEFsbCIsImluY2x1ZGVzIiwiZmlsdGVyRGF0YSIsImdldEZpbHRlckRhdGFGdW5jIiwiZ3B1RmlsdGVycyIsInZhbHVlSW5kZXgiLCJmaW5kSW5kZXgiLCJpZCIsImZpbHRlckNvbHVtbiIsInJlZHVjZSIsImFjY3UiLCJpdGVtIiwic2tpcHMiLCJpbmRleCIsImV2ZXJ5IiwidmFsIiwidmFsaWRCaW4iLCJzbmFwVG9NYXJrcyIsIm1hcmtzIiwiYmlzZWN0TGVmdCIsIm5vcm1hbGl6ZVZhbHVlIiwibWluVmFsdWUiLCJzdGVwIiwicm91bmRWYWxUb1N0ZXAiLCJpc1BlcmNlbnRGaWVsZCIsImZpZWxkIiwibWV0YWRhdGEiLCJudW1lcmF0b3IiLCJkZW5vbWluYXRvciIsInVwZGF0ZUFnZ3JlZ2F0aW9uQnlGaWVsZCIsImFnZ3JlZ2F0aW9uIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJhdmVyYWdlIiwiZ2V0QWdyZWdhdGlvblR5cGUiLCJnZXRBZ2dyZWdhdGlvbkFjY2Vzc29yIiwiZmllbGRzIiwibnVtZXJhdG9ySWR4IiwiZGVub21pbmF0b3JJZHgiLCJnZXROdW1lcmF0b3IiLCJ2YWx1ZUF0IiwiZ2V0RGVub21pbmF0b3IiLCJnZXRWYWx1ZUFnZ3JGdW5jIiwiZXhwb3J0cyIsImRhdGFzZXRGaWVsZCIsImZpbmQiLCJhZ2dyZWdhdGUiLCJnZXRBZ2dyZWdhdGlvbk9wdGlvc25CYXNlZE9uRmllbGQiLCJUSU1FX0FHR1JFR0FUSU9OIiwiX3JlZiIsInN1bSIsImdldERlbHRhIiwieSIsIl9pbnRlcnZhbCIsImxhc3RCaW4iLCJkZWx0YSIsInBjdCIsImdldFBjdENoYW5nZSIsInkwIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJnZXRMaW5lQ2hhcnQiLCJfdGltZUJpbnMiLCJ5QXhpcyIsInBsb3RUeXBlIiwibGluZUNoYXJ0Iiwic2VyaWVzRGF0YUlkIiwiaXNFcXVhbCIsImdldFlWYWx1ZSIsImluaXQiLCJzZXJpZXMiLCJ4IiwieURvbWFpbiIsImV4dGVudCIsImQiLCJ4RG9tYWluIiwic3BsaXQiLCJzcGxpdFNlcmllcyIsImFnZ3JOYW1lIiwiQUdHUkVHQVRJT05fTkFNRSIsInRpdGxlIiwiY29uY2F0IiwiZmllbGRUeXBlIiwidHlwZSIsImFsbFRpbWUiLCJsaW5lcyIsInRlbXAiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJtYXJrZXJzIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInN0YXRlIiwiX2ZpbHRlciR2YWx1ZSIsInZhbHVlMCIsInZhbHVlMSIsImFuaW1hdGlvbldpbmRvdyIsImdldEluaXRpYWxJbnRlcnZhbCIsImRhdGFzZXRCaW5zIiwidmFsMCIsInZhbDEiLCJBTklNQVRJT05fV0lORE9XIiwiaW5kZXhPZiIsIk5hTiIsInVwZGF0ZWRGaWx0ZXIiLCJnZXRGaWx0ZXJQbG90Q29sb3JzQnlEYXRhSWQiLCJvbGRDb2xvcnNCeURhdGFJZCIsImNvbG9yc0J5RGF0YUlkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJyZ2JUb0hleCIsImNvbG9yIiwiZXJyIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiX2RhdGFJZCIsIm5leHRGaWx0ZXIiLCJuZXh0UGxvdFR5cGUiLCJfdHlwZW9mMiIsImdldERlZmF1bHRQbG90VHlwZSIsIlBMT1RfVFlQRVMiLCJoaXN0b2dyYW0iLCJnZXRSYW5nZUZpbHRlckJpbnMiLCJhY2MiLCJkYXRhc2V0SWR4IiwiX2ZpbHRlciRiaW5zIiwiZmllbGROYW1lIiwiZ2V0Q29sdW1uRmllbGQiLCJ1cGRhdGVSYW5nZUZpbHRlclBsb3RUeXBlIiwiQklOUyIsImdldENoYXJ0VGl0bGUiLCJ5QXhpc05hbWUiLCJkaXNwbGF5TmFtZSIsImNhcGl0YWxpemVGaXJzdExldHRlciIsImRlZmF1bHRUaW1lRm9ybWF0IiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiXSwic291cmNlcyI6WyIuLi9zcmMvcGxvdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jpc2VjdExlZnQsIGV4dGVudCwgaGlzdG9ncmFtIGFzIGQzSGlzdG9ncmFtLCB0aWNrc30gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLmlzZXF1YWwnO1xuaW1wb3J0IHtnZXRGaWx0ZXJNYXBwZWRWYWx1ZSwgZ2V0SW5pdGlhbEludGVydmFsLCBpbnRlcnZhbFRvRnVuY3Rpb259IGZyb20gJy4vdGltZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1xuICBCaW4sXG4gIFRpbWVCaW5zLFxuICBNaWxsaXNlY29uZCxcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBSYW5nZUZpbHRlcixcbiAgUGxvdFR5cGUsXG4gIEZpbHRlcixcbiAgTGluZUNoYXJ0LFxuICBGaWVsZCxcbiAgVmFsdWVPZixcbiAgTGluZURhdHVtXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJJTlMsXG4gIGR1cmF0aW9uRGF5LFxuICBUSU1FX0FHR1JFR0FUSU9OLFxuICBBR0dSRUdBVElPTl9UWVBFUyxcbiAgUExPVF9UWVBFUyxcbiAgQWdncmVnYXRpb25UeXBlc1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7aXNOdW1iZXIsIHJvdW5kVmFsVG9TdGVwfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHthZ2dyZWdhdGUsIEFHR1JFR0FUSU9OX05BTUV9IGZyb20gJy4vYWdncmVnYXRpb24nO1xuaW1wb3J0IHtjYXBpdGFsaXplRmlyc3RMZXR0ZXJ9IGZyb20gJy4vc3RyaW5ncyc7XG5pbXBvcnQge2dldERlZmF1bHRUaW1lRm9ybWF0fSBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQge3JnYlRvSGV4fSBmcm9tICcuL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZX0gZnJvbSAnLic7XG5pbXBvcnQge0tlcGxlclRhYmxlTW9kZWx9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBUT0RPIGtlcGxlci10YWJsZSBtb2R1bGUgaXNuJ3QgYWNjZXNzaWJsZSBmcm9tIHV0aWxzLiBBZGQgY29tcGF0aWJsZSBpbnRlcmZhY2UgdG8gdHlwZXNcbnR5cGUgRGF0YXNldHMgPSBhbnk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB0aHJlc2hvbGRzXG4gKiBAcGFyYW0gdmFsdWVzXG4gKiBAcGFyYW0gaW5kZXhlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9ncmFtRnJvbVRocmVzaG9sZChcbiAgdGhyZXNob2xkczogbnVtYmVyW10sXG4gIHZhbHVlczogbnVtYmVyW10sXG4gIHZhbHVlQWNjZXNzb3I/OiAoZDogdW5rbm93bikgPT4gbnVtYmVyLFxuICBmaWx0ZXJFbXB0eUJpbnMgPSB0cnVlXG4pOiBCaW5bXSB7XG4gIGNvbnN0IGdldEJpbnMgPSBkM0hpc3RvZ3JhbSgpXG4gICAgLmRvbWFpbihbdGhyZXNob2xkc1swXSwgdGhyZXNob2xkc1t0aHJlc2hvbGRzLmxlbmd0aCAtIDFdXSlcbiAgICAudGhyZXNob2xkcyh0aHJlc2hvbGRzKTtcblxuICBpZiAodmFsdWVBY2Nlc3Nvcikge1xuICAgIGdldEJpbnMudmFsdWUodmFsdWVBY2Nlc3Nvcik7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGJpbnMgPSBnZXRCaW5zKHZhbHVlcykubWFwKGJpbiA9PiAoe1xuICAgIGNvdW50OiBiaW4ubGVuZ3RoLFxuICAgIGluZGV4ZXM6IGJpbixcbiAgICB4MDogYmluLngwLFxuICAgIHgxOiBiaW4ueDFcbiAgfSkpO1xuXG4gIC8vIGQzLWhpc3RvZ3JhbSBpZ25vcmVzIHRocmVzaG9sZCB2YWx1ZXMgb3V0c2lkZSB0aGUgZG9tYWluXG4gIC8vIFRoZSBmaXJzdCBiaW4ueDAgaXMgYWx3YXlzIGVxdWFsIHRvIHRoZSBtaW5pbXVtIGRvbWFpbiB2YWx1ZSwgYW5kIHRoZSBsYXN0IGJpbi54MSBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1heGltdW0gZG9tYWluIHZhbHVlLlxuXG4gIC8vIGJpbnNbMF0ueDAgPSB0aHJlc2hvbGRzWzBdO1xuICAvLyBiaW5zW2JpbnMubGVuZ3RoIC0gMV0ueDEgPSB0aHJlc2hvbGRzW3RocmVzaG9sZHMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gZmlsdGVyRW1wdHlCaW5zID8gYmlucy5maWx0ZXIoYiA9PiBiLmNvdW50ID4gMCkgOiBiaW5zO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmFsdWVzXG4gKiBAcGFyYW0gbnVtQmluc1xuICogQHBhcmFtIHZhbHVlQWNjZXNzb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpc3RvZ3JhbUZyb21WYWx1ZXMoXG4gIHZhbHVlczogKE1pbGxpc2Vjb25kIHwgbnVsbCB8IG51bWJlcilbXSxcbiAgbnVtQmluczogbnVtYmVyLFxuICB2YWx1ZUFjY2Vzc29yPzogKGQ6IG51bWJlcikgPT4gbnVtYmVyXG4pIHtcbiAgY29uc3QgZ2V0QmlucyA9IGQzSGlzdG9ncmFtKCkudGhyZXNob2xkcyhudW1CaW5zKTtcblxuICBpZiAodmFsdWVBY2Nlc3Nvcikge1xuICAgIGdldEJpbnMudmFsdWUodmFsdWVBY2Nlc3Nvcik7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlIGQzLWFycmF5IHR5cGVzIGRvZXNuJ3QgbWF0Y2hcbiAgcmV0dXJuIGdldEJpbnModmFsdWVzKVxuICAgIC5tYXAoYmluID0+ICh7XG4gICAgICBjb3VudDogYmluLmxlbmd0aCxcbiAgICAgIGluZGV4ZXM6IGJpbixcbiAgICAgIHgwOiBiaW4ueDAsXG4gICAgICB4MTogYmluLngxXG4gICAgfSkpXG4gICAgLmZpbHRlcihiID0+IHtcbiAgICAgIGNvbnN0IHt4MCwgeDF9ID0gYjtcbiAgICAgIHJldHVybiBpc051bWJlcih4MCkgJiYgaXNOdW1iZXIoeDEpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9ncmFtRnJvbU9yZGluYWwoXG4gIGRvbWFpbjogW3N0cmluZ10sXG4gIHZhbHVlczogKE1pbGxpc2Vjb25kIHwgbnVsbCB8IG51bWJlcilbXSxcbiAgdmFsdWVBY2Nlc3Nvcj86IChkOiB1bmtub3duKSA9PiBzdHJpbmdcbik6IEJpbltdIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0byB0eXBlZCB0byBleHBlY3Qgc3RyaW5nc1xuICBjb25zdCBnZXRCaW5zID0gZDNIaXN0b2dyYW0oKS50aHJlc2hvbGRzKGRvbWFpbik7XG4gIGlmICh2YWx1ZUFjY2Vzc29yKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0byB0eXBlZCB0byBleHBlY3Qgc3RyaW5nc1xuICAgIGdldEJpbnMudmFsdWUodmFsdWVBY2Nlc3Nvcik7XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIG51bGwgdmFsdWVzIGFyZW4ndCBleHBlY3RlZFxuICBjb25zdCBiaW5zID0gZ2V0Qmlucyh2YWx1ZXMpO1xuXG4gIC8vIEB0cy1pZ25vcmUgZDMtYXJyYXkgdHlwZXMgZG9lc24ndCBtYXRjaFxuICByZXR1cm4gYmlucy5tYXAoYmluID0+ICh7XG4gICAgY291bnQ6IGJpbi5sZW5ndGgsXG4gICAgaW5kZXhlczogYmluLFxuICAgIHgwOiBiaW4ueDAsXG4gICAgeDE6IGJpbi54MFxuICB9KSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkb21haW5cbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBudW1CaW5zXG4gKiBAcGFyYW0gdmFsdWVBY2Nlc3NvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9ncmFtRnJvbURvbWFpbihcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICB2YWx1ZXM6IChNaWxsaXNlY29uZCB8IG51bGwgfCBudW1iZXIpW10sXG4gIG51bUJpbnM6IG51bWJlcixcbiAgdmFsdWVBY2Nlc3Nvcj86IChkOiB1bmtub3duKSA9PiBudW1iZXJcbik6IEJpbltdIHtcbiAgY29uc3QgZ2V0QmlucyA9IGQzSGlzdG9ncmFtKCkudGhyZXNob2xkcyh0aWNrcyhkb21haW5bMF0sIGRvbWFpblsxXSwgbnVtQmlucykpLmRvbWFpbihkb21haW4pO1xuICBpZiAodmFsdWVBY2Nlc3Nvcikge1xuICAgIGdldEJpbnMudmFsdWUodmFsdWVBY2Nlc3Nvcik7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlIGQzLWFycmF5IHR5cGVzIGRvZXNuJ3QgbWF0Y2hcbiAgcmV0dXJuIGdldEJpbnModmFsdWVzKS5tYXAoYmluID0+ICh7XG4gICAgY291bnQ6IGJpbi5sZW5ndGgsXG4gICAgaW5kZXhlczogYmluLFxuICAgIHgwOiBiaW4ueDAsXG4gICAgeDE6IGJpbi54MVxuICB9KSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGZpbHRlclxuICogQHBhcmFtIGRhdGFzZXRzXG4gKiBAcGFyYW0gaW50ZXJ2YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVCaW5zKFxuICBmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcixcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBpbnRlcnZhbDogUGxvdFR5cGVbJ2ludGVydmFsJ11cbik6IFRpbWVCaW5zIHtcbiAgbGV0IGJpbnMgPSBmaWx0ZXIudGltZUJpbnMgfHwge307XG5cbiAgZmlsdGVyLmRhdGFJZC5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgLy8gcmV1c2UgYmlucyBpZiBmaWx0ZXJEYXRhIGRpZCBub3QgY2hhbmdlXG4gICAgaWYgKGJpbnNbZGF0YUlkXSAmJiBiaW5zW2RhdGFJZF1baW50ZXJ2YWxdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gICAgLy8gZG8gbm90IGFwcGx5IGN1cnJlbnQgZmlsdGVyXG4gICAgY29uc3QgaW5kZXhlcyA9IHJ1bkdwdUZpbHRlckZvclBsb3QoZGF0YXNldCwgZmlsdGVyKTtcblxuICAgIGJpbnMgPSB7XG4gICAgICAuLi5iaW5zLFxuICAgICAgW2RhdGFJZF06IHtcbiAgICAgICAgLi4uYmluc1tkYXRhSWRdLFxuICAgICAgICBbaW50ZXJ2YWxdOiBiaW5CeVRpbWUoaW5kZXhlcywgZGF0YXNldCwgaW50ZXJ2YWwsIGZpbHRlcilcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gYmlucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbkJ5VGltZShpbmRleGVzLCBkYXRhc2V0LCBpbnRlcnZhbCwgZmlsdGVyKSB7XG4gIC8vIGdwdUZpbHRlcnMgbmVlZCB0byBiZSBhcHBseSB0byBmaWx0ZXJlZEluZGV4XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0RmlsdGVyTWFwcGVkVmFsdWUoZGF0YXNldCwgZmlsdGVyKTtcbiAgaWYgKCFtYXBwZWRWYWx1ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGludGVydmFsQmlucyA9IGdldEJpblRocmVzaG9sZHMoaW50ZXJ2YWwsIGZpbHRlci5kb21haW4pO1xuICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gaWR4ID0+IG1hcHBlZFZhbHVlW2lkeF07XG4gIGNvbnN0IGJpbnMgPSBoaXN0b2dyYW1Gcm9tVGhyZXNob2xkKGludGVydmFsQmlucywgaW5kZXhlcywgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgcmV0dXJuIGJpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCaW5UaHJlc2hvbGRzKGludGVydmFsOiBzdHJpbmcsIGRvbWFpbjogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHRpbWVJbnRlcnZhbCA9IGludGVydmFsVG9GdW5jdGlvbihpbnRlcnZhbCk7XG4gIGNvbnN0IFt0MCwgdDFdID0gZG9tYWluO1xuICBjb25zdCBmbG9vciA9IHRpbWVJbnRlcnZhbC5mbG9vcih0MCkuZ2V0VGltZSgpO1xuICBjb25zdCBjZWlsaW5nID0gdGltZUludGVydmFsLmNlaWwodDEpLmdldFRpbWUoKTtcblxuICBpZiAoIXRpbWVJbnRlcnZhbCkge1xuICAgIC8vIGlmIHRpbWUgaW50ZXJ2YWwgaXMgbm90IGRlZmluZWRcbiAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuXG4gICAgcmV0dXJuIFt0MCwgdDAgKyBkdXJhdGlvbkRheV07XG4gIH1cbiAgY29uc3QgYmluVGhyZXNob2xkcyA9IHRpbWVJbnRlcnZhbC5yYW5nZShmbG9vciwgY2VpbGluZyArIDEpLm1hcCh0ID0+IG1vbWVudC51dGModCkudmFsdWVPZigpKTtcbiAgY29uc3QgbGFzdFN0ZXAgPSBiaW5UaHJlc2hvbGRzW2JpblRocmVzaG9sZHMubGVuZ3RoIC0gMV07XG4gIGlmIChsYXN0U3RlcCA9PT0gdDEpIHtcbiAgICAvLyB3aGVuIGxhc3Qgc3RlcCBlcXVhbCB0byBkb21haW4gbWF4LCBhZGQgb25lIG1vcmUgc3RlcFxuICAgIGJpblRocmVzaG9sZHMucHVzaChtb21lbnQudXRjKHRpbWVJbnRlcnZhbC5vZmZzZXQobGFzdFN0ZXApKS52YWx1ZU9mKCkpO1xuICB9XG5cbiAgcmV0dXJuIGJpblRocmVzaG9sZHM7XG59XG5cbi8qKlxuICogUnVuIEdQVSBmaWx0ZXIgb24gY3VycmVudCBmaWx0ZXIgcmVzdWx0IHRvIGdlbmVyYXRlIGluZGV4ZXMgZm9yIHBsb3RpbmcgY2hhcnRcbiAqIFNraXAgcnV1bmluZyBmb3IgdGhlIHNhbWUgZmllbGRcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5HcHVGaWx0ZXJGb3JQbG90PEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyPzogRmlsdGVyXG4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHNraXBJbmRleGVzID0gZ2V0U2tpcEluZGV4ZXMoZGF0YXNldCwgZmlsdGVyKTtcblxuICBjb25zdCB7XG4gICAgZ3B1RmlsdGVyOiB7ZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycywgZmlsdGVyUmFuZ2UsIGZpbHRlclZhbHVlQWNjZXNzb3J9LFxuICAgIGZpbHRlcmVkSW5kZXhcbiAgfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IGdldEZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhc2V0LmRhdGFDb250YWluZXIpKCk7XG5cbiAgY29uc3QgYWxsQ2hhbm5lbHMgPSBPYmplY3Qua2V5cyhmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzKVxuICAgIC5tYXAoKF8sIGkpID0+IGkpXG4gICAgLmZpbHRlcihpID0+IE9iamVjdC52YWx1ZXMoZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycylbaV0pO1xuICBjb25zdCBza2lwQWxsID0gIWFsbENoYW5uZWxzLmZpbHRlcihpID0+ICFza2lwSW5kZXhlcy5pbmNsdWRlcyhpKSkubGVuZ3RoO1xuICBpZiAoc2tpcEFsbCkge1xuICAgIHJldHVybiBmaWx0ZXJlZEluZGV4O1xuICB9XG5cbiAgY29uc3QgZmlsdGVyRGF0YSA9IGdldEZpbHRlckRhdGFGdW5jKFxuICAgIGZpbHRlclJhbmdlLFxuICAgIGdldEZpbHRlclZhbHVlLFxuICAgIGRhdGFzZXQuZGF0YUNvbnRhaW5lcixcbiAgICBza2lwSW5kZXhlc1xuICApO1xuXG4gIHJldHVybiBmaWx0ZXJlZEluZGV4LmZpbHRlcihmaWx0ZXJEYXRhKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2tpcEluZGV4ZXMoZGF0YXNldCwgZmlsdGVyKSB7XG4gIC8vIGFycmF5IG9mIGdwdSBmaWx0ZXIgbmFtZXNcbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgZ3B1RmlsdGVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldC5ncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycykgYXMgKHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH0gfCBudWxsKVtdO1xuICBjb25zdCB2YWx1ZUluZGV4ID0gZmlsdGVyLmRhdGFJZC5maW5kSW5kZXgoaWQgPT4gaWQgPT09IGRhdGFzZXQuaWQpO1xuICBjb25zdCBmaWx0ZXJDb2x1bW4gPSBmaWx0ZXIubmFtZVt2YWx1ZUluZGV4XTtcblxuICByZXR1cm4gZ3B1RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGl0ZW0sIGlkeCkgPT4ge1xuICAgIGlmIChpdGVtICYmIGZpbHRlckNvbHVtbiA9PT0gaXRlbS5uYW1lKSB7XG4gICAgICBhY2N1LnB1c2goaWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIFtdIGFzIG51bWJlcltdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckRhdGFGdW5jKFxuICBmaWx0ZXJSYW5nZSxcbiAgZ2V0RmlsdGVyVmFsdWUsXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHNraXBzXG4pIHtcbiAgcmV0dXJuIGluZGV4ID0+XG4gICAgZ2V0RmlsdGVyVmFsdWUoe2luZGV4fSkuZXZlcnkoXG4gICAgICAodmFsLCBpKSA9PiBza2lwcy5pbmNsdWRlcyhpKSB8fCAodmFsID49IGZpbHRlclJhbmdlW2ldWzBdICYmIHZhbCA8PSBmaWx0ZXJSYW5nZVtpXVsxXSlcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRCaW4oYikge1xuICByZXR1cm4gYi54MCAhPT0gdW5kZWZpbmVkICYmIGIueDEgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBVc2UgaW4gc2xpZGVyLCBnaXZlbiBhIG51bWJlciBhbmQgYW4gYXJyYXkgb2YgbnVtYmVycywgcmV0dXJuIHRoZSBuZWFycyBudW1iZXIgZnJvbSB0aGUgYXJyYXkuXG4gKiBUYWtlcyBhIHZhbHVlLCB0aW1lc3RlcHMgYW5kIHJldHVybiB0aGUgYWN0dWFsIHN0ZXAuXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBtYXJrc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcFRvTWFya3ModmFsdWU6IG51bWJlciwgbWFya3M6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgLy8gYWx3YXlzIHVzZSBiaW4geDBcbiAgaWYgKCFtYXJrcy5sZW5ndGgpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvb2tpbmcgYXQgdGhlIHVzYWdlIG51bGwgcmV0dXJuIHZhbHVlIGlzbid0IGV4cGVjdGVkIGFuZCByZXF1aXJlcyBleHRyYSBoYW5kbGluZyBpbiBhIGxvdCBvZiBwbGFjZXNcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBpID0gYmlzZWN0TGVmdChtYXJrcywgdmFsdWUpO1xuICBpZiAoaSA9PT0gMCkge1xuICAgIHJldHVybiBtYXJrc1tpXTtcbiAgfSBlbHNlIGlmIChpID09PSBtYXJrcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbWFya3NbaSAtIDFdO1xuICB9XG4gIGNvbnN0IGlkeCA9IG1hcmtzW2ldIC0gdmFsdWUgPCB2YWx1ZSAtIG1hcmtzW2kgLSAxXSA/IGkgOiBpIC0gMTtcbiAgcmV0dXJuIG1hcmtzW2lkeF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWwsIG1pblZhbHVlLCBzdGVwLCBtYXJrcykge1xuICBpZiAobWFya3MgJiYgbWFya3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNuYXBUb01hcmtzKHZhbCwgbWFya3MpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlLCBzdGVwLCB2YWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQZXJjZW50RmllbGQoZmllbGQpIHtcbiAgcmV0dXJuIGZpZWxkLm1ldGFkYXRhICYmIGZpZWxkLm1ldGFkYXRhLm51bWVyYXRvciAmJiBmaWVsZC5tZXRhZGF0YS5kZW5vbWluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFnZ3JlZ2F0aW9uQnlGaWVsZChmaWVsZDogRmllbGQsIGFnZ3JlZ2F0aW9uOiBWYWx1ZU9mPEFnZ3JlZ2F0aW9uVHlwZXM+KSB7XG4gIC8vIHNob3VsZG4ndCBhcHBseSBzdW0gdG8gcGVyY2VudCBmaWVsZSB0eXBlXG4gIC8vIGRlZmF1bHQgYWdncmVnYXRpb24gaXMgYXZlcmFnZVxuICByZXR1cm4gZmllbGQgJiYgaXNQZXJjZW50RmllbGQoZmllbGQpXG4gICAgPyBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlXG4gICAgOiBhZ2dyZWdhdGlvbiB8fCBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlO1xufVxuXG5jb25zdCBnZXRBZ3JlZ2F0aW9uVHlwZSA9IChmaWVsZCwgYWdncmVnYXRpb24pID0+IHtcbiAgaWYgKGlzUGVyY2VudEZpZWxkKGZpZWxkKSkge1xuICAgIHJldHVybiAnbWVhbl9vZl9wZXJjZW50JztcbiAgfVxuICByZXR1cm4gYWdncmVnYXRpb247XG59O1xuXG5jb25zdCBnZXRBZ2dyZWdhdGlvbkFjY2Vzc29yID0gKGZpZWxkLCBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBmaWVsZHMpID0+IHtcbiAgaWYgKGlzUGVyY2VudEZpZWxkKGZpZWxkKSkge1xuICAgIGNvbnN0IG51bWVyYXRvcklkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGZpZWxkLm1ldGFkYXRhLm51bWVyYXRvcik7XG4gICAgY29uc3QgZGVub21pbmF0b3JJZHggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBmaWVsZC5tZXRhZGF0YS5kZW5vbWluYXRvcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0TnVtZXJhdG9yOiBpID0+IGRhdGFDb250YWluZXIudmFsdWVBdChpLCBudW1lcmF0b3JJZHgpLFxuICAgICAgZ2V0RGVub21pbmF0b3I6IGkgPT4gZGF0YUNvbnRhaW5lci52YWx1ZUF0KGksIGRlbm9taW5hdG9ySWR4KVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gaSA9PiBmaWVsZC52YWx1ZUFjY2Vzc29yKHtpbmRleDogaX0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlQWdnckZ1bmMgPSAoXG4gIGZpZWxkOiBGaWVsZCB8IHN0cmluZyB8IG51bGwsXG4gIGFnZ3JlZ2F0aW9uOiBzdHJpbmcsXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlTW9kZWw8YW55LCBhbnk+XG4pOiAoKGJpbjogQmluKSA9PiBudW1iZXIpID0+IHtcbiAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpZWxkc30gPSBkYXRhc2V0O1xuXG4gIC8vIFRoZSBwYXNzZWQtaW4gZmllbGQgbWlnaHQgbm90IGhhdmUgYWxsIHRoZSBmaWVsZHMgc2V0IChlLmcuIHZhbHVlQWNjZXNzb3IpXG4gIGNvbnN0IGRhdGFzZXRGaWVsZCA9IGZpZWxkcy5maW5kKFxuICAgIGYgPT4gZmllbGQgJiYgKGYubmFtZSA9PT0gZmllbGQgfHwgZi5uYW1lID09PSAoZmllbGQgYXMgRmllbGQpLm5hbWUpXG4gICk7XG5cbiAgcmV0dXJuIGRhdGFzZXRGaWVsZCAmJiBhZ2dyZWdhdGlvblxuICAgID8gYmluID0+XG4gICAgICAgIGFnZ3JlZ2F0ZShcbiAgICAgICAgICBiaW4uaW5kZXhlcyxcbiAgICAgICAgICBnZXRBZ3JlZ2F0aW9uVHlwZShkYXRhc2V0RmllbGQsIGFnZ3JlZ2F0aW9uKSxcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbiByZXR1cm4ge2dldE51bWVyYXRvciwgZ2V0RGVub21pbmF0b3J9XG4gICAgICAgICAgZ2V0QWdncmVnYXRpb25BY2Nlc3NvcihkYXRhc2V0RmllbGQsIGRhdGFDb250YWluZXIsIGZpZWxkcylcbiAgICAgICAgKVxuICAgIDogYmluID0+IGJpbi5jb3VudDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGlvbk9wdGlvc25CYXNlZE9uRmllbGQgPSBmaWVsZCA9PiB7XG4gIGlmIChpc1BlcmNlbnRGaWVsZChmaWVsZCkpIHtcbiAgICAvLyBkb24ndCBzaG93IHN1bVxuICAgIHJldHVybiBUSU1FX0FHR1JFR0FUSU9OLmZpbHRlcigoe2lkfSkgPT4gaWQgIT09IEFHR1JFR0FUSU9OX1RZUEVTLnN1bSk7XG4gIH1cbiAgcmV0dXJuIFRJTUVfQUdHUkVHQVRJT047XG59O1xuXG5mdW5jdGlvbiBnZXREZWx0YShcbiAgYmluczogTGluZURhdHVtW10sXG4gIHk6IG51bWJlcixcbiAgX2ludGVydmFsOiBQbG90VHlwZVsnaW50ZXJ2YWwnXVxuKTogUGFydGlhbDxMaW5lRGF0dW0+ICYge2RlbHRhOiAnbGFzdCc7IHBjdDogbnVtYmVyIHwgbnVsbH0ge1xuICAvLyBpZiAoV09XW2ludGVydmFsXSkgcmV0dXJuIGdldFdvdyhiaW5zLCB5LCBpbnRlcnZhbCk7XG4gIGNvbnN0IGxhc3RCaW4gPSBiaW5zW2JpbnMubGVuZ3RoIC0gMV07XG5cbiAgcmV0dXJuIHtcbiAgICBkZWx0YTogJ2xhc3QnLFxuICAgIHBjdDogbGFzdEJpbiA/IGdldFBjdENoYW5nZSh5LCBsYXN0QmluLnkpIDogbnVsbFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGN0Q2hhbmdlKHk6IHVua25vd24sIHkwOiB1bmtub3duKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeSkgJiYgTnVtYmVyLmlzRmluaXRlKHkwKSAmJiB5MCAhPT0gMCkge1xuICAgIHJldHVybiAoKHkgYXMgbnVtYmVyKSAtICh5MCBhcyBudW1iZXIpKSAvICh5MCBhcyBudW1iZXIpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YXNldHNcbiAqIEBwYXJhbSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmVDaGFydChkYXRhc2V0czogRGF0YXNldHMsIGZpbHRlcjogRmlsdGVyKTogTGluZUNoYXJ0IHtcbiAgY29uc3Qge2RhdGFJZCwgeUF4aXMsIHBsb3RUeXBlLCBsaW5lQ2hhcnR9ID0gZmlsdGVyO1xuICBjb25zdCB7YWdncmVnYXRpb24sIGludGVydmFsfSA9IHBsb3RUeXBlO1xuICBjb25zdCBzZXJpZXNEYXRhSWQgPSBkYXRhSWRbMF07XG4gIGNvbnN0IGJpbnMgPSAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikudGltZUJpbnM/LltzZXJpZXNEYXRhSWRdPy5baW50ZXJ2YWxdO1xuXG4gIGlmIChcbiAgICBsaW5lQ2hhcnQgJiZcbiAgICBsaW5lQ2hhcnQuYWdncmVnYXRpb24gPT09IGFnZ3JlZ2F0aW9uICYmXG4gICAgbGluZUNoYXJ0LmludGVydmFsID09PSBpbnRlcnZhbCAmJlxuICAgIGxpbmVDaGFydC55QXhpcyA9PT0geUF4aXM/Lm5hbWUgJiZcbiAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSB2YWxpZGF0ZSBiaW5zIGJlY2F1c2Ugb2YgY3Jvc3MgZmlsdGVyIGRhdGEgY2hhbmdlc1xuICAgIGlzRXF1YWwoYmlucywgbGluZUNoYXJ0Py5iaW5zKVxuICApIHtcbiAgICAvLyBkb24ndCB1cGRhdGUgbGluZUNoYXJ0IGlmIHBsb3RUeXBlIGhhc24ndCBjaGFuZ2VcbiAgICByZXR1cm4gbGluZUNoYXJ0O1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW3Nlcmllc0RhdGFJZF07XG4gIGNvbnN0IGdldFlWYWx1ZSA9IGdldFZhbHVlQWdnckZ1bmMoeUF4aXMsIGFnZ3JlZ2F0aW9uLCBkYXRhc2V0KTtcblxuICBjb25zdCBpbml0OiBMaW5lRGF0dW1bXSA9IFtdO1xuICBjb25zdCBzZXJpZXMgPSAoYmlucyB8fCBbXSkucmVkdWNlKChhY2N1LCBiaW4pID0+IHtcbiAgICBjb25zdCB5ID0gZ2V0WVZhbHVlKGJpbik7XG4gICAgY29uc3QgZGVsdGEgPSBnZXREZWx0YShhY2N1LCB5LCBpbnRlcnZhbCk7XG4gICAgYWNjdS5wdXNoKHtcbiAgICAgIHg6IGJpbi54MCxcbiAgICAgIHksXG4gICAgICAuLi5kZWx0YVxuICAgIH0pO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCBpbml0KTtcblxuICBjb25zdCB5RG9tYWluID0gZXh0ZW50PHt5OiBhbnl9PihzZXJpZXMsIGQgPT4gZC55KTtcbiAgY29uc3QgeERvbWFpbiA9IGJpbnMgPyBbYmluc1swXS54MCwgYmluc1tiaW5zLmxlbmd0aCAtIDFdLngxXSA6IFtdO1xuXG4gIC8vIHRyZWF0IG1pc3NpbmcgZGF0YSBhcyBhbm90aGVyIHNlcmllc1xuICBjb25zdCBzcGxpdCA9IHNwbGl0U2VyaWVzKHNlcmllcyk7XG4gIGNvbnN0IGFnZ3JOYW1lID0gQUdHUkVHQVRJT05fTkFNRVthZ2dyZWdhdGlvbl07XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgeURvbWFpbixcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgeERvbWFpbixcbiAgICBpbnRlcnZhbCxcbiAgICBhZ2dyZWdhdGlvbixcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc2VyaWVzOiBzcGxpdCxcbiAgICB0aXRsZTogYCR7YWdnck5hbWV9JHsnIG9mICd9JHt5QXhpcyA/IHlBeGlzLm5hbWUgOiAnQ291bnQnfWAsXG4gICAgZmllbGRUeXBlOiB5QXhpcyA/IHlBeGlzLnR5cGUgOiAnaW50ZWdlcicsXG4gICAgeUF4aXM6IHlBeGlzID8geUF4aXMubmFtZSA6IG51bGwsXG4gICAgYWxsVGltZToge1xuICAgICAgdGl0bGU6IGBBbGwgVGltZSBBdmVyYWdlYCxcbiAgICAgIHZhbHVlOiBhZ2dyZWdhdGUoc2VyaWVzLCBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlLCBkID0+IGQueSlcbiAgICB9LFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYmlucyBpcyBCaW5zW10sIG5vdCBhIEJpbnMgbWFwLiBSZWZhY3RvciB0byB1c2UgY29ycmVjdCB0eXBlcy5cbiAgICBiaW5zXG4gIH07XG59XG5cbi8vIHNwbGl0IGludG8gbXVsdGlwbGUgc2VyaWVzIHdoZW4gc2VlIG1pc3NpbmcgZGF0YVxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0U2VyaWVzKHNlcmllcykge1xuICBjb25zdCBsaW5lczogYW55W10gPSBbXTtcbiAgbGV0IHRlbXA6IGFueVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZCA9IHNlcmllc1tpXTtcbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChkLnkpICYmIHRlbXAubGVuZ3RoKSB7XG4gICAgICAvLyBlbmRzIHRlbXBcbiAgICAgIGxpbmVzLnB1c2godGVtcCk7XG4gICAgICB0ZW1wID0gW107XG4gICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoZC55KSkge1xuICAgICAgdGVtcC5wdXNoKGQpO1xuICAgIH1cblxuICAgIGlmIChpID09PSBzZXJpZXMubGVuZ3RoIC0gMSAmJiB0ZW1wLmxlbmd0aCkge1xuICAgICAgbGluZXMucHVzaCh0ZW1wKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtYXJrZXJzID0gbGluZXMubGVuZ3RoID4gMSA/IHNlcmllcy5maWx0ZXIoZCA9PiBub3ROdWxsb3JVbmRlZmluZWQoZC55KSkgOiBbXTtcblxuICByZXR1cm4ge2xpbmVzLCBtYXJrZXJzfTtcbn1cblxudHlwZSBNaW5WaXNTdGF0ZUZvckFuaW1hdGlvbldpbmRvdyA9IHtcbiAgZGF0YXNldHM6IERhdGFzZXRzO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3c8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yQW5pbWF0aW9uV2luZG93PihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcjogVGltZVJhbmdlRmlsdGVyXG4pIHtcbiAgY29uc3Qge1xuICAgIHBsb3RUeXBlLFxuICAgIHZhbHVlOiBbdmFsdWUwLCB2YWx1ZTFdLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9ID0gZmlsdGVyO1xuXG4gIGNvbnN0IGludGVydmFsID0gcGxvdFR5cGUuaW50ZXJ2YWwgfHwgZ2V0SW5pdGlhbEludGVydmFsKGZpbHRlciwgc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCBiaW5zID0gZ2V0VGltZUJpbnMoZmlsdGVyLCBzdGF0ZS5kYXRhc2V0cywgaW50ZXJ2YWwpO1xuICBjb25zdCBkYXRhc2V0QmlucyA9IGJpbnMgJiYgT2JqZWN0LmtleXMoYmlucykubGVuZ3RoICYmIE9iamVjdC52YWx1ZXMoYmlucylbMF1baW50ZXJ2YWxdO1xuICBjb25zdCB0aHJlc2hvbGRzID0gKGRhdGFzZXRCaW5zIHx8IFtdKS5tYXAoYiA9PiBiLngwKTtcblxuICBsZXQgdmFsMCA9IHZhbHVlMDtcbiAgbGV0IHZhbDEgPSB2YWx1ZTE7XG4gIGxldCBpZHg7XG4gIGlmIChhbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpIHtcbiAgICB2YWwwID0gc25hcFRvTWFya3ModmFsdWUxLCB0aHJlc2hvbGRzKTtcbiAgICBpZHggPSB0aHJlc2hvbGRzLmluZGV4T2YodmFsMCk7XG4gICAgdmFsMSA9IGlkeCA+IC0xID8gZGF0YXNldEJpbnNbaWR4XS54MSA6IE5hTjtcbiAgfSBlbHNlIHtcbiAgICAvLyBmaXQgY3VycmVudCB2YWx1ZSB0byB3aW5kb3dcbiAgICB2YWwwID0gc25hcFRvTWFya3ModmFsdWUwLCB0aHJlc2hvbGRzKTtcbiAgICB2YWwxID0gc25hcFRvTWFya3ModmFsdWUxLCB0aHJlc2hvbGRzKTtcblxuICAgIGlmICh2YWwwID09PSB2YWwxKSB7XG4gICAgICBpZHggPSB0aHJlc2hvbGRzLmluZGV4T2YodmFsMCk7XG4gICAgICBpZiAoaWR4ID09PSB0aHJlc2hvbGRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdmFsMCA9IHRocmVzaG9sZHNbaWR4IC0gMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwxID0gdGhyZXNob2xkc1tpZHggKyAxXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB1cGRhdGVkRmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBwbG90VHlwZToge1xuICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgaW50ZXJ2YWxcbiAgICB9LFxuICAgIHRpbWVCaW5zOiBiaW5zLFxuICAgIHZhbHVlOiBbdmFsMCwgdmFsMV1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlZEZpbHRlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGNvbG9ycyBmb3IgYSBmaWx0ZXIgcGxvdFxuICogQHBhcmFtIGZpbHRlclxuICogQHBhcmFtIGRhdGFzZXRzXG4gKiBAcGFyYW0gb2xkQ29sb3JzQnlEYXRhSWRcbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyUGxvdENvbG9yc0J5RGF0YUlkKGZpbHRlciwgZGF0YXNldHMsIG9sZENvbG9yc0J5RGF0YUlkKSB7XG4gIGxldCBjb2xvcnNCeURhdGFJZCA9IG9sZENvbG9yc0J5RGF0YUlkIHx8IHt9O1xuICBmb3IgKGNvbnN0IGRhdGFJZCBvZiBmaWx0ZXIuZGF0YUlkKSB7XG4gICAgaWYgKCFjb2xvcnNCeURhdGFJZFtkYXRhSWRdICYmIGRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIGNvbG9yc0J5RGF0YUlkID0ge1xuICAgICAgICAuLi5jb2xvcnNCeURhdGFJZCxcbiAgICAgICAgW2RhdGFJZF06IHJnYlRvSGV4KGRhdGFzZXRzW2RhdGFJZF0uY29sb3IpXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29sb3JzQnlEYXRhSWQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBmaWx0ZXJcbiAqIEBwYXJhbSBwbG90VHlwZVxuICogQHBhcmFtIGRhdGFzZXRzXG4gKiBAcGFyYW0gZGF0YUlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoXG4gIGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLFxuICBwbG90VHlwZTogVGltZVJhbmdlRmlsdGVyWydwbG90VHlwZSddLFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIF9kYXRhSWQ/OiBzdHJpbmdcbik6IFRpbWVSYW5nZUZpbHRlciB7XG4gIGxldCBuZXh0RmlsdGVyID0gZmlsdGVyO1xuICBsZXQgbmV4dFBsb3RUeXBlID0gcGxvdFR5cGU7XG4gIGlmICh0eXBlb2YgbmV4dFBsb3RUeXBlICE9PSAnb2JqZWN0JyB8fCAhbmV4dFBsb3RUeXBlLmFnZ3JlZ2F0aW9uIHx8ICFuZXh0UGxvdFR5cGUuaW50ZXJ2YWwpIHtcbiAgICBuZXh0UGxvdFR5cGUgPSBnZXREZWZhdWx0UGxvdFR5cGUoZmlsdGVyLCBkYXRhc2V0cyk7XG4gIH1cblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxKSB7XG4gICAgbmV4dFBsb3RUeXBlID0ge1xuICAgICAgLi4ubmV4dFBsb3RUeXBlLFxuICAgICAgY29sb3JzQnlEYXRhSWQ6IGdldEZpbHRlclBsb3RDb2xvcnNCeURhdGFJZChmaWx0ZXIsIGRhdGFzZXRzLCBuZXh0UGxvdFR5cGUuY29sb3JzQnlEYXRhSWQpXG4gICAgfTtcbiAgfVxuICBuZXh0RmlsdGVyID0ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgcGxvdFR5cGU6IG5leHRQbG90VHlwZVxuICB9O1xuXG4gIGNvbnN0IGJpbnMgPSBnZXRUaW1lQmlucyhuZXh0RmlsdGVyLCBkYXRhc2V0cywgbmV4dFBsb3RUeXBlLmludGVydmFsKTtcblxuICBuZXh0RmlsdGVyID0ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdGltZUJpbnM6IGJpbnNcbiAgfTtcblxuICBpZiAocGxvdFR5cGUudHlwZSA9PT0gUExPVF9UWVBFUy5oaXN0b2dyYW0pIHtcbiAgICAvLyBIaXN0b2dyYW0gaXMgY2FsY3VsYXRlZCBhbmQgbWVtb2l6ZWQgaW4gdGhlIGNoYXJ0IGl0c2VsZlxuICB9IGVsc2UgaWYgKHBsb3RUeXBlLnR5cGUgPT09IFBMT1RfVFlQRVMubGluZUNoYXJ0KSB7XG4gICAgLy8gd2Ugc2hvdWxkIGJlIGFibGUgdG8gbW92ZSB0aGlzIGludG8gaXRzIG93biBjb21wb25lbnQgc28gcmVhY3Qgd2lsbCBkbyB0aGUgc2hhbGxvdyBjb21wYXJpc29uIGZvciB1cy5cbiAgICBuZXh0RmlsdGVyID0ge1xuICAgICAgLi4ubmV4dEZpbHRlcixcbiAgICAgIGxpbmVDaGFydDogZ2V0TGluZUNoYXJ0KGRhdGFzZXRzLCBuZXh0RmlsdGVyKVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbmV4dEZpbHRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmdlRmlsdGVyQmlucyhmaWx0ZXIsIGRhdGFzZXRzLCBudW1CaW5zKSB7XG4gIGNvbnN0IHtkb21haW59ID0gZmlsdGVyO1xuICBpZiAoIWZpbHRlci5kYXRhSWQpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBmaWx0ZXIuZGF0YUlkLnJlZHVjZSgoYWNjLCBkYXRhSWQsIGRhdGFzZXRJZHgpID0+IHtcbiAgICBpZiAoZmlsdGVyLmJpbnM/LltkYXRhSWRdKSB7XG4gICAgICAvLyBkb24ndCByZWNhbGN1bGF0ZSBiaW5zXG4gICAgICBhY2NbZGF0YUlkXSA9IGZpbHRlci5iaW5zW2RhdGFJZF07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZE5hbWUgPSBmaWx0ZXIubmFtZVtkYXRhc2V0SWR4XTtcbiAgICBpZiAoZGF0YUlkICYmIGZpZWxkTmFtZSkge1xuICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gICAgICBjb25zdCBmaWVsZCA9IGRhdGFzZXQ/LmdldENvbHVtbkZpZWxkKGZpZWxkTmFtZSk7XG4gICAgICBpZiAoZGF0YXNldCAmJiBmaWVsZCkge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gcnVuR3B1RmlsdGVyRm9yUGxvdChkYXRhc2V0LCBmaWx0ZXIpO1xuICAgICAgICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gaW5kZXggPT4gZmllbGQudmFsdWVBY2Nlc3Nvcih7aW5kZXh9KTtcbiAgICAgICAgYWNjW2RhdGFJZF0gPSBoaXN0b2dyYW1Gcm9tRG9tYWluKGRvbWFpbiwgaW5kZXhlcywgbnVtQmlucywgdmFsdWVBY2Nlc3Nvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVJhbmdlRmlsdGVyUGxvdFR5cGUoXG4gIGZpbHRlcjogUmFuZ2VGaWx0ZXIsXG4gIHBsb3RUeXBlOiBSYW5nZUZpbHRlclsncGxvdFR5cGUnXSxcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBfZGF0YUlkPzogc3RyaW5nXG4pOiBSYW5nZUZpbHRlciB7XG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHBsb3RUeXBlXG4gIH07XG5cbiAgLy8gaWYgKGRhdGFJZCkge1xuICAvLyAgIC8vIGNsZWFyIGJpbnNcbiAgLy8gICBuZXh0RmlsdGVyID0ge1xuICAvLyAgICAgLi4ubmV4dEZpbHRlcixcbiAgLy8gICAgIGJpbnM6IHtcbiAgLy8gICAgICAgLi4ubmV4dEZpbHRlci5iaW5zLFxuICAvLyAgICAgICBbZGF0YUlkXTogbnVsbFxuICAvLyAgICAgfVxuICAvLyAgIH07XG4gIC8vIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmZpbHRlcixcbiAgICBwbG90VHlwZSxcbiAgICBiaW5zOiBnZXRSYW5nZUZpbHRlckJpbnMobmV4dEZpbHRlciwgZGF0YXNldHMsIEJJTlMpXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFydFRpdGxlKHlBeGlzOiBGaWVsZCwgcGxvdFR5cGU6IFBsb3RUeXBlKTogc3RyaW5nIHtcbiAgY29uc3QgeUF4aXNOYW1lID0geUF4aXM/LmRpc3BsYXlOYW1lO1xuICBjb25zdCB7YWdncmVnYXRpb259ID0gcGxvdFR5cGU7XG5cbiAgaWYgKHlBeGlzTmFtZSkge1xuICAgIHJldHVybiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoYCR7YWdncmVnYXRpb259ICR7eUF4aXNOYW1lfSBvdmVyIFRpbWVgKTtcbiAgfVxuXG4gIHJldHVybiBgQ291bnQgb2YgUm93cyBvdmVyIFRpbWVgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFBsb3RUeXBlKGZpbHRlciwgZGF0YXNldHMpIHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBnZXRJbml0aWFsSW50ZXJ2YWwoZmlsdGVyLCBkYXRhc2V0cyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICByZXR1cm4ge1xuICAgIGludGVydmFsLFxuICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgIHR5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtLFxuICAgIGFnZ3JlZ2F0aW9uOiBBR0dSRUdBVElPTl9UWVBFUy5zdW1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMs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QyxHQUFHTixtQkFBbUIsQ0FBQ2IsTUFBTSxFQUFFSyxPQUFPLEVBQUVLLE9BQU8sRUFBRWYsYUFBYSxDQUFDO01BQzVFO0lBQ0Y7SUFDQSxPQUFPdUwsR0FBRztFQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSO0FBRU8sU0FBU0sseUJBQXlCQSxDQUN2QzNNLE1BQW1CLEVBQ25COEksUUFBaUMsRUFDakMxRyxRQUFrQixFQUNsQjBKLE9BQWdCLEVBQ0g7RUFDYixJQUFNQyxVQUFVLEdBQUExTCxhQUFBLENBQUFBLGFBQUEsS0FDWEwsTUFBTTtJQUNUOEksUUFBUSxFQUFSQTtFQUFRLEVBQ1Q7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUEsT0FBQXpJLGFBQUEsQ0FBQUEsYUFBQSxLQUNLTCxNQUFNO0lBQ1Q4SSxRQUFRLEVBQVJBLFFBQVE7SUFDUnpILElBQUksRUFBRWdMLGtCQUFrQixDQUFDTixVQUFVLEVBQUUzSixRQUFRLEVBQUV3SyxlQUFJO0VBQUM7QUFFeEQ7QUFFTyxTQUFTQyxhQUFhQSxDQUFDaEUsS0FBWSxFQUFFQyxRQUFrQixFQUFVO0VBQ3RFLElBQU1nRSxTQUFTLEdBQUdqRSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWtFLFdBQVc7RUFDcEMsSUFBT2xHLFdBQVcsR0FBSWlDLFFBQVEsQ0FBdkJqQyxXQUFXO0VBRWxCLElBQUlpRyxTQUFTLEVBQUU7SUFDYixPQUFPLElBQUFFLDhCQUFxQixLQUFBakQsTUFBQSxDQUFJbEQsV0FBVyxPQUFBa0QsTUFBQSxDQUFJK0MsU0FBUyxlQUFZLENBQUM7RUFDdkU7RUFFQTtBQUNGO0FBRU8sU0FBU1osa0JBQWtCQSxDQUFDbE0sTUFBTSxFQUFFb0MsUUFBUSxFQUFFO0VBQ25ELElBQU1DLFFBQVEsR0FBRyxJQUFBd0ksd0JBQWtCLEVBQUM3SyxNQUFNLEVBQUVvQyxRQUFRLENBQUM7RUFDckQsSUFBTTZLLGlCQUFpQixHQUFHLElBQUFDLDRCQUFvQixFQUFDN0ssUUFBUSxDQUFDO0VBQ3hELE9BQU87SUFDTEEsUUFBUSxFQUFSQSxRQUFRO0lBQ1I0SyxpQkFBaUIsRUFBakJBLGlCQUFpQjtJQUNqQmhELElBQUksRUFBRWtDLHFCQUFVLENBQUNDLFNBQVM7SUFDMUJ2RixXQUFXLEVBQUVDLDRCQUFpQixDQUFDa0I7RUFDakMsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
@@ -42,8 +42,7 @@ describe('mapUtils', () => {
42
42
  const viewState = {...INITIAL_MAP_STATE, width: 0, height: 0};
43
43
  onViewPortChange(viewState, mockOnUpdateMap, mockOnViewStateChange);
44
44
 
45
- /* eslint-disable no-unused-vars */
46
- const {width, height, ...restViewState} = INITIAL_MAP_STATE;
45
+ const {width: _width, height: _height, ...restViewState} = INITIAL_MAP_STATE;
47
46
  expect(mockOnUpdateMap).toHaveBeenCalledWith({...restViewState, transitionDuration: 0}, 0);
48
47
  });
49
48
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/utils",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0",
4
+ "version": "3.1.1",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -32,9 +32,10 @@
32
32
  "dependencies": {
33
33
  "@deck.gl/core": "^8.9.27",
34
34
  "@dnd-kit/sortable": "^8.0.0",
35
- "@kepler.gl/common-utils": "3.1.0",
36
- "@kepler.gl/constants": "3.1.0",
37
- "@kepler.gl/types": "3.1.0",
35
+ "@kepler.gl/common-utils": "3.1.1",
36
+ "@kepler.gl/constants": "3.1.1",
37
+ "@kepler.gl/types": "3.1.1",
38
+ "@loaders.gl/arrow": "^4.3.2",
38
39
  "@luma.gl/constants": "^8.5.20",
39
40
  "@luma.gl/core": "^8.5.20",
40
41
  "@mapbox/geo-viewport": "^0.4.1",
@@ -20,7 +20,7 @@ export type BaseMapLibraryConfig = {
20
20
  * A mechanism to override default Kepler values/settings so that we
21
21
  * without having to make application-specific changes to the kepler repo.
22
22
  */
23
- export type KeplerApplicationConfig<Map> = {
23
+ export type KeplerApplicationConfig = {
24
24
  /** Default name of export HTML file, can be overridden by user */
25
25
  defaultHtmlName?: string;
26
26
  defaultImageName?: string;
@@ -39,9 +39,13 @@ export type KeplerApplicationConfig<Map> = {
39
39
  useArrowProgressiveLoading?: boolean;
40
40
  // Show built-in banner associated with the current version of Kepler.gl
41
41
  showReleaseBanner?: boolean;
42
+ // Use the onFilteredItemsChange callback for DataFilterExtension.
43
+ // Enabling this option may cause performance issues when dealing with a large number of layers or sublayers,
44
+ // especially if large Arrow files are split into relatively small batches (should be fixed in the future).
45
+ useOnFilteredItemsChange?: boolean;
42
46
  };
43
47
 
44
- const DEFAULT_APPLICATION_CONFIG: Required<KeplerApplicationConfig<mapboxgl.Map>> = {
48
+ const DEFAULT_APPLICATION_CONFIG: Required<KeplerApplicationConfig> = {
45
49
  defaultHtmlName: 'kepler.gl.html',
46
50
  defaultImageName: 'kepler.gl.png',
47
51
  defaultJsonName: 'kepler.gl.json',
@@ -73,15 +77,14 @@ const DEFAULT_APPLICATION_CONFIG: Required<KeplerApplicationConfig<mapboxgl.Map>
73
77
  table: null,
74
78
 
75
79
  useArrowProgressiveLoading: true,
76
- showReleaseBanner: true
80
+ showReleaseBanner: true,
81
+ useOnFilteredItemsChange: false
77
82
  };
78
83
 
79
- const applicationConfig: Required<KeplerApplicationConfig<mapboxgl.Map>> =
80
- DEFAULT_APPLICATION_CONFIG;
84
+ const applicationConfig: Required<KeplerApplicationConfig> = DEFAULT_APPLICATION_CONFIG;
81
85
 
82
- export const getApplicationConfig = (): Required<KeplerApplicationConfig<mapboxgl.Map>> =>
83
- applicationConfig;
86
+ export const getApplicationConfig = (): Required<KeplerApplicationConfig> => applicationConfig;
84
87
 
85
- export function initApplicationConfig<M>(appConfig: KeplerApplicationConfig<M> = {}) {
88
+ export function initApplicationConfig(appConfig: KeplerApplicationConfig = {}) {
86
89
  Object.assign(applicationConfig, appConfig);
87
90
  }
@@ -208,7 +208,7 @@ function getScaleLabels(
208
208
  scale: D3ScaleFunction,
209
209
  labelFormat: LabelFormat
210
210
  ): Omit<ColorBreak, 'data'>[] {
211
- return scale.range().map((d, i) => {
211
+ return scale.range().map(d => {
212
212
  // @ts-ignore
213
213
  const invert = scale.invertExtent(d);
214
214
  const inputs = [
@@ -419,7 +419,7 @@ export function colorMapToCategoricalColorBreaks(
419
419
  if (!colorMap) {
420
420
  return null;
421
421
  }
422
- const colorBreaks = colorMap.map(([value, color], i) => {
422
+ const colorBreaks = colorMap.map(([value, color]) => {
423
423
  return {
424
424
  data: color,
425
425
  label: value
@@ -540,7 +540,7 @@ export function getHistogramDomain({
540
540
  ];
541
541
  }
542
542
  if (dataset && fieldValueAccessor) {
543
- dataset.allIndexes.forEach((x, i) => {
543
+ dataset.allIndexes.forEach(x => {
544
544
  const val = fieldValueAccessor(x);
545
545
  if (isNumber(val)) {
546
546
  if (val < domainMin) domainMin = val;
@@ -1,10 +1,13 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
+ import * as arrow from 'apache-arrow';
4
5
  import assert from 'assert';
5
6
  import {format as d3Format} from 'd3-format';
6
7
  import moment from 'moment-timezone';
7
8
 
9
+ import {parseGeometryFromArrow} from '@loaders.gl/arrow';
10
+
8
11
  import {
9
12
  ALL_FIELD_TYPES,
10
13
  TOOLTIP_FORMATS,
@@ -13,14 +16,14 @@ import {
13
16
  TooltipFormat
14
17
  } from '@kepler.gl/constants';
15
18
  import {notNullorUndefined} from '@kepler.gl/common-utils';
16
- import {Field, Millisecond} from '@kepler.gl/types';
19
+ import {Field, Millisecond, ProtoDatasetField} from '@kepler.gl/types';
17
20
 
18
21
  import {snapToMarks} from './plot';
19
22
  import {isPlainObject} from './utils';
20
23
 
21
- export type FieldFormatter = (value: any) => string;
24
+ export type FieldFormatter = (value: any, field?: ProtoDatasetField) => string;
22
25
 
23
- // We need threat latitude differently otherwise marcator project view throws
26
+ // We need threat latitude differently otherwise mercator project view throws
24
27
  // a projection matrix error
25
28
  // Uncaught Error: Pixel project matrix not invertible
26
29
  // at WebMercatorViewport16.Viewport6 (viewport.js:81:13)
@@ -284,6 +287,17 @@ export const defaultFormatter: FieldFormatter = v => (notNullorUndefined(v) ? St
284
287
 
285
288
  export const floatFormatter = v => (isNumber(v) ? String(roundToFour(v)) : '');
286
289
 
290
+ /**
291
+ * Transforms a WKB in Uint8Array form into a hex WKB string.
292
+ * @param uint8Array WKB in Uint8Array form.
293
+ * @returns hex WKB string.
294
+ */
295
+ export function uint8ArrayToHex(data: Uint8Array): string {
296
+ return Array.from(data)
297
+ .map(byte => (byte as any).toString(16).padStart(2, '0'))
298
+ .join('');
299
+ }
300
+
287
301
  export const FIELD_DISPLAY_FORMAT: {
288
302
  [key: string]: FieldFormatter;
289
303
  } = {
@@ -301,7 +315,22 @@ export const FIELD_DISPLAY_FORMAT: {
301
315
  : Array.isArray(d)
302
316
  ? `[${String(d)}]`
303
317
  : '',
304
- [ALL_FIELD_TYPES.geoarrow]: d => d,
318
+ [ALL_FIELD_TYPES.geoarrow]: (data, field) => {
319
+ if (data instanceof arrow.Vector) {
320
+ try {
321
+ const encoding = field?.metadata?.get('ARROW:extension:name');
322
+ if (encoding) {
323
+ const geometry = parseGeometryFromArrow(data, encoding);
324
+ return JSON.stringify(geometry);
325
+ }
326
+ } catch (error) {
327
+ // ignore for now
328
+ }
329
+ } else if (data instanceof Uint8Array) {
330
+ return uint8ArrayToHex(data);
331
+ }
332
+ return data;
333
+ },
305
334
  [ALL_FIELD_TYPES.object]: (value: any) => {
306
335
  try {
307
336
  return JSON.stringify(value);
@@ -309,14 +338,14 @@ export const FIELD_DISPLAY_FORMAT: {
309
338
  return String(value);
310
339
  }
311
340
  },
312
- [ALL_FIELD_TYPES.array]: JSON.stringify,
341
+ [ALL_FIELD_TYPES.array]: d => JSON.stringify(d),
313
342
  [ALL_FIELD_TYPES.h3]: defaultFormatter
314
343
  };
315
344
 
316
345
  /**
317
346
  * Parse field value and type and return a string representation
318
347
  */
319
- export const parseFieldValue = (value: any, type: string): string => {
348
+ export const parseFieldValue = (value: any, type: string, field?: Field): string => {
320
349
  if (!notNullorUndefined(value)) {
321
350
  return '';
322
351
  }
@@ -326,7 +355,7 @@ export const parseFieldValue = (value: any, type: string): string => {
326
355
  if (typeof value === 'bigint') {
327
356
  return value.toString();
328
357
  }
329
- return FIELD_DISPLAY_FORMAT[type] ? FIELD_DISPLAY_FORMAT[type](value) : String(value);
358
+ return FIELD_DISPLAY_FORMAT[type] ? FIELD_DISPLAY_FORMAT[type](value, field) : String(value);
330
359
  };
331
360
 
332
361
  /**