kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
88 lines (87 loc) • 27.8 kB
JavaScript
"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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _lib = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-redux/lib");
var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components"));
var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
var _channelByValueSelector = _interopRequireDefault(require("./channel-by-value-selector"));
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
var _layerColorSelector = require("./layer-color-selector");
var _radiusByZoomInput = _interopRequireDefault(require("./radius-by-zoom-input"));
var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
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; }
var StyledLayerConfigurator = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
VectorTileLayerConfiguratorFactory.deps = [_channelByValueSelector["default"], _layerColorSelector.LayerColorRangeSelectorFactory, _layerColorSelector.LayerColorSelectorFactory, _layerConfigGroup["default"], _visConfigSlider["default"], _visConfigSwitch["default"], _sourceDataSelector["default"]];
function VectorTileLayerConfiguratorFactory(ChannelByValueSelector, LayerColorRangeSelector, LayerColorSelector, LayerConfigGroup, VisConfigSlider, VisConfigSwitch) {
var VectorTileLayerConfigurator = function VectorTileLayerConfigurator(_ref) {
var _layer$config$visConf;
var layer = _ref.layer,
visConfiguratorProps = _ref.visConfiguratorProps,
layerChannelConfigProps = _ref.layerChannelConfigProps,
layerConfiguratorProps = _ref.layerConfiguratorProps;
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
label: "layer.fillColor"
}), layerChannelConfigProps.fields ? /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.color
})) : null, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.dynamicColor)), /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
channel: layer.visualChannels.color
}))) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
label: "layer.strokeColor",
collapsible: true
}), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.strokeColor
})), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
property: "strokeColorRange",
channel: layer.visualChannels.strokeColor
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
selectedColor: layer.config.visConfig.strokeColor,
property: "strokeColor"
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.stroked, {
label: "layer.strokeWidth",
collapsible: true
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
label: false
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeWidth, visConfiguratorProps, {
label: false
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.size
})))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
collapsible: true
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
label: false
})), layerChannelConfigProps.fields ? /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.height
})) : null), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
label: 'layer.radius',
description: "Point radius in pixels or meters",
collapsible: true
}), (_layer$config$visConf = layer.config.visConfig.radiusByZoom) !== null && _layer$config$visConf !== void 0 && _layer$config$visConf.enabled && visConfiguratorProps.onChange ? /*#__PURE__*/_react["default"].createElement(_radiusByZoomInput["default"], {
config: layer.config.visConfig.radiusByZoom,
onChange: visConfiguratorProps.onChange,
label: "Radius",
property: "radiusByZoom",
unit: "px"
}) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
label: false
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, layerChannelConfigProps.fields ? /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
channel: layer.visualChannels.radius
})) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.radiusUnits, visConfiguratorProps)))));
};
var ConnectedVectorTileLayerConfigurator = (0, _lib.connect)(function (state) {
return state;
})(VectorTileLayerConfigurator);
return ConnectedVectorTileLayerConfigurator;
}
var _default = exports["default"] = VectorTileLayerConfiguratorFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9saWIiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9zb3VyY2VEYXRhU2VsZWN0b3IiLCJfY2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsIl9sYXllckNvbmZpZ0dyb3VwIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbGF5ZXJDb2xvclNlbGVjdG9yIiwiX3JhZGl1c0J5Wm9vbUlucHV0IiwiX3Zpc0NvbmZpZ1NsaWRlciIsIl92aXNDb25maWdTd2l0Y2giLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRMYXllckNvbmZpZ3VyYXRvciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSIsIlZpc0NvbmZpZ1NsaWRlckZhY3RvcnkiLCJWaXNDb25maWdTd2l0Y2hGYWN0b3J5IiwiU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJMYXllckNvbG9yUmFuZ2VTZWxlY3RvciIsIkxheWVyQ29sb3JTZWxlY3RvciIsIkxheWVyQ29uZmlnR3JvdXAiLCJWaXNDb25maWdTbGlkZXIiLCJWaXNDb25maWdTd2l0Y2giLCJWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3IiLCJfcmVmIiwiX2xheWVyJGNvbmZpZyR2aXNDb25mIiwibGF5ZXIiLCJ2aXNDb25maWd1cmF0b3JQcm9wcyIsImxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwibGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJsYWJlbCIsImZpZWxkcyIsImNoYW5uZWwiLCJ2aXN1YWxDaGFubmVscyIsImNvbG9yIiwiY29uZmlnIiwiY29sb3JGaWVsZCIsIkZyYWdtZW50IiwidmlzQ29uZmlnU2V0dGluZ3MiLCJkeW5hbWljQ29sb3IiLCJvcGFjaXR5Iiwic3Ryb2tlZCIsImNvbGxhcHNpYmxlIiwic3Ryb2tlQ29sb3IiLCJzdHJva2VDb2xvckZpZWxkIiwicHJvcGVydHkiLCJzZWxlY3RlZENvbG9yIiwidmlzQ29uZmlnIiwiQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQiLCJzdHJva2VPcGFjaXR5Iiwic2l6ZUZpZWxkIiwic2l6ZVJhbmdlIiwic3Ryb2tlV2lkdGgiLCJzaXplIiwiZW5hYmxlM2QiLCJlbGV2YXRpb25TY2FsZSIsImhlaWdodCIsImRlc2NyaXB0aW9uIiwicmFkaXVzQnlab29tIiwiZW5hYmxlZCIsIm9uQ2hhbmdlIiwidW5pdCIsInJhZGl1cyIsInJhZGl1c1VuaXRzIiwiQ29ubmVjdGVkVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yIiwiY29ubmVjdCIsInN0YXRlIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3JjL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvdmVjdG9yLXRpbGUtbGF5ZXItY29uZmlndXJhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtWZWN0b3JUaWxlTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7S2VwbGVyVGFibGUgYXMgS2VwbGVyRGF0YXNldH0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4uL2NvbW1vbi9zb3VyY2UtZGF0YS1zZWxlY3Rvcic7XG5pbXBvcnQgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9jaGFubmVsLWJ5LXZhbHVlLXNlbGVjdG9yJztcbmltcG9ydCBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSwge0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50fSBmcm9tICcuL2xheWVyLWNvbmZpZy1ncm91cCc7XG5pbXBvcnQge0xheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSwgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeX0gZnJvbSAnLi9sYXllci1jb2xvci1zZWxlY3Rvcic7XG5pbXBvcnQgVmlzQ29uZmlnQnlab29tSW5wdXQgZnJvbSAnLi9yYWRpdXMtYnktem9vbS1pbnB1dCc7XG5pbXBvcnQgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctc2xpZGVyJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1zd2l0Y2gnO1xuXG5jb25zdCBTdHlsZWRMYXllckNvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXZgXG4gIG1hcmdpbi10b3A6IDEycHg7XG5gO1xuXG50eXBlIEdldFByb3BzPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IFJlYWN0LkZDPGFueT4+ID0gUGFyYW1ldGVyczxSZXR1cm5UeXBlPFQ+PlswXTtcblxudHlwZSBQcm9wcyA9IHtcbiAgbGF5ZXI6IFZlY3RvclRpbGVMYXllcjtcbiAgZGF0YXNldD86IEtlcGxlckRhdGFzZXQ7XG4gIHZpc0NvbmZpZ3VyYXRvclByb3BzOiBhbnk7XG4gIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzOiBHZXRQcm9wczx0eXBlb2YgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3Rvcnk+O1xuICBsYXllckNvbmZpZ3VyYXRvclByb3BzOiBhbnk7XG59O1xuXG5WZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnksXG4gIExheWVyQ29sb3JTZWxlY3RvckZhY3RvcnksXG4gIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5LFxuICBWaXNDb25maWdTbGlkZXJGYWN0b3J5LFxuICBWaXNDb25maWdTd2l0Y2hGYWN0b3J5LFxuICBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5XG5dO1xuXG5mdW5jdGlvbiBWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5KFxuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeT4sXG4gIExheWVyQ29sb3JSYW5nZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3Rvcnk+LFxuICBMYXllckNvbG9yU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sb3JTZWxlY3RvckZhY3Rvcnk+LFxuICBMYXllckNvbmZpZ0dyb3VwOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeT4sXG4gIFZpc0NvbmZpZ1NsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeT4sXG4gIFZpc0NvbmZpZ1N3aXRjaDogUmV0dXJuVHlwZTx0eXBlb2YgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeT5cbik6IFJlYWN0LkZDPFByb3BzPiB7XG4gIGNvbnN0IFZlY3RvclRpbGVMYXllckNvbmZpZ3VyYXRvciA9ICh7XG4gICAgbGF5ZXIsXG4gICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wc1xuICB9OiBQcm9wcykgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCI+XG4gICAgICAgICAge2xheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLmZpZWxkcyA/IChcbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2hcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmR5bmFtaWNDb2xvcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICB7LyogU3Ryb2tlIGNvbG9yICovfVxuICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICA+XG4gICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgcHJvcGVydHk9XCJzdHJva2VDb2xvclJhbmdlXCJcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgcHJvcGVydHk9XCJzdHJva2VDb2xvclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlT3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZH1cbiAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCJcbiAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICA+XG4gICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlV2lkdGh9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZH1cbiAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICA+XG4gICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2xheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLmZpZWxkcyA/IChcbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGVpZ2h0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ31cbiAgICAgICAgICBkZXNjcmlwdGlvbj1cIlBvaW50IHJhZGl1cyBpbiBwaXhlbHMgb3IgbWV0ZXJzXCJcbiAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICA+XG4gICAgICAgICAge2xheWVyLmNvbmZpZy52aXNDb25maWcucmFkaXVzQnlab29tPy5lbmFibGVkICYmIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlID8gKFxuICAgICAgICAgICAgPFZpc0NvbmZpZ0J5Wm9vbUlucHV0XG4gICAgICAgICAgICAgIGNvbmZpZz17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5yYWRpdXNCeVpvb219XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgbGFiZWw9XCJSYWRpdXNcIlxuICAgICAgICAgICAgICBwcm9wZXJ0eT1cInJhZGl1c0J5Wm9vbVwiXG4gICAgICAgICAgICAgIHVuaXQ9XCJweFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAge2xheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLmZpZWxkcyA/IChcbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXNVbml0c30gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgIDwvU3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBDb25uZWN0ZWRWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3IgPSBjb25uZWN0KHN0YXRlID0+IHN0YXRlKShWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3IpO1xuICByZXR1cm4gQ29ubmVjdGVkVmVjdG9yVGlsZUxheWVyQ29uZmlndXJhdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWZWN0b3JUaWxlTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsSUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUtBLElBQUFHLG1CQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFD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