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 _throttle = _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, _throttle["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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdGhyb3R0bGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3N0eWxlZENvbXBvbmVudHMiLCJfcmFuZ2VTbGlkZXIiLCJfdGltZVNsaWRlck1hcmtlciIsIl9wbGF5YmFja0NvbnRyb2xzIiwiX3RpbWVSYW5nZVNsaWRlclRpbWVUaXRsZSIsIl9hbmltYXRpb25Db250cm9sIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiYW5pbWF0aW9uQ29udHJvbFdpZHRoIiwiU3R5bGVkU2xpZGVyQ29udGFpbmVyIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsImlzRW5sYXJnZWQiLCJBTklNQVRJT05fQ09OVFJPTF9TVFlMRSIsImZsZXgiLCJUaW1lUmFuZ2VTbGlkZXJGYWN0b3J5IiwiZGVwcyIsIlBsYXliYWNrQ29udHJvbHNGYWN0b3J5IiwiUmFuZ2VTbGlkZXJGYWN0b3J5IiwiVGltZVNsaWRlck1hcmtlckZhY3RvcnkiLCJUaW1lUmFuZ2VTbGlkZXJUaW1lVGl0bGVGYWN0b3J5IiwiQW5pbWF0aW9uQ29udHJvbEZhY3RvcnkiLCJnZXRUaW1lQmluc0ZvckludGVydmFsIiwidGltZUJpbnMiLCJpbnRlcnZhbCIsImtleXMiLCJyZWR1Y2UiLCJhY2MiLCJkYXRhSWQiLCJQbGF5YmFja0NvbnRyb2xzIiwiUmFuZ2VTbGlkZXIiLCJUaW1lU2xpZGVyTWFya2VyIiwiVGltZVJhbmdlU2xpZGVyVGltZVRpdGxlIiwiQW5pbWF0aW9uQ29udHJvbCIsIlRpbWVSYW5nZVNsaWRlciIsImRvbWFpbiIsInZhbHVlIiwiaXNNaW5pZmllZCIsImhpZGVUaW1lVGl0bGUiLCJpc0FuaW1hdGluZyIsInJlc2V0QW5pbWF0aW9uIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwicGxvdFR5cGUiLCJsaW5lQ2hhcnQiLCJpbnZlcnRUcmVuZENvbG9yIiwic3RlcCIsImlzQW5pbWF0YWJsZSIsInNwZWVkIiwiYW5pbWF0aW9uV2luZG93IiwidXBkYXRlQW5pbWF0aW9uU3BlZWQiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3ciLCJ0b2dnbGVBbmltYXRpb24iLCJvbkNoYW5nZSIsInNldEZpbHRlclBsb3QiLCJ0aW1lbGluZSIsInRocm90dGxlZE9uY2hhbmdlIiwidXNlTWVtbyIsInRocm90dGxlIiwiYmluc0ZvckludGVydmFsIiwic3R5bGUiLCJ3aWR0aCIsImNvbmNhdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJyYW5nZSIsInZhbHVlMCIsInZhbHVlMSIsImJpbnMiLCJzaG93SW5wdXQiLCJ4QXhpcyIsInNldFRpbWVsaW5lVmFsdWUiLCJzZXRBbmltYXRpb25XaW5kb3ciLCJzaG93VGltZURpc3BsYXkiLCJwYXVzZUFuaW1hdGlvbiIsInN0YXJ0QW5pbWF0aW9uIiwiUmVhY3QiLCJtZW1vIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi90aW1lLXJhbmdlLXNsaWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJ2xvZGFzaC90aHJvdHRsZSc7XG5pbXBvcnQgc3R5bGVkLCB7SVN0eWxlZENvbXBvbmVudH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgUmFuZ2VTbGlkZXJGYWN0b3J5IGZyb20gJy4vcmFuZ2Utc2xpZGVyJztcbmltcG9ydCBUaW1lU2xpZGVyTWFya2VyRmFjdG9yeSBmcm9tICcuL3RpbWUtc2xpZGVyLW1hcmtlcic7XG5pbXBvcnQgUGxheWJhY2tDb250cm9sc0ZhY3RvcnkgZnJvbSAnLi9hbmltYXRpb24tY29udHJvbC9wbGF5YmFjay1jb250cm9scyc7XG5pbXBvcnQgVGltZVJhbmdlU2xpZGVyVGltZVRpdGxlRmFjdG9yeSBmcm9tICcuL3RpbWUtcmFuZ2Utc2xpZGVyLXRpbWUtdGl0bGUnO1xuaW1wb3J0IHtMaW5lQ2hhcnQsIFRpbWVsaW5lLCBBbmltYXRpb25Db25maWcsIFRpbWVCaW5zfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7QWN0aW9uSGFuZGxlciwgc2V0RmlsdGVyUGxvdH0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCBBbmltYXRpb25Db250cm9sRmFjdG9yeSBmcm9tICcuL2FuaW1hdGlvbi1jb250cm9sL2FuaW1hdGlvbi1jb250cm9sJztcbmltcG9ydCB7QmFzZUNvbXBvbmVudFByb3BzfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGFuaW1hdGlvbkNvbnRyb2xXaWR0aCA9IDE3NjtcblxudHlwZSBUaW1lUmFuZ2VTbGlkZXJQcm9wcyA9IHtcbiAgZG9tYWluPzogW251bWJlciwgbnVtYmVyXTtcbiAgdmFsdWU6IFtudW1iZXIsIG51bWJlcl07XG4gIGlzRW5sYXJnZWQ/OiBib29sZWFuO1xuICBpc01pbmlmaWVkPzogYm9vbGVhbjtcbiAgaGlkZVRpbWVUaXRsZT86IGJvb2xlYW47XG4gIGlzQW5pbWF0aW5nOiBib29sZWFuO1xuICB0aW1lRm9ybWF0OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nIHwgbnVsbDtcbiAgdGltZUJpbnM/OiBUaW1lQmlucztcbiAgcGxvdFR5cGU/OiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xuICBsaW5lQ2hhcnQ/OiBMaW5lQ2hhcnQ7XG4gIHN0ZXA6IG51bWJlcjtcbiAgaXNBbmltYXRhYmxlPzogYm9vbGVhbjtcbiAgc3BlZWQ6IG51bWJlcjtcbiAgYW5pbWF0aW9uV2luZG93OiBzdHJpbmc7XG4gIHJlc2V0QW5pbWF0aW9uPzogKCkgPT4gdm9pZDtcbiAgdG9nZ2xlQW5pbWF0aW9uOiAoKSA9PiB2b2lkO1xuICB1cGRhdGVBbmltYXRpb25TcGVlZD86ICh2YWw6IG51bWJlcikgPT4gdm9pZDtcbiAgc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93PzogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNldEZpbHRlclBsb3Q/OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBzZXRGaWx0ZXJQbG90PjtcbiAgb25DaGFuZ2U6ICh2OiBudW1iZXJbXSkgPT4gdm9pZDtcbiAgdGltZWxpbmU6IFRpbWVsaW5lO1xuICBpbnZlcnRUcmVuZENvbG9yPzogYm9vbGVhbjtcbiAgYW5pbWF0aW9uQ29uZmlnPzogQW5pbWF0aW9uQ29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVkU2xpZGVyQ29udGFpbmVyUHJvcHMgPSBCYXNlQ29tcG9uZW50UHJvcHMgJiB7XG4gIGlzRW5sYXJnZWQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgU3R5bGVkU2xpZGVyQ29udGFpbmVyOiBJU3R5bGVkQ29tcG9uZW50PFxuICAnd2ViJyxcbiAgU3R5bGVkU2xpZGVyQ29udGFpbmVyUHJvcHNcbj4gPSBzdHlsZWQuZGl2PFN0eWxlZFNsaWRlckNvbnRhaW5lclByb3BzPmBcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmctbGVmdDogJHtwcm9wcyA9PiAocHJvcHMuaXNFbmxhcmdlZCA/IDI0IDogMCl9cHg7XG5cbiAgLnRpbWVsaW5lLWNvbnRhaW5lciAua2ctc2xpZGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLnBsYXliYWNrLWNvbnRyb2xzIHtcbiAgICBtYXJnaW4tbGVmdDogMjJweDtcbiAgfVxuYDtcblxuY29uc3QgQU5JTUFUSU9OX0NPTlRST0xfU1RZTEUgPSB7ZmxleDogMX07XG5cblRpbWVSYW5nZVNsaWRlckZhY3RvcnkuZGVwcyA9IFtcbiAgUGxheWJhY2tDb250cm9sc0ZhY3RvcnksXG4gIFJhbmdlU2xpZGVyRmFjdG9yeSxcbiAgVGltZVNsaWRlck1hcmtlckZhY3RvcnksXG4gIFRpbWVSYW5nZVNsaWRlclRpbWVUaXRsZUZhY3RvcnksXG4gIEFuaW1hdGlvbkNvbnRyb2xGYWN0b3J5XG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZUJpbnNGb3JJbnRlcnZhbCh0aW1lQmluczogVGltZUJpbnMgfCB1bmRlZmluZWQsIGludGVydmFsOiBudW1iZXIpIHtcbiAgaWYgKCF0aW1lQmlucykgcmV0dXJuIHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXModGltZUJpbnMpLnJlZHVjZSgoYWNjLCBkYXRhSWQpID0+IHtcbiAgICBhY2NbZGF0YUlkXSA9IHRpbWVCaW5zW2RhdGFJZF1baW50ZXJ2YWxdO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGltZVJhbmdlU2xpZGVyRmFjdG9yeShcbiAgUGxheWJhY2tDb250cm9sczogUmV0dXJuVHlwZTx0eXBlb2YgUGxheWJhY2tDb250cm9sc0ZhY3Rvcnk+LFxuICBSYW5nZVNsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgUmFuZ2VTbGlkZXJGYWN0b3J5PixcbiAgVGltZVNsaWRlck1hcmtlcjogUmV0dXJuVHlwZTx0eXBlb2YgVGltZVNsaWRlck1hcmtlckZhY3Rvcnk+LFxuICBUaW1lUmFuZ2VTbGlkZXJUaW1lVGl0bGU6IFJldHVyblR5cGU8dHlwZW9mIFRpbWVSYW5nZVNsaWRlclRpbWVUaXRsZUZhY3Rvcnk+LFxuICBBbmltYXRpb25Db250cm9sOiBSZXR1cm5UeXBlPHR5cGVvZiBBbmltYXRpb25Db250cm9sRmFjdG9yeT5cbikge1xuICBjb25zdCBUaW1lUmFuZ2VTbGlkZXI6IFJlYWN0LkZDPFRpbWVSYW5nZVNsaWRlclByb3BzPiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkb21haW4sXG4gICAgICB2YWx1ZSxcbiAgICAgIGlzRW5sYXJnZWQsXG4gICAgICBpc01pbmlmaWVkLFxuICAgICAgaGlkZVRpbWVUaXRsZSxcbiAgICAgIGlzQW5pbWF0aW5nLFxuICAgICAgcmVzZXRBbmltYXRpb24sXG4gICAgICB0aW1lRm9ybWF0LFxuICAgICAgdGltZXpvbmUsXG4gICAgICB0aW1lQmlucyxcbiAgICAgIHBsb3RUeXBlLFxuICAgICAgbGluZUNoYXJ0LFxuICAgICAgaW52ZXJ0VHJlbmRDb2xvcixcbiAgICAgIHN0ZXAsXG4gICAgICBpc0FuaW1hdGFibGUsXG4gICAgICBzcGVlZCxcbiAgICAgIGFuaW1hdGlvbldpbmRvdyxcbiAgICAgIHVwZGF0ZUFuaW1hdGlvblNwZWVkLFxuICAgICAgc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93LFxuICAgICAgdG9nZ2xlQW5pbWF0aW9uLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBzZXRGaWx0ZXJQbG90LFxuICAgICAgdGltZWxpbmVcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCB0aHJvdHRsZWRPbmNoYW5nZSA9IHVzZU1lbW8oKCkgPT4gdGhyb3R0bGUob25DaGFuZ2UsIDIwKSwgW29uQ2hhbmdlXSk7XG4gICAgY29uc3QgYmluc0ZvckludGVydmFsID0gdXNlTWVtbyhcbiAgICAgICgpID0+IGdldFRpbWVCaW5zRm9ySW50ZXJ2YWwodGltZUJpbnMsIHBsb3RUeXBlPy5pbnRlcnZhbCksXG4gICAgICBbdGltZUJpbnMsIHBsb3RUeXBlPy5pbnRlcnZhbF1cbiAgICApO1xuXG4gICAgY29uc3Qgc3R5bGUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IGlzRW5sYXJnZWQgPyBgY2FsYygxMDAlIC0gJHthbmltYXRpb25Db250cm9sV2lkdGh9cHgpYCA6ICcxMDAlJ1xuICAgICAgfSksXG4gICAgICBbaXNFbmxhcmdlZF1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGltZS1yYW5nZS1zbGlkZXJcIj5cbiAgICAgICAgeyFoaWRlVGltZVRpdGxlICYmIGlzRW5sYXJnZWQgPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aW1lLXJhbmdlLXNsaWRlcl9fdGl0bGVcIiBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgPFRpbWVSYW5nZVNsaWRlclRpbWVUaXRsZVxuICAgICAgICAgICAgICB0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuICAgICAgICAgICAgICB0aW1lem9uZT17dGltZXpvbmV9XG4gICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgaXNFbmxhcmdlZD17aXNFbmxhcmdlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8U3R5bGVkU2xpZGVyQ29udGFpbmVyIGNsYXNzTmFtZT1cInRpbWUtcmFuZ2Utc2xpZGVyX19jb250YWluZXJcIiBpc0VubGFyZ2VkPXtpc0VubGFyZ2VkfT5cbiAgICAgICAgICB7IWlzTWluaWZpZWQgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpbWVsaW5lLWNvbnRhaW5lclwiIHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgICAgICAgIHJhbmdlPXtkb21haW59XG4gICAgICAgICAgICAgICAgdmFsdWUwPXt2YWx1ZVswXX1cbiAgICAgICAgICAgICAgICB2YWx1ZTE9e3ZhbHVlWzFdfVxuICAgICAgICAgICAgICAgIGJpbnM9e2JpbnNGb3JJbnRlcnZhbH1cbiAgICAgICAgICAgICAgICBsaW5lQ2hhcnQ9e2xpbmVDaGFydH1cbiAgICAgICAgICAgICAgICBpbnZlcnRUcmVuZENvbG9yPXtpbnZlcnRUcmVuZENvbG9yfVxuICAgICAgICAgICAgICAgIHBsb3RUeXBlPXtwbG90VHlwZX1cbiAgICAgICAgICAgICAgICBpc0VubGFyZ2VkPXtpc0VubGFyZ2VkfVxuICAgICAgICAgICAgICAgIHNob3dJbnB1dD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgc3RlcD17c3RlcH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhyb3R0bGVkT25jaGFuZ2V9XG4gICAgICAgICAgICAgICAgeEF4aXM9e1RpbWVTbGlkZXJNYXJrZXJ9XG4gICAgICAgICAgICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG4gICAgICAgICAgICAgICAgc2V0RmlsdGVyUGxvdD17c2V0RmlsdGVyUGxvdH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8QW5pbWF0aW9uQ29udHJvbFxuICAgICAgICAgICAgICBzdHlsZT17QU5JTUFUSU9OX0NPTlRST0xfU1RZTEV9XG4gICAgICAgICAgICAgIGlzQW5pbWF0YWJsZT17aXNBbmltYXRhYmxlfVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17aXNBbmltYXRpbmd9XG4gICAgICAgICAgICAgIHJlc2V0QW5pbWF0aW9uPXtyZXNldEFuaW1hdGlvbn1cbiAgICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uPXt0b2dnbGVBbmltYXRpb259XG4gICAgICAgICAgICAgIHVwZGF0ZUFuaW1hdGlvblNwZWVkPXt1cGRhdGVBbmltYXRpb25TcGVlZH1cbiAgICAgICAgICAgICAgc2V0VGltZWxpbmVWYWx1ZT17dGhyb3R0bGVkT25jaGFuZ2V9XG4gICAgICAgICAgICAgIHNldEFuaW1hdGlvbldpbmRvdz17c2V0RmlsdGVyQW5pbWF0aW9uV2luZG93fVxuICAgICAgICAgICAgICBzaG93VGltZURpc3BsYXk9e2ZhbHNlfVxuICAgICAgICAgICAgICB0aW1lbGluZT17dGltZWxpbmV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzRW5sYXJnZWQgJiYgIWlzTWluaWZpZWQgPyAoXG4gICAgICAgICAgICA8UGxheWJhY2tDb250cm9sc1xuICAgICAgICAgICAgICBpc0FuaW1hdGFibGU9e2lzQW5pbWF0YWJsZX1cbiAgICAgICAgICAgICAgd2lkdGg9e2FuaW1hdGlvbkNvbnRyb2xXaWR0aH1cbiAgICAgICAgICAgICAgc3BlZWQ9e3NwZWVkfVxuICAgICAgICAgICAgICBhbmltYXRpb25XaW5kb3c9e2FuaW1hdGlvbldpbmRvd31cbiAgICAgICAgICAgICAgdXBkYXRlQW5pbWF0aW9uU3BlZWQ9e3VwZGF0ZUFuaW1hdGlvblNwZWVkfVxuICAgICAgICAgICAgICBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3c9e3NldEZpbHRlckFuaW1hdGlvbldpbmRvd31cbiAgICAgICAgICAgICAgcGF1c2VBbmltYXRpb249e3RvZ2dsZUFuaW1hdGlvbn1cbiAgICAgICAgICAgICAgcmVzZXRBbmltYXRpb249e3Jlc2V0QW5pbWF0aW9ufVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17aXNBbmltYXRpbmd9XG4gICAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uPXt0b2dnbGVBbmltYXRpb259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZFNsaWRlckNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFJlYWN0Lm1lbW8oVGltZVJhbmdlU2xpZGVyKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNB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