UNPKG

kepler.gl

Version:

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

140 lines (139 loc) 29.1 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 _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _localization = require("@kepler.gl/localization"); var _styledComponents2 = require("../common/styled-components"); var _icons = require("../common/icons"); var _switch = _interopRequireDefault(require("../common/switch")); var _classnames = _interopRequireDefault(require("classnames")); var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8; // 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; } var StyledMapControlPanel = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n flex-grow: 1;\n z-index: 1;\n p {\n margin-bottom: 0;\n }\n"])), function (props) { return props.theme.mapPanelBackgroundColor; }); var StyledMapControlPanelContent = _styledComponents["default"].div.attrs({ className: 'map-control__panel-content' })(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n max-height: 500px;\n min-height: 100px;\n min-width: ", "px;\n overflow: ", ";\n"])), function (props) { return props.theme.sidePanelScrollBar; }, function (props) { return props.theme.mapControl.width; }, function (props) { return props.isExport ? 'hidden' : 'overlay'; }); var StyledMapControlPanelHeader = _styledComponents["default"].div.attrs({ className: 'map-control__panel-header' })(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n background-color: ", ";\n height: 32px;\n padding: 6px 12px;\n font-family: ", ";\n font-size: 11px;\n color: ", ";\n position: relative;\n box-sizing: border-box;\n align-items: center;\n\n button {\n width: 18px;\n height: 18px;\n }\n"])), function (props) { return props.theme.mapPanelHeaderBackgroundColor; }, function (props) { return props.theme.fontFamily; }, function (props) { return props.theme.titleTextColor; }); var StyledMapControlPanelHeaderSplitViewportsTools = (0, _styledComponents["default"])(StyledMapControlPanelHeader).attrs({ className: 'map-control__panel-split-viewport-tools' })(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: self-start;\n height: unset;\n"]))); var StyledSBCenterFlexbox = (0, _styledComponents["default"])(_styledComponents2.CenterFlexbox)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n justify-content: space-between;\n flex-direction: row;\n"]))); var StyledDisableableText = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n opacity: ", ";\n pointer-events: ", ";\n"])), function (props) { return props.disabled ? 0.4 : 1; }, function (props) { return props.disabled ? 'none' : 'all'; }); var StyledDisableableSwitch = (0, _styledComponents["default"])(_switch["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n opacity: ", ";\n pointer-events: ", ";\n"])), function (props) { return props.disabled ? 0.4 : 1; }, function (props) { return props.disabled ? 'none' : 'all'; }); var StyledIcon = (0, _styledComponents["default"])(_styledComponents2.IconRoundSmall)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n background-color: transparent;\n\n &:hover {\n cursor: pointer;\n background-color: transparent;\n color: ", ";\n }\n"])), function (props) { return props.theme.activeColor; }, function (props) { return props.theme.floatingBtnActColor; }); function MapControlPanelFactory() { var MapControlPanel = /*#__PURE__*/_react["default"].memo(function (_ref) { var children = _ref.children, header = _ref.header, pinnable = _ref.pinnable, disableClose = _ref.disableClose, onPinClick = _ref.onPinClick, onClick = _ref.onClick, _ref$scale = _ref.scale, scale = _ref$scale === void 0 ? 1 : _ref$scale, isExport = _ref.isExport, logoComponent = _ref.logoComponent, mapState = _ref.mapState, onToggleSplitMapViewport = _ref.onToggleSplitMapViewport, isViewportUnsyncAllowed = _ref.isViewportUnsyncAllowed, _ref$className = _ref.className, className = _ref$className === void 0 ? 'map-control-panel' : _ref$className; var _ref2 = mapState || {}, isViewportSynced = _ref2.isViewportSynced, isZoomLocked = _ref2.isZoomLocked; var onUnlockViewportChange = (0, _react.useCallback)(function () { onToggleSplitMapViewport === null || onToggleSplitMapViewport === void 0 || onToggleSplitMapViewport({ isViewportSynced: !isViewportSynced }); }, [isViewportSynced, onToggleSplitMapViewport]); var onSyncZoomChange = (0, _react.useCallback)(function () { onToggleSplitMapViewport === null || onToggleSplitMapViewport === void 0 || onToggleSplitMapViewport({ isZoomLocked: !isZoomLocked }); }, [isZoomLocked, onToggleSplitMapViewport]); return /*#__PURE__*/_react["default"].createElement(StyledMapControlPanel, { style: { transform: "scale(".concat(scale, ")"), marginBottom: '8px !important' }, className: (0, _classnames["default"])('map-control-panel', className) }, mapState !== null && mapState !== void 0 && mapState.isSplit && isViewportUnsyncAllowed ? /*#__PURE__*/_react["default"].createElement(StyledMapControlPanelHeaderSplitViewportsTools, null, /*#__PURE__*/_react["default"].createElement(StyledSBCenterFlexbox, { style: { paddingBottom: '6px' } }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: "Unlock Viewport" }), /*#__PURE__*/_react["default"].createElement(StyledDisableableSwitch, { checked: !(mapState !== null && mapState !== void 0 && mapState.isViewportSynced), id: "unlock-viewport-toggle", onChange: onUnlockViewportChange })), /*#__PURE__*/_react["default"].createElement(StyledSBCenterFlexbox, null, /*#__PURE__*/_react["default"].createElement(StyledDisableableText, { disabled: mapState === null || mapState === void 0 ? void 0 : mapState.isViewportSynced }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: "Sync Zoom" })), /*#__PURE__*/_react["default"].createElement(StyledDisableableSwitch, { checked: mapState === null || mapState === void 0 ? void 0 : mapState.isZoomLocked, id: "sync-zoom-toggle", onChange: onSyncZoomChange, disabled: mapState === null || mapState === void 0 ? void 0 : mapState.isViewportSynced }))) : null, /*#__PURE__*/_react["default"].createElement(StyledMapControlPanelHeader, null, isExport && logoComponent ? logoComponent : header ? /*#__PURE__*/_react["default"].createElement("span", { style: { verticalAlign: 'middle' } }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: header })) : null, isExport ? null : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, pinnable && /*#__PURE__*/_react["default"].createElement(StyledIcon, { className: "pin-map-control-item", onClick: onPinClick }, /*#__PURE__*/_react["default"].createElement(_icons.Pin, { height: "16px" })), disableClose ? null : /*#__PURE__*/_react["default"].createElement(StyledIcon, { className: "close-map-control-item", onClick: onClick }, /*#__PURE__*/_react["default"].createElement(_icons.Close, { height: "16px" })))), /*#__PURE__*/_react["default"].createElement(StyledMapControlPanelContent, { isExport: isExport }, children)); }); MapControlPanel.displayName = 'MapControlPanel'; return MapControlPanel; } var _default = exports["default"] = MapControlPanelFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbG9jYWxpemF0aW9uIiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX2ljb25zIiwiX3N3aXRjaCIsIl9jbGFzc25hbWVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfdGVtcGxhdGVPYmplY3Q3IiwiX3RlbXBsYXRlT2JqZWN0OCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlN0eWxlZE1hcENvbnRyb2xQYW5lbCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsIm1hcFBhbmVsQmFja2dyb3VuZENvbG9yIiwiU3R5bGVkTWFwQ29udHJvbFBhbmVsQ29udGVudCIsImF0dHJzIiwiY2xhc3NOYW1lIiwic2lkZVBhbmVsU2Nyb2xsQmFyIiwibWFwQ29udHJvbCIsIndpZHRoIiwiaXNFeHBvcnQiLCJTdHlsZWRNYXBDb250cm9sUGFuZWxIZWFkZXIiLCJtYXBQYW5lbEhlYWRlckJhY2tncm91bmRDb2xvciIsImZvbnRGYW1pbHkiLCJ0aXRsZVRleHRDb2xvciIsIlN0eWxlZE1hcENvbnRyb2xQYW5lbEhlYWRlclNwbGl0Vmlld3BvcnRzVG9vbHMiLCJTdHlsZWRTQkNlbnRlckZsZXhib3giLCJDZW50ZXJGbGV4Ym94IiwiU3R5bGVkRGlzYWJsZWFibGVUZXh0Iiwic3BhbiIsImRpc2FibGVkIiwiU3R5bGVkRGlzYWJsZWFibGVTd2l0Y2giLCJTd2l0Y2giLCJTdHlsZWRJY29uIiwiSWNvblJvdW5kU21hbGwiLCJhY3RpdmVDb2xvciIsImZsb2F0aW5nQnRuQWN0Q29sb3IiLCJNYXBDb250cm9sUGFuZWxGYWN0b3J5IiwiTWFwQ29udHJvbFBhbmVsIiwiUmVhY3QiLCJtZW1vIiwiX3JlZiIsImNoaWxkcmVuIiwiaGVhZGVyIiwicGlubmFibGUiLCJkaXNhYmxlQ2xvc2UiLCJvblBpbkNsaWNrIiwib25DbGljayIsIl9yZWYkc2NhbGUiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJtYXBTdGF0ZSIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsImlzVmlld3BvcnRVbnN5bmNBbGxvd2VkIiwiX3JlZiRjbGFzc05hbWUiLCJfcmVmMiIsImlzVmlld3BvcnRTeW5jZWQiLCJpc1pvb21Mb2NrZWQiLCJvblVubG9ja1ZpZXdwb3J0Q2hhbmdlIiwidXNlQ2FsbGJhY2siLCJvblN5bmNab29tQ2hhbmdlIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwidHJhbnNmb3JtIiwiY29uY2F0IiwibWFyZ2luQm90dG9tIiwiY2xhc3NOYW1lcyIsImlzU3BsaXQiLCJwYWRkaW5nQm90dG9tIiwiRm9ybWF0dGVkTWVzc2FnZSIsImlkIiwiY2hlY2tlZCIsIm9uQ2hhbmdlIiwidmVydGljYWxBbGlnbiIsIkZyYWdtZW50IiwiUGluIiwiaGVpZ2h0IiwiQ2xvc2UiLCJkaXNwbGF5TmFtZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAvbWFwLWNvbnRyb2wtcGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtDZW50ZXJGbGV4Ym94LCBJY29uUm91bmRTbWFsbH0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Q2xvc2UsIFBpbn0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCBTd2l0Y2ggZnJvbSAnLi4vY29tbW9uL3N3aXRjaCc7XG5pbXBvcnQge01hcFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7QWN0aW9uSGFuZGxlciwgdG9nZ2xlU3BsaXRNYXBWaWV3cG9ydH0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jb25zdCBTdHlsZWRNYXBDb250cm9sUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1hcFBhbmVsQmFja2dyb3VuZENvbG9yfTtcbiAgZmxleC1ncm93OiAxO1xuICB6LWluZGV4OiAxO1xuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5gO1xuXG50eXBlIFN0eWxlZE1hcENvbnRyb2xQYW5lbENvbnRlbnRQcm9wcyA9IHtcbiAgaXNFeHBvcnQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgU3R5bGVkTWFwQ29udHJvbFBhbmVsQ29udGVudCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdtYXAtY29udHJvbF9fcGFuZWwtY29udGVudCdcbn0pPFN0eWxlZE1hcENvbnRyb2xQYW5lbENvbnRlbnRQcm9wcz5gXG4gICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsU2Nyb2xsQmFyfTtcbiAgbWF4LWhlaWdodDogNTAwcHg7XG4gIG1pbi1oZWlnaHQ6IDEwMHB4O1xuICBtaW4td2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubWFwQ29udHJvbC53aWR0aH1weDtcbiAgb3ZlcmZsb3c6ICR7cHJvcHMgPT4gKHByb3BzLmlzRXhwb3J0ID8gJ2hpZGRlbicgOiAnb3ZlcmxheScpfTtcbmA7XG5cbnR5cGUgTWFwQ29udHJvbFBhbmVsSGVhZGVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5jb25zdCBTdHlsZWRNYXBDb250cm9sUGFuZWxIZWFkZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbWFwLWNvbnRyb2xfX3BhbmVsLWhlYWRlcidcbn0pPE1hcENvbnRyb2xQYW5lbEhlYWRlclByb3BzPmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1hcFBhbmVsSGVhZGVyQmFja2dyb3VuZENvbG9yfTtcbiAgaGVpZ2h0OiAzMnB4O1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udEZhbWlseX07XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGl0bGVUZXh0Q29sb3J9O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgYnV0dG9uIHtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZE1hcENvbnRyb2xQYW5lbEhlYWRlclNwbGl0Vmlld3BvcnRzVG9vbHMgPSBzdHlsZWQoU3R5bGVkTWFwQ29udHJvbFBhbmVsSGVhZGVyKS5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ21hcC1jb250cm9sX19wYW5lbC1zcGxpdC12aWV3cG9ydC10b29scydcbn0pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBzZWxmLXN0YXJ0O1xuICBoZWlnaHQ6IHVuc2V0O1xuYDtcblxuY29uc3QgU3R5bGVkU0JDZW50ZXJGbGV4Ym94ID0gc3R5bGVkKENlbnRlckZsZXhib3gpYFxuICB3aWR0aDogMTAwJTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuYDtcblxuaW50ZXJmYWNlIFN0eWxlZERpc2FibGVhYmxlVGV4dFByb3BzIHtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREaXNhYmxlYWJsZVRleHQgPSBzdHlsZWQuc3BhbjxTdHlsZWREaXNhYmxlYWJsZVRleHRQcm9wcz5gXG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gKHByb3BzLmRpc2FibGVkID8gMC40IDogMSl9O1xuICBwb2ludGVyLWV2ZW50czogJHtwcm9wcyA9PiAocHJvcHMuZGlzYWJsZWQgPyAnbm9uZScgOiAnYWxsJyl9O1xuYDtcblxuY29uc3QgU3R5bGVkRGlzYWJsZWFibGVTd2l0Y2ggPSBzdHlsZWQoU3dpdGNoKWBcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMuZGlzYWJsZWQgPyAwLjQgOiAxKX07XG4gIHBvaW50ZXItZXZlbnRzOiAke3Byb3BzID0+IChwcm9wcy5kaXNhYmxlZCA/ICdub25lJyA6ICdhbGwnKX07XG5gO1xuXG5jb25zdCBTdHlsZWRJY29uID0gc3R5bGVkKEljb25Sb3VuZFNtYWxsKWBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYWN0aXZlQ29sb3J9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAmOmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZmxvYXRpbmdCdG5BY3RDb2xvcn07XG4gIH1cbmA7XG5cbmV4cG9ydCB0eXBlIE1hcENvbnRyb2xQYW5lbFByb3BzID0ge1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIHNjYWxlPzogbnVtYmVyO1xuICBvbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvblBpbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBwaW5uYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVDbG9zZT86IGJvb2xlYW47XG4gIGlzRXhwb3J0PzogYm9vbGVhbjtcbiAgbG9nb0NvbXBvbmVudD86IEVsZW1lbnQ7XG4gIG1hcFN0YXRlPzogTWFwU3RhdGU7XG4gIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD86IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ+O1xuICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBNYXBDb250cm9sUGFuZWxGYWN0b3J5KCkge1xuICBjb25zdCBNYXBDb250cm9sUGFuZWw6IFJlYWN0LkZDPE1hcENvbnRyb2xQYW5lbFByb3BzPiA9IFJlYWN0Lm1lbW8oXG4gICAgKHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgaGVhZGVyLFxuICAgICAgcGlubmFibGUsXG4gICAgICBkaXNhYmxlQ2xvc2UsXG4gICAgICBvblBpbkNsaWNrLFxuICAgICAgb25DbGljayxcbiAgICAgIHNjYWxlID0gMSxcbiAgICAgIGlzRXhwb3J0LFxuICAgICAgbG9nb0NvbXBvbmVudCxcbiAgICAgIG1hcFN0YXRlLFxuICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0LFxuICAgICAgaXNWaWV3cG9ydFVuc3luY0FsbG93ZWQsXG4gICAgICBjbGFzc05hbWUgPSAnbWFwLWNvbnRyb2wtcGFuZWwnXG4gICAgfSkgPT4ge1xuICAgICAgY29uc3Qge2lzVmlld3BvcnRTeW5jZWQsIGlzWm9vbUxvY2tlZH0gPSBtYXBTdGF0ZSB8fCB7fTtcbiAgICAgIGNvbnN0IG9uVW5sb2NrVmlld3BvcnRDaGFuZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD8uKHtpc1ZpZXdwb3J0U3luY2VkOiAhaXNWaWV3cG9ydFN5bmNlZH0pO1xuICAgICAgfSwgW2lzVmlld3BvcnRTeW5jZWQsIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydF0pO1xuXG4gICAgICBjb25zdCBvblN5bmNab29tQ2hhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ/Lih7aXNab29tTG9ja2VkOiAhaXNab29tTG9ja2VkfSk7XG4gICAgICB9LCBbaXNab29tTG9ja2VkLCBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnRdKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1hcENvbnRyb2xQYW5lbFxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IGBzY2FsZSgke3NjYWxlfSlgLFxuICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnOHB4ICFpbXBvcnRhbnQnXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoJ21hcC1jb250cm9sLXBhbmVsJywgY2xhc3NOYW1lKX1cbiAgICAgICAgPlxuICAgICAgICAgIHttYXBTdGF0ZT8uaXNTcGxpdCAmJiBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZCA/IChcbiAgICAgICAgICAgIDxTdHlsZWRNYXBDb250cm9sUGFuZWxIZWFkZXJTcGxpdFZpZXdwb3J0c1Rvb2xzPlxuICAgICAgICAgICAgICA8U3R5bGVkU0JDZW50ZXJGbGV4Ym94IHN0eWxlPXt7cGFkZGluZ0JvdHRvbTogJzZweCd9fT5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cIlVubG9jayBWaWV3cG9ydFwiIC8+XG4gICAgICAgICAgICAgICAgPFN0eWxlZERpc2FibGVhYmxlU3dpdGNoXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXshbWFwU3RhdGU/LmlzVmlld3BvcnRTeW5jZWR9XG4gICAgICAgICAgICAgICAgICBpZD1cInVubG9jay12aWV3cG9ydC10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uVW5sb2NrVmlld3BvcnRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TdHlsZWRTQkNlbnRlckZsZXhib3g+XG4gICAgICAgICAgICAgIDxTdHlsZWRTQkNlbnRlckZsZXhib3g+XG4gICAgICAgICAgICAgICAgPFN0eWxlZERpc2FibGVhYmxlVGV4dCBkaXNhYmxlZD17bWFwU3RhdGU/LmlzVmlld3BvcnRTeW5jZWR9PlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJTeW5jIFpvb21cIiAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkRGlzYWJsZWFibGVUZXh0PlxuICAgICAgICAgICAgICAgIDxTdHlsZWREaXNhYmxlYWJsZVN3aXRjaFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17bWFwU3RhdGU/LmlzWm9vbUxvY2tlZH1cbiAgICAgICAgICAgICAgICAgIGlkPVwic3luYy16b29tLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25TeW5jWm9vbUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXttYXBTdGF0ZT8uaXNWaWV3cG9ydFN5bmNlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZFNCQ2VudGVyRmxleGJveD5cbiAgICAgICAgICAgIDwvU3R5bGVkTWFwQ29udHJvbFBhbmVsSGVhZGVyU3BsaXRWaWV3cG9ydHNUb29scz5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIDxTdHlsZWRNYXBDb250cm9sUGFuZWxIZWFkZXI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIChpc0V4cG9ydCAmJiBsb2dvQ29tcG9uZW50ID8gKFxuICAgICAgICAgICAgICAgIGxvZ29Db21wb25lbnRcbiAgICAgICAgICAgICAgKSA6IGhlYWRlciA/IChcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e3ZlcnRpY2FsQWxpZ246ICdtaWRkbGUnfX0+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17aGVhZGVyfSAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSA6IG51bGwpIGFzIFJlYWN0LlJlYWN0Tm9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzRXhwb3J0ID8gbnVsbCA6IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7cGlubmFibGUgJiYgKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEljb24gY2xhc3NOYW1lPVwicGluLW1hcC1jb250cm9sLWl0ZW1cIiBvbkNsaWNrPXtvblBpbkNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAgPFBpbiBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkSWNvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkaXNhYmxlQ2xvc2UgPyBudWxsIDogKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEljb24gY2xhc3NOYW1lPVwiY2xvc2UtbWFwLWNvbnRyb2wtaXRlbVwiIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICA8Q2xvc2UgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0eWxlZEljb24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU3R5bGVkTWFwQ29udHJvbFBhbmVsSGVhZGVyPlxuICAgICAgICAgIDxTdHlsZWRNYXBDb250cm9sUGFuZWxDb250ZW50IGlzRXhwb3J0PXtpc0V4cG9ydH0+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9TdHlsZWRNYXBDb250cm9sUGFuZWxDb250ZW50PlxuICAgICAgICA8L1N0eWxlZE1hcENvbnRyb2xQYW5lbD5cbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIE1hcENvbnRyb2xQYW5lbC5kaXNwbGF5TmFtZSA9ICdNYXBDb250cm9sUGFuZWwnO1xuXG4gIHJldHVybiBNYXBDb250cm9sUGFuZWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hcENvbnRyb2xQYW5lbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxrQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQU8sV0FBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQW9DLElBQUFRLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFYcEM7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFB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