@kepler.gl/deckgl-layers 3.3.0-alpha.1 → 3.3.0-alpha.11

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 (198) hide show
  1. package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
  2. package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
  3. package/dist/cjs/3d-building-layer/types.js +6 -0
  4. package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
  5. package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
  6. package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
  7. package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
  8. package/dist/cjs/globe/atmosphere-layer.js +341 -0
  9. package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
  10. package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
  11. package/dist/cjs/globe/globe-layers.js +574 -0
  12. package/dist/cjs/globe/globe-stars-layer.js +99 -0
  13. package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
  14. package/dist/cjs/globe/globe-view.js +404 -0
  15. package/dist/cjs/globe/index.js +140 -0
  16. package/dist/cjs/globe/mvt-label-layer.js +190 -0
  17. package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
  18. package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
  19. package/dist/cjs/index.js +163 -0
  20. package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
  21. package/dist/cjs/layer-utils/cluster-utils.js +95 -0
  22. package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
  23. package/dist/cjs/layer-utils/globe-cell-utils.js +203 -0
  24. package/dist/cjs/layer-utils/globe-cell-utils.spec.js +118 -0
  25. package/dist/cjs/layer-utils/shader-utils.js +38 -0
  26. package/dist/cjs/line-layer/line-layer.js +95 -0
  27. package/dist/cjs/raster/images.js +271 -0
  28. package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
  29. package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
  30. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
  31. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
  32. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
  33. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
  34. package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
  35. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  36. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
  37. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
  38. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
  39. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
  40. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
  41. package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
  42. package/dist/cjs/raster/types.js +6 -0
  43. package/dist/cjs/raster/util.js +139 -0
  44. package/dist/cjs/raster/webgl/color/colormap.js +45 -0
  45. package/dist/cjs/raster/webgl/color/filter.js +58 -0
  46. package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
  47. package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
  48. package/dist/cjs/raster/webgl/color/saturation.js +42 -0
  49. package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
  50. package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
  51. package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
  52. package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
  53. package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
  54. package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
  55. package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
  56. package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
  57. package/dist/{raster → cjs/raster}/webgl/texture/mask.js +5 -2
  58. package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
  59. package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
  60. package/dist/cjs/raster/webgl/types.js +6 -0
  61. package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
  62. package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
  63. package/dist/cjs/wms/wms-layer.js +624 -0
  64. package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
  65. package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
  66. package/dist/esm/3d-building-layer/types.js +3 -0
  67. package/dist/esm/cluster-layer/cluster-layer.js +286 -0
  68. package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
  69. package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
  70. package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
  71. package/dist/esm/globe/atmosphere-layer.js +335 -0
  72. package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
  73. package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
  74. package/dist/esm/globe/globe-layers.js +566 -0
  75. package/dist/esm/globe/globe-stars-layer.js +92 -0
  76. package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
  77. package/dist/esm/globe/globe-view.js +398 -0
  78. package/dist/esm/globe/index.js +26 -0
  79. package/dist/esm/globe/mvt-label-layer.js +187 -0
  80. package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
  81. package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
  82. package/dist/esm/index.js +22 -0
  83. package/dist/esm/layer-utils/aggregation-utils.js +172 -0
  84. package/dist/esm/layer-utils/cluster-utils.js +89 -0
  85. package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
  86. package/dist/esm/layer-utils/globe-cell-utils.js +197 -0
  87. package/dist/esm/layer-utils/globe-cell-utils.spec.js +115 -0
  88. package/dist/esm/layer-utils/shader-utils.js +32 -0
  89. package/dist/esm/line-layer/line-layer.js +91 -0
  90. package/dist/esm/raster/images.js +267 -0
  91. package/dist/esm/raster/pipeline-validation-patch.js +94 -0
  92. package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
  93. package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
  94. package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
  95. package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
  96. package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
  97. package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
  98. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
  99. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
  100. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
  101. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
  102. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
  103. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
  104. package/dist/esm/raster/raster-processing-uniforms.js +118 -0
  105. package/dist/esm/raster/types.js +3 -0
  106. package/dist/esm/raster/util.js +134 -0
  107. package/dist/esm/raster/webgl/color/colormap.js +39 -0
  108. package/dist/esm/raster/webgl/color/filter.js +52 -0
  109. package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
  110. package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
  111. package/dist/esm/raster/webgl/color/saturation.js +36 -0
  112. package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
  113. package/dist/esm/raster/webgl/index.js +26 -0
  114. package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
  115. package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
  116. package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
  117. package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
  118. package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
  119. package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
  120. package/dist/esm/raster/webgl/texture/mask.js +47 -0
  121. package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
  122. package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
  123. package/dist/esm/raster/webgl/types.js +3 -0
  124. package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
  125. package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
  126. package/dist/esm/wms/wms-layer.js +619 -0
  127. package/dist/globe/atmosphere-layer.d.ts +58 -0
  128. package/dist/globe/enhanced-multi-icon-layer.d.ts +6 -0
  129. package/dist/globe/globe-depth-disk-layer.d.ts +19 -0
  130. package/dist/globe/globe-layers.d.ts +108 -0
  131. package/dist/globe/globe-stars-layer.d.ts +10 -0
  132. package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
  133. package/dist/globe/globe-view.d.ts +23 -0
  134. package/dist/globe/index.d.ts +8 -0
  135. package/dist/globe/mvt-label-layer.d.ts +7928 -0
  136. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +138 -56
  137. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +138 -56
  138. package/dist/index.d.ts +1 -0
  139. package/dist/layer-utils/cluster-utils.d.ts +6 -1
  140. package/dist/layer-utils/globe-cell-utils.d.ts +30 -0
  141. package/dist/layer-utils/globe-cell-utils.spec.d.ts +1 -0
  142. package/dist/raster/images.d.ts +10 -1
  143. package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
  144. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
  145. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +4 -1
  146. package/dist/wms/wms-layer.d.ts +27 -0
  147. package/package.json +22 -13
  148. package/dist/3d-building-layer/3d-building-layer.js +0 -66
  149. package/dist/3d-building-layer/3d-building-utils.js +0 -166
  150. package/dist/3d-building-layer/types.js +0 -6
  151. package/dist/cluster-layer/cluster-layer.js +0 -293
  152. package/dist/column-layer/enhanced-column-layer.js +0 -135
  153. package/dist/deckgl-extensions/filter-shader-module.js +0 -26
  154. package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -90
  155. package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -108
  156. package/dist/index.js +0 -152
  157. package/dist/layer-utils/aggregation-utils.js +0 -181
  158. package/dist/layer-utils/cluster-utils.js +0 -93
  159. package/dist/layer-utils/cpu-aggregator.js +0 -798
  160. package/dist/layer-utils/shader-utils.js +0 -38
  161. package/dist/line-layer/line-layer.js +0 -95
  162. package/dist/raster/images.js +0 -259
  163. package/dist/raster/pipeline-validation-patch.js +0 -101
  164. package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
  165. package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
  166. package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
  167. package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
  168. package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
  169. package/dist/raster/raster-layer/raster-layer.js +0 -237
  170. package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
  171. package/dist/raster/raster-mesh-layer/matrix.js +0 -18
  172. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
  173. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
  174. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
  175. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
  176. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
  177. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -271
  178. package/dist/raster/raster-processing-uniforms.js +0 -124
  179. package/dist/raster/types.js +0 -6
  180. package/dist/raster/util.js +0 -139
  181. package/dist/raster/webgl/color/colormap.js +0 -45
  182. package/dist/raster/webgl/color/filter.js +0 -58
  183. package/dist/raster/webgl/color/gamma-contrast.js +0 -68
  184. package/dist/raster/webgl/color/linear-rescale.js +0 -35
  185. package/dist/raster/webgl/color/saturation.js +0 -42
  186. package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
  187. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
  188. package/dist/raster/webgl/spectral-indices/evi.js +0 -26
  189. package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
  190. package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
  191. package/dist/raster/webgl/spectral-indices/savi.js +0 -21
  192. package/dist/raster/webgl/texture/combine-bands.js +0 -65
  193. package/dist/raster/webgl/texture/reorder-bands.js +0 -72
  194. package/dist/raster/webgl/texture/rgba-image.js +0 -34
  195. package/dist/raster/webgl/types.js +0 -6
  196. package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -51
  197. package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
  198. package/dist/wms/wms-layer.js +0 -424
@@ -0,0 +1,62 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
4
+ import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
5
+ import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
6
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
7
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
9
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
10
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
11
+ // SPDX-License-Identifier: MIT
12
+ // Copyright contributors to the kepler.gl project
13
+
14
+ import { CompositeLayer } from '@deck.gl/core';
15
+ import { TileLayer as DeckGLTileLayer } from '@deck.gl/geo-layers';
16
+ import { SolidPolygonLayer } from '@deck.gl/layers';
17
+ import { BLEND_PARAMS_ALPHA } from '@kepler.gl/constants';
18
+ import { getTileData as _getTileData } from './3d-building-utils';
19
+ var ThreeDBuildingLayer = /*#__PURE__*/function (_CompositeLayer) {
20
+ function ThreeDBuildingLayer() {
21
+ _classCallCheck(this, ThreeDBuildingLayer);
22
+ return _callSuper(this, ThreeDBuildingLayer, arguments);
23
+ }
24
+ _inherits(ThreeDBuildingLayer, _CompositeLayer);
25
+ return _createClass(ThreeDBuildingLayer, [{
26
+ key: "renderSubLayers",
27
+ value:
28
+ // this layer add its subLayers to the redux store, and push sample data
29
+
30
+ function renderSubLayers(props) {
31
+ return new SolidPolygonLayer(_objectSpread(_objectSpread({}, props), {}, {
32
+ parameters: BLEND_PARAMS_ALPHA,
33
+ extruded: true,
34
+ opacity: 1,
35
+ filled: true,
36
+ getElevation: function getElevation(feature) {
37
+ return feature.properties.height || 0;
38
+ },
39
+ getPolygon: function getPolygon(feature) {
40
+ return feature.coordinates;
41
+ },
42
+ getFillColor: this.props.threeDBuildingColor
43
+ }));
44
+ }
45
+ }, {
46
+ key: "renderLayers",
47
+ value: function renderLayers() {
48
+ var _this = this;
49
+ return [new DeckGLTileLayer({
50
+ id: "".concat(this.id, "-deck-3d-building"),
51
+ getTileData: function getTileData(tile) {
52
+ return _getTileData(_this.props.mapboxApiUrl, _this.props.mapboxApiAccessToken, tile);
53
+ },
54
+ minZoom: 13,
55
+ renderSubLayers: this.renderSubLayers.bind(this),
56
+ updateTriggers: this.props.updateTriggers
57
+ })];
58
+ }
59
+ }]);
60
+ }(CompositeLayer);
61
+ export { ThreeDBuildingLayer as default };
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb21wb3NpdGVMYXllciIsIlRpbGVMYXllciIsIkRlY2tHTFRpbGVMYXllciIsIlNvbGlkUG9seWdvbkxheWVyIiwiQkxFTkRfUEFSQU1TX0FMUEhBIiwiZ2V0VGlsZURhdGEiLCJUaHJlZURCdWlsZGluZ0xheWVyIiwiX0NvbXBvc2l0ZUxheWVyIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwicmVuZGVyU3ViTGF5ZXJzIiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwicGFyYW1ldGVycyIsImV4dHJ1ZGVkIiwib3BhY2l0eSIsImZpbGxlZCIsImdldEVsZXZhdGlvbiIsImZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaGVpZ2h0IiwiZ2V0UG9seWdvbiIsImNvb3JkaW5hdGVzIiwiZ2V0RmlsbENvbG9yIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInJlbmRlckxheWVycyIsIl90aGlzIiwiaWQiLCJjb25jYXQiLCJ0aWxlIiwibWFwYm94QXBpVXJsIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtaW5ab29tIiwiYmluZCIsInVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy8zZC1idWlsZGluZy1sYXllci8zZC1idWlsZGluZy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NvbXBvc2l0ZUxheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7VGlsZUxheWVyIGFzIERlY2tHTFRpbGVMYXllcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycyc7XG5pbXBvcnQge1NvbGlkUG9seWdvbkxheWVyLCBTb2xpZFBvbHlnb25MYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtCTEVORF9QQVJBTVNfQUxQSEF9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtnZXRUaWxlRGF0YX0gZnJvbSAnLi8zZC1idWlsZGluZy11dGlscyc7XG5pbXBvcnQge1RocmVlREJ1aWxkaW5nTGF5ZXJQcm9wcywgVGlsZURhdGFJdGVtLCBUaWxlTG9hZFByb3BzfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVEQnVpbGRpbmdMYXllciBleHRlbmRzIENvbXBvc2l0ZUxheWVyPFRocmVlREJ1aWxkaW5nTGF5ZXJQcm9wcz4ge1xuICAvLyB0aGlzIGxheWVyIGFkZCBpdHMgc3ViTGF5ZXJzIHRvIHRoZSByZWR1eCBzdG9yZSwgYW5kIHB1c2ggc2FtcGxlIGRhdGFcblxuICByZW5kZXJTdWJMYXllcnMocHJvcHM6IFNvbGlkUG9seWdvbkxheWVyUHJvcHM8YW55Pikge1xuICAgIHJldHVybiBuZXcgU29saWRQb2x5Z29uTGF5ZXI8VGlsZURhdGFJdGVtPih7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHBhcmFtZXRlcnM6IEJMRU5EX1BBUkFNU19BTFBIQSxcbiAgICAgIGV4dHJ1ZGVkOiB0cnVlLFxuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIGZpbGxlZDogdHJ1ZSxcbiAgICAgIGdldEVsZXZhdGlvbjogKGZlYXR1cmU6IFRpbGVEYXRhSXRlbSkgPT4gZmVhdHVyZS5wcm9wZXJ0aWVzLmhlaWdodCB8fCAwLFxuICAgICAgZ2V0UG9seWdvbjogKGZlYXR1cmU6IFRpbGVEYXRhSXRlbSkgPT4gZmVhdHVyZS5jb29yZGluYXRlcyxcbiAgICAgIGdldEZpbGxDb2xvcjogdGhpcy5wcm9wcy50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJMYXllcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBEZWNrR0xUaWxlTGF5ZXIoe1xuICAgICAgICBpZDogYCR7dGhpcy5pZH0tZGVjay0zZC1idWlsZGluZ2AgYXMgc3RyaW5nLFxuICAgICAgICBnZXRUaWxlRGF0YTogKHRpbGU6IFRpbGVMb2FkUHJvcHMpID0+XG4gICAgICAgICAgZ2V0VGlsZURhdGEodGhpcy5wcm9wcy5tYXBib3hBcGlVcmwsIHRoaXMucHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sIHRpbGUpLFxuICAgICAgICBtaW5ab29tOiAxMyxcbiAgICAgICAgcmVuZGVyU3ViTGF5ZXJzOiB0aGlzLnJlbmRlclN1YkxheWVycy5iaW5kKHRoaXMpLFxuICAgICAgICB1cGRhdGVUcmlnZ2VyczogdGhpcy5wcm9wcy51cGRhdGVUcmlnZ2Vyc1xuICAgICAgfSlcbiAgICBdO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLGNBQWMsUUFBTyxlQUFlO0FBQzVDLFNBQVFDLFNBQVMsSUFBSUMsZUFBZSxRQUFPLHFCQUFxQjtBQUNoRSxTQUFRQyxpQkFBaUIsUUFBK0IsaUJBQWlCO0FBQ3pFLFNBQVFDLGtCQUFrQixRQUFPLHNCQUFzQjtBQUV2RCxTQUFRQyxXQUFXLElBQVhBLFlBQVcsUUFBTyxxQkFBcUI7QUFBQyxJQUczQkMsbUJBQW1CLDBCQUFBQyxlQUFBO0VBQUEsU0FBQUQsb0JBQUE7SUFBQUUsZUFBQSxPQUFBRixtQkFBQTtJQUFBLE9BQUFHLFVBQUEsT0FBQUgsbUJBQUEsRUFBQUksU0FBQTtFQUFBO0VBQUFDLFNBQUEsQ0FBQUwsbUJBQUEsRUFBQUMsZUFBQTtFQUFBLE9BQUFLLFlBQUEsQ0FBQU4sbUJBQUE7SUFBQU8sR0FBQTtJQUFBQyxLQUFBO0lBQ3RDOztJQUVBLFNBQUFDLGVBQWVBLENBQUNDLEtBQWtDLEVBQUU7TUFDbEQsT0FBTyxJQUFJYixpQkFBaUIsQ0FBQWMsYUFBQSxDQUFBQSxhQUFBLEtBQ3ZCRCxLQUFLO1FBQ1JFLFVBQVUsRUFBRWQsa0JBQWtCO1FBQzlCZSxRQUFRLEVBQUUsSUFBSTtRQUNkQyxPQUFPLEVBQUUsQ0FBQztRQUNWQyxNQUFNLEVBQUUsSUFBSTtRQUNaQyxZQUFZLEVBQUUsU0FBZEEsWUFBWUEsQ0FBR0MsT0FBcUI7VUFBQSxPQUFLQSxPQUFPLENBQUNDLFVBQVUsQ0FBQ0MsTUFBTSxJQUFJLENBQUM7UUFBQTtRQUN2RUMsVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQUdILE9BQXFCO1VBQUEsT0FBS0EsT0FBTyxDQUFDSSxXQUFXO1FBQUE7UUFDMURDLFlBQVksRUFBRSxJQUFJLENBQUNaLEtBQUssQ0FBQ2E7TUFBbUIsRUFDN0MsQ0FBQztJQUNKO0VBQUM7SUFBQWhCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFnQixZQUFZQSxDQUFBLEVBQUc7TUFBQSxJQUFBQyxLQUFBO01BQ2IsT0FBTyxDQUNMLElBQUk3QixlQUFlLENBQUM7UUFDbEI4QixFQUFFLEtBQUFDLE1BQUEsQ0FBSyxJQUFJLENBQUNELEVBQUUsc0JBQTZCO1FBQzNDM0IsV0FBVyxFQUFFLFNBQWJBLFdBQVdBLENBQUc2QixJQUFtQjtVQUFBLE9BQy9CN0IsWUFBVyxDQUFDMEIsS0FBSSxDQUFDZixLQUFLLENBQUNtQixZQUFZLEVBQUVKLEtBQUksQ0FBQ2YsS0FBSyxDQUFDb0Isb0JBQW9CLEVBQUVGLElBQUksQ0FBQztRQUFBO1FBQzdFRyxPQUFPLEVBQUUsRUFBRTtRQUNYdEIsZUFBZSxFQUFFLElBQUksQ0FBQ0EsZUFBZSxDQUFDdUIsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNoREMsY0FBYyxFQUFFLElBQUksQ0FBQ3ZCLEtBQUssQ0FBQ3VCO01BQzdCLENBQUMsQ0FBQyxDQUNIO0lBQ0g7RUFBQztBQUFBLEVBM0I4Q3ZDLGNBQWM7QUFBQSxTQUExQ00sbUJBQW1CLElBQUFrQyxPQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,157 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ import Protobuf from 'pbf';
5
+ import { VectorTile } from '@mapbox/vector-tile';
6
+ import { worldToLngLat } from 'viewport-mercator-project';
7
+ /* global fetch */
8
+ var TILE_SIZE = 512;
9
+ var MAPBOX_HOST = 'https://a.tiles.mapbox.com';
10
+ var MAP_SOURCE = '/v4/mapbox.mapbox-streets-v7';
11
+ export function getTileData(host, token, _ref) {
12
+ var _ref$index = _ref.index,
13
+ x = _ref$index.x,
14
+ y = _ref$index.y,
15
+ z = _ref$index.z;
16
+ var mapSource = "".concat(host || MAPBOX_HOST).concat(MAP_SOURCE, "/").concat(z, "/").concat(x, "/").concat(y, ".vector.pbf?access_token=").concat(token);
17
+ return fetch(mapSource).then(function (response) {
18
+ return response.arrayBuffer();
19
+ }).then(function (buffer) {
20
+ return decodeTile(x, y, z, buffer);
21
+ });
22
+ }
23
+ export function decodeTile(x, y, z, arrayBuffer) {
24
+ var tile = new VectorTile(new Protobuf(arrayBuffer));
25
+ var result = [];
26
+ var xProj = x * TILE_SIZE;
27
+ var yProj = y * TILE_SIZE;
28
+ var scale = Math.pow(2, z);
29
+ var projectFunc = project.bind(null, xProj, yProj, scale);
30
+
31
+ /* eslint-disable guard-for-in */
32
+ var layerName = 'building';
33
+ var vectorTileLayer = tile.layers[layerName];
34
+ if (!vectorTileLayer) {
35
+ return [];
36
+ }
37
+ for (var i = 0; i < vectorTileLayer.length; i++) {
38
+ var vectorTileFeature = vectorTileLayer.feature(i);
39
+ // @ts-ignore
40
+ var features = vectorTileFeatureToProp(vectorTileFeature, projectFunc);
41
+ features.forEach(function (f) {
42
+ f.properties.layer = layerName;
43
+ if (f.properties.height) {
44
+ result.push(f);
45
+ }
46
+ });
47
+ }
48
+ return result;
49
+ }
50
+ function project(x, y, scale, line, extent) {
51
+ var sizeToPixel = extent / TILE_SIZE;
52
+ for (var ii = 0; ii < line.length; ii++) {
53
+ var p = line[ii];
54
+ // LNGLAT
55
+ line[ii] = worldToLngLat([x + p[0] / sizeToPixel, y + p[1] / sizeToPixel], scale);
56
+ }
57
+ }
58
+
59
+ /* adapted from @mapbox/vector-tile/lib/vectortilefeature.js for better perf */
60
+ /* eslint-disable */
61
+ export function vectorTileFeatureToProp(vectorTileFeature, project) {
62
+ var coords = getCoordinates(vectorTileFeature);
63
+ var extent = vectorTileFeature.extent;
64
+ var i;
65
+ var j;
66
+ coords = classifyRings(coords);
67
+ for (i = 0; i < coords.length; i++) {
68
+ for (j = 0; j < coords[i].length; j++) {
69
+ project(coords[i][j], extent);
70
+ }
71
+ }
72
+ return coords.map(function (coordinates) {
73
+ return {
74
+ coordinates: coordinates,
75
+ properties: vectorTileFeature.properties
76
+ };
77
+ });
78
+ }
79
+ function getCoordinates(vectorTileFeature) {
80
+ var pbf = vectorTileFeature._pbf;
81
+ pbf.pos = vectorTileFeature._geometry;
82
+ var end = pbf.readVarint() + pbf.pos;
83
+ var cmd = 1;
84
+ var length = 0;
85
+ var x = 0;
86
+ var y = 0;
87
+ var lines = [];
88
+ var line;
89
+ while (pbf.pos < end) {
90
+ if (length <= 0) {
91
+ var cmdLen = pbf.readVarint();
92
+ cmd = cmdLen & 0x7;
93
+ length = cmdLen >> 3;
94
+ }
95
+ length--;
96
+ if (cmd === 1 || cmd === 2) {
97
+ x += pbf.readSVarint();
98
+ y += pbf.readSVarint();
99
+ if (cmd === 1) {
100
+ // moveTo
101
+ if (line) lines.push(line);
102
+ line = [];
103
+ }
104
+ if (line) line.push([x, y]);
105
+ } else if (cmd === 7) {
106
+ // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
107
+ if (line) {
108
+ line.push(line[0].slice()); // closePolygon
109
+ }
110
+ } else {
111
+ throw new Error("unknown command ".concat(cmd));
112
+ }
113
+ }
114
+ if (line) lines.push(line);
115
+ return lines;
116
+ }
117
+
118
+ // classifies an array of rings into polygons with outer rings and holes
119
+
120
+ function classifyRings(rings) {
121
+ var len = rings.length;
122
+ if (len <= 1) return [rings];
123
+ var polygons = [];
124
+ var polygon;
125
+ var ccw;
126
+ for (var i = 0; i < len; i++) {
127
+ var area = signedArea(rings[i]);
128
+ if (area === 0) {
129
+ continue;
130
+ }
131
+ if (ccw === undefined) {
132
+ ccw = area < 0;
133
+ }
134
+ if (ccw === area < 0) {
135
+ if (polygon) {
136
+ polygons.push(polygon);
137
+ }
138
+ polygon = [rings[i]];
139
+ } else if (polygon) {
140
+ polygon.push(rings[i]);
141
+ }
142
+ }
143
+ if (polygon) {
144
+ polygons.push(polygon);
145
+ }
146
+ return polygons;
147
+ }
148
+ function signedArea(ring) {
149
+ var sum = 0;
150
+ for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
151
+ p1 = ring[i];
152
+ p2 = ring[j];
153
+ sum += (p2[0] - p1[0]) * (p1[1] + p2[1]);
154
+ }
155
+ return sum;
156
+ }
157
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm90b2J1ZiIsIlZlY3RvclRpbGUiLCJ3b3JsZFRvTG5nTGF0IiwiVElMRV9TSVpFIiwiTUFQQk9YX0hPU1QiLCJNQVBfU09VUkNFIiwiZ2V0VGlsZURhdGEiLCJob3N0IiwidG9rZW4iLCJfcmVmIiwiX3JlZiRpbmRleCIsImluZGV4IiwieCIsInkiLCJ6IiwibWFwU291cmNlIiwiY29uY2F0IiwiZmV0Y2giLCJ0aGVuIiwicmVzcG9uc2UiLCJhcnJheUJ1ZmZlciIsImJ1ZmZlciIsImRlY29kZVRpbGUiLCJ0aWxlIiwicmVzdWx0IiwieFByb2oiLCJ5UHJvaiIsInNjYWxlIiwiTWF0aCIsInBvdyIsInByb2plY3RGdW5jIiwicHJvamVjdCIsImJpbmQiLCJsYXllck5hbWUiLCJ2ZWN0b3JUaWxlTGF5ZXIiLCJsYXllcnMiLCJpIiwibGVuZ3RoIiwidmVjdG9yVGlsZUZlYXR1cmUiLCJmZWF0dXJlIiwiZmVhdHVyZXMiLCJ2ZWN0b3JUaWxlRmVhdHVyZVRvUHJvcCIsImZvckVhY2giLCJmIiwicHJvcGVydGllcyIsImxheWVyIiwiaGVpZ2h0IiwicHVzaCIsImxpbmUiLCJleHRlbnQiLCJzaXplVG9QaXhlbCIsImlpIiwicCIsImNvb3JkcyIsImdldENvb3JkaW5hdGVzIiwiaiIsImNsYXNzaWZ5UmluZ3MiLCJtYXAiLCJjb29yZGluYXRlcyIsInBiZiIsIl9wYmYiLCJwb3MiLCJfZ2VvbWV0cnkiLCJlbmQiLCJyZWFkVmFyaW50IiwiY21kIiwibGluZXMiLCJjbWRMZW4iLCJyZWFkU1ZhcmludCIsInNsaWNlIiwiRXJyb3IiLCJyaW5ncyIsImxlbiIsInBvbHlnb25zIiwicG9seWdvbiIsImNjdyIsImFyZWEiLCJzaWduZWRBcmVhIiwidW5kZWZpbmVkIiwicmluZyIsInN1bSIsInAxIiwicDIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvM2QtYnVpbGRpbmctbGF5ZXIvM2QtYnVpbGRpbmctdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFByb3RvYnVmIGZyb20gJ3BiZic7XG5pbXBvcnQge1ZlY3RvclRpbGV9IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuaW1wb3J0IHt3b3JsZFRvTG5nTGF0fSBmcm9tICd2aWV3cG9ydC1tZXJjYXRvci1wcm9qZWN0JztcbmltcG9ydCB7XG4gIENvb3JkaW5hdGVzLFxuICBGbGF0RmlndXJlLFxuICBUaWxlRGF0YUl0ZW0sXG4gIFZlY3RvclRpbGVGZWF0dXJlLFxuICBWZWN0b3JUaWxlRmVhdHVyZVByb3BlcnRpZXNcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qIGdsb2JhbCBmZXRjaCAqL1xuY29uc3QgVElMRV9TSVpFID0gNTEyO1xuY29uc3QgTUFQQk9YX0hPU1QgPSAnaHR0cHM6Ly9hLnRpbGVzLm1hcGJveC5jb20nO1xuY29uc3QgTUFQX1NPVVJDRSA9ICcvdjQvbWFwYm94Lm1hcGJveC1zdHJlZXRzLXY3JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbGVEYXRhKFxuICBob3N0OiBzdHJpbmcsXG4gIHRva2VuOiBzdHJpbmcsXG4gIHtpbmRleDoge3gsIHksIHp9fToge2luZGV4OiBDb29yZGluYXRlc31cbik6IFByb21pc2U8VGlsZURhdGFJdGVtW10+IHtcbiAgY29uc3QgbWFwU291cmNlID0gYCR7XG4gICAgaG9zdCB8fCBNQVBCT1hfSE9TVFxuICB9JHtNQVBfU09VUkNFfS8ke3p9LyR7eH0vJHt5fS52ZWN0b3IucGJmP2FjY2Vzc190b2tlbj0ke3Rva2VufWA7XG5cbiAgcmV0dXJuIGZldGNoKG1hcFNvdXJjZSlcbiAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5hcnJheUJ1ZmZlcigpKVxuICAgIC50aGVuKGJ1ZmZlciA9PiBkZWNvZGVUaWxlKHgsIHksIHosIGJ1ZmZlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVGlsZShcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHo6IG51bWJlcixcbiAgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyXG4pOiBUaWxlRGF0YUl0ZW1bXSB7XG4gIGNvbnN0IHRpbGUgPSBuZXcgVmVjdG9yVGlsZShuZXcgUHJvdG9idWYoYXJyYXlCdWZmZXIpKTtcblxuICBjb25zdCByZXN1bHQ6IFRpbGVEYXRhSXRlbVtdID0gW107XG4gIGNvbnN0IHhQcm9qID0geCAqIFRJTEVfU0laRTtcbiAgY29uc3QgeVByb2ogPSB5ICogVElMRV9TSVpFO1xuICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDIsIHopO1xuXG4gIGNvbnN0IHByb2plY3RGdW5jID0gcHJvamVjdC5iaW5kKG51bGwsIHhQcm9qLCB5UHJvaiwgc2NhbGUpO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIGd1YXJkLWZvci1pbiAqL1xuICBjb25zdCBsYXllck5hbWUgPSAnYnVpbGRpbmcnO1xuICBjb25zdCB2ZWN0b3JUaWxlTGF5ZXIgPSB0aWxlLmxheWVyc1tsYXllck5hbWVdO1xuICBpZiAoIXZlY3RvclRpbGVMYXllcikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZlY3RvclRpbGVMYXllci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZlY3RvclRpbGVGZWF0dXJlID0gdmVjdG9yVGlsZUxheWVyLmZlYXR1cmUoaSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGZlYXR1cmVzID0gdmVjdG9yVGlsZUZlYXR1cmVUb1Byb3AodmVjdG9yVGlsZUZlYXR1cmUsIHByb2plY3RGdW5jKTtcbiAgICBmZWF0dXJlcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgZi5wcm9wZXJ0aWVzLmxheWVyID0gbGF5ZXJOYW1lO1xuICAgICAgaWYgKGYucHJvcGVydGllcy5oZWlnaHQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcHJvamVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgc2NhbGU6IG51bWJlciwgbGluZTogRmxhdEZpZ3VyZSwgZXh0ZW50OiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3Qgc2l6ZVRvUGl4ZWwgPSBleHRlbnQgLyBUSUxFX1NJWkU7XG5cbiAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGxpbmUubGVuZ3RoOyBpaSsrKSB7XG4gICAgY29uc3QgcCA9IGxpbmVbaWldO1xuICAgIC8vIExOR0xBVFxuICAgIGxpbmVbaWldID0gd29ybGRUb0xuZ0xhdChbeCArIHBbMF0gLyBzaXplVG9QaXhlbCwgeSArIHBbMV0gLyBzaXplVG9QaXhlbF0sIHNjYWxlKTtcbiAgfVxufVxuXG4vKiBhZGFwdGVkIGZyb20gQG1hcGJveC92ZWN0b3ItdGlsZS9saWIvdmVjdG9ydGlsZWZlYXR1cmUuanMgZm9yIGJldHRlciBwZXJmICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvclRpbGVGZWF0dXJlVG9Qcm9wKFxuICB2ZWN0b3JUaWxlRmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsXG4gIHByb2plY3Q6IChyOiBGbGF0RmlndXJlLCBuOiBudW1iZXIpID0+IHZvaWRcbik6IHtjb29yZGluYXRlczogRmxhdEZpZ3VyZVtdOyBwcm9wZXJ0aWVzOiBWZWN0b3JUaWxlRmVhdHVyZVByb3BlcnRpZXN9W10ge1xuICBsZXQgY29vcmRzOiBGbGF0RmlndXJlW11bXSB8IEZsYXRGaWd1cmVbXSA9IGdldENvb3JkaW5hdGVzKHZlY3RvclRpbGVGZWF0dXJlKTtcbiAgY29uc3QgZXh0ZW50ID0gdmVjdG9yVGlsZUZlYXR1cmUuZXh0ZW50O1xuICBsZXQgaTogbnVtYmVyO1xuICBsZXQgajogbnVtYmVyO1xuXG4gIGNvb3JkcyA9IGNsYXNzaWZ5UmluZ3MoY29vcmRzKTtcbiAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIHByb2plY3QoY29vcmRzW2ldW2pdLCBleHRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb29yZHMubWFwKGNvb3JkaW5hdGVzID0+ICh7XG4gICAgY29vcmRpbmF0ZXMsXG4gICAgcHJvcGVydGllczogdmVjdG9yVGlsZUZlYXR1cmUucHJvcGVydGllc1xuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGdldENvb3JkaW5hdGVzKHZlY3RvclRpbGVGZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSk6IEZsYXRGaWd1cmVbXSB7XG4gIGNvbnN0IHBiZiA9IHZlY3RvclRpbGVGZWF0dXJlLl9wYmY7XG4gIHBiZi5wb3MgPSB2ZWN0b3JUaWxlRmVhdHVyZS5fZ2VvbWV0cnk7XG5cbiAgY29uc3QgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3M7XG4gIGxldCBjbWQgPSAxO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG5cbiAgY29uc3QgbGluZXM6IEZsYXRGaWd1cmVbXSA9IFtdO1xuICBsZXQgbGluZTogRmxhdEZpZ3VyZSB8IHVuZGVmaW5lZDtcblxuICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgY29uc3QgY21kTGVuID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICAgIGNtZCA9IGNtZExlbiAmIDB4NztcbiAgICAgIGxlbmd0aCA9IGNtZExlbiA+PiAzO1xuICAgIH1cblxuICAgIGxlbmd0aC0tO1xuXG4gICAgaWYgKGNtZCA9PT0gMSB8fCBjbWQgPT09IDIpIHtcbiAgICAgIHggKz0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgICB5ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuXG4gICAgICBpZiAoY21kID09PSAxKSB7XG4gICAgICAgIC8vIG1vdmVUb1xuICAgICAgICBpZiAobGluZSkgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgbGluZSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAobGluZSkgbGluZS5wdXNoKFt4LCB5XSk7XG4gICAgfSBlbHNlIGlmIChjbWQgPT09IDcpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwbmlrLXZlY3Rvci10aWxlL2lzc3Vlcy85MFxuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgbGluZS5wdXNoKGxpbmVbMF0uc2xpY2UoKSBhcyBbbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKTsgLy8gY2xvc2VQb2x5Z29uXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7Y21kfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsaW5lKSBsaW5lcy5wdXNoKGxpbmUpO1xuXG4gIHJldHVybiBsaW5lcztcbn1cblxuLy8gY2xhc3NpZmllcyBhbiBhcnJheSBvZiByaW5ncyBpbnRvIHBvbHlnb25zIHdpdGggb3V0ZXIgcmluZ3MgYW5kIGhvbGVzXG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmluZ3MocmluZ3M6IEZsYXRGaWd1cmVbXSk6IEZsYXRGaWd1cmVbXVtdIHtcbiAgY29uc3QgbGVuID0gcmluZ3MubGVuZ3RoO1xuXG4gIGlmIChsZW4gPD0gMSkgcmV0dXJuIFtyaW5nc107XG5cbiAgY29uc3QgcG9seWdvbnM6IEZsYXRGaWd1cmVbXVtdID0gW107XG4gIGxldCBwb2x5Z29uOiBGbGF0RmlndXJlW10gfCB1bmRlZmluZWQ7XG4gIGxldCBjY3c6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGFyZWEgPSBzaWduZWRBcmVhKHJpbmdzW2ldKTtcbiAgICBpZiAoYXJlYSA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNjdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjY3cgPSBhcmVhIDwgMDtcbiAgICB9XG5cbiAgICBpZiAoY2N3ID09PSBhcmVhIDwgMCkge1xuICAgICAgaWYgKHBvbHlnb24pIHtcbiAgICAgICAgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICAgIH1cbiAgICAgIHBvbHlnb24gPSBbcmluZ3NbaV1dO1xuICAgIH0gZWxzZSBpZiAocG9seWdvbikge1xuICAgICAgcG9seWdvbi5wdXNoKHJpbmdzW2ldKTtcbiAgICB9XG4gIH1cbiAgaWYgKHBvbHlnb24pIHtcbiAgICBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuICB9XG5cbiAgcmV0dXJuIHBvbHlnb25zO1xufVxuXG5mdW5jdGlvbiBzaWduZWRBcmVhKHJpbmc6IEZsYXRGaWd1cmUpOiBudW1iZXIge1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMSwgcDE6IG51bWJlcltdLCBwMjogbnVtYmVyW107IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICBwMSA9IHJpbmdbaV07XG4gICAgcDIgPSByaW5nW2pdO1xuICAgIHN1bSArPSAocDJbMF0gLSBwMVswXSkgKiAocDFbMV0gKyBwMlsxXSk7XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQSxPQUFPQSxRQUFRLE1BQU0sS0FBSztBQUMxQixTQUFRQyxVQUFVLFFBQU8scUJBQXFCO0FBQzlDLFNBQVFDLGFBQWEsUUFBTywyQkFBMkI7QUFTdkQ7QUFDQSxJQUFNQyxTQUFTLEdBQUcsR0FBRztBQUNyQixJQUFNQyxXQUFXLEdBQUcsNEJBQTRCO0FBQ2hELElBQU1DLFVBQVUsR0FBRyw4QkFBOEI7QUFFakQsT0FBTyxTQUFTQyxXQUFXQSxDQUN6QkMsSUFBWSxFQUNaQyxLQUFhLEVBQUFDLElBQUEsRUFFWTtFQUFBLElBQUFDLFVBQUEsR0FBQUQsSUFBQSxDQUR4QkUsS0FBSztJQUFHQyxDQUFDLEdBQUFGLFVBQUEsQ0FBREUsQ0FBQztJQUFFQyxDQUFDLEdBQUFILFVBQUEsQ0FBREcsQ0FBQztJQUFFQyxDQUFDLEdBQUFKLFVBQUEsQ0FBREksQ0FBQztFQUVoQixJQUFNQyxTQUFTLE1BQUFDLE1BQUEsQ0FDYlQsSUFBSSxJQUFJSCxXQUFXLEVBQUFZLE1BQUEsQ0FDbEJYLFVBQVUsT0FBQVcsTUFBQSxDQUFJRixDQUFDLE9BQUFFLE1BQUEsQ0FBSUosQ0FBQyxPQUFBSSxNQUFBLENBQUlILENBQUMsK0JBQUFHLE1BQUEsQ0FBNEJSLEtBQUssQ0FBRTtFQUUvRCxPQUFPUyxLQUFLLENBQUNGLFNBQVMsQ0FBQyxDQUNwQkcsSUFBSSxDQUFDLFVBQUFDLFFBQVE7SUFBQSxPQUFJQSxRQUFRLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0VBQUEsRUFBQyxDQUN4Q0YsSUFBSSxDQUFDLFVBQUFHLE1BQU07SUFBQSxPQUFJQyxVQUFVLENBQUNWLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVPLE1BQU0sQ0FBQztFQUFBLEVBQUM7QUFDaEQ7QUFFQSxPQUFPLFNBQVNDLFVBQVVBLENBQ3hCVixDQUFTLEVBQ1RDLENBQVMsRUFDVEMsQ0FBUyxFQUNUTSxXQUF3QixFQUNSO0VBQ2hCLElBQU1HLElBQUksR0FBRyxJQUFJdEIsVUFBVSxDQUFDLElBQUlELFFBQVEsQ0FBQ29CLFdBQVcsQ0FBQyxDQUFDO0VBRXRELElBQU1JLE1BQXNCLEdBQUcsRUFBRTtFQUNqQyxJQUFNQyxLQUFLLEdBQUdiLENBQUMsR0FBR1QsU0FBUztFQUMzQixJQUFNdUIsS0FBSyxHQUFHYixDQUFDLEdBQUdWLFNBQVM7RUFDM0IsSUFBTXdCLEtBQUssR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFZixDQUFDLENBQUM7RUFFNUIsSUFBTWdCLFdBQVcsR0FBR0MsT0FBTyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFUCxLQUFLLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxDQUFDOztFQUUzRDtFQUNBLElBQU1NLFNBQVMsR0FBRyxVQUFVO0VBQzVCLElBQU1DLGVBQWUsR0FBR1gsSUFBSSxDQUFDWSxNQUFNLENBQUNGLFNBQVMsQ0FBQztFQUM5QyxJQUFJLENBQUNDLGVBQWUsRUFBRTtJQUNwQixPQUFPLEVBQUU7RUFDWDtFQUNBLEtBQUssSUFBSUUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixlQUFlLENBQUNHLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDL0MsSUFBTUUsaUJBQWlCLEdBQUdKLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDSCxDQUFDLENBQUM7SUFDcEQ7SUFDQSxJQUFNSSxRQUFRLEdBQUdDLHVCQUF1QixDQUFDSCxpQkFBaUIsRUFBRVIsV0FBVyxDQUFDO0lBQ3hFVSxRQUFRLENBQUNFLE9BQU8sQ0FBQyxVQUFBQyxDQUFDLEVBQUk7TUFDcEJBLENBQUMsQ0FBQ0MsVUFBVSxDQUFDQyxLQUFLLEdBQUdaLFNBQVM7TUFDOUIsSUFBSVUsQ0FBQyxDQUFDQyxVQUFVLENBQUNFLE1BQU0sRUFBRTtRQUN2QnRCLE1BQU0sQ0FBQ3VCLElBQUksQ0FBQ0osQ0FBQyxDQUFDO01BQ2hCO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPbkIsTUFBTTtBQUNmO0FBRUEsU0FBU08sT0FBT0EsQ0FBQ25CLENBQVMsRUFBRUMsQ0FBUyxFQUFFYyxLQUFhLEVBQUVxQixJQUFnQixFQUFFQyxNQUFjLEVBQVE7RUFDNUYsSUFBTUMsV0FBVyxHQUFHRCxNQUFNLEdBQUc5QyxTQUFTO0VBRXRDLEtBQUssSUFBSWdELEVBQUUsR0FBRyxDQUFDLEVBQUVBLEVBQUUsR0FBR0gsSUFBSSxDQUFDWCxNQUFNLEVBQUVjLEVBQUUsRUFBRSxFQUFFO0lBQ3ZDLElBQU1DLENBQUMsR0FBR0osSUFBSSxDQUFDRyxFQUFFLENBQUM7SUFDbEI7SUFDQUgsSUFBSSxDQUFDRyxFQUFFLENBQUMsR0FBR2pELGFBQWEsQ0FBQyxDQUFDVSxDQUFDLEdBQUd3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdGLFdBQVcsRUFBRXJDLENBQUMsR0FBR3VDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0YsV0FBVyxDQUFDLEVBQUV2QixLQUFLLENBQUM7RUFDbkY7QUFDRjs7QUFFQTtBQUNBO0FBQ0EsT0FBTyxTQUFTYyx1QkFBdUJBLENBQ3JDSCxpQkFBb0MsRUFDcENQLE9BQTJDLEVBQzZCO0VBQ3hFLElBQUlzQixNQUFxQyxHQUFHQyxjQUFjLENBQUNoQixpQkFBaUIsQ0FBQztFQUM3RSxJQUFNVyxNQUFNLEdBQUdYLGlCQUFpQixDQUFDVyxNQUFNO0VBQ3ZDLElBQUliLENBQVM7RUFDYixJQUFJbUIsQ0FBUztFQUViRixNQUFNLEdBQUdHLGFBQWEsQ0FBQ0gsTUFBTSxDQUFDO0VBQzlCLEtBQUtqQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdpQixNQUFNLENBQUNoQixNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ2xDLEtBQUttQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLE1BQU0sQ0FBQ2pCLENBQUMsQ0FBQyxDQUFDQyxNQUFNLEVBQUVrQixDQUFDLEVBQUUsRUFBRTtNQUNyQ3hCLE9BQU8sQ0FBQ3NCLE1BQU0sQ0FBQ2pCLENBQUMsQ0FBQyxDQUFDbUIsQ0FBQyxDQUFDLEVBQUVOLE1BQU0sQ0FBQztJQUMvQjtFQUNGO0VBRUEsT0FBT0ksTUFBTSxDQUFDSSxHQUFHLENBQUMsVUFBQUMsV0FBVztJQUFBLE9BQUs7TUFDaENBLFdBQVcsRUFBWEEsV0FBVztNQUNYZCxVQUFVLEVBQUVOLGlCQUFpQixDQUFDTTtJQUNoQyxDQUFDO0VBQUEsQ0FBQyxDQUFDO0FBQ0w7QUFFQSxTQUFTVSxjQUFjQSxDQUFDaEIsaUJBQW9DLEVBQWdCO0VBQzFFLElBQU1xQixHQUFHLEdBQUdyQixpQkFBaUIsQ0FBQ3NCLElBQUk7RUFDbENELEdBQUcsQ0FBQ0UsR0FBRyxHQUFHdkIsaUJBQWlCLENBQUN3QixTQUFTO0VBRXJDLElBQU1DLEdBQUcsR0FBR0osR0FBRyxDQUFDSyxVQUFVLENBQUMsQ0FBQyxHQUFHTCxHQUFHLENBQUNFLEdBQUc7RUFDdEMsSUFBSUksR0FBRyxHQUFHLENBQUM7RUFDWCxJQUFJNUIsTUFBTSxHQUFHLENBQUM7RUFDZCxJQUFJekIsQ0FBQyxHQUFHLENBQUM7RUFDVCxJQUFJQyxDQUFDLEdBQUcsQ0FBQztFQUVULElBQU1xRCxLQUFtQixHQUFHLEVBQUU7RUFDOUIsSUFBSWxCLElBQTRCO0VBRWhDLE9BQU9XLEdBQUcsQ0FBQ0UsR0FBRyxHQUFHRSxHQUFHLEVBQUU7SUFDcEIsSUFBSTFCLE1BQU0sSUFBSSxDQUFDLEVBQUU7TUFDZixJQUFNOEIsTUFBTSxHQUFHUixHQUFHLENBQUNLLFVBQVUsQ0FBQyxDQUFDO01BQy9CQyxHQUFHLEdBQUdFLE1BQU0sR0FBRyxHQUFHO01BQ2xCOUIsTUFBTSxHQUFHOEIsTUFBTSxJQUFJLENBQUM7SUFDdEI7SUFFQTlCLE1BQU0sRUFBRTtJQUVSLElBQUk0QixHQUFHLEtBQUssQ0FBQyxJQUFJQSxHQUFHLEtBQUssQ0FBQyxFQUFFO01BQzFCckQsQ0FBQyxJQUFJK0MsR0FBRyxDQUFDUyxXQUFXLENBQUMsQ0FBQztNQUN0QnZELENBQUMsSUFBSThDLEdBQUcsQ0FBQ1MsV0FBVyxDQUFDLENBQUM7TUFFdEIsSUFBSUgsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNiO1FBQ0EsSUFBSWpCLElBQUksRUFBRWtCLEtBQUssQ0FBQ25CLElBQUksQ0FBQ0MsSUFBSSxDQUFDO1FBQzFCQSxJQUFJLEdBQUcsRUFBRTtNQUNYO01BRUEsSUFBSUEsSUFBSSxFQUFFQSxJQUFJLENBQUNELElBQUksQ0FBQyxDQUFDbkMsQ0FBQyxFQUFFQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDLE1BQU0sSUFBSW9ELEdBQUcsS0FBSyxDQUFDLEVBQUU7TUFDcEI7TUFDQSxJQUFJakIsSUFBSSxFQUFFO1FBQ1JBLElBQUksQ0FBQ0QsSUFBSSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNxQixLQUFLLENBQUMsQ0FBZ0QsQ0FBQyxDQUFDLENBQUM7TUFDN0U7SUFDRixDQUFDLE1BQU07TUFDTCxNQUFNLElBQUlDLEtBQUssb0JBQUF0RCxNQUFBLENBQW9CaUQsR0FBRyxDQUFFLENBQUM7SUFDM0M7RUFDRjtFQUVBLElBQUlqQixJQUFJLEVBQUVrQixLQUFLLENBQUNuQixJQUFJLENBQUNDLElBQUksQ0FBQztFQUUxQixPQUFPa0IsS0FBSztBQUNkOztBQUVBOztBQUVBLFNBQVNWLGFBQWFBLENBQUNlLEtBQW1CLEVBQWtCO0VBQzFELElBQU1DLEdBQUcsR0FBR0QsS0FBSyxDQUFDbEMsTUFBTTtFQUV4QixJQUFJbUMsR0FBRyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUNELEtBQUssQ0FBQztFQUU1QixJQUFNRSxRQUF3QixHQUFHLEVBQUU7RUFDbkMsSUFBSUMsT0FBaUM7RUFDckMsSUFBSUMsR0FBd0I7RUFFNUIsS0FBSyxJQUFJdkMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHb0MsR0FBRyxFQUFFcEMsQ0FBQyxFQUFFLEVBQUU7SUFDNUIsSUFBTXdDLElBQUksR0FBR0MsVUFBVSxDQUFDTixLQUFLLENBQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxJQUFJd0MsSUFBSSxLQUFLLENBQUMsRUFBRTtNQUNkO0lBQ0Y7SUFFQSxJQUFJRCxHQUFHLEtBQUtHLFNBQVMsRUFBRTtNQUNyQkgsR0FBRyxHQUFHQyxJQUFJLEdBQUcsQ0FBQztJQUNoQjtJQUVBLElBQUlELEdBQUcsS0FBS0MsSUFBSSxHQUFHLENBQUMsRUFBRTtNQUNwQixJQUFJRixPQUFPLEVBQUU7UUFDWEQsUUFBUSxDQUFDMUIsSUFBSSxDQUFDMkIsT0FBTyxDQUFDO01BQ3hCO01BQ0FBLE9BQU8sR0FBRyxDQUFDSCxLQUFLLENBQUNuQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDLE1BQU0sSUFBSXNDLE9BQU8sRUFBRTtNQUNsQkEsT0FBTyxDQUFDM0IsSUFBSSxDQUFDd0IsS0FBSyxDQUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDeEI7RUFDRjtFQUNBLElBQUlzQyxPQUFPLEVBQUU7SUFDWEQsUUFBUSxDQUFDMUIsSUFBSSxDQUFDMkIsT0FBTyxDQUFDO0VBQ3hCO0VBRUEsT0FBT0QsUUFBUTtBQUNqQjtBQUVBLFNBQVNJLFVBQVVBLENBQUNFLElBQWdCLEVBQVU7RUFDNUMsSUFBSUMsR0FBRyxHQUFHLENBQUM7RUFDWCxLQUFLLElBQUk1QyxDQUFDLEdBQUcsQ0FBQyxFQUFFb0MsR0FBRyxHQUFHTyxJQUFJLENBQUMxQyxNQUFNLEVBQUVrQixDQUFDLEdBQUdpQixHQUFHLEdBQUcsQ0FBQyxFQUFFUyxFQUFZLEVBQUVDLEVBQVksRUFBRTlDLENBQUMsR0FBR29DLEdBQUcsRUFBRWpCLENBQUMsR0FBR25CLENBQUMsRUFBRSxFQUFFO0lBQzVGNkMsRUFBRSxHQUFHRixJQUFJLENBQUMzQyxDQUFDLENBQUM7SUFDWjhDLEVBQUUsR0FBR0gsSUFBSSxDQUFDeEIsQ0FBQyxDQUFDO0lBQ1p5QixHQUFHLElBQUksQ0FBQ0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUtBLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBR0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFDO0VBQ0EsT0FBT0YsR0FBRztBQUNaIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,3 @@
1
+ export {};
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjLzNkLWJ1aWxkaW5nLWxheWVyL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7UkdCQ29sb3J9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBUaWxlSW5kZXggPSB7eDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcn07XG5cbmV4cG9ydCB0eXBlIFRpbGVMb2FkUHJvcHMgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGluZGV4OiBUaWxlSW5kZXg7XG4gIGJib3g6IGFueTtcbiAgdXJsPzogc3RyaW5nIHwgbnVsbDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIHVzZXJEYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgem9vbT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRocmVlREJ1aWxkaW5nTGF5ZXJQcm9wcyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsOiBzdHJpbmc7XG4gIHRocmVlREJ1aWxkaW5nQ29sb3I6IFJHQkNvbG9yO1xuICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgIGdldEZpbGxDb2xvcjogUkdCQ29sb3I7XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgQ29vcmRpbmF0ZXMgPSB7eDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcn07XG4vLyBUT0RPIHJlbmFtZVxuZXhwb3J0IHR5cGUgRmxhdEZpZ3VyZSA9IChbbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKVtdO1xuZXhwb3J0IHR5cGUgVGlsZURhdGFJdGVtID0ge2Nvb3JkaW5hdGVzOiBGbGF0RmlndXJlW107IHByb3BlcnRpZXM6IFZlY3RvclRpbGVGZWF0dXJlUHJvcGVydGllc307XG5leHBvcnQgdHlwZSBWZWN0b3JUaWxlRmVhdHVyZVByb3BlcnRpZXMgPSB7bGF5ZXI6IHN0cmluZzsgaGVpZ2h0PzogbnVtYmVyfTtcbmV4cG9ydCB0eXBlIFZlY3RvclRpbGVGZWF0dXJlID0ge1xuICBleHRlbnQ6IG51bWJlcjtcbiAgcHJvcGVydGllczogVmVjdG9yVGlsZUZlYXR1cmVQcm9wZXJ0aWVzO1xuICBfcGJmOiB7XG4gICAgYnVmOiBBcnJheUJ1ZmZlcjtcbiAgICBwb3M6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgcmVhZFZhcmludDogKGI/OiBib29sZWFuKSA9PiBudW1iZXI7XG4gICAgcmVhZFNWYXJpbnQ6ICgpID0+IG51bWJlcjtcbiAgfTtcbiAgX2dlb21ldHJ5OiBudW1iZXI7XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,286 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
4
+ import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
5
+ import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
6
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
7
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
9
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
10
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
11
+ // SPDX-License-Identifier: MIT
12
+ // Copyright contributors to the kepler.gl project
13
+
14
+ import { CompositeLayer } from '@deck.gl/core';
15
+ import { ScatterplotLayer } from '@deck.gl/layers';
16
+ import geoViewport from '@mapbox/geo-viewport';
17
+ import CPUAggregator, { defaultColorDimension, getDimensionScale } from '../layer-utils/cpu-aggregator';
18
+ import { getDistanceScales } from 'viewport-mercator-project';
19
+ import { max } from 'd3-array';
20
+ import { SCALE_TYPES, DEFAULT_COLOR_RANGE, LAYER_VIS_CONFIGS } from '@kepler.gl/constants';
21
+ import ClusterBuilder, { getGeoJSON } from '../layer-utils/cluster-utils';
22
+ var defaultRadius = LAYER_VIS_CONFIGS.clusterRadius.defaultValue;
23
+ var defaultRadiusRange = LAYER_VIS_CONFIGS.clusterRadiusRange.defaultValue;
24
+ var defaultGetColorValue = function defaultGetColorValue(points) {
25
+ return points.length;
26
+ };
27
+ var defaultGetRadiusValue = function defaultGetRadiusValue(cell) {
28
+ return cell.filteredPoints ? cell.filteredPoints.length : cell.points.length;
29
+ };
30
+
31
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
+ function processGeoJSON(step, props, aggregation, _ref) {
33
+ var viewport = _ref.viewport;
34
+ var data = props.data,
35
+ getPosition = props.getPosition,
36
+ filterData = props.filterData;
37
+ var geoJSON = getGeoJSON(data, getPosition, filterData);
38
+ var clusterBuilder = new ClusterBuilder();
39
+ this.setState({
40
+ geoJSON: geoJSON,
41
+ clusterBuilder: clusterBuilder
42
+ });
43
+ }
44
+
45
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
46
+ function getClusters(step, props, aggregation, _ref2) {
47
+ var _clusterBuilder$clust;
48
+ var viewport = _ref2.viewport;
49
+ var _this$state = this.state,
50
+ geoJSON = _this$state.geoJSON,
51
+ clusterBuilder = _this$state.clusterBuilder;
52
+ var clusterRadius = props.clusterRadius,
53
+ zoom = props.zoom,
54
+ width = props.width,
55
+ height = props.height;
56
+ var longitude = viewport.longitude,
57
+ latitude = viewport.latitude;
58
+
59
+ // zoom needs to be an integer for the different map utils. Also helps with cache key.
60
+ var bbox = geoViewport.bounds([longitude, latitude], zoom, [width, height]);
61
+ var clusters = (_clusterBuilder$clust = clusterBuilder === null || clusterBuilder === void 0 ? void 0 : clusterBuilder.clustersAtZoom({
62
+ bbox: bbox,
63
+ clusterRadius: clusterRadius,
64
+ geoJSON: geoJSON,
65
+ zoom: zoom
66
+ })) !== null && _clusterBuilder$clust !== void 0 ? _clusterBuilder$clust : [];
67
+ this.setState({
68
+ layerData: {
69
+ data: clusters
70
+ }
71
+ });
72
+ }
73
+ function getSubLayerRadius(dimensionState, dimension, layerProps) {
74
+ return function (cell) {
75
+ var getRadiusValue = layerProps.getRadiusValue;
76
+ var scaleFunc = dimensionState.scaleFunc;
77
+ return scaleFunc(getRadiusValue(cell));
78
+ };
79
+ }
80
+ export var clusterAggregation = {
81
+ key: 'position',
82
+ updateSteps: [{
83
+ key: 'geojson',
84
+ triggers: {
85
+ position: {
86
+ prop: 'getPosition',
87
+ updateTrigger: 'getPosition'
88
+ },
89
+ filterData: {
90
+ prop: 'filterData',
91
+ updateTrigger: 'filterData'
92
+ }
93
+ },
94
+ updater: processGeoJSON
95
+ }, {
96
+ key: 'clustering',
97
+ triggers: {
98
+ clusterRadius: {
99
+ prop: 'clusterRadius'
100
+ },
101
+ zoom: {
102
+ prop: 'zoom'
103
+ },
104
+ width: {
105
+ prop: 'width'
106
+ },
107
+ height: {
108
+ prop: 'height'
109
+ }
110
+ },
111
+ updater: getClusters
112
+ }]
113
+ };
114
+ function getRadiusValueDomain(step, props, dimensionUpdater) {
115
+ var key = dimensionUpdater.key;
116
+ var getRadiusValue = props.getRadiusValue;
117
+ var layerData = this.state.layerData;
118
+ var valueDomain = [0, max(layerData.data, getRadiusValue)];
119
+ this._setDimensionState(key, {
120
+ valueDomain: valueDomain
121
+ });
122
+ }
123
+ var clusterLayerDimensions = [defaultColorDimension, {
124
+ key: 'radius',
125
+ accessor: 'getRadius',
126
+ nullValue: 0,
127
+ updateSteps: [{
128
+ key: 'getDomain',
129
+ triggers: {
130
+ value: {
131
+ prop: 'getRadiusValue',
132
+ updateTrigger: 'getRadiusValue'
133
+ }
134
+ },
135
+ updater: getRadiusValueDomain
136
+ }, {
137
+ key: 'getScaleFunc',
138
+ triggers: {
139
+ domain: {
140
+ prop: 'radiusDomain'
141
+ },
142
+ range: {
143
+ prop: 'radiusRange'
144
+ },
145
+ scaleType: {
146
+ prop: 'radiusScaleType'
147
+ }
148
+ },
149
+ updater: getDimensionScale
150
+ }],
151
+ getSubLayerAccessor: getSubLayerRadius,
152
+ getPickingInfo: function getPickingInfo(dimensionState, cell, layerProps) {
153
+ var radiusValue = layerProps.getRadiusValue(cell);
154
+ var scaleFunc = dimensionState.scaleFunc;
155
+ var scaledRadiusValue = scaleFunc ? scaleFunc(radiusValue) : radiusValue;
156
+ return {
157
+ radiusValue: radiusValue,
158
+ scaledRadiusValue: scaledRadiusValue
159
+ };
160
+ }
161
+ }];
162
+ var defaultProps = {
163
+ clusterRadius: defaultRadius,
164
+ colorDomain: null,
165
+ colorRange: DEFAULT_COLOR_RANGE,
166
+ colorScaleType: SCALE_TYPES.quantize,
167
+ radiusScaleType: SCALE_TYPES.sqrt,
168
+ radiusRange: defaultRadiusRange,
169
+ getPosition: {
170
+ type: 'accessor',
171
+ value: function value(x) {
172
+ return x.position;
173
+ }
174
+ },
175
+ getColorValue: {
176
+ type: 'accessor',
177
+ value: defaultGetColorValue
178
+ },
179
+ getRadiusValue: {
180
+ type: 'accessor',
181
+ value: defaultGetRadiusValue
182
+ }
183
+ };
184
+ var ClusterLayer = /*#__PURE__*/function (_CompositeLayer) {
185
+ function ClusterLayer() {
186
+ _classCallCheck(this, ClusterLayer);
187
+ return _callSuper(this, ClusterLayer, arguments);
188
+ }
189
+ _inherits(ClusterLayer, _CompositeLayer);
190
+ return _createClass(ClusterLayer, [{
191
+ key: "initializeState",
192
+ value: function initializeState() {
193
+ var cpuAggregator = new CPUAggregator({
194
+ aggregation: clusterAggregation,
195
+ dimensions: clusterLayerDimensions
196
+ });
197
+ this.state = {
198
+ cpuAggregator: cpuAggregator,
199
+ aggregatorState: cpuAggregator.state
200
+ };
201
+ }
202
+ }, {
203
+ key: "updateState",
204
+ value: function updateState(_ref3) {
205
+ var oldProps = _ref3.oldProps,
206
+ props = _ref3.props,
207
+ changeFlags = _ref3.changeFlags;
208
+ this.setState({
209
+ aggregatorState: this.state.cpuAggregator.updateState({
210
+ oldProps: oldProps,
211
+ props: props,
212
+ changeFlags: changeFlags
213
+ }, {
214
+ viewport: this.context.viewport,
215
+ // @ts-expect-error props passed for internal calculation
216
+ numInstances: this.getNumInstances(props)
217
+ })
218
+ });
219
+ }
220
+ }, {
221
+ key: "getPickingInfo",
222
+ value: function getPickingInfo(_ref4) {
223
+ var info = _ref4.info;
224
+ var obj = this.state.cpuAggregator.getPickingInfo({
225
+ info: info
226
+ }, this.props);
227
+ if (obj !== null && obj !== void 0 && obj.object) {
228
+ var distanceScale = getDistanceScales(this.context.viewport);
229
+ var metersPerPixel = distanceScale.metersPerPixel[0];
230
+ obj.object.scaledRadiusValue = obj.object.scaledRadiusValue * metersPerPixel;
231
+ }
232
+ return obj;
233
+ }
234
+ }, {
235
+ key: "_getSublayerUpdateTriggers",
236
+ value: function _getSublayerUpdateTriggers() {
237
+ return this.state.cpuAggregator.getUpdateTriggers(this.props);
238
+ }
239
+ }, {
240
+ key: "_getSubLayerAccessors",
241
+ value: function _getSubLayerAccessors() {
242
+ return {
243
+ getRadius: this.state.cpuAggregator.getAccessor('radius', this.props),
244
+ getFillColor: this.state.cpuAggregator.getAccessor('fillColor', this.props)
245
+ };
246
+ }
247
+ }, {
248
+ key: "renderLayers",
249
+ value: function renderLayers() {
250
+ var _ref5 = this.props,
251
+ id = _ref5.id,
252
+ radiusScale = _ref5.radiusScale,
253
+ visible = _ref5.visible,
254
+ opacity = _ref5.opacity,
255
+ pickable = _ref5.pickable,
256
+ autoHighlight = _ref5.autoHighlight,
257
+ highlightColor = _ref5.highlightColor;
258
+ var _ref6 = this.state,
259
+ cpuAggregator = _ref6.cpuAggregator;
260
+ var updateTriggers = this._getSublayerUpdateTriggers();
261
+ var accessors = this._getSubLayerAccessors();
262
+ var distanceScale = getDistanceScales(this.context.viewport);
263
+ var metersPerPixel = distanceScale.metersPerPixel[0];
264
+
265
+ // return props to the sublayer constructor
266
+ return new ScatterplotLayer(_objectSpread({
267
+ id: "".concat(id, "-cluster"),
268
+ data: cpuAggregator.state.layerData.data,
269
+ radiusScale: metersPerPixel * radiusScale,
270
+ visible: visible,
271
+ opacity: opacity,
272
+ pickable: pickable,
273
+ autoHighlight: autoHighlight,
274
+ highlightColor: highlightColor,
275
+ updateTriggers: updateTriggers,
276
+ parameters: {
277
+ depthMask: false
278
+ }
279
+ }, accessors));
280
+ }
281
+ }]);
282
+ }(CompositeLayer);
283
+ export { ClusterLayer as default };
284
+ ClusterLayer.layerName = 'ClusterLayer';
285
+ ClusterLayer.defaultProps = defaultProps;
286
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb21wb3NpdGVMYXllciIsIlNjYXR0ZXJwbG90TGF5ZXIiLCJnZW9WaWV3cG9ydCIsIkNQVUFnZ3JlZ2F0b3IiLCJkZWZhdWx0Q29sb3JEaW1lbnNpb24iLCJnZXREaW1lbnNpb25TY2FsZSIsImdldERpc3RhbmNlU2NhbGVzIiwibWF4IiwiU0NBTEVfVFlQRVMiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJDbHVzdGVyQnVpbGRlciIsImdldEdlb0pTT04iLCJkZWZhdWx0UmFkaXVzIiwiY2x1c3RlclJhZGl1cyIsImRlZmF1bHRWYWx1ZSIsImRlZmF1bHRSYWRpdXNSYW5nZSIsImNsdXN0ZXJSYWRpdXNSYW5nZSIsImRlZmF1bHRHZXRDb2xvclZhbHVlIiwicG9pbnRzIiwibGVuZ3RoIiwiZGVmYXVsdEdldFJhZGl1c1ZhbHVlIiwiY2VsbCIsImZpbHRlcmVkUG9pbnRzIiwicHJvY2Vzc0dlb0pTT04iLCJzdGVwIiwicHJvcHMiLCJhZ2dyZWdhdGlvbiIsIl9yZWYiLCJ2aWV3cG9ydCIsImRhdGEiLCJnZXRQb3NpdGlvbiIsImZpbHRlckRhdGEiLCJnZW9KU09OIiwiY2x1c3RlckJ1aWxkZXIiLCJzZXRTdGF0ZSIsImdldENsdXN0ZXJzIiwiX3JlZjIiLCJfY2x1c3RlckJ1aWxkZXIkY2x1c3QiLCJfdGhpcyRzdGF0ZSIsInN0YXRlIiwiem9vbSIsIndpZHRoIiwiaGVpZ2h0IiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiLCJiYm94IiwiYm91bmRzIiwiY2x1c3RlcnMiLCJjbHVzdGVyc0F0Wm9vbSIsImxheWVyRGF0YSIsImdldFN1YkxheWVyUmFkaXVzIiwiZGltZW5zaW9uU3RhdGUiLCJkaW1lbnNpb24iLCJsYXllclByb3BzIiwiZ2V0UmFkaXVzVmFsdWUiLCJzY2FsZUZ1bmMiLCJjbHVzdGVyQWdncmVnYXRpb24iLCJrZXkiLCJ1cGRhdGVTdGVwcyIsInRyaWdnZXJzIiwicG9zaXRpb24iLCJwcm9wIiwidXBkYXRlVHJpZ2dlciIsInVwZGF0ZXIiLCJnZXRSYWRpdXNWYWx1ZURvbWFpbiIsImRpbWVuc2lvblVwZGF0ZXIiLCJ2YWx1ZURvbWFpbiIsIl9zZXREaW1lbnNpb25TdGF0ZSIsImNsdXN0ZXJMYXllckRpbWVuc2lvbnMiLCJhY2Nlc3NvciIsIm51bGxWYWx1ZSIsInZhbHVlIiwiZG9tYWluIiwicmFuZ2UiLCJzY2FsZVR5cGUiLCJnZXRTdWJMYXllckFjY2Vzc29yIiwiZ2V0UGlja2luZ0luZm8iLCJyYWRpdXNWYWx1ZSIsInNjYWxlZFJhZGl1c1ZhbHVlIiwiZGVmYXVsdFByb3BzIiwiY29sb3JEb21haW4iLCJjb2xvclJhbmdlIiwiY29sb3JTY2FsZVR5cGUiLCJxdWFudGl6ZSIsInJhZGl1c1NjYWxlVHlwZSIsInNxcnQiLCJyYWRpdXNSYW5nZSIsInR5cGUiLCJ4IiwiZ2V0Q29sb3JWYWx1ZSIsIkNsdXN0ZXJMYXllciIsIl9Db21wb3NpdGVMYXllciIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJpbml0aWFsaXplU3RhdGUiLCJjcHVBZ2dyZWdhdG9yIiwiZGltZW5zaW9ucyIsImFnZ3JlZ2F0b3JTdGF0ZSIsInVwZGF0ZVN0YXRlIiwiX3JlZjMiLCJvbGRQcm9wcyIsImNoYW5nZUZsYWdzIiwiY29udGV4dCIsIm51bUluc3RhbmNlcyIsImdldE51bUluc3RhbmNlcyIsIl9yZWY0IiwiaW5mbyIsIm9iaiIsIm9iamVjdCIsImRpc3RhbmNlU2NhbGUiLCJtZXRlcnNQZXJQaXhlbCIsIl9nZXRTdWJsYXllclVwZGF0ZVRyaWdnZXJzIiwiZ2V0VXBkYXRlVHJpZ2dlcnMiLCJfZ2V0U3ViTGF5ZXJBY2Nlc3NvcnMiLCJnZXRSYWRpdXMiLCJnZXRBY2Nlc3NvciIsImdldEZpbGxDb2xvciIsInJlbmRlckxheWVycyIsIl9yZWY1IiwiaWQiLCJyYWRpdXNTY2FsZSIsInZpc2libGUiLCJvcGFjaXR5IiwicGlja2FibGUiLCJhdXRvSGlnaGxpZ2h0IiwiaGlnaGxpZ2h0Q29sb3IiLCJfcmVmNiIsInVwZGF0ZVRyaWdnZXJzIiwiYWNjZXNzb3JzIiwiX29iamVjdFNwcmVhZCIsImNvbmNhdCIsInBhcmFtZXRlcnMiLCJkZXB0aE1hc2siLCJkZWZhdWx0IiwibGF5ZXJOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsdXN0ZXItbGF5ZXIvY2x1c3Rlci1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NvbXBvc2l0ZUxheWVyLCBHZXRQaWNraW5nSW5mb1BhcmFtcywgUGlja2luZ0luZm99IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtTY2F0dGVycGxvdExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuXG5pbXBvcnQgZ2VvVmlld3BvcnQgZnJvbSAnQG1hcGJveC9nZW8tdmlld3BvcnQnO1xuaW1wb3J0IENQVUFnZ3JlZ2F0b3IsIHtcbiAgQWdncmVnYXRpb25UeXBlLFxuICBkZWZhdWx0Q29sb3JEaW1lbnNpb24sXG4gIERpbWVuc2lvblR5cGUsXG4gIGdldERpbWVuc2lvblNjYWxlXG59IGZyb20gJy4uL2xheWVyLXV0aWxzL2NwdS1hZ2dyZWdhdG9yJztcbmltcG9ydCB7Z2V0RGlzdGFuY2VTY2FsZXN9IGZyb20gJ3ZpZXdwb3J0LW1lcmNhdG9yLXByb2plY3QnO1xuaW1wb3J0IHttYXh9IGZyb20gJ2QzLWFycmF5JztcblxuaW1wb3J0IHtTQ0FMRV9UWVBFUywgREVGQVVMVF9DT0xPUl9SQU5HRSwgTEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBDbHVzdGVyQnVpbGRlciwge2dldEdlb0pTT059IGZyb20gJy4uL2xheWVyLXV0aWxzL2NsdXN0ZXItdXRpbHMnO1xuaW1wb3J0IHtSR0JBQ29sb3J9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5jb25zdCBkZWZhdWx0UmFkaXVzID0gTEFZRVJfVklTX0NPTkZJR1MuY2x1c3RlclJhZGl1cy5kZWZhdWx0VmFsdWU7XG5jb25zdCBkZWZhdWx0UmFkaXVzUmFuZ2UgPSBMQVlFUl9WSVNfQ09ORklHUy5jbHVzdGVyUmFkaXVzUmFuZ2UuZGVmYXVsdFZhbHVlO1xuXG5jb25zdCBkZWZhdWx0R2V0Q29sb3JWYWx1ZSA9IChwb2ludHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pID0+IHBvaW50cy5sZW5ndGg7XG5jb25zdCBkZWZhdWx0R2V0UmFkaXVzVmFsdWUgPSAoY2VsbDoge2ZpbHRlcmVkUG9pbnRzPzogdW5rbm93bltdOyBwb2ludHM6IHVua25vd25bXX0pID0+XG4gIGNlbGwuZmlsdGVyZWRQb2ludHMgPyBjZWxsLmZpbHRlcmVkUG9pbnRzLmxlbmd0aCA6IGNlbGwucG9pbnRzLmxlbmd0aDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZnVuY3Rpb24gcHJvY2Vzc0dlb0pTT04odGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGFnZ3JlZ2F0aW9uLCB7dmlld3BvcnR9KSB7XG4gIGNvbnN0IHtkYXRhLCBnZXRQb3NpdGlvbiwgZmlsdGVyRGF0YX0gPSBwcm9wcztcbiAgY29uc3QgZ2VvSlNPTiA9IGdldEdlb0pTT04oZGF0YSwgZ2V0UG9zaXRpb24sIGZpbHRlckRhdGEpO1xuICBjb25zdCBjbHVzdGVyQnVpbGRlciA9IG5ldyBDbHVzdGVyQnVpbGRlcigpO1xuXG4gIHRoaXMuc2V0U3RhdGUoe2dlb0pTT04sIGNsdXN0ZXJCdWlsZGVyfSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIGdldENsdXN0ZXJzKHRoaXM6IENQVUFnZ3JlZ2F0b3IsIHN0ZXAsIHByb3BzLCBhZ2dyZWdhdGlvbiwge3ZpZXdwb3J0fSkge1xuICBjb25zdCB7Z2VvSlNPTiwgY2x1c3RlckJ1aWxkZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgY29uc3Qge2NsdXN0ZXJSYWRpdXMsIHpvb20sIHdpZHRoLCBoZWlnaHR9ID0gcHJvcHM7XG4gIGNvbnN0IHtsb25naXR1ZGUsIGxhdGl0dWRlfSA9IHZpZXdwb3J0O1xuXG4gIC8vIHpvb20gbmVlZHMgdG8gYmUgYW4gaW50ZWdlciBmb3IgdGhlIGRpZmZlcmVudCBtYXAgdXRpbHMuIEFsc28gaGVscHMgd2l0aCBjYWNoZSBrZXkuXG4gIGNvbnN0IGJib3ggPSBnZW9WaWV3cG9ydC5ib3VuZHMoW2xvbmdpdHVkZSwgbGF0aXR1ZGVdLCB6b29tLCBbd2lkdGgsIGhlaWdodF0pO1xuICBjb25zdCBjbHVzdGVycyA9IGNsdXN0ZXJCdWlsZGVyPy5jbHVzdGVyc0F0Wm9vbSh7YmJveCwgY2x1c3RlclJhZGl1cywgZ2VvSlNPTiwgem9vbX0pID8/IFtdO1xuXG4gIHRoaXMuc2V0U3RhdGUoe1xuICAgIGxheWVyRGF0YToge2RhdGE6IGNsdXN0ZXJzfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ViTGF5ZXJSYWRpdXMoXG4gIGRpbWVuc2lvblN0YXRlOiB7c2NhbGVGdW5jOiAodjogbnVtYmVyKSA9PiBudW1iZXJ9LFxuICBkaW1lbnNpb246IERpbWVuc2lvblR5cGUsXG4gIGxheWVyUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT5cbikge1xuICByZXR1cm4gKGNlbGw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7Z2V0UmFkaXVzVmFsdWV9ID0gbGF5ZXJQcm9wcztcbiAgICBjb25zdCB7c2NhbGVGdW5jfSA9IGRpbWVuc2lvblN0YXRlO1xuICAgIHJldHVybiBzY2FsZUZ1bmMoZ2V0UmFkaXVzVmFsdWUoY2VsbCkpO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY2x1c3RlckFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvblR5cGUgPSB7XG4gIGtleTogJ3Bvc2l0aW9uJyxcbiAgdXBkYXRlU3RlcHM6IFtcbiAgICB7XG4gICAgICBrZXk6ICdnZW9qc29uJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgcHJvcDogJ2dldFBvc2l0aW9uJyxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZ2V0UG9zaXRpb24nXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlckRhdGE6IHtcbiAgICAgICAgICBwcm9wOiAnZmlsdGVyRGF0YScsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ2ZpbHRlckRhdGEnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBwcm9jZXNzR2VvSlNPTlxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnY2x1c3RlcmluZycsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgICAgICAgcHJvcDogJ2NsdXN0ZXJSYWRpdXMnXG4gICAgICAgIH0sXG4gICAgICAgIHpvb206IHtcbiAgICAgICAgICBwcm9wOiAnem9vbSdcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICBwcm9wOiAnd2lkdGgnXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgIHByb3A6ICdoZWlnaHQnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXRDbHVzdGVyc1xuICAgIH1cbiAgXVxufTtcblxuZnVuY3Rpb24gZ2V0UmFkaXVzVmFsdWVEb21haW4odGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGRpbWVuc2lvblVwZGF0ZXIpIHtcbiAgY29uc3Qge2tleX0gPSBkaW1lbnNpb25VcGRhdGVyO1xuICBjb25zdCB7Z2V0UmFkaXVzVmFsdWV9ID0gcHJvcHM7XG4gIGNvbnN0IHtsYXllckRhdGF9ID0gdGhpcy5zdGF0ZTtcblxuICBjb25zdCB2YWx1ZURvbWFpbiA9IFswLCBtYXgobGF5ZXJEYXRhLmRhdGEgYXMgdW5rbm93biBhcyBudW1iZXJbXSwgZ2V0UmFkaXVzVmFsdWUpXTtcbiAgdGhpcy5fc2V0RGltZW5zaW9uU3RhdGUoa2V5LCB7dmFsdWVEb21haW59KTtcbn1cblxuY29uc3QgY2x1c3RlckxheWVyRGltZW5zaW9uczogW0RpbWVuc2lvblR5cGU8UkdCQUNvbG9yPiwgRGltZW5zaW9uVHlwZTxudW1iZXI+XSA9IFtcbiAgZGVmYXVsdENvbG9yRGltZW5zaW9uLFxuICB7XG4gICAga2V5OiAncmFkaXVzJyxcbiAgICBhY2Nlc3NvcjogJ2dldFJhZGl1cycsXG4gICAgbnVsbFZhbHVlOiAwLFxuICAgIHVwZGF0ZVN0ZXBzOiBbXG4gICAgICB7XG4gICAgICAgIGtleTogJ2dldERvbWFpbicsXG4gICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHByb3A6ICdnZXRSYWRpdXNWYWx1ZScsXG4gICAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZ2V0UmFkaXVzVmFsdWUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVyOiBnZXRSYWRpdXNWYWx1ZURvbWFpblxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZ2V0U2NhbGVGdW5jJyxcbiAgICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgICBkb21haW46IHtwcm9wOiAncmFkaXVzRG9tYWluJ30sXG4gICAgICAgICAgcmFuZ2U6IHtwcm9wOiAncmFkaXVzUmFuZ2UnfSxcbiAgICAgICAgICBzY2FsZVR5cGU6IHtwcm9wOiAncmFkaXVzU2NhbGVUeXBlJ31cbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlcjogZ2V0RGltZW5zaW9uU2NhbGVcbiAgICAgIH1cbiAgICBdLFxuICAgIGdldFN1YkxheWVyQWNjZXNzb3I6IGdldFN1YkxheWVyUmFkaXVzLFxuICAgIGdldFBpY2tpbmdJbmZvOiAoZGltZW5zaW9uU3RhdGUsIGNlbGwsIGxheWVyUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IHJhZGl1c1ZhbHVlID0gbGF5ZXJQcm9wcy5nZXRSYWRpdXNWYWx1ZShjZWxsKTtcbiAgICAgIGNvbnN0IHtzY2FsZUZ1bmN9ID0gZGltZW5zaW9uU3RhdGU7XG4gICAgICBjb25zdCBzY2FsZWRSYWRpdXNWYWx1ZSA9IHNjYWxlRnVuYyA/IHNjYWxlRnVuYyhyYWRpdXNWYWx1ZSkgOiByYWRpdXNWYWx1ZTtcblxuICAgICAgcmV0dXJuIHtyYWRpdXNWYWx1ZSwgc2NhbGVkUmFkaXVzVmFsdWV9O1xuICAgIH1cbiAgfVxuXTtcblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBjbHVzdGVyUmFkaXVzOiBkZWZhdWx0UmFkaXVzLFxuICBjb2xvckRvbWFpbjogbnVsbCxcbiAgY29sb3JSYW5nZTogREVGQVVMVF9DT0xPUl9SQU5HRSxcbiAgY29sb3JTY2FsZVR5cGU6IFNDQUxFX1RZUEVTLnF1YW50aXplLFxuICByYWRpdXNTY2FsZVR5cGU6IFNDQUxFX1RZUEVTLnNxcnQsXG4gIHJhZGl1c1JhbmdlOiBkZWZhdWx0UmFkaXVzUmFuZ2UsXG4gIGdldFBvc2l0aW9uOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IHggPT4geC5wb3NpdGlvbn0sXG4gIGdldENvbG9yVmFsdWU6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogZGVmYXVsdEdldENvbG9yVmFsdWV9LFxuICBnZXRSYWRpdXNWYWx1ZToge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBkZWZhdWx0R2V0UmFkaXVzVmFsdWV9XG59O1xuXG5pbnRlcmZhY2UgQ2x1c3RlckxheWVyU3RhdGUge1xuICBjcHVBZ2dyZWdhdG9yOiBDUFVBZ2dyZWdhdG9yO1xuICBhZ2dyZWdhdG9yU3RhdGU6IENQVUFnZ3JlZ2F0b3JbJ3N0YXRlJ107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsdXN0ZXJMYXllciBleHRlbmRzIENvbXBvc2l0ZUxheWVyIHtcbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIGNvbnN0IGNwdUFnZ3JlZ2F0b3IgPSBuZXcgQ1BVQWdncmVnYXRvcih7XG4gICAgICBhZ2dyZWdhdGlvbjogY2x1c3RlckFnZ3JlZ2F0aW9uLFxuICAgICAgZGltZW5zaW9uczogY2x1c3RlckxheWVyRGltZW5zaW9uc1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNwdUFnZ3JlZ2F0b3IsXG4gICAgICBhZ2dyZWdhdG9yU3RhdGU6IGNwdUFnZ3JlZ2F0b3Iuc3RhdGVcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlU3RhdGUoe1xuICAgIG9sZFByb3BzLFxuICAgIHByb3BzLFxuICAgIGNoYW5nZUZsYWdzXG4gIH06IHtcbiAgICBvbGRQcm9wczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjaGFuZ2VGbGFnczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgfSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYWdncmVnYXRvclN0YXRlOiAodGhpcy5zdGF0ZSBhcyB1bmtub3duIGFzIENsdXN0ZXJMYXllclN0YXRlKS5jcHVBZ2dyZWdhdG9yLnVwZGF0ZVN0YXRlKFxuICAgICAgICB7b2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFnc30sXG4gICAgICAgIHtcbiAgICAgICAgICB2aWV3cG9ydDogdGhpcy5jb250ZXh0LnZpZXdwb3J0LFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcHJvcHMgcGFzc2VkIGZvciBpbnRlcm5hbCBjYWxjdWxhdGlvblxuICAgICAgICAgIG51bUluc3RhbmNlczogdGhpcy5nZXROdW1JbnN0YW5jZXMocHJvcHMpXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBpY2tpbmdJbmZvKHtpbmZvfTogR2V0UGlja2luZ0luZm9QYXJhbXMpOiBQaWNraW5nSW5mbyB7XG4gICAgY29uc3Qgb2JqID0gKHRoaXMuc3RhdGUgYXMgdW5rbm93biBhcyBDbHVzdGVyTGF5ZXJTdGF0ZSkuY3B1QWdncmVnYXRvci5nZXRQaWNraW5nSW5mbyhcbiAgICAgIHtpbmZvfSxcbiAgICAgIHRoaXMucHJvcHNcbiAgICApO1xuICAgIGlmIChvYmo/Lm9iamVjdCkge1xuICAgICAgY29uc3QgZGlzdGFuY2VTY2FsZSA9IGdldERpc3RhbmNlU2NhbGVzKHRoaXMuY29udGV4dC52aWV3cG9ydCk7XG4gICAgICBjb25zdCBtZXRlcnNQZXJQaXhlbCA9IGRpc3RhbmNlU2NhbGUubWV0ZXJzUGVyUGl4ZWxbMF07XG4gICAgICBvYmoub2JqZWN0LnNjYWxlZFJhZGl1c1ZhbHVlID0gb2JqLm9iamVjdC5zY2FsZWRSYWRpdXNWYWx1ZSAqIG1ldGVyc1BlclBpeGVsO1xuICAgIH1cblxuICAgIHJldHVybiBvYmogYXMgUGlja2luZ0luZm87XG4gIH1cblxuICBfZ2V0U3VibGF5ZXJVcGRhdGVUcmlnZ2VycygpIHtcbiAgICByZXR1cm4gKHRoaXMuc3RhdGUgYXMgdW5rbm93biBhcyBDbHVzdGVyTGF5ZXJTdGF0ZSkuY3B1QWdncmVnYXRvci5nZXRVcGRhdGVUcmlnZ2Vycyh0aGlzLnByb3BzKTtcbiAgfVxuXG4gIF9nZXRTdWJMYXllckFjY2Vzc29ycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0UmFkaXVzOiAodGhpcy5zdGF0ZSBhcyB1bmtub3duIGFzIENsdXN0ZXJMYXllclN0YXRlKS5jcHVBZ2dyZWdhdG9yLmdldEFjY2Vzc29yKFxuICAgICAgICAncmFkaXVzJyxcbiAgICAgICAgdGhpcy5wcm9wc1xuICAgICAgKSxcbiAgICAgIGdldEZpbGxDb2xvcjogKHRoaXMuc3RhdGUgYXMgdW5rbm93biBhcyBDbHVzdGVyTGF5ZXJTdGF0ZSkuY3B1QWdncmVnYXRvci5nZXRBY2Nlc3NvcihcbiAgICAgICAgJ2ZpbGxDb2xvcicsXG4gICAgICAgIHRoaXMucHJvcHNcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyTGF5ZXJzKCkge1xuICAgIGNvbnN0IHtpZCwgcmFkaXVzU2NhbGUsIHZpc2libGUsIG9wYWNpdHksIHBpY2thYmxlLCBhdXRvSGlnaGxpZ2h0LCBoaWdobGlnaHRDb2xvcn0gPSB0aGlzXG4gICAgICAucHJvcHMgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdCB7Y3B1QWdncmVnYXRvcn0gPSB0aGlzLnN0YXRlIGFzIHVua25vd24gYXMgQ2x1c3RlckxheWVyU3RhdGU7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB0aGlzLl9nZXRTdWJsYXllclVwZGF0ZVRyaWdnZXJzKCk7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gdGhpcy5fZ2V0U3ViTGF5ZXJBY2Nlc3NvcnMoKTtcblxuICAgIGNvbnN0IGRpc3RhbmNlU2NhbGUgPSBnZXREaXN0YW5jZVNjYWxlcyh0aGlzLmNvbnRleHQudmlld3BvcnQpO1xuICAgIGNvbnN0IG1ldGVyc1BlclBpeGVsID0gZGlzdGFuY2VTY2FsZS5tZXRlcnNQZXJQaXhlbFswXTtcblxuICAgIC8vIHJldHVybiBwcm9wcyB0byB0aGUgc3VibGF5ZXIgY29uc3RydWN0b3JcbiAgICByZXR1cm4gbmV3IFNjYXR0ZXJwbG90TGF5ZXIoe1xuICAgICAgaWQ6IGAke2lkfS1jbHVzdGVyYCxcbiAgICAgIGRhdGE6IGNwdUFnZ3JlZ2F0b3Iuc3RhdGUubGF5ZXJEYXRhLmRhdGEsXG4gICAgICByYWRpdXNTY2FsZTogbWV0ZXJzUGVyUGl4ZWwgKiByYWRpdXNTY2FsZSxcbiAgICAgIHZpc2libGUsXG4gICAgICBvcGFjaXR5LFxuICAgICAgcGlja2FibGUsXG4gICAgICBhdXRvSGlnaGxpZ2h0LFxuICAgICAgaGlnaGxpZ2h0Q29sb3IsXG4gICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIC4uLmFjY2Vzc29yc1xuICAgIH0pO1xuICB9XG59XG5cbkNsdXN0ZXJMYXllci5sYXllck5hbWUgPSAnQ2x1c3RlckxheWVyJztcbkNsdXN0ZXJMYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLGNBQWMsUUFBMEMsZUFBZTtBQUMvRSxTQUFRQyxnQkFBZ0IsUUFBTyxpQkFBaUI7QUFFaEQsT0FBT0MsV0FBVyxNQUFNLHNCQUFzQjtBQUM5QyxPQUFPQyxhQUFhLElBRWxCQyxxQkFBcUIsRUFFckJDLGlCQUFpQixRQUNaLCtCQUErQjtBQUN0QyxTQUFRQyxpQkFBaUIsUUFBTywyQkFBMkI7QUFDM0QsU0FBUUMsR0FBRyxRQUFPLFVBQVU7QUFFNUIsU0FBUUMsV0FBVyxFQUFFQyxtQkFBbUIsRUFBRUMsaUJBQWlCLFFBQU8sc0JBQXNCO0FBQ3hGLE9BQU9DLGNBQWMsSUFBR0MsVUFBVSxRQUFPLDhCQUE4QjtBQUd2RSxJQUFNQyxhQUFhLEdBQUdILGlCQUFpQixDQUFDSSxhQUFhLENBQUNDLFlBQVk7QUFDbEUsSUFBTUMsa0JBQWtCLEdBQUdOLGlCQUFpQixDQUFDTyxrQkFBa0IsQ0FBQ0YsWUFBWTtBQUU1RSxJQUFNRyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJQyxNQUFpQztFQUFBLE9BQUtBLE1BQU0sQ0FBQ0MsTUFBTTtBQUFBO0FBQ2pGLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLElBQXFEO0VBQUEsT0FDbEZBLElBQUksQ0FBQ0MsY0FBYyxHQUFHRCxJQUFJLENBQUNDLGNBQWMsQ0FBQ0gsTUFBTSxHQUFHRSxJQUFJLENBQUNILE1BQU0sQ0FBQ0MsTUFBTTtBQUFBOztBQUV2RTtBQUNBLFNBQVNJLGNBQWNBLENBQXNCQyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsV0FBVyxFQUFBQyxJQUFBLEVBQWM7RUFBQSxJQUFYQyxRQUFRLEdBQUFELElBQUEsQ0FBUkMsUUFBUTtFQUM5RSxJQUFPQyxJQUFJLEdBQTZCSixL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SUFBSSxDQUFDN0YsS0FDUDtNQUNGLENBQUM7SUFDSDtFQUFDO0lBQUFnQyxHQUFBO0lBQUFjLEtBQUEsRUFFRCxTQUFBaUQsWUFBWUEsQ0FBQSxFQUFHO01BQ2IsSUFBQUMsS0FBQSxHQUFxRixJQUFJLENBQ3RGaEcsS0FBSztRQUREaUcsRUFBRSxHQUFBRCxLQUFBLENBQUZDLEVBQUU7UUFBRUMsV0FBVyxHQUFBRixLQUFBLENBQVhFLFdBQVc7UUFBRUMsT0FBTyxHQUFBSCxLQUFBLENBQVBHLE9BQU87UUFBRUMsT0FBTyxHQUFBSixLQUFBLENBQVBJLE9BQU87UUFBRUMsUUFBUSxHQUFBTCxLQUFBLENBQVJLLFFBQVE7UUFBRUMsYUFBYSxHQUFBTixLQUFBLENBQWJNLGFBQWE7UUFBRUMsY0FBYyxHQUFBUCxLQUFBLENBQWRPLGNBQWM7TUFFakYsSUFBQUMsS0FBQSxHQUF3QixJQUFJLENBQUMxRixLQUFLO1FBQTNCMkQsYUFBYSxHQUFBK0IsS0FBQSxDQUFiL0IsYUFBYTtNQUNwQixJQUFNZ0MsY0FBYyxHQUFHLElBQUksQ0FBQ2hCLDBCQUEwQixDQUFDLENBQUM7TUFDeEQsSUFBTWlCLFNBQVMsR0FBRyxJQUFJLENBQUNmLHFCQUFxQixDQUFDLENBQUM7TUFFOUMsSUFBTUosYUFBYSxHQUFHM0csaUJBQWlCLENBQUMsSUFBSSxDQUFDb0csT0FBTyxDQUFDN0UsUUFBUSxDQUFDO01BQzlELElBQU1xRixjQUFjLEdBQUdELGFBQWEsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsQ0FBQzs7TUFFdEQ7TUFDQSxPQUFPLElBQUlqSCxnQkFBZ0IsQ0FBQW9JLGFBQUE7UUFDekJWLEVBQUUsS0FBQVcsTUFBQSxDQUFLWCxFQUFFLGFBQVU7UUFDbkI3RixJQUFJLEVBQUVxRSxhQUFhLENBQUMzRCxLQUFLLENBQUNVLFNBQVMsQ0FBQ3BCLElBQUk7UUFDeEM4RixXQUFXLEVBQUVWLGNBQWMsR0FBR1UsV0FBVztRQUN6Q0MsT0FBTyxFQUFQQSxPQUFPO1FBQ1BDLE9BQU8sRUFBUEEsT0FBTztRQUNQQyxRQUFRLEVBQVJBLFFBQVE7UUFDUkMsYUFBYSxFQUFiQSxhQUFhO1FBQ2JDLGNBQWMsRUFBZEEsY0FBYztRQUNkRSxjQUFjLEVBQWRBLGNBQWM7UUFDZEksVUFBVSxFQUFFO1VBQ1ZDLFNBQVMsRUFBRTtRQUNiO01BQUMsR0FDRUosU0FBUyxDQUNiLENBQUM7SUFDSjtFQUFDO0FBQUEsRUEzRnVDcEksY0FBYztBQUFBLFNBQW5DMkYsWUFBWSxJQUFBOEMsT0FBQTtBQThGakM5QyxZQUFZLENBQUMrQyxTQUFTLEdBQUcsY0FBYztBQUN2Qy9DLFlBQVksQ0FBQ1gsWUFBWSxHQUFHQSxZQUFZIiwiaWdub3JlTGlzdCI6W119