@kepler.gl/deckgl-layers 3.3.0-alpha.5 → 3.3.0-alpha.6
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.
- package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
- package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
- package/dist/cjs/3d-building-layer/types.js +6 -0
- package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
- package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
- package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
- package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
- package/dist/cjs/globe/atmosphere-layer.js +220 -0
- package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
- package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
- package/dist/cjs/globe/globe-layers.js +569 -0
- package/dist/cjs/globe/globe-stars-layer.js +69 -0
- package/dist/cjs/globe/globe-view.js +407 -0
- package/dist/{globe → cjs/globe}/index.js +1 -1
- package/dist/cjs/globe/mvt-label-layer.js +190 -0
- package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
- package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
- package/dist/{index.js → cjs/index.js} +1 -1
- package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
- package/dist/cjs/layer-utils/cluster-utils.js +93 -0
- package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
- package/dist/cjs/layer-utils/globe-cell-utils.js +173 -0
- package/dist/cjs/layer-utils/shader-utils.js +38 -0
- package/dist/cjs/line-layer/line-layer.js +95 -0
- package/dist/cjs/raster/images.js +271 -0
- package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
- package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
- package/dist/cjs/raster/raster-mesh-layer/matrix.js +18 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
- package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
- package/dist/cjs/raster/types.js +6 -0
- package/dist/cjs/raster/util.js +139 -0
- package/dist/cjs/raster/webgl/color/colormap.js +45 -0
- package/dist/cjs/raster/webgl/color/filter.js +58 -0
- package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
- package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
- package/dist/cjs/raster/webgl/color/saturation.js +42 -0
- package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
- package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
- package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
- package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
- package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
- package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
- package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
- package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
- package/dist/cjs/raster/webgl/texture/mask.js +50 -0
- package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
- package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
- package/dist/cjs/raster/webgl/types.js +6 -0
- package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
- package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
- package/dist/cjs/wms/wms-layer.js +624 -0
- package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
- package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
- package/dist/esm/3d-building-layer/types.js +3 -0
- package/dist/esm/cluster-layer/cluster-layer.js +286 -0
- package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
- package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
- package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
- package/dist/esm/globe/atmosphere-layer.js +214 -0
- package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
- package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
- package/dist/esm/globe/globe-layers.js +561 -0
- package/dist/esm/globe/globe-stars-layer.js +63 -0
- package/dist/esm/globe/globe-view.js +401 -0
- package/dist/esm/globe/index.js +26 -0
- package/dist/esm/globe/mvt-label-layer.js +187 -0
- package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
- package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/layer-utils/aggregation-utils.js +172 -0
- package/dist/esm/layer-utils/cluster-utils.js +86 -0
- package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
- package/dist/esm/layer-utils/globe-cell-utils.js +167 -0
- package/dist/esm/layer-utils/shader-utils.js +32 -0
- package/dist/esm/line-layer/line-layer.js +91 -0
- package/dist/esm/raster/images.js +267 -0
- package/dist/esm/raster/pipeline-validation-patch.js +94 -0
- package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
- package/dist/esm/raster/raster-mesh-layer/matrix.js +12 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
- package/dist/esm/raster/raster-processing-uniforms.js +118 -0
- package/dist/esm/raster/types.js +3 -0
- package/dist/esm/raster/util.js +134 -0
- package/dist/esm/raster/webgl/color/colormap.js +39 -0
- package/dist/esm/raster/webgl/color/filter.js +52 -0
- package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
- package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
- package/dist/esm/raster/webgl/color/saturation.js +36 -0
- package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
- package/dist/esm/raster/webgl/index.js +26 -0
- package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
- package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
- package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
- package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
- package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
- package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
- package/dist/esm/raster/webgl/texture/mask.js +44 -0
- package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
- package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
- package/dist/esm/raster/webgl/types.js +3 -0
- package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
- package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
- package/dist/esm/wms/wms-layer.js +619 -0
- package/dist/wms/wms-layer.d.ts +8 -0
- package/package.json +17 -8
- package/dist/3d-building-layer/3d-building-layer.js +0 -66
- package/dist/3d-building-layer/3d-building-utils.js +0 -166
- package/dist/3d-building-layer/types.js +0 -6
- package/dist/cluster-layer/cluster-layer.js +0 -292
- package/dist/column-layer/enhanced-column-layer.js +0 -160
- package/dist/deckgl-extensions/filter-shader-module.js +0 -26
- package/dist/globe/atmosphere-layer.js +0 -220
- package/dist/globe/enhanced-multi-icon-layer.js +0 -63
- package/dist/globe/globe-depth-disk-layer.js +0 -145
- package/dist/globe/globe-layers.js +0 -569
- package/dist/globe/globe-stars-layer.js +0 -69
- package/dist/globe/globe-view.js +0 -404
- package/dist/globe/mvt-label-layer.js +0 -190
- package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -116
- package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -134
- package/dist/layer-utils/aggregation-utils.js +0 -181
- package/dist/layer-utils/cluster-utils.js +0 -93
- package/dist/layer-utils/cpu-aggregator.js +0 -798
- package/dist/layer-utils/globe-cell-utils.js +0 -173
- package/dist/layer-utils/shader-utils.js +0 -38
- package/dist/line-layer/line-layer.js +0 -95
- package/dist/raster/images.js +0 -271
- package/dist/raster/pipeline-validation-patch.js +0 -101
- package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
- package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer.js +0 -287
- package/dist/raster/raster-mesh-layer/matrix.js +0 -18
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -321
- package/dist/raster/raster-processing-uniforms.js +0 -124
- package/dist/raster/types.js +0 -6
- package/dist/raster/util.js +0 -139
- package/dist/raster/webgl/color/colormap.js +0 -45
- package/dist/raster/webgl/color/filter.js +0 -58
- package/dist/raster/webgl/color/gamma-contrast.js +0 -68
- package/dist/raster/webgl/color/linear-rescale.js +0 -35
- package/dist/raster/webgl/color/saturation.js +0 -42
- package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
- package/dist/raster/webgl/spectral-indices/evi.js +0 -26
- package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
- package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
- package/dist/raster/webgl/spectral-indices/savi.js +0 -21
- package/dist/raster/webgl/texture/combine-bands.js +0 -65
- package/dist/raster/webgl/texture/mask.js +0 -50
- package/dist/raster/webgl/texture/reorder-bands.js +0 -72
- package/dist/raster/webgl/texture/rgba-image.js +0 -34
- package/dist/raster/webgl/types.js +0 -6
- package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -88
- package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
- package/dist/wms/wms-layer.js +0 -594
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
11
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
12
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
var _layers = require("@deck.gl/layers");
|
|
16
|
+
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; }
|
|
17
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
19
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
20
|
+
function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // SPDX-License-Identifier: MIT
|
|
21
|
+
// Copyright contributors to the kepler.gl project
|
|
22
|
+
// @ts-ignore _MultiIconLayer is an experimental, underscore-prefixed deck.gl export whose named type binding isn't reliably resolvable through the package barrel under this project's module resolution. Access it off the namespace with a loose type.
|
|
23
|
+
// Back-face culling for globe-mode text labels.
|
|
24
|
+
//
|
|
25
|
+
// deck.gl's TextLayer uses a MultiIconLayer to render glyphs; on a globe, labels
|
|
26
|
+
// anchored on the far hemisphere would otherwise be drawn "through" the planet.
|
|
27
|
+
// This subclass injects a small GLSL
|
|
28
|
+
// snippet into the icon vertex shader that degenerates (collapses) glyph vertices
|
|
29
|
+
// whose anchor is facing away from the camera, so back-side labels disappear.
|
|
30
|
+
//
|
|
31
|
+
// The test uses the true sphere-horizon condition rather than a fixed dot-product
|
|
32
|
+
// cutoff. In deck.gl common space the globe is a sphere centered at the origin, so:
|
|
33
|
+
// - the label anchor position doubles as its outward surface normal, and
|
|
34
|
+
// - a surface point is visible from the camera exactly when the angle between its
|
|
35
|
+
// normal and the camera direction is within the horizon half-angle, i.e.
|
|
36
|
+
// dot(normalize(anchor), normalize(cameraPos)) > R / d
|
|
37
|
+
// where R is the sphere radius (= |anchor|) and d = |cameraPos| is the camera
|
|
38
|
+
// distance from the globe center.
|
|
39
|
+
// This is zoom-independent: the visible cap automatically shrinks as you zoom in and
|
|
40
|
+
// grows as you pull back, so labels don't pop in/out at the limb while zooming.
|
|
41
|
+
var BACKFACE_CULL_INJECT = /* glsl */"\n // Only cull on the globe; leave web-mercator / flat views untouched.\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n vec3 anchorCommon = geometry.position.xyz;\n float radius = length(anchorCommon);\n float camDist = length(project.cameraPosition);\n // Guard against degenerate anchors / camera at the center.\n if (radius > 0.0 && camDist > radius) {\n float cosSurface = dot(anchorCommon / radius, project.cameraPosition / camDist);\n // Cosine of the horizon half-angle. Add a tiny margin so labels are hidden just\n // before they wrap exactly onto the limb (avoids glyphs smeared along the edge).\n float cosHorizon = radius / camDist + 0.02;\n if (cosSurface < cosHorizon) {\n // Push the vertex outside clip space so this glyph is discarded. The hook\n // exposes the clip-space position as `position`, not `gl_Position`.\n position = vec4(0.0, 0.0, 2.0, 1.0);\n }\n }\n }\n";
|
|
42
|
+
var EnhancedMultiIconLayer = exports["default"] = /*#__PURE__*/function (_ref) {
|
|
43
|
+
function EnhancedMultiIconLayer() {
|
|
44
|
+
(0, _classCallCheck2["default"])(this, EnhancedMultiIconLayer);
|
|
45
|
+
return _callSuper(this, EnhancedMultiIconLayer, arguments);
|
|
46
|
+
}
|
|
47
|
+
(0, _inherits2["default"])(EnhancedMultiIconLayer, _ref);
|
|
48
|
+
return (0, _createClass2["default"])(EnhancedMultiIconLayer, [{
|
|
49
|
+
key: "getShaders",
|
|
50
|
+
value: function getShaders() {
|
|
51
|
+
var _shaders$inject;
|
|
52
|
+
var shaders = _superPropGet(EnhancedMultiIconLayer, "getShaders", this, 3)([]);
|
|
53
|
+
var existing = ((_shaders$inject = shaders.inject) === null || _shaders$inject === void 0 ? void 0 : _shaders$inject['vs:DECKGL_FILTER_GL_POSITION']) || '';
|
|
54
|
+
return _objectSpread(_objectSpread({}, shaders), {}, {
|
|
55
|
+
inject: _objectSpread(_objectSpread({}, shaders.inject || {}), {}, {
|
|
56
|
+
'vs:DECKGL_FILTER_GL_POSITION': "".concat(existing, "\n").concat(BACKFACE_CULL_INJECT)
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}]);
|
|
61
|
+
}(_layers._MultiIconLayer);
|
|
62
|
+
(0, _defineProperty2["default"])(EnhancedMultiIconLayer, "layerName", 'EnhancedMultiIconLayer');
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsIkJBQ0tGQUNFX0NVTExfSU5KRUNUIiwiRW5oYW5jZWRNdWx0aUljb25MYXllciIsImV4cG9ydHMiLCJfcmVmIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJnZXRTaGFkZXJzIiwiX3NoYWRlcnMkaW5qZWN0Iiwic2hhZGVycyIsImV4aXN0aW5nIiwiaW5qZWN0IiwiY29uY2F0IiwiTXVsdGlJY29uTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2xvYmUvZW5oYW5jZWQtbXVsdGktaWNvbi1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBAdHMtaWdub3JlIF9NdWx0aUljb25MYXllciBpcyBhbiBleHBlcmltZW50YWwsIHVuZGVyc2NvcmUtcHJlZml4ZWQgZGVjay5nbCBleHBvcnQgd2hvc2UgbmFtZWQgdHlwZSBiaW5kaW5nIGlzbid0IHJlbGlhYmx5IHJlc29sdmFibGUgdGhyb3VnaCB0aGUgcGFja2FnZSBiYXJyZWwgdW5kZXIgdGhpcyBwcm9qZWN0J3MgbW9kdWxlIHJlc29sdXRpb24uIEFjY2VzcyBpdCBvZmYgdGhlIG5hbWVzcGFjZSB3aXRoIGEgbG9vc2UgdHlwZS5cbmltcG9ydCB7X011bHRpSWNvbkxheWVyIGFzIE11bHRpSWNvbkxheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuXG4vLyBCYWNrLWZhY2UgY3VsbGluZyBmb3IgZ2xvYmUtbW9kZSB0ZXh0IGxhYmVscy5cbi8vXG4vLyBkZWNrLmdsJ3MgVGV4dExheWVyIHVzZXMgYSBNdWx0aUljb25MYXllciB0byByZW5kZXIgZ2x5cGhzOyBvbiBhIGdsb2JlLCBsYWJlbHNcbi8vIGFuY2hvcmVkIG9uIHRoZSBmYXIgaGVtaXNwaGVyZSB3b3VsZCBvdGhlcndpc2UgYmUgZHJhd24gXCJ0aHJvdWdoXCIgdGhlIHBsYW5ldC5cbi8vIFRoaXMgc3ViY2xhc3MgaW5qZWN0cyBhIHNtYWxsIEdMU0xcbi8vIHNuaXBwZXQgaW50byB0aGUgaWNvbiB2ZXJ0ZXggc2hhZGVyIHRoYXQgZGVnZW5lcmF0ZXMgKGNvbGxhcHNlcykgZ2x5cGggdmVydGljZXNcbi8vIHdob3NlIGFuY2hvciBpcyBmYWNpbmcgYXdheSBmcm9tIHRoZSBjYW1lcmEsIHNvIGJhY2stc2lkZSBsYWJlbHMgZGlzYXBwZWFyLlxuLy9cbi8vIFRoZSB0ZXN0IHVzZXMgdGhlIHRydWUgc3BoZXJlLWhvcml6b24gY29uZGl0aW9uIHJhdGhlciB0aGFuIGEgZml4ZWQgZG90LXByb2R1Y3Rcbi8vIGN1dG9mZi4gSW4gZGVjay5nbCBjb21tb24gc3BhY2UgdGhlIGdsb2JlIGlzIGEgc3BoZXJlIGNlbnRlcmVkIGF0IHRoZSBvcmlnaW4sIHNvOlxuLy8gICAtIHRoZSBsYWJlbCBhbmNob3IgcG9zaXRpb24gZG91YmxlcyBhcyBpdHMgb3V0d2FyZCBzdXJmYWNlIG5vcm1hbCwgYW5kXG4vLyAgIC0gYSBzdXJmYWNlIHBvaW50IGlzIHZpc2libGUgZnJvbSB0aGUgY2FtZXJhIGV4YWN0bHkgd2hlbiB0aGUgYW5nbGUgYmV0d2VlbiBpdHNcbi8vICAgICBub3JtYWwgYW5kIHRoZSBjYW1lcmEgZGlyZWN0aW9uIGlzIHdpdGhpbiB0aGUgaG9yaXpvbiBoYWxmLWFuZ2xlLCBpLmUuXG4vLyAgICAgICAgIGRvdChub3JtYWxpemUoYW5jaG9yKSwgbm9ybWFsaXplKGNhbWVyYVBvcykpID4gUiAvIGRcbi8vICAgICB3aGVyZSBSIGlzIHRoZSBzcGhlcmUgcmFkaXVzICg9IHxhbmNob3J8KSBhbmQgZCA9IHxjYW1lcmFQb3N8IGlzIHRoZSBjYW1lcmFcbi8vICAgICBkaXN0YW5jZSBmcm9tIHRoZSBnbG9iZSBjZW50ZXIuXG4vLyBUaGlzIGlzIHpvb20taW5kZXBlbmRlbnQ6IHRoZSB2aXNpYmxlIGNhcCBhdXRvbWF0aWNhbGx5IHNocmlua3MgYXMgeW91IHpvb20gaW4gYW5kXG4vLyBncm93cyBhcyB5b3UgcHVsbCBiYWNrLCBzbyBsYWJlbHMgZG9uJ3QgcG9wIGluL291dCBhdCB0aGUgbGltYiB3aGlsZSB6b29taW5nLlxuY29uc3QgQkFDS0ZBQ0VfQ1VMTF9JTkpFQ1QgPSAvKiBnbHNsICovIGBcbiAgLy8gT25seSBjdWxsIG9uIHRoZSBnbG9iZTsgbGVhdmUgd2ViLW1lcmNhdG9yIC8gZmxhdCB2aWV3cyB1bnRvdWNoZWQuXG4gIGlmIChwcm9qZWN0LnByb2plY3Rpb25Nb2RlID09IFBST0pFQ1RJT05fTU9ERV9HTE9CRSkge1xuICAgIHZlYzMgYW5jaG9yQ29tbW9uID0gZ2VvbWV0cnkucG9zaXRpb24ueHl6O1xuICAgIGZsb2F0IHJhZGl1cyA9IGxlbmd0aChhbmNob3JDb21tb24pO1xuICAgIGZsb2F0IGNhbURpc3QgPSBsZW5ndGgocHJvamVjdC5jYW1lcmFQb3NpdGlvbik7XG4gICAgLy8gR3VhcmQgYWdhaW5zdCBkZWdlbmVyYXRlIGFuY2hvcnMgLyBjYW1lcmEgYXQgdGhlIGNlbnRlci5cbiAgICBpZiAocmFkaXVzID4gMC4wICYmIGNhbURpc3QgPiByYWRpdXMpIHtcbiAgICAgIGZsb2F0IGNvc1N1cmZhY2UgPSBkb3QoYW5jaG9yQ29tbW9uIC8gcmFkaXVzLCBwcm9qZWN0LmNhbWVyYVBvc2l0aW9uIC8gY2FtRGlzdCk7XG4gICAgICAvLyBDb3NpbmUgb2YgdGhlIGhvcml6b24gaGFsZi1hbmdsZS4gQWRkIGEgdGlueSBtYXJnaW4gc28gbGFiZWxzIGFyZSBoaWRkZW4ganVzdFxuICAgICAgLy8gYmVmb3JlIHRoZXkgd3JhcCBleGFjdGx5IG9udG8gdGhlIGxpbWIgKGF2b2lkcyBnbHlwaHMgc21lYXJlZCBhbG9uZyB0aGUgZWRnZSkuXG4gICAgICBmbG9hdCBjb3NIb3Jpem9uID0gcmFkaXVzIC8gY2FtRGlzdCArIDAuMDI7XG4gICAgICBpZiAoY29zU3VyZmFjZSA8IGNvc0hvcml6b24pIHtcbiAgICAgICAgLy8gUHVzaCB0aGUgdmVydGV4IG91dHNpZGUgY2xpcCBzcGFjZSBzbyB0aGlzIGdseXBoIGlzIGRpc2NhcmRlZC4gVGhlIGhvb2tcbiAgICAgICAgLy8gZXhwb3NlcyB0aGUgY2xpcC1zcGFjZSBwb3NpdGlvbiBhcyBcXGBwb3NpdGlvblxcYCwgbm90IFxcYGdsX1Bvc2l0aW9uXFxgLlxuICAgICAgICBwb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAsIDIuMCwgMS4wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuaGFuY2VkTXVsdGlJY29uTGF5ZXIgZXh0ZW5kcyAoTXVsdGlJY29uTGF5ZXIgYXMgYW55KSB7XG4gIHN0YXRpYyBsYXllck5hbWUgPSAnRW5oYW5jZWRNdWx0aUljb25MYXllcic7XG5cbiAgZ2V0U2hhZGVycygpIHtcbiAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2hhZGVycy5pbmplY3Q/LlsndnM6REVDS0dMX0ZJTFRFUl9HTF9QT1NJVElPTiddIHx8ICcnO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgaW5qZWN0OiB7XG4gICAgICAgIC4uLihzaGFkZXJzLmluamVjdCB8fCB7fSksXG4gICAgICAgICd2czpERUNLR0xfRklMVEVSX0dMX1BPU0lUSU9OJzogYCR7ZXhpc3Rpbmd9XFxuJHtCQUNLRkFDRV9DVUxMX0lOSkVDVH1gXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUFrRSxTQUFBQyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLFFBQUFlLGdCQUFBLGFBQUFoQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FB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
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getGlobeDepthDiskLayer = exports.GlobeDepthDiskLayer = exports.GLOBE_COMMON_RADIUS = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
11
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
12
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
var _core = require("@deck.gl/core");
|
|
16
|
+
var _meshLayers = require("@deck.gl/mesh-layers");
|
|
17
|
+
var _engine = require("@luma.gl/engine");
|
|
18
|
+
var _core2 = require("@math.gl/core");
|
|
19
|
+
var _shaderUtils = require("../layer-utils/shader-utils");
|
|
20
|
+
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; }
|
|
21
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
23
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
24
|
+
function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // SPDX-License-Identifier: MIT
|
|
25
|
+
// Copyright contributors to the kepler.gl project
|
|
26
|
+
// luma.gl 9's PlaneGeometry ignores `radius`; pass explicit type/xlen/ylen so we
|
|
27
|
+
// get a [-1, 1] quad (a `radius: 1` plane would only span [-0.5, 0.5]).
|
|
28
|
+
var PLANE_GEOMETRY = new _engine.PlaneGeometry({
|
|
29
|
+
type: 'x,y',
|
|
30
|
+
xlen: 2,
|
|
31
|
+
ylen: 2
|
|
32
|
+
});
|
|
33
|
+
var DEPTH_DISK_PARAMETERS = {
|
|
34
|
+
// Depth writes only happen with depthTest enabled. The disk is opaque-black-ish
|
|
35
|
+
// and used purely to fill the depth buffer so far-side geometry (arcs/lines) is
|
|
36
|
+
// occluded by the planet.
|
|
37
|
+
depthTest: true,
|
|
38
|
+
cull: false
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Earth radius in meters. The disk geometry is a [-1, 1] plane; we scale it into
|
|
42
|
+
// METERS in the vertex shader (like the atmosphere SphereGeometry, whose radius is
|
|
43
|
+
// ~6.4e6 m) and let SimpleMeshLayer's stock projection map it onto the globe —
|
|
44
|
+
// exactly the working path the atmosphere mesh layers use.
|
|
45
|
+
var DEPTH_DISK_FULL_RADIUS = 6.371e6;
|
|
46
|
+
|
|
47
|
+
// Globe common space uses GLOBE_RADIUS = 256 units (see deck.gl's project_globe_).
|
|
48
|
+
// The disk orientation math is done in that 256-unit common space (matching
|
|
49
|
+
// viewport.cameraPosition), then the resulting radius/shift ratios are converted to
|
|
50
|
+
// meters for the shader, since the disk geometry is expressed in meters.
|
|
51
|
+
var GLOBE_COMMON_RADIUS = exports.GLOBE_COMMON_RADIUS = 256;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a view-oriented disk positioned along the direction from the globe's center to the camera.
|
|
55
|
+
* The disk is a cross-section of the globe between the front (visible) and back side, and it fills
|
|
56
|
+
* the depth buffer so anything on the far side of the globe (e.g. arcs/lines) is depth-culled and
|
|
57
|
+
* hidden behind the planet.
|
|
58
|
+
*/
|
|
59
|
+
var GlobeDepthDiskLayer = exports.GlobeDepthDiskLayer = /*#__PURE__*/function (_SimpleMeshLayer) {
|
|
60
|
+
function GlobeDepthDiskLayer() {
|
|
61
|
+
(0, _classCallCheck2["default"])(this, GlobeDepthDiskLayer);
|
|
62
|
+
return _callSuper(this, GlobeDepthDiskLayer, arguments);
|
|
63
|
+
}
|
|
64
|
+
(0, _inherits2["default"])(GlobeDepthDiskLayer, _SimpleMeshLayer);
|
|
65
|
+
return (0, _createClass2["default"])(GlobeDepthDiskLayer, [{
|
|
66
|
+
key: "getShaders",
|
|
67
|
+
value: function getShaders() {
|
|
68
|
+
var shaders = _superPropGet(GlobeDepthDiskLayer, "getShaders", this, 3)([]);
|
|
69
|
+
|
|
70
|
+
// Override the local `pos` computation: reorient the flat [-1,1] plane to face
|
|
71
|
+
// the camera, scale it to meters, and shift it toward the camera along the view
|
|
72
|
+
// axis so it sits at the globe's silhouette cross-section. The stock
|
|
73
|
+
// project_position_to_clipspace call is left untouched so the disk projects onto
|
|
74
|
+
// the globe through the exact same (working) path the atmosphere mesh layers use.
|
|
75
|
+
var vs = (0, _shaderUtils.editShader)(shaders.vs, 'globe depth disk vs', 'vec3 pos = (instanceModelMatrix * positions) * simpleMesh.sizeScale + instanceTranslation;', "mat3 u_matDepthDiskOrientation = mat3(\n u_depthDiskOrientCol0,\n u_depthDiskOrientCol1,\n u_depthDiskOrientCol2\n );\n vec3 pos = (u_matDepthDiskOrientation * positions) * u_depthDiskRadius;\n vDepthDiskPos = pos;\n pos = pos + u_directionToCamera * u_depthDiskShift;\n ");
|
|
76
|
+
var inject = {
|
|
77
|
+
'vs:#decl': "\n uniform vec3 u_depthDiskOrientCol0;\n uniform vec3 u_depthDiskOrientCol1;\n uniform vec3 u_depthDiskOrientCol2;\n uniform vec3 u_directionToCamera;\n uniform float u_depthDiskShift;\n uniform float u_depthDiskRadius;\n out vec3 vDepthDiskPos;\n ",
|
|
78
|
+
'fs:#decl': "\n uniform float u_depthDiskRadius;\n in vec3 vDepthDiskPos;\n ",
|
|
79
|
+
'fs:#main-start': "\n if (length(vDepthDiskPos) > u_depthDiskRadius) {\n discard;\n }\n "
|
|
80
|
+
};
|
|
81
|
+
return _objectSpread(_objectSpread({}, shaders), {}, {
|
|
82
|
+
vs: vs,
|
|
83
|
+
inject: inject
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}, {
|
|
87
|
+
key: "draw",
|
|
88
|
+
value: function draw(_ref) {
|
|
89
|
+
var uniforms = _ref.uniforms;
|
|
90
|
+
var normalizedRadius = GLOBE_COMMON_RADIUS;
|
|
91
|
+
var camPos = new _core2.Vector3(this.context.viewport.cameraPosition);
|
|
92
|
+
var camDir = camPos.clone().normalize();
|
|
93
|
+
var topDir = new _core2.Vector3(0, 0, 1);
|
|
94
|
+
var sideDir = camDir.clone().cross(topDir);
|
|
95
|
+
var sidePoint = sideDir.clone().scale(normalizedRadius);
|
|
96
|
+
var camToSide = sidePoint.clone().subtract(camPos).normalize();
|
|
97
|
+
var adjustedSidePoint = camToSide.cross(topDir).scale(-normalizedRadius);
|
|
98
|
+
var shiftToCamera = camDir.dot(adjustedSidePoint);
|
|
99
|
+
var adjustedDiskRadius = Math.sqrt(normalizedRadius * normalizedRadius - shiftToCamera * shiftToCamera);
|
|
100
|
+
|
|
101
|
+
// Camera-facing orientation: the plane's local X/Y axes map to world `right`/`up`
|
|
102
|
+
// (both perpendicular to the camera direction), and local Z maps to `forward`.
|
|
103
|
+
// Columns are handed to the shader as vec3s to avoid Matrix3 row/column ambiguity.
|
|
104
|
+
var forward = camDir.clone();
|
|
105
|
+
var right = topDir.clone().cross(forward).normalize();
|
|
106
|
+
var up = forward.clone().cross(right).normalize();
|
|
107
|
+
var model = this.state.model;
|
|
108
|
+
if (model) {
|
|
109
|
+
// Use the same uniform-delivery mechanism as the (working) atmosphere layers:
|
|
110
|
+
// raw `uniform` declarations + assignment to model.props.uniforms.
|
|
111
|
+
model.props.uniforms = _objectSpread(_objectSpread({}, model.props.uniforms), {}, {
|
|
112
|
+
// mat3(col0, col1, col2) in GLSL is column-major; mat3 * (x, y, 0) = x*right + y*up.
|
|
113
|
+
u_depthDiskOrientCol0: [right[0], right[1], right[2]],
|
|
114
|
+
u_depthDiskOrientCol1: [up[0], up[1], up[2]],
|
|
115
|
+
u_depthDiskOrientCol2: [forward[0], forward[1], forward[2]],
|
|
116
|
+
u_directionToCamera: [camDir[0], camDir[1], camDir[2]],
|
|
117
|
+
// Convert the common-space (256-unit) radius/shift to meters, since the disk
|
|
118
|
+
// geometry (and therefore `pos`) is expressed in meters.
|
|
119
|
+
u_depthDiskShift: shiftToCamera / normalizedRadius * DEPTH_DISK_FULL_RADIUS,
|
|
120
|
+
u_depthDiskRadius: adjustedDiskRadius / normalizedRadius * DEPTH_DISK_FULL_RADIUS
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
_superPropGet(GlobeDepthDiskLayer, "draw", this, 3)([{
|
|
124
|
+
uniforms: uniforms
|
|
125
|
+
}]);
|
|
126
|
+
}
|
|
127
|
+
}]);
|
|
128
|
+
}(_meshLayers.SimpleMeshLayer);
|
|
129
|
+
(0, _defineProperty2["default"])(GlobeDepthDiskLayer, "layerName", 'GlobeDepthDiskLayer');
|
|
130
|
+
var getGlobeDepthDiskLayer = exports.getGlobeDepthDiskLayer = function getGlobeDepthDiskLayer(_ref2) {
|
|
131
|
+
var fillColor = _ref2.fillColor;
|
|
132
|
+
return new GlobeDepthDiskLayer({
|
|
133
|
+
id: 'globe-depth-disk-layer',
|
|
134
|
+
data: [[0, 0, 0]],
|
|
135
|
+
coordinateOrigin: [0, 0, 0],
|
|
136
|
+
coordinateSystem: _core.COORDINATE_SYSTEM.CARTESIAN,
|
|
137
|
+
getPosition: function getPosition(d) {
|
|
138
|
+
return d;
|
|
139
|
+
},
|
|
140
|
+
getColor: fillColor !== null && fillColor !== void 0 ? fillColor : [0, 0, 0],
|
|
141
|
+
mesh: PLANE_GEOMETRY,
|
|
142
|
+
parameters: DEPTH_DISK_PARAMETERS
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfbWVzaExheWVycyIsIl9lbmdpbmUiLCJfY29yZTIiLCJfc2hhZGVyVXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJQTEFORV9HRU9NRVRSWSIsIlBsYW5lR2VvbWV0cnkiLCJ0eXBlIiwieGxlbiIsInlsZW4iLCJERVBUSF9ESVNLX1BBUkFNRVRFUlMiLCJkZXB0aFRlc3QiLCJjdWxsIiwiREVQVEhfRElTS19GVUxMX1JBRElVUyIsIkdMT0JFX0NPTU1PTl9SQURJVVMiLCJleHBvcnRzIiwiR2xvYmVEZXB0aERpc2tMYXllciIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImdldFNoYWRlcnMiLCJzaGFkZXJzIiwidnMiLCJlZGl0U2hhZGVyIiwiaW5qZWN0IiwiZHJhdyIsIl9yZWYiLCJ1bmlmb3JtcyIsIm5vcm1hbGl6ZWRSYWRpdXMiLCJjYW1Qb3MiLCJWZWN0b3IzIiwiY29udGV4dCIsInZpZXdwb3J0IiwiY2FtZXJhUG9zaXRpb24iLCJjYW1EaXIiLCJjbG9uZSIsIm5vcm1hbGl6ZSIsInRvcERpciIsInNpZGVEaXIiLCJjcm9zcyIsInNpZGVQb2ludCIsInNjYWxlIiwiY2FtVG9TaWRlIiwic3VidHJhY3QiLCJhZGp1c3RlZFNpZGVQb2ludCIsInNoaWZ0VG9DYW1lcmEiLCJkb3QiLCJhZGp1c3RlZERpc2tSYWRpdXMiLCJNYXRoIiwic3FydCIsImZvcndhcmQiLCJyaWdodCIsInVwIiwibW9kZWwiLCJzdGF0ZSIsInByb3BzIiwidV9kZXB0aERpc2tPcmllbnRDb2wwIiwidV9kZXB0aERpc2tPcmllbnRDb2wxIiwidV9kZXB0aERpc2tPcmllbnRDb2wyIiwidV9kaXJlY3Rpb25Ub0NhbWVyYSIsInVfZGVwdGhEaXNrU2hpZnQiLCJ1X2RlcHRoRGlza1JhZGl1cyIsIlNpbXBsZU1lc2hMYXllciIsImdldEdsb2JlRGVwdGhEaXNrTGF5ZXIiLCJfcmVmMiIsImZpbGxDb2xvciIsImlkIiwiZGF0YSIsImNvb3JkaW5hdGVPcmlnaW4iLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJDQVJURVNJQU4iLCJnZXRQb3NpdGlvbiIsImQiLCJnZXRDb2xvciIsIm1lc2giLCJwYXJhbWV0ZXJzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dsb2JlL2dsb2JlLWRlcHRoLWRpc2stbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NpbXBsZU1lc2hMYXllcn0gZnJvbSAnQGRlY2suZ2wvbWVzaC1sYXllcnMnO1xuaW1wb3J0IHtQbGFuZUdlb21ldHJ5fSBmcm9tICdAbHVtYS5nbC9lbmdpbmUnO1xuaW1wb3J0IHtWZWN0b3IzfSBmcm9tICdAbWF0aC5nbC9jb3JlJztcblxuaW1wb3J0IHtlZGl0U2hhZGVyfSBmcm9tICcuLi9sYXllci11dGlscy9zaGFkZXItdXRpbHMnO1xuaW1wb3J0IHR5cGUge1JHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuLy8gbHVtYS5nbCA5J3MgUGxhbmVHZW9tZXRyeSBpZ25vcmVzIGByYWRpdXNgOyBwYXNzIGV4cGxpY2l0IHR5cGUveGxlbi95bGVuIHNvIHdlXG4vLyBnZXQgYSBbLTEsIDFdIHF1YWQgKGEgYHJhZGl1czogMWAgcGxhbmUgd291bGQgb25seSBzcGFuIFstMC41LCAwLjVdKS5cbmNvbnN0IFBMQU5FX0dFT01FVFJZID0gbmV3IFBsYW5lR2VvbWV0cnkoe1xuICB0eXBlOiAneCx5JyxcbiAgeGxlbjogMixcbiAgeWxlbjogMlxufSBhcyBhbnkpO1xuXG5jb25zdCBERVBUSF9ESVNLX1BBUkFNRVRFUlMgPSB7XG4gIC8vIERlcHRoIHdyaXRlcyBvbmx5IGhhcHBlbiB3aXRoIGRlcHRoVGVzdCBlbmFibGVkLiBUaGUgZGlzayBpcyBvcGFxdWUtYmxhY2staXNoXG4gIC8vIGFuZCB1c2VkIHB1cmVseSB0byBmaWxsIHRoZSBkZXB0aCBidWZmZXIgc28gZmFyLXNpZGUgZ2VvbWV0cnkgKGFyY3MvbGluZXMpIGlzXG4gIC8vIG9jY2x1ZGVkIGJ5IHRoZSBwbGFuZXQuXG4gIGRlcHRoVGVzdDogdHJ1ZSxcbiAgY3VsbDogZmFsc2Vcbn07XG5cbi8vIEVhcnRoIHJhZGl1cyBpbiBtZXRlcnMuIFRoZSBkaXNrIGdlb21ldHJ5IGlzIGEgWy0xLCAxXSBwbGFuZTsgd2Ugc2NhbGUgaXQgaW50b1xuLy8gTUVURVJTIGluIHRoZSB2ZXJ0ZXggc2hhZGVyIChsaWtlIHRoZSBhdG1vc3BoZXJlIFNwaGVyZUdlb21ldHJ5LCB3aG9zZSByYWRpdXMgaXNcbi8vIH42LjRlNiBtKSBhbmQgbGV0IFNpbXBsZU1lc2hMYXllcidzIHN0b2NrIHByb2plY3Rpb24gbWFwIGl0IG9udG8gdGhlIGdsb2JlIOKAlFxuLy8gZXhhY3RseSB0aGUgd29ya2luZyBwYXRoIHRoZSBhdG1vc3BoZXJlIG1lc2ggbGF5ZXJzIHVzZS5cbmNvbnN0IERFUFRIX0RJU0tfRlVMTF9SQURJVVMgPSA2LjM3MWU2O1xuXG4vLyBHbG9iZSBjb21tb24gc3BhY2UgdXNlcyBHTE9CRV9SQURJVVMgPSAyNTYgdW5pdHMgKHNlZSBkZWNrLmdsJ3MgcHJvamVjdF9nbG9iZV8pLlxuLy8gVGhlIGRpc2sgb3JpZW50YXRpb24gbWF0aCBpcyBkb25lIGluIHRoYXQgMjU2LXVuaXQgY29tbW9uIHNwYWNlIChtYXRjaGluZ1xuLy8gdmlld3BvcnQuY2FtZXJhUG9zaXRpb24pLCB0aGVuIHRoZSByZXN1bHRpbmcgcmFkaXVzL3NoaWZ0IHJhdGlvcyBhcmUgY29udmVydGVkIHRvXG4vLyBtZXRlcnMgZm9yIHRoZSBzaGFkZXIsIHNpbmNlIHRoZSBkaXNrIGdlb21ldHJ5IGlzIGV4cHJlc3NlZCBpbiBtZXRlcnMuXG5leHBvcnQgY29uc3QgR0xPQkVfQ09NTU9OX1JBRElVUyA9IDI1NjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgdmlldy1vcmllbnRlZCBkaXNrIHBvc2l0aW9uZWQgYWxvbmcgdGhlIGRpcmVjdGlvbiBmcm9tIHRoZSBnbG9iZSdzIGNlbnRlciB0byB0aGUgY2FtZXJhLlxuICogVGhlIGRpc2sgaXMgYSBjcm9zcy1zZWN0aW9uIG9mIHRoZSBnbG9iZSBiZXR3ZWVuIHRoZSBmcm9udCAodmlzaWJsZSkgYW5kIGJhY2sgc2lkZSwgYW5kIGl0IGZpbGxzXG4gKiB0aGUgZGVwdGggYnVmZmVyIHNvIGFueXRoaW5nIG9uIHRoZSBmYXIgc2lkZSBvZiB0aGUgZ2xvYmUgKGUuZy4gYXJjcy9saW5lcykgaXMgZGVwdGgtY3VsbGVkIGFuZFxuICogaGlkZGVuIGJlaGluZCB0aGUgcGxhbmV0LlxuICovXG5leHBvcnQgY2xhc3MgR2xvYmVEZXB0aERpc2tMYXllciBleHRlbmRzIFNpbXBsZU1lc2hMYXllcjxhbnk+IHtcbiAgc3RhdGljIGxheWVyTmFtZSA9ICdHbG9iZURlcHRoRGlza0xheWVyJztcblxuICBnZXRTaGFkZXJzKCk6IGFueSB7XG4gICAgY29uc3Qgc2hhZGVycyA9IHN1cGVyLmdldFNoYWRlcnMoKTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBsb2NhbCBgcG9zYCBjb21wdXRhdGlvbjogcmVvcmllbnQgdGhlIGZsYXQgWy0xLDFdIHBsYW5lIHRvIGZhY2VcbiAgICAvLyB0aGUgY2FtZXJhLCBzY2FsZSBpdCB0byBtZXRlcnMsIGFuZCBzaGlmdCBpdCB0b3dhcmQgdGhlIGNhbWVyYSBhbG9uZyB0aGUgdmlld1xuICAgIC8vIGF4aXMgc28gaXQgc2l0cyBhdCB0aGUgZ2xvYmUncyBzaWxob3VldHRlIGNyb3NzLXNlY3Rpb24uIFRoZSBzdG9ja1xuICAgIC8vIHByb2plY3RfcG9zaXRpb25fdG9fY2xpcHNwYWNlIGNhbGwgaXMgbGVmdCB1bnRvdWNoZWQgc28gdGhlIGRpc2sgcHJvamVjdHMgb250b1xuICAgIC8vIHRoZSBnbG9iZSB0aHJvdWdoIHRoZSBleGFjdCBzYW1lICh3b3JraW5nKSBwYXRoIHRoZSBhdG1vc3BoZXJlIG1lc2ggbGF5ZXJzIHVzZS5cbiAgICBjb25zdCB2cyA9IGVkaXRTaGFkZXIoXG4gICAgICBzaGFkZXJzLnZzLFxuICAgICAgJ2dsb2JlIGRlcHRoIGRpc2sgdnMnLFxuICAgICAgJ3ZlYzMgcG9zID0gKGluc3RhbmNlTW9kZWxNYXRyaXggKiBwb3NpdGlvbnMpICogc2ltcGxlTWVzaC5zaXplU2NhbGUgKyBpbnN0YW5jZVRyYW5zbGF0aW9uOycsXG4gICAgICBgbWF0MyB1X21hdERlcHRoRGlza09yaWVudGF0aW9uID0gbWF0MyhcbiAgICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMCxcbiAgICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMSxcbiAgICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMlxuICAgICAgICk7XG4gICAgICAgdmVjMyBwb3MgPSAodV9tYXREZXB0aERpc2tPcmllbnRhdGlvbiAqIHBvc2l0aW9ucykgKiB1X2RlcHRoRGlza1JhZGl1cztcbiAgICAgICB2RGVwdGhEaXNrUG9zID0gcG9zO1xuICAgICAgIHBvcyA9IHBvcyArIHVfZGlyZWN0aW9uVG9DYW1lcmEgKiB1X2RlcHRoRGlza1NoaWZ0O1xuICAgICAgYFxuICAgICk7XG5cbiAgICBjb25zdCBpbmplY3QgPSB7XG4gICAgICAndnM6I2RlY2wnOiBgXG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RlcHRoRGlza09yaWVudENvbDA7XG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RlcHRoRGlza09yaWVudENvbDE7XG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RlcHRoRGlza09yaWVudENvbDI7XG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RpcmVjdGlvblRvQ2FtZXJhO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZGVwdGhEaXNrU2hpZnQ7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgdV9kZXB0aERpc2tSYWRpdXM7XG4gICAgICAgIG91dCB2ZWMzIHZEZXB0aERpc2tQb3M7XG4gICAgICBgLFxuICAgICAgJ2ZzOiNkZWNsJzogYFxuICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZGVwdGhEaXNrUmFkaXVzO1xuICAgICAgICBpbiB2ZWMzIHZEZXB0aERpc2tQb3M7XG4gICAgICBgLFxuICAgICAgJ2ZzOiNtYWluLXN0YXJ0JzogYFxuICAgICAgICBpZiAobGVuZ3RoKHZEZXB0aERpc2tQb3MpID4gdV9kZXB0aERpc2tSYWRpdXMpIHtcbiAgICAgICAgICBkaXNjYXJkO1xuICAgICAgICB9XG4gICAgICBgXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgdnMsXG4gICAgICBpbmplY3RcbiAgICB9O1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXN9OiB7dW5pZm9ybXM6IG9iamVjdH0pOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkUmFkaXVzID0gR0xPQkVfQ09NTU9OX1JBRElVUztcblxuICAgIGNvbnN0IGNhbVBvcyA9IG5ldyBWZWN0b3IzKCh0aGlzLmNvbnRleHQudmlld3BvcnQgYXMgYW55KS5jYW1lcmFQb3NpdGlvbik7XG4gICAgY29uc3QgY2FtRGlyID0gY2FtUG9zLmNsb25lKCkubm9ybWFsaXplKCk7XG4gICAgY29uc3QgdG9wRGlyID0gbmV3IFZlY3RvcjMoMCwgMCwgMSk7XG4gICAgY29uc3Qgc2lkZURpciA9IGNhbURpci5jbG9uZSgpLmNyb3NzKHRvcERpcik7XG4gICAgY29uc3Qgc2lkZVBvaW50ID0gc2lkZURpci5jbG9uZSgpLnNjYWxlKG5vcm1hbGl6ZWRSYWRpdXMpO1xuXG4gICAgY29uc3QgY2FtVG9TaWRlID0gc2lkZVBvaW50LmNsb25lKCkuc3VidHJhY3QoY2FtUG9zKS5ub3JtYWxpemUoKTtcbiAgICBjb25zdCBhZGp1c3RlZFNpZGVQb2ludCA9IGNhbVRvU2lkZS5jcm9zcyh0b3BEaXIpLnNjYWxlKC1ub3JtYWxpemVkUmFkaXVzKTtcblxuICAgIGNvbnN0IHNoaWZ0VG9DYW1lcmEgPSBjYW1EaXIuZG90KGFkanVzdGVkU2lkZVBvaW50KTtcbiAgICBjb25zdCBhZGp1c3RlZERpc2tSYWRpdXMgPSBNYXRoLnNxcnQoXG4gICAgICBub3JtYWxpemVkUmFkaXVzICogbm9ybWFsaXplZFJhZGl1cyAtIHNoaWZ0VG9DYW1lcmEgKiBzaGlmdFRvQ2FtZXJhXG4gICAgKTtcblxuICAgIC8vIENhbWVyYS1mYWNpbmcgb3JpZW50YXRpb246IHRoZSBwbGFuZSdzIGxvY2FsIFgvWSBheGVzIG1hcCB0byB3b3JsZCBgcmlnaHRgL2B1cGBcbiAgICAvLyAoYm90aCBwZXJwZW5kaWN1bGFyIHRvIHRoZSBjYW1lcmEgZGlyZWN0aW9uKSwgYW5kIGxvY2FsIFogbWFwcyB0byBgZm9yd2FyZGAuXG4gICAgLy8gQ29sdW1ucyBhcmUgaGFuZGVkIHRvIHRoZSBzaGFkZXIgYXMgdmVjM3MgdG8gYXZvaWQgTWF0cml4MyByb3cvY29sdW1uIGFtYmlndWl0eS5cbiAgICBjb25zdCBmb3J3YXJkID0gY2FtRGlyLmNsb25lKCk7XG4gICAgY29uc3QgcmlnaHQgPSB0b3BEaXIuY2xvbmUoKS5jcm9zcyhmb3J3YXJkKS5ub3JtYWxpemUoKTtcbiAgICBjb25zdCB1cCA9IGZvcndhcmQuY2xvbmUoKS5jcm9zcyhyaWdodCkubm9ybWFsaXplKCk7XG5cbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc3RhdGUubW9kZWw7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICAvLyBVc2UgdGhlIHNhbWUgdW5pZm9ybS1kZWxpdmVyeSBtZWNoYW5pc20gYXMgdGhlICh3b3JraW5nKSBhdG1vc3BoZXJlIGxheWVyczpcbiAgICAgIC8vIHJhdyBgdW5pZm9ybWAgZGVjbGFyYXRpb25zICsgYXNzaWdubWVudCB0byBtb2RlbC5wcm9wcy51bmlmb3Jtcy5cbiAgICAgIChtb2RlbCBhcyBhbnkpLnByb3BzLnVuaWZvcm1zID0ge1xuICAgICAgICAuLi4obW9kZWwgYXMgYW55KS5wcm9wcy51bmlmb3JtcyxcbiAgICAgICAgLy8gbWF0Myhjb2wwLCBjb2wxLCBjb2wyKSBpbiBHTFNMIGlzIGNvbHVtbi1tYWpvcjsgbWF0MyAqICh4LCB5LCAwKSA9IHgqcmlnaHQgKyB5KnVwLlxuICAgICAgICB1X2RlcHRoRGlza09yaWVudENvbDA6IFtyaWdodFswXSwgcmlnaHRbMV0sIHJpZ2h0WzJdXSxcbiAgICAgICAgdV9kZXB0aERpc2tPcmllbnRDb2wxOiBbdXBbMF0sIHVwWzFdLCB1cFsyXV0sXG4gICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMjogW2ZvcndhcmRbMF0sIGZvcndhcmRbMV0sIGZvcndhcmRbMl1dLFxuICAgICAgICB1X2RpcmVjdGlvblRvQ2FtZXJhOiBbY2FtRGlyWzBdLCBjYW1EaXJbMV0sIGNhbURpclsyXV0sXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIGNvbW1vbi1zcGFjZSAoMjU2LXVuaXQpIHJhZGl1cy9zaGlmdCB0byBtZXRlcnMsIHNpbmNlIHRoZSBkaXNrXG4gICAgICAgIC8vIGdlb21ldHJ5IChhbmQgdGhlcmVmb3JlIGBwb3NgKSBpcyBleHByZXNzZWQgaW4gbWV0ZXJzLlxuICAgICAgICB1X2RlcHRoRGlza1NoaWZ0OiAoc2hpZnRUb0NhbWVyYSAvIG5vcm1hbGl6ZWRSYWRpdXMpICogREVQVEhfRElTS19GVUxMX1JBRElVUyxcbiAgICAgICAgdV9kZXB0aERpc2tSYWRpdXM6IChhZGp1c3RlZERpc2tSYWRpdXMgLyBub3JtYWxpemVkUmFkaXVzKSAqIERFUFRIX0RJU0tfRlVMTF9SQURJVVNcbiAgICAgIH07XG4gICAgfVxuICAgIHN1cGVyLmRyYXcoe3VuaWZvcm1zfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEdsb2JlRGVwdGhEaXNrTGF5ZXIgPSAoe2ZpbGxDb2xvcn06IHtmaWxsQ29sb3I/OiBSR0JDb2xvcn0pID0+IHtcbiAgcmV0dXJuIG5ldyBHbG9iZURlcHRoRGlza0xheWVyKHtcbiAgICBpZDogJ2dsb2JlLWRlcHRoLWRpc2stbGF5ZXInLFxuICAgIGRhdGE6IFtbMCwgMCwgMF1dLFxuICAgIGNvb3JkaW5hdGVPcmlnaW46IFswLCAwLCAwXSxcbiAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4sXG4gICAgZ2V0UG9zaXRpb246IChkOiBudW1iZXJbXSkgPT4gZCxcbiAgICBnZXRDb2xvcjogKGZpbGxDb2xvciA/PyBbMCwgMCwgMF0pIGFzIGFueSxcbiAgICBtZXNoOiBQTEFORV9HRU9NRVRSWSxcbiAgICBwYXJhbWV0ZXJzOiBERVBUSF9ESVNLX1BBUkFNRVRFUlNcbiAgfSBhcyBhbnkpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7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
|