kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
111 lines (93 loc) • 16.6 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = BottomWidgetFactory;
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _timeWidget = _interopRequireDefault(require("./filters/time-widget"));
var _animationControl = _interopRequireDefault(require("./common/animation-control/animation-control"));
var _defaultSettings = require("../constants/default-settings");
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n display: flex;\n flex-direction: column;\n padding-top: ", "px;\n padding-right: ", "px;\n padding-bottom: ", "px;\n padding-left: ", "px;\n width: ", "px;\n bottom: 0;\n right: 0;\n z-index: 1;\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var propTypes = {
filters: _propTypes["default"].arrayOf(_propTypes["default"].object),
datasets: _propTypes["default"].object,
uiState: _propTypes["default"].object,
layers: _propTypes["default"].arrayOf(_propTypes["default"].object),
animationConfig: _propTypes["default"].object,
visStateActions: _propTypes["default"].object,
sidePanelWidth: _propTypes["default"].number,
containerW: _propTypes["default"].number
};
var maxWidth = 1080;
BottomWidgetFactory.deps = [_timeWidget["default"], _animationControl["default"]];
var BottomWidgetContainer = _styledComponents["default"].div(_templateObject(), function (props) {
return props.theme.sidePanel.margin.top;
}, function (props) {
return props.theme.sidePanel.margin.right;
}, function (props) {
return props.theme.sidePanel.margin.bottom;
}, function (props) {
return props.theme.sidePanel.margin.left;
}, function (props) {
return props.width;
});
function BottomWidgetFactory(TimeWidget, AnimationControl) {
var BottomWidget = function BottomWidget(props) {
var datasets = props.datasets,
filters = props.filters,
animationConfig = props.animationConfig,
visStateActions = props.visStateActions,
containerW = props.containerW,
uiState = props.uiState,
sidePanelWidth = props.sidePanelWidth,
layers = props.layers;
var activeSidePanel = uiState.activeSidePanel,
readOnly = uiState.readOnly;
var isOpen = Boolean(activeSidePanel);
var enlargedFilterIdx = filters.findIndex(function (f) {
return f.enlarged && f.type === _defaultSettings.FILTER_TYPES.timeRange;
});
var isAnyFilterAnimating = filters.some(function (f) {
return f.isAnimating;
});
var enlargedFilterWidth = isOpen ? containerW - sidePanelWidth : containerW; // show playback control if layers contain trip layer & at least one trip layer is visible
var animatedLayer = layers.filter(function (l) {
return l.config.animation && l.config.animation.enabled && l.config.isVisible;
});
var readToAnimation = Array.isArray(animationConfig.domain) && animationConfig.currentTime; // if animation control is showing, hide time display in time slider
var showFloatingTimeDisplay = !animatedLayer.length;
return _react["default"].createElement(BottomWidgetContainer, {
width: Math.min(maxWidth, enlargedFilterWidth),
className: "bottom-widget--container"
}, animatedLayer.length && readToAnimation ? _react["default"].createElement(AnimationControl, {
animationConfig: animationConfig,
updateAnimationTime: visStateActions.updateAnimationTime,
updateAnimationSpeed: visStateActions.updateLayerAnimationSpeed
}) : null, enlargedFilterIdx > -1 && Object.keys(datasets).length > 0 ? _react["default"].createElement(TimeWidget, {
filter: filters[enlargedFilterIdx],
index: enlargedFilterIdx,
isAnyFilterAnimating: isAnyFilterAnimating,
datasets: datasets,
readOnly: readOnly,
showTimeDisplay: showFloatingTimeDisplay,
setFilterPlot: visStateActions.setFilterPlot,
setFilter: visStateActions.setFilter,
toggleAnimation: visStateActions.toggleFilterAnimation,
updateAnimationSpeed: visStateActions.updateFilterAnimationSpeed,
enlargeFilter: visStateActions.enlargeFilter
}) : null);
};
BottomWidget.propTypes = propTypes;
return BottomWidget;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2JvdHRvbS13aWRnZXQuanMiXSwibmFtZXMiOlsicHJvcFR5cGVzIiwiZmlsdGVycyIsIlByb3BUeXBlcyIsImFycmF5T2YiLCJvYmplY3QiLCJkYXRhc2V0cyIsInVpU3RhdGUiLCJsYXllcnMiLCJhbmltYXRpb25Db25maWciLCJ2aXNTdGF0ZUFjdGlvbnMiLCJzaWRlUGFuZWxXaWR0aCIsIm51bWJlciIsImNvbnRhaW5lclciLCJtYXhXaWR0aCIsIkJvdHRvbVdpZGdldEZhY3RvcnkiLCJkZXBzIiwiVGltZVdpZGdldEZhY3RvcnkiLCJBbmltYXRpb25Db250cm9sRmFjdG9yeSIsIkJvdHRvbVdpZGdldENvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJ3aWR0aCIsIlRpbWVXaWRnZXQiLCJBbmltYXRpb25Db250cm9sIiwiQm90dG9tV2lkZ2V0IiwiYWN0aXZlU2lkZVBhbmVsIiwicmVhZE9ubHkiLCJpc09wZW4iLCJCb29sZWFuIiwiZW5sYXJnZWRGaWx0ZXJJZHgiLCJmaW5kSW5kZXgiLCJmIiwiZW5sYXJnZWQiLCJ0eXBlIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiaXNBbnlGaWx0ZXJBbmltYXRpbmciLCJzb21lIiwiaXNBbmltYXRpbmciLCJlbmxhcmdlZEZpbHRlcldpZHRoIiwiYW5pbWF0ZWRMYXllciIsImZpbHRlciIsImwiLCJjb25maWciLCJhbmltYXRpb24iLCJlbmFibGVkIiwiaXNWaXNpYmxlIiwicmVhZFRvQW5pbWF0aW9uIiwiQXJyYXkiLCJpc0FycmF5IiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzaG93RmxvYXRpbmdUaW1lRGlzcGxheSIsImxlbmd0aCIsIk1hdGgiLCJtaW4iLCJ1cGRhdGVBbmltYXRpb25UaW1lIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZCIsIk9iamVjdCIsImtleXMiLCJzZXRGaWx0ZXJQbG90Iiwic2V0RmlsdGVyIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWQiLCJlbmxhcmdlRmlsdGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsU0FBUyxHQUFHO0FBQ2hCQyxFQUFBQSxPQUFPLEVBQUVDLHNCQUFVQyxPQUFWLENBQWtCRCxzQkFBVUUsTUFBNUIsQ0FETztBQUVoQkMsRUFBQUEsUUFBUSxFQUFFSCxzQkFBVUUsTUFGSjtBQUdoQkUsRUFBQUEsT0FBTyxFQUFFSixzQkFBVUUsTUFISDtBQUloQkcsRUFBQUEsTUFBTSxFQUFFTCxzQkFBVUMsT0FBVixDQUFrQkQsc0JBQVVFLE1BQTVCLENBSlE7QUFLaEJJLEVBQUFBLGVBQWUsRUFBRU4sc0JBQVVFLE1BTFg7QUFNaEJLLEVBQUFBLGVBQWUsRUFBRVAsc0JBQVVFLE1BTlg7QUFPaEJNLEVBQUFBLGNBQWMsRUFBRVIsc0JBQVVTLE1BUFY7QUFRaEJDLEVBQUFBLFVBQVUsRUFBRVYsc0JBQVVTO0FBUk4sQ0FBbEI7QUFXQSxJQUFNRSxRQUFRLEdBQUcsSUFBakI7QUFFQUMsbUJBQW1CLENBQUNDLElBQXBCLEdBQTJCLENBQUNDLHNCQUFELEVBQW9CQyw0QkFBcEIsQ0FBM0I7O0FBRUEsSUFBTUMscUJBQXFCLEdBQUdDLDZCQUFPQyxHQUFWLG9CQUlWLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsU0FBWixDQUFzQkMsTUFBdEIsQ0FBNkJDLEdBQWpDO0FBQUEsQ0FKSyxFQUtSLFVBQUFKLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsU0FBWixDQUFzQkMsTUFBdEIsQ0FBNkJFLEtBQWpDO0FBQUEsQ0FMRyxFQU1QLFVBQUFMLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtB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Q0MsSUFBUCxDQUFZOUQsUUFBWixFQUFzQndELE1BQXRCLEdBQStCLENBQXpELEdBQ0MsZ0NBQUMsVUFBRDtBQUNFLE1BQUEsTUFBTSxFQUFFNUQsT0FBTyxDQUFDb0MsaUJBQUQsQ0FEakI7QUFFRSxNQUFBLEtBQUssRUFBRUEsaUJBRlQ7QUFHRSxNQUFBLG9CQUFvQixFQUFFTyxvQkFIeEI7QUFJRSxNQUFBLFFBQVEsRUFBRXZDLFFBSlo7QUFLRSxNQUFBLFFBQVEsRUFBRTZCLFFBTFo7QUFNRSxNQUFBLGVBQWUsRUFBRTBCLHVCQU5uQjtBQU9FLE1BQUEsYUFBYSxFQUFFbkQsZUFBZSxDQUFDMkQsYUFQakM7QUFRRSxNQUFBLFNBQVMsRUFBRTNELGVBQWUsQ0FBQzRELFNBUjdCO0FBU0UsTUFBQSxlQUFlLEVBQUU1RCxlQUFlLENBQUM2RCxxQkFUbkM7QUFVRSxNQUFBLG9CQUFvQixFQUFFN0QsZUFBZSxDQUFDOEQsMEJBVnhDO0FBV0UsTUFBQSxhQUFhLEVBQUU5RCxlQUFlLENBQUMrRDtBQVhqQyxNQURELEdBY0csSUF6Qk4sQ0FERjtBQTZCRCxHQTFERDs7QUE0REF4QyxFQUFBQSxZQUFZLENBQUNoQyxTQUFiLEdBQXlCQSxTQUF6QjtBQUVBLFNBQU9nQyxZQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFRpbWVXaWRnZXRGYWN0b3J5IGZyb20gJy4vZmlsdGVycy90aW1lLXdpZGdldCc7XG5pbXBvcnQgQW5pbWF0aW9uQ29udHJvbEZhY3RvcnkgZnJvbSAnLi9jb21tb24vYW5pbWF0aW9uLWNvbnRyb2wvYW5pbWF0aW9uLWNvbnRyb2wnO1xuaW1wb3J0IHtGSUxURVJfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuY29uc3QgcHJvcFR5cGVzID0ge1xuICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KSxcbiAgZGF0YXNldHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHVpU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGxheWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIGFuaW1hdGlvbkNvbmZpZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgdmlzU3RhdGVBY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzaWRlUGFuZWxXaWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgY29udGFpbmVyVzogUHJvcFR5cGVzLm51bWJlclxufTtcblxuY29uc3QgbWF4V2lkdGggPSAxMDgwO1xuXG5Cb3R0b21XaWRnZXRGYWN0b3J5LmRlcHMgPSBbVGltZVdpZGdldEZhY3RvcnksIEFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5XTtcblxuY29uc3QgQm90dG9tV2lkZ2V0Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nLXRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWwubWFyZ2luLnRvcH1weDtcbiAgcGFkZGluZy1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWwubWFyZ2luLnJpZ2h0fXB4O1xuICBwYWRkaW5nLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWwubWFyZ2luLmJvdHRvbX1weDtcbiAgcGFkZGluZy1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdH1weDtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMud2lkdGh9cHg7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIHotaW5kZXg6IDE7XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCb3R0b21XaWRnZXRGYWN0b3J5KFRpbWVXaWRnZXQsIEFuaW1hdGlvbkNvbnRyb2wpIHtcbiAgY29uc3QgQm90dG9tV2lkZ2V0ID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGFzZXRzLFxuICAgICAgZmlsdGVycyxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIGNvbnRhaW5lclcsXG4gICAgICB1aVN0YXRlLFxuICAgICAgc2lkZVBhbmVsV2lkdGgsXG4gICAgICBsYXllcnNcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCB7YWN0aXZlU2lkZVBhbmVsLCByZWFkT25seX0gPSB1aVN0YXRlO1xuICAgIGNvbnN0IGlzT3BlbiA9IEJvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKTtcblxuICAgIGNvbnN0IGVubGFyZ2VkRmlsdGVySWR4ID0gZmlsdGVycy5maW5kSW5kZXgoXG4gICAgICBmID0+IGYuZW5sYXJnZWQgJiYgZi50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlXG4gICAgKTtcbiAgICBjb25zdCBpc0FueUZpbHRlckFuaW1hdGluZyA9IGZpbHRlcnMuc29tZShmID0+IGYuaXNBbmltYXRpbmcpO1xuICAgIGNvbnN0IGVubGFyZ2VkRmlsdGVyV2lkdGggPSBpc09wZW4gPyBjb250YWluZXJXIC0gc2lkZVBhbmVsV2lkdGggOiBjb250YWluZXJXO1xuXG4gICAgLy8gc2hvdyBwbGF5YmFjayBjb250cm9sIGlmIGxheWVycyBjb250YWluIHRyaXAgbGF5ZXIgJiBhdCBsZWFzdCBvbmUgdHJpcCBsYXllciBpcyB2aXNpYmxlXG4gICAgY29uc3QgYW5pbWF0ZWRMYXllciA9IGxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmFuaW1hdGlvbiAmJiBsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLmNvbmZpZy5pc1Zpc2libGVcbiAgICApO1xuXG4gICAgY29uc3QgcmVhZFRvQW5pbWF0aW9uID0gQXJyYXkuaXNBcnJheShhbmltYXRpb25Db25maWcuZG9tYWluKSAmJiBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWU7XG4gICAgLy8gaWYgYW5pbWF0aW9uIGNvbnRyb2wgaXMgc2hvd2luZywgaGlkZSB0aW1lIGRpc3BsYXkgaW4gdGltZSBzbGlkZXJcbiAgICBjb25zdCBzaG93RmxvYXRpbmdUaW1lRGlzcGxheSA9ICFhbmltYXRlZExheWVyLmxlbmd0aDtcbiAgICByZXR1cm4gKFxuICAgICAgPEJvdHRvbVdpZGdldENvbnRhaW5lclxuICAgICAgICB3aWR0aD17TWF0aC5taW4obWF4V2lkdGgsIGVubGFyZ2VkRmlsdGVyV2lkdGgpfVxuICAgICAgICBjbGFzc05hbWU9XCJib3R0b20td2lkZ2V0LS1jb250YWluZXJcIlxuICAgICAgPlxuICAgICAgICB7YW5pbWF0ZWRMYXllci5sZW5ndGggJiYgcmVhZFRvQW5pbWF0aW9uID8gKFxuICAgICAgICAgIDxBbmltYXRpb25Db250cm9sXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWc9e2FuaW1hdGlvbkNvbmZpZ31cbiAgICAgICAgICAgIHVwZGF0ZUFuaW1hdGlvblRpbWU9e3Zpc1N0YXRlQWN0aW9ucy51cGRhdGVBbmltYXRpb25UaW1lfVxuICAgICAgICAgICAgdXBkYXRlQW5pbWF0aW9uU3BlZWQ9e3Zpc1N0YXRlQWN0aW9ucy51cGRhdGVMYXllckFuaW1hdGlvblNwZWVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7ZW5sYXJnZWRGaWx0ZXJJZHggPiAtMSAmJiBPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICA8VGltZVdpZGdldFxuICAgICAgICAgICAgZmlsdGVyPXtmaWx0ZXJzW2VubGFyZ2VkRmlsdGVySWR4XX1cbiAgICAgICAgICAgIGluZGV4PXtlbmxhcmdlZEZpbHRlcklkeH1cbiAgICAgICAgICAgIGlzQW55RmlsdGVyQW5pbWF0aW5nPXtpc0FueUZpbHRlckFuaW1hdGluZ31cbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgICAgICAgIHNob3dUaW1lRGlzcGxheT17c2hvd0Zsb2F0aW5nVGltZURpc3BsYXl9XG4gICAgICAgICAgICBzZXRGaWx0ZXJQbG90PXt2aXNTdGF0ZUFjdGlvbnMuc2V0RmlsdGVyUGxvdH1cbiAgICAgICAgICAgIHNldEZpbHRlcj17dmlzU3RhdGVBY3Rpb25zLnNldEZpbHRlcn1cbiAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbj17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUZpbHRlckFuaW1hdGlvbn1cbiAgICAgICAgICAgIHVwZGF0ZUFuaW1hdGlvblNwZWVkPXt2aXNTdGF0ZUFjdGlvbnMudXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWR9XG4gICAgICAgICAgICBlbmxhcmdlRmlsdGVyPXt2aXNTdGF0ZUFjdGlvbnMuZW5sYXJnZUZpbHRlcn1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvQm90dG9tV2lkZ2V0Q29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgQm90dG9tV2lkZ2V0LnByb3BUeXBlcyA9IHByb3BUeXBlcztcblxuICByZXR1cm4gQm90dG9tV2lkZ2V0O1xufVxuIl19
;