kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
162 lines (161 loc) • 32.3 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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
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 _constants = require("@kepler.gl/constants");
var _layerConfigurator = _interopRequireDefault(require("./layer-configurator"));
var _layerPanelHeader = _interopRequireDefault(require("./layer-panel-header"));
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 _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var PanelWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 12px;\n border-radius: 1px;\n z-index: 1000;\n &.dragging {\n cursor: move;\n }\n"])));
LayerPanelFactory.deps = [_layerConfigurator["default"], _layerPanelHeader["default"]];
function LayerPanelFactory(LayerConfigurator, LayerPanelHeader) {
var LayerPanel = /*#__PURE__*/function (_Component) {
function LayerPanel() {
var _this;
(0, _classCallCheck2["default"])(this, LayerPanel);
for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
_args[_key] = arguments[_key];
}
_this = _callSuper(this, LayerPanel, [].concat(_args));
(0, _defineProperty2["default"])(_this, "updateLayerConfig", function (newProp) {
_this.props.layerConfigChange(_this.props.layer, newProp);
});
(0, _defineProperty2["default"])(_this, "updateLayerType", function (newType) {
_this.props.layerTypeChange(_this.props.layer, newType);
});
(0, _defineProperty2["default"])(_this, "updateLayerVisConfig", function (newVisConfig) {
_this.props.layerVisConfigChange(_this.props.layer, newVisConfig);
});
(0, _defineProperty2["default"])(_this, "updateLayerColorUI", function () {
var _this$props;
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
(_this$props = _this.props).layerColorUIChange.apply(_this$props, [_this.props.layer].concat(args));
});
(0, _defineProperty2["default"])(_this, "updateLayerTextLabel", function () {
var _this$props2;
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
(_this$props2 = _this.props).layerTextLabelChange.apply(_this$props2, [_this.props.layer].concat(args));
});
(0, _defineProperty2["default"])(_this, "updateLayerVisualChannelConfig", function (newConfig, channel, newVisConfig) {
_this.props.layerVisualChannelConfigChange(_this.props.layer, newConfig, channel, newVisConfig);
});
(0, _defineProperty2["default"])(_this, "_updateLayerLabel", function (_ref) {
var value = _ref.target.value;
_this.updateLayerConfig({
label: value
});
});
(0, _defineProperty2["default"])(_this, "_toggleVisibility", function (e) {
e.stopPropagation();
var isVisible = !_this.props.layer.config.isVisible;
_this.props.layerToggleVisibility(_this.props.layer.id, isVisible);
});
(0, _defineProperty2["default"])(_this, "_resetIsValid", function (e) {
e === null || e === void 0 || e.stopPropagation();
// Make the layer valid and visible again after an error
_this.props.layerSetIsValid(_this.props.layer, true);
});
(0, _defineProperty2["default"])(_this, "_toggleEnableConfig", function (e) {
e === null || e === void 0 || e.stopPropagation();
var isConfigActive = _this.props.layer.config.isConfigActive;
_this.updateLayerConfig({
isConfigActive: !isConfigActive
});
});
(0, _defineProperty2["default"])(_this, "_removeLayer", function (e) {
e === null || e === void 0 || e.stopPropagation();
_this.props.removeLayer(_this.props.layer.id);
});
(0, _defineProperty2["default"])(_this, "_zoomToLayer", function (e) {
var _this$props$layer;
e === null || e === void 0 || e.stopPropagation();
var bounds = (_this$props$layer = _this.props.layer) === null || _this$props$layer === void 0 || (_this$props$layer = _this$props$layer.meta) === null || _this$props$layer === void 0 ? void 0 : _this$props$layer.bounds;
bounds && _this.props.zoomToLayer(bounds);
});
(0, _defineProperty2["default"])(_this, "_duplicateLayer", function (e) {
e === null || e === void 0 || e.stopPropagation();
_this.props.duplicateLayer(_this.props.layer.id);
});
return _this;
}
(0, _inherits2["default"])(LayerPanel, _Component);
return (0, _createClass2["default"])(LayerPanel, [{
key: "render",
value: function render() {
var _splitMap$layers;
var _this$props3 = this.props,
layer = _this$props3.layer,
datasets = _this$props3.datasets,
isDraggable = _this$props3.isDraggable,
layerTypeOptions = _this$props3.layerTypeOptions,
listeners = _this$props3.listeners,
splitMap = _this$props3.splitMap;
var config = layer.config,
isValid = layer.isValid;
var isConfigActive = config.isConfigActive;
var allowDuplicate = typeof layer.isValidToSave === 'function' && layer.isValidToSave() && isValid;
var layerVisInSplitMap = splitMap === null || splitMap === void 0 || (_splitMap$layers = splitMap.layers) === null || _splitMap$layers === void 0 ? void 0 : _splitMap$layers[layer.id];
return /*#__PURE__*/_react["default"].createElement(PanelWrapper, {
className: "layer-panel ".concat(this.props.className),
"data-testid": _constants.dataTestIds.layerPanel,
style: this.props.style,
onMouseDown: this.props.onMouseDown,
onTouchStart: this.props.onTouchStart
}, /*#__PURE__*/_react["default"].createElement(LayerPanelHeader, {
isConfigActive: isConfigActive,
layerId: layer.id,
isVisible: layerVisInSplitMap !== null && layerVisInSplitMap !== void 0 ? layerVisInSplitMap : config.isVisible,
isValid: isValid,
label: config.label,
labelRCGColorValues: config.dataId ? datasets[config.dataId].color : null,
layerType: layer.type,
allowDuplicate: allowDuplicate,
onToggleEnableConfig: this._toggleEnableConfig,
onToggleVisibility: this._toggleVisibility,
onResetIsValid: this._resetIsValid,
onUpdateLayerLabel: this._updateLayerLabel,
onRemoveLayer: this._removeLayer,
onZoomToLayer: this._zoomToLayer,
onDuplicateLayer: this._duplicateLayer,
isDragNDropEnabled: isDraggable,
listeners: listeners
}), isConfigActive && /*#__PURE__*/_react["default"].createElement(LayerConfigurator, {
layer: layer,
datasets: datasets,
layerTypeOptions: layerTypeOptions,
openModal: this.props.openModal,
updateLayerColorUI: this.updateLayerColorUI,
updateLayerConfig: this.updateLayerConfig,
updateLayerVisualChannelConfig: this.updateLayerVisualChannelConfig,
updateLayerType: this.updateLayerType,
updateLayerTextLabel: this.updateLayerTextLabel,
updateLayerVisConfig: this.updateLayerVisConfig
}));
}
}]);
}(_react.Component);
return LayerPanel;
}
var _default = exports["default"] = LayerPanelFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29uc3RhbnRzIiwiX2xheWVyQ29uZmlndXJhdG9yIiwiX2xheWVyUGFuZWxIZWFkZXIiLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIlBhbmVsV3JhcHBlciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiTGF5ZXJQYW5lbEZhY3RvcnkiLCJkZXBzIiwiTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5IiwiTGF5ZXJQYW5lbEhlYWRlckZhY3RvcnkiLCJMYXllckNvbmZpZ3VyYXRvciIsIkxheWVyUGFuZWxIZWFkZXIiLCJMYXllclBhbmVsIiwiX0NvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJfYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJuZXdQcm9wIiwicHJvcHMiLCJsYXllckNvbmZpZ0NoYW5nZSIsImxheWVyIiwibmV3VHlwZSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwiX3RoaXMkcHJvcHMiLCJfbGVuMiIsImFyZ3MiLCJfa2V5MiIsImxheWVyQ29sb3JVSUNoYW5nZSIsIl90aGlzJHByb3BzMiIsIl9sZW4zIiwiX2tleTMiLCJsYXllclRleHRMYWJlbENoYW5nZSIsIm5ld0NvbmZpZyIsImNoYW5uZWwiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJfcmVmIiwidmFsdWUiLCJ0YXJnZXQiLCJ1cGRhdGVMYXllckNvbmZpZyIsImxhYmVsIiwic3RvcFByb3BhZ2F0aW9uIiwiaXNWaXNpYmxlIiwiY29uZmlnIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5IiwiaWQiLCJsYXllclNldElzVmFsaWQiLCJpc0NvbmZpZ0FjdGl2ZSIsInJlbW92ZUxheWVyIiwiX3RoaXMkcHJvcHMkbGF5ZXIiLCJib3VuZHMiLCJtZXRhIiwiem9vbVRvTGF5ZXIiLCJkdXBsaWNhdGVMYXllciIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwicmVuZGVyIiwiX3NwbGl0TWFwJGxheWVycyIsIl90aGlzJHByb3BzMyIsImRhdGFzZXRzIiwiaXNEcmFnZ2FibGUiLCJsYXllclR5cGVPcHRpb25zIiwibGlzdGVuZXJzIiwic3BsaXRNYXAiLCJpc1ZhbGlkIiwiYWxsb3dEdXBsaWNhdGUiLCJpc1ZhbGlkVG9TYXZlIiwibGF5ZXJWaXNJblNwbGl0TWFwIiwibGF5ZXJzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImRhdGFUZXN0SWRzIiwibGF5ZXJQYW5lbCIsInN0eWxlIiwib25Nb3VzZURvd24iLCJvblRvdWNoU3RhcnQiLCJsYXllcklkIiwibGFiZWxSQ0dDb2xvclZhbHVlcyIsImRhdGFJZCIsImNvbG9yIiwibGF5ZXJUeXBlIiwidHlwZSIsIm9uVG9nZ2xlRW5hYmxlQ29uZmlnIiwiX3RvZ2dsZUVuYWJsZUNvbmZpZyIsIm9uVG9nZ2xlVmlzaWJpbGl0eSIsIl90b2dnbGVWaXNpYmlsaXR5Iiwib25SZXNldElzVmFsaWQiLCJfcmVzZXRJc1ZhbGlkIiwib25VcGRhdGVMYXllckxhYmVsIiwiX3VwZGF0ZUxheWVyTGFiZWwiLCJvblJlbW92ZUxheWVyIiwiX3JlbW92ZUxheWVyIiwib25ab29tVG9MYXllciIsIl96b29tVG9MYXllciIsIm9uRHVwbGljYXRlTGF5ZXIiLCJfZHVwbGljYXRlTGF5ZXIiLCJpc0RyYWdORHJvcEVuYWJsZWQiLCJvcGVuTW9kYWwiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJ1cGRhdGVMYXllclR5cGUiLCJ1cGRhdGVMYXllclRleHRMYWJlbCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiQ29tcG9uZW50IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItcGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge1xuICBDU1NQcm9wZXJ0aWVzLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIENvbXBvbmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIFRvdWNoRXZlbnRIYW5kbGVyXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge0FjdGlvbkhhbmRsZXIsIE1hcFN0YXRlQWN0aW9ucywgVmlzU3RhdGVBY3Rpb25zLCB0b2dnbGVNb2RhbH0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7ZGF0YVRlc3RJZHN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0NvbG9yVUksIExheWVyVmlzQ29uZmlnLCBOZXN0ZWRQYXJ0aWFsLCBTcGxpdE1hcH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQgTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5IGZyb20gJy4vbGF5ZXItY29uZmlndXJhdG9yJztcbmltcG9ydCBMYXllclBhbmVsSGVhZGVyRmFjdG9yeSBmcm9tICcuL2xheWVyLXBhbmVsLWhlYWRlcic7XG5cbnR5cGUgTGF5ZXJQYW5lbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogQ1NTUHJvcGVydGllcztcbiAgb25Nb3VzZURvd24/OiBNb3VzZUV2ZW50SGFuZGxlcjtcbiAgb25Ub3VjaFN0YXJ0PzogVG91Y2hFdmVudEhhbmRsZXI7XG4gIGxheWVyOiBMYXllcjtcbiAgZGF0YXNldHM6IERhdGFzZXRzO1xuICBsYXllclR5cGVPcHRpb25zOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGljb246IGFueTsgLy9cbiAgICByZXF1aXJlRGF0YTogYW55OyAvL1xuICB9W107XG4gIGlzRHJhZ2dhYmxlPzogYm9vbGVhbjtcbiAgaWR4OiBudW1iZXI7XG4gIG9wZW5Nb2RhbDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgdG9nZ2xlTW9kYWw+O1xuICBsYXllckNvbG9yVUlDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllckNvbG9yVUlDaGFuZ2U+O1xuICBsYXllckNvbmZpZ0NoYW5nZTogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlPjtcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlOiBBY3Rpb25IYW5kbGVyPFxuICAgIHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMubGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlXG4gID47XG4gIGxheWVyU2V0SXNWYWxpZDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmxheWVyU2V0SXNWYWxpZD47XG4gIGxheWVyVHlwZUNoYW5nZTogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmxheWVyVHlwZUNoYW5nZT47XG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMubGF5ZXJWaXNDb25maWdDaGFuZ2U+O1xuICBsYXllclRleHRMYWJlbENoYW5nZTogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmxheWVyVGV4dExhYmVsQ2hhbmdlPjtcbiAgcmVtb3ZlTGF5ZXI6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5yZW1vdmVMYXllcj47XG4gIHpvb21Ub0xheWVyOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBNYXBTdGF0ZUFjdGlvbnMuZml0Qm91bmRzPjtcbiAgZHVwbGljYXRlTGF5ZXI6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5kdXBsaWNhdGVMYXllcj47XG4gIGxpc3RlbmVycz86IFJlYWN0LkVsZW1lbnRUeXBlO1xuICBsYXllclRvZ2dsZVZpc2liaWxpdHk6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllclRvZ2dsZVZpc2liaWxpdHk+O1xuICBzcGxpdE1hcD86IFNwbGl0TWFwO1xufTtcblxuY29uc3QgUGFuZWxXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIHotaW5kZXg6IDEwMDA7XG4gICYuZHJhZ2dpbmcge1xuICAgIGN1cnNvcjogbW92ZTtcbiAgfVxuYDtcblxuTGF5ZXJQYW5lbEZhY3RvcnkuZGVwcyA9IFtMYXllckNvbmZpZ3VyYXRvckZhY3RvcnksIExheWVyUGFuZWxIZWFkZXJGYWN0b3J5XTtcblxuZnVuY3Rpb24gTGF5ZXJQYW5lbEZhY3RvcnkoXG4gIExheWVyQ29uZmlndXJhdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbmZpZ3VyYXRvckZhY3Rvcnk+LFxuICBMYXllclBhbmVsSGVhZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllclBhbmVsSGVhZGVyRmFjdG9yeT5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8TGF5ZXJQYW5lbFByb3BzPiB7XG4gIGNsYXNzIExheWVyUGFuZWwgZXh0ZW5kcyBDb21wb25lbnQ8TGF5ZXJQYW5lbFByb3BzPiB7XG4gICAgdXBkYXRlTGF5ZXJDb25maWcgPSAobmV3UHJvcDogUGFydGlhbDxMYXllckJhc2VDb25maWc+KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmxheWVyQ29uZmlnQ2hhbmdlKHRoaXMucHJvcHMubGF5ZXIsIG5ld1Byb3ApO1xuICAgIH07XG5cbiAgICB1cGRhdGVMYXllclR5cGUgPSAobmV3VHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmxheWVyVHlwZUNoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdUeXBlKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlTGF5ZXJWaXNDb25maWcgPSAobmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPikgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5sYXllclZpc0NvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdWaXNDb25maWcpO1xuICAgIH07XG5cbiAgICB1cGRhdGVMYXllckNvbG9yVUkgPSAoLi4uYXJnczogW3N0cmluZywgTmVzdGVkUGFydGlhbDxDb2xvclVJPl0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubGF5ZXJDb2xvclVJQ2hhbmdlKHRoaXMucHJvcHMubGF5ZXIsIC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICB1cGRhdGVMYXllclRleHRMYWJlbCA9ICguLi5hcmdzOiBbbnVtYmVyIHwgJ2FsbCcsIHN0cmluZywgYW55XSkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5sYXllclRleHRMYWJlbENoYW5nZSh0aGlzLnByb3BzLmxheWVyLCAuLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnID0gKFxuICAgICAgbmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz4sXG4gICAgICBjaGFubmVsOiBzdHJpbmcsXG4gICAgICBuZXdWaXNDb25maWc/OiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPlxuICAgICkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5sYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UodGhpcy5wcm9wcy5sYXllciwgbmV3Q29uZmlnLCBjaGFubmVsLCBuZXdWaXNDb25maWcpO1xuICAgIH07XG5cbiAgICBfdXBkYXRlTGF5ZXJMYWJlbDogQ2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+ID0gKHt0YXJnZXQ6IHt2YWx1ZX19KSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtsYWJlbDogdmFsdWV9KTtcbiAgICB9O1xuXG4gICAgX3RvZ2dsZVZpc2liaWxpdHk6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgaXNWaXNpYmxlID0gIXRoaXMucHJvcHMubGF5ZXIuY29uZmlnLmlzVmlzaWJsZTtcbiAgICAgIHRoaXMucHJvcHMubGF5ZXJUb2dnbGVWaXNpYmlsaXR5KHRoaXMucHJvcHMubGF5ZXIuaWQsIGlzVmlzaWJsZSk7XG4gICAgfTtcblxuICAgIF9yZXNldElzVmFsaWQ6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgICBlPy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIC8vIE1ha2UgdGhlIGxheWVyIHZhbGlkIGFuZCB2aXNpYmxlIGFnYWluIGFmdGVyIGFuIGVycm9yXG4gICAgICB0aGlzLnByb3BzLmxheWVyU2V0SXNWYWxpZCh0aGlzLnByb3BzLmxheWVyLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgX3RvZ2dsZUVuYWJsZUNvbmZpZzogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIGNvbmZpZzoge2lzQ29uZmlnQWN0aXZlfVxuICAgICAgICB9XG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2lzQ29uZmlnQWN0aXZlOiAhaXNDb25maWdBY3RpdmV9KTtcbiAgICB9O1xuXG4gICAgX3JlbW92ZUxheWVyOiBNb3VzZUV2ZW50SGFuZGxlciA9IGUgPT4ge1xuICAgICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnByb3BzLnJlbW92ZUxheWVyKHRoaXMucHJvcHMubGF5ZXIuaWQpO1xuICAgIH07XG5cbiAgICBfem9vbVRvTGF5ZXI6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgICBlPy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMucHJvcHMubGF5ZXI/Lm1ldGE/LmJvdW5kcztcbiAgICAgIGJvdW5kcyAmJiB0aGlzLnByb3BzLnpvb21Ub0xheWVyKGJvdW5kcyk7XG4gICAgfTtcblxuICAgIF9kdXBsaWNhdGVMYXllcjogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5wcm9wcy5kdXBsaWNhdGVMYXllcih0aGlzLnByb3BzLmxheWVyLmlkKTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2xheWVyLCBkYXRhc2V0cywgaXNEcmFnZ2FibGUsIGxheWVyVHlwZU9wdGlvbnMsIGxpc3RlbmVycywgc3BsaXRNYXB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtjb25maWcsIGlzVmFsaWR9ID0gbGF5ZXI7XG4gICAgICBjb25zdCB7aXNDb25maWdBY3RpdmV9ID0gY29uZmlnO1xuICAgICAgY29uc3QgYWxsb3dEdXBsaWNhdGUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXIuaXNWYWxpZFRvU2F2ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBsYXllci5pc1ZhbGlkVG9TYXZlKCkgJiYgaXNWYWxpZDtcbiAgICAgIGNvbnN0IGxheWVyVmlzSW5TcGxpdE1hcCA9IHNwbGl0TWFwPy5sYXllcnM/LltsYXllci5pZF07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYW5lbFdyYXBwZXJcbiAgICAgICAgICBjbGFzc05hbWU9e2BsYXllci1wYW5lbCAke3RoaXMucHJvcHMuY2xhc3NOYW1lfWB9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWRzLmxheWVyUGFuZWx9XG4gICAgICAgICAgc3R5bGU9e3RoaXMucHJvcHMuc3R5bGV9XG4gICAgICAgICAgb25Nb3VzZURvd249e3RoaXMucHJvcHMub25Nb3VzZURvd259XG4gICAgICAgICAgb25Ub3VjaFN0YXJ0PXt0aGlzLnByb3BzLm9uVG91Y2hTdGFydH1cbiAgICAgICAgPlxuICAgICAgICAgIDxMYXllclBhbmVsSGVhZGVyXG4gICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZT17aXNDb25maWdBY3RpdmV9XG4gICAgICAgICAgICBsYXllcklkPXtsYXllci5pZH1cbiAgICAgICAgICAgIGlzVmlzaWJsZT17bGF5ZXJWaXNJblNwbGl0TWFwID8/IGNvbmZpZy5pc1Zpc2libGV9XG4gICAgICAgICAgICBpc1ZhbGlkPXtpc1ZhbGlkfVxuICAgICAgICAgICAgbGFiZWw9e2NvbmZpZy5sYWJlbH1cbiAgICAgICAgICAgIGxhYmVsUkNHQ29sb3JWYWx1ZXM9e2NvbmZpZy5kYXRhSWQgPyBkYXRhc2V0c1tjb25maWcuZGF0YUlkXS5jb2xvciA6IG51bGx9XG4gICAgICAgICAgICBsYXllclR5cGU9e2xheWVyLnR5cGV9XG4gICAgICAgICAgICBhbGxvd0R1cGxpY2F0ZT17YWxsb3dEdXBsaWNhdGV9XG4gICAgICAgICAgICBvblRvZ2dsZUVuYWJsZUNvbmZpZz17dGhpcy5fdG9nZ2xlRW5hYmxlQ29uZmlnfVxuICAgICAgICAgICAgb25Ub2dnbGVWaXNpYmlsaXR5PXt0aGlzLl90b2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgICAgb25SZXNldElzVmFsaWQ9e3RoaXMuX3Jlc2V0SXNWYWxpZH1cbiAgICAgICAgICAgIG9uVXBkYXRlTGF5ZXJMYWJlbD17dGhpcy5fdXBkYXRlTGF5ZXJMYWJlbH1cbiAgICAgICAgICAgIG9uUmVtb3ZlTGF5ZXI9e3RoaXMuX3JlbW92ZUxheWVyfVxuICAgICAgICAgICAgb25ab29tVG9MYXllcj17dGhpcy5fem9vbVRvTGF5ZXJ9XG4gICAgICAgICAgICBvbkR1cGxpY2F0ZUxheWVyPXt0aGlzLl9kdXBsaWNhdGVMYXllcn1cbiAgICAgICAgICAgIGlzRHJhZ05Ecm9wRW5hYmxlZD17aXNEcmFnZ2FibGV9XG4gICAgICAgICAgICBsaXN0ZW5lcnM9e2xpc3RlbmVyc31cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtpc0NvbmZpZ0FjdGl2ZSAmJiAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWd1cmF0b3JcbiAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgIGxheWVyVHlwZU9wdGlvbnM9e2xheWVyVHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgIG9wZW5Nb2RhbD17dGhpcy5wcm9wcy5vcGVuTW9kYWx9XG4gICAgICAgICAgICAgIHVwZGF0ZUxheWVyQ29sb3JVST17dGhpcy51cGRhdGVMYXllckNvbG9yVUl9XG4gICAgICAgICAgICAgIHVwZGF0ZUxheWVyQ29uZmlnPXt0aGlzLnVwZGF0ZUxheWVyQ29uZmlnfVxuICAgICAgICAgICAgICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWc9e3RoaXMudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnfVxuICAgICAgICAgICAgICB1cGRhdGVMYXllclR5cGU9e3RoaXMudXBkYXRlTGF5ZXJUeXBlfVxuICAgICAgICAgICAgICB1cGRhdGVMYXllclRleHRMYWJlbD17dGhpcy51cGRhdGVMYXllclRleHRMYWJlbH1cbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJWaXNDb25maWc9e3RoaXMudXBkYXRlTGF5ZXJWaXNDb25maWd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvUGFuZWxXcmFwcGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJQYW5lbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXJQYW5lbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU9BLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFJQSxJQUFBSSxrQkFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUEyRCxJQUFBTSxlQUFBLEVBbEIzRDtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFULHdCQUFBUyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixD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
;