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
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
+ exports.getFieldsFromTile = void 0;
7
8
  exports.getFilterProps = getFilterProps;
8
9
  exports.getLoaderOptions = void 0;
9
10
  exports.getMetaUrl = getMetaUrl;
@@ -11,14 +12,18 @@ exports.getTileUrl = getTileUrl;
11
12
  exports.isTileDataset = isTileDataset;
12
13
  exports.matchDatasetType = matchDatasetType;
13
14
  exports.parseVectorMetadata = parseVectorMetadata;
15
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
17
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
19
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
17
20
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
21
+ var _typeAnalyzer = require("type-analyzer");
18
22
  var _d3Array = require("d3-array");
19
23
  var _console = _interopRequireDefault(require("global/console"));
20
24
  var _lodash = _interopRequireDefault(require("lodash.uniq"));
21
- var _typeAnalyzer = require("type-analyzer");
25
+ var _mvt = require("@loaders.gl/mvt");
26
+ var _pmtiles = require("@loaders.gl/pmtiles");
22
27
  var _commonUtils = require("@kepler.gl/common-utils");
23
28
  var _constants = require("@kepler.gl/constants");
24
29
  var _utils = require("@kepler.gl/utils");
@@ -602,4 +607,119 @@ function matchDatasetType(dataset, layer) {
602
607
  }
603
608
  return Array.isArray(layer.supportedDatasetTypes) && layer.supportedDatasetTypes.includes(dataset.type || '');
604
609
  }
605
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbG9kYXNoIiwiX3R5cGVBbmFseXplciIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRMb2FkZXJPcHRpb25zIiwiZXhwb3J0cyIsIm12dCIsIndvcmtlclVybCIsImlzVGlsZURhdGFzZXQiLCJkYXRhc2V0IiwiQm9vbGVhbiIsInR5cGUiLCJEYXRhc2V0VHlwZSIsIlZFQ1RPUl9USUxFIiwiaXNMYXQiLCJudW0iLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlzTG5nIiwiaXNab29tIiwiZnJvbUFycmF5T3JTdHJpbmciLCJkYXRhIiwic3BsaXQiLCJtYXAiLCJwYXJzZUZsb2F0IiwicGFyc2VDZW50ZXIiLCJjZW50ZXIiLCJyZXN1bHQiLCJwYXJzZUJvdW5kcyIsImJvdW5kcyIsImV2ZXJ5IiwiWF9QQVRUIiwiWV9QQVRUIiwiWl9QQVRUIiwiaXNGdWxseVF1YWxpZmllZFRpbGVVcmwiLCJ0aWxlVXJsIiwiZ2V0VGlsZVVybCIsInZhbGlkYXRlVXJsIiwidW5kZWZpbmVkIiwidXJpUGFydHMiLCJwYXJzZVVyaSIsInByb3RvY29sIiwiaG9zdCIsImNvbmNhdCIsInJlcGxhY2UiLCJUSUxFU0VUX0ZVTkNUSU9OUyIsImdldE1ldGFVcmwiLCJnZXRNZXRhVXJsTWFwYm94IiwicGFyc2VNZXRhZGF0YSIsInBhcnNlTWV0YWRhdGFUaWxlSlNPTiIsImdldE1ldGFVcmxUaXBwZWNhbm9lIiwiZ2V0VGlsZXNldEZ1bmN0aW9ucyIsIlVSTCIsImhvc3RuYW1lIiwiZXJyb3IiLCJwYXJzZVZlY3Rvck1ldGFkYXRhIiwibWV0YWRhdGEiLCJvcHRpb24iLCJfcmVmIiwiX3JlZiR0aWxlVXJsIiwiTUFQQk9YX1VSTF9QQVRUIiwiX3BhcnNlZCRmaWVsZHMiLCJwYXJzZWQiLCJwYXJzZU1ldGFkYXRhVGlwcGVjYW5vZUZyb21EYXRhU291cmNlIiwiZmllbGRzIiwidXJsIiwiYmFzZVVybCIsIl9wbVRpbGVNZXRhZGF0YSR0aWxlaiIsIl9wbVRpbGVNZXRhZGF0YSR0aWxlajIiLCJfdHlwZW9mMiIsImF0dHJpYnV0aW9ucyIsIm1ldGFKc29uIiwibWF4Wm9vbSIsIm1pblpvb20iLCJtdnRNZXRhZGF0YSIsInBtVGlsZU1ldGFkYXRhIiwiSlNPTiIsInBhcnNlIiwiZXJyIiwiYm91bmRpbmdCb3giLCJmbGF0IiwiY2VudGVyWm9vbSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzYWZlUGFyc2VGbG9hdCIsImRlc2NyaXB0aW9uIiwidGlsZWpzb24iLCJsYXllcnMiLCJfcG1UaWxlTWV0YWRhdGEkdGlsZWozIiwicG1UaWxlc0xheWVyVG9UaXBwZWNhbm9lTGF5ZXIiLCJjb2xsZWN0QXR0cmlidXRlcyIsImh0bWxBdHRyaWJ1dGlvbiIsInBhcnNlTWV0YUpzb24iLCJpbnB1dCIsImlzTmFOIiwidGlsZXN0YXRzIiwiZ2V0VGltZUFuaW1hdGlvbkRvbWFpbiIsIm1hcHBlZFZhbHVlIiwidGltZVN0ZXBzIiwidW5pcSIsInNvcnQiLCJhc2NlbmRpbmciLCJub3ROdWxsT3JVbmRlZmluZWQiLCJkb21haW4iLCJkdXJhdGlvbiIsImNsYW1wZWQiLCJjbGFtcCIsInBtVGlsZVR5cGVUb0F0dHJNYXAiLCJmbG9hdDMyIiwic3RyaW5nIiwidXRmOCIsIm91dExheWVycyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGF5ZXIiLCJfcmVmMiIsIl9yZWYyJGZpZWxkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfcG1GaWVsZCR2YWx1ZXMiLCJwbUZpZWxkIiwiYXR0cmlidXRlIiwiY291bnQiLCJ1bmlxdWVWYWx1ZUNvdW50IiwidmFsdWVzIiwibWluIiwibWF4IiwiYXR0cmlidXRlcyIsImluZGV4ZWRBdHRyaWJ1dGVzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9yZWYzIiwiX3JlZjMkYXR0cmlidXRlcyIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJhdHRyIiwiZm5hbWUiLCJhdHRyaWJ1dGVUb0ZpZWxkIiwibWVyZ2VBdHRyaWJ1dGVEb21haW4iLCJfaSIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheTIiLCJhdHRycyIsIl9wYXJzZUluZGV4ZWRGaWVsZCIsInBhcnNlSW5kZXhlZEZpZWxkIiwiaW5kZXhlZEZpZWxkIiwidW5pZGVudGlmaWVkIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsInVuaWRlbnRpZmllZEF0dHIiLCJnZXRJbmRleEtleUZyb21GaWVsZE5hbWUiLCJmaWVsZCIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJmaWVsZE5hbWUiLCJpbmRleEtleSIsImFuYWx5emVkVHlwZSIsImNvbnRhaW5WYWxpZFRpbWUiLCJpZCIsImluZGV4QnkiLCJmb3JtYXQiLCJhbmFseXplclR5cGVUb0ZpZWxkVHlwZSIsImZpZWxkVHMiLCJlcG9jaCIsInRpbWVUb1VuaXhNaWxsaSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsInRpbWVEb21haW4iLCJjb21wYXJlIiwibnVtMSIsIm51bTIiLCJvcGVyYXRvciIsIk1hdGgiLCJOYU4iLCJnZXRGaWx0ZXJQcm9wcyIsImZpZWxkVHlwZSIsInJlYWwiLCJpbnRlZ2VyIiwiX2dldEF0dHJpYnV0ZURvbWFpbiIsImdldEF0dHJpYnV0ZURvbWFpbiIsIl9nZXRBdHRyaWJ1dGVEb21haW4yIiwiZGlmZiIsInN0ZXAiLCJnZXROdW1lcmljU3RlcFNpemUiLCJmb3JtYXROdW1iZXJCeVN0ZXAiLCJmaWx0ZXJQcm9wcyIsIkZJTFRFUl9UWVBFUyIsInJhbmdlIiwidHlwZU9wdGlvbnMiLCJncHUiLCJzZWxlY3QiLCJtdWx0aVNlbGVjdCIsImZpZWxkVHlwZXMiLCJhdHRyaWJ1dGVUeXBlVG9GaWVsZFR5cGUiLCJfZmllbGQkbWV0YWRhdGEiLCJfZmllbGQkZmlsdGVyUHJvcHMiLCJhdHRyVHlwZU1hcCIsIm51bWJlciIsImFuYWx5emVyVHlwZSIsIkRBVEFfVFlQRVMiLCJGTE9BVCIsIm51bWVyaWMiLCJTVFJJTkciLCJ2YWNoYXIiLCJJTlQiLCJpbnQ0IiwiQk9PTEVBTiIsImJvb2wiLCJhVHlwZSIsInRvTG93ZXJDYXNlIiwiQ29uc29sZSIsIndhcm4iLCJtYXRjaERhdGFzZXRUeXBlIiwiY29uZmlnIiwiZGF0YUlkIiwic3VwcG9ydGVkRGF0YXNldFR5cGVzIiwiaW5jbHVkZXMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGlsZXNldC92ZWN0b3ItdGlsZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2FzY2VuZGluZ30gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnO1xuaW1wb3J0IHtEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcblxuaW1wb3J0IHtUaWxlSlNPTn0gZnJvbSAnQGxvYWRlcnMuZ2wvbXZ0JztcbmltcG9ydCB7UE1UaWxlc01ldGFkYXRhfSBmcm9tICdAbG9hZGVycy5nbC9wbXRpbGVzJztcblxuaW1wb3J0IHtcbiAgYW5hbHl6ZXJUeXBlVG9GaWVsZFR5cGUsXG4gIGNvbnRhaW5WYWxpZFRpbWUsXG4gIG5vdE51bGxvclVuZGVmaW5lZCBhcyBub3ROdWxsT3JVbmRlZmluZWQsXG4gIHBhcnNlVXJpXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RGF0YXNldFR5cGUsIEFMTF9GSUVMRF9UWVBFUywgRklMVEVSX1RZUEVTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBGaWx0ZXJQcm9wcyxcbiAgTnVtZXJpY0ZpZWxkRmlsdGVyUHJvcHMsXG4gIEJvb2xlYW5GaWVsZEZpbHRlclByb3BzLFxuICBTdHJpbmdGaWVsZEZpbHRlclByb3BzLFxuICBLZXBsZXJUYWJsZSBhcyBLZXBsZXJEYXRhc2V0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtGaWVsZCBhcyBLZXBsZXJGaWVsZCwgS2VwbGVyTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtjbGFtcCwgZm9ybWF0TnVtYmVyQnlTdGVwLCBnZXROdW1lcmljU3RlcFNpemUsIHRpbWVUb1VuaXhNaWxsaX0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBnZXRMb2FkZXJPcHRpb25zID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG12dDoge1xuICAgICAgd29ya2VyVXJsOiBgaHR0cHM6Ly91bnBrZy5jb20vQGxvYWRlcnMuZ2wvbXZ0L2Rpc3QvbXZ0LXdvcmtlci5qc2BcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNUaWxlRGF0YXNldChkYXRhc2V0OiBLZXBsZXJEYXRhc2V0IHwge3R5cGU6IHN0cmluZ30pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oZGF0YXNldD8udHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpO1xufVxuXG50eXBlIFZlY3RvclRpbGVGaWVsZCA9IHtcbiAgYW5hbHl6ZXJUeXBlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgZm9ybWF0OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcztcbn07XG5cbmV4cG9ydCB0eXBlIFZlY3RvclRpbGVNZXRhZGF0YSA9IHtcbiAgYXR0cmlidXRpb25zPzogdW5rbm93bltdO1xuICBtZXRhSnNvbjogYW55IHwgbnVsbDtcbiAgYm91bmRzOiBudW1iZXJbXSB8IG51bGw7XG4gIGNlbnRlcjogbnVtYmVyW10gfCBudWxsO1xuICBtYXhab29tOiBudW1iZXIgfCBudWxsO1xuICBtaW5ab29tOiBudW1iZXIgfCBudWxsO1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZmllbGRzOiBWZWN0b3JUaWxlRmllbGRbXTtcbn07XG5cbnR5cGUgVGlsZXNldE1ldGFkYXRhID0gVmVjdG9yVGlsZU1ldGFkYXRhO1xuXG5leHBvcnQgdHlwZSBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGUgPSB7XG4gIGF0dHJpYnV0ZT86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHZhbHVlczogc3RyaW5nW10gfCBudW1iZXJbXTtcbn07XG5cbnR5cGUgVGlwcGVjYW5vZUxheWVyID0ge1xuICBhdHRyaWJ1dGVzPzogVGlwcGVjYW5vZUxheWVyQXR0cmlidXRlW107XG59O1xudHlwZSBUaWxlc2V0RnVuY3Rpb24gPSB7XG4gIGdldE1ldGFVcmw6IChzOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGw7XG4gIHBhcnNlTWV0YWRhdGE6IChkOiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IFRpbGVzZXRNZXRhZGF0YSB8IG51bGw7XG59O1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC90aWxlanNvbi1zcGVjL3RyZWUvbWFzdGVyLzIuMi4wXG5mdW5jdGlvbiBpc0xhdChudW06IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bSkgJiYgbnVtIDw9IDkwICYmIG51bSA+PSAtOTA7XG59XG5mdW5jdGlvbiBpc0xuZyhudW06IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bSkgJiYgbnVtIDw9IDE4MCAmJiBudW0gPj0gLTE4MDtcbn1cbmZ1bmN0aW9uIGlzWm9vbShudW06IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bSkgJiYgbnVtID49IDAgJiYgbnVtIDw9IDIyO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5T3JTdHJpbmcoZGF0YTogc3RyaW5nIHwgbnVtYmVyW10pOiBudW1iZXJbXSB8IG51bGwge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRhdGEuc3BsaXQoJywnKS5tYXAocGFyc2VGbG9hdCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNlbnRlcihjZW50ZXI6IHN0cmluZyB8IG51bWJlcltdKTogbnVtYmVyW10gfCBudWxsIHtcbiAgLy8gc3VwcG9ydGVkIGZvcm1hdHNcbiAgLy8gc3RyaW5nOiBcIi05Ni42NTc3MTUsNDAuMTI2MTI3LC05MC4xNDAwNjEsNDMuNTE2Njg5XCIsXG4gIC8vIGFycmF5OiBbLTkxLjUwNTEyNyw0MS42MTU0NDIsMTRdXG4gIGNvbnN0IHJlc3VsdCA9IGZyb21BcnJheU9yU3RyaW5nKGNlbnRlcik7XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KHJlc3VsdCkgJiZcbiAgICByZXN1bHQubGVuZ3RoID09PSAzICYmXG4gICAgaXNMbmcocmVzdWx0WzBdKSAmJlxuICAgIGlzTGF0KHJlc3VsdFsxXSkgJiZcbiAgICBpc1pvb20ocmVzdWx0WzJdKVxuICApIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIGJvdW5kcyBzaG91bGQgYmUgW21pbkxuZywgbWluTGF0LCBtYXhMbmcsIG1heExhdF1cbiAqIEBwYXJhbSB7Kn0gYm91bmRzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQm91bmRzKGJvdW5kczogc3RyaW5nIHwgbnVtYmVyW10pOiBudW1iZXJbXSB8IG51bGwge1xuICAvLyBzdXBwb3J0ZWQgZm9ybWF0c1xuICAvLyBzdHJpbmc6IFwiLTk2LjY1NzcxNSw0MC4xMjYxMjcsLTkwLjE0MDA2MSw0My41MTY2ODlcIixcbiAgLy8gYXJyYXk6IFsgLTE4MCwgLTg1LjA1MTEyODc3OTgwNjU5LCAxODAsIDg1LjA1MTEyODc3OTgwNjYgXVxuICBjb25zdCByZXN1bHQgPSBmcm9tQXJyYXlPclN0cmluZyhib3VuZHMpO1xuICAvLyB2YWxpZGF0ZSBib3VuZHNcbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJlxuICAgIHJlc3VsdC5sZW5ndGggPT09IDQgJiZcbiAgICBbcmVzdWx0WzBdLCByZXN1bHRbMl1dLmV2ZXJ5KGlzTG5nKSAmJlxuICAgIFtyZXN1bHRbMV0sIHJlc3VsdFszXV0uZXZlcnkoaXNMYXQpXG4gICkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IFhfUEFUVCA9IC9cXHt4XFx9LztcbmNvbnN0IFlfUEFUVCA9IC9cXHt5XFx9LztcbmNvbnN0IFpfUEFUVCA9IC9cXHt6XFx9LztcblxuZnVuY3Rpb24gaXNGdWxseVF1YWxpZmllZFRpbGVVcmwodGlsZVVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBYX1BBVFQudGVzdCh0aWxlVXJsKSAmJiBZX1BBVFQudGVzdCh0aWxlVXJsKSAmJiBaX1BBVFQudGVzdCh0aWxlVXJsKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGlsZSBVUkxcbiAqIEBwYXJhbSAge3N0cmluZ30gdGlsZVVybCBJbml0aWFsIHRpbGUgVVJMLCB3aGljaCBtYXkgYmUgZWl0aGVyIHRoZSByb290IFVSTCBmb3IgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZXNldCBvciBhIGZ1bGx5IHF1YWxpZmllZCB0ZW1wbGF0ZVxuICogQHBhcmFtICB7ZnVuY3Rpb259IHZhbGlkYXRlVXJsIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRpbGUgVVJMXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gICAgRnVsbHkgcXVhbGlmaWVkIHRpbGUgVVJMIHRlbXBsYXRlLCBvciBudWxsIGlmIGlucHV0IGRvZXMgbm90XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyIHRvIGJlIGEgdmFsaWQgVVJMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaWxlVXJsKFxuICB0aWxlVXJsOiBzdHJpbmcsXG4gIHZhbGlkYXRlVXJsOiAoczogc3RyaW5nKSA9PiBib29sZWFuID0gaXNGdWxseVF1YWxpZmllZFRpbGVVcmxcbik6IHN0cmluZyB8IG51bGwge1xuICAvLyBDaGVjayBmb3IgYSB2YWxpZCBVUkwuIElkZWFsbHkgd2UnZCBoYXZlIGEgc2ltcGxlIG1ldGhvZCBoZXJlLlxuICBjb25zdCB1cmlQYXJ0cyA9IHBhcnNlVXJpKHRpbGVVcmwpO1xuICBpZiAoIXVyaVBhcnRzLnByb3RvY29sIHx8ICF1cmlQYXJ0cy5ob3N0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHZhbGlkYXRlVXJsKHRpbGVVcmwpKSB7XG4gICAgcmV0dXJuIHRpbGVVcmw7XG4gIH1cbiAgcmV0dXJuIGAke3RpbGVVcmwucmVwbGFjZSgvXFwvJC8sICcnKX0ve3p9L3t4fS97eX0ucGJmYDtcbn1cblxuLyoqXG4gKiBNYXAgb2YgdXRpbCBmdW5jdGlvbnMgZm9yIGRpZmZlcmVudCB0aWxlc2V0IHR5cGVzLCBrZXllZCBieSBob3N0XG4gKi9cbmNvbnN0IFRJTEVTRVRfRlVOQ1RJT05TOiB7W2tleTogc3RyaW5nXTogVGlsZXNldEZ1bmN0aW9ufSA9IHtcbiAgJ2FwaS5tYXBib3guY29tJzoge1xuICAgIGdldE1ldGFVcmw6IGdldE1ldGFVcmxNYXBib3gsXG4gICAgcGFyc2VNZXRhZGF0YTogcGFyc2VNZXRhZGF0YVRpbGVKU09OXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBnZXRNZXRhVXJsOiBnZXRNZXRhVXJsVGlwcGVjYW5vZSxcbiAgICBwYXJzZU1ldGFkYXRhOiBwYXJzZU1ldGFkYXRhVGlsZUpTT05cbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0VGlsZXNldEZ1bmN0aW9ucyh0aWxlVXJsOiBzdHJpbmcgfCBudWxsKTogVGlsZXNldEZ1bmN0aW9uIHtcbiAgbGV0IGhvc3QgPSAnJztcbiAgdHJ5IHtcbiAgICBob3N0ID0gbmV3IFVSTCh0aWxlVXJsIHx8ICcnKS5ob3N0bmFtZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICByZXR1cm4gVElMRVNFVF9GVU5DVElPTlNbaG9zdF0gfHwgVElMRVNFVF9GVU5DVElPTlMuZGVmYXVsdDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1ldGFkYXRhIFVSTCBmb3IgYSBnaXZlbiB0aWxlc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhVXJsKHRpbGVVcmw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gZ2V0VGlsZXNldEZ1bmN0aW9ucyh0aWxlVXJsKS5nZXRNZXRhVXJsKHRpbGVVcmwpO1xufVxudHlwZSBQYXJzZU1ldGFkYXRhT3B0aW9uID0ge1xuICB0aWxlVXJsPzogc3RyaW5nIHwgbnVsbDtcbn07XG4vKipcbiAqIFBhcnNlIHRoZSBtZXRhZGF0YSBmb3IgYSBnaXZlbiB0aWxlc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZlY3Rvck1ldGFkYXRhKFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICBtZXRhZGF0YTogUE1UaWxlc01ldGFkYXRhIHwgVGlsZUpTT04sXG4gIG9wdGlvbj86IFBhcnNlTWV0YWRhdGFPcHRpb25cbik6IFRpbGVzZXRNZXRhZGF0YSB8IG51bGwge1xuICBjb25zdCB7dGlsZVVybCA9ICcnfSA9IG9wdGlvbiB8fCB7fTtcbiAgcmV0dXJuIGdldFRpbGVzZXRGdW5jdGlvbnModGlsZVVybCkucGFyc2VNZXRhZGF0YShtZXRhZGF0YSk7XG59XG5cbmNvbnN0IE1BUEJPWF9VUkxfUEFUVCA9IC9cXC9cXHt6XFx9XFwvXFx7eFxcfVxcL1xce3lcXH1cXC5tdnQvO1xuXG5mdW5jdGlvbiBnZXRNZXRhVXJsTWFwYm94KHRpbGVVcmwgPSAnJyk6IHN0cmluZyB7XG4gIHJldHVybiB0aWxlVXJsLnJlcGxhY2UoTUFQQk9YX1VSTF9QQVRULCAnLmpzb24nKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YVRpbGVKU09OKG1ldGFkYXRhOiBQTVRpbGVzTWV0YWRhdGEgfCBUaWxlSlNPTik6IFRpbGVzZXRNZXRhZGF0YSB8IG51bGwge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1ldGFkYXRhVGlwcGVjYW5vZUZyb21EYXRhU291cmNlKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuICAvLyBGaWVsZHMgYWxyZWFkeSBwYXJzZWQgZnJvbSBganNvbmAgcHJvcGVydHlcbiAgaWYgKHBhcnNlZC5maWVsZHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBnZXRNZXRhVXJsVGlwcGVjYW5vZSh0aWxlVXJsKSB7XG4gIGNvbnN0IHVybCA9IGdldFRpbGVVcmwodGlsZVVybCk7XG4gIGlmICghdXJsKSByZXR1cm4gbnVsbDtcbiAgLy8gYXNzdW1lcyB0aGUgc3RydWN0dXJlIDx1cmxfYmFzZT4ve3p9Li4uXG4gIGNvbnN0IGJhc2VVcmwgPSB1cmwuc3BsaXQoWl9QQVRUKVswXS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICByZXR1cm4gYCR7YmFzZVVybH0vbWV0YWRhdGEuanNvbmA7XG59XG5cbi8qKlxuICogU3BlY2lhbCBwYXJzaW5nIGZvciBtZXRhZGF0YSByZXR1cm5lZCBieSBNVlRTb3VyY2UgYW5kIFBNVGlsZXNTb3VyY2UuXG4gKiBAcGFyYW0gbWV0YWRhdGEgVGlsZXNldCBtZXRhZGF0YSBwYXJzZWQgYnkgYSBEYXRhU291Y2VcbiAqIEByZXR1cm5zIE1ldGFkYXRhIGluIEtlcGxlci1mcmllbmRseSBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWV0YWRhdGFUaXBwZWNhbm9lRnJvbURhdGFTb3VyY2UoXG4gIG1ldGFkYXRhOiBQTVRpbGVzTWV0YWRhdGEgfCBUaWxlSlNPTiB8IG51bGxcbik6IFRpbGVzZXRNZXRhZGF0YSB8IG51bGwge1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCByZXN1bHQ6IFRpbGVzZXRNZXRhZGF0YSA9IHtcbiAgICBhdHRyaWJ1dGlvbnM6IFtdLFxuICAgIG1ldGFKc29uOiBudWxsLFxuICAgIGJvdW5kczogbnVsbCxcbiAgICBjZW50ZXI6IG51bGwsXG4gICAgbWF4Wm9vbTogbnVsbCxcbiAgICBtaW5ab29tOiBudWxsLFxuICAgIGZpZWxkczogW11cbiAgfTtcblxuICBjb25zdCBtdnRNZXRhZGF0YSA9IG1ldGFkYXRhIGFzIFRpbGVKU09OO1xuICBjb25zdCBwbVRpbGVNZXRhZGF0YSA9IG1ldGFkYXRhIGFzIFBNVGlsZXNNZXRhZGF0YTtcblxuICAvLyB0cnkgdG8gcGFyc2UgbWV0YUpzb25cbiAgaWYgKHR5cGVvZiBtdnRNZXRhZGF0YS5tZXRhSnNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0Lm1ldGFKc29uID0gSlNPTi5wYXJzZShtdnRNZXRhZGF0YS5tZXRhSnNvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBtdnRNZXRhZGF0YS5tZXRhSnNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXN1bHQubWV0YUpzb24gPSBtdnRNZXRhZGF0YS5tZXRhSnNvbjtcbiAgfVxuXG4gIHJlc3VsdC5ib3VuZHMgPSBwYXJzZUJvdW5kcyhcbiAgICBBcnJheS5pc0FycmF5KG1ldGFkYXRhLmJvdW5kaW5nQm94KSA/IG1ldGFkYXRhLmJvdW5kaW5nQm94LmZsYXQoKSA6ICcnXG4gICk7XG5cbiAgLy8gUE1UaWxlU291cmNlIGhhcyBjZW50ZXJab29tIGFuZCBjZW50ZXIgW2xvbiwgbGF0XSwgTVZUU291cmNlIC0gW2xvbiwgbGF0LCB6b29tXVxuICBjb25zdCBjZW50ZXIgPVxuICAgIHBtVGlsZU1ldGFkYXRhLmNlbnRlclpvb20gIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KG1ldGFkYXRhLmNlbnRlcilcbiAgICAgID8gWy4uLm1ldGFkYXRhLmNlbnRlciwgcG1UaWxlTWV0YWRhdGEuY2VudGVyWm9vbV1cbiAgICAgIDogbWV0YWRhdGEuY2VudGVyO1xuICByZXN1bHQuY2VudGVyID0gcGFyc2VDZW50ZXIoY2VudGVyIHx8ICcnKTtcblxuICByZXN1bHQubWF4Wm9vbSA9IHNhZmVQYXJzZUZsb2F0KG1ldGFkYXRhLm1heFpvb20pO1xuICByZXN1bHQubWluWm9vbSA9IHNhZmVQYXJzZUZsb2F0KG1ldGFkYXRhLm1pblpvb20pO1xuICByZXN1bHQubmFtZSA9IG1ldGFkYXRhLm5hbWUgfHwgJyc7XG4gIHJlc3VsdC5kZXNjcmlwdGlvbiA9IG12dE1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8IHBtVGlsZU1ldGFkYXRhLnRpbGVqc29uPy5kZXNjcmlwdGlvbiB8fCAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShwbVRpbGVNZXRhZGF0YS50aWxlanNvbj8ubGF5ZXJzKSkge1xuICAgIGNvbnN0IGxheWVycyA9IHBtVGlsZXNMYXllclRvVGlwcGVjYW5vZUxheWVyKHBtVGlsZU1ldGFkYXRhLnRpbGVqc29uPy5sYXllcnMpO1xuICAgIHJlc3VsdC5maWVsZHMgPSBjb2xsZWN0QXR0cmlidXRlcyhsYXllcnMpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobXZ0TWV0YWRhdGEubGF5ZXJzKSkge1xuICAgIGNvbnN0IGxheWVycyA9IHBtVGlsZXNMYXllclRvVGlwcGVjYW5vZUxheWVyKG12dE1ldGFkYXRhLmxheWVycyk7XG4gICAgcmVzdWx0LmZpZWxkcyA9IGNvbGxlY3RBdHRyaWJ1dGVzKGxheWVycyk7XG4gIH1cblxuICByZXN1bHQgPSB7XG4gICAgLi4ucmVzdWx0LFxuICAgIGF0dHJpYnV0aW9uczpcbiAgICAgIHBtVGlsZU1ldGFkYXRhLmF0dHJpYnV0aW9ucyB8fFxuICAgICAgKG12dE1ldGFkYXRhLmh0bWxBdHRyaWJ1dGlvbiA/IFttdnRNZXRhZGF0YS5odG1sQXR0cmlidXRpb25dIDogdW5kZWZpbmVkKSB8fFxuICAgICAgW10sXG4gICAgLi4ucGFyc2VNZXRhSnNvbihyZXN1bHQubWV0YUpzb24pXG4gIH07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc2FmZVBhcnNlRmxvYXQoaW5wdXQ6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gcGFyc2VGbG9hdChpbnB1dCkgOiB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInID8gaW5wdXQgOiBudWxsO1xuICByZXR1cm4gcmVzdWx0ID09PSBudWxsIHx8IGlzTmFOKHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBwYXJzZU1ldGFKc29uKG1ldGFKc29uOiBhbnkpOiB7ZmllbGRzOiBWZWN0b3JUaWxlRmllbGRbXX0gfCBudWxsIHtcbiAgaWYgKCFtZXRhSnNvbiB8fCB0eXBlb2YgbWV0YUpzb24gIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAobWV0YUpzb24udGlsZXN0YXRzICYmIEFycmF5LmlzQXJyYXkobWV0YUpzb24udGlsZXN0YXRzLmxheWVycykpIHtcbiAgICAvLyB3ZSBhcmUgaW4gbHVjayFcbiAgICByZXR1cm4ge2ZpZWxkczogY29sbGVjdEF0dHJpYnV0ZXMobWV0YUpzb24udGlsZXN0YXRzLmxheWVycyl9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lQW5pbWF0aW9uRG9tYWluKG1hcHBlZFZhbHVlOiBudW1iZXJbXSk6IHtcbiAgZG9tYWluOiBudW1iZXJbXTtcbiAgdGltZVN0ZXBzOiBudW1iZXJbXTtcbiAgbWFwcGVkVmFsdWU6IG51bWJlcltdO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufSB7XG4gIGNvbnN0IHRpbWVTdGVwcyA9IHVuaXEobWFwcGVkVmFsdWUpLnNvcnQoYXNjZW5kaW5nKS5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcblxuICBjb25zdCBkb21haW4gPSBbdGltZVN0ZXBzWzBdLCB0aW1lU3RlcHNbdGltZVN0ZXBzLmxlbmd0aCAtIDFdXTtcblxuICAvLyBpZiB0YWtzIDEwICogMTAwMCBtcyB0byBmaW5pc2ggdGhlIGVudGlyZSBhbmltYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSAxMDAwMCAvIHRpbWVTdGVwcy5sZW5ndGg7XG4gIGNvbnN0IGNsYW1wZWQgPSBjbGFtcChbMTAwLCAyMDAwXSwgZHVyYXRpb24pO1xuXG4gIHJldHVybiB7ZG9tYWluLCB0aW1lU3RlcHMsIGR1cmF0aW9uOiBjbGFtcGVkLCBtYXBwZWRWYWx1ZX07XG59XG5cbmNvbnN0IHBtVGlsZVR5cGVUb0F0dHJNYXAgPSB7XG4gIGZsb2F0MzI6ICdudW1iZXInLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICB1dGY4OiAnc3RyaW5nJyxcbiAgaW50OiAnaW50JyxcbiAgYm9vbGVhbjogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSBUaWxlSlNPTlsnbGF5ZXJzJ10gYmFjayB0byBUaXBwZWNhbm9lTGF5ZXJcbiAqL1xuZnVuY3Rpb24gcG1UaWxlc0xheWVyVG9UaXBwZWNhbm9lTGF5ZXIobGF5ZXJzOiBUaWxlSlNPTlsnbGF5ZXJzJ10pOiBUaXBwZWNhbm9lTGF5ZXJbXSB7XG4gIGlmICghbGF5ZXJzKSByZXR1cm4gW107XG5cbiAgY29uc3Qgb3V0TGF5ZXJzOiBUaXBwZWNhbm9lTGF5ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgIGNvbnN0IHtmaWVsZHMgPSBbXX0gPSBsYXllciB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IHBtRmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSB7XG4gICAgICAgIGF0dHJpYnV0ZTogcG1GaWVsZC5uYW1lLFxuICAgICAgICB0eXBlOiBwbVRpbGVUeXBlVG9BdHRyTWFwW3BtRmllbGQudHlwZV0sXG4gICAgICAgIGNvdW50OiBwbUZpZWxkLnVuaXF1ZVZhbHVlQ291bnQsXG4gICAgICAgIHZhbHVlczogKHBtRmllbGQudmFsdWVzID8/IFtdKSBhcyBudW1iZXJbXSB8IHN0cmluZ1tdLFxuICAgICAgICBtaW46IHBtRmllbGQubWluLFxuICAgICAgICBtYXg6IHBtRmllbGQubWF4XG4gICAgICB9O1xuXG4gICAgICBvdXRMYXllcnMucHVzaCh7XG4gICAgICAgIGF0dHJpYnV0ZXM6IFthdHRyaWJ1dGVdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dExheWVycztcbn1cblxuZnVuY3Rpb24gY29sbGVjdEF0dHJpYnV0ZXMobGF5ZXJzOiBUaXBwZWNhbm9lTGF5ZXJbXSA9IFtdKTogVmVjdG9yVGlsZUZpZWxkW10ge1xuICBjb25zdCBmaWVsZHMgPSB7fTtcbiAgY29uc3QgaW5kZXhlZEF0dHJpYnV0ZXM6IHtba2V5OiBzdHJpbmddOiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGVbXX0gPSB7fTtcblxuICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgIGNvbnN0IHthdHRyaWJ1dGVzID0gW119ID0gbGF5ZXIgfHwge307XG4gICAgZm9yIChjb25zdCBhdHRyIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBhdHRyLmF0dHJpYnV0ZTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1kZXB0aFxuICAgICAgICBpZiAobmFtZS5zcGxpdCgnfCcpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBpbmRleGVkIGZpZWxkXG4gICAgICAgICAgY29uc3QgZm5hbWUgPSBuYW1lLnNwbGl0KCd8JylbMF07XG4gICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZXNbZm5hbWVdID0gaW5kZXhlZEF0dHJpYnV0ZXNbZm5hbWVdIHx8IFtdO1xuICAgICAgICAgIGluZGV4ZWRBdHRyaWJ1dGVzW2ZuYW1lXS5wdXNoKGF0dHIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFmaWVsZHNbbmFtZV0pIHtcbiAgICAgICAgICBmaWVsZHNbbmFtZV0gPSBhdHRyaWJ1dGVUb0ZpZWxkKGF0dHIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lcmdlQXR0cmlidXRlRG9tYWluKGZpZWxkc1tuYW1lXSwgYXR0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBwYXJzZSBpbmRleGVkIGF0dHJpYnV0ZSwgYW5kIHB1dCBpbmRleCBrZXkgdW5pZGVudGlmaWVkIGJhY2sgYXMgbm9ybWFsIGZpZWxkXG4gIGZvciAoY29uc3QgW25hbWUsIGF0dHJzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleGVkQXR0cmlidXRlcykpIHtcbiAgICBjb25zdCB7aW5kZXhlZEZpZWxkLCB1bmlkZW50aWZpZWR9ID0gcGFyc2VJbmRleGVkRmllbGQobmFtZSwgYXR0cnMpO1xuICAgIGZpZWxkc1tpbmRleGVkRmllbGQubmFtZV0gPSBpbmRleGVkRmllbGQ7XG4gICAgZm9yIChjb25zdCB1bmlkZW50aWZpZWRBdHRyIG9mIHVuaWRlbnRpZmllZCkge1xuICAgICAgaWYgKHVuaWRlbnRpZmllZEF0dHIuYXR0cmlidXRlKSB7XG4gICAgICAgIGZpZWxkc1t1bmlkZW50aWZpZWRBdHRyLmF0dHJpYnV0ZV0gPVxuICAgICAgICAgIGZpZWxkc1t1bmlkZW50aWZpZWRBdHRyLmF0dHJpYnV0ZV0gfHwgYXR0cmlidXRlVG9GaWVsZCh1bmlkZW50aWZpZWRBdHRyKTtcbiAgICAgICAgbWVyZ2VBdHRyaWJ1dGVEb21haW4oZmllbGRzW3VuaWRlbnRpZmllZEF0dHIuYXR0cmlidXRlXSwgdW5pZGVudGlmaWVkQXR0cik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5kZXhLZXlGcm9tRmllbGROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gbmFtZSAmJiBuYW1lLnNwbGl0KCd8JykubGVuZ3RoID4gMSA/IG5hbWUuc3BsaXQoJ3wnKVsxXSA6IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIEZpZWxkSW5kZXhCeSA9IHtcbiAgZm9ybWF0OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbWFwcGVkVmFsdWU6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG59O1xuXG5mdW5jdGlvbiBwYXJzZUluZGV4ZWRGaWVsZChcbiAgbmFtZTogc3RyaW5nLFxuICBhdHRyczogVGlwcGVjYW5vZUxheWVyQXR0cmlidXRlW11cbik6IHtcbiAgdW5pZGVudGlmaWVkOiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGVbXTtcbiAgaW5kZXhlZEZpZWxkOiBWZWN0b3JUaWxlRmllbGQ7XG59IHtcbiAgY29uc3QgdW5pZGVudGlmaWVkOiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGVbXSA9IFtdO1xuICAvLyBhbmFseXplIHRpbWUgZm9ybWF0XG4gIGxldCBmaWVsZDtcblxuICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cnMpIHtcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBhdHRyLmF0dHJpYnV0ZTtcbiAgICBjb25zdCBpbmRleEtleSA9IGdldEluZGV4S2V5RnJvbUZpZWxkTmFtZShmaWVsZE5hbWUgfHwgJycpO1xuICAgIGNvbnN0IGFuYWx5emVkVHlwZSA9IGluZGV4S2V5ICYmIGNvbnRhaW5WYWxpZFRpbWUoW2luZGV4S2V5XSk7XG4gICAgaWYgKGFuYWx5emVkVHlwZSkge1xuICAgICAgZmllbGQgPSBmaWVsZCB8fCB7XG4gICAgICAgIC4uLmF0dHJpYnV0ZVRvRmllbGQoYXR0ciksXG4gICAgICAgIC8vIG92ZXJpZGUgbmFtZSBhbmQgaWQgdG8gdHJ1bmNhdGVkIG5hbWVcbiAgICAgICAgbmFtZSxcbiAgICAgICAgaWQ6IG5hbWUsXG4gICAgICAgIGluZGV4Qnk6IHtcbiAgICAgICAgICBmb3JtYXQ6IGFuYWx5emVkVHlwZS5mb3JtYXQsXG4gICAgICAgICAgdHlwZTogYW5hbHl6ZXJUeXBlVG9GaWVsZFR5cGUoYW5hbHl6ZWRUeXBlLnR5cGUpLFxuICAgICAgICAgIG1hcHBlZFZhbHVlOiB7fVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgbWVyZ2VBdHRyaWJ1dGVEb21haW4oZmllbGQsIGF0dHIpO1xuICAgICAgLy8gc2F2ZSBlcG9jaCB0aW1lIGluIG1hcHBlZFZhbHVlXG4gICAgICBsZXQgZmllbGRUczogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IGluZGV4S2V5O1xuICAgICAgaWYgKGFuYWx5emVkVHlwZS5mb3JtYXQgPT09ICd4JyB8fCBhbmFseXplZFR5cGUuZm9ybWF0ID09PSAnWCcpIHtcbiAgICAgICAgZmllbGRUcyA9IE51bWJlcihpbmRleEtleSk7XG4gICAgICB9XG4gICAgICBjb25zdCBlcG9jaCA9IHRpbWVUb1VuaXhNaWxsaShmaWVsZFRzLCBhbmFseXplZFR5cGUuZm9ybWF0KTtcbiAgICAgIGlmIChlcG9jaCkge1xuICAgICAgICBmaWVsZC5pbmRleEJ5Lm1hcHBlZFZhbHVlW2Vwb2NoXSA9IGZpZWxkTmFtZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8ga2V5IGlzIG5vdCB2YWxpZCB0aW1lc3RhbXBcbiAgICAgIHVuaWRlbnRpZmllZC5wdXNoKGF0dHIpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZC5pbmRleEJ5ICYmIGZpZWxkLmluZGV4QnkudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgIGZpZWxkLmluZGV4QnkudGltZURvbWFpbiA9IGdldFRpbWVBbmltYXRpb25Eb21haW4oXG4gICAgICBPYmplY3Qua2V5cyhmaWVsZC5pbmRleEJ5Lm1hcHBlZFZhbHVlKS5tYXAoTnVtYmVyKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge3VuaWRlbnRpZmllZCwgaW5kZXhlZEZpZWxkOiBmaWVsZH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUobnVtMTogbnVtYmVyIHwgdW5kZWZpbmVkLCBudW0yOiBudW1iZXIgfCB1bmRlZmluZWQsIG9wZXJhdG9yOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bTEpICYmIE51bWJlci5pc0Zpbml0ZShudW0yKVxuICAgID8gTWF0aFtvcGVyYXRvcl0obnVtMSBhcyBudW1iZXIsIG51bTIgYXMgbnVtYmVyKVxuICAgIDogTnVtYmVyLmlzRmluaXRlKG51bTEpXG4gICAgPyBudW0xXG4gICAgOiBOdW1iZXIuaXNGaW5pdGUobnVtMilcbiAgICA/IG51bTJcbiAgICA6IE5hTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclByb3BzKFxuICBmaWVsZFR5cGU6IHN0cmluZyxcbiAgYXR0cmlidXRlOiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGVcbik6IEZpbHRlclByb3BzIHtcbiAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6IHtcbiAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBnZXRBdHRyaWJ1dGVEb21haW4oZmllbGRUeXBlLCBhdHRyaWJ1dGUpO1xuICAgICAgY29uc3QgZGlmZiA9IG1heCAtIG1pbjtcbiAgICAgIGNvbnN0IHN0ZXAgPSBnZXROdW1lcmljU3RlcFNpemUoZGlmZikgfHwgMC4xO1xuICAgICAgY29uc3QgZG9tYWluID0gW1xuICAgICAgICBmb3JtYXROdW1iZXJCeVN0ZXAobWluLCBzdGVwLCAnZmxvb3InKSxcbiAgICAgICAgZm9ybWF0TnVtYmVyQnlTdGVwKG1heCwgc3RlcCwgJ2NlaWwnKVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGZpbHRlclByb3BzOiBOdW1lcmljRmllbGRGaWx0ZXJQcm9wcyA9IHtcbiAgICAgICAgZG9tYWluLFxuICAgICAgICB2YWx1ZTogZG9tYWluIGFzIFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5yYW5nZSxcbiAgICAgICAgdHlwZU9wdGlvbnM6IFtGSUxURVJfVFlQRVMucmFuZ2VdLFxuICAgICAgICBncHU6IHRydWUsXG4gICAgICAgIHN0ZXBcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmlsdGVyUHJvcHM7XG4gICAgfVxuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjoge1xuICAgICAgY29uc3QgZmlsdGVyUHJvcHM6IEJvb2xlYW5GaWVsZEZpbHRlclByb3BzID0ge1xuICAgICAgICBkb21haW46IFt0cnVlLCBmYWxzZV0sXG4gICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMuc2VsZWN0LFxuICAgICAgICBncHU6IHRydWVcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmlsdGVyUHJvcHM7XG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgLy8gQXNzdW1lIHN0cmluZyBmb3IgYWxsIG90aGVyIGZpZWxkc1xuICAgICAgY29uc3QgZmlsdGVyUHJvcHM6IFN0cmluZ0ZpZWxkRmlsdGVyUHJvcHMgPSB7XG4gICAgICAgIGRvbWFpbjogYXR0cmlidXRlLnZhbHVlcyBhcyBzdHJpbmdbXSxcbiAgICAgICAgdmFsdWU6IGF0dHJpYnV0ZS52YWx1ZXMgYXMgc3RyaW5nW10sXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdCxcbiAgICAgICAgZ3B1OiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaWx0ZXJQcm9wcztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0cmlidXRlVG9GaWVsZChhdHRyaWJ1dGU6IFRpcHBlY2Fub2VMYXllckF0dHJpYnV0ZSA9IHt2YWx1ZXM6IFtdfSk6IFZlY3RvclRpbGVGaWVsZCB7XG4gIC8vIGF0dHJpYnV0ZTogXCJfc2Vhc29uX3BlYWtzX2NvbG9yXCJcbiAgLy8gY291bnQ6IDEwMDBcbiAgLy8gbWF4OiAwLjk1XG4gIC8vIG1pbjogMC4yNDM3NVxuICAvLyB0eXBlOiBcIm51bWJlclwiXG4gIGNvbnN0IGZpZWxkVHlwZXMgPSBhdHRyaWJ1dGVUeXBlVG9GaWVsZFR5cGUoYXR0cmlidXRlLnR5cGUpO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGF0dHJpYnV0ZS5hdHRyaWJ1dGUgYXMgc3RyaW5nLFxuICAgIGlkOiBhdHRyaWJ1dGUuYXR0cmlidXRlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6ICcnLFxuICAgIGZpbHRlclByb3BzOiBnZXRGaWx0ZXJQcm9wcyhmaWVsZFR5cGVzLnR5cGUsIGF0dHJpYnV0ZSksXG4gICAgLi4uZmllbGRUeXBlc1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVEb21haW4odHlwZTogc3RyaW5nIHwgbnVsbCwgYXR0cmlidXRlOiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGUpOiBudW1iZXJbXSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiBbXG4gICAgICAgIE51bWJlci5pc0Zpbml0ZShhdHRyaWJ1dGUubWluKSA/IChhdHRyaWJ1dGUubWluIGFzIG51bWJlcikgOiBOYU4sXG4gICAgICAgIE51bWJlci5pc0Zpbml0ZShhdHRyaWJ1dGUubWF4KSA/IChhdHRyaWJ1dGUubWF4IGFzIG51bWJlcikgOiBOYU5cbiAgICAgIF07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuOlxuICAgICAgcmV0dXJuIFswLCAxXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFswLCAxXTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBmaWVsZCBUaGlzIGZ1bmN0aW9uIG11dGF0ZXMgdGhlIGZpZWxkIHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiBtZXJnZUF0dHJpYnV0ZURvbWFpbihmaWVsZDogS2VwbGVyRmllbGQsIGF0dHJpYnV0ZTogVGlwcGVjYW5vZUxheWVyQXR0cmlidXRlKTogdm9pZCB7XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjoge1xuICAgICAgY29uc3QgZG9tYWluID0gZmllbGQubWV0YWRhdGE/LmRvbWFpbiB8fCBmaWVsZC5maWx0ZXJQcm9wcz8uZG9tYWluO1xuICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICBkb21haW4ubWluID0gY29tcGFyZShhdHRyaWJ1dGUubWluLCBkb21haW5bMF0sICdtaW4nKTtcbiAgICAgICAgZG9tYWluLm1heCA9IGNvbXBhcmUoYXR0cmlidXRlLm1heCwgZG9tYWluWzFdLCAnbWF4Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxuLy8gcG9zc2libGUgdHlwZXMgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC90aXBwZWNhbm9lI21vZGlmeWluZy1mZWF0dXJlLWF0dHJpYnV0ZXNcbmNvbnN0IGF0dHJUeXBlTWFwID0ge1xuICBudW1iZXI6IHtcbiAgICB0eXBlOiBBTExfRklFTERfVFlQRVMucmVhbCxcbiAgICBhbmFseXplclR5cGU6IERBVEFfVFlQRVMuRkxPQVRcbiAgfSxcbiAgbnVtZXJpYzoge1xuICAgIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5yZWFsLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5GTE9BVFxuICB9LFxuICBzdHJpbmc6IHtcbiAgICB0eXBlOiBBTExfRklFTERfVFlQRVMuc3RyaW5nLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5TVFJJTkdcbiAgfSxcbiAgdmFjaGFyOiB7XG4gICAgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnN0cmluZyxcbiAgICBhbmFseXplclR5cGU6IERBVEFfVFlQRVMuU1RSSU5HXG4gIH0sXG4gIGZsb2F0OiB7XG4gICAgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnJlYWwsXG4gICAgYW5hbHl6ZXJUeXBlOiBEQVRBX1RZUEVTLkZMT0FUXG4gIH0sXG4gIGludDoge1xuICAgIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5JTlRcbiAgfSxcbiAgaW50NDoge1xuICAgIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5JTlRcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5CT09MRUFOXG4gIH0sXG4gIGJvb2w6IHtcbiAgICB0eXBlOiBBTExfRklFTERfVFlQRVMuYm9vbGVhbixcbiAgICBhbmFseXplclR5cGU6IERBVEFfVFlQRVMuQk9PTEVBTlxuICB9XG59O1xuXG5mdW5jdGlvbiBhdHRyaWJ1dGVUeXBlVG9GaWVsZFR5cGUoYVR5cGU/OiBzdHJpbmcpOiB7dHlwZTogc3RyaW5nOyBhbmFseXplclR5cGU6IHN0cmluZ30ge1xuICBjb25zdCB0eXBlID0gYVR5cGU/LnRvTG93ZXJDYXNlKCk7XG4gIGlmICghdHlwZSB8fCAhYXR0clR5cGVNYXBbdHlwZV0pIHtcbiAgICBDb25zb2xlLndhcm4oXG4gICAgICBgY2Fubm90IGNvbnZlcnQgYXR0cmlidXRlIHR5cGUgJHt0eXBlfSB0byBrZXBsZXIuZ2wgZGF0YSB0eXBlLCB1c2Ugc3RyaW5nIGJ5IGRlZmF1bHRgXG4gICAgKTtcbiAgICByZXR1cm4gYXR0clR5cGVNYXAuc3RyaW5nO1xuICB9XG5cbiAgcmV0dXJuIGF0dHJUeXBlTWFwW3R5cGVdO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIGRhdGFzZXQgY2FuIGJlIHVzZWQgYXMgc291cmNlIGRhdGEgZm9yIGEgbGF5ZXIuXG4gKiBAcGFyYW0gZGF0YXNldCBBIGRhdGFzZXQuXG4gKiBAcGFyYW0gbGF5ZXIgQSBsYXllci5cbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBhIGRhdGFzZXQgY2FuIGJlIHVzZWQgYXMgc291cmNlIGRhdGEgZm9yIGEgbGF5ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaERhdGFzZXRUeXBlKGRhdGFzZXQ6IEtlcGxlckRhdGFzZXQsIGxheWVyOiBLZXBsZXJMYXllcik6IGJvb2xlYW4ge1xuICAvLyBhbGxvdyBzZWxlY3Rpb24gaWYgdHlwZSBpcyBub3QgYXNzaWduZWQgeWV0XG4gIGlmICghbGF5ZXIudHlwZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIGFsbG93IHNlbGVjdGlvbiBpZiBpcyBjdXJyZW50IHNlbGVjdGVkIGRhdGFzZXRcbiAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXQuaWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBhbGxvdyBzZWxlY3Rpb24gaWYgbGF5ZXIgZG9lc24ndCBoYXZlIHN1cHBvcnRlZERhdGFzZXRUeXBlc1xuICBpZiAoIWxheWVyLnN1cHBvcnRlZERhdGFzZXRUeXBlcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBBcnJheS5pc0FycmF5KGxheWVyLnN1cHBvcnRlZERhdGFzZXRUeXBlcykgJiZcbiAgICBsYXllci5zdXBwb3J0ZWREYXRhc2V0VHlwZXMuaW5jbHVkZXMoZGF0YXNldC50eXBlIHx8ICcnKVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUosT0FBQTtBQUtBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQU1BLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQVNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQUFnRyxTQUFBUSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FB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
610
+ /**
611
+ * Extracts fields from a tile and updates the metadata object with found fields.
612
+ * Note: this function is for tilesets that don't include fields in metadata (most likely saved with older spec.).
613
+ * @param params.remoteTileFormat The format of the remote tile (MVT or PMTiles).
614
+ * @param params.tilesetUrl The URL of the tileset.
615
+ * @param params.metadataUrl The URL of the metadata.
616
+ * @param params.metadata The metadata object containing fields and tile properties.
617
+ */
618
+ var getFieldsFromTile = exports.getFieldsFromTile = /*#__PURE__*/function () {
619
+ var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref4) {
620
+ var remoteTileFormat, tilesetUrl, metadataUrl, metadata, _metadata$fields, _metadata$bounds, lon, lat, tileIndices, tileSource, tile, updatedFields;
621
+ return _regenerator["default"].wrap(function _callee$(_context) {
622
+ while (1) switch (_context.prev = _context.next) {
623
+ case 0:
624
+ remoteTileFormat = _ref4.remoteTileFormat, tilesetUrl = _ref4.tilesetUrl, metadataUrl = _ref4.metadataUrl, metadata = _ref4.metadata;
625
+ _context.prev = 1;
626
+ if (!(tilesetUrl && metadataUrl && metadata && ((_metadata$fields = metadata.fields) === null || _metadata$fields === void 0 ? void 0 : _metadata$fields.length) === 0 && metadata.minZoom && ((_metadata$bounds = metadata.bounds) === null || _metadata$bounds === void 0 ? void 0 : _metadata$bounds.length) === 4)) {
627
+ _context.next = 12;
628
+ break;
629
+ }
630
+ lon = (metadata.bounds[0] + metadata.bounds[2]) / 2;
631
+ lat = (metadata.bounds[1] + metadata.bounds[3]) / 2;
632
+ tileIndices = lonLatToTileIndex(lon, lat, metadata.minZoom);
633
+ tileSource = remoteTileFormat === _constants.RemoteTileFormat.MVT ? _mvt.MVTSource.createDataSource(decodeURIComponent(tilesetUrl), {
634
+ mvt: {
635
+ metadataUrl: decodeURIComponent(metadataUrl)
636
+ }
637
+ }) : _pmtiles.PMTilesSource.createDataSource(tilesetUrl, {});
638
+ _context.next = 9;
639
+ return tileSource.getTileData({
640
+ index: tileIndices
641
+ });
642
+ case 9:
643
+ tile = _context.sent;
644
+ updatedFields = tileToFields(tile).map(function (f) {
645
+ return _objectSpread(_objectSpread({}, f), {}, {
646
+ analyzerType: f.analyzerType || _constants.ALL_FIELD_TYPES.string,
647
+ id: f.id || f.name
648
+ });
649
+ });
650
+ metadata.fields = updatedFields;
651
+ case 12:
652
+ _context.next = 16;
653
+ break;
654
+ case 14:
655
+ _context.prev = 14;
656
+ _context.t0 = _context["catch"](1);
657
+ case 16:
658
+ case "end":
659
+ return _context.stop();
660
+ }
661
+ }, _callee, null, [[1, 14]]);
662
+ }));
663
+ return function getFieldsFromTile(_x) {
664
+ return _ref5.apply(this, arguments);
665
+ };
666
+ }();
667
+
668
+ /**
669
+ * Converts tile features into Kepler fields.
670
+ * @param tile The tile object containing features.
671
+ * @returns An array of Kepler fields derived from the tile's features.
672
+ */
673
+ var tileToFields = function tileToFields(tile) {
674
+ var _tile$features;
675
+ if ((tile === null || tile === void 0 || (_tile$features = tile.features) === null || _tile$features === void 0 ? void 0 : _tile$features.length) > 0) {
676
+ var header = Object.keys(tile.features[0].properties);
677
+ var output = tile.features.map(function (f) {
678
+ var obj = {};
679
+ header.forEach(function (columnName) {
680
+ obj[columnName] = f.properties[columnName];
681
+ });
682
+ return obj;
683
+ });
684
+ var fields = (0, _commonUtils.getFieldsFromData)(output, header);
685
+ // extra transformation of strings to numbers for tiles isn't implemented, so use string, not computed types
686
+ return fields.map(function (f) {
687
+ var forceString = (f.type === 'integer' || f.type === 'float') && typeof tile.features[0].properties[f.name] === 'string';
688
+ return _objectSpread(_objectSpread({}, f), {}, {
689
+ analyzerType: forceString ? _typeAnalyzer.DATA_TYPES.STRING : f.analyzerType,
690
+ type: forceString ? 'string' : f.type
691
+ });
692
+ });
693
+ }
694
+ return [];
695
+ };
696
+
697
+ /**
698
+ * Converts longitude, latitude, and zoom level into vector tile indices (x, y, z).
699
+ * @param lon Longitude in degrees, ranging from -180 to 180.
700
+ * @param lat Latitude in degrees, ranging from -90 to 90.
701
+ * @param zoom Zoom level (integer), where higher values provide more detail.
702
+ * @returns Tile indices with x and y coordinates and zoom level z.
703
+ */
704
+ function lonLatToTileIndex(lon, lat, zoom) {
705
+ if (lat < -85.0511 || lat > 85.0511) {
706
+ throw new Error('Latitude out of range. Must be between -85.0511 and 85.0511.');
707
+ }
708
+ if (zoom < 0) {
709
+ throw new Error('Zoom level must be a non-negative integer.');
710
+ }
711
+
712
+ // 2^zoom (number of tiles per axis at given zoom level)
713
+ var scale = 1 << zoom;
714
+ // Convert longitude to tile X
715
+ var x = Math.floor((lon + 180) / 360 * scale);
716
+ // Convert latitude to tile Y
717
+ var latRad = lat * Math.PI / 180;
718
+ var y = Math.floor((1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * scale);
719
+ return {
720
+ x: x,
721
+ y: y,
722
+ z: zoom
723
+ };
724
+ }
725
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZUFuYWx5emVyIiwicmVxdWlyZSIsIl9kM0FycmF5IiwiX2NvbnNvbGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9tdnQiLCJfcG10aWxlcyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRMb2FkZXJPcHRpb25zIiwiZXhwb3J0cyIsIm12dCIsIndvcmtlclVybCIsImlzVGlsZURhdGFzZXQiLCJkYXRhc2V0IiwiQm9vbGVhbiIsInR5cGUiLCJEYXRhc2V0VHlwZSIsIlZFQ1RPUl9USUxFIiwiaXNMYXQiLCJudW0iLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlzTG5nIiwiaXNab29tIiwiZnJvbUFycmF5T3JTdHJpbmciLCJkYXRhIiwic3BsaXQiLCJtYXAiLCJwYXJzZUZsb2F0IiwicGFyc2VDZW50ZXIiLCJjZW50ZXIiLCJyZXN1bHQiLCJwYXJzZUJvdW5kcyIsImJvdW5kcyIsImV2ZXJ5IiwiWF9QQVRUIiwiWV9QQVRUIiwiWl9QQVRUIiwiaXNGdWxseVF1YWxpZmllZFRpbGVVcmwiLCJ0aWxlVXJsIiwiZ2V0VGlsZVVybCIsInZhbGlkYXRlVXJsIiwidW5kZWZpbmVkIiwidXJpUGFydHMiLCJwYXJzZVVyaSIsInByb3RvY29sIiwiaG9zdCIsImNvbmNhdCIsInJlcGxhY2UiLCJUSUxFU0VUX0ZVTkNUSU9OUyIsImdldE1ldGFVcmwiLCJnZXRNZXRhVXJsTWFwYm94IiwicGFyc2VNZXRhZGF0YSIsInBhcnNlTWV0YWRhdGFUaWxlSlNPTiIsImdldE1ldGFVcmxUaXBwZWNhbm9lIiwiZ2V0VGlsZXNldEZ1bmN0aW9ucyIsIlVSTCIsImhvc3RuYW1lIiwiZXJyb3IiLCJwYXJzZVZlY3Rvck1ldGFkYXRhIiwibWV0YWRhdGEiLCJvcHRpb24iLCJfcmVmIiwiX3JlZiR0aWxlVXJsIiwiTUFQQk9YX1VSTF9QQVRUIiwiX3BhcnNlZCRmaWVsZHMiLCJwYXJzZWQiLCJwYXJzZU1ldGFkYXRhVGlwcGVjYW5vZUZyb21EYXRhU291cmNlIiwiZmllbGRzIiwidXJsIiwiYmFzZVVybCIsIl9wbVRpbGVNZXRhZGF0YSR0aWxlaiIsIl9wbVRpbGVNZXRhZGF0YSR0aWxlajIiLCJfdHlwZW9mMiIsImF0dHJpYnV0aW9ucyIsIm1ldGFKc29uIiwibWF4Wm9vbSIsIm1pblpvb20iLCJtdnRNZXRhZGF0YSIsInBtVGlsZU1ldGFkYXRhIiwiSlNPTiIsInBhcnNlIiwiZXJyIiwiYm91bmRpbmdCb3giLCJmbGF0IiwiY2VudGVyWm9vbSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzYWZlUGFyc2VGbG9hdCIsImRlc2NyaXB0aW9uIiwidGlsZWpzb24iLCJsYXllcnMiLCJfcG1UaWxlTWV0YWRhdGEkdGlsZWozIiwicG1UaWxlc0xheWVyVG9UaXBwZWNhbm9lTGF5ZXIiLCJjb2xsZWN0QXR0cmlidXRlcyIsImh0bWxBdHRyaWJ1dGlvbiIsInBhcnNlTWV0YUpzb24iLCJpbnB1dCIsImlzTmFOIiwidGlsZXN0YXRzIiwiZ2V0VGltZUFuaW1hdGlvbkRvbWFpbiIsIm1hcHBlZFZhbHVlIiwidGltZVN0ZXBzIiwidW5pcSIsInNvcnQiLCJhc2NlbmRpbmciLCJub3ROdWxsT3JVbmRlZmluZWQiLCJkb21haW4iLCJkdXJhdGlvbiIsImNsYW1wZWQiLCJjbGFtcCIsInBtVGlsZVR5cGVUb0F0dHJNYXAiLCJmbG9hdDMyIiwic3RyaW5nIiwidXRmOCIsIm91dExheWVycyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGF5ZXIiLCJfcmVmMiIsIl9yZWYyJGZpZWxkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfcG1GaWVsZCR2YWx1ZXMiLCJwbUZpZWxkIiwiYXR0cmlidXRlIiwiY291bnQiLCJ1bmlxdWVWYWx1ZUNvdW50IiwidmFsdWVzIiwibWluIiwibWF4IiwiYXR0cmlidXRlcyIsImluZGV4ZWRBdHRyaWJ1dGVzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9yZWYzIiwiX3JlZjMkYXR0cmlidXRlcyIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJhdHRyIiwiZm5hbWUiLCJhdHRyaWJ1dGVUb0ZpZWxkIiwibWVyZ2VBdHRyaWJ1dGVEb21haW4iLCJfaSIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheTIiLCJhdHRycyIsIl9wYXJzZUluZGV4ZWRGaWVsZCIsInBhcnNlSW5kZXhlZEZpZWxkIiwiaW5kZXhlZEZpZWxkIiwidW5pZGVudGlmaWVkIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsInVuaWRlbnRpZmllZEF0dHIiLCJnZXRJbmRleEtleUZyb21GaWVsZE5hbWUiLCJmaWVsZCIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJmaWVsZE5hbWUiLCJpbmRleEtleSIsImFuYWx5emVkVHlwZSIsImNvbnRhaW5WYWxpZFRpbWUiLCJpZCIsImluZGV4QnkiLCJmb3JtYXQiLCJhbmFseXplclR5cGVUb0ZpZWxkVHlwZSIsImZpZWxkVHMiLCJlcG9jaCIsInRpbWVUb1VuaXhNaWxsaSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsInRpbWVEb21haW4iLCJjb21wYXJlIiwibnVtMSIsIm51bTIiLCJvcGVyYXRvciIsIk1hdGgiLCJOYU4iLCJnZXRGaWx0ZXJQcm9wcyIsImZpZWxkVHlwZSIsInJlYWwiLCJpbnRlZ2VyIiwiX2dldEF0dHJpYnV0ZURvbWFpbiIsImdldEF0dHJpYnV0ZURvbWFpbiIsIl9nZXRBdHRyaWJ1dGVEb21haW4yIiwiZGlmZiIsInN0ZXAiLCJnZXROdW1lcmljU3RlcFNpemUiLCJmb3JtYXROdW1iZXJCeVN0ZXAiLCJmaWx0ZXJQcm9wcyIsIkZJTFRFUl9UWVBFUyIsInJhbmdlIiwidHlwZU9wdGlvbnMiLCJncHUiLCJzZWxlY3QiLCJtdWx0aVNlbGVjdCIsImZpZWxkVHlwZXMiLCJhdHRyaWJ1dGVUeXBlVG9GaWVsZFR5cGUiLCJfZmllbGQkbWV0YWRhdGEiLCJfZmllbGQkZmlsdGVyUHJvcHMiLCJhdHRyVHlwZU1hcCIsIm51bWJlciIsImFuYWx5emVyVHlwZSIsIkRBVEFfVFlQRVMiLCJGTE9BVCIsIm51bWVyaWMiLCJTVFJJTkciLCJ2YWNoYXIiLCJJTlQiLCJpbnQ0IiwiQk9PTEVBTiIsImJvb2wiLCJhVHlwZSIsInRvTG93ZXJDYXNlIiwiQ29uc29sZSIsIndhcm4iLCJtYXRjaERhdGFzZXRUeXBlIiwiY29uZmlnIiwiZGF0YUlkIiwic3VwcG9ydGVkRGF0YXNldFR5cGVzIiwiaW5jbHVkZXMiLCJnZXRGaWVsZHNGcm9tVGlsZSIsIl9yZWY1IiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJfcmVmNCIsInJlbW90ZVRpbGVGb3JtYXQiLCJ0aWxlc2V0VXJsIiwibWV0YWRhdGFVcmwiLCJfbWV0YWRhdGEkZmllbGRzIiwiX21ldGFkYXRhJGJvdW5kcyIsImxvbiIsImxhdCIsInRpbGVJbmRpY2VzIiwidGlsZVNvdXJjZSIsInRpbGUiLCJ1cGRhdGVkRmllbGRzIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibG9uTGF0VG9UaWxlSW5kZXgiLCJSZW1vdGVUaWxlRm9ybWF0IiwiTVZUIiwiTVZUU291cmNlIiwiY3JlYXRlRGF0YVNvdXJjZSIsImRlY29kZVVSSUNvbXBvbmVudCIsIlBNVGlsZXNTb3VyY2UiLCJnZXRUaWxlRGF0YSIsImluZGV4Iiwic2VudCIsInRpbGVUb0ZpZWxkcyIsInQwIiwic3RvcCIsIl94IiwiX3RpbGUkZmVhdHVyZXMiLCJmZWF0dXJlcyIsImhlYWRlciIsInByb3BlcnRpZXMiLCJvdXRwdXQiLCJvYmoiLCJjb2x1bW5OYW1lIiwiZ2V0RmllbGRzRnJvbURhdGEiLCJmb3JjZVN0cmluZyIsIkFOQUxZWkVSX0RBVEFfVFlQRVMiLCJ6b29tIiwiRXJyb3IiLCJzY2FsZSIsIngiLCJmbG9vciIsImxhdFJhZCIsIlBJIiwieSIsImxvZyIsInRhbiIsImNvcyIsInoiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGlsZXNldC92ZWN0b3ItdGlsZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0RBVEFfVFlQRVMgYXMgQU5BTFlaRVJfREFUQV9UWVBFU30gZnJvbSAndHlwZS1hbmFseXplcic7XG5pbXBvcnQge2FzY2VuZGluZ30gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnO1xuaW1wb3J0IHtEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcblxuaW1wb3J0IHtNVlRTb3VyY2UsIFRpbGVKU09OfSBmcm9tICdAbG9hZGVycy5nbC9tdnQnO1xuaW1wb3J0IHtQTVRpbGVzU291cmNlLCBQTVRpbGVzTWV0YWRhdGF9IGZyb20gJ0Bsb2FkZXJzLmdsL3BtdGlsZXMnO1xuXG5pbXBvcnQge1xuICBhbmFseXplclR5cGVUb0ZpZWxkVHlwZSxcbiAgY29udGFpblZhbGlkVGltZSxcbiAgbm90TnVsbG9yVW5kZWZpbmVkIGFzIG5vdE51bGxPclVuZGVmaW5lZCxcbiAgcGFyc2VVcmksXG4gIGdldEZpZWxkc0Zyb21EYXRhXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RGF0YXNldFR5cGUsIEFMTF9GSUVMRF9UWVBFUywgRklMVEVSX1RZUEVTLCBSZW1vdGVUaWxlRm9ybWF0fSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7RmVhdHVyZSwgRmllbGQgYXMgS2VwbGVyRmllbGQsIEtlcGxlckxheWVyfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7Y2xhbXAsIGZvcm1hdE51bWJlckJ5U3RlcCwgZ2V0TnVtZXJpY1N0ZXBTaXplLCB0aW1lVG9Vbml4TWlsbGl9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXJQcm9wcyxcbiAgTnVtZXJpY0ZpZWxkRmlsdGVyUHJvcHMsXG4gIEJvb2xlYW5GaWVsZEZpbHRlclByb3BzLFxuICBTdHJpbmdGaWVsZEZpbHRlclByb3BzLFxuICBkZWZhdWx0IGFzIEtlcGxlckRhdGFzZXRcbn0gZnJvbSAnLi4va2VwbGVyLXRhYmxlJztcblxuZXhwb3J0IGNvbnN0IGdldExvYWRlck9wdGlvbnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbXZ0OiB7XG4gICAgICB3b3JrZXJVcmw6IGBodHRwczovL3VucGtnLmNvbS9AbG9hZGVycy5nbC9tdnQvZGlzdC9tdnQtd29ya2VyLmpzYFxuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RpbGVEYXRhc2V0KGRhdGFzZXQ6IEtlcGxlckRhdGFzZXQgfCB7dHlwZTogc3RyaW5nfSk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihkYXRhc2V0Py50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSk7XG59XG5cbnR5cGUgVmVjdG9yVGlsZUZpZWxkID0ge1xuICBhbmFseXplclR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBmb3JtYXQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzO1xufTtcblxuZXhwb3J0IHR5cGUgVmVjdG9yVGlsZU1ldGFkYXRhID0ge1xuICBhdHRyaWJ1dGlvbnM/OiB1bmtub3duW107XG4gIG1ldGFKc29uOiBhbnkgfCBudWxsO1xuICBib3VuZHM6IG51bWJlcltdIHwgbnVsbDtcbiAgY2VudGVyOiBudW1iZXJbXSB8IG51bGw7XG4gIG1heFpvb206IG51bWJlciB8IG51bGw7XG4gIG1pblpvb206IG51bWJlciB8IG51bGw7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBmaWVsZHM6IFZlY3RvclRpbGVGaWVsZFtdO1xufTtcblxudHlwZSBUaWxlc2V0TWV0YWRhdGEgPSBWZWN0b3JUaWxlTWV0YWRhdGE7XG5cbmV4cG9ydCB0eXBlIFRpcHBlY2Fub2VMYXllckF0dHJpYnV0ZSA9IHtcbiAgYXR0cmlidXRlPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgdmFsdWVzOiBzdHJpbmdbXSB8IG51bWJlcltdO1xufTtcblxudHlwZSBUaXBwZWNhbm9lTGF5ZXIgPSB7XG4gIGF0dHJpYnV0ZXM/OiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGVbXTtcbn07XG50eXBlIFRpbGVzZXRGdW5jdGlvbiA9IHtcbiAgZ2V0TWV0YVVybDogKHM6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgcGFyc2VNZXRhZGF0YTogKGQ6IGFueSwgb3B0aW9ucz86IGFueSkgPT4gVGlsZXNldE1ldGFkYXRhIHwgbnVsbDtcbn07XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3RpbGVqc29uLXNwZWMvdHJlZS9tYXN0ZXIvMi4yLjBcbmZ1bmN0aW9uIGlzTGF0KG51bTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtKSAmJiBudW0gPD0gOTAgJiYgbnVtID49IC05MDtcbn1cbmZ1bmN0aW9uIGlzTG5nKG51bTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtKSAmJiBudW0gPD0gMTgwICYmIG51bSA+PSAtMTgwO1xufVxuZnVuY3Rpb24gaXNab29tKG51bTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtKSAmJiBudW0gPj0gMCAmJiBudW0gPD0gMjI7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlPclN0cmluZyhkYXRhOiBzdHJpbmcgfCBudW1iZXJbXSk6IG51bWJlcltdIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGF0YS5zcGxpdCgnLCcpLm1hcChwYXJzZUZsb2F0KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2VudGVyKGNlbnRlcjogc3RyaW5nIHwgbnVtYmVyW10pOiBudW1iZXJbXSB8IG51bGwge1xuICAvLyBzdXBwb3J0ZWQgZm9ybWF0c1xuICAvLyBzdHJpbmc6IFwiLTk2LjY1NzcxNSw0MC4xMjYxMjcsLTkwLjE0MDA2MSw0My41MTY2ODlcIixcbiAgLy8gYXJyYXk6IFstOTEuNTA1MTI3LDQxLjYxNTQ0MiwxNF1cbiAgY29uc3QgcmVzdWx0ID0gZnJvbUFycmF5T3JTdHJpbmcoY2VudGVyKTtcbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJlxuICAgIHJlc3VsdC5sZW5ndGggPT09IDMgJiZcbiAgICBpc0xuZyhyZXN1bHRbMF0pICYmXG4gICAgaXNMYXQocmVzdWx0WzFdKSAmJlxuICAgIGlzWm9vbShyZXN1bHRbMl0pXG4gICkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogYm91bmRzIHNob3VsZCBiZSBbbWluTG5nLCBtaW5MYXQsIG1heExuZywgbWF4TGF0XVxuICogQHBhcmFtIHsqfSBib3VuZHNcbiAqL1xuZnVuY3Rpb24gcGFyc2VCb3VuZHMoYm91bmRzOiBzdHJpbmcgfCBudW1iZXJbXSk6IG51bWJlcltdIHwgbnVsbCB7XG4gIC8vIHN1cHBvcnRlZCBmb3JtYXRzXG4gIC8vIHN0cmluZzogXCItOTYuNjU3NzE1LDQwLjEyNjEyNywtOTAuMTQwMDYxLDQzLjUxNjY4OVwiLFxuICAvLyBhcnJheTogWyAtMTgwLCAtODUuMDUxMTI4Nzc5ODA2NTksIDE4MCwgODUuMDUxMTI4Nzc5ODA2NiBdXG4gIGNvbnN0IHJlc3VsdCA9IGZyb21BcnJheU9yU3RyaW5nKGJvdW5kcyk7XG4gIC8vIHZhbGlkYXRlIGJvdW5kc1xuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShyZXN1bHQpICYmXG4gICAgcmVzdWx0Lmxlbmd0aCA9PT0gNCAmJlxuICAgIFtyZXN1bHRbMF0sIHJlc3VsdFsyXV0uZXZlcnkoaXNMbmcpICYmXG4gICAgW3Jlc3VsdFsxXSwgcmVzdWx0WzNdXS5ldmVyeShpc0xhdClcbiAgKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgWF9QQVRUID0gL1xce3hcXH0vO1xuY29uc3QgWV9QQVRUID0gL1xce3lcXH0vO1xuY29uc3QgWl9QQVRUID0gL1xce3pcXH0vO1xuXG5mdW5jdGlvbiBpc0Z1bGx5UXVhbGlmaWVkVGlsZVVybCh0aWxlVXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFhfUEFUVC50ZXN0KHRpbGVVcmwpICYmIFlfUEFUVC50ZXN0KHRpbGVVcmwpICYmIFpfUEFUVC50ZXN0KHRpbGVVcmwpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aWxlIFVSTFxuICogQHBhcmFtICB7c3RyaW5nfSB0aWxlVXJsIEluaXRpYWwgdGlsZSBVUkwsIHdoaWNoIG1heSBiZSBlaXRoZXIgdGhlIHJvb3QgVVJMIGZvciB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlc2V0IG9yIGEgZnVsbHkgcXVhbGlmaWVkIHRlbXBsYXRlXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gdmFsaWRhdGVVcmwgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGlsZSBVUkxcbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSAgICBGdWxseSBxdWFsaWZpZWQgdGlsZSBVUkwgdGVtcGxhdGUsIG9yIG51bGwgaWYgaW5wdXQgZG9lcyBub3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXIgdG8gYmUgYSB2YWxpZCBVUkxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbGVVcmwoXG4gIHRpbGVVcmw6IHN0cmluZyxcbiAgdmFsaWRhdGVVcmw6IChzOiBzdHJpbmcpID0+IGJvb2xlYW4gPSBpc0Z1bGx5UXVhbGlmaWVkVGlsZVVybFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIENoZWNrIGZvciBhIHZhbGlkIFVSTC4gSWRlYWxseSB3ZSdkIGhhdmUgYSBzaW1wbGUgbWV0aG9kIGhlcmUuXG4gIGNvbnN0IHVyaVBhcnRzID0gcGFyc2VVcmkodGlsZVVybCk7XG4gIGlmICghdXJpUGFydHMucHJvdG9jb2wgfHwgIXVyaVBhcnRzLmhvc3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAodmFsaWRhdGVVcmwodGlsZVVybCkpIHtcbiAgICByZXR1cm4gdGlsZVVybDtcbiAgfVxuICByZXR1cm4gYCR7dGlsZVVybC5yZXBsYWNlKC9cXC8kLywgJycpfS97en0ve3h9L3t5fS5wYmZgO1xufVxuXG4vKipcbiAqIE1hcCBvZiB1dGlsIGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IHRpbGVzZXQgdHlwZXMsIGtleWVkIGJ5IGhvc3RcbiAqL1xuY29uc3QgVElMRVNFVF9GVU5DVElPTlM6IHtba2V5OiBzdHJpbmddOiBUaWxlc2V0RnVuY3Rpb259ID0ge1xuICAnYXBpLm1hcGJveC5jb20nOiB7XG4gICAgZ2V0TWV0YVVybDogZ2V0TWV0YVVybE1hcGJveCxcbiAgICBwYXJzZU1ldGFkYXRhOiBwYXJzZU1ldGFkYXRhVGlsZUpTT05cbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGdldE1ldGFVcmw6IGdldE1ldGFVcmxUaXBwZWNhbm9lLFxuICAgIHBhcnNlTWV0YWRhdGE6IHBhcnNlTWV0YWRhdGFUaWxlSlNPTlxuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRUaWxlc2V0RnVuY3Rpb25zKHRpbGVVcmw6IHN0cmluZyB8IG51bGwpOiBUaWxlc2V0RnVuY3Rpb24ge1xuICBsZXQgaG9zdCA9ICcnO1xuICB0cnkge1xuICAgIGhvc3QgPSBuZXcgVVJMKHRpbGVVcmwgfHwgJycpLmhvc3RuYW1lO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuXG4gIHJldHVybiBUSUxFU0VUX0ZVTkNUSU9OU1tob3N0XSB8fCBUSUxFU0VUX0ZVTkNUSU9OUy5kZWZhdWx0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgbWV0YWRhdGEgVVJMIGZvciBhIGdpdmVuIHRpbGVzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFVcmwodGlsZVVybDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiBnZXRUaWxlc2V0RnVuY3Rpb25zKHRpbGVVcmwpLmdldE1ldGFVcmwodGlsZVVybCk7XG59XG50eXBlIFBhcnNlTWV0YWRhdGFPcHRpb24gPSB7XG4gIHRpbGVVcmw/OiBzdHJpbmcgfCBudWxsO1xufTtcbi8qKlxuICogUGFyc2UgdGhlIG1ldGFkYXRhIGZvciBhIGdpdmVuIHRpbGVzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmVjdG9yTWV0YWRhdGEoXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG4gIG1ldGFkYXRhOiBQTVRpbGVzTWV0YWRhdGEgfCBUaWxlSlNPTixcbiAgb3B0aW9uPzogUGFyc2VNZXRhZGF0YU9wdGlvblxuKTogVGlsZXNldE1ldGFkYXRhIHwgbnVsbCB7XG4gIGNvbnN0IHt0aWxlVXJsID0gJyd9ID0gb3B0aW9uIHx8IHt9O1xuICByZXR1cm4gZ2V0VGlsZXNldEZ1bmN0aW9ucyh0aWxlVXJsKS5wYXJzZU1ldGFkYXRhKG1ldGFkYXRhKTtcbn1cblxuY29uc3QgTUFQQk9YX1VSTF9QQVRUID0gL1xcL1xce3pcXH1cXC9cXHt4XFx9XFwvXFx7eVxcfVxcLm12dC87XG5cbmZ1bmN0aW9uIGdldE1ldGFVcmxNYXBib3godGlsZVVybCA9ICcnKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRpbGVVcmwucmVwbGFjZShNQVBCT1hfVVJMX1BBVFQsICcuanNvbicpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1ldGFkYXRhVGlsZUpTT04obWV0YWRhdGE6IFBNVGlsZXNNZXRhZGF0YSB8IFRpbGVKU09OKTogVGlsZXNldE1ldGFkYXRhIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlTWV0YWRhdGFUaXBwZWNhbm9lRnJvbURhdGFTb3VyY2UobWV0YWRhdGEpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gIC8vIEZpZWxkcyBhbHJlYWR5IHBhcnNlZCBmcm9tIGBqc29uYCBwcm9wZXJ0eVxuICBpZiAocGFyc2VkLmZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIGdldE1ldGFVcmxUaXBwZWNhbm9lKHRpbGVVcmwpIHtcbiAgY29uc3QgdXJsID0gZ2V0VGlsZVVybCh0aWxlVXJsKTtcbiAgaWYgKCF1cmwpIHJldHVybiBudWxsO1xuICAvLyBhc3N1bWVzIHRoZSBzdHJ1Y3R1cmUgPHVybF9iYXNlPi97en0uLi5cbiAgY29uc3QgYmFzZVVybCA9IHVybC5zcGxpdChaX1BBVFQpWzBdLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIHJldHVybiBgJHtiYXNlVXJsfS9tZXRhZGF0YS5qc29uYDtcbn1cblxuLyoqXG4gKiBTcGVjaWFsIHBhcnNpbmcgZm9yIG1ldGFkYXRhIHJldHVybmVkIGJ5IE1WVFNvdXJjZSBhbmQgUE1UaWxlc1NvdXJjZS5cbiAqIEBwYXJhbSBtZXRhZGF0YSBUaWxlc2V0IG1ldGFkYXRhIHBhcnNlZCBieSBhIERhdGFTb3VjZVxuICogQHJldHVybnMgTWV0YWRhdGEgaW4gS2VwbGVyLWZyaWVuZGx5IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YVRpcHBlY2Fub2VGcm9tRGF0YVNvdXJjZShcbiAgbWV0YWRhdGE6IFBNVGlsZXNNZXRhZGF0YSB8IFRpbGVKU09OIHwgbnVsbFxuKTogVGlsZXNldE1ldGFkYXRhIHwgbnVsbCB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IHJlc3VsdDogVGlsZXNldE1ldGFkYXRhID0ge1xuICAgIGF0dHJpYnV0aW9uczogW10sXG4gICAgbWV0YUpzb246IG51bGwsXG4gICAgYm91bmRzOiBudWxsLFxuICAgIGNlbnRlcjogbnVsbCxcbiAgICBtYXhab29tOiBudWxsLFxuICAgIG1pblpvb206IG51bGwsXG4gICAgZmllbGRzOiBbXVxuICB9O1xuXG4gIGNvbnN0IG12dE1ldGFkYXRhID0gbWV0YWRhdGEgYXMgVGlsZUpTT047XG4gIGNvbnN0IHBtVGlsZU1ldGFkYXRhID0gbWV0YWRhdGEgYXMgUE1UaWxlc01ldGFkYXRhO1xuXG4gIC8vIHRyeSB0byBwYXJzZSBtZXRhSnNvblxuICBpZiAodHlwZW9mIG12dE1ldGFkYXRhLm1ldGFKc29uID09PSAnc3RyaW5nJykge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQubWV0YUpzb24gPSBKU09OLnBhcnNlKG12dE1ldGFkYXRhLm1ldGFKc29uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG12dE1ldGFkYXRhLm1ldGFKc29uID09PSAnb2JqZWN0Jykge1xuICAgIHJlc3VsdC5tZXRhSnNvbiA9IG12dE1ldGFkYXRhLm1ldGFKc29uO1xuICB9XG5cbiAgcmVzdWx0LmJvdW5kcyA9IHBhcnNlQm91bmRzKFxuICAgIEFycmF5LmlzQXJyYXkobWV0YWRhdGEuYm91bmRpbmdCb3gpID8gbWV0YWRhdGEuYm91bmRpbmdCb3guZmxhdCgpIDogJydcbiAgKTtcblxuICAvLyBQTVRpbGVTb3VyY2UgaGFzIGNlbnRlclpvb20gYW5kIGNlbnRlciBbbG9uLCBsYXRdLCBNVlRTb3VyY2UgLSBbbG9uLCBsYXQsIHpvb21dXG4gIGNvbnN0IGNlbnRlciA9XG4gICAgcG1UaWxlTWV0YWRhdGEuY2VudGVyWm9vbSAhPT0gdW5kZWZpbmVkICYmIEFycmF5LmlzQXJyYXkobWV0YWRhdGEuY2VudGVyKVxuICAgICAgPyBbLi4ubWV0YWRhdGEuY2VudGVyLCBwbVRpbGVNZXRhZGF0YS5jZW50ZXJab29tXVxuICAgICAgOiBtZXRhZGF0YS5jZW50ZXI7XG4gIHJlc3VsdC5jZW50ZXIgPSBwYXJzZUNlbnRlcihjZW50ZXIgfHwgJycpO1xuXG4gIHJlc3VsdC5tYXhab29tID0gc2FmZVBhcnNlRmxvYXQobWV0YWRhdGEubWF4Wm9vbSk7XG4gIHJlc3VsdC5taW5ab29tID0gc2FmZVBhcnNlRmxvYXQobWV0YWRhdGEubWluWm9vbSk7XG4gIHJlc3VsdC5uYW1lID0gbWV0YWRhdGEubmFtZSB8fCAnJztcbiAgcmVzdWx0LmRlc2NyaXB0aW9uID0gbXZ0TWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgcG1UaWxlTWV0YWRhdGEudGlsZWpzb24/LmRlc2NyaXB0aW9uIHx8ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHBtVGlsZU1ldGFkYXRhLnRpbGVqc29uPy5sYXllcnMpKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gcG1UaWxlc0xheWVyVG9UaXBwZWNhbm9lTGF5ZXIocG1UaWxlTWV0YWRhdGEudGlsZWpzb24/LmxheWVycyk7XG4gICAgcmVzdWx0LmZpZWxkcyA9IGNvbGxlY3RBdHRyaWJ1dGVzKGxheWVycyk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtdnRNZXRhZGF0YS5sYXllcnMpKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gcG1UaWxlc0xheWVyVG9UaXBwZWNhbm9lTGF5ZXIobXZ0TWV0YWRhdGEubGF5ZXJzKTtcbiAgICByZXN1bHQuZmllbGRzID0gY29sbGVjdEF0dHJpYnV0ZXMobGF5ZXJzKTtcbiAgfVxuXG4gIHJlc3VsdCA9IHtcbiAgICAuLi5yZXN1bHQsXG4gICAgYXR0cmlidXRpb25zOlxuICAgICAgcG1UaWxlTWV0YWRhdGEuYXR0cmlidXRpb25zIHx8XG4gICAgICAobXZ0TWV0YWRhdGEuaHRtbEF0dHJpYnV0aW9uID8gW212dE1ldGFkYXRhLmh0bWxBdHRyaWJ1dGlvbl0gOiB1bmRlZmluZWQpIHx8XG4gICAgICBbXSxcbiAgICAuLi5wYXJzZU1ldGFKc29uKHJlc3VsdC5tZXRhSnNvbilcbiAgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzYWZlUGFyc2VGbG9hdChpbnB1dDogdW5rbm93bik6IG51bWJlciB8IG51bGwge1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgPyBwYXJzZUZsb2F0KGlucHV0KSA6IHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgPyBpbnB1dCA6IG51bGw7XG4gIHJldHVybiByZXN1bHQgPT09IG51bGwgfHwgaXNOYU4ocmVzdWx0KSA/IG51bGwgOiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWV0YUpzb24obWV0YUpzb246IGFueSk6IHtmaWVsZHM6IFZlY3RvclRpbGVGaWVsZFtdfSB8IG51bGwge1xuICBpZiAoIW1ldGFKc29uIHx8IHR5cGVvZiBtZXRhSnNvbiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChtZXRhSnNvbi50aWxlc3RhdHMgJiYgQXJyYXkuaXNBcnJheShtZXRhSnNvbi50aWxlc3RhdHMubGF5ZXJzKSkge1xuICAgIC8vIHdlIGFyZSBpbiBsdWNrIVxuICAgIHJldHVybiB7ZmllbGRzOiBjb2xsZWN0QXR0cmlidXRlcyhtZXRhSnNvbi50aWxlc3RhdHMubGF5ZXJzKX07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVBbmltYXRpb25Eb21haW4obWFwcGVkVmFsdWU6IG51bWJlcltdKToge1xuICBkb21haW46IG51bWJlcltdO1xuICB0aW1lU3RlcHM6IG51bWJlcltdO1xuICBtYXBwZWRWYWx1ZTogbnVtYmVyW107XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59IHtcbiAgY29uc3QgdGltZVN0ZXBzID0gdW5pcShtYXBwZWRWYWx1ZSkuc29ydChhc2NlbmRpbmcpLmZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpO1xuXG4gIGNvbnN0IGRvbWFpbiA9IFt0aW1lU3RlcHNbMF0sIHRpbWVTdGVwc1t0aW1lU3RlcHMubGVuZ3RoIC0gMV1dO1xuXG4gIC8vIGlmIHRha3MgMTAgKiAxMDAwIG1zIHRvIGZpbmlzaCB0aGUgZW50aXJlIGFuaW1hdGlvblxuICBjb25zdCBkdXJhdGlvbiA9IDEwMDAwIC8gdGltZVN0ZXBzLmxlbmd0aDtcbiAgY29uc3QgY2xhbXBlZCA9IGNsYW1wKFsxMDAsIDIwMDBdLCBkdXJhdGlvbik7XG5cbiAgcmV0dXJuIHtkb21haW4sIHRpbWVTdGVwcywgZHVyYXRpb246IGNsYW1wZWQsIG1hcHBlZFZhbHVlfTtcbn1cblxuY29uc3QgcG1UaWxlVHlwZVRvQXR0ck1hcCA9IHtcbiAgZmxvYXQzMjogJ251bWJlcicsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHV0Zjg6ICdzdHJpbmcnLFxuICBpbnQ6ICdpbnQnLFxuICBib29sZWFuOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogVHJhbnNmb3JtIFRpbGVKU09OWydsYXllcnMnXSBiYWNrIHRvIFRpcHBlY2Fub2VMYXllclxuICovXG5mdW5jdGlvbiBwbVRpbGVzTGF5ZXJUb1RpcHBlY2Fub2VMYXllcihsYXllcnM6IFRpbGVKU09OWydsYXllcnMnXSk6IFRpcHBlY2Fub2VMYXllcltdIHtcbiAgaWYgKCFsYXllcnMpIHJldHVybiBbXTtcblxuICBjb25zdCBvdXRMYXllcnM6IFRpcHBlY2Fub2VMYXllcltdID0gW107XG4gIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgY29uc3Qge2ZpZWxkcyA9IFtdfSA9IGxheWVyIHx8IHt9O1xuICAgIGZvciAoY29uc3QgcG1GaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtcbiAgICAgICAgYXR0cmlidXRlOiBwbUZpZWxkLm5hbWUsXG4gICAgICAgIHR5cGU6IHBtVGlsZVR5cGVUb0F0dHJNYXBbcG1GaWVsZC50eXBlXSxcbiAgICAgICAgY291bnQ6IHBtRmllbGQudW5pcXVlVmFsdWVDb3VudCxcbiAgICAgICAgdmFsdWVzOiAocG1GaWVsZC52YWx1ZXMgPz8gW10pIGFzIG51bWJlcltdIHwgc3RyaW5nW10sXG4gICAgICAgIG1pbjogcG1GaWVsZC5taW4sXG4gICAgICAgIG1heDogcG1GaWVsZC5tYXhcbiAgICAgIH07XG5cbiAgICAgIG91dExheWVycy5wdXNoKHtcbiAgICAgICAgYXR0cmlidXRlczogW2F0dHJpYnV0ZV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0TGF5ZXJzO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0QXR0cmlidXRlcyhsYXllcnM6IFRpcHBlY2Fub2VMYXllcltdID0gW10pOiBWZWN0b3JUaWxlRmllbGRbXSB7XG4gIGNvbnN0IGZpZWxkcyA9IHt9O1xuICBjb25zdCBpbmRleGVkQXR0cmlidXRlczoge1trZXk6IHN0cmluZ106IFRpcHBlY2Fub2VMYXllckF0dHJpYnV0ZVtdfSA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZXMgPSBbXX0gPSBsYXllciB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cmlidXRlcykge1xuICAgICAgY29uc3QgbmFtZSA9IGF0dHIuYXR0cmlidXRlO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWRlcHRoXG4gICAgICAgIGlmIChuYW1lLnNwbGl0KCd8JykubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIGluZGV4ZWQgZmllbGRcbiAgICAgICAgICBjb25zdCBmbmFtZSA9IG5hbWUuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgICBpbmRleGVkQXR0cmlidXRlc1tmbmFtZV0gPSBpbmRleGVkQXR0cmlidXRlc1tmbmFtZV0gfHwgW107XG4gICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZXNbZm5hbWVdLnB1c2goYXR0cik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWZpZWxkc1tuYW1lXSkge1xuICAgICAgICAgIGZpZWxkc1tuYW1lXSA9IGF0dHJpYnV0ZVRvRmllbGQoYXR0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVyZ2VBdHRyaWJ1dGVEb21haW4oZmllbGRzW25hbWVdLCBhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHBhcnNlIGluZGV4ZWQgYXR0cmlidXRlLCBhbmQgcHV0IGluZGV4IGtleSB1bmlkZW50aWZpZWQgYmFjayBhcyBub3JtYWwgZmllbGRcbiAgZm9yIChjb25zdCBbbmFtZSwgYXR0cnNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4ZWRBdHRyaWJ1dGVzKSkge1xuICAgIGNvbnN0IHtpbmRleGVkRmllbGQsIHVuaWRlbnRpZmllZH0gPSBwYXJzZUluZGV4ZWRGaWVsZChuYW1lLCBhdHRycyk7XG4gICAgZmllbGRzW2luZGV4ZWRGaWVsZC5uYW1lXSA9IGluZGV4ZWRGaWVsZDtcbiAgICBmb3IgKGNvbnN0IHVuaWRlbnRpZmllZEF0dHIgb2YgdW5pZGVudGlmaWVkKSB7XG4gICAgICBpZiAodW5pZGVudGlmaWVkQXR0ci5hdHRyaWJ1dGUpIHtcbiAgICAgICAgZmllbGRzW3VuaWRlbnRpZmllZEF0dHIuYXR0cmlidXRlXSA9XG4gICAgICAgICAgZmllbGRzW3VuaWRlbnRpZmllZEF0dHIuYXR0cmlidXRlXSB8fCBhdHRyaWJ1dGVUb0ZpZWxkKHVuaWRlbnRpZmllZEF0dHIpO1xuICAgICAgICBtZXJnZUF0dHJpYnV0ZURvbWFpbihmaWVsZHNbdW5pZGVudGlmaWVkQXR0ci5hdHRyaWJ1dGVdLCB1bmlkZW50aWZpZWRBdHRyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleEtleUZyb21GaWVsZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiBuYW1lICYmIG5hbWUuc3BsaXQoJ3wnKS5sZW5ndGggPiAxID8gbmFtZS5zcGxpdCgnfCcpWzFdIDogbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgRmllbGRJbmRleEJ5ID0ge1xuICBmb3JtYXQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBtYXBwZWRWYWx1ZToge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlSW5kZXhlZEZpZWxkKFxuICBuYW1lOiBzdHJpbmcsXG4gIGF0dHJzOiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGVbXVxuKToge1xuICB1bmlkZW50aWZpZWQ6IFRpcHBlY2Fub2VMYXllckF0dHJpYnV0ZVtdO1xuICBpbmRleGVkRmllbGQ6IFZlY3RvclRpbGVGaWVsZDtcbn0ge1xuICBjb25zdCB1bmlkZW50aWZpZWQ6IFRpcHBlY2Fub2VMYXllckF0dHJpYnV0ZVtdID0gW107XG4gIC8vIGFuYWx5emUgdGltZSBmb3JtYXRcbiAgbGV0IGZpZWxkO1xuXG4gIGZvciAoY29uc3QgYXR0ciBvZiBhdHRycykge1xuICAgIGNvbnN0IGZpZWxkTmFtZSA9IGF0dHIuYXR0cmlidXRlO1xuICAgIGNvbnN0IGluZGV4S2V5ID0gZ2V0SW5kZXhLZXlGcm9tRmllbGROYW1lKGZpZWxkTmFtZSB8fCAnJyk7XG4gICAgY29uc3QgYW5hbHl6ZWRUeXBlID0gaW5kZXhLZXkgJiYgY29udGFpblZhbGlkVGltZShbaW5kZXhLZXldKTtcbiAgICBpZiAoYW5hbHl6ZWRUeXBlKSB7XG4gICAgICBmaWVsZCA9IGZpZWxkIHx8IHtcbiAgICAgICAgLi4uYXR0cmlidXRlVG9GaWVsZChhdHRyKSxcbiAgICAgICAgLy8gb3ZlcmlkZSBuYW1lIGFuZCBpZCB0byB0cnVuY2F0ZWQgbmFtZVxuICAgICAgICBuYW1lLFxuICAgICAgICBpZDogbmFtZSxcbiAgICAgICAgaW5kZXhCeToge1xuICAgICAgICAgIGZvcm1hdDogYW5hbHl6ZWRUeXBlLmZvcm1hdCxcbiAgICAgICAgICB0eXBlOiBhbmFseXplclR5cGVUb0ZpZWxkVHlwZShhbmFseXplZFR5cGUudHlwZSksXG4gICAgICAgICAgbWFwcGVkVmFsdWU6IHt9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBtZXJnZUF0dHJpYnV0ZURvbWFpbihmaWVsZCwgYXR0cik7XG4gICAgICAvLyBzYXZlIGVwb2NoIHRpbWUgaW4gbWFwcGVkVmFsdWVcbiAgICAgIGxldCBmaWVsZFRzOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gaW5kZXhLZXk7XG4gICAgICBpZiAoYW5hbHl6ZWRUeXBlLmZvcm1hdCA9PT0gJ3gnIHx8IGFuYWx5emVkVHlwZS5mb3JtYXQgPT09ICdYJykge1xuICAgICAgICBmaWVsZFRzID0gTnVtYmVyKGluZGV4S2V5KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVwb2NoID0gdGltZVRvVW5peE1pbGxpKGZpZWxkVHMsIGFuYWx5emVkVHlwZS5mb3JtYXQpO1xuICAgICAgaWYgKGVwb2NoKSB7XG4gICAgICAgIGZpZWxkLmluZGV4QnkubWFwcGVkVmFsdWVbZXBvY2hdID0gZmllbGROYW1lO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBrZXkgaXMgbm90IHZhbGlkIHRpbWVzdGFtcFxuICAgICAgdW5pZGVudGlmaWVkLnB1c2goYXR0cik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZpZWxkLmluZGV4QnkgJiYgZmllbGQuaW5kZXhCeS50eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKSB7XG4gICAgZmllbGQuaW5kZXhCeS50aW1lRG9tYWluID0gZ2V0VGltZUFuaW1hdGlvbkRvbWFpbihcbiAgICAgIE9iamVjdC5rZXlzKGZpZWxkLmluZGV4QnkubWFwcGVkVmFsdWUpLm1hcChOdW1iZXIpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7dW5pZGVudGlmaWVkLCBpbmRleGVkRmllbGQ6IGZpZWxkfTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZShudW0xOiBudW1iZXIgfCB1bmRlZmluZWQsIG51bTI6IG51bWJlciB8IHVuZGVmaW5lZCwgb3BlcmF0b3I6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtMSkgJiYgTnVtYmVyLmlzRmluaXRlKG51bTIpXG4gICAgPyBNYXRoW29wZXJhdG9yXShudW0xIGFzIG51bWJlciwgbnVtMiBhcyBudW1iZXIpXG4gICAgOiBOdW1iZXIuaXNGaW5pdGUobnVtMSlcbiAgICA/IG51bTFcbiAgICA6IE51bWJlci5pc0Zpbml0ZShudW0yKVxuICAgID8gbnVtMlxuICAgIDogTmFOO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyUHJvcHMoXG4gIGZpZWxkVHlwZTogc3RyaW5nLFxuICBhdHRyaWJ1dGU6IFRpcHBlY2Fub2VMYXllckF0dHJpYnV0ZVxuKTogRmlsdGVyUHJvcHMge1xuICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjoge1xuICAgICAgY29uc3QgW21pbiwgbWF4XSA9IGdldEF0dHJpYnV0ZURvbWFpbihmaWVsZFR5cGUsIGF0dHJpYnV0ZSk7XG4gICAgICBjb25zdCBkaWZmID0gbWF4IC0gbWluO1xuICAgICAgY29uc3Qgc3RlcCA9IGdldE51bWVyaWNTdGVwU2l6ZShkaWZmKSB8fCAwLjE7XG4gICAgICBjb25zdCBkb21haW4gPSBbXG4gICAgICAgIGZvcm1hdE51bWJlckJ5U3RlcChtaW4sIHN0ZXAsICdmbG9vcicpLFxuICAgICAgICBmb3JtYXROdW1iZXJCeVN0ZXAobWF4LCBzdGVwLCAnY2VpbCcpXG4gICAgICBdO1xuICAgICAgY29uc3QgZmlsdGVyUHJvcHM6IE51bWVyaWNGaWVsZEZpbHRlclByb3BzID0ge1xuICAgICAgICBkb21haW4sXG4gICAgICAgIHZhbHVlOiBkb21haW4gYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnJhbmdlLFxuICAgICAgICB0eXBlT3B0aW9uczogW0ZJTFRFUl9UWVBFUy5yYW5nZV0sXG4gICAgICAgIGdwdTogdHJ1ZSxcbiAgICAgICAgc3RlcFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaWx0ZXJQcm9wcztcbiAgICB9XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuOiB7XG4gICAgICBjb25zdCBmaWx0ZXJQcm9wczogQm9vbGVhbkZpZWxkRmlsdGVyUHJvcHMgPSB7XG4gICAgICAgIGRvbWFpbjogW3RydWUsIGZhbHNlXSxcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5zZWxlY3QsXG4gICAgICAgIGdwdTogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBmaWx0ZXJQcm9wcztcbiAgICB9XG5cbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBBc3N1bWUgc3RyaW5nIGZvciBhbGwgb3RoZXIgZmllbGRzXG4gICAgICBjb25zdCBmaWx0ZXJQcm9wczogU3RyaW5nRmllbGRGaWx0ZXJQcm9wcyA9IHtcbiAgICAgICAgZG9tYWluOiBhdHRyaWJ1dGUudmFsdWVzIGFzIHN0cmluZ1tdLFxuICAgICAgICB2YWx1ZTogYXR0cmlidXRlLnZhbHVlcyBhcyBzdHJpbmdbXSxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0LFxuICAgICAgICBncHU6IGZhbHNlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZpbHRlclByb3BzO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRyaWJ1dGVUb0ZpZWxkKGF0dHJpYnV0ZTogVGlwcGVjYW5vZUxheWVyQXR0cmlidXRlID0ge3ZhbHVlczogW119KTogVmVjdG9yVGlsZUZpZWxkIHtcbiAgLy8gYXR0cmlidXRlOiBcIl9zZWFzb25fcGVha3NfY29sb3JcIlxuICAvLyBjb3VudDogMTAwMFxuICAvLyBtYXg6IDAuOTVcbiAgLy8gbWluOiAwLjI0Mzc1XG4gIC8vIHR5cGU6IFwibnVtYmVyXCJcbiAgY29uc3QgZmllbGRUeXBlcyA9IGF0dHJpYnV0ZVR5cGVUb0ZpZWxkVHlwZShhdHRyaWJ1dGUudHlwZSk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogYXR0cmlidXRlLmF0dHJpYnV0ZSBhcyBzdHJpbmcsXG4gICAgaWQ6IGF0dHJpYnV0ZS5hdHRyaWJ1dGUgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogJycsXG4gICAgZmlsdGVyUHJvcHM6IGdldEZpbHRlclByb3BzKGZpZWxkVHlwZXMudHlwZSwgYXR0cmlidXRlKSxcbiAgICAuLi5maWVsZFR5cGVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZURvbWFpbih0eXBlOiBzdHJpbmcgfCBudWxsLCBhdHRyaWJ1dGU6IFRpcHBlY2Fub2VMYXllckF0dHJpYnV0ZSk6IG51bWJlcltdIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTnVtYmVyLmlzRmluaXRlKGF0dHJpYnV0ZS5taW4pID8gKGF0dHJpYnV0ZS5taW4gYXMgbnVtYmVyKSA6IE5hTixcbiAgICAgICAgTnVtYmVyLmlzRmluaXRlKGF0dHJpYnV0ZS5tYXgpID8gKGF0dHJpYnV0ZS5tYXggYXMgbnVtYmVyKSA6IE5hTlxuICAgICAgXTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW46XG4gICAgICByZXR1cm4gWzAsIDFdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gWzAsIDFdO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIGZpZWxkIFRoaXMgZnVuY3Rpb24gbXV0YXRlcyB0aGUgZmllbGQgcGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXR0cmlidXRlRG9tYWluKGZpZWxkOiBLZXBsZXJGaWVsZCwgYXR0cmlidXRlOiBUaXBwZWNhbm9lTGF5ZXJBdHRyaWJ1dGUpOiB2b2lkIHtcbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOiB7XG4gICAgICBjb25zdCBkb21haW4gPSBmaWVsZC5tZXRhZGF0YT8uZG9tYWluIHx8IGZpZWxkLmZpbHRlclByb3BzPy5kb21haW47XG4gICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgIGRvbWFpbi5taW4gPSBjb21wYXJlKGF0dHJpYnV0ZS5taW4sIGRvbWFpblswXSwgJ21pbicpO1xuICAgICAgICBkb21haW4ubWF4ID0gY29tcGFyZShhdHRyaWJ1dGUubWF4LCBkb21haW5bMV0sICdtYXgnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG4vLyBwb3NzaWJsZSB0eXBlcyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3RpcHBlY2Fub2UjbW9kaWZ5aW5nLWZlYXR1cmUtYXR0cmlidXRlc1xuY29uc3QgYXR0clR5cGVNYXAgPSB7XG4gIG51bWJlcjoge1xuICAgIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5yZWFsLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5GTE9BVFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLnJlYWwsXG4gICAgYW5hbHl6ZXJUeXBlOiBEQVRBX1RZUEVTLkZMT0FUXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmcsXG4gICAgYW5hbHl6ZXJUeXBlOiBEQVRBX1RZUEVTLlNUUklOR1xuICB9LFxuICB2YWNoYXI6IHtcbiAgICB0eXBlOiBBTExfRklFTERfVFlQRVMuc3RyaW5nLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5TVFJJTkdcbiAgfSxcbiAgZmxvYXQ6IHtcbiAgICB0eXBlOiBBTExfRklFTERfVFlQRVMucmVhbCxcbiAgICBhbmFseXplclR5cGU6IERBVEFfVFlQRVMuRkxPQVRcbiAgfSxcbiAgaW50OiB7XG4gICAgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLmludGVnZXIsXG4gICAgYW5hbHl6ZXJUeXBlOiBEQVRBX1RZUEVTLklOVFxuICB9LFxuICBpbnQ0OiB7XG4gICAgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLmludGVnZXIsXG4gICAgYW5hbHl6ZXJUeXBlOiBEQVRBX1RZUEVTLklOVFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgdHlwZTogQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW4sXG4gICAgYW5hbHl6ZXJUeXBlOiBEQVRBX1RZUEVTLkJPT0xFQU5cbiAgfSxcbiAgYm9vbDoge1xuICAgIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuLFxuICAgIGFuYWx5emVyVHlwZTogREFUQV9UWVBFUy5CT09MRUFOXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGF0dHJpYnV0ZVR5cGVUb0ZpZWxkVHlwZShhVHlwZT86IHN0cmluZyk6IHt0eXBlOiBzdHJpbmc7IGFuYWx5emVyVHlwZTogc3RyaW5nfSB7XG4gIGNvbnN0IHR5cGUgPSBhVHlwZT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKCF0eXBlIHx8ICFhdHRyVHlwZU1hcFt0eXBlXSkge1xuICAgIENvbnNvbGUud2FybihcbiAgICAgIGBjYW5ub3QgY29udmVydCBhdHRyaWJ1dGUgdHlwZSAke3R5cGV9IHRvIGtlcGxlci5nbCBkYXRhIHR5cGUsIHVzZSBzdHJpbmcgYnkgZGVmYXVsdGBcbiAgICApO1xuICAgIHJldHVybiBhdHRyVHlwZU1hcC5zdHJpbmc7XG4gIH1cblxuICByZXR1cm4gYXR0clR5cGVNYXBbdHlwZV07XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgZGF0YXNldCBjYW4gYmUgdXNlZCBhcyBzb3VyY2UgZGF0YSBmb3IgYSBsYXllci5cbiAqIEBwYXJhbSBkYXRhc2V0IEEgZGF0YXNldC5cbiAqIEBwYXJhbSBsYXllciBBIGxheWVyLlxuICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGEgZGF0YXNldCBjYW4gYmUgdXNlZCBhcyBzb3VyY2UgZGF0YSBmb3IgYSBsYXllci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoRGF0YXNldFR5cGUoZGF0YXNldDogS2VwbGVyRGF0YXNldCwgbGF5ZXI6IEtlcGxlckxheWVyKTogYm9vbGVhbiB7XG4gIC8vIGFsbG93IHNlbGVjdGlvbiBpZiB0eXBlIGlzIG5vdCBhc3NpZ25lZCB5ZXRcbiAgaWYgKCFsYXllci50eXBlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYWxsb3cgc2VsZWN0aW9uIGlmIGlzIGN1cnJlbnQgc2VsZWN0ZWQgZGF0YXNldFxuICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldC5pZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIGFsbG93IHNlbGVjdGlvbiBpZiBsYXllciBkb2Vzbid0IGhhdmUgc3VwcG9ydGVkRGF0YXNldFR5cGVzXG4gIGlmICghbGF5ZXIuc3VwcG9ydGVkRGF0YXNldFR5cGVzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIEFycmF5LmlzQXJyYXkobGF5ZXIuc3VwcG9ydGVkRGF0YXNldFR5cGVzKSAmJlxuICAgIGxheWVyLnN1cHBvcnRlZERhdGFzZXRUeXBlcy5pbmNsdWRlcyhkYXRhc2V0LnR5cGUgfHwgJycpXG4gICk7XG59XG5cbnR5cGUgR2V0RmllbGRzRnJvbVRpbGVQcm9wcyA9IHtcbiAgcmVtb3RlVGlsZUZvcm1hdDogUmVtb3RlVGlsZUZvcm1hdDtcbiAgdGlsZXNldFVybDogc3RyaW5nIHwgbnVsbDtcbiAgbWV0YWRhdGFVcmw6IHN0cmluZyB8IG51bGw7XG4gIG1ldGFkYXRhOiBWZWN0b3JUaWxlTWV0YWRhdGEgfCBudWxsO1xufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBmaWVsZHMgZnJvbSBhIHRpbGUgYW5kIHVwZGF0ZXMgdGhlIG1ldGFkYXRhIG9iamVjdCB3aXRoIGZvdW5kIGZpZWxkcy5cbiAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgZm9yIHRpbGVzZXRzIHRoYXQgZG9uJ3QgaW5jbHVkZSBmaWVsZHMgaW4gbWV0YWRhdGEgKG1vc3QgbGlrZWx5IHNhdmVkIHdpdGggb2xkZXIgc3BlYy4pLlxuICogQHBhcmFtIHBhcmFtcy5yZW1vdGVUaWxlRm9ybWF0IFRoZSBmb3JtYXQgb2YgdGhlIHJlbW90ZSB0aWxlIChNVlQgb3IgUE1UaWxlcykuXG4gKiBAcGFyYW0gcGFyYW1zLnRpbGVzZXRVcmwgVGhlIFVSTCBvZiB0aGUgdGlsZXNldC5cbiAqIEBwYXJhbSBwYXJhbXMubWV0YWRhdGFVcmwgVGhlIFVSTCBvZiB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gcGFyYW1zLm1ldGFkYXRhIFRoZSBtZXRhZGF0YSBvYmplY3QgY29udGFpbmluZyBmaWVsZHMgYW5kIHRpbGUgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkc0Zyb21UaWxlID0gYXN5bmMgKHtcbiAgcmVtb3RlVGlsZUZvcm1hdCxcbiAgdGlsZXNldFVybCxcbiAgbWV0YWRhdGFVcmwsXG4gIG1ldGFkYXRhXG59OiBHZXRGaWVsZHNGcm9tVGlsZVByb3BzKSA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgdGlsZXNldFVybCAmJlxuICAgICAgbWV0YWRhdGFVcmwgJiZcbiAgICAgIG1ldGFkYXRhICYmXG4gICAgICBtZXRhZGF0YS5maWVsZHM/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgbWV0YWRhdGEubWluWm9vbSAmJlxuICAgICAgbWV0YWRhdGEuYm91bmRzPy5sZW5ndGggPT09IDRcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvbiA9IChtZXRhZGF0YS5ib3VuZHNbMF0gKyBtZXRhZGF0YS5ib3VuZHNbMl0pIC8gMjtcbiAgICAgIGNvbnN0IGxhdCA9IChtZXRhZGF0YS5ib3VuZHNbMV0gKyBtZXRhZGF0YS5ib3VuZHNbM10pIC8gMjtcbiAgICAgIGNvbnN0IHRpbGVJbmRpY2VzID0gbG9uTGF0VG9UaWxlSW5kZXgobG9uLCBsYXQsIG1ldGFkYXRhLm1pblpvb20pO1xuXG4gICAgICBjb25zdCB0aWxlU291cmNlID1cbiAgICAgICAgcmVtb3RlVGlsZUZvcm1hdCA9PT0gUmVtb3RlVGlsZUZvcm1hdC5NVlRcbiAgICAgICAgICA/IE1WVFNvdXJjZS5jcmVhdGVEYXRhU291cmNlKGRlY29kZVVSSUNvbXBvbmVudCh0aWxlc2V0VXJsKSwge1xuICAgICAgICAgICAgICBtdnQ6IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YVVybDogZGVjb2RlVVJJQ29tcG9uZW50KG1ldGFkYXRhVXJsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogUE1UaWxlc1NvdXJjZS5jcmVhdGVEYXRhU291cmNlKHRpbGVzZXRVcmwsIHt9KTtcbiAgICAgIGNvbnN0IHRpbGUgPSBhd2FpdCB0aWxlU291cmNlLmdldFRpbGVEYXRhKHtpbmRleDogdGlsZUluZGljZXN9IGFzIGFueSk7XG4gICAgICBjb25zdCB1cGRhdGVkRmllbGRzID0gdGlsZVRvRmllbGRzKHRpbGUpLm1hcChmID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5mLFxuICAgICAgICAgIGFuYWx5emVyVHlwZTogZi5hbmFseXplclR5cGUgfHwgQUxMX0ZJRUxEX1RZUEVTLnN0cmluZyxcbiAgICAgICAgICBpZDogZi5pZCB8fCBmLm5hbWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBtZXRhZGF0YS5maWVsZHMgPSB1cGRhdGVkRmllbGRzO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlLCBhcyB0aGlzIGlzIGV4cGVyaW1lbnRhbCBmYWxsYmFja1xuICB9XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRpbGUgZmVhdHVyZXMgaW50byBLZXBsZXIgZmllbGRzLlxuICogQHBhcmFtIHRpbGUgVGhlIHRpbGUgb2JqZWN0IGNvbnRhaW5pbmcgZmVhdHVyZXMuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBLZXBsZXIgZmllbGRzIGRlcml2ZWQgZnJvbSB0aGUgdGlsZSdzIGZlYXR1cmVzLlxuICovXG5jb25zdCB0aWxlVG9GaWVsZHMgPSAodGlsZToge2ZlYXR1cmVzOiBGZWF0dXJlW119KTogS2VwbGVyRmllbGRbXSA9PiB7XG4gIGlmICh0aWxlPy5mZWF0dXJlcz8ubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGhlYWRlciA9IE9iamVjdC5rZXlzKHRpbGUuZmVhdHVyZXNbMF0ucHJvcGVydGllcyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gdGlsZS5mZWF0dXJlcy5tYXAoZiA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGNvbHVtbk5hbWUgPT4ge1xuICAgICAgICBvYmpbY29sdW1uTmFtZV0gPSBmLnByb3BlcnRpZXNbY29sdW1uTmFtZV07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tRGF0YShvdXRwdXQsIGhlYWRlcik7XG4gICAgLy8gZXh0cmEgdHJhbnNmb3JtYXRpb24gb2Ygc3RyaW5ncyB0byBudW1iZXJzIGZvciB0aWxlcyBpc24ndCBpbXBsZW1lbnRlZCwgc28gdXNlIHN0cmluZywgbm90IGNvbXB1dGVkIHR5cGVzXG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZiA9PiB7XG4gICAgICBjb25zdCBmb3JjZVN0cmluZyA9XG4gICAgICAgIChmLnR5cGUgPT09ICdpbnRlZ2VyJyB8fCBmLnR5cGUgPT09ICdmbG9hdCcpICYmXG4gICAgICAgIHR5cGVvZiB0aWxlLmZlYXR1cmVzWzBdLnByb3BlcnRpZXNbZi5uYW1lXSA9PT0gJ3N0cmluZyc7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmYsXG4gICAgICAgIGFuYWx5emVyVHlwZTogZm9yY2VTdHJpbmcgPyBBTkFMWVpFUl9EQVRBX1RZUEVTLlNUUklORyA6IGYuYW5hbHl6ZXJUeXBlLFxuICAgICAgICB0eXBlOiBmb3JjZVN0cmluZyA/ICdzdHJpbmcnIDogZi50eXBlXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBbXTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgbG9uZ2l0dWRlLCBsYXRpdHVkZSwgYW5kIHpvb20gbGV2ZWwgaW50byB2ZWN0b3IgdGlsZSBpbmRpY2VzICh4LCB5LCB6KS5cbiAqIEBwYXJhbSBsb24gTG9uZ2l0dWRlIGluIGRlZ3JlZXMsIHJhbmdpbmcgZnJvbSAtMTgwIHRvIDE4MC5cbiAqIEBwYXJhbSBsYXQgTGF0aXR1ZGUgaW4gZGVncmVlcywgcmFuZ2luZyBmcm9tIC05MCB0byA5MC5cbiAqIEBwYXJhbSB6b29tIFpvb20gbGV2ZWwgKGludGVnZXIpLCB3aGVyZSBoaWdoZXIgdmFsdWVzIHByb3ZpZGUgbW9yZSBkZXRhaWwuXG4gKiBAcmV0dXJucyBUaWxlIGluZGljZXMgd2l0aCB4IGFuZCB5IGNvb3JkaW5hdGVzIGFuZCB6b29tIGxldmVsIHouXG4gKi9cbmZ1bmN0aW9uIGxvbkxhdFRvVGlsZUluZGV4KGxvbjogbnVtYmVyLCBsYXQ6IG51bWJlciwgem9vbTogbnVtYmVyKSB7XG4gIGlmIChsYXQgPCAtODUuMDUxMSB8fCBsYXQgPiA4NS4wNTExKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMYXRpdHVkZSBvdXQgb2YgcmFuZ2UuIE11c3QgYmUgYmV0d2VlbiAtODUuMDUxMSBhbmQgODUuMDUxMS4nKTtcbiAgfVxuICBpZiAoem9vbSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1pvb20gbGV2ZWwgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLicpO1xuICB9XG5cbiAgLy8gMl56b29tIChudW1iZXIgb2YgdGlsZXMgcGVyIGF4aXMgYXQgZ2l2ZW4gem9vbSBsZXZlbClcbiAgY29uc3Qgc2NhbGUgPSAxIDw8IHpvb207XG4gIC8vIENvbnZlcnQgbG9uZ2l0dWRlIHRvIHRpbGUgWFxuICBjb25zdCB4ID0gTWF0aC5mbG9vcigoKGxvbiArIDE4MCkgLyAzNjApICogc2NhbGUpO1xuICAvLyBDb252ZXJ0IGxhdGl0dWRlIHRvIHRpbGUgWVxuICBjb25zdCBsYXRSYWQgPSAobGF0ICogTWF0aC5QSSkgLyAxODA7XG4gIGNvbnN0IHkgPSBNYXRoLmZsb29yKFxuICAgICgoMSAtIE1hdGgubG9nKE1hdGgudGFuKGxhdFJhZCkgKyAxIC8gTWF0aC5jb3MobGF0UmFkKSkgLyBNYXRoLlBJKSAvIDIpICogc2NhbGVcbiAgKTtcblxuICByZXR1cm4ge3gsIHksIHo6IHpvb219O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUdBLElBQUFLLElBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUVBLElBQUFPLFlBQUEsR0FBQVAsT0FBQTtBQU9BLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQUdBLElBQUFTLE1BQUEsR0FBQVQsT0FBQTtBQUFnRyxTQUFBVSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBZCxDQUFBLENBQUFTLEVBQUEsVUFBQVIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBQyxDQUFBLEVBQUFDLENBQUEsT0FBQUMsQ0FBQSxnQkFBQVIsQ0FBQSxXQUFBQSxFQUFBLElBQUFULENBQUEsR0FBQUEsQ0FBQSxDQUFBa0IsSUFBQSxDQUFBcEIsQ0FBQSxNQUFBWSxDQUFBLFdBQUFBLEVBQUEsUUFBQVosQ0FBQSxHQUFBRSxDQUFBLENBQUFtQixJQUFBLFdBQUFILENBQUEsR0FBQWxCLENBQUEsQ0FBQWEsSUFBQSxFQUFBYixDQUFBLEtBQUFDLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxJQUFBbUIsQ0FBQSxPQUFBRixDQUFBLEdBQUFqQixDQUFBLEtBQUFlLENBQUEsV0FBQUEsRUFBQSxVQUFBRyxDQUFBLFlBQUFoQixDQUFBLGNBQUFBLENBQUEsOEJBQUFpQixDQUFBLFFBQUFGLENBQUE7QUFBQSxTQUFBViw0QkFBQVAsQ0FBQSxFQUFBa0IsQ0FBQSxRQUFBbEIsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBc0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUEsT0FBQWhCLENBQUEsTUFBQXFCLFFBQUEsQ0FBQUgsSUFBQSxDQUFBcEIsQ0FBQSxFQUFBd0IsS0FBQSw2QkFBQXRCLENBQUEsSUFBQUYsQ0FBQSxDQUFBeUIsV0FBQSxLQUFBdkIsQ0FBQSxHQUFBRixDQUFBLENBQUF5QixXQUFBLENBQUFDLElBQUEsYUFBQXhCLENBQUEsY0FBQUEsQ0FBQSxHQUFBRyxLQUFBLENBQUFzQixJQUFBLENBQUEzQixDQUFBLG9CQUFBRSxDQUFBLCtDQUFBMEIsSUFBQSxDQUFBMUIsQ0FBQSxJQUFBb0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUE7QUFBQSxTQUFBSSxrQkFBQXRCLENBQUEsRUFBQWtCLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsTUFBQVUsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLFlBQUFQLENBQUEsTUFBQVcsQ0FBQSxHQUFBUCxLQUFBLENBQUFhLENBQUEsR0FBQWpCLENBQUEsR0FBQWlCLENBQUEsRUFBQWpCLENBQUEsSUFBQVcsQ0FBQSxDQUFBWCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBVyxDQUFBO0FBQUEsU0FBQWlCLFFBQUE1QixDQUFBLEVBQUFELENBQUEsUUFBQUUsQ0FBQSxHQUFBNEIsTUFBQSxDQUFBQyxJQUFBLENBQUE5QixDQUFBLE9BQUE2QixNQUFBLENBQUFFLHFCQUFBLFFBQUFmLENBQUEsR0FBQWEsTUFBQSxDQUFBRSxxQkFBQSxDQUFBL0IsQ0FBQSxHQUFBRCxDQUFBLEtBQUFpQixDQUFBLEdBQUFBLENBQUEsQ0FBQWdCLE1BQUEsV0FBQWpDLENBQUEsV0FBQThCLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQWpDLENBQUEsRUFBQUQsQ0FBQSxFQUFBbUMsVUFBQSxPQUFBakMsQ0FBQSxDQUFBa0MsSUFBQSxDQUFBQyxLQUFBLENBQUFuQyxDQUFBLEVBQUFlLENBQUEsWUFBQWYsQ0FBQTtBQUFBLFNBQUFvQyxjQUFBckMsQ0FBQSxhQUFBRCxDQUFBLE1BQUFBLENBQUEsR0FBQXVDLFNBQUEsQ0FBQS9CLE1BQUEsRUFBQVIsQ0FBQSxVQUFBRSxDQUFBLFdBQUFxQyxTQUFBLENBQUF2QyxDQUFBLElBQUF1QyxTQUFBLENBQUF2QyxDQUFBLFFBQUFBLENBQUEsT0FBQTZCLE9BQUEsQ0FBQUMsTUFBQSxDQUFBNUIsQ0FBQSxPQUFBc0MsT0FBQSxXQUFBeEMsQ0FBQSxRQUFBeUMsZ0JBQUEsYUFBQXhDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLENBQUFGLENBQUEsU0FBQThCLE1BQUEsQ0FBQVkseUJBQUEsR0FBQVosTUFBQSxDQUFBYSxnQkFBQSxDQUFBMUMsQ0FBQSxFQUFBNkIsTUFBQSxDQUFBWSx5QkFBQSxDQUFBeEMsQ0FBQSxLQUFBMkIsT0FBQSxDQUFBQyxNQUFBLENBQUE1QixDQUFBLEdBQUFzQyxPQUFBLFdBQUF4QyxDQUFBLElBQUE4QixNQUFBLENBQUFjLGNBQUEsQ0FBQTNDLENBQUEsRUFBQUQsQ0FBQSxFQUFBOEIsTUFBQSxDQUFBSSx3QkFBQSxDQUFBaEMsQ0FBQSxFQUFBRixDQUFBLGlCQUFBQyxDQUFBLElBdEJoRztBQUNBO0FBK0JPLElBQU00QyxnQkFBZ0IsR0FBQUMsT0FBQSxDQUFBRCxnQkFBQSxHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUEsRUFBUztFQUNwQyxPQUFPO0lBQ0xFLEdBQUcsRUFBRTtNQUNIQyxTQUFTO0lBQ1g7RUFDRixDQUFDO0FBQ0gsQ0FBQztBQUVNLFNBQVNDLGFBQWFBLENBQUNDLE9BQXVDLEVBQVc7RUFDOUUsT0FBT0MsT0FBTyxDQUFDLENBQUFELE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFRSxJQUFJLE1BQUtDLHNCQUFXLENBQUNDLFdBQVcsQ0FBQztBQUMzRDtBQXdDQTtBQUNBLFNBQVNDLEtBQUtBLENBQUNDLEdBQVEsRUFBVztFQUNoQyxPQUFPQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDLElBQUlBLEdBQUcsSUFBSSxFQUFFLElBQUlBLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDeEQ7QUFDQSxTQUFTRyxLQUFLQSxDQUFDSCxHQUFRLEVBQVc7RUFDaEMsT0FBT0MsTUFBTSxDQUFDQyxRQUFRLENBQUNGLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUksR0FBRyxJQUFJQSxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQzFEO0FBQ0EsU0FBU0ksTUFBTUEsQ0FBQ0osR0FBUSxFQUFXO0VBQ2pDLE9BQU9DLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixHQUFHLENBQUMsSUFBSUEsR0FBRyxJQUFJLENBQUMsSUFBSUEsR0FBRyxJQUFJLEVBQUU7QUFDdEQ7QUFDQSxTQUFTSyxpQkFBaUJBLENBQUNDLElBQXVCLEVBQW1CO0VBQ25FLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUM1QixPQUFPQSxJQUFJLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsR0FBRyxDQUFDQyxVQUFVLENBQUM7RUFDeEMsQ0FBQyxNQUFNLElBQUk1RCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3dELElBQUksQ0FBQyxFQUFFO0lBQzlCLE9BQU9BLElBQUk7RUFDYjtFQUNBLE9BQU8sSUFBSTtBQUNiO0FBRUEsU0FBU0ksV0FBV0EsQ0FBQ0MsTUFBeUIsRUFBbUI7RUFDL0Q7RUFDQTtFQUNBO0VBQ0EsSUFBTUMsTUFBTSxHQUFHUCxpQkFBaUIsQ0FBQ00sTUFBTSxDQUFDO0VBQ3hDLElBQ0U5RCxLQUFLLENBQUNDLE9BQU8sQ0FBQzhELE1BQU0sQ0FBQyxJQUNyQkEsTUFBTSxDQUFDNUQsTUFBTSxLQUFLLENBQUMsSUFDbkJtRCxLQUFLLENBQUNTLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUNoQmIsS0FBSyxDQUFDYSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFDaEJSLE1BQU0sQ0FBQ1EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2pCO0lBQ0EsT0FBT0EsTUFBTTtFQUNmO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxXQUFXQSxDQUFDQyxNQUF5QixFQUFtQjtFQUMvRDtFQUNBO0VBQ0E7RUFDQSxJQUFNRixNQUFNLEdBQUdQLGlCQUFpQixDQUFDUyxNQUFNLENBQUM7RUFDeEM7RUFDQSxJQUNFakUsS0FBSyxDQUFDQyxPQUFPLENBQUM4RCxNQUFNLENBQUMsSUFDckJBLE1BQU0sQ0FBQzVELE1BQU0sS0FBSyxDQUFDLElBQ25CLENBQUM0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRyxLQUFLLENBQUNaLEtBQUssQ0FBQyxJQUNuQyxDQUFDUyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRyxLQUFLLENBQUNoQixLQUFLLENBQUMsRUFDbkM7SUFDQSxPQUFPYSxNQUFNO0VBQ2Y7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUVBLElBQU1JLE1BQU0sR0FBRyxPQUFPO0FBQ3RCLElBQU1DLE1BQU0sR0FBRyxPQUFPO0FBQ3RCLElBQU1DLE1BQU0sR0FBRyxPQUFPO0FBRXRCLFNBQVNDLHVCQUF1QkEsQ0FBQ0MsT0FBZSxFQUFXO0VBQ3pELE9BQU9KLE1BQU0sQ0FBQzVDLElBQUksQ0FBQ2dELE9BQU8sQ0FBQyxJQUFJSCxNQUFNLENBQUM3QyxJQUFJLENBQUNnRCxPQUFPLENBQUMsSUFBSUYsTUFBTSxDQUFDOUMsSUFBSSxDQUFDZ0QsT0FBTyxDQUFDO0FBQzdFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFVQSxDQUN4QkQsT0FBZSxFQUVBO0VBQUEsSUFEZkUsV0FBbUMsR0FBQXZDLFNBQUEsQ0FBQS9CLE1BQUEsUUFBQStCLFNBQUEsUUFBQXdDLFNBQUEsR0FBQXhDLFNBQUEsTUFBR29DLHVCQUF1QjtFQUU3RDtFQUNBLElBQU1LLFFBQVEsR0FBRyxJQUFBQyxxQkFBUSxFQUFDTCxPQUFPLENBQUM7RUFDbEMsSUFBSSxDQUFDSSxRQUFRLENBQUNFLFFBQVEsSUFBSSxDQUFDRixRQUFRLENBQUNHLElBQUksRUFBRTtJQUN4QyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQUlMLFdBQVcsQ0FBQ0YsT0FBTyxDQUFDLEVBQUU7SUFDeEIsT0FBT0EsT0FBTztFQUNoQjtFQUNBLFVBQUFRLE1BQUEsQ0FBVVIsT0FBTyxDQUFDUyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxpQkFBbUQsR0FBRztFQUMxRCxnQkFBZ0IsRUFBRTtJQUNoQkMsVUFBVSxFQUFFQyxnQkFBZ0I7SUFDNUJDLGFBQWEsRUFBRUM7RUFDakIsQ0FBQztFQUNELFdBQVM7SUFDUEgsVUFBVSxFQUFFSSxvQkFBb0I7SUFDaENGLGFBQWEsRUFBRUM7RUFDakI7QUFDRixDQUFDO0FBRUQsU0FBU0UsbUJBQW1CQSxDQUFDaEIsT0FBc0IsRUFBbUI7RUFDcEUsSUFBSU8sSUFBSSxHQUFHLEVBQUU7RUFDYixJQUFJO0lBQ0ZBLElBQUksR0FBRyxJQUFJVSxHQUFHLENBQUNqQixPQUFPLElBQUksRUFBRSxDQUFDLENBQUNrQixRQUFRO0VBQ3hDLENBQUMsQ0FBQyxPQUFPQyxLQUFLLEVBQUU7SUFDZDtFQUFBO0VBR0YsT0FBT1QsaUJBQWlCLENBQUNILElBQUksQ0FBQyxJQUFJRyxpQkFBaUIsV0FBUTtBQUM3RDs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFVQSxDQUFDWCxPQUFlLEVBQWlCO0VBQ3pELE9BQU9nQixtQkFBbUIsQ0FBQ2hCLE9BQU8sQ0FBQyxDQUFDVyxVQUFVLENBQUNYLE9BQU8sQ0FBQztBQUN6RDtBQUlBO0FBQ0E7QUFDQTtBQUNPLFNBQVNvQixtQkFBbUJBO0FBQ2pDO0FBQ0FDLFFBQW9DLEVBQ3BDQyxNQUE0QixFQUNKO0VBQ3hCLElBQUFDLElBQUEsR0FBdUJELE1BQU0sSUFBSSxDQUFDLENBQUM7SUFBQUUsWUFBQSxHQUFBRCxJQUFBLENBQTVCdkIsT0FBTztJQUFQQSxPQUFPLEdBQUF3QixZQUFBLGNBQUcsRUFBRSxHQUFBQSxZQUFBO0VBQ25CLE9BQU9SLG1CQUFtQixDQUFDaEIsT0FBTyxDQUFDLENBQUNhLGFBQWEsQ0FBQ1EsUUFBUSxDQUFDO0FBQzdEO0FBRUEsSUFBTUksZUFBZSxHQUFHLDRCQUE0QjtBQUVwRCxTQUFTYixnQkFBZ0JBLENBQUEsRUFBdUI7RUFBQSxJQUF0QlosT0FBTyxHQUFBckMsU0FBQSxDQUFBL0IsTUFBQSxRQUFBK0IsU0FBQSxRQUFBd0MsU0FBQSxHQUFBeEMsU0FBQSxNQUFHLEVBQUU7RUFDcEMsT0FBT3FDLE9BQU8sQ0FBQ1MsT0FBTyxDQUFDZ0IsZUFBZSxFQUFFLE9BQU8sQ0FBQztBQUNsRDtBQUVBLFNBQVNYLHFCQUFxQkEsQ0FBQ08sUUFBb0MsRUFBMEI7RUFBQSxJQUFBSyxjQUFBO0VBQzNGLElBQU1DLE1BQU0sR0FBR0MscUNBQXFDLENBQUNQLFFBQVEsQ0FBQztFQUM5RCxJQUFJLENBQUNNLE1BQU0sRUFBRSxPQUFPLElBQUk7RUFDeEI7RUFDQSxLQUFBRCxjQUFBLEdBQUlDLE1BQU0sQ0FBQ0UsTUFBTSxjQUFBSCxjQUFBLGVBQWJBLGNBQUEsQ0FBZTlGLE1BQU0sRUFBRTtJQUN6QixPQUFPK0YsTUFBTTtFQUNmO0VBRUEsT0FBT0EsTUFBTTtBQUNmO0FBRUEsU0FBU1osb0JBQW9CQSxDQUFDZixPQUFPLEVBQUU7RUFDckMsSUFBTThCLEdBQUcsR0FBRzdCLFVBQVUsQ0FBQ0QsT0FBTyxDQUFDO0VBQy9CLElBQUksQ0FBQzhCLEdBQUcsRUFBRSxPQUFPLElBQUk7RUFDckI7RUFDQSxJQUFNQyxPQUFPLEdBQUdELEdBQUcsQ0FBQzNDLEtBQUssQ0FBQ1csTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNXLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQ3ZELFVBQUFELE1BQUEsQ0FBVXVCLE9BQU87QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNILHFDQUFxQ0EsQ0FDNUNQLFFBQTJDLEVBQ25CO0VBQUEsSUFBQVcscUJBQUEsRUFBQUMsc0JBQUE7RUFDeEIsSUFBSSxDQUFDWixRQUFRLElBQUksSUFBQWEsUUFBQSxhQUFPYixRQUFRLE1BQUssUUFBUSxFQUFFO0lBQzdDLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBSTdCLE1BQXVCLEdBQUc7SUFDNUIyQyxZQUFZLEVBQUUsRUFBRTtJQUNoQkMsUUFBUSxFQUFFLElBQUk7SUFDZDFDLE1BQU0sRUFBRSxJQUFJO0lBQ1pILE1BQU0sRUFBRSxJQUFJO0lBQ1o4QyxPQUFPLEVBQUUsSUFBSTtJQUNiQyxPQUFPLEVBQUUsSUFBSTtJQUNiVCxNQUFNLEVBQUU7RUFDVixDQUFDO0VBRUQsSUFBTVUsV0FBVyxHQUFHbEIsUUFBb0I7RUFDeEMsSUFBTW1CLGNBQWMsR0FBR25CLFFBQTJCOztFQUVsRDtFQUNBLElBQUksT0FBT2tCLFdBQVcsQ0FBQ0gsUUFBUSxLQUFLLFFBQVEsRUFBRTtJQUM1QyxJQUFJO01BQ0Y1QyxNQUFNLENBQUM0QyxRQUFRLEdBQUdLLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxXQUFXLENBQUNILFFBQVEsQ0FBQztJQUNwRCxDQUFDLENBQUMsT0FBT08sR0FBRyxFQUFFO01BQ1o7SUFBQTtFQUVKLENBQUMsTUFBTSxJQUFJLElBQUFULFFBQUEsYUFBT0ssV0FBVyxDQUFDSCxRQUFRLE1BQUssUUFBUSxFQUFFO0lBQ25ENUMsTUFBTSxDQUFDNEMsUUFBUSxHQUFHRyxXQUFXLENBQUNILFFBQVE7RUFDeEM7RUFFQTVDLE1BQU0sQ0FBQ0UsTUFBTSxHQUFHRCxXQUFXLENBQ3pCaEUsS0FBSyxDQUFDQyxPQUFPLENBQUMyRixRQUFRLENBQUN1QixXQUFXLENBQUMsR0FBR3ZCLFFBQVEsQ0FBQ3VCLFdBQVcsQ0FBQ0MsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUN0RSxDQUFDOztFQUVEO0VBQ0EsSUFBTXRELE1BQU0sR0FDVmlELGNBQWMsQ0FBQ00sVUFBVSxLQUFLM0MsU0FBUyxJQUFJMUUsS0FBSyxDQUFDQyxPQUFPLENBQUMyRixRQUFRLENBQUM5QixNQUFNLENBQUMsTUFBQWlCLE1BQUEsS0FBQXVDLG1CQUFBLGFBQ2pFMUIsUUFBUSxDQUFDOUIsTUFBTSxJQUFFaUQsY0FBYyxDQUFDTSxVQUFVLEtBQzlDekIsUUFBUSxDQUFDOUIsTUFBTTtFQUNyQkMsTUFBTSxDQUFDRCxNQUFNLEdBQUdELFdBQVcsQ0FBQ0MsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUV6Q0MsTUFBTSxDQUFDNkMsT0FBTyxHQUFHVyxjQUFjLENBQUMzQixRQUFRLENBQUNnQixPQUFPLENBQUM7RUFDakQ3QyxNQUFNLENBQUM4QyxPQUFPLEdBQUdVLGNBQWMsQ0FBQzNCLFFBQVEsQ0FBQ2lCLE9BQU8sQ0FBQztFQUNqRDlDLE1BQU0sQ0FBQzFDLElBQUksR0FBR3VFLFFBQVEsQ0FBQ3ZFLElBQUksSUFBSSxFQUFFO0VBQ2pDMEMsTUFBTSxDQUFDeUQsV0FBVyxHQUFHVixXQUFXLENBQUNVLFdBQVcsTUFBQWpCLHFCQUFBLEdBQUlRLGNBQWMsQ0FBQ1UsUUFBUSxjQUFBbEIscUJBQUEsdUJBQXZCQSxxQkFBQSxDQUF5QmlCLFdBQVcsS0FBSSxFQUFFO0VBRTFGLElBQUl4SCxLQUFLLENBQUNDLE9BQU8sRUFBQXVHLHNCQUFBLEdBQUNPLGNBQWMsQ0FBQ1UsUUFBUSxjQUFBakIsc0JBQUEsdUJBQXZCQSxzQkFBQSxDQUF5QmtCLE1BQU0sQ0FBQyxFQUFFO0lBQUEsSUFBQUMsc0JBQUE7SUFDbEQsSUFBTUQsTUFBTSxHQUFHRSw2QkFBNkIsRUFBQUQsc0JBQUEsR0FBQ1osY0FBYyxDQUFDVSxRQUFRLGNBQUFFLHNCQUFBLHVCQUF2QkEsc0JBQUEsQ0FBeUJELE1BQU0sQ0FBQztJQUM3RTNELE1BQU0sQ0FBQ3FDLE1BQU0sR0FBR3lCLGlCQUFpQixDQUFDSCxNQUFNLENBQUM7RUFDM0MsQ0FBQyxNQUFNLElBQUkxSCxLQUFLLENBQUNDLE9BQU8sQ0FBQzZHLFdBQVcsQ0FBQ1ksTUFBTSxDQUFDLEVBQUU7SUFDNUMsSUFBTUEsT0FBTSxHQUFHRSw2QkFBNkIsQ0FBQ2QsV0FBVyxDQUFDWSxNQUFNLENBQUM7SUFDaEUzRCxNQUFNLENBQUNxQyxNQUFNLEdBQUd5QixpQkFBaUIsQ0FBQ0gsT0FBTSxDQUFDO0VBQzNDO0VBRUEzRCxNQUFNLEdBQUE5QixhQUFBLENBQUFBLGFBQUEsS0FDRDhCLE1BQU07SUFDVDJDLFlBQVksRUFDVkssY0FBYyxDQUFDTCxZQUFZLEtBQzFCSSxXQUFXLENBQUNnQixlQUFlLEdBQUcsQ0FBQ2hCLFdBQVcsQ0FBQ2dCLGVBQWUsQ0FBQyxHQUFHcEQsU0FBUyxDQUFDLElBQ3pFO0VBQUUsR0FDRHFELGFBQWEsQ0FBQ2hFLE1BQU0sQ0FBQzRDLFFBQVEsQ0FBQyxDQUNsQztFQUVELE9BQU81QyxNQUFNO0FBQ2Y7QUFFQSxTQUFTd0QsY0FBY0EsQ0FBQ1MsS0FBYyxFQUFpQjtFQUNyRCxJQUFNakUsTUFBTSxHQUNWLE9BQU9pRSxLQUFLLEtBQUssUUFBUSxHQUFHcEUsVUFBVSxDQUFDb0UsS0FBSyxDQUFDLEdBQUcsT0FBT0EsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxHQUFHLElBQUk7RUFDMUYsT0FBT2pFLE1BQU0sS0FBSyxJQUFJLElBQUlrRSxLQUFLLENBQUNsRSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUdBLE1BQU07QUFDekQ7QUFFQSxTQUFTZ0UsYUFBYUEsQ0FBQ3BCLFFBQWEsRUFBc0M7RUFDeEUsSUFBSSxDQUFDQSxRQUFRLElBQUksSUFBQUYsUUFBQSxhQUFPRSxRQUFRLE1BQUssUUFBUSxFQUFFO0lBQzdDLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBSUEsUUFBUSxDQUFDdUIsU0FBUyxJQUFJbEksS0FBSyxDQUFDQyxPQUFPLENBQUMwRyxRQUFRLENBQUN1QixTQUFTLENBQUNSLE1BQU0sQ0FBQyxFQUFFO0lBQ2xFO0lBQ0EsT0FBTztNQUFDdEIsTUFBTSxFQUFFeUIsaUJBQWlCLENBQUNsQixRQUFRLENBQUN1QixTQUFTLENBQUNSLE1BQU07SUFBQyxDQUFDO0VBQy9EO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7QUFFQSxTQUFTUyxzQkFBc0JBLENBQUNDLFdBQXFCLEVBS25EO0VBQ0EsSUFBTUMsU0FBUyxHQUFHLElBQUFDLGtCQUFJLEVBQUNGLFdBQVcsQ0FBQyxDQUFDRyxJQUFJLENBQUNDLGtCQUFTLENBQUMsQ0FBQzVHLE1BQU0sQ0FBQzZHLCtCQUFrQixDQUFDO0VBRTlFLElBQU1DLE1BQU0sR0FBRyxDQUFDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVBLFNBQVMsQ0FBQ0EsU0FBUyxDQUFDbEksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOztFQUU5RDtFQUNBLElBQU13SSxRQUFRLEdBQUcsS0FBSyxHQUFHTixTQUFTLENBQUNsSSxNQUFNO0VBQ3pDLElBQU15SSxPQUFPLEdBQUcsSUFBQUMsWUFBSyxFQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFRixRQUFRLENBQUM7RUFFNUMsT0FBTztJQUFDRCxNQUFNLEVBQU5BLE1BQU07SUFBRUwsU0FBUyxFQUFUQSxTQUFTO0lBQUVNLFFBQVEsRUFBRUMsT0FBTztJQUFFUixXQUFXLEVBQVhBO0VBQVcsQ0FBQztBQUM1RDtBQUVBLElBQU1VLG1CQUFtQixHQUFHO0VBQzFCQyxPQUFPLEVBQUUsUUFBUTtFQUNqQkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLElBQUksRUFBRSxRQUFRO0VBQ2QsT0FBSyxLQUFLO0VBQ1YsV0FBUztBQUNYLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsU0FBU3JCLDZCQUE2QkEsQ0FBQ0YsTUFBMEIsRUFBcUI7RUFDcEYsSUFBSSxDQUFDQSxNQUFNLEVBQUUsT0FBTyxFQUFFO0VBRXRCLElBQU13QixTQUE0QixHQUFHLEVBQUU7RUFBQyxJQUFBQyxTQUFBLEdBQUF6SiwwQkFBQSxDQUNwQmdJLE1BQU07SUFBQTBCLEtBQUE7RUFBQTtJQUExQixLQUFBRCxTQUFBLENBQUE3SSxDQUFBLE1BQUE4SSxLQUFBLEdBQUFELFNBQUEsQ0FBQTVJLENBQUEsSUFBQUMsSUFBQSxHQUE0QjtNQUFBLElBQWpCNkksS0FBSyxHQUFBRCxLQUFBLENBQUEzSSxLQUFBO01BQ2QsSUFBQTZJLEtBQUEsR0FBc0JELEtBQUssSUFBSSxDQUFDLENBQUM7UUFBQUUsWUFBQSxHQUFBRCxLQUFBLENBQTFCbEQsTUFBTTtRQUFOQSxNQUFNLEdBQUFtRCxZQUFBLGNBQUcsRUFBRSxHQUFBQSxZQUFBO01BQWdCLElBQUFDLFVBQUEsR0FBQTlKLDBCQUFBLENBQ1owRyxNQUFNO1FBQUFxRCxNQUFBO01BQUE7UUFBNUIsS0FBQUQsVUFBQSxDQUFBbEosQ0FBQSxNQUFBbUosTUFBQSxHQUFBRCxVQUFBLENBQUFqSixDQUFBLElBQUFDLElBQUEsR0FBOEI7VUFBQSxJQUFBa0osZUFBQTtVQUFBLElBQW5CQyxPQUFPLEdBQUFGLE1BQUEsQ0FBQWhKLEtBQUE7VUFDaEIsSUFBTW1KLFNBQVMsR0FBRztZQUNoQkEsU0FBUyxFQUFFRCxPQUFPLENBQUN0SSxJQUFJO1lBQ3ZCMEIsSUFBSSxFQUFFK0YsbUJBQW1CLENBQUNhLE9BQU8sQ0FBQzVHLElBQUksQ0FBQztZQUN2QzhHLEtBQUssRUFBRUYsT0FBTyxDQUFDRyxnQkFBZ0I7WUFDL0JDLE1BQU0sR0FBQUwsZUFBQSxHQUFHQyxPQUFPLENBQUNJLE1BQU0sY0FBQUwsZUFBQSxjQUFBQSxlQUFBLEdBQUksRUFBMEI7WUFDckRNLEdBQUcsRUFBRUwsT0FBTyxDQUFDSyxHQUFHO1lBQ2hCQyxHQUFHLEVBQUVOLE9BQU8sQ0FBQ007VUFDZixDQUFDO1VBRURmLFNBQVMsQ0FBQ25ILElBQUksQ0FBQztZQUNibUksVUFBVSxFQUFFLENBQUNOLFNBQVM7VUFDeEIsQ0FBQyxDQUFDO1FBQ0o7TUFBQyxTQUFBMUMsR0FBQTtRQUFBc0MsVUFBQSxDQUFBNUosQ0FBQSxDQUFBc0gsR0FBQTtNQUFBO1FBQUFzQyxVQUFBLENBQUE5SSxDQUFBO01BQUE7SUFDSDtFQUFDLFNBQUF3RyxHQUFBO0lBQUFpQyxTQUFBLENBQUF2SixDQUFBLENBQUFzSCxHQUFBO0VBQUE7SUFBQWlDLFNBQUEsQ0FBQXpJLENBQUE7RUFBQTtFQUNELE9BQU93SSxTQUFTO0FBQ2xCO0FBRUEsU0FBU3JCLGlCQUFpQkEsQ0FBQSxFQUFvRDtFQUFBLElBQW5ESCxNQUF5QixHQUFBeEYsU0FBQSxDQUFBL0IsTUFBQSxRQUFBK0IsU0FBQSxRQUFBd0MsU0FBQSxHQUFBeEMsU0FBQSxNQUFHLEVBQUU7RUFDdkQsSUFBTWtFLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDakIsSUFBTStELGlCQUE4RCxHQUFHLENBQUMsQ0FBQztFQUFDLElBQUFDLFVBQUEsR0FBQTFLLDBCQUFBLENBRXREZ0ksTUFBTTtJQUFBMkMsTUFBQTtFQUFBO0lBQTFCLEtBQUFELFVBQUEsQ0FBQTlKLENBQUEsTUFBQStKLE1BQUEsR0FBQUQsVUFBQSxDQUFBN0osQ0FBQSxJQUFBQyxJQUFBLEdBQTRCO01BQUEsSUFBakI2SSxLQUFLLEdBQUFnQixNQUFBLENBQUE1SixLQUFBO01BQ2QsSUFBQTZKLEtBQUEsR0FBMEJqQixLQUFLLElBQUksQ0FBQyxDQUFDO1FBQUFrQixnQkFBQSxHQUFBRCxLQUFBLENBQTlCSixVQUFVO1FBQVZBLFVBQVUsR0FBQUssZ0JBQUEsY0FBRyxFQUFFLEdBQUFBLGdCQUFBO01BQWdCLElBQUFDLFVBQUEsR0FBQTlLLDBCQUFBLENBQ25Cd0ssVUFBVTtRQUFBTyxNQUFBO01BQUE7UUFBN0IsS0FBQUQsVUFBQSxDQUFBbEssQ0FBQSxNQUFBbUssTUFBQSxHQUFBRCxVQUFBLENBQUFqSyxDQUFBLElBQUFDLElBQUEsR0FBK0I7VUFBQSxJQUFwQmtLLElBQUksR0FBQUQsTUFBQSxDQUFBaEssS0FBQTtVQUNiLElBQU1ZLEtBQUksR0FBR3FKLElBQUksQ0FBQ2QsU0FBUztVQUMzQixJQUFJLE9BQU92SSxLQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCO1lBQ0EsSUFBSUEsS0FBSSxDQUFDcUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDdkQsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUM5QjtjQUNBLElBQU13SyxLQUFLLEdBQUd0SixLQUFJLENBQUNxQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ2hDeUcsaUJBQWlCLENBQUNRLEtBQUssQ0FBQyxHQUFHUixpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDLElBQUksRUFBRTtjQUN6RFIsaUJBQWlCLENBQUNRLEtBQUssQ0FBQyxDQUFDNUksSUFBSSxDQUFDMkksSUFBSSxDQUFDO1lBQ3JDLENBQUMsTUFBTSxJQUFJLENBQUN0RSxNQUFNLENBQUMvRSxLQUFJLENBQUMsRUFBRTtjQUN4QitFLE1BQU0sQ0FBQy9FLEtBQUksQ0FBQyxHQUFHdUosZ0JBQWdCLENBQUNGLElBQUksQ0FBQztZQUN2QyxDQUFDLE1BQU07Y0FDTEcsb0JBQW9CLENBQUN6RSxNQUFNLENBQUMvRSxLQUFJLENBQUMsRUFBRXFKLElBQUksQ0FBQztZQUMxQztVQUNGO1FBQ0Y7TUFBQyxTQUFBeEQsR0FBQTtRQUFBc0QsVUFBQSxDQUFBNUssQ0FBQSxDQUFBc0gsR0FBQTtNQUFBO1FBQUFzRCxVQUFBLENBQUE5SixDQUFBO01BQUE7SUFDSDs7SUFFQTtFQUFBLFNBQUF3RyxHQUFBO0lBQUFrRCxVQUFBLENBQUF4SyxDQUFBLENBQUFzSCxHQUFBO0VBQUE7SUFBQWtELFVBQUEsQ0FBQTFKLENBQUE7RUFBQTtFQUNBLFNBQUFvSyxFQUFBLE1BQUFDLGVBQUEsR0FBNEJ0SixNQUFNLENBQUN1SixPQUFPLENBQUNiLGlCQUFpQixDQUFDLEVBQUFXLEVBQUEsR0FBQUMsZUFBQSxDQUFBNUssTUFBQSxFQUFBMkssRUFBQSxJQUFFO0lBQTFELElBQUFHLGtCQUFBLE9BQUFDLGVBQUEsYUFBQUgsZUFBQSxDQUFBRCxFQUFBO01BQU96SixJQUFJLEdBQUE0SixrQkFBQTtNQUFFRSxLQUFLLEdBQUFGLGtCQUFBO0lBQ3JCLElBQUFHLGtCQUFBLEdBQXFDQyxpQkFBaUIsQ0FBQ2hLLElBQUksRUFBRThKLEtBQUssQ0FBQztNQUE1REcsWUFBWSxHQUFBRixrQkFBQSxDQUFaRSxZQUFZO01BQUVDLFlBQVksR0FBQUgsa0JBQUEsQ0FBWkcsWUFBWTtJQUNqQ25GLE1BQU0sQ0FBQ2tGLFlBQVksQ0FBQ2pLLElBQUksQ0FBQyxHQUFHaUssWUFBWTtJQUFDLElBQUFFLFVBQUEsR0FBQTlMLDBCQUFBLENBQ1Y2TCxZQUFZO01BQUFFLE1BQUE7SUFBQTtNQUEzQyxLQUFBRCxVQUFBLENBQUFsTCxDQUFBLE1BQUFtTCxNQUFBLEdBQUFELFVBQUEsQ0FBQWpMLENBQUEsSUFBQUMsSUFBQSxHQUE2QztRQUFBLElBQWxDa0wsZ0JBQWdCLEdBQUFELE1BQUEsQ0FBQWhMLEtBQUE7UUFDekIsSUFBSWlMLGdCQUFnQixDQUFDOUIsU0FBUyxFQUFFO1VBQzlCeEQsTUFBTSxDQUFDc0YsZ0JBQWdCLENBQUM5QixTQUFTLENBQUMsR0FDaEN4RCxNQUFNLENBQUNzRixnQkFBZ0IsQ0FBQzlCLFNBQVMsQ0FBQyxJQUFJZ0IsZ0JBQWdCLENBQUNjLGdCQUFnQixDQUFDO1VBQzFFYixvQkFBb0IsQ0FBQ3pFLE1BQU0sQ0FBQ3NGLGdCQUFnQixDQUFDOUIsU0FBUyxDQUFDLEVBQUU4QixnQkFBZ0IsQ0FBQztRQUM1RTtNQUNGO0lBQUMsU0FBQXhFLEdBQUE7TUFBQXNFLFVBQUEsQ0FBQTVMLENBQUEsQ0FBQXNILEdBQUE7SUFBQTtNQUFBc0UsVUFBQSxDQUFBOUssQ0FBQTtJQUFBO0VBQ0g7RUFFQSxPQUFPZSxNQUFNLENBQUNzSSxNQUFNLENBQUMzRCxNQUFNLENBQUM7QUFDOUI7QUFFQSxTQUFTdUYsd0JBQXdCQSxDQUFDdEssSUFBWSxFQUFpQjtFQUM3RCxPQUFPQSxJQUFJLElBQUlBLElBQUksQ0FBQ3FDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ3ZELE1BQU0sR0FBRyxDQUFDLEdBQUdrQixJQUFJLENBQUNxQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUN2RTtBQVVBLFNBQVMySCxpQkFBaUJBLENBQ3hCaEssSUFBWSxFQUNaOEosS0FBaUMsRUFJakM7RUFDQSxJQUFNSSxZQUF3QyxHQUFHLEVBQUU7RUFDbkQ7RUFDQSxJQUFJSyxLQUFLO0VBQUMsSUFBQUMsVUFBQSxHQUFBbk0sMEJBQUEsQ0FFU3lMLEtBQUs7SUFBQVcsTUFBQTtFQUFBO0lBQXhCLEtBQUFELFVBQUEsQ0FBQXZMLENBQUEsTUFBQXdMLE1BQUEsR0FBQUQsVUFBQSxDQUFBdEwsQ0FBQSxJQUFBQyxJQUFBLEdBQTBCO01BQUEsSUFBZmtLLElBQUksR0FBQW9CLE1BQUEsQ0FBQXJMLEtBQUE7TUFDYixJQUFNc0wsU0FBUyxHQUFHckIsSUFBSSxDQUFDZCxTQUFTO01BQ2hDLElBQU1vQyxRQUFRLEdBQUdMLHdCQUF3QixDQUFDSSxTQUFTLElBQUksRUFBRSxDQUFDO01BQzFELElBQU1FLFlBQVksR0FBR0QsUUFBUSxJQUFJLElBQUFFLDZCQUFnQixFQUFDLENBQUNGLFFBQVEsQ0FBQyxDQUFDO01BQzdELElBQUlDLFlBQVksRUFBRTtRQUNoQkwsS0FBSyxHQUFHQSxLQUFLLElBQUEzSixhQUFBLENBQUFBLGFBQUEsS0FDUjJJLGdCQUFnQixDQUFDRixJQUFJLENBQUM7VUFDekI7VUFDQXJKLElBQUksRUFBSkEsSUFBSTtVQUNKOEssRUFBRSxFQUFFOUssSUFBSTtVQUNSK0ssT0FBTyxFQUFFO1lBQ1BDLE1BQU0sRUFBRUosWUFBWSxDQUFDSSxNQUFNO1lBQzNCdEosSUFBSSxFQUFFLElBQUF1SixvQ0FBdUIsRUFBQ0wsWUFBWSxDQUFDbEosSUFBSSxDQUFDO1lBQ2hEcUYsV0FBVyxFQUFFLENBQUM7VUFDaEI7UUFBQyxFQUNGO1FBQ0R5QyxvQkFBb0IsQ0FBQ2UsS0FBSyxFQUFFbEIsSUFBSSxDQUFDO1FBQ2pDO1FBQ0EsSUFBSTZCLE9BQStCLEdBQUdQLFFBQVE7UUFDOUMsSUFBSUMsWUFBWSxDQUFDSSxNQUFNLEtBQUssR0FBRyxJQUFJSixZQUFZLENBQUNJLE1BQU0sS0FBSyxHQUFHLEVBQUU7VUFDOURFLE9BQU8sR0FBR25KLE1BQU0sQ0FBQzRJLFFBQVEsQ0FBQztRQUM1QjtRQUNBLElBQU1RLEtBQUssR0FBRyxJQUFBQyxzQkFBZSxFQUFDRixPQUFPLEVBQUVOLFlBQVksQ0FBQ0ksTUFBTSxDQUFDO1FBQzNELElBQUlHLEtBQUssRUFBRTtVQUNUWixLQUFLLENBQUNRLE9BQU8sQ0FBQ2hFLFdBQVcsQ0FBQ29FLEtBQUssQ0FBQyxHQUFHVCxTQUFTO1FBQzlDO01BQ0YsQ0FBQyxNQUFNO1FBQ0w7UUFDQVIsWUFBWSxDQUFDeEosSUFBSSxDQUFDMkksSUFBSSxDQUFDO01BQ3pCO0lBQ0Y7RUFBQyxTQUFBeEQsR0FBQTtJQUFBMkUsVUFBQSxDQUFBak0sQ0FBQSxDQUFBc0gsR0FBQTtFQUFBO0lBQUEyRSxVQUFBLENBQUFuTCxDQUFBO0VBQUE7RUFFRCxJQUFJa0wsS0FBSyxDQUFDUSxPQUFPLElBQUlSLEtBQUssQ0FBQ1EsT0FBTyxDQUFDckosSUFBSSxLQUFLMkosMEJBQWUsQ0FBQ0MsU0FBUyxFQUFFO0lBQ3JFZixLQUFLLENBQUNRLE9BQU8sQ0FBQ1EsVUFBVSxHQUFHekUsc0JBQXNCLENBQy9DMUcsTUFBTSxDQUFDQyxJQUFJLENBQUNrSyxLQUFLLENBQUNRLE9BQU8sQ0FBQ2hFLFdBQVcsQ0FBQyxDQUFDekUsR0FBRyxDQUFDUCxNQUFNLENBQ25ELENBQUM7RUFDSDtFQUVBLE9BQU87SUFBQ21JLFlBQVksRUFBWkEsWUFBWTtJQUFFRCxZQUFZLEVBQUVNO0VBQUssQ0FBQztBQUM1QztBQUVBLFNBQVNpQixPQUFPQSxDQUFDQyxJQUF3QixFQUFFQyxJQUF3QixFQUFFQyxRQUFnQixFQUFVO0VBQzdGLE9BQU81SixNQUFNLENBQUNDLFFBQVEsQ0FBQ3lKLElBQUksQ0FBQyxJQUFJMUosTUFBTSxDQUFDQyxRQUFRLENBQUMwSixJQUFJLENBQUMsR0FDakRFLElBQUksQ0FBQ0QsUUFBUSxDQUFDLENBQUNGLElBQUksRUFBWUMsSUFBYyxDQUFDLEdBQzlDM0osTUFBTSxDQUFDQyxRQUFRLENBQUN5SixJQUFJLENBQUMsR0FDckJBLElBQUksR0FDSjFKLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDMEosSUFBSSxDQUFDLEdBQ3JCQSxJQUFJLEdBQ0pHLEdBQUc7QUFDVDtBQUVPLFNBQVNDLGNBQWNBLENBQzVCQyxTQUFpQixFQUNqQnhELFNBQW1DLEVBQ3RCO0VBQ2IsUUFBUXdELFNBQVM7SUFDZixLQUFLViwwQkFBZSxDQUFDVyxJQUFJO0lBQ3pCLEtBQUtYLDBCQUFlLENBQUNZLE9BQU87TUFBRTtRQUM1QixJQUFBQyxtQkFBQSxHQUFtQkMsa0JBQWtCLENBQUNKLFNBQVMsRUFBRXhELFNBQVMsQ0FBQztVQUFBNkQsb0JBQUEsT0FBQXZDLGVBQUEsYUFBQXFDLG1CQUFBO1VBQXBEdkQsR0FBRyxHQUFBeUQsb0JBQUE7VUFBRXhELEdBQUcsR0FBQXdELG9CQUFBO1FBQ2YsSUFBTUMsSUFBSSxHQUFHekQsR0FBRyxHQUFHRCxHQUFHO1FBQ3RCLElBQU0yRCxJQUFJLEdBQUcsSUFBQUMseUJBQWtCLEVBQUNGLElBQUksQ0FBQyxJQUFJLEdBQUc7UUFDNUMsSUFBTWhGLE1BQU0sR0FBRyxDQUNiLElBQUFtRix5QkFBa0IsRUFBQzdELEdBQUcsRUFBRTJELElBQUksRUFBRSxPQUFPLENBQUMsRUFDdEMsSUFBQUUseUJBQWtCLEVBQUM1RCxHQUFHLEVBQUUwRCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQ3RDO1FBQ0QsSUFBTUcsV0FBb0MsR0FBRztVQUMzQ3BGLE1BQU0sRUFBTkEsTUFBTTtVQUNOakksS0FBSyxFQUFFaUksTUFBMEI7VUFDakMzRixJQUFJLEVBQUVnTCx1QkFBWSxDQUFDQyxLQUFLO1VBQ3hCQyxXQUFXLEVBQUUsQ0FBQ0YsdUJBQVksQ0FBQ0MsS0FBSyxDQUFDO1VBQ2pDRSxHQUFHLEVBQUUsSUFBSTtVQUNUUCxJQUFJLEVBQUpBO1FBQ0YsQ0FBQztRQUNELE9BQU9HLFdBQVc7TUFDcEI7SUFFQSxLQUFLcEIsMEJBQWUsV0FBUTtNQUFFO1FBQzVCLElBQU1vQixZQUFvQyxHQUFHO1VBQzNDcEYsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztVQUNyQmpJLEtBQUssRUFBRSxJQUFJO1VBQ1hzQyxJQUFJLEVBQUVnTCx1QkFBWSxDQUFDSSxNQUFNO1VBQ3pCRCxHQUFHLEVBQUU7UUFDUCxDQUFDO1FBQ0QsT0FBT0osWUFBVztNQUNwQjtJQUVBO01BQVM7UUFDUDtRQUNBLElBQU1BLGFBQW1DLEdBQUc7VUFDMUNwRixNQUFNLEVBQUVrQixTQUFTLENBQUNHLE1BQWtCO1VBQ3BDdEosS0FBSyxFQUFFbUosU0FBUyxDQUFDRyxNQUFrQjtVQUNuQ2hILElBQUksRUFBRWdMLHVCQUFZLENBQUNLLFdBQVc7VUFDOUJGLEdBQUcsRUFBRTtRQUNQLENBQUM7UUFDRCxPQUFPSixhQUFXO01BQ3BCO0VBQ0Y7QUFDRjtBQUVBLFNBQVNsRCxnQkFBZ0JBLENBQUEsRUFBc0U7RUFBQSxJQUFyRWhCLFNBQW1DLEdBQUExSCxTQUFBLENBQUEvQixNQUFBLFFBQUErQixTQUFBLFFBQUF3QyxTQUFBLEdBQUF4QyxTQUFBLE1BQUc7SUFBQzZILE1BQU0sRUFBRTtFQUFFLENBQUM7RUFDMUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1zRSxVQUFVLEdBQUdDLHdCQUF3QixDQUFDMUUsU0FBUyxDQUFDN0csSUFBSSxDQUFDO0VBQzNELE9BQUFkLGFBQUE7SUFDRVosSUFBSSxFQUFFdUksU0FBUyxDQUFDQSxTQUFtQjtJQUNuQ3VDLEVBQUUsRUFBRXZDLFNBQVMsQ0FBQ0EsU0FBbUI7SUFDakN5QyxNQUFNLEVBQUUsRUFBRTtJQUNWeUIsV0FBVyxFQUFFWCxjQUFjLENBQUNrQixVQUFVLENBQUN0TCxJQUFJLEVBQUU2RyxTQUFTO0VBQUMsR0FDcER5RSxVQUFVO0FBRWpCO0FBRUEsU0FBU2Isa0JBQWtCQSxDQUFDekssSUFBbUIsRUFBRTZHLFNBQW1DLEVBQVk7RUFDOUYsUUFBUTdHLElBQUk7SUFDVixLQUFLMkosMEJBQWUsQ0FBQ1csSUFBSTtJQUN6QixLQUFLWCwwQkFBZSxDQUFDWSxPQUFPO01BQzFCLE9BQU8sQ0FDTGxLLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDdUcsU0FBUyxDQUFDSSxHQUFHLENBQUMsR0FBSUosU0FBUyxDQUFDSSxHQUFHLEdBQWNrRCxHQUFHLEVBQ2hFOUosTUFBTSxDQUFDQyxRQUFRLENBQUN1RyxTQUFTLENBQUNLLEdBQUcsQ0FBQyxHQUFJTCxTQUFTLENBQUNLLEdBQUcsR0FBY2lELEdBQUcsQ0FDakU7SUFFSCxLQUFLUiwwQkFBZSxXQUFRO01BQzFCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2Y7TUFDRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNqQjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM3QixvQkFBb0JBLENBQUNlLEtBQWtCLEVBQUVoQyxTQUFtQyxFQUFRO0VBQzNGLFFBQVFnQyxLQUFLLENBQUM3SSxJQUFJO0lBQ2hCLEtBQUsySiwwQkFBZSxDQUFDVyxJQUFJO0lBQ3pCLEtBQUtYLDBCQUFlLENBQUNZLE9BQU87TUFBRTtRQUFBLElBQUFpQixlQUFBLEVBQUFDLGtCQUFBO1FBQzVCLElBQU05RixNQUFNLEdBQUcsRUFBQTZGLGVBQUEsR0FBQTNDLEtBQUssQ0FBQ2hHLFFBQVEsY0FBQTJJLGVBQUEsdUJBQWRBLGVBQUEsQ0FBZ0I3RixNQUFNLE9BQUE4RixrQkFBQSxHQUFJNUMsS0FBSyxDQUFDa0MsV0FBVyxjQUFBVSxrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1COUYsTUFBTTtRQUNsRSxJQUFJQSxNQUFNLEVBQUU7VUFDVkEsTUFBTSxDQUFDc0IsR0FBRyxHQUFHNkMsT0FBTyxDQUFDakQsU0FBUyxDQUFDSSxHQUFHLEVBQUV0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1VBQ3JEQSxNQUFNLENBQUN1QixHQUFHLEdBQUc0QyxPQUFPLENBQUNqRCxTQUFTLENBQUNLLEdBQUcsRUFBRXZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDdkQ7UUFDQTtNQUNGO0lBQ0E7TUFDRTtFQUNKO0FBQ0Y7O0FBRUE7QUFDQSxJQUFNK0YsV0FBVyxHQUFHO0VBQ2xCQyxNQUFNLEVBQUU7SUFDTjNMLElBQUksRUFBRTJKLDBCQUFlLENBQUNXLElBQUk7SUFDMUJzQixZQUFZLEVBQUVDLHdCQUFVLENBQUNDO0VBQzNCLENBQUM7RUFDREMsT0FBTyxFQUFFO0lBQ1AvTCxJQUFJLEVBQUUySiwwQkFBZSxDQUFDVyxJQUFJO0lBQzFCc0IsWUFBWSxFQUFFQyx3QkFBVSxDQUFDQztFQUMzQixDQUFDO0VBQ0Q3RixNQUFNLEVBQUU7SUFDTmpHLElBQUksRUFBRTJKLDBCQUFlLENBQUMxRCxNQUFNO0lBQzVCMkYsWUFBWSxFQUFFQyx3QkFBVSxDQUFDRztFQUMzQixDQUFDO0VBQ0RDLE1BQU0sRUFBRTtJQUNOak0sSUFBSSxFQUFFMkosMEJBQWUsQ0FBQzFELE1BQU07SUFDNUIyRixZQUFZLEVBQUVDLHdCQUFVLENBQUNHO0VBQzNCLENBQUM7RUFDRCxTQUFPO0lBQ0xoTSxJQUFJLEVBQUUySiwwQkFBZSxDQUFDVyxJQUFJO0lBQzFCc0IsWUFBWSxFQUFFQyx3QkFBVSxDQUFDQztFQUMzQixDQUFDO0VBQ0QsT0FBSztJQUNIOUwsSUFBSSxFQUFFMkosMEJBQWUsQ0FBQ1ksT0FBTztJQUM3QnFCLFlBQVksRUFBRUMsd0JBQVUsQ0FBQ0s7RUFDM0IsQ0FBQztFQUNEQyxJQUFJLEVBQUU7SUFDSm5NLElBQUksRUFBRTJKLDBCQUFlLENBQUNZLE9BQU87SUFDN0JxQixZQUFZLEVBQUVDLHdCQUFVLENBQUNLO0VBQzNCLENBQUM7RUFDRCxXQUFTO0lBQ1BsTSxJQUFJLEVBQUUySiwwQkFBZSxXQUFRO0lBQzdCaUMsWUFBWSxFQUFFQyx3QkFBVSxDQUFDTztFQUMzQixDQUFDO0VBQ0RDLElBQUksRUFBRTtJQUNKck0sSUFBSSxFQUFFMkosMEJBQWUsV0FBUTtJQUM3QmlDLFlBQVksRUFBRUMsd0JBQVUsQ0FBQ087RUFDM0I7QUFDRixDQUFDO0FBRUQsU0FBU2Isd0JBQXdCQSxDQUFDZSxLQUFjLEVBQXdDO0VBQ3RGLElBQU10TSxJQUFJLEdBQUdzTSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUMsV0FBVyxDQUFDLENBQUM7RUFDakMsSUFBSSxDQUFDdk0sSUFBSSxJQUFJLENBQUMwTCxXQUFXLENBQUMxTCxJQUFJLENBQUMsRUFBRTtJQUMvQndNLG1CQUFPLENBQUNDLElBQUksa0NBQUF6SyxNQUFBLENBQ3VCaEMsSUFBSSxtREFDdkMsQ0FBQztJQUNELE9BQU8wTCxXQUFXLENBQUN6RixNQUFNO0VBQzNCO0VBRUEsT0FBT3lGLFdBQVcsQ0FBQzFMLElBQUksQ0FBQztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTME0sZ0JBQWdCQSxDQUFDNU0sT0FBc0IsRUFBRXdHLEtBQWtCLEVBQVc7RUFDcEY7RUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQ3RHLElBQUksRUFBRTtJQUNmLE9BQU8sSUFBSTtFQUNiO0VBQ0E7RUFDQSxJQUFJc0csS0FBSyxDQUFDcUcsTUFBTSxDQUFDQyxNQUFNLEtBQUs5TSxPQUFPLENBQUNzSixFQUFFLEVBQUU7SUFDdEMsT0FBTyxJQUFJO0VBQ2I7RUFDQTtFQUNBLElBQUksQ0FBQzlDLEtBQUssQ0FBQ3VHLHFCQUFxQixFQUFFO0lBQ2hDLE9BQU8sSUFBSTtFQUNiO0VBRUEsT0FDRTVQLEtBQUssQ0FBQ0MsT0FBTyxDQUFDb0osS0FBSyxDQUFDdUcscUJBQXFCLENBQUMsSUFDMUN2RyxLQUFLLENBQUN1RyxxQkFBcUIsQ0FBQ0MsUUFBUSxDQUFDaE4sT0FBTyxDQUFDRSxJQUFJLElBQUksRUFBRSxDQUFDO0FBRTVEO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0rTSxpQkFBaUIsR0FBQXJOLE9BQUEsQ0FBQXFOLGlCQUFBO0VBQUEsSUFBQUMsS0FBQSxPQUFBQyxrQkFBQSwyQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFBQUMsS0FBQTtJQUFBLElBQUFDLGdCQUFBLEVBQUFDLFVBQUEsRUFBQUMsV0FBQSxFQUFBM0ssUUFBQSxFQUFBNEssZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLFdBQUEsRUFBQUMsVUFBQSxFQUFBQyxJQUFBLEVBQUFDLGFBQUE7SUFBQSxPQUFBZCxZQUFBLFlBQUFlLElBQUEsVUFBQUMsU0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBbFEsSUFBQTtRQUFBO1VBQy9CcVAsZ0JBQWdCLEdBQUFELEtBQUEsQ0FBaEJDLGdCQUFnQixFQUNoQkMsVUFBVSxHQUFBRixLQUFBLENBQVZFLFVBQVUsRUFDVkMsV0FBVyxHQUFBSCxLQUFBLENBQVhHLFdBQVcsRUFDWDNLLFFBQVEsR0FBQXdLLEtBQUEsQ0FBUnhLLFFBQVE7VUFBQXNMLFFBQUEsQ0FBQUMsSUFBQTtVQUFBLE1BSUpiLFVBQVUsSUFDVkMsV0FBVyxJQUNYM0ssUUFBUSxJQUNSLEVBQUE0SyxnQkFBQSxHQUFBNUssUUFBUSxDQUFDUSxNQUFNLGNBQUFvSyxnQkFBQSx1QkFBZkEsZ0JBQUEsQ0FBaUJyUSxNQUFNLE1BQUssQ0FBQyxJQUM3QnlGLFFBQVEsQ0FBQ2lCLE9BQU8sSUFDaEIsRUFBQTRKLGdCQUFBLEdBQUE3SyxRQUFRLENBQUMzQixNQUFNLGNBQUF3TSxnQkFBQSx1QkFBZkEsZ0JBQUEsQ0FBaUJ0USxNQUFNLE1BQUssQ0FBQztZQUFBK1EsUUFBQSxDQUFBbFEsSUFBQTtZQUFBO1VBQUE7VUFFdkIwUCxHQUFHLEdBQUcsQ0FBQzlLLFFBQVEsQ0FBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRzJCLFFBQVEsQ0FBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1VBQ25EME0sR0FBRyxHQUFHLENBQUMvSyxRQUFRLENBQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcyQixRQUFRLENBQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztVQUNuRDJNLFdBQVcsR0FBR1EsaUJBQWlCLENBQUNWLEdBQUcsRUFBRUMsR0FBRyxFQUFFL0ssUUFBUSxDQUFDaUIsT0FBTyxDQUFDO1VBRTNEZ0ssVUFBVSxHQUNkUixnQkFBZ0IsS0FBS2dCLDJCQUFnQixDQUFDQyxHQUFHLEdBQ3JDQyxjQUFTLENBQUNDLGdCQUFnQixDQUFDQyxrQkFBa0IsQ0FBQ25CLFVBQVUsQ0FBQyxFQUFFO1lBQ3pENU4sR0FBRyxFQUFFO2NBQ0g2TixXQUFXLEVBQUVrQixrQkFBa0IsQ0FBQ2xCLFdBQVc7WUFDN0M7VUFDRixDQUFDLENBQUMsR0FDRm1CLHNCQUFhLENBQUNGLGdCQUFnQixDQUFDbEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQUFZLFFBQUEsQ0FBQWxRLElBQUE7VUFBQSxPQUNqQzZQLFVBQVUsQ0FBQ2MsV0FBVyxDQUFDO1lBQUNDLEtBQUssRUFBRWhCO1VBQVcsQ0FBUSxDQUFDO1FBQUE7VUFBaEVFLElBQUksR0FBQUksUUFBQSxDQUFBVyxJQUFBO1VBQ0pkLGFBQWEsR0FBR2UsWUFBWSxDQUFDaEIsSUFBSSxDQUFDLENBQUNuTixHQUFHLENBQUMsVUFBQWpELENBQUMsRUFBSTtZQUNoRCxPQUFBdUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0t2QixDQUFDO2NBQ0ppTyxZQUFZLEVBQUVqTyxDQUFDLENBQUNpTyxZQUFZLElBQUlqQywwQkFBZSxDQUFDMUQsTUFBTTtjQUN0RG1ELEVBQUUsRUFBRXpMLENBQUMsQ0FBQ3lMLEVBQUUsSUFBSXpMLENBQUMsQ0FBQ1c7WUFBSTtVQUV0QixDQUFDLENBQUM7VUFFRnVFLFFBQVEsQ0FBQ1EsTUFBTSxHQUFHMkssYUFBYTtRQUFDO1VBQUFHLFFBQUEsQ0FBQWxRLElBQUE7VUFBQTtRQUFBO1VBQUFrUSxRQUFBLENBQUFDLElBQUE7VUFBQUQsUUFBQSxDQUFBYSxFQUFBLEdBQUFiLFFBQUE7UUFBQTtRQUFBO1VBQUEsT0FBQUEsUUFBQSxDQUFBYyxJQUFBO01BQUE7SUFBQSxHQUFBN0IsT0FBQTtFQUFBLENBS3JDO0VBQUEsZ0JBekNZTCxpQkFBaUJBLENBQUFtQyxFQUFBO0lBQUEsT0FBQWxDLEtBQUEsQ0FBQS9OLEtBQUEsT0FBQUUsU0FBQTtFQUFBO0FBQUEsR0F5QzdCOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNNFAsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUloQixJQUEyQixFQUFvQjtFQUFBLElBQUFvQixjQUFBO0VBQ25FLElBQUksQ0FBQXBCLElBQUksYUFBSkEsSUFBSSxnQkFBQW9CLGNBQUEsR0FBSnBCLElBQUksQ0FBRXFCLFFBQVEsY0FBQUQsY0FBQSx1QkFBZEEsY0FBQSxDQUFnQi9SLE1BQU0sSUFBRyxDQUFDLEVBQUU7SUFDOUIsSUFBTWlTLE1BQU0sR0FBRzNRLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDb1AsSUFBSSxDQUFDcUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDRSxVQUFVLENBQUM7SUFDdkQsSUFBTUMsTUFBTSxHQUFHeEIsSUFBSSxDQUFDcUIsUUFBUSxDQUFDeE8sR0FBRyxDQUFDLFVBQUFqRCxDQUFDLEVBQUk7TUFDcEMsSUFBTTZSLEdBQUcsR0FBRyxDQUFDLENBQUM7TUFDZEgsTUFBTSxDQUFDalEsT0FBTyxDQUFDLFVBQUFxUSxVQUFVLEVBQUk7UUFDM0JELEdBQUcsQ0FBQ0MsVUFBVSxDQUFDLEdBQUc5UixDQUFDLENBQUMyUixVQUFVLENBQUNHLFVBQVUsQ0FBQztNQUM1QyxDQUFDLENBQUM7TUFDRixPQUFPRCxHQUFHO0lBQ1osQ0FBQyxDQUFDO0lBRUYsSUFBTW5NLE1BQU0sR0FBRyxJQUFBcU0sOEJBQWlCLEVBQUNILE1BQU0sRUFBRUYsTUFBTSxDQUFDO0lBQ2hEO0lBQ0EsT0FBT2hNLE1BQU0sQ0FBQ3pDLEdBQUcsQ0FBQyxVQUFBakQsQ0FBQyxFQUFJO01BQ3JCLElBQU1nUyxXQUFXLEdBQ2YsQ0FBQ2hTLENBQUMsQ0FBQ3FDLElBQUksS0FBSyxTQUFTLElBQUlyQyxDQUFDLENBQUNxQyxJQUFJLEtBQUssT0FBTyxLQUMzQyxPQUFPK04sSUFBSSxDQUFDcUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDRSxVQUFVLENBQUMzUixDQUFDLENBQUNXLElBQUksQ0FBQyxLQUFLLFFBQVE7TUFFekQsT0FBQVksYUFBQSxDQUFBQSxhQUFBLEtBQ0t2QixDQUFDO1FBQ0ppTyxZQUFZLEVBQUUrRCxXQUFXLEdBQUdDLHdCQUFtQixDQUFDNUQsTUFBTSxHQUFHck8sQ0FBQyxDQUFDaU8sWUFBWTtRQUN2RTVMLElBQUksRUFBRTJQLFdBQVcsR0FBRyxRQUFRLEdBQUdoUyxDQUFDLENBQUNxQztNQUFJO0lBRXpDLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBTyxFQUFFO0FBQ1gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNxTyxpQkFBaUJBLENBQUNWLEdBQVcsRUFBRUMsR0FBVyxFQUFFaUMsSUFBWSxFQUFFO0VBQ2pFLElBQUlqQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUlBLEdBQUcsR0FBRyxPQUFPLEVBQUU7SUFDbkMsTUFBTSxJQUFJa0MsS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQ0EsSUFBSUQsSUFBSSxHQUFHLENBQUMsRUFBRTtJQUNaLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDO0VBQy9EOztFQUVBO0VBQ0EsSUFBTUMsS0FBSyxHQUFHLENBQUMsSUFBSUYsSUFBSTtFQUN2QjtFQUNBLElBQU1HLENBQUMsR0FBRzlGLElBQUksQ0FBQytGLEtBQUssQ0FBRSxDQUFDdEMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUlvQyxLQUFLLENBQUM7RUFDakQ7RUFDQSxJQUFNRyxNQUFNLEdBQUl0QyxHQUFHLEdBQUcxRCxJQUFJLENBQUNpRyxFQUFFLEdBQUksR0FBRztFQUNwQyxJQUFNQyxDQUFDLEdBQUdsRyxJQUFJLENBQUMrRixLQUFLLENBQ2pCLENBQUMsQ0FBQyxHQUFHL0YsSUFBSSxDQUFDbUcsR0FBRyxDQUFDbkcsSUFBSSxDQUFDb0csR0FBRyxDQUFDSixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUdoRyxJQUFJLENBQUNxRyxHQUFHLENBQUNMLE1BQU0sQ0FBQyxDQUFDLEdBQUdoRyxJQUFJLENBQUNpRyxFQUFFLElBQUksQ0FBQyxHQUFJSixLQUM1RSxDQUFDO0VBRUQsT0FBTztJQUFDQyxDQUFDLEVBQURBLENBQUM7SUFBRUksQ0FBQyxFQUFEQSxDQUFDO0lBQUVJLENBQUMsRUFBRVg7RUFBSSxDQUFDO0FBQ3hCIiwiaWdub3JlTGlzdCI6W119
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/table",
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",
@@ -30,10 +30,10 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/common-utils": "3.1.0",
34
- "@kepler.gl/constants": "3.1.0",
35
- "@kepler.gl/types": "3.1.0",
36
- "@kepler.gl/utils": "3.1.0",
33
+ "@kepler.gl/common-utils": "3.1.1",
34
+ "@kepler.gl/constants": "3.1.1",
35
+ "@kepler.gl/types": "3.1.1",
36
+ "@kepler.gl/utils": "3.1.1",
37
37
  "@loaders.gl/mvt": "^4.3.2",
38
38
  "@loaders.gl/pmtiles": "^4.3.2",
39
39
  "@types/d3-array": "^2.8.0",
@@ -17,7 +17,7 @@ import {PMTilesSource, PMTilesMetadata} from '@loaders.gl/pmtiles';
17
17
  import {/* MVTSource,*/ TileJSON} from '@loaders.gl/mvt';
18
18
 
19
19
  import {getMVTMetadata} from './tileset/tileset-utils';
20
- import {parseVectorMetadata} from './tileset/vector-tile-utils';
20
+ import {parseVectorMetadata, getFieldsFromTile} from './tileset/vector-tile-utils';
21
21
 
22
22
  // apply a color for each dataset
23
23
  // to use as label colors
@@ -56,7 +56,7 @@ export function getNewDatasetColor(datasets: Datasets): RGBColor {
56
56
  export function createNewDataEntry(
57
57
  {info, data, ...opts}: ProtoDataset,
58
58
  datasets: Datasets = {}
59
- ): Datasets {
59
+ ): Datasets | null {
60
60
  const TableClass = getApplicationConfig().table ?? KeplerTable;
61
61
  let dataValidator = validateInputData;
62
62
  if (typeof TableClass.getInputDataValidator === 'function') {
@@ -65,7 +65,7 @@ export function createNewDataEntry(
65
65
 
66
66
  const validatedData = dataValidator(data);
67
67
  if (!validatedData) {
68
- return {};
68
+ return null;
69
69
  }
70
70
 
71
71
  // check if dataset already exists, and update it when loading data by batches incrementally
@@ -137,12 +137,13 @@ async function refreshRemoteData(datasetInfo: CreateTableProps) {
137
137
  return null;
138
138
  }
139
139
 
140
- const {remoteTileFormat, tilesetMetadataUrl} =
140
+ const {remoteTileFormat, tilesetMetadataUrl, tilesetDataUrl} =
141
141
  (datasetInfo.opts.metadata as VectorTileDatasetMetadata) || {};
142
142
 
143
143
  if (
144
144
  !(remoteTileFormat === RemoteTileFormat.PMTILES || remoteTileFormat === RemoteTileFormat.MVT) ||
145
- typeof tilesetMetadataUrl !== 'string'
145
+ typeof tilesetMetadataUrl !== 'string' ||
146
+ typeof tilesetDataUrl !== 'string'
146
147
  ) {
147
148
  return null;
148
149
  }
@@ -157,7 +158,16 @@ async function refreshRemoteData(datasetInfo: CreateTableProps) {
157
158
  }
158
159
 
159
160
  if (rawMetadata) {
160
- return parseVectorMetadata(rawMetadata);
161
+ const metadata = parseVectorMetadata(rawMetadata);
162
+
163
+ await getFieldsFromTile({
164
+ remoteTileFormat,
165
+ tilesetUrl: tilesetDataUrl,
166
+ metadataUrl: tilesetMetadataUrl,
167
+ metadata
168
+ });
169
+
170
+ return metadata;
161
171
  }
162
172
  } catch (err) {
163
173
  // ignore for now, and use old metadata?