adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
306 lines (305 loc) • 56.1 kB
JavaScript
"use strict";
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _configProvider = require("../config-provider");
var _icon = _interopRequireDefault(require("../icon"));
var _input = _interopRequireDefault(require("../input"));
var _popover = _interopRequireDefault(require("../popover"));
var _TimeSelect = _interopRequireDefault(require("./TimeSelect"));
require("./style");
var _core = require("./core");
var _excluded = ["className", "closeOnSelect", "defaultValue", "disabled", "disabledHours", "disabledMinutes", "disabledSeconds", "maxTime", "minTime", "onChange", "onlyHour", "placeholder", "popoverProps", "secondsAvailable", "size", "value"];
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
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; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
var prefix = "adui-time";
var noop = function noop() {};
var TimePicker = (0, _react.forwardRef)(function (_ref, ref) {
var className = _ref.className,
closeOnSelect = _ref.closeOnSelect,
defaultValue = _ref.defaultValue,
disabled = _ref.disabled,
disabledHours = _ref.disabledHours,
disabledMinutes = _ref.disabledMinutes,
disabledSeconds = _ref.disabledSeconds,
maxTime = _ref.maxTime,
minTime = _ref.minTime,
onChange = _ref.onChange,
onlyHour = _ref.onlyHour,
placeholder = _ref.placeholder,
popoverProps = _ref.popoverProps,
_ref$secondsAvailable = _ref.secondsAvailable,
secondsAvailable = _ref$secondsAvailable === void 0 ? false : _ref$secondsAvailable,
sizeProp = _ref.size,
value = _ref.value,
otherProps = _objectWithoutProperties(_ref, _excluded);
var getInitialState = function getInitialState() {
var valueState = value !== null ? value : defaultValue;
var _extractHMSFromTime = (0, _core.extractHMSFromTime)(valueState),
hour = _extractHMSFromTime.hour,
minute = _extractHMSFromTime.minute,
second = _extractHMSFromTime.second;
return {
hour: hour,
inputValue: valueState || "",
minute: onlyHour ? "00" : minute,
second: secondsAvailable ? second : "00",
prevValueProp: valueState || "",
visible: false
};
};
var initialState = (0, _react.useMemo)(getInitialState, []);
var _useState = (0, _react.useState)(initialState.inputValue),
_useState2 = _slicedToArray(_useState, 2),
inputValue = _useState2[0],
setInputValue = _useState2[1];
var _useState3 = (0, _react.useState)(initialState.hour),
_useState4 = _slicedToArray(_useState3, 2),
hour = _useState4[0],
setHour = _useState4[1];
var _useState5 = (0, _react.useState)(initialState.minute),
_useState6 = _slicedToArray(_useState5, 2),
minute = _useState6[0],
setMinute = _useState6[1];
var _useState7 = (0, _react.useState)(initialState.second),
_useState8 = _slicedToArray(_useState7, 2),
second = _useState8[0],
setSecond = _useState8[1];
var _useState9 = (0, _react.useState)(initialState.prevValueProp),
_useState10 = _slicedToArray(_useState9, 2),
prevValueProp = _useState10[0],
setPrevValueProp = _useState10[1];
var _useState11 = (0, _react.useState)(initialState.visible),
_useState12 = _slicedToArray(_useState11, 2),
visible = _useState12[0],
setVisible = _useState12[1];
if (value !== null && prevValueProp !== value) {
var _extractHMSFromTime2 = (0, _core.extractHMSFromTime)(value),
newHour = _extractHMSFromTime2.hour,
newMinute = _extractHMSFromTime2.minute,
newSecond = _extractHMSFromTime2.second;
setInputValue(value || "");
setHour(newHour);
setMinute(onlyHour ? "00" : newMinute);
setSecond(secondsAvailable ? newSecond : "00");
setPrevValueProp(value || "");
}
var inputRef = (0, _react.useRef)(null);
var _useContext = (0, _react.useContext)(_configProvider.ConfigContext),
sizeContext = _useContext.size;
var size = (0, _configProvider.getComputedSize)(sizeProp, sizeContext);
var handleClick = function handleClick(valueNew, type) {
var valueProp = value;
var inputValueNow = "";
if (secondsAvailable) {
if (type === "hour") {
inputValueNow = "".concat(valueNew, ":").concat(minute || "", ":").concat(second || "");
} else if (type === "minute") {
inputValueNow = "".concat(hour || "", ":").concat(valueNew, ":").concat(second || "");
} else {
inputValueNow = "".concat(hour || "", ":").concat(minute || "", ":").concat(valueNew);
}
} else {
inputValueNow = type === "hour" ? "".concat(valueNew, ":").concat(minute || "") : "".concat(hour || "", ":").concat(valueNew);
}
if (maxTime && (0, _core.isTimeAfter)(inputValueNow, maxTime)) {
inputValueNow = secondsAvailable ? (0, _core.transformTimeWithSeconds)(maxTime) : maxTime;
} else if (minTime && (0, _core.isTimeBefore)(inputValueNow, minTime)) {
inputValueNow = secondsAvailable ? (0, _core.transformTimeWithSeconds)(minTime) : minTime;
}
if (valueProp === null) {
var valueFinal = _objectSpread({
inputValueNow: inputValueNow
}, (0, _core.extractHMSFromTime)(inputValueNow));
setHour(valueFinal.hour);
setMinute(valueFinal.minute);
setSecond(valueFinal.second);
setInputValue(valueFinal.inputValueNow);
}
if ((0, _core.isLegalTimeString)({
time: inputValue,
onlyHour: onlyHour
})) {
if (onChange) {
onChange(inputValueNow);
}
if (closeOnSelect) {
setTimeout(function () {
setVisible(false);
}, 120);
}
}
};
var handleVisibleChange = function handleVisibleChange(visibleNew) {
var inputElement = inputRef.current.input;
if (disabled) {
return;
}
setTimeout(function () {
var _document = document,
activeElement = _document.activeElement;
if (visibleNew || !visibleNew && inputElement !== activeElement) {
var withSeconds = hour && minute && second ? "".concat(hour, ":").concat(minute, ":").concat(second) : "";
var noSeconds = hour && minute ? "".concat(hour, ":").concat(minute) : "";
var newInputValue = secondsAvailable ? withSeconds : noSeconds;
if (!visibleNew && inputValue !== newInputValue) {
setInputValue(newInputValue);
}
setVisible(visibleNew);
}
}, 0);
};
var handleInputChange = function handleInputChange(_ref2) {
var inputValueNew = _ref2.target.value;
setInputValue(inputValueNew);
if (inputValueNew === "" || (0, _core.isLegalTimeString)({
time: inputValueNew,
onlyHour: onlyHour
}) && !(0, _core.isTimeAfter)(inputValueNew, maxTime) && !(0, _core.isTimeBefore)(inputValueNew, minTime)) {
var _extractHMSFromTime3 = (0, _core.extractHMSFromTime)(inputValueNew),
hourNew = _extractHMSFromTime3.hour,
minuteNew = _extractHMSFromTime3.minute,
secondNew = _extractHMSFromTime3.second;
if (!(disabledHours && disabledHours(hourNew)) && !(disabledMinutes && disabledMinutes(minuteNew)) && !(disabledSeconds && disabledSeconds(secondNew))) {
if (onChange) {
onChange(inputValueNew);
}
if (value === null) {
setHour(hourNew);
setMinute(onlyHour ? "00" : minuteNew);
setSecond(secondsAvailable ? secondNew : "00");
}
}
}
};
var handleInputFocus = function handleInputFocus() {
if (!visible) {
setVisible(true);
}
};
var handleInputKeyDown = function handleInputKeyDown(_ref3) {
var key = _ref3.key;
var keys = ["Tab", "Escape", "Enter"];
if (keys.includes(key)) {
setVisible(false);
inputRef.current.input.blur();
}
};
(0, _react.useImperativeHandle)(ref, function () {
return {
input: inputRef.current,
handleVisibleChange: handleVisibleChange
};
});
var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-input"), "".concat(prefix, "-").concat(size), _defineProperty({}, "".concat(prefix, "-secondsAvailable"), secondsAvailable));
return _react["default"].createElement(_popover["default"], _extends({
arrowed: false,
onVisibleChange: handleVisibleChange,
popup: _react["default"].createElement("div", null, _react["default"].createElement(_TimeSelect["default"], {
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
disabledHours: disabledHours,
maxTime: maxTime,
minTime: minTime,
onlyHour: onlyHour,
selectedValue: hour,
size: size,
type: "hour"
}), !onlyHour && _react["default"].createElement(_TimeSelect["default"], {
disabledMinutes: disabledMinutes,
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
maxTime: maxTime,
minTime: minTime,
selectedValue: minute,
size: size,
type: "minute"
}), secondsAvailable && _react["default"].createElement(_TimeSelect["default"], {
disabledSeconds: disabledSeconds,
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
currentMinute: minute ? parseInt(minute, 10) : null,
maxTime: maxTime,
minTime: minTime,
selectedValue: second,
size: size,
type: "second"
})),
trigger: "click",
visible: visible
}, popoverProps), _react["default"].createElement(_input["default"], _extends({
className: classSet,
cleaveOptions: {
blocks: secondsAvailable ? [2, 2, 2] : [2, 2],
delimiter: ":"
},
disabled: disabled,
rightElement: _react["default"].createElement(_icon["default"], {
icon: "time-outlined"
}),
size: size,
value: inputValue,
onChange: handleInputChange,
onFocus: handleInputFocus,
onKeyDown: handleInputKeyDown,
ref: inputRef
}, otherProps)));
});
TimePicker.displayName = "TimePicker";
TimePicker.propTypes = {
className: _propTypes["default"].string,
closeOnSelect: _propTypes["default"].bool,
defaultValue: _propTypes["default"].string,
disabled: _propTypes["default"].bool,
disabledHours: _propTypes["default"].func,
disabledMinutes: _propTypes["default"].func,
disabledSeconds: _propTypes["default"].func,
intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]),
maxTime: _propTypes["default"].string,
minTime: _propTypes["default"].string,
onChange: _propTypes["default"].func,
onlyHour: _propTypes["default"].bool,
placeholder: _propTypes["default"].string,
size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]),
value: _propTypes["default"].string
};
TimePicker.defaultProps = {
className: "",
closeOnSelect: false,
defaultValue: null,
disabled: false,
disabledHours: noop,
disabledMinutes: noop,
disabledSeconds: noop,
intent: "normal",
maxTime: "24:00",
minTime: null,
onChange: noop,
onlyHour: false,
placeholder: "请选择",
secondsAvailable: false,
size: "small",
value: null
};
var _default = exports["default"] = TimePicker;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX2NvbmZpZ1Byb3ZpZGVyIiwiX2ljb24iLCJfaW5wdXQiLCJfcG9wb3ZlciIsIl9UaW1lU2VsZWN0IiwiX2NvcmUiLCJfZXhjbHVkZWQiLCJlIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJyIiwidCIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImwiLCJpdGVyYXRvciIsImYiLCJuZXh0IiwiZG9uZSIsImlzQXJyYXkiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsInMiLCJpbmNsdWRlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwicHJlZml4Iiwibm9vcCIsIlRpbWVQaWNrZXIiLCJmb3J3YXJkUmVmIiwiX3JlZiIsInJlZiIsImNsYXNzTmFtZSIsImNsb3NlT25TZWxlY3QiLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlZCIsImRpc2FibGVkSG91cnMiLCJkaXNhYmxlZE1pbnV0ZXMiLCJkaXNhYmxlZFNlY29uZHMiLCJtYXhUaW1lIiwibWluVGltZSIsIm9uQ2hhbmdlIiwib25seUhvdXIiLCJwbGFjZWhvbGRlciIsInBvcG92ZXJQcm9wcyIsIl9yZWYkc2Vjb25kc0F2YWlsYWJsZSIsInNlY29uZHNBdmFpbGFibGUiLCJzaXplUHJvcCIsInNpemUiLCJvdGhlclByb3BzIiwiZ2V0SW5pdGlhbFN0YXRlIiwidmFsdWVTdGF0ZSIsIl9leHRyYWN0SE1TRnJvbVRpbWUiLCJleHRyYWN0SE1TRnJvbVRpbWUiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiaW5wdXRWYWx1ZSIsInByZXZWYWx1ZVByb3AiLCJ2aXNpYmxlIiwiaW5pdGlhbFN0YXRlIiwidXNlTWVtbyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsInNldElucHV0VmFsdWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNldEhvdXIiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNldE1pbnV0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2V0U2Vjb25kIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwic2V0UHJldlZhbHVlUHJvcCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzZXRWaXNpYmxlIiwiX2V4dHJhY3RITVNGcm9tVGltZTIiLCJuZXdIb3VyIiwibmV3TWludXRlIiwibmV3U2Vjb25kIiwiaW5wdXRSZWYiLCJ1c2VSZWYiLCJfdXNlQ29udGV4dCIsInVzZUNvbnRleHQiLCJDb25maWdDb250ZXh0Iiwic2l6ZUNvbnRleHQiLCJnZXRDb21wdXRlZFNpemUiLCJoYW5kbGVDbGljayIsInZhbHVlTmV3IiwidHlwZSIsInZhbHVlUHJvcCIsImlucHV0VmFsdWVOb3ciLCJjb25jYXQiLCJpc1RpbWVBZnRlciIsInRyYW5zZm9ybVRpbWVXaXRoU2Vjb25kcyIsImlzVGltZUJlZm9yZSIsInZhbHVlRmluYWwiLCJpc0xlZ2FsVGltZVN0cmluZyIsInRpbWUiLCJzZXRUaW1lb3V0IiwiaGFuZGxlVmlzaWJsZUNoYW5nZSIsInZpc2libGVOZXciLCJpbnB1dEVsZW1lbnQiLCJjdXJyZW50IiwiaW5wdXQiLCJfZG9jdW1lbnQiLCJkb2N1bWVudCIsImFjdGl2ZUVsZW1lbnQiLCJ3aXRoU2Vjb25kcyIsIm5vU2Vjb25kcyIsIm5ld0lucHV0VmFsdWUiLCJoYW5kbGVJbnB1dENoYW5nZSIsIl9yZWYyIiwiaW5wdXRWYWx1ZU5ldyIsInRhcmdldCIsIl9leHRyYWN0SE1TRnJvbVRpbWUzIiwiaG91ck5ldyIsIm1pbnV0ZU5ldyIsInNlY29uZE5ldyIsImhhbmRsZUlucHV0Rm9jdXMiLCJoYW5kbGVJbnB1dEtleURvd24iLCJfcmVmMyIsImtleSIsImJsdXIiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiY2xhc3NTZXQiLCJjbGFzc05hbWVzIiwiY3JlYXRlRWxlbWVudCIsImFycm93ZWQiLCJvblZpc2libGVDaGFuZ2UiLCJwb3B1cCIsImN1cnJlbnRIb3VyIiwicGFyc2VJbnQiLCJzZWxlY3RlZFZhbHVlIiwiY3VycmVudE1pbnV0ZSIsInRyaWdnZXIiLCJjbGVhdmVPcHRpb25zIiwiYmxvY2tzIiwiZGVsaW1pdGVyIiwicmlnaHRFbGVtZW50IiwiaWNvbiIsIm9uRm9jdXMiLCJvbktleURvd24iLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImJvb2wiLCJmdW5jIiwiaW50ZW50Iiwib25lT2YiLCJkZWZhdWx0UHJvcHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL3RpbWUtcGlja2VyL1RpbWVQaWNrZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDb250ZXh0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0LCBnZXRDb21wdXRlZFNpemUgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi9pY29uXCJcbmltcG9ydCBJbnB1dCBmcm9tIFwiLi4vaW5wdXRcIlxuaW1wb3J0IFBvcG92ZXIsIHsgSVBvcG92ZXJQcm9wcyB9IGZyb20gXCIuLi9wb3BvdmVyXCJcbmltcG9ydCBUaW1lU2VsZWN0IGZyb20gXCIuL1RpbWVTZWxlY3RcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5pbXBvcnQge1xuICB0cmFuc2Zvcm1UaW1lV2l0aFNlY29uZHMsXG4gIGV4dHJhY3RITVNGcm9tVGltZSxcbiAgaXNMZWdhbFRpbWVTdHJpbmcsXG4gIGlzVGltZUFmdGVyLFxuICBpc1RpbWVCZWZvcmUsXG59IGZyb20gXCIuL2NvcmVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktdGltZVwiXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJVGltZVBpY2tlclByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5Zyo6YCJ5oup5ZCO77yM5raI5aSxIFBvcG92ZXJcbiAgICovXG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG4gIC8qKlxuICAgKiDlhoXpg6jpqbHliqjvvIzpu5jorqTpgInmi6nml7bpl7RcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IG51bGwgfCBzdHJpbmdcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTlsI/ml7ZcbiAgICovXG4gIGRpc2FibGVkSG91cnM/OiAoaG91cj86IHN0cmluZyB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTliIbpkp9cbiAgICovXG4gIGRpc2FibGVkTWludXRlcz86IChtaW51dGU/OiBzdHJpbmcgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE56eSXG4gICAqL1xuICBkaXNhYmxlZFNlY29uZHM/OiAoc2Vjb25kPzogc3RyaW5nIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOWPr+mAieaXtumXtOeahOacgOWkp+WAvFxuICAgKi9cbiAgbWF4VGltZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOWPr+mAieaXtumXtOeahOacgOWwj+WAvFxuICAgKi9cbiAgbWluVGltZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOaXtumXtOaUueWPmOeahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIC8qKlxuICAgKiDliKTmlq3mmK/lkKbmmK/mlbTmlbBcbiAgICovXG4gIG9ubHlIb3VyPzogYm9vbGVhblxuICAvKipcbiAgICog5Y2g5L2N5a2X56ymXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICAvKipcbiAgICog5Lyg5YWlIFBvcG92ZXIg55qEIHByb3BzXG4gICAqL1xuICBwb3BvdmVyUHJvcHM/OiBJUG9wb3ZlclByb3BzXG4gIC8qKlxuICAgKiAyMDIyMTIxNjog5pSv5oyB56eS55qE6YCJ5oupXG4gICAqL1xuICBzZWNvbmRzQXZhaWxhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplPzogXCJtaW5pXCIgfCBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiXG4gIC8qKlxuICAgKiDlpJbpg6jmjqfliLbvvJrlvZPliY3ml7bpl7RcbiAgICovXG4gIHZhbHVlPzogbnVsbCB8IHN0cmluZ1xufVxuXG4vKipcbiAqIOaXtumXtOmAieaLqeWZqOeUqOS6juS6huino+W9k+WJjeW3sumAieaXtumXtO+8jOmAieaLqeaIlui+k+WFpemcgOimgeeahOaXtumXtOOAgeaXtumXtOiMg+WbtOetieOAglxuICovXG5jb25zdCBUaW1lUGlja2VyOiBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICBJVGltZVBpY2tlclByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlT25TZWxlY3QsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVkSG91cnMsXG4gICAgICBkaXNhYmxlZE1pbnV0ZXMsXG4gICAgICBkaXNhYmxlZFNlY29uZHMsXG4gICAgICBtYXhUaW1lLFxuICAgICAgbWluVGltZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25seUhvdXIsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHBvcG92ZXJQcm9wcyxcbiAgICAgIHNlY29uZHNBdmFpbGFibGUgPSBmYWxzZSxcbiAgICAgIHNpemU6IHNpemVQcm9wLFxuICAgICAgdmFsdWUsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSVRpbWVQaWNrZXJQcm9wcyxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVTdGF0ZSA9IHZhbHVlICE9PSBudWxsID8gdmFsdWUgOiBkZWZhdWx0VmFsdWVcbiAgICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQgfSA9IGV4dHJhY3RITVNGcm9tVGltZSh2YWx1ZVN0YXRlKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG91cixcbiAgICAgICAgaW5wdXRWYWx1ZTogdmFsdWVTdGF0ZSB8fCBcIlwiLFxuICAgICAgICBtaW51dGU6IG9ubHlIb3VyID8gXCIwMFwiIDogbWludXRlLFxuICAgICAgICBzZWNvbmQ6IHNlY29uZHNBdmFpbGFibGUgPyBzZWNvbmQgOiBcIjAwXCIsXG4gICAgICAgIHByZXZWYWx1ZVByb3A6IHZhbHVlU3RhdGUgfHwgXCJcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHVzZU1lbW8oZ2V0SW5pdGlhbFN0YXRlLCBbXSlcbiAgICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUuaW5wdXRWYWx1ZSlcbiAgICBjb25zdCBbaG91ciwgc2V0SG91cl0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUuaG91cilcbiAgICBjb25zdCBbbWludXRlLCBzZXRNaW51dGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLm1pbnV0ZSlcbiAgICBjb25zdCBbc2Vjb25kLCBzZXRTZWNvbmRdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLnNlY29uZClcbiAgICBjb25zdCBbcHJldlZhbHVlUHJvcCwgc2V0UHJldlZhbHVlUHJvcF0gPSB1c2VTdGF0ZShcbiAgICAgIGluaXRpYWxTdGF0ZS5wcmV2VmFsdWVQcm9wXG4gICAgKVxuICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS52aXNpYmxlKVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHByZXZWYWx1ZVByb3AgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGhvdXI6IG5ld0hvdXIsXG4gICAgICAgIG1pbnV0ZTogbmV3TWludXRlLFxuICAgICAgICBzZWNvbmQ6IG5ld1NlY29uZCxcbiAgICAgIH0gPSBleHRyYWN0SE1TRnJvbVRpbWUodmFsdWUpXG5cbiAgICAgIHNldElucHV0VmFsdWUodmFsdWUgfHwgXCJcIilcbiAgICAgIHNldEhvdXIobmV3SG91cilcbiAgICAgIHNldE1pbnV0ZShvbmx5SG91ciA/IFwiMDBcIiA6IG5ld01pbnV0ZSlcbiAgICAgIHNldFNlY29uZChzZWNvbmRzQXZhaWxhYmxlID8gbmV3U2Vjb25kIDogXCIwMFwiKVxuICAgICAgc2V0UHJldlZhbHVlUHJvcCh2YWx1ZSB8fCBcIlwiKVxuICAgIH1cblxuICAgIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPGFueT4obnVsbClcblxuICAgIGNvbnN0IHsgc2l6ZTogc2l6ZUNvbnRleHQgfSA9IHVzZUNvbnRleHQoQ29uZmlnQ29udGV4dClcblxuICAgIGNvbnN0IHNpemUgPSBnZXRDb21wdXRlZFNpemUoc2l6ZVByb3AsIHNpemVDb250ZXh0KVxuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAodmFsdWVOZXc6IHN0cmluZywgdHlwZTogXCJob3VyXCIgfCBcIm1pbnV0ZVwiKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVByb3AgPSB2YWx1ZVxuXG4gICAgICBsZXQgaW5wdXRWYWx1ZU5vdyA9IFwiXCJcbiAgICAgIGlmIChzZWNvbmRzQXZhaWxhYmxlKSB7XG4gICAgICAgIGlmICh0eXBlID09PSBcImhvdXJcIikge1xuICAgICAgICAgIGlucHV0VmFsdWVOb3cgPSBgJHt2YWx1ZU5ld306JHttaW51dGUgfHwgXCJcIn06JHtzZWNvbmQgfHwgXCJcIn1gXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtaW51dGVcIikge1xuICAgICAgICAgIGlucHV0VmFsdWVOb3cgPSBgJHtob3VyIHx8IFwiXCJ9OiR7dmFsdWVOZXd9OiR7c2Vjb25kIHx8IFwiXCJ9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0VmFsdWVOb3cgPSBgJHtob3VyIHx8IFwiXCJ9OiR7bWludXRlIHx8IFwiXCJ9OiR7dmFsdWVOZXd9YFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dFZhbHVlTm93ID1cbiAgICAgICAgICB0eXBlID09PSBcImhvdXJcIlxuICAgICAgICAgICAgPyBgJHt2YWx1ZU5ld306JHttaW51dGUgfHwgXCJcIn1gXG4gICAgICAgICAgICA6IGAke2hvdXIgfHwgXCJcIn06JHt2YWx1ZU5ld31gXG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhUaW1lICYmIGlzVGltZUFmdGVyKGlucHV0VmFsdWVOb3csIG1heFRpbWUpKSB7XG4gICAgICAgIGlucHV0VmFsdWVOb3cgPSBzZWNvbmRzQXZhaWxhYmxlXG4gICAgICAgICAgPyB0cmFuc2Zvcm1UaW1lV2l0aFNlY29uZHMobWF4VGltZSlcbiAgICAgICAgICA6IG1heFRpbWVcbiAgICAgIH0gZWxzZSBpZiAobWluVGltZSAmJiBpc1RpbWVCZWZvcmUoaW5wdXRWYWx1ZU5vdywgbWluVGltZSkpIHtcbiAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IHNlY29uZHNBdmFpbGFibGVcbiAgICAgICAgICA/IHRyYW5zZm9ybVRpbWVXaXRoU2Vjb25kcyhtaW5UaW1lKVxuICAgICAgICAgIDogbWluVGltZVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlRmluYWwgPSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyxcbiAgICAgICAgICAuLi5leHRyYWN0SE1TRnJvbVRpbWUoaW5wdXRWYWx1ZU5vdyksXG4gICAgICAgIH1cbiAgICAgICAgc2V0SG91cih2YWx1ZUZpbmFsLmhvdXIpXG4gICAgICAgIHNldE1pbnV0ZSh2YWx1ZUZpbmFsLm1pbnV0ZSlcbiAgICAgICAgc2V0U2Vjb25kKHZhbHVlRmluYWwuc2Vjb25kKVxuICAgICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlRmluYWwuaW5wdXRWYWx1ZU5vdylcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTGVnYWxUaW1lU3RyaW5nKHsgdGltZTogaW5wdXRWYWx1ZSwgb25seUhvdXIgfSkpIHtcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgb25DaGFuZ2UoaW5wdXRWYWx1ZU5vdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgICB9LCAxMjApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmxlQ2hhbmdlID0gKHZpc2libGVOZXc6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHsgaW5wdXQ6IGlucHV0RWxlbWVudCB9ID0gaW5wdXRSZWYuY3VycmVudFxuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWN0aXZlRWxlbWVudCB9ID0gZG9jdW1lbnRcbiAgICAgICAgaWYgKHZpc2libGVOZXcgfHwgKCF2aXNpYmxlTmV3ICYmIGlucHV0RWxlbWVudCAhPT0gYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zdCB3aXRoU2Vjb25kcyA9XG4gICAgICAgICAgICBob3VyICYmIG1pbnV0ZSAmJiBzZWNvbmQgPyBgJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9YCA6IFwiXCJcbiAgICAgICAgICBjb25zdCBub1NlY29uZHMgPSBob3VyICYmIG1pbnV0ZSA/IGAke2hvdXJ9OiR7bWludXRlfWAgOiBcIlwiXG4gICAgICAgICAgY29uc3QgbmV3SW5wdXRWYWx1ZSA9IHNlY29uZHNBdmFpbGFibGUgPyB3aXRoU2Vjb25kcyA6IG5vU2Vjb25kc1xuICAgICAgICAgIGlmICghdmlzaWJsZU5ldyAmJiBpbnB1dFZhbHVlICE9PSBuZXdJbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld0lucHV0VmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFZpc2libGUodmlzaWJsZU5ldylcbiAgICAgICAgfVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9ICh7XG4gICAgICB0YXJnZXQ6IHsgdmFsdWU6IGlucHV0VmFsdWVOZXcgfSxcbiAgICB9OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgc2V0SW5wdXRWYWx1ZShpbnB1dFZhbHVlTmV3KVxuICAgICAgaWYgKFxuICAgICAgICBpbnB1dFZhbHVlTmV3ID09PSBcIlwiIHx8XG4gICAgICAgIChpc0xlZ2FsVGltZVN0cmluZyh7XG4gICAgICAgICAgdGltZTogaW5wdXRWYWx1ZU5ldyxcbiAgICAgICAgICBvbmx5SG91cixcbiAgICAgICAgfSkgJiZcbiAgICAgICAgICAhaXNUaW1lQWZ0ZXIoaW5wdXRWYWx1ZU5ldywgbWF4VGltZSkgJiZcbiAgICAgICAgICAhaXNUaW1lQmVmb3JlKGlucHV0VmFsdWVOZXcsIG1pblRpbWUpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBob3VyOiBob3VyTmV3LFxuICAgICAgICAgIG1pbnV0ZTogbWludXRlTmV3LFxuICAgICAgICAgIHNlY29uZDogc2Vjb25kTmV3LFxuICAgICAgICB9ID0gZXh0cmFjdEhNU0Zyb21UaW1lKGlucHV0VmFsdWVOZXcpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKGRpc2FibGVkSG91cnMgJiYgZGlzYWJsZWRIb3Vycyhob3VyTmV3KSkgJiZcbiAgICAgICAgICAhKGRpc2FibGVkTWludXRlcyAmJiBkaXNhYmxlZE1pbnV0ZXMobWludXRlTmV3KSkgJiZcbiAgICAgICAgICAhKGRpc2FibGVkU2Vjb25kcyAmJiBkaXNhYmxlZFNlY29uZHMoc2Vjb25kTmV3KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBvbkNoYW5nZShpbnB1dFZhbHVlTmV3KVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEhvdXIoaG91ck5ldylcbiAgICAgICAgICAgIHNldE1pbnV0ZShvbmx5SG91ciA/IFwiMDBcIiA6IG1pbnV0ZU5ldylcbiAgICAgICAgICAgIHNldFNlY29uZChzZWNvbmRzQXZhaWxhYmxlID8gc2Vjb25kTmV3IDogXCIwMFwiKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgc2V0VmlzaWJsZSh0cnVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0S2V5RG93biA9ICh7XG4gICAgICBrZXksXG4gICAgfTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3Qga2V5cyA9IFtcIlRhYlwiLCBcIkVzY2FwZVwiLCBcIkVudGVyXCJdXG4gICAgICBpZiAoa2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHNldFZpc2libGUoZmFsc2UpXG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuYmx1cigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBpbnB1dDogaW5wdXRSZWYuY3VycmVudCxcbiAgICAgIGhhbmRsZVZpc2libGVDaGFuZ2UsXG4gICAgfSkpXG5cbiAgICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBgJHtwcmVmaXh9LWlucHV0YCxcbiAgICAgIGAke3ByZWZpeH0tJHtzaXplfWAsXG4gICAgICB7XG4gICAgICAgIFtgJHtwcmVmaXh9LXNlY29uZHNBdmFpbGFibGVgXTogc2Vjb25kc0F2YWlsYWJsZSxcbiAgICAgIH1cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBvcG92ZXJcbiAgICAgICAgYXJyb3dlZD17ZmFsc2V9XG4gICAgICAgIG9uVmlzaWJsZUNoYW5nZT17aGFuZGxlVmlzaWJsZUNoYW5nZX1cbiAgICAgICAgcG9wdXA9e1xuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8VGltZVNlbGVjdFxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2xpY2t9XG4gICAgICAgICAgICAgIGN1cnJlbnRIb3VyPXtob3VyID8gcGFyc2VJbnQoaG91ciwgMTApIDogbnVsbH1cbiAgICAgICAgICAgICAgZGlzYWJsZWRIb3Vycz17ZGlzYWJsZWRIb3Vyc31cbiAgICAgICAgICAgICAgbWF4VGltZT17bWF4VGltZX1cbiAgICAgICAgICAgICAgbWluVGltZT17bWluVGltZX1cbiAgICAgICAgICAgICAgb25seUhvdXI9e29ubHlIb3VyfVxuICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlPXtob3VyfVxuICAgICAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgICAgICB0eXBlPVwiaG91clwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyFvbmx5SG91ciAmJiAoXG4gICAgICAgICAgICAgIDxUaW1lU2VsZWN0XG4gICAgICAgICAgICAgICAgZGlzYWJsZWRNaW51dGVzPXtkaXNhYmxlZE1pbnV0ZXN9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRIb3VyPXtob3VyID8gcGFyc2VJbnQoaG91ciwgMTApIDogbnVsbH1cbiAgICAgICAgICAgICAgICBtYXhUaW1lPXttYXhUaW1lfVxuICAgICAgICAgICAgICAgIG1pblRpbWU9e21pblRpbWV9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZT17bWludXRlfVxuICAgICAgICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgICAgICAgdHlwZT1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3NlY29uZHNBdmFpbGFibGUgJiYgKFxuICAgICAgICAgICAgICA8VGltZVNlbGVjdFxuICAgICAgICAgICAgICAgIGRpc2FibGVkU2Vjb25kcz17ZGlzYWJsZWRTZWNvbmRzfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDbGlja31cbiAgICAgICAgICAgICAgICBjdXJyZW50SG91cj17aG91ciA/IHBhcnNlSW50KGhvdXIsIDEwKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgY3VycmVudE1pbnV0ZT17bWludXRlID8gcGFyc2VJbnQobWludXRlLCAxMCkgOiBudWxsfVxuICAgICAgICAgICAgICAgIG1heFRpbWU9e21heFRpbWV9XG4gICAgICAgICAgICAgICAgbWluVGltZT17bWluVGltZX1cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlPXtzZWNvbmR9XG4gICAgICAgICAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwic2Vjb25kXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgdmlzaWJsZT17dmlzaWJsZX1cbiAgICAgICAgey4uLnBvcG92ZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAgPElucHV0XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc1NldH1cbiAgICAgICAgICBjbGVhdmVPcHRpb25zPXt7XG4gICAgICAgICAgICBibG9ja3M6IHNlY29uZHNBdmFpbGFibGUgPyBbMiwgMiwgMl0gOiBbMiwgMl0sXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiOlwiLFxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIHJpZ2h0RWxlbWVudD17PEljb24gaWNvbj1cInRpbWUtb3V0bGluZWRcIiAvPn1cbiAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVJbnB1dEZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlSW5wdXRLZXlEb3dufVxuICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICAgIC8+XG4gICAgICA8L1BvcG92ZXI+XG4gICAgKVxuICB9XG4pXG5cblRpbWVQaWNrZXIuZGlzcGxheU5hbWUgPSBcIlRpbWVQaWNrZXJcIlxuXG5UaW1lUGlja2VyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm5Zyo6YCJ5oup5ZCO77yM5raI5aSxIFBvcG92ZXJcbiAgICovXG4gIGNsb3NlT25TZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5YaF6YOo6amx5Yqo77yM6buY6K6k6YCJ5oup5pe26Ze0XG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWwj+aXtlxuICAgKi9cbiAgZGlzYWJsZWRIb3VyczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTliIbpkp9cbiAgICovXG4gIGRpc2FibGVkTWludXRlczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTnp5JcbiAgICovXG4gIGRpc2FibGVkU2Vjb25kczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDorr7nva7ovpPlhaXmoYbnsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwicHJpbWFyeVwiLFxuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwid2FybmluZ1wiLFxuICAgIFwiZGFuZ2VyXCIsXG4gIF0pLFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5aSn5YC8XG4gICAqL1xuICBtYXhUaW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5bCP5YC8XG4gICAqL1xuICBtaW5UaW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5pe26Ze05pS55Y+Y55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOWIpOaWreaYr+WQpuaYr+aVtOaVsFxuICAgKi9cbiAgb25seUhvdXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5Y2g5L2N5a2X56ymXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOiuvue9ruWwuuWvuFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcIm1pbmlcIiwgXCJzbWFsbFwiLCBcIm1lZGl1bVwiLCBcImxhcmdlXCJdKSxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muW9k+WJjeaXtumXtFxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG59XG5cblRpbWVQaWNrZXIuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiXCIsXG4gIGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGlzYWJsZWRIb3Vyczogbm9vcCxcbiAgZGlzYWJsZWRNaW51dGVzOiBub29wLFxuICBkaXNhYmxlZFNlY29uZHM6IG5vb3AsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgbWF4VGltZTogXCIyNDowMFwiLFxuICBtaW5UaW1lOiBudWxsLFxuICBvbkNoYW5nZTogbm9vcCxcbiAgb25seUhvdXI6IGZhbHNlLFxuICBwbGFjZWhvbGRlcjogXCLor7fpgInmi6lcIixcbiAgc2Vjb25kc0F2YWlsYWJsZTogZmFsc2UsXG4gIHNpemU6IFwic21hbGxcIixcbiAgdmFsdWU6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbWVQaWNrZXJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQVFBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYs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