UNPKG

kepler.gl.geoiq

Version:

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

134 lines (102 loc) 15.8 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); 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 _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styledComponents = require("../../common/styled-components"); var _colorSelector = _interopRequireDefault(require("./color-selector")); var _fieldSelector = _interopRequireDefault(require("../../common/field-selector")); var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector")); var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group")); var _rangeSlider = _interopRequireDefault(require("../../common/range-slider")); var _layerFactory = require("../../../layers/layer-factory"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var LayerConfigurator = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(LayerConfigurator, _Component); function LayerConfigurator() { var _getPrototypeOf2; var _this; (0, _classCallCheck2["default"])(this, LayerConfigurator); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(LayerConfigurator)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onAttributeChange", function (attribute) { var _this$props = _this.props, layerConfiguratorProps = _this$props.layerConfiguratorProps, textLabel = _this$props.textLabel; return function (v) { return layerConfiguratorProps.onChange({ textLabel: _objectSpread({}, textLabel, (0, _defineProperty2["default"])({}, attribute, v)) }); }; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChangeTextAnchor", function (anchor) { var _this$props2 = _this.props, layerConfiguratorProps = _this$props2.layerConfiguratorProps, textLabel = _this$props2.textLabel; // TODO: we can be smarter on determining the offset of the text layerConfiguratorProps.onChange({ textLabel: _objectSpread({}, textLabel, { anchor: anchor, offset: [anchor === 'start' ? 10 : anchor === 'end' ? -10 : 0, anchor === 'middle' ? 10 : 0] }) }); }); return _this; } (0, _createClass2["default"])(LayerConfigurator, [{ key: "render", value: function render() { var _this2 = this; var _this$props3 = this.props, visConfiguratorProps = _this$props3.visConfiguratorProps, textLabel = _this$props3.textLabel; return _react["default"].createElement(_layerConfigGroup["default"], { label: 'label', collapsible: true }, _react["default"].createElement(_styledComponents.SidePanelSection, null, _react["default"].createElement(_fieldSelector["default"], { fields: visConfiguratorProps.fields, value: textLabel.field && textLabel.field.name || 'select a field', placeholder: 'empty', onSelect: this.onAttributeChange('field'), erasable: true })), _react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, _react["default"].createElement(_styledComponents.SidePanelSection, null, _react["default"].createElement(_styledComponents.PanelLabel, null, "Font size"), _react["default"].createElement(_rangeSlider["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_TEXT_CONFIGS.fontSize, { value1: textLabel.size, onChange: function onChange(v) { return _this2.onAttributeChange('size')(v[1]); } }))), _react["default"].createElement(_styledComponents.SidePanelSection, null, _react["default"].createElement(_styledComponents.PanelLabel, null, "Font color"), _react["default"].createElement(_colorSelector["default"], { colorSets: [{ selectedColor: textLabel.color, setColor: this.onAttributeChange('color') }] })), _react["default"].createElement(_styledComponents.SidePanelSection, null, _react["default"].createElement(_styledComponents.PanelLabel, null, "Text anchor"), _react["default"].createElement(_itemSelector["default"], (0, _extends2["default"])({}, _layerFactory.LAYER_TEXT_CONFIGS.textAnchor, { selectedItems: textLabel.anchor, onChange: this.onChangeTextAnchor }))))); } }]); return LayerConfigurator; }(_react.Component); exports["default"] = LayerConfigurator; (0, _defineProperty2["default"])(LayerConfigurator, "propTypes", { layerConfiguratorProps: _propTypes["default"].object.isRequired, textLabel: _propTypes["default"].object.isRequired, visConfiguratorProps: _propTypes["default"].object.isRequired }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvdGV4dC1sYWJlbC1wYW5lbC5qcyJdLCJuYW1lcyI6WyJMYXllckNvbmZpZ3VyYXRvciIsImF0dHJpYnV0ZSIsInByb3BzIiwibGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsInRleHRMYWJlbCIsInYiLCJvbkNoYW5nZSIsImFuY2hvciIsIm9mZnNldCIsInZpc0NvbmZpZ3VyYXRvclByb3BzIiwiZmllbGRzIiwiZmllbGQiLCJuYW1lIiwib25BdHRyaWJ1dGVDaGFuZ2UiLCJMQVlFUl9URVhUX0NPTkZJR1MiLCJmb250U2l6ZSIsInNpemUiLCJzZWxlY3RlZENvbG9yIiwiY29sb3IiLCJzZXRDb2xvciIsInRleHRBbmNob3IiLCJvbkNoYW5nZVRleHRBbmNob3IiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7OztJQUVxQkEsaUI7Ozs7Ozs7Ozs7Ozs7Ozs7OzBHQU9DLFVBQUFDLFNBQVMsRUFBSTtBQUFBLHdCQUNhLE1BQUtDLEtBRGxCO0FBQUEsVUFDeEJDLHNCQUR3QixlQUN4QkEsc0JBRHdCO0FBQUEsVUFDQUMsU0FEQSxlQUNBQSxTQURBO0FBRS9CLGFBQU8sVUFBQUMsQ0FBQztBQUFBLGVBQUlGLHNCQUFzQixDQUFDRyxRQUF2QixDQUFnQztBQUMxQ0YsVUFBQUEsU0FBUyxvQkFDSkEsU0FESSx1Q0FFTkgsU0FGTSxFQUVNSSxDQUZOO0FBRGlDLFNBQWhDLENBQUo7QUFBQSxPQUFSO0FBTUQsSzsyR0FFb0IsVUFBQUUsTUFBTSxFQUFJO0FBQUEseUJBQ2UsTUFBS0wsS0FEcEI7QUFBQSxVQUN0QkMsc0JBRHNCLGdCQUN0QkEsc0JBRHNCO0FBQUEsVUFDRUMsU0FERixnQkFDRUEsU0FERixFQUU3Qjs7QUFDQUQsTUFBQUEsc0JBQXNCLENBQUNHLFFBQXZCLENBQWdDO0FBQzlCRixRQUFBQSxTQUFTLG9CQUNKQSxTQURJO0FBRVBHLFVBQUFBLE1BQU0sRUFBTkEsTUFGTztBQUdQQyxVQUFBQSxNQUFNLEVBQUUsQ0FDTkQsTUFBTSxLQUFLLE9BQVgsR0FBcUIsRUFBckIsR0FBMEJBLE1BQU0sS0FBSyxLQUFYLEdBQW1CLENBQUMsRUFBcEIsR0FBeUIsQ0FEN0MsRUFFTkEsTUFBTSxLQUFLLFFBQVgsR0FBc0IsRUFBdEIsR0FBMkIsQ0FGckI7QUFIRDtBQURxQixPQUFoQztBQVVELEs7Ozs7Ozs2QkFFUTtBQUFBOztBQUFBLHlCQUlILEtBQUtMLEtBSkY7QUFBQSxVQUVMTyxvQkFGSyxnQkFFTEEsb0JBRks7QUFBQSxVQUdMTCxTQUhLLGdCQUdMQSxTQUhLO0FBS1AsYUFDRSxnQ0FBQyw0QkFBRDtBQUFrQixRQUFBLEtBQUssRUFBRSxPQUF6QjtBQUFrQyxRQUFBLFdBQVc7QUFBN0MsU0FDSSxnQ0FBQyxrQ0FBRCxRQUNFLGdDQUFDLHlCQUFEO0FBQ0UsUUFBQSxNQUFNLEVBQUVLLG9CQUFvQixDQUFDQyxNQUQvQjtBQUVFLFFBQUEsS0FBSyxFQUFFTixTQUFTLENBQUNPLEtBQVYsSUFBbUJQLFNBQVMsQ0FBQ08sS0FBVixDQUFnQkMsSUFBbkMsSUFBMkMsZ0JBRnBEO0FBR0UsUUFBQSxXQUFXLEVBQUUsT0FIZjtBQUlFLFFBQUEsUUFBUSxFQUFFLEtBQUtDLGlCQUFMLENBQXVCLE9BQXZCLENBSlo7QUFLRSxRQUFBLFFBQVE7QUFMVixRQURGLENBREosRUFVSSxnQ0FBQywrQ0FBRCxRQUNFLGdDQUFDLGtDQUFELFFBQ0UsZ0NBQUMsNEJBQUQsb0JBREYsRUFFRSxnQ0FBQyx1QkFBRCxnQ0FDTUMsaUNBQW1CQyxRQUR6QjtBQUVFLFFBQUEsTUFBTSxFQUFFWCxTQUFTLENBQUNZLElBRnBCO0FBR0UsUUFBQSxRQUFRLEVBQUUsa0JBQUFYLENBQUM7QUFBQSxpQkFBSSxNQUFJLENBQUNRLGlCQUFMLENBQXVCLE1BQXZCLEVBQStCUixDQUFDLENBQUMsQ0FBRCxDQUFoQyxDQUFKO0FBQUE7QUFIYixTQUZGLENBREYsRUFTRSxnQ0FBQyxrQ0FBRCxRQUNBLGdDQUFDLDRCQUFELHFCQURBLEVBRUUsZ0NBQUMseUJBQUQ7QUFDRSxRQUFBLFNBQVMsRUFBRSxDQUNUO0FBQ0VZLFVBQUFBLGFBQWEsRUFBRWIsU0FBUyxDQUFDYyxLQUQzQjtBQUVFQyxVQUFBQSxRQUFRLEVBQUUsS0FBS04saUJBQUwsQ0FBdUIsT0FBdkI7QUFGWixTQURTO0FBRGIsUUFGRixDQVRGLEVBb0JFLGdDQUFDLGtDQUFELFFBQ0UsZ0NBQUMsNEJBQUQsc0JBREYsRUFFRSxnQ0FBQyx3QkFBRCxnQ0FDTUMsaUNBQW1CTSxVQUR6QjtBQUVFLFFBQUEsYUFBYSxFQUFFaEIsU0FBUyxDQUFDRyxNQUYzQjtBQUdFLFFBQUEsUUFBUSxFQUFFLEtBQUtjO0FBSGpCLFNBRkYsQ0FwQkYsQ0FWSixDQURGO0FBMENEOzs7RUEvRTRDQyxnQjs7O2lDQUExQnRCLGlCLGVBQ0E7QUFDakJHLEVBQUFBLHNCQUFzQixFQUFFb0Isc0JBQVVDLE1BQVYsQ0FBaUJDLFVBRHhCO0FBRWpCckIsRUFBQUEsU0FBUyxFQUFFbUIsc0JBQVVDLE1BQVYsQ0FBaUJDLFVBRlg7QUFHakJoQixFQUFBQSxvQkFBb0IsRUFBRWMsc0JBQVVDLE1BQVYsQ0FBaUJDO0FBSHRCLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTkgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7UGFuZWxMYWJlbCwgU2lkZVBhbmVsU2VjdGlvbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IENvbG9yU2VsZWN0b3IgZnJvbSAnLi9jb2xvci1zZWxlY3Rvcic7XG5pbXBvcnQgRmllbGRTZWxlY3RvciBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9maWVsZC1zZWxlY3Rvcic7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2l0ZW0tc2VsZWN0b3IvaXRlbS1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cCwge0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50fSBmcm9tICcuL2xheWVyLWNvbmZpZy1ncm91cCc7XG5pbXBvcnQgUmFuZ2VTbGlkZXIgZnJvbSAnY29tcG9uZW50cy9jb21tb24vcmFuZ2Utc2xpZGVyJztcblxuaW1wb3J0IHtMQVlFUl9URVhUX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGF5ZXJDb25maWd1cmF0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICB0ZXh0TGFiZWw6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICB2aXNDb25maWd1cmF0b3JQcm9wczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG4gIH07XG5cbiAgb25BdHRyaWJ1dGVDaGFuZ2UgPSBhdHRyaWJ1dGUgPT4ge1xuICAgIGNvbnN0IHtsYXllckNvbmZpZ3VyYXRvclByb3BzLCB0ZXh0TGFiZWx9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gdiA9PiBsYXllckNvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtcbiAgICAgIHRleHRMYWJlbDoge1xuICAgICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICAgIFthdHRyaWJ1dGVdOiB2XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgb25DaGFuZ2VUZXh0QW5jaG9yID0gYW5jaG9yID0+IHtcbiAgICBjb25zdCB7bGF5ZXJDb25maWd1cmF0b3JQcm9wcywgdGV4dExhYmVsfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gVE9ETzogd2UgY2FuIGJlIHNtYXJ0ZXIgb24gZGV0ZXJtaW5pbmcgdGhlIG9mZnNldCBvZiB0aGUgdGV4dFxuICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe1xuICAgICAgdGV4dExhYmVsOiB7XG4gICAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBvZmZzZXQ6IFtcbiAgICAgICAgICBhbmNob3IgPT09ICdzdGFydCcgPyAxMCA6IGFuY2hvciA9PT0gJ2VuZCcgPyAtMTAgOiAwLFxuICAgICAgICAgIGFuY2hvciA9PT0gJ21pZGRsZScgPyAxMCA6IDBcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIHRleHRMYWJlbFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xhYmVsJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+IFxuICAgICAgICAgICAgPEZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgICAgZmllbGRzPXt2aXNDb25maWd1cmF0b3JQcm9wcy5maWVsZHN9XG4gICAgICAgICAgICAgIHZhbHVlPXt0ZXh0TGFiZWwuZmllbGQgJiYgdGV4dExhYmVsLmZpZWxkLm5hbWUgfHwgJ3NlbGVjdCBhIGZpZWxkJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9eydlbXB0eSd9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLm9uQXR0cmlidXRlQ2hhbmdlKCdmaWVsZCcpfVxuICAgICAgICAgICAgICBlcmFzYWJsZVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxQYW5lbExhYmVsPntgRm9udCBzaXplYH08L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5MQVlFUl9URVhUX0NPTkZJR1MuZm9udFNpemV9XG4gICAgICAgICAgICAgICAgdmFsdWUxPXt0ZXh0TGFiZWwuc2l6ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17diA9PiB0aGlzLm9uQXR0cmlidXRlQ2hhbmdlKCdzaXplJykodlsxXSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxQYW5lbExhYmVsPntgRm9udCBjb2xvcmB9PC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNvbG9yU2V0cz17W1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiB0ZXh0TGFiZWwuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIHNldENvbG9yOiB0aGlzLm9uQXR0cmlidXRlQ2hhbmdlKCdjb2xvcicpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICA8UGFuZWxMYWJlbD57YFRleHQgYW5jaG9yYH08L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4uTEFZRVJfVEVYVF9DT05GSUdTLnRleHRBbmNob3J9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17dGV4dExhYmVsLmFuY2hvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZVRleHRBbmNob3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICApO1xuICB9XG59XG4iXX0=