kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
115 lines (114 loc) • 22 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _switch = _interopRequireDefault(require("../../common/switch"));
var _brushConfig = _interopRequireDefault(require("./brush-config"));
var _tooltipConfig = _interopRequireDefault(require("./tooltip-config"));
var _styledComponents2 = require("../../common/styled-components");
var _icons = require("../../common/icons");
var _localization = require("@kepler.gl/localization");
var _templateObject; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
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 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; }
var StyledInteractionPanel = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding-bottom: 6px;\n"])));
InteractionPanelFactory.deps = [_tooltipConfig["default"], _brushConfig["default"]];
var INTERACTION_CONFIG_ICONS = {
tooltip: _icons.Messages,
geocoder: _icons.Pin,
brush: _icons.Crosshairs,
coordinate: _icons.CursorClick
};
function InteractionPanelFactory(TooltipConfig, BrushConfig) {
var InteractionPanel = function InteractionPanel(_ref) {
var config = _ref.config,
onConfigChange = _ref.onConfigChange,
datasets = _ref.datasets,
setColumnDisplayFormat = _ref.setColumnDisplayFormat,
_ref$interactionConfi = _ref.interactionConfigIcons,
interactionConfigIcons = _ref$interactionConfi === void 0 ? INTERACTION_CONFIG_ICONS : _ref$interactionConfi;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
isConfigActive = _useState2[0],
setIsConfigAction = _useState2[1];
var _updateConfig = (0, _react.useCallback)(function (newProp) {
onConfigChange(_objectSpread(_objectSpread({}, config), newProp));
}, [onConfigChange, config]);
var onDisplayFormatChange = (0, _react.useCallback)(function (dataId, column, displayFormat) {
setColumnDisplayFormat(dataId, (0, _defineProperty2["default"])({}, column, displayFormat));
}, [setColumnDisplayFormat]);
var togglePanelActive = (0, _react.useCallback)(function () {
setIsConfigAction(!isConfigActive);
}, [setIsConfigAction, isConfigActive]);
var enabled = config.enabled;
var toggleEnableConfig = (0, _react.useCallback)(function () {
_updateConfig({
enabled: !enabled
});
}, [_updateConfig, enabled]);
var onChange = (0, _react.useCallback)(function (newConfig) {
return _updateConfig({
config: newConfig
});
}, [_updateConfig]);
var IconComponent = interactionConfigIcons[config.id];
var template = null;
switch (config.id) {
case 'tooltip':
template = /*#__PURE__*/_react["default"].createElement(TooltipConfig, {
datasets: datasets,
config: config.config,
onChange: onChange,
onDisplayFormatChange: onDisplayFormatChange
});
break;
case 'brush':
template = /*#__PURE__*/_react["default"].createElement(BrushConfig, {
config: config.config,
onChange: onChange
});
break;
default:
break;
}
return /*#__PURE__*/_react["default"].createElement(StyledInteractionPanel, {
className: "interaction-panel"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledPanelHeader, {
className: "interaction-panel__header",
onClick: togglePanelActive
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelHeaderContent, {
className: "interaction-panel__header__content"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "interaction-panel__header__icon icon"
}, IconComponent ? /*#__PURE__*/_react["default"].createElement(IconComponent, {
height: "16px"
}) : null), /*#__PURE__*/_react["default"].createElement("div", {
className: "interaction-panel__header__title"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelHeaderTitle, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: config.label
})))), /*#__PURE__*/_react["default"].createElement("div", {
className: "interaction-panel__header__actions"
}, /*#__PURE__*/_react["default"].createElement(_switch["default"], {
checked: config.enabled,
id: "".concat(config.id, "-toggle"),
onChange: toggleEnableConfig,
secondary: true
}))), config.enabled && template && /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelContent, {
className: "interaction-panel__content"
}, template));
};
return InteractionPanel;
}
var _default = exports["default"] = InteractionPanelFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3dpdGNoIiwiX2JydXNoQ29uZmlnIiwiX3Rvb2x0aXBDb25maWciLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfaWNvbnMiLCJfbG9jYWxpemF0aW9uIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU3R5bGVkSW50ZXJhY3Rpb25QYW5lbCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiSW50ZXJhY3Rpb25QYW5lbEZhY3RvcnkiLCJkZXBzIiwiVG9vbHRpcENvbmZpZ0ZhY3RvcnkiLCJCcnVzaENvbmZpZ0ZhY3RvcnkiLCJJTlRFUkFDVElPTl9DT05GSUdfSUNPTlMiLCJ0b29sdGlwIiwiTWVzc2FnZXMiLCJnZW9jb2RlciIsIlBpbiIsImJydXNoIiwiQ3Jvc3NoYWlycyIsImNvb3JkaW5hdGUiLCJDdXJzb3JDbGljayIsIlRvb2x0aXBDb25maWciLCJCcnVzaENvbmZpZyIsIkludGVyYWN0aW9uUGFuZWwiLCJfcmVmIiwiY29uZmlnIiwib25Db25maWdDaGFuZ2UiLCJkYXRhc2V0cyIsInNldENvbHVtbkRpc3BsYXlGb3JtYXQiLCJfcmVmJGludGVyYWN0aW9uQ29uZmkiLCJpbnRlcmFjdGlvbkNvbmZpZ0ljb25zIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNDb25maWdBY3RpdmUiLCJzZXRJc0NvbmZpZ0FjdGlvbiIsIl91cGRhdGVDb25maWciLCJ1c2VDYWxsYmFjayIsIm5ld1Byb3AiLCJvbkRpc3BsYXlGb3JtYXRDaGFuZ2UiLCJkYXRhSWQiLCJjb2x1bW4iLCJkaXNwbGF5Rm9ybWF0IiwidG9nZ2xlUGFuZWxBY3RpdmUiLCJlbmFibGVkIiwidG9nZ2xlRW5hYmxlQ29uZmlnIiwib25DaGFuZ2UiLCJuZXdDb25maWciLCJJY29uQ29tcG9uZW50IiwiaWQiLCJ0ZW1wbGF0ZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJTdHlsZWRQYW5lbEhlYWRlciIsIm9uQ2xpY2siLCJQYW5lbEhlYWRlckNvbnRlbnQiLCJoZWlnaHQiLCJQYW5lbEhlYWRlclRpdGxlIiwiRm9ybWF0dGVkTWVzc2FnZSIsImxhYmVsIiwiY2hlY2tlZCIsImNvbmNhdCIsInNlY29uZGFyeSIsIlBhbmVsQ29udGVudCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2ludGVyYWN0aW9uLXBhbmVsL2ludGVyYWN0aW9uLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZSwgQ29tcG9uZW50VHlwZSwgUmVhY3RFbGVtZW50LCB1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgU3dpdGNoIGZyb20gJy4uLy4uL2NvbW1vbi9zd2l0Y2gnO1xuaW1wb3J0IEJydXNoQ29uZmlnRmFjdG9yeSBmcm9tICcuL2JydXNoLWNvbmZpZyc7XG5pbXBvcnQgVG9vbHRpcENvbmZpZ0ZhY3RvcnkgZnJvbSAnLi90b29sdGlwLWNvbmZpZyc7XG5pbXBvcnQge0RhdGFzZXRzfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7SW50ZXJhY3Rpb25Db25maWcsIFZhbHVlT2Z9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgc2V0Q29sdW1uRGlzcGxheUZvcm1hdCBhcyBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0QWN0aW9uLFxuICBBY3Rpb25IYW5kbGVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIFN0eWxlZFBhbmVsSGVhZGVyLFxuICBQYW5lbEhlYWRlclRpdGxlLFxuICBQYW5lbEhlYWRlckNvbnRlbnQsXG4gIFBhbmVsQ29udGVudFxufSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtNZXNzYWdlcywgQ3Jvc3NoYWlycywgQ3Vyc29yQ2xpY2ssIFBpbn0gZnJvbSAnLi4vLi4vY29tbW9uL2ljb25zJztcblxuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5cbmludGVyZmFjZSBJbnRlcmFjdGlvblBhbmVsUHJvcHMge1xuICBkYXRhc2V0czogRGF0YXNldHM7XG4gIGNvbmZpZzogVmFsdWVPZjxJbnRlcmFjdGlvbkNvbmZpZz47XG4gIG9uQ29uZmlnQ2hhbmdlOiBhbnk7XG4gIGludGVyYWN0aW9uQ29uZmlnSWNvbnM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogUmVhY3QuRWxlbWVudFR5cGU7XG4gIH07XG4gIHNldENvbHVtbkRpc3BsYXlGb3JtYXQ6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHNldENvbHVtbkRpc3BsYXlGb3JtYXRBY3Rpb24+O1xufVxuXG5jb25zdCBTdHlsZWRJbnRlcmFjdGlvblBhbmVsID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZy1ib3R0b206IDZweDtcbmA7XG5cbkludGVyYWN0aW9uUGFuZWxGYWN0b3J5LmRlcHMgPSBbVG9vbHRpcENvbmZpZ0ZhY3RvcnksIEJydXNoQ29uZmlnRmFjdG9yeV07XG5cbmNvbnN0IElOVEVSQUNUSU9OX0NPTkZJR19JQ09OUzoge1trZXk6IHN0cmluZ106IFJlYWN0LkVsZW1lbnRUeXBlfSA9IHtcbiAgdG9vbHRpcDogTWVzc2FnZXMsXG4gIGdlb2NvZGVyOiBQaW4sXG4gIGJydXNoOiBDcm9zc2hhaXJzLFxuICBjb29yZGluYXRlOiBDdXJzb3JDbGlja1xufTtcblxuZnVuY3Rpb24gSW50ZXJhY3Rpb25QYW5lbEZhY3RvcnkoXG4gIFRvb2x0aXBDb25maWc6IFJldHVyblR5cGU8dHlwZW9mIFRvb2x0aXBDb25maWdGYWN0b3J5PixcbiAgQnJ1c2hDb25maWc6IFJldHVyblR5cGU8dHlwZW9mIEJydXNoQ29uZmlnRmFjdG9yeT5cbik6IENvbXBvbmVudFR5cGU8SW50ZXJhY3Rpb25QYW5lbFByb3BzPiB7XG4gIGNvbnN0IEludGVyYWN0aW9uUGFuZWw6IFJlYWN0LkZDPEludGVyYWN0aW9uUGFuZWxQcm9wcz4gPSAoe1xuICAgIGNvbmZpZyxcbiAgICBvbkNvbmZpZ0NoYW5nZSxcbiAgICBkYXRhc2V0cyxcbiAgICBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0LFxuICAgIGludGVyYWN0aW9uQ29uZmlnSWNvbnMgPSBJTlRFUkFDVElPTl9DT05GSUdfSUNPTlNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IFtpc0NvbmZpZ0FjdGl2ZSwgc2V0SXNDb25maWdBY3Rpb25dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3QgX3VwZGF0ZUNvbmZpZyA9IHVzZUNhbGxiYWNrKFxuICAgICAgbmV3UHJvcCA9PiB7XG4gICAgICAgIG9uQ29uZmlnQ2hhbmdlKHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgLi4ubmV3UHJvcFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBbb25Db25maWdDaGFuZ2UsIGNvbmZpZ11cbiAgICApO1xuXG4gICAgY29uc3Qgb25EaXNwbGF5Rm9ybWF0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZGF0YUlkLCBjb2x1bW4sIGRpc3BsYXlGb3JtYXQpID0+IHtcbiAgICAgICAgc2V0Q29sdW1uRGlzcGxheUZvcm1hdChkYXRhSWQsIHtbY29sdW1uXTogZGlzcGxheUZvcm1hdH0pO1xuICAgICAgfSxcbiAgICAgIFtzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0XVxuICAgICk7XG5cbiAgICBjb25zdCB0b2dnbGVQYW5lbEFjdGl2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHNldElzQ29uZmlnQWN0aW9uKCFpc0NvbmZpZ0FjdGl2ZSk7XG4gICAgfSwgW3NldElzQ29uZmlnQWN0aW9uLCBpc0NvbmZpZ0FjdGl2ZV0pO1xuXG4gICAgY29uc3Qge2VuYWJsZWR9ID0gY29uZmlnO1xuICAgIGNvbnN0IHRvZ2dsZUVuYWJsZUNvbmZpZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIF91cGRhdGVDb25maWcoe2VuYWJsZWQ6ICFlbmFibGVkfSk7XG4gICAgfSwgW191cGRhdGVDb25maWcsIGVuYWJsZWRdKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2sobmV3Q29uZmlnID0+IF91cGRhdGVDb25maWcoe2NvbmZpZzogbmV3Q29uZmlnfSksIFtfdXBkYXRlQ29uZmlnXSk7XG5cbiAgICBjb25zdCBJY29uQ29tcG9uZW50ID0gaW50ZXJhY3Rpb25Db25maWdJY29uc1tjb25maWcuaWRdO1xuXG4gICAgbGV0IHRlbXBsYXRlOiBSZWFjdEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIHN3aXRjaCAoY29uZmlnLmlkKSB7XG4gICAgICBjYXNlICd0b29sdGlwJzpcbiAgICAgICAgdGVtcGxhdGUgPSAoXG4gICAgICAgICAgPFRvb2x0aXBDb25maWdcbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGNvbmZpZz17Y29uZmlnLmNvbmZpZ31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgIG9uRGlzcGxheUZvcm1hdENoYW5nZT17b25EaXNwbGF5Rm9ybWF0Q2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYnJ1c2gnOlxuICAgICAgICB0ZW1wbGF0ZSA9IDxCcnVzaENvbmZpZyBjb25maWc9e2NvbmZpZy5jb25maWd9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz47XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRJbnRlcmFjdGlvblBhbmVsIGNsYXNzTmFtZT1cImludGVyYWN0aW9uLXBhbmVsXCI+XG4gICAgICAgIDxTdHlsZWRQYW5lbEhlYWRlciBjbGFzc05hbWU9XCJpbnRlcmFjdGlvbi1wYW5lbF9faGVhZGVyXCIgb25DbGljaz17dG9nZ2xlUGFuZWxBY3RpdmV9PlxuICAgICAgICAgIDxQYW5lbEhlYWRlckNvbnRlbnQgY2xhc3NOYW1lPVwiaW50ZXJhY3Rpb24tcGFuZWxfX2hlYWRlcl9fY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnRlcmFjdGlvbi1wYW5lbF9faGVhZGVyX19pY29uIGljb25cIj5cbiAgICAgICAgICAgICAge0ljb25Db21wb25lbnQgPyA8SWNvbkNvbXBvbmVudCBoZWlnaHQ9XCIxNnB4XCIgLz4gOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImludGVyYWN0aW9uLXBhbmVsX19oZWFkZXJfX3RpdGxlXCI+XG4gICAgICAgICAgICAgIDxQYW5lbEhlYWRlclRpdGxlPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXtjb25maWcubGFiZWx9IC8+XG4gICAgICAgICAgICAgIDwvUGFuZWxIZWFkZXJUaXRsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUGFuZWxIZWFkZXJDb250ZW50PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW50ZXJhY3Rpb24tcGFuZWxfX2hlYWRlcl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICBjaGVja2VkPXtjb25maWcuZW5hYmxlZH1cbiAgICAgICAgICAgICAgaWQ9e2Ake2NvbmZpZy5pZH0tdG9nZ2xlYH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RvZ2dsZUVuYWJsZUNvbmZpZ31cbiAgICAgICAgICAgICAgc2Vjb25kYXJ5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1N0eWxlZFBhbmVsSGVhZGVyPlxuICAgICAgICB7Y29uZmlnLmVuYWJsZWQgJiYgdGVtcGxhdGUgJiYgKFxuICAgICAgICAgIDxQYW5lbENvbnRlbnQgY2xhc3NOYW1lPVwiaW50ZXJhY3Rpb24tcGFuZWxfX2NvbnRlbnRcIj57dGVtcGxhdGV9PC9QYW5lbENvbnRlbnQ+XG4gICAgICAgICl9XG4gICAgICA8L1N0eWxlZEludGVyYWN0aW9uUGFuZWw+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gSW50ZXJhY3Rpb25QYW5lbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJhY3Rpb25QYW5lbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEs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
;