UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

110 lines (109 loc) 26.2 kB
"use strict"; 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 _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _reactIntl = require("react-intl"); var _reducers = require("@kepler.gl/reducers"); var _actions = require("@kepler.gl/actions"); var _components = require("@kepler.gl/components"); var _actions2 = require("../actions"); var _aiAssistantConfig = _interopRequireDefault(require("./ai-assistant-config")); var _aiAssistantComponent = _interopRequireDefault(require("./ai-assistant-component")); var _templateObject, _templateObject2, _templateObject3, _templateObject4; // 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 StyledAiAssistantPanelContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n pointer-events: none !important; /* prevent padding from blocking input */\n flex-grow: 1;\n justify-content: space-between;\n overflow: hidden;\n height: 100%;\n min-width: ", "px;\n max-width: ", "px;\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }\n"])), function (props) { return props.theme.aiAssistantPanelWidth; }, function (props) { return props.theme.aiAssistantPanelWidth; }); var StyledAiAssistantPanel = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n top: 0;\n background-color: ", ";\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n overflow: hidden;\n"])), function (props) { return props.theme.sidePanelBg; }); var StyledAiAssistantPanelHeader = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 16px 16px 4px 16px;\n border-bottom: 1px solid ", ";\n color: ", ";\n"])), function (props) { return props.theme.borderColor; }, function (props) { return props.theme.subtextColorActive; }); var StyledAiAssistantPanelContent = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n color: ", ";\n padding: 10px 0px 10px 0px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n height: 100%;\n"])), function (props) { return props.theme.sidePanelScrollBar; }, function (props) { return props.theme.subtextColorActive; }); AiAssistantManagerFactory.deps = [_components.SidePanelTitleFactory, _aiAssistantConfig["default"], _aiAssistantComponent["default"]]; function AiAssistantManagerFactory(SidePanelTitle, AiAssistantConfig, AiAssistantComponent) { var AiAssistantManager = function AiAssistantManager(props) { var intl = props.intl, aiAssistantActions = props.aiAssistantActions, aiAssistant = props.aiAssistant, children = props.children, keplerGlActions = props.keplerGlActions, mapStyle = props.mapStyle, visState = props.visState; var onConfigButtonClick = (0, _react.useCallback)(function () { // set aiAssistant.config.isReady to false so we can render the config component aiAssistantActions.updateAiAssistantConfig(_objectSpread(_objectSpread({}, aiAssistant.config), {}, { isReady: false })); }, [aiAssistant.config, aiAssistantActions]); return /*#__PURE__*/_react["default"].createElement(StyledAiAssistantPanelContainer, { className: "ai-assistant-manager" }, /*#__PURE__*/_react["default"].createElement(StyledAiAssistantPanel, null, /*#__PURE__*/_react["default"].createElement(StyledAiAssistantPanelHeader, null, /*#__PURE__*/_react["default"].createElement(SidePanelTitle, { className: "ai-assistant-manager-title", title: intl.formatMessage({ id: 'aiAssistantManager.title', defaultMessage: 'AI Assistant' }) }, /*#__PURE__*/_react["default"].createElement(_components.Icons.Settings, { onClick: onConfigButtonClick }))), /*#__PURE__*/_react["default"].createElement(StyledAiAssistantPanelContent, null, !aiAssistant.config.isReady ? /*#__PURE__*/_react["default"].createElement(AiAssistantConfig, { aiAssistantConfig: aiAssistant.config, updateAiAssistantConfig: aiAssistantActions.updateAiAssistantConfig }) : /*#__PURE__*/_react["default"].createElement(AiAssistantComponent, { aiAssistant: aiAssistant, updateAiAssistantMessages: aiAssistantActions.updateAiAssistantMessages, setStartScreenCapture: aiAssistantActions.setStartScreenCapture, setScreenCaptured: aiAssistantActions.setScreenCaptured, keplerGlActions: keplerGlActions, mapStyle: mapStyle, visState: visState }))), children); }; return (0, _components.withState)([_reducers.visStateLens, _reducers.mapStyleLens], function (state) { // todo: find a better way to get the state key var stateKey = Object.keys(state)[0]; return { aiAssistant: state[stateKey].aiAssistant }; }, { keplerGlActions: { mapStyleChange: _actions.mapStyleChange, loadFiles: _actions.loadFiles, addDataToMap: _actions.addDataToMap, addLayer: _actions.addLayer, createOrUpdateFilter: _actions.createOrUpdateFilter, setFilter: _actions.setFilter, setFilterPlot: _actions.setFilterPlot, layerSetIsValid: _actions.layerSetIsValid, layerVisualChannelConfigChange: _actions.layerVisualChannelConfigChange }, aiAssistantActions: { updateAiAssistantConfig: _actions2.updateAiAssistantConfig, updateAiAssistantMessages: _actions2.updateAiAssistantMessages, setStartScreenCapture: _actions2.setStartScreenCapture, setScreenCaptured: _actions2.setScreenCaptured } })((0, _reactIntl.injectIntl)(AiAssistantManager)); } var _default = exports["default"] = AiAssistantManagerFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX3JlZHVjZXJzIiwiX2FjdGlvbnMiLCJfY29tcG9uZW50cyIsIl9hY3Rpb25zMiIsIl9haUFzc2lzdGFudENvbmZpZyIsIl9haUFzc2lzdGFudENvbXBvbmVudCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlN0eWxlZEFpQXNzaXN0YW50UGFuZWxDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJhaUFzc2lzdGFudFBhbmVsV2lkdGgiLCJTdHlsZWRBaUFzc2lzdGFudFBhbmVsIiwic2lkZVBhbmVsQmciLCJTdHlsZWRBaUFzc2lzdGFudFBhbmVsSGVhZGVyIiwiYm9yZGVyQ29sb3IiLCJzdWJ0ZXh0Q29sb3JBY3RpdmUiLCJTdHlsZWRBaUFzc2lzdGFudFBhbmVsQ29udGVudCIsInNpZGVQYW5lbFNjcm9sbEJhciIsIkFpQXNzaXN0YW50TWFuYWdlckZhY3RvcnkiLCJkZXBzIiwiU2lkZVBhbmVsVGl0bGVGYWN0b3J5IiwiQWlBc3Npc3RhbnRDb25maWdGYWN0b3J5IiwiQWlBc3Npc3RhbnRDb21wb25lbnRGYWN0b3J5IiwiU2lkZVBhbmVsVGl0bGUiLCJBaUFzc2lzdGFudENvbmZpZyIsIkFpQXNzaXN0YW50Q29tcG9uZW50IiwiQWlBc3Npc3RhbnRNYW5hZ2VyIiwiaW50bCIsImFpQXNzaXN0YW50QWN0aW9ucyIsImFpQXNzaXN0YW50IiwiY2hpbGRyZW4iLCJrZXBsZXJHbEFjdGlvbnMiLCJtYXBTdHlsZSIsInZpc1N0YXRlIiwib25Db25maWdCdXR0b25DbGljayIsInVzZUNhbGxiYWNrIiwidXBkYXRlQWlBc3Npc3RhbnRDb25maWciLCJjb25maWciLCJpc1JlYWR5IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInRpdGxlIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiZGVmYXVsdE1lc3NhZ2UiLCJJY29ucyIsIlNldHRpbmdzIiwib25DbGljayIsImFpQXNzaXN0YW50Q29uZmlnIiwidXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyIsInNldFN0YXJ0U2NyZWVuQ2FwdHVyZSIsInNldFNjcmVlbkNhcHR1cmVkIiwid2l0aFN0YXRlIiwidmlzU3RhdGVMZW5zIiwibWFwU3R5bGVMZW5zIiwic3RhdGUiLCJzdGF0ZUtleSIsIm1hcFN0eWxlQ2hhbmdlIiwibG9hZEZpbGVzIiwiYWRkRGF0YVRvTWFwIiwiYWRkTGF5ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlciIsInNldEZpbHRlciIsInNldEZpbHRlclBsb3QiLCJsYXllclNldElzVmFsaWQiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJpbmplY3RJbnRsIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYWktYXNzaXN0YW50LW1hbmFnZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7aW5qZWN0SW50bCwgSW50bFNoYXBlfSBmcm9tICdyZWFjdC1pbnRsJztcblxuaW1wb3J0IHtNYXBTdHlsZSwgbWFwU3R5bGVMZW5zLCB2aXNTdGF0ZUxlbnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uSGFuZGxlcixcbiAgbWFwU3R5bGVDaGFuZ2UsXG4gIGxvYWRGaWxlcyxcbiAgYWRkRGF0YVRvTWFwLFxuICBhZGRMYXllcixcbiAgY3JlYXRlT3JVcGRhdGVGaWx0ZXIsXG4gIHNldEZpbHRlcixcbiAgc2V0RmlsdGVyUGxvdCxcbiAgbGF5ZXJTZXRJc1ZhbGlkLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2Vcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7d2l0aFN0YXRlLCBTaWRlUGFuZWxUaXRsZUZhY3RvcnksIEljb25zfSBmcm9tICdAa2VwbGVyLmdsL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtBaUFzc2lzdGFudFN0YXRlfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQge1xuICB1cGRhdGVBaUFzc2lzdGFudENvbmZpZyxcbiAgdXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyxcbiAgc2V0U3RhcnRTY3JlZW5DYXB0dXJlLFxuICBzZXRTY3JlZW5DYXB0dXJlZFxufSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCBBaUFzc2lzdGFudENvbmZpZ0ZhY3RvcnkgZnJvbSAnLi9haS1hc3Npc3RhbnQtY29uZmlnJztcbmltcG9ydCBBaUFzc2lzdGFudENvbXBvbmVudEZhY3RvcnkgZnJvbSAnLi9haS1hc3Npc3RhbnQtY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgU2VsZWN0ZWRLZXBsZXJHbEFjdGlvbnMgPSB7XG4gIG1hcFN0eWxlQ2hhbmdlOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBtYXBTdHlsZUNoYW5nZT47XG4gIGxvYWRGaWxlczogQWN0aW9uSGFuZGxlcjx0eXBlb2YgbG9hZEZpbGVzPjtcbiAgYWRkRGF0YVRvTWFwOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBhZGREYXRhVG9NYXA+O1xuICBhZGRMYXllcjogQWN0aW9uSGFuZGxlcjx0eXBlb2YgYWRkTGF5ZXI+O1xuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZT47XG4gIGNyZWF0ZU9yVXBkYXRlRmlsdGVyOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBjcmVhdGVPclVwZGF0ZUZpbHRlcj47XG4gIHNldEZpbHRlcjogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygc2V0RmlsdGVyPjtcbiAgc2V0RmlsdGVyUGxvdDogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygc2V0RmlsdGVyUGxvdD47XG4gIGxheWVyU2V0SXNWYWxpZDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgbGF5ZXJTZXRJc1ZhbGlkPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFpQXNzaXN0YW50TWFuYWdlclN0YXRlID0ge1xuICBhaUFzc2lzdGFudEFjdGlvbnM6IHtcbiAgICB1cGRhdGVBaUFzc2lzdGFudENvbmZpZzogQWN0aW9uSGFuZGxlcjx0eXBlb2YgdXBkYXRlQWlBc3Npc3RhbnRDb25maWc+O1xuICAgIHVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXM6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXM+O1xuICAgIHNldFN0YXJ0U2NyZWVuQ2FwdHVyZTogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygc2V0U3RhcnRTY3JlZW5DYXB0dXJlPjtcbiAgICBzZXRTY3JlZW5DYXB0dXJlZDogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygc2V0U2NyZWVuQ2FwdHVyZWQ+O1xuICB9O1xuICBrZXBsZXJHbEFjdGlvbnM6IFNlbGVjdGVkS2VwbGVyR2xBY3Rpb25zO1xuICBhaUFzc2lzdGFudDogQWlBc3Npc3RhbnRTdGF0ZTtcbiAgbWFwU3R5bGU6IE1hcFN0eWxlO1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuXG5leHBvcnQgdHlwZSBBaUFzc2lzdGFudE1hbmFnZXJQcm9wcyA9IEFpQXNzaXN0YW50TWFuYWdlcldpdGhJbnRsUHJvcCAmIEFpQXNzaXN0YW50TWFuYWdlclN0YXRlO1xuXG5leHBvcnQgdHlwZSBBaUFzc2lzdGFudE1hbmFnZXJXaXRoSW50bFByb3AgPSB7aW50bDogSW50bFNoYXBlfTtcblxuY29uc3QgU3R5bGVkQWlBc3Npc3RhbnRQYW5lbENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7IC8qIHByZXZlbnQgcGFkZGluZyBmcm9tIGJsb2NraW5nIGlucHV0ICovXG4gIGZsZXgtZ3JvdzogMTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1pbi13aWR0aDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5haUFzc2lzdGFudFBhbmVsV2lkdGh9cHg7XG4gIG1heC13aWR0aDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5haUFzc2lzdGFudFBhbmVsV2lkdGh9cHg7XG4gICYgPiAqIHtcbiAgICAvKiBhbGwgY2hpbGRyZW4gc2hvdWxkIGFsbG93IGlucHV0ICovXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkQWlBc3Npc3RhbnRQYW5lbCA9IHN0eWxlZC5kaXZgXG4gIHRvcDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxCZ307XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtZ3JvdzogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmA7XG5cbmNvbnN0IFN0eWxlZEFpQXNzaXN0YW50UGFuZWxIZWFkZXIgPSBzdHlsZWQuZGl2YFxuICBwYWRkaW5nOiAxNnB4IDE2cHggNHB4IDE2cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmJvcmRlckNvbG9yfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yQWN0aXZlfTtcbmA7XG5cbmNvbnN0IFN0eWxlZEFpQXNzaXN0YW50UGFuZWxDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxTY3JvbGxCYXJ9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3JBY3RpdmV9O1xuICBwYWRkaW5nOiAxMHB4IDBweCAxMHB4IDBweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuYDtcblxuQWlBc3Npc3RhbnRNYW5hZ2VyRmFjdG9yeS5kZXBzID0gW1xuICBTaWRlUGFuZWxUaXRsZUZhY3RvcnksXG4gIEFpQXNzaXN0YW50Q29uZmlnRmFjdG9yeSxcbiAgQWlBc3Npc3RhbnRDb21wb25lbnRGYWN0b3J5XG5dO1xuXG5mdW5jdGlvbiBBaUFzc2lzdGFudE1hbmFnZXJGYWN0b3J5KFxuICBTaWRlUGFuZWxUaXRsZTogUmV0dXJuVHlwZTx0eXBlb2YgU2lkZVBhbmVsVGl0bGVGYWN0b3J5PixcbiAgQWlBc3Npc3RhbnRDb25maWc6IFJldHVyblR5cGU8dHlwZW9mIEFpQXNzaXN0YW50Q29uZmlnRmFjdG9yeT4sXG4gIEFpQXNzaXN0YW50Q29tcG9uZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBBaUFzc2lzdGFudENvbXBvbmVudEZhY3Rvcnk+XG4pOiBSZWFjdC5GQzxBaUFzc2lzdGFudE1hbmFnZXJQcm9wcz4ge1xuICBjb25zdCBBaUFzc2lzdGFudE1hbmFnZXIgPSAocHJvcHM6IEFpQXNzaXN0YW50TWFuYWdlcldpdGhJbnRsUHJvcCAmIEFpQXNzaXN0YW50TWFuYWdlclN0YXRlKSA9PiB7XG4gICAgY29uc3Qge2ludGwsIGFpQXNzaXN0YW50QWN0aW9ucywgYWlBc3Npc3RhbnQsIGNoaWxkcmVuLCBrZXBsZXJHbEFjdGlvbnMsIG1hcFN0eWxlLCB2aXNTdGF0ZX0gPVxuICAgICAgcHJvcHM7XG5cbiAgICBjb25zdCBvbkNvbmZpZ0J1dHRvbkNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgLy8gc2V0IGFpQXNzaXN0YW50LmNvbmZpZy5pc1JlYWR5IHRvIGZhbHNlIHNvIHdlIGNhbiByZW5kZXIgdGhlIGNvbmZpZyBjb21wb25lbnRcbiAgICAgIGFpQXNzaXN0YW50QWN0aW9ucy51cGRhdGVBaUFzc2lzdGFudENvbmZpZyh7Li4uYWlBc3Npc3RhbnQuY29uZmlnLCBpc1JlYWR5OiBmYWxzZX0pO1xuICAgIH0sIFthaUFzc2lzdGFudC5jb25maWcsIGFpQXNzaXN0YW50QWN0aW9uc10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRBaUFzc2lzdGFudFBhbmVsQ29udGFpbmVyIGNsYXNzTmFtZT1cImFpLWFzc2lzdGFudC1tYW5hZ2VyXCI+XG4gICAgICAgIDxTdHlsZWRBaUFzc2lzdGFudFBhbmVsPlxuICAgICAgICAgIDxTdHlsZWRBaUFzc2lzdGFudFBhbmVsSGVhZGVyPlxuICAgICAgICAgICAgPFNpZGVQYW5lbFRpdGxlXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFpLWFzc2lzdGFudC1tYW5hZ2VyLXRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgaWQ6ICdhaUFzc2lzdGFudE1hbmFnZXIudGl0bGUnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQUkgQXNzaXN0YW50J1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb25zLlNldHRpbmdzIG9uQ2xpY2s9e29uQ29uZmlnQnV0dG9uQ2xpY2t9IC8+XG4gICAgICAgICAgICA8L1NpZGVQYW5lbFRpdGxlPlxuICAgICAgICAgIDwvU3R5bGVkQWlBc3Npc3RhbnRQYW5lbEhlYWRlcj5cblxuICAgICAgICAgIDxTdHlsZWRBaUFzc2lzdGFudFBhbmVsQ29udGVudD5cbiAgICAgICAgICAgIHshYWlBc3Npc3RhbnQuY29uZmlnLmlzUmVhZHkgPyAoXG4gICAgICAgICAgICAgIDxBaUFzc2lzdGFudENvbmZpZ1xuICAgICAgICAgICAgICAgIGFpQXNzaXN0YW50Q29uZmlnPXthaUFzc2lzdGFudC5jb25maWd9XG4gICAgICAgICAgICAgICAgdXBkYXRlQWlBc3Npc3RhbnRDb25maWc9e2FpQXNzaXN0YW50QWN0aW9ucy51cGRhdGVBaUFzc2lzdGFudENvbmZpZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxBaUFzc2lzdGFudENvbXBvbmVudFxuICAgICAgICAgICAgICAgIGFpQXNzaXN0YW50PXthaUFzc2lzdGFudH1cbiAgICAgICAgICAgICAgICB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzPXthaUFzc2lzdGFudEFjdGlvbnMudXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlc31cbiAgICAgICAgICAgICAgICBzZXRTdGFydFNjcmVlbkNhcHR1cmU9e2FpQXNzaXN0YW50QWN0aW9ucy5zZXRTdGFydFNjcmVlbkNhcHR1cmV9XG4gICAgICAgICAgICAgICAgc2V0U2NyZWVuQ2FwdHVyZWQ9e2FpQXNzaXN0YW50QWN0aW9ucy5zZXRTY3JlZW5DYXB0dXJlZH1cbiAgICAgICAgICAgICAgICBrZXBsZXJHbEFjdGlvbnM9e2tlcGxlckdsQWN0aW9uc31cbiAgICAgICAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGV9XG4gICAgICAgICAgICAgICAgdmlzU3RhdGU9e3Zpc1N0YXRlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1N0eWxlZEFpQXNzaXN0YW50UGFuZWxDb250ZW50PlxuICAgICAgICA8L1N0eWxlZEFpQXNzaXN0YW50UGFuZWw+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU3R5bGVkQWlBc3Npc3RhbnRQYW5lbENvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiB3aXRoU3RhdGUoXG4gICAgW3Zpc1N0YXRlTGVucywgbWFwU3R5bGVMZW5zXSxcbiAgICBzdGF0ZSA9PiB7XG4gICAgICAvLyB0b2RvOiBmaW5kIGEgYmV0dGVyIHdheSB0byBnZXQgdGhlIHN0YXRlIGtleVxuICAgICAgY29uc3Qgc3RhdGVLZXkgPSBPYmplY3Qua2V5cyhzdGF0ZSlbMF07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhaUFzc2lzdGFudDogc3RhdGVbc3RhdGVLZXldLmFpQXNzaXN0YW50XG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAga2VwbGVyR2xBY3Rpb25zOiB7XG4gICAgICAgIG1hcFN0eWxlQ2hhbmdlLFxuICAgICAgICBsb2FkRmlsZXMsXG4gICAgICAgIGFkZERhdGFUb01hcCxcbiAgICAgICAgYWRkTGF5ZXIsXG4gICAgICAgIGNyZWF0ZU9yVXBkYXRlRmlsdGVyLFxuICAgICAgICBzZXRGaWx0ZXIsXG4gICAgICAgIHNldEZpbHRlclBsb3QsXG4gICAgICAgIGxheWVyU2V0SXNWYWxpZCxcbiAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlXG4gICAgICB9LFxuICAgICAgYWlBc3Npc3RhbnRBY3Rpb25zOiB7XG4gICAgICAgIHVwZGF0ZUFpQXNzaXN0YW50Q29uZmlnLFxuICAgICAgICB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzLFxuICAgICAgICBzZXRTdGFydFNjcmVlbkNhcHR1cmUsXG4gICAgICAgIHNldFNjcmVlbkNhcHR1cmVkXG4gICAgICB9XG4gICAgfVxuICApKGluamVjdEludGwoQWlBc3Npc3RhbnRNYW5hZ2VyKSkgYXMgUmVhY3QuRkM8QWlBc3Npc3RhbnRNYW5hZ2VyUHJvcHM+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBBaUFzc2lzdGFudE1hbmFnZXJGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQVlBLElBQUFNLFdBQUEsR0FBQU4sT0FBQTtBQUlBLElBQUFPLFNBQUEsR0FBQVAsT0FBQTtBQU1BLElBQUFRLGtCQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxxQkFBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQW1FLElBQUFVLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUEvQm5FO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxD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QWlCO01BQ2hCd0IsaUJBQWlCLEVBQUVuQixXQUFXLENBQUNRLE1BQU87TUFDdENELHVCQUF1QixFQUFFUixrQkFBa0IsQ0FBQ1E7SUFBd0IsQ0FDckUsQ0FBQyxnQkFFRm5GLE1BQUEsWUFBQXNGLGFBQUEsQ0FBQ2Qsb0JBQW9CO01BQ25CSSxXQUFXLEVBQUVBLFdBQVk7TUFDekJvQix5QkFBeUIsRUFBRXJCLGtCQUFrQixDQUFDcUIseUJBQTBCO01BQ3hFQyxxQkFBcUIsRUFBRXRCLGtCQUFrQixDQUFDc0IscUJBQXNCO01BQ2hFQyxpQkFBaUIsRUFBRXZCLGtCQUFrQixDQUFDdUIsaUJBQWtCO01BQ3hEcEIsZUFBZSxFQUFFQSxlQUFnQjtNQUNqQ0MsUUFBUSxFQUFFQSxRQUFTO01BQ25CQyxRQUFRLEVBQUVBO0lBQVMsQ0FDcEIsQ0FFMEIsQ0FDVCxDQUFDLEVBQ3hCSCxRQUM4QixDQUFDO0VBRXRDLENBQUM7RUFFRCxPQUFPLElBQUFzQixxQkFBUyxFQUNkLENBQUNDLHNCQUFZLEVBQUVDLHNCQUFZLENBQUMsRUFDNUIsVUFBQUMsS0FBSyxFQUFJO0lBQ1A7SUFDQSxJQUFNQyxRQUFRLEdBQUczRSxNQUFNLENBQUNTLElBQUksQ0FBQ2lFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxPQUFPO01BQ0wxQixXQUFXLEVBQUUwQixLQUFLLENBQUNDLFFBQVEsQ0FBQyxDQUFDM0I7SUFDL0IsQ0FBQztFQUNILENBQUMsRUFDRDtJQUNFRSxlQUFlLEVBQUU7TUFDZjBCLGNBQWMsRUFBZEEsdUJBQWM7TUFDZEMsU0FBUyxFQUFUQSxrQkFBUztNQUNUQyxZQUFZLEVBQVpBLHFCQUFZO01BQ1pDLFFBQVEsRUFBUkEsaUJBQVE7TUFDUkMsb0JBQW9CLEVBQXBCQSw2QkFBb0I7TUFDcEJDLFNBQVMsRUFBVEEsa0JBQVM7TUFDVEMsYUFBYSxFQUFiQSxzQkFBYTtNQUNiQyxlQUFlLEVBQWZBLHdCQUFlO01BQ2ZDLDhCQUE4QixFQUE5QkE7SUFDRixDQUFDO0lBQ0RyQyxrQkFBa0IsRUFBRTtNQUNsQlEsdUJBQXVCLEVBQXZCQSxpQ0FBdUI7TUFDdkJhLHlCQUF5QixFQUF6QkEsbUNBQXlCO01BQ3pCQyxxQkFBcUIsRUFBckJBLCtCQUFxQjtNQUNyQkMsaUJBQWlCLEVBQWpCQTtJQUNGO0VBQ0YsQ0FDRixDQUFDLENBQUMsSUFBQWUscUJBQVUsRUFBQ3hDLGtCQUFrQixDQUFDLENBQUM7QUFDbkM7QUFBQyxJQUFBeUMsUUFBQSxHQUFBQyxPQUFBLGNBRWNsRCx5QkFBeUIiLCJpZ25vcmVMaXN0IjpbXX0=