kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
87 lines (86 loc) • 16.1 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _layers = require("@deck.gl/layers");
var _constants = _interopRequireDefault(require("@luma.gl/constants"));
var _ = require("../");
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)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; }
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; }
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; } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var defaultProps = _objectSpread(_objectSpread({}, _layers.LineLayer.defaultProps), {}, {
getTargetColor: function getTargetColor(x) {
return x.color || [0, 0, 0, 255];
}
});
function addInstanceColorShader(vs) {
var targetColorVs = (0, _.editShader)(vs, 'line target color vs', 'attribute vec4 instanceColors;', 'attribute vec4 instanceColors; attribute vec4 instanceTargetColors;');
return (0, _.editShader)(targetColorVs, 'line color vs', 'vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);', "vec4 color = mix(instanceColors, instanceTargetColors, positions.x);" + "vColor = vec4(color.rgb, color.a * opacity);");
}
function addElevationScale(vs) {
var elevationVs = (0, _.editShader)(vs, 'line elevation scale 1 vs - inject elevation scale', 'uniform float widthMaxPixels;', "uniform float widthMaxPixels;\n uniform float elevationScale;");
elevationVs = (0, _.editShader)(elevationVs, 'line elevation scale 2 vs - multiply by elevation scale', "geometry.worldPosition = instanceSourcePositions;\n geometry.worldPositionAlt = instanceTargetPositions;", "vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;\n source_world.z *= elevationScale;\n target_world.z *= elevationScale;\n \n geometry.worldPosition = source_world;\n geometry.worldPositionAlt = target_world;");
elevationVs = (0, _.editShader)(elevationVs, 'line elevation scale 3 vs', "vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;", '');
return elevationVs;
}
var EnhancedLineLayer = exports["default"] = /*#__PURE__*/function (_LineLayer) {
function EnhancedLineLayer() {
(0, _classCallCheck2["default"])(this, EnhancedLineLayer);
return _callSuper(this, EnhancedLineLayer, arguments);
}
(0, _inherits2["default"])(EnhancedLineLayer, _LineLayer);
return (0, _createClass2["default"])(EnhancedLineLayer, [{
key: "getShaders",
value: function getShaders() {
var shaders = _superPropGet(EnhancedLineLayer, "getShaders", this, 3)([]);
var vs = addInstanceColorShader(shaders.vs);
vs = addElevationScale(vs);
return _objectSpread(_objectSpread({}, shaders), {}, {
vs: vs
});
}
}, {
key: "draw",
value: function draw(_ref) {
var uniforms = _ref.uniforms;
var elevationScale = this.props.elevationScale;
_superPropGet(EnhancedLineLayer, "draw", this, 3)([{
uniforms: _objectSpread(_objectSpread({}, uniforms), {}, {
elevationScale: elevationScale
})
}]);
}
}, {
key: "initializeState",
value: function initializeState() {
var _this$props$colorForm;
_superPropGet(EnhancedLineLayer, "initializeState", this, 3)([undefined]);
var attributeManager = this.state.attributeManager;
attributeManager.addInstanced({
instanceTargetColors: {
size: (_this$props$colorForm = this.props.colorFormat) === null || _this$props$colorForm === void 0 ? void 0 : _this$props$colorForm.length,
type: _constants["default"].UNSIGNED_BYTE,
normalized: true,
transition: true,
accessor: 'getTargetColor',
defaultValue: [0, 0, 0, 255]
}
});
}
}]);
}(_layers.LineLayer);
EnhancedLineLayer.layerName = 'EnhancedLineLayer';
EnhancedLineLayer.defaultProps = defaultProps;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiXyIsIl9jYWxsU3VwZXIiLCJ0IiwibyIsImUiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInIiLCJwIiwiX2dldDIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImRlZmF1bHRQcm9wcyIsIkxpbmVMYXllciIsImdldFRhcmdldENvbG9yIiwieCIsImNvbG9yIiwiYWRkSW5zdGFuY2VDb2xvclNoYWRlciIsInZzIiwidGFyZ2V0Q29sb3JWcyIsImVkaXRTaGFkZXIiLCJhZGRFbGV2YXRpb25TY2FsZSIsImVsZXZhdGlvblZzIiwiRW5oYW5jZWRMaW5lTGF5ZXIiLCJleHBvcnRzIiwiX0xpbmVMYXllciIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2hhZGVycyIsInNoYWRlcnMiLCJkcmF3IiwiX3JlZiIsInVuaWZvcm1zIiwiZWxldmF0aW9uU2NhbGUiLCJwcm9wcyIsImluaXRpYWxpemVTdGF0ZSIsIl90aGlzJHByb3BzJGNvbG9yRm9ybSIsInVuZGVmaW5lZCIsImF0dHJpYnV0ZU1hbmFnZXIiLCJzdGF0ZSIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlVGFyZ2V0Q29sb3JzIiwic2l6ZSIsImNvbG9yRm9ybWF0IiwidHlwZSIsIkdMIiwiVU5TSUdORURfQllURSIsIm5vcm1hbGl6ZWQiLCJ0cmFuc2l0aW9uIiwiYWNjZXNzb3IiLCJkZWZhdWx0VmFsdWUiLCJsYXllck5hbWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGluZS1sYXllci9saW5lLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7TGluZUxheWVyLCBMaW5lTGF5ZXJQcm9wc30gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtSR0JBQ29sb3J9IGZyb20gJ2RlY2suZ2wnO1xuaW1wb3J0IHtlZGl0U2hhZGVyfSBmcm9tICcuLi8nO1xuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkxpbmVMYXllci5kZWZhdWx0UHJvcHMsXG4gIGdldFRhcmdldENvbG9yOiB4ID0+IHguY29sb3IgfHwgWzAsIDAsIDAsIDI1NV1cbn07XG5cbmZ1bmN0aW9uIGFkZEluc3RhbmNlQ29sb3JTaGFkZXIodnMpIHtcbiAgY29uc3QgdGFyZ2V0Q29sb3JWcyA9IGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2xpbmUgdGFyZ2V0IGNvbG9yIHZzJyxcbiAgICAnYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7IGF0dHJpYnV0ZSB2ZWM0IGluc3RhbmNlVGFyZ2V0Q29sb3JzOydcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICB0YXJnZXRDb2xvclZzLFxuICAgICdsaW5lIGNvbG9yIHZzJyxcbiAgICAndkNvbG9yID0gdmVjNChpbnN0YW5jZUNvbG9ycy5yZ2IsIGluc3RhbmNlQ29sb3JzLmEgKiBvcGFjaXR5KTsnLFxuICAgIGB2ZWM0IGNvbG9yID0gbWl4KGluc3RhbmNlQ29sb3JzLCBpbnN0YW5jZVRhcmdldENvbG9ycywgcG9zaXRpb25zLngpO2AgK1xuICAgICAgYHZDb2xvciA9IHZlYzQoY29sb3IucmdiLCBjb2xvci5hICogb3BhY2l0eSk7YFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGRFbGV2YXRpb25TY2FsZSh2cykge1xuICBsZXQgZWxldmF0aW9uVnMgPSBlZGl0U2hhZGVyKFxuICAgIHZzLFxuICAgICdsaW5lIGVsZXZhdGlvbiBzY2FsZSAxIHZzIC0gaW5qZWN0IGVsZXZhdGlvbiBzY2FsZScsXG4gICAgJ3VuaWZvcm0gZmxvYXQgd2lkdGhNYXhQaXhlbHM7JyxcbiAgICBgdW5pZm9ybSBmbG9hdCB3aWR0aE1heFBpeGVscztcbiAgICAgdW5pZm9ybSBmbG9hdCBlbGV2YXRpb25TY2FsZTtgXG4gICk7XG5cbiAgZWxldmF0aW9uVnMgPSBlZGl0U2hhZGVyKFxuICAgIGVsZXZhdGlvblZzLFxuICAgICdsaW5lIGVsZXZhdGlvbiBzY2FsZSAyIHZzIC0gbXVsdGlwbHkgYnkgZWxldmF0aW9uIHNjYWxlJyxcbiAgICBgZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IGluc3RhbmNlU291cmNlUG9zaXRpb25zO1xuICBnZW9tZXRyeS53b3JsZFBvc2l0aW9uQWx0ID0gaW5zdGFuY2VUYXJnZXRQb3NpdGlvbnM7YCxcbiAgICBgdmVjMyBzb3VyY2Vfd29ybGQgPSBpbnN0YW5jZVNvdXJjZVBvc2l0aW9ucztcbiAgICAgdmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbiAgICAgc291cmNlX3dvcmxkLnogKj0gZWxldmF0aW9uU2NhbGU7XG4gICAgIHRhcmdldF93b3JsZC56ICo9IGVsZXZhdGlvblNjYWxlO1xuICAgICBcbiAgICAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IHNvdXJjZV93b3JsZDtcbiAgICAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbkFsdCA9IHRhcmdldF93b3JsZDtgXG4gICk7XG5cbiAgZWxldmF0aW9uVnMgPSBlZGl0U2hhZGVyKFxuICAgIGVsZXZhdGlvblZzLFxuICAgICdsaW5lIGVsZXZhdGlvbiBzY2FsZSAzIHZzJyxcbiAgICBgdmVjMyBzb3VyY2Vfd29ybGQgPSBpbnN0YW5jZVNvdXJjZVBvc2l0aW9ucztcbiAgdmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztgLFxuICAgICcnXG4gICk7XG5cbiAgcmV0dXJuIGVsZXZhdGlvblZzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmhhbmNlZExpbmVMYXllciBleHRlbmRzIExpbmVMYXllcjxcbiAgYW55LFxuICBMaW5lTGF5ZXJQcm9wczxhbnk+ICYge2VsZXZhdGlvblNjYWxlOiBudW1iZXI7IGdldFRhcmdldENvbG9yOiBSR0JBQ29sb3J9XG4+IHtcbiAgZ2V0U2hhZGVycygpIHtcbiAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuXG4gICAgbGV0IHZzID0gYWRkSW5zdGFuY2VDb2xvclNoYWRlcihzaGFkZXJzLnZzKTtcbiAgICB2cyA9IGFkZEVsZXZhdGlvblNjYWxlKHZzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgdnNcbiAgICB9O1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXN9KSB7XG4gICAgY29uc3Qge2VsZXZhdGlvblNjYWxlfSA9IHRoaXMucHJvcHM7XG4gICAgc3VwZXIuZHJhdyh7dW5pZm9ybXM6IHsuLi51bmlmb3JtcywgZWxldmF0aW9uU2NhbGV9fSk7XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZVN0YXRlKHVuZGVmaW5lZCk7XG4gICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVRhcmdldENvbG9yczoge1xuICAgICAgICBzaXplOiB0aGlzLnByb3BzLmNvbG9yRm9ybWF0Py5sZW5ndGgsXG4gICAgICAgIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsXG4gICAgICAgIG5vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIHRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0VGFyZ2V0Q29sb3InLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLCAwLCAwLCAyNTVdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuRW5oYW5jZWRMaW5lTGF5ZXIubGF5ZXJOYW1lID0gJ0VuaGFuY2VkTGluZUxheWVyJztcbkVuaGFuY2VkTGluZUxheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxDQUFBLEdBQUFILE9BQUE7QUFBK0IsU0FBQUksV0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsV0FBQUQsQ0FBQSxPQUFBRSxnQkFBQSxhQUFBRixDQUFBLE9BQUFHLDJCQUFBLGFBQUFKLENBQUEsRUFBQUsseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFOLENBQUEsRUFBQUMsQ0FBQSxZQUFBQyxnQkFBQSxhQUFBSCxDQUFBLEVBQUFRLFdBQUEsSUFBQVAsQ0FBQSxDQUFBUSxLQUFBLENBQUFULENBQUEsRUFBQUUsQ0FBQTtBQUFBLFNBQUFHLDBCQUFBLGNBQUFMLENBQUEsSUFBQVUsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQUMsSUFBQSxDQUFBUCxPQUFBLENBQUFDLFNBQUEsQ0FBQUcsT0FBQSxpQ0FBQVYsQ0FBQSxhQUFBSyx5QkFBQSxZQUFBQSwwQkFBQSxhQUFBTCxDQUFBO0FBQUEsU0FBQWMsY0FBQWQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFhLENBQUEsRUFBQWQsQ0FBQSxRQUFBZSxDQUFBLE9BQUFDLEtBQUEsaUJBQUFkLGdCQUFBLGlCQUFBRixDQUFBLEdBQUFELENBQUEsQ0FBQVcsU0FBQSxHQUFBWCxDQUFBLEdBQUFFLENBQUEsRUFBQWEsQ0FBQSxjQUFBZCxDQUFBLGFBQUFELENBQUEsV0FBQWdCLENBQUEsQ0FBQVAsS0FBQSxDQUFBTSxDQUFBLEVBQUFmLENBQUEsT0FBQWdCLENBQUE7QUFBQSxTQUFBRSxRQUFBaEIsQ0FBQSxFQUFBYSxDQUFBLFFBQUFmLENBQUEsR0FBQW1CLE1BQUEsQ0FBQUMsSUFBQSxDQUFBbEIsQ0FBQSxPQUFBaUIsTUFBQSxDQUFBRSxxQkFBQSxRQUFBcEIsQ0FBQSxHQUFBa0IsTUFBQSxDQUFBRSxxQkFBQSxDQUFBbkIsQ0FBQSxHQUFBYSxDQUFBLEtBQUFkLENBQUEsR0FBQUEsQ0FBQSxDQUFBcUIsTUFBQSxXQUFBUCxDQUFBLFdBQUFJLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQXJCLENBQUEsRUFBQWEsQ0FBQSxFQUFBUyxVQUFBLE9BQUF4QixDQUFBLENBQUF5QixJQUFBLENBQUFoQixLQUFBLENBQUFULENBQUEsRUFBQUMsQ0FBQSxZQUFBRCxDQUFBO0FBQUEsU0FBQTBCLGNBQUF4QixDQUFBLGFBQUFhLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBZixDQUFBLFdBQUEyQixTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUcsT0FBQSxDQUFBQyxNQUFBLENBQUFuQixDQUFBLE9BQUE2QixPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQTVCLENBQUEsRUFBQWEsQ0FBQSxFQUFBZixDQUFBLENBQUFlLENBQUEsU0FBQUksTUFBQSxDQUFBWSx5QkFBQSxHQUFBWixNQUFBLENBQUFhLGdCQUFBLENBQUE5QixDQUFBLEVBQUFpQixNQUFBLENBQUFZLHlCQUFBLENBQUEvQixDQUFBLEtBQUFrQixPQUFBLENBQUFDLE1BQUEsQ0FBQW5CLENBQUEsR0FBQTZCLE9BQUEsV0FBQWQsQ0FBQSxJQUFBSSxNQUFBLENBQUFjLGNBQUEsQ0FBQS9CLENBQUEsRUFBQWEsQ0FBQSxFQUFBSSxNQUFBLENBQUFJLHdCQUFBLENBQUF2QixDQUFBLEVBQUFlLENBQUEsaUJBQUFiLENBQUEsSUFOL0I7QUFDQTtBQU9BLElBQU1nQyxZQUFZLEdBQUFSLGFBQUEsQ0FBQUEsYUFBQSxLQUNiUyxpQkFBUyxDQUFDRCxZQUFZO0VBQ3pCRSxjQUFjLEVBQUUsU0FBaEJBLGNBQWNBLENBQUVDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUFBO0FBQUEsRUFDL0M7QUFFRCxTQUFTQyxzQkFBc0JBLENBQUNDLEVBQUUsRUFBRTtFQUNsQyxJQUFNQyxhQUFhLEdBQUcsSUFBQUMsWUFBVSxFQUM5QkYsRUFBRSxFQUNGLHNCQUFzQixFQUN0QixnQ0FBZ0MsRUFDaEMscUVBQ0YsQ0FBQztFQUVELE9BQU8sSUFBQUUsWUFBVSxFQUNmRCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGdFQUFnRSxFQUNoRSx1SEFFRixDQUFDO0FBQ0g7QUFFQSxTQUFTRSxpQkFBaUJBLENBQUNILEVBQUUsRUFBRTtFQUM3QixJQUFJSSxXQUFXLEdBQUcsSUFBQUYsWUFBVSxFQUMxQkYsRUFBRSxFQUNGLG9EQUFvRCxFQUNwRCwrQkFBK0IscUVBR2pDLENBQUM7RUFFREksV0FBVyxHQUFHLElBQUFGLFlBQVUsRUFDdEJFLFdBQVcsRUFDWCx5REFBeUQsb1lBVTNELENBQUM7RUFFREEsV0FBVyxHQUFHLElBQUFGLFlBQVUsRUFDdEJFLFdBQVcsRUFDWCwyQkFBMkIsa0dBRzNCLEVBQ0YsQ0FBQztFQUVELE9BQU9BLFdBQVc7QUFDcEI7QUFBQyxJQUVvQkMsaUJBQWlCLEdBQUFDLE9BQUEscUNBQUFDLFVBQUE7RUFBQSxTQUFBRixrQkFBQTtJQUFBLElBQUFHLGdCQUFBLG1CQUFBSCxpQkFBQTtJQUFBLE9BQUE5QyxVQUFBLE9BQUE4QyxpQkFBQSxFQUFBbEIsU0FBQTtFQUFBO0VBQUEsSUFBQXNCLFVBQUEsYUFBQUosaUJBQUEsRUFBQUUsVUFBQTtFQUFBLFdBQUFHLGFBQUEsYUFBQUwsaUJBQUE7SUFBQU0sR0FBQTtJQUFBQyxLQUFBLEVBSXBDLFNBQUFDLFVBQVVBLENBQUEsRUFBRztNQUNYLElBQU1DLE9BQU8sR0FBQXhDLGFBQUEsQ0FBQStCLGlCQUFBLDRCQUFxQjtNQUVsQyxJQUFJTCxFQUFFLEdBQUdELHNCQUFzQixDQUFDZSxPQUFPLENBQUNkLEVBQUUsQ0FBQztNQUMzQ0EsRUFBRSxHQUFHRyxpQkFBaUIsQ0FBQ0gsRUFBRSxDQUFDO01BRTFCLE9BQUFkLGFBQUEsQ0FBQUEsYUFBQSxLQUNLNEIsT0FBTztRQUNWZCxFQUFFLEVBQUZBO01BQUU7SUFFTjtFQUFDO0lBQUFXLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFHLElBQUlBLENBQUFDLElBQUEsRUFBYTtNQUFBLElBQVhDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO01BQ1osSUFBT0MsY0FBYyxHQUFJLElBQUksQ0FBQ0MsS0FBSyxDQUE1QkQsY0FBYztNQUNyQjVDLGFBQUEsQ0FBQStCLGlCQUFBLG9CQUFXO1FBQUNZLFFBQVEsRUFBQS9CLGFBQUEsQ0FBQUEsYUFBQSxLQUFNK0IsUUFBUTtVQUFFQyxjQUFjLEVBQWRBO1FBQWM7TUFBQyxDQUFDO0lBQ3REO0VBQUM7SUFBQVAsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQVEsZUFBZUEsQ0FBQSxFQUFHO01BQUEsSUFBQUMscUJBQUE7TUFDaEIvQyxhQUFBLENBQUErQixpQkFBQSwrQkFBc0JpQixTQUFTO01BQy9CLElBQU9DLGdCQUFnQixHQUFJLElBQUksQ0FBQ0MsS0FBSyxDQUE5QkQsZ0JBQWdCO01BQ3ZCQSxnQkFBZ0IsQ0FBQ0UsWUFBWSxDQUFDO1FBQzVCQyxvQkFBb0IsRUFBRTtVQUNwQkMsSUFBSSxHQUFBTixxQkFBQSxHQUFFLElBQUksQ0FBQ0YsS0FBSyxDQUFDUyxXQUFXLGNBQUFQLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBd0JqQyxNQUFNO1VBQ3BDeUMsSUFBSSxFQUFFQyxxQkFBRSxDQUFDQyxhQUFhO1VBQ3RCQyxVQUFVLEVBQUUsSUFBSTtVQUNoQkMsVUFBVSxFQUFFLElBQUk7VUFDaEJDLFFBQVEsRUFBRSxnQkFBZ0I7VUFDMUJDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7UUFDN0I7TUFDRixDQUFDLENBQUM7SUFDSjtFQUFDO0FBQUEsRUFsQzRDeEMsaUJBQVM7QUFxQ3hEVSxpQkFBaUIsQ0FBQytCLFNBQVMsR0FBRyxtQkFBbUI7QUFDakQvQixpQkFBaUIsQ0FBQ1gsWUFBWSxHQUFHQSxZQUFZIiwiaWdub3JlTGlzdCI6W119
;