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>
294 lines (293 loc) • 54.7 kB
JavaScript
"use strict";
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 _Handle = _interopRequireDefault(require("rc-slider/lib/Handle"));
var _Range = _interopRequireDefault(require("rc-slider/lib/Range"));
var _Slider = _interopRequireDefault(require("rc-slider/lib/Slider"));
var _numericInput = _interopRequireDefault(require("../numeric-input"));
var _tooltip = _interopRequireDefault(require("../tooltip"));
require("./style");
var _excluded = ["className", "defaultValue", "inputVisible", "marks", "max", "min", "onAfterChange", "onBeforeChange", "onChange", "range", "step", "style", "tipFormatter", "tooltipProps", "value"],
_excluded2 = ["dragging", "index", "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 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 _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 _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 _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); }
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 noop = function noop() {};
var prefix = "adui-slider";
var Slider = function Slider(_ref) {
var className = _ref.className,
defaultValue = _ref.defaultValue,
inputVisible = _ref.inputVisible,
marks = _ref.marks,
max = _ref.max,
min = _ref.min,
onAfterChange = _ref.onAfterChange,
onBeforeChange = _ref.onBeforeChange,
onChange = _ref.onChange,
range = _ref.range,
step = _ref.step,
style = _ref.style,
tipFormatter = _ref.tipFormatter,
tooltipProps = _ref.tooltipProps,
valueProp = _ref.value,
otherProps = _objectWithoutProperties(_ref, _excluded);
var tooltipLeft = (0, _react.useRef)(null);
var tooltipRight = (0, _react.useRef)(null);
var tooltipCombined = (0, _react.useRef)(null);
var _useState = (0, _react.useState)("separated"),
_useState2 = _slicedToArray(_useState, 2),
rangeTooltipCombinedStatus = _useState2[0],
setRangeTooltipCombinedStatus = _useState2[1];
var _useState3 = (0, _react.useState)(false),
_useState4 = _slicedToArray(_useState3, 2),
active = _useState4[0],
setActive = _useState4[1];
var _useState5 = (0, _react.useState)([]),
_useState6 = _slicedToArray(_useState5, 2),
tooltipVisibleArray = _useState6[0],
setTooltipVisibleArray = _useState6[1];
var _useState7 = (0, _react.useState)(function () {
var val;
if (valueProp !== null) {
val = typeof valueProp === "string" ? Number(valueProp) : valueProp;
} else if (defaultValue !== null) {
val = typeof defaultValue === "string" ? Number(defaultValue) : defaultValue;
}
if (val === undefined) {
return val;
}
return range ? val : Number(val);
}),
_useState8 = _slicedToArray(_useState7, 2),
value = _useState8[0],
setValue = _useState8[1];
if (valueProp !== null && valueProp !== undefined && (_typeof(valueProp) === "object" || !isNaN(valueProp)) && (typeof valueProp === "string" ? Number(valueProp) : valueProp) !== value) {
setValue(range ? valueProp : Number(valueProp));
}
(0, _react.useEffect)(function () {
if (range && Array.isArray(value) && (tooltipVisibleArray[0] || active) && tooltipLeft.current && tooltipRight.current) {
var rectLeft = tooltipLeft.current.getBoundingClientRect();
var rectRight = tooltipRight.current.getBoundingClientRect();
if (rectLeft.left === rectRight.left) {
setRangeTooltipCombinedStatus("overlapped");
} else if (rectLeft.left + rectLeft.width > rectRight.left) {
setRangeTooltipCombinedStatus("combined");
if (tooltipCombined.current) {
tooltipCombined.current.style.left = "calc(".concat(value[0], "% - ").concat(rectLeft.width / 2, "px)");
tooltipCombined.current.style.width = "calc(".concat(value[1] - value[0], "% + ").concat(rectLeft.width, "px)");
}
} else {
setRangeTooltipCombinedStatus("separated");
}
}
}, [value, range, active, tooltipVisibleArray]);
var valuePropsObject = {};
var numericInputPropsObject = {};
if (defaultValue !== null) {
valuePropsObject.defaultValue = defaultValue;
}
if (value !== null) {
valuePropsObject.value = value;
}
if (defaultValue !== null && !Array.isArray(defaultValue)) {
numericInputPropsObject.defaultValue = defaultValue;
}
if (value !== null && !Array.isArray(value)) {
numericInputPropsObject.value = value;
}
var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-wrapper"), _defineProperty(_defineProperty({}, "".concat(prefix, "-active"), active), "".concat(prefix, "-hasMarks"), marks && Object.keys(marks).length));
var stepString = step ? step.toString() : "1";
var precision = 0;
if (stepString.includes(".")) {
precision = stepString.length - stepString.indexOf(".") - 1;
}
var setTooltipVisible = function setTooltipVisible(bool) {
if (bool) {
setTooltipVisibleArray({
0: true,
1: true
});
} else if (!active) {
setTooltipVisibleArray({
0: false,
1: false
});
}
};
var handleWithTooltip = function handleWithTooltip(_ref2) {
var dragging = _ref2.dragging,
index = _ref2.index,
val = _ref2.value,
restProps = _objectWithoutProperties(_ref2, _excluded2);
if (tipFormatter) {
if (range) {
return _react["default"].createElement(_Handle["default"], _extends({
value: val,
onMouseEnter: function onMouseEnter() {
return setTooltipVisible(true);
},
onMouseLeave: function onMouseLeave() {
return setTooltipVisible(false);
}
}, restProps));
}
return _react["default"].createElement(_tooltip["default"], {
key: index,
popup: tipFormatter(val),
placement: tooltipProps && tooltipProps.placement || "top",
visible: tooltipVisibleArray[index] || active
}, _react["default"].createElement(_Handle["default"], _extends({
value: val,
onMouseEnter: function onMouseEnter() {
return setTooltipVisible(true);
},
onMouseLeave: function onMouseLeave() {
return setTooltipVisible(false);
}
}, restProps)));
}
return _react["default"].createElement(_Handle["default"], _extends({
key: index,
value: val
}, restProps));
};
var handleBeforeChange = function handleBeforeChange(val) {
setActive(true);
document.documentElement.style.cursor = "pointer";
if (onBeforeChange) {
onBeforeChange(val);
}
};
var handleAfterChange = function handleAfterChange(val) {
setActive(false);
setTooltipVisibleArray({
0: false,
1: false
});
document.documentElement.style.cursor = "";
if (onAfterChange) {
onAfterChange(val);
}
};
var checkValueIsValid = function checkValueIsValid(val) {
return val !== value && val !== null && val !== undefined && min !== undefined && max !== undefined && val >= min && val <= max;
};
var handleChange = function handleChange(val) {
var newValue = range ? val : Number(val);
if (range || checkValueIsValid(newValue)) {
if (valueProp === null) {
setValue(newValue);
}
if (onChange) {
onChange(newValue);
}
}
};
var sliderProps = _objectSpread(_objectSpread({
handle: function handle(info) {
return handleWithTooltip(info);
},
marks: marks,
min: min,
max: max,
onAfterChange: handleAfterChange,
onBeforeChange: handleBeforeChange,
onChange: handleChange,
prefixCls: prefix,
step: step
}, valuePropsObject), otherProps);
var slider = range ? _react["default"].createElement(_Range["default"], sliderProps) : _react["default"].createElement(_Slider["default"], sliderProps);
return _react["default"].createElement("div", {
className: classSet,
style: style
}, tipFormatter && range && Array.isArray(value) && _react["default"].createElement("div", {
className: (0, _classnames["default"])("adui-slider-range-tooltip-wrapper", {
"adui-slider-range-tooltip-wrapper-visible": tooltipVisibleArray[0] || active,
"adui-slider-range-tooltip-wrapper-combined": rangeTooltipCombinedStatus === "combined",
"adui-slider-range-tooltip-wrapper-overlapped": rangeTooltipCombinedStatus === "overlapped"
})
}, _react["default"].createElement("div", {
className: "adui-slider-range-tooltip adui-slider-range-tooltip-left",
style: {
left: "".concat(value[0], "%")
},
ref: tooltipLeft
}, tipFormatter(value[0])), _react["default"].createElement("div", {
className: "adui-slider-range-tooltip adui-slider-range-tooltip-right",
style: {
left: "".concat(value[1], "%")
},
ref: tooltipRight
}, tipFormatter(value[1])), _react["default"].createElement("div", {
className: "adui-slider-range-tooltip-combined",
ref: tooltipCombined
}, tipFormatter(value[0]), " - ", tipFormatter(value[1]))), slider, inputVisible && !range && _react["default"].createElement(_numericInput["default"], _extends({
placeholder: "",
precision: precision,
onChange: function onChange(val) {
handleChange(typeof val === "string" ? 0 : val);
},
step: step,
style: {
marginLeft: "12px",
width: "56px",
height: "22px"
}
}, numericInputPropsObject, otherProps)));
};
Slider.propTypes = {
className: _propTypes["default"].string,
defaultValue: _propTypes["default"].any,
inputVisible: _propTypes["default"].bool,
marks: _propTypes["default"].any,
max: _propTypes["default"].number,
min: _propTypes["default"].number,
onAfterChange: _propTypes["default"].func,
onBeforeChange: _propTypes["default"].func,
onChange: _propTypes["default"].func,
range: _propTypes["default"].bool,
step: _propTypes["default"].number,
style: _propTypes["default"].object,
tipFormatter: _propTypes["default"].func,
tooltipProps: _propTypes["default"].object,
value: _propTypes["default"].any
};
Slider.defaultProps = {
className: undefined,
defaultValue: null,
inputVisible: true,
marks: {},
max: 100,
min: 0,
onAfterChange: noop,
onBeforeChange: noop,
onChange: noop,
range: false,
step: 1,
style: {},
tipFormatter: null,
tooltipProps: {},
value: null
};
var _default = exports["default"] = Slider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX0hhbmRsZSIsIl9SYW5nZSIsIl9TbGlkZXIiLCJfbnVtZXJpY0lucHV0IiwiX3Rvb2x0aXAiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImwiLCJmIiwibmV4dCIsImRvbmUiLCJpc0FycmF5IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJzIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm5vb3AiLCJwcmVmaXgiLCJTbGlkZXIiLCJfcmVmIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiaW5wdXRWaXNpYmxlIiwibWFya3MiLCJtYXgiLCJtaW4iLCJvbkFmdGVyQ2hhbmdlIiwib25CZWZvcmVDaGFuZ2UiLCJvbkNoYW5nZSIsInJhbmdlIiwic3RlcCIsInN0eWxlIiwidGlwRm9ybWF0dGVyIiwidG9vbHRpcFByb3BzIiwidmFsdWVQcm9wIiwib3RoZXJQcm9wcyIsInRvb2x0aXBMZWZ0IiwidXNlUmVmIiwidG9vbHRpcFJpZ2h0IiwidG9vbHRpcENvbWJpbmVkIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwicmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMiLCJzZXRSYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYWN0aXZlIiwic2V0QWN0aXZlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b29sdGlwVmlzaWJsZUFycmF5Iiwic2V0VG9vbHRpcFZpc2libGVBcnJheSIsIl91c2VTdGF0ZTciLCJ2YWwiLCJ1bmRlZmluZWQiLCJfdXNlU3RhdGU4Iiwic2V0VmFsdWUiLCJpc05hTiIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJyZWN0TGVmdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJlY3RSaWdodCIsImxlZnQiLCJ3aWR0aCIsImNvbmNhdCIsInZhbHVlUHJvcHNPYmplY3QiLCJudW1lcmljSW5wdXRQcm9wc09iamVjdCIsImNsYXNzU2V0IiwiY2xhc3NOYW1lcyIsInN0ZXBTdHJpbmciLCJwcmVjaXNpb24iLCJpbmRleE9mIiwic2V0VG9vbHRpcFZpc2libGUiLCJib29sIiwiaGFuZGxlV2l0aFRvb2x0aXAiLCJfcmVmMiIsImRyYWdnaW5nIiwiaW5kZXgiLCJyZXN0UHJvcHMiLCJjcmVhdGVFbGVtZW50Iiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwia2V5IiwicG9wdXAiLCJwbGFjZW1lbnQiLCJ2aXNpYmxlIiwiaGFuZGxlQmVmb3JlQ2hhbmdlIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjdXJzb3IiLCJoYW5kbGVBZnRlckNoYW5nZSIsImNoZWNrVmFsdWVJc1ZhbGlkIiwiaGFuZGxlQ2hhbmdlIiwibmV3VmFsdWUiLCJzbGlkZXJQcm9wcyIsImhhbmRsZSIsImluZm8iLCJwcmVmaXhDbHMiLCJzbGlkZXIiLCJyZWYiLCJwbGFjZWhvbGRlciIsIm1hcmdpbkxlZnQiLCJoZWlnaHQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJhbnkiLCJudW1iZXIiLCJmdW5jIiwib2JqZWN0IiwiZGVmYXVsdFByb3BzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9zbGlkZXIvU2xpZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IFJjSGFuZGxlIGZyb20gXCJyYy1zbGlkZXIvbGliL0hhbmRsZVwiXG5pbXBvcnQgUmNSYW5nZSBmcm9tIFwicmMtc2xpZGVyL2xpYi9SYW5nZVwiXG5pbXBvcnQgUmNTbGlkZXIgZnJvbSBcInJjLXNsaWRlci9saWIvU2xpZGVyXCJcbmltcG9ydCBOdW1lcmljSW5wdXQgZnJvbSBcIi4uL251bWVyaWMtaW5wdXRcIlxuaW1wb3J0IFRvb2x0aXAsIHsgSVRvb2x0aXBQcm9wcyB9IGZyb20gXCIuLi90b29sdGlwXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLXNsaWRlclwiXG5cbmludGVyZmFjZSBJSGFuZGxlR2VuZXJhdG9ySW5mbyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICBkcmFnZ2luZzogYm9vbGVhblxuICBpbmRleDogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIGRlZmF1bHRWYWx1ZT86IFNsaWRlclZhbHVlXG4gIHZhbHVlPzogU2xpZGVyVmFsdWVcbn1cblxuaW50ZXJmYWNlIElOdW1lcmljSW5wdXRWYWx1ZSB7XG4gIGRlZmF1bHRWYWx1ZT86IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGxcbiAgdmFsdWU/OiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNsaWRlck1hcmtzIHtcbiAgW2tleTogbnVtYmVyXTpcbiAgICB8IFJlYWN0LlJlYWN0Tm9kZVxuICAgIHwge1xuICAgICAgICBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgICAgICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlXG4gICAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFNsaWRlclZhbHVlID0gbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuZXhwb3J0IHR5cGUgQ2hhbmdlSGFuZGxlciA9ICh2YWx1ZTogU2xpZGVyVmFsdWUpID0+IHZvaWRcblxuZXhwb3J0IGludGVyZmFjZSBJU2xpZGVyUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDliJ3lp4vnmoTpu5jorqTlgLxcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IFNsaWRlclZhbHVlXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHovpPlhaXmoYbvvIzmraQgcHJvcCDkuI7lj4zmu5HlnZfmqKHlvI/kupLmlqVcbiAgICovXG4gIGlucHV0VmlzaWJsZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWIu+W6puagh+iusO+8jOS+i+Wmgu+8mnsyNTogXCIyNSVcIiwgNTA6IFwiNTDihINcIn1cbiAgICovXG4gIG1hcmtzPzogSVNsaWRlck1hcmtzXG4gIC8qKlxuICAgKiDmnIDlpKflgLxcbiAgICovXG4gIG1heD86IG51bWJlclxuICAvKipcbiAgICog5pyA5bCP5YC8XG4gICAqL1xuICBtaW4/OiBudW1iZXJcbiAgLyoqXG4gICAqIOWcqCBgb25tb3VzZXVwYCDml7bop6blj5HnmoQgaGFuZGxlclxuICAgKi9cbiAgb25BZnRlckNoYW5nZT86IENoYW5nZUhhbmRsZXJcbiAgLyoqXG4gICAqIOWcqCBgb25tb3VzZWRvd25gIOaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkJlZm9yZUNoYW5nZT86IENoYW5nZUhhbmRsZXJcbiAgLyoqXG4gICAqIOWcqOWAvOWPkeeUn+WPmOWMluaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZT86IENoYW5nZUhhbmRsZXJcbiAgLyoqXG4gICAqIOWPjOa7keWdl+aooeW8j1xuICAgKi9cbiAgcmFuZ2U/OiBib29sZWFuXG4gIC8qKlxuICAgKiDmraXplb/vvIzlv4XpobvlpKfkuo4gMFxuICAgKi9cbiAgc3RlcD86IG51bWJlclxuICAvKipcbiAgICog6ZmE5Yqg5qC35byPXG4gICAqL1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgLyoqXG4gICAqIOWvueS6jiBUb29sdGlwIOWGheWuuei/m+ihjOe8lui+ke+8jOWmgu+8mnRpcEZvcm1hdHRlcj17dmFsdWUgPT4gYCR7dmFsdWV95YWDYH1cbiAgICovXG4gIHRpcEZvcm1hdHRlcj86IG51bGwgfCAoKHZhbHVlOiBudW1iZXIpID0+IFJlYWN0LlJlYWN0Tm9kZSlcbiAgLyoqXG4gICAqIOW8gOWQryB0aXBGb3JtYXR0ZXIg5ZCO77yM5a+55LqOIFRvb2x0aXAg55qEIHByb3BzXG4gICAqL1xuICB0b29sdGlwUHJvcHM/OiBJVG9vbHRpcFByb3BzXG4gIC8qKlxuICAgKiDorr7nva7lvZPliY3nmoTlgLxcbiAgICovXG4gIHZhbHVlPzogU2xpZGVyVmFsdWVcbn1cblxuLyoqXG4gKiDmu5HliqjmnaHnlKjkuo7ku6Xmi5bmi73nmoTmlrnlvI/vvIzmm7TkurrmgKfljJblnLDlrozmiJDovpPlhaXmlbDmja7jgIHpgInmi6nmlbDmja7ljLrpl7TnrYnnm67nmoTjgIJcbiAqL1xuY29uc3QgU2xpZGVyOiBSZWFjdC5GQzxJU2xpZGVyUHJvcHM+ID0gKHtcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWUsXG4gIGlucHV0VmlzaWJsZSxcbiAgbWFya3MsXG4gIG1heCxcbiAgbWluLFxuICBvbkFmdGVyQ2hhbmdlLFxuICBvbkJlZm9yZUNoYW5nZSxcbiAgb25DaGFuZ2UsXG4gIHJhbmdlLFxuICBzdGVwLFxuICBzdHlsZSxcbiAgdGlwRm9ybWF0dGVyLFxuICB0b29sdGlwUHJvcHMsXG4gIHZhbHVlOiB2YWx1ZVByb3AsXG4gIC4uLm90aGVyUHJvcHNcbn06IElTbGlkZXJQcm9wcykgPT4ge1xuICBjb25zdCB0b29sdGlwTGVmdCA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdG9vbHRpcFJpZ2h0ID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB0b29sdGlwQ29tYmluZWQgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtyYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cywgc2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXNdID0gdXNlU3RhdGU8XG4gICAgXCJjb21iaW5lZFwiIHwgXCJzZXBhcmF0ZWRcIiB8IFwib3ZlcmxhcHBlZFwiXG4gID4oXCJzZXBhcmF0ZWRcIilcbiAgY29uc3QgW2FjdGl2ZSwgc2V0QWN0aXZlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdG9vbHRpcFZpc2libGVBcnJheSwgc2V0VG9vbHRpcFZpc2libGVBcnJheV0gPSB1c2VTdGF0ZTx7XG4gICAgW2luZGV4OiBudW1iZXJdOiBib29sZWFuXG4gIH0+KFtdKVxuICAvKipcbiAgICog5Yid5aeL5YyWIFNsaWRlciDnmoTlgLxcbiAgICogMS4g5LyY5YWI5Yik5patIFByb3AgdmFsdWXvvIzlpoLmnpzlrZjlnKggUHJvcCB2YWx1Ze+8jOWImSBTbGlkZXIg5a6M5YWo5Lqk55Sx5aSW6YOo5o6n5Yi277yM5YaF6YOo54q25oCB5peg5pWI77ybXG4gICAqIDIuIOWGjeWIpOaWrSBQcm9wIGRlZmF1bHRWYWx1Ze+8jOWmguaenOWtmOWcqOm7mOiupOWAvO+8jOWImSBTbGlkZXIg5YC85Li65q2k6buY6K6k5YC844CCXG4gICAqL1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKCgpOiBTbGlkZXJWYWx1ZSA9PiB7XG4gICAgbGV0IHZhbFxuICAgIGlmICh2YWx1ZVByb3AgIT09IG51bGwpIHtcbiAgICAgIHZhbCA9IHR5cGVvZiB2YWx1ZVByb3AgPT09IFwic3RyaW5nXCIgPyBOdW1iZXIodmFsdWVQcm9wKSA6IHZhbHVlUHJvcFxuICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICB2YWwgPVxuICAgICAgICB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiID8gTnVtYmVyKGRlZmF1bHRWYWx1ZSkgOiBkZWZhdWx0VmFsdWVcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuICAgIHJldHVybiByYW5nZSA/IHZhbCA6IE51bWJlcih2YWwpXG4gIH0pXG5cbiAgLy8g55u45b2T5LqO55Sf5ZG95ZGo5pyfIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICBpZiAoXG4gICAgdmFsdWVQcm9wICE9PSBudWxsICYmXG4gICAgdmFsdWVQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAodHlwZW9mIHZhbHVlUHJvcCA9PT0gXCJvYmplY3RcIiB8fCAhaXNOYU4odmFsdWVQcm9wKSkgJiZcbiAgICAodHlwZW9mIHZhbHVlUHJvcCA9PT0gXCJzdHJpbmdcIiA/IE51bWJlcih2YWx1ZVByb3ApIDogdmFsdWVQcm9wKSAhPT0gdmFsdWVcbiAgKSB7XG4gICAgc2V0VmFsdWUocmFuZ2UgPyB2YWx1ZVByb3AgOiBOdW1iZXIodmFsdWVQcm9wKSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8g6L+Z6YeM5YGa5Y+M5ruR5Z2X5qih5byP5pe255qEIHRvb2x0aXAg6K6+6K6hXG4gICAgaWYgKFxuICAgICAgcmFuZ2UgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAodG9vbHRpcFZpc2libGVBcnJheVswXSB8fCBhY3RpdmUpICYmXG4gICAgICB0b29sdGlwTGVmdC5jdXJyZW50ICYmXG4gICAgICB0b29sdGlwUmlnaHQuY3VycmVudFxuICAgICkge1xuICAgICAgY29uc3QgcmVjdExlZnQgPSB0b29sdGlwTGVmdC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCByZWN0UmlnaHQgPSB0b29sdGlwUmlnaHQuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgLy8g5Yik5pat5Lik5LiqIHRvb2x0aXAg5piv5ZCm5Zyo5L2N572u5LiK5a2Y5Zyo6YeN5Y+gXG4gICAgICBpZiAocmVjdExlZnQubGVmdCA9PT0gcmVjdFJpZ2h0LmxlZnQpIHtcbiAgICAgICAgc2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMoXCJvdmVybGFwcGVkXCIpXG4gICAgICB9IGVsc2UgaWYgKHJlY3RMZWZ0LmxlZnQgKyByZWN0TGVmdC53aWR0aCA+IHJlY3RSaWdodC5sZWZ0KSB7XG4gICAgICAgIHNldFJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzKFwiY29tYmluZWRcIilcblxuICAgICAgICBpZiAodG9vbHRpcENvbWJpbmVkLmN1cnJlbnQpIHtcbiAgICAgICAgICB0b29sdGlwQ29tYmluZWQuY3VycmVudC5zdHlsZS5sZWZ0ID0gYGNhbGMoJHt2YWx1ZVswXX0lIC0gJHtcbiAgICAgICAgICAgIHJlY3RMZWZ0LndpZHRoIC8gMlxuICAgICAgICAgIH1weClgXG5cbiAgICAgICAgICB0b29sdGlwQ29tYmluZWQuY3VycmVudC5zdHlsZS53aWR0aCA9IGBjYWxjKCR7XG4gICAgICAgICAgICB2YWx1ZVsxXSAtIHZhbHVlWzBdXG4gICAgICAgICAgfSUgKyAke3JlY3RMZWZ0LndpZHRofXB4KWBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMoXCJzZXBhcmF0ZWRcIilcbiAgICAgIH1cbiAgICB9XG4gIH0sIFt2YWx1ZSwgcmFuZ2UsIGFjdGl2ZSwgdG9vbHRpcFZpc2libGVBcnJheV0pXG5cbiAgY29uc3QgdmFsdWVQcm9wc09iamVjdDogSVZhbHVlID0ge31cbiAgY29uc3QgbnVtZXJpY0lucHV0UHJvcHNPYmplY3Q6IElOdW1lcmljSW5wdXRWYWx1ZSA9IHt9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgIHZhbHVlUHJvcHNPYmplY3QuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlXG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgdmFsdWVQcm9wc09iamVjdC52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICBudW1lcmljSW5wdXRQcm9wc09iamVjdC5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWVcbiAgfVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgbnVtZXJpY0lucHV0UHJvcHNPYmplY3QudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgYCR7cHJlZml4fS13cmFwcGVyYCwge1xuICAgIFtgJHtwcmVmaXh9LWFjdGl2ZWBdOiBhY3RpdmUsXG4gICAgW2Ake3ByZWZpeH0taGFzTWFya3NgXTogbWFya3MgJiYgT2JqZWN0LmtleXMobWFya3MpLmxlbmd0aCxcbiAgfSlcblxuICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcCA/IHN0ZXAudG9TdHJpbmcoKSA6IFwiMVwiXG4gIGxldCBwcmVjaXNpb24gPSAwXG4gIGlmIChzdGVwU3RyaW5nLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgIHByZWNpc2lvbiA9IHN0ZXBTdHJpbmcubGVuZ3RoIC0gc3RlcFN0cmluZy5pbmRleE9mKFwiLlwiKSAtIDFcbiAgfVxuXG4gIGNvbnN0IHNldFRvb2x0aXBWaXNpYmxlID0gKGJvb2w6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoYm9vbCkge1xuICAgICAgc2V0VG9vbHRpcFZpc2libGVBcnJheSh7XG4gICAgICAgIDA6IHRydWUsXG4gICAgICAgIDE6IHRydWUsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIWFjdGl2ZSkge1xuICAgICAgc2V0VG9vbHRpcFZpc2libGVBcnJheSh7XG4gICAgICAgIDA6IGZhbHNlLFxuICAgICAgICAxOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV2l0aFRvb2x0aXAgPSAoe1xuICAgIGRyYWdnaW5nLFxuICAgIGluZGV4LFxuICAgIHZhbHVlOiB2YWwsXG4gICAgLi4ucmVzdFByb3BzXG4gIH06IElIYW5kbGVHZW5lcmF0b3JJbmZvKSA9PiB7XG4gICAgaWYgKHRpcEZvcm1hdHRlcikge1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFJjSGFuZGxlXG4gICAgICAgICAgICB2YWx1ZT17dmFsfVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRUb29sdGlwVmlzaWJsZSh0cnVlKX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0VG9vbHRpcFZpc2libGUoZmFsc2UpfVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgcG9wdXA9e3RpcEZvcm1hdHRlcih2YWwpfVxuICAgICAgICAgIHBsYWNlbWVudD17KHRvb2x0aXBQcm9wcyAmJiB0b29sdGlwUHJvcHMucGxhY2VtZW50KSB8fCBcInRvcFwifVxuICAgICAgICAgIHZpc2libGU9e3Rvb2x0aXBWaXNpYmxlQXJyYXlbaW5kZXhdIHx8IGFjdGl2ZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxSY0hhbmRsZVxuICAgICAgICAgICAgdmFsdWU9e3ZhbH1cbiAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0VG9vbHRpcFZpc2libGUodHJ1ZSl9XG4gICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldFRvb2x0aXBWaXNpYmxlKGZhbHNlKX1cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiA8UmNIYW5kbGUga2V5PXtpbmRleH0gdmFsdWU9e3ZhbH0gey4uLnJlc3RQcm9wc30gLz5cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJlZm9yZUNoYW5nZSA9ICh2YWw6IFNsaWRlclZhbHVlKSA9PiB7XG4gICAgc2V0QWN0aXZlKHRydWUpXG4gICAgLy8g5ouW5ou95byA5aeL77yM5q2k5pe25L+d6K+B6L+H56iL5Lit6byg5qCH56e75Yqo5Yiw5ZOq6YeM5omL5Yq/6YO95LiN5Y+YXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IFwicG9pbnRlclwiXG4gICAgaWYgKG9uQmVmb3JlQ2hhbmdlKSB7XG4gICAgICBvbkJlZm9yZUNoYW5nZSh2YWwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQWZ0ZXJDaGFuZ2UgPSAodmFsOiBTbGlkZXJWYWx1ZSkgPT4ge1xuICAgIHNldEFjdGl2ZShmYWxzZSlcbiAgICBzZXRUb29sdGlwVmlzaWJsZUFycmF5KHtcbiAgICAgIDA6IGZhbHNlLFxuICAgICAgMTogZmFsc2UsXG4gICAgfSlcbiAgICAvLyDmi5bmi73nu5PmnZ/vvIzmoLflvI/ph43nva5cbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gXCJcIlxuICAgIGlmIChvbkFmdGVyQ2hhbmdlKSB7XG4gICAgICBvbkFmdGVyQ2hhbmdlKHZhbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja1ZhbHVlSXNWYWxpZCA9ICh2YWw6IFNsaWRlclZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbCAhPT0gdmFsdWUgJiZcbiAgICAgIHZhbCAhPT0gbnVsbCAmJlxuICAgICAgdmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG1pbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBtYXggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdmFsID49IG1pbiAmJlxuICAgICAgdmFsIDw9IG1heFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9ICh2YWw6IFNsaWRlclZhbHVlKSA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSByYW5nZSA/IHZhbCA6IE51bWJlcih2YWwpXG4gICAgaWYgKHJhbmdlIHx8IGNoZWNrVmFsdWVJc1ZhbGlkKG5ld1ZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlUHJvcCA9PT0gbnVsbCkge1xuICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzbGlkZXJQcm9wcyA9IHtcbiAgICBoYW5kbGU6IChpbmZvOiBJSGFuZGxlR2VuZXJhdG9ySW5mbykgPT4gaGFuZGxlV2l0aFRvb2x0aXAoaW5mbyksXG4gICAgbWFya3MsXG4gICAgbWluLFxuICAgIG1heCxcbiAgICBvbkFmdGVyQ2hhbmdlOiBoYW5kbGVBZnRlckNoYW5nZSxcbiAgICBvbkJlZm9yZUNoYW5nZTogaGFuZGxlQmVmb3JlQ2hhbmdlLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXgsXG4gICAgc3RlcCxcbiAgICAuLi52YWx1ZVByb3BzT2JqZWN0LFxuICAgIC4uLm90aGVyUHJvcHMsXG4gIH1cblxuICBjb25zdCBzbGlkZXIgPSByYW5nZSA/IChcbiAgICA8UmNSYW5nZSB7Li4uc2xpZGVyUHJvcHN9IC8+XG4gICkgOiAoXG4gICAgPFJjU2xpZGVyIHsuLi5zbGlkZXJQcm9wc30gLz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzU2V0fSBzdHlsZT17c3R5bGV9PlxuICAgICAge3RpcEZvcm1hdHRlciAmJiByYW5nZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXdyYXBwZXJcIiwge1xuICAgICAgICAgICAgXCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXdyYXBwZXItdmlzaWJsZVwiOlxuICAgICAgICAgICAgICB0b29sdGlwVmlzaWJsZUFycmF5WzBdIHx8IGFjdGl2ZSxcbiAgICAgICAgICAgIFwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC13cmFwcGVyLWNvbWJpbmVkXCI6XG4gICAgICAgICAgICAgIHJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzID09PSBcImNvbWJpbmVkXCIsXG4gICAgICAgICAgICBcImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtd3JhcHBlci1vdmVybGFwcGVkXCI6XG4gICAgICAgICAgICAgIHJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzID09PSBcIm92ZXJsYXBwZWRcIixcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAgYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC1sZWZ0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke3ZhbHVlWzBdfSVgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlZj17dG9vbHRpcExlZnR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RpcEZvcm1hdHRlcih2YWx1ZVswXSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcCBhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXJpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke3ZhbHVlWzFdfSVgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlZj17dG9vbHRpcFJpZ2h0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aXBGb3JtYXR0ZXIodmFsdWVbMV0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtY29tYmluZWRcIlxuICAgICAgICAgICAgcmVmPXt0b29sdGlwQ29tYmluZWR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RpcEZvcm1hdHRlcih2YWx1ZVswXSl9IC0ge3RpcEZvcm1hdHRlcih2YWx1ZVsxXSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtzbGlkZXJ9XG4gICAgICB7aW5wdXRWaXNpYmxlICYmICFyYW5nZSAmJiAoXG4gICAgICAgIDxOdW1lcmljSW5wdXRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgICAgcHJlY2lzaW9uPXtwcmVjaXNpb259XG4gICAgICAgICAgb25DaGFuZ2U9eyh2YWwpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZUNoYW5nZSh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiID8gMCA6IHZhbClcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0ZXA9e3N0ZXB9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiMTJweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiNTZweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjIycHhcIixcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi5udW1lcmljSW5wdXRQcm9wc09iamVjdH1cbiAgICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuU2xpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5Yid5aeL55qE6buY6K6k5YC8XG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHovpPlhaXmoYbvvIzmraQgcHJvcCDkuI7lj4zmu5HlnZfmqKHlvI/kupLmlqVcbiAgICovXG4gIGlucHV0VmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDliLvluqbmoIforrDvvIzkvovlpoLvvJp7MjU6IFwiMjUlXCIsIDUwOiBcIjUw4oSDXCJ9XG4gICAqL1xuICBtYXJrczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOacgOWkp+WAvFxuICAgKi9cbiAgbWF4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog5pyA5bCP5YC8XG4gICAqL1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlnKggYG9ubW91c2V1cGAg5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQWZ0ZXJDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5ZyoIGBvbm1vdXNlZG93bmAg5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQmVmb3JlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOWcqOWAvOWPkeeUn+WPmOWMluaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlj4zmu5HlnZfmqKHlvI9cbiAgICovXG4gIHJhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOatpemVv++8jOW/hemhu+Wkp+S6jiAwXG4gICAqL1xuICBzdGVwOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog6ZmE5Yqg5qC35byPXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOWvueS6jiBUb29sdGlwIOWGheWuuei/m+ihjOe8lui+ke+8jOWmgu+8mnRpcEZvcm1hdHRlcj17dmFsdWUgPT4gYCR7dmFsdWV95YWDYH1cbiAgICovXG4gIHRpcEZvcm1hdHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlvIDlkK8gdGlwRm9ybWF0dGVyIOWQju+8jOWvueS6jiBUb29sdGlwIOeahCBwcm9wc1xuICAgKi9cbiAgdG9vbHRpcFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog6K6+572u5b2T5YmN55qE5YC8XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbn1cblxuU2xpZGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgaW5wdXRWaXNpYmxlOiB0cnVlLFxuICBtYXJrczoge30sXG4gIG1heDogMTAwLFxuICBtaW46IDAsXG4gIG9uQWZ0ZXJDaGFuZ2U6IG5vb3AsXG4gIG9uQmVmb3JlQ2hhbmdlOiBub29wLFxuICBvbkNoYW5nZTogbm9vcCxcbiAgcmFuZ2U6IGZhbHNlLFxuICBzdGVwOiAxLFxuICBzdHlsZToge30sXG4gIHRpcEZvcm1hdHRlcjogbnVsbCxcbiAgdG9vbHRpcFByb3BzOiB7fSxcbiAgdmFsdWU6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNsaWRlclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxPQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxhQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQUEsT0FBQTtBQUFnQixJQUFBUyxTQUFBO0VBQUFDLFVBQUE7QUFBQSxTQUFBUix1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUseUJBQUFGLENBQUEsNkJBQUFHLE9BQUEsbUJBQUFD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