kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
132 lines (131 loc) • 24.3 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"] = TimeRangeSliderFactory;
exports.getTimeBinsForInterval = getTimeBinsForInterval;
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _lodash = _interopRequireDefault(require("lodash.throttle"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _rangeSlider = _interopRequireDefault(require("./range-slider"));
var _timeSliderMarker = _interopRequireDefault(require("./time-slider-marker"));
var _playbackControls = _interopRequireDefault(require("./animation-control/playback-controls"));
var _timeRangeSliderTimeTitle = _interopRequireDefault(require("./time-range-slider-time-title"));
var _animationControl = _interopRequireDefault(require("./animation-control/animation-control"));
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 animationControlWidth = 176;
var StyledSliderContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n align-items: flex-end;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding-left: ", "px;\n\n .timeline-container .kg-slider {\n display: none;\n }\n\n .playback-controls {\n margin-left: 22px;\n }\n"])), function (props) {
return props.isEnlarged ? 24 : 0;
});
var ANIMATION_CONTROL_STYLE = {
flex: 1
};
TimeRangeSliderFactory.deps = [_playbackControls["default"], _rangeSlider["default"], _timeSliderMarker["default"], _timeRangeSliderTimeTitle["default"], _animationControl["default"]];
function getTimeBinsForInterval(timeBins, interval) {
if (!timeBins) return {};
return Object.keys(timeBins).reduce(function (acc, dataId) {
acc[dataId] = timeBins[dataId][interval];
return acc;
}, {});
}
function TimeRangeSliderFactory(PlaybackControls, RangeSlider, TimeSliderMarker, TimeRangeSliderTimeTitle, AnimationControl) {
var TimeRangeSlider = function TimeRangeSlider(props) {
var domain = props.domain,
value = props.value,
isEnlarged = props.isEnlarged,
isMinified = props.isMinified,
hideTimeTitle = props.hideTimeTitle,
isAnimating = props.isAnimating,
resetAnimation = props.resetAnimation,
timeFormat = props.timeFormat,
timezone = props.timezone,
timeBins = props.timeBins,
plotType = props.plotType,
lineChart = props.lineChart,
invertTrendColor = props.invertTrendColor,
step = props.step,
isAnimatable = props.isAnimatable,
speed = props.speed,
animationWindow = props.animationWindow,
updateAnimationSpeed = props.updateAnimationSpeed,
setFilterAnimationWindow = props.setFilterAnimationWindow,
toggleAnimation = props.toggleAnimation,
onChange = props.onChange,
setFilterPlot = props.setFilterPlot,
timeline = props.timeline;
var throttledOnchange = (0, _react.useMemo)(function () {
return (0, _lodash["default"])(onChange, 20);
}, [onChange]);
var binsForInterval = (0, _react.useMemo)(function () {
return getTimeBinsForInterval(timeBins, plotType === null || plotType === void 0 ? void 0 : plotType.interval);
}, [timeBins, plotType === null || plotType === void 0 ? void 0 : plotType.interval]);
var style = (0, _react.useMemo)(function () {
return {
width: isEnlarged ? "calc(100% - ".concat(animationControlWidth, "px)") : '100%'
};
}, [isEnlarged]);
return /*#__PURE__*/_react["default"].createElement("div", {
className: "time-range-slider"
}, !hideTimeTitle && isEnlarged ? /*#__PURE__*/_react["default"].createElement("div", {
className: "time-range-slider__title",
style: style
}, /*#__PURE__*/_react["default"].createElement(TimeRangeSliderTimeTitle, {
timeFormat: timeFormat,
timezone: timezone,
value: value,
isEnlarged: isEnlarged
})) : null, /*#__PURE__*/_react["default"].createElement(StyledSliderContainer, {
className: "time-range-slider__container",
isEnlarged: isEnlarged
}, !isMinified ? /*#__PURE__*/_react["default"].createElement("div", {
className: "timeline-container",
style: style
}, /*#__PURE__*/_react["default"].createElement(RangeSlider, {
range: domain,
value0: value[0],
value1: value[1],
bins: binsForInterval,
lineChart: lineChart,
invertTrendColor: invertTrendColor,
plotType: plotType,
isEnlarged: isEnlarged,
showInput: false,
step: step,
onChange: throttledOnchange,
xAxis: TimeSliderMarker,
timezone: timezone,
timeFormat: timeFormat,
setFilterPlot: setFilterPlot
})) : /*#__PURE__*/_react["default"].createElement(AnimationControl, {
style: ANIMATION_CONTROL_STYLE,
isAnimatable: isAnimatable,
isAnimating: isAnimating,
resetAnimation: resetAnimation,
toggleAnimation: toggleAnimation,
updateAnimationSpeed: updateAnimationSpeed,
setTimelineValue: throttledOnchange,
setAnimationWindow: setFilterAnimationWindow,
showTimeDisplay: false,
timeline: timeline
}), isEnlarged && !isMinified ? /*#__PURE__*/_react["default"].createElement(PlaybackControls, {
isAnimatable: isAnimatable,
width: animationControlWidth,
speed: speed,
animationWindow: animationWindow,
updateAnimationSpeed: updateAnimationSpeed,
setFilterAnimationWindow: setFilterAnimationWindow,
pauseAnimation: toggleAnimation,
resetAnimation: resetAnimation,
isAnimating: isAnimating,
startAnimation: toggleAnimation
}) : null));
};
return /*#__PURE__*/_react["default"].memo(TimeRangeSlider);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX3JhbmdlU2xpZGVyIiwiX3RpbWVTbGlkZXJNYXJrZXIiLCJfcGxheWJhY2tDb250cm9scyIsIl90aW1lUmFuZ2VTbGlkZXJUaW1lVGl0bGUiLCJfYW5pbWF0aW9uQ29udHJvbCIsIl90ZW1wbGF0ZU9iamVjdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsImFuaW1hdGlvbkNvbnRyb2xXaWR0aCIsIlN0eWxlZFNsaWRlckNvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJpc0VubGFyZ2VkIiwiQU5JTUFUSU9OX0NPTlRST0xfU1RZTEUiLCJmbGV4IiwiVGltZVJhbmdlU2xpZGVyRmFjdG9yeSIsImRlcHMiLCJQbGF5YmFja0NvbnRyb2xzRmFjdG9yeSIsIlJhbmdlU2xpZGVyRmFjdG9yeSIsIlRpbWVTbGlkZXJNYXJrZXJGYWN0b3J5IiwiVGltZVJhbmdlU2xpZGVyVGltZVRpdGxlRmFjdG9yeSIsIkFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5IiwiZ2V0VGltZUJpbnNGb3JJbnRlcnZhbCIsInRpbWVCaW5zIiwiaW50ZXJ2YWwiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwiZGF0YUlkIiwiUGxheWJhY2tDb250cm9scyIsIlJhbmdlU2xpZGVyIiwiVGltZVNsaWRlck1hcmtlciIsIlRpbWVSYW5nZVNsaWRlclRpbWVUaXRsZSIsIkFuaW1hdGlvbkNvbnRyb2wiLCJUaW1lUmFuZ2VTbGlkZXIiLCJkb21haW4iLCJ2YWx1ZSIsImlzTWluaWZpZWQiLCJoaWRlVGltZVRpdGxlIiwiaXNBbmltYXRpbmciLCJyZXNldEFuaW1hdGlvbiIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsInBsb3RUeXBlIiwibGluZUNoYXJ0IiwiaW52ZXJ0VHJlbmRDb2xvciIsInN0ZXAiLCJpc0FuaW1hdGFibGUiLCJzcGVlZCIsImFuaW1hdGlvbldpbmRvdyIsInVwZGF0ZUFuaW1hdGlvblNwZWVkIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93IiwidG9nZ2xlQW5pbWF0aW9uIiwib25DaGFuZ2UiLCJzZXRGaWx0ZXJQbG90IiwidGltZWxpbmUiLCJ0aHJvdHRsZWRPbmNoYW5nZSIsInVzZU1lbW8iLCJ0aHJvdHRsZSIsImJpbnNGb3JJbnRlcnZhbCIsInN0eWxlIiwid2lkdGgiLCJjb25jYXQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmFuZ2UiLCJ2YWx1ZTAiLCJ2YWx1ZTEiLCJiaW5zIiwic2hvd0lucHV0IiwieEF4aXMiLCJzZXRUaW1lbGluZVZhbHVlIiwic2V0QW5pbWF0aW9uV2luZG93Iiwic2hvd1RpbWVEaXNwbGF5IiwicGF1c2VBbmltYXRpb24iLCJzdGFydEFuaW1hdGlvbiIsIlJlYWN0IiwibWVtbyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vdGltZS1yYW5nZS1zbGlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0aHJvdHRsZSBmcm9tICdsb2Rhc2gudGhyb3R0bGUnO1xuaW1wb3J0IHN0eWxlZCwge0lTdHlsZWRDb21wb25lbnR9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IFJhbmdlU2xpZGVyRmFjdG9yeSBmcm9tICcuL3JhbmdlLXNsaWRlcic7XG5pbXBvcnQgVGltZVNsaWRlck1hcmtlckZhY3RvcnkgZnJvbSAnLi90aW1lLXNsaWRlci1tYXJrZXInO1xuaW1wb3J0IFBsYXliYWNrQ29udHJvbHNGYWN0b3J5IGZyb20gJy4vYW5pbWF0aW9uLWNvbnRyb2wvcGxheWJhY2stY29udHJvbHMnO1xuaW1wb3J0IFRpbWVSYW5nZVNsaWRlclRpbWVUaXRsZUZhY3RvcnkgZnJvbSAnLi90aW1lLXJhbmdlLXNsaWRlci10aW1lLXRpdGxlJztcbmltcG9ydCB7TGluZUNoYXJ0LCBUaW1lbGluZSwgQW5pbWF0aW9uQ29uZmlnLCBUaW1lQmluc30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0FjdGlvbkhhbmRsZXIsIHNldEZpbHRlclBsb3R9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQgQW5pbWF0aW9uQ29udHJvbEZhY3RvcnkgZnJvbSAnLi9hbmltYXRpb24tY29udHJvbC9hbmltYXRpb24tY29udHJvbCc7XG5pbXBvcnQge0Jhc2VDb21wb25lbnRQcm9wc30gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBhbmltYXRpb25Db250cm9sV2lkdGggPSAxNzY7XG5cbnR5cGUgVGltZVJhbmdlU2xpZGVyUHJvcHMgPSB7XG4gIGRvbWFpbj86IFtudW1iZXIsIG51bWJlcl07XG4gIHZhbHVlOiBbbnVtYmVyLCBudW1iZXJdO1xuICBpc0VubGFyZ2VkPzogYm9vbGVhbjtcbiAgaXNNaW5pZmllZD86IGJvb2xlYW47XG4gIGhpZGVUaW1lVGl0bGU/OiBib29sZWFuO1xuICBpc0FuaW1hdGluZzogYm9vbGVhbjtcbiAgdGltZUZvcm1hdDogc3RyaW5nO1xuICB0aW1lem9uZT86IHN0cmluZyB8IG51bGw7XG4gIHRpbWVCaW5zPzogVGltZUJpbnM7XG4gIHBsb3RUeXBlPzoge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgbGluZUNoYXJ0PzogTGluZUNoYXJ0O1xuICBzdGVwOiBudW1iZXI7XG4gIGlzQW5pbWF0YWJsZT86IGJvb2xlYW47XG4gIHNwZWVkOiBudW1iZXI7XG4gIGFuaW1hdGlvbldpbmRvdzogc3RyaW5nO1xuICByZXNldEFuaW1hdGlvbj86ICgpID0+IHZvaWQ7XG4gIHRvZ2dsZUFuaW1hdGlvbjogKCkgPT4gdm9pZDtcbiAgdXBkYXRlQW5pbWF0aW9uU3BlZWQ/OiAodmFsOiBudW1iZXIpID0+IHZvaWQ7XG4gIHNldEZpbHRlckFuaW1hdGlvbldpbmRvdz86IChpZDogc3RyaW5nKSA9PiB2b2lkO1xuICBzZXRGaWx0ZXJQbG90PzogQWN0aW9uSGFuZGxlcjx0eXBlb2Ygc2V0RmlsdGVyUGxvdD47XG4gIG9uQ2hhbmdlOiAodjogbnVtYmVyW10pID0+IHZvaWQ7XG4gIHRpbWVsaW5lOiBUaW1lbGluZTtcbiAgaW52ZXJ0VHJlbmRDb2xvcj86IGJvb2xlYW47XG4gIGFuaW1hdGlvbkNvbmZpZz86IEFuaW1hdGlvbkNvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlZFNsaWRlckNvbnRhaW5lclByb3BzID0gQmFzZUNvbXBvbmVudFByb3BzICYge1xuICBpc0VubGFyZ2VkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFN0eWxlZFNsaWRlckNvbnRhaW5lcjogSVN0eWxlZENvbXBvbmVudDxcbiAgJ3dlYicsXG4gIFN0eWxlZFNsaWRlckNvbnRhaW5lclByb3BzXG4+ID0gc3R5bGVkLmRpdjxTdHlsZWRTbGlkZXJDb250YWluZXJQcm9wcz5gXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nLWxlZnQ6ICR7cHJvcHMgPT4gKHByb3BzLmlzRW5sYXJnZWQgPyAyNCA6IDApfXB4O1xuXG4gIC50aW1lbGluZS1jb250YWluZXIgLmtnLXNsaWRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5wbGF5YmFjay1jb250cm9scyB7XG4gICAgbWFyZ2luLWxlZnQ6IDIycHg7XG4gIH1cbmA7XG5cbmNvbnN0IEFOSU1BVElPTl9DT05UUk9MX1NUWUxFID0ge2ZsZXg6IDF9O1xuXG5UaW1lUmFuZ2VTbGlkZXJGYWN0b3J5LmRlcHMgPSBbXG4gIFBsYXliYWNrQ29udHJvbHNGYWN0b3J5LFxuICBSYW5nZVNsaWRlckZhY3RvcnksXG4gIFRpbWVTbGlkZXJNYXJrZXJGYWN0b3J5LFxuICBUaW1lUmFuZ2VTbGlkZXJUaW1lVGl0bGVGYWN0b3J5LFxuICBBbmltYXRpb25Db250cm9sRmFjdG9yeVxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVCaW5zRm9ySW50ZXJ2YWwodGltZUJpbnM6IFRpbWVCaW5zIHwgdW5kZWZpbmVkLCBpbnRlcnZhbDogbnVtYmVyKSB7XG4gIGlmICghdGltZUJpbnMpIHJldHVybiB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRpbWVCaW5zKS5yZWR1Y2UoKGFjYywgZGF0YUlkKSA9PiB7XG4gICAgYWNjW2RhdGFJZF0gPSB0aW1lQmluc1tkYXRhSWRdW2ludGVydmFsXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRpbWVSYW5nZVNsaWRlckZhY3RvcnkoXG4gIFBsYXliYWNrQ29udHJvbHM6IFJldHVyblR5cGU8dHlwZW9mIFBsYXliYWNrQ29udHJvbHNGYWN0b3J5PixcbiAgUmFuZ2VTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFJhbmdlU2xpZGVyRmFjdG9yeT4sXG4gIFRpbWVTbGlkZXJNYXJrZXI6IFJldHVyblR5cGU8dHlwZW9mIFRpbWVTbGlkZXJNYXJrZXJGYWN0b3J5PixcbiAgVGltZVJhbmdlU2xpZGVyVGltZVRpdGxlOiBSZXR1cm5UeXBlPHR5cGVvZiBUaW1lUmFuZ2VTbGlkZXJUaW1lVGl0bGVGYWN0b3J5PixcbiAgQW5pbWF0aW9uQ29udHJvbDogUmV0dXJuVHlwZTx0eXBlb2YgQW5pbWF0aW9uQ29udHJvbEZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgVGltZVJhbmdlU2xpZGVyOiBSZWFjdC5GQzxUaW1lUmFuZ2VTbGlkZXJQcm9wcz4gPSBwcm9wcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZG9tYWluLFxuICAgICAgdmFsdWUsXG4gICAgICBpc0VubGFyZ2VkLFxuICAgICAgaXNNaW5pZmllZCxcbiAgICAgIGhpZGVUaW1lVGl0bGUsXG4gICAgICBpc0FuaW1hdGluZyxcbiAgICAgIHJlc2V0QW5pbWF0aW9uLFxuICAgICAgdGltZUZvcm1hdCxcbiAgICAgIHRpbWV6b25lLFxuICAgICAgdGltZUJpbnMsXG4gICAgICBwbG90VHlwZSxcbiAgICAgIGxpbmVDaGFydCxcbiAgICAgIGludmVydFRyZW5kQ29sb3IsXG4gICAgICBzdGVwLFxuICAgICAgaXNBbmltYXRhYmxlLFxuICAgICAgc3BlZWQsXG4gICAgICBhbmltYXRpb25XaW5kb3csXG4gICAgICB1cGRhdGVBbmltYXRpb25TcGVlZCxcbiAgICAgIHNldEZpbHRlckFuaW1hdGlvbldpbmRvdyxcbiAgICAgIHRvZ2dsZUFuaW1hdGlvbixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgc2V0RmlsdGVyUGxvdCxcbiAgICAgIHRpbWVsaW5lXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgdGhyb3R0bGVkT25jaGFuZ2UgPSB1c2VNZW1vKCgpID0+IHRocm90dGxlKG9uQ2hhbmdlLCAyMCksIFtvbkNoYW5nZV0pO1xuICAgIGNvbnN0IGJpbnNGb3JJbnRlcnZhbCA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiBnZXRUaW1lQmluc0ZvckludGVydmFsKHRpbWVCaW5zLCBwbG90VHlwZT8uaW50ZXJ2YWwpLFxuICAgICAgW3RpbWVCaW5zLCBwbG90VHlwZT8uaW50ZXJ2YWxdXG4gICAgKTtcblxuICAgIGNvbnN0IHN0eWxlID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIHdpZHRoOiBpc0VubGFyZ2VkID8gYGNhbGMoMTAwJSAtICR7YW5pbWF0aW9uQ29udHJvbFdpZHRofXB4KWAgOiAnMTAwJSdcbiAgICAgIH0pLFxuICAgICAgW2lzRW5sYXJnZWRdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpbWUtcmFuZ2Utc2xpZGVyXCI+XG4gICAgICAgIHshaGlkZVRpbWVUaXRsZSAmJiBpc0VubGFyZ2VkID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGltZS1yYW5nZS1zbGlkZXJfX3RpdGxlXCIgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgIDxUaW1lUmFuZ2VTbGlkZXJUaW1lVGl0bGVcbiAgICAgICAgICAgICAgdGltZUZvcm1hdD17dGltZUZvcm1hdH1cbiAgICAgICAgICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgIGlzRW5sYXJnZWQ9e2lzRW5sYXJnZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPFN0eWxlZFNsaWRlckNvbnRhaW5lciBjbGFzc05hbWU9XCJ0aW1lLXJhbmdlLXNsaWRlcl9fY29udGFpbmVyXCIgaXNFbmxhcmdlZD17aXNFbmxhcmdlZH0+XG4gICAgICAgICAgeyFpc01pbmlmaWVkID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aW1lbGluZS1jb250YWluZXJcIiBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICA8UmFuZ2VTbGlkZXJcbiAgICAgICAgICAgICAgICByYW5nZT17ZG9tYWlufVxuICAgICAgICAgICAgICAgIHZhbHVlMD17dmFsdWVbMF19XG4gICAgICAgICAgICAgICAgdmFsdWUxPXt2YWx1ZVsxXX1cbiAgICAgICAgICAgICAgICBiaW5zPXtiaW5zRm9ySW50ZXJ2YWx9XG4gICAgICAgICAgICAgICAgbGluZUNoYXJ0PXtsaW5lQ2hhcnR9XG4gICAgICAgICAgICAgICAgaW52ZXJ0VHJlbmRDb2xvcj17aW52ZXJ0VHJlbmRDb2xvcn1cbiAgICAgICAgICAgICAgICBwbG90VHlwZT17cGxvdFR5cGV9XG4gICAgICAgICAgICAgICAgaXNFbmxhcmdlZD17aXNFbmxhcmdlZH1cbiAgICAgICAgICAgICAgICBzaG93SW5wdXQ9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHN0ZXA9e3N0ZXB9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Rocm90dGxlZE9uY2hhbmdlfVxuICAgICAgICAgICAgICAgIHhBeGlzPXtUaW1lU2xpZGVyTWFya2VyfVxuICAgICAgICAgICAgICAgIHRpbWV6b25lPXt0aW1lem9uZX1cbiAgICAgICAgICAgICAgICB0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuICAgICAgICAgICAgICAgIHNldEZpbHRlclBsb3Q9e3NldEZpbHRlclBsb3R9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEFuaW1hdGlvbkNvbnRyb2xcbiAgICAgICAgICAgICAgc3R5bGU9e0FOSU1BVElPTl9DT05UUk9MX1NUWUxFfVxuICAgICAgICAgICAgICBpc0FuaW1hdGFibGU9e2lzQW5pbWF0YWJsZX1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9e2lzQW5pbWF0aW5nfVxuICAgICAgICAgICAgICByZXNldEFuaW1hdGlvbj17cmVzZXRBbmltYXRpb259XG4gICAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbj17dG9nZ2xlQW5pbWF0aW9ufVxuICAgICAgICAgICAgICB1cGRhdGVBbmltYXRpb25TcGVlZD17dXBkYXRlQW5pbWF0aW9uU3BlZWR9XG4gICAgICAgICAgICAgIHNldFRpbWVsaW5lVmFsdWU9e3Rocm90dGxlZE9uY2hhbmdlfVxuICAgICAgICAgICAgICBzZXRBbmltYXRpb25XaW5kb3c9e3NldEZpbHRlckFuaW1hdGlvbldpbmRvd31cbiAgICAgICAgICAgICAgc2hvd1RpbWVEaXNwbGF5PXtmYWxzZX1cbiAgICAgICAgICAgICAgdGltZWxpbmU9e3RpbWVsaW5lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc0VubGFyZ2VkICYmICFpc01pbmlmaWVkID8gKFxuICAgICAgICAgICAgPFBsYXliYWNrQ29udHJvbHNcbiAgICAgICAgICAgICAgaXNBbmltYXRhYmxlPXtpc0FuaW1hdGFibGV9XG4gICAgICAgICAgICAgIHdpZHRoPXthbmltYXRpb25Db250cm9sV2lkdGh9XG4gICAgICAgICAgICAgIHNwZWVkPXtzcGVlZH1cbiAgICAgICAgICAgICAgYW5pbWF0aW9uV2luZG93PXthbmltYXRpb25XaW5kb3d9XG4gICAgICAgICAgICAgIHVwZGF0ZUFuaW1hdGlvblNwZWVkPXt1cGRhdGVBbmltYXRpb25TcGVlZH1cbiAgICAgICAgICAgICAgc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93PXtzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3d9XG4gICAgICAgICAgICAgIHBhdXNlQW5pbWF0aW9uPXt0b2dnbGVBbmltYXRpb259XG4gICAgICAgICAgICAgIHJlc2V0QW5pbWF0aW9uPXtyZXNldEFuaW1hdGlvbn1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9e2lzQW5pbWF0aW5nfVxuICAgICAgICAgICAgICBzdGFydEFuaW1hdGlvbj17dG9nZ2xlQW5pbWF0aW9ufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRTbGlkZXJDb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBSZWFjdC5tZW1vKFRpbWVSYW5nZVNsaWRlcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFB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