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>
352 lines (351 loc) • 60.3 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 _rcAnimate = _interopRequireDefault(require("rc-animate"));
var _button = _interopRequireDefault(require("../button"));
var _icon = _interopRequireDefault(require("../icon"));
var _popover = _interopRequireDefault(require("../popover"));
var _isEqualArrays = _interopRequireDefault(require("../_util/isEqualArrays"));
require("./style");
var _excluded = ["allowClear", "changeOnSelect", "children", "className", "defaultValue", "disabled", "displayRender", "expandTrigger", "onChange", "onVisibleChange", "options", "placeholder", "popoverProps", "size", "value", "visible"];
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 _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
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-cascader";
var Cascader = function Cascader(_ref) {
var allowClear = _ref.allowClear,
changeOnSelect = _ref.changeOnSelect,
children = _ref.children,
className = _ref.className,
defaultValue = _ref.defaultValue,
disabled = _ref.disabled,
_ref$displayRender = _ref.displayRender,
displayRender = _ref$displayRender === void 0 ? function (title) {
return title.join("/");
} : _ref$displayRender,
expandTrigger = _ref.expandTrigger,
onChange = _ref.onChange,
onVisibleChange = _ref.onVisibleChange,
options = _ref.options,
placeholder = _ref.placeholder,
popoverProps = _ref.popoverProps,
size = _ref.size,
valueProps = _ref.value,
visibleProps = _ref.visible,
otherProps = _objectWithoutProperties(_ref, _excluded);
var _useState = (0, _react.useState)(valueProps !== null ? valueProps || [] : defaultValue || []),
_useState2 = _slicedToArray(_useState, 2),
value = _useState2[0],
setValue = _useState2[1];
var _useState3 = (0, _react.useState)(valueProps !== null ? valueProps || [] : defaultValue || []),
_useState4 = _slicedToArray(_useState3, 2),
activeValue = _useState4[0],
setActiveValue = _useState4[1];
var _useState5 = (0, _react.useState)(visibleProps !== null ? visibleProps : false),
_useState6 = _slicedToArray(_useState5, 2),
visible = _useState6[0],
setVisible = _useState6[1];
var delayTimer = (0, _react.useRef)(0);
if (valueProps !== null && !(0, _isEqualArrays["default"])(valueProps || [], value)) {
setValue(valueProps || []);
}
if (visibleProps !== null && visible !== visibleProps) {
setVisible(visibleProps);
}
var setPopupVisible = function setPopupVisible(popupVisible) {
if (visibleProps === null) {
setVisible(popupVisible);
}
if (popupVisible && !visible) {
setActiveValue(value);
}
if (onVisibleChange) {
onVisibleChange(popupVisible);
}
};
var handleClear = function handleClear(e) {
e.preventDefault();
e.stopPropagation();
setPopupVisible(false);
if (!valueProps) {
setValue([]);
}
if (onChange) {
onChange([], []);
}
};
var handleChange = function handleChange(opts, _ref2) {
var popupVisible = _ref2.visible;
setPopupVisible(popupVisible);
if (onChange) {
onChange(opts.map(function (_ref3) {
var v = _ref3.value;
return v || "";
}), opts);
}
};
var hasValue = value === null || value === void 0 ? void 0 : value.length;
var arrayTreeFilter = function arrayTreeFilter() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var filterFn = arguments.length > 1 ? arguments[1] : undefined;
var childs = data;
var result = [];
var level = 0;
do {
var foundItem = childs.filter(function (item) {
return filterFn(item, level);
})[0];
if (!foundItem) {
break;
}
result.push(foundItem);
childs = foundItem.children || [];
level += 1;
} while (childs.length > 0);
return result;
};
var getTitle = function getTitle() {
var unwrappedValue = Array.isArray(value[0]) ? value[0] : value;
var selectedOptions = arrayTreeFilter(options, function (o, level) {
return o.value === unwrappedValue[level];
});
var title = selectedOptions.length ? selectedOptions.map(function (o) {
return o.title;
}) : value;
return displayRender(title.map(function (o) {
return (o || "").toString();
}), selectedOptions);
};
var isActiveOption = function isActiveOption(option, menuIndex) {
return activeValue[menuIndex] === option.value;
};
var getActiveOptions = function getActiveOptions(activeValueParam) {
return arrayTreeFilter(options, function (o, level) {
return o.value === (activeValueParam || activeValue)[level];
});
};
var getShowOptions = function getShowOptions() {
var result = getActiveOptions().map(function (_ref4) {
var childs = _ref4.children;
return childs;
}).filter(function (activeOption) {
return activeOption === null || activeOption === void 0 ? void 0 : activeOption.length;
});
result.unshift(options);
return result;
};
var delaySelect = function delaySelect(func) {
if (delayTimer.current) {
clearTimeout(delayTimer.current);
delayTimer.current = 0;
}
if (typeof func === "function") {
delayTimer.current = window.setTimeout(function () {
func();
delayTimer.current = 0;
}, 150);
}
};
var optss = getShowOptions();
var menus = _react["default"].createElement("div", {
className: "".concat(prefix, "-menus")
}, _react["default"].createElement(_rcAnimate["default"], {
transitionAppear: true,
component: "div",
style: {
display: "flex"
},
animation: {
appear: function appear(node, done) {
node.classList.add("".concat(prefix, "-enter"));
setTimeout(function () {
node.classList.add("".concat(prefix, "-enter-active"));
}, 50);
var promise = new Promise(function (resolve) {
return setTimeout(resolve, 200);
});
promise.then(function () {
node.classList.remove("".concat(prefix, "-enter-active"));
node.classList.remove("".concat(prefix, "-enter"));
return done();
});
return done();
},
enter: function enter(node, done) {
node.classList.add("".concat(prefix, "-enter"));
setTimeout(function () {
node.classList.add("".concat(prefix, "-enter-active"));
}, 50);
var promise = new Promise(function (resolve) {
return setTimeout(resolve, 200);
});
promise.then(function () {
node.classList.remove("".concat(prefix, "-enter-active"));
node.classList.remove("".concat(prefix, "-enter"));
return done();
});
return done();
},
leave: function leave(node, done) {
node.classList.add("".concat(prefix, "-leave"));
setTimeout(function () {
node.classList.add("".concat(prefix, "-leave-active"));
}, 50);
var promise = new Promise(function (resolve) {
return setTimeout(resolve, 200);
});
promise.then(function () {
return done();
});
}
}
}, optss.map(function (opts, menuIndex) {
return _react["default"].createElement("div", {
className: (0, _classnames["default"])("".concat(prefix, "-menu"), _defineProperty({}, "".concat(prefix, "-menu-").concat(size), size)),
key: menuIndex
}, (opts || []).map(function (o, j) {
var v = o.value,
title = o.title,
c = o.children,
d = o.disabled;
var handleSelect = function handleSelect() {
if (d) {
return;
}
var activeValueDuplicated = _toConsumableArray(activeValue);
activeValueDuplicated = activeValueDuplicated.slice(0, menuIndex + 1);
activeValueDuplicated[menuIndex] = v || "";
var activeOptions = getActiveOptions(activeValueDuplicated);
setActiveValue(activeValueDuplicated);
if (!(c !== null && c !== void 0 && c.length)) {
handleChange(activeOptions, {
visible: false
});
if (valueProps === null) {
setValue(activeValueDuplicated);
}
} else if (changeOnSelect) {
handleChange(activeOptions, {
visible: true
});
if (valueProps === null) {
setValue(activeValueDuplicated);
}
}
};
return _react["default"].createElement("div", {
role: "none",
key: v || j,
className: (0, _classnames["default"])("".concat(prefix, "-menu-item"), _defineProperty({}, "".concat(prefix, "-menu-item-active"), isActiveOption(o, menuIndex))),
title: title === null || title === void 0 ? void 0 : title.toString(),
onMouseDown: function onMouseDown(e) {
return e.preventDefault();
},
onClick: handleSelect,
onMouseEnter: function onMouseEnter() {
if (expandTrigger === "hover" && c !== null && c !== void 0 && c.length) {
delaySelect(handleSelect);
}
},
onMouseLeave: function onMouseLeave() {
if (expandTrigger === "hover" && c !== null && c !== void 0 && c.length) {
delaySelect();
}
}
}, _react["default"].createElement("div", {
className: "".concat(prefix, "-menu-item-content")
}, title), !!(c !== null && c !== void 0 && c.length) && _react["default"].createElement(_icon["default"], {
icon: "triangle-right",
className: "".concat(prefix, "-menu-item-icon")
}));
}));
})));
return _react["default"].createElement(_popover["default"], _extends({
arrowed: false,
popupClassName: "".concat(prefix, "-popup"),
visible: disabled ? false : visible,
onVisibleChange: setPopupVisible,
trigger: "click",
popup: menus
}, popoverProps), _react["default"].createElement(_button["default"], _extends({
disabled: disabled,
className: (0, _classnames["default"])("".concat(prefix, "-button"), className, _defineProperty(_defineProperty({}, "".concat(prefix, "-button-valued"), hasValue), "".concat(prefix, "-button-clearable"), allowClear)),
size: size
}, otherProps), hasValue ? _react["default"].createElement("span", {
className: "".concat(prefix, "-label")
}, getTitle()) : _react["default"].createElement("span", {
className: "".concat(prefix, "-placeholder")
}, placeholder), _react["default"].createElement("div", {
className: "".concat(prefix, "-icons")
}, _react["default"].createElement(_icon["default"], {
icon: "triangle-down",
className: "".concat(prefix, "-suffix"),
color: disabled ? "var(--transparent-gray-600)" : "var(--transparent-gray-700)"
}), allowClear && !disabled && _react["default"].createElement(_icon["default"], {
icon: "cancel-circle",
className: "".concat(prefix, "-remove"),
color: "var(--transparent-gray-700)",
onClick: handleClear
}))));
};
Cascader.displayName = "Cascader";
Cascader.propTypes = {
allowClear: _propTypes["default"].bool,
changeOnSelect: _propTypes["default"].bool,
children: _propTypes["default"].node,
className: _propTypes["default"].string,
defaultValue: _propTypes["default"].any,
disabled: _propTypes["default"].bool,
displayRender: _propTypes["default"].any,
expandTrigger: _propTypes["default"].oneOf(["click", "hover"]),
options: _propTypes["default"].any,
onChange: _propTypes["default"].any,
onVisibleChange: _propTypes["default"].any,
placeholder: _propTypes["default"].any,
popoverProps: _propTypes["default"].any,
size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]),
value: _propTypes["default"].any,
visible: _propTypes["default"].any
};
Cascader.defaultProps = {
allowClear: true,
changeOnSelect: false,
children: null,
className: undefined,
defaultValue: null,
disabled: false,
displayRender: undefined,
expandTrigger: "click",
onChange: undefined,
onVisibleChange: undefined,
options: [],
placeholder: "请选择",
popoverProps: {},
size: "small",
value: null,
visible: null
};
var _default = exports["default"] = Cascader;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX3JjQW5pbWF0ZSIsIl9idXR0b24iLCJfaWNvbiIsIl9wb3BvdmVyIiwiX2lzRXF1YWxBcnJheXMiLCJfZXhjbHVkZWQiLCJlIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJyIiwidCIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwibCIsImYiLCJvIiwibmV4dCIsImRvbmUiLCJwdXNoIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInByZWZpeCIsIkNhc2NhZGVyIiwiX3JlZiIsImFsbG93Q2xlYXIiLCJjaGFuZ2VPblNlbGVjdCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJfcmVmJGRpc3BsYXlSZW5kZXIiLCJkaXNwbGF5UmVuZGVyIiwidGl0bGUiLCJqb2luIiwiZXhwYW5kVHJpZ2dlciIsIm9uQ2hhbmdlIiwib25WaXNpYmxlQ2hhbmdlIiwib3B0aW9ucyIsInBsYWNlaG9sZGVyIiwicG9wb3ZlclByb3BzIiwic2l6ZSIsInZhbHVlUHJvcHMiLCJ2aXNpYmxlUHJvcHMiLCJ2aXNpYmxlIiwib3RoZXJQcm9wcyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsInNldFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJhY3RpdmVWYWx1ZSIsInNldEFjdGl2ZVZhbHVlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzZXRWaXNpYmxlIiwiZGVsYXlUaW1lciIsInVzZVJlZiIsImlzRXF1YWxBcnJheXMiLCJzZXRQb3B1cFZpc2libGUiLCJwb3B1cFZpc2libGUiLCJoYW5kbGVDbGVhciIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiaGFuZGxlQ2hhbmdlIiwib3B0cyIsIl9yZWYyIiwibWFwIiwiX3JlZjMiLCJ2IiwiaGFzVmFsdWUiLCJhcnJheVRyZWVGaWx0ZXIiLCJkYXRhIiwidW5kZWZpbmVkIiwiZmlsdGVyRm4iLCJjaGlsZHMiLCJyZXN1bHQiLCJsZXZlbCIsImZvdW5kSXRlbSIsImZpbHRlciIsIml0ZW0iLCJnZXRUaXRsZSIsInVud3JhcHBlZFZhbHVlIiwic2VsZWN0ZWRPcHRpb25zIiwiaXNBY3RpdmVPcHRpb24iLCJvcHRpb24iLCJtZW51SW5kZXgiLCJnZXRBY3RpdmVPcHRpb25zIiwiYWN0aXZlVmFsdWVQYXJhbSIsImdldFNob3dPcHRpb25zIiwiX3JlZjQiLCJhY3RpdmVPcHRpb24iLCJ1bnNoaWZ0IiwiZGVsYXlTZWxlY3QiLCJmdW5jIiwiY3VycmVudCIsImNsZWFyVGltZW91dCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJvcHRzcyIsIm1lbnVzIiwiY3JlYXRlRWxlbWVudCIsImNvbmNhdCIsInRyYW5zaXRpb25BcHBlYXIiLCJjb21wb25lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJhbmltYXRpb24iLCJhcHBlYXIiLCJub2RlIiwiY2xhc3NMaXN0IiwiYWRkIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsInJlbW92ZSIsImVudGVyIiwibGVhdmUiLCJjbGFzc05hbWVzIiwia2V5IiwiaiIsImMiLCJkIiwiaGFuZGxlU2VsZWN0IiwiYWN0aXZlVmFsdWVEdXBsaWNhdGVkIiwiYWN0aXZlT3B0aW9ucyIsInJvbGUiLCJvbk1vdXNlRG93biIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJpY29uIiwiYXJyb3dlZCIsInBvcHVwQ2xhc3NOYW1lIiwidHJpZ2dlciIsInBvcHVwIiwiY29sb3IiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImJvb2wiLCJzdHJpbmciLCJhbnkiLCJvbmVPZiIsImRlZmF1bHRQcm9wcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvY2FzY2FkZXIvQ2FzY2FkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQW5pbWF0ZSBmcm9tIFwicmMtYW5pbWF0ZVwiXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi9idXR0b25cIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IFBvcG92ZXIsIHsgSVBvcG92ZXJQcm9wcyB9IGZyb20gXCIuLi9wb3BvdmVyXCJcbmltcG9ydCBpc0VxdWFsQXJyYXlzIGZyb20gXCIuLi9fdXRpbC9pc0VxdWFsQXJyYXlzXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktY2FzY2FkZXJcIlxuXG5leHBvcnQgdHlwZSBDYXNjYWRlclZhbHVlVHlwZSA9IFJlYWN0LlJlYWN0VGV4dFtdXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FzY2FkZXJPcHRpb24ge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXJcbiAgdGl0bGU6IFJlYWN0LlJlYWN0Tm9kZVxuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgY2hpbGRyZW4/OiBDYXNjYWRlck9wdGlvbltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhc2NhZGVyUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgea4hemZpFxuICAgKi9cbiAgYWxsb3dDbGVhcj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOW9k+atpOmhueS4uiB0cnVlIOaXtu+8jOeCuemAieavj+e6p+iPnOWNlemAiemhueWAvOmDveS8muWPkeeUn+WPmOWMllxuICAgKi9cbiAgY2hhbmdlT25TZWxlY3Q/OiBib29sZWFuXG4gIC8qKlxuICAgKiDlrZDoioLngrlcbiAgICovXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI3vvIzms6jmhI8gQ2FzY2FkZXIg5omA5pyJ55qE5bGe5oCn5Lya6ZmE5Yqg5Yiw5YaF6YOo55qE5YaF5a655YWD57Sg5LiK77yM6ICM5LiN5piv5YyF5ZCrIG1hc2sg55qE5pyA5aSW5bGC5YWD57SgXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOm7mOiupOWAvO+8jOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogQ2FzY2FkZXJWYWx1ZVR5cGUgfCBudWxsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog6YCJ5oup5ZCO5bGV56S655qE5riy5p+T5Ye95pWwXG4gICAqL1xuICBkaXNwbGF5UmVuZGVyPzogKFxuICAgIHRpdGxlOiBzdHJpbmdbXSxcbiAgICBzZWxlY3RlZE9wdGlvbnM/OiBDYXNjYWRlck9wdGlvbltdXG4gICkgPT4gUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDmrKHnuqfoj5zljZXnmoTlsZXlvIDmlrnlvI/vvIzlj6/pgIkgJ2NsaWNrJyDlkowgJ2hvdmVyJ1xuICAgKi9cbiAgZXhwYW5kVHJpZ2dlcj86IFwiY2xpY2tcIiB8IFwiaG92ZXJcIlxuICAvKipcbiAgICog5YC85Y+Y5YyW5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBDYXNjYWRlclZhbHVlVHlwZSwgc2VsZWN0T3B0aW9uczogQ2FzY2FkZXJPcHRpb25bXSkgPT4gdm9pZFxuICAvKipcbiAgICog5LiL5ouJ5qGGIHZpc2libGUg54q25oCB5pS55Y+Y5pe255qE5Zue6LCDXG4gICAqL1xuICBvblZpc2libGVDaGFuZ2U/OiAodmlzaWJsZTogYm9vbGVhbikgPT4gdm9pZFxuICAvKipcbiAgICog5Y+v6YCJ6aG55pWw5o2u5rqQXG4gICAqL1xuICBvcHRpb25zPzogQ2FzY2FkZXJPcHRpb25bXVxuICAvKipcbiAgICog5Y2g5L2N5paH5pysXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog5bGe5oCn5bCG5Lya6YCP5Lyg57uZIFBvcG92ZXIg57uE5Lu2XG4gICAqL1xuICBwb3BvdmVyUHJvcHM/OiBJUG9wb3ZlclByb3BzXG4gIC8qKlxuICAgKiDlsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOWAvO+8jOWklumDqOaOp+WItlxuICAgKi9cbiAgdmFsdWU/OiBDYXNjYWRlclZhbHVlVHlwZSB8IG51bGxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItuS4i+aLieahhiB2aXNpYmxlIOeKtuaAgVxuICAgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCBudWxsXG59XG5cbi8qKlxuICog57qn6IGU6YCJ5oup5Zmo55u06KeC5bGV56S65bey5pyJ55qE5bGC57qn5YWz57O744CCXG4gKi9cbmNvbnN0IENhc2NhZGVyOiBSZWFjdC5GQzxJQ2FzY2FkZXJQcm9wcz4gPSAoe1xuICBhbGxvd0NsZWFyLFxuICBjaGFuZ2VPblNlbGVjdCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgZGlzcGxheVJlbmRlciA9ICh0aXRsZTogc3RyaW5nW10pID0+IHRpdGxlLmpvaW4oXCIvXCIpLFxuICBleHBhbmRUcmlnZ2VyLFxuICBvbkNoYW5nZSxcbiAgb25WaXNpYmxlQ2hhbmdlLFxuICBvcHRpb25zLFxuICBwbGFjZWhvbGRlcixcbiAgcG9wb3ZlclByb3BzLFxuICBzaXplLFxuICB2YWx1ZTogdmFsdWVQcm9wcyxcbiAgdmlzaWJsZTogdmlzaWJsZVByb3BzLFxuICAuLi5vdGhlclByb3BzXG59KSA9PiB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8Q2FzY2FkZXJWYWx1ZVR5cGU+KFxuICAgIHZhbHVlUHJvcHMgIT09IG51bGwgPyB2YWx1ZVByb3BzIHx8IFtdIDogZGVmYXVsdFZhbHVlIHx8IFtdXG4gIClcbiAgY29uc3QgW2FjdGl2ZVZhbHVlLCBzZXRBY3RpdmVWYWx1ZV0gPSB1c2VTdGF0ZTxDYXNjYWRlclZhbHVlVHlwZT4oXG4gICAgdmFsdWVQcm9wcyAhPT0gbnVsbCA/IHZhbHVlUHJvcHMgfHwgW10gOiBkZWZhdWx0VmFsdWUgfHwgW11cbiAgKVxuICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSB1c2VTdGF0ZShcbiAgICB2aXNpYmxlUHJvcHMgIT09IG51bGwgPyB2aXNpYmxlUHJvcHMgOiBmYWxzZVxuICApXG4gIGNvbnN0IGRlbGF5VGltZXIgPSB1c2VSZWYoMClcblxuICAvLyDnm7jlvZPkuo7nlJ/lkb3lkajmnJ8gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gIGlmICh2YWx1ZVByb3BzICE9PSBudWxsICYmICFpc0VxdWFsQXJyYXlzKHZhbHVlUHJvcHMgfHwgW10sIHZhbHVlKSkge1xuICAgIHNldFZhbHVlKHZhbHVlUHJvcHMgfHwgW10pXG4gIH1cbiAgaWYgKHZpc2libGVQcm9wcyAhPT0gbnVsbCAmJiB2aXNpYmxlICE9PSB2aXNpYmxlUHJvcHMpIHtcbiAgICBzZXRWaXNpYmxlKHZpc2libGVQcm9wcylcbiAgfVxuXG4gIGNvbnN0IHNldFBvcHVwVmlzaWJsZSA9IChwb3B1cFZpc2libGU6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAodmlzaWJsZVByb3BzID09PSBudWxsKSB7XG4gICAgICBzZXRWaXNpYmxlKHBvcHVwVmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKHBvcHVwVmlzaWJsZSAmJiAhdmlzaWJsZSkge1xuICAgICAgc2V0QWN0aXZlVmFsdWUodmFsdWUpXG4gICAgfVxuICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgIG9uVmlzaWJsZUNoYW5nZShwb3B1cFZpc2libGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoZTogUmVhY3QuTW91c2VFdmVudDxTVkdTVkdFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRQb3B1cFZpc2libGUoZmFsc2UpXG4gICAgaWYgKCF2YWx1ZVByb3BzKSB7XG4gICAgICBzZXRWYWx1ZShbXSlcbiAgICB9XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShbXSwgW10pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKFxuICAgIG9wdHM6IENhc2NhZGVyT3B0aW9uW10sXG4gICAgeyB2aXNpYmxlOiBwb3B1cFZpc2libGUgfTogeyB2aXNpYmxlOiBib29sZWFuIH1cbiAgKSA9PiB7XG4gICAgc2V0UG9wdXBWaXNpYmxlKHBvcHVwVmlzaWJsZSlcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKFxuICAgICAgICBvcHRzLm1hcCgoeyB2YWx1ZTogdiB9KSA9PiB2IHx8IFwiXCIpLFxuICAgICAgICBvcHRzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFzVmFsdWUgPSB2YWx1ZT8ubGVuZ3RoXG5cbiAgY29uc3QgYXJyYXlUcmVlRmlsdGVyID0gPFQgZXh0ZW5kcyB1bmtub3duPihcbiAgICBkYXRhOiBUW10gPSBbXSxcbiAgICBmaWx0ZXJGbjogKGl0ZW06IFQsIGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgbGV0IGNoaWxkcyA9IGRhdGFcbiAgICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdXG4gICAgbGV0IGxldmVsID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGZvdW5kSXRlbTogVCA9IGNoaWxkcy5maWx0ZXIoKGl0ZW0pID0+IGZpbHRlckZuKGl0ZW0sIGxldmVsKSlbMF1cbiAgICAgIGlmICghZm91bmRJdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChmb3VuZEl0ZW0pXG4gICAgICBjaGlsZHMgPSAoZm91bmRJdGVtIGFzIGFueSkuY2hpbGRyZW4gfHwgW11cbiAgICAgIGxldmVsICs9IDFcbiAgICB9IHdoaWxlIChjaGlsZHMubGVuZ3RoID4gMClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBjb25zdCBnZXRUaXRsZSA9ICgpID0+IHtcbiAgICBjb25zdCB1bndyYXBwZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWVbMF0pID8gdmFsdWVbMF0gOiB2YWx1ZVxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IGFycmF5VHJlZUZpbHRlcihcbiAgICAgIG9wdGlvbnMsXG4gICAgICAobywgbGV2ZWw6IG51bWJlcikgPT4gby52YWx1ZSA9PT0gdW53cmFwcGVkVmFsdWVbbGV2ZWxdXG4gICAgKVxuICAgIGNvbnN0IHRpdGxlID0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFxuICAgICAgPyBzZWxlY3RlZE9wdGlvbnMubWFwKChvKSA9PiBvLnRpdGxlKVxuICAgICAgOiB2YWx1ZVxuICAgIHJldHVybiBkaXNwbGF5UmVuZGVyKFxuICAgICAgdGl0bGUubWFwKChvKSA9PiAobyB8fCBcIlwiKS50b1N0cmluZygpKSxcbiAgICAgIHNlbGVjdGVkT3B0aW9uc1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQWN0aXZlT3B0aW9uID0gKG9wdGlvbjogQ2FzY2FkZXJPcHRpb24sIG1lbnVJbmRleDogbnVtYmVyKSA9PlxuICAgIGFjdGl2ZVZhbHVlW21lbnVJbmRleF0gPT09IG9wdGlvbi52YWx1ZVxuXG4gIGNvbnN0IGdldEFjdGl2ZU9wdGlvbnMgPSAoXG4gICAgYWN0aXZlVmFsdWVQYXJhbT86IENhc2NhZGVyVmFsdWVUeXBlXG4gICk6IENhc2NhZGVyT3B0aW9uW10gPT5cbiAgICBhcnJheVRyZWVGaWx0ZXIoXG4gICAgICBvcHRpb25zLFxuICAgICAgKG8sIGxldmVsKSA9PiBvLnZhbHVlID09PSAoYWN0aXZlVmFsdWVQYXJhbSB8fCBhY3RpdmVWYWx1ZSlbbGV2ZWxdXG4gICAgKVxuXG4gIGNvbnN0IGdldFNob3dPcHRpb25zID0gKCk6IChDYXNjYWRlck9wdGlvbltdIHwgdW5kZWZpbmVkKVtdID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXRBY3RpdmVPcHRpb25zKClcbiAgICAgIC5tYXAoKHsgY2hpbGRyZW46IGNoaWxkcyB9KSA9PiBjaGlsZHMpXG4gICAgICAuZmlsdGVyKChhY3RpdmVPcHRpb24pID0+IGFjdGl2ZU9wdGlvbj8ubGVuZ3RoKVxuICAgIHJlc3VsdC51bnNoaWZ0KG9wdGlvbnMpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBjb25zdCBkZWxheVNlbGVjdCA9IChmdW5jPzogKCkgPT4gdm9pZCkgPT4ge1xuICAgIGlmIChkZWxheVRpbWVyLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChkZWxheVRpbWVyLmN1cnJlbnQpXG4gICAgICBkZWxheVRpbWVyLmN1cnJlbnQgPSAwXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBkZWxheVRpbWVyLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZ1bmMoKVxuICAgICAgICBkZWxheVRpbWVyLmN1cnJlbnQgPSAwXG4gICAgICB9LCAxNTApXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3B0c3MgPSBnZXRTaG93T3B0aW9ucygpXG5cbiAgY29uc3QgbWVudXMgPSAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tbWVudXNgfT5cbiAgICAgIDxBbmltYXRlXG4gICAgICAgIHRyYW5zaXRpb25BcHBlYXJcbiAgICAgICAgY29tcG9uZW50PVwiZGl2XCJcbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX1cbiAgICAgICAgYW5pbWF0aW9uPXt7XG4gICAgICAgICAgYXBwZWFyKG5vZGU6IEhUTUxFbGVtZW50LCBkb25lOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYCR7cHJlZml4fS1lbnRlcmApXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tZW50ZXItYWN0aXZlYClcbiAgICAgICAgICAgIH0sIDUwKVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMCkpXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS1lbnRlci1hY3RpdmVgKVxuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS1lbnRlcmApXG4gICAgICAgICAgICAgIHJldHVybiBkb25lKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gZG9uZSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnRlcihub2RlOiBIVE1MRWxlbWVudCwgZG9uZTogKCkgPT4gdm9pZCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tZW50ZXJgKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChgJHtwcmVmaXh9LWVudGVyLWFjdGl2ZWApXG4gICAgICAgICAgICB9LCA1MClcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDApKVxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGAke3ByZWZpeH0tZW50ZXItYWN0aXZlYClcbiAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGAke3ByZWZpeH0tZW50ZXJgKVxuICAgICAgICAgICAgICByZXR1cm4gZG9uZSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIGRvbmUoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGVhdmUobm9kZTogSFRNTEVsZW1lbnQsIGRvbmU6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChgJHtwcmVmaXh9LWxlYXZlYClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYCR7cHJlZml4fS1sZWF2ZS1hY3RpdmVgKVxuICAgICAgICAgICAgfSwgNTApXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKSlcbiAgICAgICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkb25lKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge29wdHNzLm1hcCgob3B0cywgbWVudUluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGAke3ByZWZpeH0tbWVudWAsIHtcbiAgICAgICAgICAgICAgW2Ake3ByZWZpeH0tbWVudS0ke3NpemV9YF06IHNpemUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGtleT17bWVudUluZGV4fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsob3B0cyB8fCBbXSkubWFwKChvLCBqKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgdmFsdWU6IHYsIHRpdGxlLCBjaGlsZHJlbjogYywgZGlzYWJsZWQ6IGQgfSA9IG9cbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZVZhbHVlRHVwbGljYXRlZCA9IFsuLi5hY3RpdmVWYWx1ZV1cbiAgICAgICAgICAgICAgICBhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQgPSBhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgbWVudUluZGV4ICsgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBhY3RpdmVWYWx1ZUR1cGxpY2F0ZWRbbWVudUluZGV4XSA9IHYgfHwgXCJcIlxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnMgPSBnZXRBY3RpdmVPcHRpb25zKGFjdGl2ZVZhbHVlRHVwbGljYXRlZClcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVWYWx1ZShhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQpXG4gICAgICAgICAgICAgICAgaWYgKCFjPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUNoYW5nZShhY3RpdmVPcHRpb25zLCB7IHZpc2libGU6IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWVQcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlKGFjdGl2ZU9wdGlvbnMsIHsgdmlzaWJsZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUHJvcHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoYWN0aXZlVmFsdWVEdXBsaWNhdGVkKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIGtleT17diB8fCBqfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGAke3ByZWZpeH0tbWVudS1pdGVtYCwge1xuICAgICAgICAgICAgICAgICAgICBbYCR7cHJlZml4fS1tZW51LWl0ZW0tYWN0aXZlYF06IGlzQWN0aXZlT3B0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIG8sXG4gICAgICAgICAgICAgICAgICAgICAgbWVudUluZGV4XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZT8udG9TdHJpbmcoKX1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRUcmlnZ2VyID09PSBcImhvdmVyXCIgJiYgYz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXlTZWxlY3QoaGFuZGxlU2VsZWN0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRUcmlnZ2VyID09PSBcImhvdmVyXCIgJiYgYz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXlTZWxlY3QoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LW1lbnUtaXRlbS1jb250ZW50YH0+e3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgeyEhYz8ubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidHJpYW5nbGUtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1tZW51LWl0ZW0taWNvbmB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L0FuaW1hdGU+XG4gICAgPC9kaXY+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyXG4gICAgICBhcnJvd2VkPXtmYWxzZX1cbiAgICAgIHBvcHVwQ2xhc3NOYW1lPXtgJHtwcmVmaXh9LXBvcHVwYH1cbiAgICAgIHZpc2libGU9e2Rpc2FibGVkID8gZmFsc2UgOiB2aXNpYmxlfVxuICAgICAgb25WaXNpYmxlQ2hhbmdlPXtzZXRQb3B1cFZpc2libGV9XG4gICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgcG9wdXA9e21lbnVzfVxuICAgICAgey4uLnBvcG92ZXJQcm9wc31cbiAgICA+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGAke3ByZWZpeH0tYnV0dG9uYCwgY2xhc3NOYW1lLCB7XG4gICAgICAgICAgW2Ake3ByZWZpeH0tYnV0dG9uLXZhbHVlZGBdOiBoYXNWYWx1ZSxcbiAgICAgICAgICBbYCR7cHJlZml4fS1idXR0b24tY2xlYXJhYmxlYF06IGFsbG93Q2xlYXIsXG4gICAgICAgIH0pfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAge2hhc1ZhbHVlID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7cHJlZml4fS1sYWJlbGB9PntnZXRUaXRsZSgpfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tcGxhY2Vob2xkZXJgfT57cGxhY2Vob2xkZXJ9PC9zcGFuPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1pY29uc2B9PlxuICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICBpY29uPVwidHJpYW5nbGUtZG93blwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0tc3VmZml4YH1cbiAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICA/IFwidmFyKC0tdHJhbnNwYXJlbnQtZ3JheS02MDApXCJcbiAgICAgICAgICAgICAgICA6IFwidmFyKC0tdHJhbnNwYXJlbnQtZ3JheS03MDApXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHthbGxvd0NsZWFyICYmICFkaXNhYmxlZCAmJiAoXG4gICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICBpY29uPVwiY2FuY2VsLWNpcmNsZVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1yZW1vdmVgfVxuICAgICAgICAgICAgICBjb2xvcj1cInZhcigtLXRyYW5zcGFyZW50LWdyYXktNzAwKVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvUG9wb3Zlcj5cbiAgKVxufVxuXG5DYXNjYWRlci5kaXNwbGF5TmFtZSA9IFwiQ2FzY2FkZXJcIlxuXG5DYXNjYWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHmuIXpmaRcbiAgICovXG4gIGFsbG93Q2xlYXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5b2T5q2k6aG55Li6IHRydWUg5pe277yM54K56YCJ5q+P57qn6I+c5Y2V6YCJ6aG55YC86YO95Lya5Y+R55Sf5Y+Y5YyWXG4gICAqL1xuICBjaGFuZ2VPblNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlrZDoioLngrlcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQje+8jOazqOaEjyBEaWFsb2cg5omA5pyJ55qE5bGe5oCn5Lya6ZmE5Yqg5Yiw5YaF6YOo55qE5YaF5a655YWD57Sg5LiK77yM6ICM5LiN5piv5YyF5ZCrIG1hc2sg55qE5pyA5aSW5bGC5YWD57SgXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDpu5jorqTlgLzvvIzlhoXpg6jpqbHliqhcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6YCJ5oup5ZCO5bGV56S655qE5riy5p+T5Ye95pWwXG4gICAqL1xuICBkaXNwbGF5UmVuZGVyOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5qyh57qn6I+c5Y2V55qE5bGV5byA5pa55byP77yM5Y+v6YCJICdjbGljaycg5ZKMICdob3ZlcidcbiAgICovXG4gIGV4cGFuZFRyaWdnZXI6IFByb3BUeXBlcy5vbmVPZihbXCJjbGlja1wiLCBcImhvdmVyXCJdKSxcbiAgLyoqXG4gICAqIOWPr+mAiemhueaVsOaNrua6kFxuICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWAvOWPmOWMluaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOS4i+aLieahhiB2aXNpYmxlIOeKtuaAgeaUueWPmOaXtueahOWbnuiwg1xuICAgKi9cbiAgb25WaXNpYmxlQ2hhbmdlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5Y2g5L2N5paH5pysXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWxnuaAp+WwhuS8mumAj+S8oOe7mSBQb3BvdmVyIOe7hOS7tlxuICAgKi9cbiAgcG9wb3ZlclByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog5YC877yM5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItuS4i+aLieahhiB2aXNpYmxlIOeKtuaAgVxuICAgKi9cbiAgdmlzaWJsZTogUHJvcFR5cGVzLmFueSxcbn1cblxuQ2FzY2FkZXIuZGVmYXVsdFByb3BzID0ge1xuICBhbGxvd0NsZWFyOiB0cnVlLFxuICBjaGFuZ2VPblNlbGVjdDogZmFsc2UsXG4gIGNoaWxkcmVuOiBudWxsLFxuICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc3BsYXlSZW5kZXI6IHVuZGVmaW5lZCxcbiAgZXhwYW5kVHJpZ2dlcjogXCJjbGlja1wiLFxuICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuICBvblZpc2libGVDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogW10sXG4gIHBsYWNlaG9sZGVyOiBcIuivt+mAieaLqVwiLFxuICBwb3BvdmVyUHJvcHM6IHt9LFxuICBzaXplOiBcInNtYWxsXCIsXG4gIHZhbHVlOiBudWxsLFxuICB2aXNpYmxlOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXNjYWRlclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsY0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0FBLE9BQUE7QUFBZ0IsSUFBQVMsU0FBQTtBQUFBLFNBQUFQLHVCQUFBUSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSx5QkFBQUYsQ0FBQSw2QkFBQUcsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSx5QkFBQUYsQ0FBQSxXQUFBQSxDQUFBLEdBQUFLLENBQUEsR0FBQUQsQ0FBQSxLQUFBSixDQUFBO0FBQUEsU0FBQVgsd0JBQUFXLENBQUEsRUFBQUksQ0FBQSxTQUFBQSxDQUFBLElBQUFKLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLFNBQUFELENBQUEsZUFBQUEsQ0FBQSxnQkFBQU0sT0FBQSxDQUFBTixDQUFBLDBCQUFB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