kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
104 lines (97 loc) • 17 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.validateAccessors = validateAccessors;
exports.validateColorVector = validateColorVector;
exports.validateVectorAccessors = validateVectorAccessors;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _typed = require("@deck.gl/core/typed");
var _utils = require("@kepler.gl/utils");
var arrow = _interopRequireWildcard(require("apache-arrow"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// deck.gl-community
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
function validateAccessors(props, table) {
var vectorAccessors = [];
var colorVectorAccessors = [];
for (var _i = 0, _Object$entries = Object.entries(props); _i < _Object$entries.length; _i++) {
var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
accessorName = _Object$entries$_i[0],
accessorValue = _Object$entries$_i[1];
// Is it an accessor
if (accessorName.startsWith('get')) {
// Is it a vector accessor
if ((0, _utils.isArrowVector)(accessorValue)) {
vectorAccessors.push(accessorValue);
// Is it a color vector accessor
if (accessorName.endsWith('Color')) {
colorVectorAccessors.push(accessorValue);
}
}
}
}
validateVectorAccessors(table, vectorAccessors);
for (var _i2 = 0, _colorVectorAccessors = colorVectorAccessors; _i2 < _colorVectorAccessors.length; _i2++) {
var colorVectorAccessor = _colorVectorAccessors[_i2];
validateColorVector(colorVectorAccessor);
}
}
/**
* Provide validation for accessors provided
*
* - Assert that all vectors have the same number of chunks as the main table
* - Assert that all chunks in each vector have the same number of rows as the
* relevant batch in the main table.
*
*/
function validateVectorAccessors(table, vectorAccessors) {
// Check the same number of chunks as the table's batches
var _iterator = _createForOfIteratorHelper(vectorAccessors),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var vectorAccessor = _step.value;
(0, _typed.assert)(table.batches.length === vectorAccessor.data.length);
}
// Check that each table batch/vector data has the same number of rows
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
var _iterator2 = _createForOfIteratorHelper(vectorAccessors),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var _vectorAccessor = _step2.value;
for (var i = 0; i < table.batches.length; i++) {
(0, _typed.assert)(table.batches[i].numRows === _vectorAccessor.data[i].length);
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
function validateColorVector(vector) {
// Assert the color vector is a FixedSizeList
(0, _typed.assert)(arrow.DataType.isFixedSizeList(vector.type));
// Assert it has 3 or 4 values
(0, _typed.assert)(vector.type.listSize === 3 || vector.type.listSize === 4);
// Assert the child type is an integer
(0, _typed.assert)(arrow.DataType.isInt(vector.type.children[0]));
// Assert the child type is a Uint8
// Property 'type' does not exist on type 'Int_<Ints>'. Did you mean 'TType'?
(0, _typed.assert)(vector.type.children[0].type.bitWidth === 8);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3V0aWxzIiwiYXJyb3ciLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJ2YWxpZGF0ZUFjY2Vzc29ycyIsInByb3BzIiwidGFibGUiLCJ2ZWN0b3JBY2Nlc3NvcnMiLCJjb2xvclZlY3RvckFjY2Vzc29ycyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5MiIsImFjY2Vzc29yTmFtZSIsImFjY2Vzc29yVmFsdWUiLCJzdGFydHNXaXRoIiwiaXNBcnJvd1ZlY3RvciIsInB1c2giLCJlbmRzV2l0aCIsInZhbGlkYXRlVmVjdG9yQWNjZXNzb3JzIiwiX2kyIiwiX2NvbG9yVmVjdG9yQWNjZXNzb3JzIiwiY29sb3JWZWN0b3JBY2Nlc3NvciIsInZhbGlkYXRlQ29sb3JWZWN0b3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInZlY3RvckFjY2Vzc29yIiwiYXNzZXJ0IiwiYmF0Y2hlcyIsImRhdGEiLCJlcnIiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwibnVtUm93cyIsInZlY3RvciIsIkRhdGFUeXBlIiwiaXNGaXhlZFNpemVMaXN0IiwidHlwZSIsImxpc3RTaXplIiwiaXNJbnQiLCJjaGlsZHJlbiIsImJpdFdpZHRoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3ZhbGlkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGRlY2suZ2wtY29tbXVuaXR5XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgKGMpIHZpcy5nbCBjb250cmlidXRvcnNcblxuaW1wb3J0IHthc3NlcnR9IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtpc0Fycm93VmVjdG9yfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc29ycyhwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiwgdGFibGU6IGFycm93LlRhYmxlKTogdm9pZCB7XG4gIGNvbnN0IHZlY3RvckFjY2Vzc29yczogYXJyb3cuVmVjdG9yW10gPSBbXTtcbiAgY29uc3QgY29sb3JWZWN0b3JBY2Nlc3NvcnM6IGFycm93LlZlY3RvcltdID0gW107XG4gIGZvciAoY29uc3QgW2FjY2Vzc29yTmFtZSwgYWNjZXNzb3JWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMpKSB7XG4gICAgLy8gSXMgaXQgYW4gYWNjZXNzb3JcbiAgICBpZiAoYWNjZXNzb3JOYW1lLnN0YXJ0c1dpdGgoJ2dldCcpKSB7XG4gICAgICAvLyBJcyBpdCBhIHZlY3RvciBhY2Nlc3NvclxuICAgICAgaWYgKGlzQXJyb3dWZWN0b3IoYWNjZXNzb3JWYWx1ZSkpIHtcbiAgICAgICAgdmVjdG9yQWNjZXNzb3JzLnB1c2goYWNjZXNzb3JWYWx1ZSk7XG5cbiAgICAgICAgLy8gSXMgaXQgYSBjb2xvciB2ZWN0b3IgYWNjZXNzb3JcbiAgICAgICAgaWYgKGFjY2Vzc29yTmFtZS5lbmRzV2l0aCgnQ29sb3InKSkge1xuICAgICAgICAgIGNvbG9yVmVjdG9yQWNjZXNzb3JzLnB1c2goYWNjZXNzb3JWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVZlY3RvckFjY2Vzc29ycyh0YWJsZSwgdmVjdG9yQWNjZXNzb3JzKTtcbiAgZm9yIChjb25zdCBjb2xvclZlY3RvckFjY2Vzc29yIG9mIGNvbG9yVmVjdG9yQWNjZXNzb3JzKSB7XG4gICAgdmFsaWRhdGVDb2xvclZlY3Rvcihjb2xvclZlY3RvckFjY2Vzc29yKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGUgdmFsaWRhdGlvbiBmb3IgYWNjZXNzb3JzIHByb3ZpZGVkXG4gKlxuICogLSBBc3NlcnQgdGhhdCBhbGwgdmVjdG9ycyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBjaHVua3MgYXMgdGhlIG1haW4gdGFibGVcbiAqIC0gQXNzZXJ0IHRoYXQgYWxsIGNodW5rcyBpbiBlYWNoIHZlY3RvciBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiByb3dzIGFzIHRoZVxuICogICByZWxldmFudCBiYXRjaCBpbiB0aGUgbWFpbiB0YWJsZS5cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVZlY3RvckFjY2Vzc29ycyh0YWJsZTogYXJyb3cuVGFibGUsIHZlY3RvckFjY2Vzc29yczogYXJyb3cuVmVjdG9yW10pIHtcbiAgLy8gQ2hlY2sgdGhlIHNhbWUgbnVtYmVyIG9mIGNodW5rcyBhcyB0aGUgdGFibGUncyBiYXRjaGVzXG4gIGZvciAoY29uc3QgdmVjdG9yQWNjZXNzb3Igb2YgdmVjdG9yQWNjZXNzb3JzKSB7XG4gICAgYXNzZXJ0KHRhYmxlLmJhdGNoZXMubGVuZ3RoID09PSB2ZWN0b3JBY2Nlc3Nvci5kYXRhLmxlbmd0aCk7XG4gIH1cblxuICAvLyBDaGVjayB0aGF0IGVhY2ggdGFibGUgYmF0Y2gvdmVjdG9yIGRhdGEgaGFzIHRoZSBzYW1lIG51bWJlciBvZiByb3dzXG4gIGZvciAoY29uc3QgdmVjdG9yQWNjZXNzb3Igb2YgdmVjdG9yQWNjZXNzb3JzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZS5iYXRjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhc3NlcnQodGFibGUuYmF0Y2hlc1tpXS5udW1Sb3dzID09PSB2ZWN0b3JBY2Nlc3Nvci5kYXRhW2ldLmxlbmd0aCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbG9yVmVjdG9yKHZlY3RvcjogYXJyb3cuVmVjdG9yKSB7XG4gIC8vIEFzc2VydCB0aGUgY29sb3IgdmVjdG9yIGlzIGEgRml4ZWRTaXplTGlzdFxuICBhc3NlcnQoYXJyb3cuRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KHZlY3Rvci50eXBlKSk7XG5cbiAgLy8gQXNzZXJ0IGl0IGhhcyAzIG9yIDQgdmFsdWVzXG4gIGFzc2VydCh2ZWN0b3IudHlwZS5saXN0U2l6ZSA9PT0gMyB8fCB2ZWN0b3IudHlwZS5saXN0U2l6ZSA9PT0gNCk7XG5cbiAgLy8gQXNzZXJ0IHRoZSBjaGlsZCB0eXBlIGlzIGFuIGludGVnZXJcbiAgYXNzZXJ0KGFycm93LkRhdGFUeXBlLmlzSW50KHZlY3Rvci50eXBlLmNoaWxkcmVuWzBdKSk7XG5cbiAgLy8gQXNzZXJ0IHRoZSBjaGlsZCB0eXBlIGlzIGEgVWludDhcbiAgLy8gUHJvcGVydHkgJ3R5cGUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0ludF88SW50cz4nLiBEaWQgeW91IG1lYW4gJ1RUeXBlJz9cbiAgYXNzZXJ0KHZlY3Rvci50eXBlLmNoaWxkcmVuWzBdLnR5cGUuYml0V2lkdGggPT09IDgpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU9BLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUFzQyxTQUFBSSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUYsd0JBQUFFLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBVywyQkFBQWpCLENBQUEsRUFBQUYsQ0FBQSxRQUFBRyxDQUFBLHlCQUFBaUIsTUFBQSxJQUFBbEIsQ0FBQSxDQUFBa0IsTUFBQSxDQUFBQyxRQUFBLEtBQUFuQixDQUFBLHFCQUFBQyxDQUFBLFFBQUFtQixLQUFBLENBQUFDLE9BQUEsQ0FBQXJCLENBQUEsTUFBQUMsQ0FBQSxHQUFBcUIsMkJBQUEsQ0FBQXRCLENBQUEsTUFBQUYsQ0FBQSxJQUFBRSxDQUFBLHVCQUFBQSxDQUFBLENBQUF1QixNQUFBLElBQUF0QixDQUFBLEtBQUFELENBQUEsR0FBQUMsQ0FBQSxPQUFBdUIsRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFuQixDQUFBLFdBQUFBLEVBQUEsV0FBQWtCLEVBQUEsSUFBQXhCLENBQUEsQ0FBQXVCLE1BQUEsS0FBQUksSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQTVCLENBQUEsQ0FBQXdCLEVBQUEsVUFBQTFCLENBQUEsV0FBQUEsRUFBQUUsQ0FBQSxVQUFBQSxDQUFBLEtBQUE2QixDQUFBLEVBQUFKLENBQUEsZ0JBQUFLLFNBQUEsaUpBQUFDLENBQUEsRUFBQXZCLENBQUEsT0FBQUksQ0FBQSxnQkFBQWMsQ0FBQSxXQUFBQSxFQUFBLElBQUF6QixDQUFBLEdBQUFBLENBQUEsQ0FBQWEsSUFBQSxDQUFBZCxDQUFBLE1BQUFNLENBQUEsV0FBQUEsRUFBQSxRQUFBTixDQUFBLEdBQUFDLENBQUEsQ0FBQStCLElBQUEsV0FBQXhCLENBQUEsR0FBQVIsQ0FBQSxDQUFBMkIsSUFBQSxFQUFBM0IsQ0FBQSxLQUFBRixDQUFBLFdBQUFBLEVBQUFFLENBQUEsSUFBQVksQ0FBQSxPQUFBbUIsQ0FBQSxHQUFBL0IsQ0FBQSxLQUFBNkIsQ0FBQSxXQUFBQSxFQUFBLFVBQUFyQixDQUFBLFlBQUFQLENBQUEsY0FBQUEsQ0FBQSw4QkFBQVcsQ0FBQSxRQUFBbUIsQ0FBQTtBQUFBLFNBQUFULDRCQUFBdEIsQ0FBQSxFQUFBUSxDQUFBLFFBQUFSLENBQUEsMkJBQUFBLENBQUEsU0FBQWlDLGlCQUFBLENBQUFqQyxDQUFBLEVBQUFRLENBQUEsT0FBQVAsQ0FBQSxNQUFBaUMsUUFBQSxDQUFBcEIsSUFBQSxDQUFBZCxDQUFBLEVBQUFtQyxLQUFBLDZCQUFBbEMsQ0FBQSxJQUFBRCxDQUFBLENBQUFvQyxXQUFBLEtBQUFuQyxDQUFBLEdBQUFELENBQUEsQ0FBQW9DLFdBQUEsQ0FBQUMsSUFBQSxhQUFBcEMsQ0FBQSxjQUFBQSxDQUFBLEdBQUFtQixLQUFBLENBQUFrQixJQUFBLENBQUF0QyxDQUFBLG9CQUFBQyxDQUFBLCtDQUFBc0MsSUFBQSxDQUFBdEMsQ0FBQSxJQUFBZ0MsaUJBQUEsQ0FBQWpDLENBQUEsRUFBQVEsQ0FBQTtBQUFBLFNBQUF5QixrQkFBQWpDLENBQUEsRUFBQVEsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQVIsQ0FBQSxDQUFBdUIsTUFBQSxNQUFBZixDQUFBLEdBQUFSLENBQUEsQ0FBQXVCLE1BQUEsWUFBQXpCLENBQUEsTUFBQVEsQ0FBQSxHQUFBYyxLQUFBLENBQUFaLENBQUEsR0FBQVYsQ0FBQSxHQUFBVSxDQUFBLEVBQUFWLENBQUEsSUFBQVEsQ0FBQSxDQUFBUixDQUFBLElBQUFFLENBQUEsQ0FBQUYsQ0FBQSxVQUFBUSxDQUFBLElBVHRDO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFNTyxTQUFTa0MsaUJBQWlCQSxDQUFDQyxLQUEwQixFQUFFQyxLQUFrQixFQUFRO0VBQ3RGLElBQU1DLGVBQStCLEdBQUcsRUFBRTtFQUMxQyxJQUFNQyxvQkFBb0MsR0FBRyxFQUFFO0VBQy9DLFNBQUFDLEVBQUEsTUFBQUMsZUFBQSxHQUE0Q3JDLE1BQU0sQ0FBQ3NDLE9BQU8sQ0FBQ04sS0FBSyxDQUFDLEVBQUFJLEVBQUEsR0FBQUMsZUFBQSxDQUFBdkIsTUFBQSxFQUFBc0IsRUFBQSxJQUFFO0lBQTlELElBQUFHLGtCQUFBLE9BQUFDLGVBQUEsYUFBQUgsZUFBQSxDQUFBRCxFQUFBO01BQU9LLFlBQVksR0FBQUYsa0JBQUE7TUFBRUcsYUFBYSxHQUFBSCxrQkFBQTtJQUNyQztJQUNBLElBQUlFLFlBQVksQ0FBQ0UsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO01BQ2xDO01BQ0EsSUFBSSxJQUFBQyxvQkFBYSxFQUFDRixhQUFhLENBQUMsRUFBRTtRQUNoQ1IsZUFBZSxDQUFDVyxJQUFJLENBQUNILGFBQWEsQ0FBQzs7UUFFbkM7UUFDQSxJQUFJRCxZQUFZLENBQUNLLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUNsQ1gsb0JBQW9CLENBQUNVLElBQUksQ0FBQ0gsYUFBYSxDQUFDO1FBQzFDO01BQ0Y7SUFDRjtFQUNGO0VBRUFLLHVCQUF1QixDQUFDZCxLQUFLLEVBQUVDLGVBQWUsQ0FBQztFQUMvQyxTQUFBYyxHQUFBLE1BQUFDLHFCQUFBLEdBQWtDZCxvQkFBb0IsRUFBQWEsR0FBQSxHQUFBQyxxQkFBQSxDQUFBbkMsTUFBQSxFQUFBa0MsR0FBQSxJQUFFO0lBQW5ELElBQU1FLG1CQUFtQixHQUFBRCxxQkFBQSxDQUFBRCxHQUFBO0lBQzVCRyxtQkFBbUIsQ0FBQ0QsbUJBQW1CLENBQUM7RUFDMUM7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0gsdUJBQXVCQSxDQUFDZCxLQUFrQixFQUFFQyxlQUErQixFQUFFO0VBQzNGO0VBQUEsSUFBQWtCLFNBQUEsR0FBQTVDLDBCQUFBLENBQzZCMEIsZUFBZTtJQUFBbUIsS0FBQTtFQUFBO0lBQTVDLEtBQUFELFNBQUEsQ0FBQW5DLENBQUEsTUFBQW9DLEtBQUEsR0FBQUQsU0FBQSxDQUFBdkQsQ0FBQSxJQUFBcUIsSUFBQSxHQUE4QztNQUFBLElBQW5Db0MsY0FBYyxHQUFBRCxLQUFBLENBQUFsQyxLQUFBO01BQ3ZCLElBQUFvQyxhQUFNLEVBQUN0QixLQUFLLENBQUN1QixPQUFPLENBQUMxQyxNQUFNLEtBQUt3QyxjQUFjLENBQUNHLElBQUksQ0FBQzNDLE1BQU0sQ0FBQztJQUM3RDs7SUFFQTtFQUFBLFNBQUE0QyxHQUFBO0lBQUFOLFNBQUEsQ0FBQS9ELENBQUEsQ0FBQXFFLEdBQUE7RUFBQTtJQUFBTixTQUFBLENBQUFoQyxDQUFBO0VBQUE7RUFBQSxJQUFBdUMsVUFBQSxHQUFBbkQsMEJBQUEsQ0FDNkIwQixlQUFlO0lBQUEwQixNQUFBO0VBQUE7SUFBNUMsS0FBQUQsVUFBQSxDQUFBMUMsQ0FBQSxNQUFBMkMsTUFBQSxHQUFBRCxVQUFBLENBQUE5RCxDQUFBLElBQUFxQixJQUFBLEdBQThDO01BQUEsSUFBbkNvQyxlQUFjLEdBQUFNLE1BQUEsQ0FBQXpDLEtBQUE7TUFDdkIsS0FBSyxJQUFJYixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcyQixLQUFLLENBQUN1QixPQUFPLENBQUMxQyxNQUFNLEVBQUVSLENBQUMsRUFBRSxFQUFFO1FBQzdDLElBQUFpRCxhQUFNLEVBQUN0QixLQUFLLENBQUN1QixPQUFPLENBQUNsRCxDQUFDLENBQUMsQ0FBQ3VELE9BQU8sS0FBS1AsZUFBYyxDQUFDRyxJQUFJLENBQUNuRCxDQUFDLENBQUMsQ0FBQ1EsTUFBTSxDQUFDO01BQ3BFO0lBQ0Y7RUFBQyxTQUFBNEMsR0FBQTtJQUFBQyxVQUFBLENBQUF0RSxDQUFBLENBQUFxRSxHQUFBO0VBQUE7SUFBQUMsVUFBQSxDQUFBdkMsQ0FBQTtFQUFBO0FBQ0g7QUFFTyxTQUFTK0IsbUJBQW1CQSxDQUFDVyxNQUFvQixFQUFFO0VBQ3hEO0VBQ0EsSUFBQVAsYUFBTSxFQUFDckUsS0FBSyxDQUFDNkUsUUFBUSxDQUFDQyxlQUFlLENBQUNGLE1BQU0sQ0FBQ0csSUFBSSxDQUFDLENBQUM7O0VBRW5EO0VBQ0EsSUFBQVYsYUFBTSxFQUFDTyxNQUFNLENBQUNHLElBQUksQ0FBQ0MsUUFBUSxLQUFLLENBQUMsSUFBSUosTUFBTSxDQUFDRyxJQUFJLENBQUNDLFFBQVEsS0FBSyxDQUFDLENBQUM7O0VBRWhFO0VBQ0EsSUFBQVgsYUFBTSxFQUFDckUsS0FBSyxDQUFDNkUsUUFBUSxDQUFDSSxLQUFLLENBQUNMLE1BQU0sQ0FBQ0csSUFBSSxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFckQ7RUFDQTtFQUNBLElBQUFiLGFBQU0sRUFBQ08sTUFBTSxDQUFDRyxJQUFJLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0gsSUFBSSxDQUFDSSxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQ3JEIiwiaWdub3JlTGlzdCI6W119