kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
173 lines (143 loc) • 25.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TimeWidgetTopFactory = TimeWidgetTopFactory;
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _styledComponents2 = require("../common/styled-components");
var _icons = require("../common/icons");
var _timeRangeSlider = _interopRequireDefault(require("../common/time-range-slider"));
var _fieldSelector = _interopRequireDefault(require("../common/field-selector"));
var _floatingTimeDisplay = _interopRequireDefault(require("../common/animation-control/floating-time-display"));
var _timeRangeFilter = require("./time-range-filter");
var _templateObject, _templateObject2, _templateObject3;
var TOP_SECTION_HEIGHT = '36px';
var TimeBottomWidgetInner = (0, _styledComponents["default"])(_styledComponents2.BottomWidgetInner)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: 6px 32px 24px 32px;\n"])));
var TopSectionWrapper = _styledComponents["default"].div.attrs({
className: 'time-widget--top'
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n width: 100%;\n color: ", ";\n height: ", ";\n\n .bottom-widget__y-axis {\n flex-grow: 1;\n margin-left: 20px;\n }\n\n .bottom-widget__field-select {\n width: 160px;\n display: inline-block;\n\n .item-selector__dropdown {\n background: transparent;\n padding: 4px 10px 4px 4px;\n border-color: transparent;\n\n :active,\n :focus,\n &.focus,\n &.active {\n background: transparent;\n border-color: transparent;\n }\n }\n\n .item-selector__dropdown:hover {\n background: transparent;\n border-color: transparent;\n\n .item-selector__dropdown__value {\n color: ", ";\n }\n }\n }\n\n .animation-control__speed-control {\n margin-right: -12px;\n\n .animation-control__speed-slider {\n right: calc(0% - 48px);\n }\n }\n"])), function (props) {
return props.theme.labelColor;
}, TOP_SECTION_HEIGHT, function (props) {
return props.hoverColor ? props.theme[props.hoverColor] : props.theme.textColorHl;
});
var StyledTitle = (0, _styledComponents["default"])(_styledComponents2.CenterFlexbox)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n flex-grow: 0;\n color: ", ";\n margin-right: 10px;\n\n .bottom-widget__icon {\n margin-right: 6px;\n }\n .bottom-widget__icon.speed {\n margin-right: 0;\n }\n"])), function (props) {
return props.theme.textColor;
});
TimeWidgetTopFactory.deps = [_fieldSelector["default"]];
function TimeWidgetTopFactory(FieldSelector) {
var TimeWidgetTop = function TimeWidgetTop(_ref) {
var filter = _ref.filter,
readOnly = _ref.readOnly,
datasets = _ref.datasets,
setFilterPlot = _ref.setFilterPlot,
index = _ref.index,
onClose = _ref.onClose;
var yAxisFields = (0, _react.useMemo)(function () {
return ((datasets[filter.dataId[0]] || {}).fields || []).filter(function (f) {
return f.type === 'integer' || f.type === 'real';
});
}, [datasets, filter.dataId]);
var _setFilterPlotYAxis = (0, _react.useCallback)(function (value) {
return setFilterPlot(index, {
yAxis: value
});
}, [setFilterPlot, index]);
return /*#__PURE__*/_react["default"].createElement(TopSectionWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledTitle, {
className: "bottom-widget__field"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.CenterFlexbox, {
className: "bottom-widget__icon"
}, /*#__PURE__*/_react["default"].createElement(_icons.Clock, {
height: "15px"
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SelectTextBold, null, filter.name)), /*#__PURE__*/_react["default"].createElement(StyledTitle, {
className: "bottom-widget__y-axis"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.CenterFlexbox, {
className: "bottom-widget__icon"
}, /*#__PURE__*/_react["default"].createElement(_icons.LineChart, {
height: "15px"
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "bottom-widget__field-select"
}, /*#__PURE__*/_react["default"].createElement(FieldSelector, {
fields: yAxisFields,
placement: "top",
id: "selected-time-widget-field",
value: filter.yAxis ? filter.yAxis.name : null,
onSelect: _setFilterPlotYAxis,
placeholder: "placeholder.yAxis",
erasable: true,
showToken: false
}))), !readOnly ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.CenterFlexbox, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.IconRoundSmall, null, /*#__PURE__*/_react["default"].createElement(_icons.Close, {
height: "12px",
onClick: onClose
}))) : null);
};
return TimeWidgetTop;
}
TimeWidgetFactory.deps = [_timeRangeSlider["default"], _floatingTimeDisplay["default"], TimeWidgetTopFactory];
function TimeWidgetFactory(TimeRangeSlider, FloatingTimeDisplay, TimeWidgetTop) {
var TimeWidget = function TimeWidget(_ref2) {
var datasets = _ref2.datasets,
filter = _ref2.filter,
index = _ref2.index,
readOnly = _ref2.readOnly,
showTimeDisplay = _ref2.showTimeDisplay,
setFilterAnimationTime = _ref2.setFilterAnimationTime,
resetAnimation = _ref2.resetAnimation,
isAnimatable = _ref2.isAnimatable,
updateAnimationSpeed = _ref2.updateAnimationSpeed,
toggleAnimation = _ref2.toggleAnimation,
enlargeFilter = _ref2.enlargeFilter,
setFilterPlot = _ref2.setFilterPlot,
setFilterAnimationWindow = _ref2.setFilterAnimationWindow;
var _updateAnimationSpeed = (0, _react.useCallback)(function (speed) {
return updateAnimationSpeed(index, speed);
}, [updateAnimationSpeed, index]);
var _toggleAnimation = (0, _react.useCallback)(function () {
return toggleAnimation(index);
}, [toggleAnimation, index]);
var _onClose = (0, _react.useCallback)(function () {
return enlargeFilter(index);
}, [enlargeFilter, index]);
var _setFilterAnimationWindow = (0, _react.useCallback)(function (animationWindow) {
return setFilterAnimationWindow({
id: filter.id,
animationWindow: animationWindow
});
}, [setFilterAnimationWindow, filter.id]);
var timeSliderOnChange = (0, _react.useCallback)(function (value) {
return setFilterAnimationTime(index, 'value', value);
}, [setFilterAnimationTime, index]);
return /*#__PURE__*/_react["default"].createElement(TimeBottomWidgetInner, {
className: "bottom-widget--inner"
}, /*#__PURE__*/_react["default"].createElement(TimeWidgetTop, {
filter: filter,
readOnly: readOnly,
datasets: datasets,
setFilterPlot: setFilterPlot,
index: index,
onClose: _onClose
}), /*#__PURE__*/_react["default"].createElement(TimeRangeSlider, (0, _extends2["default"])({}, (0, _timeRangeFilter.timeRangeSliderFieldsSelector)(filter), {
onChange: timeSliderOnChange,
toggleAnimation: _toggleAnimation,
updateAnimationSpeed: _updateAnimationSpeed,
setFilterAnimationWindow: _setFilterAnimationWindow,
hideTimeTitle: showTimeDisplay,
resetAnimation: resetAnimation,
isAnimatable: isAnimatable
})), showTimeDisplay ? /*#__PURE__*/_react["default"].createElement(FloatingTimeDisplay, {
currentTime: filter.value,
defaultTimeFormat: filter.defaultTimeFormat,
timeFormat: filter.timeFormat,
timezone: filter.timezone
}) : null);
};
return /*#__PURE__*/_react["default"].memo(TimeWidget);
}
var _default = TimeWidgetFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpbHRlcnMvdGltZS13aWRnZXQuanMiXSwibmFtZXMiOlsiVE9QX1NFQ1RJT05fSEVJR0hUIiwiVGltZUJvdHRvbVdpZGdldElubmVyIiwiQm90dG9tV2lkZ2V0SW5uZXIiLCJUb3BTZWN0aW9uV3JhcHBlciIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJ0aGVtZSIsImxhYmVsQ29sb3IiLCJob3ZlckNvbG9yIiwidGV4dENvbG9ySGwiLCJTdHlsZWRUaXRsZSIsIkNlbnRlckZsZXhib3giLCJ0ZXh0Q29sb3IiLCJUaW1lV2lkZ2V0VG9wRmFjdG9yeSIsImRlcHMiLCJGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIkZpZWxkU2VsZWN0b3IiLCJUaW1lV2lkZ2V0VG9wIiwiZmlsdGVyIiwicmVhZE9ubHkiLCJkYXRhc2V0cyIsInNldEZpbHRlclBsb3QiLCJpbmRleCIsIm9uQ2xvc2UiLCJ5QXhpc0ZpZWxkcyIsImRhdGFJZCIsImZpZWxkcyIsImYiLCJ0eXBlIiwiX3NldEZpbHRlclBsb3RZQXhpcyIsInZhbHVlIiwieUF4aXMiLCJuYW1lIiwiVGltZVdpZGdldEZhY3RvcnkiLCJUaW1lUmFuZ2VTbGlkZXJGYWN0b3J5IiwiRmxvYXRpbmdUaW1lRGlzcGxheUZhY3RvcnkiLCJUaW1lUmFuZ2VTbGlkZXIiLCJGbG9hdGluZ1RpbWVEaXNwbGF5IiwiVGltZVdpZGdldCIsInNob3dUaW1lRGlzcGxheSIsInNldEZpbHRlckFuaW1hdGlvblRpbWUiLCJyZXNldEFuaW1hdGlvbiIsImlzQW5pbWF0YWJsZSIsInVwZGF0ZUFuaW1hdGlvblNwZWVkIiwidG9nZ2xlQW5pbWF0aW9uIiwiZW5sYXJnZUZpbHRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvdyIsIl91cGRhdGVBbmltYXRpb25TcGVlZCIsInNwZWVkIiwiX3RvZ2dsZUFuaW1hdGlvbiIsIl9vbkNsb3NlIiwiX3NldEZpbHRlckFuaW1hdGlvbldpbmRvdyIsImFuaW1hdGlvbldpbmRvdyIsImlkIiwidGltZVNsaWRlck9uQ2hhbmdlIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJSZWFjdCIsIm1lbW8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxJQUFNQSxrQkFBa0IsR0FBRyxNQUEzQjtBQUVBLElBQU1DLHFCQUFxQixHQUFHLGtDQUFPQyxvQ0FBUCxDQUFILHdIQUEzQjs7QUFHQSxJQUFNQyxpQkFBaUIsR0FBR0MsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUN6Q0MsRUFBQUEsU0FBUyxFQUFFO0FBRDhCLENBQWpCLENBQUgseTlCQU1aLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsVUFBaEI7QUFBQSxDQU5PLEVBT1hWLGtCQVBXLEVBcUNOLFVBQUFRLEtBQUs7QUFBQSxTQUNaQSxLQUFLLENBQUNHLFVBQU4sR0FBbUJILEtBQUssQ0FBQ0MsS0FBTixDQUFZRCxLQUFLLENBQUNHLFVBQWxCLENBQW5CLEdBQW1ESCxLQUFLLENBQUNDLEtBQU4sQ0FBWUcsV0FEbkQ7QUFBQSxDQXJDQyxDQUF2Qjs7QUFvREEsSUFBTUMsV0FBVyxHQUFHLGtDQUFPQyxnQ0FBUCxDQUFILHVRQUVOLFVBQUFOLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWU0sU0FBaEI7QUFBQSxDQUZDLENBQWpCO0FBYUFDLG9CQUFvQixDQUFDQyxJQUFyQixHQUE0QixDQUFDQyx5QkFBRCxDQUE1Qjs7QUFDTyxTQUFTRixvQkFBVCxDQUE4QkcsYUFBOUIsRUFBNkM7QUFDbEQsTUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixPQUFpRTtBQUFBLFFBQS9EQyxNQUErRCxRQUEvREEsTUFBK0Q7QUFBQSxRQUF2REMsUUFBdUQsUUFBdkRBLFFBQXVEO0FBQUEsUUFBN0NDLFFBQTZDLFFBQTdDQSxRQUE2QztBQUFBLFFBQW5DQyxhQUFtQyxRQUFuQ0EsYUFBbUM7QUFBQSxRQUFwQkMsS0FBb0IsUUFBcEJBLEtBQW9CO0FBQUEsUUFBYkMsT0FBYSxRQUFiQSxPQUFhO0FBQ3JGLFFBQU1DLFdBQVcsR0FBRyxvQkFDbEI7QUFBQSxhQUNFLENBQUMsQ0FBQ0osUUFBUSxDQUFDRixNQUFNLENBQUNPLE1BQVAsQ0FBYyxDQUFkLENBQUQsQ0FBUixJQUE4QixFQUEvQixFQUFtQ0MsTUFBbkMsSUFBNkMsRUFBOUMsRUFBa0RSLE1BQWxELENBQ0UsVUFBQVMsQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQ0MsSUFBRixLQUFXLFNBQVgsSUFBd0JELENBQUMsQ0FBQ0MsSUFBRixLQUFXLE1BQXZDO0FBQUEsT0FESCxDQURGO0FBQUEsS0FEa0IsRUFLbEIsQ0FBQ1IsUUFBRCxFQUFXRixNQUFNLENBQUNPLE1BQWxCLENBTGtCLENBQXBCOztBQU9BLFFBQU1JLG1CQUFtQixHQUFHLHdCQUFZLFVBQUFDLEtBQUs7QUFBQSxhQUFJVCxhQUFhLENBQUNDLEtBQUQsRUFBUTtBQUFDUyxRQUFBQSxLQUFLLEVBQUVEO0FBQVIsT0FBUixDQUFqQjtBQUFBLEtBQWpCLEVBQTJELENBQ3JGVCxhQURxRixFQUVyRkMsS0FGcUYsQ0FBM0QsQ0FBNUI7O0FBSUEsd0JBQ0UsZ0NBQUMsaUJBQUQscUJBQ0UsZ0NBQUMsV0FBRDtBQUFhLE1BQUEsU0FBUyxFQUFDO0FBQXZCLG9CQUNFLGdDQUFDLGdDQUFEO0FBQWUsTUFBQSxTQUFTLEVBQUM7QUFBekIsb0JBQ0UsZ0NBQUMsWUFBRDtBQUFPLE1BQUEsTUFBTSxFQUFDO0FBQWQsTUFERixDQURGLGVBSUUsZ0NBQUMsaUNBQUQsUUFBaUJKLE1BQU0sQ0FBQ2MsSUFBeEIsQ0FKRixDQURGLGVBT0UsZ0NBQUMsV0FBRDtBQUFhLE1BQUEsU0FBUyxFQUFDO0FBQXZCLG9CQUNFLGdDQUFDLGdDQUFEO0FBQWUsTUFBQSxTQUFTLEVBQUM7QUFBekIsb0JBQ0UsZ0NBQUMsZ0JBQUQ7QUFBVyxNQUFBLE1BQU0sRUFBQztBQUFsQixNQURGLENBREYsZUFJRTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsb0JBQ0UsZ0NBQUMsYUFBRDtBQUNFLE1BQUEsTUFBTSxFQUFFUixXQURWO0FBRUUsTUFBQSxTQUFTLEVBQUMsS0FGWjtBQUdFLE1BQUEsRUFBRSxFQUFDLDRCQUhMO0FBSUUsTUFBQSxLQUFLLEVBQUVOLE1BQU0sQ0FBQ2EsS0FBUCxHQUFlYixNQUFNLENBQUNhLEtBQVAsQ0FBYUMsSUFBNUIsR0FBbUMsSUFKNUM7QUFLRSxNQUFBLFFBQVEsRUFBRUgsbUJBTFo7QUFNRSxNQUFBLFdBQVcsRUFBQyxtQkFOZDtBQU9FLE1BQUEsUUFBUSxNQVBWO0FBUUUsTUFBQSxTQUFTLEVBQUU7QUFSYixNQURGLENBSkYsQ0FQRixFQXdCRyxDQUFDVixRQUFELGdCQUNDLGdDQUFDLGdDQUFELHFCQUNFLGdDQUFDLGlDQUFELHFCQUNFLGdDQUFDLFlBQUQ7QUFBTyxNQUFBLE1BQU0sRUFBQyxNQUFkO0FBQXFCLE1BQUEsT0FBTyxFQUFFSTtBQUE5QixNQURGLENBREYsQ0FERCxHQU1HLElBOUJOLENBREY7QUFrQ0QsR0E5Q0Q7O0FBK0NBLFNBQU9OLGFBQVA7QUFDRDs7QUFFRGdCLGlCQUFpQixDQUFDbkIsSUFBbEIsR0FBeUIsQ0FBQ29CLDJCQUFELEVBQXlCQywrQkFBekIsRUFBcUR0QixvQkFBckQsQ0FBekI7O0FBQ0EsU0FBU29CLGlCQUFULENBQTJCRyxlQUEzQixFQUE0Q0MsbUJBQTVDLEVBQWlFcEIsYUFBakUsRUFBZ0Y7QUFDOUUsTUFBTXFCLFVBQVUsR0FBRyxTQUFiQSxVQUFhLFFBY2I7QUFBQSxRQWJKbEIsUUFhSSxTQWJKQSxRQWFJO0FBQUEsUUFaSkYsTUFZSSxTQVpKQSxNQVlJO0FBQUEsUUFYSkksS0FXSSxTQVhKQSxLQVdJO0FBQUEsUUFWSkgsUUFVSSxTQVZKQSxRQVVJO0FBQUEsUUFUSm9CLGVBU0ksU0FUSkEsZUFTSTtBQUFBLFFBUkpDLHNCQVFJLFNBUkpBLHNCQVFJO0FBQUEsUUFQSkMsY0FPSSxTQVBKQSxjQU9JO0FBQUEsUUFOSkMsWUFNSSxTQU5KQSxZQU1JO0FBQUEsUUFMSkMsb0JBS0ksU0FMSkEsb0JBS0k7QUFBQSxRQUpKQyxlQUlJLFNBSkpBLGVBSUk7QUFBQSxRQUhKQyxhQUdJLFNBSEpBLGFBR0k7QUFBQSxRQUZKeEIsYUFFSSxTQUZKQSxhQUVJO0FBQUEsUUFESnlCLHdCQUNJLFNBREpBLHdCQUNJOztBQUNKLFFBQU1DLHFCQUFxQixHQUFHLHdCQUFZLFVBQUFDLEtBQUs7QUFBQSxhQUFJTCxvQkFBb0IsQ0FBQ3JCLEtBQUQsRUFBUTBCLEtBQVIsQ0FBeEI7QUFBQSxLQUFqQixFQUF5RCxDQUNyRkwsb0JBRHFGLEVBRXJGckIsS0FGcUYsQ0FBekQsQ0FBOUI7O0FBS0EsUUFBTTJCLGdCQUFnQixHQUFHLHdCQUFZO0FBQUEsYUFBTUwsZUFBZSxDQUFDdEIsS0FBRCxDQUFyQjtBQUFBLEtBQVosRUFBMEMsQ0FBQ3NCLGVBQUQsRUFBa0J0QixLQUFsQixDQUExQyxDQUF6Qjs7QUFFQSxRQUFNNEIsUUFBUSxHQUFHLHdCQUFZO0FBQUEsYUFBTUwsYUFBYSxDQUFDdkIsS0FBRCxDQUFuQjtBQUFBLEtBQVosRUFBd0MsQ0FBQ3VCLGFBQUQsRUFBZ0J2QixLQUFoQixDQUF4QyxDQUFqQjs7QUFFQSxRQUFNNkIseUJBQXlCLEdBQUcsd0JBQ2hDLFVBQUFDLGVBQWU7QUFBQSxhQUFJTix3QkFBd0IsQ0FBQztBQUFDTyxRQUFBQSxFQUFFLEVBQUVuQyxNQUFNLENBQUNtQyxFQUFaO0FBQWdCRCxRQUFBQSxlQUFlLEVBQWZBO0FBQWhCLE9BQUQsQ0FBNUI7QUFBQSxLQURpQixFQUVoQyxDQUFDTix3QkFBRCxFQUEyQjVCLE1BQU0sQ0FBQ21DLEVBQWxDLENBRmdDLENBQWxDOztBQUtBLFFBQU1DLGtCQUFrQixHQUFHLHdCQUFZLFVBQUF4QixLQUFLO0FBQUEsYUFBSVUsc0JBQXNCLENBQUNsQixLQUFELEVBQVEsT0FBUixFQUFpQlEsS0FBakIsQ0FBMUI7QUFBQSxLQUFqQixFQUFvRSxDQUM3RlUsc0JBRDZGLEVBRTdGbEIsS0FGNkYsQ0FBcEUsQ0FBM0I7QUFLQSx3QkFDRSxnQ0FBQyxxQkFBRDtBQUF1QixNQUFBLFNBQVMsRUFBQztBQUFqQyxvQkFDRSxnQ0FBQyxhQUFEO0FBQ0UsTUFBQSxNQUFNLEVBQUVKLE1BRFY7QUFFRSxNQUFBLFFBQVEsRUFBRUMsUUFGWjtBQUdFLE1BQUEsUUFBUSxFQUFFQyxRQUhaO0FBSUUsTUFBQSxhQUFhLEVBQUVDLGFBSmpCO0FBS0UsTUFBQSxLQUFLLEVBQUVDLEtBTFQ7QUFNRSxNQUFBLE9BQU8sRUFBRTRCO0FBTlgsTUFERixlQVNFLGdDQUFDLGVBQUQsZ0NBQ00sb0RBQThCaEMsTUFBOUIsQ0FETjtBQUVFLE1BQUEsUUFBUSxFQUFFb0Msa0JBRlo7QUFHRSxNQUFBLGVBQWUsRUFBRUwsZ0JBSG5CO0FBSUUsTUFBQSxvQkFBb0IsRUFBRUYscUJBSnhCO0FBS0UsTUFBQSx3QkFBd0IsRUFBRUkseUJBTDVCO0FBTUUsTUFBQSxhQUFhLEVBQUVaLGVBTmpCO0FBT0UsTUFBQSxjQUFjLEVBQUVFLGNBUGxCO0FBUUUsTUFBQSxZQUFZLEVBQUVDO0FBUmhCLE9BVEYsRUFtQkdILGVBQWUsZ0JBQ2QsZ0NBQUMsbUJBQUQ7QUFDRSxNQUFBLFdBQVcsRUFBRXJCLE1BQU0sQ0FBQ1ksS0FEdEI7QUFFRSxNQUFBLGlCQUFpQixFQUFFWixNQUFNLENBQUNxQyxpQkFGNUI7QUFHRSxNQUFBLFVBQVUsRUFBRXJDLE1BQU0sQ0FBQ3NDLFVBSHJCO0FBSUUsTUFBQSxRQUFRLEVBQUV0QyxNQUFNLENBQUN1QztBQUpuQixNQURjLEdBT1osSUExQk4sQ0FERjtBQThCRCxHQWhFRDs7QUFrRUEsc0JBQU9DLGtCQUFNQyxJQUFOLENBQVdyQixVQUFYLENBQVA7QUFDRDs7ZUFFY0wsaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjEgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBTZWxlY3RUZXh0Qm9sZCxcbiAgSWNvblJvdW5kU21hbGwsXG4gIENlbnRlckZsZXhib3gsXG4gIEJvdHRvbVdpZGdldElubmVyXG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Q2xvc2UsIENsb2NrLCBMaW5lQ2hhcnR9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbmltcG9ydCBUaW1lUmFuZ2VTbGlkZXJGYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3RpbWUtcmFuZ2Utc2xpZGVyJztcbmltcG9ydCBGaWVsZFNlbGVjdG9yRmFjdG9yeSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9maWVsZC1zZWxlY3Rvcic7XG5pbXBvcnQgRmxvYXRpbmdUaW1lRGlzcGxheUZhY3RvcnkgZnJvbSAnY29tcG9uZW50cy9jb21tb24vYW5pbWF0aW9uLWNvbnRyb2wvZmxvYXRpbmctdGltZS1kaXNwbGF5JztcbmltcG9ydCB7dGltZVJhbmdlU2xpZGVyRmllbGRzU2VsZWN0b3J9IGZyb20gJy4vdGltZS1yYW5nZS1maWx0ZXInO1xuXG5jb25zdCBUT1BfU0VDVElPTl9IRUlHSFQgPSAnMzZweCc7XG5cbmNvbnN0IFRpbWVCb3R0b21XaWRnZXRJbm5lciA9IHN0eWxlZChCb3R0b21XaWRnZXRJbm5lcilgXG4gIHBhZGRpbmc6IDZweCAzMnB4IDI0cHggMzJweDtcbmA7XG5jb25zdCBUb3BTZWN0aW9uV3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICd0aW1lLXdpZGdldC0tdG9wJ1xufSlgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxhYmVsQ29sb3J9O1xuICBoZWlnaHQ6ICR7VE9QX1NFQ1RJT05fSEVJR0hUfTtcblxuICAuYm90dG9tLXdpZGdldF9feS1heGlzIHtcbiAgICBmbGV4LWdyb3c6IDE7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gIH1cblxuICAuYm90dG9tLXdpZGdldF9fZmllbGQtc2VsZWN0IHtcbiAgICB3aWR0aDogMTYwcHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gICAgLml0ZW0tc2VsZWN0b3JfX2Ryb3Bkb3duIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgcGFkZGluZzogNHB4IDEwcHggNHB4IDRweDtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICAgIDphY3RpdmUsXG4gICAgICA6Zm9jdXMsXG4gICAgICAmLmZvY3VzLFxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaXRlbS1zZWxlY3Rvcl9fZHJvcGRvd246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gICAgICAuaXRlbS1zZWxlY3Rvcl9fZHJvcGRvd25fX3ZhbHVlIHtcbiAgICAgICAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICAgICAgICBwcm9wcy5ob3ZlckNvbG9yID8gcHJvcHMudGhlbWVbcHJvcHMuaG92ZXJDb2xvcl0gOiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmFuaW1hdGlvbi1jb250cm9sX19zcGVlZC1jb250cm9sIHtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4O1xuXG4gICAgLmFuaW1hdGlvbi1jb250cm9sX19zcGVlZC1zbGlkZXIge1xuICAgICAgcmlnaHQ6IGNhbGMoMCUgLSA0OHB4KTtcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZFRpdGxlID0gc3R5bGVkKENlbnRlckZsZXhib3gpYFxuICBmbGV4LWdyb3c6IDA7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIG1hcmdpbi1yaWdodDogMTBweDtcblxuICAuYm90dG9tLXdpZGdldF9faWNvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gIH1cbiAgLmJvdHRvbS13aWRnZXRfX2ljb24uc3BlZWQge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuYDtcblxuVGltZVdpZGdldFRvcEZhY3RvcnkuZGVwcyA9IFtGaWVsZFNlbGVjdG9yRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gVGltZVdpZGdldFRvcEZhY3RvcnkoRmllbGRTZWxlY3Rvcikge1xuICBjb25zdCBUaW1lV2lkZ2V0VG9wID0gKHtmaWx0ZXIsIHJlYWRPbmx5LCBkYXRhc2V0cywgc2V0RmlsdGVyUGxvdCwgaW5kZXgsIG9uQ2xvc2V9KSA9PiB7XG4gICAgY29uc3QgeUF4aXNGaWVsZHMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgKChkYXRhc2V0c1tmaWx0ZXIuZGF0YUlkWzBdXSB8fCB7fSkuZmllbGRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgICAgZiA9PiBmLnR5cGUgPT09ICdpbnRlZ2VyJyB8fCBmLnR5cGUgPT09ICdyZWFsJ1xuICAgICAgICApLFxuICAgICAgW2RhdGFzZXRzLCBmaWx0ZXIuZGF0YUlkXVxuICAgICk7XG4gICAgY29uc3QgX3NldEZpbHRlclBsb3RZQXhpcyA9IHVzZUNhbGxiYWNrKHZhbHVlID0+IHNldEZpbHRlclBsb3QoaW5kZXgsIHt5QXhpczogdmFsdWV9KSwgW1xuICAgICAgc2V0RmlsdGVyUGxvdCxcbiAgICAgIGluZGV4XG4gICAgXSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3BTZWN0aW9uV3JhcHBlcj5cbiAgICAgICAgPFN0eWxlZFRpdGxlIGNsYXNzTmFtZT1cImJvdHRvbS13aWRnZXRfX2ZpZWxkXCI+XG4gICAgICAgICAgPENlbnRlckZsZXhib3ggY2xhc3NOYW1lPVwiYm90dG9tLXdpZGdldF9faWNvblwiPlxuICAgICAgICAgICAgPENsb2NrIGhlaWdodD1cIjE1cHhcIiAvPlxuICAgICAgICAgIDwvQ2VudGVyRmxleGJveD5cbiAgICAgICAgICA8U2VsZWN0VGV4dEJvbGQ+e2ZpbHRlci5uYW1lfTwvU2VsZWN0VGV4dEJvbGQ+XG4gICAgICAgIDwvU3R5bGVkVGl0bGU+XG4gICAgICAgIDxTdHlsZWRUaXRsZSBjbGFzc05hbWU9XCJib3R0b20td2lkZ2V0X195LWF4aXNcIj5cbiAgICAgICAgICA8Q2VudGVyRmxleGJveCBjbGFzc05hbWU9XCJib3R0b20td2lkZ2V0X19pY29uXCI+XG4gICAgICAgICAgICA8TGluZUNoYXJ0IGhlaWdodD1cIjE1cHhcIiAvPlxuICAgICAgICAgIDwvQ2VudGVyRmxleGJveD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvdHRvbS13aWRnZXRfX2ZpZWxkLXNlbGVjdFwiPlxuICAgICAgICAgICAgPEZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgICAgZmllbGRzPXt5QXhpc0ZpZWxkc31cbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RlZC10aW1lLXdpZGdldC1maWVsZFwiXG4gICAgICAgICAgICAgIHZhbHVlPXtmaWx0ZXIueUF4aXMgPyBmaWx0ZXIueUF4aXMubmFtZSA6IG51bGx9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtfc2V0RmlsdGVyUGxvdFlBeGlzfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyLnlBeGlzXCJcbiAgICAgICAgICAgICAgZXJhc2FibGVcbiAgICAgICAgICAgICAgc2hvd1Rva2VuPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvU3R5bGVkVGl0bGU+XG4gICAgICAgIHshcmVhZE9ubHkgPyAoXG4gICAgICAgICAgPENlbnRlckZsZXhib3g+XG4gICAgICAgICAgICA8SWNvblJvdW5kU21hbGw+XG4gICAgICAgICAgICAgIDxDbG9zZSBoZWlnaHQ9XCIxMnB4XCIgb25DbGljaz17b25DbG9zZX0gLz5cbiAgICAgICAgICAgIDwvSWNvblJvdW5kU21hbGw+XG4gICAgICAgICAgPC9DZW50ZXJGbGV4Ym94PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvVG9wU2VjdGlvbldyYXBwZXI+XG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIFRpbWVXaWRnZXRUb3A7XG59XG5cblRpbWVXaWRnZXRGYWN0b3J5LmRlcHMgPSBbVGltZVJhbmdlU2xpZGVyRmFjdG9yeSwgRmxvYXRpbmdUaW1lRGlzcGxheUZhY3RvcnksIFRpbWVXaWRnZXRUb3BGYWN0b3J5XTtcbmZ1bmN0aW9uIFRpbWVXaWRnZXRGYWN0b3J5KFRpbWVSYW5nZVNsaWRlciwgRmxvYXRpbmdUaW1lRGlzcGxheSwgVGltZVdpZGdldFRvcCkge1xuICBjb25zdCBUaW1lV2lkZ2V0ID0gKHtcbiAgICBkYXRhc2V0cyxcbiAgICBmaWx0ZXIsXG4gICAgaW5kZXgsXG4gICAgcmVhZE9ubHksXG4gICAgc2hvd1RpbWVEaXNwbGF5LFxuICAgIHNldEZpbHRlckFuaW1hdGlvblRpbWUsXG4gICAgcmVzZXRBbmltYXRpb24sXG4gICAgaXNBbmltYXRhYmxlLFxuICAgIHVwZGF0ZUFuaW1hdGlvblNwZWVkLFxuICAgIHRvZ2dsZUFuaW1hdGlvbixcbiAgICBlbmxhcmdlRmlsdGVyLFxuICAgIHNldEZpbHRlclBsb3QsXG4gICAgc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93XG4gIH0pID0+IHtcbiAgICBjb25zdCBfdXBkYXRlQW5pbWF0aW9uU3BlZWQgPSB1c2VDYWxsYmFjayhzcGVlZCA9PiB1cGRhdGVBbmltYXRpb25TcGVlZChpbmRleCwgc3BlZWQpLCBbXG4gICAgICB1cGRhdGVBbmltYXRpb25TcGVlZCxcbiAgICAgIGluZGV4XG4gICAgXSk7XG5cbiAgICBjb25zdCBfdG9nZ2xlQW5pbWF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4gdG9nZ2xlQW5pbWF0aW9uKGluZGV4KSwgW3RvZ2dsZUFuaW1hdGlvbiwgaW5kZXhdKTtcblxuICAgIGNvbnN0IF9vbkNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4gZW5sYXJnZUZpbHRlcihpbmRleCksIFtlbmxhcmdlRmlsdGVyLCBpbmRleF0pO1xuXG4gICAgY29uc3QgX3NldEZpbHRlckFuaW1hdGlvbldpbmRvdyA9IHVzZUNhbGxiYWNrKFxuICAgICAgYW5pbWF0aW9uV2luZG93ID0+IHNldEZpbHRlckFuaW1hdGlvbldpbmRvdyh7aWQ6IGZpbHRlci5pZCwgYW5pbWF0aW9uV2luZG93fSksXG4gICAgICBbc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93LCBmaWx0ZXIuaWRdXG4gICAgKTtcblxuICAgIGNvbnN0IHRpbWVTbGlkZXJPbkNoYW5nZSA9IHVzZUNhbGxiYWNrKHZhbHVlID0+IHNldEZpbHRlckFuaW1hdGlvblRpbWUoaW5kZXgsICd2YWx1ZScsIHZhbHVlKSwgW1xuICAgICAgc2V0RmlsdGVyQW5pbWF0aW9uVGltZSxcbiAgICAgIGluZGV4XG4gICAgXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFRpbWVCb3R0b21XaWRnZXRJbm5lciBjbGFzc05hbWU9XCJib3R0b20td2lkZ2V0LS1pbm5lclwiPlxuICAgICAgICA8VGltZVdpZGdldFRvcFxuICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgc2V0RmlsdGVyUGxvdD17c2V0RmlsdGVyUGxvdH1cbiAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgb25DbG9zZT17X29uQ2xvc2V9XG4gICAgICAgIC8+XG4gICAgICAgIDxUaW1lUmFuZ2VTbGlkZXJcbiAgICAgICAgICB7Li4udGltZVJhbmdlU2xpZGVyRmllbGRzU2VsZWN0b3IoZmlsdGVyKX1cbiAgICAgICAgICBvbkNoYW5nZT17dGltZVNsaWRlck9uQ2hhbmdlfVxuICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbj17X3RvZ2dsZUFuaW1hdGlvbn1cbiAgICAgICAgICB1cGRhdGVBbmltYXRpb25TcGVlZD17X3VwZGF0ZUFuaW1hdGlvblNwZWVkfVxuICAgICAgICAgIHNldEZpbHRlckFuaW1hdGlvbldpbmRvdz17X3NldEZpbHRlckFuaW1hdGlvbldpbmRvd31cbiAgICAgICAgICBoaWRlVGltZVRpdGxlPXtzaG93VGltZURpc3BsYXl9XG4gICAgICAgICAgcmVzZXRBbmltYXRpb249e3Jlc2V0QW5pbWF0aW9ufVxuICAgICAgICAgIGlzQW5pbWF0YWJsZT17aXNBbmltYXRhYmxlfVxuICAgICAgICAvPlxuICAgICAgICB7c2hvd1RpbWVEaXNwbGF5ID8gKFxuICAgICAgICAgIDxGbG9hdGluZ1RpbWVEaXNwbGF5XG4gICAgICAgICAgICBjdXJyZW50VGltZT17ZmlsdGVyLnZhbHVlfVxuICAgICAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ9e2ZpbHRlci5kZWZhdWx0VGltZUZvcm1hdH1cbiAgICAgICAgICAgIHRpbWVGb3JtYXQ9e2ZpbHRlci50aW1lRm9ybWF0fVxuICAgICAgICAgICAgdGltZXpvbmU9e2ZpbHRlci50aW1lem9uZX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvVGltZUJvdHRvbVdpZGdldElubmVyPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFJlYWN0Lm1lbW8oVGltZVdpZGdldCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbWVXaWRnZXRGYWN0b3J5O1xuIl19