kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
98 lines (97 loc) • 18.4 kB
JavaScript
"use strict";
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 _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _moment = _interopRequireDefault(require("moment"));
var _icons = require("../common/icons");
var _localization = require("@kepler.gl/localization");
var _templateObject, _templateObject2, _templateObject3, _templateObject4; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
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; })(); }
var imageH = 108;
var StyledAssetGallery = _styledComponents["default"].div.attrs({
className: 'storage-asset-gallery'
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: flex-start;\n flex-wrap: wrap;\n"])));
var StyledAssetItem = _styledComponents["default"].div.attrs({
className: 'asset__item'
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: 23%;\n margin-right: 2%;\n max-width: 500px;\n margin-bottom: 40px;\n height: 245px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n :last {\n margin-right: 0;\n }\n\n .asset__title {\n font-size: 12px;\n font-weight: 500;\n color: ", ";\n line-height: 18px;\n height: 32px;\n }\n\n .asset__image {\n border-radius: 4px;\n overflow: hidden;\n margin-bottom: 12px;\n opacity: 0.9;\n transition: opacity 0.4s ease;\n position: relative;\n line-height: 0;\n height: ", "px;\n flex-shrink: 0;\n\n img {\n max-width: 100%;\n }\n &:hover {\n cursor: pointer;\n opacity: 1;\n }\n }\n\n .asset__image__caption {\n font-size: 11px;\n font-weight: 400;\n line-height: 16px;\n margin-top: 10px;\n height: 48px;\n overflow: hidden;\n display: -webkit-box;\n text-overflow: ellipsis;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n\n .asset__last-updated {\n font-size: 11px;\n color: ", ";\n }\n"])), function (props) {
return props.theme.textColorLT;
}, imageH, function (props) {
return props.theme.textColorLT;
});
var BackLink = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n font-size: 14px;\n align-items: center;\n color: ", ";\n cursor: pointer;\n margin-bottom: 40px;\n\n &:hover {\n font-weight: 500;\n }\n\n span {\n white-space: nowrap;\n }\n svg {\n margin-right: 10px;\n }\n"])), function (props) {
return props.theme.titleColorLT;
});
var StyledError = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: red;\n font-size: 14px;\n margin-bottom: 16px;\n"])));
var getDuration = function getDuration() {
var last = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return _moment["default"].duration(new Date().valueOf() - last).humanize();
};
var AssetItem = function AssetItem(_ref) {
var asset = _ref.asset,
onClick = _ref.onClick;
return /*#__PURE__*/_react["default"].createElement(StyledAssetItem, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "asset__image",
onClick: onClick
}, asset.imageUrl && /*#__PURE__*/_react["default"].createElement("img", {
src: asset.imageUrl
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "asset__title"
}, asset.label || asset.title), /*#__PURE__*/_react["default"].createElement("div", {
className: "asset__image__caption"
}, asset.description), asset.lastUpdated ? /*#__PURE__*/_react["default"].createElement("div", {
className: "asset__last-updated"
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.storageMapViewer.lastModified',
values: {
lastUpdated: getDuration(asset.lastUpdated)
}
})) : null);
};
var StorageAssetsViewer = /*#__PURE__*/function (_React$Component) {
function StorageAssetsViewer() {
(0, _classCallCheck2["default"])(this, StorageAssetsViewer);
return _callSuper(this, StorageAssetsViewer, arguments);
}
(0, _inherits2["default"])(StorageAssetsViewer, _React$Component);
return (0, _createClass2["default"])(StorageAssetsViewer, [{
key: "render",
value: function render() {
var _this$props = this.props,
assets = _this$props.assets,
onLoadAsset = _this$props.onLoadAsset,
back = _this$props.back,
error = _this$props.error;
return /*#__PURE__*/_react["default"].createElement("div", {
className: "storage-asset-viewer"
}, /*#__PURE__*/_react["default"].createElement(BackLink, {
onClick: back
}, /*#__PURE__*/_react["default"].createElement(_icons.LeftArrow, {
height: "12px"
}), /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'modal.storageMapViewer.back'
}))), error && /*#__PURE__*/_react["default"].createElement(StyledError, null, error.message), /*#__PURE__*/_react["default"].createElement(StyledAssetGallery, null, assets.map(function (sp) {
return /*#__PURE__*/_react["default"].createElement(AssetItem, {
asset: sp,
key: sp.id,
onClick: function onClick() {
return onLoadAsset(sp);
}
});
})));
}
}]);
}(_react["default"].Component);
var _default = exports["default"] = StorageAssetsViewer;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZWRDb21wb25lbnRzIiwiX21vbWVudCIsIl9pY29ucyIsIl9sb2NhbGl6YXRpb24iLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsImltYWdlSCIsIlN0eWxlZEFzc2V0R2FsbGVyeSIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJTdHlsZWRBc3NldEl0ZW0iLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yTFQiLCJCYWNrTGluayIsInRpdGxlQ29sb3JMVCIsIlN0eWxlZEVycm9yIiwiZ2V0RHVyYXRpb24iLCJsYXN0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwibW9tZW50IiwiZHVyYXRpb24iLCJEYXRlIiwiaHVtYW5pemUiLCJBc3NldEl0ZW0iLCJfcmVmIiwiYXNzZXQiLCJvbkNsaWNrIiwiY3JlYXRlRWxlbWVudCIsImltYWdlVXJsIiwic3JjIiwibGFiZWwiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGFzdFVwZGF0ZWQiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiaWQiLCJ2YWx1ZXMiLCJTdG9yYWdlQXNzZXRzVmlld2VyIiwiX1JlYWN0JENvbXBvbmVudCIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJhc3NldHMiLCJvbkxvYWRBc3NldCIsImJhY2siLCJlcnJvciIsIkxlZnRBcnJvdyIsImhlaWdodCIsIm1lc3NhZ2UiLCJtYXAiLCJzcCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGFscy9zdG9yYWdlLW1hcC12aWV3ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7TGVmdEFycm93fSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5cbmNvbnN0IGltYWdlSCA9IDEwODtcblxuY29uc3QgU3R5bGVkQXNzZXRHYWxsZXJ5ID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3N0b3JhZ2UtYXNzZXQtZ2FsbGVyeSdcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZsZXgtd3JhcDogd3JhcDtcbmA7XG5cbmNvbnN0IFN0eWxlZEFzc2V0SXRlbSA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdhc3NldF9faXRlbSdcbn0pYFxuICB3aWR0aDogMjMlO1xuICBtYXJnaW4tcmlnaHQ6IDIlO1xuICBtYXgtd2lkdGg6IDUwMHB4O1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICBoZWlnaHQ6IDI0NXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgOmxhc3Qge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuXG4gIC5hc3NldF9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICBoZWlnaHQ6IDMycHg7XG4gIH1cblxuICAuYXNzZXRfX2ltYWdlIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIG9wYWNpdHk6IDAuOTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgaGVpZ2h0OiAke2ltYWdlSH1weDtcbiAgICBmbGV4LXNocmluazogMDtcblxuICAgIGltZyB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgICY6aG92ZXIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cblxuICAuYXNzZXRfX2ltYWdlX19jYXB0aW9uIHtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB9XG5cbiAgLmFzc2V0X19sYXN0LXVwZGF0ZWQge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JMVH07XG4gIH1cbmA7XG5cbmNvbnN0IEJhY2tMaW5rID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50aXRsZUNvbG9yTFR9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDQwcHg7XG5cbiAgJjpob3ZlciB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgfVxuXG4gIHNwYW4ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbiAgc3ZnIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZEVycm9yID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6IHJlZDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuYDtcblxuY29uc3QgZ2V0RHVyYXRpb24gPSAobGFzdCA9IDApID0+IG1vbWVudC5kdXJhdGlvbihuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIGxhc3QpLmh1bWFuaXplKCk7XG5cbmludGVyZmFjZSBBc3NldCB7XG4gIGltYWdlVXJsPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlZD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBBc3NldEl0ZW1Qcm9wcyB7XG4gIGFzc2V0OiBBc3NldDtcbiAgb25DbGljazogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufVxuXG5jb25zdCBBc3NldEl0ZW06IFJlYWN0LkZDPEFzc2V0SXRlbVByb3BzPiA9ICh7YXNzZXQsIG9uQ2xpY2t9KSA9PiAoXG4gIDxTdHlsZWRBc3NldEl0ZW0+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJhc3NldF9faW1hZ2VcIiBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgIHthc3NldC5pbWFnZVVybCAmJiA8aW1nIHNyYz17YXNzZXQuaW1hZ2VVcmx9IC8+fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYXNzZXRfX3RpdGxlXCI+e2Fzc2V0LmxhYmVsIHx8IGFzc2V0LnRpdGxlfTwvZGl2PlxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYXNzZXRfX2ltYWdlX19jYXB0aW9uXCI+e2Fzc2V0LmRlc2NyaXB0aW9ufTwvZGl2PlxuICAgIHthc3NldC5sYXN0VXBkYXRlZCA/IChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXNzZXRfX2xhc3QtdXBkYXRlZFwiPlxuICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgIGlkPXsnbW9kYWwuc3RvcmFnZU1hcFZpZXdlci5sYXN0TW9kaWZpZWQnfVxuICAgICAgICAgIHZhbHVlcz17e2xhc3RVcGRhdGVkOiBnZXREdXJhdGlvbihhc3NldC5sYXN0VXBkYXRlZCl9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKSA6IG51bGx9XG4gIDwvU3R5bGVkQXNzZXRJdGVtPlxuKTtcblxuaW50ZXJmYWNlIFN0b3JhZ2VBc3NldHNWaWV3ZXJQcm9wcyB7XG4gIGFzc2V0czogQXNzZXRbXTtcbiAgb25Mb2FkQXNzZXQ6IChhc3NldDogQXNzZXQpID0+IHZvaWQ7XG4gIGJhY2s/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIGVycm9yPzoge21lc3NhZ2U/OiBzdHJpbmd9O1xufVxuXG5jbGFzcyBTdG9yYWdlQXNzZXRzVmlld2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFN0b3JhZ2VBc3NldHNWaWV3ZXJQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2Fzc2V0cywgb25Mb2FkQXNzZXQsIGJhY2ssIGVycm9yfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdG9yYWdlLWFzc2V0LXZpZXdlclwiPlxuICAgICAgICA8QmFja0xpbmsgb25DbGljaz17YmFja30+XG4gICAgICAgICAgPExlZnRBcnJvdyBoZWlnaHQ9XCIxMnB4XCIgLz5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc3RvcmFnZU1hcFZpZXdlci5iYWNrJ30gLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvQmFja0xpbms+XG4gICAgICAgIHtlcnJvciAmJiA8U3R5bGVkRXJyb3I+e2Vycm9yLm1lc3NhZ2V9PC9TdHlsZWRFcnJvcj59XG4gICAgICAgIDxTdHlsZWRBc3NldEdhbGxlcnk+XG4gICAgICAgICAge2Fzc2V0cy5tYXAoc3AgPT4gKFxuICAgICAgICAgICAgPEFzc2V0SXRlbSBhc3NldD17c3B9IGtleT17c3AuaWR9IG9uQ2xpY2s9eygpID0+IG9uTG9hZEFzc2V0KHNwKX0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TdHlsZWRBc3NldEdhbGxlcnk+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0b3JhZ2VBc3NldHNWaWV3ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBSixPQUFBO0FBQXlELElBQUFLLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFQekQ7QUFDQTtBQUFBLFNBQUFDLFdBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFELENBQUEsT0FBQUUsZ0JBQUEsYUFBQUYsQ0FBQSxPQUFBRywyQkFBQSxhQUFBSixDQUFBLEVBQUFLLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBTixDQUFBLEVBQUFDLENBQUEsWUFBQUMsZ0JBQUEsYUFBQUgsQ0FBQSxFQUFBUSxXQUFBLElBQUFQLENBQUEsQ0FBQVEsS0FBQSxDQUFBVCxDQUFBLEVBQUFFLENBQUE7QUFBQSxTQUFBRywwQkFBQSxjQUFBTCxDQUFBLElBQUFVLE9BQUEsQ0FBQUMsU0FBQSxDQUFBQyxPQUFBLENBQUFDLElBQUEsQ0FBQVAsT0FBQSxDQUFBQyxTQUFBLENBQUFHLE9BQUEsaUNBQUFWLENBQUEsYUFBQUsseUJBQUEsWUFBQUEsMEJBQUEsYUFBQUwsQ0FBQTtBQVFBLElBQU1jLE1BQU0sR0FBRyxHQUFHO0FBRWxCLElBQU1DLGtCQUFrQixHQUFHQyw0QkFBTSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQztFQUMxQ0MsU0FBUyxFQUFFO0FBQ2IsQ0FBQyxDQUFDLENBQUF4QixlQUFBLEtBQUFBLGVBQUEsT0FBQXlCLHVCQUFBLDRGQUlEO0FBRUQsSUFBTUMsZUFBZSxHQUFHTCw0QkFBTSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQztFQUN2Q0MsU0FBUyxFQUFFO0FBQ2IsQ0FBQyxDQUFDLENBQUF2QixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBd0IsdUJBQUEsZ2tDQWlCVyxVQUFBRSxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNDLFdBQVc7QUFBQSxHQWEvQlYsTUFBTSxFQTJCUCxVQUFBUSxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNDLFdBQVc7QUFBQSxFQUU1QztBQUVELElBQU1DLFFBQVEsR0FBR1QsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBcEIsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXVCLHVCQUFBLDhRQUloQixVQUFBRSxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNHLFlBQVk7QUFBQSxFQWMzQztBQUVELElBQU1DLFdBQVcsR0FBR1gsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBbkIsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXNCLHVCQUFBLGlGQUk3QjtBQUVELElBQU1RLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBO0VBQUEsSUFBSUMsSUFBSSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDO0VBQUEsT0FBS0csa0JBQU0sQ0FBQ0MsUUFBUSxDQUFDLElBQUlDLElBQUksQ0FBQyxDQUFDLENBQUN2QixPQUFPLENBQUMsQ0FBQyxHQUFHaUIsSUFBSSxDQUFDLENBQUNPLFFBQVEsQ0FBQyxDQUFDO0FBQUE7QUFnQnpGLElBQU1DLFNBQW1DLEdBQUcsU0FBdENBLFNBQW1DQSxDQUFBQyxJQUFBO0VBQUEsSUFBS0MsS0FBSyxHQUFBRCxJQUFBLENBQUxDLEtBQUs7SUFBRUMsT0FBTyxHQUFBRixJQUFBLENBQVBFLE9BQU87RUFBQSxvQkFDMURwRCxNQUFBLFlBQUFxRCxhQUFBLENBQUNwQixlQUFlLHFCQUNkakMsTUFBQSxZQUFBcUQsYUFBQTtJQUFLdEIsU0FBUyxFQUFDLGNBQWM7SUFBQ3FCLE9BQU8sRUFBRUE7RUFBUSxHQUM1Q0QsS0FBSyxDQUFDRyxRQUFRLGlCQUFJdEQsTUFBQSxZQUFBcUQsYUFBQTtJQUFLRSxHQUFHLEVBQUVKLEtBQUssQ0FBQ0c7RUFBUyxDQUFFLENBQzNDLENBQUMsZUFDTnRELE1BQUEsWUFBQXFELGFBQUE7SUFBS3RCLFNBQVMsRUFBQztFQUFjLEdBQUVvQixLQUFLLENBQUNLLEtBQUssSUFBSUwsS0FBSyxDQUFDTSxLQUFXLENBQUMsZUFDaEV6RCxNQUFBLFlBQUFxRCxhQUFBO0lBQUt0QixTQUFTLEVBQUM7RUFBdUIsR0FBRW9CLEtBQUssQ0FBQ08sV0FBaUIsQ0FBQyxFQUMvRFAsS0FBSyxDQUFDUSxXQUFXLGdCQUNoQjNELE1BQUEsWUFBQXFELGFBQUE7SUFBS3RCLFNBQVMsRUFBQztFQUFxQixnQkFDbEMvQixNQUFBLFlBQUFxRCxhQUFBLENBQUMvQyxhQUFBLENBQUFzRCxnQkFBZ0I7SUFDZkMsRUFBRSxFQUFFLHFDQUFzQztJQUMxQ0MsTUFBTSxFQUFFO01BQUNILFdBQVcsRUFBRW5CLFdBQVcsQ0FBQ1csS0FBSyxDQUFDUSxXQUFXO0lBQUM7RUFBRSxDQUN2RCxDQUNFLENBQUMsR0FDSixJQUNXLENBQUM7QUFBQSxDQUNuQjtBQUFDLElBU0lJLG1CQUFtQiwwQkFBQUMsZ0JBQUE7RUFBQSxTQUFBRCxvQkFBQTtJQUFBLElBQUFFLGdCQUFBLG1CQUFBRixtQkFBQTtJQUFBLE9BQUFwRCxVQUFBLE9BQUFvRCxtQkFBQSxFQUFBckIsU0FBQTtFQUFBO0VBQUEsSUFBQXdCLFVBQUEsYUFBQUgsbUJBQUEsRUFBQUMsZ0JBQUE7RUFBQSxXQUFBRyxhQUFBLGFBQUFKLG1CQUFBO0lBQUFLLEdBQUE7SUFBQUMsS0FBQSxFQUN2QixTQUFBQyxNQUFNQSxDQUFBLEVBQUc7TUFDUCxJQUFBQyxXQUFBLEdBQTJDLElBQUksQ0FBQ3JDLEtBQUs7UUFBOUNzQyxNQUFNLEdBQUFELFdBQUEsQ0FBTkMsTUFBTTtRQUFFQyxXQUFXLEdBQUFGLFdBQUEsQ0FBWEUsV0FBVztRQUFFQyxJQUFJLEdBQUFILFdBQUEsQ0FBSkcsSUFBSTtRQUFFQyxLQUFLLEdBQUFKLFdBQUEsQ0FBTEksS0FBSztNQUV2QyxvQkFDRTNFLE1BQUEsWUFBQXFELGFBQUE7UUFBS3RCLFNBQVMsRUFBQztNQUFzQixnQkFDbkMvQixNQUFBLFlBQUFxRCxhQUFBLENBQUNoQixRQUFRO1FBQUNlLE9BQU8sRUFBRXNCO01BQUssZ0JBQ3RCMUUsTUFBQSxZQUFBcUQsYUFBQSxDQUFDaEQsTUFBQSxDQUFBdUUsU0FBUztRQUFDQyxNQUFNLEVBQUM7TUFBTSxDQUFFLENBQUMsZUFDM0I3RSxNQUFBLFlBQUFxRCxhQUFBLDRCQUNFckQsTUFBQSxZQUFBcUQsYUFBQSxDQUFDL0MsYUFBQSxDQUFBc0QsZ0JBQWdCO1FBQUNDLEVBQUUsRUFBRTtNQUE4QixDQUFFLENBQ2xELENBQ0UsQ0FBQyxFQUNWYyxLQUFLLGlCQUFJM0UsTUFBQSxZQUFBcUQsYUFBQSxDQUFDZCxXQUFXLFFBQUVvQyxLQUFLLENBQUNHLE9BQXFCLENBQUMsZUFDcEQ5RSxNQUFBLFlBQUFxRCxhQUFBLENBQUMxQixrQkFBa0IsUUFDaEI2QyxNQUFNLENBQUNPLEdBQUcsQ0FBQyxVQUFBQyxFQUFFO1FBQUEsb0JBQ1poRixNQUFBLFlBQUFxRCxhQUFBLENBQUNKLFNBQVM7VUFBQ0UsS0FBSyxFQUFFNkIsRUFBRztVQUFDWixHQUFHLEVBQUVZLEVBQUUsQ0FBQ25CLEVBQUc7VUFBQ1QsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7WUFBQSxPQUFRcUIsV0FBVyxDQUFDTyxFQUFFLENBQUM7VUFBQTtRQUFDLENBQUUsQ0FBQztNQUFBLENBQ3JFLENBQ2lCLENBQ2pCLENBQUM7SUFFVjtFQUFDO0FBQUEsRUFwQitCQyxpQkFBSyxDQUFDQyxTQUFTO0FBQUEsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLGNBdUJsQ3JCLG1CQUFtQiIsImlnbm9yZUxpc3QiOltdfQ==