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
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvd2lkZ2V0LXBhbmVsL3RleHQtbGFiZWwtcGFuZWwuanMiXSwibmFtZXMiOlsiTGF5ZXJDb25maWd1cmF0b3IiLCJhdHRyaWJ1dGUiLCJwcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJ0ZXh0TGFiZWwiLCJ2Iiwib25DaGFuZ2UiLCJhbmNob3IiLCJvZmZzZXQiLCJ2aXNDb25maWd1cmF0b3JQcm9wcyIsImZpZWxkcyIsImZpZWxkIiwibmFtZSIsIm9uQXR0cmlidXRlQ2hhbmdlIiwiTEFZRVJfVEVYVF9DT05GSUdTIiwiZm9udFNpemUiLCJzaXplIiwic2VsZWN0ZWRDb2xvciIsImNvbG9yIiwic2V0Q29sb3IiLCJ0ZXh0QW5jaG9yIiwib25DaGFuZ2VUZXh0QW5jaG9yIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7SUFFcUJBLGlCOzs7Ozs7Ozs7Ozs7Ozs7OzswR0FPQyxVQUFBQyxTQUFTLEVBQUk7QUFBQSx3QkFDYSxNQUFLQyxLQURsQjtBQUFBLFVBQ3hCQyxzQkFEd0IsZUFDeEJBLHNCQUR3QjtBQUFBLFVBQ0FDLFNBREEsZUFDQUEsU0FEQTtBQUUvQixhQUFPLFVBQUFDLENBQUM7QUFBQSxlQUFJRixzQkFBc0IsQ0FBQ0csUUFBdkIsQ0FBZ0M7QUFDMUNGLFVBQUFBLFNBQVMsb0JBQ0pBLFNBREksdUNBRU5ILFNBRk0sRUFFTUksQ0FGTjtBQURpQyxTQUFoQyxDQUFKO0FBQUEsT0FBUjtBQU1ELEs7MkdBRW9CLFVBQUFFLE1BQU0sRUFBSTtBQUFBLHlCQUNlLE1BQUtMLEtBRHBCO0FBQUEsVUFDdEJDLHNCQURzQixnQkFDdEJBLHNCQURzQjtBQUFBLFVBQ0VDLFNBREYsZ0JBQ0VBLFNBREYsRUFFN0I7O0FBQ0FELE1BQUFBLHNCQUFzQixDQUFDRyxRQUF2QixDQUFnQztBQUM5QkYsUUFBQUEsU0FBUyxvQkFDSkEsU0FESTtBQUVQRyxVQUFBQSxNQUFNLEVBQU5BLE1BRk87QUFHUEMsVUFBQUEsTUFBTSxFQUFFLENBQ05ELE1BQU0sS0FBSyxPQUFYLEdBQXFCLEVBQXJCLEdBQTBCQSxNQUFNLEtBQUssS0FBWCxHQUFtQixDQUFDLEVBQXBCLEdBQXlCLENBRDdDLEVBRU5BLE1BQU0sS0FBSyxRQUFYLEdBQXNCLEVBQXRCLEdBQTJCLENBRnJCO0FBSEQ7QUFEcUIsT0FBaEM7QUFVRCxLOzs7Ozs7NkJBRVE7QUFBQTs7QUFBQSx5QkFJSCxLQUFLTCxLQUpGO0FBQUEsVUFFTE8sb0JBRkssZ0JBRUxBLG9CQUZLO0FBQUEsVUFHTEwsU0FISyxnQkFHTEEsU0FISztBQUtQLGFBQ0UsZ0NBQUMsNEJBQUQ7QUFBa0IsUUFBQSxLQUFLLEVBQUUsT0FBekI7QUFBa0MsUUFBQSxXQUFXO0FBQTdDLFNBQ0ksZ0NBQUMsa0NBQUQsUUFDRSxnQ0FBQyx5QkFBRDtBQUNFLFFBQUEsTUFBTSxFQUFFSyxvQkFBb0IsQ0FBQ0MsTUFEL0I7QUFFRSxRQUFBLEtBQUssRUFBRU4sU0FBUyxDQUFDTyxLQUFWLElBQW1CUCxTQUFTLENBQUNPLEtBQVYsQ0FBZ0JDLElBQW5DLElBQTJDLGdCQUZwRDtBQUdFLFFBQUEsV0FBVyxFQUFFLE9BSGY7QUFJRSxRQUFBLFFBQVEsRUFBRSxLQUFLQyxpQkFBTCxDQUF1QixPQUF2QixDQUpaO0FBS0UsUUFBQSxRQUFRO0FBTFYsUUFERixDQURKLEVBVUksZ0NBQUMsK0NBQUQsUUFDRSxnQ0FBQyxrQ0FBRCxRQUNFLGdDQUFDLDRCQUFELG9CQURGLEVBRUUsZ0NBQUMsdUJBQUQsZ0NBQ01DLGlDQUFtQkMsUUFEekI7QUFFRSxRQUFBLE1BQU0sRUFBRVgsU0FBUyxDQUFDWSxJQUZwQjtBQUdFLFFBQUEsUUFBUSxFQUFFLGtCQUFBWCxDQUFDO0FBQUEsaUJBQUksTUFBSSxDQUFDUSxpQkFBTCxDQUF1QixNQUF2QixFQUErQlIsQ0FBQyxDQUFDLENBQUQsQ0FBaEMsQ0FBSjtBQUFBO0FBSGIsU0FGRixDQURGLEVBU0UsZ0NBQUMsa0NBQUQsUUFDQSxnQ0FBQyw0QkFBRCxxQkFEQSxFQUVFLGdDQUFDLHlCQUFEO0FBQ0UsUUFBQSxTQUFTLEVBQUUsQ0FDVDtBQUNFWSxVQUFBQSxhQUFhLEVBQUViLFNBQVMsQ0FBQ2MsS0FEM0I7QUFFRUMsVUFBQUEsUUFBUSxFQUFFLEtBQUtOLGlCQUFMLENBQXVCLE9BQXZCO0FBRlosU0FEUztBQURiLFFBRkYsQ0FURixFQW9CRSxnQ0FBQyxrQ0FBRCxRQUNFLGdDQUFDLDRCQUFELHNCQURGLEVBRUUsZ0NBQUMsd0JBQUQsZ0NBQ01DLGlDQUFtQk0sVUFEekI7QUFFRSxRQUFBLGFBQWEsRUFBRWhCLFNBQVMsQ0FBQ0csTUFGM0I7QUFHRSxRQUFBLFFBQVEsRUFBRSxLQUFLYztBQUhqQixTQUZGLENBcEJGLENBVkosQ0FERjtBQTBDRDs7O0VBL0U0Q0MsZ0I7OztpQ0FBMUJ0QixpQixlQUNBO0FBQ2pCRyxFQUFBQSxzQkFBc0IsRUFBRW9CLHNCQUFVQyxNQUFWLENBQWlCQyxVQUR4QjtBQUVqQnJCLEVBQUFBLFNBQVMsRUFBRW1CLHNCQUFVQyxNQUFWLENBQWlCQyxVQUZYO0FBR2pCaEIsRUFBQUEsb0JBQW9CLEVBQUVjLHNCQUFVQyxNQUFWLENBQWlCQztBQUh0QixDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQge1BhbmVsTGFiZWwsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBDb2xvclNlbGVjdG9yIGZyb20gJy4vY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IEZpZWxkU2VsZWN0b3IgZnJvbSAnY29tcG9uZW50cy9jb21tb24vZmllbGQtc2VsZWN0b3InO1xuaW1wb3J0IEl0ZW1TZWxlY3RvciBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2l0ZW0tc2VsZWN0b3InO1xuaW1wb3J0IExheWVyQ29uZmlnR3JvdXAsIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IFJhbmdlU2xpZGVyIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3JhbmdlLXNsaWRlcic7XG5cbmltcG9ydCB7TEFZRVJfVEVYVF9DT05GSUdTfSBmcm9tICdsYXllcnMvbGF5ZXItZmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExheWVyQ29uZmlndXJhdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgdGV4dExhYmVsOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgdmlzQ29uZmlndXJhdG9yUHJvcHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxuICB9O1xuXG4gIG9uQXR0cmlidXRlQ2hhbmdlID0gYXR0cmlidXRlID0+IHtcbiAgICBjb25zdCB7bGF5ZXJDb25maWd1cmF0b3JQcm9wcywgdGV4dExhYmVsfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHYgPT4gbGF5ZXJDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSh7XG4gICAgICB0ZXh0TGFiZWw6IHtcbiAgICAgICAgLi4udGV4dExhYmVsLFxuICAgICAgICBbYXR0cmlidXRlXTogdlxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIG9uQ2hhbmdlVGV4dEFuY2hvciA9IGFuY2hvciA9PiB7XG4gICAgY29uc3Qge2xheWVyQ29uZmlndXJhdG9yUHJvcHMsIHRleHRMYWJlbH0gPSB0aGlzLnByb3BzO1xuICAgIC8vIFRPRE86IHdlIGNhbiBiZSBzbWFydGVyIG9uIGRldGVybWluaW5nIHRoZSBvZmZzZXQgb2YgdGhlIHRleHRcbiAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtcbiAgICAgIHRleHRMYWJlbDoge1xuICAgICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgb2Zmc2V0OiBbXG4gICAgICAgICAgYW5jaG9yID09PSAnc3RhcnQnID8gMTAgOiBhbmNob3IgPT09ICdlbmQnID8gLTEwIDogMCxcbiAgICAgICAgICBhbmNob3IgPT09ICdtaWRkbGUnID8gMTAgOiAwXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICB0ZXh0TGFiZWxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYWJlbCd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgPEZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgICAgZmllbGRzPXt2aXNDb25maWd1cmF0b3JQcm9wcy5maWVsZHN9XG4gICAgICAgICAgICAgIHZhbHVlPXt0ZXh0TGFiZWwuZmllbGQgJiYgdGV4dExhYmVsLmZpZWxkLm5hbWUgfHwgJ3NlbGVjdCBhIGZpZWxkJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9eydlbXB0eSd9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLm9uQXR0cmlidXRlQ2hhbmdlKCdmaWVsZCcpfVxuICAgICAgICAgICAgICBlcmFzYWJsZVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxQYW5lbExhYmVsPntgRm9udCBzaXplYH08L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5MQVlFUl9URVhUX0NPTkZJR1MuZm9udFNpemV9XG4gICAgICAgICAgICAgICAgdmFsdWUxPXt0ZXh0TGFiZWwuc2l6ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17diA9PiB0aGlzLm9uQXR0cmlidXRlQ2hhbmdlKCdzaXplJykodlsxXSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxQYW5lbExhYmVsPntgRm9udCBjb2xvcmB9PC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNvbG9yU2V0cz17W1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiB0ZXh0TGFiZWwuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIHNldENvbG9yOiB0aGlzLm9uQXR0cmlidXRlQ2hhbmdlKCdjb2xvcicpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICA8UGFuZWxMYWJlbD57YFRleHQgYW5jaG9yYH08L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4uTEFZRVJfVEVYVF9DT05GSUdTLnRleHRBbmNob3J9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17dGV4dExhYmVsLmFuY2hvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZVRleHRBbmNob3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICApO1xuICB9XG59XG4iXX0=