@kepler.gl/deckgl-layers 3.3.0-alpha.4 → 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/globe/atmosphere-layer.d.ts +13 -2
- package/dist/globe/globe-depth-disk-layer.d.ts +1 -0
- package/dist/globe/globe-layers.d.ts +8 -2
- package/dist/raster/images.d.ts +10 -1
- package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
- package/dist/wms/wms-layer.d.ts +8 -0
- package/package.json +18 -11
- 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 -184
- 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 -565
- package/dist/globe/globe-stars-layer.js +0 -69
- package/dist/globe/globe-view.js +0 -316
- 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 -259
- 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 -237
- 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 -271
- 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,156 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
4
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
5
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
|
|
6
|
+
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
|
|
7
|
+
import _get from "@babel/runtime/helpers/esm/get";
|
|
8
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
12
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
13
|
+
function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
|
|
14
|
+
// SPDX-License-Identifier: MIT
|
|
15
|
+
// Copyright contributors to the kepler.gl project
|
|
16
|
+
|
|
17
|
+
import { ColumnLayer } from '@deck.gl/layers';
|
|
18
|
+
import { UNIT } from '@deck.gl/core';
|
|
19
|
+
import { editShader } from '../';
|
|
20
|
+
|
|
21
|
+
// deck.gl 9 / luma 9 sets custom uniforms via UBO-backed shader modules (Model has
|
|
22
|
+
// no setUniforms). This module exposes the globe-mode flag to the shader.
|
|
23
|
+
var globeModeUniforms = {
|
|
24
|
+
name: 'globeMode',
|
|
25
|
+
vs: "layout(std140) uniform globeModeUniforms {\n float globeMode;\n} globeModeProps;\n",
|
|
26
|
+
uniformTypes: {
|
|
27
|
+
globeMode: 'f32'
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
function addInstanceCoverage(vs) {
|
|
31
|
+
var addDecl = editShader(vs, 'hexagon cell vs add instance 1', 'in vec3 instancePickingColors;', "in vec3 instancePickingColors;\n in float instanceCoverage;");
|
|
32
|
+
return editShader(addDecl, 'hexagon cell vs add instance 2', 'float dotRadius = column.radius * column.coverage * shouldRender;', 'float dotRadius = column.radius * column.coverage * instanceCoverage * shouldRender;');
|
|
33
|
+
}
|
|
34
|
+
function addGlobeScaling(vs) {
|
|
35
|
+
return editShader(vs, 'hexagon cell vs globe scale mod', 'vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + column.offset) * dotRadius;', "float radiusGlobeMod = globeModeProps.globeMode > 0.5 ? sin((90.0 - abs(geometry.worldPosition.y)) * PI / 180.0) * PI : 1.0;\n vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + column.offset) * dotRadius * radiusGlobeMod;");
|
|
36
|
+
}
|
|
37
|
+
var EnhancedColumnLayer = /*#__PURE__*/function (_ColumnLayer) {
|
|
38
|
+
function EnhancedColumnLayer() {
|
|
39
|
+
_classCallCheck(this, EnhancedColumnLayer);
|
|
40
|
+
return _callSuper(this, EnhancedColumnLayer, arguments);
|
|
41
|
+
}
|
|
42
|
+
_inherits(EnhancedColumnLayer, _ColumnLayer);
|
|
43
|
+
return _createClass(EnhancedColumnLayer, [{
|
|
44
|
+
key: "getShaders",
|
|
45
|
+
value: function getShaders() {
|
|
46
|
+
var shaders = _superPropGet(EnhancedColumnLayer, "getShaders", this, 3)([]);
|
|
47
|
+
var vs = addGlobeScaling(addInstanceCoverage(shaders.vs));
|
|
48
|
+
return _objectSpread(_objectSpread({}, shaders), {}, {
|
|
49
|
+
vs: vs,
|
|
50
|
+
modules: [].concat(_toConsumableArray(shaders.modules || []), [globeModeUniforms])
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}, {
|
|
54
|
+
key: "initializeState",
|
|
55
|
+
value: function initializeState() {
|
|
56
|
+
var _this$getAttributeMan;
|
|
57
|
+
_superPropGet(EnhancedColumnLayer, "initializeState", this, 3)([]);
|
|
58
|
+
(_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.addInstanced({
|
|
59
|
+
instanceCoverage: {
|
|
60
|
+
size: 1,
|
|
61
|
+
accessor: 'getCoverage'
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}, {
|
|
66
|
+
key: "draw",
|
|
67
|
+
value: function draw(_ref) {
|
|
68
|
+
var _uniforms = _ref.uniforms;
|
|
69
|
+
var _this$props = this.props,
|
|
70
|
+
lineWidthUnits = _this$props.lineWidthUnits,
|
|
71
|
+
lineWidthScale = _this$props.lineWidthScale,
|
|
72
|
+
lineWidthMinPixels = _this$props.lineWidthMinPixels,
|
|
73
|
+
lineWidthMaxPixels = _this$props.lineWidthMaxPixels,
|
|
74
|
+
radiusUnits = _this$props.radiusUnits,
|
|
75
|
+
elevationScale = _this$props.elevationScale,
|
|
76
|
+
extruded = _this$props.extruded,
|
|
77
|
+
filled = _this$props.filled,
|
|
78
|
+
stroked = _this$props.stroked,
|
|
79
|
+
strokeOpacity = _this$props.strokeOpacity,
|
|
80
|
+
wireframe = _this$props.wireframe,
|
|
81
|
+
offset = _this$props.offset,
|
|
82
|
+
coverage = _this$props.coverage,
|
|
83
|
+
radius = _this$props.radius,
|
|
84
|
+
angle = _this$props.angle;
|
|
85
|
+
var fillModel = this.state.fillModel;
|
|
86
|
+
var wireframeModel = this.state.wireframeModel;
|
|
87
|
+
var _this$state = this.state,
|
|
88
|
+
fillVertexCount = _this$state.fillVertexCount,
|
|
89
|
+
edgeDistance = _this$state.edgeDistance;
|
|
90
|
+
var globeMode = this.context.viewport.resolution ? 1.0 : 0.0;
|
|
91
|
+
var columnProps = {
|
|
92
|
+
radius: radius,
|
|
93
|
+
angle: angle / 180 * Math.PI,
|
|
94
|
+
offset: offset,
|
|
95
|
+
extruded: extruded,
|
|
96
|
+
stroked: stroked,
|
|
97
|
+
coverage: coverage,
|
|
98
|
+
elevationScale: elevationScale,
|
|
99
|
+
edgeDistance: edgeDistance,
|
|
100
|
+
radiusUnits: UNIT[radiusUnits],
|
|
101
|
+
widthUnits: UNIT[lineWidthUnits],
|
|
102
|
+
widthScale: lineWidthScale,
|
|
103
|
+
widthMinPixels: lineWidthMinPixels,
|
|
104
|
+
widthMaxPixels: lineWidthMaxPixels
|
|
105
|
+
};
|
|
106
|
+
if (extruded && wireframe && wireframeModel) {
|
|
107
|
+
wireframeModel.shaderInputs.setProps({
|
|
108
|
+
column: _objectSpread(_objectSpread({}, columnProps), {}, {
|
|
109
|
+
isStroke: true
|
|
110
|
+
}),
|
|
111
|
+
globeMode: {
|
|
112
|
+
globeMode: globeMode
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
wireframeModel.draw(this.context.renderPass);
|
|
116
|
+
}
|
|
117
|
+
if (filled && fillModel) {
|
|
118
|
+
fillModel.setVertexCount(fillVertexCount);
|
|
119
|
+
fillModel.shaderInputs.setProps({
|
|
120
|
+
column: _objectSpread(_objectSpread({}, columnProps), {}, {
|
|
121
|
+
isStroke: false
|
|
122
|
+
}),
|
|
123
|
+
globeMode: {
|
|
124
|
+
globeMode: globeMode
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
fillModel.draw(this.context.renderPass);
|
|
128
|
+
}
|
|
129
|
+
if (!extruded && stroked && fillModel) {
|
|
130
|
+
fillModel.setVertexCount(fillVertexCount * 2 / 3);
|
|
131
|
+
fillModel.shaderInputs.setProps({
|
|
132
|
+
column: _objectSpread(_objectSpread({}, columnProps), {}, {
|
|
133
|
+
isStroke: true
|
|
134
|
+
}),
|
|
135
|
+
layer: {
|
|
136
|
+
opacity: strokeOpacity !== null && strokeOpacity !== void 0 ? strokeOpacity : this.props.opacity
|
|
137
|
+
},
|
|
138
|
+
globeMode: {
|
|
139
|
+
globeMode: globeMode
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
fillModel.draw(this.context.renderPass);
|
|
143
|
+
// Restore original vertex count and opacity so subsequent passes are unaffected
|
|
144
|
+
fillModel.setVertexCount(fillVertexCount);
|
|
145
|
+
fillModel.shaderInputs.setProps({
|
|
146
|
+
layer: {
|
|
147
|
+
opacity: this.props.opacity
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}]);
|
|
153
|
+
}(ColumnLayer);
|
|
154
|
+
EnhancedColumnLayer.layerName = 'EnhancedColumnLayer';
|
|
155
|
+
export default EnhancedColumnLayer;
|
|
156
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5MYXllciIsIlVOSVQiLCJlZGl0U2hhZGVyIiwiZ2xvYmVNb2RlVW5pZm9ybXMiLCJuYW1lIiwidnMiLCJ1bmlmb3JtVHlwZXMiLCJnbG9iZU1vZGUiLCJhZGRJbnN0YW5jZUNvdmVyYWdlIiwiYWRkRGVjbCIsImFkZEdsb2JlU2NhbGluZyIsIkVuaGFuY2VkQ29sdW1uTGF5ZXIiLCJfQ29sdW1uTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiYXJndW1lbnRzIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwidmFsdWUiLCJnZXRTaGFkZXJzIiwic2hhZGVycyIsIl9zdXBlclByb3BHZXQiLCJfb2JqZWN0U3ByZWFkIiwibW9kdWxlcyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImluaXRpYWxpemVTdGF0ZSIsIl90aGlzJGdldEF0dHJpYnV0ZU1hbiIsImdldEF0dHJpYnV0ZU1hbmFnZXIiLCJhZGRJbnN0YW5jZWQiLCJpbnN0YW5jZUNvdmVyYWdlIiwic2l6ZSIsImFjY2Vzc29yIiwiZHJhdyIsIl9yZWYiLCJfdW5pZm9ybXMiLCJ1bmlmb3JtcyIsIl90aGlzJHByb3BzIiwicHJvcHMiLCJsaW5lV2lkdGhVbml0cyIsImxpbmVXaWR0aFNjYWxlIiwibGluZVdpZHRoTWluUGl4ZWxzIiwibGluZVdpZHRoTWF4UGl4ZWxzIiwicmFkaXVzVW5pdHMiLCJlbGV2YXRpb25TY2FsZSIsImV4dHJ1ZGVkIiwiZmlsbGVkIiwic3Ryb2tlZCIsInN0cm9rZU9wYWNpdHkiLCJ3aXJlZnJhbWUiLCJvZmZzZXQiLCJjb3ZlcmFnZSIsInJhZGl1cyIsImFuZ2xlIiwiZmlsbE1vZGVsIiwic3RhdGUiLCJ3aXJlZnJhbWVNb2RlbCIsIl90aGlzJHN0YXRlIiwiZmlsbFZlcnRleENvdW50IiwiZWRnZURpc3RhbmNlIiwiY29udGV4dCIsInZpZXdwb3J0IiwicmVzb2x1dGlvbiIsImNvbHVtblByb3BzIiwiTWF0aCIsIlBJIiwid2lkdGhVbml0cyIsIndpZHRoU2NhbGUiLCJ3aWR0aE1pblBpeGVscyIsIndpZHRoTWF4UGl4ZWxzIiwic2hhZGVySW5wdXRzIiwic2V0UHJvcHMiLCJjb2x1bW4iLCJpc1N0cm9rZSIsInJlbmRlclBhc3MiLCJzZXRWZXJ0ZXhDb3VudCIsImxheWVyIiwib3BhY2l0eSIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2x1bW4tbGF5ZXIvZW5oYW5jZWQtY29sdW1uLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Q29sdW1uTGF5ZXIsIENvbHVtbkxheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge1VOSVR9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuXG5pbXBvcnQge2VkaXRTaGFkZXJ9IGZyb20gJy4uLyc7XG5cbi8vIGRlY2suZ2wgOSAvIGx1bWEgOSBzZXRzIGN1c3RvbSB1bmlmb3JtcyB2aWEgVUJPLWJhY2tlZCBzaGFkZXIgbW9kdWxlcyAoTW9kZWwgaGFzXG4vLyBubyBzZXRVbmlmb3JtcykuIFRoaXMgbW9kdWxlIGV4cG9zZXMgdGhlIGdsb2JlLW1vZGUgZmxhZyB0byB0aGUgc2hhZGVyLlxuY29uc3QgZ2xvYmVNb2RlVW5pZm9ybXMgPSB7XG4gIG5hbWU6ICdnbG9iZU1vZGUnLFxuICB2czogYGxheW91dChzdGQxNDApIHVuaWZvcm0gZ2xvYmVNb2RlVW5pZm9ybXMge1xuICBmbG9hdCBnbG9iZU1vZGU7XG59IGdsb2JlTW9kZVByb3BzO1xuYCxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgZ2xvYmVNb2RlOiAnZjMyJ1xuICB9XG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhZGRJbnN0YW5jZUNvdmVyYWdlKHZzOiBzdHJpbmcpIHtcbiAgY29uc3QgYWRkRGVjbCA9IGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2hleGFnb24gY2VsbCB2cyBhZGQgaW5zdGFuY2UgMScsXG4gICAgJ2luIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzOycsXG4gICAgYGluIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuICAgICBpbiBmbG9hdCBpbnN0YW5jZUNvdmVyYWdlO2BcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICBhZGREZWNsLFxuICAgICdoZXhhZ29uIGNlbGwgdnMgYWRkIGluc3RhbmNlIDInLFxuICAgICdmbG9hdCBkb3RSYWRpdXMgPSBjb2x1bW4ucmFkaXVzICogY29sdW1uLmNvdmVyYWdlICogc2hvdWxkUmVuZGVyOycsXG4gICAgJ2Zsb2F0IGRvdFJhZGl1cyA9IGNvbHVtbi5yYWRpdXMgKiBjb2x1bW4uY292ZXJhZ2UgKiBpbnN0YW5jZUNvdmVyYWdlICogc2hvdWxkUmVuZGVyOydcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRkR2xvYmVTY2FsaW5nKHZzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2hleGFnb24gY2VsbCB2cyBnbG9iZSBzY2FsZSBtb2QnLFxuICAgICd2ZWMyIG9mZnNldCA9IChyb3RhdGlvbk1hdHJpeCAqIHBvc2l0aW9ucy54eSAqIHN0cm9rZU9mZnNldFJhdGlvICsgY29sdW1uLm9mZnNldCkgKiBkb3RSYWRpdXM7JyxcbiAgICBgZmxvYXQgcmFkaXVzR2xvYmVNb2QgPSBnbG9iZU1vZGVQcm9wcy5nbG9iZU1vZGUgPiAwLjUgPyBzaW4oKDkwLjAgLSBhYnMoZ2VvbWV0cnkud29ybGRQb3NpdGlvbi55KSkgKiBQSSAvIDE4MC4wKSAqIFBJIDogMS4wO1xuICAgICAgdmVjMiBvZmZzZXQgPSAocm90YXRpb25NYXRyaXggKiBwb3NpdGlvbnMueHkgKiBzdHJva2VPZmZzZXRSYXRpbyArIGNvbHVtbi5vZmZzZXQpICogZG90UmFkaXVzICogcmFkaXVzR2xvYmVNb2Q7YFxuICApO1xufVxuXG50eXBlIEVuaGFuY2VkQ29sdW1uTGF5ZXJQcm9wcyA9IENvbHVtbkxheWVyUHJvcHM8YW55PiAmIHtcbiAgc3Ryb2tlT3BhY2l0eTogbnVtYmVyO1xufTtcblxuY2xhc3MgRW5oYW5jZWRDb2x1bW5MYXllciBleHRlbmRzIENvbHVtbkxheWVyPGFueSwgRW5oYW5jZWRDb2x1bW5MYXllclByb3BzPiB7XG4gIGdldFNoYWRlcnMoKSB7XG4gICAgY29uc3Qgc2hhZGVycyA9IHN1cGVyLmdldFNoYWRlcnMoKTtcblxuICAgIGNvbnN0IHZzID0gYWRkR2xvYmVTY2FsaW5nKGFkZEluc3RhbmNlQ292ZXJhZ2Uoc2hhZGVycy52cykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNoYWRlcnMsXG4gICAgICB2cyxcbiAgICAgIG1vZHVsZXM6IFsuLi4oc2hhZGVycy5tb2R1bGVzIHx8IFtdKSwgZ2xvYmVNb2RlVW5pZm9ybXNdXG4gICAgfTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcblxuICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5hZGRJbnN0YW5jZWQoe1xuICAgICAgaW5zdGFuY2VDb3ZlcmFnZToge3NpemU6IDEsIGFjY2Vzc29yOiAnZ2V0Q292ZXJhZ2UnfVxuICAgIH0pO1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXM6IF91bmlmb3Jtc30pIHtcbiAgICBjb25zdCB7XG4gICAgICBsaW5lV2lkdGhVbml0cyxcbiAgICAgIGxpbmVXaWR0aFNjYWxlLFxuICAgICAgbGluZVdpZHRoTWluUGl4ZWxzLFxuICAgICAgbGluZVdpZHRoTWF4UGl4ZWxzLFxuICAgICAgcmFkaXVzVW5pdHMsXG4gICAgICBlbGV2YXRpb25TY2FsZSxcbiAgICAgIGV4dHJ1ZGVkLFxuICAgICAgZmlsbGVkLFxuICAgICAgc3Ryb2tlZCxcbiAgICAgIHN0cm9rZU9wYWNpdHksXG4gICAgICB3aXJlZnJhbWUsXG4gICAgICBvZmZzZXQsXG4gICAgICBjb3ZlcmFnZSxcbiAgICAgIHJhZGl1cyxcbiAgICAgIGFuZ2xlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZmlsbE1vZGVsID0gdGhpcy5zdGF0ZS5maWxsTW9kZWw7XG4gICAgY29uc3Qgd2lyZWZyYW1lTW9kZWwgPSB0aGlzLnN0YXRlLndpcmVmcmFtZU1vZGVsO1xuICAgIGNvbnN0IHtmaWxsVmVydGV4Q291bnQsIGVkZ2VEaXN0YW5jZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgZ2xvYmVNb2RlID0gKHRoaXMuY29udGV4dC52aWV3cG9ydCBhcyBhbnkpLnJlc29sdXRpb24gPyAxLjAgOiAwLjA7XG5cbiAgICBjb25zdCBjb2x1bW5Qcm9wcyA9IHtcbiAgICAgIHJhZGl1cyxcbiAgICAgIGFuZ2xlOiAoYW5nbGUgLyAxODApICogTWF0aC5QSSxcbiAgICAgIG9mZnNldCxcbiAgICAgIGV4dHJ1ZGVkLFxuICAgICAgc3Ryb2tlZCxcbiAgICAgIGNvdmVyYWdlLFxuICAgICAgZWxldmF0aW9uU2NhbGUsXG4gICAgICBlZGdlRGlzdGFuY2UsXG4gICAgICByYWRpdXNVbml0czogVU5JVFtyYWRpdXNVbml0c10sXG4gICAgICB3aWR0aFVuaXRzOiBVTklUW2xpbmVXaWR0aFVuaXRzXSxcbiAgICAgIHdpZHRoU2NhbGU6IGxpbmVXaWR0aFNjYWxlLFxuICAgICAgd2lkdGhNaW5QaXhlbHM6IGxpbmVXaWR0aE1pblBpeGVscyxcbiAgICAgIHdpZHRoTWF4UGl4ZWxzOiBsaW5lV2lkdGhNYXhQaXhlbHNcbiAgICB9O1xuXG4gICAgaWYgKGV4dHJ1ZGVkICYmIHdpcmVmcmFtZSAmJiB3aXJlZnJhbWVNb2RlbCkge1xuICAgICAgd2lyZWZyYW1lTW9kZWwuc2hhZGVySW5wdXRzLnNldFByb3BzKHtcbiAgICAgICAgY29sdW1uOiB7Li4uY29sdW1uUHJvcHMsIGlzU3Ryb2tlOiB0cnVlfSxcbiAgICAgICAgZ2xvYmVNb2RlOiB7Z2xvYmVNb2RlfVxuICAgICAgfSk7XG4gICAgICB3aXJlZnJhbWVNb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICB9XG4gICAgaWYgKGZpbGxlZCAmJiBmaWxsTW9kZWwpIHtcbiAgICAgIGZpbGxNb2RlbC5zZXRWZXJ0ZXhDb3VudChmaWxsVmVydGV4Q291bnQpO1xuICAgICAgZmlsbE1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICAgIGNvbHVtbjogey4uLmNvbHVtblByb3BzLCBpc1N0cm9rZTogZmFsc2V9LFxuICAgICAgICBnbG9iZU1vZGU6IHtnbG9iZU1vZGV9XG4gICAgICB9KTtcbiAgICAgIGZpbGxNb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICB9XG4gICAgaWYgKCFleHRydWRlZCAmJiBzdHJva2VkICYmIGZpbGxNb2RlbCkge1xuICAgICAgZmlsbE1vZGVsLnNldFZlcnRleENvdW50KChmaWxsVmVydGV4Q291bnQgKiAyKSAvIDMpO1xuICAgICAgZmlsbE1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICAgIGNvbHVtbjogey4uLmNvbHVtblByb3BzLCBpc1N0cm9rZTogdHJ1ZX0sXG4gICAgICAgIGxheWVyOiB7b3BhY2l0eTogc3Ryb2tlT3BhY2l0eSA/PyB0aGlzLnByb3BzLm9wYWNpdHl9LFxuICAgICAgICBnbG9iZU1vZGU6IHtnbG9iZU1vZGV9XG4gICAgICB9KTtcbiAgICAgIGZpbGxNb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgdmVydGV4IGNvdW50IGFuZCBvcGFjaXR5IHNvIHN1YnNlcXVlbnQgcGFzc2VzIGFyZSB1bmFmZmVjdGVkXG4gICAgICBmaWxsTW9kZWwuc2V0VmVydGV4Q291bnQoZmlsbFZlcnRleENvdW50KTtcbiAgICAgIGZpbGxNb2RlbC5zaGFkZXJJbnB1dHMuc2V0UHJvcHMoe1xuICAgICAgICBsYXllcjoge29wYWNpdHk6IHRoaXMucHJvcHMub3BhY2l0eX1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5FbmhhbmNlZENvbHVtbkxheWVyLmxheWVyTmFtZSA9ICdFbmhhbmNlZENvbHVtbkxheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgRW5oYW5jZWRDb2x1bW5MYXllcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsV0FBVyxRQUF5QixpQkFBaUI7QUFDN0QsU0FBUUMsSUFBSSxRQUFPLGVBQWU7QUFFbEMsU0FBUUMsVUFBVSxRQUFPLEtBQUs7O0FBRTlCO0FBQ0E7QUFDQSxJQUFNQyxpQkFBaUIsR0FBRztFQUN4QkMsSUFBSSxFQUFFLFdBQVc7RUFDakJDLEVBQUUsdUZBR0g7RUFDQ0MsWUFBWSxFQUFFO0lBQ1pDLFNBQVMsRUFBRTtFQUNiO0FBQ0YsQ0FBVTtBQUVWLFNBQVNDLG1CQUFtQkEsQ0FBQ0gsRUFBVSxFQUFFO0VBQ3ZDLElBQU1JLE9BQU8sR0FBR1AsVUFBVSxDQUN4QkcsRUFBRSxFQUNGLGdDQUFnQyxFQUNoQyxnQ0FBZ0MsbUVBR2xDLENBQUM7RUFFRCxPQUFPSCxVQUFVLENBQ2ZPLE9BQU8sRUFDUCxnQ0FBZ0MsRUFDaEMsbUVBQW1FLEVBQ25FLHNGQUNGLENBQUM7QUFDSDtBQUVBLFNBQVNDLGVBQWVBLENBQUNMLEVBQVUsRUFBRTtFQUNuQyxPQUFPSCxVQUFVLENBQ2ZHLEVBQUUsRUFDRixpQ0FBaUMsRUFDakMsZ0dBQWdHLHVQQUdsRyxDQUFDO0FBQ0g7QUFBQyxJQU1LTSxtQkFBbUIsMEJBQUFDLFlBQUE7RUFBQSxTQUFBRCxvQkFBQTtJQUFBRSxlQUFBLE9BQUFGLG1CQUFBO0lBQUEsT0FBQUcsVUFBQSxPQUFBSCxtQkFBQSxFQUFBSSxTQUFBO0VBQUE7RUFBQUMsU0FBQSxDQUFBTCxtQkFBQSxFQUFBQyxZQUFBO0VBQUEsT0FBQUssWUFBQSxDQUFBTixtQkFBQTtJQUFBTyxHQUFBO0lBQUFDLEtBQUEsRUFDdkIsU0FBQUMsVUFBVUEsQ0FBQSxFQUFHO01BQ1gsSUFBTUMsT0FBTyxHQUFBQyxhQUFBLENBQUFYLG1CQUFBLDRCQUFxQjtNQUVsQyxJQUFNTixFQUFFLEdBQUdLLGVBQWUsQ0FBQ0YsbUJBQW1CLENBQUNhLE9BQU8sQ0FBQ2hCLEVBQUUsQ0FBQyxDQUFDO01BRTNELE9BQUFrQixhQUFBLENBQUFBLGFBQUEsS0FDS0YsT0FBTztRQUNWaEIsRUFBRSxFQUFGQSxFQUFFO1FBQ0ZtQixPQUFPLEtBQUFDLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBT0wsT0FBTyxDQUFDRyxPQUFPLElBQUksRUFBRSxJQUFHckIsaUJBQWlCO01BQUM7SUFFNUQ7RUFBQztJQUFBZSxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBUSxlQUFlQSxDQUFBLEVBQUc7TUFBQSxJQUFBQyxxQkFBQTtNQUNoQk4sYUFBQSxDQUFBWCxtQkFBQTtNQUVBLENBQUFpQixxQkFBQSxPQUFJLENBQUNDLG1CQUFtQixDQUFDLENBQUMsY0FBQUQscUJBQUEsZUFBMUJBLHFCQUFBLENBQTRCRSxZQUFZLENBQUM7UUFDdkNDLGdCQUFnQixFQUFFO1VBQUNDLElBQUksRUFBRSxDQUFDO1VBQUVDLFFBQVEsRUFBRTtRQUFhO01BQ3JELENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQWYsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWUsSUFBSUEsQ0FBQUMsSUFBQSxFQUF3QjtNQUFBLElBQVpDLFNBQVMsR0FBQUQsSUFBQSxDQUFuQkUsUUFBUTtNQUNaLElBQUFDLFdBQUEsR0FnQkksSUFBSSxDQUFDQyxLQUFLO1FBZlpDLGNBQWMsR0FBQUYsV0FBQSxDQUFkRSxjQUFjO1FBQ2RDLGNBQWMsR0FBQUgsV0FBQSxDQUFkRyxjQUFjO1FBQ2RDLGtCQUFrQixHQUFBSixXQUFBLENBQWxCSSxrQkFBa0I7UUFDbEJDLGtCQUFrQixHQUFBTCxXQUFBLENBQWxCSyxrQkFBa0I7UUFDbEJDLFdBQVcsR0FBQU4sV0FBQSxDQUFYTSxXQUFXO1FBQ1hDLGNBQWMsR0FBQVAsV0FBQSxDQUFkTyxjQUFjO1FBQ2RDLFFBQVEsR0FBQVIsV0FBQSxDQUFSUSxRQUFRO1FBQ1JDLE1BQU0sR0FBQVQsV0FBQSxDQUFOUyxNQUFNO1FBQ05DLE9BQU8sR0FBQVYsV0FBQSxDQUFQVSxPQUFPO1FBQ1BDLGFBQWEsR0FBQVgsV0FBQSxDQUFiVyxhQUFhO1FBQ2JDLFNBQVMsR0FBQVosV0FBQSxDQUFUWSxTQUFTO1FBQ1RDLE1BQU0sR0FBQWIsV0FBQSxDQUFOYSxNQUFNO1FBQ05DLFFBQVEsR0FBQWQsV0FBQSxDQUFSYyxRQUFRO1FBQ1JDLE1BQU0sR0FBQWYsV0FBQSxDQUFOZSxNQUFNO1FBQ05DLEtBQUssR0FBQWhCLFdBQUEsQ0FBTGdCLEtBQUs7TUFFUCxJQUFNQyxTQUFTLEdBQUcsSUFBSSxDQUFDQyxLQUFLLENBQUNELFNBQVM7TUFDdEMsSUFBTUUsY0FBYyxHQUFHLElBQUksQ0FBQ0QsS0FBSyxDQUFDQyxjQUFjO01BQ2hELElBQUFDLFdBQUEsR0FBd0MsSUFBSSxDQUFDRixLQUFLO1FBQTNDRyxlQUFlLEdBQUFELFdBQUEsQ0FBZkMsZUFBZTtRQUFFQyxZQUFZLEdBQUFGLFdBQUEsQ0FBWkUsWUFBWTtNQUVwQyxJQUFNckQsU0FBUyxHQUFJLElBQUksQ0FBQ3NELE9BQU8sQ0FBQ0MsUUFBUSxDQUFTQyxVQUFVLEdBQUcsR0FBRyxHQUFHLEdBQUc7TUFFdkUsSUFBTUMsV0FBVyxHQUFHO1FBQ2xCWCxNQUFNLEVBQU5BLE1BQU07UUFDTkMsS0FBSyxFQUFHQSxLQUFLLEdBQUcsR0FBRyxHQUFJVyxJQUFJLENBQUNDLEVBQUU7UUFDOUJmLE1BQU0sRUFBTkEsTUFBTTtRQUNOTCxRQUFRLEVBQVJBLFFBQVE7UUFDUkUsT0FBTyxFQUFQQSxPQUFPO1FBQ1BJLFFBQVEsRUFBUkEsUUFBUTtRQUNSUCxjQUFjLEVBQWRBLGNBQWM7UUFDZGUsWUFBWSxFQUFaQSxZQUFZO1FBQ1poQixXQUFXLEVBQUUzQyxJQUFJLENBQUMyQyxXQUFXLENBQUM7UUFDOUJ1QixVQUFVLEVBQUVsRSxJQUFJLENBQUN1QyxjQUFjLENBQUM7UUFDaEM0QixVQUFVLEVBQUUzQixjQUFjO1FBQzFCNEIsY0FBYyxFQUFFM0Isa0JBQWtCO1FBQ2xDNEIsY0FBYyxFQUFFM0I7TUFDbEIsQ0FBQztNQUVELElBQUlHLFFBQVEsSUFBSUksU0FBUyxJQUFJTyxjQUFjLEVBQUU7UUFDM0NBLGNBQWMsQ0FBQ2MsWUFBWSxDQUFDQyxRQUFRLENBQUM7VUFDbkNDLE1BQU0sRUFBQWxELGFBQUEsQ0FBQUEsYUFBQSxLQUFNeUMsV0FBVztZQUFFVSxRQUFRLEVBQUU7VUFBSSxFQUFDO1VBQ3hDbkUsU0FBUyxFQUFFO1lBQUNBLFNBQVMsRUFBVEE7VUFBUztRQUN2QixDQUFDLENBQUM7UUFDRmtELGNBQWMsQ0FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMyQixPQUFPLENBQUNjLFVBQVUsQ0FBQztNQUM5QztNQUNBLElBQUk1QixNQUFNLElBQUlRLFNBQVMsRUFBRTtRQUN2QkEsU0FBUyxDQUFDcUIsY0FBYyxDQUFDakIsZUFBZSxDQUFDO1FBQ3pDSixTQUFTLENBQUNnQixZQUFZLENBQUNDLFFBQVEsQ0FBQztVQUM5QkMsTUFBTSxFQUFBbEQsYUFBQSxDQUFBQSxhQUFBLEtBQU15QyxXQUFXO1lBQUVVLFFBQVEsRUFBRTtVQUFLLEVBQUM7VUFDekNuRSxTQUFTLEVBQUU7WUFBQ0EsU0FBUyxFQUFUQTtVQUFTO1FBQ3ZCLENBQUMsQ0FBQztRQUNGZ0QsU0FBUyxDQUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQzJCLE9BQU8sQ0FBQ2MsVUFBVSxDQUFDO01BQ3pDO01BQ0EsSUFBSSxDQUFDN0IsUUFBUSxJQUFJRSxPQUFPLElBQUlPLFNBQVMsRUFBRTtRQUNyQ0EsU0FBUyxDQUFDcUIsY0FBYyxDQUFFakIsZUFBZSxHQUFHLENBQUMsR0FBSSxDQUFDLENBQUM7UUFDbkRKLFNBQVMsQ0FBQ2dCLFlBQVksQ0FBQ0MsUUFBUSxDQUFDO1VBQzlCQyxNQUFNLEVBQUFsRCxhQUFBLENBQUFBLGFBQUEsS0FBTXlDLFdBQVc7WUFBRVUsUUFBUSxFQUFFO1VBQUksRUFBQztVQUN4Q0csS0FBSyxFQUFFO1lBQUNDLE9BQU8sRUFBRTdCLGFBQWEsYUFBYkEsYUFBYSxjQUFiQSxhQUFhLEdBQUksSUFBSSxDQUFDVixLQUFLLENBQUN1QztVQUFPLENBQUM7VUFDckR2RSxTQUFTLEVBQUU7WUFBQ0EsU0FBUyxFQUFUQTtVQUFTO1FBQ3ZCLENBQUMsQ0FBQztRQUNGZ0QsU0FBUyxDQUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQzJCLE9BQU8sQ0FBQ2MsVUFBVSxDQUFDO1FBQ3ZDO1FBQ0FwQixTQUFTLENBQUNxQixjQUFjLENBQUNqQixlQUFlLENBQUM7UUFDekNKLFNBQVMsQ0FBQ2dCLFlBQVksQ0FBQ0MsUUFBUSxDQUFDO1VBQzlCSyxLQUFLLEVBQUU7WUFBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ3ZDLEtBQUssQ0FBQ3VDO1VBQU87UUFDckMsQ0FBQyxDQUFDO01BQ0o7SUFDRjtFQUFDO0FBQUEsRUExRitCOUUsV0FBVztBQTZGN0NXLG1CQUFtQixDQUFDb0UsU0FBUyxHQUFHLHFCQUFxQjtBQUVyRCxlQUFlcEUsbUJBQW1CIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
|
|
4
|
+
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
|
|
5
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
6
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
7
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
8
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
9
|
+
// SPDX-License-Identifier: MIT
|
|
10
|
+
// Copyright contributors to the kepler.gl project
|
|
11
|
+
|
|
12
|
+
import { LayerExtension } from '@deck.gl/core';
|
|
13
|
+
import shaderModule from './filter-shader-module';
|
|
14
|
+
var VALUE_FILTERED = 1;
|
|
15
|
+
var defaultProps = {
|
|
16
|
+
getFiltered: {
|
|
17
|
+
type: 'accessor',
|
|
18
|
+
value: VALUE_FILTERED
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* FilterArrowExtension - a deck.gl extension to filter arrow layer
|
|
23
|
+
*
|
|
24
|
+
* A simple extension to filter arrow layer based on the result of CPU filteredIndex,
|
|
25
|
+
* so we can avoid filtering on the raw Arrow table and recreating geometry attributes.
|
|
26
|
+
* Specifically, an attribute `filtered` is added to the layer to indicate whether the feature has been Filtered
|
|
27
|
+
* the shader module is modified to discard the feature if filtered value is 0
|
|
28
|
+
* the accessor getFiltered is used to get the value of `filtered` based on the value `filteredIndex` in Arrowlayer
|
|
29
|
+
*/
|
|
30
|
+
var FilterArrowExtension = /*#__PURE__*/function (_LayerExtension) {
|
|
31
|
+
function FilterArrowExtension() {
|
|
32
|
+
_classCallCheck(this, FilterArrowExtension);
|
|
33
|
+
return _callSuper(this, FilterArrowExtension, arguments);
|
|
34
|
+
}
|
|
35
|
+
_inherits(FilterArrowExtension, _LayerExtension);
|
|
36
|
+
return _createClass(FilterArrowExtension, [{
|
|
37
|
+
key: "getShaders",
|
|
38
|
+
value: function getShaders() {
|
|
39
|
+
return {
|
|
40
|
+
modules: [shaderModule],
|
|
41
|
+
defines: {}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}, {
|
|
45
|
+
key: "initializeState",
|
|
46
|
+
value: function initializeState() {
|
|
47
|
+
var attributeManager = this.getAttributeManager();
|
|
48
|
+
if (attributeManager) {
|
|
49
|
+
attributeManager.add({
|
|
50
|
+
filtered: {
|
|
51
|
+
size: 1,
|
|
52
|
+
type: 'float32',
|
|
53
|
+
stepMode: 'dynamic',
|
|
54
|
+
accessor: 'getFiltered'
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}]);
|
|
60
|
+
}(LayerExtension);
|
|
61
|
+
_defineProperty(FilterArrowExtension, "defaultProps", defaultProps);
|
|
62
|
+
_defineProperty(FilterArrowExtension, "extensionName", 'FilterArrowExtension');
|
|
63
|
+
export { FilterArrowExtension as default };
|
|
64
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXllckV4dGVuc2lvbiIsInNoYWRlck1vZHVsZSIsIlZBTFVFX0ZJTFRFUkVEIiwiZGVmYXVsdFByb3BzIiwiZ2V0RmlsdGVyZWQiLCJ0eXBlIiwidmFsdWUiLCJGaWx0ZXJBcnJvd0V4dGVuc2lvbiIsIl9MYXllckV4dGVuc2lvbiIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJnZXRTaGFkZXJzIiwibW9kdWxlcyIsImRlZmluZXMiLCJpbml0aWFsaXplU3RhdGUiLCJhdHRyaWJ1dGVNYW5hZ2VyIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImFkZCIsImZpbHRlcmVkIiwic2l6ZSIsInN0ZXBNb2RlIiwiYWNjZXNzb3IiLCJfZGVmaW5lUHJvcGVydHkiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RlY2tnbC1leHRlbnNpb25zL2ZpbHRlci1hcnJvdy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0xheWVyLCBMYXllckV4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5cbmltcG9ydCBzaGFkZXJNb2R1bGUgZnJvbSAnLi9maWx0ZXItc2hhZGVyLW1vZHVsZSc7XG5cbmNvbnN0IFZBTFVFX0ZJTFRFUkVEID0gMTtcblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBnZXRGaWx0ZXJlZDoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBWQUxVRV9GSUxURVJFRH1cbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckFycm93RXh0ZW5zaW9uUHJvcHMgPSB7XG4gIGdldEZpbHRlcmVkPzogKCkgPT4gbnVtYmVyO1xufTtcblxuLyoqXG4gKiBGaWx0ZXJBcnJvd0V4dGVuc2lvbiAtIGEgZGVjay5nbCBleHRlbnNpb24gdG8gZmlsdGVyIGFycm93IGxheWVyXG4gKlxuICogQSBzaW1wbGUgZXh0ZW5zaW9uIHRvIGZpbHRlciBhcnJvdyBsYXllciBiYXNlZCBvbiB0aGUgcmVzdWx0IG9mIENQVSBmaWx0ZXJlZEluZGV4LFxuICogc28gd2UgY2FuIGF2b2lkIGZpbHRlcmluZyBvbiB0aGUgcmF3IEFycm93IHRhYmxlIGFuZCByZWNyZWF0aW5nIGdlb21ldHJ5IGF0dHJpYnV0ZXMuXG4gKiBTcGVjaWZpY2FsbHksIGFuIGF0dHJpYnV0ZSBgZmlsdGVyZWRgIGlzIGFkZGVkIHRvIHRoZSBsYXllciB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBmZWF0dXJlIGhhcyBiZWVuIEZpbHRlcmVkXG4gKiB0aGUgc2hhZGVyIG1vZHVsZSBpcyBtb2RpZmllZCB0byBkaXNjYXJkIHRoZSBmZWF0dXJlIGlmIGZpbHRlcmVkIHZhbHVlIGlzIDBcbiAqIHRoZSBhY2Nlc3NvciBnZXRGaWx0ZXJlZCBpcyB1c2VkIHRvIGdldCB0aGUgdmFsdWUgb2YgYGZpbHRlcmVkYCBiYXNlZCBvbiB0aGUgdmFsdWUgYGZpbHRlcmVkSW5kZXhgIGluIEFycm93bGF5ZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsdGVyQXJyb3dFeHRlbnNpb24gZXh0ZW5kcyBMYXllckV4dGVuc2lvbiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4gIHN0YXRpYyBleHRlbnNpb25OYW1lID0gJ0ZpbHRlckFycm93RXh0ZW5zaW9uJztcblxuICBnZXRTaGFkZXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb2R1bGVzOiBbc2hhZGVyTW9kdWxlXSxcbiAgICAgIGRlZmluZXM6IHt9XG4gICAgfTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSh0aGlzOiBMYXllcjxGaWx0ZXJBcnJvd0V4dGVuc2lvblByb3BzPikge1xuICAgIGNvbnN0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKTtcbiAgICBpZiAoYXR0cmlidXRlTWFuYWdlcikge1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5hZGQoe1xuICAgICAgICBmaWx0ZXJlZDoge1xuICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgdHlwZTogJ2Zsb2F0MzInLFxuICAgICAgICAgIHN0ZXBNb2RlOiAnZHluYW1pYycsXG4gICAgICAgICAgYWNjZXNzb3I6ICdnZXRGaWx0ZXJlZCdcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxTQUFlQSxjQUFjLFFBQU8sZUFBZTtBQUVuRCxPQUFPQyxZQUFZLE1BQU0sd0JBQXdCO0FBRWpELElBQU1DLGNBQWMsR0FBRyxDQUFDO0FBRXhCLElBQU1DLFlBQVksR0FBRztFQUNuQkMsV0FBVyxFQUFFO0lBQUNDLElBQUksRUFBRSxVQUFVO0lBQUVDLEtBQUssRUFBRUo7RUFBYztBQUN2RCxDQUFDO0FBTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkEsSUFTcUJLLG9CQUFvQiwwQkFBQUMsZUFBQTtFQUFBLFNBQUFELHFCQUFBO0lBQUFFLGVBQUEsT0FBQUYsb0JBQUE7SUFBQSxPQUFBRyxVQUFBLE9BQUFILG9CQUFBLEVBQUFJLFNBQUE7RUFBQTtFQUFBQyxTQUFBLENBQUFMLG9CQUFBLEVBQUFDLGVBQUE7RUFBQSxPQUFBSyxZQUFBLENBQUFOLG9CQUFBO0lBQUFPLEdBQUE7SUFBQVIsS0FBQSxFQUl2QyxTQUFBUyxVQUFVQSxDQUFBLEVBQUc7TUFDWCxPQUFPO1FBQ0xDLE9BQU8sRUFBRSxDQUFDZixZQUFZLENBQUM7UUFDdkJnQixPQUFPLEVBQUUsQ0FBQztNQUNaLENBQUM7SUFDSDtFQUFDO0lBQUFILEdBQUE7SUFBQVIsS0FBQSxFQUVELFNBQUFZLGVBQWVBLENBQUEsRUFBeUM7TUFDdEQsSUFBTUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDO01BQ25ELElBQUlELGdCQUFnQixFQUFFO1FBQ3BCQSxnQkFBZ0IsQ0FBQ0UsR0FBRyxDQUFDO1VBQ25CQyxRQUFRLEVBQUU7WUFDUkMsSUFBSSxFQUFFLENBQUM7WUFDUGxCLElBQUksRUFBRSxTQUFTO1lBQ2ZtQixRQUFRLEVBQUUsU0FBUztZQUNuQkMsUUFBUSxFQUFFO1VBQ1o7UUFDRixDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7QUFBQSxFQXZCK0N6QixjQUFjO0FBQUEwQixlQUFBLENBQTNDbkIsb0JBQW9CLGtCQUNqQkosWUFBWTtBQUFBdUIsZUFBQSxDQURmbkIsb0JBQW9CLG1CQUVoQixzQkFBc0I7QUFBQSxTQUYxQkEsb0JBQW9CLElBQUFvQixPQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Copyright contributors to the kepler.gl project
|
|
3
|
+
|
|
4
|
+
import { project } from '@deck.gl/core';
|
|
5
|
+
var vs = "\n in float filtered;\n";
|
|
6
|
+
var fs = "";
|
|
7
|
+
var inject = {
|
|
8
|
+
'vs:#main-start': "\n if (filtered == 0.) {\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n return;\n }\n "
|
|
9
|
+
};
|
|
10
|
+
export default {
|
|
11
|
+
name: 'filter-arrow',
|
|
12
|
+
dependencies: [project],
|
|
13
|
+
vs: vs,
|
|
14
|
+
fs: fs,
|
|
15
|
+
inject: inject,
|
|
16
|
+
getUniforms: function getUniforms() {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9qZWN0IiwidnMiLCJmcyIsImluamVjdCIsIm5hbWUiLCJkZXBlbmRlbmNpZXMiLCJnZXRVbmlmb3JtcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNrZ2wtZXh0ZW5zaW9ucy9maWx0ZXItc2hhZGVyLW1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge3Byb2plY3R9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuXG5jb25zdCB2cyA9IGBcbiAgaW4gZmxvYXQgZmlsdGVyZWQ7XG5gO1xuXG5jb25zdCBmcyA9IGBgO1xuXG5jb25zdCBpbmplY3QgPSB7XG4gICd2czojbWFpbi1zdGFydCc6IGBcbiAgICBpZiAoZmlsdGVyZWQgPT0gMC4pIHtcbiAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgYFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmlsdGVyLWFycm93JyxcbiAgZGVwZW5kZW5jaWVzOiBbcHJvamVjdF0sXG4gIHZzLFxuICBmcyxcbiAgaW5qZWN0LFxuICBnZXRVbmlmb3JtczogKCkgPT4ge1xuICAgIHJldHVybjtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQSxTQUFRQSxPQUFPLFFBQU8sZUFBZTtBQUVyQyxJQUFNQyxFQUFFLDZCQUVQO0FBRUQsSUFBTUMsRUFBRSxLQUFLO0FBRWIsSUFBTUMsTUFBTSxHQUFHO0VBQ2IsZ0JBQWdCO0FBTWxCLENBQUM7QUFFRCxlQUFlO0VBQ2JDLElBQUksRUFBRSxjQUFjO0VBQ3BCQyxZQUFZLEVBQUUsQ0FBQ0wsT0FBTyxDQUFDO0VBQ3ZCQyxFQUFFLEVBQUZBLEVBQUU7RUFDRkMsRUFBRSxFQUFGQSxFQUFFO0VBQ0ZDLE1BQU0sRUFBTkEsTUFBTTtFQUNORyxXQUFXLEVBQUUsU0FBYkEsV0FBV0EsQ0FBQSxFQUFRO0lBQ2pCO0VBQ0Y7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
|
|
4
|
+
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
|
|
5
|
+
import _get from "@babel/runtime/helpers/esm/get";
|
|
6
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
7
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
8
|
+
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; }
|
|
9
|
+
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; }
|
|
10
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
11
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
12
|
+
function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
|
|
13
|
+
// SPDX-License-Identifier: MIT
|
|
14
|
+
// Copyright contributors to the kepler.gl project
|
|
15
|
+
|
|
16
|
+
// Shaders ported from iTowns, based on Sean O'Neil's approach in GPU Gems 2
|
|
17
|
+
// SEE: https://github.com/iTowns/itowns/blob/master/src/Core/Prefab/Globe/Atmosphere.js
|
|
18
|
+
// SEE: https://developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-16-accurate-atmospheric-scattering
|
|
19
|
+
|
|
20
|
+
import { COORDINATE_SYSTEM } from '@deck.gl/core';
|
|
21
|
+
import { SimpleMeshLayer } from '@deck.gl/mesh-layers';
|
|
22
|
+
import { SphereGeometry } from '@luma.gl/engine';
|
|
23
|
+
import { Vector3 } from '@math.gl/core';
|
|
24
|
+
import { getSunPosition } from '@math.gl/sun';
|
|
25
|
+
var toRadians = function toRadians(degrees) {
|
|
26
|
+
return degrees * Math.PI / 180;
|
|
27
|
+
};
|
|
28
|
+
var angleToVec = function angleToVec(angle) {
|
|
29
|
+
return [Math.sin(angle), Math.cos(angle), 0];
|
|
30
|
+
};
|
|
31
|
+
var angleToSunPos = function angleToSunPos(angle) {
|
|
32
|
+
return new Vector3(angleToVec(angle)).normalize();
|
|
33
|
+
};
|
|
34
|
+
var GLOBE_MESH_INNER = new SphereGeometry({
|
|
35
|
+
radius: 6.4e6,
|
|
36
|
+
nlat: 100,
|
|
37
|
+
nlong: 100
|
|
38
|
+
});
|
|
39
|
+
var GLOBE_MESH_OUTER = new SphereGeometry({
|
|
40
|
+
radius: 6.7e6,
|
|
41
|
+
nlat: 100,
|
|
42
|
+
nlong: 100
|
|
43
|
+
});
|
|
44
|
+
var lon = 0,
|
|
45
|
+
lat = 90;
|
|
46
|
+
var sunPosNow = getSunPosition(Date.now(), lat, lon);
|
|
47
|
+
var v3SunPosNow = angleToSunPos(sunPosNow.azimuth + Math.PI);
|
|
48
|
+
var NUM_SAMPLE_RAYS = 3;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Zoom range over which the atmosphere effect fades out.
|
|
52
|
+
* Below ATMOSPHERE_FADE_ZOOM_START the effect is fully visible.
|
|
53
|
+
* Above ATMOSPHERE_FADE_ZOOM_END the effect is completely hidden.
|
|
54
|
+
*/
|
|
55
|
+
var ATMOSPHERE_FADE_ZOOM_START = 3.5;
|
|
56
|
+
var ATMOSPHERE_FADE_ZOOM_END = 6;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Convert a mapState zoom level to a [0, 1] atmosphere opacity multiplier.
|
|
60
|
+
* Returns 1 (fully visible) below ATMOSPHERE_FADE_ZOOM_START, smoothly
|
|
61
|
+
* interpolates to 0 between the two thresholds, and returns 0 above
|
|
62
|
+
* ATMOSPHERE_FADE_ZOOM_END.
|
|
63
|
+
*/
|
|
64
|
+
export function atmosphereZoomFade(zoom) {
|
|
65
|
+
if (zoom <= ATMOSPHERE_FADE_ZOOM_START) return 1;
|
|
66
|
+
if (zoom >= ATMOSPHERE_FADE_ZOOM_END) return 0;
|
|
67
|
+
var t = (zoom - ATMOSPHERE_FADE_ZOOM_START) / (ATMOSPHERE_FADE_ZOOM_END - ATMOSPHERE_FADE_ZOOM_START);
|
|
68
|
+
// Smooth-step for a perceptually gentle transition.
|
|
69
|
+
return 1 - t * t * (3 - 2 * t);
|
|
70
|
+
}
|
|
71
|
+
var ATMOSPHERE_UNIFORMS = {
|
|
72
|
+
v3SunPos: v3SunPosNow,
|
|
73
|
+
exposure: 2,
|
|
74
|
+
fSamples: 3,
|
|
75
|
+
g: -0.65,
|
|
76
|
+
fKrESun: 0.00025 * 20,
|
|
77
|
+
fKmESun: 0.0001 * 20,
|
|
78
|
+
fKr4PI: 0.00025 * 4 * Math.PI,
|
|
79
|
+
fKm4PI: 0.0001 * 4 * Math.PI,
|
|
80
|
+
fScaleDepth: 0.25,
|
|
81
|
+
fInnerRadius: 258,
|
|
82
|
+
fOuterRadius: 265,
|
|
83
|
+
fTerminatorAttenuateFactor: 0.8,
|
|
84
|
+
fTerminatorOpacityFactor: 1
|
|
85
|
+
};
|
|
86
|
+
export var AtmosphereLayerRealistic = /*#__PURE__*/function (_SimpleMeshLayer) {
|
|
87
|
+
function AtmosphereLayerRealistic() {
|
|
88
|
+
_classCallCheck(this, AtmosphereLayerRealistic);
|
|
89
|
+
return _callSuper(this, AtmosphereLayerRealistic, arguments);
|
|
90
|
+
}
|
|
91
|
+
_inherits(AtmosphereLayerRealistic, _SimpleMeshLayer);
|
|
92
|
+
return _createClass(AtmosphereLayerRealistic, [{
|
|
93
|
+
key: "draw",
|
|
94
|
+
value: function draw(_ref) {
|
|
95
|
+
var uniforms = _ref.uniforms;
|
|
96
|
+
var _this$props = this.props,
|
|
97
|
+
config = _this$props.config,
|
|
98
|
+
zoomFade = _this$props.zoomFade;
|
|
99
|
+
var model = this.state.model;
|
|
100
|
+
if (model) {
|
|
101
|
+
model.props.uniforms = _objectSpread(_objectSpread(_objectSpread({}, model.props.uniforms), ATMOSPHERE_UNIFORMS), {}, {
|
|
102
|
+
fTerminatorOpacityFactor: config.terminator ? config.terminatorOpacity : 0,
|
|
103
|
+
v3SunPos: config.azimuth ? angleToSunPos(toRadians(config.azimuthAngle)) : v3SunPosNow,
|
|
104
|
+
fAtmosphereZoomFade: zoomFade
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
_superPropGet(AtmosphereLayerRealistic, "draw", this, 3)([{
|
|
108
|
+
uniforms: uniforms
|
|
109
|
+
}]);
|
|
110
|
+
}
|
|
111
|
+
}, {
|
|
112
|
+
key: "getShaders",
|
|
113
|
+
value: function getShaders() {
|
|
114
|
+
return _objectSpread(_objectSpread({}, _superPropGet(AtmosphereLayerRealistic, "getShaders", this, 3)([])), {}, {
|
|
115
|
+
inject: {
|
|
116
|
+
'fs:#decl': "\n uniform vec3 v3SunPos;\n\n uniform float g;\n uniform float exposure;\n\n uniform float fSamples;\n\n uniform float fInnerRadius;\n uniform float fOuterRadius;\n uniform float fKrESun;\n uniform float fKmESun;\n uniform float fKr4PI;\n uniform float fKm4PI;\n uniform float fScaleDepth;\n\n uniform float fTerminatorAttenuateFactor;\n uniform float fTerminatorOpacityFactor;\n uniform float fAtmosphereZoomFade;\n\n const int nSamples = ".concat(NUM_SAMPLE_RAYS, ";\n\n float scale(float fCos) {\n float x = 1.0 - fCos;\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.8 + x*5.25))));\n }\n "),
|
|
117
|
+
'fs:#main-end': "\n vec3 v3CameraPos = cameraPosition;\n vec3 v3Pos = position_commonspace.xyz;\n\n float g2 = g * g;\n\n vec3 v3InvWavelength = vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\n\n float fInnerRadius2 = fInnerRadius * fInnerRadius;\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\n float fScaleOverScaleDepth = 1.0 / (fOuterRadius - fInnerRadius) / fScaleDepth;\n\n float cameraHeight2 = length(v3CameraPos) * length(v3CameraPos);\n\n vec3 v3Ray = v3Pos - v3CameraPos;\n float fFar = length(v3Ray);\n v3Ray /= fFar;\n\n float B = 2.0 * dot(v3CameraPos, v3Ray);\n float C = cameraHeight2 - fOuterRadius2;\n float fDet = max(0.0, B*B - 4.0 * C);\n float fNear = 0.5 * (-B - sqrt(fDet));\n\n vec3 v3Start = v3CameraPos + v3Ray * fNear;\n fFar -= fNear;\n\n float fDepth = exp((fInnerRadius - fOuterRadius) / fScaleDepth);\n float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);\n float fLightAngle = dot(v3SunPos, v3Pos) / length(v3Pos);\n float fCameraScale = scale(fCameraAngle);\n float fLightScale = scale(fLightAngle);\n float fCameraOffset = fDepth*fCameraScale;\n float fTemp = (fLightScale + fCameraScale);\n\n float fSampleLength = fFar / fSamples;\n float fScaledLength = fSampleLength * fScale;\n vec3 v3SampleRay = v3Ray * fSampleLength;\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\n\n vec3 v3FrontColor = vec3(0.0, 0.0, 0.0);\n vec3 v3Attenuate = vec3(0.0, 0.0, 0.0);\n for(int i=0; i<nSamples; i++)\n {\n float fHeight = length(v3SamplePoint);\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\n float fScatter = fDepth*fTemp - fCameraOffset;\n v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\n v3SamplePoint += v3SampleRay;\n }\n\n vec3 c0 = v3Attenuate;\n vec3 c1 = v3FrontColor * (v3InvWavelength * fKrESun + fKmESun);\n\n fragColor = vec4(c1, 1.0 - c0 * fTerminatorAttenuateFactor);\n fragColor.a *= fTerminatorOpacityFactor;\n\n // Keep the day hemisphere completely unshaded \u2014 the attenuation-based\n // alpha above is non-zero even at noon, which slightly darkens the lit\n // side. Gate it with a day/night mask so darkening only appears across\n // the terminator and onto the night side.\n // fLightAngle = dot(sunDir, surfaceNormal): +1 at the subsolar point\n // (noon), 0 at the terminator, -1 at midnight. smoothstep maps the day\n // side (>= 0.2) to 0 (no darkening), ramps through the terminator, and\n // reaches full darkening on the night side (<= -0.2).\n float fNightMask = smoothstep(0.2, -0.2, fLightAngle);\n fragColor.a *= fNightMask;\n\n // Fade out the entire day/night shading effect as the user zooms in.\n // At zoom levels above ATMOSPHERE_FADE_ZOOM_END the effect is invisible,\n // so it doesn't obscure map detail at street/city scale.\n fragColor.a *= fAtmosphereZoomFade;\n ",
|
|
118
|
+
'fs:DECKGL_FILTER_COLOR': ""
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}]);
|
|
123
|
+
}(SimpleMeshLayer);
|
|
124
|
+
_defineProperty(AtmosphereLayerRealistic, "layerName", 'AtmosphereLayerRealistic');
|
|
125
|
+
export var AtmosphereSkyLayerRealistic = /*#__PURE__*/function (_SimpleMeshLayer2) {
|
|
126
|
+
function AtmosphereSkyLayerRealistic() {
|
|
127
|
+
_classCallCheck(this, AtmosphereSkyLayerRealistic);
|
|
128
|
+
return _callSuper(this, AtmosphereSkyLayerRealistic, arguments);
|
|
129
|
+
}
|
|
130
|
+
_inherits(AtmosphereSkyLayerRealistic, _SimpleMeshLayer2);
|
|
131
|
+
return _createClass(AtmosphereSkyLayerRealistic, [{
|
|
132
|
+
key: "draw",
|
|
133
|
+
value: function draw(_ref2) {
|
|
134
|
+
var uniforms = _ref2.uniforms;
|
|
135
|
+
var _this$props2 = this.props,
|
|
136
|
+
config = _this$props2.config,
|
|
137
|
+
zoomFade = _this$props2.zoomFade;
|
|
138
|
+
var model = this.state.model;
|
|
139
|
+
if (model) {
|
|
140
|
+
model.props.uniforms = _objectSpread(_objectSpread(_objectSpread({}, model.props.uniforms), ATMOSPHERE_UNIFORMS), {}, {
|
|
141
|
+
v3SunPos: config.azimuth ? angleToSunPos(toRadians(config.azimuthAngle)) : v3SunPosNow,
|
|
142
|
+
fAtmosphereZoomFade: zoomFade
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
_superPropGet(AtmosphereSkyLayerRealistic, "draw", this, 3)([{
|
|
146
|
+
uniforms: uniforms
|
|
147
|
+
}]);
|
|
148
|
+
}
|
|
149
|
+
}, {
|
|
150
|
+
key: "getShaders",
|
|
151
|
+
value: function getShaders() {
|
|
152
|
+
return _objectSpread(_objectSpread({}, _superPropGet(AtmosphereSkyLayerRealistic, "getShaders", this, 3)([])), {}, {
|
|
153
|
+
inject: {
|
|
154
|
+
'fs:#decl': "\n uniform vec3 v3SunPos;\n\n uniform float g;\n uniform float exposure;\n\n uniform float fSamples;\n\n uniform float fInnerRadius;\n uniform float fOuterRadius;\n uniform float fKrESun;\n uniform float fKmESun;\n uniform float fKr4PI;\n uniform float fKm4PI;\n uniform float fScaleDepth;\n uniform float fAtmosphereZoomFade;\n\n const int nSamples = ".concat(NUM_SAMPLE_RAYS, ";\n\n float scale(float fCos) {\n float x = 1.0 - fCos;\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.8 + x*5.25))));\n }\n\n float getMiePhase(float fCos, float fCos2, float g, float g2) {\n return 1.5 * ((1.0 - g2) / (2.0 + g2)) * (1.0 + fCos2) / pow(1.0 + g2 - 2.0 * g * fCos, 1.5);\n }\n\n float getRayleighPhase(float fCos2) {\n return 0.75 + 0.75 * fCos2;\n }\n "),
|
|
155
|
+
'fs:#main-end': "\n vec3 v3CameraPos = cameraPosition;\n vec3 v3Pos = position_commonspace.xyz;\n\n float g2 = g * g;\n\n vec3 v3InvWavelength = vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\n\n float fInnerRadius2 = fInnerRadius * fInnerRadius;\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\n float fScaleOverScaleDepth = 1.0 / (fOuterRadius - fInnerRadius) / fScaleDepth;\n\n float cameraHeight2 = length(v3CameraPos) * length(v3CameraPos);\n\n vec3 v3Ray = v3Pos - v3CameraPos;\n float fFar = length(v3Ray);\n v3Ray /= fFar;\n\n float B = 2.0 * dot(v3CameraPos, v3Ray);\n float C = cameraHeight2 - fOuterRadius2;\n float fDet = max(0.0, B*B - 4.0 * C);\n float fNear = 0.5 * (-B - sqrt(fDet));\n\n vec3 v3Start = v3CameraPos + v3Ray * fNear;\n fFar -= fNear;\n float fStartAngle = dot(v3Ray, v3Start) / fOuterRadius;\n float fStartDepth = exp(-1.0 / fScaleDepth);\n float fStartOffset = fStartDepth * scale(fStartAngle);\n\n float fSampleLength = fFar / fSamples;\n float fScaledLength = fSampleLength * fScale;\n vec3 v3SampleRay = v3Ray * fSampleLength;\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\n\n vec3 v3FrontColor = vec3(0.0, 0.0, 0.0);\n for(int i=0; i<nSamples; i++)\n {\n float fHeight = length(v3SamplePoint);\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\n float fLightAngle = dot(v3SunPos, v3SamplePoint) / fHeight;\n float fCameraAngle = dot(v3Ray, v3SamplePoint) / fHeight;\n float fScatter = (fStartOffset + fDepth * (scale(fLightAngle) - scale(fCameraAngle)));\n vec3 v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\n\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\n v3SamplePoint += v3SampleRay;\n }\n\n vec3 c0 = v3FrontColor * (v3InvWavelength * fKrESun);\n vec3 c1 = v3FrontColor * fKmESun;\n\n vec3 v3Direction = v3CameraPos - v3Pos;\n\n float fCos = dot(v3SunPos, v3Direction) / length(v3Direction);\n float fCos2 = fCos * fCos;\n\n vec3 skyColor = getRayleighPhase(fCos2) * c0 + getMiePhase(fCos, fCos2, g, g2) * c1;\n\n fragColor = vec4(skyColor, 1.0);\n fragColor.a = fragColor.b;\n\n // Fade the sky halo out as the user zooms in past continent scale.\n fragColor.a *= fAtmosphereZoomFade;\n ",
|
|
156
|
+
'fs:DECKGL_FILTER_COLOR': ""
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}]);
|
|
161
|
+
}(SimpleMeshLayer);
|
|
162
|
+
_defineProperty(AtmosphereSkyLayerRealistic, "layerName", 'AtmosphereSkyLayerRealistic');
|
|
163
|
+
var ATMOSPHERE_PARAMETERS = {
|
|
164
|
+
depthTest: false,
|
|
165
|
+
blendFunc: [0x0302, 0x0303, 1, 0x0303],
|
|
166
|
+
// SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE_MINUS_SRC_ALPHA
|
|
167
|
+
blendEquation: [0x8006, 0x8006] // FUNC_ADD
|
|
168
|
+
};
|
|
169
|
+
var ATMOSPHERE_SKY_PARAMETERS = {
|
|
170
|
+
cullFace: 0x0404,
|
|
171
|
+
// GL.FRONT
|
|
172
|
+
depthMask: false,
|
|
173
|
+
blendFunc: [0x0302, 0x0303, 1, 0x0303],
|
|
174
|
+
blendEquation: [0x8006, 0x8006]
|
|
175
|
+
};
|
|
176
|
+
export var getGlobeAtmosphereLayer = function getGlobeAtmosphereLayer(_ref3) {
|
|
177
|
+
var config = _ref3.config,
|
|
178
|
+
zoom = _ref3.zoom;
|
|
179
|
+
var zoomFade = atmosphereZoomFade(zoom !== null && zoom !== void 0 ? zoom : 0);
|
|
180
|
+
return new AtmosphereLayerRealistic({
|
|
181
|
+
id: 'atmosphere',
|
|
182
|
+
data: [[0, 0, 0]],
|
|
183
|
+
config: config,
|
|
184
|
+
zoomFade: zoomFade,
|
|
185
|
+
coordinateOrigin: [0, 0, 0],
|
|
186
|
+
coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
|
|
187
|
+
getPosition: function (d) {
|
|
188
|
+
return d;
|
|
189
|
+
},
|
|
190
|
+
getColor: [0, 0, 0],
|
|
191
|
+
mesh: GLOBE_MESH_INNER,
|
|
192
|
+
parameters: ATMOSPHERE_PARAMETERS
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
export var getGlobeAtmosphereSkyLayer = function getGlobeAtmosphereSkyLayer(_ref4) {
|
|
196
|
+
var config = _ref4.config,
|
|
197
|
+
zoom = _ref4.zoom;
|
|
198
|
+
var zoomFade = atmosphereZoomFade(zoom !== null && zoom !== void 0 ? zoom : 0);
|
|
199
|
+
return new AtmosphereSkyLayerRealistic({
|
|
200
|
+
id: 'atmosphere-sky',
|
|
201
|
+
data: [[0, 0, 0]],
|
|
202
|
+
config: config,
|
|
203
|
+
zoomFade: zoomFade,
|
|
204
|
+
coordinateOrigin: [0, 0, 0],
|
|
205
|
+
coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
|
|
206
|
+
getPosition: function (d) {
|
|
207
|
+
return d;
|
|
208
|
+
},
|
|
209
|
+
getColor: [0, 0, 0],
|
|
210
|
+
mesh: GLOBE_MESH_OUTER,
|
|
211
|
+
parameters: ATMOSPHERE_SKY_PARAMETERS
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT09SRElOQVRFX1NZU1RFTSIsIlNpbXBsZU1lc2hMYXllciIsIlNwaGVyZUdlb21ldHJ5IiwiVmVjdG9yMyIsImdldFN1blBvc2l0aW9uIiwidG9SYWRpYW5zIiwiZGVncmVlcyIsIk1hdGgiLCJQSSIsImFuZ2xlVG9WZWMiLCJhbmdsZSIsInNpbiIsImNvcyIsImFuZ2xlVG9TdW5Qb3MiLCJub3JtYWxpemUiLCJHTE9CRV9NRVNIX0lOTkVSIiwicmFkaXVzIiwibmxhdCIsIm5sb25nIiwiR0xPQkVfTUVTSF9PVVRFUiIsImxvbiIsImxhdCIsInN1blBvc05vdyIsIkRhdGUiLCJub3ciLCJ2M1N1blBvc05vdyIsImF6aW11dGgiLCJOVU1fU0FNUExFX1JBWVMiLCJBVE1PU1BIRVJFX0ZBREVfWk9PTV9TVEFSVCIsIkFUTU9TUEhFUkVfRkFERV9aT09NX0VORCIsImF0bW9zcGhlcmVab29tRmFkZSIsInpvb20iLCJ0IiwiQVRNT1NQSEVSRV9VTklGT1JNUyIsInYzU3VuUG9zIiwiZXhwb3N1cmUiLCJmU2FtcGxlcyIsImciLCJmS3JFU3VuIiwiZkttRVN1biIsImZLcjRQSSIsImZLbTRQSSIsImZTY2FsZURlcHRoIiwiZklubmVyUmFkaXVzIiwiZk91dGVyUmFkaXVzIiwiZlRlcm1pbmF0b3JBdHRlbnVhdGVGYWN0b3IiLCJmVGVybWluYXRvck9wYWNpdHlGYWN0b3IiLCJBdG1vc3BoZXJlTGF5ZXJSZWFsaXN0aWMiLCJfU2ltcGxlTWVzaExheWVyIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiZHJhdyIsIl9yZWYiLCJ1bmlmb3JtcyIsIl90aGlzJHByb3BzIiwicHJvcHMiLCJjb25maWciLCJ6b29tRmFkZSIsIm1vZGVsIiwic3RhdGUiLCJfb2JqZWN0U3ByZWFkIiwidGVybWluYXRvciIsInRlcm1pbmF0b3JPcGFjaXR5IiwiYXppbXV0aEFuZ2xlIiwiZkF0bW9zcGhlcmVab29tRmFkZSIsIl9zdXBlclByb3BHZXQiLCJnZXRTaGFkZXJzIiwiaW5qZWN0IiwiY29uY2F0IiwiX2RlZmluZVByb3BlcnR5IiwiQXRtb3NwaGVyZVNreUxheWVyUmVhbGlzdGljIiwiX1NpbXBsZU1lc2hMYXllcjIiLCJfcmVmMiIsIl90aGlzJHByb3BzMiIsIkFUTU9TUEhFUkVfUEFSQU1FVEVSUyIsImRlcHRoVGVzdCIsImJsZW5kRnVuYyIsImJsZW5kRXF1YXRpb24iLCJBVE1PU1BIRVJFX1NLWV9QQVJBTUVURVJTIiwiY3VsbEZhY2UiLCJkZXB0aE1hc2siLCJnZXRHbG9iZUF0bW9zcGhlcmVMYXllciIsIl9yZWYzIiwiaWQiLCJkYXRhIiwiY29vcmRpbmF0ZU9yaWdpbiIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDQVJURVNJQU4iLCJnZXRQb3NpdGlvbiIsImQiLCJnZXRDb2xvciIsIm1lc2giLCJwYXJhbWV0ZXJzIiwiZ2V0R2xvYmVBdG1vc3BoZXJlU2t5TGF5ZXIiLCJfcmVmNCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nbG9iZS9hdG1vc3BoZXJlLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIFNoYWRlcnMgcG9ydGVkIGZyb20gaVRvd25zLCBiYXNlZCBvbiBTZWFuIE8nTmVpbCdzIGFwcHJvYWNoIGluIEdQVSBHZW1zIDJcbi8vIFNFRTogaHR0cHM6Ly9naXRodWIuY29tL2lUb3ducy9pdG93bnMvYmxvYi9tYXN0ZXIvc3JjL0NvcmUvUHJlZmFiL0dsb2JlL0F0bW9zcGhlcmUuanNcbi8vIFNFRTogaHR0cHM6Ly9kZXZlbG9wZXIubnZpZGlhLmNvbS9ncHVnZW1zL2dwdWdlbXMyL3BhcnQtaWktc2hhZGluZy1saWdodGluZy1hbmQtc2hhZG93cy9jaGFwdGVyLTE2LWFjY3VyYXRlLWF0bW9zcGhlcmljLXNjYXR0ZXJpbmdcblxuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NpbXBsZU1lc2hMYXllcn0gZnJvbSAnQGRlY2suZ2wvbWVzaC1sYXllcnMnO1xuaW1wb3J0IHtTcGhlcmVHZW9tZXRyeX0gZnJvbSAnQGx1bWEuZ2wvZW5naW5lJztcbmltcG9ydCB7VmVjdG9yM30gZnJvbSAnQG1hdGguZ2wvY29yZSc7XG5pbXBvcnQge2dldFN1blBvc2l0aW9ufSBmcm9tICdAbWF0aC5nbC9zdW4nO1xuXG5pbXBvcnQgdHlwZSB7R2xvYmVDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuY29uc3QgdG9SYWRpYW5zID0gKGRlZ3JlZXM6IG51bWJlcik6IG51bWJlciA9PiAoZGVncmVlcyAqIE1hdGguUEkpIC8gMTgwO1xuXG5jb25zdCBhbmdsZVRvVmVjID0gKGFuZ2xlOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4ge1xuICByZXR1cm4gW01hdGguc2luKGFuZ2xlKSwgTWF0aC5jb3MoYW5nbGUpLCAwXTtcbn07XG5cbmNvbnN0IGFuZ2xlVG9TdW5Qb3MgPSAoYW5nbGU6IG51bWJlcik6IG51bWJlcltdID0+IHtcbiAgcmV0dXJuIG5ldyBWZWN0b3IzKGFuZ2xlVG9WZWMoYW5nbGUpKS5ub3JtYWxpemUoKSBhcyB1bmtub3duIGFzIG51bWJlcltdO1xufTtcblxuY29uc3QgR0xPQkVfTUVTSF9JTk5FUiA9IG5ldyBTcGhlcmVHZW9tZXRyeSh7XG4gIHJhZGl1czogNi40ZTYsXG4gIG5sYXQ6IDEwMCxcbiAgbmxvbmc6IDEwMFxufSk7XG5cbmNvbnN0IEdMT0JFX01FU0hfT1VURVIgPSBuZXcgU3BoZXJlR2VvbWV0cnkoe1xuICByYWRpdXM6IDYuN2U2LFxuICBubGF0OiAxMDAsXG4gIG5sb25nOiAxMDBcbn0pO1xuXG5jb25zdCBbbG9uLCBsYXRdID0gWzAsIDkwXTtcbmNvbnN0IHN1blBvc05vdyA9IGdldFN1blBvc2l0aW9uKERhdGUubm93KCksIGxhdCwgbG9uKTtcbmNvbnN0IHYzU3VuUG9zTm93ID0gYW5nbGVUb1N1blBvcyhzdW5Qb3NOb3cuYXppbXV0aCArIE1hdGguUEkpO1xuXG5jb25zdCBOVU1fU0FNUExFX1JBWVMgPSAzO1xuXG4vKipcbiAqIFpvb20gcmFuZ2Ugb3ZlciB3aGljaCB0aGUgYXRtb3NwaGVyZSBlZmZlY3QgZmFkZXMgb3V0LlxuICogQmVsb3cgQVRNT1NQSEVSRV9GQURFX1pPT01fU1RBUlQgdGhlIGVmZmVjdCBpcyBmdWxseSB2aXNpYmxlLlxuICogQWJvdmUgQVRNT1NQSEVSRV9GQURFX1pPT01fRU5EIHRoZSBlZmZlY3QgaXMgY29tcGxldGVseSBoaWRkZW4uXG4gKi9cbmNvbnN0IEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUID0gMy41O1xuY29uc3QgQVRNT1NQSEVSRV9GQURFX1pPT01fRU5EID0gNjtcblxuLyoqXG4gKiBDb252ZXJ0IGEgbWFwU3RhdGUgem9vbSBsZXZlbCB0byBhIFswLCAxXSBhdG1vc3BoZXJlIG9wYWNpdHkgbXVsdGlwbGllci5cbiAqIFJldHVybnMgMSAoZnVsbHkgdmlzaWJsZSkgYmVsb3cgQVRNT1NQSEVSRV9GQURFX1pPT01fU1RBUlQsIHNtb290aGx5XG4gKiBpbnRlcnBvbGF0ZXMgdG8gMCBiZXR3ZWVuIHRoZSB0d28gdGhyZXNob2xkcywgYW5kIHJldHVybnMgMCBhYm92ZVxuICogQVRNT1NQSEVSRV9GQURFX1pPT01fRU5ELlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXRtb3NwaGVyZVpvb21GYWRlKHpvb206IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh6b29tIDw9IEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUKSByZXR1cm4gMTtcbiAgaWYgKHpvb20gPj0gQVRNT1NQSEVSRV9GQURFX1pPT01fRU5EKSByZXR1cm4gMDtcbiAgY29uc3QgdCA9ICh6b29tIC0gQVRNT1NQSEVSRV9GQURFX1pPT01fU1RBUlQpIC8gKEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCAtIEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUKTtcbiAgLy8gU21vb3RoLXN0ZXAgZm9yIGEgcGVyY2VwdHVhbGx5IGdlbnRsZSB0cmFuc2l0aW9uLlxuICByZXR1cm4gMSAtIHQgKiB0ICogKDMgLSAyICogdCk7XG59XG5cbmNvbnN0IEFUTU9TUEhFUkVfVU5JRk9STVMgPSB7XG4gIHYzU3VuUG9zOiB2M1N1blBvc05vdyxcbiAgZXhwb3N1cmU6IDIsXG4gIGZTYW1wbGVzOiAzLFxuICBnOiAtMC42NSxcbiAgZktyRVN1bjogMC4wMDAyNSAqIDIwLFxuICBmS21FU3VuOiAwLjAwMDEgKiAyMCxcbiAgZktyNFBJOiAwLjAwMDI1ICogNCAqIE1hdGguUEksXG4gIGZLbTRQSTogMC4wMDAxICogNCAqIE1hdGguUEksXG4gIGZTY2FsZURlcHRoOiAwLjI1LFxuICBmSW5uZXJSYWRpdXM6IDI1OCxcbiAgZk91dGVyUmFkaXVzOiAyNjUsXG4gIGZUZXJtaW5hdG9yQXR0ZW51YXRlRmFjdG9yOiAwLjgsXG4gIGZUZXJtaW5hdG9yT3BhY2l0eUZhY3RvcjogMVxufTtcblxudHlwZSBBdG1vc3BoZXJlTGF5ZXJQcm9wcyA9IHtcbiAgY29uZmlnOiBHbG9iZUNvbmZpZztcbiAgLyoqIFByZS1jb21wdXRlZCBbMCwgMV0gem9vbS1mYWRlIG11bHRpcGxpZXI7IDEgPSBmdWxseSB2aXNpYmxlLCAwID0gaGlkZGVuLiAqL1xuICB6b29tRmFkZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNsYXNzIEF0bW9zcGhlcmVMYXllclJlYWxpc3RpYyBleHRlbmRzIFNpbXBsZU1lc2hMYXllcjxhbnksIEF0bW9zcGhlcmVMYXllclByb3BzPiB7XG4gIHN0YXRpYyBsYXllck5hbWUgPSAnQXRtb3NwaGVyZUxheWVyUmVhbGlzdGljJztcblxuICBkcmF3KHt1bmlmb3Jtc306IHt1bmlmb3Jtczogb2JqZWN0fSk6IHZvaWQge1xuICAgIGNvbnN0IHtjb25maWcsIHpvb21GYWRlfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnN0YXRlLm1vZGVsO1xuICAgIGlmIChtb2RlbCkge1xuICAgICAgKG1vZGVsIGFzIGFueSkucHJvcHMudW5pZm9ybXMgPSB7XG4gICAgICAgIC4uLihtb2RlbCBhcyBhbnkpLnByb3BzLnVuaWZvcm1zLFxuICAgICAgICAuLi5BVE1PU1BIRVJFX1VOSUZPUk1TLFxuICAgICAgICBmVGVybWluYXRvck9wYWNpdHlGYWN0b3I6IGNvbmZpZy50ZXJtaW5hdG9yID8gY29uZmlnLnRlcm1pbmF0b3JPcGFjaXR5IDogMCxcbiAgICAgICAgdjNTdW5Qb3M6IGNvbmZpZy5hemltdXRoID8gYW5nbGVUb1N1blBvcyh0b1JhZGlhbnMoY29uZmlnLmF6aW11dGhBbmdsZSkpIDogdjNTdW5Qb3NOb3csXG4gICAgICAgIGZBdG1vc3BoZXJlWm9vbUZhZGU6IHpvb21GYWRlXG4gICAgICB9O1xuICAgIH1cbiAgICBzdXBlci5kcmF3KHt1bmlmb3Jtc30pO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXRTaGFkZXJzKCksXG4gICAgICBpbmplY3Q6IHtcbiAgICAgICAgJ2ZzOiNkZWNsJzogYFxuICAgICAgICAgIHVuaWZvcm0gdmVjMyB2M1N1blBvcztcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGV4cG9zdXJlO1xuXG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmU2FtcGxlcztcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZklubmVyUmFkaXVzO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZk91dGVyUmFkaXVzO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZktyRVN1bjtcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZLbUVTdW47XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS3I0UEk7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS200UEk7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmU2NhbGVEZXB0aDtcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlRlcm1pbmF0b3JBdHRlbnVhdGVGYWN0b3I7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmVGVybWluYXRvck9wYWNpdHlGYWN0b3I7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmQXRtb3NwaGVyZVpvb21GYWRlO1xuXG4gICAgICAgICAgY29uc3QgaW50IG5TYW1wbGVzID0gJHtOVU1fU0FNUExFX1JBWVN9O1xuXG4gICAgICAgICAgZmxvYXQgc2NhbGUoZmxvYXQgZkNvcykge1xuICAgICAgICAgICAgZmxvYXQgeCA9IDEuMCAtIGZDb3M7XG4gICAgICAgICAgICByZXR1cm4gZlNjYWxlRGVwdGggKiBleHAoLTAuMDAyODcgKyB4KigwLjQ1OSArIHgqKDMuODMgKyB4KigtNi44ICsgeCo1LjI1KSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgICAgICdmczojbWFpbi1lbmQnOiBgXG4gICAgICAgICAgdmVjMyB2M0NhbWVyYVBvcyA9IGNhbWVyYVBvc2l0aW9uO1xuICAgICAgICAgIHZlYzMgdjNQb3MgPSBwb3NpdGlvbl9jb21tb25zcGFjZS54eXo7XG5cbiAgICAgICAgICBmbG9hdCBnMiA9IGcgKiBnO1xuXG4gICAgICAgICAgdmVjMyB2M0ludldhdmVsZW5ndGggPSB2ZWMzKDEuMCAvIHBvdygwLjY1MCwgNC4wKSwgMS4wIC8gcG93KDAuNTcwLCA0LjApLCAxLjAgLyBwb3coMC40NzUsIDQuMCkpO1xuXG4gICAgICAgICAgZmxvYXQgZklubmVyUmFkaXVzMiA9IGZJbm5lclJhZGl1cyAqIGZJbm5lclJhZGl1cztcbiAgICAgICAgICBmbG9hdCBmT3V0ZXJSYWRpdXMyID0gZk91dGVyUmFkaXVzICogZk91dGVyUmFkaXVzO1xuICAgICAgICAgIGZsb2F0IGZTY2FsZSA9IDEuMCAvIChmT3V0ZXJSYWRpdXMgLSBmSW5uZXJSYWRpdXMpO1xuICAgICAgICAgIGZsb2F0IGZTY2FsZU92ZXJTY2FsZURlcHRoID0gMS4wIC8gKGZPdXRlclJhZGl1cyAtIGZJbm5lclJhZGl1cykgLyBmU2NhbGVEZXB0aDtcblxuICAgICAgICAgIGZsb2F0IGNhbWVyYUhlaWdodDIgPSBsZW5ndGgodjNDYW1lcmFQb3MpICogbGVuZ3RoKHYzQ2FtZXJhUG9zKTtcblxuICAgICAgICAgIHZlYzMgdjNSYXkgPSB2M1BvcyAtIHYzQ2FtZXJhUG9zO1xuICAgICAgICAgIGZsb2F0IGZGYXIgPSBsZW5ndGgodjNSYXkpO1xuICAgICAgICAgIHYzUmF5IC89IGZGYXI7XG5cbiAgICAgICAgICBmbG9hdCBCID0gMi4wICogZG90KHYzQ2FtZXJhUG9zLCB2M1JheSk7XG4gICAgICAgICAgZmxvYXQgQyA9IGNhbWVyYUhlaWdodDIgLSBmT3V0ZXJSYWRpdXMyO1xuICAgICAgICAgIGZsb2F0IGZEZXQgPSBtYXgoMC4wLCBCKkIgLSA0LjAgKiBDKTtcbiAgICAgICAgICBmbG9hdCBmTmVhciA9IDAuNSAqICgtQiAtIHNxcnQoZkRldCkpO1xuXG4gICAgICAgICAgdmVjMyB2M1N0YXJ0ID0gdjNDYW1lcmFQb3MgKyB2M1JheSAqIGZOZWFyO1xuICAgICAgICAgIGZGYXIgLT0gZk5lYXI7XG5cbiAgICAgICAgICBmbG9hdCBmRGVwdGggPSBleHAoKGZJbm5lclJhZGl1cyAtIGZPdXRlclJhZGl1cykgLyBmU2NhbGVEZXB0aCk7XG4gICAgICAgICAgZmxvYXQgZkNhbWVyYUFuZ2xlID0gZG90KC12M1JheSwgdjNQb3MpIC8gbGVuZ3RoKHYzUG9zKTtcbiAgICAgICAgICBmbG9hdCBmTGlnaHRBbmdsZSA9IGRvdCh2M1N1blBvcywgdjNQb3MpIC8gbGVuZ3RoKHYzUG9zKTtcbiAgICAgICAgICBmbG9hdCBmQ2FtZXJhU2NhbGUgPSBzY2FsZShmQ2FtZXJhQW5nbGUpO1xuICAgICAgICAgIGZsb2F0IGZMaWdodFNjYWxlID0gc2NhbGUoZkxpZ2h0QW5nbGUpO1xuICAgICAgICAgIGZsb2F0IGZDYW1lcmFPZmZzZXQgPSBmRGVwdGgqZkNhbWVyYVNjYWxlO1xuICAgICAgICAgIGZsb2F0IGZUZW1wID0gKGZMaWdodFNjYWxlICsgZkNhbWVyYVNjYWxlKTtcblxuICAgICAgICAgIGZsb2F0IGZTYW1wbGVMZW5ndGggPSBmRmFyIC8gZlNhbXBsZXM7XG4gICAgICAgICAgZmxvYXQgZlNjYWxlZExlbmd0aCA9IGZTYW1wbGVMZW5ndGggKiBmU2NhbGU7XG4gICAgICAgICAgdmVjMyB2M1NhbXBsZVJheSA9IHYzUmF5ICogZlNhbXBsZUxlbmd0aDtcbiAgICAgICAgICB2ZWMzIHYzU2FtcGxlUG9pbnQgPSB2M1N0YXJ0ICsgdjNTYW1wbGVSYXkgKiAwLjU7XG5cbiAgICAgICAgICB2ZWMzIHYzRnJvbnRDb2xvciA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgICAgdmVjMyB2M0F0dGVudWF0ZSA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgICAgZm9yKGludCBpPTA7IGk8blNhbXBsZXM7IGkrKylcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZsb2F0IGZIZWlnaHQgPSBsZW5ndGgodjNTYW1wbGVQb2ludCk7XG4gICAgICAgICAgICAgIGZsb2F0IGZEZXB0aCA9IGV4cChmU2NhbGVPdmVyU2NhbGVEZXB0aCAqIChmSW5uZXJSYWRpdXMgLSBmSGVpZ2h0KSk7XG4gICAgICAgICAgICAgIGZsb2F0IGZTY2F0dGVyID0gZkRlcHRoKmZUZW1wIC0gZkNhbWVyYU9mZnNldDtcbiAgICAgICAgICAgICAgdjNBdHRlbnVhdGUgPSBleHAoLWZTY2F0dGVyICogKHYzSW52V2F2ZWxlbmd0aCAqIGZLcjRQSSArIGZLbTRQSSkpO1xuICAgICAgICAgICAgICB2M0Zyb250Q29sb3IgKz0gdjNBdHRlbnVhdGUgKiAoZkRlcHRoICogZlNjYWxlZExlbmd0aCk7XG4gICAgICAgICAgICAgIHYzU2FtcGxlUG9pbnQgKz0gdjNTYW1wbGVSYXk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmVjMyBjMCA9IHYzQXR0ZW51YXRlO1xuICAgICAgICAgIHZlYzMgYzEgPSB2M0Zyb250Q29sb3IgKiAodjNJbnZXYXZlbGVuZ3RoICogZktyRVN1biArIGZLbUVTdW4pO1xuXG4gICAgICAgICAgZnJhZ0NvbG9yID0gdmVjNChjMSwgMS4wIC0gYzAgKiBmVGVybWluYXRvckF0dGVudWF0ZUZhY3Rvcik7XG4gICAgICAgICAgZnJhZ0NvbG9yLmEgKj0gZlRlcm1pbmF0b3JPcGFjaXR5RmFjdG9yO1xuXG4gICAgICAgICAgLy8gS2VlcCB0aGUgZGF5IGhlbWlzcGhlcmUgY29tcGxldGVseSB1bnNoYWRlZCDigJQgdGhlIGF0dGVudWF0aW9uLWJhc2VkXG4gICAgICAgICAgLy8gYWxwaGEgYWJvdmUgaXMgbm9uLXplcm8gZXZlbiBhdCBub29uLCB3aGljaCBzbGlnaHRseSBkYXJrZW5zIHRoZSBsaXRcbiAgICAgICAgICAvLyBzaWRlLiBHYXRlIGl0IHdpdGggYSBkYXkvbmlnaHQgbWFzayBzbyBkYXJrZW5pbmcgb25seSBhcHBlYXJzIGFjcm9zc1xuICAgICAgICAgIC8vIHRoZSB0ZXJtaW5hdG9yIGFuZCBvbnRvIHRoZSBuaWdodCBzaWRlLlxuICAgICAgICAgIC8vIGZMaWdodEFuZ2xlID0gZG90KHN1bkRpciwgc3VyZmFjZU5vcm1hbCk6ICsxIGF0IHRoZSBzdWJzb2xhciBwb2ludFxuICAgICAgICAgIC8vIChub29uKSwgMCBhdCB0aGUgdGVybWluYXRvciwgLTEgYXQgbWlkbmlnaHQuIHNtb290aHN0ZXAgbWFwcyB0aGUgZGF5XG4gICAgICAgICAgLy8gc2lkZSAoPj0gMC4yKSB0byAwIChubyBkYXJrZW5pbmcpLCByYW1wcyB0aHJvdWdoIHRoZSB0ZXJtaW5hdG9yLCBhbmRcbiAgICAgICAgICAvLyByZWFjaGVzIGZ1bGwgZGFya2VuaW5nIG9uIHRoZSBuaWdodCBzaWRlICg8PSAtMC4yKS5cbiAgICAgICAgICBmbG9hdCBmTmlnaHRNYXNrID0gc21vb3Roc3RlcCgwLjIsIC0wLjIsIGZMaWdodEFuZ2xlKTtcbiAgICAgICAgICBmcmFnQ29sb3IuYSAqPSBmTmlnaHRNYXNrO1xuXG4gICAgICAgICAgLy8gRmFkZSBvdXQgdGhlIGVudGlyZSBkYXkvbmlnaHQgc2hhZGluZyBlZmZlY3QgYXMgdGhlIHVzZXIgem9vbXMgaW4uXG4gICAgICAgICAgLy8gQXQgem9vbSBsZXZlbHMgYWJvdmUgQVRNT1NQSEVSRV9GQURFX1pPT01fRU5EIHRoZSBlZmZlY3QgaXMgaW52aXNpYmxlLFxuICAgICAgICAgIC8vIHNvIGl0IGRvZXNuJ3Qgb2JzY3VyZSBtYXAgZGV0YWlsIGF0IHN0cmVldC9jaXR5IHNjYWxlLlxuICAgICAgICAgIGZyYWdDb2xvci5hICo9IGZBdG1vc3BoZXJlWm9vbUZhZGU7XG4gICAgICAgIGAsXG4gICAgICAgICdmczpERUNLR0xfRklMVEVSX0NPTE9SJzogYGBcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdG1vc3BoZXJlU2t5TGF5ZXJSZWFsaXN0aWMgZXh0ZW5kcyBTaW1wbGVNZXNoTGF5ZXI8YW55LCBBdG1vc3BoZXJlTGF5ZXJQcm9wcz4ge1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ0F0bW9zcGhlcmVTa3lMYXllclJlYWxpc3RpYyc7XG5cbiAgZHJhdyh7dW5pZm9ybXN9OiB7dW5pZm9ybXM6IG9iamVjdH0pOiB2b2lkIHtcbiAgICBjb25zdCB7Y29uZmlnLCB6b29tRmFkZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zdGF0ZS5tb2RlbDtcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIChtb2RlbCBhcyBhbnkpLnByb3BzLnVuaWZvcm1zID0ge1xuICAgICAgICAuLi4obW9kZWwgYXMgYW55KS5wcm9wcy51bmlmb3JtcyxcbiAgICAgICAgLi4uQVRNT1NQSEVSRV9VTklGT1JNUyxcbiAgICAgICAgdjNTdW5Qb3M6IGNvbmZpZy5hemltdXRoID8gYW5nbGVUb1N1blBvcyh0b1JhZGlhbnMoY29uZmlnLmF6aW11dGhBbmdsZSkpIDogdjNTdW5Qb3NOb3csXG4gICAgICAgIGZBdG1vc3BoZXJlWm9vbUZhZGU6IHpvb21GYWRlXG4gICAgICB9O1xuICAgIH1cbiAgICBzdXBlci5kcmF3KHt1bmlmb3Jtc30pO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXRTaGFkZXJzKCksXG4gICAgICBpbmplY3Q6IHtcbiAgICAgICAgJ2ZzOiNkZWNsJzogYFxuICAgICAgICAgIHVuaWZvcm0gdmVjMyB2M1N1blBvcztcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGV4cG9zdXJlO1xuXG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmU2FtcGxlcztcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZklubmVyUmFkaXVzO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZk91dGVyUmFkaXVzO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZktyRVN1bjtcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZLbUVTdW47XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS3I0UEk7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS200UEk7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmU2NhbGVEZXB0aDtcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZBdG1vc3BoZXJlWm9vbUZhZGU7XG5cbiAgICAgICAgICBjb25zdCBpbnQgblNhbXBsZXMgPSAke05VTV9TQU1QTEVfUkFZU307XG5cbiAgICAgICAgICBmbG9hdCBzY2FsZShmbG9hdCBmQ29zKSB7XG4gICAgICAgICAgICBmbG9hdCB4ID0gMS4wIC0gZkNvcztcbiAgICAgICAgICAgIHJldHVybiBmU2NhbGVEZXB0aCAqIGV4cCgtMC4wMDI4NyArIHgqKDAuNDU5ICsgeCooMy44MyArIHgqKC02LjggKyB4KjUuMjUpKSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZsb2F0IGdldE1pZVBoYXNlKGZsb2F0IGZDb3MsIGZsb2F0IGZDb3MyLCBmbG9hdCBnLCBmbG9hdCBnMikge1xuICAgICAgICAgICAgcmV0dXJuIDEuNSAqICgoMS4wIC0gZzIpIC8gKDIuMCArIGcyKSkgKiAoMS4wICsgZkNvczIpIC8gcG93KDEuMCArIGcyIC0gMi4wICogZyAqIGZDb3MsIDEuNSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmxvYXQgZ2V0UmF5bGVpZ2hQaGFzZShmbG9hdCBmQ29zMikge1xuICAgICAgICAgICAgcmV0dXJuIDAuNzUgKyAwLjc1ICogZkNvczI7XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuICAgICAgICAnZnM6I21haW4tZW5kJzogYFxuICAgICAgICAgIHZlYzMgdjNDYW1lcmFQb3MgPSBjYW1lcmFQb3NpdGlvbjtcbiAgICAgICAgICB2ZWMzIHYzUG9zID0gcG9zaXRpb25fY29tbW9uc3BhY2UueHl6O1xuXG4gICAgICAgICAgZmxvYXQgZzIgPSBnICogZztcblxuICAgICAgICAgIHZlYzMgdjNJbnZXYXZlbGVuZ3RoID0gdmVjMygxLjAgLyBwb3coMC42NTAsIDQuMCksIDEuMCAvIHBvdygwLjU3MCwgNC4wKSwgMS4wIC8gcG93KDAuNDc1LCA0LjApKTtcblxuICAgICAgICAgIGZsb2F0IGZJbm5lclJhZGl1czIgPSBmSW5uZXJSYWRpdXMgKiBmSW5uZXJSYWRpdXM7XG4gICAgICAgICAgZmxvYXQgZk91dGVyUmFkaXVzMiA9IGZPdXRlclJhZGl1cyAqIGZPdXRlclJhZGl1cztcbiAgICAgICAgICBmbG9hdCBmU2NhbGUgPSAxLjAgLyAoZk91dGVyUmFkaXVzIC0gZklubmVyUmFkaXVzKTtcbiAgICAgICAgICBmbG9hdCBmU2NhbGVPdmVyU2NhbGVEZXB0aCA9IDEuMCAvIChmT3V0ZXJSYWRpdXMgLSBmSW5uZXJSYWRpdXMpIC8gZlNjYWxlRGVwdGg7XG5cbiAgICAgICAgICBmbG9hdCBjYW1lcmFIZWlnaHQyID0gbGVuZ3RoKHYzQ2FtZXJhUG9zKSAqIGxlbmd0aCh2M0NhbWVyYVBvcyk7XG5cbiAgICAgICAgICB2ZWMzIHYzUmF5ID0gdjNQb3MgLSB2M0NhbWVyYVBvcztcbiAgICAgICAgICBmbG9hdCBmRmFyID0gbGVuZ3RoKHYzUmF5KTtcbiAgICAgICAgICB2M1JheSAvPSBmRmFyO1xuXG4gICAgICAgICAgZmxvYXQgQiA9IDIuMCAqIGRvdCh2M0NhbWVyYVBvcywgdjNSYXkpO1xuICAgICAgICAgIGZsb2F0IEMgPSBjYW1lcmFIZWlnaHQyIC0gZk91dGVyUmFkaXVzMjtcbiAgICAgICAgICBmbG9hdCBmRGV0ID0gbWF4KDAuMCwgQipCIC0gNC4wICogQyk7XG4gICAgICAgICAgZmxvYXQgZk5lYXIgPSAwLjUgKiAoLUIgLSBzcXJ0KGZEZXQpKTtcblxuICAgICAgICAgIHZlYzMgdjNTdGFydCA9IHYzQ2FtZXJhUG9zICsgdjNSYXkgKiBmTmVhcjtcbiAgICAgICAgICBmRmFyIC09IGZOZWFyO1xuICAgICAgICAgIGZsb2F0IGZTdGFydEFuZ2xlID0gZG90KHYzUmF5LCB2M1N0YXJ0KSAvIGZPdXRlclJhZGl1cztcbiAgICAgICAgICBmbG9hdCBmU3RhcnREZXB0aCA9IGV4cCgtMS4wIC8gZlNjYWxlRGVwdGgpO1xuICAgICAgICAgIGZsb2F0IGZTdGFydE9mZnNldCA9IGZTdGFydERlcHRoICogc2NhbGUoZlN0YXJ0QW5nbGUpO1xuXG4gICAgICAgICAgZmxvYXQgZlNhbXBsZUxlbmd0aCA9IGZGYXIgLyBmU2FtcGxlcztcbiAgICAgICAgICBmbG9hdCBmU2NhbGVkTGVuZ3RoID0gZlNhbXBsZUxlbmd0aCAqIGZTY2FsZTtcbiAgICAgICAgICB2ZWMzIHYzU2FtcGxlUmF5ID0gdjNSYXkgKiBmU2FtcGxlTGVuZ3RoO1xuICAgICAgICAgIHZlYzMgdjNTYW1wbGVQb2ludCA9IHYzU3RhcnQgKyB2M1NhbXBsZVJheSAqIDAuNTtcblxuICAgICAgICAgIHZlYzMgdjNGcm9udENvbG9yID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcbiAgICAgICAgICBmb3IoaW50IGk9MDsgaTxuU2FtcGxlczsgaSsrKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZsb2F0IGZIZWlnaHQgPSBsZW5ndGgodjNTYW1wbGVQb2ludCk7XG4gICAgICAgICAgICBmbG9hdCBmRGVwdGggPSBleHAoZlNjYWxlT3ZlclNjYWxlRGVwdGggKiAoZklubmVyUmFkaXVzIC0gZkhlaWdodCkpO1xuICAgICAgICAgICAgZmxvYXQgZkxpZ2h0QW5nbGUgPSBkb3QodjNTdW5Qb3MsIHYzU2FtcGxlUG9pbnQpIC8gZkhlaWdodDtcbiAgICAgICAgICAgIGZsb2F0IGZDYW1lcmFBbmdsZSA9IGRvdCh2M1JheSwgdjNTYW1wbGVQb2ludCkgLyBmSGVpZ2h0O1xuICAgICAgICAgICAgZmxvYXQgZlNjYXR0ZXIgPSAoZlN0YXJ0T2Zmc2V0ICsgZkRlcHRoICogKHNjYWxlKGZMaWdodEFuZ2xlKSAtIHNjYWxlKGZDYW1lcmFBbmdsZSkpKTtcbiAgICAgICAgICAgIHZlYzMgdjNBdHRlbnVhdGUgPSBleHAoLWZTY2F0dGVyICogKHYzSW52V2F2ZWxlbmd0aCAqIGZLcjRQSSArIGZLbTRQSSkpO1xuXG4gICAgICAgICAgICB2M0Zyb250Q29sb3IgKz0gdjNBdHRlbnVhdGUgKiAoZkRlcHRoICogZlNjYWxlZExlbmd0aCk7XG4gICAgICAgICAgICB2M1NhbXBsZVBvaW50ICs9IHYzU2FtcGxlUmF5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZlYzMgYzAgPSB2M0Zyb250Q29sb3IgKiAodjNJbnZXYXZlbGVuZ3RoICogZktyRVN1bik7XG4gICAgICAgICAgdmVjMyBjMSA9IHYzRnJvbnRDb2xvciAqIGZLbUVTdW47XG5cbiAgICAgICAgICB2ZWMzIHYzRGlyZWN0aW9uID0gdjNDYW1lcmFQb3MgLSB2M1BvcztcblxuICAgICAgICAgIGZsb2F0IGZDb3MgPSBkb3QodjNTdW5Qb3MsIHYzRGlyZWN0aW9uKSAvIGxlbmd0aCh2M0RpcmVjdGlvbik7XG4gICAgICAgICAgZmxvYXQgZkNvczIgPSBmQ29zICogZkNvcztcblxuICAgICAgICAgIHZlYzMgc2t5Q29sb3IgPSBnZXRSYXlsZWlnaFBoYXNlKGZDb3MyKSAqIGMwICsgZ2V0TWllUGhhc2UoZkNvcywgZkNvczIsIGcsIGcyKSAqIGMxO1xuXG4gICAgICAgICAgZnJhZ0NvbG9yID0gdmVjNChza3lDb2xvciwgMS4wKTtcbiAgICAgICAgICBmcmFnQ29sb3IuYSA9IGZyYWdDb2xvci5iO1xuXG4gICAgICAgICAgLy8gRmFkZSB0aGUgc2t5IGhhbG8gb3V0IGFzIHRoZSB1c2VyIHpvb21zIGluIHBhc3QgY29udGluZW50IHNjYWxlLlxuICAgICAgICAgIGZyYWdDb2xvci5hICo9IGZBdG1vc3BoZXJlWm9vbUZhZGU7XG4gICAgICAgIGAsXG4gICAgICAgICdmczpERUNLR0xfRklMVEVSX0NPTE9SJzogYGBcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IEFUTU9TUEhFUkVfUEFSQU1FVEVSUyA9IHtcbiAgZGVwdGhUZXN0OiBmYWxzZSxcbiAgYmxlbmRGdW5jOiBbMHgwMzAyLCAweDAzMDMsIDEsIDB4MDMwM10sIC8vIFNSQ19BTFBIQSwgT05FX01JTlVTX1NSQ19BTFBIQSwgT05FLCBPTkVfTUlOVVNfU1JDX0FMUEhBXG4gIGJsZW5kRXF1YXRpb246IFsweDgwMDYsIDB4ODAwNl0gLy8gRlVOQ19BRERcbn07XG5cbmNvbnN0IEFUTU9TUEhFUkVfU0tZX1BBUkFNRVRFUlMgPSB7XG4gIGN1bGxGYWNlOiAweDA0MDQsIC8vIEdMLkZST05UXG4gIGRlcHRoTWFzazogZmFsc2UsXG4gIGJsZW5kRnVuYzogWzB4MDMwMiwgMHgwMzAzLCAxLCAweDAzMDNdLFxuICBibGVuZEVxdWF0aW9uOiBbMHg4MDA2LCAweDgwMDZdXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2xvYmVBdG1vc3BoZXJlTGF5ZXIgPSAoe2NvbmZpZywgem9vbX06IHtjb25maWc6IEdsb2JlQ29uZmlnOyB6b29tPzogbnVtYmVyfSkgPT4ge1xuICBjb25zdCB6b29tRmFkZSA9IGF0bW9zcGhlcmVab29tRmFkZSh6b29tID8/IDApO1xuICByZXR1cm4gbmV3IEF0bW9zcGhlcmVMYXllclJlYWxpc3RpYyh7XG4gICAgaWQ6ICdhdG1vc3BoZXJlJyxcbiAgICBkYXRhOiBbWzAsIDAsIDBdXSxcbiAgICBjb25maWcsXG4gICAgem9vbUZhZGUsXG4gICAgY29vcmRpbmF0ZU9yaWdpbjogWzAsIDAsIDBdLFxuICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkNBUlRFU0lBTixcbiAgICBnZXRQb3NpdGlvbjogKChkOiBudW1iZXJbXSkgPT4gZCkgYXMgYW55LFxuICAgIGdldENvbG9yOiBbMCwgMCwgMF0sXG4gICAgbWVzaDogR0xPQkVfTUVTSF9JTk5FUixcbiAgICBwYXJhbWV0ZXJzOiBBVE1PU1BIRVJFX1BBUkFNRVRFUlNcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2xvYmVBdG1vc3BoZXJlU2t5TGF5ZXIgPSAoe2NvbmZpZywgem9vbX06IHtjb25maWc6IEdsb2JlQ29uZmlnOyB6b29tPzogbnVtYmVyfSkgPT4ge1xuICBjb25zdCB6b29tRmFkZSA9IGF0bW9zcGhlcmVab29tRmFkZSh6b29tID8/IDApO1xuICByZXR1cm4gbmV3IEF0bW9zcGhlcmVTa3lMYXllclJlYWxpc3RpYyh7XG4gICAgaWQ6ICdhdG1vc3BoZXJlLXNreScsXG4gICAgZGF0YTogW1swLCAwLCAwXV0sXG4gICAgY29uZmlnLFxuICAgIHpvb21GYWRlLFxuICAgIGNvb3JkaW5hdGVPcmlnaW46IFswLCAwLCAwXSxcbiAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4sXG4gICAgZ2V0UG9zaXRpb246ICgoZDogbnVtYmVyW10pID0+IGQpIGFzIGFueSxcbiAgICBnZXRDb2xvcjogWzAsIDAsIDBdLFxuICAgIG1lc2g6IEdMT0JFX01FU0hfT1VURVIsXG4gICAgcGFyYW1ldGVyczogQVRNT1NQSEVSRV9TS1lfUEFS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
|