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>
336 lines (284 loc) • 43.4 kB
JavaScript
var _excluded = ["className", "defaultValue", "inputVisible", "marks", "max", "min", "onAfterChange", "onBeforeChange", "onChange", "range", "step", "style", "tipFormatter", "tooltipProps", "value"],
_excluded2 = ["dragging", "index", "value"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _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(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
import React, { useEffect, useRef, useState } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import RcHandle from "rc-slider/lib/Handle";
import RcRange from "rc-slider/lib/Range";
import RcSlider from "rc-slider/lib/Slider";
import NumericInput from "../numeric-input";
import Tooltip from "../tooltip";
import "./style";
var noop = function noop() {};
var prefix = "adui-slider";
var Slider = function Slider(_ref) {
var _classNames;
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 = useRef(null);
var tooltipRight = useRef(null);
var tooltipCombined = useRef(null);
var _useState = useState("separated"),
_useState2 = _slicedToArray(_useState, 2),
rangeTooltipCombinedStatus = _useState2[0],
setRangeTooltipCombinedStatus = _useState2[1];
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
active = _useState4[0],
setActive = _useState4[1];
var _useState5 = useState([]),
_useState6 = _slicedToArray(_useState5, 2),
tooltipVisibleArray = _useState6[0],
setTooltipVisibleArray = _useState6[1];
var _useState7 = 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));
}
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 = classNames(className, "".concat(prefix, "-wrapper"), (_classNames = {}, _defineProperty(_classNames, "".concat(prefix, "-active"), active), _defineProperty(_classNames, "".concat(prefix, "-hasMarks"), marks && Object.keys(marks).length), _classNames));
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.createElement(RcHandle, _extends({
value: val,
onMouseEnter: function onMouseEnter() {
return setTooltipVisible(true);
},
onMouseLeave: function onMouseLeave() {
return setTooltipVisible(false);
}
}, restProps));
}
return React.createElement(Tooltip, {
key: index,
popup: tipFormatter(val),
placement: tooltipProps && tooltipProps.placement || "top",
visible: tooltipVisibleArray[index] || active
}, React.createElement(RcHandle, _extends({
value: val,
onMouseEnter: function onMouseEnter() {
return setTooltipVisible(true);
},
onMouseLeave: function onMouseLeave() {
return setTooltipVisible(false);
}
}, restProps)));
}
return React.createElement(RcHandle, _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.createElement(RcRange, sliderProps) : React.createElement(RcSlider, sliderProps);
return React.createElement("div", {
className: classSet,
style: style
}, tipFormatter && range && Array.isArray(value) && React.createElement("div", {
className: classNames("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.createElement("div", {
className: "adui-slider-range-tooltip adui-slider-range-tooltip-left",
style: {
left: "".concat(value[0], "%")
},
ref: tooltipLeft
}, tipFormatter(value[0])), React.createElement("div", {
className: "adui-slider-range-tooltip adui-slider-range-tooltip-right",
style: {
left: "".concat(value[1], "%")
},
ref: tooltipRight
}, tipFormatter(value[1])), React.createElement("div", {
className: "adui-slider-range-tooltip-combined",
ref: tooltipCombined
}, tipFormatter(value[0]), " - ", tipFormatter(value[1]))), slider, inputVisible && !range && React.createElement(NumericInput, _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.string,
defaultValue: PropTypes.any,
inputVisible: PropTypes.bool,
marks: PropTypes.any,
max: PropTypes.number,
min: PropTypes.number,
onAfterChange: PropTypes.func,
onBeforeChange: PropTypes.func,
onChange: PropTypes.func,
range: PropTypes.bool,
step: PropTypes.number,
style: PropTypes.object,
tipFormatter: PropTypes.func,
tooltipProps: PropTypes.object,
value: PropTypes.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
};
export default Slider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIlJjSGFuZGxlIiwiUmNSYW5nZSIsIlJjU2xpZGVyIiwiTnVtZXJpY0lucHV0IiwiVG9vbHRpcCIsIm5vb3AiLCJwcmVmaXgiLCJTbGlkZXIiLCJjbGFzc05hbWUiLCJkZWZhdWx0VmFsdWUiLCJpbnB1dFZpc2libGUiLCJtYXJrcyIsIm1heCIsIm1pbiIsIm9uQWZ0ZXJDaGFuZ2UiLCJvbkJlZm9yZUNoYW5nZSIsIm9uQ2hhbmdlIiwicmFuZ2UiLCJzdGVwIiwic3R5bGUiLCJ0aXBGb3JtYXR0ZXIiLCJ0b29sdGlwUHJvcHMiLCJ2YWx1ZVByb3AiLCJ2YWx1ZSIsIm90aGVyUHJvcHMiLCJ0b29sdGlwTGVmdCIsInRvb2x0aXBSaWdodCIsInRvb2x0aXBDb21iaW5lZCIsInJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzIiwic2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMiLCJhY3RpdmUiLCJzZXRBY3RpdmUiLCJ0b29sdGlwVmlzaWJsZUFycmF5Iiwic2V0VG9vbHRpcFZpc2libGVBcnJheSIsInZhbCIsIk51bWJlciIsInVuZGVmaW5lZCIsInNldFZhbHVlIiwiaXNOYU4iLCJBcnJheSIsImlzQXJyYXkiLCJjdXJyZW50IiwicmVjdExlZnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyZWN0UmlnaHQiLCJsZWZ0Iiwid2lkdGgiLCJ2YWx1ZVByb3BzT2JqZWN0IiwibnVtZXJpY0lucHV0UHJvcHNPYmplY3QiLCJjbGFzc1NldCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJzdGVwU3RyaW5nIiwidG9TdHJpbmciLCJwcmVjaXNpb24iLCJpbmNsdWRlcyIsImluZGV4T2YiLCJzZXRUb29sdGlwVmlzaWJsZSIsImJvb2wiLCJoYW5kbGVXaXRoVG9vbHRpcCIsImRyYWdnaW5nIiwiaW5kZXgiLCJyZXN0UHJvcHMiLCJwbGFjZW1lbnQiLCJoYW5kbGVCZWZvcmVDaGFuZ2UiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImN1cnNvciIsImhhbmRsZUFmdGVyQ2hhbmdlIiwiY2hlY2tWYWx1ZUlzVmFsaWQiLCJoYW5kbGVDaGFuZ2UiLCJuZXdWYWx1ZSIsInNsaWRlclByb3BzIiwiaGFuZGxlIiwiaW5mbyIsInByZWZpeENscyIsInNsaWRlciIsIm1hcmdpbkxlZnQiLCJoZWlnaHQiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJhbnkiLCJudW1iZXIiLCJmdW5jIiwib2JqZWN0IiwiZGVmYXVsdFByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9zbGlkZXIvU2xpZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IFJjSGFuZGxlIGZyb20gXCJyYy1zbGlkZXIvbGliL0hhbmRsZVwiXG5pbXBvcnQgUmNSYW5nZSBmcm9tIFwicmMtc2xpZGVyL2xpYi9SYW5nZVwiXG5pbXBvcnQgUmNTbGlkZXIgZnJvbSBcInJjLXNsaWRlci9saWIvU2xpZGVyXCJcbmltcG9ydCBOdW1lcmljSW5wdXQgZnJvbSBcIi4uL251bWVyaWMtaW5wdXRcIlxuaW1wb3J0IFRvb2x0aXAsIHsgSVRvb2x0aXBQcm9wcyB9IGZyb20gXCIuLi90b29sdGlwXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLXNsaWRlclwiXG5cbmludGVyZmFjZSBJSGFuZGxlR2VuZXJhdG9ySW5mbyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICBkcmFnZ2luZzogYm9vbGVhblxuICBpbmRleDogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIGRlZmF1bHRWYWx1ZT86IFNsaWRlclZhbHVlXG4gIHZhbHVlPzogU2xpZGVyVmFsdWVcbn1cblxuaW50ZXJmYWNlIElOdW1lcmljSW5wdXRWYWx1ZSB7XG4gIGRlZmF1bHRWYWx1ZT86IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGxcbiAgdmFsdWU/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+572u5b2T5YmN55qE5YC8XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbn1cblxuU2xpZGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgaW5wdXRWaXNpYmxlOiB0cnVlLFxuICBtYXJrczoge30sXG4gIG1heDogMTAwLFxuICBtaW46IDAsXG4gIG9uQWZ0ZXJDaGFuZ2U6IG5vb3AsXG4gIG9uQmVmb3JlQ2hhbmdlOiBub29wLFxuICBvbkNoYW5nZTogbm9vcCxcbiAgcmFuZ2U6IGZhbHNlLFxuICBzdGVwOiAxLFxuICBzdHlsZToge30sXG4gIHRpcEZvcm1hdHRlcjogbnVsbCxcbiAgdG9vbHRpcFByb3BzOiB7fSxcbiAgdmFsdWU6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNsaWRlclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU9BLEtBQVAsSUFBZ0JDLFNBQWhCLEVBQTJCQyxNQUEzQixFQUFtQ0MsUUFBbkMsUUFBbUQsT0FBbkQ7QUFDQSxPQUFPQyxTQUFQLE1BQXNCLFlBQXRCO0FBQ0EsT0FBT0MsVUFBUCxNQUF1QixZQUF2QjtBQUNBLE9BQU9DLFFBQVAsTUFBcUIsc0JBQXJCO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixxQkFBcEI7QUFDQSxPQUFPQyxRQUFQLE1BQXFCLHNCQUFyQjtBQUNBLE9BQU9DLFlBQVAsTUFBeUIsa0JBQXpCO0FBQ0EsT0FBT0MsT0FBUCxNQUF1QyxZQUF2QztBQUNBLE9BQU8sU0FBUDs7QUFFQSxJQUFNQyxJQUFJLEdBQUcsU0FBUEEsSUFBTyxHQUFNLENBQUUsQ0FBckI7O0FBRUEsSUFBTUMsTUFBTSxHQUFHLGFBQWY7O0FBbUdBLElBQU1DLE1BQThCLEdBQUcsU0FBakNBLE1BQWlDLE9BaUJuQjtFQUFBOztFQUFBLElBaEJsQkMsU0FnQmtCLFFBaEJsQkEsU0FnQmtCO0VBQUEsSUFmbEJDLFlBZWtCLFFBZmxCQSxZQWVrQjtFQUFBLElBZGxCQyxZQWNrQixRQWRsQkEsWUFja0I7RUFBQSxJQWJsQkMsS0Fha0IsUUFibEJBLEtBYWtCO0VBQUEsSUFabEJDLEdBWWtCLFFBWmxCQSxHQVlrQjtFQUFBLElBWGxCQyxHQVdrQixRQVhsQkEsR0FXa0I7RUFBQSxJQVZsQkMsYUFVa0IsUUFWbEJBLGFBVWtCO0VBQUEsSUFUbEJDLGNBU2tCLFFBVGxCQSxjQVNrQjtFQUFBLElBUmxCQyxRQVFrQixRQVJsQkEsUUFRa0I7RUFB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