"use strict";
(self["webpackChunk_core_volunteer_app"] = self["webpackChunk_core_volunteer_app"] || []).push([["vendors-node_modules_rc-input-number_es_index_js-node_modules_rc-input_lib_utils_commonUtils_-994bf3"],{
/***/ "../../../node_modules/rc-input-number/es/InputNumber.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-input-number/es/InputNumber.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @rc-component/mini-decimal */ "../../../node_modules/@rc-component/mini-decimal/es/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_input__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-input */ "../../../node_modules/rc-input/es/index.js");
/* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js");
/* harmony import */ var rc_util_es_proxyObject__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/proxyObject */ "../../../node_modules/rc-util/es/proxyObject.js");
/* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var _hooks_useCursor__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useCursor */ "../../../node_modules/rc-input-number/es/hooks/useCursor.js");
/* harmony import */ var _StepHandler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./StepHandler */ "../../../node_modules/rc-input-number/es/StepHandler.js");
/* harmony import */ var _utils_numberUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils/numberUtil */ "../../../node_modules/rc-input-number/es/utils/numberUtil.js");
/* harmony import */ var rc_input_es_utils_commonUtils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! rc-input/es/utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js");
/* harmony import */ var _hooks_useFrame__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./hooks/useFrame */ "../../../node_modules/rc-input-number/es/hooks/useFrame.js");
var _excluded = ["prefixCls", "className", "style", "min", "max", "step", "defaultValue", "value", "disabled", "readOnly", "upHandler", "downHandler", "keyboard", "changeOnWheel", "controls", "classNames", "stringMode", "parser", "formatter", "precision", "decimalSeparator", "onChange", "onInput", "onPressEnter", "onStep", "changeOnBlur", "domRef"],
_excluded2 = ["disabled", "style", "prefixCls", "value", "prefix", "suffix", "addonBefore", "addonAfter", "className", "classNames"];
/**
* We support `stringMode` which need handle correct type when user call in onChange
* format max or min value
* 1. if isInvalid return null
* 2. if precision is undefined, return decimal
* 3. format with precision
* I. if max > 0, round down with precision. Example: max= 3.5, precision=0 afterFormat: 3
* II. if max < 0, round up with precision. Example: max= -3.5, precision=0 afterFormat: -4
* III. if min > 0, round up with precision. Example: min= 3.5, precision=0 afterFormat: 4
* IV. if min < 0, round down with precision. Example: max= -3.5, precision=0 afterFormat: -3
*/
var getDecimalValue = function getDecimalValue(stringMode, decimalValue) {
if (stringMode || decimalValue.isEmpty()) {
return decimalValue.toString();
}
return decimalValue.toNumber();
};
var getDecimalIfValidate = function getDecimalIfValidate(value) {
var decimal = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(value);
return decimal.isInvalidate() ? null : decimal;
};
var InternalInputNumber = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.forwardRef(function (props, ref) {
var prefixCls = props.prefixCls,
className = props.className,
style = props.style,
min = props.min,
max = props.max,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step,
defaultValue = props.defaultValue,
value = props.value,
disabled = props.disabled,
readOnly = props.readOnly,
upHandler = props.upHandler,
downHandler = props.downHandler,
keyboard = props.keyboard,
_props$changeOnWheel = props.changeOnWheel,
changeOnWheel = _props$changeOnWheel === void 0 ? false : _props$changeOnWheel,
_props$controls = props.controls,
controls = _props$controls === void 0 ? true : _props$controls,
classNames = props.classNames,
stringMode = props.stringMode,
parser = props.parser,
formatter = props.formatter,
precision = props.precision,
decimalSeparator = props.decimalSeparator,
onChange = props.onChange,
onInput = props.onInput,
onPressEnter = props.onPressEnter,
onStep = props.onStep,
_props$changeOnBlur = props.changeOnBlur,
changeOnBlur = _props$changeOnBlur === void 0 ? true : _props$changeOnBlur,
domRef = props.domRef,
inputProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded);
var inputClassName = "".concat(prefixCls, "-input");
var inputRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null);
var _React$useState = react__WEBPACK_IMPORTED_MODULE_11__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2),
focus = _React$useState2[0],
setFocus = _React$useState2[1];
var userTypingRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false);
var compositionRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false);
var shiftKeyRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false);
// ============================ Value =============================
// Real value control
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_11__.useState(function () {
return (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(value !== null && value !== void 0 ? value : defaultValue);
}),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState3, 2),
decimalValue = _React$useState4[0],
setDecimalValue = _React$useState4[1];
function setUncontrolledDecimalValue(newDecimal) {
if (value === undefined) {
setDecimalValue(newDecimal);
}
}
// ====================== Parser & Formatter ======================
/**
* `precision` is used for formatter & onChange.
* It will auto generate by `value` & `step`.
* But it will not block user typing.
*
* Note: Auto generate `precision` is used for legacy logic.
* We should remove this since we already support high precision with BigInt.
*
* @param number Provide which number should calculate precision
* @param userTyping Change by user typing
*/
var getPrecision = react__WEBPACK_IMPORTED_MODULE_11__.useCallback(function (numStr, userTyping) {
if (userTyping) {
return undefined;
}
if (precision >= 0) {
return precision;
}
return Math.max((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.getNumberPrecision)(numStr), (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.getNumberPrecision)(step));
}, [precision, step]);
// >>> Parser
var mergedParser = react__WEBPACK_IMPORTED_MODULE_11__.useCallback(function (num) {
var numStr = String(num);
if (parser) {
return parser(numStr);
}
var parsedStr = numStr;
if (decimalSeparator) {
parsedStr = parsedStr.replace(decimalSeparator, '.');
}
// [Legacy] We still support auto convert `$ 123,456` to `123456`
return parsedStr.replace(/[^\w.-]+/g, '');
}, [parser, decimalSeparator]);
// >>> Formatter
var inputValueRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef('');
var mergedFormatter = react__WEBPACK_IMPORTED_MODULE_11__.useCallback(function (number, userTyping) {
if (formatter) {
return formatter(number, {
userTyping: userTyping,
input: String(inputValueRef.current)
});
}
var str = typeof number === 'number' ? (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.num2str)(number) : number;
// User typing will not auto format with precision directly
if (!userTyping) {
var mergedPrecision = getPrecision(str, userTyping);
if ((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.validateNumber)(str) && (decimalSeparator || mergedPrecision >= 0)) {
// Separator
var separatorStr = decimalSeparator || '.';
str = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.toFixed)(str, separatorStr, mergedPrecision);
}
}
return str;
}, [formatter, getPrecision, decimalSeparator]);
// ========================== InputValue ==========================
/**
* Input text value control
*
* User can not update input content directly. It updates with follow rules by priority:
* 1. controlled `value` changed
* * [SPECIAL] Typing like `1.` should not immediately convert to `1`
* 2. User typing with format (not precision)
* 3. Blur or Enter trigger revalidate
*/
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_11__.useState(function () {
var initValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value;
if (decimalValue.isInvalidate() && ['string', 'number'].includes((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(initValue))) {
return Number.isNaN(initValue) ? '' : initValue;
}
return mergedFormatter(decimalValue.toString(), false);
}),
_React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState5, 2),
inputValue = _React$useState6[0],
setInternalInputValue = _React$useState6[1];
inputValueRef.current = inputValue;
// Should always be string
function setInputValue(newValue, userTyping) {
setInternalInputValue(mergedFormatter(
// Invalidate number is sometime passed by external control, we should let it go
// Otherwise is controlled by internal interactive logic which check by userTyping
// You can ref 'show limited value when input is not focused' test for more info.
newValue.isInvalidate() ? newValue.toString(false) : newValue.toString(!userTyping), userTyping));
}
// >>> Max & Min limit
var maxDecimal = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return getDecimalIfValidate(max);
}, [max, precision]);
var minDecimal = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return getDecimalIfValidate(min);
}, [min, precision]);
var upDisabled = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
if (!maxDecimal || !decimalValue || decimalValue.isInvalidate()) {
return false;
}
return maxDecimal.lessEquals(decimalValue);
}, [maxDecimal, decimalValue]);
var downDisabled = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
if (!minDecimal || !decimalValue || decimalValue.isInvalidate()) {
return false;
}
return decimalValue.lessEquals(minDecimal);
}, [minDecimal, decimalValue]);
// Cursor controller
var _useCursor = (0,_hooks_useCursor__WEBPACK_IMPORTED_MODULE_12__["default"])(inputRef.current, focus),
_useCursor2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useCursor, 2),
recordCursor = _useCursor2[0],
restoreCursor = _useCursor2[1];
// ============================= Data =============================
/**
* Find target value closet within range.
* e.g. [11, 28]:
* 3 => 11
* 23 => 23
* 99 => 28
*/
var getRangeValue = function getRangeValue(target) {
// target > max
if (maxDecimal && !target.lessEquals(maxDecimal)) {
return maxDecimal;
}
// target < min
if (minDecimal && !minDecimal.lessEquals(target)) {
return minDecimal;
}
return null;
};
/**
* Check value is in [min, max] range
*/
var isInRange = function isInRange(target) {
return !getRangeValue(target);
};
/**
* Trigger `onChange` if value validated and not equals of origin.
* Return the value that re-align in range.
*/
var triggerValueUpdate = function triggerValueUpdate(newValue, userTyping) {
var updateValue = newValue;
var isRangeValidate = isInRange(updateValue) || updateValue.isEmpty();
// Skip align value when trigger value is empty.
// We just trigger onChange(null)
// This should not block user typing
if (!updateValue.isEmpty() && !userTyping) {
// Revert value in range if needed
updateValue = getRangeValue(updateValue) || updateValue;
isRangeValidate = true;
}
if (!readOnly && !disabled && isRangeValidate) {
var numStr = updateValue.toString();
var mergedPrecision = getPrecision(numStr, userTyping);
if (mergedPrecision >= 0) {
updateValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.toFixed)(numStr, '.', mergedPrecision));
// When to fixed. The value may out of min & max range.
// 4 in [0, 3.8] => 3.8 => 4 (toFixed)
if (!isInRange(updateValue)) {
updateValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__.toFixed)(numStr, '.', mergedPrecision, true));
}
}
// Trigger event
if (!updateValue.equals(decimalValue)) {
setUncontrolledDecimalValue(updateValue);
onChange === null || onChange === void 0 || onChange(updateValue.isEmpty() ? null : getDecimalValue(stringMode, updateValue));
// Reformat input if value is not controlled
if (value === undefined) {
setInputValue(updateValue, userTyping);
}
}
return updateValue;
}
return decimalValue;
};
// ========================== User Input ==========================
var onNextPromise = (0,_hooks_useFrame__WEBPACK_IMPORTED_MODULE_16__["default"])();
// >>> Collect input value
var collectInputValue = function collectInputValue(inputStr) {
recordCursor();
// Update inputValue in case input can not parse as number
// Refresh ref value immediately since it may used by formatter
inputValueRef.current = inputStr;
setInternalInputValue(inputStr);
// Parse number
if (!compositionRef.current) {
var finalValue = mergedParser(inputStr);
var finalDecimal = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(finalValue);
if (!finalDecimal.isNaN()) {
triggerValueUpdate(finalDecimal, true);
}
}
// Trigger onInput later to let user customize value if they want to handle something after onChange
onInput === null || onInput === void 0 || onInput(inputStr);
// optimize for chinese input experience
// https://github.com/ant-design/ant-design/issues/8196
onNextPromise(function () {
var nextInputStr = inputStr;
if (!parser) {
nextInputStr = inputStr.replace(/。/g, '.');
}
if (nextInputStr !== inputStr) {
collectInputValue(nextInputStr);
}
});
};
// >>> Composition
var onCompositionStart = function onCompositionStart() {
compositionRef.current = true;
};
var onCompositionEnd = function onCompositionEnd() {
compositionRef.current = false;
collectInputValue(inputRef.current.value);
};
// >>> Input
var onInternalInput = function onInternalInput(e) {
collectInputValue(e.target.value);
};
// ============================= Step =============================
var onInternalStep = function onInternalStep(up) {
var _inputRef$current;
// Ignore step since out of range
if (up && upDisabled || !up && downDisabled) {
return;
}
// Clear typing status since it may be caused by up & down key.
// We should sync with input value.
userTypingRef.current = false;
var stepDecimal = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(shiftKeyRef.current ? (0,_utils_numberUtil__WEBPACK_IMPORTED_MODULE_14__.getDecupleSteps)(step) : step);
if (!up) {
stepDecimal = stepDecimal.negate();
}
var target = (decimalValue || (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(0)).add(stepDecimal.toString());
var updatedValue = triggerValueUpdate(target, false);
onStep === null || onStep === void 0 || onStep(getDecimalValue(stringMode, updatedValue), {
offset: shiftKeyRef.current ? (0,_utils_numberUtil__WEBPACK_IMPORTED_MODULE_14__.getDecupleSteps)(step) : step,
type: up ? 'up' : 'down'
});
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
};
// ============================ Flush =============================
/**
* Flush current input content to trigger value change & re-formatter input if needed.
* This will always flush input value for update.
* If it's invalidate, will fallback to last validate value.
*/
var flushInputValue = function flushInputValue(userTyping) {
var parsedValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(mergedParser(inputValue));
var formatValue;
if (!parsedValue.isNaN()) {
// Only validate value or empty value can be re-fill to inputValue
// Reassign the formatValue within ranged of trigger control
formatValue = triggerValueUpdate(parsedValue, userTyping);
} else {
formatValue = triggerValueUpdate(decimalValue, userTyping);
}
if (value !== undefined) {
// Reset back with controlled value first
setInputValue(decimalValue, false);
} else if (!formatValue.isNaN()) {
// Reset input back since no validate value
setInputValue(formatValue, false);
}
};
// Solve the issue of the event triggering sequence when entering numbers in chinese input (Safari)
var onBeforeInput = function onBeforeInput() {
userTypingRef.current = true;
};
var onKeyDown = function onKeyDown(event) {
var key = event.key,
shiftKey = event.shiftKey;
userTypingRef.current = true;
shiftKeyRef.current = shiftKey;
if (key === 'Enter') {
if (!compositionRef.current) {
userTypingRef.current = false;
}
flushInputValue(false);
onPressEnter === null || onPressEnter === void 0 || onPressEnter(event);
}
if (keyboard === false) {
return;
}
// Do step
if (!compositionRef.current && ['Up', 'ArrowUp', 'Down', 'ArrowDown'].includes(key)) {
onInternalStep(key === 'Up' || key === 'ArrowUp');
event.preventDefault();
}
};
var onKeyUp = function onKeyUp() {
userTypingRef.current = false;
shiftKeyRef.current = false;
};
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
if (changeOnWheel && focus) {
var onWheel = function onWheel(event) {
// moving mouse wheel rises wheel event with deltaY < 0
// scroll value grows from top to bottom, as screen Y coordinate
onInternalStep(event.deltaY < 0);
event.preventDefault();
};
var input = inputRef.current;
if (input) {
// React onWheel is passive and we can't preventDefault() in it.
// That's why we should subscribe with DOM listener
// https://stackoverflow.com/questions/63663025/react-onwheel-handler-cant-preventdefault-because-its-a-passive-event-listenev
input.addEventListener('wheel', onWheel, {
passive: false
});
return function () {
return input.removeEventListener('wheel', onWheel);
};
}
}
});
// >>> Focus & Blur
var onBlur = function onBlur() {
if (changeOnBlur) {
flushInputValue(false);
}
setFocus(false);
userTypingRef.current = false;
};
// ========================== Controlled ==========================
// Input by precision & formatter
(0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__.useLayoutUpdateEffect)(function () {
if (!decimalValue.isInvalidate()) {
setInputValue(decimalValue, false);
}
}, [precision, formatter]);
// Input by value
(0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__.useLayoutUpdateEffect)(function () {
var newValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(value);
setDecimalValue(newValue);
var currentParsedValue = (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_5__["default"])(mergedParser(inputValue));
// When user typing from `1.2` to `1.`, we should not convert to `1` immediately.
// But let it go if user set `formatter`
if (!newValue.equals(currentParsedValue) || !userTypingRef.current || formatter) {
// Update value as effect
setInputValue(newValue, userTypingRef.current);
}
}, [value]);
// ============================ Cursor ============================
(0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_8__.useLayoutUpdateEffect)(function () {
if (formatter) {
restoreCursor();
}
}, [inputValue]);
// ============================ Render ============================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("div", {
ref: domRef,
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-focused"), focus), "".concat(prefixCls, "-disabled"), disabled), "".concat(prefixCls, "-readonly"), readOnly), "".concat(prefixCls, "-not-a-number"), decimalValue.isNaN()), "".concat(prefixCls, "-out-of-range"), !decimalValue.isInvalidate() && !isInRange(decimalValue))),
style: style,
onFocus: function onFocus() {
setFocus(true);
},
onBlur: onBlur,
onKeyDown: onKeyDown,
onKeyUp: onKeyUp,
onCompositionStart: onCompositionStart,
onCompositionEnd: onCompositionEnd,
onBeforeInput: onBeforeInput
}, controls && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_StepHandler__WEBPACK_IMPORTED_MODULE_13__["default"], {
prefixCls: prefixCls,
upNode: upHandler,
downNode: downHandler,
upDisabled: upDisabled,
downDisabled: downDisabled,
onStep: onInternalStep
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("div", {
className: "".concat(inputClassName, "-wrap")
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("input", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
autoComplete: "off",
role: "spinbutton",
"aria-valuemin": min,
"aria-valuemax": max,
"aria-valuenow": decimalValue.isInvalidate() ? null : decimalValue.toString(),
step: step
}, inputProps, {
ref: (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_10__.composeRef)(inputRef, ref),
className: inputClassName,
value: inputValue,
onChange: onInternalInput,
disabled: disabled,
readOnly: readOnly
}))));
});
var InputNumber = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.forwardRef(function (props, ref) {
var disabled = props.disabled,
style = props.style,
_props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-input-number' : _props$prefixCls,
value = props.value,
prefix = props.prefix,
suffix = props.suffix,
addonBefore = props.addonBefore,
addonAfter = props.addonAfter,
className = props.className,
classNames = props.classNames,
rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded2);
var holderRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null);
var inputNumberDomRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null);
var inputFocusRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(null);
var focus = function focus(option) {
if (inputFocusRef.current) {
(0,rc_input_es_utils_commonUtils__WEBPACK_IMPORTED_MODULE_15__.triggerFocus)(inputFocusRef.current, option);
}
};
react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle(ref, function () {
return (0,rc_util_es_proxyObject__WEBPACK_IMPORTED_MODULE_9__["default"])(inputFocusRef.current, {
focus: focus,
nativeElement: holderRef.current.nativeElement || inputNumberDomRef.current
});
});
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(rc_input__WEBPACK_IMPORTED_MODULE_7__.BaseInput, {
className: className,
triggerFocus: focus,
prefixCls: prefixCls,
value: value,
disabled: disabled,
style: style,
prefix: prefix,
suffix: suffix,
addonAfter: addonAfter,
addonBefore: addonBefore,
classNames: classNames,
components: {
affixWrapper: 'div',
groupWrapper: 'div',
wrapper: 'div',
groupAddon: 'div'
},
ref: holderRef
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(InternalInputNumber, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
prefixCls: prefixCls,
disabled: disabled,
ref: inputFocusRef,
domRef: inputNumberDomRef,
className: classNames === null || classNames === void 0 ? void 0 : classNames.input
}, rest)));
});
if (true) {
InputNumber.displayName = 'InputNumber';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InputNumber);
/***/ }),
/***/ "../../../node_modules/rc-input-number/es/StepHandler.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-input-number/es/StepHandler.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ StepHandler)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var rc_util_es_hooks_useMobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useMobile */ "../../../node_modules/rc-util/es/hooks/useMobile.js");
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* eslint-disable react/no-unknown-property */
/**
* When click and hold on a button - the speed of auto changing the value.
*/
var STEP_INTERVAL = 200;
/**
* When click and hold on a button - the delay before auto changing the value.
*/
var STEP_DELAY = 600;
function StepHandler(_ref) {
var prefixCls = _ref.prefixCls,
upNode = _ref.upNode,
downNode = _ref.downNode,
upDisabled = _ref.upDisabled,
downDisabled = _ref.downDisabled,
onStep = _ref.onStep;
// ======================== Step ========================
var stepTimeoutRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef();
var frameIds = react__WEBPACK_IMPORTED_MODULE_2__.useRef([]);
var onStepRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef();
onStepRef.current = onStep;
var onStopStep = function onStopStep() {
clearTimeout(stepTimeoutRef.current);
};
// We will interval update step when hold mouse down
var onStepMouseDown = function onStepMouseDown(e, up) {
e.preventDefault();
onStopStep();
onStepRef.current(up);
// Loop step for interval
function loopStep() {
onStepRef.current(up);
stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL);
}
// First time press will wait some time to trigger loop step update
stepTimeoutRef.current = setTimeout(loopStep, STEP_DELAY);
};
react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () {
return function () {
onStopStep();
frameIds.current.forEach(function (id) {
return rc_util_es_raf__WEBPACK_IMPORTED_MODULE_5__["default"].cancel(id);
});
};
}, []);
// ======================= Render =======================
var isMobile = (0,rc_util_es_hooks_useMobile__WEBPACK_IMPORTED_MODULE_4__["default"])();
if (isMobile) {
return null;
}
var handlerClassName = "".concat(prefixCls, "-handler");
var upClassName = classnames__WEBPACK_IMPORTED_MODULE_3___default()(handlerClassName, "".concat(handlerClassName, "-up"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(handlerClassName, "-up-disabled"), upDisabled));
var downClassName = classnames__WEBPACK_IMPORTED_MODULE_3___default()(handlerClassName, "".concat(handlerClassName, "-down"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(handlerClassName, "-down-disabled"), downDisabled));
// fix: https://github.com/ant-design/ant-design/issues/43088
// In Safari, When we fire onmousedown and onmouseup events in quick succession,
// there may be a problem that the onmouseup events are executed first,
// resulting in a disordered program execution.
// So, we need to use requestAnimationFrame to ensure that the onmouseup event is executed after the onmousedown event.
var safeOnStopStep = function safeOnStopStep() {
return frameIds.current.push((0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_5__["default"])(onStopStep));
};
var sharedHandlerProps = {
unselectable: 'on',
role: 'button',
onMouseUp: safeOnStopStep,
onMouseLeave: safeOnStopStep
};
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", {
className: "".concat(handlerClassName, "-wrap")
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, sharedHandlerProps, {
onMouseDown: function onMouseDown(e) {
onStepMouseDown(e, true);
},
"aria-label": "Increase Value",
"aria-disabled": upDisabled,
className: upClassName
}), upNode || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", {
unselectable: "on",
className: "".concat(prefixCls, "-handler-up-inner")
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, sharedHandlerProps, {
onMouseDown: function onMouseDown(e) {
onStepMouseDown(e, false);
},
"aria-label": "Decrease Value",
"aria-disabled": downDisabled,
className: downClassName
}), downNode || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", {
unselectable: "on",
className: "".concat(prefixCls, "-handler-down-inner")
})));
}
/***/ }),
/***/ "../../../node_modules/rc-input-number/es/hooks/useCursor.js":
/*!*******************************************************************!*\
!*** ../../../node_modules/rc-input-number/es/hooks/useCursor.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useCursor)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/**
* Keep input cursor in the correct position if possible.
* Is this necessary since we have `formatter` which may mass the content?
*/
function useCursor(input, focused) {
var selectionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
function recordCursor() {
// Record position
try {
var start = input.selectionStart,
end = input.selectionEnd,
value = input.value;
var beforeTxt = value.substring(0, start);
var afterTxt = value.substring(end);
selectionRef.current = {
start: start,
end: end,
value: value,
beforeTxt: beforeTxt,
afterTxt: afterTxt
};
} catch (e) {
// Fix error in Chrome:
// Failed to read the 'selectionStart' property from 'HTMLInputElement'
// http://stackoverflow.com/q/21177489/3040605
}
}
/**
* Restore logic:
* 1. back string same
* 2. start string same
*/
function restoreCursor() {
if (input && selectionRef.current && focused) {
try {
var value = input.value;
var _selectionRef$current = selectionRef.current,
beforeTxt = _selectionRef$current.beforeTxt,
afterTxt = _selectionRef$current.afterTxt,
start = _selectionRef$current.start;
var startPos = value.length;
if (value.startsWith(beforeTxt)) {
startPos = beforeTxt.length;
} else if (value.endsWith(afterTxt)) {
startPos = value.length - selectionRef.current.afterTxt.length;
} else {
var beforeLastChar = beforeTxt[start - 1];
var newIndex = value.indexOf(beforeLastChar, start - 1);
if (newIndex !== -1) {
startPos = newIndex + 1;
}
}
input.setSelectionRange(startPos, startPos);
} catch (e) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(false, "Something warning of cursor restore. Please fire issue about this: ".concat(e.message));
}
}
}
return [recordCursor, restoreCursor];
}
/***/ }),
/***/ "../../../node_modules/rc-input-number/es/hooks/useFrame.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-input-number/es/hooks/useFrame.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/**
* Always trigger latest once when call multiple time
*/
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
var idRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);
var cleanUp = function cleanUp() {
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"].cancel(idRef.current);
};
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
return cleanUp;
}, []);
return function (callback) {
cleanUp();
idRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(function () {
callback();
});
};
});
/***/ }),
/***/ "../../../node_modules/rc-input-number/es/index.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-input-number/es/index.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _InputNumber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InputNumber */ "../../../node_modules/rc-input-number/es/InputNumber.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_InputNumber__WEBPACK_IMPORTED_MODULE_0__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-input-number/es/utils/numberUtil.js":
/*!********************************************************************!*\
!*** ../../../node_modules/rc-input-number/es/utils/numberUtil.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getDecupleSteps: () => (/* binding */ getDecupleSteps)
/* harmony export */ });
/* harmony import */ var _rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rc-component/mini-decimal */ "../../../node_modules/@rc-component/mini-decimal/es/index.js");
function getDecupleSteps(step) {
var stepStr = typeof step === 'number' ? (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__.num2str)(step) : (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__.trimNumber)(step).fullStr;
var hasPoint = stepStr.includes('.');
if (!hasPoint) {
return step + '0';
}
return (0,_rc_component_mini_decimal__WEBPACK_IMPORTED_MODULE_0__.trimNumber)(stepStr.replace(/(\d)\.(\d)/g, '$1$2.')).fullStr;
}
/***/ }),
/***/ "../../../node_modules/rc-input/es/BaseInput.js":
/*!******************************************************!*\
!*** ../../../node_modules/rc-input/es/BaseInput.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js");
var BaseInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().forwardRef(function (props, ref) {
var _props, _props2, _props3;
var inputEl = props.inputElement,
children = props.children,
prefixCls = props.prefixCls,
prefix = props.prefix,
suffix = props.suffix,
addonBefore = props.addonBefore,
addonAfter = props.addonAfter,
className = props.className,
style = props.style,
disabled = props.disabled,
readOnly = props.readOnly,
focused = props.focused,
triggerFocus = props.triggerFocus,
allowClear = props.allowClear,
value = props.value,
handleReset = props.handleReset,
hidden = props.hidden,
classes = props.classes,
classNames = props.classNames,
dataAttrs = props.dataAttrs,
styles = props.styles,
components = props.components,
onClear = props.onClear;
var inputElement = children !== null && children !== void 0 ? children : inputEl;
var AffixWrapperComponent = (components === null || components === void 0 ? void 0 : components.affixWrapper) || 'span';
var GroupWrapperComponent = (components === null || components === void 0 ? void 0 : components.groupWrapper) || 'span';
var WrapperComponent = (components === null || components === void 0 ? void 0 : components.wrapper) || 'span';
var GroupAddonComponent = (components === null || components === void 0 ? void 0 : components.groupAddon) || 'span';
var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null);
var onInputClick = function onInputClick(e) {
var _containerRef$current;
if ((_containerRef$current = containerRef.current) !== null && _containerRef$current !== void 0 && _containerRef$current.contains(e.target)) {
triggerFocus === null || triggerFocus === void 0 || triggerFocus();
}
};
var hasAffix = (0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__.hasPrefixSuffix)(props);
var element = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_5__.cloneElement)(inputElement, {
value: value,
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((_props = inputElement.props) === null || _props === void 0 ? void 0 : _props.className, !hasAffix && (classNames === null || classNames === void 0 ? void 0 : classNames.variant)) || null
});
// ======================== Ref ======================== //
var groupRef = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null);
react__WEBPACK_IMPORTED_MODULE_5___default().useImperativeHandle(ref, function () {
return {
nativeElement: groupRef.current || containerRef.current
};
});
// ================== Prefix & Suffix ================== //
if (hasAffix) {
// ================== Clear Icon ================== //
var clearIcon = null;
if (allowClear) {
var needClear = !disabled && !readOnly && value;
var clearIconCls = "".concat(prefixCls, "-clear-icon");
var iconNode = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(allowClear) === 'object' && allowClear !== null && allowClear !== void 0 && allowClear.clearIcon ? allowClear.clearIcon : '✖';
clearIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("button", {
type: "button",
tabIndex: -1,
onClick: function onClick(event) {
handleReset === null || handleReset === void 0 || handleReset(event);
onClear === null || onClear === void 0 || onClear();
}
// Do not trigger onBlur when clear input
// https://github.com/ant-design/ant-design/issues/31200
,
onMouseDown: function onMouseDown(e) {
return e.preventDefault();
},
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(clearIconCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(clearIconCls, "-hidden"), !needClear), "".concat(clearIconCls, "-has-suffix"), !!suffix))
}, iconNode);
}
var affixWrapperPrefixCls = "".concat(prefixCls, "-affix-wrapper");
var affixWrapperCls = classnames__WEBPACK_IMPORTED_MODULE_4___default()(affixWrapperPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-disabled"), disabled), "".concat(affixWrapperPrefixCls, "-disabled"), disabled), "".concat(affixWrapperPrefixCls, "-focused"), focused), "".concat(affixWrapperPrefixCls, "-readonly"), readOnly), "".concat(affixWrapperPrefixCls, "-input-with-clear-btn"), suffix && allowClear && value), classes === null || classes === void 0 ? void 0 : classes.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.variant);
var suffixNode = (suffix || allowClear) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("span", {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-suffix"), classNames === null || classNames === void 0 ? void 0 : classNames.suffix),
style: styles === null || styles === void 0 ? void 0 : styles.suffix
}, clearIcon, suffix);
element = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(AffixWrapperComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
className: affixWrapperCls,
style: styles === null || styles === void 0 ? void 0 : styles.affixWrapper,
onClick: onInputClick
}, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.affixWrapper, {
ref: containerRef
}), prefix && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement("span", {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-prefix"), classNames === null || classNames === void 0 ? void 0 : classNames.prefix),
style: styles === null || styles === void 0 ? void 0 : styles.prefix
}, prefix), element, suffixNode);
}
// ================== Addon ================== //
if ((0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_6__.hasAddon)(props)) {
var wrapperCls = "".concat(prefixCls, "-group");
var addonCls = "".concat(wrapperCls, "-addon");
var groupWrapperCls = "".concat(wrapperCls, "-wrapper");
var mergedWrapperClassName = classnames__WEBPACK_IMPORTED_MODULE_4___default()("".concat(prefixCls, "-wrapper"), wrapperCls, classes === null || classes === void 0 ? void 0 : classes.wrapper, classNames === null || classNames === void 0 ? void 0 : classNames.wrapper);
var mergedGroupClassName = classnames__WEBPACK_IMPORTED_MODULE_4___default()(groupWrapperCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(groupWrapperCls, "-disabled"), disabled), classes === null || classes === void 0 ? void 0 : classes.group, classNames === null || classNames === void 0 ? void 0 : classNames.groupWrapper);
// Need another wrapper for changing display:table to display:inline-block
// and put style prop in wrapper
element = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupWrapperComponent, {
className: mergedGroupClassName,
ref: groupRef
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(WrapperComponent, {
className: mergedWrapperClassName
}, addonBefore && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupAddonComponent, {
className: addonCls
}, addonBefore), element, addonAfter && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().createElement(GroupAddonComponent, {
className: addonCls
}, addonAfter)));
}
// `className` and `style` are always on the root element
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default().cloneElement(element, {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((_props2 = element.props) === null || _props2 === void 0 ? void 0 : _props2.className, className) || null,
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, (_props3 = element.props) === null || _props3 === void 0 ? void 0 : _props3.style), style),
hidden: hidden
});
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BaseInput);
/***/ }),
/***/ "../../../node_modules/rc-input/es/Input.js":
/*!**************************************************!*\
!*** ../../../node_modules/rc-input/es/Input.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _BaseInput__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BaseInput */ "../../../node_modules/rc-input/es/BaseInput.js");
/* harmony import */ var _hooks_useCount__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useCount */ "../../../node_modules/rc-input/es/hooks/useCount.js");
/* harmony import */ var _utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/commonUtils */ "../../../node_modules/rc-input/es/utils/commonUtils.js");
var _excluded = ["autoComplete", "onChange", "onFocus", "onBlur", "onPressEnter", "onKeyDown", "onKeyUp", "prefixCls", "disabled", "htmlSize", "className", "maxLength", "suffix", "showCount", "count", "type", "classes", "classNames", "styles", "onCompositionStart", "onCompositionEnd"];
var Input = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_9__.forwardRef)(function (props, ref) {
var autoComplete = props.autoComplete,
onChange = props.onChange,
onFocus = props.onFocus,
onBlur = props.onBlur,
onPressEnter = props.onPressEnter,
onKeyDown = props.onKeyDown,
onKeyUp = props.onKeyUp,
_props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-input' : _props$prefixCls,
disabled = props.disabled,
htmlSize = props.htmlSize,
className = props.className,
maxLength = props.maxLength,
suffix = props.suffix,
showCount = props.showCount,
count = props.count,
_props$type = props.type,
type = _props$type === void 0 ? 'text' : _props$type,
classes = props.classes,
classNames = props.classNames,
styles = props.styles,
_onCompositionStart = props.onCompositionStart,
onCompositionEnd = props.onCompositionEnd,
rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(props, _excluded);
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(false),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useState, 2),
focused = _useState2[0],
setFocused = _useState2[1];
var compositionRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(false);
var keyLockRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(false);
var inputRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(null);
var holderRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(null);
var focus = function focus(option) {
if (inputRef.current) {
(0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.triggerFocus)(inputRef.current, option);
}
};
// ====================== Value =======================
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_7__["default"])(props.defaultValue, {
value: props.value
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2),
value = _useMergedState2[0],
setValue = _useMergedState2[1];
var formatValue = value === undefined || value === null ? '' : String(value);
// =================== Select Range ===================
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(null),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useState3, 2),
selection = _useState4[0],
setSelection = _useState4[1];
// ====================== Count =======================
var countConfig = (0,_hooks_useCount__WEBPACK_IMPORTED_MODULE_11__["default"])(count, showCount);
var mergedMax = countConfig.max || maxLength;
var valueLength = countConfig.strategy(formatValue);
var isOutOfRange = !!mergedMax && valueLength > mergedMax;
// ======================= Ref ========================
(0,react__WEBPACK_IMPORTED_MODULE_9__.useImperativeHandle)(ref, function () {
var _holderRef$current;
return {
focus: focus,
blur: function blur() {
var _inputRef$current;
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.blur();
},
setSelectionRange: function setSelectionRange(start, end, direction) {
var _inputRef$current2;
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.setSelectionRange(start, end, direction);
},
select: function select() {
var _inputRef$current3;
(_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.select();
},
input: inputRef.current,
nativeElement: ((_holderRef$current = holderRef.current) === null || _holderRef$current === void 0 ? void 0 : _holderRef$current.nativeElement) || inputRef.current
};
});
(0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () {
if (keyLockRef.current) {
keyLockRef.current = false;
}
setFocused(function (prev) {
return prev && disabled ? false : prev;
});
}, [disabled]);
var triggerChange = function triggerChange(e, currentValue, info) {
var cutValue = currentValue;
if (!compositionRef.current && countConfig.exceedFormatter && countConfig.max && countConfig.strategy(currentValue) > countConfig.max) {
cutValue = countConfig.exceedFormatter(currentValue, {
max: countConfig.max
});
if (currentValue !== cutValue) {
var _inputRef$current4, _inputRef$current5;
setSelection([((_inputRef$current4 = inputRef.current) === null || _inputRef$current4 === void 0 ? void 0 : _inputRef$current4.selectionStart) || 0, ((_inputRef$current5 = inputRef.current) === null || _inputRef$current5 === void 0 ? void 0 : _inputRef$current5.selectionEnd) || 0]);
}
} else if (info.source === 'compositionEnd') {
// Avoid triggering twice
// https://github.com/ant-design/ant-design/issues/46587
return;
}
setValue(cutValue);
if (inputRef.current) {
(0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.resolveOnChange)(inputRef.current, e, onChange, cutValue);
}
};
(0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () {
if (selection) {
var _inputRef$current6;
(_inputRef$current6 = inputRef.current) === null || _inputRef$current6 === void 0 || _inputRef$current6.setSelectionRange.apply(_inputRef$current6, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(selection));
}
}, [selection]);
var onInternalChange = function onInternalChange(e) {
triggerChange(e, e.target.value, {
source: 'change'
});
};
var onInternalCompositionEnd = function onInternalCompositionEnd(e) {
compositionRef.current = false;
triggerChange(e, e.currentTarget.value, {
source: 'compositionEnd'
});
onCompositionEnd === null || onCompositionEnd === void 0 || onCompositionEnd(e);
};
var handleKeyDown = function handleKeyDown(e) {
if (onPressEnter && e.key === 'Enter' && !keyLockRef.current) {
keyLockRef.current = true;
onPressEnter(e);
}
onKeyDown === null || onKeyDown === void 0 || onKeyDown(e);
};
var handleKeyUp = function handleKeyUp(e) {
if (e.key === 'Enter') {
keyLockRef.current = false;
}
onKeyUp === null || onKeyUp === void 0 || onKeyUp(e);
};
var handleFocus = function handleFocus(e) {
setFocused(true);
onFocus === null || onFocus === void 0 || onFocus(e);
};
var handleBlur = function handleBlur(e) {
if (keyLockRef.current) {
keyLockRef.current = false;
}
setFocused(false);
onBlur === null || onBlur === void 0 || onBlur(e);
};
var handleReset = function handleReset(e) {
setValue('');
focus();
if (inputRef.current) {
(0,_utils_commonUtils__WEBPACK_IMPORTED_MODULE_12__.resolveOnChange)(inputRef.current, e, onChange);
}
};
// ====================== Input =======================
var outOfRangeCls = isOutOfRange && "".concat(prefixCls, "-out-of-range");
var getInputElement = function getInputElement() {
// Fix https://fb.me/react-unknown-prop
var otherProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_8__["default"])(props, ['prefixCls', 'onPressEnter', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'allowClear',
// Input elements must be either controlled or uncontrolled,
// specify either the value prop, or the defaultValue prop, but not both.
'defaultValue', 'showCount', 'count', 'classes', 'htmlSize', 'styles', 'classNames', 'onClear']);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("input", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
autoComplete: autoComplete
}, otherProps, {
onChange: onInternalChange,
onFocus: handleFocus,
onBlur: handleBlur,
onKeyDown: handleKeyDown,
onKeyUp: handleKeyUp,
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-disabled"), disabled), classNames === null || classNames === void 0 ? void 0 : classNames.input),
style: styles === null || styles === void 0 ? void 0 : styles.input,
ref: inputRef,
size: htmlSize,
type: type,
onCompositionStart: function onCompositionStart(e) {
compositionRef.current = true;
_onCompositionStart === null || _onCompositionStart === void 0 || _onCompositionStart(e);
},
onCompositionEnd: onInternalCompositionEnd
}));
};
var getSuffix = function getSuffix() {
// Max length value
var hasMaxLength = Number(mergedMax) > 0;
if (suffix || countConfig.show) {
var dataCount = countConfig.showFormatter ? countConfig.showFormatter({
value: formatValue,
count: valueLength,
maxLength: mergedMax
}) : "".concat(valueLength).concat(hasMaxLength ? " / ".concat(mergedMax) : '');
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement((react__WEBPACK_IMPORTED_MODULE_9___default().Fragment), null, countConfig.show && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("span", {
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()("".concat(prefixCls, "-show-count-suffix"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-show-count-has-suffix"), !!suffix), classNames === null || classNames === void 0 ? void 0 : classNames.count),
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, styles === null || styles === void 0 ? void 0 : styles.count)
}, dataCount), suffix);
}
return null;
};
// ====================== Render ======================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(_BaseInput__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, rest, {
prefixCls: prefixCls,
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(className, outOfRangeCls),
handleReset: handleReset,
value: formatValue,
focused: focused,
triggerFocus: focus,
suffix: getSuffix(),
disabled: disabled,
classes: classes,
classNames: classNames,
styles: styles,
ref: holderRef
}), getInputElement());
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Input);
/***/ }),
/***/ "../../../node_modules/rc-input/es/hooks/useCount.js":
/*!***********************************************************!*\
!*** ../../../node_modules/rc-input/es/hooks/useCount.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useCount),
/* harmony export */ inCountRange: () => (/* binding */ inCountRange)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
var _excluded = ["show"];
/**
* Cut `value` by the `count.max` prop.
*/
function inCountRange(value, countConfig) {
if (!countConfig.max) {
return true;
}
var count = countConfig.strategy(value);
return count <= countConfig.max;
}
function useCount(count, showCount) {
return react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () {
var mergedConfig = {};
if (showCount) {
mergedConfig.show = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(showCount) === 'object' && showCount.formatter ? showCount.formatter : !!showCount;
}
mergedConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedConfig), count);
var _ref = mergedConfig,
show = _ref.show,
rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, rest), {}, {
show: !!show,
showFormatter: typeof show === 'function' ? show : undefined,
strategy: rest.strategy || function (value) {
return value.length;
}
});
}, [count, showCount]);
}
/***/ }),
/***/ "../../../node_modules/rc-input/es/index.js":
/*!**************************************************!*\
!*** ../../../node_modules/rc-input/es/index.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ BaseInput: () => (/* reexport safe */ _BaseInput__WEBPACK_IMPORTED_MODULE_0__["default"]),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _BaseInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseInput */ "../../../node_modules/rc-input/es/BaseInput.js");
/* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Input */ "../../../node_modules/rc-input/es/Input.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Input__WEBPACK_IMPORTED_MODULE_1__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-input/es/utils/commonUtils.js":
/*!**************************************************************!*\
!*** ../../../node_modules/rc-input/es/utils/commonUtils.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ hasAddon: () => (/* binding */ hasAddon),
/* harmony export */ hasPrefixSuffix: () => (/* binding */ hasPrefixSuffix),
/* harmony export */ resolveOnChange: () => (/* binding */ resolveOnChange),
/* harmony export */ triggerFocus: () => (/* binding */ triggerFocus)
/* harmony export */ });
function hasAddon(props) {
return !!(props.addonBefore || props.addonAfter);
}
function hasPrefixSuffix(props) {
return !!(props.prefix || props.suffix || props.allowClear);
}
// TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11.
function cloneEvent(event, target, value) {
// A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of elements.
// As of the last update, this bug was still marked as "NEW," indicating that it might not have been resolved yet.
// https://bugs.webkit.org/show_bug.cgi?id=28123
var currentTarget = target.cloneNode(true);
// click clear icon
var newEvent = Object.create(event, {
target: {
value: currentTarget
},
currentTarget: {
value: currentTarget
}
});
// Fill data
currentTarget.value = value;
// Fill selection. Some type like `email` not support selection
// https://github.com/ant-design/ant-design/issues/47833
if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') {
currentTarget.selectionStart = target.selectionStart;
currentTarget.selectionEnd = target.selectionEnd;
}
currentTarget.setSelectionRange = function () {
target.setSelectionRange.apply(target, arguments);
};
return newEvent;
}
function resolveOnChange(target, e, onChange, targetValue) {
if (!onChange) {
return;
}
var event = e;
if (e.type === 'click') {
// Clone a new target for event.
// Avoid the following usage, the setQuery method gets the original value.
//
// const [query, setQuery] = React.useState('');
// {
// setQuery((prevStatus) => e.target.value);
// }}
// />
event = cloneEvent(e, target, '');
onChange(event);
return;
}
// Trigger by composition event, this means we need force change the input value
// https://github.com/ant-design/ant-design/issues/45737
// https://github.com/ant-design/ant-design/issues/46598
if (target.type !== 'file' && targetValue !== undefined) {
event = cloneEvent(e, target, targetValue);
onChange(event);
return;
}
onChange(event);
}
function triggerFocus(element, option) {
if (!element) return;
element.focus(option);
// Selection content
var _ref = option || {},
cursor = _ref.cursor;
if (cursor) {
var len = element.value.length;
switch (cursor) {
case 'start':
element.setSelectionRange(0, 0);
break;
case 'end':
element.setSelectionRange(len, len);
break;
default:
element.setSelectionRange(0, len);
}
}
}
/***/ }),
/***/ "../../../node_modules/rc-input/lib/utils/commonUtils.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-input/lib/utils/commonUtils.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.hasAddon = hasAddon;
exports.hasPrefixSuffix = hasPrefixSuffix;
exports.resolveOnChange = resolveOnChange;
exports.triggerFocus = triggerFocus;
function hasAddon(props) {
return !!(props.addonBefore || props.addonAfter);
}
function hasPrefixSuffix(props) {
return !!(props.prefix || props.suffix || props.allowClear);
}
// TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11.
function cloneEvent(event, target, value) {
// A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of elements.
// As of the last update, this bug was still marked as "NEW," indicating that it might not have been resolved yet.
// https://bugs.webkit.org/show_bug.cgi?id=28123
var currentTarget = target.cloneNode(true);
// click clear icon
var newEvent = Object.create(event, {
target: {
value: currentTarget
},
currentTarget: {
value: currentTarget
}
});
// Fill data
currentTarget.value = value;
// Fill selection. Some type like `email` not support selection
// https://github.com/ant-design/ant-design/issues/47833
if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') {
currentTarget.selectionStart = target.selectionStart;
currentTarget.selectionEnd = target.selectionEnd;
}
currentTarget.setSelectionRange = function () {
target.setSelectionRange.apply(target, arguments);
};
return newEvent;
}
function resolveOnChange(target, e, onChange, targetValue) {
if (!onChange) {
return;
}
var event = e;
if (e.type === 'click') {
// Clone a new target for event.
// Avoid the following usage, the setQuery method gets the original value.
//
// const [query, setQuery] = React.useState('');
// {
// setQuery((prevStatus) => e.target.value);
// }}
// />
event = cloneEvent(e, target, '');
onChange(event);
return;
}
// Trigger by composition event, this means we need force change the input value
// https://github.com/ant-design/ant-design/issues/45737
// https://github.com/ant-design/ant-design/issues/46598
if (target.type !== 'file' && targetValue !== undefined) {
event = cloneEvent(e, target, targetValue);
onChange(event);
return;
}
onChange(event);
}
function triggerFocus(element, option) {
if (!element) return;
element.focus(option);
// Selection content
var _ref = option || {},
cursor = _ref.cursor;
if (cursor) {
var len = element.value.length;
switch (cursor) {
case 'start':
element.setSelectionRange(0, 0);
break;
case 'end':
element.setSelectionRange(len, len);
break;
default:
element.setSelectionRange(0, len);
}
}
}
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/DropdownMenu.js":
/*!************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/DropdownMenu.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var rc_menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-menu */ "../../../node_modules/rc-menu/es/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _MentionsContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MentionsContext */ "../../../node_modules/rc-mentions/es/MentionsContext.js");
/**
* We only use Menu to display the candidate.
* The focus is controlled by textarea to make accessibility easy.
*/
function DropdownMenu(props) {
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(_MentionsContext__WEBPACK_IMPORTED_MODULE_2__["default"]),
notFoundContent = _React$useContext.notFoundContent,
activeIndex = _React$useContext.activeIndex,
setActiveIndex = _React$useContext.setActiveIndex,
selectOption = _React$useContext.selectOption,
onFocus = _React$useContext.onFocus,
onBlur = _React$useContext.onBlur,
onScroll = _React$useContext.onScroll;
var prefixCls = props.prefixCls,
options = props.options;
var activeOption = options[activeIndex] || {};
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__["default"], {
prefixCls: "".concat(prefixCls, "-menu"),
activeKey: activeOption.key,
onSelect: function onSelect(_ref) {
var key = _ref.key;
var option = options.find(function (_ref2) {
var optionKey = _ref2.key;
return optionKey === key;
});
selectOption(option);
},
onFocus: onFocus,
onBlur: onBlur,
onScroll: onScroll
}, options.map(function (option, index) {
var key = option.key,
disabled = option.disabled,
className = option.className,
style = option.style,
label = option.label;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__.MenuItem, {
key: key,
disabled: disabled,
className: className,
style: style,
onMouseEnter: function onMouseEnter() {
setActiveIndex(index);
}
}, label);
}), !options.length && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(rc_menu__WEBPACK_IMPORTED_MODULE_0__.MenuItem, {
disabled: true
}, notFoundContent));
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DropdownMenu);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/KeywordTrigger.js":
/*!**************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/KeywordTrigger.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _DropdownMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DropdownMenu */ "../../../node_modules/rc-mentions/es/DropdownMenu.js");
var BUILT_IN_PLACEMENTS = {
bottomRight: {
points: ['tl', 'br'],
offset: [0, 4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
bottomLeft: {
points: ['tr', 'bl'],
offset: [0, 4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
topRight: {
points: ['bl', 'tr'],
offset: [0, -4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
topLeft: {
points: ['br', 'tl'],
offset: [0, -4],
overflow: {
adjustX: 1,
adjustY: 1
}
}
};
var KeywordTrigger = function KeywordTrigger(props) {
var prefixCls = props.prefixCls,
options = props.options,
children = props.children,
visible = props.visible,
transitionName = props.transitionName,
getPopupContainer = props.getPopupContainer,
dropdownClassName = props.dropdownClassName,
direction = props.direction,
placement = props.placement;
var dropdownPrefix = "".concat(prefixCls, "-dropdown");
var dropdownElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_DropdownMenu__WEBPACK_IMPORTED_MODULE_2__["default"], {
prefixCls: dropdownPrefix,
options: options
});
var dropdownPlacement = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(function () {
var popupPlacement;
if (direction === 'rtl') {
popupPlacement = placement === 'top' ? 'topLeft' : 'bottomLeft';
} else {
popupPlacement = placement === 'top' ? 'topRight' : 'bottomRight';
}
return popupPlacement;
}, [direction, placement]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_0__["default"], {
prefixCls: dropdownPrefix,
popupVisible: visible,
popup: dropdownElement,
popupPlacement: dropdownPlacement,
popupTransitionName: transitionName,
builtinPlacements: BUILT_IN_PLACEMENTS,
getPopupContainer: getPopupContainer,
popupClassName: dropdownClassName
}, children);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (KeywordTrigger);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/Mentions.js":
/*!********************************************************!*\
!*** ../../../node_modules/rc-mentions/es/Mentions.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var rc_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-input */ "../../../node_modules/rc-input/es/index.js");
/* harmony import */ var rc_textarea__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-textarea */ "../../../node_modules/rc-textarea/es/index.js");
/* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "../../../node_modules/rc-util/es/Children/toArray.js");
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var _hooks_useEffectState__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useEffectState */ "../../../node_modules/rc-mentions/es/hooks/useEffectState.js");
/* harmony import */ var _KeywordTrigger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./KeywordTrigger */ "../../../node_modules/rc-mentions/es/KeywordTrigger.js");
/* harmony import */ var _MentionsContext__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./MentionsContext */ "../../../node_modules/rc-mentions/es/MentionsContext.js");
/* harmony import */ var _Option__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Option */ "../../../node_modules/rc-mentions/es/Option.js");
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./util */ "../../../node_modules/rc-mentions/es/util.js");
var _excluded = ["prefixCls", "className", "style", "prefix", "split", "notFoundContent", "value", "defaultValue", "children", "options", "open", "allowClear", "silent", "validateSearch", "filterOption", "onChange", "onKeyDown", "onKeyUp", "onPressEnter", "onSearch", "onSelect", "onFocus", "onBlur", "transitionName", "placement", "direction", "getPopupContainer", "dropdownClassName", "rows", "visible", "onPopupScroll"],
_excluded2 = ["suffix", "prefixCls", "defaultValue", "value", "allowClear", "onChange", "classNames", "className", "disabled", "onClear"];
var InternalMentions = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_11__.forwardRef)(function (props, ref) {
var prefixCls = props.prefixCls,
className = props.className,
style = props.style,
_props$prefix = props.prefix,
prefix = _props$prefix === void 0 ? '@' : _props$prefix,
_props$split = props.split,
split = _props$split === void 0 ? ' ' : _props$split,
_props$notFoundConten = props.notFoundContent,
notFoundContent = _props$notFoundConten === void 0 ? 'Not Found' : _props$notFoundConten,
value = props.value,
defaultValue = props.defaultValue,
children = props.children,
options = props.options,
open = props.open,
allowClear = props.allowClear,
silent = props.silent,
_props$validateSearch = props.validateSearch,
validateSearch = _props$validateSearch === void 0 ? _util__WEBPACK_IMPORTED_MODULE_16__.validateSearch : _props$validateSearch,
_props$filterOption = props.filterOption,
filterOption = _props$filterOption === void 0 ? _util__WEBPACK_IMPORTED_MODULE_16__.filterOption : _props$filterOption,
onChange = props.onChange,
onKeyDown = props.onKeyDown,
onKeyUp = props.onKeyUp,
onPressEnter = props.onPressEnter,
onSearch = props.onSearch,
onSelect = props.onSelect,
onFocus = props.onFocus,
onBlur = props.onBlur,
transitionName = props.transitionName,
placement = props.placement,
direction = props.direction,
getPopupContainer = props.getPopupContainer,
dropdownClassName = props.dropdownClassName,
_props$rows = props.rows,
rows = _props$rows === void 0 ? 1 : _props$rows,
visible = props.visible,
onPopupScroll = props.onPopupScroll,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(props, _excluded);
var mergedPrefix = (0,react__WEBPACK_IMPORTED_MODULE_11__.useMemo)(function () {
return Array.isArray(prefix) ? prefix : [prefix];
}, [prefix]);
// =============================== Refs ===============================
var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var textareaRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var measureRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var getTextArea = function getTextArea() {
var _textareaRef$current;
return (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 || (_textareaRef$current = _textareaRef$current.resizableTextArea) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.textArea;
};
react__WEBPACK_IMPORTED_MODULE_11___default().useImperativeHandle(ref, function () {
var _textareaRef$current4;
return {
focus: function focus() {
var _textareaRef$current2;
return (_textareaRef$current2 = textareaRef.current) === null || _textareaRef$current2 === void 0 ? void 0 : _textareaRef$current2.focus();
},
blur: function blur() {
var _textareaRef$current3;
return (_textareaRef$current3 = textareaRef.current) === null || _textareaRef$current3 === void 0 ? void 0 : _textareaRef$current3.blur();
},
textarea: (_textareaRef$current4 = textareaRef.current) === null || _textareaRef$current4 === void 0 || (_textareaRef$current4 = _textareaRef$current4.resizableTextArea) === null || _textareaRef$current4 === void 0 ? void 0 : _textareaRef$current4.textArea,
nativeElement: containerRef.current
};
});
// ============================== State ===============================
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(false),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2),
measuring = _useState2[0],
setMeasuring = _useState2[1];
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(''),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState3, 2),
measureText = _useState4[0],
setMeasureText = _useState4[1];
var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(''),
_useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState5, 2),
measurePrefix = _useState6[0],
setMeasurePrefix = _useState6[1];
var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(0),
_useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState7, 2),
measureLocation = _useState8[0],
setMeasureLocation = _useState8[1];
var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(0),
_useState10 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState9, 2),
activeIndex = _useState10[0],
setActiveIndex = _useState10[1];
var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(false),
_useState12 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState11, 2),
isFocus = _useState12[0],
setIsFocus = _useState12[1];
// ============================== Value ===============================
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])('', {
defaultValue: defaultValue,
value: value
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useMergedState, 2),
mergedValue = _useMergedState2[0],
setMergedValue = _useMergedState2[1];
// =============================== Open ===============================
(0,react__WEBPACK_IMPORTED_MODULE_11__.useEffect)(function () {
// Sync measure div top with textarea for rc-trigger usage
if (measuring && measureRef.current) {
measureRef.current.scrollTop = getTextArea().scrollTop;
}
}, [measuring]);
var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_11___default().useMemo(function () {
if (open) {
if (true) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__["default"])(false, '`open` of Mentions is only used for debug usage. Do not use in you production.');
}
for (var i = 0; i < mergedPrefix.length; i += 1) {
var curPrefix = mergedPrefix[i];
var index = mergedValue.lastIndexOf(curPrefix);
if (index >= 0) {
return [true, '', curPrefix, index];
}
}
}
return [measuring, measureText, measurePrefix, measureLocation];
}, [open, measuring, mergedPrefix, mergedValue, measureText, measurePrefix, measureLocation]),
_React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useMemo, 4),
mergedMeasuring = _React$useMemo2[0],
mergedMeasureText = _React$useMemo2[1],
mergedMeasurePrefix = _React$useMemo2[2],
mergedMeasureLocation = _React$useMemo2[3];
// ============================== Option ==============================
var getOptions = react__WEBPACK_IMPORTED_MODULE_11___default().useCallback(function (targetMeasureText) {
var list;
if (options && options.length > 0) {
list = options.map(function (item) {
var _item$key;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, item), {}, {
key: (_item$key = item === null || item === void 0 ? void 0 : item.key) !== null && _item$key !== void 0 ? _item$key : item.value
});
});
} else {
list = (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_7__["default"])(children).map(function (_ref) {
var optionProps = _ref.props,
key = _ref.key;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, optionProps), {}, {
label: optionProps.children,
key: key || optionProps.value
});
});
}
return list.filter(function (option) {
/** Return all result if `filterOption` is false. */
if (filterOption === false) {
return true;
}
return filterOption(targetMeasureText, option);
});
}, [children, options, filterOption]);
var mergedOptions = react__WEBPACK_IMPORTED_MODULE_11___default().useMemo(function () {
return getOptions(mergedMeasureText);
}, [getOptions, mergedMeasureText]);
// ============================= Measure ==============================
// Mark that we will reset input selection to target position when user select option
var onSelectionEffect = (0,_hooks_useEffectState__WEBPACK_IMPORTED_MODULE_12__["default"])();
var startMeasure = function startMeasure(nextMeasureText, nextMeasurePrefix, nextMeasureLocation) {
setMeasuring(true);
setMeasureText(nextMeasureText);
setMeasurePrefix(nextMeasurePrefix);
setMeasureLocation(nextMeasureLocation);
setActiveIndex(0);
};
var stopMeasure = function stopMeasure(callback) {
setMeasuring(false);
setMeasureLocation(0);
setMeasureText('');
onSelectionEffect(callback);
};
// ============================== Change ==============================
var triggerChange = function triggerChange(nextValue) {
setMergedValue(nextValue);
onChange === null || onChange === void 0 || onChange(nextValue);
};
var onInternalChange = function onInternalChange(_ref2) {
var nextValue = _ref2.target.value;
triggerChange(nextValue);
};
var selectOption = function selectOption(option) {
var _getTextArea;
var _option$value = option.value,
mentionValue = _option$value === void 0 ? '' : _option$value;
var _replaceWithMeasure = (0,_util__WEBPACK_IMPORTED_MODULE_16__.replaceWithMeasure)(mergedValue, {
measureLocation: mergedMeasureLocation,
targetText: mentionValue,
prefix: mergedMeasurePrefix,
selectionStart: (_getTextArea = getTextArea()) === null || _getTextArea === void 0 ? void 0 : _getTextArea.selectionStart,
split: split
}),
text = _replaceWithMeasure.text,
selectionLocation = _replaceWithMeasure.selectionLocation;
triggerChange(text);
stopMeasure(function () {
// We need restore the selection position
(0,_util__WEBPACK_IMPORTED_MODULE_16__.setInputSelection)(getTextArea(), selectionLocation);
});
onSelect === null || onSelect === void 0 || onSelect(option, mergedMeasurePrefix);
};
// ============================= KeyEvent =============================
// Check if hit the measure keyword
var onInternalKeyDown = function onInternalKeyDown(event) {
var which = event.which;
onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);
// Skip if not measuring
if (!mergedMeasuring) {
return;
}
if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP || which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].DOWN) {
// Control arrow function
var optionLen = mergedOptions.length;
var offset = which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP ? -1 : 1;
var newActiveIndex = (activeIndex + offset + optionLen) % optionLen;
setActiveIndex(newActiveIndex);
event.preventDefault();
} else if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ESC) {
stopMeasure();
} else if (which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ENTER) {
// Measure hit
event.preventDefault();
// loading skip
if (silent) {
return;
}
if (!mergedOptions.length) {
stopMeasure();
return;
}
var _option = mergedOptions[activeIndex];
selectOption(_option);
}
};
/**
* When to start measure:
* 1. When user press `prefix`
* 2. When measureText !== prevMeasureText
* - If measure hit
* - If measuring
*
* When to stop measure:
* 1. Selection is out of range
* 2. Contains `space`
* 3. ESC or select one
*/
var onInternalKeyUp = function onInternalKeyUp(event) {
var key = event.key,
which = event.which;
var target = event.target;
var selectionStartText = (0,_util__WEBPACK_IMPORTED_MODULE_16__.getBeforeSelectionText)(target);
var _getLastMeasureIndex = (0,_util__WEBPACK_IMPORTED_MODULE_16__.getLastMeasureIndex)(selectionStartText, mergedPrefix),
measureIndex = _getLastMeasureIndex.location,
nextMeasurePrefix = _getLastMeasureIndex.prefix;
// If the client implements an onKeyUp handler, call it
onKeyUp === null || onKeyUp === void 0 || onKeyUp(event);
// Skip if match the white key list
if ([rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ESC, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].UP, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].DOWN, rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ENTER].indexOf(which) !== -1) {
return;
}
if (measureIndex !== -1) {
var nextMeasureText = selectionStartText.slice(measureIndex + nextMeasurePrefix.length);
var validateMeasure = validateSearch(nextMeasureText, split);
var matchOption = !!getOptions(nextMeasureText).length;
if (validateMeasure) {
// adding AltGraph also fort azert keyboard
if (key === nextMeasurePrefix || key === 'Shift' || which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_9__["default"].ALT || key === 'AltGraph' || mergedMeasuring || nextMeasureText !== mergedMeasureText && matchOption) {
startMeasure(nextMeasureText, nextMeasurePrefix, measureIndex);
}
} else if (mergedMeasuring) {
// Stop if measureText is invalidate
stopMeasure();
}
/**
* We will trigger `onSearch` to developer since they may use for async update.
* If met `space` means user finished searching.
*/
if (onSearch && validateMeasure) {
onSearch(nextMeasureText, nextMeasurePrefix);
}
} else if (mergedMeasuring) {
stopMeasure();
}
};
var onInternalPressEnter = function onInternalPressEnter(event) {
if (!mergedMeasuring && onPressEnter) {
onPressEnter(event);
}
};
// ============================ Focus Blur ============================
var focusRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)();
var onInternalFocus = function onInternalFocus(event) {
window.clearTimeout(focusRef.current);
if (!isFocus && event && onFocus) {
onFocus(event);
}
setIsFocus(true);
};
var onInternalBlur = function onInternalBlur(event) {
focusRef.current = window.setTimeout(function () {
setIsFocus(false);
stopMeasure();
onBlur === null || onBlur === void 0 || onBlur(event);
}, 0);
};
var onDropdownFocus = function onDropdownFocus() {
onInternalFocus();
};
var onDropdownBlur = function onDropdownBlur() {
onInternalBlur();
};
// ============================== Scroll ===============================
var onInternalPopupScroll = function onInternalPopupScroll(event) {
onPopupScroll === null || onPopupScroll === void 0 || onPopupScroll(event);
};
// ============================== Render ==============================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(prefixCls, className),
style: style,
ref: containerRef
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(rc_textarea__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
ref: textareaRef,
value: mergedValue
}, restProps, {
rows: rows,
onChange: onInternalChange,
onKeyDown: onInternalKeyDown,
onKeyUp: onInternalKeyUp,
onPressEnter: onInternalPressEnter,
onFocus: onInternalFocus,
onBlur: onInternalBlur
})), mergedMeasuring && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", {
ref: measureRef,
className: "".concat(prefixCls, "-measure")
}, mergedValue.slice(0, mergedMeasureLocation), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(_MentionsContext__WEBPACK_IMPORTED_MODULE_14__["default"].Provider, {
value: {
notFoundContent: notFoundContent,
activeIndex: activeIndex,
setActiveIndex: setActiveIndex,
selectOption: selectOption,
onFocus: onDropdownFocus,
onBlur: onDropdownBlur,
onScroll: onInternalPopupScroll
}
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(_KeywordTrigger__WEBPACK_IMPORTED_MODULE_13__["default"], {
prefixCls: prefixCls,
transitionName: transitionName,
placement: placement,
direction: direction,
options: mergedOptions,
visible: true,
getPopupContainer: getPopupContainer,
dropdownClassName: dropdownClassName
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement("span", null, mergedMeasurePrefix))), mergedValue.slice(mergedMeasureLocation + mergedMeasurePrefix.length)));
});
var Mentions = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_11__.forwardRef)(function (_ref3, ref) {
var suffix = _ref3.suffix,
_ref3$prefixCls = _ref3.prefixCls,
prefixCls = _ref3$prefixCls === void 0 ? 'rc-mentions' : _ref3$prefixCls,
defaultValue = _ref3.defaultValue,
customValue = _ref3.value,
allowClear = _ref3.allowClear,
onChange = _ref3.onChange,
classes = _ref3.classNames,
className = _ref3.className,
disabled = _ref3.disabled,
onClear = _ref3.onClear,
rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref3, _excluded2);
// =============================== Ref ================================
var holderRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
var mentionRef = (0,react__WEBPACK_IMPORTED_MODULE_11__.useRef)(null);
(0,react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle)(ref, function () {
var _holderRef$current, _mentionRef$current;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mentionRef.current), {}, {
nativeElement: ((_holderRef$current = holderRef.current) === null || _holderRef$current === void 0 ? void 0 : _holderRef$current.nativeElement) || ((_mentionRef$current = mentionRef.current) === null || _mentionRef$current === void 0 ? void 0 : _mentionRef$current.nativeElement)
});
});
// ============================== Value ===============================
var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])('', {
defaultValue: defaultValue,
value: customValue
}),
_useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useMergedState3, 2),
mergedValue = _useMergedState4[0],
setMergedValue = _useMergedState4[1];
// ============================== Change ==============================
var triggerChange = function triggerChange(currentValue) {
setMergedValue(currentValue);
onChange === null || onChange === void 0 || onChange(currentValue);
};
// ============================== Reset ===============================
var handleReset = function handleReset() {
triggerChange('');
};
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(rc_input__WEBPACK_IMPORTED_MODULE_5__.BaseInput, {
suffix: suffix,
prefixCls: prefixCls,
value: mergedValue,
allowClear: allowClear,
handleReset: handleReset,
className: className,
classNames: classes,
disabled: disabled,
ref: holderRef,
onClear: onClear
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11___default().createElement(InternalMentions, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
className: classes === null || classes === void 0 ? void 0 : classes.mentions,
prefixCls: prefixCls,
ref: mentionRef,
onChange: triggerChange,
disabled: disabled
}, rest)));
});
Mentions.Option = _Option__WEBPACK_IMPORTED_MODULE_15__["default"];
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mentions);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/MentionsContext.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/MentionsContext.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* tslint:disable: no-object-literal-type-assertion */
// We will never use default, here only to fix TypeScript warning
var MentionsContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MentionsContext);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/Option.js":
/*!******************************************************!*\
!*** ../../../node_modules/rc-mentions/es/Option.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
var Option = function Option() {
return null;
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Option);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/hooks/useEffectState.js":
/*!********************************************************************!*\
!*** ../../../node_modules/rc-mentions/es/hooks/useEffectState.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useEffectState)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/**
* Trigger a callback on state change
*/
function useEffectState() {
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({
id: 0,
callback: null
}),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2),
effectId = _useState2[0],
setEffectId = _useState2[1];
var update = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (callback) {
setEffectId(function (_ref) {
var id = _ref.id;
return {
id: id + 1,
callback: callback
};
});
}, []);
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
var _effectId$callback;
(_effectId$callback = effectId.callback) === null || _effectId$callback === void 0 || _effectId$callback.call(effectId);
}, [effectId]);
return update;
}
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/index.js":
/*!*****************************************************!*\
!*** ../../../node_modules/rc-mentions/es/index.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Mentions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Mentions */ "../../../node_modules/rc-mentions/es/Mentions.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Mentions__WEBPACK_IMPORTED_MODULE_0__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-mentions/es/util.js":
/*!****************************************************!*\
!*** ../../../node_modules/rc-mentions/es/util.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ filterOption: () => (/* binding */ filterOption),
/* harmony export */ getBeforeSelectionText: () => (/* binding */ getBeforeSelectionText),
/* harmony export */ getLastMeasureIndex: () => (/* binding */ getLastMeasureIndex),
/* harmony export */ replaceWithMeasure: () => (/* binding */ replaceWithMeasure),
/* harmony export */ setInputSelection: () => (/* binding */ setInputSelection),
/* harmony export */ validateSearch: () => (/* binding */ validateSearch)
/* harmony export */ });
/**
* Cut input selection into 2 part and return text before selection start
*/
function getBeforeSelectionText(input) {
var selectionStart = input.selectionStart;
return input.value.slice(0, selectionStart);
}
/**
* Find the last match prefix index
*/
function getLastMeasureIndex(text, prefix) {
return prefix.reduce(function (lastMatch, prefixStr) {
var lastIndex = text.lastIndexOf(prefixStr);
if (lastIndex > lastMatch.location) {
return {
location: lastIndex,
prefix: prefixStr
};
}
return lastMatch;
}, {
location: -1,
prefix: ''
});
}
function lower(char) {
return (char || '').toLowerCase();
}
function reduceText(text, targetText, split) {
var firstChar = text[0];
if (!firstChar || firstChar === split) {
return text;
}
// Reuse rest text as it can
var restText = text;
var targetTextLen = targetText.length;
for (var i = 0; i < targetTextLen; i += 1) {
if (lower(restText[i]) !== lower(targetText[i])) {
restText = restText.slice(i);
break;
} else if (i === targetTextLen - 1) {
restText = restText.slice(targetTextLen);
}
}
return restText;
}
/**
* Paint targetText into current text:
* text: little@litest
* targetText: light
* => little @light test
*/
function replaceWithMeasure(text, measureConfig) {
var measureLocation = measureConfig.measureLocation,
prefix = measureConfig.prefix,
targetText = measureConfig.targetText,
selectionStart = measureConfig.selectionStart,
split = measureConfig.split;
// Before text will append one space if have other text
var beforeMeasureText = text.slice(0, measureLocation);
if (beforeMeasureText[beforeMeasureText.length - split.length] === split) {
beforeMeasureText = beforeMeasureText.slice(0, beforeMeasureText.length - split.length);
}
if (beforeMeasureText) {
beforeMeasureText = "".concat(beforeMeasureText).concat(split);
}
// Cut duplicate string with current targetText
var restText = reduceText(text.slice(selectionStart), targetText.slice(selectionStart - measureLocation - prefix.length), split);
if (restText.slice(0, split.length) === split) {
restText = restText.slice(split.length);
}
var connectedStartText = "".concat(beforeMeasureText).concat(prefix).concat(targetText).concat(split);
return {
text: "".concat(connectedStartText).concat(restText),
selectionLocation: connectedStartText.length
};
}
function setInputSelection(input, location) {
input.setSelectionRange(location, location);
/**
* Reset caret into view.
* Since this function always called by user control, it's safe to focus element.
*/
input.blur();
input.focus();
}
function validateSearch(text, split) {
return !split || text.indexOf(split) === -1;
}
function filterOption(input, _ref) {
var _ref$value = _ref.value,
value = _ref$value === void 0 ? '' : _ref$value;
var lowerCase = input.toLowerCase();
return value.toLowerCase().indexOf(lowerCase) !== -1;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/Divider.js":
/*!***************************************************!*\
!*** ../../../node_modules/rc-menu/es/Divider.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Divider)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
function Divider(_ref) {
var className = _ref.className,
style = _ref.style;
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_2__.MenuContext),
prefixCls = _React$useContext.prefixCls;
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_3__.useMeasure)();
if (measure) {
return null;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("li", {
role: "separator",
className: classnames__WEBPACK_IMPORTED_MODULE_1___default()("".concat(prefixCls, "-item-divider"), className),
style: style
});
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/Icon.js":
/*!************************************************!*\
!*** ../../../node_modules/rc-menu/es/Icon.js ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Icon)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
function Icon(_ref) {
var icon = _ref.icon,
props = _ref.props,
children = _ref.children;
var iconNode;
if (icon === null || icon === false) {
return null;
}
if (typeof icon === 'function') {
iconNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(icon, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props));
} else if (typeof icon !== "boolean") {
// Compatible for origin definition
iconNode = icon;
}
return iconNode || children || null;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/Menu.js":
/*!************************************************!*\
!*** ../../../node_modules/rc-menu/es/Menu.js ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js");
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
/* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-dom */ "../../../node_modules/react-dom/index.js");
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js");
/* harmony import */ var _hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hooks/useAccessibility */ "../../../node_modules/rc-menu/es/hooks/useAccessibility.js");
/* harmony import */ var _hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./hooks/useKeyRecords */ "../../../node_modules/rc-menu/es/hooks/useKeyRecords.js");
/* harmony import */ var _hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./hooks/useMemoCallback */ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js");
/* harmony import */ var _hooks_useUUID__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useUUID */ "../../../node_modules/rc-menu/es/hooks/useUUID.js");
/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js");
/* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js");
/* harmony import */ var _utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./utils/nodeUtil */ "../../../node_modules/rc-menu/es/utils/nodeUtil.js");
/* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js");
var _excluded = ["prefixCls", "rootClassName", "style", "className", "tabIndex", "items", "children", "direction", "id", "mode", "inlineCollapsed", "disabled", "disabledOverflow", "subMenuOpenDelay", "subMenuCloseDelay", "forceSubMenuRender", "defaultOpenKeys", "openKeys", "activeKey", "defaultActiveFirst", "selectable", "multiple", "defaultSelectedKeys", "selectedKeys", "onSelect", "onDeselect", "inlineIndent", "motion", "defaultMotions", "triggerSubMenuAction", "builtinPlacements", "itemIcon", "expandIcon", "overflowedIndicator", "overflowedIndicatorPopupClassName", "getPopupContainer", "onClick", "onOpenChange", "onKeyDown", "openAnimation", "openTransitionName", "_internalRenderMenuItem", "_internalRenderSubMenuItem", "_internalComponents"];
/**
* Menu modify after refactor:
* ## Add
* - disabled
*
* ## Remove
* - openTransitionName
* - openAnimation
* - onDestroy
* - siderCollapsed: Seems antd do not use this prop (Need test in antd)
* - collapsedWidth: Seems this logic should be handle by antd Layout.Sider
*/
// optimize for render
var EMPTY_LIST = [];
var Menu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.forwardRef(function (props, ref) {
var _childList$;
var _ref = props,
_ref$prefixCls = _ref.prefixCls,
prefixCls = _ref$prefixCls === void 0 ? 'rc-menu' : _ref$prefixCls,
rootClassName = _ref.rootClassName,
style = _ref.style,
className = _ref.className,
_ref$tabIndex = _ref.tabIndex,
tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex,
items = _ref.items,
children = _ref.children,
direction = _ref.direction,
id = _ref.id,
_ref$mode = _ref.mode,
mode = _ref$mode === void 0 ? 'vertical' : _ref$mode,
inlineCollapsed = _ref.inlineCollapsed,
disabled = _ref.disabled,
disabledOverflow = _ref.disabledOverflow,
_ref$subMenuOpenDelay = _ref.subMenuOpenDelay,
subMenuOpenDelay = _ref$subMenuOpenDelay === void 0 ? 0.1 : _ref$subMenuOpenDelay,
_ref$subMenuCloseDela = _ref.subMenuCloseDelay,
subMenuCloseDelay = _ref$subMenuCloseDela === void 0 ? 0.1 : _ref$subMenuCloseDela,
forceSubMenuRender = _ref.forceSubMenuRender,
defaultOpenKeys = _ref.defaultOpenKeys,
openKeys = _ref.openKeys,
activeKey = _ref.activeKey,
defaultActiveFirst = _ref.defaultActiveFirst,
_ref$selectable = _ref.selectable,
selectable = _ref$selectable === void 0 ? true : _ref$selectable,
_ref$multiple = _ref.multiple,
multiple = _ref$multiple === void 0 ? false : _ref$multiple,
defaultSelectedKeys = _ref.defaultSelectedKeys,
selectedKeys = _ref.selectedKeys,
onSelect = _ref.onSelect,
onDeselect = _ref.onDeselect,
_ref$inlineIndent = _ref.inlineIndent,
inlineIndent = _ref$inlineIndent === void 0 ? 24 : _ref$inlineIndent,
motion = _ref.motion,
defaultMotions = _ref.defaultMotions,
_ref$triggerSubMenuAc = _ref.triggerSubMenuAction,
triggerSubMenuAction = _ref$triggerSubMenuAc === void 0 ? 'hover' : _ref$triggerSubMenuAc,
builtinPlacements = _ref.builtinPlacements,
itemIcon = _ref.itemIcon,
expandIcon = _ref.expandIcon,
_ref$overflowedIndica = _ref.overflowedIndicator,
overflowedIndicator = _ref$overflowedIndica === void 0 ? '...' : _ref$overflowedIndica,
overflowedIndicatorPopupClassName = _ref.overflowedIndicatorPopupClassName,
getPopupContainer = _ref.getPopupContainer,
onClick = _ref.onClick,
onOpenChange = _ref.onOpenChange,
onKeyDown = _ref.onKeyDown,
openAnimation = _ref.openAnimation,
openTransitionName = _ref.openTransitionName,
_internalRenderMenuItem = _ref._internalRenderMenuItem,
_internalRenderSubMenuItem = _ref._internalRenderSubMenuItem,
_internalComponents = _ref._internalComponents,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(_ref, _excluded);
var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return [(0,_utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__.parseItems)(children, items, EMPTY_LIST, _internalComponents, prefixCls), (0,_utils_nodeUtil__WEBPACK_IMPORTED_MODULE_23__.parseItems)(children, items, EMPTY_LIST, {}, prefixCls)];
}, [children, items, _internalComponents]),
_React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useMemo, 2),
childList = _React$useMemo2[0],
measureChildList = _React$useMemo2[1];
var _React$useState = react__WEBPACK_IMPORTED_MODULE_11__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState, 2),
mounted = _React$useState2[0],
setMounted = _React$useState2[1];
var containerRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef();
var uuid = (0,_hooks_useUUID__WEBPACK_IMPORTED_MODULE_20__["default"])(id);
var isRtl = direction === 'rtl';
// ========================= Warn =========================
if (true) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_10__["default"])(!openAnimation && !openTransitionName, '`openAnimation` and `openTransitionName` is removed. Please use `motion` or `defaultMotion` instead.');
}
// ========================= Open =========================
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(defaultOpenKeys, {
value: openKeys,
postState: function postState(keys) {
return keys || EMPTY_LIST;
}
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2),
mergedOpenKeys = _useMergedState2[0],
setMergedOpenKeys = _useMergedState2[1];
// React 18 will merge mouse event which means we open key will not sync
// ref: https://github.com/ant-design/ant-design/issues/38818
var triggerOpenKeys = function triggerOpenKeys(keys) {
var forceFlush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
function doUpdate() {
setMergedOpenKeys(keys);
onOpenChange === null || onOpenChange === void 0 || onOpenChange(keys);
}
if (forceFlush) {
(0,react_dom__WEBPACK_IMPORTED_MODULE_12__.flushSync)(doUpdate);
} else {
doUpdate();
}
};
// >>>>> Cache & Reset open keys when inlineCollapsed changed
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedOpenKeys),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState3, 2),
inlineCacheOpenKeys = _React$useState4[0],
setInlineCacheOpenKeys = _React$useState4[1];
var mountRef = react__WEBPACK_IMPORTED_MODULE_11__.useRef(false);
// ========================= Mode =========================
var _React$useMemo3 = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
if ((mode === 'inline' || mode === 'vertical') && inlineCollapsed) {
return ['vertical', inlineCollapsed];
}
return [mode, false];
}, [mode, inlineCollapsed]),
_React$useMemo4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useMemo3, 2),
mergedMode = _React$useMemo4[0],
mergedInlineCollapsed = _React$useMemo4[1];
var isInlineMode = mergedMode === 'inline';
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedMode),
_React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState5, 2),
internalMode = _React$useState6[0],
setInternalMode = _React$useState6[1];
var _React$useState7 = react__WEBPACK_IMPORTED_MODULE_11__.useState(mergedInlineCollapsed),
_React$useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState7, 2),
internalInlineCollapsed = _React$useState8[0],
setInternalInlineCollapsed = _React$useState8[1];
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
setInternalMode(mergedMode);
setInternalInlineCollapsed(mergedInlineCollapsed);
if (!mountRef.current) {
return;
}
// Synchronously update MergedOpenKeys
if (isInlineMode) {
setMergedOpenKeys(inlineCacheOpenKeys);
} else {
// Trigger open event in case its in control
triggerOpenKeys(EMPTY_LIST);
}
}, [mergedMode, mergedInlineCollapsed]);
// ====================== Responsive ======================
var _React$useState9 = react__WEBPACK_IMPORTED_MODULE_11__.useState(0),
_React$useState10 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_React$useState9, 2),
lastVisibleIndex = _React$useState10[0],
setLastVisibleIndex = _React$useState10[1];
var allVisible = lastVisibleIndex >= childList.length - 1 || internalMode !== 'horizontal' || disabledOverflow;
// Cache
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
if (isInlineMode) {
setInlineCacheOpenKeys(mergedOpenKeys);
}
}, [mergedOpenKeys]);
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
mountRef.current = true;
return function () {
mountRef.current = false;
};
}, []);
// ========================= Path =========================
var _useKeyRecords = (0,_hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__["default"])(),
registerPath = _useKeyRecords.registerPath,
unregisterPath = _useKeyRecords.unregisterPath,
refreshOverflowKeys = _useKeyRecords.refreshOverflowKeys,
isSubPathKey = _useKeyRecords.isSubPathKey,
getKeyPath = _useKeyRecords.getKeyPath,
getKeys = _useKeyRecords.getKeys,
getSubPathKeys = _useKeyRecords.getSubPathKeys;
var registerPathContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return {
registerPath: registerPath,
unregisterPath: unregisterPath
};
}, [registerPath, unregisterPath]);
var pathUserContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return {
isSubPathKey: isSubPathKey
};
}, [isSubPathKey]);
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
refreshOverflowKeys(allVisible ? EMPTY_LIST : childList.slice(lastVisibleIndex + 1).map(function (child) {
return child.key;
}));
}, [lastVisibleIndex, allVisible]);
// ======================== Active ========================
var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(activeKey || defaultActiveFirst && ((_childList$ = childList[0]) === null || _childList$ === void 0 ? void 0 : _childList$.key), {
value: activeKey
}),
_useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState3, 2),
mergedActiveKey = _useMergedState4[0],
setMergedActiveKey = _useMergedState4[1];
var onActive = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (key) {
setMergedActiveKey(key);
});
var onInactive = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function () {
setMergedActiveKey(undefined);
});
(0,react__WEBPACK_IMPORTED_MODULE_11__.useImperativeHandle)(ref, function () {
return {
list: containerRef.current,
focus: function focus(options) {
var _childList$find;
var keys = getKeys();
var _refreshElements = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.refreshElements)(keys, uuid),
elements = _refreshElements.elements,
key2element = _refreshElements.key2element,
element2key = _refreshElements.element2key;
var focusableElements = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.getFocusableElements)(containerRef.current, elements);
var shouldFocusKey = mergedActiveKey !== null && mergedActiveKey !== void 0 ? mergedActiveKey : focusableElements[0] ? element2key.get(focusableElements[0]) : (_childList$find = childList.find(function (node) {
return !node.props.disabled;
})) === null || _childList$find === void 0 ? void 0 : _childList$find.key;
var elementToFocus = key2element.get(shouldFocusKey);
if (shouldFocusKey && elementToFocus) {
var _elementToFocus$focus;
elementToFocus === null || elementToFocus === void 0 || (_elementToFocus$focus = elementToFocus.focus) === null || _elementToFocus$focus === void 0 || _elementToFocus$focus.call(elementToFocus, options);
}
}
};
});
// ======================== Select ========================
// >>>>> Select keys
var _useMergedState5 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(defaultSelectedKeys || [], {
value: selectedKeys,
// Legacy convert key to array
postState: function postState(keys) {
if (Array.isArray(keys)) {
return keys;
}
if (keys === null || keys === undefined) {
return EMPTY_LIST;
}
return [keys];
}
}),
_useMergedState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState5, 2),
mergedSelectKeys = _useMergedState6[0],
setMergedSelectKeys = _useMergedState6[1];
// >>>>> Trigger select
var triggerSelection = function triggerSelection(info) {
if (selectable) {
// Insert or Remove
var targetKey = info.key;
var exist = mergedSelectKeys.includes(targetKey);
var newSelectKeys;
if (multiple) {
if (exist) {
newSelectKeys = mergedSelectKeys.filter(function (key) {
return key !== targetKey;
});
} else {
newSelectKeys = [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(mergedSelectKeys), [targetKey]);
}
} else {
newSelectKeys = [targetKey];
}
setMergedSelectKeys(newSelectKeys);
// Trigger event
var selectInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, info), {}, {
selectedKeys: newSelectKeys
});
if (exist) {
onDeselect === null || onDeselect === void 0 || onDeselect(selectInfo);
} else {
onSelect === null || onSelect === void 0 || onSelect(selectInfo);
}
}
// Whatever selectable, always close it
if (!multiple && mergedOpenKeys.length && internalMode !== 'inline') {
triggerOpenKeys(EMPTY_LIST);
}
};
// ========================= Open =========================
/**
* Click for item. SubMenu do not have selection status
*/
var onInternalClick = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (info) {
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_24__.warnItemProp)(info));
triggerSelection(info);
});
var onInternalOpenChange = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_19__["default"])(function (key, open) {
var newOpenKeys = mergedOpenKeys.filter(function (k) {
return k !== key;
});
if (open) {
newOpenKeys.push(key);
} else if (internalMode !== 'inline') {
// We need find all related popup to close
var subPathKeys = getSubPathKeys(key);
newOpenKeys = newOpenKeys.filter(function (k) {
return !subPathKeys.has(k);
});
}
if (!(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_9__["default"])(mergedOpenKeys, newOpenKeys, true)) {
triggerOpenKeys(newOpenKeys, true);
}
});
// ==================== Accessibility =====================
var triggerAccessibilityOpen = function triggerAccessibilityOpen(key, open) {
var nextOpen = open !== null && open !== void 0 ? open : !mergedOpenKeys.includes(key);
onInternalOpenChange(key, nextOpen);
};
var onInternalKeyDown = (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_17__.useAccessibility)(internalMode, mergedActiveKey, isRtl, uuid, containerRef, getKeys, getKeyPath, setMergedActiveKey, triggerAccessibilityOpen, onKeyDown);
// ======================== Effect ========================
react__WEBPACK_IMPORTED_MODULE_11__.useEffect(function () {
setMounted(true);
}, []);
// ======================= Context ========================
var privateContext = react__WEBPACK_IMPORTED_MODULE_11__.useMemo(function () {
return {
_internalRenderMenuItem: _internalRenderMenuItem,
_internalRenderSubMenuItem: _internalRenderSubMenuItem
};
}, [_internalRenderMenuItem, _internalRenderSubMenuItem]);
// ======================== Render ========================
// >>>>> Children
var wrappedChildList = internalMode !== 'horizontal' || disabledOverflow ? childList :
// Need wrap for overflow dropdown that do not response for open
childList.map(function (child, index) {
return (
/*#__PURE__*/
// Always wrap provider to avoid sub node re-mount
react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_14__["default"], {
key: child.key,
overflowDisabled: index > lastVisibleIndex
}, child)
);
});
// >>>>> Container
var container = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
id: id,
ref: containerRef,
prefixCls: "".concat(prefixCls, "-overflow"),
component: "ul",
itemComponent: _MenuItem__WEBPACK_IMPORTED_MODULE_21__["default"],
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, "".concat(prefixCls, "-root"), "".concat(prefixCls, "-").concat(internalMode), className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-inline-collapsed"), internalInlineCollapsed), "".concat(prefixCls, "-rtl"), isRtl), rootClassName),
dir: direction,
style: style,
role: "menu",
tabIndex: tabIndex,
data: wrappedChildList,
renderRawItem: function renderRawItem(node) {
return node;
},
renderRawRest: function renderRawRest(omitItems) {
// We use origin list since wrapped list use context to prevent open
var len = omitItems.length;
var originOmitItems = len ? childList.slice(-len) : null;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_SubMenu__WEBPACK_IMPORTED_MODULE_22__["default"], {
eventKey: _hooks_useKeyRecords__WEBPACK_IMPORTED_MODULE_18__.OVERFLOW_KEY,
title: overflowedIndicator,
disabled: allVisible,
internalPopupClose: len === 0,
popupClassName: overflowedIndicatorPopupClassName
}, originOmitItems);
},
maxCount: internalMode !== 'horizontal' || disabledOverflow ? rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].INVALIDATE : rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].RESPONSIVE,
ssr: "full",
"data-menu-list": true,
onVisibleChange: function onVisibleChange(newLastIndex) {
setLastVisibleIndex(newLastIndex);
},
onKeyDown: onInternalKeyDown
}, restProps));
// >>>>> Render
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_16__["default"].Provider, {
value: privateContext
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_IdContext__WEBPACK_IMPORTED_MODULE_13__.IdContext.Provider, {
value: uuid
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_14__["default"], {
prefixCls: prefixCls,
rootClassName: rootClassName,
mode: internalMode,
openKeys: mergedOpenKeys,
rtl: isRtl
// Disabled
,
disabled: disabled
// Motion
,
motion: mounted ? motion : null,
defaultMotions: mounted ? defaultMotions : null
// Active
,
activeKey: mergedActiveKey,
onActive: onActive,
onInactive: onInactive
// Selection
,
selectedKeys: mergedSelectKeys
// Level
,
inlineIndent: inlineIndent
// Popup
,
subMenuOpenDelay: subMenuOpenDelay,
subMenuCloseDelay: subMenuCloseDelay,
forceSubMenuRender: forceSubMenuRender,
builtinPlacements: builtinPlacements,
triggerSubMenuAction: triggerSubMenuAction,
getPopupContainer: getPopupContainer
// Icon
,
itemIcon: itemIcon,
expandIcon: expandIcon
// Events
,
onItemClick: onInternalClick,
onOpenChange: onInternalOpenChange
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_15__.PathUserContext.Provider, {
value: pathUserContext
}, container), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement("div", {
style: {
display: 'none'
},
"aria-hidden": true
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_11__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_15__.PathRegisterContext.Provider, {
value: registerPathContext
}, measureChildList)))));
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Menu);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/MenuItem.js":
/*!****************************************************!*\
!*** ../../../node_modules/rc-menu/es/MenuItem.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js");
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js");
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js");
/* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js");
/* harmony import */ var _hooks_useActive__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useActive */ "../../../node_modules/rc-menu/es/hooks/useActive.js");
/* harmony import */ var _hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./hooks/useDirectionStyle */ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js");
/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./Icon */ "../../../node_modules/rc-menu/es/Icon.js");
/* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js");
var _excluded = ["title", "attribute", "elementRef"],
_excluded2 = ["style", "className", "eventKey", "warnKey", "disabled", "itemIcon", "children", "role", "onMouseEnter", "onMouseLeave", "onClick", "onKeyDown", "onFocus"],
_excluded3 = ["active"];
// Since Menu event provide the `info.item` which point to the MenuItem node instance.
// We have to use class component here.
// This should be removed from doc & api in future.
var LegacyMenuItem = /*#__PURE__*/function (_React$Component) {
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_7__["default"])(LegacyMenuItem, _React$Component);
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_8__["default"])(LegacyMenuItem);
function LegacyMenuItem() {
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__["default"])(this, LegacyMenuItem);
return _super.apply(this, arguments);
}
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__["default"])(LegacyMenuItem, [{
key: "render",
value: function render() {
var _this$props = this.props,
title = _this$props.title,
attribute = _this$props.attribute,
elementRef = _this$props.elementRef,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_this$props, _excluded);
// Here the props are eventually passed to the DOM element.
// React does not recognize non-standard attributes.
// Therefore, remove the props that is not used here.
// ref: https://github.com/ant-design/ant-design/issues/41395
var passedProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps, ['eventKey', 'popupClassName', 'popupOffset', 'onTitleClick']);
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(!attribute, '`attribute` of Menu.Item is deprecated. Please pass attribute directly.');
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_10__["default"].Item, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({}, attribute, {
title: typeof title === 'string' ? title : undefined
}, passedProps, {
ref: elementRef
}));
}
}]);
return LegacyMenuItem;
}(react__WEBPACK_IMPORTED_MODULE_15__.Component);
/**
* Real Menu Item component
*/
var InternalMenuItem = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.forwardRef(function (props, ref) {
var style = props.style,
className = props.className,
eventKey = props.eventKey,
warnKey = props.warnKey,
disabled = props.disabled,
itemIcon = props.itemIcon,
children = props.children,
role = props.role,
onMouseEnter = props.onMouseEnter,
onMouseLeave = props.onMouseLeave,
onClick = props.onClick,
onKeyDown = props.onKeyDown,
onFocus = props.onFocus,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded2);
var domDataId = (0,_context_IdContext__WEBPACK_IMPORTED_MODULE_16__.useMenuId)(eventKey);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_17__.MenuContext),
prefixCls = _React$useContext.prefixCls,
onItemClick = _React$useContext.onItemClick,
contextDisabled = _React$useContext.disabled,
overflowDisabled = _React$useContext.overflowDisabled,
contextItemIcon = _React$useContext.itemIcon,
selectedKeys = _React$useContext.selectedKeys,
onActive = _React$useContext.onActive;
var _React$useContext2 = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_19__["default"]),
_internalRenderMenuItem = _React$useContext2._internalRenderMenuItem;
var itemCls = "".concat(prefixCls, "-item");
var legacyMenuItemRef = react__WEBPACK_IMPORTED_MODULE_15__.useRef();
var elementRef = react__WEBPACK_IMPORTED_MODULE_15__.useRef();
var mergedDisabled = contextDisabled || disabled;
var mergedEleRef = (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_13__.useComposeRef)(ref, elementRef);
var connectedKeys = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useFullPath)(eventKey);
// ================================ Warn ================================
if ( true && warnKey) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(false, 'MenuItem should not leave undefined `key`.');
}
// ============================= Info =============================
var getEventInfo = function getEventInfo(e) {
return {
key: eventKey,
// Note: For legacy code is reversed which not like other antd component
keyPath: (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])(connectedKeys).reverse(),
item: legacyMenuItemRef.current,
domEvent: e
};
};
// ============================= Icon =============================
var mergedItemIcon = itemIcon || contextItemIcon;
// ============================ Active ============================
var _useActive = (0,_hooks_useActive__WEBPACK_IMPORTED_MODULE_20__["default"])(eventKey, mergedDisabled, onMouseEnter, onMouseLeave),
active = _useActive.active,
activeProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_useActive, _excluded3);
// ============================ Select ============================
var selected = selectedKeys.includes(eventKey);
// ======================== DirectionStyle ========================
var directionStyle = (0,_hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_21__["default"])(connectedKeys.length);
// ============================ Events ============================
var onInternalClick = function onInternalClick(e) {
if (mergedDisabled) {
return;
}
var info = getEventInfo(e);
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__.warnItemProp)(info));
onItemClick(info);
};
var onInternalKeyDown = function onInternalKeyDown(e) {
onKeyDown === null || onKeyDown === void 0 || onKeyDown(e);
if (e.which === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_11__["default"].ENTER) {
var info = getEventInfo(e);
// Legacy. Key will also trigger click event
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_23__.warnItemProp)(info));
onItemClick(info);
}
};
/**
* Used for accessibility. Helper will focus element without key board.
* We should manually trigger an active
*/
var onInternalFocus = function onInternalFocus(e) {
onActive(eventKey);
onFocus === null || onFocus === void 0 || onFocus(e);
};
// ============================ Render ============================
var optionRoleProps = {};
if (props.role === 'option') {
optionRoleProps['aria-selected'] = selected;
}
var renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(LegacyMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({
ref: legacyMenuItemRef,
elementRef: mergedEleRef,
role: role === null ? 'none' : role || 'menuitem',
tabIndex: disabled ? null : -1,
"data-menu-id": overflowDisabled && domDataId ? null : domDataId
}, (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps, ['extra']), activeProps, optionRoleProps, {
component: "li",
"aria-disabled": disabled,
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, directionStyle), style),
className: classnames__WEBPACK_IMPORTED_MODULE_9___default()(itemCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(itemCls, "-active"), active), "".concat(itemCls, "-selected"), selected), "".concat(itemCls, "-disabled"), mergedDisabled), className),
onClick: onInternalClick,
onKeyDown: onInternalKeyDown,
onFocus: onInternalFocus
}), children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_22__["default"], {
props: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props), {}, {
isSelected: selected
}),
icon: mergedItemIcon
}));
if (_internalRenderMenuItem) {
renderNode = _internalRenderMenuItem(renderNode, props, {
selected: selected
});
}
return renderNode;
});
function MenuItem(props, ref) {
var eventKey = props.eventKey;
// ==================== Record KeyPath ====================
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useMeasure)();
var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_18__.useFullPath)(eventKey);
// eslint-disable-next-line consistent-return
react__WEBPACK_IMPORTED_MODULE_15__.useEffect(function () {
if (measure) {
measure.registerPath(eventKey, connectedKeyPath);
return function () {
measure.unregisterPath(eventKey, connectedKeyPath);
};
}
}, [connectedKeyPath]);
if (measure) {
return null;
}
// ======================== Render ========================
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(InternalMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__["default"])({}, props, {
ref: ref
}));
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.forwardRef(MenuItem));
/***/ }),
/***/ "../../../node_modules/rc-menu/es/MenuItemGroup.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-menu/es/MenuItemGroup.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _utils_commonUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js");
var _excluded = ["className", "title", "eventKey", "children"];
var InternalMenuItemGroup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.forwardRef(function (props, ref) {
var className = props.className,
title = props.title,
eventKey = props.eventKey,
children = props.children,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_4__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_5__.MenuContext),
prefixCls = _React$useContext.prefixCls;
var groupPrefixCls = "".concat(prefixCls, "-item-group");
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("li", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
ref: ref,
role: "presentation"
}, restProps, {
onClick: function onClick(e) {
return e.stopPropagation();
},
className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(groupPrefixCls, className)
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("div", {
role: "presentation",
className: "".concat(groupPrefixCls, "-title"),
title: typeof title === 'string' ? title : undefined
}, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("ul", {
role: "group",
className: "".concat(groupPrefixCls, "-list")
}, children));
});
var MenuItemGroup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.forwardRef(function (props, ref) {
var eventKey = props.eventKey,
children = props.children;
var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_6__.useFullPath)(eventKey);
var childList = (0,_utils_commonUtil__WEBPACK_IMPORTED_MODULE_7__.parseChildren)(children, connectedKeyPath);
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_6__.useMeasure)();
if (measure) {
return childList;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(InternalMenuItemGroup, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
ref: ref
}, (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_3__["default"])(props, ['warnKey'])), childList);
});
if (true) {
MenuItemGroup.displayName = 'MenuItemGroup';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MenuItemGroup);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js":
/*!*********************************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ InlineSubMenuList)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js");
/* harmony import */ var _utils_motionUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/motionUtil */ "../../../node_modules/rc-menu/es/utils/motionUtil.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _SubMenuList__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./SubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js");
function InlineSubMenuList(_ref) {
var id = _ref.id,
open = _ref.open,
keyPath = _ref.keyPath,
children = _ref.children;
var fixedMode = 'inline';
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_6__.MenuContext),
prefixCls = _React$useContext.prefixCls,
forceSubMenuRender = _React$useContext.forceSubMenuRender,
motion = _React$useContext.motion,
defaultMotions = _React$useContext.defaultMotions,
mode = _React$useContext.mode;
// Always use latest mode check
var sameModeRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false);
sameModeRef.current = mode === fixedMode;
// We record `destroy` mark here since when mode change from `inline` to others.
// The inline list should remove when motion end.
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(!sameModeRef.current),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2),
destroy = _React$useState2[0],
setDestroy = _React$useState2[1];
var mergedOpen = sameModeRef.current ? open : false;
// ================================= Effect =================================
// Reset destroy state when mode change back
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
if (sameModeRef.current) {
setDestroy(false);
}
}, [mode]);
// ================================= Render =================================
var mergedMotion = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, (0,_utils_motionUtil__WEBPACK_IMPORTED_MODULE_5__.getMotion)(fixedMode, motion, defaultMotions));
// No need appear since nest inlineCollapse changed
if (keyPath.length > 1) {
mergedMotion.motionAppear = false;
}
// Hide inline list when mode changed and motion end
var originOnVisibleChanged = mergedMotion.onVisibleChanged;
mergedMotion.onVisibleChanged = function (newVisible) {
if (!sameModeRef.current && !newVisible) {
setDestroy(true);
}
return originOnVisibleChanged === null || originOnVisibleChanged === void 0 ? void 0 : originOnVisibleChanged(newVisible);
};
if (destroy) {
return null;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_6__["default"], {
mode: fixedMode,
locked: !sameModeRef.current
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(rc_motion__WEBPACK_IMPORTED_MODULE_4__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
visible: mergedOpen
}, mergedMotion, {
forceRender: forceSubMenuRender,
removeOnLeave: false,
leavedClassName: "".concat(prefixCls, "-hidden")
}), function (_ref2) {
var motionClassName = _ref2.className,
motionStyle = _ref2.style;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_SubMenuList__WEBPACK_IMPORTED_MODULE_7__["default"], {
id: id,
className: motionClassName,
style: motionStyle
}, children);
}));
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ PopupTrigger)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _placements__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../placements */ "../../../node_modules/rc-menu/es/placements.js");
/* harmony import */ var _utils_motionUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/motionUtil */ "../../../node_modules/rc-menu/es/utils/motionUtil.js");
var popupPlacementMap = {
horizontal: 'bottomLeft',
vertical: 'rightTop',
'vertical-left': 'rightTop',
'vertical-right': 'leftTop'
};
function PopupTrigger(_ref) {
var prefixCls = _ref.prefixCls,
visible = _ref.visible,
children = _ref.children,
popup = _ref.popup,
popupStyle = _ref.popupStyle,
popupClassName = _ref.popupClassName,
popupOffset = _ref.popupOffset,
disabled = _ref.disabled,
mode = _ref.mode,
onVisibleChange = _ref.onVisibleChange;
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_7__.MenuContext),
getPopupContainer = _React$useContext.getPopupContainer,
rtl = _React$useContext.rtl,
subMenuOpenDelay = _React$useContext.subMenuOpenDelay,
subMenuCloseDelay = _React$useContext.subMenuCloseDelay,
builtinPlacements = _React$useContext.builtinPlacements,
triggerSubMenuAction = _React$useContext.triggerSubMenuAction,
forceSubMenuRender = _React$useContext.forceSubMenuRender,
rootClassName = _React$useContext.rootClassName,
motion = _React$useContext.motion,
defaultMotions = _React$useContext.defaultMotions;
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2),
innerVisible = _React$useState2[0],
setInnerVisible = _React$useState2[1];
var placement = rtl ? (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _placements__WEBPACK_IMPORTED_MODULE_8__.placementsRtl), builtinPlacements) : (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _placements__WEBPACK_IMPORTED_MODULE_8__.placements), builtinPlacements);
var popupPlacement = popupPlacementMap[mode];
var targetMotion = (0,_utils_motionUtil__WEBPACK_IMPORTED_MODULE_9__.getMotion)(mode, motion, defaultMotions);
var targetMotionRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(targetMotion);
if (mode !== 'inline') {
/**
* PopupTrigger is only used for vertical and horizontal types.
* When collapsed is unfolded, the inline animation will destroy the vertical animation.
*/
targetMotionRef.current = targetMotion;
}
var mergedMotion = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, targetMotionRef.current), {}, {
leavedClassName: "".concat(prefixCls, "-hidden"),
removeOnLeave: false,
motionAppear: true
});
// Delay to change visible
var visibleRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef();
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
visibleRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__["default"])(function () {
setInnerVisible(visible);
});
return function () {
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_6__["default"].cancel(visibleRef.current);
};
}, [visible]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__["default"], {
prefixCls: prefixCls,
popupClassName: classnames__WEBPACK_IMPORTED_MODULE_5___default()("".concat(prefixCls, "-popup"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(prefixCls, "-rtl"), rtl), popupClassName, rootClassName),
stretch: mode === 'horizontal' ? 'minWidth' : null,
getPopupContainer: getPopupContainer,
builtinPlacements: placement,
popupPlacement: popupPlacement,
popupVisible: innerVisible,
popup: popup,
popupStyle: popupStyle,
popupAlign: popupOffset && {
offset: popupOffset
},
action: disabled ? [] : [triggerSubMenuAction],
mouseEnterDelay: subMenuOpenDelay,
mouseLeaveDelay: subMenuCloseDelay,
onPopupVisibleChange: onVisibleChange,
forceRender: forceSubMenuRender,
popupMotion: mergedMotion,
fresh: true
}, children);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
var _excluded = ["className", "children"];
var InternalSubMenuList = function InternalSubMenuList(_ref, ref) {
var className = _ref.className,
children = _ref.children,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, _excluded);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_4__.MenuContext),
prefixCls = _React$useContext.prefixCls,
mode = _React$useContext.mode,
rtl = _React$useContext.rtl;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("ul", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(prefixCls, rtl && "".concat(prefixCls, "-rtl"), "".concat(prefixCls, "-sub"), "".concat(prefixCls, "-").concat(mode === 'inline' ? 'inline' : 'vertical'), className),
role: "menu"
}, restProps, {
"data-menu-list": true,
ref: ref
}), children);
};
var SubMenuList = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(InternalSubMenuList);
SubMenuList.displayName = 'SubMenuList';
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SubMenuList);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/SubMenu/index.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-menu/es/SubMenu/index.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var _SubMenuList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./SubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/SubMenuList.js");
/* harmony import */ var _utils_commonUtil__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js");
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
/* harmony import */ var _hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../hooks/useMemoCallback */ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js");
/* harmony import */ var _PopupTrigger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./PopupTrigger */ "../../../node_modules/rc-menu/es/SubMenu/PopupTrigger.js");
/* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Icon */ "../../../node_modules/rc-menu/es/Icon.js");
/* harmony import */ var _hooks_useActive__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../hooks/useActive */ "../../../node_modules/rc-menu/es/hooks/useActive.js");
/* harmony import */ var _utils_warnUtil__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../utils/warnUtil */ "../../../node_modules/rc-menu/es/utils/warnUtil.js");
/* harmony import */ var _hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../hooks/useDirectionStyle */ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js");
/* harmony import */ var _InlineSubMenuList__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./InlineSubMenuList */ "../../../node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
/* harmony import */ var _context_PrivateContext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../context/PrivateContext */ "../../../node_modules/rc-menu/es/context/PrivateContext.js");
var _excluded = ["style", "className", "title", "eventKey", "warnKey", "disabled", "internalPopupClose", "children", "itemIcon", "expandIcon", "popupClassName", "popupOffset", "popupStyle", "onClick", "onMouseEnter", "onMouseLeave", "onTitleClick", "onTitleMouseEnter", "onTitleMouseLeave"],
_excluded2 = ["active"];
var InternalSubMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.forwardRef(function (props, ref) {
var style = props.style,
className = props.className,
title = props.title,
eventKey = props.eventKey,
warnKey = props.warnKey,
disabled = props.disabled,
internalPopupClose = props.internalPopupClose,
children = props.children,
itemIcon = props.itemIcon,
expandIcon = props.expandIcon,
popupClassName = props.popupClassName,
popupOffset = props.popupOffset,
popupStyle = props.popupStyle,
onClick = props.onClick,
onMouseEnter = props.onMouseEnter,
onMouseLeave = props.onMouseLeave,
onTitleClick = props.onTitleClick,
onTitleMouseEnter = props.onTitleMouseEnter,
onTitleMouseLeave = props.onTitleMouseLeave,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded);
var domDataId = (0,_context_IdContext__WEBPACK_IMPORTED_MODULE_20__.useMenuId)(eventKey);
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__.MenuContext),
prefixCls = _React$useContext.prefixCls,
mode = _React$useContext.mode,
openKeys = _React$useContext.openKeys,
contextDisabled = _React$useContext.disabled,
overflowDisabled = _React$useContext.overflowDisabled,
activeKey = _React$useContext.activeKey,
selectedKeys = _React$useContext.selectedKeys,
contextItemIcon = _React$useContext.itemIcon,
contextExpandIcon = _React$useContext.expandIcon,
onItemClick = _React$useContext.onItemClick,
onOpenChange = _React$useContext.onOpenChange,
onActive = _React$useContext.onActive;
var _React$useContext2 = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_PrivateContext__WEBPACK_IMPORTED_MODULE_21__["default"]),
_internalRenderSubMenuItem = _React$useContext2._internalRenderSubMenuItem;
var _React$useContext3 = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.PathUserContext),
isSubPathKey = _React$useContext3.isSubPathKey;
var connectedPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useFullPath)();
var subMenuPrefixCls = "".concat(prefixCls, "-submenu");
var mergedDisabled = contextDisabled || disabled;
var elementRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef();
var popupRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef();
// ================================ Warn ================================
if ( true && warnKey) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__["default"])(false, 'SubMenu should not leave undefined `key`.');
}
// ================================ Icon ================================
var mergedItemIcon = itemIcon !== null && itemIcon !== void 0 ? itemIcon : contextItemIcon;
var mergedExpandIcon = expandIcon !== null && expandIcon !== void 0 ? expandIcon : contextExpandIcon;
// ================================ Open ================================
var originOpen = openKeys.includes(eventKey);
var open = !overflowDisabled && originOpen;
// =============================== Select ===============================
var childrenSelected = isSubPathKey(selectedKeys, eventKey);
// =============================== Active ===============================
var _useActive = (0,_hooks_useActive__WEBPACK_IMPORTED_MODULE_15__["default"])(eventKey, mergedDisabled, onTitleMouseEnter, onTitleMouseLeave),
active = _useActive.active,
activeProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_useActive, _excluded2);
// Fallback of active check to avoid hover on menu title or disabled item
var _React$useState = react__WEBPACK_IMPORTED_MODULE_5__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2),
childrenActive = _React$useState2[0],
setChildrenActive = _React$useState2[1];
var triggerChildrenActive = function triggerChildrenActive(newActive) {
if (!mergedDisabled) {
setChildrenActive(newActive);
}
};
var onInternalMouseEnter = function onInternalMouseEnter(domEvent) {
triggerChildrenActive(true);
onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({
key: eventKey,
domEvent: domEvent
});
};
var onInternalMouseLeave = function onInternalMouseLeave(domEvent) {
triggerChildrenActive(false);
onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({
key: eventKey,
domEvent: domEvent
});
};
var mergedActive = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () {
if (active) {
return active;
}
if (mode !== 'inline') {
return childrenActive || isSubPathKey([activeKey], eventKey);
}
return false;
}, [mode, active, activeKey, childrenActive, eventKey, isSubPathKey]);
// ========================== DirectionStyle ==========================
var directionStyle = (0,_hooks_useDirectionStyle__WEBPACK_IMPORTED_MODULE_17__["default"])(connectedPath.length);
// =============================== Events ===============================
// >>>> Title click
var onInternalTitleClick = function onInternalTitleClick(e) {
// Skip if disabled
if (mergedDisabled) {
return;
}
onTitleClick === null || onTitleClick === void 0 || onTitleClick({
key: eventKey,
domEvent: e
});
// Trigger open by click when mode is `inline`
if (mode === 'inline') {
onOpenChange(eventKey, !originOpen);
}
};
// >>>> Context for children click
var onMergedItemClick = (0,_hooks_useMemoCallback__WEBPACK_IMPORTED_MODULE_12__["default"])(function (info) {
onClick === null || onClick === void 0 || onClick((0,_utils_warnUtil__WEBPACK_IMPORTED_MODULE_16__.warnItemProp)(info));
onItemClick(info);
});
// >>>>> Visible change
var onPopupVisibleChange = function onPopupVisibleChange(newVisible) {
if (mode !== 'inline') {
onOpenChange(eventKey, newVisible);
}
};
/**
* Used for accessibility. Helper will focus element without key board.
* We should manually trigger an active
*/
var onInternalFocus = function onInternalFocus() {
onActive(eventKey);
};
// =============================== Render ===============================
var popupId = domDataId && "".concat(domDataId, "-popup");
var expandIconNode = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_14__["default"], {
icon: mode !== 'horizontal' ? mergedExpandIcon : undefined,
props: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, {
isOpen: open,
// [Legacy] Not sure why need this mark
isSubMenu: true
})
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("i", {
className: "".concat(subMenuPrefixCls, "-arrow")
}));
}, [mode, mergedExpandIcon, props, open, subMenuPrefixCls]);
// >>>>> Title
var titleNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
role: "menuitem",
style: directionStyle,
className: "".concat(subMenuPrefixCls, "-title"),
tabIndex: mergedDisabled ? null : -1,
ref: elementRef,
title: typeof title === 'string' ? title : null,
"data-menu-id": overflowDisabled && domDataId ? null : domDataId,
"aria-expanded": open,
"aria-haspopup": true,
"aria-controls": popupId,
"aria-disabled": mergedDisabled,
onClick: onInternalTitleClick,
onFocus: onInternalFocus
}, activeProps), title, expandIconNode);
// Cache mode if it change to `inline` which do not have popup motion
var triggerModeRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(mode);
if (mode !== 'inline' && connectedPath.length > 1) {
triggerModeRef.current = 'vertical';
} else {
triggerModeRef.current = mode;
}
if (!overflowDisabled) {
var triggerMode = triggerModeRef.current;
// Still wrap with Trigger here since we need avoid react re-mount dom node
// Which makes motion failed
titleNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_PopupTrigger__WEBPACK_IMPORTED_MODULE_13__["default"], {
mode: triggerMode,
prefixCls: subMenuPrefixCls,
visible: !internalPopupClose && open && mode !== 'inline',
popupClassName: popupClassName,
popupOffset: popupOffset,
popupStyle: popupStyle,
popup: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__["default"]
// Special handle of horizontal mode
, {
mode: triggerMode === 'horizontal' ? 'vertical' : triggerMode
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_SubMenuList__WEBPACK_IMPORTED_MODULE_9__["default"], {
id: popupId,
ref: popupRef
}, children)),
disabled: mergedDisabled,
onVisibleChange: onPopupVisibleChange
}, titleNode);
}
// >>>>> List node
var listNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_7__["default"].Item, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
ref: ref,
role: "none"
}, restProps, {
component: "li",
style: style,
className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(subMenuPrefixCls, "".concat(subMenuPrefixCls, "-").concat(mode), className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(subMenuPrefixCls, "-open"), open), "".concat(subMenuPrefixCls, "-active"), mergedActive), "".concat(subMenuPrefixCls, "-selected"), childrenSelected), "".concat(subMenuPrefixCls, "-disabled"), mergedDisabled)),
onMouseEnter: onInternalMouseEnter,
onMouseLeave: onInternalMouseLeave
}), titleNode, !overflowDisabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_InlineSubMenuList__WEBPACK_IMPORTED_MODULE_18__["default"], {
id: popupId,
open: open,
keyPath: connectedPath
}, children));
if (_internalRenderSubMenuItem) {
listNode = _internalRenderSubMenuItem(listNode, props, {
selected: childrenSelected,
active: mergedActive,
open: open,
disabled: mergedDisabled
});
}
// >>>>> Render
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_MenuContext__WEBPACK_IMPORTED_MODULE_11__["default"], {
onItemClick: onMergedItemClick,
mode: mode === 'horizontal' ? 'vertical' : mode,
itemIcon: mergedItemIcon,
expandIcon: mergedExpandIcon
}, listNode);
});
var SubMenu = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.forwardRef(function (props, ref) {
var eventKey = props.eventKey,
children = props.children;
var connectedKeyPath = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useFullPath)(eventKey);
var childList = (0,_utils_commonUtil__WEBPACK_IMPORTED_MODULE_10__.parseChildren)(children, connectedKeyPath);
// ==================== Record KeyPath ====================
var measure = (0,_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.useMeasure)();
// eslint-disable-next-line consistent-return
react__WEBPACK_IMPORTED_MODULE_5__.useEffect(function () {
if (measure) {
measure.registerPath(eventKey, connectedKeyPath);
return function () {
measure.unregisterPath(eventKey, connectedKeyPath);
};
}
}, [connectedKeyPath]);
var renderNode;
// ======================== Render ========================
if (measure) {
renderNode = childList;
} else {
renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(InternalSubMenu, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
ref: ref
}, props), childList);
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context_PathContext__WEBPACK_IMPORTED_MODULE_19__.PathTrackerContext.Provider, {
value: connectedKeyPath
}, renderNode);
});
if (true) {
SubMenu.displayName = 'SubMenu';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SubMenu);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/IdContext.js":
/*!*************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/IdContext.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ IdContext: () => (/* binding */ IdContext),
/* harmony export */ getMenuId: () => (/* binding */ getMenuId),
/* harmony export */ useMenuId: () => (/* binding */ useMenuId)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var IdContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
function getMenuId(uuid, eventKey) {
if (uuid === undefined) {
return null;
}
return "".concat(uuid, "-").concat(eventKey);
}
/**
* Get `data-menu-id`
*/
function useMenuId(eventKey) {
var id = react__WEBPACK_IMPORTED_MODULE_0__.useContext(IdContext);
return getMenuId(id, eventKey);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/MenuContext.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/MenuContext.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ MenuContext: () => (/* binding */ MenuContext),
/* harmony export */ "default": () => (/* binding */ InheritableContextProvider)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var rc_util_es_hooks_useMemo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/hooks/useMemo */ "../../../node_modules/rc-util/es/hooks/useMemo.js");
/* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js");
var _excluded = ["children", "locked"];
var MenuContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createContext(null);
function mergeProps(origin, target) {
var clone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, origin);
Object.keys(target).forEach(function (key) {
var value = target[key];
if (value !== undefined) {
clone[key] = value;
}
});
return clone;
}
function InheritableContextProvider(_ref) {
var children = _ref.children,
locked = _ref.locked,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
var context = react__WEBPACK_IMPORTED_MODULE_2__.useContext(MenuContext);
var inheritableContext = (0,rc_util_es_hooks_useMemo__WEBPACK_IMPORTED_MODULE_3__["default"])(function () {
return mergeProps(context, restProps);
}, [context, restProps], function (prev, next) {
return !locked && (prev[0] !== next[0] || !(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_4__["default"])(prev[1], next[1], true));
});
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(MenuContext.Provider, {
value: inheritableContext
}, children);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/PathContext.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/PathContext.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ PathRegisterContext: () => (/* binding */ PathRegisterContext),
/* harmony export */ PathTrackerContext: () => (/* binding */ PathTrackerContext),
/* harmony export */ PathUserContext: () => (/* binding */ PathUserContext),
/* harmony export */ useFullPath: () => (/* binding */ useFullPath),
/* harmony export */ useMeasure: () => (/* binding */ useMeasure)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
var EmptyList = [];
// ========================= Path Register =========================
var PathRegisterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
function useMeasure() {
return react__WEBPACK_IMPORTED_MODULE_1__.useContext(PathRegisterContext);
}
// ========================= Path Tracker ==========================
var PathTrackerContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(EmptyList);
function useFullPath(eventKey) {
var parentKeyPath = react__WEBPACK_IMPORTED_MODULE_1__.useContext(PathTrackerContext);
return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () {
return eventKey !== undefined ? [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(parentKeyPath), [eventKey]) : parentKeyPath;
}, [parentKeyPath, eventKey]);
}
// =========================== Path User ===========================
var PathUserContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext(null);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/context/PrivateContext.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-menu/es/context/PrivateContext.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var PrivateContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PrivateContext);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useAccessibility.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useAccessibility.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getFocusableElements: () => (/* binding */ getFocusableElements),
/* harmony export */ refreshElements: () => (/* binding */ refreshElements),
/* harmony export */ useAccessibility: () => (/* binding */ useAccessibility)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var rc_util_es_Dom_focus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/focus */ "../../../node_modules/rc-util/es/Dom/focus.js");
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _context_IdContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context/IdContext */ "../../../node_modules/rc-menu/es/context/IdContext.js");
// destruct to reduce minify size
var LEFT = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].LEFT,
RIGHT = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].RIGHT,
UP = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].UP,
DOWN = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].DOWN,
ENTER = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].ENTER,
ESC = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].ESC,
HOME = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].HOME,
END = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_2__["default"].END;
var ArrowKeys = [UP, DOWN, LEFT, RIGHT];
function getOffset(mode, isRootLevel, isRtl, which) {
var _offsets;
var prev = 'prev';
var next = 'next';
var children = 'children';
var parent = 'parent';
// Inline enter is special that we use unique operation
if (mode === 'inline' && which === ENTER) {
return {
inlineTrigger: true
};
}
var inline = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, UP, prev), DOWN, next);
var horizontal = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, LEFT, isRtl ? next : prev), RIGHT, isRtl ? prev : next), DOWN, children), ENTER, children);
var vertical = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, UP, prev), DOWN, next), ENTER, children), ESC, parent), LEFT, isRtl ? children : parent), RIGHT, isRtl ? parent : children);
var offsets = {
inline: inline,
horizontal: horizontal,
vertical: vertical,
inlineSub: inline,
horizontalSub: vertical,
verticalSub: vertical
};
var type = (_offsets = offsets["".concat(mode).concat(isRootLevel ? '' : 'Sub')]) === null || _offsets === void 0 ? void 0 : _offsets[which];
switch (type) {
case prev:
return {
offset: -1,
sibling: true
};
case next:
return {
offset: 1,
sibling: true
};
case parent:
return {
offset: -1,
sibling: false
};
case children:
return {
offset: 1,
sibling: false
};
default:
return null;
}
}
function findContainerUL(element) {
var current = element;
while (current) {
if (current.getAttribute('data-menu-list')) {
return current;
}
current = current.parentElement;
}
// Normally should not reach this line
/* istanbul ignore next */
return null;
}
/**
* Find focused element within element set provided
*/
function getFocusElement(activeElement, elements) {
var current = activeElement || document.activeElement;
while (current) {
if (elements.has(current)) {
return current;
}
current = current.parentElement;
}
return null;
}
/**
* Get focusable elements from the element set under provided container
*/
function getFocusableElements(container, elements) {
var list = (0,rc_util_es_Dom_focus__WEBPACK_IMPORTED_MODULE_1__.getFocusNodeList)(container, true);
return list.filter(function (ele) {
return elements.has(ele);
});
}
function getNextFocusElement(parentQueryContainer, elements, focusMenuElement) {
var offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
// Key on the menu item will not get validate parent container
if (!parentQueryContainer) {
return null;
}
// List current level menu item elements
var sameLevelFocusableMenuElementList = getFocusableElements(parentQueryContainer, elements);
// Find next focus index
var count = sameLevelFocusableMenuElementList.length;
var focusIndex = sameLevelFocusableMenuElementList.findIndex(function (ele) {
return focusMenuElement === ele;
});
if (offset < 0) {
if (focusIndex === -1) {
focusIndex = count - 1;
} else {
focusIndex -= 1;
}
} else if (offset > 0) {
focusIndex += 1;
}
focusIndex = (focusIndex + count) % count;
// Focus menu item
return sameLevelFocusableMenuElementList[focusIndex];
}
var refreshElements = function refreshElements(keys, id) {
var elements = new Set();
var key2element = new Map();
var element2key = new Map();
keys.forEach(function (key) {
var element = document.querySelector("[data-menu-id='".concat((0,_context_IdContext__WEBPACK_IMPORTED_MODULE_5__.getMenuId)(id, key), "']"));
if (element) {
elements.add(element);
element2key.set(element, key);
key2element.set(key, element);
}
});
return {
elements: elements,
key2element: key2element,
element2key: element2key
};
};
function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKeys, getKeyPath, triggerActiveKey, triggerAccessibilityOpen, originOnKeyDown) {
var rafRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef();
var activeRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef();
activeRef.current = activeKey;
var cleanRaf = function cleanRaf() {
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"].cancel(rafRef.current);
};
react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () {
return function () {
cleanRaf();
};
}, []);
return function (e) {
var which = e.which;
if ([].concat(ArrowKeys, [ENTER, ESC, HOME, END]).includes(which)) {
var keys = getKeys();
var refreshedElements = refreshElements(keys, id);
var _refreshedElements = refreshedElements,
elements = _refreshedElements.elements,
key2element = _refreshedElements.key2element,
element2key = _refreshedElements.element2key;
// First we should find current focused MenuItem/SubMenu element
var activeElement = key2element.get(activeKey);
var focusMenuElement = getFocusElement(activeElement, elements);
var focusMenuKey = element2key.get(focusMenuElement);
var offsetObj = getOffset(mode, getKeyPath(focusMenuKey, true).length === 1, isRtl, which);
// Some mode do not have fully arrow operation like inline
if (!offsetObj && which !== HOME && which !== END) {
return;
}
// Arrow prevent default to avoid page scroll
if (ArrowKeys.includes(which) || [HOME, END].includes(which)) {
e.preventDefault();
}
var tryFocus = function tryFocus(menuElement) {
if (menuElement) {
var focusTargetElement = menuElement;
// Focus to link instead of menu item if possible
var link = menuElement.querySelector('a');
if (link !== null && link !== void 0 && link.getAttribute('href')) {
focusTargetElement = link;
}
var targetKey = element2key.get(menuElement);
triggerActiveKey(targetKey);
/**
* Do not `useEffect` here since `tryFocus` may trigger async
* which makes React sync update the `activeKey`
* that force render before `useRef` set the next activeKey
*/
cleanRaf();
rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"])(function () {
if (activeRef.current === targetKey) {
focusTargetElement.focus();
}
});
}
};
if ([HOME, END].includes(which) || offsetObj.sibling || !focusMenuElement) {
// ========================== Sibling ==========================
// Find walkable focus menu element container
var parentQueryContainer;
if (!focusMenuElement || mode === 'inline') {
parentQueryContainer = containerRef.current;
} else {
parentQueryContainer = findContainerUL(focusMenuElement);
}
// Get next focus element
var targetElement;
var focusableElements = getFocusableElements(parentQueryContainer, elements);
if (which === HOME) {
targetElement = focusableElements[0];
} else if (which === END) {
targetElement = focusableElements[focusableElements.length - 1];
} else {
targetElement = getNextFocusElement(parentQueryContainer, elements, focusMenuElement, offsetObj.offset);
}
// Focus menu item
tryFocus(targetElement);
// ======================= InlineTrigger =======================
} else if (offsetObj.inlineTrigger) {
// Inline trigger no need switch to sub menu item
triggerAccessibilityOpen(focusMenuKey);
// =========================== Level ===========================
} else if (offsetObj.offset > 0) {
triggerAccessibilityOpen(focusMenuKey, true);
cleanRaf();
rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_3__["default"])(function () {
// Async should resync elements
refreshedElements = refreshElements(keys, id);
var controlId = focusMenuElement.getAttribute('aria-controls');
var subQueryContainer = document.getElementById(controlId);
// Get sub focusable menu item
var targetElement = getNextFocusElement(subQueryContainer, refreshedElements.elements);
// Focus menu item
tryFocus(targetElement);
}, 5);
} else if (offsetObj.offset < 0) {
var keyPath = getKeyPath(focusMenuKey, true);
var parentKey = keyPath[keyPath.length - 2];
var parentMenuElement = key2element.get(parentKey);
// Focus menu item
triggerAccessibilityOpen(parentKey, false);
tryFocus(parentMenuElement);
}
}
// Pass origin key down event
originOnKeyDown === null || originOnKeyDown === void 0 || originOnKeyDown(e);
};
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useActive.js":
/*!***********************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useActive.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useActive)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
function useActive(eventKey, disabled, onMouseEnter, onMouseLeave) {
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_1__.MenuContext),
activeKey = _React$useContext.activeKey,
onActive = _React$useContext.onActive,
onInactive = _React$useContext.onInactive;
var ret = {
active: activeKey === eventKey
};
// Skip when disabled
if (!disabled) {
ret.onMouseEnter = function (domEvent) {
onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({
key: eventKey,
domEvent: domEvent
});
onActive(eventKey);
};
ret.onMouseLeave = function (domEvent) {
onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({
key: eventKey,
domEvent: domEvent
});
onInactive(eventKey);
};
}
return ret;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js":
/*!*******************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useDirectionStyle.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useDirectionStyle)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _context_MenuContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../context/MenuContext */ "../../../node_modules/rc-menu/es/context/MenuContext.js");
function useDirectionStyle(level) {
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_context_MenuContext__WEBPACK_IMPORTED_MODULE_1__.MenuContext),
mode = _React$useContext.mode,
rtl = _React$useContext.rtl,
inlineIndent = _React$useContext.inlineIndent;
if (mode !== 'inline') {
return null;
}
var len = level;
return rtl ? {
paddingRight: len * inlineIndent
} : {
paddingLeft: len * inlineIndent
};
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useKeyRecords.js":
/*!***************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useKeyRecords.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ OVERFLOW_KEY: () => (/* binding */ OVERFLOW_KEY),
/* harmony export */ "default": () => (/* binding */ useKeyRecords)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
/* harmony import */ var _utils_timeUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/timeUtil */ "../../../node_modules/rc-menu/es/utils/timeUtil.js");
var PATH_SPLIT = '__RC_UTIL_PATH_SPLIT__';
var getPathStr = function getPathStr(keyPath) {
return keyPath.join(PATH_SPLIT);
};
var getPathKeys = function getPathKeys(keyPathStr) {
return keyPathStr.split(PATH_SPLIT);
};
var OVERFLOW_KEY = 'rc-menu-more';
function useKeyRecords() {
var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__.useState({}),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState, 2),
internalForceUpdate = _React$useState2[1];
var key2pathRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(new Map());
var path2keyRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(new Map());
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_2__.useState([]),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState3, 2),
overflowKeys = _React$useState4[0],
setOverflowKeys = _React$useState4[1];
var updateRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(0);
var destroyRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(false);
var forceUpdate = function forceUpdate() {
if (!destroyRef.current) {
internalForceUpdate({});
}
};
var registerPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key, keyPath) {
// Warning for invalidate or duplicated `key`
if (true) {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(!key2pathRef.current.has(key), "Duplicated key '".concat(key, "' used in Menu by path [").concat(keyPath.join(' > '), "]"));
}
// Fill map
var connectedPath = getPathStr(keyPath);
path2keyRef.current.set(connectedPath, key);
key2pathRef.current.set(key, connectedPath);
updateRef.current += 1;
var id = updateRef.current;
(0,_utils_timeUtil__WEBPACK_IMPORTED_MODULE_4__.nextSlice)(function () {
if (id === updateRef.current) {
forceUpdate();
}
});
}, []);
var unregisterPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key, keyPath) {
var connectedPath = getPathStr(keyPath);
path2keyRef.current.delete(connectedPath);
key2pathRef.current.delete(key);
}, []);
var refreshOverflowKeys = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (keys) {
setOverflowKeys(keys);
}, []);
var getKeyPath = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (eventKey, includeOverflow) {
var fullPath = key2pathRef.current.get(eventKey) || '';
var keys = getPathKeys(fullPath);
if (includeOverflow && overflowKeys.includes(keys[0])) {
keys.unshift(OVERFLOW_KEY);
}
return keys;
}, [overflowKeys]);
var isSubPathKey = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (pathKeys, eventKey) {
return pathKeys.filter(function (item) {
return item !== undefined;
}).some(function (pathKey) {
var pathKeyList = getKeyPath(pathKey, true);
return pathKeyList.includes(eventKey);
});
}, [getKeyPath]);
var getKeys = function getKeys() {
var keys = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(key2pathRef.current.keys());
if (overflowKeys.length) {
keys.push(OVERFLOW_KEY);
}
return keys;
};
/**
* Find current key related child path keys
*/
var getSubPathKeys = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (key) {
var connectedPath = "".concat(key2pathRef.current.get(key)).concat(PATH_SPLIT);
var pathKeys = new Set();
(0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(path2keyRef.current.keys()).forEach(function (pathKey) {
if (pathKey.startsWith(connectedPath)) {
pathKeys.add(path2keyRef.current.get(pathKey));
}
});
return pathKeys;
}, []);
react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () {
return function () {
destroyRef.current = true;
};
}, []);
return {
// Register
registerPath: registerPath,
unregisterPath: unregisterPath,
refreshOverflowKeys: refreshOverflowKeys,
// Util
isSubPathKey: isSubPathKey,
getKeyPath: getKeyPath,
getKeys: getKeys,
getSubPathKeys: getSubPathKeys
};
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useMemoCallback.js":
/*!*****************************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useMemoCallback.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useMemoCallback)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/**
* Cache callback function that always return same ref instead.
* This is used for context optimization.
*/
function useMemoCallback(func) {
var funRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(func);
funRef.current = func;
var callback = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function () {
var _funRef$current;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return (_funRef$current = funRef.current) === null || _funRef$current === void 0 ? void 0 : _funRef$current.call.apply(_funRef$current, [funRef].concat(args));
}, []);
return func ? callback : undefined;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/hooks/useUUID.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-menu/es/hooks/useUUID.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useUUID)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.js");
var uniquePrefix = Math.random().toFixed(5).toString().slice(2);
var internalId = 0;
function useUUID(id) {
var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_2__["default"])(id, {
value: id
}),
_useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useMergedState, 2),
uuid = _useMergedState2[0],
setUUID = _useMergedState2[1];
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
internalId += 1;
var newId = false ? 0 : "".concat(uniquePrefix, "-").concat(internalId);
setUUID("rc-menu-uuid-".concat(newId));
}, []);
return uuid;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/index.js":
/*!*************************************************!*\
!*** ../../../node_modules/rc-menu/es/index.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Divider: () => (/* reexport safe */ _Divider__WEBPACK_IMPORTED_MODULE_5__["default"]),
/* harmony export */ Item: () => (/* reexport safe */ _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ ItemGroup: () => (/* reexport safe */ _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"]),
/* harmony export */ MenuItem: () => (/* reexport safe */ _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ MenuItemGroup: () => (/* reexport safe */ _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"]),
/* harmony export */ SubMenu: () => (/* reexport safe */ _SubMenu__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ useFullPath: () => (/* reexport safe */ _context_PathContext__WEBPACK_IMPORTED_MODULE_4__.useFullPath)
/* harmony export */ });
/* harmony import */ var _Menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Menu */ "../../../node_modules/rc-menu/es/Menu.js");
/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js");
/* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js");
/* harmony import */ var _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MenuItemGroup */ "../../../node_modules/rc-menu/es/MenuItemGroup.js");
/* harmony import */ var _context_PathContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./context/PathContext */ "../../../node_modules/rc-menu/es/context/PathContext.js");
/* harmony import */ var _Divider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Divider */ "../../../node_modules/rc-menu/es/Divider.js");
var ExportMenu = _Menu__WEBPACK_IMPORTED_MODULE_0__["default"];
ExportMenu.Item = _MenuItem__WEBPACK_IMPORTED_MODULE_1__["default"];
ExportMenu.SubMenu = _SubMenu__WEBPACK_IMPORTED_MODULE_2__["default"];
ExportMenu.ItemGroup = _MenuItemGroup__WEBPACK_IMPORTED_MODULE_3__["default"];
ExportMenu.Divider = _Divider__WEBPACK_IMPORTED_MODULE_5__["default"];
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExportMenu);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/placements.js":
/*!******************************************************!*\
!*** ../../../node_modules/rc-menu/es/placements.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ placements: () => (/* binding */ placements),
/* harmony export */ placementsRtl: () => (/* binding */ placementsRtl)
/* harmony export */ });
var autoAdjustOverflow = {
adjustX: 1,
adjustY: 1
};
var placements = {
topLeft: {
points: ['bl', 'tl'],
overflow: autoAdjustOverflow
},
topRight: {
points: ['br', 'tr'],
overflow: autoAdjustOverflow
},
bottomLeft: {
points: ['tl', 'bl'],
overflow: autoAdjustOverflow
},
bottomRight: {
points: ['tr', 'br'],
overflow: autoAdjustOverflow
},
leftTop: {
points: ['tr', 'tl'],
overflow: autoAdjustOverflow
},
leftBottom: {
points: ['br', 'bl'],
overflow: autoAdjustOverflow
},
rightTop: {
points: ['tl', 'tr'],
overflow: autoAdjustOverflow
},
rightBottom: {
points: ['bl', 'br'],
overflow: autoAdjustOverflow
}
};
var placementsRtl = {
topLeft: {
points: ['bl', 'tl'],
overflow: autoAdjustOverflow
},
topRight: {
points: ['br', 'tr'],
overflow: autoAdjustOverflow
},
bottomLeft: {
points: ['tl', 'bl'],
overflow: autoAdjustOverflow
},
bottomRight: {
points: ['tr', 'br'],
overflow: autoAdjustOverflow
},
rightTop: {
points: ['tr', 'tl'],
overflow: autoAdjustOverflow
},
rightBottom: {
points: ['br', 'bl'],
overflow: autoAdjustOverflow
},
leftTop: {
points: ['tl', 'tr'],
overflow: autoAdjustOverflow
},
leftBottom: {
points: ['bl', 'br'],
overflow: autoAdjustOverflow
}
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (placements);
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/commonUtil.js":
/*!************************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/commonUtil.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ parseChildren: () => (/* binding */ parseChildren)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "../../../node_modules/rc-util/es/Children/toArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
function parseChildren(children, keyPath) {
return (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_1__["default"])(children).map(function (child, index) {
if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.isValidElement(child)) {
var _eventKey, _child$props;
var key = child.key;
var eventKey = (_eventKey = (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.eventKey) !== null && _eventKey !== void 0 ? _eventKey : key;
var emptyKey = eventKey === null || eventKey === undefined;
if (emptyKey) {
eventKey = "tmp_key-".concat([].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(keyPath), [index]).join('-'));
}
var cloneProps = {
key: eventKey,
eventKey: eventKey
};
if ( true && emptyKey) {
cloneProps.warnKey = true;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(child, cloneProps);
}
return child;
});
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/motionUtil.js":
/*!************************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/motionUtil.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getMotion: () => (/* binding */ getMotion)
/* harmony export */ });
function getMotion(mode, motion, defaultMotions) {
if (motion) {
return motion;
}
if (defaultMotions) {
return defaultMotions[mode] || defaultMotions.other;
}
return undefined;
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/nodeUtil.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/nodeUtil.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ parseItems: () => (/* binding */ parseItems)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _Divider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Divider */ "../../../node_modules/rc-menu/es/Divider.js");
/* harmony import */ var _MenuItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MenuItem */ "../../../node_modules/rc-menu/es/MenuItem.js");
/* harmony import */ var _MenuItemGroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MenuItemGroup */ "../../../node_modules/rc-menu/es/MenuItemGroup.js");
/* harmony import */ var _SubMenu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../SubMenu */ "../../../node_modules/rc-menu/es/SubMenu/index.js");
/* harmony import */ var _commonUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./commonUtil */ "../../../node_modules/rc-menu/es/utils/commonUtil.js");
var _excluded = ["label", "children", "key", "type", "extra"];
function convertItemsToNodes(list, components, prefixCls) {
var MergedMenuItem = components.item,
MergedMenuItemGroup = components.group,
MergedSubMenu = components.submenu,
MergedDivider = components.divider;
return (list || []).map(function (opt, index) {
if (opt && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(opt) === 'object') {
var _ref = opt,
label = _ref.label,
children = _ref.children,
key = _ref.key,
type = _ref.type,
extra = _ref.extra,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(_ref, _excluded);
var mergedKey = key !== null && key !== void 0 ? key : "tmp-".concat(index);
// MenuItemGroup & SubMenuItem
if (children || type === 'group') {
if (type === 'group') {
// Group
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedMenuItemGroup, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps, {
title: label
}), convertItemsToNodes(children, components, prefixCls));
}
// Sub Menu
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedSubMenu, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps, {
title: label
}), convertItemsToNodes(children, components, prefixCls));
}
// MenuItem & Divider
if (type === 'divider') {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedDivider, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps));
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(MergedMenuItem, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
key: mergedKey
}, restProps, {
extra: extra
}), label, (!!extra || extra === 0) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("span", {
className: "".concat(prefixCls, "-item-extra")
}, extra));
}
return null;
}).filter(function (opt) {
return opt;
});
}
function parseItems(children, items, keyPath, components, prefixCls) {
var childNodes = children;
var mergedComponents = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
divider: _Divider__WEBPACK_IMPORTED_MODULE_5__["default"],
item: _MenuItem__WEBPACK_IMPORTED_MODULE_6__["default"],
group: _MenuItemGroup__WEBPACK_IMPORTED_MODULE_7__["default"],
submenu: _SubMenu__WEBPACK_IMPORTED_MODULE_8__["default"]
}, components);
if (items) {
childNodes = convertItemsToNodes(items, mergedComponents, prefixCls);
}
return (0,_commonUtil__WEBPACK_IMPORTED_MODULE_9__.parseChildren)(childNodes, keyPath);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/timeUtil.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/timeUtil.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ nextSlice: () => (/* binding */ nextSlice)
/* harmony export */ });
function nextSlice(callback) {
/* istanbul ignore next */
Promise.resolve().then(callback);
}
/***/ }),
/***/ "../../../node_modules/rc-menu/es/utils/warnUtil.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-menu/es/utils/warnUtil.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ warnItemProp: () => (/* binding */ warnItemProp)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js");
var _excluded = ["item"];
/**
* `onClick` event return `info.item` which point to react node directly.
* We should warning this since it will not work on FC.
*/
function warnItemProp(_ref) {
var item = _ref.item,
restInfo = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
Object.defineProperty(restInfo, 'item', {
get: function get() {
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(false, '`info.item` is deprecated since we will move to function component that not provides React Node instance in future.');
return item;
}
});
return restInfo;
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/CSSMotion.js":
/*!*******************************************************!*\
!*** ../../../node_modules/rc-motion/es/CSSMotion.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ genCSSMotion: () => (/* binding */ genCSSMotion)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/Dom/findDOMNode */ "../../../node_modules/rc-util/es/Dom/findDOMNode.js");
/* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-motion/es/context.js");
/* harmony import */ var _DomWrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./DomWrapper */ "../../../node_modules/rc-motion/es/DomWrapper.js");
/* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./hooks/useStatus */ "../../../node_modules/rc-motion/es/hooks/useStatus.js");
/* harmony import */ var _hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useStepQueue */ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js");
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./interface */ "../../../node_modules/rc-motion/es/interface.js");
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./util/motion */ "../../../node_modules/rc-motion/es/util/motion.js");
/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */
/**
* `transitionSupport` is used for none transition test case.
* Default we use browser transition event support check.
*/
function genCSSMotion(config) {
var transitionSupport = config;
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(config) === 'object') {
transitionSupport = config.transitionSupport;
}
function isSupportTransition(props, contextMotion) {
return !!(props.motionName && transitionSupport && contextMotion !== false);
}
var CSSMotion = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.forwardRef(function (props, ref) {
var _props$visible = props.visible,
visible = _props$visible === void 0 ? true : _props$visible,
_props$removeOnLeave = props.removeOnLeave,
removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,
forceRender = props.forceRender,
children = props.children,
motionName = props.motionName,
leavedClassName = props.leavedClassName,
eventProps = props.eventProps;
var _React$useContext = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_context__WEBPACK_IMPORTED_MODULE_8__.Context),
contextMotion = _React$useContext.motion;
var supportMotion = isSupportTransition(props, contextMotion);
// Ref to the react node, it may be a HTMLElement
var nodeRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)();
// Ref to the dom wrapper in case ref can not pass to HTMLElement
var wrapperNodeRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)();
function getDomElement() {
try {
// Here we're avoiding call for findDOMNode since it's deprecated
// in strict mode. We're calling it only when node ref is not
// an instance of DOM HTMLElement. Otherwise use
// findDOMNode as a final resort
return nodeRef.current instanceof HTMLElement ? nodeRef.current : (0,rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__["default"])(wrapperNodeRef.current);
} catch (e) {
// Only happen when `motionDeadline` trigger but element removed.
return null;
}
}
var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__["default"])(supportMotion, visible, getDomElement, props),
_useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStatus, 4),
status = _useStatus2[0],
statusStep = _useStatus2[1],
statusStyle = _useStatus2[2],
mergedVisible = _useStatus2[3];
// Record whether content has rendered
// Will return null for un-rendered even when `removeOnLeave={false}`
var renderedRef = react__WEBPACK_IMPORTED_MODULE_7__.useRef(mergedVisible);
if (mergedVisible) {
renderedRef.current = true;
}
// ====================== Refs ======================
var setNodeRef = react__WEBPACK_IMPORTED_MODULE_7__.useCallback(function (node) {
nodeRef.current = node;
(0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.fillRef)(ref, node);
}, [ref]);
// ===================== Render =====================
var motionChildren;
var mergedProps = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, eventProps), {}, {
visible: visible
});
if (!children) {
// No children
motionChildren = null;
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_12__.STATUS_NONE) {
// Stable children
if (mergedVisible) {
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), setNodeRef);
} else if (!removeOnLeave && renderedRef.current && leavedClassName) {
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
className: leavedClassName
}), setNodeRef);
} else if (forceRender || !removeOnLeave && !leavedClassName) {
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
style: {
display: 'none'
}
}), setNodeRef);
} else {
motionChildren = null;
}
} else {
// In motion
var statusSuffix;
if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_12__.STEP_PREPARE) {
statusSuffix = 'prepare';
} else if ((0,_hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_11__.isActive)(statusStep)) {
statusSuffix = 'active';
} else if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_12__.STEP_START) {
statusSuffix = 'start';
}
var motionCls = (0,_util_motion__WEBPACK_IMPORTED_MODULE_13__.getTransitionName)(motionName, "".concat(status, "-").concat(statusSuffix));
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()((0,_util_motion__WEBPACK_IMPORTED_MODULE_13__.getTransitionName)(motionName, status), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, motionCls, motionCls && statusSuffix), motionName, typeof motionName === 'string')),
style: statusStyle
}), setNodeRef);
}
// Auto inject ref if child node not have `ref` props
if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.isValidElement(motionChildren) && (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.supportRef)(motionChildren)) {
var originNodeRef = (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.getNodeRef)(motionChildren);
if (!originNodeRef) {
motionChildren = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.cloneElement(motionChildren, {
ref: setNodeRef
});
}
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(_DomWrapper__WEBPACK_IMPORTED_MODULE_9__["default"], {
ref: wrapperNodeRef
}, motionChildren);
});
CSSMotion.displayName = 'CSSMotion';
return CSSMotion;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotion(_util_motion__WEBPACK_IMPORTED_MODULE_13__.supportTransition));
/***/ }),
/***/ "../../../node_modules/rc-motion/es/CSSMotionList.js":
/*!***********************************************************!*\
!*** ../../../node_modules/rc-motion/es/CSSMotionList.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ genCSSMotionList: () => (/* binding */ genCSSMotionList)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js");
/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ "../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js");
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./CSSMotion */ "../../../node_modules/rc-motion/es/CSSMotion.js");
/* harmony import */ var _util_diff__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./util/diff */ "../../../node_modules/rc-motion/es/util/diff.js");
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./util/motion */ "../../../node_modules/rc-motion/es/util/motion.js");
var _excluded = ["component", "children", "onVisibleChanged", "onAllRemoved"],
_excluded2 = ["status"];
/* eslint react/prop-types: 0 */
var MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];
/**
* Generate a CSSMotionList component with config
* @param transitionSupport No need since CSSMotionList no longer depends on transition support
* @param CSSMotion CSSMotion component
*/
function genCSSMotionList(transitionSupport) {
var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _CSSMotion__WEBPACK_IMPORTED_MODULE_10__["default"];
var CSSMotionList = /*#__PURE__*/function (_React$Component) {
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_6__["default"])(CSSMotionList, _React$Component);
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_7__["default"])(CSSMotionList);
function CSSMotionList() {
var _this;
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__["default"])(this, CSSMotionList);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__["default"])(_this), "state", {
keyEntities: []
});
// ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.
(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__["default"])(_this), "removeKey", function (removeKey) {
_this.setState(function (prevState) {
var nextKeyEntities = prevState.keyEntities.map(function (entity) {
if (entity.key !== removeKey) return entity;
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, entity), {}, {
status: _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED
});
});
return {
keyEntities: nextKeyEntities
};
}, function () {
var keyEntities = _this.state.keyEntities;
var restKeysCount = keyEntities.filter(function (_ref) {
var status = _ref.status;
return status !== _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED;
}).length;
if (restKeysCount === 0 && _this.props.onAllRemoved) {
_this.props.onAllRemoved();
}
});
});
return _this;
}
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__["default"])(CSSMotionList, [{
key: "render",
value: function render() {
var _this2 = this;
var keyEntities = this.state.keyEntities;
var _this$props = this.props,
component = _this$props.component,
children = _this$props.children,
_onVisibleChanged = _this$props.onVisibleChanged,
onAllRemoved = _this$props.onAllRemoved,
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_this$props, _excluded);
var Component = component || react__WEBPACK_IMPORTED_MODULE_9__.Fragment;
var motionProps = {};
MOTION_PROP_NAMES.forEach(function (prop) {
motionProps[prop] = restProps[prop];
delete restProps[prop];
});
delete restProps.keys;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(Component, restProps, keyEntities.map(function (_ref2, index) {
var status = _ref2.status,
eventProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _excluded2);
var visible = status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_ADD || status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_KEEP;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(CSSMotion, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, motionProps, {
key: eventProps.key,
visible: visible,
eventProps: eventProps,
onVisibleChanged: function onVisibleChanged(changedVisible) {
_onVisibleChanged === null || _onVisibleChanged === void 0 || _onVisibleChanged(changedVisible, {
key: eventProps.key
});
if (!changedVisible) {
_this2.removeKey(eventProps.key);
}
}
}), function (props, ref) {
return children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, {
index: index
}), ref);
});
}));
}
}], [{
key: "getDerivedStateFromProps",
value: function getDerivedStateFromProps(_ref3, _ref4) {
var keys = _ref3.keys;
var keyEntities = _ref4.keyEntities;
var parsedKeyObjects = (0,_util_diff__WEBPACK_IMPORTED_MODULE_11__.parseKeys)(keys);
var mixedKeyEntities = (0,_util_diff__WEBPACK_IMPORTED_MODULE_11__.diffKeys)(keyEntities, parsedKeyObjects);
return {
keyEntities: mixedKeyEntities.filter(function (entity) {
var prevEntity = keyEntities.find(function (_ref5) {
var key = _ref5.key;
return entity.key === key;
});
// Remove if already mark as removed
if (prevEntity && prevEntity.status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVED && entity.status === _util_diff__WEBPACK_IMPORTED_MODULE_11__.STATUS_REMOVE) {
return false;
}
return true;
})
};
}
}]);
return CSSMotionList;
}(react__WEBPACK_IMPORTED_MODULE_9__.Component);
(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_8__["default"])(CSSMotionList, "defaultProps", {
component: 'div'
});
return CSSMotionList;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotionList(_util_motion__WEBPACK_IMPORTED_MODULE_12__.supportTransition));
/***/ }),
/***/ "../../../node_modules/rc-motion/es/DomWrapper.js":
/*!********************************************************!*\
!*** ../../../node_modules/rc-motion/es/DomWrapper.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js");
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js");
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
var DomWrapper = /*#__PURE__*/function (_React$Component) {
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__["default"])(DomWrapper, _React$Component);
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__["default"])(DomWrapper);
function DomWrapper() {
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, DomWrapper);
return _super.apply(this, arguments);
}
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(DomWrapper, [{
key: "render",
value: function render() {
return this.props.children;
}
}]);
return DomWrapper;
}(react__WEBPACK_IMPORTED_MODULE_4__.Component);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DomWrapper);
/***/ }),
/***/ "../../../node_modules/rc-motion/es/context.js":
/*!*****************************************************!*\
!*** ../../../node_modules/rc-motion/es/context.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Context: () => (/* binding */ Context),
/* harmony export */ "default": () => (/* binding */ MotionProvider)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
var _excluded = ["children"];
var Context = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext({});
function MotionProvider(_ref) {
var children = _ref.children,
props = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, _excluded);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Context.Provider, {
value: props
}, children);
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js":
/*!**********************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/motion */ "../../../node_modules/rc-motion/es/util/motion.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (onInternalMotionEnd) {
var cacheElementRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
// Remove events
function removeMotionEvents(element) {
if (element) {
element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd);
element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd);
}
}
// Patch events
function patchMotionEvents(element) {
if (cacheElementRef.current && cacheElementRef.current !== element) {
removeMotionEvents(cacheElementRef.current);
}
if (element && element !== cacheElementRef.current) {
element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd);
element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd);
// Save as cache in case dom removed trigger by `motionDeadline`
cacheElementRef.current = element;
}
}
// Clean up when removed
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {
return function () {
removeMotionEvents(cacheElementRef.current);
};
}, []);
return [patchMotionEvents, removeMotionEvents];
});
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js":
/*!*****************************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "../../../node_modules/rc-util/es/Dom/canUseDom.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
// It's safe to use `useLayoutEffect` but the warning is annoying
var useIsomorphicLayoutEffect = (0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_0__["default"])() ? react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_1__.useEffect;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useIsomorphicLayoutEffect);
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useNextFrame.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useNextFrame.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
var nextFrameRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null);
function cancelNextFrame() {
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__["default"].cancel(nextFrameRef.current);
}
function nextFrame(callback) {
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
cancelNextFrame();
var nextFrameId = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_0__["default"])(function () {
if (delay <= 1) {
callback({
isCanceled: function isCanceled() {
return nextFrameId !== nextFrameRef.current;
}
});
} else {
nextFrame(callback, delay - 1);
}
});
nextFrameRef.current = nextFrameId;
}
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
return function () {
cancelNextFrame();
};
}, []);
return [nextFrame, cancelNextFrame];
});
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useStatus.js":
/*!*************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useStatus.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useStatus)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js");
/* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "../../../node_modules/rc-util/es/hooks/useState.js");
/* harmony import */ var rc_util_es_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/hooks/useSyncState */ "../../../node_modules/rc-util/es/hooks/useSyncState.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../interface */ "../../../node_modules/rc-motion/es/interface.js");
/* harmony import */ var _useDomMotionEvents__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useDomMotionEvents */ "../../../node_modules/rc-motion/es/hooks/useDomMotionEvents.js");
/* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js");
/* harmony import */ var _useStepQueue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./useStepQueue */ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js");
function useStatus(supportMotion, visible, getElement, _ref) {
var _ref$motionEnter = _ref.motionEnter,
motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,
_ref$motionAppear = _ref.motionAppear,
motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,
_ref$motionLeave = _ref.motionLeave,
motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,
motionDeadline = _ref.motionDeadline,
motionLeaveImmediately = _ref.motionLeaveImmediately,
onAppearPrepare = _ref.onAppearPrepare,
onEnterPrepare = _ref.onEnterPrepare,
onLeavePrepare = _ref.onLeavePrepare,
onAppearStart = _ref.onAppearStart,
onEnterStart = _ref.onEnterStart,
onLeaveStart = _ref.onLeaveStart,
onAppearActive = _ref.onAppearActive,
onEnterActive = _ref.onEnterActive,
onLeaveActive = _ref.onLeaveActive,
onAppearEnd = _ref.onAppearEnd,
onEnterEnd = _ref.onEnterEnd,
onLeaveEnd = _ref.onLeaveEnd,
onVisibleChanged = _ref.onVisibleChanged;
// Used for outer render usage to avoid `visible: false & status: none` to render nothing
var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2),
asyncVisible = _useState2[0],
setAsyncVisible = _useState2[1];
var _useSyncState = (0,rc_util_es_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_5__["default"])(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE),
_useSyncState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useSyncState, 2),
getStatus = _useSyncState2[0],
setStatus = _useSyncState2[1];
var _useState3 = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(null),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState3, 2),
style = _useState4[0],
setStyle = _useState4[1];
var currentStatus = getStatus();
var mountedRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(false);
var deadlineRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(null);
// =========================== Dom Node ===========================
function getDomElement() {
return getElement();
}
// ========================== Motion End ==========================
var activeRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(false);
/**
* Clean up status & style
*/
function updateMotionEndStatus() {
setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE);
setStyle(null, true);
}
var onInternalMotionEnd = (0,rc_util__WEBPACK_IMPORTED_MODULE_3__.useEvent)(function (event) {
var status = getStatus();
// Do nothing since not in any transition status.
// This may happen when `motionDeadline` trigger.
if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) {
return;
}
var element = getDomElement();
if (event && !event.deadline && event.target !== element) {
// event exists
// not initiated by deadline
// transitionEnd not fired by inner elements
return;
}
var currentActive = activeRef.current;
var canEnd;
if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR && currentActive) {
canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER && currentActive) {
canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE && currentActive) {
canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);
}
// Only update status when `canEnd` and not destroyed
if (currentActive && canEnd !== false) {
updateMotionEndStatus();
}
});
var _useDomMotionEvents = (0,_useDomMotionEvents__WEBPACK_IMPORTED_MODULE_8__["default"])(onInternalMotionEnd),
_useDomMotionEvents2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useDomMotionEvents, 1),
patchMotionEvents = _useDomMotionEvents2[0];
// ============================= Step =============================
var getEventHandlers = function getEventHandlers(targetStatus) {
switch (targetStatus) {
case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR:
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onAppearPrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onAppearStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onAppearActive);
case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER:
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onEnterPrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onEnterStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onEnterActive);
case _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE:
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE, onLeavePrepare), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START, onLeaveStart), _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE, onLeaveActive);
default:
return {};
}
};
var eventHandlers = react__WEBPACK_IMPORTED_MODULE_6__.useMemo(function () {
return getEventHandlers(currentStatus);
}, [currentStatus]);
var _useStepQueue = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_10__["default"])(currentStatus, !supportMotion, function (newStep) {
// Only prepare step can be skip
if (newStep === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE) {
var onPrepare = eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE];
if (!onPrepare) {
return _useStepQueue__WEBPACK_IMPORTED_MODULE_10__.SkipStep;
}
return onPrepare(getDomElement());
}
// Rest step is sync update
if (step in eventHandlers) {
var _eventHandlers$step;
setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);
}
if (step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_ACTIVE && currentStatus !== _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) {
// Patch events when motion needed
patchMotionEvents(getDomElement());
if (motionDeadline > 0) {
clearTimeout(deadlineRef.current);
deadlineRef.current = setTimeout(function () {
onInternalMotionEnd({
deadline: true
});
}, motionDeadline);
}
}
if (step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARED) {
updateMotionEndStatus();
}
return _useStepQueue__WEBPACK_IMPORTED_MODULE_10__.DoStep;
}),
_useStepQueue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStepQueue, 2),
startStep = _useStepQueue2[0],
step = _useStepQueue2[1];
var active = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_10__.isActive)(step);
activeRef.current = active;
// ============================ Status ============================
var visibleRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)(null);
// Update with new status
(0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_9__["default"])(function () {
// When use Suspense, the `visible` will repeat trigger,
// But not real change of the `visible`, we need to skip it.
// https://github.com/ant-design/ant-design/issues/44379
if (mountedRef.current && visibleRef.current === visible) {
return;
}
setAsyncVisible(visible);
var isMounted = mountedRef.current;
mountedRef.current = true;
// if (!supportMotion) {
// return;
// }
var nextStatus;
// Appear
if (!isMounted && visible && motionAppear) {
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR;
}
// Enter
if (isMounted && visible && motionEnter) {
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER;
}
// Leave
if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE;
}
var nextEventHandlers = getEventHandlers(nextStatus);
// Update to next status
if (nextStatus && (supportMotion || nextEventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE])) {
setStatus(nextStatus);
startStep();
} else {
// Set back in case no motion but prev status has prepare step
setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE);
}
visibleRef.current = visible;
}, [visible]);
// ============================ Effect ============================
// Reset when motion changed
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
if (
// Cancel appear
currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_APPEAR && !motionAppear ||
// Cancel enter
currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_ENTER && !motionEnter ||
// Cancel leave
currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_LEAVE && !motionLeave) {
setStatus(_interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE);
}
}, [motionAppear, motionEnter, motionLeave]);
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
return function () {
mountedRef.current = false;
clearTimeout(deadlineRef.current);
};
}, []);
// Trigger `onVisibleChanged`
var firstMountChangeRef = react__WEBPACK_IMPORTED_MODULE_6__.useRef(false);
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
// [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged
if (asyncVisible) {
firstMountChangeRef.current = true;
}
if (asyncVisible !== undefined && currentStatus === _interface__WEBPACK_IMPORTED_MODULE_7__.STATUS_NONE) {
// Skip first render is invisible since it's nothing changed
if (firstMountChangeRef.current || asyncVisible) {
onVisibleChanged === null || onVisibleChanged === void 0 || onVisibleChanged(asyncVisible);
}
firstMountChangeRef.current = true;
}
}, [asyncVisible, currentStatus]);
// ============================ Styles ============================
var mergedStyle = style;
if (eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_7__.STEP_PREPARE] && step === _interface__WEBPACK_IMPORTED_MODULE_7__.STEP_START) {
mergedStyle = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
transition: 'none'
}, mergedStyle);
}
return [currentStatus, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/hooks/useStepQueue.js":
/*!****************************************************************!*\
!*** ../../../node_modules/rc-motion/es/hooks/useStepQueue.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ DoStep: () => (/* binding */ DoStep),
/* harmony export */ SkipStep: () => (/* binding */ SkipStep),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ isActive: () => (/* binding */ isActive)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "../../../node_modules/rc-util/es/hooks/useState.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../interface */ "../../../node_modules/rc-motion/es/interface.js");
/* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "../../../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js");
/* harmony import */ var _useNextFrame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useNextFrame */ "../../../node_modules/rc-motion/es/hooks/useNextFrame.js");
var FULL_STEP_QUEUE = [_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_START, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED];
var SIMPLE_STEP_QUEUE = [_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARED];
/** Skip current step */
var SkipStep = false;
/** Current step should be update in */
var DoStep = true;
function isActive(step) {
return step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE || step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (status, prepareOnly, callback) {
var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_1__["default"])(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2),
step = _useState2[0],
setStep = _useState2[1];
var _useNextFrame = (0,_useNextFrame__WEBPACK_IMPORTED_MODULE_5__["default"])(),
_useNextFrame2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useNextFrame, 2),
nextFrame = _useNextFrame2[0],
cancelNextFrame = _useNextFrame2[1];
function startQueue() {
setStep(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, true);
}
var STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE;
(0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_4__["default"])(function () {
if (step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE && step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED) {
var index = STEP_QUEUE.indexOf(step);
var nextStep = STEP_QUEUE[index + 1];
var result = callback(step);
if (result === SkipStep) {
// Skip when no needed
setStep(nextStep, true);
} else if (nextStep) {
// Do as frame for step update
nextFrame(function (info) {
function doNext() {
// Skip since current queue is ood
if (info.isCanceled()) return;
setStep(nextStep, true);
}
if (result === true) {
doNext();
} else {
// Only promise should be async
Promise.resolve(result).then(doNext);
}
});
}
}
}, [status, step]);
react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () {
return function () {
cancelNextFrame();
};
}, []);
return [startQueue, step];
});
/***/ }),
/***/ "../../../node_modules/rc-motion/es/index.js":
/*!***************************************************!*\
!*** ../../../node_modules/rc-motion/es/index.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ CSSMotionList: () => (/* reexport safe */ _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ Provider: () => (/* reexport safe */ _context__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CSSMotion */ "../../../node_modules/rc-motion/es/CSSMotion.js");
/* harmony import */ var _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CSSMotionList */ "../../../node_modules/rc-motion/es/CSSMotionList.js");
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-motion/es/context.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_CSSMotion__WEBPACK_IMPORTED_MODULE_0__["default"]);
/***/ }),
/***/ "../../../node_modules/rc-motion/es/interface.js":
/*!*******************************************************!*\
!*** ../../../node_modules/rc-motion/es/interface.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ STATUS_APPEAR: () => (/* binding */ STATUS_APPEAR),
/* harmony export */ STATUS_ENTER: () => (/* binding */ STATUS_ENTER),
/* harmony export */ STATUS_LEAVE: () => (/* binding */ STATUS_LEAVE),
/* harmony export */ STATUS_NONE: () => (/* binding */ STATUS_NONE),
/* harmony export */ STEP_ACTIVATED: () => (/* binding */ STEP_ACTIVATED),
/* harmony export */ STEP_ACTIVE: () => (/* binding */ STEP_ACTIVE),
/* harmony export */ STEP_NONE: () => (/* binding */ STEP_NONE),
/* harmony export */ STEP_PREPARE: () => (/* binding */ STEP_PREPARE),
/* harmony export */ STEP_PREPARED: () => (/* binding */ STEP_PREPARED),
/* harmony export */ STEP_START: () => (/* binding */ STEP_START)
/* harmony export */ });
var STATUS_NONE = 'none';
var STATUS_APPEAR = 'appear';
var STATUS_ENTER = 'enter';
var STATUS_LEAVE = 'leave';
var STEP_NONE = 'none';
var STEP_PREPARE = 'prepare';
var STEP_START = 'start';
var STEP_ACTIVE = 'active';
var STEP_ACTIVATED = 'end';
/**
* Used for disabled motion case.
* Prepare stage will still work but start & active will be skipped.
*/
var STEP_PREPARED = 'prepared';
/***/ }),
/***/ "../../../node_modules/rc-motion/es/util/diff.js":
/*!*******************************************************!*\
!*** ../../../node_modules/rc-motion/es/util/diff.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ STATUS_ADD: () => (/* binding */ STATUS_ADD),
/* harmony export */ STATUS_KEEP: () => (/* binding */ STATUS_KEEP),
/* harmony export */ STATUS_REMOVE: () => (/* binding */ STATUS_REMOVE),
/* harmony export */ STATUS_REMOVED: () => (/* binding */ STATUS_REMOVED),
/* harmony export */ diffKeys: () => (/* binding */ diffKeys),
/* harmony export */ parseKeys: () => (/* binding */ parseKeys),
/* harmony export */ wrapKeyToObject: () => (/* binding */ wrapKeyToObject)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
var STATUS_ADD = 'add';
var STATUS_KEEP = 'keep';
var STATUS_REMOVE = 'remove';
var STATUS_REMOVED = 'removed';
function wrapKeyToObject(key) {
var keyObj;
if (key && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(key) === 'object' && 'key' in key) {
keyObj = key;
} else {
keyObj = {
key: key
};
}
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, {
key: String(keyObj.key)
});
}
function parseKeys() {
var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return keys.map(wrapKeyToObject);
}
function diffKeys() {
var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var list = [];
var currentIndex = 0;
var currentLen = currentKeys.length;
var prevKeyObjects = parseKeys(prevKeys);
var currentKeyObjects = parseKeys(currentKeys);
// Check prev keys to insert or keep
prevKeyObjects.forEach(function (keyObj) {
var hit = false;
for (var i = currentIndex; i < currentLen; i += 1) {
var currentKeyObj = currentKeyObjects[i];
if (currentKeyObj.key === keyObj.key) {
// New added keys should add before current key
if (currentIndex < i) {
list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, {
status: STATUS_ADD
});
}));
currentIndex = i;
}
list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, currentKeyObj), {}, {
status: STATUS_KEEP
}));
currentIndex += 1;
hit = true;
break;
}
}
// If not hit, it means key is removed
if (!hit) {
list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, {
status: STATUS_REMOVE
}));
}
});
// Add rest to the list
if (currentIndex < currentLen) {
list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, {
status: STATUS_ADD
});
}));
}
/**
* Merge same key when it remove and add again:
* [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]
*/
var keys = {};
list.forEach(function (_ref) {
var key = _ref.key;
keys[key] = (keys[key] || 0) + 1;
});
var duplicatedKeys = Object.keys(keys).filter(function (key) {
return keys[key] > 1;
});
duplicatedKeys.forEach(function (matchKey) {
// Remove `STATUS_REMOVE` node.
list = list.filter(function (_ref2) {
var key = _ref2.key,
status = _ref2.status;
return key !== matchKey || status !== STATUS_REMOVE;
});
// Update `STATUS_ADD` to `STATUS_KEEP`
list.forEach(function (node) {
if (node.key === matchKey) {
// eslint-disable-next-line no-param-reassign
node.status = STATUS_KEEP;
}
});
});
return list;
}
/***/ }),
/***/ "../../../node_modules/rc-motion/es/util/motion.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-motion/es/util/motion.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ animationEndName: () => (/* binding */ animationEndName),
/* harmony export */ getTransitionName: () => (/* binding */ getTransitionName),
/* harmony export */ getVendorPrefixedEventName: () => (/* binding */ getVendorPrefixedEventName),
/* harmony export */ getVendorPrefixes: () => (/* binding */ getVendorPrefixes),
/* harmony export */ supportTransition: () => (/* binding */ supportTransition),
/* harmony export */ transitionEndName: () => (/* binding */ transitionEndName)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "../../../node_modules/rc-util/es/Dom/canUseDom.js");
// ================= Transition =================
// Event wrapper. Copy from react source code
function makePrefixMap(styleProp, eventName) {
var prefixes = {};
prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
prefixes["Webkit".concat(styleProp)] = "webkit".concat(eventName);
prefixes["Moz".concat(styleProp)] = "moz".concat(eventName);
prefixes["ms".concat(styleProp)] = "MS".concat(eventName);
prefixes["O".concat(styleProp)] = "o".concat(eventName.toLowerCase());
return prefixes;
}
function getVendorPrefixes(domSupport, win) {
var prefixes = {
animationend: makePrefixMap('Animation', 'AnimationEnd'),
transitionend: makePrefixMap('Transition', 'TransitionEnd')
};
if (domSupport) {
if (!('AnimationEvent' in win)) {
delete prefixes.animationend.animation;
}
if (!('TransitionEvent' in win)) {
delete prefixes.transitionend.transition;
}
}
return prefixes;
}
var vendorPrefixes = getVendorPrefixes((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])(), typeof window !== 'undefined' ? window : {});
var style = {};
if ((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])()) {
var _document$createEleme = document.createElement('div');
style = _document$createEleme.style;
}
var prefixedEventNames = {};
function getVendorPrefixedEventName(eventName) {
if (prefixedEventNames[eventName]) {
return prefixedEventNames[eventName];
}
var prefixMap = vendorPrefixes[eventName];
if (prefixMap) {
var stylePropList = Object.keys(prefixMap);
var len = stylePropList.length;
for (var i = 0; i < len; i += 1) {
var styleProp = stylePropList[i];
if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {
prefixedEventNames[eventName] = prefixMap[styleProp];
return prefixedEventNames[eventName];
}
}
}
return '';
}
var internalAnimationEndName = getVendorPrefixedEventName('animationend');
var internalTransitionEndName = getVendorPrefixedEventName('transitionend');
var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);
var animationEndName = internalAnimationEndName || 'animationend';
var transitionEndName = internalTransitionEndName || 'transitionend';
function getTransitionName(transitionName, transitionType) {
if (!transitionName) return null;
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(transitionName) === 'object') {
var type = transitionType.replace(/-\w/g, function (match) {
return match[1].toUpperCase();
});
return transitionName[type];
}
return "".concat(transitionName, "-").concat(transitionType);
}
/***/ }),
/***/ "../../../node_modules/rc-notification/es/Notice.js":
/*!**********************************************************!*\
!*** ../../../node_modules/rc-notification/es/Notice.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/pickAttrs */ "../../../node_modules/rc-util/es/pickAttrs.js");
var Notify = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.forwardRef(function (props, ref) {
var prefixCls = props.prefixCls,
style = props.style,
className = props.className,
_props$duration = props.duration,
duration = _props$duration === void 0 ? 4.5 : _props$duration,
showProgress = props.showProgress,
_props$pauseOnHover = props.pauseOnHover,
pauseOnHover = _props$pauseOnHover === void 0 ? true : _props$pauseOnHover,
eventKey = props.eventKey,
content = props.content,
closable = props.closable,
_props$closeIcon = props.closeIcon,
closeIcon = _props$closeIcon === void 0 ? 'x' : _props$closeIcon,
divProps = props.props,
onClick = props.onClick,
onNoticeClose = props.onNoticeClose,
times = props.times,
forcedHovering = props.hovering;
var _React$useState = react__WEBPACK_IMPORTED_MODULE_6__.useState(false),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2),
hovering = _React$useState2[0],
setHovering = _React$useState2[1];
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_6__.useState(0),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState3, 2),
percent = _React$useState4[0],
setPercent = _React$useState4[1];
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_6__.useState(0),
_React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState5, 2),
spentTime = _React$useState6[0],
setSpentTime = _React$useState6[1];
var mergedHovering = forcedHovering || hovering;
var mergedShowProgress = duration > 0 && showProgress;
// ======================== Close =========================
var onInternalClose = function onInternalClose() {
onNoticeClose(eventKey);
};
var onCloseKeyDown = function onCloseKeyDown(e) {
if (e.key === 'Enter' || e.code === 'Enter' || e.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__["default"].ENTER) {
onInternalClose();
}
};
// ======================== Effect ========================
react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () {
if (!mergedHovering && duration > 0) {
var start = Date.now() - spentTime;
var timeout = setTimeout(function () {
onInternalClose();
}, duration * 1000 - spentTime);
return function () {
if (pauseOnHover) {
clearTimeout(timeout);
}
setSpentTime(Date.now() - start);
};
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [duration, mergedHovering, times]);
react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () {
if (!mergedHovering && mergedShowProgress && (pauseOnHover || spentTime === 0)) {
var start = performance.now();
var animationFrame;
var calculate = function calculate() {
cancelAnimationFrame(animationFrame);
animationFrame = requestAnimationFrame(function (timestamp) {
var runtime = timestamp + spentTime - start;
var progress = Math.min(runtime / (duration * 1000), 1);
setPercent(progress * 100);
if (progress < 1) {
calculate();
}
});
};
calculate();
return function () {
if (pauseOnHover) {
cancelAnimationFrame(animationFrame);
}
};
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [duration, spentTime, mergedHovering, mergedShowProgress, times]);
// ======================== Closable ========================
var closableObj = react__WEBPACK_IMPORTED_MODULE_6__.useMemo(function () {
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(closable) === 'object' && closable !== null) {
return closable;
}
if (closable) {
return {
closeIcon: closeIcon
};
}
return {};
}, [closable, closeIcon]);
var ariaProps = (0,rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__["default"])(closableObj, true);
// ======================== Progress ========================
var validPercent = 100 - (!percent || percent < 0 ? 0 : percent > 100 ? 100 : percent);
// ======================== Render ========================
var noticePrefixCls = "".concat(prefixCls, "-notice");
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, divProps, {
ref: ref,
className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(noticePrefixCls, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(noticePrefixCls, "-closable"), closable)),
style: style,
onMouseEnter: function onMouseEnter(e) {
var _divProps$onMouseEnte;
setHovering(true);
divProps === null || divProps === void 0 || (_divProps$onMouseEnte = divProps.onMouseEnter) === null || _divProps$onMouseEnte === void 0 || _divProps$onMouseEnte.call(divProps, e);
},
onMouseLeave: function onMouseLeave(e) {
var _divProps$onMouseLeav;
setHovering(false);
divProps === null || divProps === void 0 || (_divProps$onMouseLeav = divProps.onMouseLeave) === null || _divProps$onMouseLeav === void 0 || _divProps$onMouseLeav.call(divProps, e);
},
onClick: onClick
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
className: "".concat(noticePrefixCls, "-content")
}, content), closable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("a", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
tabIndex: 0,
className: "".concat(noticePrefixCls, "-close"),
onKeyDown: onCloseKeyDown,
"aria-label": "Close"
}, ariaProps, {
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onInternalClose();
}
}), closableObj.closeIcon), mergedShowProgress && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("progress", {
className: "".concat(noticePrefixCls, "-progress"),
max: "100",
value: validPercent
}, validPercent + '%'));
});
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notify);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/NoticeList.js":
/*!**************************************************************!*\
!*** ../../../node_modules/rc-notification/es/NoticeList.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js");
/* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Notice */ "../../../node_modules/rc-notification/es/Notice.js");
/* harmony import */ var _NotificationProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./NotificationProvider */ "../../../node_modules/rc-notification/es/NotificationProvider.js");
/* harmony import */ var _hooks_useStack__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useStack */ "../../../node_modules/rc-notification/es/hooks/useStack.js");
var _excluded = ["className", "style", "classNames", "styles"];
var NoticeList = function NoticeList(props) {
var configList = props.configList,
placement = props.placement,
prefixCls = props.prefixCls,
className = props.className,
style = props.style,
motion = props.motion,
onAllNoticeRemoved = props.onAllNoticeRemoved,
onNoticeClose = props.onNoticeClose,
stackConfig = props.stack;
var _useContext = (0,react__WEBPACK_IMPORTED_MODULE_6__.useContext)(_NotificationProvider__WEBPACK_IMPORTED_MODULE_10__.NotificationContext),
ctxCls = _useContext.classNames;
var dictRef = (0,react__WEBPACK_IMPORTED_MODULE_6__.useRef)({});
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)(null),
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useState, 2),
latestNotice = _useState2[0],
setLatestNotice = _useState2[1];
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)([]),
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useState3, 2),
hoverKeys = _useState4[0],
setHoverKeys = _useState4[1];
var keys = configList.map(function (config) {
return {
config: config,
key: String(config.key)
};
});
var _useStack = (0,_hooks_useStack__WEBPACK_IMPORTED_MODULE_11__["default"])(stackConfig),
_useStack2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_5__["default"])(_useStack, 2),
stack = _useStack2[0],
_useStack2$ = _useStack2[1],
offset = _useStack2$.offset,
threshold = _useStack2$.threshold,
gap = _useStack2$.gap;
var expanded = stack && (hoverKeys.length > 0 || keys.length <= threshold);
var placementMotion = typeof motion === 'function' ? motion(placement) : motion;
// Clean hover key
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
if (stack && hoverKeys.length > 1) {
setHoverKeys(function (prev) {
return prev.filter(function (key) {
return keys.some(function (_ref) {
var dataKey = _ref.key;
return key === dataKey;
});
});
});
}
}, [hoverKeys, keys, stack]);
// Force update latest notice
(0,react__WEBPACK_IMPORTED_MODULE_6__.useEffect)(function () {
var _keys;
if (stack && dictRef.current[(_keys = keys[keys.length - 1]) === null || _keys === void 0 ? void 0 : _keys.key]) {
var _keys2;
setLatestNotice(dictRef.current[(_keys2 = keys[keys.length - 1]) === null || _keys2 === void 0 ? void 0 : _keys2.key]);
}
}, [keys, stack]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement(rc_motion__WEBPACK_IMPORTED_MODULE_8__.CSSMotionList, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
key: placement,
className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(prefixCls, "".concat(prefixCls, "-").concat(placement), ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.list, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])({}, "".concat(prefixCls, "-stack"), !!stack), "".concat(prefixCls, "-stack-expanded"), expanded)),
style: style,
keys: keys,
motionAppear: true
}, placementMotion, {
onAllRemoved: function onAllRemoved() {
onAllNoticeRemoved(placement);
}
}), function (_ref2, nodeRef) {
var config = _ref2.config,
motionClassName = _ref2.className,
motionStyle = _ref2.style,
motionIndex = _ref2.index;
var _ref3 = config,
key = _ref3.key,
times = _ref3.times;
var strKey = String(key);
var _ref4 = config,
configClassName = _ref4.className,
configStyle = _ref4.style,
configClassNames = _ref4.classNames,
configStyles = _ref4.styles,
restConfig = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref4, _excluded);
var dataIndex = keys.findIndex(function (item) {
return item.key === strKey;
});
// If dataIndex is -1, that means this notice has been removed in data, but still in dom
// Should minus (motionIndex - 1) to get the correct index because keys.length is not the same as dom length
var stackStyle = {};
if (stack) {
var index = keys.length - 1 - (dataIndex > -1 ? dataIndex : motionIndex - 1);
var transformX = placement === 'top' || placement === 'bottom' ? '-50%' : '0';
if (index > 0) {
var _dictRef$current$strK, _dictRef$current$strK2, _dictRef$current$strK3;
stackStyle.height = expanded ? (_dictRef$current$strK = dictRef.current[strKey]) === null || _dictRef$current$strK === void 0 ? void 0 : _dictRef$current$strK.offsetHeight : latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetHeight;
// Transform
var verticalOffset = 0;
for (var i = 0; i < index; i++) {
var _dictRef$current$keys;
verticalOffset += ((_dictRef$current$keys = dictRef.current[keys[keys.length - 1 - i].key]) === null || _dictRef$current$keys === void 0 ? void 0 : _dictRef$current$keys.offsetHeight) + gap;
}
var transformY = (expanded ? verticalOffset : index * offset) * (placement.startsWith('top') ? 1 : -1);
var scaleX = !expanded && latestNotice !== null && latestNotice !== void 0 && latestNotice.offsetWidth && (_dictRef$current$strK2 = dictRef.current[strKey]) !== null && _dictRef$current$strK2 !== void 0 && _dictRef$current$strK2.offsetWidth ? ((latestNotice === null || latestNotice === void 0 ? void 0 : latestNotice.offsetWidth) - offset * 2 * (index < 3 ? index : 3)) / ((_dictRef$current$strK3 = dictRef.current[strKey]) === null || _dictRef$current$strK3 === void 0 ? void 0 : _dictRef$current$strK3.offsetWidth) : 1;
stackStyle.transform = "translate3d(".concat(transformX, ", ").concat(transformY, "px, 0) scaleX(").concat(scaleX, ")");
} else {
stackStyle.transform = "translate3d(".concat(transformX, ", 0, 0)");
}
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", {
ref: nodeRef,
className: classnames__WEBPACK_IMPORTED_MODULE_7___default()("".concat(prefixCls, "-notice-wrapper"), motionClassName, configClassNames === null || configClassNames === void 0 ? void 0 : configClassNames.wrapper),
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, motionStyle), stackStyle), configStyles === null || configStyles === void 0 ? void 0 : configStyles.wrapper),
onMouseEnter: function onMouseEnter() {
return setHoverKeys(function (prev) {
return prev.includes(strKey) ? prev : [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(prev), [strKey]);
});
},
onMouseLeave: function onMouseLeave() {
return setHoverKeys(function (prev) {
return prev.filter(function (k) {
return k !== strKey;
});
});
}
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6___default().createElement(_Notice__WEBPACK_IMPORTED_MODULE_9__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restConfig, {
ref: function ref(node) {
if (dataIndex > -1) {
dictRef.current[strKey] = node;
} else {
delete dictRef.current[strKey];
}
},
prefixCls: prefixCls,
classNames: configClassNames,
styles: configStyles,
className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(configClassName, ctxCls === null || ctxCls === void 0 ? void 0 : ctxCls.notice),
style: configStyle,
times: times,
key: key,
eventKey: key,
onNoticeClose: onNoticeClose,
hovering: stack && hoverKeys.length > 0
})));
});
};
if (true) {
NoticeList.displayName = 'NoticeList';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NoticeList);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/NotificationProvider.js":
/*!************************************************************************!*\
!*** ../../../node_modules/rc-notification/es/NotificationProvider.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ NotificationContext: () => (/* binding */ NotificationContext),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var NotificationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createContext({});
var NotificationProvider = function NotificationProvider(_ref) {
var children = _ref.children,
classNames = _ref.classNames;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NotificationContext.Provider, {
value: {
classNames: classNames
}
}, children);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotificationProvider);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/Notifications.js":
/*!*****************************************************************!*\
!*** ../../../node_modules/rc-notification/es/Notifications.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ "../../../node_modules/react-dom/index.js");
/* harmony import */ var _NoticeList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./NoticeList */ "../../../node_modules/rc-notification/es/NoticeList.js");
// ant-notification ant-notification-topRight
var Notifications = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.forwardRef(function (props, ref) {
var _props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-notification' : _props$prefixCls,
container = props.container,
motion = props.motion,
maxCount = props.maxCount,
className = props.className,
style = props.style,
onAllRemoved = props.onAllRemoved,
stack = props.stack,
renderNotifications = props.renderNotifications;
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState([]),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2),
configList = _React$useState2[0],
setConfigList = _React$useState2[1];
// ======================== Close =========================
var onNoticeClose = function onNoticeClose(key) {
var _config$onClose;
// Trigger close event
var config = configList.find(function (item) {
return item.key === key;
});
config === null || config === void 0 || (_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config);
setConfigList(function (list) {
return list.filter(function (item) {
return item.key !== key;
});
});
};
// ========================= Refs =========================
react__WEBPACK_IMPORTED_MODULE_3__.useImperativeHandle(ref, function () {
return {
open: function open(config) {
setConfigList(function (list) {
var clone = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(list);
// Replace if exist
var index = clone.findIndex(function (item) {
return item.key === config.key;
});
var innerConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, config);
if (index >= 0) {
var _list$index;
innerConfig.times = (((_list$index = list[index]) === null || _list$index === void 0 ? void 0 : _list$index.times) || 0) + 1;
clone[index] = innerConfig;
} else {
innerConfig.times = 0;
clone.push(innerConfig);
}
if (maxCount > 0 && clone.length > maxCount) {
clone = clone.slice(-maxCount);
}
return clone;
});
},
close: function close(key) {
onNoticeClose(key);
},
destroy: function destroy() {
setConfigList([]);
}
};
});
// ====================== Placements ======================
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_3__.useState({}),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState3, 2),
placements = _React$useState4[0],
setPlacements = _React$useState4[1];
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
var nextPlacements = {};
configList.forEach(function (config) {
var _config$placement = config.placement,
placement = _config$placement === void 0 ? 'topRight' : _config$placement;
if (placement) {
nextPlacements[placement] = nextPlacements[placement] || [];
nextPlacements[placement].push(config);
}
});
// Fill exist placements to avoid empty list causing remove without motion
Object.keys(placements).forEach(function (placement) {
nextPlacements[placement] = nextPlacements[placement] || [];
});
setPlacements(nextPlacements);
}, [configList]);
// Clean up container if all notices fade out
var onAllNoticeRemoved = function onAllNoticeRemoved(placement) {
setPlacements(function (originPlacements) {
var clone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, originPlacements);
var list = clone[placement] || [];
if (!list.length) {
delete clone[placement];
}
return clone;
});
};
// Effect tell that placements is empty now
var emptyRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false);
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
if (Object.keys(placements).length > 0) {
emptyRef.current = true;
} else if (emptyRef.current) {
// Trigger only when from exist to empty
onAllRemoved === null || onAllRemoved === void 0 || onAllRemoved();
emptyRef.current = false;
}
}, [placements]);
// ======================== Render ========================
if (!container) {
return null;
}
var placementList = Object.keys(placements);
return /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_4__.createPortal)( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, null, placementList.map(function (placement) {
var placementConfigList = placements[placement];
var list = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_NoticeList__WEBPACK_IMPORTED_MODULE_5__["default"], {
key: placement,
configList: placementConfigList,
placement: placement,
prefixCls: prefixCls,
className: className === null || className === void 0 ? void 0 : className(placement),
style: style === null || style === void 0 ? void 0 : style(placement),
motion: motion,
onNoticeClose: onNoticeClose,
onAllNoticeRemoved: onAllNoticeRemoved,
stack: stack
});
return renderNotifications ? renderNotifications(list, {
prefixCls: prefixCls,
key: placement
}) : list;
})), container);
});
if (true) {
Notifications.displayName = 'Notifications';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notifications);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/hooks/useNotification.js":
/*!*************************************************************************!*\
!*** ../../../node_modules/rc-notification/es/hooks/useNotification.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ useNotification)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _Notifications__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Notifications */ "../../../node_modules/rc-notification/es/Notifications.js");
/* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js");
var _excluded = ["getContainer", "motion", "prefixCls", "maxCount", "className", "style", "onAllRemoved", "stack", "renderNotifications"];
var defaultGetContainer = function defaultGetContainer() {
return document.body;
};
var uniqueKey = 0;
function mergeConfig() {
var clone = {};
for (var _len = arguments.length, objList = new Array(_len), _key = 0; _key < _len; _key++) {
objList[_key] = arguments[_key];
}
objList.forEach(function (obj) {
if (obj) {
Object.keys(obj).forEach(function (key) {
var val = obj[key];
if (val !== undefined) {
clone[key] = val;
}
});
}
});
return clone;
}
function useNotification() {
var rootConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _rootConfig$getContai = rootConfig.getContainer,
getContainer = _rootConfig$getContai === void 0 ? defaultGetContainer : _rootConfig$getContai,
motion = rootConfig.motion,
prefixCls = rootConfig.prefixCls,
maxCount = rootConfig.maxCount,
className = rootConfig.className,
style = rootConfig.style,
onAllRemoved = rootConfig.onAllRemoved,
stack = rootConfig.stack,
renderNotifications = rootConfig.renderNotifications,
shareConfig = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(rootConfig, _excluded);
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState(),
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState, 2),
container = _React$useState2[0],
setContainer = _React$useState2[1];
var notificationsRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef();
var contextHolder = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_Notifications__WEBPACK_IMPORTED_MODULE_4__["default"], {
container: container,
ref: notificationsRef,
prefixCls: prefixCls,
motion: motion,
maxCount: maxCount,
className: className,
style: style,
onAllRemoved: onAllRemoved,
stack: stack,
renderNotifications: renderNotifications
});
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_3__.useState([]),
_React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useState3, 2),
taskQueue = _React$useState4[0],
setTaskQueue = _React$useState4[1];
var open = (0,rc_util__WEBPACK_IMPORTED_MODULE_5__.useEvent)(function (config) {
var mergedConfig = mergeConfig(shareConfig, config);
if (mergedConfig.key === null || mergedConfig.key === undefined) {
mergedConfig.key = "rc-notification-".concat(uniqueKey);
uniqueKey += 1;
}
setTaskQueue(function (queue) {
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{
type: 'open',
config: mergedConfig
}]);
});
});
// ========================= Refs =========================
var api = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () {
return {
open: open,
close: function close(key) {
setTaskQueue(function (queue) {
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{
type: 'close',
key: key
}]);
});
},
destroy: function destroy() {
setTaskQueue(function (queue) {
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(queue), [{
type: 'destroy'
}]);
});
}
};
}, []);
// ======================= Container ======================
// React 18 should all in effect that we will check container in each render
// Which means getContainer should be stable.
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
setContainer(getContainer());
});
// ======================== Effect ========================
react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () {
// Flush task when node ready
if (notificationsRef.current && taskQueue.length) {
taskQueue.forEach(function (task) {
switch (task.type) {
case 'open':
notificationsRef.current.open(task.config);
break;
case 'close':
notificationsRef.current.close(task.key);
break;
case 'destroy':
notificationsRef.current.destroy();
break;
}
});
// https://github.com/ant-design/ant-design/issues/52590
// React `startTransition` will run once `useEffect` but many times `setState`,
// So `setTaskQueue` with filtered array will cause infinite loop.
// We cache the first match queue instead.
var oriTaskQueue;
var tgtTaskQueue;
// React 17 will mix order of effect & setState in async
// - open: setState[0]
// - effect[0]
// - open: setState[1]
// - effect setState([]) * here will clean up [0, 1] in React 17
setTaskQueue(function (oriQueue) {
if (oriTaskQueue !== oriQueue || !tgtTaskQueue) {
oriTaskQueue = oriQueue;
tgtTaskQueue = oriQueue.filter(function (task) {
return !taskQueue.includes(task);
});
}
return tgtTaskQueue;
});
}
}, [taskQueue]);
// ======================== Return ========================
return [api, contextHolder];
}
/***/ }),
/***/ "../../../node_modules/rc-notification/es/hooks/useStack.js":
/*!******************************************************************!*\
!*** ../../../node_modules/rc-notification/es/hooks/useStack.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js");
var DEFAULT_OFFSET = 8;
var DEFAULT_THRESHOLD = 3;
var DEFAULT_GAP = 16;
var useStack = function useStack(config) {
var result = {
offset: DEFAULT_OFFSET,
threshold: DEFAULT_THRESHOLD,
gap: DEFAULT_GAP
};
if (config && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(config) === 'object') {
var _config$offset, _config$threshold, _config$gap;
result.offset = (_config$offset = config.offset) !== null && _config$offset !== void 0 ? _config$offset : DEFAULT_OFFSET;
result.threshold = (_config$threshold = config.threshold) !== null && _config$threshold !== void 0 ? _config$threshold : DEFAULT_THRESHOLD;
result.gap = (_config$gap = config.gap) !== null && _config$gap !== void 0 ? _config$gap : DEFAULT_GAP;
}
return [!!config, result];
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useStack);
/***/ }),
/***/ "../../../node_modules/rc-notification/es/index.js":
/*!*********************************************************!*\
!*** ../../../node_modules/rc-notification/es/index.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Notice: () => (/* reexport safe */ _Notice__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ NotificationProvider: () => (/* reexport safe */ _NotificationProvider__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ useNotification: () => (/* reexport safe */ _hooks_useNotification__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _hooks_useNotification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks/useNotification */ "../../../node_modules/rc-notification/es/hooks/useNotification.js");
/* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Notice */ "../../../node_modules/rc-notification/es/Notice.js");
/* harmony import */ var _NotificationProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NotificationProvider */ "../../../node_modules/rc-notification/es/NotificationProvider.js");
/***/ })
}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMvdmVuZG9ycy1ub2RlX21vZHVsZXNfcmMtaW5wdXQtbnVtYmVyX2VzX2luZGV4X2pzLW5vZGVfbW9kdWxlc19yYy1pbnB1dF9saWJfdXRpbHNfY29tbW9uVXRpbHNfLTk5NGJmMy52b2x1bnRlZXJhcGkuNGE4ZDgxODkzOWNkZTcyNzFiZmQuYnVuZGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTBEO0FBQ2M7QUFDaEI7QUFDYztBQUNvQjtBQUMxRjtBQUNBO0FBQ2tIO0FBQ3BGO0FBQ087QUFDb0M7QUFDeEI7QUFDTDtBQUNiO0FBQ1c7QUFDRjtBQUNhO0FBQ1E7QUFDckI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNFQUFjO0FBQzlCO0FBQ0E7QUFDQSx1Q0FBdUMsOENBQWdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDhGQUF3QjtBQUN6QztBQUNBLGlCQUFpQiwwQ0FBWTtBQUM3Qix3QkFBd0IsNENBQWM7QUFDdEMsdUJBQXVCLG9GQUFjO0FBQ3JDO0FBQ0E7QUFDQSxzQkFBc0IsMENBQVk7QUFDbEMsdUJBQXVCLDBDQUFZO0FBQ25DLG9CQUFvQiwwQ0FBWTs7QUFFaEM7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBYztBQUN2QyxhQUFhLHNFQUFjO0FBQzNCLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7OztBQ3JKd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZFQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsUUFBUSxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEIrQjtBQUN4QjtBQUM0QiIsInNvdXJjZXMiOlsid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWlucHV0LW51bWJlci9lcy9JbnB1dE51bWJlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC1udW1iZXIvZXMvU3RlcEhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQtbnVtYmVyL2VzL2hvb2tzL3VzZUN1cnNvci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC1udW1iZXIvZXMvaG9va3MvdXNlRnJhbWUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQtbnVtYmVyL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWlucHV0LW51bWJlci9lcy91dGlscy9udW1iZXJVdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWlucHV0L2VzL0Jhc2VJbnB1dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9JbnB1dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9ob29rcy91c2VDb3VudC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy91dGlscy9jb21tb25VdGlscy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9saWIvdXRpbHMvY29tbW9uVXRpbHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvRHJvcGRvd25NZW51LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL0tleXdvcmRUcmlnZ2VyLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL01lbnRpb25zLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL01lbnRpb25zQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9PcHRpb24uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvaG9va3MvdXNlRWZmZWN0U3RhdGUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvdXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL0RpdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9JY29uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvTWVudS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL01lbnVJdGVtLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvTWVudUl0ZW1Hcm91cC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL1N1Yk1lbnUvSW5saW5lU3ViTWVudUxpc3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L1BvcHVwVHJpZ2dlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL1N1Yk1lbnUvU3ViTWVudUxpc3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvY29udGV4dC9JZENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9jb250ZXh0L01lbnVDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvY29udGV4dC9QYXRoQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2NvbnRleHQvUHJpdmF0ZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9ob29rcy91c2VBY2Nlc3NpYmlsaXR5LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlQWN0aXZlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlRGlyZWN0aW9uU3R5bGUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9ob29rcy91c2VLZXlSZWNvcmRzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlTWVtb0NhbGxiYWNrLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlVVVJRC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvcGxhY2VtZW50cy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3V0aWxzL2NvbW1vblV0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy9tb3Rpb25VdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvdXRpbHMvbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy90aW1lVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3V0aWxzL3dhcm5VdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9DU1NNb3Rpb24uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL0NTU01vdGlvbkxpc3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL0RvbVdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZURvbU1vdGlvbkV2ZW50cy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaG9va3MvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaG9va3MvdXNlTmV4dEZyYW1lLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9ob29rcy91c2VTdGF0dXMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZVN0ZXBRdWV1ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2ludGVyZmFjZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvdXRpbC9kaWZmLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy91dGlsL21vdGlvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWNlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW5vdGlmaWNhdGlvbi9lcy9Ob3RpY2VMaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW5vdGlmaWNhdGlvbi9lcy9Ob3RpZmljYXRpb25Qcm92aWRlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWZpY2F0aW9ucy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvaG9va3MvdXNlTm90aWZpY2F0aW9uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW5vdGlmaWNhdGlvbi9lcy9ob29rcy91c2VTdGFjay5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInByZWZpeENsc1wiLCBcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwibWluXCIsIFwibWF4XCIsIFwic3RlcFwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcInZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcInVwSGFuZGxlclwiLCBcImRvd25IYW5kbGVyXCIsIFwia2V5Ym9hcmRcIiwgXCJjaGFuZ2VPbldoZWVsXCIsIFwiY29udHJvbHNcIiwgXCJjbGFzc05hbWVzXCIsIFwic3RyaW5nTW9kZVwiLCBcInBhcnNlclwiLCBcImZvcm1hdHRlclwiLCBcInByZWNpc2lvblwiLCBcImRlY2ltYWxTZXBhcmF0b3JcIiwgXCJvbkNoYW5nZVwiLCBcIm9uSW5wdXRcIiwgXCJvblByZXNzRW50ZXJcIiwgXCJvblN0ZXBcIiwgXCJjaGFuZ2VPbkJsdXJcIiwgXCJkb21SZWZcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJkaXNhYmxlZFwiLCBcInN0eWxlXCIsIFwicHJlZml4Q2xzXCIsIFwidmFsdWVcIiwgXCJwcmVmaXhcIiwgXCJzdWZmaXhcIiwgXCJhZGRvbkJlZm9yZVwiLCBcImFkZG9uQWZ0ZXJcIiwgXCJjbGFzc05hbWVcIiwgXCJjbGFzc05hbWVzXCJdO1xuaW1wb3J0IGdldE1pbmlEZWNpbWFsLCB7IGdldE51bWJlclByZWNpc2lvbiwgbnVtMnN0ciwgdG9GaXhlZCwgdmFsaWRhdGVOdW1iZXIgfSBmcm9tICdAcmMtY29tcG9uZW50L21pbmktZGVjaW1hbCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEJhc2VJbnB1dCB9IGZyb20gJ3JjLWlucHV0JztcbmltcG9ydCB7IHVzZUxheW91dFVwZGF0ZUVmZmVjdCB9IGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZUxheW91dEVmZmVjdFwiO1xuaW1wb3J0IHByb3h5T2JqZWN0IGZyb20gXCJyYy11dGlsL2VzL3Byb3h5T2JqZWN0XCI7XG5pbXBvcnQgeyBjb21wb3NlUmVmIH0gZnJvbSBcInJjLXV0aWwvZXMvcmVmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlQ3Vyc29yIGZyb20gXCIuL2hvb2tzL3VzZUN1cnNvclwiO1xuaW1wb3J0IFN0ZXBIYW5kbGVyIGZyb20gXCIuL1N0ZXBIYW5kbGVyXCI7XG5pbXBvcnQgeyBnZXREZWN1cGxlU3RlcHMgfSBmcm9tIFwiLi91dGlscy9udW1iZXJVdGlsXCI7XG5pbXBvcnQgeyB0cmlnZ2VyRm9jdXMgfSBmcm9tIFwicmMtaW5wdXQvZXMvdXRpbHMvY29tbW9uVXRpbHNcIjtcbmltcG9ydCB1c2VGcmFtZSBmcm9tIFwiLi9ob29rcy91c2VGcmFtZVwiO1xuLyoqXG4gKiBXZSBzdXBwb3J0IGBzdHJpbmdNb2RlYCB3aGljaCBuZWVkIGhhbmRsZSBjb3JyZWN0IHR5cGUgd2hlbiB1c2VyIGNhbGwgaW4gb25DaGFuZ2VcbiAqIGZvcm1hdCBtYXggb3IgbWluIHZhbHVlXG4gKiAxLiBpZiBpc0ludmFsaWQgcmV0dXJuIG51bGxcbiAqIDIuIGlmIHByZWNpc2lvbiBpcyB1bmRlZmluZWQsIHJldHVybiBkZWNpbWFsXG4gKiAzLiBmb3JtYXQgd2l0aCBwcmVjaXNpb25cbiAqICAgIEkuIGlmIG1heCA+IDAsIHJvdW5kIGRvd24gd2l0aCBwcmVjaXNpb24uIEV4YW1wbGU6IG1heD0gMy41LCBwcmVjaXNpb249MCAgYWZ0ZXJGb3JtYXQ6IDNcbiAqICAgIElJLiBpZiBtYXggPCAwLCByb3VuZCB1cCB3aXRoIHByZWNpc2lvbi4gRXhhbXBsZTogbWF4PSAtMy41LCBwcmVjaXNpb249MCAgYWZ0ZXJGb3JtYXQ6IC00XG4gKiAgICBJSUkuIGlmIG1pbiA+IDAsIHJvdW5kIHVwIHdpdGggcHJlY2lzaW9uLiBFeGFtcGxlOiBtaW49IDMuNSwgcHJlY2lzaW9uPTAgIGFmdGVyRm9ybWF0OiA0XG4gKiAgICBJVi4gaWYgbWluIDwgMCwgcm91bmQgZG93biB3aXRoIHByZWNpc2lvbi4gRXhhbXBsZTogbWF4PSAtMy41LCBwcmVjaXNpb249MCAgYWZ0ZXJGb3JtYXQ6IC0zXG4gKi9cbnZhciBnZXREZWNpbWFsVmFsdWUgPSBmdW5jdGlvbiBnZXREZWNpbWFsVmFsdWUoc3RyaW5nTW9kZSwgZGVjaW1hbFZhbHVlKSB7XG4gIGlmIChzdHJpbmdNb2RlIHx8IGRlY2ltYWxWYWx1ZS5pc0VtcHR5KCkpIHtcbiAgICByZXR1cm4gZGVjaW1hbFZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIGRlY2ltYWxWYWx1ZS50b051bWJlcigpO1xufTtcbnZhciBnZXREZWNpbWFsSWZWYWxpZGF0ZSA9IGZ1bmN0aW9uIGdldERlY2ltYWxJZlZhbGlkYXRlKHZhbHVlKSB7XG4gIHZhciBkZWNpbWFsID0gZ2V0TWluaURlY2ltYWwodmFsdWUpO1xuICByZXR1cm4gZGVjaW1hbC5pc0ludmFsaWRhdGUoKSA/IG51bGwgOiBkZWNpbWFsO1xufTtcbnZhciBJbnRlcm5hbElucHV0TnVtYmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBtaW4gPSBwcm9wcy5taW4sXG4gICAgbWF4ID0gcHJvcHMubWF4LFxuICAgIF9wcm9wcyRzdGVwID0gcHJvcHMuc3RlcCxcbiAgICBzdGVwID0gX3Byb3BzJHN0ZXAgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkc3RlcCxcbiAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHksXG4gICAgdXBIYW5kbGVyID0gcHJvcHMudXBIYW5kbGVyLFxuICAgIGRvd25IYW5kbGVyID0gcHJvcHMuZG93bkhhbmRsZXIsXG4gICAga2V5Ym9hcmQgPSBwcm9wcy5rZXlib2FyZCxcbiAgICBfcHJvcHMkY2hhbmdlT25XaGVlbCA9IHByb3BzLmNoYW5nZU9uV2hlZWwsXG4gICAgY2hhbmdlT25XaGVlbCA9IF9wcm9wcyRjaGFuZ2VPbldoZWVsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRjaGFuZ2VPbldoZWVsLFxuICAgIF9wcm9wcyRjb250cm9scyA9IHByb3BzLmNvbnRyb2xzLFxuICAgIGNvbnRyb2xzID0gX3Byb3BzJGNvbnRyb2xzID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJGNvbnRyb2xzLFxuICAgIGNsYXNzTmFtZXMgPSBwcm9wcy5jbGFzc05hbWVzLFxuICAgIHN0cmluZ01vZGUgPSBwcm9wcy5zdHJpbmdNb2RlLFxuICAgIHBhcnNlciA9IHByb3BzLnBhcnNlcixcbiAgICBmb3JtYXR0ZXIgPSBwcm9wcy5mb3JtYXR0ZXIsXG4gICAgcHJlY2lzaW9uID0gcHJvcHMucHJlY2lzaW9uLFxuICAgIGRlY2ltYWxTZXBhcmF0b3IgPSBwcm9wcy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsXG4gICAgb25JbnB1dCA9IHByb3BzLm9uSW5wdXQsXG4gICAgb25QcmVzc0VudGVyID0gcHJvcHMub25QcmVzc0VudGVyLFxuICAgIG9uU3RlcCA9IHByb3BzLm9uU3RlcCxcbiAgICBfcHJvcHMkY2hhbmdlT25CbHVyID0gcHJvcHMuY2hhbmdlT25CbHVyLFxuICAgIGNoYW5nZU9uQmx1ciA9IF9wcm9wcyRjaGFuZ2VPbkJsdXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkY2hhbmdlT25CbHVyLFxuICAgIGRvbVJlZiA9IHByb3BzLmRvbVJlZixcbiAgICBpbnB1dFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgaW5wdXRDbGFzc05hbWUgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWlucHV0XCIpO1xuICB2YXIgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgZm9jdXMgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEZvY3VzID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIHVzZXJUeXBpbmdSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgY29tcG9zaXRpb25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgc2hpZnRLZXlSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVhbCB2YWx1ZSBjb250cm9sXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldE1pbmlEZWNpbWFsKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZSk7XG4gICAgfSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTMsIDIpLFxuICAgIGRlY2ltYWxWYWx1ZSA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0RGVjaW1hbFZhbHVlID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgZnVuY3Rpb24gc2V0VW5jb250cm9sbGVkRGVjaW1hbFZhbHVlKG5ld0RlY2ltYWwpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0RGVjaW1hbFZhbHVlKG5ld0RlY2ltYWwpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gUGFyc2VyICYgRm9ybWF0dGVyID09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIGBwcmVjaXNpb25gIGlzIHVzZWQgZm9yIGZvcm1hdHRlciAmIG9uQ2hhbmdlLlxuICAgKiBJdCB3aWxsIGF1dG8gZ2VuZXJhdGUgYnkgYHZhbHVlYCAmIGBzdGVwYC5cbiAgICogQnV0IGl0IHdpbGwgbm90IGJsb2NrIHVzZXIgdHlwaW5nLlxuICAgKlxuICAgKiBOb3RlOiBBdXRvIGdlbmVyYXRlIGBwcmVjaXNpb25gIGlzIHVzZWQgZm9yIGxlZ2FjeSBsb2dpYy5cbiAgICogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHNpbmNlIHdlIGFscmVhZHkgc3VwcG9ydCBoaWdoIHByZWNpc2lvbiB3aXRoIEJpZ0ludC5cbiAgICpcbiAgICogQHBhcmFtIG51bWJlciAgUHJvdmlkZSB3aGljaCBudW1iZXIgc2hvdWxkIGNhbGN1bGF0ZSBwcmVjaXNpb25cbiAgICogQHBhcmFtIHVzZXJUeXBpbmcgIENoYW5nZSBieSB1c2VyIHR5cGluZ1xuICAgKi9cbiAgdmFyIGdldFByZWNpc2lvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChudW1TdHIsIHVzZXJUeXBpbmcpIHtcbiAgICBpZiAodXNlclR5cGluZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHByZWNpc2lvbiA+PSAwKSB7XG4gICAgICByZXR1cm4gcHJlY2lzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgoZ2V0TnVtYmVyUHJlY2lzaW9uKG51bVN0ciksIGdldE51bWJlclByZWNpc2lvbihzdGVwKSk7XG4gIH0sIFtwcmVjaXNpb24sIHN0ZXBdKTtcblxuICAvLyA+Pj4gUGFyc2VyXG4gIHZhciBtZXJnZWRQYXJzZXIgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobnVtKSB7XG4gICAgdmFyIG51bVN0ciA9IFN0cmluZyhudW0pO1xuICAgIGlmIChwYXJzZXIpIHtcbiAgICAgIHJldHVybiBwYXJzZXIobnVtU3RyKTtcbiAgICB9XG4gICAgdmFyIHBhcnNlZFN0ciA9IG51bVN0cjtcbiAgICBpZiAoZGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgcGFyc2VkU3RyID0gcGFyc2VkU3RyLnJlcGxhY2UoZGVjaW1hbFNlcGFyYXRvciwgJy4nKTtcbiAgICB9XG5cbiAgICAvLyBbTGVnYWN5XSBXZSBzdGlsbCBzdXBwb3J0IGF1dG8gY29udmVydCBgJCAxMjMsNDU2YCB0byBgMTIzNDU2YFxuICAgIHJldHVybiBwYXJzZWRTdHIucmVwbGFjZSgvW15cXHcuLV0rL2csICcnKTtcbiAgfSwgW3BhcnNlciwgZGVjaW1hbFNlcGFyYXRvcl0pO1xuXG4gIC8vID4+PiBGb3JtYXR0ZXJcbiAgdmFyIGlucHV0VmFsdWVSZWYgPSBSZWFjdC51c2VSZWYoJycpO1xuICB2YXIgbWVyZ2VkRm9ybWF0dGVyID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG51bWJlciwgdXNlclR5cGluZykge1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIHJldHVybiBmb3JtYXR0ZXIobnVtYmVyLCB7XG4gICAgICAgIHVzZXJUeXBpbmc6IHVzZXJUeXBpbmcsXG4gICAgICAgIGlucHV0OiBTdHJpbmcoaW5wdXRWYWx1ZVJlZi5jdXJyZW50KVxuICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBzdHIgPSB0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJyA/IG51bTJzdHIobnVtYmVyKSA6IG51bWJlcjtcblxuICAgIC8vIFVzZXIgdHlwaW5nIHdpbGwgbm90IGF1dG8gZm9ybWF0IHdpdGggcHJlY2lzaW9uIGRpcmVjdGx5XG4gICAgaWYgKCF1c2VyVHlwaW5nKSB7XG4gICAgICB2YXIgbWVyZ2VkUHJlY2lzaW9uID0gZ2V0UHJlY2lzaW9uKHN0ciwgdXNlclR5cGluZyk7XG4gICAgICBpZiAodmFsaWRhdGVOdW1iZXIoc3RyKSAmJiAoZGVjaW1hbFNlcGFyYXRvciB8fCBtZXJnZWRQcmVjaXNpb24gPj0gMCkpIHtcbiAgICAgICAgLy8gU2VwYXJhdG9yXG4gICAgICAgIHZhciBzZXBhcmF0b3JTdHIgPSBkZWNpbWFsU2VwYXJhdG9yIHx8ICcuJztcbiAgICAgICAgc3RyID0gdG9GaXhlZChzdHIsIHNlcGFyYXRvclN0ciwgbWVyZ2VkUHJlY2lzaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfSwgW2Zvcm1hdHRlciwgZ2V0UHJlY2lzaW9uLCBkZWNpbWFsU2VwYXJhdG9yXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gSW5wdXRWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogSW5wdXQgdGV4dCB2YWx1ZSBjb250cm9sXG4gICAqXG4gICAqIFVzZXIgY2FuIG5vdCB1cGRhdGUgaW5wdXQgY29udGVudCBkaXJlY3RseS4gSXQgdXBkYXRlcyB3aXRoIGZvbGxvdyBydWxlcyBieSBwcmlvcml0eTpcbiAgICogIDEuIGNvbnRyb2xsZWQgYHZhbHVlYCBjaGFuZ2VkXG4gICAqICAgICogW1NQRUNJQUxdIFR5cGluZyBsaWtlIGAxLmAgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBjb252ZXJ0IHRvIGAxYFxuICAgKiAgMi4gVXNlciB0eXBpbmcgd2l0aCBmb3JtYXQgKG5vdCBwcmVjaXNpb24pXG4gICAqICAzLiBCbHVyIG9yIEVudGVyIHRyaWdnZXIgcmV2YWxpZGF0ZVxuICAgKi9cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTUgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaW5pdFZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgICBpZiAoZGVjaW1hbFZhbHVlLmlzSW52YWxpZGF0ZSgpICYmIFsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKF90eXBlb2YoaW5pdFZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihpbml0VmFsdWUpID8gJycgOiBpbml0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVyZ2VkRm9ybWF0dGVyKGRlY2ltYWxWYWx1ZS50b1N0cmluZygpLCBmYWxzZSk7XG4gICAgfSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTUsIDIpLFxuICAgIGlucHV0VmFsdWUgPSBfUmVhY3QkdXNlU3RhdGU2WzBdLFxuICAgIHNldEludGVybmFsSW5wdXRWYWx1ZSA9IF9SZWFjdCR1c2VTdGF0ZTZbMV07XG4gIGlucHV0VmFsdWVSZWYuY3VycmVudCA9IGlucHV0VmFsdWU7XG5cbiAgLy8gU2hvdWxkIGFsd2F5cyBiZSBzdHJpbmdcbiAgZnVuY3Rpb24gc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSwgdXNlclR5cGluZykge1xuICAgIHNldEludGVybmFsSW5wdXRWYWx1ZShtZXJnZWRGb3JtYXR0ZXIoXG4gICAgLy8gSW52YWxpZGF0ZSBudW1iZXIgaXMgc29tZXRpbWUgcGFzc2VkIGJ5IGV4dGVybmFsIGNvbnRyb2wsIHdlIHNob3VsZCBsZXQgaXQgZ29cbiAgICAvLyBPdGhlcndpc2UgaXMgY29udHJvbGxlZCBieSBpbnRlcm5hbCBpbnRlcmFjdGl2ZSBsb2dpYyB3aGljaCBjaGVjayBieSB1c2VyVHlwaW5nXG4gICAgLy8gWW91IGNhbiByZWYgJ3Nob3cgbGltaXRlZCB2YWx1ZSB3aGVuIGlucHV0IGlzIG5vdCBmb2N1c2VkJyB0ZXN0IGZvciBtb3JlIGluZm8uXG4gICAgbmV3VmFsdWUuaXNJbnZhbGlkYXRlKCkgPyBuZXdWYWx1ZS50b1N0cmluZyhmYWxzZSkgOiBuZXdWYWx1ZS50b1N0cmluZyghdXNlclR5cGluZyksIHVzZXJUeXBpbmcpKTtcbiAgfVxuXG4gIC8vID4+PiBNYXggJiBNaW4gbGltaXRcbiAgdmFyIG1heERlY2ltYWwgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0RGVjaW1hbElmVmFsaWRhdGUobWF4KTtcbiAgfSwgW21heCwgcHJlY2lzaW9uXSk7XG4gIHZhciBtaW5EZWNpbWFsID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldERlY2ltYWxJZlZhbGlkYXRlKG1pbik7XG4gIH0sIFttaW4sIHByZWNpc2lvbl0pO1xuICB2YXIgdXBEaXNhYmxlZCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWF4RGVjaW1hbCB8fCAhZGVjaW1hbFZhbHVlIHx8IGRlY2ltYWxWYWx1ZS5pc0ludmFsaWRhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbWF4RGVjaW1hbC5sZXNzRXF1YWxzKGRlY2ltYWxWYWx1ZSk7XG4gIH0sIFttYXhEZWNpbWFsLCBkZWNpbWFsVmFsdWVdKTtcbiAgdmFyIGRvd25EaXNhYmxlZCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWluRGVjaW1hbCB8fCAhZGVjaW1hbFZhbHVlIHx8IGRlY2ltYWxWYWx1ZS5pc0ludmFsaWRhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZGVjaW1hbFZhbHVlLmxlc3NFcXVhbHMobWluRGVjaW1hbCk7XG4gIH0sIFttaW5EZWNpbWFsLCBkZWNpbWFsVmFsdWVdKTtcblxuICAvLyBDdXJzb3IgY29udHJvbGxlclxuICB2YXIgX3VzZUN1cnNvciA9IHVzZUN1cnNvcihpbnB1dFJlZi5jdXJyZW50LCBmb2N1cyksXG4gICAgX3VzZUN1cnNvcjIgPSBfc2xpY2VkVG9BcnJheShfdXNlQ3Vyc29yLCAyKSxcbiAgICByZWNvcmRDdXJzb3IgPSBfdXNlQ3Vyc29yMlswXSxcbiAgICByZXN0b3JlQ3Vyc29yID0gX3VzZUN1cnNvcjJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRGF0YSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogRmluZCB0YXJnZXQgdmFsdWUgY2xvc2V0IHdpdGhpbiByYW5nZS5cbiAgICogZS5nLiBbMTEsIDI4XTpcbiAgICogICAgMyAgPT4gMTFcbiAgICogICAgMjMgPT4gMjNcbiAgICogICAgOTkgPT4gMjhcbiAgICovXG4gIHZhciBnZXRSYW5nZVZhbHVlID0gZnVuY3Rpb24gZ2V0UmFuZ2VWYWx1ZSh0YXJnZXQpIHtcbiAgICAvLyB0YXJnZXQgPiBtYXhcbiAgICBpZiAobWF4RGVjaW1hbCAmJiAhdGFyZ2V0Lmxlc3NFcXVhbHMobWF4RGVjaW1hbCkpIHtcbiAgICAgIHJldHVybiBtYXhEZWNpbWFsO1xuICAgIH1cblxuICAgIC8vIHRhcmdldCA8IG1pblxuICAgIGlmIChtaW5EZWNpbWFsICYmICFtaW5EZWNpbWFsLmxlc3NFcXVhbHModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIG1pbkRlY2ltYWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayB2YWx1ZSBpcyBpbiBbbWluLCBtYXhdIHJhbmdlXG4gICAqL1xuICB2YXIgaXNJblJhbmdlID0gZnVuY3Rpb24gaXNJblJhbmdlKHRhcmdldCkge1xuICAgIHJldHVybiAhZ2V0UmFuZ2VWYWx1ZSh0YXJnZXQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGBvbkNoYW5nZWAgaWYgdmFsdWUgdmFsaWRhdGVkIGFuZCBub3QgZXF1YWxzIG9mIG9yaWdpbi5cbiAgICogUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHJlLWFsaWduIGluIHJhbmdlLlxuICAgKi9cbiAgdmFyIHRyaWdnZXJWYWx1ZVVwZGF0ZSA9IGZ1bmN0aW9uIHRyaWdnZXJWYWx1ZVVwZGF0ZShuZXdWYWx1ZSwgdXNlclR5cGluZykge1xuICAgIHZhciB1cGRhdGVWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHZhciBpc1JhbmdlVmFsaWRhdGUgPSBpc0luUmFuZ2UodXBkYXRlVmFsdWUpIHx8IHVwZGF0ZVZhbHVlLmlzRW1wdHkoKTtcblxuICAgIC8vIFNraXAgYWxpZ24gdmFsdWUgd2hlbiB0cmlnZ2VyIHZhbHVlIGlzIGVtcHR5LlxuICAgIC8vIFdlIGp1c3QgdHJpZ2dlciBvbkNoYW5nZShudWxsKVxuICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBibG9jayB1c2VyIHR5cGluZ1xuICAgIGlmICghdXBkYXRlVmFsdWUuaXNFbXB0eSgpICYmICF1c2VyVHlwaW5nKSB7XG4gICAgICAvLyBSZXZlcnQgdmFsdWUgaW4gcmFuZ2UgaWYgbmVlZGVkXG4gICAgICB1cGRhdGVWYWx1ZSA9IGdldFJhbmdlVmFsdWUodXBkYXRlVmFsdWUpIHx8IHVwZGF0ZVZhbHVlO1xuICAgICAgaXNSYW5nZVZhbGlkYXRlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFyZWFkT25seSAmJiAhZGlzYWJsZWQgJiYgaXNSYW5nZVZhbGlkYXRlKSB7XG4gICAgICB2YXIgbnVtU3RyID0gdXBkYXRlVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHZhciBtZXJnZWRQcmVjaXNpb24gPSBnZXRQcmVjaXNpb24obnVtU3RyLCB1c2VyVHlwaW5nKTtcbiAgICAgIGlmIChtZXJnZWRQcmVjaXNpb24gPj0gMCkge1xuICAgICAgICB1cGRhdGVWYWx1ZSA9IGdldE1pbmlEZWNpbWFsKHRvRml4ZWQobnVtU3RyLCAnLicsIG1lcmdlZFByZWNpc2lvbikpO1xuXG4gICAgICAgIC8vIFdoZW4gdG8gZml4ZWQuIFRoZSB2YWx1ZSBtYXkgb3V0IG9mIG1pbiAmIG1heCByYW5nZS5cbiAgICAgICAgLy8gNCBpbiBbMCwgMy44XSA9PiAzLjggPT4gNCAodG9GaXhlZClcbiAgICAgICAgaWYgKCFpc0luUmFuZ2UodXBkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgdXBkYXRlVmFsdWUgPSBnZXRNaW5pRGVjaW1hbCh0b0ZpeGVkKG51bVN0ciwgJy4nLCBtZXJnZWRQcmVjaXNpb24sIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUcmlnZ2VyIGV2ZW50XG4gICAgICBpZiAoIXVwZGF0ZVZhbHVlLmVxdWFscyhkZWNpbWFsVmFsdWUpKSB7XG4gICAgICAgIHNldFVuY29udHJvbGxlZERlY2ltYWxWYWx1ZSh1cGRhdGVWYWx1ZSk7XG4gICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2UodXBkYXRlVmFsdWUuaXNFbXB0eSgpID8gbnVsbCA6IGdldERlY2ltYWxWYWx1ZShzdHJpbmdNb2RlLCB1cGRhdGVWYWx1ZSkpO1xuXG4gICAgICAgIC8vIFJlZm9ybWF0IGlucHV0IGlmIHZhbHVlIGlzIG5vdCBjb250cm9sbGVkXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2V0SW5wdXRWYWx1ZSh1cGRhdGVWYWx1ZSwgdXNlclR5cGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1cGRhdGVWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY2ltYWxWYWx1ZTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBVc2VyIElucHV0ID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbk5leHRQcm9taXNlID0gdXNlRnJhbWUoKTtcblxuICAvLyA+Pj4gQ29sbGVjdCBpbnB1dCB2YWx1ZVxuICB2YXIgY29sbGVjdElucHV0VmFsdWUgPSBmdW5jdGlvbiBjb2xsZWN0SW5wdXRWYWx1ZShpbnB1dFN0cikge1xuICAgIHJlY29yZEN1cnNvcigpO1xuXG4gICAgLy8gVXBkYXRlIGlucHV0VmFsdWUgaW4gY2FzZSBpbnB1dCBjYW4gbm90IHBhcnNlIGFzIG51bWJlclxuICAgIC8vIFJlZnJlc2ggcmVmIHZhbHVlIGltbWVkaWF0ZWx5IHNpbmNlIGl0IG1heSB1c2VkIGJ5IGZvcm1hdHRlclxuICAgIGlucHV0VmFsdWVSZWYuY3VycmVudCA9IGlucHV0U3RyO1xuICAgIHNldEludGVybmFsSW5wdXRWYWx1ZShpbnB1dFN0cik7XG5cbiAgICAvLyBQYXJzZSBudW1iZXJcbiAgICBpZiAoIWNvbXBvc2l0aW9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIHZhciBmaW5hbFZhbHVlID0gbWVyZ2VkUGFyc2VyKGlucHV0U3RyKTtcbiAgICAgIHZhciBmaW5hbERlY2ltYWwgPSBnZXRNaW5pRGVjaW1hbChmaW5hbFZhbHVlKTtcbiAgICAgIGlmICghZmluYWxEZWNpbWFsLmlzTmFOKCkpIHtcbiAgICAgICAgdHJpZ2dlclZhbHVlVXBkYXRlKGZpbmFsRGVjaW1hbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBvbklucHV0IGxhdGVyIHRvIGxldCB1c2VyIGN1c3RvbWl6ZSB2YWx1ZSBpZiB0aGV5IHdhbnQgdG8gaGFuZGxlIHNvbWV0aGluZyBhZnRlciBvbkNoYW5nZVxuICAgIG9uSW5wdXQgPT09IG51bGwgfHwgb25JbnB1dCA9PT0gdm9pZCAwIHx8IG9uSW5wdXQoaW5wdXRTdHIpO1xuXG4gICAgLy8gb3B0aW1pemUgZm9yIGNoaW5lc2UgaW5wdXQgZXhwZXJpZW5jZVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzgxOTZcbiAgICBvbk5leHRQcm9taXNlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBuZXh0SW5wdXRTdHIgPSBpbnB1dFN0cjtcbiAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgIG5leHRJbnB1dFN0ciA9IGlucHV0U3RyLnJlcGxhY2UoL+OAgi9nLCAnLicpO1xuICAgICAgfVxuICAgICAgaWYgKG5leHRJbnB1dFN0ciAhPT0gaW5wdXRTdHIpIHtcbiAgICAgICAgY29sbGVjdElucHV0VmFsdWUobmV4dElucHV0U3RyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvLyA+Pj4gQ29tcG9zaXRpb25cbiAgdmFyIG9uQ29tcG9zaXRpb25TdGFydCA9IGZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydCgpIHtcbiAgICBjb21wb3NpdGlvblJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIG9uQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kKCkge1xuICAgIGNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBjb2xsZWN0SW5wdXRWYWx1ZShpbnB1dFJlZi5jdXJyZW50LnZhbHVlKTtcbiAgfTtcblxuICAvLyA+Pj4gSW5wdXRcbiAgdmFyIG9uSW50ZXJuYWxJbnB1dCA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxJbnB1dChlKSB7XG4gICAgY29sbGVjdElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN0ZXAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSW50ZXJuYWxTdGVwID0gZnVuY3Rpb24gb25JbnRlcm5hbFN0ZXAodXApIHtcbiAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQ7XG4gICAgLy8gSWdub3JlIHN0ZXAgc2luY2Ugb3V0IG9mIHJhbmdlXG4gICAgaWYgKHVwICYmIHVwRGlzYWJsZWQgfHwgIXVwICYmIGRvd25EaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHR5cGluZyBzdGF0dXMgc2luY2UgaXQgbWF5IGJlIGNhdXNlZCBieSB1cCAmIGRvd24ga2V5LlxuICAgIC8vIFdlIHNob3VsZCBzeW5jIHdpdGggaW5wdXQgdmFsdWUuXG4gICAgdXNlclR5cGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgdmFyIHN0ZXBEZWNpbWFsID0gZ2V0TWluaURlY2ltYWwoc2hpZnRLZXlSZWYuY3VycmVudCA/IGdldERlY3VwbGVTdGVwcyhzdGVwKSA6IHN0ZXApO1xuICAgIGlmICghdXApIHtcbiAgICAgIHN0ZXBEZWNpbWFsID0gc3RlcERlY2ltYWwubmVnYXRlKCk7XG4gICAgfVxuICAgIHZhciB0YXJnZXQgPSAoZGVjaW1hbFZhbHVlIHx8IGdldE1pbmlEZWNpbWFsKDApKS5hZGQoc3RlcERlY2ltYWwudG9TdHJpbmcoKSk7XG4gICAgdmFyIHVwZGF0ZWRWYWx1ZSA9IHRyaWdnZXJWYWx1ZVVwZGF0ZSh0YXJnZXQsIGZhbHNlKTtcbiAgICBvblN0ZXAgPT09IG51bGwgfHwgb25TdGVwID09PSB2b2lkIDAgfHwgb25TdGVwKGdldERlY2ltYWxWYWx1ZShzdHJpbmdNb2RlLCB1cGRhdGVkVmFsdWUpLCB7XG4gICAgICBvZmZzZXQ6IHNoaWZ0S2V5UmVmLmN1cnJlbnQgPyBnZXREZWN1cGxlU3RlcHMoc3RlcCkgOiBzdGVwLFxuICAgICAgdHlwZTogdXAgPyAndXAnIDogJ2Rvd24nXG4gICAgfSk7XG4gICAgKF9pbnB1dFJlZiRjdXJyZW50ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudC5mb2N1cygpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRmx1c2ggPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEZsdXNoIGN1cnJlbnQgaW5wdXQgY29udGVudCB0byB0cmlnZ2VyIHZhbHVlIGNoYW5nZSAmIHJlLWZvcm1hdHRlciBpbnB1dCBpZiBuZWVkZWQuXG4gICAqIFRoaXMgd2lsbCBhbHdheXMgZmx1c2ggaW5wdXQgdmFsdWUgZm9yIHVwZGF0ZS5cbiAgICogSWYgaXQncyBpbnZhbGlkYXRlLCB3aWxsIGZhbGxiYWNrIHRvIGxhc3QgdmFsaWRhdGUgdmFsdWUuXG4gICAqL1xuICB2YXIgZmx1c2hJbnB1dFZhbHVlID0gZnVuY3Rpb24gZmx1c2hJbnB1dFZhbHVlKHVzZXJUeXBpbmcpIHtcbiAgICB2YXIgcGFyc2VkVmFsdWUgPSBnZXRNaW5pRGVjaW1hbChtZXJnZWRQYXJzZXIoaW5wdXRWYWx1ZSkpO1xuICAgIHZhciBmb3JtYXRWYWx1ZTtcbiAgICBpZiAoIXBhcnNlZFZhbHVlLmlzTmFOKCkpIHtcbiAgICAgIC8vIE9ubHkgdmFsaWRhdGUgdmFsdWUgb3IgZW1wdHkgdmFsdWUgY2FuIGJlIHJlLWZpbGwgdG8gaW5wdXRWYWx1ZVxuICAgICAgLy8gUmVhc3NpZ24gdGhlIGZvcm1hdFZhbHVlIHdpdGhpbiByYW5nZWQgb2YgdHJpZ2dlciBjb250cm9sXG4gICAgICBmb3JtYXRWYWx1ZSA9IHRyaWdnZXJWYWx1ZVVwZGF0ZShwYXJzZWRWYWx1ZSwgdXNlclR5cGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdFZhbHVlID0gdHJpZ2dlclZhbHVlVXBkYXRlKGRlY2ltYWxWYWx1ZSwgdXNlclR5cGluZyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBSZXNldCBiYWNrIHdpdGggY29udHJvbGxlZCB2YWx1ZSBmaXJzdFxuICAgICAgc2V0SW5wdXRWYWx1ZShkZWNpbWFsVmFsdWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKCFmb3JtYXRWYWx1ZS5pc05hTigpKSB7XG4gICAgICAvLyBSZXNldCBpbnB1dCBiYWNrIHNpbmNlIG5vIHZhbGlkYXRlIHZhbHVlXG4gICAgICBzZXRJbnB1dFZhbHVlKGZvcm1hdFZhbHVlLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNvbHZlIHRoZSBpc3N1ZSBvZiB0aGUgZXZlbnQgdHJpZ2dlcmluZyBzZXF1ZW5jZSB3aGVuIGVudGVyaW5nIG51bWJlcnMgaW4gY2hpbmVzZSBpbnB1dCAoU2FmYXJpKVxuICB2YXIgb25CZWZvcmVJbnB1dCA9IGZ1bmN0aW9uIG9uQmVmb3JlSW5wdXQoKSB7XG4gICAgdXNlclR5cGluZ1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIHZhciBrZXkgPSBldmVudC5rZXksXG4gICAgICBzaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIHVzZXJUeXBpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgc2hpZnRLZXlSZWYuY3VycmVudCA9IHNoaWZ0S2V5O1xuICAgIGlmIChrZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlmICghY29tcG9zaXRpb25SZWYuY3VycmVudCkge1xuICAgICAgICB1c2VyVHlwaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZsdXNoSW5wdXRWYWx1ZShmYWxzZSk7XG4gICAgICBvblByZXNzRW50ZXIgPT09IG51bGwgfHwgb25QcmVzc0VudGVyID09PSB2b2lkIDAgfHwgb25QcmVzc0VudGVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGtleWJvYXJkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvIHN0ZXBcbiAgICBpZiAoIWNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgJiYgWydVcCcsICdBcnJvd1VwJywgJ0Rvd24nLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgb25JbnRlcm5hbFN0ZXAoa2V5ID09PSAnVXAnIHx8IGtleSA9PT0gJ0Fycm93VXAnKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuICB2YXIgb25LZXlVcCA9IGZ1bmN0aW9uIG9uS2V5VXAoKSB7XG4gICAgdXNlclR5cGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgc2hpZnRLZXlSZWYuY3VycmVudCA9IGZhbHNlO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjaGFuZ2VPbldoZWVsICYmIGZvY3VzKSB7XG4gICAgICB2YXIgb25XaGVlbCA9IGZ1bmN0aW9uIG9uV2hlZWwoZXZlbnQpIHtcbiAgICAgICAgLy8gbW92aW5nIG1vdXNlIHdoZWVsIHJpc2VzIHdoZWVsIGV2ZW50IHdpdGggZGVsdGFZIDwgMFxuICAgICAgICAvLyBzY3JvbGwgdmFsdWUgZ3Jvd3MgZnJvbSB0b3AgdG8gYm90dG9tLCBhcyBzY3JlZW4gWSBjb29yZGluYXRlXG4gICAgICAgIG9uSW50ZXJuYWxTdGVwKGV2ZW50LmRlbHRhWSA8IDApO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcbiAgICAgIHZhciBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgLy8gUmVhY3Qgb25XaGVlbCBpcyBwYXNzaXZlIGFuZCB3ZSBjYW4ndCBwcmV2ZW50RGVmYXVsdCgpIGluIGl0LlxuICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIHNob3VsZCBzdWJzY3JpYmUgd2l0aCBET00gbGlzdGVuZXJcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjM2NjMwMjUvcmVhY3Qtb253aGVlbC1oYW5kbGVyLWNhbnQtcHJldmVudGRlZmF1bHQtYmVjYXVzZS1pdHMtYS1wYXNzaXZlLWV2ZW50LWxpc3RlbmV2XG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwge1xuICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gPj4+IEZvY3VzICYgQmx1clxuICB2YXIgb25CbHVyID0gZnVuY3Rpb24gb25CbHVyKCkge1xuICAgIGlmIChjaGFuZ2VPbkJsdXIpIHtcbiAgICAgIGZsdXNoSW5wdXRWYWx1ZShmYWxzZSk7XG4gICAgfVxuICAgIHNldEZvY3VzKGZhbHNlKTtcbiAgICB1c2VyVHlwaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBDb250cm9sbGVkID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElucHV0IGJ5IHByZWNpc2lvbiAmIGZvcm1hdHRlclxuICB1c2VMYXlvdXRVcGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZGVjaW1hbFZhbHVlLmlzSW52YWxpZGF0ZSgpKSB7XG4gICAgICBzZXRJbnB1dFZhbHVlKGRlY2ltYWxWYWx1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSwgW3ByZWNpc2lvbiwgZm9ybWF0dGVyXSk7XG5cbiAgLy8gSW5wdXQgYnkgdmFsdWVcbiAgdXNlTGF5b3V0VXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3VmFsdWUgPSBnZXRNaW5pRGVjaW1hbCh2YWx1ZSk7XG4gICAgc2V0RGVjaW1hbFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB2YXIgY3VycmVudFBhcnNlZFZhbHVlID0gZ2V0TWluaURlY2ltYWwobWVyZ2VkUGFyc2VyKGlucHV0VmFsdWUpKTtcblxuICAgIC8vIFdoZW4gdXNlciB0eXBpbmcgZnJvbSBgMS4yYCB0byBgMS5gLCB3ZSBzaG91bGQgbm90IGNvbnZlcnQgdG8gYDFgIGltbWVkaWF0ZWx5LlxuICAgIC8vIEJ1dCBsZXQgaXQgZ28gaWYgdXNlciBzZXQgYGZvcm1hdHRlcmBcbiAgICBpZiAoIW5ld1ZhbHVlLmVxdWFscyhjdXJyZW50UGFyc2VkVmFsdWUpIHx8ICF1c2VyVHlwaW5nUmVmLmN1cnJlbnQgfHwgZm9ybWF0dGVyKSB7XG4gICAgICAvLyBVcGRhdGUgdmFsdWUgYXMgZWZmZWN0XG4gICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlLCB1c2VyVHlwaW5nUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDdXJzb3IgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB1c2VMYXlvdXRVcGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIHJlc3RvcmVDdXJzb3IoKTtcbiAgICB9XG4gIH0sIFtpbnB1dFZhbHVlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogZG9tUmVmLFxuICAgIGNsYXNzTmFtZTogY2xzeChwcmVmaXhDbHMsIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1mb2N1c2VkXCIpLCBmb2N1cyksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1yZWFkb25seVwiKSwgcmVhZE9ubHkpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW5vdC1hLW51bWJlclwiKSwgZGVjaW1hbFZhbHVlLmlzTmFOKCkpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW91dC1vZi1yYW5nZVwiKSwgIWRlY2ltYWxWYWx1ZS5pc0ludmFsaWRhdGUoKSAmJiAhaXNJblJhbmdlKGRlY2ltYWxWYWx1ZSkpKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICAgIHNldEZvY3VzKHRydWUpO1xuICAgIH0sXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgb25LZXlVcDogb25LZXlVcCxcbiAgICBvbkNvbXBvc2l0aW9uU3RhcnQ6IG9uQ29tcG9zaXRpb25TdGFydCxcbiAgICBvbkNvbXBvc2l0aW9uRW5kOiBvbkNvbXBvc2l0aW9uRW5kLFxuICAgIG9uQmVmb3JlSW5wdXQ6IG9uQmVmb3JlSW5wdXRcbiAgfSwgY29udHJvbHMgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3RlcEhhbmRsZXIsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB1cE5vZGU6IHVwSGFuZGxlcixcbiAgICBkb3duTm9kZTogZG93bkhhbmRsZXIsXG4gICAgdXBEaXNhYmxlZDogdXBEaXNhYmxlZCxcbiAgICBkb3duRGlzYWJsZWQ6IGRvd25EaXNhYmxlZCxcbiAgICBvblN0ZXA6IG9uSW50ZXJuYWxTdGVwXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChpbnB1dENsYXNzTmFtZSwgXCItd3JhcFwiKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgcm9sZTogXCJzcGluYnV0dG9uXCIsXG4gICAgXCJhcmlhLXZhbHVlbWluXCI6IG1pbixcbiAgICBcImFyaWEtdmFsdWVtYXhcIjogbWF4LFxuICAgIFwiYXJpYS12YWx1ZW5vd1wiOiBkZWNpbWFsVmFsdWUuaXNJbnZhbGlkYXRlKCkgPyBudWxsIDogZGVjaW1hbFZhbHVlLnRvU3RyaW5nKCksXG4gICAgc3RlcDogc3RlcFxuICB9LCBpbnB1dFByb3BzLCB7XG4gICAgcmVmOiBjb21wb3NlUmVmKGlucHV0UmVmLCByZWYpLFxuICAgIGNsYXNzTmFtZTogaW5wdXRDbGFzc05hbWUsXG4gICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgb25DaGFuZ2U6IG9uSW50ZXJuYWxJbnB1dCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHJlYWRPbmx5XG4gIH0pKSkpO1xufSk7XG52YXIgSW5wdXROdW1iZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIF9wcm9wcyRwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3Byb3BzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLWlucHV0LW51bWJlcicgOiBfcHJvcHMkcHJlZml4Q2xzLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgcHJlZml4ID0gcHJvcHMucHJlZml4LFxuICAgIHN1ZmZpeCA9IHByb3BzLnN1ZmZpeCxcbiAgICBhZGRvbkJlZm9yZSA9IHByb3BzLmFkZG9uQmVmb3JlLFxuICAgIGFkZG9uQWZ0ZXIgPSBwcm9wcy5hZGRvbkFmdGVyLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBjbGFzc05hbWVzID0gcHJvcHMuY2xhc3NOYW1lcyxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgdmFyIGhvbGRlclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIGlucHV0TnVtYmVyRG9tUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB2YXIgaW5wdXRGb2N1c1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMob3B0aW9uKSB7XG4gICAgaWYgKGlucHV0Rm9jdXNSZWYuY3VycmVudCkge1xuICAgICAgdHJpZ2dlckZvY3VzKGlucHV0Rm9jdXNSZWYuY3VycmVudCwgb3B0aW9uKTtcbiAgICB9XG4gIH07XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb3h5T2JqZWN0KGlucHV0Rm9jdXNSZWYuY3VycmVudCwge1xuICAgICAgZm9jdXM6IGZvY3VzLFxuICAgICAgbmF0aXZlRWxlbWVudDogaG9sZGVyUmVmLmN1cnJlbnQubmF0aXZlRWxlbWVudCB8fCBpbnB1dE51bWJlckRvbVJlZi5jdXJyZW50XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUlucHV0LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgdHJpZ2dlckZvY3VzOiBmb2N1cyxcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHN0eWxlOiBzdHlsZSxcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBzdWZmaXg6IHN1ZmZpeCxcbiAgICBhZGRvbkFmdGVyOiBhZGRvbkFmdGVyLFxuICAgIGFkZG9uQmVmb3JlOiBhZGRvbkJlZm9yZSxcbiAgICBjbGFzc05hbWVzOiBjbGFzc05hbWVzLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIGFmZml4V3JhcHBlcjogJ2RpdicsXG4gICAgICBncm91cFdyYXBwZXI6ICdkaXYnLFxuICAgICAgd3JhcHBlcjogJ2RpdicsXG4gICAgICBncm91cEFkZG9uOiAnZGl2J1xuICAgIH0sXG4gICAgcmVmOiBob2xkZXJSZWZcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxJbnB1dE51bWJlciwgX2V4dGVuZHMoe1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICByZWY6IGlucHV0Rm9jdXNSZWYsXG4gICAgZG9tUmVmOiBpbnB1dE51bWJlckRvbVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5pbnB1dFxuICB9LCByZXN0KSkpO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBJbnB1dE51bWJlci5kaXNwbGF5TmFtZSA9ICdJbnB1dE51bWJlcic7XG59XG5leHBvcnQgZGVmYXVsdCBJbnB1dE51bWJlcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bmtub3duLXByb3BlcnR5ICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB1c2VNb2JpbGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTW9iaWxlXCI7XG5pbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuXG4vKipcbiAqIFdoZW4gY2xpY2sgYW5kIGhvbGQgb24gYSBidXR0b24gLSB0aGUgc3BlZWQgb2YgYXV0byBjaGFuZ2luZyB0aGUgdmFsdWUuXG4gKi9cbnZhciBTVEVQX0lOVEVSVkFMID0gMjAwO1xuXG4vKipcbiAqIFdoZW4gY2xpY2sgYW5kIGhvbGQgb24gYSBidXR0b24gLSB0aGUgZGVsYXkgYmVmb3JlIGF1dG8gY2hhbmdpbmcgdGhlIHZhbHVlLlxuICovXG52YXIgU1RFUF9ERUxBWSA9IDYwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN0ZXBIYW5kbGVyKF9yZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IF9yZWYucHJlZml4Q2xzLFxuICAgIHVwTm9kZSA9IF9yZWYudXBOb2RlLFxuICAgIGRvd25Ob2RlID0gX3JlZi5kb3duTm9kZSxcbiAgICB1cERpc2FibGVkID0gX3JlZi51cERpc2FibGVkLFxuICAgIGRvd25EaXNhYmxlZCA9IF9yZWYuZG93bkRpc2FibGVkLFxuICAgIG9uU3RlcCA9IF9yZWYub25TdGVwO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gU3RlcCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHN0ZXBUaW1lb3V0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBmcmFtZUlkcyA9IFJlYWN0LnVzZVJlZihbXSk7XG4gIHZhciBvblN0ZXBSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgb25TdGVwUmVmLmN1cnJlbnQgPSBvblN0ZXA7XG4gIHZhciBvblN0b3BTdGVwID0gZnVuY3Rpb24gb25TdG9wU3RlcCgpIHtcbiAgICBjbGVhclRpbWVvdXQoc3RlcFRpbWVvdXRSZWYuY3VycmVudCk7XG4gIH07XG5cbiAgLy8gV2Ugd2lsbCBpbnRlcnZhbCB1cGRhdGUgc3RlcCB3aGVuIGhvbGQgbW91c2UgZG93blxuICB2YXIgb25TdGVwTW91c2VEb3duID0gZnVuY3Rpb24gb25TdGVwTW91c2VEb3duKGUsIHVwKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIG9uU3RvcFN0ZXAoKTtcbiAgICBvblN0ZXBSZWYuY3VycmVudCh1cCk7XG5cbiAgICAvLyBMb29wIHN0ZXAgZm9yIGludGVydmFsXG4gICAgZnVuY3Rpb24gbG9vcFN0ZXAoKSB7XG4gICAgICBvblN0ZXBSZWYuY3VycmVudCh1cCk7XG4gICAgICBzdGVwVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dChsb29wU3RlcCwgU1RFUF9JTlRFUlZBTCk7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QgdGltZSBwcmVzcyB3aWxsIHdhaXQgc29tZSB0aW1lIHRvIHRyaWdnZXIgbG9vcCBzdGVwIHVwZGF0ZVxuICAgIHN0ZXBUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGxvb3BTdGVwLCBTVEVQX0RFTEFZKTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgb25TdG9wU3RlcCgpO1xuICAgICAgZnJhbWVJZHMuY3VycmVudC5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgICByZXR1cm4gcmFmLmNhbmNlbChpZCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBpc01vYmlsZSA9IHVzZU1vYmlsZSgpO1xuICBpZiAoaXNNb2JpbGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgaGFuZGxlckNsYXNzTmFtZSA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaGFuZGxlclwiKTtcbiAgdmFyIHVwQ2xhc3NOYW1lID0gY2xhc3NOYW1lcyhoYW5kbGVyQ2xhc3NOYW1lLCBcIlwiLmNvbmNhdChoYW5kbGVyQ2xhc3NOYW1lLCBcIi11cFwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChoYW5kbGVyQ2xhc3NOYW1lLCBcIi11cC1kaXNhYmxlZFwiKSwgdXBEaXNhYmxlZCkpO1xuICB2YXIgZG93bkNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoaGFuZGxlckNsYXNzTmFtZSwgXCJcIi5jb25jYXQoaGFuZGxlckNsYXNzTmFtZSwgXCItZG93blwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChoYW5kbGVyQ2xhc3NOYW1lLCBcIi1kb3duLWRpc2FibGVkXCIpLCBkb3duRGlzYWJsZWQpKTtcblxuICAvLyBmaXg6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQzMDg4XG4gIC8vIEluIFNhZmFyaSwgV2hlbiB3ZSBmaXJlIG9ubW91c2Vkb3duIGFuZCBvbm1vdXNldXAgZXZlbnRzIGluIHF1aWNrIHN1Y2Nlc3Npb24sIFxuICAvLyB0aGVyZSBtYXkgYmUgYSBwcm9ibGVtIHRoYXQgdGhlIG9ubW91c2V1cCBldmVudHMgYXJlIGV4ZWN1dGVkIGZpcnN0LCBcbiAgLy8gcmVzdWx0aW5nIGluIGEgZGlzb3JkZXJlZCBwcm9ncmFtIGV4ZWN1dGlvbi5cbiAgLy8gU28sIHdlIG5lZWQgdG8gdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgdGhhdCB0aGUgb25tb3VzZXVwIGV2ZW50IGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSBvbm1vdXNlZG93biBldmVudC5cbiAgdmFyIHNhZmVPblN0b3BTdGVwID0gZnVuY3Rpb24gc2FmZU9uU3RvcFN0ZXAoKSB7XG4gICAgcmV0dXJuIGZyYW1lSWRzLmN1cnJlbnQucHVzaChyYWYob25TdG9wU3RlcCkpO1xuICB9O1xuICB2YXIgc2hhcmVkSGFuZGxlclByb3BzID0ge1xuICAgIHVuc2VsZWN0YWJsZTogJ29uJyxcbiAgICByb2xlOiAnYnV0dG9uJyxcbiAgICBvbk1vdXNlVXA6IHNhZmVPblN0b3BTdGVwLFxuICAgIG9uTW91c2VMZWF2ZTogc2FmZU9uU3RvcFN0ZXBcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGhhbmRsZXJDbGFzc05hbWUsIFwiLXdyYXBcIilcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIF9leHRlbmRzKHt9LCBzaGFyZWRIYW5kbGVyUHJvcHMsIHtcbiAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgb25TdGVwTW91c2VEb3duKGUsIHRydWUpO1xuICAgIH0sXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiSW5jcmVhc2UgVmFsdWVcIixcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogdXBEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IHVwQ2xhc3NOYW1lXG4gIH0pLCB1cE5vZGUgfHwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICB1bnNlbGVjdGFibGU6IFwib25cIixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaGFuZGxlci11cC1pbm5lclwiKVxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgc2hhcmVkSGFuZGxlclByb3BzLCB7XG4gICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgIG9uU3RlcE1vdXNlRG93bihlLCBmYWxzZSk7XG4gICAgfSxcbiAgICBcImFyaWEtbGFiZWxcIjogXCJEZWNyZWFzZSBWYWx1ZVwiLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkb3duRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBkb3duQ2xhc3NOYW1lXG4gIH0pLCBkb3duTm9kZSB8fCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgIHVuc2VsZWN0YWJsZTogXCJvblwiLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1oYW5kbGVyLWRvd24taW5uZXJcIilcbiAgfSkpKTtcbn0iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG4vKipcbiAqIEtlZXAgaW5wdXQgY3Vyc29yIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGlmIHBvc3NpYmxlLlxuICogSXMgdGhpcyBuZWNlc3Nhcnkgc2luY2Ugd2UgaGF2ZSBgZm9ybWF0dGVyYCB3aGljaCBtYXkgbWFzcyB0aGUgY29udGVudD9cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ3Vyc29yKGlucHV0LCBmb2N1c2VkKSB7XG4gIHZhciBzZWxlY3Rpb25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIGZ1bmN0aW9uIHJlY29yZEN1cnNvcigpIHtcbiAgICAvLyBSZWNvcmQgcG9zaXRpb25cbiAgICB0cnkge1xuICAgICAgdmFyIHN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIGVuZCA9IGlucHV0LnNlbGVjdGlvbkVuZCxcbiAgICAgICAgdmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgIHZhciBiZWZvcmVUeHQgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnQpO1xuICAgICAgdmFyIGFmdGVyVHh0ID0gdmFsdWUuc3Vic3RyaW5nKGVuZCk7XG4gICAgICBzZWxlY3Rpb25SZWYuY3VycmVudCA9IHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBiZWZvcmVUeHQ6IGJlZm9yZVR4dCxcbiAgICAgICAgYWZ0ZXJUeHQ6IGFmdGVyVHh0XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEZpeCBlcnJvciBpbiBDaHJvbWU6XG4gICAgICAvLyBGYWlsZWQgdG8gcmVhZCB0aGUgJ3NlbGVjdGlvblN0YXJ0JyBwcm9wZXJ0eSBmcm9tICdIVE1MSW5wdXRFbGVtZW50J1xuICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMjExNzc0ODkvMzA0MDYwNVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIGxvZ2ljOlxuICAgKiAgMS4gYmFjayBzdHJpbmcgc2FtZVxuICAgKiAgMi4gc3RhcnQgc3RyaW5nIHNhbWVcbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVDdXJzb3IoKSB7XG4gICAgaWYgKGlucHV0ICYmIHNlbGVjdGlvblJlZi5jdXJyZW50ICYmIGZvY3VzZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICB2YXIgX3NlbGVjdGlvblJlZiRjdXJyZW50ID0gc2VsZWN0aW9uUmVmLmN1cnJlbnQsXG4gICAgICAgICAgYmVmb3JlVHh0ID0gX3NlbGVjdGlvblJlZiRjdXJyZW50LmJlZm9yZVR4dCxcbiAgICAgICAgICBhZnRlclR4dCA9IF9zZWxlY3Rpb25SZWYkY3VycmVudC5hZnRlclR4dCxcbiAgICAgICAgICBzdGFydCA9IF9zZWxlY3Rpb25SZWYkY3VycmVudC5zdGFydDtcbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChiZWZvcmVUeHQpKSB7XG4gICAgICAgICAgc3RhcnRQb3MgPSBiZWZvcmVUeHQubGVuZ3RoO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmVuZHNXaXRoKGFmdGVyVHh0KSkge1xuICAgICAgICAgIHN0YXJ0UG9zID0gdmFsdWUubGVuZ3RoIC0gc2VsZWN0aW9uUmVmLmN1cnJlbnQuYWZ0ZXJUeHQubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBiZWZvcmVMYXN0Q2hhciA9IGJlZm9yZVR4dFtzdGFydCAtIDFdO1xuICAgICAgICAgIHZhciBuZXdJbmRleCA9IHZhbHVlLmluZGV4T2YoYmVmb3JlTGFzdENoYXIsIHN0YXJ0IC0gMSk7XG4gICAgICAgICAgaWYgKG5ld0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgc3RhcnRQb3MgPSBuZXdJbmRleCArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0UG9zLCBzdGFydFBvcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHdhcm5pbmcoZmFsc2UsIFwiU29tZXRoaW5nIHdhcm5pbmcgb2YgY3Vyc29yIHJlc3RvcmUuIFBsZWFzZSBmaXJlIGlzc3VlIGFib3V0IHRoaXM6IFwiLmNvbmNhdChlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtyZWNvcmRDdXJzb3IsIHJlc3RvcmVDdXJzb3JdO1xufSIsImltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcblxuLyoqXG4gKiBBbHdheXMgdHJpZ2dlciBsYXRlc3Qgb25jZSB3aGVuIGNhbGwgbXVsdGlwbGUgdGltZVxuICovXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gKCkge1xuICB2YXIgaWRSZWYgPSB1c2VSZWYoMCk7XG4gIHZhciBjbGVhblVwID0gZnVuY3Rpb24gY2xlYW5VcCgpIHtcbiAgICByYWYuY2FuY2VsKGlkUmVmLmN1cnJlbnQpO1xuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjbGVhblVwO1xuICB9LCBbXSk7XG4gIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjbGVhblVwKCk7XG4gICAgaWRSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9O1xufSk7IiwiaW1wb3J0IElucHV0TnVtYmVyIGZyb20gXCIuL0lucHV0TnVtYmVyXCI7XG5leHBvcnQgZGVmYXVsdCBJbnB1dE51bWJlcjsiLCJpbXBvcnQgeyB0cmltTnVtYmVyLCBudW0yc3RyIH0gZnJvbSAnQHJjLWNvbXBvbmVudC9taW5pLWRlY2ltYWwnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY3VwbGVTdGVwcyhzdGVwKSB7XG4gIHZhciBzdGVwU3RyID0gdHlwZW9mIHN0ZXAgPT09ICdudW1iZXInID8gbnVtMnN0cihzdGVwKSA6IHRyaW1OdW1iZXIoc3RlcCkuZnVsbFN0cjtcbiAgdmFyIGhhc1BvaW50ID0gc3RlcFN0ci5pbmNsdWRlcygnLicpO1xuICBpZiAoIWhhc1BvaW50KSB7XG4gICAgcmV0dXJuIHN0ZXAgKyAnMCc7XG4gIH1cbiAgcmV0dXJuIHRyaW1OdW1iZXIoc3RlcFN0ci5yZXBsYWNlKC8oXFxkKVxcLihcXGQpL2csICckMSQyLicpKS5mdWxsU3RyO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgY2xzeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhhc0FkZG9uLCBoYXNQcmVmaXhTdWZmaXggfSBmcm9tIFwiLi91dGlscy9jb21tb25VdGlsc1wiO1xudmFyIEJhc2VJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBfcHJvcHMsIF9wcm9wczIsIF9wcm9wczM7XG4gIHZhciBpbnB1dEVsID0gcHJvcHMuaW5wdXRFbGVtZW50LFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZWZpeCA9IHByb3BzLnByZWZpeCxcbiAgICBzdWZmaXggPSBwcm9wcy5zdWZmaXgsXG4gICAgYWRkb25CZWZvcmUgPSBwcm9wcy5hZGRvbkJlZm9yZSxcbiAgICBhZGRvbkFmdGVyID0gcHJvcHMuYWRkb25BZnRlcixcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5ID0gcHJvcHMucmVhZE9ubHksXG4gICAgZm9jdXNlZCA9IHByb3BzLmZvY3VzZWQsXG4gICAgdHJpZ2dlckZvY3VzID0gcHJvcHMudHJpZ2dlckZvY3VzLFxuICAgIGFsbG93Q2xlYXIgPSBwcm9wcy5hbGxvd0NsZWFyLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgaGFuZGxlUmVzZXQgPSBwcm9wcy5oYW5kbGVSZXNldCxcbiAgICBoaWRkZW4gPSBwcm9wcy5oaWRkZW4sXG4gICAgY2xhc3NlcyA9IHByb3BzLmNsYXNzZXMsXG4gICAgY2xhc3NOYW1lcyA9IHByb3BzLmNsYXNzTmFtZXMsXG4gICAgZGF0YUF0dHJzID0gcHJvcHMuZGF0YUF0dHJzLFxuICAgIHN0eWxlcyA9IHByb3BzLnN0eWxlcyxcbiAgICBjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICBvbkNsZWFyID0gcHJvcHMub25DbGVhcjtcbiAgdmFyIGlucHV0RWxlbWVudCA9IGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSB2b2lkIDAgPyBjaGlsZHJlbiA6IGlucHV0RWw7XG4gIHZhciBBZmZpeFdyYXBwZXJDb21wb25lbnQgPSAoY29tcG9uZW50cyA9PT0gbnVsbCB8fCBjb21wb25lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wb25lbnRzLmFmZml4V3JhcHBlcikgfHwgJ3NwYW4nO1xuICB2YXIgR3JvdXBXcmFwcGVyQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy5ncm91cFdyYXBwZXIpIHx8ICdzcGFuJztcbiAgdmFyIFdyYXBwZXJDb21wb25lbnQgPSAoY29tcG9uZW50cyA9PT0gbnVsbCB8fCBjb21wb25lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wb25lbnRzLndyYXBwZXIpIHx8ICdzcGFuJztcbiAgdmFyIEdyb3VwQWRkb25Db21wb25lbnQgPSAoY29tcG9uZW50cyA9PT0gbnVsbCB8fCBjb21wb25lbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wb25lbnRzLmdyb3VwQWRkb24pIHx8ICdzcGFuJztcbiAgdmFyIGNvbnRhaW5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG9uSW5wdXRDbGljayA9IGZ1bmN0aW9uIG9uSW5wdXRDbGljayhlKSB7XG4gICAgdmFyIF9jb250YWluZXJSZWYkY3VycmVudDtcbiAgICBpZiAoKF9jb250YWluZXJSZWYkY3VycmVudCA9IGNvbnRhaW5lclJlZi5jdXJyZW50KSAhPT0gbnVsbCAmJiBfY29udGFpbmVyUmVmJGN1cnJlbnQgIT09IHZvaWQgMCAmJiBfY29udGFpbmVyUmVmJGN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICB0cmlnZ2VyRm9jdXMgPT09IG51bGwgfHwgdHJpZ2dlckZvY3VzID09PSB2b2lkIDAgfHwgdHJpZ2dlckZvY3VzKCk7XG4gICAgfVxuICB9O1xuICB2YXIgaGFzQWZmaXggPSBoYXNQcmVmaXhTdWZmaXgocHJvcHMpO1xuICB2YXIgZWxlbWVudCA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoaW5wdXRFbGVtZW50LCB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGNsYXNzTmFtZTogY2xzeCgoX3Byb3BzID0gaW5wdXRFbGVtZW50LnByb3BzKSA9PT0gbnVsbCB8fCBfcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wcy5jbGFzc05hbWUsICFoYXNBZmZpeCAmJiAoY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnZhcmlhbnQpKSB8fCBudWxsXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZWYgPT09PT09PT09PT09PT09PT09PT09PT09IC8vXG4gIHZhciBncm91cFJlZiA9IHVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmF0aXZlRWxlbWVudDogZ3JvdXBSZWYuY3VycmVudCB8fCBjb250YWluZXJSZWYuY3VycmVudFxuICAgIH07XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PSBQcmVmaXggJiBTdWZmaXggPT09PT09PT09PT09PT09PT09IC8vXG4gIGlmIChoYXNBZmZpeCkge1xuICAgIC8vID09PT09PT09PT09PT09PT09PSBDbGVhciBJY29uID09PT09PT09PT09PT09PT09PSAvL1xuICAgIHZhciBjbGVhckljb24gPSBudWxsO1xuICAgIGlmIChhbGxvd0NsZWFyKSB7XG4gICAgICB2YXIgbmVlZENsZWFyID0gIWRpc2FibGVkICYmICFyZWFkT25seSAmJiB2YWx1ZTtcbiAgICAgIHZhciBjbGVhckljb25DbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWNsZWFyLWljb25cIik7XG4gICAgICB2YXIgaWNvbk5vZGUgPSBfdHlwZW9mKGFsbG93Q2xlYXIpID09PSAnb2JqZWN0JyAmJiBhbGxvd0NsZWFyICE9PSBudWxsICYmIGFsbG93Q2xlYXIgIT09IHZvaWQgMCAmJiBhbGxvd0NsZWFyLmNsZWFySWNvbiA/IGFsbG93Q2xlYXIuY2xlYXJJY29uIDogJ+Kclic7XG4gICAgICBjbGVhckljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgIGhhbmRsZVJlc2V0ID09PSBudWxsIHx8IGhhbmRsZVJlc2V0ID09PSB2b2lkIDAgfHwgaGFuZGxlUmVzZXQoZXZlbnQpO1xuICAgICAgICAgIG9uQ2xlYXIgPT09IG51bGwgfHwgb25DbGVhciA9PT0gdm9pZCAwIHx8IG9uQ2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgdHJpZ2dlciBvbkJsdXIgd2hlbiBjbGVhciBpbnB1dFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy8zMTIwMFxuICAgICAgICAsXG4gICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsZWFySWNvbkNscywgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoY2xlYXJJY29uQ2xzLCBcIi1oaWRkZW5cIiksICFuZWVkQ2xlYXIpLCBcIlwiLmNvbmNhdChjbGVhckljb25DbHMsIFwiLWhhcy1zdWZmaXhcIiksICEhc3VmZml4KSlcbiAgICAgIH0sIGljb25Ob2RlKTtcbiAgICB9XG4gICAgdmFyIGFmZml4V3JhcHBlclByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItYWZmaXgtd3JhcHBlclwiKTtcbiAgICB2YXIgYWZmaXhXcmFwcGVyQ2xzID0gY2xzeChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQoYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBcIi1kaXNhYmxlZFwiKSwgZGlzYWJsZWQpLCBcIlwiLmNvbmNhdChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIFwiLWZvY3VzZWRcIiksIGZvY3VzZWQpLCBcIlwiLmNvbmNhdChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIFwiLXJlYWRvbmx5XCIpLCByZWFkT25seSksIFwiXCIuY29uY2F0KGFmZml4V3JhcHBlclByZWZpeENscywgXCItaW5wdXQtd2l0aC1jbGVhci1idG5cIiksIHN1ZmZpeCAmJiBhbGxvd0NsZWFyICYmIHZhbHVlKSwgY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc2VzLmFmZml4V3JhcHBlciwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLmFmZml4V3JhcHBlciwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnZhcmlhbnQpO1xuICAgIHZhciBzdWZmaXhOb2RlID0gKHN1ZmZpeCB8fCBhbGxvd0NsZWFyKSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3VmZml4XCIpLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuc3VmZml4KSxcbiAgICAgIHN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMuc3VmZml4XG4gICAgfSwgY2xlYXJJY29uLCBzdWZmaXgpO1xuICAgIGVsZW1lbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBZmZpeFdyYXBwZXJDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogYWZmaXhXcmFwcGVyQ2xzLFxuICAgICAgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5hZmZpeFdyYXBwZXIsXG4gICAgICBvbkNsaWNrOiBvbklucHV0Q2xpY2tcbiAgICB9LCBkYXRhQXR0cnMgPT09IG51bGwgfHwgZGF0YUF0dHJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhQXR0cnMuYWZmaXhXcmFwcGVyLCB7XG4gICAgICByZWY6IGNvbnRhaW5lclJlZlxuICAgIH0pLCBwcmVmaXggJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXByZWZpeFwiKSwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnByZWZpeCksXG4gICAgICBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLnByZWZpeFxuICAgIH0sIHByZWZpeCksIGVsZW1lbnQsIHN1ZmZpeE5vZGUpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09IEFkZG9uID09PT09PT09PT09PT09PT09PSAvL1xuICBpZiAoaGFzQWRkb24ocHJvcHMpKSB7XG4gICAgdmFyIHdyYXBwZXJDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWdyb3VwXCIpO1xuICAgIHZhciBhZGRvbkNscyA9IFwiXCIuY29uY2F0KHdyYXBwZXJDbHMsIFwiLWFkZG9uXCIpO1xuICAgIHZhciBncm91cFdyYXBwZXJDbHMgPSBcIlwiLmNvbmNhdCh3cmFwcGVyQ2xzLCBcIi13cmFwcGVyXCIpO1xuICAgIHZhciBtZXJnZWRXcmFwcGVyQ2xhc3NOYW1lID0gY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXdyYXBwZXJcIiksIHdyYXBwZXJDbHMsIGNsYXNzZXMgPT09IG51bGwgfHwgY2xhc3NlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3Nlcy53cmFwcGVyLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMud3JhcHBlcik7XG4gICAgdmFyIG1lcmdlZEdyb3VwQ2xhc3NOYW1lID0gY2xzeChncm91cFdyYXBwZXJDbHMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoZ3JvdXBXcmFwcGVyQ2xzLCBcIi1kaXNhYmxlZFwiKSwgZGlzYWJsZWQpLCBjbGFzc2VzID09PSBudWxsIHx8IGNsYXNzZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzZXMuZ3JvdXAsIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5ncm91cFdyYXBwZXIpO1xuXG4gICAgLy8gTmVlZCBhbm90aGVyIHdyYXBwZXIgZm9yIGNoYW5naW5nIGRpc3BsYXk6dGFibGUgdG8gZGlzcGxheTppbmxpbmUtYmxvY2tcbiAgICAvLyBhbmQgcHV0IHN0eWxlIHByb3AgaW4gd3JhcHBlclxuICAgIGVsZW1lbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cFdyYXBwZXJDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzTmFtZTogbWVyZ2VkR3JvdXBDbGFzc05hbWUsXG4gICAgICByZWY6IGdyb3VwUmVmXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlckNvbXBvbmVudCwge1xuICAgICAgY2xhc3NOYW1lOiBtZXJnZWRXcmFwcGVyQ2xhc3NOYW1lXG4gICAgfSwgYWRkb25CZWZvcmUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXBBZGRvbkNvbXBvbmVudCwge1xuICAgICAgY2xhc3NOYW1lOiBhZGRvbkNsc1xuICAgIH0sIGFkZG9uQmVmb3JlKSwgZWxlbWVudCwgYWRkb25BZnRlciAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cEFkZG9uQ29tcG9uZW50LCB7XG4gICAgICBjbGFzc05hbWU6IGFkZG9uQ2xzXG4gICAgfSwgYWRkb25BZnRlcikpKTtcbiAgfVxuXG4gIC8vIGBjbGFzc05hbWVgIGFuZCBgc3R5bGVgIGFyZSBhbHdheXMgb24gdGhlIHJvb3QgZWxlbWVudFxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7XG4gICAgY2xhc3NOYW1lOiBjbHN4KChfcHJvcHMyID0gZWxlbWVudC5wcm9wcykgPT09IG51bGwgfHwgX3Byb3BzMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Byb3BzMi5jbGFzc05hbWUsIGNsYXNzTmFtZSkgfHwgbnVsbCxcbiAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCAoX3Byb3BzMyA9IGVsZW1lbnQucHJvcHMpID09PSBudWxsIHx8IF9wcm9wczMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wczMuc3R5bGUpLCBzdHlsZSksXG4gICAgaGlkZGVuOiBoaWRkZW5cbiAgfSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IEJhc2VJbnB1dDsiLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJhdXRvQ29tcGxldGVcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJvbkJsdXJcIiwgXCJvblByZXNzRW50ZXJcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwicHJlZml4Q2xzXCIsIFwiZGlzYWJsZWRcIiwgXCJodG1sU2l6ZVwiLCBcImNsYXNzTmFtZVwiLCBcIm1heExlbmd0aFwiLCBcInN1ZmZpeFwiLCBcInNob3dDb3VudFwiLCBcImNvdW50XCIsIFwidHlwZVwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVzXCIsIFwic3R5bGVzXCIsIFwib25Db21wb3NpdGlvblN0YXJ0XCIsIFwib25Db21wb3NpdGlvbkVuZFwiXTtcbmltcG9ydCBjbHN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG5pbXBvcnQgb21pdCBmcm9tIFwicmMtdXRpbC9lcy9vbWl0XCI7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlRWZmZWN0LCB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJhc2VJbnB1dCBmcm9tIFwiLi9CYXNlSW5wdXRcIjtcbmltcG9ydCB1c2VDb3VudCBmcm9tIFwiLi9ob29rcy91c2VDb3VudFwiO1xuaW1wb3J0IHsgcmVzb2x2ZU9uQ2hhbmdlLCB0cmlnZ2VyRm9jdXMgfSBmcm9tIFwiLi91dGlscy9jb21tb25VdGlsc1wiO1xudmFyIElucHV0ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIGF1dG9Db21wbGV0ZSA9IHByb3BzLmF1dG9Db21wbGV0ZSxcbiAgICBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IHByb3BzLm9uQmx1cixcbiAgICBvblByZXNzRW50ZXIgPSBwcm9wcy5vblByZXNzRW50ZXIsXG4gICAgb25LZXlEb3duID0gcHJvcHMub25LZXlEb3duLFxuICAgIG9uS2V5VXAgPSBwcm9wcy5vbktleVVwLFxuICAgIF9wcm9wcyRwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3Byb3BzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLWlucHV0JyA6IF9wcm9wcyRwcmVmaXhDbHMsXG4gICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBodG1sU2l6ZSA9IHByb3BzLmh0bWxTaXplLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBtYXhMZW5ndGggPSBwcm9wcy5tYXhMZW5ndGgsXG4gICAgc3VmZml4ID0gcHJvcHMuc3VmZml4LFxuICAgIHNob3dDb3VudCA9IHByb3BzLnNob3dDb3VudCxcbiAgICBjb3VudCA9IHByb3BzLmNvdW50LFxuICAgIF9wcm9wcyR0eXBlID0gcHJvcHMudHlwZSxcbiAgICB0eXBlID0gX3Byb3BzJHR5cGUgPT09IHZvaWQgMCA/ICd0ZXh0JyA6IF9wcm9wcyR0eXBlLFxuICAgIGNsYXNzZXMgPSBwcm9wcy5jbGFzc2VzLFxuICAgIGNsYXNzTmFtZXMgPSBwcm9wcy5jbGFzc05hbWVzLFxuICAgIHN0eWxlcyA9IHByb3BzLnN0eWxlcyxcbiAgICBfb25Db21wb3NpdGlvblN0YXJ0ID0gcHJvcHMub25Db21wb3NpdGlvblN0YXJ0LFxuICAgIG9uQ29tcG9zaXRpb25FbmQgPSBwcm9wcy5vbkNvbXBvc2l0aW9uRW5kLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgZm9jdXNlZCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0Rm9jdXNlZCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBjb21wb3NpdGlvblJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIHZhciBrZXlMb2NrUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGlucHV0UmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgaG9sZGVyUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgZm9jdXMgPSBmdW5jdGlvbiBmb2N1cyhvcHRpb24pIHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgdHJpZ2dlckZvY3VzKGlucHV0UmVmLmN1cnJlbnQsIG9wdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKHByb3BzLmRlZmF1bHRWYWx1ZSwge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgdmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcbiAgdmFyIGZvcm1hdFZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09IFNlbGVjdCBSYW5nZSA9PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHNlbGVjdGlvbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0U2VsZWN0aW9uID0gX3VzZVN0YXRlNFsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IENvdW50ID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjb3VudENvbmZpZyA9IHVzZUNvdW50KGNvdW50LCBzaG93Q291bnQpO1xuICB2YXIgbWVyZ2VkTWF4ID0gY291bnRDb25maWcubWF4IHx8IG1heExlbmd0aDtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gY291bnRDb25maWcuc3RyYXRlZ3koZm9ybWF0VmFsdWUpO1xuICB2YXIgaXNPdXRPZlJhbmdlID0gISFtZXJnZWRNYXggJiYgdmFsdWVMZW5ndGggPiBtZXJnZWRNYXg7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gUmVmID09PT09PT09PT09PT09PT09PT09PT09PVxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBfaG9sZGVyUmVmJGN1cnJlbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvY3VzOiBmb2N1cyxcbiAgICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDtcbiAgICAgICAgKF9pbnB1dFJlZiRjdXJyZW50ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudC5ibHVyKCk7XG4gICAgICB9LFxuICAgICAgc2V0U2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQyO1xuICAgICAgICAoX2lucHV0UmVmJGN1cnJlbnQyID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQyID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQyLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGRpcmVjdGlvbik7XG4gICAgICB9LFxuICAgICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoKSB7XG4gICAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDM7XG4gICAgICAgIChfaW5wdXRSZWYkY3VycmVudDMgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaW5wdXRSZWYkY3VycmVudDMgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudDMuc2VsZWN0KCk7XG4gICAgICB9LFxuICAgICAgaW5wdXQ6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgICBuYXRpdmVFbGVtZW50OiAoKF9ob2xkZXJSZWYkY3VycmVudCA9IGhvbGRlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaG9sZGVyUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ob2xkZXJSZWYkY3VycmVudC5uYXRpdmVFbGVtZW50KSB8fCBpbnB1dFJlZi5jdXJyZW50XG4gICAgfTtcbiAgfSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGtleUxvY2tSZWYuY3VycmVudCkge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIHNldEZvY3VzZWQoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgIHJldHVybiBwcmV2ICYmIGRpc2FibGVkID8gZmFsc2UgOiBwcmV2O1xuICAgIH0pO1xuICB9LCBbZGlzYWJsZWRdKTtcbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKGUsIGN1cnJlbnRWYWx1ZSwgaW5mbykge1xuICAgIHZhciBjdXRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICBpZiAoIWNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgJiYgY291bnRDb25maWcuZXhjZWVkRm9ybWF0dGVyICYmIGNvdW50Q29uZmlnLm1heCAmJiBjb3VudENvbmZpZy5zdHJhdGVneShjdXJyZW50VmFsdWUpID4gY291bnRDb25maWcubWF4KSB7XG4gICAgICBjdXRWYWx1ZSA9IGNvdW50Q29uZmlnLmV4Y2VlZEZvcm1hdHRlcihjdXJyZW50VmFsdWUsIHtcbiAgICAgICAgbWF4OiBjb3VudENvbmZpZy5tYXhcbiAgICAgIH0pO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gY3V0VmFsdWUpIHtcbiAgICAgICAgdmFyIF9pbnB1dFJlZiRjdXJyZW50NCwgX2lucHV0UmVmJGN1cnJlbnQ1O1xuICAgICAgICBzZXRTZWxlY3Rpb24oWygoX2lucHV0UmVmJGN1cnJlbnQ0ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaW5wdXRSZWYkY3VycmVudDQuc2VsZWN0aW9uU3RhcnQpIHx8IDAsICgoX2lucHV0UmVmJGN1cnJlbnQ1ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQ1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaW5wdXRSZWYkY3VycmVudDUuc2VsZWN0aW9uRW5kKSB8fCAwXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbmZvLnNvdXJjZSA9PT0gJ2NvbXBvc2l0aW9uRW5kJykge1xuICAgICAgLy8gQXZvaWQgdHJpZ2dlcmluZyB0d2ljZVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDY1ODdcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VmFsdWUoY3V0VmFsdWUpO1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNvbHZlT25DaGFuZ2UoaW5wdXRSZWYuY3VycmVudCwgZSwgb25DaGFuZ2UsIGN1dFZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgdmFyIF9pbnB1dFJlZiRjdXJyZW50NjtcbiAgICAgIChfaW5wdXRSZWYkY3VycmVudDYgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaW5wdXRSZWYkY3VycmVudDYgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudDYuc2V0U2VsZWN0aW9uUmFuZ2UuYXBwbHkoX2lucHV0UmVmJGN1cnJlbnQ2LCBfdG9Db25zdW1hYmxlQXJyYXkoc2VsZWN0aW9uKSk7XG4gICAgfVxuICB9LCBbc2VsZWN0aW9uXSk7XG4gIHZhciBvbkludGVybmFsQ2hhbmdlID0gZnVuY3Rpb24gb25JbnRlcm5hbENoYW5nZShlKSB7XG4gICAgdHJpZ2dlckNoYW5nZShlLCBlLnRhcmdldC52YWx1ZSwge1xuICAgICAgc291cmNlOiAnY2hhbmdlJ1xuICAgIH0pO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbENvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24gb25JbnRlcm5hbENvbXBvc2l0aW9uRW5kKGUpIHtcbiAgICBjb21wb3NpdGlvblJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgdHJpZ2dlckNoYW5nZShlLCBlLmN1cnJlbnRUYXJnZXQudmFsdWUsIHtcbiAgICAgIHNvdXJjZTogJ2NvbXBvc2l0aW9uRW5kJ1xuICAgIH0pO1xuICAgIG9uQ29tcG9zaXRpb25FbmQgPT09IG51bGwgfHwgb25Db21wb3NpdGlvbkVuZCA9PT0gdm9pZCAwIHx8IG9uQ29tcG9zaXRpb25FbmQoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgaWYgKG9uUHJlc3NFbnRlciAmJiBlLmtleSA9PT0gJ0VudGVyJyAmJiAha2V5TG9ja1JlZi5jdXJyZW50KSB7XG4gICAgICBrZXlMb2NrUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgb25QcmVzc0VudGVyKGUpO1xuICAgIH1cbiAgICBvbktleURvd24gPT09IG51bGwgfHwgb25LZXlEb3duID09PSB2b2lkIDAgfHwgb25LZXlEb3duKGUpO1xuICB9O1xuICB2YXIgaGFuZGxlS2V5VXAgPSBmdW5jdGlvbiBoYW5kbGVLZXlVcChlKSB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBrZXlMb2NrUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgb25LZXlVcCA9PT0gbnVsbCB8fCBvbktleVVwID09PSB2b2lkIDAgfHwgb25LZXlVcChlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZUZvY3VzID0gZnVuY3Rpb24gaGFuZGxlRm9jdXMoZSkge1xuICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgb25Gb2N1cyA9PT0gbnVsbCB8fCBvbkZvY3VzID09PSB2b2lkIDAgfHwgb25Gb2N1cyhlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZUJsdXIgPSBmdW5jdGlvbiBoYW5kbGVCbHVyKGUpIHtcbiAgICBpZiAoa2V5TG9ja1JlZi5jdXJyZW50KSB7XG4gICAgICBrZXlMb2NrUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwIHx8IG9uQmx1cihlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZVJlc2V0ID0gZnVuY3Rpb24gaGFuZGxlUmVzZXQoZSkge1xuICAgIHNldFZhbHVlKCcnKTtcbiAgICBmb2N1cygpO1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNvbHZlT25DaGFuZ2UoaW5wdXRSZWYuY3VycmVudCwgZSwgb25DaGFuZ2UpO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IElucHV0ID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvdXRPZlJhbmdlQ2xzID0gaXNPdXRPZlJhbmdlICYmIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3V0LW9mLXJhbmdlXCIpO1xuICB2YXIgZ2V0SW5wdXRFbGVtZW50ID0gZnVuY3Rpb24gZ2V0SW5wdXRFbGVtZW50KCkge1xuICAgIC8vIEZpeCBodHRwczovL2ZiLm1lL3JlYWN0LXVua25vd24tcHJvcFxuICAgIHZhciBvdGhlclByb3BzID0gb21pdChwcm9wcywgWydwcmVmaXhDbHMnLCAnb25QcmVzc0VudGVyJywgJ2FkZG9uQmVmb3JlJywgJ2FkZG9uQWZ0ZXInLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbGxvd0NsZWFyJyxcbiAgICAvLyBJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCxcbiAgICAvLyBzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90IGJvdGguXG4gICAgJ2RlZmF1bHRWYWx1ZScsICdzaG93Q291bnQnLCAnY291bnQnLCAnY2xhc3NlcycsICdodG1sU2l6ZScsICdzdHlsZXMnLCAnY2xhc3NOYW1lcycsICdvbkNsZWFyJ10pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlXG4gICAgfSwgb3RoZXJQcm9wcywge1xuICAgICAgb25DaGFuZ2U6IG9uSW50ZXJuYWxDaGFuZ2UsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uS2V5VXA6IGhhbmRsZUtleVVwLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KHByZWZpeENscywgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBkaXNhYmxlZCksIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5pbnB1dCksXG4gICAgICBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLmlucHV0LFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIHNpemU6IGh0bWxTaXplLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG9uQ29tcG9zaXRpb25TdGFydDogZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0KGUpIHtcbiAgICAgICAgY29tcG9zaXRpb25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIF9vbkNvbXBvc2l0aW9uU3RhcnQgPT09IG51bGwgfHwgX29uQ29tcG9zaXRpb25TdGFydCA9PT0gdm9pZCAwIHx8IF9vbkNvbXBvc2l0aW9uU3RhcnQoZSk7XG4gICAgICB9LFxuICAgICAgb25Db21wb3NpdGlvbkVuZDogb25JbnRlcm5hbENvbXBvc2l0aW9uRW5kXG4gICAgfSkpO1xuICB9O1xuICB2YXIgZ2V0U3VmZml4ID0gZnVuY3Rpb24gZ2V0U3VmZml4KCkge1xuICAgIC8vIE1heCBsZW5ndGggdmFsdWVcbiAgICB2YXIgaGFzTWF4TGVuZ3RoID0gTnVtYmVyKG1lcmdlZE1heCkgPiAwO1xuICAgIGlmIChzdWZmaXggfHwgY291bnRDb25maWcuc2hvdykge1xuICAgICAgdmFyIGRhdGFDb3VudCA9IGNvdW50Q29uZmlnLnNob3dGb3JtYXR0ZXIgPyBjb3VudENvbmZpZy5zaG93Rm9ybWF0dGVyKHtcbiAgICAgICAgdmFsdWU6IGZvcm1hdFZhbHVlLFxuICAgICAgICBjb3VudDogdmFsdWVMZW5ndGgsXG4gICAgICAgIG1heExlbmd0aDogbWVyZ2VkTWF4XG4gICAgICB9KSA6IFwiXCIuY29uY2F0KHZhbHVlTGVuZ3RoKS5jb25jYXQoaGFzTWF4TGVuZ3RoID8gXCIgLyBcIi5jb25jYXQobWVyZ2VkTWF4KSA6ICcnKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY291bnRDb25maWcuc2hvdyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zaG93LWNvdW50LXN1ZmZpeFwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXNob3ctY291bnQtaGFzLXN1ZmZpeFwiKSwgISFzdWZmaXgpLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuY291bnQpLFxuICAgICAgICBzdHlsZTogX29iamVjdFNwcmVhZCh7fSwgc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLmNvdW50KVxuICAgICAgfSwgZGF0YUNvdW50KSwgc3VmZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUlucHV0LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc05hbWUsIG91dE9mUmFuZ2VDbHMpLFxuICAgIGhhbmRsZVJlc2V0OiBoYW5kbGVSZXNldCxcbiAgICB2YWx1ZTogZm9ybWF0VmFsdWUsXG4gICAgZm9jdXNlZDogZm9jdXNlZCxcbiAgICB0cmlnZ2VyRm9jdXM6IGZvY3VzLFxuICAgIHN1ZmZpeDogZ2V0U3VmZml4KCksXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2xhc3NOYW1lczogY2xhc3NOYW1lcyxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICByZWY6IGhvbGRlclJlZlxuICB9KSwgZ2V0SW5wdXRFbGVtZW50KCkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBJbnB1dDsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJzaG93XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBDdXQgYHZhbHVlYCBieSB0aGUgYGNvdW50Lm1heGAgcHJvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluQ291bnRSYW5nZSh2YWx1ZSwgY291bnRDb25maWcpIHtcbiAgaWYgKCFjb3VudENvbmZpZy5tYXgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgY291bnQgPSBjb3VudENvbmZpZy5zdHJhdGVneSh2YWx1ZSk7XG4gIHJldHVybiBjb3VudCA8PSBjb3VudENvbmZpZy5tYXg7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VDb3VudChjb3VudCwgc2hvd0NvdW50KSB7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWVyZ2VkQ29uZmlnID0ge307XG4gICAgaWYgKHNob3dDb3VudCkge1xuICAgICAgbWVyZ2VkQ29uZmlnLnNob3cgPSBfdHlwZW9mKHNob3dDb3VudCkgPT09ICdvYmplY3QnICYmIHNob3dDb3VudC5mb3JtYXR0ZXIgPyBzaG93Q291bnQuZm9ybWF0dGVyIDogISFzaG93Q291bnQ7XG4gICAgfVxuICAgIG1lcmdlZENvbmZpZyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWVyZ2VkQ29uZmlnKSwgY291bnQpO1xuICAgIHZhciBfcmVmID0gbWVyZ2VkQ29uZmlnLFxuICAgICAgc2hvdyA9IF9yZWYuc2hvdyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgIHNob3c6ICEhc2hvdyxcbiAgICAgIHNob3dGb3JtYXR0ZXI6IHR5cGVvZiBzaG93ID09PSAnZnVuY3Rpb24nID8gc2hvdyA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmF0ZWd5OiByZXN0LnN0cmF0ZWd5IHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbY291bnQsIHNob3dDb3VudF0pO1xufSIsImltcG9ydCBCYXNlSW5wdXQgZnJvbSBcIi4vQmFzZUlucHV0XCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcIi4vSW5wdXRcIjtcbmV4cG9ydCB7IEJhc2VJbnB1dCB9O1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiZXhwb3J0IGZ1bmN0aW9uIGhhc0FkZG9uKHByb3BzKSB7XG4gIHJldHVybiAhIShwcm9wcy5hZGRvbkJlZm9yZSB8fCBwcm9wcy5hZGRvbkFmdGVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcmVmaXhTdWZmaXgocHJvcHMpIHtcbiAgcmV0dXJuICEhKHByb3BzLnByZWZpeCB8fCBwcm9wcy5zdWZmaXggfHwgcHJvcHMuYWxsb3dDbGVhcik7XG59XG5cbi8vIFRPRE86IEl0J3MgYmV0dGVyIHRvIHVzZSBgUHJveHlgIHJlcGxhY2UgdGhlIGBlbGVtZW50LnZhbHVlYC4gQnV0IHdlIHN0aWxsIG5lZWQgc3VwcG9ydCBJRTExLlxuZnVuY3Rpb24gY2xvbmVFdmVudChldmVudCwgdGFyZ2V0LCB2YWx1ZSkge1xuICAvLyBBIGJ1ZyByZXBvcnQgZmlsZWQgb24gV2ViS2l0J3MgQnVnemlsbGEgdHJhY2tlciwgZGF0aW5nIGJhY2sgdG8gMjAwOSwgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUgb2YgY2xvbmVOb2RlKCkgbm90IGNvcHlpbmcgZmlsZXMgb2YgPGlucHV0IHR5cGU9XCJmaWxlXCI+IGVsZW1lbnRzLlxuICAvLyBBcyBvZiB0aGUgbGFzdCB1cGRhdGUsIHRoaXMgYnVnIHdhcyBzdGlsbCBtYXJrZWQgYXMgXCJORVcsXCIgaW5kaWNhdGluZyB0aGF0IGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVzb2x2ZWQgeWV04oCL4oCLLlxuICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxMjNcbiAgdmFyIGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY2xvbmVOb2RlKHRydWUpO1xuXG4gIC8vIGNsaWNrIGNsZWFyIGljb25cbiAgdmFyIG5ld0V2ZW50ID0gT2JqZWN0LmNyZWF0ZShldmVudCwge1xuICAgIHRhcmdldDoge1xuICAgICAgdmFsdWU6IGN1cnJlbnRUYXJnZXRcbiAgICB9LFxuICAgIGN1cnJlbnRUYXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfVxuICB9KTtcblxuICAvLyBGaWxsIGRhdGFcbiAgY3VycmVudFRhcmdldC52YWx1ZSA9IHZhbHVlO1xuXG4gIC8vIEZpbGwgc2VsZWN0aW9uLiBTb21lIHR5cGUgbGlrZSBgZW1haWxgIG5vdCBzdXBwb3J0IHNlbGVjdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NzgzM1xuICBpZiAodHlwZW9mIHRhcmdldC5zZWxlY3Rpb25TdGFydCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRhcmdldC5zZWxlY3Rpb25FbmQgPT09ICdudW1iZXInKSB7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25TdGFydCA9IHRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9IHRhcmdldC5zZWxlY3Rpb25FbmQ7XG4gIH1cbiAgY3VycmVudFRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gbmV3RXZlbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9uQ2hhbmdlKHRhcmdldCwgZSwgb25DaGFuZ2UsIHRhcmdldFZhbHVlKSB7XG4gIGlmICghb25DaGFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGV2ZW50ID0gZTtcbiAgaWYgKGUudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgIC8vIENsb25lIGEgbmV3IHRhcmdldCBmb3IgZXZlbnQuXG4gICAgLy8gQXZvaWQgdGhlIGZvbGxvd2luZyB1c2FnZSwgdGhlIHNldFF1ZXJ5IG1ldGhvZCBnZXRzIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAvL1xuICAgIC8vIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIC8vIDxJbnB1dFxuICAgIC8vICAgYWxsb3dDbGVhclxuICAgIC8vICAgdmFsdWU9e3F1ZXJ5fVxuICAgIC8vICAgb25DaGFuZ2U9eyhlKT0+IHtcbiAgICAvLyAgICAgc2V0UXVlcnkoKHByZXZTdGF0dXMpID0+IGUudGFyZ2V0LnZhbHVlKTtcbiAgICAvLyAgIH19XG4gICAgLy8gLz5cblxuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsICcnKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHJpZ2dlciBieSBjb21wb3NpdGlvbiBldmVudCwgdGhpcyBtZWFucyB3ZSBuZWVkIGZvcmNlIGNoYW5nZSB0aGUgaW5wdXQgdmFsdWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDU3MzdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDY1OThcbiAgaWYgKHRhcmdldC50eXBlICE9PSAnZmlsZScgJiYgdGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsIHRhcmdldFZhbHVlKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG9uQ2hhbmdlKGV2ZW50KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyRm9jdXMoZWxlbWVudCwgb3B0aW9uKSB7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBlbGVtZW50LmZvY3VzKG9wdGlvbik7XG5cbiAgLy8gU2VsZWN0aW9uIGNvbnRlbnRcbiAgdmFyIF9yZWYgPSBvcHRpb24gfHwge30sXG4gICAgY3Vyc29yID0gX3JlZi5jdXJzb3I7XG4gIGlmIChjdXJzb3IpIHtcbiAgICB2YXIgbGVuID0gZWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgc3dpdGNoIChjdXJzb3IpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKGxlbiwgbGVuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIGxlbik7XG4gICAgfVxuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhc0FkZG9uID0gaGFzQWRkb247XG5leHBvcnRzLmhhc1ByZWZpeFN1ZmZpeCA9IGhhc1ByZWZpeFN1ZmZpeDtcbmV4cG9ydHMucmVzb2x2ZU9uQ2hhbmdlID0gcmVzb2x2ZU9uQ2hhbmdlO1xuZXhwb3J0cy50cmlnZ2VyRm9jdXMgPSB0cmlnZ2VyRm9jdXM7XG5mdW5jdGlvbiBoYXNBZGRvbihwcm9wcykge1xuICByZXR1cm4gISEocHJvcHMuYWRkb25CZWZvcmUgfHwgcHJvcHMuYWRkb25BZnRlcik7XG59XG5mdW5jdGlvbiBoYXNQcmVmaXhTdWZmaXgocHJvcHMpIHtcbiAgcmV0dXJuICEhKHByb3BzLnByZWZpeCB8fCBwcm9wcy5zdWZmaXggfHwgcHJvcHMuYWxsb3dDbGVhcik7XG59XG5cbi8vIFRPRE86IEl0J3MgYmV0dGVyIHRvIHVzZSBgUHJveHlgIHJlcGxhY2UgdGhlIGBlbGVtZW50LnZhbHVlYC4gQnV0IHdlIHN0aWxsIG5lZWQgc3VwcG9ydCBJRTExLlxuZnVuY3Rpb24gY2xvbmVFdmVudChldmVudCwgdGFyZ2V0LCB2YWx1ZSkge1xuICAvLyBBIGJ1ZyByZXBvcnQgZmlsZWQgb24gV2ViS2l0J3MgQnVnemlsbGEgdHJhY2tlciwgZGF0aW5nIGJhY2sgdG8gMjAwOSwgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUgb2YgY2xvbmVOb2RlKCkgbm90IGNvcHlpbmcgZmlsZXMgb2YgPGlucHV0IHR5cGU9XCJmaWxlXCI+IGVsZW1lbnRzLlxuICAvLyBBcyBvZiB0aGUgbGFzdCB1cGRhdGUsIHRoaXMgYnVnIHdhcyBzdGlsbCBtYXJrZWQgYXMgXCJORVcsXCIgaW5kaWNhdGluZyB0aGF0IGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVzb2x2ZWQgeWV04oCL4oCLLlxuICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxMjNcbiAgdmFyIGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY2xvbmVOb2RlKHRydWUpO1xuXG4gIC8vIGNsaWNrIGNsZWFyIGljb25cbiAgdmFyIG5ld0V2ZW50ID0gT2JqZWN0LmNyZWF0ZShldmVudCwge1xuICAgIHRhcmdldDoge1xuICAgICAgdmFsdWU6IGN1cnJlbnRUYXJnZXRcbiAgICB9LFxuICAgIGN1cnJlbnRUYXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfVxuICB9KTtcblxuICAvLyBGaWxsIGRhdGFcbiAgY3VycmVudFRhcmdldC52YWx1ZSA9IHZhbHVlO1xuXG4gIC8vIEZpbGwgc2VsZWN0aW9uLiBTb21lIHR5cGUgbGlrZSBgZW1haWxgIG5vdCBzdXBwb3J0IHNlbGVjdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NzgzM1xuICBpZiAodHlwZW9mIHRhcmdldC5zZWxlY3Rpb25TdGFydCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRhcmdldC5zZWxlY3Rpb25FbmQgPT09ICdudW1iZXInKSB7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25TdGFydCA9IHRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9IHRhcmdldC5zZWxlY3Rpb25FbmQ7XG4gIH1cbiAgY3VycmVudFRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gbmV3RXZlbnQ7XG59XG5mdW5jdGlvbiByZXNvbHZlT25DaGFuZ2UodGFyZ2V0LCBlLCBvbkNoYW5nZSwgdGFyZ2V0VmFsdWUpIHtcbiAgaWYgKCFvbkNoYW5nZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZXZlbnQgPSBlO1xuICBpZiAoZS50eXBlID09PSAnY2xpY2snKSB7XG4gICAgLy8gQ2xvbmUgYSBuZXcgdGFyZ2V0IGZvciBldmVudC5cbiAgICAvLyBBdm9pZCB0aGUgZm9sbG93aW5nIHVzYWdlLCB0aGUgc2V0UXVlcnkgbWV0aG9kIGdldHMgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgIC8vXG4gICAgLy8gY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gICAgLy8gPElucHV0XG4gICAgLy8gICBhbGxvd0NsZWFyXG4gICAgLy8gICB2YWx1ZT17cXVlcnl9XG4gICAgLy8gICBvbkNoYW5nZT17KGUpPT4ge1xuICAgIC8vICAgICBzZXRRdWVyeSgocHJldlN0YXR1cykgPT4gZS50YXJnZXQudmFsdWUpO1xuICAgIC8vICAgfX1cbiAgICAvLyAvPlxuXG4gICAgZXZlbnQgPSBjbG9uZUV2ZW50KGUsIHRhcmdldCwgJycpO1xuICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUcmlnZ2VyIGJ5IGNvbXBvc2l0aW9uIGV2ZW50LCB0aGlzIG1lYW5zIHdlIG5lZWQgZm9yY2UgY2hhbmdlIHRoZSBpbnB1dCB2YWx1ZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NTczN1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80NjU5OFxuICBpZiAodGFyZ2V0LnR5cGUgIT09ICdmaWxlJyAmJiB0YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnQgPSBjbG9uZUV2ZW50KGUsIHRhcmdldCwgdGFyZ2V0VmFsdWUpO1xuICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cbiAgb25DaGFuZ2UoZXZlbnQpO1xufVxuZnVuY3Rpb24gdHJpZ2dlckZvY3VzKGVsZW1lbnQsIG9wdGlvbikge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgZWxlbWVudC5mb2N1cyhvcHRpb24pO1xuXG4gIC8vIFNlbGVjdGlvbiBjb250ZW50XG4gIHZhciBfcmVmID0gb3B0aW9uIHx8IHt9LFxuICAgIGN1cnNvciA9IF9yZWYuY3Vyc29yO1xuICBpZiAoY3Vyc29yKSB7XG4gICAgdmFyIGxlbiA9IGVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgIHN3aXRjaCAoY3Vyc29yKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBsZW4pO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCBNZW51LCB7IE1lbnVJdGVtIH0gZnJvbSAncmMtbWVudSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTWVudGlvbnNDb250ZXh0IGZyb20gXCIuL01lbnRpb25zQ29udGV4dFwiO1xuLyoqXG4gKiBXZSBvbmx5IHVzZSBNZW51IHRvIGRpc3BsYXkgdGhlIGNhbmRpZGF0ZS5cbiAqIFRoZSBmb2N1cyBpcyBjb250cm9sbGVkIGJ5IHRleHRhcmVhIHRvIG1ha2UgYWNjZXNzaWJpbGl0eSBlYXN5LlxuICovXG5mdW5jdGlvbiBEcm9wZG93bk1lbnUocHJvcHMpIHtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW50aW9uc0NvbnRleHQpLFxuICAgIG5vdEZvdW5kQ29udGVudCA9IF9SZWFjdCR1c2VDb250ZXh0Lm5vdEZvdW5kQ29udGVudCxcbiAgICBhY3RpdmVJbmRleCA9IF9SZWFjdCR1c2VDb250ZXh0LmFjdGl2ZUluZGV4LFxuICAgIHNldEFjdGl2ZUluZGV4ID0gX1JlYWN0JHVzZUNvbnRleHQuc2V0QWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0T3B0aW9uID0gX1JlYWN0JHVzZUNvbnRleHQuc2VsZWN0T3B0aW9uLFxuICAgIG9uRm9jdXMgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uQmx1cixcbiAgICBvblNjcm9sbCA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uU2Nyb2xsO1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICB2YXIgYWN0aXZlT3B0aW9uID0gb3B0aW9uc1thY3RpdmVJbmRleF0gfHwge307XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51LCB7XG4gICAgcHJlZml4Q2xzOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW1lbnVcIiksXG4gICAgYWN0aXZlS2V5OiBhY3RpdmVPcHRpb24ua2V5LFxuICAgIG9uU2VsZWN0OiBmdW5jdGlvbiBvblNlbGVjdChfcmVmKSB7XG4gICAgICB2YXIga2V5ID0gX3JlZi5rZXk7XG4gICAgICB2YXIgb3B0aW9uID0gb3B0aW9ucy5maW5kKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgb3B0aW9uS2V5ID0gX3JlZjIua2V5O1xuICAgICAgICByZXR1cm4gb3B0aW9uS2V5ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHNlbGVjdE9wdGlvbihvcHRpb24pO1xuICAgIH0sXG4gICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvblNjcm9sbDogb25TY3JvbGxcbiAgfSwgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbiwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgIGRpc2FibGVkID0gb3B0aW9uLmRpc2FibGVkLFxuICAgICAgY2xhc3NOYW1lID0gb3B0aW9uLmNsYXNzTmFtZSxcbiAgICAgIHN0eWxlID0gb3B0aW9uLnN0eWxlLFxuICAgICAgbGFiZWwgPSBvcHRpb24ubGFiZWw7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVJdGVtLCB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICAgIHNldEFjdGl2ZUluZGV4KGluZGV4KTtcbiAgICAgIH1cbiAgICB9LCBsYWJlbCk7XG4gIH0pLCAhb3B0aW9ucy5sZW5ndGggJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUl0ZW0sIHtcbiAgICBkaXNhYmxlZDogdHJ1ZVxuICB9LCBub3RGb3VuZENvbnRlbnQpKTtcbn1cbmV4cG9ydCBkZWZhdWx0IERyb3Bkb3duTWVudTsiLCJpbXBvcnQgVHJpZ2dlciBmcm9tICdAcmMtY29tcG9uZW50L3RyaWdnZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEcm9wZG93bk1lbnUgZnJvbSBcIi4vRHJvcGRvd25NZW51XCI7XG52YXIgQlVJTFRfSU5fUExBQ0VNRU5UUyA9IHtcbiAgYm90dG9tUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsndGwnLCAnYnInXSxcbiAgICBvZmZzZXQ6IFswLCA0XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIGJvdHRvbUxlZnQ6IHtcbiAgICBwb2ludHM6IFsndHInLCAnYmwnXSxcbiAgICBvZmZzZXQ6IFswLCA0XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIHRvcFJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ2JsJywgJ3RyJ10sXG4gICAgb2Zmc2V0OiBbMCwgLTRdLFxuICAgIG92ZXJmbG93OiB7XG4gICAgICBhZGp1c3RYOiAxLFxuICAgICAgYWRqdXN0WTogMVxuICAgIH1cbiAgfSxcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydicicsICd0bCddLFxuICAgIG9mZnNldDogWzAsIC00XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH1cbn07XG52YXIgS2V5d29yZFRyaWdnZXIgPSBmdW5jdGlvbiBLZXl3b3JkVHJpZ2dlcihwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgdmlzaWJsZSA9IHByb3BzLnZpc2libGUsXG4gICAgdHJhbnNpdGlvbk5hbWUgPSBwcm9wcy50cmFuc2l0aW9uTmFtZSxcbiAgICBnZXRQb3B1cENvbnRhaW5lciA9IHByb3BzLmdldFBvcHVwQ29udGFpbmVyLFxuICAgIGRyb3Bkb3duQ2xhc3NOYW1lID0gcHJvcHMuZHJvcGRvd25DbGFzc05hbWUsXG4gICAgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgIHBsYWNlbWVudCA9IHByb3BzLnBsYWNlbWVudDtcbiAgdmFyIGRyb3Bkb3duUHJlZml4ID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1kcm9wZG93blwiKTtcbiAgdmFyIGRyb3Bkb3duRWxlbWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duTWVudSwge1xuICAgIHByZWZpeENsczogZHJvcGRvd25QcmVmaXgsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9KTtcbiAgdmFyIGRyb3Bkb3duUGxhY2VtZW50ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcHVwUGxhY2VtZW50O1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICBwb3B1cFBsYWNlbWVudCA9IHBsYWNlbWVudCA9PT0gJ3RvcCcgPyAndG9wTGVmdCcgOiAnYm90dG9tTGVmdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcHVwUGxhY2VtZW50ID0gcGxhY2VtZW50ID09PSAndG9wJyA/ICd0b3BSaWdodCcgOiAnYm90dG9tUmlnaHQnO1xuICAgIH1cbiAgICByZXR1cm4gcG9wdXBQbGFjZW1lbnQ7XG4gIH0sIFtkaXJlY3Rpb24sIHBsYWNlbWVudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJpZ2dlciwge1xuICAgIHByZWZpeENsczogZHJvcGRvd25QcmVmaXgsXG4gICAgcG9wdXBWaXNpYmxlOiB2aXNpYmxlLFxuICAgIHBvcHVwOiBkcm9wZG93bkVsZW1lbnQsXG4gICAgcG9wdXBQbGFjZW1lbnQ6IGRyb3Bkb3duUGxhY2VtZW50LFxuICAgIHBvcHVwVHJhbnNpdGlvbk5hbWU6IHRyYW5zaXRpb25OYW1lLFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzOiBCVUlMVF9JTl9QTEFDRU1FTlRTLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lcixcbiAgICBwb3B1cENsYXNzTmFtZTogZHJvcGRvd25DbGFzc05hbWVcbiAgfSwgY2hpbGRyZW4pO1xufTtcbmV4cG9ydCBkZWZhdWx0IEtleXdvcmRUcmlnZ2VyOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJwcmVmaXhDbHNcIiwgXCJjbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcInByZWZpeFwiLCBcInNwbGl0XCIsIFwibm90Rm91bmRDb250ZW50XCIsIFwidmFsdWVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJjaGlsZHJlblwiLCBcIm9wdGlvbnNcIiwgXCJvcGVuXCIsIFwiYWxsb3dDbGVhclwiLCBcInNpbGVudFwiLCBcInZhbGlkYXRlU2VhcmNoXCIsIFwiZmlsdGVyT3B0aW9uXCIsIFwib25DaGFuZ2VcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25QcmVzc0VudGVyXCIsIFwib25TZWFyY2hcIiwgXCJvblNlbGVjdFwiLCBcIm9uRm9jdXNcIiwgXCJvbkJsdXJcIiwgXCJ0cmFuc2l0aW9uTmFtZVwiLCBcInBsYWNlbWVudFwiLCBcImRpcmVjdGlvblwiLCBcImdldFBvcHVwQ29udGFpbmVyXCIsIFwiZHJvcGRvd25DbGFzc05hbWVcIiwgXCJyb3dzXCIsIFwidmlzaWJsZVwiLCBcIm9uUG9wdXBTY3JvbGxcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJzdWZmaXhcIiwgXCJwcmVmaXhDbHNcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJ2YWx1ZVwiLCBcImFsbG93Q2xlYXJcIiwgXCJvbkNoYW5nZVwiLCBcImNsYXNzTmFtZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcIm9uQ2xlYXJcIl07XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEJhc2VJbnB1dCB9IGZyb20gJ3JjLWlucHV0JztcbmltcG9ydCBUZXh0QXJlYSBmcm9tICdyYy10ZXh0YXJlYSc7XG5pbXBvcnQgdG9BcnJheSBmcm9tIFwicmMtdXRpbC9lcy9DaGlsZHJlbi90b0FycmF5XCI7XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRWZmZWN0U3RhdGUgZnJvbSBcIi4vaG9va3MvdXNlRWZmZWN0U3RhdGVcIjtcbmltcG9ydCBLZXl3b3JkVHJpZ2dlciBmcm9tIFwiLi9LZXl3b3JkVHJpZ2dlclwiO1xuaW1wb3J0IE1lbnRpb25zQ29udGV4dCBmcm9tIFwiLi9NZW50aW9uc0NvbnRleHRcIjtcbmltcG9ydCBPcHRpb24gZnJvbSBcIi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBmaWx0ZXJPcHRpb24gYXMgZGVmYXVsdEZpbHRlck9wdGlvbiwgdmFsaWRhdGVTZWFyY2ggYXMgZGVmYXVsdFZhbGlkYXRlU2VhcmNoLCBnZXRCZWZvcmVTZWxlY3Rpb25UZXh0LCBnZXRMYXN0TWVhc3VyZUluZGV4LCByZXBsYWNlV2l0aE1lYXN1cmUsIHNldElucHV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdXRpbFwiO1xudmFyIEludGVybmFsTWVudGlvbnMgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIF9wcm9wcyRwcmVmaXggPSBwcm9wcy5wcmVmaXgsXG4gICAgcHJlZml4ID0gX3Byb3BzJHByZWZpeCA9PT0gdm9pZCAwID8gJ0AnIDogX3Byb3BzJHByZWZpeCxcbiAgICBfcHJvcHMkc3BsaXQgPSBwcm9wcy5zcGxpdCxcbiAgICBzcGxpdCA9IF9wcm9wcyRzcGxpdCA9PT0gdm9pZCAwID8gJyAnIDogX3Byb3BzJHNwbGl0LFxuICAgIF9wcm9wcyRub3RGb3VuZENvbnRlbiA9IHByb3BzLm5vdEZvdW5kQ29udGVudCxcbiAgICBub3RGb3VuZENvbnRlbnQgPSBfcHJvcHMkbm90Rm91bmRDb250ZW4gPT09IHZvaWQgMCA/ICdOb3QgRm91bmQnIDogX3Byb3BzJG5vdEZvdW5kQ29udGVuLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgb3BlbiA9IHByb3BzLm9wZW4sXG4gICAgYWxsb3dDbGVhciA9IHByb3BzLmFsbG93Q2xlYXIsXG4gICAgc2lsZW50ID0gcHJvcHMuc2lsZW50LFxuICAgIF9wcm9wcyR2YWxpZGF0ZVNlYXJjaCA9IHByb3BzLnZhbGlkYXRlU2VhcmNoLFxuICAgIHZhbGlkYXRlU2VhcmNoID0gX3Byb3BzJHZhbGlkYXRlU2VhcmNoID09PSB2b2lkIDAgPyBkZWZhdWx0VmFsaWRhdGVTZWFyY2ggOiBfcHJvcHMkdmFsaWRhdGVTZWFyY2gsXG4gICAgX3Byb3BzJGZpbHRlck9wdGlvbiA9IHByb3BzLmZpbHRlck9wdGlvbixcbiAgICBmaWx0ZXJPcHRpb24gPSBfcHJvcHMkZmlsdGVyT3B0aW9uID09PSB2b2lkIDAgPyBkZWZhdWx0RmlsdGVyT3B0aW9uIDogX3Byb3BzJGZpbHRlck9wdGlvbixcbiAgICBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uS2V5RG93biA9IHByb3BzLm9uS2V5RG93bixcbiAgICBvbktleVVwID0gcHJvcHMub25LZXlVcCxcbiAgICBvblByZXNzRW50ZXIgPSBwcm9wcy5vblByZXNzRW50ZXIsXG4gICAgb25TZWFyY2ggPSBwcm9wcy5vblNlYXJjaCxcbiAgICBvblNlbGVjdCA9IHByb3BzLm9uU2VsZWN0LFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IHByb3BzLm9uQmx1cixcbiAgICB0cmFuc2l0aW9uTmFtZSA9IHByb3BzLnRyYW5zaXRpb25OYW1lLFxuICAgIHBsYWNlbWVudCA9IHByb3BzLnBsYWNlbWVudCxcbiAgICBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBwcm9wcy5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBkcm9wZG93bkNsYXNzTmFtZSA9IHByb3BzLmRyb3Bkb3duQ2xhc3NOYW1lLFxuICAgIF9wcm9wcyRyb3dzID0gcHJvcHMucm93cyxcbiAgICByb3dzID0gX3Byb3BzJHJvd3MgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkcm93cyxcbiAgICB2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICBvblBvcHVwU2Nyb2xsID0gcHJvcHMub25Qb3B1cFNjcm9sbCxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBtZXJnZWRQcmVmaXggPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcmVmaXgpID8gcHJlZml4IDogW3ByZWZpeF07XG4gIH0sIFtwcmVmaXhdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgdGV4dGFyZWFSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBtZWFzdXJlUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbiBnZXRUZXh0QXJlYSgpIHtcbiAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQ7XG4gICAgcmV0dXJuIChfdGV4dGFyZWFSZWYkY3VycmVudCA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50ID09PSB2b2lkIDAgfHwgKF90ZXh0YXJlYVJlZiRjdXJyZW50ID0gX3RleHRhcmVhUmVmJGN1cnJlbnQucmVzaXphYmxlVGV4dEFyZWEpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGV4dGFyZWFSZWYkY3VycmVudC50ZXh0QXJlYTtcbiAgfTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQ0O1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgIHZhciBfdGV4dGFyZWFSZWYkY3VycmVudDI7XG4gICAgICAgIHJldHVybiAoX3RleHRhcmVhUmVmJGN1cnJlbnQyID0gdGV4dGFyZWFSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RleHRhcmVhUmVmJGN1cnJlbnQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGV4dGFyZWFSZWYkY3VycmVudDIuZm9jdXMoKTtcbiAgICAgIH0sXG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQzO1xuICAgICAgICByZXR1cm4gKF90ZXh0YXJlYVJlZiRjdXJyZW50MyA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50MyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQzLmJsdXIoKTtcbiAgICAgIH0sXG4gICAgICB0ZXh0YXJlYTogKF90ZXh0YXJlYVJlZiRjdXJyZW50NCA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50NCA9PT0gdm9pZCAwIHx8IChfdGV4dGFyZWFSZWYkY3VycmVudDQgPSBfdGV4dGFyZWFSZWYkY3VycmVudDQucmVzaXphYmxlVGV4dEFyZWEpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50NCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQ0LnRleHRBcmVhLFxuICAgICAgbmF0aXZlRWxlbWVudDogY29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RhdGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIG1lYXN1cmluZyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TWVhc3VyaW5nID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZSgnJyksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIG1lYXN1cmVUZXh0ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRNZWFzdXJlVGV4dCA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUoJycpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBtZWFzdXJlUHJlZml4ID0gX3VzZVN0YXRlNlswXSxcbiAgICBzZXRNZWFzdXJlUHJlZml4ID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIF91c2VTdGF0ZTcgPSB1c2VTdGF0ZSgwKSxcbiAgICBfdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNywgMiksXG4gICAgbWVhc3VyZUxvY2F0aW9uID0gX3VzZVN0YXRlOFswXSxcbiAgICBzZXRNZWFzdXJlTG9jYXRpb24gPSBfdXNlU3RhdGU4WzFdO1xuICB2YXIgX3VzZVN0YXRlOSA9IHVzZVN0YXRlKDApLFxuICAgIF91c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlOSwgMiksXG4gICAgYWN0aXZlSW5kZXggPSBfdXNlU3RhdGUxMFswXSxcbiAgICBzZXRBY3RpdmVJbmRleCA9IF91c2VTdGF0ZTEwWzFdO1xuICB2YXIgX3VzZVN0YXRlMTEgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUxMSwgMiksXG4gICAgaXNGb2N1cyA9IF91c2VTdGF0ZTEyWzBdLFxuICAgIHNldElzRm9jdXMgPSBfdXNlU3RhdGUxMlsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUoJycsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgbWVyZ2VkVmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldE1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bmMgbWVhc3VyZSBkaXYgdG9wIHdpdGggdGV4dGFyZWEgZm9yIHJjLXRyaWdnZXIgdXNhZ2VcbiAgICBpZiAobWVhc3VyaW5nICYmIG1lYXN1cmVSZWYuY3VycmVudCkge1xuICAgICAgbWVhc3VyZVJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IGdldFRleHRBcmVhKCkuc2Nyb2xsVG9wO1xuICAgIH1cbiAgfSwgW21lYXN1cmluZ10pO1xuICB2YXIgX1JlYWN0JHVzZU1lbW8gPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybmluZyhmYWxzZSwgJ2BvcGVuYCBvZiBNZW50aW9ucyBpcyBvbmx5IHVzZWQgZm9yIGRlYnVnIHVzYWdlLiBEbyBub3QgdXNlIGluIHlvdSBwcm9kdWN0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVyZ2VkUHJlZml4Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIGN1clByZWZpeCA9IG1lcmdlZFByZWZpeFtpXTtcbiAgICAgICAgICB2YXIgaW5kZXggPSBtZXJnZWRWYWx1ZS5sYXN0SW5kZXhPZihjdXJQcmVmaXgpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsICcnLCBjdXJQcmVmaXgsIGluZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbbWVhc3VyaW5nLCBtZWFzdXJlVGV4dCwgbWVhc3VyZVByZWZpeCwgbWVhc3VyZUxvY2F0aW9uXTtcbiAgICB9LCBbb3BlbiwgbWVhc3VyaW5nLCBtZXJnZWRQcmVmaXgsIG1lcmdlZFZhbHVlLCBtZWFzdXJlVGV4dCwgbWVhc3VyZVByZWZpeCwgbWVhc3VyZUxvY2F0aW9uXSksXG4gICAgX1JlYWN0JHVzZU1lbW8yID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8sIDQpLFxuICAgIG1lcmdlZE1lYXN1cmluZyA9IF9SZWFjdCR1c2VNZW1vMlswXSxcbiAgICBtZXJnZWRNZWFzdXJlVGV4dCA9IF9SZWFjdCR1c2VNZW1vMlsxXSxcbiAgICBtZXJnZWRNZWFzdXJlUHJlZml4ID0gX1JlYWN0JHVzZU1lbW8yWzJdLFxuICAgIG1lcmdlZE1lYXN1cmVMb2NhdGlvbiA9IF9SZWFjdCR1c2VNZW1vMlszXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gT3B0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0T3B0aW9ucyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0YXJnZXRNZWFzdXJlVGV4dCkge1xuICAgIHZhciBsaXN0O1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGlzdCA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBfaXRlbSRrZXk7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGl0ZW0pLCB7fSwge1xuICAgICAgICAgIGtleTogKF9pdGVtJGtleSA9IGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbS5rZXkpICE9PSBudWxsICYmIF9pdGVtJGtleSAhPT0gdm9pZCAwID8gX2l0ZW0ka2V5IDogaXRlbS52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gdG9BcnJheShjaGlsZHJlbikubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBvcHRpb25Qcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICAgICAga2V5ID0gX3JlZi5rZXk7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvblByb3BzKSwge30sIHtcbiAgICAgICAgICBsYWJlbDogb3B0aW9uUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAga2V5OiBrZXkgfHwgb3B0aW9uUHJvcHMudmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIC8qKiBSZXR1cm4gYWxsIHJlc3VsdCBpZiBgZmlsdGVyT3B0aW9uYCBpcyBmYWxzZS4gKi9cbiAgICAgIGlmIChmaWx0ZXJPcHRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbHRlck9wdGlvbih0YXJnZXRNZWFzdXJlVGV4dCwgb3B0aW9uKTtcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuLCBvcHRpb25zLCBmaWx0ZXJPcHRpb25dKTtcbiAgdmFyIG1lcmdlZE9wdGlvbnMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9ucyhtZXJnZWRNZWFzdXJlVGV4dCk7XG4gIH0sIFtnZXRPcHRpb25zLCBtZXJnZWRNZWFzdXJlVGV4dF0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE1lYXN1cmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1hcmsgdGhhdCB3ZSB3aWxsIHJlc2V0IGlucHV0IHNlbGVjdGlvbiB0byB0YXJnZXQgcG9zaXRpb24gd2hlbiB1c2VyIHNlbGVjdCBvcHRpb25cbiAgdmFyIG9uU2VsZWN0aW9uRWZmZWN0ID0gdXNlRWZmZWN0U3RhdGUoKTtcbiAgdmFyIHN0YXJ0TWVhc3VyZSA9IGZ1bmN0aW9uIHN0YXJ0TWVhc3VyZShuZXh0TWVhc3VyZVRleHQsIG5leHRNZWFzdXJlUHJlZml4LCBuZXh0TWVhc3VyZUxvY2F0aW9uKSB7XG4gICAgc2V0TWVhc3VyaW5nKHRydWUpO1xuICAgIHNldE1lYXN1cmVUZXh0KG5leHRNZWFzdXJlVGV4dCk7XG4gICAgc2V0TWVhc3VyZVByZWZpeChuZXh0TWVhc3VyZVByZWZpeCk7XG4gICAgc2V0TWVhc3VyZUxvY2F0aW9uKG5leHRNZWFzdXJlTG9jYXRpb24pO1xuICAgIHNldEFjdGl2ZUluZGV4KDApO1xuICB9O1xuICB2YXIgc3RvcE1lYXN1cmUgPSBmdW5jdGlvbiBzdG9wTWVhc3VyZShjYWxsYmFjaykge1xuICAgIHNldE1lYXN1cmluZyhmYWxzZSk7XG4gICAgc2V0TWVhc3VyZUxvY2F0aW9uKDApO1xuICAgIHNldE1lYXN1cmVUZXh0KCcnKTtcbiAgICBvblNlbGVjdGlvbkVmZmVjdChjYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKG5leHRWYWx1ZSkge1xuICAgIHNldE1lcmdlZFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZShuZXh0VmFsdWUpO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbENoYW5nZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDaGFuZ2UoX3JlZjIpIHtcbiAgICB2YXIgbmV4dFZhbHVlID0gX3JlZjIudGFyZ2V0LnZhbHVlO1xuICAgIHRyaWdnZXJDaGFuZ2UobmV4dFZhbHVlKTtcbiAgfTtcbiAgdmFyIHNlbGVjdE9wdGlvbiA9IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbihvcHRpb24pIHtcbiAgICB2YXIgX2dldFRleHRBcmVhO1xuICAgIHZhciBfb3B0aW9uJHZhbHVlID0gb3B0aW9uLnZhbHVlLFxuICAgICAgbWVudGlvblZhbHVlID0gX29wdGlvbiR2YWx1ZSA9PT0gdm9pZCAwID8gJycgOiBfb3B0aW9uJHZhbHVlO1xuICAgIHZhciBfcmVwbGFjZVdpdGhNZWFzdXJlID0gcmVwbGFjZVdpdGhNZWFzdXJlKG1lcmdlZFZhbHVlLCB7XG4gICAgICAgIG1lYXN1cmVMb2NhdGlvbjogbWVyZ2VkTWVhc3VyZUxvY2F0aW9uLFxuICAgICAgICB0YXJnZXRUZXh0OiBtZW50aW9uVmFsdWUsXG4gICAgICAgIHByZWZpeDogbWVyZ2VkTWVhc3VyZVByZWZpeCxcbiAgICAgICAgc2VsZWN0aW9uU3RhcnQ6IChfZ2V0VGV4dEFyZWEgPSBnZXRUZXh0QXJlYSgpKSA9PT0gbnVsbCB8fCBfZ2V0VGV4dEFyZWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nZXRUZXh0QXJlYS5zZWxlY3Rpb25TdGFydCxcbiAgICAgICAgc3BsaXQ6IHNwbGl0XG4gICAgICB9KSxcbiAgICAgIHRleHQgPSBfcmVwbGFjZVdpdGhNZWFzdXJlLnRleHQsXG4gICAgICBzZWxlY3Rpb25Mb2NhdGlvbiA9IF9yZXBsYWNlV2l0aE1lYXN1cmUuc2VsZWN0aW9uTG9jYXRpb247XG4gICAgdHJpZ2dlckNoYW5nZSh0ZXh0KTtcbiAgICBzdG9wTWVhc3VyZShmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXZSBuZWVkIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBwb3NpdGlvblxuICAgICAgc2V0SW5wdXRTZWxlY3Rpb24oZ2V0VGV4dEFyZWEoKSwgc2VsZWN0aW9uTG9jYXRpb24pO1xuICAgIH0pO1xuICAgIG9uU2VsZWN0ID09PSBudWxsIHx8IG9uU2VsZWN0ID09PSB2b2lkIDAgfHwgb25TZWxlY3Qob3B0aW9uLCBtZXJnZWRNZWFzdXJlUHJlZml4KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBLZXlFdmVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDaGVjayBpZiBoaXQgdGhlIG1lYXN1cmUga2V5d29yZFxuICB2YXIgb25JbnRlcm5hbEtleURvd24gPSBmdW5jdGlvbiBvbkludGVybmFsS2V5RG93bihldmVudCkge1xuICAgIHZhciB3aGljaCA9IGV2ZW50LndoaWNoO1xuICAgIG9uS2V5RG93biA9PT0gbnVsbCB8fCBvbktleURvd24gPT09IHZvaWQgMCB8fCBvbktleURvd24oZXZlbnQpO1xuXG4gICAgLy8gU2tpcCBpZiBub3QgbWVhc3VyaW5nXG4gICAgaWYgKCFtZXJnZWRNZWFzdXJpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHdoaWNoID09PSBLZXlDb2RlLlVQIHx8IHdoaWNoID09PSBLZXlDb2RlLkRPV04pIHtcbiAgICAgIC8vIENvbnRyb2wgYXJyb3cgZnVuY3Rpb25cbiAgICAgIHZhciBvcHRpb25MZW4gPSBtZXJnZWRPcHRpb25zLmxlbmd0aDtcbiAgICAgIHZhciBvZmZzZXQgPSB3aGljaCA9PT0gS2V5Q29kZS5VUCA/IC0xIDogMTtcbiAgICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IChhY3RpdmVJbmRleCArIG9mZnNldCArIG9wdGlvbkxlbikgJSBvcHRpb25MZW47XG4gICAgICBzZXRBY3RpdmVJbmRleChuZXdBY3RpdmVJbmRleCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IEtleUNvZGUuRVNDKSB7XG4gICAgICBzdG9wTWVhc3VyZSgpO1xuICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IEtleUNvZGUuRU5URVIpIHtcbiAgICAgIC8vIE1lYXN1cmUgaGl0XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gbG9hZGluZyBza2lwXG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghbWVyZ2VkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RvcE1lYXN1cmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIF9vcHRpb24gPSBtZXJnZWRPcHRpb25zW2FjdGl2ZUluZGV4XTtcbiAgICAgIHNlbGVjdE9wdGlvbihfb3B0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoZW4gdG8gc3RhcnQgbWVhc3VyZTpcbiAgICogMS4gV2hlbiB1c2VyIHByZXNzIGBwcmVmaXhgXG4gICAqIDIuIFdoZW4gbWVhc3VyZVRleHQgIT09IHByZXZNZWFzdXJlVGV4dFxuICAgKiAgLSBJZiBtZWFzdXJlIGhpdFxuICAgKiAgLSBJZiBtZWFzdXJpbmdcbiAgICpcbiAgICogV2hlbiB0byBzdG9wIG1lYXN1cmU6XG4gICAqIDEuIFNlbGVjdGlvbiBpcyBvdXQgb2YgcmFuZ2VcbiAgICogMi4gQ29udGFpbnMgYHNwYWNlYFxuICAgKiAzLiBFU0Mgb3Igc2VsZWN0IG9uZVxuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxLZXlVcCA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxLZXlVcChldmVudCkge1xuICAgIHZhciBrZXkgPSBldmVudC5rZXksXG4gICAgICB3aGljaCA9IGV2ZW50LndoaWNoO1xuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgdmFyIHNlbGVjdGlvblN0YXJ0VGV4dCA9IGdldEJlZm9yZVNlbGVjdGlvblRleHQodGFyZ2V0KTtcbiAgICB2YXIgX2dldExhc3RNZWFzdXJlSW5kZXggPSBnZXRMYXN0TWVhc3VyZUluZGV4KHNlbGVjdGlvblN0YXJ0VGV4dCwgbWVyZ2VkUHJlZml4KSxcbiAgICAgIG1lYXN1cmVJbmRleCA9IF9nZXRMYXN0TWVhc3VyZUluZGV4LmxvY2F0aW9uLFxuICAgICAgbmV4dE1lYXN1cmVQcmVmaXggPSBfZ2V0TGFzdE1lYXN1cmVJbmRleC5wcmVmaXg7XG5cbiAgICAvLyBJZiB0aGUgY2xpZW50IGltcGxlbWVudHMgYW4gb25LZXlVcCBoYW5kbGVyLCBjYWxsIGl0XG4gICAgb25LZXlVcCA9PT0gbnVsbCB8fCBvbktleVVwID09PSB2b2lkIDAgfHwgb25LZXlVcChldmVudCk7XG5cbiAgICAvLyBTa2lwIGlmIG1hdGNoIHRoZSB3aGl0ZSBrZXkgbGlzdFxuICAgIGlmIChbS2V5Q29kZS5FU0MsIEtleUNvZGUuVVAsIEtleUNvZGUuRE9XTiwgS2V5Q29kZS5FTlRFUl0uaW5kZXhPZih3aGljaCkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtZWFzdXJlSW5kZXggIT09IC0xKSB7XG4gICAgICB2YXIgbmV4dE1lYXN1cmVUZXh0ID0gc2VsZWN0aW9uU3RhcnRUZXh0LnNsaWNlKG1lYXN1cmVJbmRleCArIG5leHRNZWFzdXJlUHJlZml4Lmxlbmd0aCk7XG4gICAgICB2YXIgdmFsaWRhdGVNZWFzdXJlID0gdmFsaWRhdGVTZWFyY2gobmV4dE1lYXN1cmVUZXh0LCBzcGxpdCk7XG4gICAgICB2YXIgbWF0Y2hPcHRpb24gPSAhIWdldE9wdGlvbnMobmV4dE1lYXN1cmVUZXh0KS5sZW5ndGg7XG4gICAgICBpZiAodmFsaWRhdGVNZWFzdXJlKSB7XG4gICAgICAgIC8vIGFkZGluZyBBbHRHcmFwaCBhbHNvIGZvcnQgYXplcnQga2V5Ym9hcmRcbiAgICAgICAgaWYgKGtleSA9PT0gbmV4dE1lYXN1cmVQcmVmaXggfHwga2V5ID09PSAnU2hpZnQnIHx8IHdoaWNoID09PSBLZXlDb2RlLkFMVCB8fCBrZXkgPT09ICdBbHRHcmFwaCcgfHwgbWVyZ2VkTWVhc3VyaW5nIHx8IG5leHRNZWFzdXJlVGV4dCAhPT0gbWVyZ2VkTWVhc3VyZVRleHQgJiYgbWF0Y2hPcHRpb24pIHtcbiAgICAgICAgICBzdGFydE1lYXN1cmUobmV4dE1lYXN1cmVUZXh0LCBuZXh0TWVhc3VyZVByZWZpeCwgbWVhc3VyZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtZXJnZWRNZWFzdXJpbmcpIHtcbiAgICAgICAgLy8gU3RvcCBpZiBtZWFzdXJlVGV4dCBpcyBpbnZhbGlkYXRlXG4gICAgICAgIHN0b3BNZWFzdXJlKCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogV2Ugd2lsbCB0cmlnZ2VyIGBvblNlYXJjaGAgdG8gZGV2ZWxvcGVyIHNpbmNlIHRoZXkgbWF5IHVzZSBmb3IgYXN5bmMgdXBkYXRlLlxuICAgICAgICogSWYgbWV0IGBzcGFjZWAgbWVhbnMgdXNlciBmaW5pc2hlZCBzZWFyY2hpbmcuXG4gICAgICAgKi9cbiAgICAgIGlmIChvblNlYXJjaCAmJiB2YWxpZGF0ZU1lYXN1cmUpIHtcbiAgICAgICAgb25TZWFyY2gobmV4dE1lYXN1cmVUZXh0LCBuZXh0TWVhc3VyZVByZWZpeCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtZXJnZWRNZWFzdXJpbmcpIHtcbiAgICAgIHN0b3BNZWFzdXJlKCk7XG4gICAgfVxuICB9O1xuICB2YXIgb25JbnRlcm5hbFByZXNzRW50ZXIgPSBmdW5jdGlvbiBvbkludGVybmFsUHJlc3NFbnRlcihldmVudCkge1xuICAgIGlmICghbWVyZ2VkTWVhc3VyaW5nICYmIG9uUHJlc3NFbnRlcikge1xuICAgICAgb25QcmVzc0VudGVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBGb2N1cyBCbHVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGZvY3VzUmVmID0gdXNlUmVmKCk7XG4gIHZhciBvbkludGVybmFsRm9jdXMgPSBmdW5jdGlvbiBvbkludGVybmFsRm9jdXMoZXZlbnQpIHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGZvY3VzUmVmLmN1cnJlbnQpO1xuICAgIGlmICghaXNGb2N1cyAmJiBldmVudCAmJiBvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgc2V0SXNGb2N1cyh0cnVlKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxCbHVyID0gZnVuY3Rpb24gb25JbnRlcm5hbEJsdXIoZXZlbnQpIHtcbiAgICBmb2N1c1JlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgc2V0SXNGb2N1cyhmYWxzZSk7XG4gICAgICBzdG9wTWVhc3VyZSgpO1xuICAgICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwIHx8IG9uQmx1cihldmVudCk7XG4gICAgfSwgMCk7XG4gIH07XG4gIHZhciBvbkRyb3Bkb3duRm9jdXMgPSBmdW5jdGlvbiBvbkRyb3Bkb3duRm9jdXMoKSB7XG4gICAgb25JbnRlcm5hbEZvY3VzKCk7XG4gIH07XG4gIHZhciBvbkRyb3Bkb3duQmx1ciA9IGZ1bmN0aW9uIG9uRHJvcGRvd25CbHVyKCkge1xuICAgIG9uSW50ZXJuYWxCbHVyKCk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNjcm9sbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkludGVybmFsUG9wdXBTY3JvbGwgPSBmdW5jdGlvbiBvbkludGVybmFsUG9wdXBTY3JvbGwoZXZlbnQpIHtcbiAgICBvblBvcHVwU2Nyb2xsID09PSBudWxsIHx8IG9uUG9wdXBTY3JvbGwgPT09IHZvaWQgMCB8fCBvblBvcHVwU2Nyb2xsKGV2ZW50KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHByZWZpeENscywgY2xhc3NOYW1lKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgcmVmOiBjb250YWluZXJSZWZcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dEFyZWEsIF9leHRlbmRzKHtcbiAgICByZWY6IHRleHRhcmVhUmVmLFxuICAgIHZhbHVlOiBtZXJnZWRWYWx1ZVxuICB9LCByZXN0UHJvcHMsIHtcbiAgICByb3dzOiByb3dzLFxuICAgIG9uQ2hhbmdlOiBvbkludGVybmFsQ2hhbmdlLFxuICAgIG9uS2V5RG93bjogb25JbnRlcm5hbEtleURvd24sXG4gICAgb25LZXlVcDogb25JbnRlcm5hbEtleVVwLFxuICAgIG9uUHJlc3NFbnRlcjogb25JbnRlcm5hbFByZXNzRW50ZXIsXG4gICAgb25Gb2N1czogb25JbnRlcm5hbEZvY3VzLFxuICAgIG9uQmx1cjogb25JbnRlcm5hbEJsdXJcbiAgfSkpLCBtZXJnZWRNZWFzdXJpbmcgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogbWVhc3VyZVJlZixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItbWVhc3VyZVwiKVxuICB9LCBtZXJnZWRWYWx1ZS5zbGljZSgwLCBtZXJnZWRNZWFzdXJlTG9jYXRpb24pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW50aW9uc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgbm90Rm91bmRDb250ZW50OiBub3RGb3VuZENvbnRlbnQsXG4gICAgICBhY3RpdmVJbmRleDogYWN0aXZlSW5kZXgsXG4gICAgICBzZXRBY3RpdmVJbmRleDogc2V0QWN0aXZlSW5kZXgsXG4gICAgICBzZWxlY3RPcHRpb246IHNlbGVjdE9wdGlvbixcbiAgICAgIG9uRm9jdXM6IG9uRHJvcGRvd25Gb2N1cyxcbiAgICAgIG9uQmx1cjogb25Ecm9wZG93bkJsdXIsXG4gICAgICBvblNjcm9sbDogb25JbnRlcm5hbFBvcHVwU2Nyb2xsXG4gICAgfVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChLZXl3b3JkVHJpZ2dlciwge1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIHRyYW5zaXRpb25OYW1lOiB0cmFuc2l0aW9uTmFtZSxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBvcHRpb25zOiBtZXJnZWRPcHRpb25zLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgZ2V0UG9wdXBDb250YWluZXI6IGdldFBvcHVwQ29udGFpbmVyLFxuICAgIGRyb3Bkb3duQ2xhc3NOYW1lOiBkcm9wZG93bkNsYXNzTmFtZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgbWVyZ2VkTWVhc3VyZVByZWZpeCkpKSwgbWVyZ2VkVmFsdWUuc2xpY2UobWVyZ2VkTWVhc3VyZUxvY2F0aW9uICsgbWVyZ2VkTWVhc3VyZVByZWZpeC5sZW5ndGgpKSk7XG59KTtcbnZhciBNZW50aW9ucyA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmMywgcmVmKSB7XG4gIHZhciBzdWZmaXggPSBfcmVmMy5zdWZmaXgsXG4gICAgX3JlZjMkcHJlZml4Q2xzID0gX3JlZjMucHJlZml4Q2xzLFxuICAgIHByZWZpeENscyA9IF9yZWYzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLW1lbnRpb25zJyA6IF9yZWYzJHByZWZpeENscyxcbiAgICBkZWZhdWx0VmFsdWUgPSBfcmVmMy5kZWZhdWx0VmFsdWUsXG4gICAgY3VzdG9tVmFsdWUgPSBfcmVmMy52YWx1ZSxcbiAgICBhbGxvd0NsZWFyID0gX3JlZjMuYWxsb3dDbGVhcixcbiAgICBvbkNoYW5nZSA9IF9yZWYzLm9uQ2hhbmdlLFxuICAgIGNsYXNzZXMgPSBfcmVmMy5jbGFzc05hbWVzLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYzLmNsYXNzTmFtZSxcbiAgICBkaXNhYmxlZCA9IF9yZWYzLmRpc2FibGVkLFxuICAgIG9uQ2xlYXIgPSBfcmVmMy5vbkNsZWFyLFxuICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDIpO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgaG9sZGVyUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgbWVudGlvblJlZiA9IHVzZVJlZihudWxsKTtcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2hvbGRlclJlZiRjdXJyZW50LCBfbWVudGlvblJlZiRjdXJyZW50O1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lbnRpb25SZWYuY3VycmVudCksIHt9LCB7XG4gICAgICBuYXRpdmVFbGVtZW50OiAoKF9ob2xkZXJSZWYkY3VycmVudCA9IGhvbGRlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaG9sZGVyUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ob2xkZXJSZWYkY3VycmVudC5uYXRpdmVFbGVtZW50KSB8fCAoKF9tZW50aW9uUmVmJGN1cnJlbnQgPSBtZW50aW9uUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9tZW50aW9uUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tZW50aW9uUmVmJGN1cnJlbnQubmF0aXZlRWxlbWVudClcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFZhbHVlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZTMgPSB1c2VNZXJnZWRTdGF0ZSgnJywge1xuICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICB2YWx1ZTogY3VzdG9tVmFsdWVcbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlMywgMiksXG4gICAgbWVyZ2VkVmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldE1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNFsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ2hhbmdlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdHJpZ2dlckNoYW5nZSA9IGZ1bmN0aW9uIHRyaWdnZXJDaGFuZ2UoY3VycmVudFZhbHVlKSB7XG4gICAgc2V0TWVyZ2VkVmFsdWUoY3VycmVudFZhbHVlKTtcbiAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKGN1cnJlbnRWYWx1ZSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlc2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGhhbmRsZVJlc2V0ID0gZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7XG4gICAgdHJpZ2dlckNoYW5nZSgnJyk7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlSW5wdXQsIHtcbiAgICBzdWZmaXg6IHN1ZmZpeCxcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB2YWx1ZTogbWVyZ2VkVmFsdWUsXG4gICAgYWxsb3dDbGVhcjogYWxsb3dDbGVhcixcbiAgICBoYW5kbGVSZXNldDogaGFuZGxlUmVzZXQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgY2xhc3NOYW1lczogY2xhc3NlcyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcmVmOiBob2xkZXJSZWYsXG4gICAgb25DbGVhcjogb25DbGVhclxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbE1lbnRpb25zLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzID09PSBudWxsIHx8IGNsYXNzZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzZXMubWVudGlvbnMsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcmVmOiBtZW50aW9uUmVmLFxuICAgIG9uQ2hhbmdlOiB0cmlnZ2VyQ2hhbmdlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9LCByZXN0KSkpO1xufSk7XG5NZW50aW9ucy5PcHRpb24gPSBPcHRpb247XG5leHBvcnQgZGVmYXVsdCBNZW50aW9uczsiLCIvKiB0c2xpbnQ6ZGlzYWJsZTogbm8tb2JqZWN0LWxpdGVyYWwtdHlwZS1hc3NlcnRpb24gKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8vIFdlIHdpbGwgbmV2ZXIgdXNlIGRlZmF1bHQsIGhlcmUgb25seSB0byBmaXggVHlwZVNjcmlwdCB3YXJuaW5nXG52YXIgTWVudGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnQgZGVmYXVsdCBNZW50aW9uc0NvbnRleHQ7IiwidmFyIE9wdGlvbiA9IGZ1bmN0aW9uIE9wdGlvbigpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0IGRlZmF1bHQgT3B0aW9uOyIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIFRyaWdnZXIgYSBjYWxsYmFjayBvbiBzdGF0ZSBjaGFuZ2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRWZmZWN0U3RhdGUoKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh7XG4gICAgICBpZDogMCxcbiAgICAgIGNhbGxiYWNrOiBudWxsXG4gICAgfSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgZWZmZWN0SWQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEVmZmVjdElkID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHVwZGF0ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNldEVmZmVjdElkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgaWQgPSBfcmVmLmlkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkICsgMSxcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICB9O1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9lZmZlY3RJZCRjYWxsYmFjaztcbiAgICAoX2VmZmVjdElkJGNhbGxiYWNrID0gZWZmZWN0SWQuY2FsbGJhY2spID09PSBudWxsIHx8IF9lZmZlY3RJZCRjYWxsYmFjayA9PT0gdm9pZCAwIHx8IF9lZmZlY3RJZCRjYWxsYmFjay5jYWxsKGVmZmVjdElkKTtcbiAgfSwgW2VmZmVjdElkXSk7XG4gIHJldHVybiB1cGRhdGU7XG59IiwiaW1wb3J0IE1lbnRpb25zIGZyb20gXCIuL01lbnRpb25zXCI7XG5leHBvcnQgZGVmYXVsdCBNZW50aW9uczsiLCIvKipcbiAqIEN1dCBpbnB1dCBzZWxlY3Rpb24gaW50byAyIHBhcnQgYW5kIHJldHVybiB0ZXh0IGJlZm9yZSBzZWxlY3Rpb24gc3RhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJlZm9yZVNlbGVjdGlvblRleHQoaW5wdXQpIHtcbiAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gIHJldHVybiBpbnB1dC52YWx1ZS5zbGljZSgwLCBzZWxlY3Rpb25TdGFydCk7XG59XG4vKipcbiAqIEZpbmQgdGhlIGxhc3QgbWF0Y2ggcHJlZml4IGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0TWVhc3VyZUluZGV4KHRleHQsIHByZWZpeCkge1xuICByZXR1cm4gcHJlZml4LnJlZHVjZShmdW5jdGlvbiAobGFzdE1hdGNoLCBwcmVmaXhTdHIpIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZihwcmVmaXhTdHIpO1xuICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TWF0Y2gubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2F0aW9uOiBsYXN0SW5kZXgsXG4gICAgICAgIHByZWZpeDogcHJlZml4U3RyXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbGFzdE1hdGNoO1xuICB9LCB7XG4gICAgbG9jYXRpb246IC0xLFxuICAgIHByZWZpeDogJydcbiAgfSk7XG59XG5mdW5jdGlvbiBsb3dlcihjaGFyKSB7XG4gIHJldHVybiAoY2hhciB8fCAnJykudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHJlZHVjZVRleHQodGV4dCwgdGFyZ2V0VGV4dCwgc3BsaXQpIHtcbiAgdmFyIGZpcnN0Q2hhciA9IHRleHRbMF07XG4gIGlmICghZmlyc3RDaGFyIHx8IGZpcnN0Q2hhciA9PT0gc3BsaXQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIC8vIFJldXNlIHJlc3QgdGV4dCBhcyBpdCBjYW5cbiAgdmFyIHJlc3RUZXh0ID0gdGV4dDtcbiAgdmFyIHRhcmdldFRleHRMZW4gPSB0YXJnZXRUZXh0Lmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRUZXh0TGVuOyBpICs9IDEpIHtcbiAgICBpZiAobG93ZXIocmVzdFRleHRbaV0pICE9PSBsb3dlcih0YXJnZXRUZXh0W2ldKSkge1xuICAgICAgcmVzdFRleHQgPSByZXN0VGV4dC5zbGljZShpKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoaSA9PT0gdGFyZ2V0VGV4dExlbiAtIDEpIHtcbiAgICAgIHJlc3RUZXh0ID0gcmVzdFRleHQuc2xpY2UodGFyZ2V0VGV4dExlbik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN0VGV4dDtcbn1cblxuLyoqXG4gKiBQYWludCB0YXJnZXRUZXh0IGludG8gY3VycmVudCB0ZXh0OlxuICogIHRleHQ6IGxpdHRsZUBsaXRlc3RcbiAqICB0YXJnZXRUZXh0OiBsaWdodFxuICogID0+IGxpdHRsZSBAbGlnaHQgdGVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVdpdGhNZWFzdXJlKHRleHQsIG1lYXN1cmVDb25maWcpIHtcbiAgdmFyIG1lYXN1cmVMb2NhdGlvbiA9IG1lYXN1cmVDb25maWcubWVhc3VyZUxvY2F0aW9uLFxuICAgIHByZWZpeCA9IG1lYXN1cmVDb25maWcucHJlZml4LFxuICAgIHRhcmdldFRleHQgPSBtZWFzdXJlQ29uZmlnLnRhcmdldFRleHQsXG4gICAgc2VsZWN0aW9uU3RhcnQgPSBtZWFzdXJlQ29uZmlnLnNlbGVjdGlvblN0YXJ0LFxuICAgIHNwbGl0ID0gbWVhc3VyZUNvbmZpZy5zcGxpdDtcblxuICAvLyBCZWZvcmUgdGV4dCB3aWxsIGFwcGVuZCBvbmUgc3BhY2UgaWYgaGF2ZSBvdGhlciB0ZXh0XG4gIHZhciBiZWZvcmVNZWFzdXJlVGV4dCA9IHRleHQuc2xpY2UoMCwgbWVhc3VyZUxvY2F0aW9uKTtcbiAgaWYgKGJlZm9yZU1lYXN1cmVUZXh0W2JlZm9yZU1lYXN1cmVUZXh0Lmxlbmd0aCAtIHNwbGl0Lmxlbmd0aF0gPT09IHNwbGl0KSB7XG4gICAgYmVmb3JlTWVhc3VyZVRleHQgPSBiZWZvcmVNZWFzdXJlVGV4dC5zbGljZSgwLCBiZWZvcmVNZWFzdXJlVGV4dC5sZW5ndGggLSBzcGxpdC5sZW5ndGgpO1xuICB9XG4gIGlmIChiZWZvcmVNZWFzdXJlVGV4dCkge1xuICAgIGJlZm9yZU1lYXN1cmVUZXh0ID0gXCJcIi5jb25jYXQoYmVmb3JlTWVhc3VyZVRleHQpLmNvbmNhdChzcGxpdCk7XG4gIH1cblxuICAvLyBDdXQgZHVwbGljYXRlIHN0cmluZyB3aXRoIGN1cnJlbnQgdGFyZ2V0VGV4dFxuICB2YXIgcmVzdFRleHQgPSByZWR1Y2VUZXh0KHRleHQuc2xpY2Uoc2VsZWN0aW9uU3RhcnQpLCB0YXJnZXRUZXh0LnNsaWNlKHNlbGVjdGlvblN0YXJ0IC0gbWVhc3VyZUxvY2F0aW9uIC0gcHJlZml4Lmxlbmd0aCksIHNwbGl0KTtcbiAgaWYgKHJlc3RUZXh0LnNsaWNlKDAsIHNwbGl0Lmxlbmd0aCkgPT09IHNwbGl0KSB7XG4gICAgcmVzdFRleHQgPSByZXN0VGV4dC5zbGljZShzcGxpdC5sZW5ndGgpO1xuICB9XG4gIHZhciBjb25uZWN0ZWRTdGFydFRleHQgPSBcIlwiLmNvbmNhdChiZWZvcmVNZWFzdXJlVGV4dCkuY29uY2F0KHByZWZpeCkuY29uY2F0KHRhcmdldFRleHQpLmNvbmNhdChzcGxpdCk7XG4gIHJldHVybiB7XG4gICAgdGV4dDogXCJcIi5jb25jYXQoY29ubmVjdGVkU3RhcnRUZXh0KS5jb25jYXQocmVzdFRleHQpLFxuICAgIHNlbGVjdGlvbkxvY2F0aW9uOiBjb25uZWN0ZWRTdGFydFRleHQubGVuZ3RoXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0SW5wdXRTZWxlY3Rpb24oaW5wdXQsIGxvY2F0aW9uKSB7XG4gIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGxvY2F0aW9uLCBsb2NhdGlvbik7XG5cbiAgLyoqXG4gICAqIFJlc2V0IGNhcmV0IGludG8gdmlldy5cbiAgICogU2luY2UgdGhpcyBmdW5jdGlvbiBhbHdheXMgY2FsbGVkIGJ5IHVzZXIgY29udHJvbCwgaXQncyBzYWZlIHRvIGZvY3VzIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dC5ibHVyKCk7XG4gIGlucHV0LmZvY3VzKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZWFyY2godGV4dCwgc3BsaXQpIHtcbiAgcmV0dXJuICFzcGxpdCB8fCB0ZXh0LmluZGV4T2Yoc3BsaXQpID09PSAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJPcHRpb24oaW5wdXQsIF9yZWYpIHtcbiAgdmFyIF9yZWYkdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgIHZhbHVlID0gX3JlZiR2YWx1ZSA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHZhbHVlO1xuICB2YXIgbG93ZXJDYXNlID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2UpICE9PSAtMTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHsgdXNlTWVhc3VyZSB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpdmlkZXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHM7XG4gIHZhciBtZWFzdXJlID0gdXNlTWVhc3VyZSgpO1xuICBpZiAobWVhc3VyZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcbiAgICByb2xlOiBcInNlcGFyYXRvclwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWl0ZW0tZGl2aWRlclwiKSwgY2xhc3NOYW1lKSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSk7XG59IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEljb24oX3JlZikge1xuICB2YXIgaWNvbiA9IF9yZWYuaWNvbixcbiAgICBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgaWNvbk5vZGU7XG4gIGlmIChpY29uID09PSBudWxsIHx8IGljb24gPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiBpY29uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWNvbk5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChpY29uLCBfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcykpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpY29uICE9PSBcImJvb2xlYW5cIikge1xuICAgIC8vIENvbXBhdGlibGUgZm9yIG9yaWdpbiBkZWZpbml0aW9uXG4gICAgaWNvbk5vZGUgPSBpY29uO1xuICB9XG4gIHJldHVybiBpY29uTm9kZSB8fCBjaGlsZHJlbiB8fCBudWxsO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInByZWZpeENsc1wiLCBcInJvb3RDbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcInRhYkluZGV4XCIsIFwiaXRlbXNcIiwgXCJjaGlsZHJlblwiLCBcImRpcmVjdGlvblwiLCBcImlkXCIsIFwibW9kZVwiLCBcImlubGluZUNvbGxhcHNlZFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRPdmVyZmxvd1wiLCBcInN1Yk1lbnVPcGVuRGVsYXlcIiwgXCJzdWJNZW51Q2xvc2VEZWxheVwiLCBcImZvcmNlU3ViTWVudVJlbmRlclwiLCBcImRlZmF1bHRPcGVuS2V5c1wiLCBcIm9wZW5LZXlzXCIsIFwiYWN0aXZlS2V5XCIsIFwiZGVmYXVsdEFjdGl2ZUZpcnN0XCIsIFwic2VsZWN0YWJsZVwiLCBcIm11bHRpcGxlXCIsIFwiZGVmYXVsdFNlbGVjdGVkS2V5c1wiLCBcInNlbGVjdGVkS2V5c1wiLCBcIm9uU2VsZWN0XCIsIFwib25EZXNlbGVjdFwiLCBcImlubGluZUluZGVudFwiLCBcIm1vdGlvblwiLCBcImRlZmF1bHRNb3Rpb25zXCIsIFwidHJpZ2dlclN1Yk1lbnVBY3Rpb25cIiwgXCJidWlsdGluUGxhY2VtZW50c1wiLCBcIml0ZW1JY29uXCIsIFwiZXhwYW5kSWNvblwiLCBcIm92ZXJmbG93ZWRJbmRpY2F0b3JcIiwgXCJvdmVyZmxvd2VkSW5kaWNhdG9yUG9wdXBDbGFzc05hbWVcIiwgXCJnZXRQb3B1cENvbnRhaW5lclwiLCBcIm9uQ2xpY2tcIiwgXCJvbk9wZW5DaGFuZ2VcIiwgXCJvbktleURvd25cIiwgXCJvcGVuQW5pbWF0aW9uXCIsIFwib3BlblRyYW5zaXRpb25OYW1lXCIsIFwiX2ludGVybmFsUmVuZGVyTWVudUl0ZW1cIiwgXCJfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbVwiLCBcIl9pbnRlcm5hbENvbXBvbmVudHNcIl07XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBPdmVyZmxvdyBmcm9tICdyYy1vdmVyZmxvdyc7XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCBpc0VxdWFsIGZyb20gXCJyYy11dGlsL2VzL2lzRXF1YWxcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgSWRDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC9JZENvbnRleHRcIjtcbmltcG9ydCBNZW51Q29udGV4dFByb3ZpZGVyIGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IFBhdGhSZWdpc3RlckNvbnRleHQsIFBhdGhVc2VyQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCBQcml2YXRlQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L1ByaXZhdGVDb250ZXh0XCI7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVFbGVtZW50cywgcmVmcmVzaEVsZW1lbnRzLCB1c2VBY2Nlc3NpYmlsaXR5IH0gZnJvbSBcIi4vaG9va3MvdXNlQWNjZXNzaWJpbGl0eVwiO1xuaW1wb3J0IHVzZUtleVJlY29yZHMsIHsgT1ZFUkZMT1dfS0VZIH0gZnJvbSBcIi4vaG9va3MvdXNlS2V5UmVjb3Jkc1wiO1xuaW1wb3J0IHVzZU1lbW9DYWxsYmFjayBmcm9tIFwiLi9ob29rcy91c2VNZW1vQ2FsbGJhY2tcIjtcbmltcG9ydCB1c2VVVUlEIGZyb20gXCIuL2hvb2tzL3VzZVVVSURcIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuaW1wb3J0IFN1Yk1lbnUgZnJvbSBcIi4vU3ViTWVudVwiO1xuaW1wb3J0IHsgcGFyc2VJdGVtcyB9IGZyb20gXCIuL3V0aWxzL25vZGVVdGlsXCI7XG5pbXBvcnQgeyB3YXJuSXRlbVByb3AgfSBmcm9tIFwiLi91dGlscy93YXJuVXRpbFwiO1xuXG4vKipcbiAqIE1lbnUgbW9kaWZ5IGFmdGVyIHJlZmFjdG9yOlxuICogIyMgQWRkXG4gKiAtIGRpc2FibGVkXG4gKlxuICogIyMgUmVtb3ZlXG4gKiAtIG9wZW5UcmFuc2l0aW9uTmFtZVxuICogLSBvcGVuQW5pbWF0aW9uXG4gKiAtIG9uRGVzdHJveVxuICogLSBzaWRlckNvbGxhcHNlZDogU2VlbXMgYW50ZCBkbyBub3QgdXNlIHRoaXMgcHJvcCAoTmVlZCB0ZXN0IGluIGFudGQpXG4gKiAtIGNvbGxhcHNlZFdpZHRoOiBTZWVtcyB0aGlzIGxvZ2ljIHNob3VsZCBiZSBoYW5kbGUgYnkgYW50ZCBMYXlvdXQuU2lkZXJcbiAqL1xuXG4vLyBvcHRpbWl6ZSBmb3IgcmVuZGVyXG52YXIgRU1QVFlfTElTVCA9IFtdO1xudmFyIE1lbnUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgX2NoaWxkTGlzdCQ7XG4gIHZhciBfcmVmID0gcHJvcHMsXG4gICAgX3JlZiRwcmVmaXhDbHMgPSBfcmVmLnByZWZpeENscyxcbiAgICBwcmVmaXhDbHMgPSBfcmVmJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLW1lbnUnIDogX3JlZiRwcmVmaXhDbHMsXG4gICAgcm9vdENsYXNzTmFtZSA9IF9yZWYucm9vdENsYXNzTmFtZSxcbiAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgX3JlZiR0YWJJbmRleCA9IF9yZWYudGFiSW5kZXgsXG4gICAgdGFiSW5kZXggPSBfcmVmJHRhYkluZGV4ID09PSB2b2lkIDAgPyAwIDogX3JlZiR0YWJJbmRleCxcbiAgICBpdGVtcyA9IF9yZWYuaXRlbXMsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbiA9IF9yZWYuZGlyZWN0aW9uLFxuICAgIGlkID0gX3JlZi5pZCxcbiAgICBfcmVmJG1vZGUgPSBfcmVmLm1vZGUsXG4gICAgbW9kZSA9IF9yZWYkbW9kZSA9PT0gdm9pZCAwID8gJ3ZlcnRpY2FsJyA6IF9yZWYkbW9kZSxcbiAgICBpbmxpbmVDb2xsYXBzZWQgPSBfcmVmLmlubGluZUNvbGxhcHNlZCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWRPdmVyZmxvdyA9IF9yZWYuZGlzYWJsZWRPdmVyZmxvdyxcbiAgICBfcmVmJHN1Yk1lbnVPcGVuRGVsYXkgPSBfcmVmLnN1Yk1lbnVPcGVuRGVsYXksXG4gICAgc3ViTWVudU9wZW5EZWxheSA9IF9yZWYkc3ViTWVudU9wZW5EZWxheSA9PT0gdm9pZCAwID8gMC4xIDogX3JlZiRzdWJNZW51T3BlbkRlbGF5LFxuICAgIF9yZWYkc3ViTWVudUNsb3NlRGVsYSA9IF9yZWYuc3ViTWVudUNsb3NlRGVsYXksXG4gICAgc3ViTWVudUNsb3NlRGVsYXkgPSBfcmVmJHN1Yk1lbnVDbG9zZURlbGEgPT09IHZvaWQgMCA/IDAuMSA6IF9yZWYkc3ViTWVudUNsb3NlRGVsYSxcbiAgICBmb3JjZVN1Yk1lbnVSZW5kZXIgPSBfcmVmLmZvcmNlU3ViTWVudVJlbmRlcixcbiAgICBkZWZhdWx0T3BlbktleXMgPSBfcmVmLmRlZmF1bHRPcGVuS2V5cyxcbiAgICBvcGVuS2V5cyA9IF9yZWYub3BlbktleXMsXG4gICAgYWN0aXZlS2V5ID0gX3JlZi5hY3RpdmVLZXksXG4gICAgZGVmYXVsdEFjdGl2ZUZpcnN0ID0gX3JlZi5kZWZhdWx0QWN0aXZlRmlyc3QsXG4gICAgX3JlZiRzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgIHNlbGVjdGFibGUgPSBfcmVmJHNlbGVjdGFibGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHNlbGVjdGFibGUsXG4gICAgX3JlZiRtdWx0aXBsZSA9IF9yZWYubXVsdGlwbGUsXG4gICAgbXVsdGlwbGUgPSBfcmVmJG11bHRpcGxlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkbXVsdGlwbGUsXG4gICAgZGVmYXVsdFNlbGVjdGVkS2V5cyA9IF9yZWYuZGVmYXVsdFNlbGVjdGVkS2V5cyxcbiAgICBzZWxlY3RlZEtleXMgPSBfcmVmLnNlbGVjdGVkS2V5cyxcbiAgICBvblNlbGVjdCA9IF9yZWYub25TZWxlY3QsXG4gICAgb25EZXNlbGVjdCA9IF9yZWYub25EZXNlbGVjdCxcbiAgICBfcmVmJGlubGluZUluZGVudCA9IF9yZWYuaW5saW5lSW5kZW50LFxuICAgIGlubGluZUluZGVudCA9IF9yZWYkaW5saW5lSW5kZW50ID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkaW5saW5lSW5kZW50LFxuICAgIG1vdGlvbiA9IF9yZWYubW90aW9uLFxuICAgIGRlZmF1bHRNb3Rpb25zID0gX3JlZi5kZWZhdWx0TW90aW9ucyxcbiAgICBfcmVmJHRyaWdnZXJTdWJNZW51QWMgPSBfcmVmLnRyaWdnZXJTdWJNZW51QWN0aW9uLFxuICAgIHRyaWdnZXJTdWJNZW51QWN0aW9uID0gX3JlZiR0cmlnZ2VyU3ViTWVudUFjID09PSB2b2lkIDAgPyAnaG92ZXInIDogX3JlZiR0cmlnZ2VyU3ViTWVudUFjLFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzID0gX3JlZi5idWlsdGluUGxhY2VtZW50cyxcbiAgICBpdGVtSWNvbiA9IF9yZWYuaXRlbUljb24sXG4gICAgZXhwYW5kSWNvbiA9IF9yZWYuZXhwYW5kSWNvbixcbiAgICBfcmVmJG92ZXJmbG93ZWRJbmRpY2EgPSBfcmVmLm92ZXJmbG93ZWRJbmRpY2F0b3IsXG4gICAgb3ZlcmZsb3dlZEluZGljYXRvciA9IF9yZWYkb3ZlcmZsb3dlZEluZGljYSA9PT0gdm9pZCAwID8gJy4uLicgOiBfcmVmJG92ZXJmbG93ZWRJbmRpY2EsXG4gICAgb3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lID0gX3JlZi5vdmVyZmxvd2VkSW5kaWNhdG9yUG9wdXBDbGFzc05hbWUsXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBfcmVmLmdldFBvcHVwQ29udGFpbmVyLFxuICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgb25PcGVuQ2hhbmdlID0gX3JlZi5vbk9wZW5DaGFuZ2UsXG4gICAgb25LZXlEb3duID0gX3JlZi5vbktleURvd24sXG4gICAgb3BlbkFuaW1hdGlvbiA9IF9yZWYub3BlbkFuaW1hdGlvbixcbiAgICBvcGVuVHJhbnNpdGlvbk5hbWUgPSBfcmVmLm9wZW5UcmFuc2l0aW9uTmFtZSxcbiAgICBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSA9IF9yZWYuX2ludGVybmFsUmVuZGVyTWVudUl0ZW0sXG4gICAgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW0gPSBfcmVmLl9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtLFxuICAgIF9pbnRlcm5hbENvbXBvbmVudHMgPSBfcmVmLl9pbnRlcm5hbENvbXBvbmVudHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlTWVtbyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFtwYXJzZUl0ZW1zKGNoaWxkcmVuLCBpdGVtcywgRU1QVFlfTElTVCwgX2ludGVybmFsQ29tcG9uZW50cywgcHJlZml4Q2xzKSwgcGFyc2VJdGVtcyhjaGlsZHJlbiwgaXRlbXMsIEVNUFRZX0xJU1QsIHt9LCBwcmVmaXhDbHMpXTtcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1zLCBfaW50ZXJuYWxDb21wb25lbnRzXSksXG4gICAgX1JlYWN0JHVzZU1lbW8yID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8sIDIpLFxuICAgIGNoaWxkTGlzdCA9IF9SZWFjdCR1c2VNZW1vMlswXSxcbiAgICBtZWFzdXJlQ2hpbGRMaXN0ID0gX1JlYWN0JHVzZU1lbW8yWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIG1vdW50ZWQgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldE1vdW50ZWQgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgY29udGFpbmVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciB1dWlkID0gdXNlVVVJRChpZCk7XG4gIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBXYXJuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuaW5nKCFvcGVuQW5pbWF0aW9uICYmICFvcGVuVHJhbnNpdGlvbk5hbWUsICdgb3BlbkFuaW1hdGlvbmAgYW5kIGBvcGVuVHJhbnNpdGlvbk5hbWVgIGlzIHJlbW92ZWQuIFBsZWFzZSB1c2UgYG1vdGlvbmAgb3IgYGRlZmF1bHRNb3Rpb25gIGluc3RlYWQuJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUoZGVmYXVsdE9wZW5LZXlzLCB7XG4gICAgICB2YWx1ZTogb3BlbktleXMsXG4gICAgICBwb3N0U3RhdGU6IGZ1bmN0aW9uIHBvc3RTdGF0ZShrZXlzKSB7XG4gICAgICAgIHJldHVybiBrZXlzIHx8IEVNUFRZX0xJU1Q7XG4gICAgICB9XG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgbWVyZ2VkT3BlbktleXMgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldE1lcmdlZE9wZW5LZXlzID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcblxuICAvLyBSZWFjdCAxOCB3aWxsIG1lcmdlIG1vdXNlIGV2ZW50IHdoaWNoIG1lYW5zIHdlIG9wZW4ga2V5IHdpbGwgbm90IHN5bmNcbiAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy8zODgxOFxuICB2YXIgdHJpZ2dlck9wZW5LZXlzID0gZnVuY3Rpb24gdHJpZ2dlck9wZW5LZXlzKGtleXMpIHtcbiAgICB2YXIgZm9yY2VGbHVzaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9VcGRhdGUoKSB7XG4gICAgICBzZXRNZXJnZWRPcGVuS2V5cyhrZXlzKTtcbiAgICAgIG9uT3BlbkNoYW5nZSA9PT0gbnVsbCB8fCBvbk9wZW5DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbk9wZW5DaGFuZ2Uoa2V5cyk7XG4gICAgfVxuICAgIGlmIChmb3JjZUZsdXNoKSB7XG4gICAgICBmbHVzaFN5bmMoZG9VcGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb1VwZGF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyA+Pj4+PiBDYWNoZSAmIFJlc2V0IG9wZW4ga2V5cyB3aGVuIGlubGluZUNvbGxhcHNlZCBjaGFuZ2VkXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUobWVyZ2VkT3BlbktleXMpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBpbmxpbmVDYWNoZU9wZW5LZXlzID0gX1JlYWN0JHVzZVN0YXRlNFswXSxcbiAgICBzZXRJbmxpbmVDYWNoZU9wZW5LZXlzID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIG1vdW50UmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IE1vZGUgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZU1lbW8zID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoKG1vZGUgPT09ICdpbmxpbmUnIHx8IG1vZGUgPT09ICd2ZXJ0aWNhbCcpICYmIGlubGluZUNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gWyd2ZXJ0aWNhbCcsIGlubGluZUNvbGxhcHNlZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gW21vZGUsIGZhbHNlXTtcbiAgICB9LCBbbW9kZSwgaW5saW5lQ29sbGFwc2VkXSksXG4gICAgX1JlYWN0JHVzZU1lbW80ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8zLCAyKSxcbiAgICBtZXJnZWRNb2RlID0gX1JlYWN0JHVzZU1lbW80WzBdLFxuICAgIG1lcmdlZElubGluZUNvbGxhcHNlZCA9IF9SZWFjdCR1c2VNZW1vNFsxXTtcbiAgdmFyIGlzSW5saW5lTW9kZSA9IG1lcmdlZE1vZGUgPT09ICdpbmxpbmUnO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlNSA9IFJlYWN0LnVzZVN0YXRlKG1lcmdlZE1vZGUpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGU1LCAyKSxcbiAgICBpbnRlcm5hbE1vZGUgPSBfUmVhY3QkdXNlU3RhdGU2WzBdLFxuICAgIHNldEludGVybmFsTW9kZSA9IF9SZWFjdCR1c2VTdGF0ZTZbMV07XG4gIHZhciBfUmVhY3QkdXNlU3RhdGU3ID0gUmVhY3QudXNlU3RhdGUobWVyZ2VkSW5saW5lQ29sbGFwc2VkKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlNywgMiksXG4gICAgaW50ZXJuYWxJbmxpbmVDb2xsYXBzZWQgPSBfUmVhY3QkdXNlU3RhdGU4WzBdLFxuICAgIHNldEludGVybmFsSW5saW5lQ29sbGFwc2VkID0gX1JlYWN0JHVzZVN0YXRlOFsxXTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbnRlcm5hbE1vZGUobWVyZ2VkTW9kZSk7XG4gICAgc2V0SW50ZXJuYWxJbmxpbmVDb2xsYXBzZWQobWVyZ2VkSW5saW5lQ29sbGFwc2VkKTtcbiAgICBpZiAoIW1vdW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU3luY2hyb25vdXNseSB1cGRhdGUgTWVyZ2VkT3BlbktleXNcbiAgICBpZiAoaXNJbmxpbmVNb2RlKSB7XG4gICAgICBzZXRNZXJnZWRPcGVuS2V5cyhpbmxpbmVDYWNoZU9wZW5LZXlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJpZ2dlciBvcGVuIGV2ZW50IGluIGNhc2UgaXRzIGluIGNvbnRyb2xcbiAgICAgIHRyaWdnZXJPcGVuS2V5cyhFTVBUWV9MSVNUKTtcbiAgICB9XG4gIH0sIFttZXJnZWRNb2RlLCBtZXJnZWRJbmxpbmVDb2xsYXBzZWRdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFJlc3BvbnNpdmUgPT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZVN0YXRlOSA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlOSwgMiksXG4gICAgbGFzdFZpc2libGVJbmRleCA9IF9SZWFjdCR1c2VTdGF0ZTEwWzBdLFxuICAgIHNldExhc3RWaXNpYmxlSW5kZXggPSBfUmVhY3QkdXNlU3RhdGUxMFsxXTtcbiAgdmFyIGFsbFZpc2libGUgPSBsYXN0VmlzaWJsZUluZGV4ID49IGNoaWxkTGlzdC5sZW5ndGggLSAxIHx8IGludGVybmFsTW9kZSAhPT0gJ2hvcml6b250YWwnIHx8IGRpc2FibGVkT3ZlcmZsb3c7XG5cbiAgLy8gQ2FjaGVcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNJbmxpbmVNb2RlKSB7XG4gICAgICBzZXRJbmxpbmVDYWNoZU9wZW5LZXlzKG1lcmdlZE9wZW5LZXlzKTtcbiAgICB9XG4gIH0sIFttZXJnZWRPcGVuS2V5c10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG1vdW50UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBtb3VudFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUGF0aCA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlS2V5UmVjb3JkcyA9IHVzZUtleVJlY29yZHMoKSxcbiAgICByZWdpc3RlclBhdGggPSBfdXNlS2V5UmVjb3Jkcy5yZWdpc3RlclBhdGgsXG4gICAgdW5yZWdpc3RlclBhdGggPSBfdXNlS2V5UmVjb3Jkcy51bnJlZ2lzdGVyUGF0aCxcbiAgICByZWZyZXNoT3ZlcmZsb3dLZXlzID0gX3VzZUtleVJlY29yZHMucmVmcmVzaE92ZXJmbG93S2V5cyxcbiAgICBpc1N1YlBhdGhLZXkgPSBfdXNlS2V5UmVjb3Jkcy5pc1N1YlBhdGhLZXksXG4gICAgZ2V0S2V5UGF0aCA9IF91c2VLZXlSZWNvcmRzLmdldEtleVBhdGgsXG4gICAgZ2V0S2V5cyA9IF91c2VLZXlSZWNvcmRzLmdldEtleXMsXG4gICAgZ2V0U3ViUGF0aEtleXMgPSBfdXNlS2V5UmVjb3Jkcy5nZXRTdWJQYXRoS2V5cztcbiAgdmFyIHJlZ2lzdGVyUGF0aENvbnRleHQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnaXN0ZXJQYXRoOiByZWdpc3RlclBhdGgsXG4gICAgICB1bnJlZ2lzdGVyUGF0aDogdW5yZWdpc3RlclBhdGhcbiAgICB9O1xuICB9LCBbcmVnaXN0ZXJQYXRoLCB1bnJlZ2lzdGVyUGF0aF0pO1xuICB2YXIgcGF0aFVzZXJDb250ZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzU3ViUGF0aEtleTogaXNTdWJQYXRoS2V5XG4gICAgfTtcbiAgfSwgW2lzU3ViUGF0aEtleV0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnJlc2hPdmVyZmxvd0tleXMoYWxsVmlzaWJsZSA/IEVNUFRZX0xJU1QgOiBjaGlsZExpc3Quc2xpY2UobGFzdFZpc2libGVJbmRleCArIDEpLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC5rZXk7XG4gICAgfSkpO1xuICB9LCBbbGFzdFZpc2libGVJbmRleCwgYWxsVmlzaWJsZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBBY3RpdmUgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUzID0gdXNlTWVyZ2VkU3RhdGUoYWN0aXZlS2V5IHx8IGRlZmF1bHRBY3RpdmVGaXJzdCAmJiAoKF9jaGlsZExpc3QkID0gY2hpbGRMaXN0WzBdKSA9PT0gbnVsbCB8fCBfY2hpbGRMaXN0JCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NoaWxkTGlzdCQua2V5KSwge1xuICAgICAgdmFsdWU6IGFjdGl2ZUtleVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUzLCAyKSxcbiAgICBtZXJnZWRBY3RpdmVLZXkgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldE1lcmdlZEFjdGl2ZUtleSA9IF91c2VNZXJnZWRTdGF0ZTRbMV07XG4gIHZhciBvbkFjdGl2ZSA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoa2V5KSB7XG4gICAgc2V0TWVyZ2VkQWN0aXZlS2V5KGtleSk7XG4gIH0pO1xuICB2YXIgb25JbmFjdGl2ZSA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0TWVyZ2VkQWN0aXZlS2V5KHVuZGVmaW5lZCk7XG4gIH0pO1xuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0OiBjb250YWluZXJSZWYuY3VycmVudCxcbiAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cyhvcHRpb25zKSB7XG4gICAgICAgIHZhciBfY2hpbGRMaXN0JGZpbmQ7XG4gICAgICAgIHZhciBrZXlzID0gZ2V0S2V5cygpO1xuICAgICAgICB2YXIgX3JlZnJlc2hFbGVtZW50cyA9IHJlZnJlc2hFbGVtZW50cyhrZXlzLCB1dWlkKSxcbiAgICAgICAgICBlbGVtZW50cyA9IF9yZWZyZXNoRWxlbWVudHMuZWxlbWVudHMsXG4gICAgICAgICAga2V5MmVsZW1lbnQgPSBfcmVmcmVzaEVsZW1lbnRzLmtleTJlbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnQya2V5ID0gX3JlZnJlc2hFbGVtZW50cy5lbGVtZW50MmtleTtcbiAgICAgICAgdmFyIGZvY3VzYWJsZUVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMoY29udGFpbmVyUmVmLmN1cnJlbnQsIGVsZW1lbnRzKTtcbiAgICAgICAgdmFyIHNob3VsZEZvY3VzS2V5ID0gbWVyZ2VkQWN0aXZlS2V5ICE9PSBudWxsICYmIG1lcmdlZEFjdGl2ZUtleSAhPT0gdm9pZCAwID8gbWVyZ2VkQWN0aXZlS2V5IDogZm9jdXNhYmxlRWxlbWVudHNbMF0gPyBlbGVtZW50MmtleS5nZXQoZm9jdXNhYmxlRWxlbWVudHNbMF0pIDogKF9jaGlsZExpc3QkZmluZCA9IGNoaWxkTGlzdC5maW5kKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuICFub2RlLnByb3BzLmRpc2FibGVkO1xuICAgICAgICB9KSkgPT09IG51bGwgfHwgX2NoaWxkTGlzdCRmaW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2hpbGRMaXN0JGZpbmQua2V5O1xuICAgICAgICB2YXIgZWxlbWVudFRvRm9jdXMgPSBrZXkyZWxlbWVudC5nZXQoc2hvdWxkRm9jdXNLZXkpO1xuICAgICAgICBpZiAoc2hvdWxkRm9jdXNLZXkgJiYgZWxlbWVudFRvRm9jdXMpIHtcbiAgICAgICAgICB2YXIgX2VsZW1lbnRUb0ZvY3VzJGZvY3VzO1xuICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID09PSBudWxsIHx8IGVsZW1lbnRUb0ZvY3VzID09PSB2b2lkIDAgfHwgKF9lbGVtZW50VG9Gb2N1cyRmb2N1cyA9IGVsZW1lbnRUb0ZvY3VzLmZvY3VzKSA9PT0gbnVsbCB8fCBfZWxlbWVudFRvRm9jdXMkZm9jdXMgPT09IHZvaWQgMCB8fCBfZWxlbWVudFRvRm9jdXMkZm9jdXMuY2FsbChlbGVtZW50VG9Gb2N1cywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gU2VsZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4+PiBTZWxlY3Qga2V5c1xuICB2YXIgX3VzZU1lcmdlZFN0YXRlNSA9IHVzZU1lcmdlZFN0YXRlKGRlZmF1bHRTZWxlY3RlZEtleXMgfHwgW10sIHtcbiAgICAgIHZhbHVlOiBzZWxlY3RlZEtleXMsXG4gICAgICAvLyBMZWdhY3kgY29udmVydCBrZXkgdG8gYXJyYXlcbiAgICAgIHBvc3RTdGF0ZTogZnVuY3Rpb24gcG9zdFN0YXRlKGtleXMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5cyA9PT0gbnVsbCB8fCBrZXlzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gRU1QVFlfTElTVDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2tleXNdO1xuICAgICAgfVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGU1LCAyKSxcbiAgICBtZXJnZWRTZWxlY3RLZXlzID0gX3VzZU1lcmdlZFN0YXRlNlswXSxcbiAgICBzZXRNZXJnZWRTZWxlY3RLZXlzID0gX3VzZU1lcmdlZFN0YXRlNlsxXTtcblxuICAvLyA+Pj4+PiBUcmlnZ2VyIHNlbGVjdFxuICB2YXIgdHJpZ2dlclNlbGVjdGlvbiA9IGZ1bmN0aW9uIHRyaWdnZXJTZWxlY3Rpb24oaW5mbykge1xuICAgIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgICAvLyBJbnNlcnQgb3IgUmVtb3ZlXG4gICAgICB2YXIgdGFyZ2V0S2V5ID0gaW5mby5rZXk7XG4gICAgICB2YXIgZXhpc3QgPSBtZXJnZWRTZWxlY3RLZXlzLmluY2x1ZGVzKHRhcmdldEtleSk7XG4gICAgICB2YXIgbmV3U2VsZWN0S2V5cztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBpZiAoZXhpc3QpIHtcbiAgICAgICAgICBuZXdTZWxlY3RLZXlzID0gbWVyZ2VkU2VsZWN0S2V5cy5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGtleSAhPT0gdGFyZ2V0S2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1NlbGVjdEtleXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KG1lcmdlZFNlbGVjdEtleXMpLCBbdGFyZ2V0S2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NlbGVjdEtleXMgPSBbdGFyZ2V0S2V5XTtcbiAgICAgIH1cbiAgICAgIHNldE1lcmdlZFNlbGVjdEtleXMobmV3U2VsZWN0S2V5cyk7XG5cbiAgICAgIC8vIFRyaWdnZXIgZXZlbnRcbiAgICAgIHZhciBzZWxlY3RJbmZvID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpbmZvKSwge30sIHtcbiAgICAgICAgc2VsZWN0ZWRLZXlzOiBuZXdTZWxlY3RLZXlzXG4gICAgICB9KTtcbiAgICAgIGlmIChleGlzdCkge1xuICAgICAgICBvbkRlc2VsZWN0ID09PSBudWxsIHx8IG9uRGVzZWxlY3QgPT09IHZvaWQgMCB8fCBvbkRlc2VsZWN0KHNlbGVjdEluZm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25TZWxlY3QgPT09IG51bGwgfHwgb25TZWxlY3QgPT09IHZvaWQgMCB8fCBvblNlbGVjdChzZWxlY3RJbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXaGF0ZXZlciBzZWxlY3RhYmxlLCBhbHdheXMgY2xvc2UgaXRcbiAgICBpZiAoIW11bHRpcGxlICYmIG1lcmdlZE9wZW5LZXlzLmxlbmd0aCAmJiBpbnRlcm5hbE1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgICB0cmlnZ2VyT3BlbktleXMoRU1QVFlfTElTVCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gT3BlbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBDbGljayBmb3IgaXRlbS4gU3ViTWVudSBkbyBub3QgaGF2ZSBzZWxlY3Rpb24gc3RhdHVzXG4gICAqL1xuICB2YXIgb25JbnRlcm5hbENsaWNrID0gdXNlTWVtb0NhbGxiYWNrKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayh3YXJuSXRlbVByb3AoaW5mbykpO1xuICAgIHRyaWdnZXJTZWxlY3Rpb24oaW5mbyk7XG4gIH0pO1xuICB2YXIgb25JbnRlcm5hbE9wZW5DaGFuZ2UgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKGtleSwgb3Blbikge1xuICAgIHZhciBuZXdPcGVuS2V5cyA9IG1lcmdlZE9wZW5LZXlzLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgcmV0dXJuIGsgIT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAob3Blbikge1xuICAgICAgbmV3T3BlbktleXMucHVzaChrZXkpO1xuICAgIH0gZWxzZSBpZiAoaW50ZXJuYWxNb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgLy8gV2UgbmVlZCBmaW5kIGFsbCByZWxhdGVkIHBvcHVwIHRvIGNsb3NlXG4gICAgICB2YXIgc3ViUGF0aEtleXMgPSBnZXRTdWJQYXRoS2V5cyhrZXkpO1xuICAgICAgbmV3T3BlbktleXMgPSBuZXdPcGVuS2V5cy5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuICFzdWJQYXRoS2V5cy5oYXMoayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFpc0VxdWFsKG1lcmdlZE9wZW5LZXlzLCBuZXdPcGVuS2V5cywgdHJ1ZSkpIHtcbiAgICAgIHRyaWdnZXJPcGVuS2V5cyhuZXdPcGVuS2V5cywgdHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBBY2Nlc3NpYmlsaXR5ID09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuID0gZnVuY3Rpb24gdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuKGtleSwgb3Blbikge1xuICAgIHZhciBuZXh0T3BlbiA9IG9wZW4gIT09IG51bGwgJiYgb3BlbiAhPT0gdm9pZCAwID8gb3BlbiA6ICFtZXJnZWRPcGVuS2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgIG9uSW50ZXJuYWxPcGVuQ2hhbmdlKGtleSwgbmV4dE9wZW4pO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbEtleURvd24gPSB1c2VBY2Nlc3NpYmlsaXR5KGludGVybmFsTW9kZSwgbWVyZ2VkQWN0aXZlS2V5LCBpc1J0bCwgdXVpZCwgY29udGFpbmVyUmVmLCBnZXRLZXlzLCBnZXRLZXlQYXRoLCBzZXRNZXJnZWRBY3RpdmVLZXksIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3Blbiwgb25LZXlEb3duKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldE1vdW50ZWQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBDb250ZXh0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcHJpdmF0ZUNvbnRleHQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX2ludGVybmFsUmVuZGVyTWVudUl0ZW06IF9pbnRlcm5hbFJlbmRlck1lbnVJdGVtLFxuICAgICAgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW06IF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtXG4gICAgfTtcbiAgfSwgW19pbnRlcm5hbFJlbmRlck1lbnVJdGVtLCBfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gPj4+Pj4gQ2hpbGRyZW5cbiAgdmFyIHdyYXBwZWRDaGlsZExpc3QgPSBpbnRlcm5hbE1vZGUgIT09ICdob3Jpem9udGFsJyB8fCBkaXNhYmxlZE92ZXJmbG93ID8gY2hpbGRMaXN0IDpcbiAgLy8gTmVlZCB3cmFwIGZvciBvdmVyZmxvdyBkcm9wZG93biB0aGF0IGRvIG5vdCByZXNwb25zZSBmb3Igb3BlblxuICBjaGlsZExpc3QubWFwKGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gQWx3YXlzIHdyYXAgcHJvdmlkZXIgdG8gYXZvaWQgc3ViIG5vZGUgcmUtbW91bnRcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHRQcm92aWRlciwge1xuICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgb3ZlcmZsb3dEaXNhYmxlZDogaW5kZXggPiBsYXN0VmlzaWJsZUluZGV4XG4gICAgICB9LCBjaGlsZClcbiAgICApO1xuICB9KTtcblxuICAvLyA+Pj4+PiBDb250YWluZXJcbiAgdmFyIGNvbnRhaW5lciA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE92ZXJmbG93LCBfZXh0ZW5kcyh7XG4gICAgaWQ6IGlkLFxuICAgIHJlZjogY29udGFpbmVyUmVmLFxuICAgIHByZWZpeENsczogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1vdmVyZmxvd1wiKSxcbiAgICBjb21wb25lbnQ6IFwidWxcIixcbiAgICBpdGVtQ29tcG9uZW50OiBNZW51SXRlbSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocHJlZml4Q2xzLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJvb3RcIiksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItXCIpLmNvbmNhdChpbnRlcm5hbE1vZGUpLCBjbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaW5saW5lLWNvbGxhcHNlZFwiKSwgaW50ZXJuYWxJbmxpbmVDb2xsYXBzZWQpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJ0bFwiKSwgaXNSdGwpLCByb290Q2xhc3NOYW1lKSxcbiAgICBkaXI6IGRpcmVjdGlvbixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgcm9sZTogXCJtZW51XCIsXG4gICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgIGRhdGE6IHdyYXBwZWRDaGlsZExpc3QsXG4gICAgcmVuZGVyUmF3SXRlbTogZnVuY3Rpb24gcmVuZGVyUmF3SXRlbShub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuICAgIHJlbmRlclJhd1Jlc3Q6IGZ1bmN0aW9uIHJlbmRlclJhd1Jlc3Qob21pdEl0ZW1zKSB7XG4gICAgICAvLyBXZSB1c2Ugb3JpZ2luIGxpc3Qgc2luY2Ugd3JhcHBlZCBsaXN0IHVzZSBjb250ZXh0IHRvIHByZXZlbnQgb3BlblxuICAgICAgdmFyIGxlbiA9IG9taXRJdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgb3JpZ2luT21pdEl0ZW1zID0gbGVuID8gY2hpbGRMaXN0LnNsaWNlKC1sZW4pIDogbnVsbDtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJNZW51LCB7XG4gICAgICAgIGV2ZW50S2V5OiBPVkVSRkxPV19LRVksXG4gICAgICAgIHRpdGxlOiBvdmVyZmxvd2VkSW5kaWNhdG9yLFxuICAgICAgICBkaXNhYmxlZDogYWxsVmlzaWJsZSxcbiAgICAgICAgaW50ZXJuYWxQb3B1cENsb3NlOiBsZW4gPT09IDAsXG4gICAgICAgIHBvcHVwQ2xhc3NOYW1lOiBvdmVyZmxvd2VkSW5kaWNhdG9yUG9wdXBDbGFzc05hbWVcbiAgICAgIH0sIG9yaWdpbk9taXRJdGVtcyk7XG4gICAgfSxcbiAgICBtYXhDb3VudDogaW50ZXJuYWxNb2RlICE9PSAnaG9yaXpvbnRhbCcgfHwgZGlzYWJsZWRPdmVyZmxvdyA/IE92ZXJmbG93LklOVkFMSURBVEUgOiBPdmVyZmxvdy5SRVNQT05TSVZFLFxuICAgIHNzcjogXCJmdWxsXCIsXG4gICAgXCJkYXRhLW1lbnUtbGlzdFwiOiB0cnVlLFxuICAgIG9uVmlzaWJsZUNoYW5nZTogZnVuY3Rpb24gb25WaXNpYmxlQ2hhbmdlKG5ld0xhc3RJbmRleCkge1xuICAgICAgc2V0TGFzdFZpc2libGVJbmRleChuZXdMYXN0SW5kZXgpO1xuICAgIH0sXG4gICAgb25LZXlEb3duOiBvbkludGVybmFsS2V5RG93blxuICB9LCByZXN0UHJvcHMpKTtcblxuICAvLyA+Pj4+PiBSZW5kZXJcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByaXZhdGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHByaXZhdGVDb250ZXh0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElkQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB1dWlkXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICByb290Q2xhc3NOYW1lOiByb290Q2xhc3NOYW1lLFxuICAgIG1vZGU6IGludGVybmFsTW9kZSxcbiAgICBvcGVuS2V5czogbWVyZ2VkT3BlbktleXMsXG4gICAgcnRsOiBpc1J0bFxuICAgIC8vIERpc2FibGVkXG4gICAgLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIC8vIE1vdGlvblxuICAgICxcbiAgICBtb3Rpb246IG1vdW50ZWQgPyBtb3Rpb24gOiBudWxsLFxuICAgIGRlZmF1bHRNb3Rpb25zOiBtb3VudGVkID8gZGVmYXVsdE1vdGlvbnMgOiBudWxsXG4gICAgLy8gQWN0aXZlXG4gICAgLFxuICAgIGFjdGl2ZUtleTogbWVyZ2VkQWN0aXZlS2V5LFxuICAgIG9uQWN0aXZlOiBvbkFjdGl2ZSxcbiAgICBvbkluYWN0aXZlOiBvbkluYWN0aXZlXG4gICAgLy8gU2VsZWN0aW9uXG4gICAgLFxuICAgIHNlbGVjdGVkS2V5czogbWVyZ2VkU2VsZWN0S2V5c1xuICAgIC8vIExldmVsXG4gICAgLFxuICAgIGlubGluZUluZGVudDogaW5saW5lSW5kZW50XG4gICAgLy8gUG9wdXBcbiAgICAsXG4gICAgc3ViTWVudU9wZW5EZWxheTogc3ViTWVudU9wZW5EZWxheSxcbiAgICBzdWJNZW51Q2xvc2VEZWxheTogc3ViTWVudUNsb3NlRGVsYXksXG4gICAgZm9yY2VTdWJNZW51UmVuZGVyOiBmb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgYnVpbHRpblBsYWNlbWVudHM6IGJ1aWx0aW5QbGFjZW1lbnRzLFxuICAgIHRyaWdnZXJTdWJNZW51QWN0aW9uOiB0cmlnZ2VyU3ViTWVudUFjdGlvbixcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogZ2V0UG9wdXBDb250YWluZXJcbiAgICAvLyBJY29uXG4gICAgLFxuICAgIGl0ZW1JY29uOiBpdGVtSWNvbixcbiAgICBleHBhbmRJY29uOiBleHBhbmRJY29uXG4gICAgLy8gRXZlbnRzXG4gICAgLFxuICAgIG9uSXRlbUNsaWNrOiBvbkludGVybmFsQ2xpY2ssXG4gICAgb25PcGVuQ2hhbmdlOiBvbkludGVybmFsT3BlbkNoYW5nZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYXRoVXNlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGF0aFVzZXJDb250ZXh0XG4gIH0sIGNvbnRhaW5lciksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBzdHlsZToge1xuICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgfSxcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWVcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGF0aFJlZ2lzdGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiByZWdpc3RlclBhdGhDb250ZXh0XG4gIH0sIG1lYXN1cmVDaGlsZExpc3QpKSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzXCI7XG5pbXBvcnQgX2NyZWF0ZVN1cGVyIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVTdXBlclwiO1xudmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwiYXR0cmlidXRlXCIsIFwiZWxlbWVudFJlZlwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwiZXZlbnRLZXlcIiwgXCJ3YXJuS2V5XCIsIFwiZGlzYWJsZWRcIiwgXCJpdGVtSWNvblwiLCBcImNoaWxkcmVuXCIsIFwicm9sZVwiLCBcIm9uTW91c2VFbnRlclwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uQ2xpY2tcIiwgXCJvbktleURvd25cIiwgXCJvbkZvY3VzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wiYWN0aXZlXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgT3ZlcmZsb3cgZnJvbSAncmMtb3ZlcmZsb3cnO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0IG9taXQgZnJvbSBcInJjLXV0aWwvZXMvb21pdFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZVJlZiB9IGZyb20gXCJyYy11dGlsL2VzL3JlZlwiO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSBcInJjLXV0aWwvZXMvd2FybmluZ1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTWVudUlkIH0gZnJvbSBcIi4vY29udGV4dC9JZENvbnRleHRcIjtcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHsgdXNlRnVsbFBhdGgsIHVzZU1lYXN1cmUgfSBmcm9tIFwiLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5pbXBvcnQgUHJpdmF0ZUNvbnRleHQgZnJvbSBcIi4vY29udGV4dC9Qcml2YXRlQ29udGV4dFwiO1xuaW1wb3J0IHVzZUFjdGl2ZSBmcm9tIFwiLi9ob29rcy91c2VBY3RpdmVcIjtcbmltcG9ydCB1c2VEaXJlY3Rpb25TdHlsZSBmcm9tIFwiLi9ob29rcy91c2VEaXJlY3Rpb25TdHlsZVwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4vSWNvblwiO1xuaW1wb3J0IHsgd2Fybkl0ZW1Qcm9wIH0gZnJvbSBcIi4vdXRpbHMvd2FyblV0aWxcIjtcbi8vIFNpbmNlIE1lbnUgZXZlbnQgcHJvdmlkZSB0aGUgYGluZm8uaXRlbWAgd2hpY2ggcG9pbnQgdG8gdGhlIE1lbnVJdGVtIG5vZGUgaW5zdGFuY2UuXG4vLyBXZSBoYXZlIHRvIHVzZSBjbGFzcyBjb21wb25lbnQgaGVyZS5cbi8vIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBkb2MgJiBhcGkgaW4gZnV0dXJlLlxudmFyIExlZ2FjeU1lbnVJdGVtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhMZWdhY3lNZW51SXRlbSwgX1JlYWN0JENvbXBvbmVudCk7XG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoTGVnYWN5TWVudUl0ZW0pO1xuICBmdW5jdGlvbiBMZWdhY3lNZW51SXRlbSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGVnYWN5TWVudUl0ZW0pO1xuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICBfY3JlYXRlQ2xhc3MoTGVnYWN5TWVudUl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICBhdHRyaWJ1dGUgPSBfdGhpcyRwcm9wcy5hdHRyaWJ1dGUsXG4gICAgICAgIGVsZW1lbnRSZWYgPSBfdGhpcyRwcm9wcy5lbGVtZW50UmVmLFxuICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIC8vIEhlcmUgdGhlIHByb3BzIGFyZSBldmVudHVhbGx5IHBhc3NlZCB0byB0aGUgRE9NIGVsZW1lbnQuXG4gICAgICAvLyBSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZXMuXG4gICAgICAvLyBUaGVyZWZvcmUsIHJlbW92ZSB0aGUgcHJvcHMgdGhhdCBpcyBub3QgdXNlZCBoZXJlLlxuICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80MTM5NVxuICAgICAgdmFyIHBhc3NlZFByb3BzID0gb21pdChyZXN0UHJvcHMsIFsnZXZlbnRLZXknLCAncG9wdXBDbGFzc05hbWUnLCAncG9wdXBPZmZzZXQnLCAnb25UaXRsZUNsaWNrJ10pO1xuICAgICAgd2FybmluZyghYXR0cmlidXRlLCAnYGF0dHJpYnV0ZWAgb2YgTWVudS5JdGVtIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSBwYXNzIGF0dHJpYnV0ZSBkaXJlY3RseS4nKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdmVyZmxvdy5JdGVtLCBfZXh0ZW5kcyh7fSwgYXR0cmlidXRlLCB7XG4gICAgICAgIHRpdGxlOiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gdGl0bGUgOiB1bmRlZmluZWRcbiAgICAgIH0sIHBhc3NlZFByb3BzLCB7XG4gICAgICAgIHJlZjogZWxlbWVudFJlZlxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gTGVnYWN5TWVudUl0ZW07XG59KFJlYWN0LkNvbXBvbmVudCk7XG4vKipcbiAqIFJlYWwgTWVudSBJdGVtIGNvbXBvbmVudFxuICovXG52YXIgSW50ZXJuYWxNZW51SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5LFxuICAgIHdhcm5LZXkgPSBwcm9wcy53YXJuS2V5LFxuICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgaXRlbUljb24gPSBwcm9wcy5pdGVtSWNvbixcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHJvbGUgPSBwcm9wcy5yb2xlLFxuICAgIG9uTW91c2VFbnRlciA9IHByb3BzLm9uTW91c2VFbnRlcixcbiAgICBvbk1vdXNlTGVhdmUgPSBwcm9wcy5vbk1vdXNlTGVhdmUsXG4gICAgb25DbGljayA9IHByb3BzLm9uQ2xpY2ssXG4gICAgb25LZXlEb3duID0gcHJvcHMub25LZXlEb3duLFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIHZhciBkb21EYXRhSWQgPSB1c2VNZW51SWQoZXZlbnRLZXkpO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHMsXG4gICAgb25JdGVtQ2xpY2sgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkl0ZW1DbGljayxcbiAgICBjb250ZXh0RGlzYWJsZWQgPSBfUmVhY3QkdXNlQ29udGV4dC5kaXNhYmxlZCxcbiAgICBvdmVyZmxvd0Rpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQub3ZlcmZsb3dEaXNhYmxlZCxcbiAgICBjb250ZXh0SXRlbUljb24gPSBfUmVhY3QkdXNlQ29udGV4dC5pdGVtSWNvbixcbiAgICBzZWxlY3RlZEtleXMgPSBfUmVhY3QkdXNlQ29udGV4dC5zZWxlY3RlZEtleXMsXG4gICAgb25BY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkFjdGl2ZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0MiA9IFJlYWN0LnVzZUNvbnRleHQoUHJpdmF0ZUNvbnRleHQpLFxuICAgIF9pbnRlcm5hbFJlbmRlck1lbnVJdGVtID0gX1JlYWN0JHVzZUNvbnRleHQyLl9pbnRlcm5hbFJlbmRlck1lbnVJdGVtO1xuICB2YXIgaXRlbUNscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaXRlbVwiKTtcbiAgdmFyIGxlZ2FjeU1lbnVJdGVtUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBlbGVtZW50UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBtZXJnZWREaXNhYmxlZCA9IGNvbnRleHREaXNhYmxlZCB8fCBkaXNhYmxlZDtcbiAgdmFyIG1lcmdlZEVsZVJlZiA9IHVzZUNvbXBvc2VSZWYocmVmLCBlbGVtZW50UmVmKTtcbiAgdmFyIGNvbm5lY3RlZEtleXMgPSB1c2VGdWxsUGF0aChldmVudEtleSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gV2FybiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuS2V5KSB7XG4gICAgd2FybmluZyhmYWxzZSwgJ01lbnVJdGVtIHNob3VsZCBub3QgbGVhdmUgdW5kZWZpbmVkIGBrZXlgLicpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSW5mbyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0RXZlbnRJbmZvID0gZnVuY3Rpb24gZ2V0RXZlbnRJbmZvKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBldmVudEtleSxcbiAgICAgIC8vIE5vdGU6IEZvciBsZWdhY3kgY29kZSBpcyByZXZlcnNlZCB3aGljaCBub3QgbGlrZSBvdGhlciBhbnRkIGNvbXBvbmVudFxuICAgICAga2V5UGF0aDogX3RvQ29uc3VtYWJsZUFycmF5KGNvbm5lY3RlZEtleXMpLnJldmVyc2UoKSxcbiAgICAgIGl0ZW06IGxlZ2FjeU1lbnVJdGVtUmVmLmN1cnJlbnQsXG4gICAgICBkb21FdmVudDogZVxuICAgIH07XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSWNvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkSXRlbUljb24gPSBpdGVtSWNvbiB8fCBjb250ZXh0SXRlbUljb247XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBY3RpdmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUFjdGl2ZSA9IHVzZUFjdGl2ZShldmVudEtleSwgbWVyZ2VkRGlzYWJsZWQsIG9uTW91c2VFbnRlciwgb25Nb3VzZUxlYXZlKSxcbiAgICBhY3RpdmUgPSBfdXNlQWN0aXZlLmFjdGl2ZSxcbiAgICBhY3RpdmVQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdXNlQWN0aXZlLCBfZXhjbHVkZWQzKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNlbGVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkS2V5cy5pbmNsdWRlcyhldmVudEtleSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IERpcmVjdGlvblN0eWxlID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZGlyZWN0aW9uU3R5bGUgPSB1c2VEaXJlY3Rpb25TdHlsZShjb25uZWN0ZWRLZXlzLmxlbmd0aCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFdmVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25JbnRlcm5hbENsaWNrID0gZnVuY3Rpb24gb25JbnRlcm5hbENsaWNrKGUpIHtcbiAgICBpZiAobWVyZ2VkRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGluZm8gPSBnZXRFdmVudEluZm8oZSk7XG4gICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayh3YXJuSXRlbVByb3AoaW5mbykpO1xuICAgIG9uSXRlbUNsaWNrKGluZm8pO1xuICB9O1xuICB2YXIgb25JbnRlcm5hbEtleURvd24gPSBmdW5jdGlvbiBvbkludGVybmFsS2V5RG93bihlKSB7XG4gICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwIHx8IG9uS2V5RG93bihlKTtcbiAgICBpZiAoZS53aGljaCA9PT0gS2V5Q29kZS5FTlRFUikge1xuICAgICAgdmFyIGluZm8gPSBnZXRFdmVudEluZm8oZSk7XG5cbiAgICAgIC8vIExlZ2FjeS4gS2V5IHdpbGwgYWxzbyB0cmlnZ2VyIGNsaWNrIGV2ZW50XG4gICAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCB8fCBvbkNsaWNrKHdhcm5JdGVtUHJvcChpbmZvKSk7XG4gICAgICBvbkl0ZW1DbGljayhpbmZvKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGFjY2Vzc2liaWxpdHkuIEhlbHBlciB3aWxsIGZvY3VzIGVsZW1lbnQgd2l0aG91dCBrZXkgYm9hcmQuXG4gICAqIFdlIHNob3VsZCBtYW51YWxseSB0cmlnZ2VyIGFuIGFjdGl2ZVxuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxGb2N1cyA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxGb2N1cyhlKSB7XG4gICAgb25BY3RpdmUoZXZlbnRLZXkpO1xuICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwIHx8IG9uRm9jdXMoZSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb3B0aW9uUm9sZVByb3BzID0ge307XG4gIGlmIChwcm9wcy5yb2xlID09PSAnb3B0aW9uJykge1xuICAgIG9wdGlvblJvbGVQcm9wc1snYXJpYS1zZWxlY3RlZCddID0gc2VsZWN0ZWQ7XG4gIH1cbiAgdmFyIHJlbmRlck5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMZWdhY3lNZW51SXRlbSwgX2V4dGVuZHMoe1xuICAgIHJlZjogbGVnYWN5TWVudUl0ZW1SZWYsXG4gICAgZWxlbWVudFJlZjogbWVyZ2VkRWxlUmVmLFxuICAgIHJvbGU6IHJvbGUgPT09IG51bGwgPyAnbm9uZScgOiByb2xlIHx8ICdtZW51aXRlbScsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gbnVsbCA6IC0xLFxuICAgIFwiZGF0YS1tZW51LWlkXCI6IG92ZXJmbG93RGlzYWJsZWQgJiYgZG9tRGF0YUlkID8gbnVsbCA6IGRvbURhdGFJZFxuICB9LCBvbWl0KHJlc3RQcm9wcywgWydleHRyYSddKSwgYWN0aXZlUHJvcHMsIG9wdGlvblJvbGVQcm9wcywge1xuICAgIGNvbXBvbmVudDogXCJsaVwiLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCxcbiAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkaXJlY3Rpb25TdHlsZSksIHN0eWxlKSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoaXRlbUNscywgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGl0ZW1DbHMsIFwiLWFjdGl2ZVwiKSwgYWN0aXZlKSwgXCJcIi5jb25jYXQoaXRlbUNscywgXCItc2VsZWN0ZWRcIiksIHNlbGVjdGVkKSwgXCJcIi5jb25jYXQoaXRlbUNscywgXCItZGlzYWJsZWRcIiksIG1lcmdlZERpc2FibGVkKSwgY2xhc3NOYW1lKSxcbiAgICBvbkNsaWNrOiBvbkludGVybmFsQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbkludGVybmFsS2V5RG93bixcbiAgICBvbkZvY3VzOiBvbkludGVybmFsRm9jdXNcbiAgfSksIGNoaWxkcmVuLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgcHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgaXNTZWxlY3RlZDogc2VsZWN0ZWRcbiAgICB9KSxcbiAgICBpY29uOiBtZXJnZWRJdGVtSWNvblxuICB9KSk7XG4gIGlmIChfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSkge1xuICAgIHJlbmRlck5vZGUgPSBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbShyZW5kZXJOb2RlLCBwcm9wcywge1xuICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlbmRlck5vZGU7XG59KTtcbmZ1bmN0aW9uIE1lbnVJdGVtKHByb3BzLCByZWYpIHtcbiAgdmFyIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gUmVjb3JkIEtleVBhdGggPT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lYXN1cmUgPSB1c2VNZWFzdXJlKCk7XG4gIHZhciBjb25uZWN0ZWRLZXlQYXRoID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChtZWFzdXJlKSB7XG4gICAgICBtZWFzdXJlLnJlZ2lzdGVyUGF0aChldmVudEtleSwgY29ubmVjdGVkS2V5UGF0aCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBtZWFzdXJlLnVucmVnaXN0ZXJQYXRoKGV2ZW50S2V5LCBjb25uZWN0ZWRLZXlQYXRoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbY29ubmVjdGVkS2V5UGF0aF0pO1xuICBpZiAobWVhc3VyZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEludGVybmFsTWVudUl0ZW0sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHJlZjogcmVmXG4gIH0pKTtcbn1cbmV4cG9ydCBkZWZhdWx0IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKE1lbnVJdGVtKTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwidGl0bGVcIiwgXCJldmVudEtleVwiLCBcImNoaWxkcmVuXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgb21pdCBmcm9tIFwicmMtdXRpbC9lcy9vbWl0XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUZ1bGxQYXRoLCB1c2VNZWFzdXJlIH0gZnJvbSBcIi4vY29udGV4dC9QYXRoQ29udGV4dFwiO1xuaW1wb3J0IHsgcGFyc2VDaGlsZHJlbiB9IGZyb20gXCIuL3V0aWxzL2NvbW1vblV0aWxcIjtcbnZhciBJbnRlcm5hbE1lbnVJdGVtR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHRpdGxlID0gcHJvcHMudGl0bGUsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzO1xuICB2YXIgZ3JvdXBQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWl0ZW0tZ3JvdXBcIik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInByZXNlbnRhdGlvblwiXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoZ3JvdXBQcmVmaXhDbHMsIGNsYXNzTmFtZSlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByb2xlOiBcInByZXNlbnRhdGlvblwiLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoZ3JvdXBQcmVmaXhDbHMsIFwiLXRpdGxlXCIpLFxuICAgIHRpdGxlOiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gdGl0bGUgOiB1bmRlZmluZWRcbiAgfSwgdGl0bGUpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHtcbiAgICByb2xlOiBcImdyb3VwXCIsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChncm91cFByZWZpeENscywgXCItbGlzdFwiKVxuICB9LCBjaGlsZHJlbikpO1xufSk7XG52YXIgTWVudUl0ZW1Hcm91cCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5LFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gIHZhciBjb25uZWN0ZWRLZXlQYXRoID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuICB2YXIgY2hpbGRMaXN0ID0gcGFyc2VDaGlsZHJlbihjaGlsZHJlbiwgY29ubmVjdGVkS2V5UGF0aCk7XG4gIHZhciBtZWFzdXJlID0gdXNlTWVhc3VyZSgpO1xuICBpZiAobWVhc3VyZSkge1xuICAgIHJldHVybiBjaGlsZExpc3Q7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEludGVybmFsTWVudUl0ZW1Hcm91cCwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIG9taXQocHJvcHMsIFsnd2FybktleSddKSksIGNoaWxkTGlzdCk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIE1lbnVJdGVtR3JvdXAuZGlzcGxheU5hbWUgPSAnTWVudUl0ZW1Hcm91cCc7XG59XG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbUdyb3VwOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENTU01vdGlvbiBmcm9tICdyYy1tb3Rpb24nO1xuaW1wb3J0IHsgZ2V0TW90aW9uIH0gZnJvbSBcIi4uL3V0aWxzL21vdGlvblV0aWxcIjtcbmltcG9ydCBNZW51Q29udGV4dFByb3ZpZGVyLCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCBTdWJNZW51TGlzdCBmcm9tIFwiLi9TdWJNZW51TGlzdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSW5saW5lU3ViTWVudUxpc3QoX3JlZikge1xuICB2YXIgaWQgPSBfcmVmLmlkLFxuICAgIG9wZW4gPSBfcmVmLm9wZW4sXG4gICAga2V5UGF0aCA9IF9yZWYua2V5UGF0aCxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBmaXhlZE1vZGUgPSAnaW5saW5lJztcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIGZvcmNlU3ViTWVudVJlbmRlciA9IF9SZWFjdCR1c2VDb250ZXh0LmZvcmNlU3ViTWVudVJlbmRlcixcbiAgICBtb3Rpb24gPSBfUmVhY3QkdXNlQ29udGV4dC5tb3Rpb24sXG4gICAgZGVmYXVsdE1vdGlvbnMgPSBfUmVhY3QkdXNlQ29udGV4dC5kZWZhdWx0TW90aW9ucyxcbiAgICBtb2RlID0gX1JlYWN0JHVzZUNvbnRleHQubW9kZTtcblxuICAvLyBBbHdheXMgdXNlIGxhdGVzdCBtb2RlIGNoZWNrXG4gIHZhciBzYW1lTW9kZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIHNhbWVNb2RlUmVmLmN1cnJlbnQgPSBtb2RlID09PSBmaXhlZE1vZGU7XG5cbiAgLy8gV2UgcmVjb3JkIGBkZXN0cm95YCBtYXJrIGhlcmUgc2luY2Ugd2hlbiBtb2RlIGNoYW5nZSBmcm9tIGBpbmxpbmVgIHRvIG90aGVycy5cbiAgLy8gVGhlIGlubGluZSBsaXN0IHNob3VsZCByZW1vdmUgd2hlbiBtb3Rpb24gZW5kLlxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoIXNhbWVNb2RlUmVmLmN1cnJlbnQpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGRlc3Ryb3kgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldERlc3Ryb3kgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgbWVyZ2VkT3BlbiA9IHNhbWVNb2RlUmVmLmN1cnJlbnQgPyBvcGVuIDogZmFsc2U7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVzZXQgZGVzdHJveSBzdGF0ZSB3aGVuIG1vZGUgY2hhbmdlIGJhY2tcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2FtZU1vZGVSZWYuY3VycmVudCkge1xuICAgICAgc2V0RGVzdHJveShmYWxzZSk7XG4gICAgfVxuICB9LCBbbW9kZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRNb3Rpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBnZXRNb3Rpb24oZml4ZWRNb2RlLCBtb3Rpb24sIGRlZmF1bHRNb3Rpb25zKSk7XG5cbiAgLy8gTm8gbmVlZCBhcHBlYXIgc2luY2UgbmVzdCBpbmxpbmVDb2xsYXBzZSBjaGFuZ2VkXG4gIGlmIChrZXlQYXRoLmxlbmd0aCA+IDEpIHtcbiAgICBtZXJnZWRNb3Rpb24ubW90aW9uQXBwZWFyID0gZmFsc2U7XG4gIH1cblxuICAvLyBIaWRlIGlubGluZSBsaXN0IHdoZW4gbW9kZSBjaGFuZ2VkIGFuZCBtb3Rpb24gZW5kXG4gIHZhciBvcmlnaW5PblZpc2libGVDaGFuZ2VkID0gbWVyZ2VkTW90aW9uLm9uVmlzaWJsZUNoYW5nZWQ7XG4gIG1lcmdlZE1vdGlvbi5vblZpc2libGVDaGFuZ2VkID0gZnVuY3Rpb24gKG5ld1Zpc2libGUpIHtcbiAgICBpZiAoIXNhbWVNb2RlUmVmLmN1cnJlbnQgJiYgIW5ld1Zpc2libGUpIHtcbiAgICAgIHNldERlc3Ryb3kodHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnaW5PblZpc2libGVDaGFuZ2VkID09PSBudWxsIHx8IG9yaWdpbk9uVmlzaWJsZUNoYW5nZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbk9uVmlzaWJsZUNoYW5nZWQobmV3VmlzaWJsZSk7XG4gIH07XG4gIGlmIChkZXN0cm95KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICBtb2RlOiBmaXhlZE1vZGUsXG4gICAgbG9ja2VkOiAhc2FtZU1vZGVSZWYuY3VycmVudFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDU1NNb3Rpb24sIF9leHRlbmRzKHtcbiAgICB2aXNpYmxlOiBtZXJnZWRPcGVuXG4gIH0sIG1lcmdlZE1vdGlvbiwge1xuICAgIGZvcmNlUmVuZGVyOiBmb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgcmVtb3ZlT25MZWF2ZTogZmFsc2UsXG4gICAgbGVhdmVkQ2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWhpZGRlblwiKVxuICB9KSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIG1vdGlvbkNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICAgIG1vdGlvblN0eWxlID0gX3JlZjIuc3R5bGU7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN1Yk1lbnVMaXN0LCB7XG4gICAgICBpZDogaWQsXG4gICAgICBjbGFzc05hbWU6IG1vdGlvbkNsYXNzTmFtZSxcbiAgICAgIHN0eWxlOiBtb3Rpb25TdHlsZVxuICAgIH0sIGNoaWxkcmVuKTtcbiAgfSkpO1xufSIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJpZ2dlciBmcm9tICdAcmMtY29tcG9uZW50L3RyaWdnZXInO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuaW1wb3J0IHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHsgcGxhY2VtZW50cywgcGxhY2VtZW50c1J0bCB9IGZyb20gXCIuLi9wbGFjZW1lbnRzXCI7XG5pbXBvcnQgeyBnZXRNb3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvbW90aW9uVXRpbFwiO1xudmFyIHBvcHVwUGxhY2VtZW50TWFwID0ge1xuICBob3Jpem9udGFsOiAnYm90dG9tTGVmdCcsXG4gIHZlcnRpY2FsOiAncmlnaHRUb3AnLFxuICAndmVydGljYWwtbGVmdCc6ICdyaWdodFRvcCcsXG4gICd2ZXJ0aWNhbC1yaWdodCc6ICdsZWZ0VG9wJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBvcHVwVHJpZ2dlcihfcmVmKSB7XG4gIHZhciBwcmVmaXhDbHMgPSBfcmVmLnByZWZpeENscyxcbiAgICB2aXNpYmxlID0gX3JlZi52aXNpYmxlLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBwb3B1cCA9IF9yZWYucG9wdXAsXG4gICAgcG9wdXBTdHlsZSA9IF9yZWYucG9wdXBTdHlsZSxcbiAgICBwb3B1cENsYXNzTmFtZSA9IF9yZWYucG9wdXBDbGFzc05hbWUsXG4gICAgcG9wdXBPZmZzZXQgPSBfcmVmLnBvcHVwT2Zmc2V0LFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBtb2RlID0gX3JlZi5tb2RlLFxuICAgIG9uVmlzaWJsZUNoYW5nZSA9IF9yZWYub25WaXNpYmxlQ2hhbmdlO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBnZXRQb3B1cENvbnRhaW5lciA9IF9SZWFjdCR1c2VDb250ZXh0LmdldFBvcHVwQ29udGFpbmVyLFxuICAgIHJ0bCA9IF9SZWFjdCR1c2VDb250ZXh0LnJ0bCxcbiAgICBzdWJNZW51T3BlbkRlbGF5ID0gX1JlYWN0JHVzZUNvbnRleHQuc3ViTWVudU9wZW5EZWxheSxcbiAgICBzdWJNZW51Q2xvc2VEZWxheSA9IF9SZWFjdCR1c2VDb250ZXh0LnN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzID0gX1JlYWN0JHVzZUNvbnRleHQuYnVpbHRpblBsYWNlbWVudHMsXG4gICAgdHJpZ2dlclN1Yk1lbnVBY3Rpb24gPSBfUmVhY3QkdXNlQ29udGV4dC50cmlnZ2VyU3ViTWVudUFjdGlvbixcbiAgICBmb3JjZVN1Yk1lbnVSZW5kZXIgPSBfUmVhY3QkdXNlQ29udGV4dC5mb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgcm9vdENsYXNzTmFtZSA9IF9SZWFjdCR1c2VDb250ZXh0LnJvb3RDbGFzc05hbWUsXG4gICAgbW90aW9uID0gX1JlYWN0JHVzZUNvbnRleHQubW90aW9uLFxuICAgIGRlZmF1bHRNb3Rpb25zID0gX1JlYWN0JHVzZUNvbnRleHQuZGVmYXVsdE1vdGlvbnM7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgaW5uZXJWaXNpYmxlID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXRJbm5lclZpc2libGUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgcGxhY2VtZW50ID0gcnRsID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwbGFjZW1lbnRzUnRsKSwgYnVpbHRpblBsYWNlbWVudHMpIDogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwbGFjZW1lbnRzKSwgYnVpbHRpblBsYWNlbWVudHMpO1xuICB2YXIgcG9wdXBQbGFjZW1lbnQgPSBwb3B1cFBsYWNlbWVudE1hcFttb2RlXTtcbiAgdmFyIHRhcmdldE1vdGlvbiA9IGdldE1vdGlvbihtb2RlLCBtb3Rpb24sIGRlZmF1bHRNb3Rpb25zKTtcbiAgdmFyIHRhcmdldE1vdGlvblJlZiA9IFJlYWN0LnVzZVJlZih0YXJnZXRNb3Rpb24pO1xuICBpZiAobW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICAvKipcbiAgICAgKiBQb3B1cFRyaWdnZXIgaXMgb25seSB1c2VkIGZvciB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCB0eXBlcy5cbiAgICAgKiBXaGVuIGNvbGxhcHNlZCBpcyB1bmZvbGRlZCwgdGhlIGlubGluZSBhbmltYXRpb24gd2lsbCBkZXN0cm95IHRoZSB2ZXJ0aWNhbCBhbmltYXRpb24uXG4gICAgICovXG4gICAgdGFyZ2V0TW90aW9uUmVmLmN1cnJlbnQgPSB0YXJnZXRNb3Rpb247XG4gIH1cbiAgdmFyIG1lcmdlZE1vdGlvbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGFyZ2V0TW90aW9uUmVmLmN1cnJlbnQpLCB7fSwge1xuICAgIGxlYXZlZENsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1oaWRkZW5cIiksXG4gICAgcmVtb3ZlT25MZWF2ZTogZmFsc2UsXG4gICAgbW90aW9uQXBwZWFyOiB0cnVlXG4gIH0pO1xuXG4gIC8vIERlbGF5IHRvIGNoYW5nZSB2aXNpYmxlXG4gIHZhciB2aXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmlzaWJsZVJlZi5jdXJyZW50ID0gcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldElubmVyVmlzaWJsZSh2aXNpYmxlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmFmLmNhbmNlbCh2aXNpYmxlUmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmlnZ2VyLCB7XG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcG9wdXBDbGFzc05hbWU6IGNsYXNzTmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1wb3B1cFwiKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJ0bFwiKSwgcnRsKSwgcG9wdXBDbGFzc05hbWUsIHJvb3RDbGFzc05hbWUpLFxuICAgIHN0cmV0Y2g6IG1vZGUgPT09ICdob3Jpem9udGFsJyA/ICdtaW5XaWR0aCcgOiBudWxsLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lcixcbiAgICBidWlsdGluUGxhY2VtZW50czogcGxhY2VtZW50LFxuICAgIHBvcHVwUGxhY2VtZW50OiBwb3B1cFBsYWNlbWVudCxcbiAgICBwb3B1cFZpc2libGU6IGlubmVyVmlzaWJsZSxcbiAgICBwb3B1cDogcG9wdXAsXG4gICAgcG9wdXBTdHlsZTogcG9wdXBTdHlsZSxcbiAgICBwb3B1cEFsaWduOiBwb3B1cE9mZnNldCAmJiB7XG4gICAgICBvZmZzZXQ6IHBvcHVwT2Zmc2V0XG4gICAgfSxcbiAgICBhY3Rpb246IGRpc2FibGVkID8gW10gOiBbdHJpZ2dlclN1Yk1lbnVBY3Rpb25dLFxuICAgIG1vdXNlRW50ZXJEZWxheTogc3ViTWVudU9wZW5EZWxheSxcbiAgICBtb3VzZUxlYXZlRGVsYXk6IHN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIG9uUG9wdXBWaXNpYmxlQ2hhbmdlOiBvblZpc2libGVDaGFuZ2UsXG4gICAgZm9yY2VSZW5kZXI6IGZvcmNlU3ViTWVudVJlbmRlcixcbiAgICBwb3B1cE1vdGlvbjogbWVyZ2VkTW90aW9uLFxuICAgIGZyZXNoOiB0cnVlXG4gIH0sIGNoaWxkcmVuKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbnZhciBJbnRlcm5hbFN1Yk1lbnVMaXN0ID0gZnVuY3Rpb24gSW50ZXJuYWxTdWJNZW51TGlzdChfcmVmLCByZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIG1vZGUgPSBfUmVhY3QkdXNlQ29udGV4dC5tb2RlLFxuICAgIHJ0bCA9IF9SZWFjdCR1c2VDb250ZXh0LnJ0bDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwcmVmaXhDbHMsIHJ0bCAmJiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJ0bFwiKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zdWJcIiksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItXCIpLmNvbmNhdChtb2RlID09PSAnaW5saW5lJyA/ICdpbmxpbmUnIDogJ3ZlcnRpY2FsJyksIGNsYXNzTmFtZSksXG4gICAgcm9sZTogXCJtZW51XCJcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgXCJkYXRhLW1lbnUtbGlzdFwiOiB0cnVlLFxuICAgIHJlZjogcmVmXG4gIH0pLCBjaGlsZHJlbik7XG59O1xudmFyIFN1Yk1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoSW50ZXJuYWxTdWJNZW51TGlzdCk7XG5TdWJNZW51TGlzdC5kaXNwbGF5TmFtZSA9ICdTdWJNZW51TGlzdCc7XG5leHBvcnQgZGVmYXVsdCBTdWJNZW51TGlzdDsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwidGl0bGVcIiwgXCJldmVudEtleVwiLCBcIndhcm5LZXlcIiwgXCJkaXNhYmxlZFwiLCBcImludGVybmFsUG9wdXBDbG9zZVwiLCBcImNoaWxkcmVuXCIsIFwiaXRlbUljb25cIiwgXCJleHBhbmRJY29uXCIsIFwicG9wdXBDbGFzc05hbWVcIiwgXCJwb3B1cE9mZnNldFwiLCBcInBvcHVwU3R5bGVcIiwgXCJvbkNsaWNrXCIsIFwib25Nb3VzZUVudGVyXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib25UaXRsZUNsaWNrXCIsIFwib25UaXRsZU1vdXNlRW50ZXJcIiwgXCJvblRpdGxlTW91c2VMZWF2ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFjdGl2ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IE92ZXJmbG93IGZyb20gJ3JjLW92ZXJmbG93JztcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCBTdWJNZW51TGlzdCBmcm9tIFwiLi9TdWJNZW51TGlzdFwiO1xuaW1wb3J0IHsgcGFyc2VDaGlsZHJlbiB9IGZyb20gXCIuLi91dGlscy9jb21tb25VdGlsXCI7XG5pbXBvcnQgTWVudUNvbnRleHRQcm92aWRlciwgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgdXNlTWVtb0NhbGxiYWNrIGZyb20gXCIuLi9ob29rcy91c2VNZW1vQ2FsbGJhY2tcIjtcbmltcG9ydCBQb3B1cFRyaWdnZXIgZnJvbSBcIi4vUG9wdXBUcmlnZ2VyXCI7XG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHVzZUFjdGl2ZSBmcm9tIFwiLi4vaG9va3MvdXNlQWN0aXZlXCI7XG5pbXBvcnQgeyB3YXJuSXRlbVByb3AgfSBmcm9tIFwiLi4vdXRpbHMvd2FyblV0aWxcIjtcbmltcG9ydCB1c2VEaXJlY3Rpb25TdHlsZSBmcm9tIFwiLi4vaG9va3MvdXNlRGlyZWN0aW9uU3R5bGVcIjtcbmltcG9ydCBJbmxpbmVTdWJNZW51TGlzdCBmcm9tIFwiLi9JbmxpbmVTdWJNZW51TGlzdFwiO1xuaW1wb3J0IHsgUGF0aFRyYWNrZXJDb250ZXh0LCBQYXRoVXNlckNvbnRleHQsIHVzZUZ1bGxQYXRoLCB1c2VNZWFzdXJlIH0gZnJvbSBcIi4uL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCB7IHVzZU1lbnVJZCB9IGZyb20gXCIuLi9jb250ZXh0L0lkQ29udGV4dFwiO1xuaW1wb3J0IFByaXZhdGVDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L1ByaXZhdGVDb250ZXh0XCI7XG52YXIgSW50ZXJuYWxTdWJNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHRpdGxlID0gcHJvcHMudGl0bGUsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICB3YXJuS2V5ID0gcHJvcHMud2FybktleSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGludGVybmFsUG9wdXBDbG9zZSA9IHByb3BzLmludGVybmFsUG9wdXBDbG9zZSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGl0ZW1JY29uID0gcHJvcHMuaXRlbUljb24sXG4gICAgZXhwYW5kSWNvbiA9IHByb3BzLmV4cGFuZEljb24sXG4gICAgcG9wdXBDbGFzc05hbWUgPSBwcm9wcy5wb3B1cENsYXNzTmFtZSxcbiAgICBwb3B1cE9mZnNldCA9IHByb3BzLnBvcHVwT2Zmc2V0LFxuICAgIHBvcHVwU3R5bGUgPSBwcm9wcy5wb3B1cFN0eWxlLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uTW91c2VFbnRlciA9IHByb3BzLm9uTW91c2VFbnRlcixcbiAgICBvbk1vdXNlTGVhdmUgPSBwcm9wcy5vbk1vdXNlTGVhdmUsXG4gICAgb25UaXRsZUNsaWNrID0gcHJvcHMub25UaXRsZUNsaWNrLFxuICAgIG9uVGl0bGVNb3VzZUVudGVyID0gcHJvcHMub25UaXRsZU1vdXNlRW50ZXIsXG4gICAgb25UaXRsZU1vdXNlTGVhdmUgPSBwcm9wcy5vblRpdGxlTW91c2VMZWF2ZSxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBkb21EYXRhSWQgPSB1c2VNZW51SWQoZXZlbnRLZXkpO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHMsXG4gICAgbW9kZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vZGUsXG4gICAgb3BlbktleXMgPSBfUmVhY3QkdXNlQ29udGV4dC5vcGVuS2V5cyxcbiAgICBjb250ZXh0RGlzYWJsZWQgPSBfUmVhY3QkdXNlQ29udGV4dC5kaXNhYmxlZCxcbiAgICBvdmVyZmxvd0Rpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQub3ZlcmZsb3dEaXNhYmxlZCxcbiAgICBhY3RpdmVLZXkgPSBfUmVhY3QkdXNlQ29udGV4dC5hY3RpdmVLZXksXG4gICAgc2VsZWN0ZWRLZXlzID0gX1JlYWN0JHVzZUNvbnRleHQuc2VsZWN0ZWRLZXlzLFxuICAgIGNvbnRleHRJdGVtSWNvbiA9IF9SZWFjdCR1c2VDb250ZXh0Lml0ZW1JY29uLFxuICAgIGNvbnRleHRFeHBhbmRJY29uID0gX1JlYWN0JHVzZUNvbnRleHQuZXhwYW5kSWNvbixcbiAgICBvbkl0ZW1DbGljayA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uSXRlbUNsaWNrLFxuICAgIG9uT3BlbkNoYW5nZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uT3BlbkNoYW5nZSxcbiAgICBvbkFjdGl2ZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uQWN0aXZlO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQyID0gUmVhY3QudXNlQ29udGV4dChQcml2YXRlQ29udGV4dCksXG4gICAgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW0gPSBfUmVhY3QkdXNlQ29udGV4dDIuX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW07XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dDMgPSBSZWFjdC51c2VDb250ZXh0KFBhdGhVc2VyQ29udGV4dCksXG4gICAgaXNTdWJQYXRoS2V5ID0gX1JlYWN0JHVzZUNvbnRleHQzLmlzU3ViUGF0aEtleTtcbiAgdmFyIGNvbm5lY3RlZFBhdGggPSB1c2VGdWxsUGF0aCgpO1xuICB2YXIgc3ViTWVudVByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3VibWVudVwiKTtcbiAgdmFyIG1lcmdlZERpc2FibGVkID0gY29udGV4dERpc2FibGVkIHx8IGRpc2FibGVkO1xuICB2YXIgZWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgcG9wdXBSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBXYXJuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5LZXkpIHtcbiAgICB3YXJuaW5nKGZhbHNlLCAnU3ViTWVudSBzaG91bGQgbm90IGxlYXZlIHVuZGVmaW5lZCBga2V5YC4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEljb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZEl0ZW1JY29uID0gaXRlbUljb24gIT09IG51bGwgJiYgaXRlbUljb24gIT09IHZvaWQgMCA/IGl0ZW1JY29uIDogY29udGV4dEl0ZW1JY29uO1xuICB2YXIgbWVyZ2VkRXhwYW5kSWNvbiA9IGV4cGFuZEljb24gIT09IG51bGwgJiYgZXhwYW5kSWNvbiAhPT0gdm9pZCAwID8gZXhwYW5kSWNvbiA6IGNvbnRleHRFeHBhbmRJY29uO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9yaWdpbk9wZW4gPSBvcGVuS2V5cy5pbmNsdWRlcyhldmVudEtleSk7XG4gIHZhciBvcGVuID0gIW92ZXJmbG93RGlzYWJsZWQgJiYgb3JpZ2luT3BlbjtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNlbGVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjaGlsZHJlblNlbGVjdGVkID0gaXNTdWJQYXRoS2V5KHNlbGVjdGVkS2V5cywgZXZlbnRLZXkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VBY3RpdmUgPSB1c2VBY3RpdmUoZXZlbnRLZXksIG1lcmdlZERpc2FibGVkLCBvblRpdGxlTW91c2VFbnRlciwgb25UaXRsZU1vdXNlTGVhdmUpLFxuICAgIGFjdGl2ZSA9IF91c2VBY3RpdmUuYWN0aXZlLFxuICAgIGFjdGl2ZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF91c2VBY3RpdmUsIF9leGNsdWRlZDIpO1xuXG4gIC8vIEZhbGxiYWNrIG9mIGFjdGl2ZSBjaGVjayB0byBhdm9pZCBob3ZlciBvbiBtZW51IHRpdGxlIG9yIGRpc2FibGVkIGl0ZW1cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBjaGlsZHJlbkFjdGl2ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q2hpbGRyZW5BY3RpdmUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgdHJpZ2dlckNoaWxkcmVuQWN0aXZlID0gZnVuY3Rpb24gdHJpZ2dlckNoaWxkcmVuQWN0aXZlKG5ld0FjdGl2ZSkge1xuICAgIGlmICghbWVyZ2VkRGlzYWJsZWQpIHtcbiAgICAgIHNldENoaWxkcmVuQWN0aXZlKG5ld0FjdGl2ZSk7XG4gICAgfVxuICB9O1xuICB2YXIgb25JbnRlcm5hbE1vdXNlRW50ZXIgPSBmdW5jdGlvbiBvbkludGVybmFsTW91c2VFbnRlcihkb21FdmVudCkge1xuICAgIHRyaWdnZXJDaGlsZHJlbkFjdGl2ZSh0cnVlKTtcbiAgICBvbk1vdXNlRW50ZXIgPT09IG51bGwgfHwgb25Nb3VzZUVudGVyID09PSB2b2lkIDAgfHwgb25Nb3VzZUVudGVyKHtcbiAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICBkb21FdmVudDogZG9tRXZlbnRcbiAgICB9KTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxNb3VzZUxlYXZlID0gZnVuY3Rpb24gb25JbnRlcm5hbE1vdXNlTGVhdmUoZG9tRXZlbnQpIHtcbiAgICB0cmlnZ2VyQ2hpbGRyZW5BY3RpdmUoZmFsc2UpO1xuICAgIG9uTW91c2VMZWF2ZSA9PT0gbnVsbCB8fCBvbk1vdXNlTGVhdmUgPT09IHZvaWQgMCB8fCBvbk1vdXNlTGVhdmUoe1xuICAgICAga2V5OiBldmVudEtleSxcbiAgICAgIGRvbUV2ZW50OiBkb21FdmVudFxuICAgIH0pO1xuICB9O1xuICB2YXIgbWVyZ2VkQWN0aXZlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICB9XG4gICAgaWYgKG1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5BY3RpdmUgfHwgaXNTdWJQYXRoS2V5KFthY3RpdmVLZXldLCBldmVudEtleSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW21vZGUsIGFjdGl2ZSwgYWN0aXZlS2V5LCBjaGlsZHJlbkFjdGl2ZSwgZXZlbnRLZXksIGlzU3ViUGF0aEtleV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IERpcmVjdGlvblN0eWxlID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBkaXJlY3Rpb25TdHlsZSA9IHVzZURpcmVjdGlvblN0eWxlKGNvbm5lY3RlZFBhdGgubGVuZ3RoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEV2ZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID4+Pj4gVGl0bGUgY2xpY2tcbiAgdmFyIG9uSW50ZXJuYWxUaXRsZUNsaWNrID0gZnVuY3Rpb24gb25JbnRlcm5hbFRpdGxlQ2xpY2soZSkge1xuICAgIC8vIFNraXAgaWYgZGlzYWJsZWRcbiAgICBpZiAobWVyZ2VkRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb25UaXRsZUNsaWNrID09PSBudWxsIHx8IG9uVGl0bGVDbGljayA9PT0gdm9pZCAwIHx8IG9uVGl0bGVDbGljayh7XG4gICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgZG9tRXZlbnQ6IGVcbiAgICB9KTtcblxuICAgIC8vIFRyaWdnZXIgb3BlbiBieSBjbGljayB3aGVuIG1vZGUgaXMgYGlubGluZWBcbiAgICBpZiAobW9kZSA9PT0gJ2lubGluZScpIHtcbiAgICAgIG9uT3BlbkNoYW5nZShldmVudEtleSwgIW9yaWdpbk9wZW4pO1xuICAgIH1cbiAgfTtcblxuICAvLyA+Pj4+IENvbnRleHQgZm9yIGNoaWxkcmVuIGNsaWNrXG4gIHZhciBvbk1lcmdlZEl0ZW1DbGljayA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoaW5mbykge1xuICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwIHx8IG9uQ2xpY2sod2Fybkl0ZW1Qcm9wKGluZm8pKTtcbiAgICBvbkl0ZW1DbGljayhpbmZvKTtcbiAgfSk7XG5cbiAgLy8gPj4+Pj4gVmlzaWJsZSBjaGFuZ2VcbiAgdmFyIG9uUG9wdXBWaXNpYmxlQ2hhbmdlID0gZnVuY3Rpb24gb25Qb3B1cFZpc2libGVDaGFuZ2UobmV3VmlzaWJsZSkge1xuICAgIGlmIChtb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgb25PcGVuQ2hhbmdlKGV2ZW50S2V5LCBuZXdWaXNpYmxlKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGFjY2Vzc2liaWxpdHkuIEhlbHBlciB3aWxsIGZvY3VzIGVsZW1lbnQgd2l0aG91dCBrZXkgYm9hcmQuXG4gICAqIFdlIHNob3VsZCBtYW51YWxseSB0cmlnZ2VyIGFuIGFjdGl2ZVxuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxGb2N1cyA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxGb2N1cygpIHtcbiAgICBvbkFjdGl2ZShldmVudEtleSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcG9wdXBJZCA9IGRvbURhdGFJZCAmJiBcIlwiLmNvbmNhdChkb21EYXRhSWQsIFwiLXBvcHVwXCIpO1xuICB2YXIgZXhwYW5kSWNvbk5vZGUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgICAgaWNvbjogbW9kZSAhPT0gJ2hvcml6b250YWwnID8gbWVyZ2VkRXhwYW5kSWNvbiA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgaXNPcGVuOiBvcGVuLFxuICAgICAgICAvLyBbTGVnYWN5XSBOb3Qgc3VyZSB3aHkgbmVlZCB0aGlzIG1hcmtcbiAgICAgICAgaXNTdWJNZW51OiB0cnVlXG4gICAgICB9KVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLWFycm93XCIpXG4gICAgfSkpO1xuICB9LCBbbW9kZSwgbWVyZ2VkRXhwYW5kSWNvbiwgcHJvcHMsIG9wZW4sIHN1Yk1lbnVQcmVmaXhDbHNdKTtcblxuICAvLyA+Pj4+PiBUaXRsZVxuICB2YXIgdGl0bGVOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwibWVudWl0ZW1cIixcbiAgICBzdHlsZTogZGlyZWN0aW9uU3R5bGUsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi10aXRsZVwiKSxcbiAgICB0YWJJbmRleDogbWVyZ2VkRGlzYWJsZWQgPyBudWxsIDogLTEsXG4gICAgcmVmOiBlbGVtZW50UmVmLFxuICAgIHRpdGxlOiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gdGl0bGUgOiBudWxsLFxuICAgIFwiZGF0YS1tZW51LWlkXCI6IG92ZXJmbG93RGlzYWJsZWQgJiYgZG9tRGF0YUlkID8gbnVsbCA6IGRvbURhdGFJZCxcbiAgICBcImFyaWEtZXhwYW5kZWRcIjogb3BlbixcbiAgICBcImFyaWEtaGFzcG9wdXBcIjogdHJ1ZSxcbiAgICBcImFyaWEtY29udHJvbHNcIjogcG9wdXBJZCxcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogbWVyZ2VkRGlzYWJsZWQsXG4gICAgb25DbGljazogb25JbnRlcm5hbFRpdGxlQ2xpY2ssXG4gICAgb25Gb2N1czogb25JbnRlcm5hbEZvY3VzXG4gIH0sIGFjdGl2ZVByb3BzKSwgdGl0bGUsIGV4cGFuZEljb25Ob2RlKTtcblxuICAvLyBDYWNoZSBtb2RlIGlmIGl0IGNoYW5nZSB0byBgaW5saW5lYCB3aGljaCBkbyBub3QgaGF2ZSBwb3B1cCBtb3Rpb25cbiAgdmFyIHRyaWdnZXJNb2RlUmVmID0gUmVhY3QudXNlUmVmKG1vZGUpO1xuICBpZiAobW9kZSAhPT0gJ2lubGluZScgJiYgY29ubmVjdGVkUGF0aC5sZW5ndGggPiAxKSB7XG4gICAgdHJpZ2dlck1vZGVSZWYuY3VycmVudCA9ICd2ZXJ0aWNhbCc7XG4gIH0gZWxzZSB7XG4gICAgdHJpZ2dlck1vZGVSZWYuY3VycmVudCA9IG1vZGU7XG4gIH1cbiAgaWYgKCFvdmVyZmxvd0Rpc2FibGVkKSB7XG4gICAgdmFyIHRyaWdnZXJNb2RlID0gdHJpZ2dlck1vZGVSZWYuY3VycmVudDtcblxuICAgIC8vIFN0aWxsIHdyYXAgd2l0aCBUcmlnZ2VyIGhlcmUgc2luY2Ugd2UgbmVlZCBhdm9pZCByZWFjdCByZS1tb3VudCBkb20gbm9kZVxuICAgIC8vIFdoaWNoIG1ha2VzIG1vdGlvbiBmYWlsZWRcbiAgICB0aXRsZU5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cFRyaWdnZXIsIHtcbiAgICAgIG1vZGU6IHRyaWdnZXJNb2RlLFxuICAgICAgcHJlZml4Q2xzOiBzdWJNZW51UHJlZml4Q2xzLFxuICAgICAgdmlzaWJsZTogIWludGVybmFsUG9wdXBDbG9zZSAmJiBvcGVuICYmIG1vZGUgIT09ICdpbmxpbmUnLFxuICAgICAgcG9wdXBDbGFzc05hbWU6IHBvcHVwQ2xhc3NOYW1lLFxuICAgICAgcG9wdXBPZmZzZXQ6IHBvcHVwT2Zmc2V0LFxuICAgICAgcG9wdXBTdHlsZTogcG9wdXBTdHlsZSxcbiAgICAgIHBvcHVwOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dFByb3ZpZGVyXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsZSBvZiBob3Jpem9udGFsIG1vZGVcbiAgICAgICwge1xuICAgICAgICBtb2RlOiB0cmlnZ2VyTW9kZSA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6IHRyaWdnZXJNb2RlXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJNZW51TGlzdCwge1xuICAgICAgICBpZDogcG9wdXBJZCxcbiAgICAgICAgcmVmOiBwb3B1cFJlZlxuICAgICAgfSwgY2hpbGRyZW4pKSxcbiAgICAgIGRpc2FibGVkOiBtZXJnZWREaXNhYmxlZCxcbiAgICAgIG9uVmlzaWJsZUNoYW5nZTogb25Qb3B1cFZpc2libGVDaGFuZ2VcbiAgICB9LCB0aXRsZU5vZGUpO1xuICB9XG5cbiAgLy8gPj4+Pj4gTGlzdCBub2RlXG4gIHZhciBsaXN0Tm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE92ZXJmbG93Lkl0ZW0sIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcIm5vbmVcIlxuICB9LCByZXN0UHJvcHMsIHtcbiAgICBjb21wb25lbnQ6IFwibGlcIixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHN1Yk1lbnVQcmVmaXhDbHMsIFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQobW9kZSksIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1vcGVuXCIpLCBvcGVuKSwgXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItYWN0aXZlXCIpLCBtZXJnZWRBY3RpdmUpLCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1zZWxlY3RlZFwiKSwgY2hpbGRyZW5TZWxlY3RlZCksIFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBtZXJnZWREaXNhYmxlZCkpLFxuICAgIG9uTW91c2VFbnRlcjogb25JbnRlcm5hbE1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlOiBvbkludGVybmFsTW91c2VMZWF2ZVxuICB9KSwgdGl0bGVOb2RlLCAhb3ZlcmZsb3dEaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbmxpbmVTdWJNZW51TGlzdCwge1xuICAgIGlkOiBwb3B1cElkLFxuICAgIG9wZW46IG9wZW4sXG4gICAga2V5UGF0aDogY29ubmVjdGVkUGF0aFxuICB9LCBjaGlsZHJlbikpO1xuICBpZiAoX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW0pIHtcbiAgICBsaXN0Tm9kZSA9IF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtKGxpc3ROb2RlLCBwcm9wcywge1xuICAgICAgc2VsZWN0ZWQ6IGNoaWxkcmVuU2VsZWN0ZWQsXG4gICAgICBhY3RpdmU6IG1lcmdlZEFjdGl2ZSxcbiAgICAgIG9wZW46IG9wZW4sXG4gICAgICBkaXNhYmxlZDogbWVyZ2VkRGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIC8vID4+Pj4+IFJlbmRlclxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHRQcm92aWRlciwge1xuICAgIG9uSXRlbUNsaWNrOiBvbk1lcmdlZEl0ZW1DbGljayxcbiAgICBtb2RlOiBtb2RlID09PSAnaG9yaXpvbnRhbCcgPyAndmVydGljYWwnIDogbW9kZSxcbiAgICBpdGVtSWNvbjogbWVyZ2VkSXRlbUljb24sXG4gICAgZXhwYW5kSWNvbjogbWVyZ2VkRXhwYW5kSWNvblxuICB9LCBsaXN0Tm9kZSk7XG59KTtcbnZhciBTdWJNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGNvbm5lY3RlZEtleVBhdGggPSB1c2VGdWxsUGF0aChldmVudEtleSk7XG4gIHZhciBjaGlsZExpc3QgPSBwYXJzZUNoaWxkcmVuKGNoaWxkcmVuLCBjb25uZWN0ZWRLZXlQYXRoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBSZWNvcmQgS2V5UGF0aCA9PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVhc3VyZSA9IHVzZU1lYXN1cmUoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWVhc3VyZSkge1xuICAgICAgbWVhc3VyZS5yZWdpc3RlclBhdGgoZXZlbnRLZXksIGNvbm5lY3RlZEtleVBhdGgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWVhc3VyZS51bnJlZ2lzdGVyUGF0aChldmVudEtleSwgY29ubmVjdGVkS2V5UGF0aCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2Nvbm5lY3RlZEtleVBhdGhdKTtcbiAgdmFyIHJlbmRlck5vZGU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZW5kZXJOb2RlID0gY2hpbGRMaXN0O1xuICB9IGVsc2Uge1xuICAgIHJlbmRlck5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbFN1Yk1lbnUsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpLCBjaGlsZExpc3QpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYXRoVHJhY2tlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29ubmVjdGVkS2V5UGF0aFxuICB9LCByZW5kZXJOb2RlKTtcbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgU3ViTWVudS5kaXNwbGF5TmFtZSA9ICdTdWJNZW51Jztcbn1cbmV4cG9ydCBkZWZhdWx0IFN1Yk1lbnU7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBJZENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SWQodXVpZCwgZXZlbnRLZXkpIHtcbiAgaWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBcIlwiLmNvbmNhdCh1dWlkLCBcIi1cIikuY29uY2F0KGV2ZW50S2V5KTtcbn1cblxuLyoqXG4gKiBHZXQgYGRhdGEtbWVudS1pZGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVJZChldmVudEtleSkge1xuICB2YXIgaWQgPSBSZWFjdC51c2VDb250ZXh0KElkQ29udGV4dCk7XG4gIHJldHVybiBnZXRNZW51SWQoaWQsIGV2ZW50S2V5KTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImxvY2tlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lbW9cIjtcbmltcG9ydCBpc0VxdWFsIGZyb20gXCJyYy11dGlsL2VzL2lzRXF1YWxcIjtcbmV4cG9ydCB2YXIgTWVudUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmZ1bmN0aW9uIG1lcmdlUHJvcHMob3JpZ2luLCB0YXJnZXQpIHtcbiAgdmFyIGNsb25lID0gX29iamVjdFNwcmVhZCh7fSwgb3JpZ2luKTtcbiAgT2JqZWN0LmtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xvbmVba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEluaGVyaXRhYmxlQ29udGV4dFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBsb2NrZWQgPSBfcmVmLmxvY2tlZCxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KTtcbiAgdmFyIGluaGVyaXRhYmxlQ29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtZXJnZVByb3BzKGNvbnRleHQsIHJlc3RQcm9wcyk7XG4gIH0sIFtjb250ZXh0LCByZXN0UHJvcHNdLCBmdW5jdGlvbiAocHJldiwgbmV4dCkge1xuICAgIHJldHVybiAhbG9ja2VkICYmIChwcmV2WzBdICE9PSBuZXh0WzBdIHx8ICFpc0VxdWFsKHByZXZbMV0sIG5leHRbMV0sIHRydWUpKTtcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBpbmhlcml0YWJsZUNvbnRleHRcbiAgfSwgY2hpbGRyZW4pO1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgRW1wdHlMaXN0ID0gW107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUGF0aCBSZWdpc3RlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB2YXIgUGF0aFJlZ2lzdGVyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lYXN1cmUoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFBhdGhSZWdpc3RlckNvbnRleHQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggVHJhY2tlciA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHZhciBQYXRoVHJhY2tlckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChFbXB0eUxpc3QpO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZ1bGxQYXRoKGV2ZW50S2V5KSB7XG4gIHZhciBwYXJlbnRLZXlQYXRoID0gUmVhY3QudXNlQ29udGV4dChQYXRoVHJhY2tlckNvbnRleHQpO1xuICByZXR1cm4gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGV2ZW50S2V5ICE9PSB1bmRlZmluZWQgPyBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHBhcmVudEtleVBhdGgpLCBbZXZlbnRLZXldKSA6IHBhcmVudEtleVBhdGg7XG4gIH0sIFtwYXJlbnRLZXlQYXRoLCBldmVudEtleV0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGF0aCBVc2VyID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdmFyIFBhdGhVc2VyQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBQcml2YXRlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbmV4cG9ydCBkZWZhdWx0IFByaXZhdGVDb250ZXh0OyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgeyBnZXRGb2N1c05vZGVMaXN0IH0gZnJvbSBcInJjLXV0aWwvZXMvRG9tL2ZvY3VzXCI7XG5pbXBvcnQgS2V5Q29kZSBmcm9tIFwicmMtdXRpbC9lcy9LZXlDb2RlXCI7XG5pbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0TWVudUlkIH0gZnJvbSBcIi4uL2NvbnRleHQvSWRDb250ZXh0XCI7XG4vLyBkZXN0cnVjdCB0byByZWR1Y2UgbWluaWZ5IHNpemVcbnZhciBMRUZUID0gS2V5Q29kZS5MRUZULFxuICBSSUdIVCA9IEtleUNvZGUuUklHSFQsXG4gIFVQID0gS2V5Q29kZS5VUCxcbiAgRE9XTiA9IEtleUNvZGUuRE9XTixcbiAgRU5URVIgPSBLZXlDb2RlLkVOVEVSLFxuICBFU0MgPSBLZXlDb2RlLkVTQyxcbiAgSE9NRSA9IEtleUNvZGUuSE9NRSxcbiAgRU5EID0gS2V5Q29kZS5FTkQ7XG52YXIgQXJyb3dLZXlzID0gW1VQLCBET1dOLCBMRUZULCBSSUdIVF07XG5mdW5jdGlvbiBnZXRPZmZzZXQobW9kZSwgaXNSb290TGV2ZWwsIGlzUnRsLCB3aGljaCkge1xuICB2YXIgX29mZnNldHM7XG4gIHZhciBwcmV2ID0gJ3ByZXYnO1xuICB2YXIgbmV4dCA9ICduZXh0JztcbiAgdmFyIGNoaWxkcmVuID0gJ2NoaWxkcmVuJztcbiAgdmFyIHBhcmVudCA9ICdwYXJlbnQnO1xuXG4gIC8vIElubGluZSBlbnRlciBpcyBzcGVjaWFsIHRoYXQgd2UgdXNlIHVuaXF1ZSBvcGVyYXRpb25cbiAgaWYgKG1vZGUgPT09ICdpbmxpbmUnICYmIHdoaWNoID09PSBFTlRFUikge1xuICAgIHJldHVybiB7XG4gICAgICBpbmxpbmVUcmlnZ2VyOiB0cnVlXG4gICAgfTtcbiAgfVxuICB2YXIgaW5saW5lID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgVVAsIHByZXYpLCBET1dOLCBuZXh0KTtcbiAgdmFyIGhvcml6b250YWwgPSBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIExFRlQsIGlzUnRsID8gbmV4dCA6IHByZXYpLCBSSUdIVCwgaXNSdGwgPyBwcmV2IDogbmV4dCksIERPV04sIGNoaWxkcmVuKSwgRU5URVIsIGNoaWxkcmVuKTtcbiAgdmFyIHZlcnRpY2FsID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFVQLCBwcmV2KSwgRE9XTiwgbmV4dCksIEVOVEVSLCBjaGlsZHJlbiksIEVTQywgcGFyZW50KSwgTEVGVCwgaXNSdGwgPyBjaGlsZHJlbiA6IHBhcmVudCksIFJJR0hULCBpc1J0bCA/IHBhcmVudCA6IGNoaWxkcmVuKTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgaW5saW5lOiBpbmxpbmUsXG4gICAgaG9yaXpvbnRhbDogaG9yaXpvbnRhbCxcbiAgICB2ZXJ0aWNhbDogdmVydGljYWwsXG4gICAgaW5saW5lU3ViOiBpbmxpbmUsXG4gICAgaG9yaXpvbnRhbFN1YjogdmVydGljYWwsXG4gICAgdmVydGljYWxTdWI6IHZlcnRpY2FsXG4gIH07XG4gIHZhciB0eXBlID0gKF9vZmZzZXRzID0gb2Zmc2V0c1tcIlwiLmNvbmNhdChtb2RlKS5jb25jYXQoaXNSb290TGV2ZWwgPyAnJyA6ICdTdWInKV0pID09PSBudWxsIHx8IF9vZmZzZXRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb2Zmc2V0c1t3aGljaF07XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgcHJldjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogLTEsXG4gICAgICAgIHNpYmxpbmc6IHRydWVcbiAgICAgIH07XG4gICAgY2FzZSBuZXh0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICBzaWJsaW5nOiB0cnVlXG4gICAgICB9O1xuICAgIGNhc2UgcGFyZW50OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2Zmc2V0OiAtMSxcbiAgICAgICAgc2libGluZzogZmFsc2VcbiAgICAgIH07XG4gICAgY2FzZSBjaGlsZHJlbjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgc2libGluZzogZmFsc2VcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kQ29udGFpbmVyVUwoZWxlbWVudCkge1xuICB2YXIgY3VycmVudCA9IGVsZW1lbnQ7XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgaWYgKGN1cnJlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW1lbnUtbGlzdCcpKSB7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIE5vcm1hbGx5IHNob3VsZCBub3QgcmVhY2ggdGhpcyBsaW5lXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEZpbmQgZm9jdXNlZCBlbGVtZW50IHdpdGhpbiBlbGVtZW50IHNldCBwcm92aWRlZFxuICovXG5mdW5jdGlvbiBnZXRGb2N1c0VsZW1lbnQoYWN0aXZlRWxlbWVudCwgZWxlbWVudHMpIHtcbiAgdmFyIGN1cnJlbnQgPSBhY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgaWYgKGVsZW1lbnRzLmhhcyhjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogR2V0IGZvY3VzYWJsZSBlbGVtZW50cyBmcm9tIHRoZSBlbGVtZW50IHNldCB1bmRlciBwcm92aWRlZCBjb250YWluZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvY3VzYWJsZUVsZW1lbnRzKGNvbnRhaW5lciwgZWxlbWVudHMpIHtcbiAgdmFyIGxpc3QgPSBnZXRGb2N1c05vZGVMaXN0KGNvbnRhaW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0LmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmhhcyhlbGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRGb2N1c0VsZW1lbnQocGFyZW50UXVlcnlDb250YWluZXIsIGVsZW1lbnRzLCBmb2N1c01lbnVFbGVtZW50KSB7XG4gIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDE7XG4gIC8vIEtleSBvbiB0aGUgbWVudSBpdGVtIHdpbGwgbm90IGdldCB2YWxpZGF0ZSBwYXJlbnQgY29udGFpbmVyXG4gIGlmICghcGFyZW50UXVlcnlDb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIExpc3QgY3VycmVudCBsZXZlbCBtZW51IGl0ZW0gZWxlbWVudHNcbiAgdmFyIHNhbWVMZXZlbEZvY3VzYWJsZU1lbnVFbGVtZW50TGlzdCA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cyk7XG5cbiAgLy8gRmluZCBuZXh0IGZvY3VzIGluZGV4XG4gIHZhciBjb3VudCA9IHNhbWVMZXZlbEZvY3VzYWJsZU1lbnVFbGVtZW50TGlzdC5sZW5ndGg7XG4gIHZhciBmb2N1c0luZGV4ID0gc2FtZUxldmVsRm9jdXNhYmxlTWVudUVsZW1lbnRMaXN0LmZpbmRJbmRleChmdW5jdGlvbiAoZWxlKSB7XG4gICAgcmV0dXJuIGZvY3VzTWVudUVsZW1lbnQgPT09IGVsZTtcbiAgfSk7XG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgaWYgKGZvY3VzSW5kZXggPT09IC0xKSB7XG4gICAgICBmb2N1c0luZGV4ID0gY291bnQgLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb2N1c0luZGV4IC09IDE7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9mZnNldCA+IDApIHtcbiAgICBmb2N1c0luZGV4ICs9IDE7XG4gIH1cbiAgZm9jdXNJbmRleCA9IChmb2N1c0luZGV4ICsgY291bnQpICUgY291bnQ7XG5cbiAgLy8gRm9jdXMgbWVudSBpdGVtXG4gIHJldHVybiBzYW1lTGV2ZWxGb2N1c2FibGVNZW51RWxlbWVudExpc3RbZm9jdXNJbmRleF07XG59XG5leHBvcnQgdmFyIHJlZnJlc2hFbGVtZW50cyA9IGZ1bmN0aW9uIHJlZnJlc2hFbGVtZW50cyhrZXlzLCBpZCkge1xuICB2YXIgZWxlbWVudHMgPSBuZXcgU2V0KCk7XG4gIHZhciBrZXkyZWxlbWVudCA9IG5ldyBNYXAoKTtcbiAgdmFyIGVsZW1lbnQya2V5ID0gbmV3IE1hcCgpO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLW1lbnUtaWQ9J1wiLmNvbmNhdChnZXRNZW51SWQoaWQsIGtleSksIFwiJ11cIikpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5hZGQoZWxlbWVudCk7XG4gICAgICBlbGVtZW50MmtleS5zZXQoZWxlbWVudCwga2V5KTtcbiAgICAgIGtleTJlbGVtZW50LnNldChrZXksIGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgIGtleTJlbGVtZW50OiBrZXkyZWxlbWVudCxcbiAgICBlbGVtZW50MmtleTogZWxlbWVudDJrZXlcbiAgfTtcbn07XG5leHBvcnQgZnVuY3Rpb24gdXNlQWNjZXNzaWJpbGl0eShtb2RlLCBhY3RpdmVLZXksIGlzUnRsLCBpZCwgY29udGFpbmVyUmVmLCBnZXRLZXlzLCBnZXRLZXlQYXRoLCB0cmlnZ2VyQWN0aXZlS2V5LCB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4sIG9yaWdpbk9uS2V5RG93bikge1xuICB2YXIgcmFmUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBhY3RpdmVSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgYWN0aXZlUmVmLmN1cnJlbnQgPSBhY3RpdmVLZXk7XG4gIHZhciBjbGVhblJhZiA9IGZ1bmN0aW9uIGNsZWFuUmFmKCkge1xuICAgIHJhZi5jYW5jZWwocmFmUmVmLmN1cnJlbnQpO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGVhblJhZigpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHdoaWNoID0gZS53aGljaDtcbiAgICBpZiAoW10uY29uY2F0KEFycm93S2V5cywgW0VOVEVSLCBFU0MsIEhPTUUsIEVORF0pLmluY2x1ZGVzKHdoaWNoKSkge1xuICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKCk7XG4gICAgICB2YXIgcmVmcmVzaGVkRWxlbWVudHMgPSByZWZyZXNoRWxlbWVudHMoa2V5cywgaWQpO1xuICAgICAgdmFyIF9yZWZyZXNoZWRFbGVtZW50cyA9IHJlZnJlc2hlZEVsZW1lbnRzLFxuICAgICAgICBlbGVtZW50cyA9IF9yZWZyZXNoZWRFbGVtZW50cy5lbGVtZW50cyxcbiAgICAgICAga2V5MmVsZW1lbnQgPSBfcmVmcmVzaGVkRWxlbWVudHMua2V5MmVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnQya2V5ID0gX3JlZnJlc2hlZEVsZW1lbnRzLmVsZW1lbnQya2V5O1xuXG4gICAgICAvLyBGaXJzdCB3ZSBzaG91bGQgZmluZCBjdXJyZW50IGZvY3VzZWQgTWVudUl0ZW0vU3ViTWVudSBlbGVtZW50XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGtleTJlbGVtZW50LmdldChhY3RpdmVLZXkpO1xuICAgICAgdmFyIGZvY3VzTWVudUVsZW1lbnQgPSBnZXRGb2N1c0VsZW1lbnQoYWN0aXZlRWxlbWVudCwgZWxlbWVudHMpO1xuICAgICAgdmFyIGZvY3VzTWVudUtleSA9IGVsZW1lbnQya2V5LmdldChmb2N1c01lbnVFbGVtZW50KTtcbiAgICAgIHZhciBvZmZzZXRPYmogPSBnZXRPZmZzZXQobW9kZSwgZ2V0S2V5UGF0aChmb2N1c01lbnVLZXksIHRydWUpLmxlbmd0aCA9PT0gMSwgaXNSdGwsIHdoaWNoKTtcblxuICAgICAgLy8gU29tZSBtb2RlIGRvIG5vdCBoYXZlIGZ1bGx5IGFycm93IG9wZXJhdGlvbiBsaWtlIGlubGluZVxuICAgICAgaWYgKCFvZmZzZXRPYmogJiYgd2hpY2ggIT09IEhPTUUgJiYgd2hpY2ggIT09IEVORCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFycm93IHByZXZlbnQgZGVmYXVsdCB0byBhdm9pZCBwYWdlIHNjcm9sbFxuICAgICAgaWYgKEFycm93S2V5cy5pbmNsdWRlcyh3aGljaCkgfHwgW0hPTUUsIEVORF0uaW5jbHVkZXMod2hpY2gpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIHZhciB0cnlGb2N1cyA9IGZ1bmN0aW9uIHRyeUZvY3VzKG1lbnVFbGVtZW50KSB7XG4gICAgICAgIGlmIChtZW51RWxlbWVudCkge1xuICAgICAgICAgIHZhciBmb2N1c1RhcmdldEVsZW1lbnQgPSBtZW51RWxlbWVudDtcblxuICAgICAgICAgIC8vIEZvY3VzIHRvIGxpbmsgaW5zdGVhZCBvZiBtZW51IGl0ZW0gaWYgcG9zc2libGVcbiAgICAgICAgICB2YXIgbGluayA9IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcbiAgICAgICAgICBpZiAobGluayAhPT0gbnVsbCAmJiBsaW5rICE9PSB2b2lkIDAgJiYgbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkge1xuICAgICAgICAgICAgZm9jdXNUYXJnZXRFbGVtZW50ID0gbGluaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRhcmdldEtleSA9IGVsZW1lbnQya2V5LmdldChtZW51RWxlbWVudCk7XG4gICAgICAgICAgdHJpZ2dlckFjdGl2ZUtleSh0YXJnZXRLZXkpO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRG8gbm90IGB1c2VFZmZlY3RgIGhlcmUgc2luY2UgYHRyeUZvY3VzYCBtYXkgdHJpZ2dlciBhc3luY1xuICAgICAgICAgICAqIHdoaWNoIG1ha2VzIFJlYWN0IHN5bmMgdXBkYXRlIHRoZSBgYWN0aXZlS2V5YFxuICAgICAgICAgICAqIHRoYXQgZm9yY2UgcmVuZGVyIGJlZm9yZSBgdXNlUmVmYCBzZXQgdGhlIG5leHQgYWN0aXZlS2V5XG4gICAgICAgICAgICovXG4gICAgICAgICAgY2xlYW5SYWYoKTtcbiAgICAgICAgICByYWZSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlUmVmLmN1cnJlbnQgPT09IHRhcmdldEtleSkge1xuICAgICAgICAgICAgICBmb2N1c1RhcmdldEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChbSE9NRSwgRU5EXS5pbmNsdWRlcyh3aGljaCkgfHwgb2Zmc2V0T2JqLnNpYmxpbmcgfHwgIWZvY3VzTWVudUVsZW1lbnQpIHtcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gU2libGluZyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBGaW5kIHdhbGthYmxlIGZvY3VzIG1lbnUgZWxlbWVudCBjb250YWluZXJcbiAgICAgICAgdmFyIHBhcmVudFF1ZXJ5Q29udGFpbmVyO1xuICAgICAgICBpZiAoIWZvY3VzTWVudUVsZW1lbnQgfHwgbW9kZSA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICBwYXJlbnRRdWVyeUNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudFF1ZXJ5Q29udGFpbmVyID0gZmluZENvbnRhaW5lclVMKGZvY3VzTWVudUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IG5leHQgZm9jdXMgZWxlbWVudFxuICAgICAgICB2YXIgdGFyZ2V0RWxlbWVudDtcbiAgICAgICAgdmFyIGZvY3VzYWJsZUVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMocGFyZW50UXVlcnlDb250YWluZXIsIGVsZW1lbnRzKTtcbiAgICAgICAgaWYgKHdoaWNoID09PSBIT01FKSB7XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKHdoaWNoID09PSBFTkQpIHtcbiAgICAgICAgICB0YXJnZXRFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGdldE5leHRGb2N1c0VsZW1lbnQocGFyZW50UXVlcnlDb250YWluZXIsIGVsZW1lbnRzLCBmb2N1c01lbnVFbGVtZW50LCBvZmZzZXRPYmoub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb2N1cyBtZW51IGl0ZW1cbiAgICAgICAgdHJ5Rm9jdXModGFyZ2V0RWxlbWVudCk7XG5cbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gSW5saW5lVHJpZ2dlciA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgfSBlbHNlIGlmIChvZmZzZXRPYmouaW5saW5lVHJpZ2dlcikge1xuICAgICAgICAvLyBJbmxpbmUgdHJpZ2dlciBubyBuZWVkIHN3aXRjaCB0byBzdWIgbWVudSBpdGVtXG4gICAgICAgIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3Blbihmb2N1c01lbnVLZXkpO1xuICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGV2ZWwgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICB9IGVsc2UgaWYgKG9mZnNldE9iai5vZmZzZXQgPiAwKSB7XG4gICAgICAgIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3Blbihmb2N1c01lbnVLZXksIHRydWUpO1xuICAgICAgICBjbGVhblJhZigpO1xuICAgICAgICByYWZSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQXN5bmMgc2hvdWxkIHJlc3luYyBlbGVtZW50c1xuICAgICAgICAgIHJlZnJlc2hlZEVsZW1lbnRzID0gcmVmcmVzaEVsZW1lbnRzKGtleXMsIGlkKTtcbiAgICAgICAgICB2YXIgY29udHJvbElkID0gZm9jdXNNZW51RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKTtcbiAgICAgICAgICB2YXIgc3ViUXVlcnlDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWQpO1xuXG4gICAgICAgICAgLy8gR2V0IHN1YiBmb2N1c2FibGUgbWVudSBpdGVtXG4gICAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQgPSBnZXROZXh0Rm9jdXNFbGVtZW50KHN1YlF1ZXJ5Q29udGFpbmVyLCByZWZyZXNoZWRFbGVtZW50cy5lbGVtZW50cyk7XG5cbiAgICAgICAgICAvLyBGb2N1cyBtZW51IGl0ZW1cbiAgICAgICAgICB0cnlGb2N1cyh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgfSwgNSk7XG4gICAgICB9IGVsc2UgaWYgKG9mZnNldE9iai5vZmZzZXQgPCAwKSB7XG4gICAgICAgIHZhciBrZXlQYXRoID0gZ2V0S2V5UGF0aChmb2N1c01lbnVLZXksIHRydWUpO1xuICAgICAgICB2YXIgcGFyZW50S2V5ID0ga2V5UGF0aFtrZXlQYXRoLmxlbmd0aCAtIDJdO1xuICAgICAgICB2YXIgcGFyZW50TWVudUVsZW1lbnQgPSBrZXkyZWxlbWVudC5nZXQocGFyZW50S2V5KTtcblxuICAgICAgICAvLyBGb2N1cyBtZW51IGl0ZW1cbiAgICAgICAgdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuKHBhcmVudEtleSwgZmFsc2UpO1xuICAgICAgICB0cnlGb2N1cyhwYXJlbnRNZW51RWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGFzcyBvcmlnaW4ga2V5IGRvd24gZXZlbnRcbiAgICBvcmlnaW5PbktleURvd24gPT09IG51bGwgfHwgb3JpZ2luT25LZXlEb3duID09PSB2b2lkIDAgfHwgb3JpZ2luT25LZXlEb3duKGUpO1xuICB9O1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUFjdGl2ZShldmVudEtleSwgZGlzYWJsZWQsIG9uTW91c2VFbnRlciwgb25Nb3VzZUxlYXZlKSB7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIGFjdGl2ZUtleSA9IF9SZWFjdCR1c2VDb250ZXh0LmFjdGl2ZUtleSxcbiAgICBvbkFjdGl2ZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uQWN0aXZlLFxuICAgIG9uSW5hY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkluYWN0aXZlO1xuICB2YXIgcmV0ID0ge1xuICAgIGFjdGl2ZTogYWN0aXZlS2V5ID09PSBldmVudEtleVxuICB9O1xuXG4gIC8vIFNraXAgd2hlbiBkaXNhYmxlZFxuICBpZiAoIWRpc2FibGVkKSB7XG4gICAgcmV0Lm9uTW91c2VFbnRlciA9IGZ1bmN0aW9uIChkb21FdmVudCkge1xuICAgICAgb25Nb3VzZUVudGVyID09PSBudWxsIHx8IG9uTW91c2VFbnRlciA9PT0gdm9pZCAwIHx8IG9uTW91c2VFbnRlcih7XG4gICAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAgIGRvbUV2ZW50OiBkb21FdmVudFxuICAgICAgfSk7XG4gICAgICBvbkFjdGl2ZShldmVudEtleSk7XG4gICAgfTtcbiAgICByZXQub25Nb3VzZUxlYXZlID0gZnVuY3Rpb24gKGRvbUV2ZW50KSB7XG4gICAgICBvbk1vdXNlTGVhdmUgPT09IG51bGwgfHwgb25Nb3VzZUxlYXZlID09PSB2b2lkIDAgfHwgb25Nb3VzZUxlYXZlKHtcbiAgICAgICAga2V5OiBldmVudEtleSxcbiAgICAgICAgZG9tRXZlbnQ6IGRvbUV2ZW50XG4gICAgICB9KTtcbiAgICAgIG9uSW5hY3RpdmUoZXZlbnRLZXkpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VEaXJlY3Rpb25TdHlsZShsZXZlbCkge1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBtb2RlID0gX1JlYWN0JHVzZUNvbnRleHQubW9kZSxcbiAgICBydGwgPSBfUmVhY3QkdXNlQ29udGV4dC5ydGwsXG4gICAgaW5saW5lSW5kZW50ID0gX1JlYWN0JHVzZUNvbnRleHQuaW5saW5lSW5kZW50O1xuICBpZiAobW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgbGVuID0gbGV2ZWw7XG4gIHJldHVybiBydGwgPyB7XG4gICAgcGFkZGluZ1JpZ2h0OiBsZW4gKiBpbmxpbmVJbmRlbnRcbiAgfSA6IHtcbiAgICBwYWRkaW5nTGVmdDogbGVuICogaW5saW5lSW5kZW50XG4gIH07XG59IiwiaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCB7IG5leHRTbGljZSB9IGZyb20gXCIuLi91dGlscy90aW1lVXRpbFwiO1xudmFyIFBBVEhfU1BMSVQgPSAnX19SQ19VVElMX1BBVEhfU1BMSVRfXyc7XG52YXIgZ2V0UGF0aFN0ciA9IGZ1bmN0aW9uIGdldFBhdGhTdHIoa2V5UGF0aCkge1xuICByZXR1cm4ga2V5UGF0aC5qb2luKFBBVEhfU1BMSVQpO1xufTtcbnZhciBnZXRQYXRoS2V5cyA9IGZ1bmN0aW9uIGdldFBhdGhLZXlzKGtleVBhdGhTdHIpIHtcbiAgcmV0dXJuIGtleVBhdGhTdHIuc3BsaXQoUEFUSF9TUExJVCk7XG59O1xuZXhwb3J0IHZhciBPVkVSRkxPV19LRVkgPSAncmMtbWVudS1tb3JlJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUtleVJlY29yZHMoKSB7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgaW50ZXJuYWxGb3JjZVVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciBrZXkycGF0aFJlZiA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICB2YXIgcGF0aDJrZXlSZWYgPSB1c2VSZWYobmV3IE1hcCgpKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZShbXSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTMsIDIpLFxuICAgIG92ZXJmbG93S2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0T3ZlcmZsb3dLZXlzID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIHVwZGF0ZVJlZiA9IHVzZVJlZigwKTtcbiAgdmFyIGRlc3Ryb3lSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICBpZiAoIWRlc3Ryb3lSZWYuY3VycmVudCkge1xuICAgICAgaW50ZXJuYWxGb3JjZVVwZGF0ZSh7fSk7XG4gICAgfVxuICB9O1xuICB2YXIgcmVnaXN0ZXJQYXRoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleSwga2V5UGF0aCkge1xuICAgIC8vIFdhcm5pbmcgZm9yIGludmFsaWRhdGUgb3IgZHVwbGljYXRlZCBga2V5YFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuaW5nKCFrZXkycGF0aFJlZi5jdXJyZW50LmhhcyhrZXkpLCBcIkR1cGxpY2F0ZWQga2V5ICdcIi5jb25jYXQoa2V5LCBcIicgdXNlZCBpbiBNZW51IGJ5IHBhdGggW1wiKS5jb25jYXQoa2V5UGF0aC5qb2luKCcgPiAnKSwgXCJdXCIpKTtcbiAgICB9XG5cbiAgICAvLyBGaWxsIG1hcFxuICAgIHZhciBjb25uZWN0ZWRQYXRoID0gZ2V0UGF0aFN0cihrZXlQYXRoKTtcbiAgICBwYXRoMmtleVJlZi5jdXJyZW50LnNldChjb25uZWN0ZWRQYXRoLCBrZXkpO1xuICAgIGtleTJwYXRoUmVmLmN1cnJlbnQuc2V0KGtleSwgY29ubmVjdGVkUGF0aCk7XG4gICAgdXBkYXRlUmVmLmN1cnJlbnQgKz0gMTtcbiAgICB2YXIgaWQgPSB1cGRhdGVSZWYuY3VycmVudDtcbiAgICBuZXh0U2xpY2UoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlkID09PSB1cGRhdGVSZWYuY3VycmVudCkge1xuICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciB1bnJlZ2lzdGVyUGF0aCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXksIGtleVBhdGgpIHtcbiAgICB2YXIgY29ubmVjdGVkUGF0aCA9IGdldFBhdGhTdHIoa2V5UGF0aCk7XG4gICAgcGF0aDJrZXlSZWYuY3VycmVudC5kZWxldGUoY29ubmVjdGVkUGF0aCk7XG4gICAga2V5MnBhdGhSZWYuY3VycmVudC5kZWxldGUoa2V5KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmcmVzaE92ZXJmbG93S2V5cyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgc2V0T3ZlcmZsb3dLZXlzKGtleXMpO1xuICB9LCBbXSk7XG4gIHZhciBnZXRLZXlQYXRoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50S2V5LCBpbmNsdWRlT3ZlcmZsb3cpIHtcbiAgICB2YXIgZnVsbFBhdGggPSBrZXkycGF0aFJlZi5jdXJyZW50LmdldChldmVudEtleSkgfHwgJyc7XG4gICAgdmFyIGtleXMgPSBnZXRQYXRoS2V5cyhmdWxsUGF0aCk7XG4gICAgaWYgKGluY2x1ZGVPdmVyZmxvdyAmJiBvdmVyZmxvd0tleXMuaW5jbHVkZXMoa2V5c1swXSkpIHtcbiAgICAgIGtleXMudW5zaGlmdChPVkVSRkxPV19LRVkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbiAgfSwgW292ZXJmbG93S2V5c10pO1xuICB2YXIgaXNTdWJQYXRoS2V5ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHBhdGhLZXlzLCBldmVudEtleSkge1xuICAgIHJldHVybiBwYXRoS2V5cy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtICE9PSB1bmRlZmluZWQ7XG4gICAgfSkuc29tZShmdW5jdGlvbiAocGF0aEtleSkge1xuICAgICAgdmFyIHBhdGhLZXlMaXN0ID0gZ2V0S2V5UGF0aChwYXRoS2V5LCB0cnVlKTtcbiAgICAgIHJldHVybiBwYXRoS2V5TGlzdC5pbmNsdWRlcyhldmVudEtleSk7XG4gICAgfSk7XG4gIH0sIFtnZXRLZXlQYXRoXSk7XG4gIHZhciBnZXRLZXlzID0gZnVuY3Rpb24gZ2V0S2V5cygpIHtcbiAgICB2YXIga2V5cyA9IF90b0NvbnN1bWFibGVBcnJheShrZXkycGF0aFJlZi5jdXJyZW50LmtleXMoKSk7XG4gICAgaWYgKG92ZXJmbG93S2V5cy5sZW5ndGgpIHtcbiAgICAgIGtleXMucHVzaChPVkVSRkxPV19LRVkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvKipcbiAgICogRmluZCBjdXJyZW50IGtleSByZWxhdGVkIGNoaWxkIHBhdGgga2V5c1xuICAgKi9cbiAgdmFyIGdldFN1YlBhdGhLZXlzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjb25uZWN0ZWRQYXRoID0gXCJcIi5jb25jYXQoa2V5MnBhdGhSZWYuY3VycmVudC5nZXQoa2V5KSkuY29uY2F0KFBBVEhfU1BMSVQpO1xuICAgIHZhciBwYXRoS2V5cyA9IG5ldyBTZXQoKTtcbiAgICBfdG9Db25zdW1hYmxlQXJyYXkocGF0aDJrZXlSZWYuY3VycmVudC5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24gKHBhdGhLZXkpIHtcbiAgICAgIGlmIChwYXRoS2V5LnN0YXJ0c1dpdGgoY29ubmVjdGVkUGF0aCkpIHtcbiAgICAgICAgcGF0aEtleXMuYWRkKHBhdGgya2V5UmVmLmN1cnJlbnQuZ2V0KHBhdGhLZXkpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGF0aEtleXM7XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzdHJveVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiB7XG4gICAgLy8gUmVnaXN0ZXJcbiAgICByZWdpc3RlclBhdGg6IHJlZ2lzdGVyUGF0aCxcbiAgICB1bnJlZ2lzdGVyUGF0aDogdW5yZWdpc3RlclBhdGgsXG4gICAgcmVmcmVzaE92ZXJmbG93S2V5czogcmVmcmVzaE92ZXJmbG93S2V5cyxcbiAgICAvLyBVdGlsXG4gICAgaXNTdWJQYXRoS2V5OiBpc1N1YlBhdGhLZXksXG4gICAgZ2V0S2V5UGF0aDogZ2V0S2V5UGF0aCxcbiAgICBnZXRLZXlzOiBnZXRLZXlzLFxuICAgIGdldFN1YlBhdGhLZXlzOiBnZXRTdWJQYXRoS2V5c1xuICB9O1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBDYWNoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm4gc2FtZSByZWYgaW5zdGVhZC5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgY29udGV4dCBvcHRpbWl6YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU1lbW9DYWxsYmFjayhmdW5jKSB7XG4gIHZhciBmdW5SZWYgPSBSZWFjdC51c2VSZWYoZnVuYyk7XG4gIGZ1blJlZi5jdXJyZW50ID0gZnVuYztcbiAgdmFyIGNhbGxiYWNrID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZnVuUmVmJGN1cnJlbnQ7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICByZXR1cm4gKF9mdW5SZWYkY3VycmVudCA9IGZ1blJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfZnVuUmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mdW5SZWYkY3VycmVudC5jYWxsLmFwcGx5KF9mdW5SZWYkY3VycmVudCwgW2Z1blJlZl0uY29uY2F0KGFyZ3MpKTtcbiAgfSwgW10pO1xuICByZXR1cm4gZnVuYyA/IGNhbGxiYWNrIDogdW5kZWZpbmVkO1xufSIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG52YXIgdW5pcXVlUHJlZml4ID0gTWF0aC5yYW5kb20oKS50b0ZpeGVkKDUpLnRvU3RyaW5nKCkuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJZCA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VVVUlEKGlkKSB7XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShpZCwge1xuICAgICAgdmFsdWU6IGlkXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgdXVpZCA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0VVVJRCA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJuYWxJZCArPSAxO1xuICAgIHZhciBuZXdJZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcgPyAndGVzdCcgOiBcIlwiLmNvbmNhdCh1bmlxdWVQcmVmaXgsIFwiLVwiKS5jb25jYXQoaW50ZXJuYWxJZCk7XG4gICAgc2V0VVVJRChcInJjLW1lbnUtdXVpZC1cIi5jb25jYXQobmV3SWQpKTtcbiAgfSwgW10pO1xuICByZXR1cm4gdXVpZDtcbn0iLCJpbXBvcnQgTWVudSBmcm9tIFwiLi9NZW51XCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmltcG9ydCBTdWJNZW51IGZyb20gXCIuL1N1Yk1lbnVcIjtcbmltcG9ydCBNZW51SXRlbUdyb3VwIGZyb20gXCIuL01lbnVJdGVtR3JvdXBcIjtcbmltcG9ydCB7IHVzZUZ1bGxQYXRoIH0gZnJvbSBcIi4vY29udGV4dC9QYXRoQ29udGV4dFwiO1xuaW1wb3J0IERpdmlkZXIgZnJvbSBcIi4vRGl2aWRlclwiO1xuZXhwb3J0IHsgU3ViTWVudSwgTWVudUl0ZW0gYXMgSXRlbSwgTWVudUl0ZW0sIE1lbnVJdGVtR3JvdXAsIE1lbnVJdGVtR3JvdXAgYXMgSXRlbUdyb3VwLCBEaXZpZGVyLCAvKiogQHByaXZhdGUgT25seSB1c2VkIGZvciBhbnRkIGludGVybmFsLiBEbyBub3QgdXNlIGluIHlvdXIgcHJvZHVjdGlvbi4gKi9cbnVzZUZ1bGxQYXRoIH07XG52YXIgRXhwb3J0TWVudSA9IE1lbnU7XG5FeHBvcnRNZW51Lkl0ZW0gPSBNZW51SXRlbTtcbkV4cG9ydE1lbnUuU3ViTWVudSA9IFN1Yk1lbnU7XG5FeHBvcnRNZW51Lkl0ZW1Hcm91cCA9IE1lbnVJdGVtR3JvdXA7XG5FeHBvcnRNZW51LkRpdmlkZXIgPSBEaXZpZGVyO1xuZXhwb3J0IGRlZmF1bHQgRXhwb3J0TWVudTsiLCJ2YXIgYXV0b0FkanVzdE92ZXJmbG93ID0ge1xuICBhZGp1c3RYOiAxLFxuICBhZGp1c3RZOiAxXG59O1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0ge1xuICB0b3BMZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ2JsJywgJ3RsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICB0b3BSaWdodDoge1xuICAgIHBvaW50czogWydicicsICd0ciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgYm90dG9tTGVmdDoge1xuICAgIHBvaW50czogWyd0bCcsICdibCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgYm90dG9tUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsndHInLCAnYnInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRUb3A6IHtcbiAgICBwb2ludHM6IFsndHInLCAndGwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYnInLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIHJpZ2h0VG9wOiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ3RyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICByaWdodEJvdHRvbToge1xuICAgIHBvaW50czogWydibCcsICdiciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfVxufTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50c1J0bCA9IHtcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydibCcsICd0bCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgdG9wUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsnYnInLCAndHInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbUxlZnQ6IHtcbiAgICBwb2ludHM6IFsndGwnLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbVJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ2JyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICByaWdodFRvcDoge1xuICAgIHBvaW50czogWyd0cicsICd0bCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgcmlnaHRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYnInLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRUb3A6IHtcbiAgICBwb2ludHM6IFsndGwnLCAndHInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGxlZnRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYmwnLCAnYnInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBwbGFjZW1lbnRzOyIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgdG9BcnJheSBmcm9tIFwicmMtdXRpbC9lcy9DaGlsZHJlbi90b0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDaGlsZHJlbihjaGlsZHJlbiwga2V5UGF0aCkge1xuICByZXR1cm4gdG9BcnJheShjaGlsZHJlbikubWFwKGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHZhciBfZXZlbnRLZXksIF9jaGlsZCRwcm9wcztcbiAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG4gICAgICB2YXIgZXZlbnRLZXkgPSAoX2V2ZW50S2V5ID0gKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKSA9PT0gbnVsbCB8fCBfY2hpbGQkcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jaGlsZCRwcm9wcy5ldmVudEtleSkgIT09IG51bGwgJiYgX2V2ZW50S2V5ICE9PSB2b2lkIDAgPyBfZXZlbnRLZXkgOiBrZXk7XG4gICAgICB2YXIgZW1wdHlLZXkgPSBldmVudEtleSA9PT0gbnVsbCB8fCBldmVudEtleSA9PT0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtcHR5S2V5KSB7XG4gICAgICAgIGV2ZW50S2V5ID0gXCJ0bXBfa2V5LVwiLmNvbmNhdChbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGtleVBhdGgpLCBbaW5kZXhdKS5qb2luKCctJykpO1xuICAgICAgfVxuICAgICAgdmFyIGNsb25lUHJvcHMgPSB7XG4gICAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAgIGV2ZW50S2V5OiBldmVudEtleVxuICAgICAgfTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGVtcHR5S2V5KSB7XG4gICAgICAgIGNsb25lUHJvcHMud2FybktleSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgY2xvbmVQcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZDtcbiAgfSk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIGdldE1vdGlvbihtb2RlLCBtb3Rpb24sIGRlZmF1bHRNb3Rpb25zKSB7XG4gIGlmIChtb3Rpb24pIHtcbiAgICByZXR1cm4gbW90aW9uO1xuICB9XG4gIGlmIChkZWZhdWx0TW90aW9ucykge1xuICAgIHJldHVybiBkZWZhdWx0TW90aW9uc1ttb2RlXSB8fCBkZWZhdWx0TW90aW9ucy5vdGhlcjtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJjaGlsZHJlblwiLCBcImtleVwiLCBcInR5cGVcIiwgXCJleHRyYVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEaXZpZGVyIGZyb20gXCIuLi9EaXZpZGVyXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcIi4uL01lbnVJdGVtXCI7XG5pbXBvcnQgTWVudUl0ZW1Hcm91cCBmcm9tIFwiLi4vTWVudUl0ZW1Hcm91cFwiO1xuaW1wb3J0IFN1Yk1lbnUgZnJvbSBcIi4uL1N1Yk1lbnVcIjtcbmltcG9ydCB7IHBhcnNlQ2hpbGRyZW4gfSBmcm9tIFwiLi9jb21tb25VdGlsXCI7XG5mdW5jdGlvbiBjb252ZXJ0SXRlbXNUb05vZGVzKGxpc3QsIGNvbXBvbmVudHMsIHByZWZpeENscykge1xuICB2YXIgTWVyZ2VkTWVudUl0ZW0gPSBjb21wb25lbnRzLml0ZW0sXG4gICAgTWVyZ2VkTWVudUl0ZW1Hcm91cCA9IGNvbXBvbmVudHMuZ3JvdXAsXG4gICAgTWVyZ2VkU3ViTWVudSA9IGNvbXBvbmVudHMuc3VibWVudSxcbiAgICBNZXJnZWREaXZpZGVyID0gY29tcG9uZW50cy5kaXZpZGVyO1xuICByZXR1cm4gKGxpc3QgfHwgW10pLm1hcChmdW5jdGlvbiAob3B0LCBpbmRleCkge1xuICAgIGlmIChvcHQgJiYgX3R5cGVvZihvcHQpID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIF9yZWYgPSBvcHQsXG4gICAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBrZXkgPSBfcmVmLmtleSxcbiAgICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgICAgZXh0cmEgPSBfcmVmLmV4dHJhLFxuICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBtZXJnZWRLZXkgPSBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBcInRtcC1cIi5jb25jYXQoaW5kZXgpO1xuXG4gICAgICAvLyBNZW51SXRlbUdyb3VwICYgU3ViTWVudUl0ZW1cbiAgICAgIGlmIChjaGlsZHJlbiB8fCB0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgLy8gR3JvdXBcbiAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkTWVudUl0ZW1Hcm91cCwgX2V4dGVuZHMoe1xuICAgICAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgICAgICB9LCByZXN0UHJvcHMsIHtcbiAgICAgICAgICAgIHRpdGxlOiBsYWJlbFxuICAgICAgICAgIH0pLCBjb252ZXJ0SXRlbXNUb05vZGVzKGNoaWxkcmVuLCBjb21wb25lbnRzLCBwcmVmaXhDbHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN1YiBNZW51XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZXJnZWRTdWJNZW51LCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgICAgfSwgcmVzdFByb3BzLCB7XG4gICAgICAgICAgdGl0bGU6IGxhYmVsXG4gICAgICAgIH0pLCBjb252ZXJ0SXRlbXNUb05vZGVzKGNoaWxkcmVuLCBjb21wb25lbnRzLCBwcmVmaXhDbHMpKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWVudUl0ZW0gJiBEaXZpZGVyXG4gICAgICBpZiAodHlwZSA9PT0gJ2RpdmlkZXInKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZXJnZWREaXZpZGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgICAgfSwgcmVzdFByb3BzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkTWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICAgICAga2V5OiBtZXJnZWRLZXlcbiAgICAgIH0sIHJlc3RQcm9wcywge1xuICAgICAgICBleHRyYTogZXh0cmFcbiAgICAgIH0pLCBsYWJlbCwgKCEhZXh0cmEgfHwgZXh0cmEgPT09IDApICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pdGVtLWV4dHJhXCIpXG4gICAgICB9LCBleHRyYSkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uIChvcHQpIHtcbiAgICByZXR1cm4gb3B0O1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1zKGNoaWxkcmVuLCBpdGVtcywga2V5UGF0aCwgY29tcG9uZW50cywgcHJlZml4Q2xzKSB7XG4gIHZhciBjaGlsZE5vZGVzID0gY2hpbGRyZW47XG4gIHZhciBtZXJnZWRDb21wb25lbnRzID0gX29iamVjdFNwcmVhZCh7XG4gICAgZGl2aWRlcjogRGl2aWRlcixcbiAgICBpdGVtOiBNZW51SXRlbSxcbiAgICBncm91cDogTWVudUl0ZW1Hcm91cCxcbiAgICBzdWJtZW51OiBTdWJNZW51XG4gIH0sIGNvbXBvbmVudHMpO1xuICBpZiAoaXRlbXMpIHtcbiAgICBjaGlsZE5vZGVzID0gY29udmVydEl0ZW1zVG9Ob2RlcyhpdGVtcywgbWVyZ2VkQ29tcG9uZW50cywgcHJlZml4Q2xzKTtcbiAgfVxuICByZXR1cm4gcGFyc2VDaGlsZHJlbihjaGlsZE5vZGVzLCBrZXlQYXRoKTtcbn0iLCJleHBvcnQgZnVuY3Rpb24gbmV4dFNsaWNlKGNhbGxiYWNrKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiaXRlbVwiXTtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcblxuLyoqXG4gKiBgb25DbGlja2AgZXZlbnQgcmV0dXJuIGBpbmZvLml0ZW1gIHdoaWNoIHBvaW50IHRvIHJlYWN0IG5vZGUgZGlyZWN0bHkuXG4gKiBXZSBzaG91bGQgd2FybmluZyB0aGlzIHNpbmNlIGl0IHdpbGwgbm90IHdvcmsgb24gRkMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJuSXRlbVByb3AoX3JlZikge1xuICB2YXIgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICByZXN0SW5mbyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdEluZm8sICdpdGVtJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgd2FybmluZyhmYWxzZSwgJ2BpbmZvLml0ZW1gIGlzIGRlcHJlY2F0ZWQgc2luY2Ugd2Ugd2lsbCBtb3ZlIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IG5vdCBwcm92aWRlcyBSZWFjdCBOb2RlIGluc3RhbmNlIGluIGZ1dHVyZS4nKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN0SW5mbztcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZGVmYXVsdC1wcm9wcy1tYXRjaC1wcm9wLXR5cGVzLCByZWFjdC9uby1tdWx0aS1jb21wLCByZWFjdC9wcm9wLXR5cGVzICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBmaW5kRE9NTm9kZSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vZmluZERPTU5vZGVcIjtcbmltcG9ydCB7IGZpbGxSZWYsIGdldE5vZGVSZWYsIHN1cHBvcnRSZWYgfSBmcm9tIFwicmMtdXRpbC9lcy9yZWZcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgRG9tV3JhcHBlciBmcm9tIFwiLi9Eb21XcmFwcGVyXCI7XG5pbXBvcnQgdXNlU3RhdHVzIGZyb20gXCIuL2hvb2tzL3VzZVN0YXR1c1wiO1xuaW1wb3J0IHsgaXNBY3RpdmUgfSBmcm9tIFwiLi9ob29rcy91c2VTdGVwUXVldWVcIjtcbmltcG9ydCB7IFNUQVRVU19OT05FLCBTVEVQX1BSRVBBUkUsIFNURVBfU1RBUlQgfSBmcm9tIFwiLi9pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGdldFRyYW5zaXRpb25OYW1lLCBzdXBwb3J0VHJhbnNpdGlvbiB9IGZyb20gXCIuL3V0aWwvbW90aW9uXCI7XG4vKipcbiAqIGB0cmFuc2l0aW9uU3VwcG9ydGAgaXMgdXNlZCBmb3Igbm9uZSB0cmFuc2l0aW9uIHRlc3QgY2FzZS5cbiAqIERlZmF1bHQgd2UgdXNlIGJyb3dzZXIgdHJhbnNpdGlvbiBldmVudCBzdXBwb3J0IGNoZWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuQ1NTTW90aW9uKGNvbmZpZykge1xuICB2YXIgdHJhbnNpdGlvblN1cHBvcnQgPSBjb25maWc7XG4gIGlmIChfdHlwZW9mKGNvbmZpZykgPT09ICdvYmplY3QnKSB7XG4gICAgdHJhbnNpdGlvblN1cHBvcnQgPSBjb25maWcudHJhbnNpdGlvblN1cHBvcnQ7XG4gIH1cbiAgZnVuY3Rpb24gaXNTdXBwb3J0VHJhbnNpdGlvbihwcm9wcywgY29udGV4dE1vdGlvbikge1xuICAgIHJldHVybiAhIShwcm9wcy5tb3Rpb25OYW1lICYmIHRyYW5zaXRpb25TdXBwb3J0ICYmIGNvbnRleHRNb3Rpb24gIT09IGZhbHNlKTtcbiAgfVxuICB2YXIgQ1NTTW90aW9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX3Byb3BzJHZpc2libGUgPSBwcm9wcy52aXNpYmxlLFxuICAgICAgdmlzaWJsZSA9IF9wcm9wcyR2aXNpYmxlID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJHZpc2libGUsXG4gICAgICBfcHJvcHMkcmVtb3ZlT25MZWF2ZSA9IHByb3BzLnJlbW92ZU9uTGVhdmUsXG4gICAgICByZW1vdmVPbkxlYXZlID0gX3Byb3BzJHJlbW92ZU9uTGVhdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkcmVtb3ZlT25MZWF2ZSxcbiAgICAgIGZvcmNlUmVuZGVyID0gcHJvcHMuZm9yY2VSZW5kZXIsXG4gICAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgbW90aW9uTmFtZSA9IHByb3BzLm1vdGlvbk5hbWUsXG4gICAgICBsZWF2ZWRDbGFzc05hbWUgPSBwcm9wcy5sZWF2ZWRDbGFzc05hbWUsXG4gICAgICBldmVudFByb3BzID0gcHJvcHMuZXZlbnRQcm9wcztcbiAgICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KENvbnRleHQpLFxuICAgICAgY29udGV4dE1vdGlvbiA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vdGlvbjtcbiAgICB2YXIgc3VwcG9ydE1vdGlvbiA9IGlzU3VwcG9ydFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHRNb3Rpb24pO1xuXG4gICAgLy8gUmVmIHRvIHRoZSByZWFjdCBub2RlLCBpdCBtYXkgYmUgYSBIVE1MRWxlbWVudFxuICAgIHZhciBub2RlUmVmID0gdXNlUmVmKCk7XG4gICAgLy8gUmVmIHRvIHRoZSBkb20gd3JhcHBlciBpbiBjYXNlIHJlZiBjYW4gbm90IHBhc3MgdG8gSFRNTEVsZW1lbnRcbiAgICB2YXIgd3JhcHBlck5vZGVSZWYgPSB1c2VSZWYoKTtcbiAgICBmdW5jdGlvbiBnZXREb21FbGVtZW50KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSGVyZSB3ZSdyZSBhdm9pZGluZyBjYWxsIGZvciBmaW5kRE9NTm9kZSBzaW5jZSBpdCdzIGRlcHJlY2F0ZWRcbiAgICAgICAgLy8gaW4gc3RyaWN0IG1vZGUuIFdlJ3JlIGNhbGxpbmcgaXQgb25seSB3aGVuIG5vZGUgcmVmIGlzIG5vdFxuICAgICAgICAvLyBhbiBpbnN0YW5jZSBvZiBET00gSFRNTEVsZW1lbnQuIE90aGVyd2lzZSB1c2VcbiAgICAgICAgLy8gZmluZERPTU5vZGUgYXMgYSBmaW5hbCByZXNvcnRcbiAgICAgICAgcmV0dXJuIG5vZGVSZWYuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbm9kZVJlZi5jdXJyZW50IDogZmluZERPTU5vZGUod3JhcHBlck5vZGVSZWYuY3VycmVudCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIE9ubHkgaGFwcGVuIHdoZW4gYG1vdGlvbkRlYWRsaW5lYCB0cmlnZ2VyIGJ1dCBlbGVtZW50IHJlbW92ZWQuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgX3VzZVN0YXR1cyA9IHVzZVN0YXR1cyhzdXBwb3J0TW90aW9uLCB2aXNpYmxlLCBnZXREb21FbGVtZW50LCBwcm9wcyksXG4gICAgICBfdXNlU3RhdHVzMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0dXMsIDQpLFxuICAgICAgc3RhdHVzID0gX3VzZVN0YXR1czJbMF0sXG4gICAgICBzdGF0dXNTdGVwID0gX3VzZVN0YXR1czJbMV0sXG4gICAgICBzdGF0dXNTdHlsZSA9IF91c2VTdGF0dXMyWzJdLFxuICAgICAgbWVyZ2VkVmlzaWJsZSA9IF91c2VTdGF0dXMyWzNdO1xuXG4gICAgLy8gUmVjb3JkIHdoZXRoZXIgY29udGVudCBoYXMgcmVuZGVyZWRcbiAgICAvLyBXaWxsIHJldHVybiBudWxsIGZvciB1bi1yZW5kZXJlZCBldmVuIHdoZW4gYHJlbW92ZU9uTGVhdmU9e2ZhbHNlfWBcbiAgICB2YXIgcmVuZGVyZWRSZWYgPSBSZWFjdC51c2VSZWYobWVyZ2VkVmlzaWJsZSk7XG4gICAgaWYgKG1lcmdlZFZpc2libGUpIHtcbiAgICAgIHJlbmRlcmVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT0gUmVmcyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFyIHNldE5vZGVSZWYgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobm9kZSkge1xuICAgICAgbm9kZVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICAgIGZpbGxSZWYocmVmLCBub2RlKTtcbiAgICB9LCBbcmVmXSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhciBtb3Rpb25DaGlsZHJlbjtcbiAgICB2YXIgbWVyZ2VkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV2ZW50UHJvcHMpLCB7fSwge1xuICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgIH0pO1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIC8vIE5vIGNoaWxkcmVuXG4gICAgICBtb3Rpb25DaGlsZHJlbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IFNUQVRVU19OT05FKSB7XG4gICAgICAvLyBTdGFibGUgY2hpbGRyZW5cbiAgICAgIGlmIChtZXJnZWRWaXNpYmxlKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZCh7fSwgbWVyZ2VkUHJvcHMpLCBzZXROb2RlUmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoIXJlbW92ZU9uTGVhdmUgJiYgcmVuZGVyZWRSZWYuY3VycmVudCAmJiBsZWF2ZWRDbGFzc05hbWUpIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSBjaGlsZHJlbihfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZFByb3BzKSwge30sIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGxlYXZlZENsYXNzTmFtZVxuICAgICAgICB9KSwgc2V0Tm9kZVJlZik7XG4gICAgICB9IGVsc2UgaWYgKGZvcmNlUmVuZGVyIHx8ICFyZW1vdmVPbkxlYXZlICYmICFsZWF2ZWRDbGFzc05hbWUpIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSBjaGlsZHJlbihfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZFByb3BzKSwge30sIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgfVxuICAgICAgICB9KSwgc2V0Tm9kZVJlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb3Rpb25DaGlsZHJlbiA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIG1vdGlvblxuICAgICAgdmFyIHN0YXR1c1N1ZmZpeDtcbiAgICAgIGlmIChzdGF0dXNTdGVwID09PSBTVEVQX1BSRVBBUkUpIHtcbiAgICAgICAgc3RhdHVzU3VmZml4ID0gJ3ByZXBhcmUnO1xuICAgICAgfSBlbHNlIGlmIChpc0FjdGl2ZShzdGF0dXNTdGVwKSkge1xuICAgICAgICBzdGF0dXNTdWZmaXggPSAnYWN0aXZlJztcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzU3RlcCA9PT0gU1RFUF9TVEFSVCkge1xuICAgICAgICBzdGF0dXNTdWZmaXggPSAnc3RhcnQnO1xuICAgICAgfVxuICAgICAgdmFyIG1vdGlvbkNscyA9IGdldFRyYW5zaXRpb25OYW1lKG1vdGlvbk5hbWUsIFwiXCIuY29uY2F0KHN0YXR1cywgXCItXCIpLmNvbmNhdChzdGF0dXNTdWZmaXgpKTtcbiAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZXJnZWRQcm9wcyksIHt9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhnZXRUcmFuc2l0aW9uTmFtZShtb3Rpb25OYW1lLCBzdGF0dXMpLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBtb3Rpb25DbHMsIG1vdGlvbkNscyAmJiBzdGF0dXNTdWZmaXgpLCBtb3Rpb25OYW1lLCB0eXBlb2YgbW90aW9uTmFtZSA9PT0gJ3N0cmluZycpKSxcbiAgICAgICAgc3R5bGU6IHN0YXR1c1N0eWxlXG4gICAgICB9KSwgc2V0Tm9kZVJlZik7XG4gICAgfVxuXG4gICAgLy8gQXV0byBpbmplY3QgcmVmIGlmIGNoaWxkIG5vZGUgbm90IGhhdmUgYHJlZmAgcHJvcHNcbiAgICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChtb3Rpb25DaGlsZHJlbikgJiYgc3VwcG9ydFJlZihtb3Rpb25DaGlsZHJlbikpIHtcbiAgICAgIHZhciBvcmlnaW5Ob2RlUmVmID0gZ2V0Tm9kZVJlZihtb3Rpb25DaGlsZHJlbik7XG4gICAgICBpZiAoIW9yaWdpbk5vZGVSZWYpIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KG1vdGlvbkNoaWxkcmVuLCB7XG4gICAgICAgICAgcmVmOiBzZXROb2RlUmVmXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG9tV3JhcHBlciwge1xuICAgICAgcmVmOiB3cmFwcGVyTm9kZVJlZlxuICAgIH0sIG1vdGlvbkNoaWxkcmVuKTtcbiAgfSk7XG4gIENTU01vdGlvbi5kaXNwbGF5TmFtZSA9ICdDU1NNb3Rpb24nO1xuICByZXR1cm4gQ1NTTW90aW9uO1xufVxuZXhwb3J0IGRlZmF1bHQgZ2VuQ1NTTW90aW9uKHN1cHBvcnRUcmFuc2l0aW9uKTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9jcmVhdGVTdXBlciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXJcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJvblZpc2libGVDaGFuZ2VkXCIsIFwib25BbGxSZW1vdmVkXCJdLFxuICBfZXhjbHVkZWQyID0gW1wic3RhdHVzXCJdO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBPcmlnaW5DU1NNb3Rpb24gZnJvbSBcIi4vQ1NTTW90aW9uXCI7XG5pbXBvcnQgeyBkaWZmS2V5cywgcGFyc2VLZXlzLCBTVEFUVVNfQURELCBTVEFUVVNfS0VFUCwgU1RBVFVTX1JFTU9WRSwgU1RBVFVTX1JFTU9WRUQgfSBmcm9tIFwiLi91dGlsL2RpZmZcIjtcbmltcG9ydCB7IHN1cHBvcnRUcmFuc2l0aW9uIH0gZnJvbSBcIi4vdXRpbC9tb3Rpb25cIjtcbnZhciBNT1RJT05fUFJPUF9OQU1FUyA9IFsnZXZlbnRQcm9wcycsICd2aXNpYmxlJywgJ2NoaWxkcmVuJywgJ21vdGlvbk5hbWUnLCAnbW90aW9uQXBwZWFyJywgJ21vdGlvbkVudGVyJywgJ21vdGlvbkxlYXZlJywgJ21vdGlvbkxlYXZlSW1tZWRpYXRlbHknLCAnbW90aW9uRGVhZGxpbmUnLCAncmVtb3ZlT25MZWF2ZScsICdsZWF2ZWRDbGFzc05hbWUnLCAnb25BcHBlYXJQcmVwYXJlJywgJ29uQXBwZWFyU3RhcnQnLCAnb25BcHBlYXJBY3RpdmUnLCAnb25BcHBlYXJFbmQnLCAnb25FbnRlclN0YXJ0JywgJ29uRW50ZXJBY3RpdmUnLCAnb25FbnRlckVuZCcsICdvbkxlYXZlU3RhcnQnLCAnb25MZWF2ZUFjdGl2ZScsICdvbkxlYXZlRW5kJ107XG4vKipcbiAqIEdlbmVyYXRlIGEgQ1NTTW90aW9uTGlzdCBjb21wb25lbnQgd2l0aCBjb25maWdcbiAqIEBwYXJhbSB0cmFuc2l0aW9uU3VwcG9ydCBObyBuZWVkIHNpbmNlIENTU01vdGlvbkxpc3Qgbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHJhbnNpdGlvbiBzdXBwb3J0XG4gKiBAcGFyYW0gQ1NTTW90aW9uIENTU01vdGlvbiBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkNTU01vdGlvbkxpc3QodHJhbnNpdGlvblN1cHBvcnQpIHtcbiAgdmFyIENTU01vdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogT3JpZ2luQ1NTTW90aW9uO1xuICB2YXIgQ1NTTW90aW9uTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICAgIF9pbmhlcml0cyhDU1NNb3Rpb25MaXN0LCBfUmVhY3QkQ29tcG9uZW50KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENTU01vdGlvbkxpc3QpO1xuICAgIGZ1bmN0aW9uIENTU01vdGlvbkxpc3QoKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ1NTTW90aW9uTGlzdCk7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICAgIGtleUVudGl0aWVzOiBbXVxuICAgICAgfSk7XG4gICAgICAvLyBab21iaWVKOiBSZXR1cm4gdGhlIGNvdW50IG9mIHJlc3Qga2V5cy4gSXQncyBzYWZlIHRvIHJlZmFjdG9yIGlmIG5lZWQgbW9yZSBpbmZvLlxuICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUtleVwiLCBmdW5jdGlvbiAocmVtb3ZlS2V5KSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICB2YXIgbmV4dEtleUVudGl0aWVzID0gcHJldlN0YXRlLmtleUVudGl0aWVzLm1hcChmdW5jdGlvbiAoZW50aXR5KSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5LmtleSAhPT0gcmVtb3ZlS2V5KSByZXR1cm4gZW50aXR5O1xuICAgICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZW50aXR5KSwge30sIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBTVEFUVVNfUkVNT1ZFRFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleUVudGl0aWVzOiBuZXh0S2V5RW50aXRpZXNcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGtleUVudGl0aWVzID0gX3RoaXMuc3RhdGUua2V5RW50aXRpZXM7XG4gICAgICAgICAgdmFyIHJlc3RLZXlzQ291bnQgPSBrZXlFbnRpdGllcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICAgIHZhciBzdGF0dXMgPSBfcmVmLnN0YXR1cztcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXMgIT09IFNUQVRVU19SRU1PVkVEO1xuICAgICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgICBpZiAocmVzdEtleXNDb3VudCA9PT0gMCAmJiBfdGhpcy5wcm9wcy5vbkFsbFJlbW92ZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQWxsUmVtb3ZlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKENTU01vdGlvbkxpc3QsIFt7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdmFyIGtleUVudGl0aWVzID0gdGhpcy5zdGF0ZS5rZXlFbnRpdGllcztcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBfb25WaXNpYmxlQ2hhbmdlZCA9IF90aGlzJHByb3BzLm9uVmlzaWJsZUNoYW5nZWQsXG4gICAgICAgICAgb25BbGxSZW1vdmVkID0gX3RoaXMkcHJvcHMub25BbGxSZW1vdmVkLFxuICAgICAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCBSZWFjdC5GcmFnbWVudDtcbiAgICAgICAgdmFyIG1vdGlvblByb3BzID0ge307XG4gICAgICAgIE1PVElPTl9QUk9QX05BTUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICBtb3Rpb25Qcm9wc1twcm9wXSA9IHJlc3RQcm9wc1twcm9wXTtcbiAgICAgICAgICBkZWxldGUgcmVzdFByb3BzW3Byb3BdO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHJlc3RQcm9wcy5rZXlzO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCByZXN0UHJvcHMsIGtleUVudGl0aWVzLm1hcChmdW5jdGlvbiAoX3JlZjIsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIHN0YXR1cyA9IF9yZWYyLnN0YXR1cyxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuICAgICAgICAgIHZhciB2aXNpYmxlID0gc3RhdHVzID09PSBTVEFUVVNfQUREIHx8IHN0YXR1cyA9PT0gU1RBVFVTX0tFRVA7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENTU01vdGlvbiwgX2V4dGVuZHMoe30sIG1vdGlvblByb3BzLCB7XG4gICAgICAgICAgICBrZXk6IGV2ZW50UHJvcHMua2V5LFxuICAgICAgICAgICAgdmlzaWJsZTogdmlzaWJsZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHM6IGV2ZW50UHJvcHMsXG4gICAgICAgICAgICBvblZpc2libGVDaGFuZ2VkOiBmdW5jdGlvbiBvblZpc2libGVDaGFuZ2VkKGNoYW5nZWRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIF9vblZpc2libGVDaGFuZ2VkID09PSBudWxsIHx8IF9vblZpc2libGVDaGFuZ2VkID09PSB2b2lkIDAgfHwgX29uVmlzaWJsZUNoYW5nZWQoY2hhbmdlZFZpc2libGUsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGV2ZW50UHJvcHMua2V5XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoIWNoYW5nZWRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLnJlbW92ZUtleShldmVudFByb3BzLmtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgICB9KSwgcmVmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1dLCBbe1xuICAgICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmMywgX3JlZjQpIHtcbiAgICAgICAgdmFyIGtleXMgPSBfcmVmMy5rZXlzO1xuICAgICAgICB2YXIga2V5RW50aXRpZXMgPSBfcmVmNC5rZXlFbnRpdGllcztcbiAgICAgICAgdmFyIHBhcnNlZEtleU9iamVjdHMgPSBwYXJzZUtleXMoa2V5cyk7XG4gICAgICAgIHZhciBtaXhlZEtleUVudGl0aWVzID0gZGlmZktleXMoa2V5RW50aXRpZXMsIHBhcnNlZEtleU9iamVjdHMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleUVudGl0aWVzOiBtaXhlZEtleUVudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAoZW50aXR5KSB7XG4gICAgICAgICAgICB2YXIgcHJldkVudGl0eSA9IGtleUVudGl0aWVzLmZpbmQoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgICAgICAgIHZhciBrZXkgPSBfcmVmNS5rZXk7XG4gICAgICAgICAgICAgIHJldHVybiBlbnRpdHkua2V5ID09PSBrZXk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIGlmIGFscmVhZHkgbWFyayBhcyByZW1vdmVkXG4gICAgICAgICAgICBpZiAocHJldkVudGl0eSAmJiBwcmV2RW50aXR5LnN0YXR1cyA9PT0gU1RBVFVTX1JFTU9WRUQgJiYgZW50aXR5LnN0YXR1cyA9PT0gU1RBVFVTX1JFTU9WRSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1dKTtcbiAgICByZXR1cm4gQ1NTTW90aW9uTGlzdDtcbiAgfShSZWFjdC5Db21wb25lbnQpO1xuICBfZGVmaW5lUHJvcGVydHkoQ1NTTW90aW9uTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICAgIGNvbXBvbmVudDogJ2RpdidcbiAgfSk7XG4gIHJldHVybiBDU1NNb3Rpb25MaXN0O1xufVxuZXhwb3J0IGRlZmF1bHQgZ2VuQ1NTTW90aW9uTGlzdChzdXBwb3J0VHJhbnNpdGlvbik7IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9jcmVhdGVTdXBlciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBEb21XcmFwcGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhEb21XcmFwcGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihEb21XcmFwcGVyKTtcbiAgZnVuY3Rpb24gRG9tV3JhcHBlcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRG9tV3JhcHBlcik7XG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIF9jcmVhdGVDbGFzcyhEb21XcmFwcGVyLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBEb21XcmFwcGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuZXhwb3J0IGRlZmF1bHQgRG9tV3JhcHBlcjsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW90aW9uUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHByb3BzXG4gIH0sIGNoaWxkcmVuKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhbmltYXRpb25FbmROYW1lLCB0cmFuc2l0aW9uRW5kTmFtZSB9IGZyb20gXCIuLi91dGlsL21vdGlvblwiO1xuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIChvbkludGVybmFsTW90aW9uRW5kKSB7XG4gIHZhciBjYWNoZUVsZW1lbnRSZWYgPSB1c2VSZWYoKTtcblxuICAvLyBSZW1vdmUgZXZlbnRzXG4gIGZ1bmN0aW9uIHJlbW92ZU1vdGlvbkV2ZW50cyhlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kTmFtZSwgb25JbnRlcm5hbE1vdGlvbkVuZCk7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uRW5kTmFtZSwgb25JbnRlcm5hbE1vdGlvbkVuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGF0Y2ggZXZlbnRzXG4gIGZ1bmN0aW9uIHBhdGNoTW90aW9uRXZlbnRzKGVsZW1lbnQpIHtcbiAgICBpZiAoY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQgJiYgY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQgIT09IGVsZW1lbnQpIHtcbiAgICAgIHJlbW92ZU1vdGlvbkV2ZW50cyhjYWNoZUVsZW1lbnRSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQgIT09IGNhY2hlRWxlbWVudFJlZi5jdXJyZW50KSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuXG4gICAgICAvLyBTYXZlIGFzIGNhY2hlIGluIGNhc2UgZG9tIHJlbW92ZWQgdHJpZ2dlciBieSBgbW90aW9uRGVhZGxpbmVgXG4gICAgICBjYWNoZUVsZW1lbnRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xlYW4gdXAgd2hlbiByZW1vdmVkXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZU1vdGlvbkV2ZW50cyhjYWNoZUVsZW1lbnRSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gW3BhdGNoTW90aW9uRXZlbnRzLCByZW1vdmVNb3Rpb25FdmVudHNdO1xufSk7IiwiaW1wb3J0IGNhblVzZURvbSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY2FuVXNlRG9tXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLy8gSXQncyBzYWZlIHRvIHVzZSBgdXNlTGF5b3V0RWZmZWN0YCBidXQgdGhlIHdhcm5pbmcgaXMgYW5ub3lpbmdcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRG9tKCkgPyB1c2VMYXlvdXRFZmZlY3QgOiB1c2VFZmZlY3Q7XG5leHBvcnQgZGVmYXVsdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0OyIsImltcG9ydCByYWYgZnJvbSBcInJjLXV0aWwvZXMvcmFmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gKCkge1xuICB2YXIgbmV4dEZyYW1lUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBmdW5jdGlvbiBjYW5jZWxOZXh0RnJhbWUoKSB7XG4gICAgcmFmLmNhbmNlbChuZXh0RnJhbWVSZWYuY3VycmVudCk7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dEZyYW1lKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRlbGF5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyO1xuICAgIGNhbmNlbE5leHRGcmFtZSgpO1xuICAgIHZhciBuZXh0RnJhbWVJZCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZGVsYXkgPD0gMSkge1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgaXNDYW5jZWxlZDogZnVuY3Rpb24gaXNDYW5jZWxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0RnJhbWVJZCAhPT0gbmV4dEZyYW1lUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRGcmFtZShjYWxsYmFjaywgZGVsYXkgLSAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBuZXh0RnJhbWVSZWYuY3VycmVudCA9IG5leHRGcmFtZUlkO1xuICB9XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbmNlbE5leHRGcmFtZSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtuZXh0RnJhbWUsIGNhbmNlbE5leHRGcmFtZV07XG59KTsiLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHsgdXNlRXZlbnQgfSBmcm9tICdyYy11dGlsJztcbmltcG9ydCB1c2VTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VTdGF0ZVwiO1xuaW1wb3J0IHVzZVN5bmNTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VTeW5jU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU1RBVFVTX0FQUEVBUiwgU1RBVFVTX0VOVEVSLCBTVEFUVVNfTEVBVkUsIFNUQVRVU19OT05FLCBTVEVQX0FDVElWRSwgU1RFUF9QUkVQQVJFLCBTVEVQX1BSRVBBUkVELCBTVEVQX1NUQVJUIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuaW1wb3J0IHVzZURvbU1vdGlvbkV2ZW50cyBmcm9tIFwiLi91c2VEb21Nb3Rpb25FdmVudHNcIjtcbmltcG9ydCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IGZyb20gXCIuL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCB1c2VTdGVwUXVldWUsIHsgRG9TdGVwLCBpc0FjdGl2ZSwgU2tpcFN0ZXAgfSBmcm9tIFwiLi91c2VTdGVwUXVldWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVN0YXR1cyhzdXBwb3J0TW90aW9uLCB2aXNpYmxlLCBnZXRFbGVtZW50LCBfcmVmKSB7XG4gIHZhciBfcmVmJG1vdGlvbkVudGVyID0gX3JlZi5tb3Rpb25FbnRlcixcbiAgICBtb3Rpb25FbnRlciA9IF9yZWYkbW90aW9uRW50ZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJG1vdGlvbkVudGVyLFxuICAgIF9yZWYkbW90aW9uQXBwZWFyID0gX3JlZi5tb3Rpb25BcHBlYXIsXG4gICAgbW90aW9uQXBwZWFyID0gX3JlZiRtb3Rpb25BcHBlYXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJG1vdGlvbkFwcGVhcixcbiAgICBfcmVmJG1vdGlvbkxlYXZlID0gX3JlZi5tb3Rpb25MZWF2ZSxcbiAgICBtb3Rpb25MZWF2ZSA9IF9yZWYkbW90aW9uTGVhdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJG1vdGlvbkxlYXZlLFxuICAgIG1vdGlvbkRlYWRsaW5lID0gX3JlZi5tb3Rpb25EZWFkbGluZSxcbiAgICBtb3Rpb25MZWF2ZUltbWVkaWF0ZWx5ID0gX3JlZi5tb3Rpb25MZWF2ZUltbWVkaWF0ZWx5LFxuICAgIG9uQXBwZWFyUHJlcGFyZSA9IF9yZWYub25BcHBlYXJQcmVwYXJlLFxuICAgIG9uRW50ZXJQcmVwYXJlID0gX3JlZi5vbkVudGVyUHJlcGFyZSxcbiAgICBvbkxlYXZlUHJlcGFyZSA9IF9yZWYub25MZWF2ZVByZXBhcmUsXG4gICAgb25BcHBlYXJTdGFydCA9IF9yZWYub25BcHBlYXJTdGFydCxcbiAgICBvbkVudGVyU3RhcnQgPSBfcmVmLm9uRW50ZXJTdGFydCxcbiAgICBvbkxlYXZlU3RhcnQgPSBfcmVmLm9uTGVhdmVTdGFydCxcbiAgICBvbkFwcGVhckFjdGl2ZSA9IF9yZWYub25BcHBlYXJBY3RpdmUsXG4gICAgb25FbnRlckFjdGl2ZSA9IF9yZWYub25FbnRlckFjdGl2ZSxcbiAgICBvbkxlYXZlQWN0aXZlID0gX3JlZi5vbkxlYXZlQWN0aXZlLFxuICAgIG9uQXBwZWFyRW5kID0gX3JlZi5vbkFwcGVhckVuZCxcbiAgICBvbkVudGVyRW5kID0gX3JlZi5vbkVudGVyRW5kLFxuICAgIG9uTGVhdmVFbmQgPSBfcmVmLm9uTGVhdmVFbmQsXG4gICAgb25WaXNpYmxlQ2hhbmdlZCA9IF9yZWYub25WaXNpYmxlQ2hhbmdlZDtcbiAgLy8gVXNlZCBmb3Igb3V0ZXIgcmVuZGVyIHVzYWdlIHRvIGF2b2lkIGB2aXNpYmxlOiBmYWxzZSAmIHN0YXR1czogbm9uZWAgdG8gcmVuZGVyIG5vdGhpbmdcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgYXN5bmNWaXNpYmxlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRBc3luY1Zpc2libGUgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN5bmNTdGF0ZSA9IHVzZVN5bmNTdGF0ZShTVEFUVVNfTk9ORSksXG4gICAgX3VzZVN5bmNTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3luY1N0YXRlLCAyKSxcbiAgICBnZXRTdGF0dXMgPSBfdXNlU3luY1N0YXRlMlswXSxcbiAgICBzZXRTdGF0dXMgPSBfdXNlU3luY1N0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgc3R5bGUgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFN0eWxlID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIGN1cnJlbnRTdGF0dXMgPSBnZXRTdGF0dXMoKTtcbiAgdmFyIG1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgZGVhZGxpbmVSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IERvbSBOb2RlID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBnZXREb21FbGVtZW50KCkge1xuICAgIHJldHVybiBnZXRFbGVtZW50KCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBNb3Rpb24gRW5kID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBhY3RpdmVSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCBzdGF0dXMgJiBzdHlsZVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlTW90aW9uRW5kU3RhdHVzKCkge1xuICAgIHNldFN0YXR1cyhTVEFUVVNfTk9ORSk7XG4gICAgc2V0U3R5bGUobnVsbCwgdHJ1ZSk7XG4gIH1cbiAgdmFyIG9uSW50ZXJuYWxNb3Rpb25FbmQgPSB1c2VFdmVudChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgc3RhdHVzID0gZ2V0U3RhdHVzKCk7XG4gICAgLy8gRG8gbm90aGluZyBzaW5jZSBub3QgaW4gYW55IHRyYW5zaXRpb24gc3RhdHVzLlxuICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGBtb3Rpb25EZWFkbGluZWAgdHJpZ2dlci5cbiAgICBpZiAoc3RhdHVzID09PSBTVEFUVVNfTk9ORSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IGdldERvbUVsZW1lbnQoKTtcbiAgICBpZiAoZXZlbnQgJiYgIWV2ZW50LmRlYWRsaW5lICYmIGV2ZW50LnRhcmdldCAhPT0gZWxlbWVudCkge1xuICAgICAgLy8gZXZlbnQgZXhpc3RzXG4gICAgICAvLyBub3QgaW5pdGlhdGVkIGJ5IGRlYWRsaW5lXG4gICAgICAvLyB0cmFuc2l0aW9uRW5kIG5vdCBmaXJlZCBieSBpbm5lciBlbGVtZW50c1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3VycmVudEFjdGl2ZSA9IGFjdGl2ZVJlZi5jdXJyZW50O1xuICAgIHZhciBjYW5FbmQ7XG4gICAgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX0FQUEVBUiAmJiBjdXJyZW50QWN0aXZlKSB7XG4gICAgICBjYW5FbmQgPSBvbkFwcGVhckVuZCA9PT0gbnVsbCB8fCBvbkFwcGVhckVuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BcHBlYXJFbmQoZWxlbWVudCwgZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBTVEFUVVNfRU5URVIgJiYgY3VycmVudEFjdGl2ZSkge1xuICAgICAgY2FuRW5kID0gb25FbnRlckVuZCA9PT0gbnVsbCB8fCBvbkVudGVyRW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVudGVyRW5kKGVsZW1lbnQsIGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX0xFQVZFICYmIGN1cnJlbnRBY3RpdmUpIHtcbiAgICAgIGNhbkVuZCA9IG9uTGVhdmVFbmQgPT09IG51bGwgfHwgb25MZWF2ZUVuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25MZWF2ZUVuZChlbGVtZW50LCBldmVudCk7XG4gICAgfVxuXG4gICAgLy8gT25seSB1cGRhdGUgc3RhdHVzIHdoZW4gYGNhbkVuZGAgYW5kIG5vdCBkZXN0cm95ZWRcbiAgICBpZiAoY3VycmVudEFjdGl2ZSAmJiBjYW5FbmQgIT09IGZhbHNlKSB7XG4gICAgICB1cGRhdGVNb3Rpb25FbmRTdGF0dXMoKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgX3VzZURvbU1vdGlvbkV2ZW50cyA9IHVzZURvbU1vdGlvbkV2ZW50cyhvbkludGVybmFsTW90aW9uRW5kKSxcbiAgICBfdXNlRG9tTW90aW9uRXZlbnRzMiA9IF9zbGljZWRUb0FycmF5KF91c2VEb21Nb3Rpb25FdmVudHMsIDEpLFxuICAgIHBhdGNoTW90aW9uRXZlbnRzID0gX3VzZURvbU1vdGlvbkV2ZW50czJbMF07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RlcCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uIGdldEV2ZW50SGFuZGxlcnModGFyZ2V0U3RhdHVzKSB7XG4gICAgc3dpdGNoICh0YXJnZXRTdGF0dXMpIHtcbiAgICAgIGNhc2UgU1RBVFVTX0FQUEVBUjpcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBTVEVQX1BSRVBBUkUsIG9uQXBwZWFyUHJlcGFyZSksIFNURVBfU1RBUlQsIG9uQXBwZWFyU3RhcnQpLCBTVEVQX0FDVElWRSwgb25BcHBlYXJBY3RpdmUpO1xuICAgICAgY2FzZSBTVEFUVVNfRU5URVI6XG4gICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgU1RFUF9QUkVQQVJFLCBvbkVudGVyUHJlcGFyZSksIFNURVBfU1RBUlQsIG9uRW50ZXJTdGFydCksIFNURVBfQUNUSVZFLCBvbkVudGVyQWN0aXZlKTtcbiAgICAgIGNhc2UgU1RBVFVTX0xFQVZFOlxuICAgICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFNURVBfUFJFUEFSRSwgb25MZWF2ZVByZXBhcmUpLCBTVEVQX1NUQVJULCBvbkxlYXZlU3RhcnQpLCBTVEVQX0FDVElWRSwgb25MZWF2ZUFjdGl2ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xuICB2YXIgZXZlbnRIYW5kbGVycyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRFdmVudEhhbmRsZXJzKGN1cnJlbnRTdGF0dXMpO1xuICB9LCBbY3VycmVudFN0YXR1c10pO1xuICB2YXIgX3VzZVN0ZXBRdWV1ZSA9IHVzZVN0ZXBRdWV1ZShjdXJyZW50U3RhdHVzLCAhc3VwcG9ydE1vdGlvbiwgZnVuY3Rpb24gKG5ld1N0ZXApIHtcbiAgICAgIC8vIE9ubHkgcHJlcGFyZSBzdGVwIGNhbiBiZSBza2lwXG4gICAgICBpZiAobmV3U3RlcCA9PT0gU1RFUF9QUkVQQVJFKSB7XG4gICAgICAgIHZhciBvblByZXBhcmUgPSBldmVudEhhbmRsZXJzW1NURVBfUFJFUEFSRV07XG4gICAgICAgIGlmICghb25QcmVwYXJlKSB7XG4gICAgICAgICAgcmV0dXJuIFNraXBTdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvblByZXBhcmUoZ2V0RG9tRWxlbWVudCgpKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdCBzdGVwIGlzIHN5bmMgdXBkYXRlXG4gICAgICBpZiAoc3RlcCBpbiBldmVudEhhbmRsZXJzKSB7XG4gICAgICAgIHZhciBfZXZlbnRIYW5kbGVycyRzdGVwO1xuICAgICAgICBzZXRTdHlsZSgoKF9ldmVudEhhbmRsZXJzJHN0ZXAgPSBldmVudEhhbmRsZXJzW3N0ZXBdKSA9PT0gbnVsbCB8fCBfZXZlbnRIYW5kbGVycyRzdGVwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZXZlbnRIYW5kbGVycyRzdGVwLmNhbGwoZXZlbnRIYW5kbGVycywgZ2V0RG9tRWxlbWVudCgpLCBudWxsKSkgfHwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RlcCA9PT0gU1RFUF9BQ1RJVkUgJiYgY3VycmVudFN0YXR1cyAhPT0gU1RBVFVTX05PTkUpIHtcbiAgICAgICAgLy8gUGF0Y2ggZXZlbnRzIHdoZW4gbW90aW9uIG5lZWRlZFxuICAgICAgICBwYXRjaE1vdGlvbkV2ZW50cyhnZXREb21FbGVtZW50KCkpO1xuICAgICAgICBpZiAobW90aW9uRGVhZGxpbmUgPiAwKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGRlYWRsaW5lUmVmLmN1cnJlbnQpO1xuICAgICAgICAgIGRlYWRsaW5lUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uSW50ZXJuYWxNb3Rpb25FbmQoe1xuICAgICAgICAgICAgICBkZWFkbGluZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgbW90aW9uRGVhZGxpbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RlcCA9PT0gU1RFUF9QUkVQQVJFRCkge1xuICAgICAgICB1cGRhdGVNb3Rpb25FbmRTdGF0dXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBEb1N0ZXA7XG4gICAgfSksXG4gICAgX3VzZVN0ZXBRdWV1ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RlcFF1ZXVlLCAyKSxcbiAgICBzdGFydFN0ZXAgPSBfdXNlU3RlcFF1ZXVlMlswXSxcbiAgICBzdGVwID0gX3VzZVN0ZXBRdWV1ZTJbMV07XG4gIHZhciBhY3RpdmUgPSBpc0FjdGl2ZShzdGVwKTtcbiAgYWN0aXZlUmVmLmN1cnJlbnQgPSBhY3RpdmU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTdGF0dXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdmlzaWJsZVJlZiA9IHVzZVJlZihudWxsKTtcblxuICAvLyBVcGRhdGUgd2l0aCBuZXcgc3RhdHVzXG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFdoZW4gdXNlIFN1c3BlbnNlLCB0aGUgYHZpc2libGVgIHdpbGwgcmVwZWF0IHRyaWdnZXIsXG4gICAgLy8gQnV0IG5vdCByZWFsIGNoYW5nZSBvZiB0aGUgYHZpc2libGVgLCB3ZSBuZWVkIHRvIHNraXAgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDQzNzlcbiAgICBpZiAobW91bnRlZFJlZi5jdXJyZW50ICYmIHZpc2libGVSZWYuY3VycmVudCA9PT0gdmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRBc3luY1Zpc2libGUodmlzaWJsZSk7XG4gICAgdmFyIGlzTW91bnRlZCA9IG1vdW50ZWRSZWYuY3VycmVudDtcbiAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgLy8gaWYgKCFzdXBwb3J0TW90aW9uKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuXG4gICAgdmFyIG5leHRTdGF0dXM7XG5cbiAgICAvLyBBcHBlYXJcbiAgICBpZiAoIWlzTW91bnRlZCAmJiB2aXNpYmxlICYmIG1vdGlvbkFwcGVhcikge1xuICAgICAgbmV4dFN0YXR1cyA9IFNUQVRVU19BUFBFQVI7XG4gICAgfVxuXG4gICAgLy8gRW50ZXJcbiAgICBpZiAoaXNNb3VudGVkICYmIHZpc2libGUgJiYgbW90aW9uRW50ZXIpIHtcbiAgICAgIG5leHRTdGF0dXMgPSBTVEFUVVNfRU5URVI7XG4gICAgfVxuXG4gICAgLy8gTGVhdmVcbiAgICBpZiAoaXNNb3VudGVkICYmICF2aXNpYmxlICYmIG1vdGlvbkxlYXZlIHx8ICFpc01vdW50ZWQgJiYgbW90aW9uTGVhdmVJbW1lZGlhdGVseSAmJiAhdmlzaWJsZSAmJiBtb3Rpb25MZWF2ZSkge1xuICAgICAgbmV4dFN0YXR1cyA9IFNUQVRVU19MRUFWRTtcbiAgICB9XG4gICAgdmFyIG5leHRFdmVudEhhbmRsZXJzID0gZ2V0RXZlbnRIYW5kbGVycyhuZXh0U3RhdHVzKTtcblxuICAgIC8vIFVwZGF0ZSB0byBuZXh0IHN0YXR1c1xuICAgIGlmIChuZXh0U3RhdHVzICYmIChzdXBwb3J0TW90aW9uIHx8IG5leHRFdmVudEhhbmRsZXJzW1NURVBfUFJFUEFSRV0pKSB7XG4gICAgICBzZXRTdGF0dXMobmV4dFN0YXR1cyk7XG4gICAgICBzdGFydFN0ZXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2V0IGJhY2sgaW4gY2FzZSBubyBtb3Rpb24gYnV0IHByZXYgc3RhdHVzIGhhcyBwcmVwYXJlIHN0ZXBcbiAgICAgIHNldFN0YXR1cyhTVEFUVVNfTk9ORSk7XG4gICAgfVxuICAgIHZpc2libGVSZWYuY3VycmVudCA9IHZpc2libGU7XG4gIH0sIFt2aXNpYmxlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFZmZlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXNldCB3aGVuIG1vdGlvbiBjaGFuZ2VkXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFxuICAgIC8vIENhbmNlbCBhcHBlYXJcbiAgICBjdXJyZW50U3RhdHVzID09PSBTVEFUVVNfQVBQRUFSICYmICFtb3Rpb25BcHBlYXIgfHxcbiAgICAvLyBDYW5jZWwgZW50ZXJcbiAgICBjdXJyZW50U3RhdHVzID09PSBTVEFUVVNfRU5URVIgJiYgIW1vdGlvbkVudGVyIHx8XG4gICAgLy8gQ2FuY2VsIGxlYXZlXG4gICAgY3VycmVudFN0YXR1cyA9PT0gU1RBVFVTX0xFQVZFICYmICFtb3Rpb25MZWF2ZSkge1xuICAgICAgc2V0U3RhdHVzKFNUQVRVU19OT05FKTtcbiAgICB9XG4gIH0sIFttb3Rpb25BcHBlYXIsIG1vdGlvbkVudGVyLCBtb3Rpb25MZWF2ZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGNsZWFyVGltZW91dChkZWFkbGluZVJlZi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gVHJpZ2dlciBgb25WaXNpYmxlQ2hhbmdlZGBcbiAgdmFyIGZpcnN0TW91bnRDaGFuZ2VSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFt2aXNpYmxlICYgbW90aW9uIG5vdCBlbmRdID0+IFshdmlzaWJsZSAmIG1vdGlvbiBlbmRdIHN0aWxsIG5lZWQgdHJpZ2dlciBvblZpc2libGVDaGFuZ2VkXG4gICAgaWYgKGFzeW5jVmlzaWJsZSkge1xuICAgICAgZmlyc3RNb3VudENoYW5nZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGFzeW5jVmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRTdGF0dXMgPT09IFNUQVRVU19OT05FKSB7XG4gICAgICAvLyBTa2lwIGZpcnN0IHJlbmRlciBpcyBpbnZpc2libGUgc2luY2UgaXQncyBub3RoaW5nIGNoYW5nZWRcbiAgICAgIGlmIChmaXJzdE1vdW50Q2hhbmdlUmVmLmN1cnJlbnQgfHwgYXN5bmNWaXNpYmxlKSB7XG4gICAgICAgIG9uVmlzaWJsZUNoYW5nZWQgPT09IG51bGwgfHwgb25WaXNpYmxlQ2hhbmdlZCA9PT0gdm9pZCAwIHx8IG9uVmlzaWJsZUNoYW5nZWQoYXN5bmNWaXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIGZpcnN0TW91bnRDaGFuZ2VSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfVxuICB9LCBbYXN5bmNWaXNpYmxlLCBjdXJyZW50U3RhdHVzXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTdHlsZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkU3R5bGUgPSBzdHlsZTtcbiAgaWYgKGV2ZW50SGFuZGxlcnNbU1RFUF9QUkVQQVJFXSAmJiBzdGVwID09PSBTVEVQX1NUQVJUKSB7XG4gICAgbWVyZ2VkU3R5bGUgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHRyYW5zaXRpb246ICdub25lJ1xuICAgIH0sIG1lcmdlZFN0eWxlKTtcbiAgfVxuICByZXR1cm4gW2N1cnJlbnRTdGF0dXMsIHN0ZXAsIG1lcmdlZFN0eWxlLCBhc3luY1Zpc2libGUgIT09IG51bGwgJiYgYXN5bmNWaXNpYmxlICE9PSB2b2lkIDAgPyBhc3luY1Zpc2libGUgOiB2aXNpYmxlXTtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB1c2VTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VTdGF0ZVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU1RFUF9BQ1RJVkFURUQsIFNURVBfQUNUSVZFLCBTVEVQX05PTkUsIFNURVBfUFJFUEFSRSwgU1RFUF9QUkVQQVJFRCwgU1RFUF9TVEFSVCB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcbmltcG9ydCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IGZyb20gXCIuL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCB1c2VOZXh0RnJhbWUgZnJvbSBcIi4vdXNlTmV4dEZyYW1lXCI7XG52YXIgRlVMTF9TVEVQX1FVRVVFID0gW1NURVBfUFJFUEFSRSwgU1RFUF9TVEFSVCwgU1RFUF9BQ1RJVkUsIFNURVBfQUNUSVZBVEVEXTtcbnZhciBTSU1QTEVfU1RFUF9RVUVVRSA9IFtTVEVQX1BSRVBBUkUsIFNURVBfUFJFUEFSRURdO1xuXG4vKiogU2tpcCBjdXJyZW50IHN0ZXAgKi9cbmV4cG9ydCB2YXIgU2tpcFN0ZXAgPSBmYWxzZTtcbi8qKiBDdXJyZW50IHN0ZXAgc2hvdWxkIGJlIHVwZGF0ZSBpbiAqL1xuZXhwb3J0IHZhciBEb1N0ZXAgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aXZlKHN0ZXApIHtcbiAgcmV0dXJuIHN0ZXAgPT09IFNURVBfQUNUSVZFIHx8IHN0ZXAgPT09IFNURVBfQUNUSVZBVEVEO1xufVxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIChzdGF0dXMsIHByZXBhcmVPbmx5LCBjYWxsYmFjaykge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoU1RFUF9OT05FKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzdGVwID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRTdGVwID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VOZXh0RnJhbWUgPSB1c2VOZXh0RnJhbWUoKSxcbiAgICBfdXNlTmV4dEZyYW1lMiA9IF9zbGljZWRUb0FycmF5KF91c2VOZXh0RnJhbWUsIDIpLFxuICAgIG5leHRGcmFtZSA9IF91c2VOZXh0RnJhbWUyWzBdLFxuICAgIGNhbmNlbE5leHRGcmFtZSA9IF91c2VOZXh0RnJhbWUyWzFdO1xuICBmdW5jdGlvbiBzdGFydFF1ZXVlKCkge1xuICAgIHNldFN0ZXAoU1RFUF9QUkVQQVJFLCB0cnVlKTtcbiAgfVxuICB2YXIgU1RFUF9RVUVVRSA9IHByZXBhcmVPbmx5ID8gU0lNUExFX1NURVBfUVVFVUUgOiBGVUxMX1NURVBfUVVFVUU7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzdGVwICE9PSBTVEVQX05PTkUgJiYgc3RlcCAhPT0gU1RFUF9BQ1RJVkFURUQpIHtcbiAgICAgIHZhciBpbmRleCA9IFNURVBfUVVFVUUuaW5kZXhPZihzdGVwKTtcbiAgICAgIHZhciBuZXh0U3RlcCA9IFNURVBfUVVFVUVbaW5kZXggKyAxXTtcbiAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjayhzdGVwKTtcbiAgICAgIGlmIChyZXN1bHQgPT09IFNraXBTdGVwKSB7XG4gICAgICAgIC8vIFNraXAgd2hlbiBubyBuZWVkZWRcbiAgICAgICAgc2V0U3RlcChuZXh0U3RlcCwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG5leHRTdGVwKSB7XG4gICAgICAgIC8vIERvIGFzIGZyYW1lIGZvciBzdGVwIHVwZGF0ZVxuICAgICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgICBmdW5jdGlvbiBkb05leHQoKSB7XG4gICAgICAgICAgICAvLyBTa2lwIHNpbmNlIGN1cnJlbnQgcXVldWUgaXMgb29kXG4gICAgICAgICAgICBpZiAoaW5mby5pc0NhbmNlbGVkKCkpIHJldHVybjtcbiAgICAgICAgICAgIHNldFN0ZXAobmV4dFN0ZXAsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkb05leHQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT25seSBwcm9taXNlIHNob3VsZCBiZSBhc3luY1xuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihkb05leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc3RhdHVzLCBzdGVwXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbmNlbE5leHRGcmFtZSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtzdGFydFF1ZXVlLCBzdGVwXTtcbn0pOyIsImltcG9ydCBDU1NNb3Rpb24gZnJvbSBcIi4vQ1NTTW90aW9uXCI7XG5pbXBvcnQgQ1NTTW90aW9uTGlzdCBmcm9tIFwiLi9DU1NNb3Rpb25MaXN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFByb3ZpZGVyIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuZXhwb3J0IHsgQ1NTTW90aW9uTGlzdCB9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTTW90aW9uOyIsImV4cG9ydCB2YXIgU1RBVFVTX05PTkUgPSAnbm9uZSc7XG5leHBvcnQgdmFyIFNUQVRVU19BUFBFQVIgPSAnYXBwZWFyJztcbmV4cG9ydCB2YXIgU1RBVFVTX0VOVEVSID0gJ2VudGVyJztcbmV4cG9ydCB2YXIgU1RBVFVTX0xFQVZFID0gJ2xlYXZlJztcbmV4cG9ydCB2YXIgU1RFUF9OT05FID0gJ25vbmUnO1xuZXhwb3J0IHZhciBTVEVQX1BSRVBBUkUgPSAncHJlcGFyZSc7XG5leHBvcnQgdmFyIFNURVBfU1RBUlQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBTVEVQX0FDVElWRSA9ICdhY3RpdmUnO1xuZXhwb3J0IHZhciBTVEVQX0FDVElWQVRFRCA9ICdlbmQnO1xuLyoqXG4gKiBVc2VkIGZvciBkaXNhYmxlZCBtb3Rpb24gY2FzZS5cbiAqIFByZXBhcmUgc3RhZ2Ugd2lsbCBzdGlsbCB3b3JrIGJ1dCBzdGFydCAmIGFjdGl2ZSB3aWxsIGJlIHNraXBwZWQuXG4gKi9cbmV4cG9ydCB2YXIgU1RFUF9QUkVQQVJFRCA9ICdwcmVwYXJlZCc7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmV4cG9ydCB2YXIgU1RBVFVTX0FERCA9ICdhZGQnO1xuZXhwb3J0IHZhciBTVEFUVVNfS0VFUCA9ICdrZWVwJztcbmV4cG9ydCB2YXIgU1RBVFVTX1JFTU9WRSA9ICdyZW1vdmUnO1xuZXhwb3J0IHZhciBTVEFUVVNfUkVNT1ZFRCA9ICdyZW1vdmVkJztcbmV4cG9ydCBmdW5jdGlvbiB3cmFwS2V5VG9PYmplY3Qoa2V5KSB7XG4gIHZhciBrZXlPYmo7XG4gIGlmIChrZXkgJiYgX3R5cGVvZihrZXkpID09PSAnb2JqZWN0JyAmJiAna2V5JyBpbiBrZXkpIHtcbiAgICBrZXlPYmogPSBrZXk7XG4gIH0gZWxzZSB7XG4gICAga2V5T2JqID0ge1xuICAgICAga2V5OiBrZXlcbiAgICB9O1xuICB9XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGtleU9iaiksIHt9LCB7XG4gICAga2V5OiBTdHJpbmcoa2V5T2JqLmtleSlcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLZXlzKCkge1xuICB2YXIga2V5cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gIHJldHVybiBrZXlzLm1hcCh3cmFwS2V5VG9PYmplY3QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZLZXlzKCkge1xuICB2YXIgcHJldktleXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICB2YXIgY3VycmVudEtleXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuICB2YXIgbGlzdCA9IFtdO1xuICB2YXIgY3VycmVudEluZGV4ID0gMDtcbiAgdmFyIGN1cnJlbnRMZW4gPSBjdXJyZW50S2V5cy5sZW5ndGg7XG4gIHZhciBwcmV2S2V5T2JqZWN0cyA9IHBhcnNlS2V5cyhwcmV2S2V5cyk7XG4gIHZhciBjdXJyZW50S2V5T2JqZWN0cyA9IHBhcnNlS2V5cyhjdXJyZW50S2V5cyk7XG5cbiAgLy8gQ2hlY2sgcHJldiBrZXlzIHRvIGluc2VydCBvciBrZWVwXG4gIHByZXZLZXlPYmplY3RzLmZvckVhY2goZnVuY3Rpb24gKGtleU9iaikge1xuICAgIHZhciBoaXQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gY3VycmVudEluZGV4OyBpIDwgY3VycmVudExlbjsgaSArPSAxKSB7XG4gICAgICB2YXIgY3VycmVudEtleU9iaiA9IGN1cnJlbnRLZXlPYmplY3RzW2ldO1xuICAgICAgaWYgKGN1cnJlbnRLZXlPYmoua2V5ID09PSBrZXlPYmoua2V5KSB7XG4gICAgICAgIC8vIE5ldyBhZGRlZCBrZXlzIHNob3VsZCBhZGQgYmVmb3JlIGN1cnJlbnQga2V5XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCBpKSB7XG4gICAgICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGN1cnJlbnRLZXlPYmplY3RzLnNsaWNlKGN1cnJlbnRJbmRleCwgaSkubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9iaiksIHt9LCB7XG4gICAgICAgICAgICAgIHN0YXR1czogU1RBVFVTX0FERFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdC5wdXNoKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudEtleU9iaiksIHt9LCB7XG4gICAgICAgICAgc3RhdHVzOiBTVEFUVVNfS0VFUFxuICAgICAgICB9KSk7XG4gICAgICAgIGN1cnJlbnRJbmRleCArPSAxO1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBub3QgaGl0LCBpdCBtZWFucyBrZXkgaXMgcmVtb3ZlZFxuICAgIGlmICghaGl0KSB7XG4gICAgICBsaXN0LnB1c2goX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBrZXlPYmopLCB7fSwge1xuICAgICAgICBzdGF0dXM6IFNUQVRVU19SRU1PVkVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZCByZXN0IHRvIHRoZSBsaXN0XG4gIGlmIChjdXJyZW50SW5kZXggPCBjdXJyZW50TGVuKSB7XG4gICAgbGlzdCA9IGxpc3QuY29uY2F0KGN1cnJlbnRLZXlPYmplY3RzLnNsaWNlKGN1cnJlbnRJbmRleCkubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9iaiksIHt9LCB7XG4gICAgICAgIHN0YXR1czogU1RBVFVTX0FERFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHNhbWUga2V5IHdoZW4gaXQgcmVtb3ZlIGFuZCBhZGQgYWdhaW46XG4gICAqICAgIFsxIC0gYWRkLCAyIC0ga2VlcCwgMSAtIHJlbW92ZV0gLT4gWzEgLSBrZWVwLCAyIC0ga2VlcF1cbiAgICovXG4gIHZhciBrZXlzID0ge307XG4gIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBrZXkgPSBfcmVmLmtleTtcbiAgICBrZXlzW2tleV0gPSAoa2V5c1trZXldIHx8IDApICsgMTtcbiAgfSk7XG4gIHZhciBkdXBsaWNhdGVkS2V5cyA9IE9iamVjdC5rZXlzKGtleXMpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleXNba2V5XSA+IDE7XG4gIH0pO1xuICBkdXBsaWNhdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaEtleSkge1xuICAgIC8vIFJlbW92ZSBgU1RBVFVTX1JFTU9WRWAgbm9kZS5cbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIga2V5ID0gX3JlZjIua2V5LFxuICAgICAgICBzdGF0dXMgPSBfcmVmMi5zdGF0dXM7XG4gICAgICByZXR1cm4ga2V5ICE9PSBtYXRjaEtleSB8fCBzdGF0dXMgIT09IFNUQVRVU19SRU1PVkU7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgYFNUQVRVU19BRERgIHRvIGBTVEFUVVNfS0VFUGBcbiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmtleSA9PT0gbWF0Y2hLZXkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG5vZGUuc3RhdHVzID0gU1RBVFVTX0tFRVA7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbGlzdDtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgY2FuVXNlRE9NIGZyb20gXCJyYy11dGlsL2VzL0RvbS9jYW5Vc2VEb21cIjtcbi8vID09PT09PT09PT09PT09PT09IFRyYW5zaXRpb24gPT09PT09PT09PT09PT09PT1cbi8vIEV2ZW50IHdyYXBwZXIuIENvcHkgZnJvbSByZWFjdCBzb3VyY2UgY29kZVxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzW1wiV2Via2l0XCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJ3ZWJraXRcIi5jb25jYXQoZXZlbnROYW1lKTtcbiAgcHJlZml4ZXNbXCJNb3pcIi5jb25jYXQoc3R5bGVQcm9wKV0gPSBcIm1velwiLmNvbmNhdChldmVudE5hbWUpO1xuICBwcmVmaXhlc1tcIm1zXCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJNU1wiLmNvbmNhdChldmVudE5hbWUpO1xuICBwcmVmaXhlc1tcIk9cIi5jb25jYXQoc3R5bGVQcm9wKV0gPSBcIm9cIi5jb25jYXQoZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZXMoZG9tU3VwcG9ydCwgd2luKSB7XG4gIHZhciBwcmVmaXhlcyA9IHtcbiAgICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxuICB9O1xuICBpZiAoZG9tU3VwcG9ydCkge1xuICAgIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luKSkge1xuICAgICAgZGVsZXRlIHByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgfVxuICAgIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbikpIHtcbiAgICAgIGRlbGV0ZSBwcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gICAgfVxuICB9XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IGdldFZlbmRvclByZWZpeGVzKGNhblVzZURPTSgpLCB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9KTtcbnZhciBzdHlsZSA9IHt9O1xuaWYgKGNhblVzZURPTSgpKSB7XG4gIHZhciBfZG9jdW1lbnQkY3JlYXRlRWxlbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgc3R5bGUgPSBfZG9jdW1lbnQkY3JlYXRlRWxlbWUuc3R5bGU7XG59XG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfVxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcbiAgaWYgKHByZWZpeE1hcCkge1xuICAgIHZhciBzdHlsZVByb3BMaXN0ID0gT2JqZWN0LmtleXMocHJlZml4TWFwKTtcbiAgICB2YXIgbGVuID0gc3R5bGVQcm9wTGlzdC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgdmFyIHN0eWxlUHJvcCA9IHN0eWxlUHJvcExpc3RbaV07XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByZWZpeE1hcCwgc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgICAgcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG52YXIgaW50ZXJuYWxBbmltYXRpb25FbmROYW1lID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIGludGVybmFsVHJhbnNpdGlvbkVuZE5hbWUgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuZXhwb3J0IHZhciBzdXBwb3J0VHJhbnNpdGlvbiA9ICEhKGludGVybmFsQW5pbWF0aW9uRW5kTmFtZSAmJiBpbnRlcm5hbFRyYW5zaXRpb25FbmROYW1lKTtcbmV4cG9ydCB2YXIgYW5pbWF0aW9uRW5kTmFtZSA9IGludGVybmFsQW5pbWF0aW9uRW5kTmFtZSB8fCAnYW5pbWF0aW9uZW5kJztcbmV4cG9ydCB2YXIgdHJhbnNpdGlvbkVuZE5hbWUgPSBpbnRlcm5hbFRyYW5zaXRpb25FbmROYW1lIHx8ICd0cmFuc2l0aW9uZW5kJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uTmFtZSh0cmFuc2l0aW9uTmFtZSwgdHJhbnNpdGlvblR5cGUpIHtcbiAgaWYgKCF0cmFuc2l0aW9uTmFtZSkgcmV0dXJuIG51bGw7XG4gIGlmIChfdHlwZW9mKHRyYW5zaXRpb25OYW1lKSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgdHlwZSA9IHRyYW5zaXRpb25UeXBlLnJlcGxhY2UoLy1cXHcvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2hbMV0udG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJhbnNpdGlvbk5hbWVbdHlwZV07XG4gIH1cbiAgcmV0dXJuIFwiXCIuY29uY2F0KHRyYW5zaXRpb25OYW1lLCBcIi1cIikuY29uY2F0KHRyYW5zaXRpb25UeXBlKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHBpY2tBdHRycyBmcm9tIFwicmMtdXRpbC9lcy9waWNrQXR0cnNcIjtcbnZhciBOb3RpZnkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIF9wcm9wcyRkdXJhdGlvbiA9IHByb3BzLmR1cmF0aW9uLFxuICAgIGR1cmF0aW9uID0gX3Byb3BzJGR1cmF0aW9uID09PSB2b2lkIDAgPyA0LjUgOiBfcHJvcHMkZHVyYXRpb24sXG4gICAgc2hvd1Byb2dyZXNzID0gcHJvcHMuc2hvd1Byb2dyZXNzLFxuICAgIF9wcm9wcyRwYXVzZU9uSG92ZXIgPSBwcm9wcy5wYXVzZU9uSG92ZXIsXG4gICAgcGF1c2VPbkhvdmVyID0gX3Byb3BzJHBhdXNlT25Ib3ZlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRwYXVzZU9uSG92ZXIsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICBjb250ZW50ID0gcHJvcHMuY29udGVudCxcbiAgICBjbG9zYWJsZSA9IHByb3BzLmNsb3NhYmxlLFxuICAgIF9wcm9wcyRjbG9zZUljb24gPSBwcm9wcy5jbG9zZUljb24sXG4gICAgY2xvc2VJY29uID0gX3Byb3BzJGNsb3NlSWNvbiA9PT0gdm9pZCAwID8gJ3gnIDogX3Byb3BzJGNsb3NlSWNvbixcbiAgICBkaXZQcm9wcyA9IHByb3BzLnByb3BzLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uTm90aWNlQ2xvc2UgPSBwcm9wcy5vbk5vdGljZUNsb3NlLFxuICAgIHRpbWVzID0gcHJvcHMudGltZXMsXG4gICAgZm9yY2VkSG92ZXJpbmcgPSBwcm9wcy5ob3ZlcmluZztcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBob3ZlcmluZyA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0SG92ZXJpbmcgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBwZXJjZW50ID0gX1JlYWN0JHVzZVN0YXRlNFswXSxcbiAgICBzZXRQZXJjZW50ID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTUgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlNSwgMiksXG4gICAgc3BlbnRUaW1lID0gX1JlYWN0JHVzZVN0YXRlNlswXSxcbiAgICBzZXRTcGVudFRpbWUgPSBfUmVhY3QkdXNlU3RhdGU2WzFdO1xuICB2YXIgbWVyZ2VkSG92ZXJpbmcgPSBmb3JjZWRIb3ZlcmluZyB8fCBob3ZlcmluZztcbiAgdmFyIG1lcmdlZFNob3dQcm9ncmVzcyA9IGR1cmF0aW9uID4gMCAmJiBzaG93UHJvZ3Jlc3M7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsb3NlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSW50ZXJuYWxDbG9zZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDbG9zZSgpIHtcbiAgICBvbk5vdGljZUNsb3NlKGV2ZW50S2V5KTtcbiAgfTtcbiAgdmFyIG9uQ2xvc2VLZXlEb3duID0gZnVuY3Rpb24gb25DbG9zZUtleURvd24oZSkge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmNvZGUgPT09ICdFbnRlcicgfHwgZS5rZXlDb2RlID09PSBLZXlDb2RlLkVOVEVSKSB7XG4gICAgICBvbkludGVybmFsQ2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW1lcmdlZEhvdmVyaW5nICYmIGR1cmF0aW9uID4gMCkge1xuICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKSAtIHNwZW50VGltZTtcbiAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uSW50ZXJuYWxDbG9zZSgpO1xuICAgICAgfSwgZHVyYXRpb24gKiAxMDAwIC0gc3BlbnRUaW1lKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwYXVzZU9uSG92ZXIpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3BlbnRUaW1lKERhdGUubm93KCkgLSBzdGFydCk7XG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkdXJhdGlvbiwgbWVyZ2VkSG92ZXJpbmcsIHRpbWVzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFtZXJnZWRIb3ZlcmluZyAmJiBtZXJnZWRTaG93UHJvZ3Jlc3MgJiYgKHBhdXNlT25Ib3ZlciB8fCBzcGVudFRpbWUgPT09IDApKSB7XG4gICAgICB2YXIgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIHZhciBhbmltYXRpb25GcmFtZTtcbiAgICAgIHZhciBjYWxjdWxhdGUgPSBmdW5jdGlvbiBjYWxjdWxhdGUoKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcbiAgICAgICAgYW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuICAgICAgICAgIHZhciBydW50aW1lID0gdGltZXN0YW1wICsgc3BlbnRUaW1lIC0gc3RhcnQ7XG4gICAgICAgICAgdmFyIHByb2dyZXNzID0gTWF0aC5taW4ocnVudGltZSAvIChkdXJhdGlvbiAqIDEwMDApLCAxKTtcbiAgICAgICAgICBzZXRQZXJjZW50KHByb2dyZXNzICogMTAwKTtcbiAgICAgICAgICBpZiAocHJvZ3Jlc3MgPCAxKSB7XG4gICAgICAgICAgICBjYWxjdWxhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNhbGN1bGF0ZSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHBhdXNlT25Ib3Zlcikge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZHVyYXRpb24sIHNwZW50VGltZSwgbWVyZ2VkSG92ZXJpbmcsIG1lcmdlZFNob3dQcm9ncmVzcywgdGltZXNdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ2xvc2FibGUgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjbG9zYWJsZU9iaiA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdHlwZW9mKGNsb3NhYmxlKSA9PT0gJ29iamVjdCcgJiYgY2xvc2FibGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBjbG9zYWJsZTtcbiAgICB9XG4gICAgaWYgKGNsb3NhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbG9zZUljb246IGNsb3NlSWNvblxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9LCBbY2xvc2FibGUsIGNsb3NlSWNvbl0pO1xuICB2YXIgYXJpYVByb3BzID0gcGlja0F0dHJzKGNsb3NhYmxlT2JqLCB0cnVlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUHJvZ3Jlc3MgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciB2YWxpZFBlcmNlbnQgPSAxMDAgLSAoIXBlcmNlbnQgfHwgcGVyY2VudCA8IDAgPyAwIDogcGVyY2VudCA+IDEwMCA/IDEwMCA6IHBlcmNlbnQpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBub3RpY2VQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW5vdGljZVwiKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBkaXZQcm9wcywge1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhub3RpY2VQcmVmaXhDbHMsIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLWNsb3NhYmxlXCIpLCBjbG9zYWJsZSkpLFxuICAgIHN0eWxlOiBzdHlsZSxcbiAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcihlKSB7XG4gICAgICB2YXIgX2RpdlByb3BzJG9uTW91c2VFbnRlO1xuICAgICAgc2V0SG92ZXJpbmcodHJ1ZSk7XG4gICAgICBkaXZQcm9wcyA9PT0gbnVsbCB8fCBkaXZQcm9wcyA9PT0gdm9pZCAwIHx8IChfZGl2UHJvcHMkb25Nb3VzZUVudGUgPSBkaXZQcm9wcy5vbk1vdXNlRW50ZXIpID09PSBudWxsIHx8IF9kaXZQcm9wcyRvbk1vdXNlRW50ZSA9PT0gdm9pZCAwIHx8IF9kaXZQcm9wcyRvbk1vdXNlRW50ZS5jYWxsKGRpdlByb3BzLCBlKTtcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKGUpIHtcbiAgICAgIHZhciBfZGl2UHJvcHMkb25Nb3VzZUxlYXY7XG4gICAgICBzZXRIb3ZlcmluZyhmYWxzZSk7XG4gICAgICBkaXZQcm9wcyA9PT0gbnVsbCB8fCBkaXZQcm9wcyA9PT0gdm9pZCAwIHx8IChfZGl2UHJvcHMkb25Nb3VzZUxlYXYgPSBkaXZQcm9wcy5vbk1vdXNlTGVhdmUpID09PSBudWxsIHx8IF9kaXZQcm9wcyRvbk1vdXNlTGVhdiA9PT0gdm9pZCAwIHx8IF9kaXZQcm9wcyRvbk1vdXNlTGVhdi5jYWxsKGRpdlByb3BzLCBlKTtcbiAgICB9LFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG5vdGljZVByZWZpeENscywgXCItY29udGVudFwiKVxuICB9LCBjb250ZW50KSwgY2xvc2FibGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogMCxcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG5vdGljZVByZWZpeENscywgXCItY2xvc2VcIiksXG4gICAgb25LZXlEb3duOiBvbkNsb3NlS2V5RG93bixcbiAgICBcImFyaWEtbGFiZWxcIjogXCJDbG9zZVwiXG4gIH0sIGFyaWFQcm9wcywge1xuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uSW50ZXJuYWxDbG9zZSgpO1xuICAgIH1cbiAgfSksIGNsb3NhYmxlT2JqLmNsb3NlSWNvbiksIG1lcmdlZFNob3dQcm9ncmVzcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInByb2dyZXNzXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG5vdGljZVByZWZpeENscywgXCItcHJvZ3Jlc3NcIiksXG4gICAgbWF4OiBcIjEwMFwiLFxuICAgIHZhbHVlOiB2YWxpZFBlcmNlbnRcbiAgfSwgdmFsaWRQZXJjZW50ICsgJyUnKSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IE5vdGlmeTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZXNcIiwgXCJzdHlsZXNcIl07XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBDU1NNb3Rpb25MaXN0IH0gZnJvbSAncmMtbW90aW9uJztcbmltcG9ydCBOb3RpY2UgZnJvbSBcIi4vTm90aWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4vTm90aWZpY2F0aW9uUHJvdmlkZXJcIjtcbmltcG9ydCB1c2VTdGFjayBmcm9tIFwiLi9ob29rcy91c2VTdGFja1wiO1xudmFyIE5vdGljZUxpc3QgPSBmdW5jdGlvbiBOb3RpY2VMaXN0KHByb3BzKSB7XG4gIHZhciBjb25maWdMaXN0ID0gcHJvcHMuY29uZmlnTGlzdCxcbiAgICBwbGFjZW1lbnQgPSBwcm9wcy5wbGFjZW1lbnQsXG4gICAgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIG1vdGlvbiA9IHByb3BzLm1vdGlvbixcbiAgICBvbkFsbE5vdGljZVJlbW92ZWQgPSBwcm9wcy5vbkFsbE5vdGljZVJlbW92ZWQsXG4gICAgb25Ob3RpY2VDbG9zZSA9IHByb3BzLm9uTm90aWNlQ2xvc2UsXG4gICAgc3RhY2tDb25maWcgPSBwcm9wcy5zdGFjaztcbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChOb3RpZmljYXRpb25Db250ZXh0KSxcbiAgICBjdHhDbHMgPSBfdXNlQ29udGV4dC5jbGFzc05hbWVzO1xuICB2YXIgZGljdFJlZiA9IHVzZVJlZih7fSk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBsYXRlc3ROb3RpY2UgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldExhdGVzdE5vdGljZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoW10pLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBob3ZlcktleXMgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldEhvdmVyS2V5cyA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBrZXlzID0gY29uZmlnTGlzdC5tYXAoZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgIGtleTogU3RyaW5nKGNvbmZpZy5rZXkpXG4gICAgfTtcbiAgfSk7XG4gIHZhciBfdXNlU3RhY2sgPSB1c2VTdGFjayhzdGFja0NvbmZpZyksXG4gICAgX3VzZVN0YWNrMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGFjaywgMiksXG4gICAgc3RhY2sgPSBfdXNlU3RhY2syWzBdLFxuICAgIF91c2VTdGFjazIkID0gX3VzZVN0YWNrMlsxXSxcbiAgICBvZmZzZXQgPSBfdXNlU3RhY2syJC5vZmZzZXQsXG4gICAgdGhyZXNob2xkID0gX3VzZVN0YWNrMiQudGhyZXNob2xkLFxuICAgIGdhcCA9IF91c2VTdGFjazIkLmdhcDtcbiAgdmFyIGV4cGFuZGVkID0gc3RhY2sgJiYgKGhvdmVyS2V5cy5sZW5ndGggPiAwIHx8IGtleXMubGVuZ3RoIDw9IHRocmVzaG9sZCk7XG4gIHZhciBwbGFjZW1lbnRNb3Rpb24gPSB0eXBlb2YgbW90aW9uID09PSAnZnVuY3Rpb24nID8gbW90aW9uKHBsYWNlbWVudCkgOiBtb3Rpb247XG5cbiAgLy8gQ2xlYW4gaG92ZXIga2V5XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHN0YWNrICYmIGhvdmVyS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICBzZXRIb3ZlcktleXMoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIHByZXYuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5cy5zb21lKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICB2YXIgZGF0YUtleSA9IF9yZWYua2V5O1xuICAgICAgICAgICAgcmV0dXJuIGtleSA9PT0gZGF0YUtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtob3ZlcktleXMsIGtleXMsIHN0YWNrXSk7XG5cbiAgLy8gRm9yY2UgdXBkYXRlIGxhdGVzdCBub3RpY2VcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2tleXM7XG4gICAgaWYgKHN0YWNrICYmIGRpY3RSZWYuY3VycmVudFsoX2tleXMgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF9rZXlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfa2V5cy5rZXldKSB7XG4gICAgICB2YXIgX2tleXMyO1xuICAgICAgc2V0TGF0ZXN0Tm90aWNlKGRpY3RSZWYuY3VycmVudFsoX2tleXMyID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfa2V5czIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rZXlzMi5rZXldKTtcbiAgICB9XG4gIH0sIFtrZXlzLCBzdGFja10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTTW90aW9uTGlzdCwgX2V4dGVuZHMoe1xuICAgIGtleTogcGxhY2VtZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChwcmVmaXhDbHMsIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItXCIpLmNvbmNhdChwbGFjZW1lbnQpLCBjdHhDbHMgPT09IG51bGwgfHwgY3R4Q2xzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdHhDbHMubGlzdCwgY2xhc3NOYW1lLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXN0YWNrXCIpLCAhIXN0YWNrKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zdGFjay1leHBhbmRlZFwiKSwgZXhwYW5kZWQpKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAga2V5czoga2V5cyxcbiAgICBtb3Rpb25BcHBlYXI6IHRydWVcbiAgfSwgcGxhY2VtZW50TW90aW9uLCB7XG4gICAgb25BbGxSZW1vdmVkOiBmdW5jdGlvbiBvbkFsbFJlbW92ZWQoKSB7XG4gICAgICBvbkFsbE5vdGljZVJlbW92ZWQocGxhY2VtZW50KTtcbiAgICB9XG4gIH0pLCBmdW5jdGlvbiAoX3JlZjIsIG5vZGVSZWYpIHtcbiAgICB2YXIgY29uZmlnID0gX3JlZjIuY29uZmlnLFxuICAgICAgbW90aW9uQ2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgbW90aW9uU3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICAgIG1vdGlvbkluZGV4ID0gX3JlZjIuaW5kZXg7XG4gICAgdmFyIF9yZWYzID0gY29uZmlnLFxuICAgICAga2V5ID0gX3JlZjMua2V5LFxuICAgICAgdGltZXMgPSBfcmVmMy50aW1lcztcbiAgICB2YXIgc3RyS2V5ID0gU3RyaW5nKGtleSk7XG4gICAgdmFyIF9yZWY0ID0gY29uZmlnLFxuICAgICAgY29uZmlnQ2xhc3NOYW1lID0gX3JlZjQuY2xhc3NOYW1lLFxuICAgICAgY29uZmlnU3R5bGUgPSBfcmVmNC5zdHlsZSxcbiAgICAgIGNvbmZpZ0NsYXNzTmFtZXMgPSBfcmVmNC5jbGFzc05hbWVzLFxuICAgICAgY29uZmlnU3R5bGVzID0gX3JlZjQuc3R5bGVzLFxuICAgICAgcmVzdENvbmZpZyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNCwgX2V4Y2x1ZGVkKTtcbiAgICB2YXIgZGF0YUluZGV4ID0ga2V5cy5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gc3RyS2V5O1xuICAgIH0pO1xuXG4gICAgLy8gSWYgZGF0YUluZGV4IGlzIC0xLCB0aGF0IG1lYW5zIHRoaXMgbm90aWNlIGhhcyBiZWVuIHJlbW92ZWQgaW4gZGF0YSwgYnV0IHN0aWxsIGluIGRvbVxuICAgIC8vIFNob3VsZCBtaW51cyAobW90aW9uSW5kZXggLSAxKSB0byBnZXQgdGhlIGNvcnJlY3QgaW5kZXggYmVjYXVzZSBrZXlzLmxlbmd0aCBpcyBub3QgdGhlIHNhbWUgYXMgZG9tIGxlbmd0aFxuICAgIHZhciBzdGFja1N0eWxlID0ge307XG4gICAgaWYgKHN0YWNrKSB7XG4gICAgICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aCAtIDEgLSAoZGF0YUluZGV4ID4gLTEgPyBkYXRhSW5kZXggOiBtb3Rpb25JbmRleCAtIDEpO1xuICAgICAgdmFyIHRyYW5zZm9ybVggPSBwbGFjZW1lbnQgPT09ICd0b3AnIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgPyAnLTUwJScgOiAnMCc7XG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIHZhciBfZGljdFJlZiRjdXJyZW50JHN0ckssIF9kaWN0UmVmJGN1cnJlbnQkc3RySzIsIF9kaWN0UmVmJGN1cnJlbnQkc3RySzM7XG4gICAgICAgIHN0YWNrU3R5bGUuaGVpZ2h0ID0gZXhwYW5kZWQgPyAoX2RpY3RSZWYkY3VycmVudCRzdHJLID0gZGljdFJlZi5jdXJyZW50W3N0cktleV0pID09PSBudWxsIHx8IF9kaWN0UmVmJGN1cnJlbnQkc3RySyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RpY3RSZWYkY3VycmVudCRzdHJLLm9mZnNldEhlaWdodCA6IGxhdGVzdE5vdGljZSA9PT0gbnVsbCB8fCBsYXRlc3ROb3RpY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhdGVzdE5vdGljZS5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtXG4gICAgICAgIHZhciB2ZXJ0aWNhbE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgIHZhciBfZGljdFJlZiRjdXJyZW50JGtleXM7XG4gICAgICAgICAgdmVydGljYWxPZmZzZXQgKz0gKChfZGljdFJlZiRjdXJyZW50JGtleXMgPSBkaWN0UmVmLmN1cnJlbnRba2V5c1trZXlzLmxlbmd0aCAtIDEgLSBpXS5rZXldKSA9PT0gbnVsbCB8fCBfZGljdFJlZiRjdXJyZW50JGtleXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kaWN0UmVmJGN1cnJlbnQka2V5cy5vZmZzZXRIZWlnaHQpICsgZ2FwO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFuc2Zvcm1ZID0gKGV4cGFuZGVkID8gdmVydGljYWxPZmZzZXQgOiBpbmRleCAqIG9mZnNldCkgKiAocGxhY2VtZW50LnN0YXJ0c1dpdGgoJ3RvcCcpID8gMSA6IC0xKTtcbiAgICAgICAgdmFyIHNjYWxlWCA9ICFleHBhbmRlZCAmJiBsYXRlc3ROb3RpY2UgIT09IG51bGwgJiYgbGF0ZXN0Tm90aWNlICE9PSB2b2lkIDAgJiYgbGF0ZXN0Tm90aWNlLm9mZnNldFdpZHRoICYmIChfZGljdFJlZiRjdXJyZW50JHN0cksyID0gZGljdFJlZi5jdXJyZW50W3N0cktleV0pICE9PSBudWxsICYmIF9kaWN0UmVmJGN1cnJlbnQkc3RySzIgIT09IHZvaWQgMCAmJiBfZGljdFJlZiRjdXJyZW50JHN0cksyLm9mZnNldFdpZHRoID8gKChsYXRlc3ROb3RpY2UgPT09IG51bGwgfHwgbGF0ZXN0Tm90aWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYXRlc3ROb3RpY2Uub2Zmc2V0V2lkdGgpIC0gb2Zmc2V0ICogMiAqIChpbmRleCA8IDMgPyBpbmRleCA6IDMpKSAvICgoX2RpY3RSZWYkY3VycmVudCRzdHJLMyA9IGRpY3RSZWYuY3VycmVudFtzdHJLZXldKSA9PT0gbnVsbCB8fCBfZGljdFJlZiRjdXJyZW50JHN0ckszID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGljdFJlZiRjdXJyZW50JHN0ckszLm9mZnNldFdpZHRoKSA6IDE7XG4gICAgICAgIHN0YWNrU3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQodHJhbnNmb3JtWCwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtWSwgXCJweCwgMCkgc2NhbGVYKFwiKS5jb25jYXQoc2NhbGVYLCBcIilcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFja1N0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KHRyYW5zZm9ybVgsIFwiLCAwLCAwKVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIHJlZjogbm9kZVJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW5vdGljZS13cmFwcGVyXCIpLCBtb3Rpb25DbGFzc05hbWUsIGNvbmZpZ0NsYXNzTmFtZXMgPT09IG51bGwgfHwgY29uZmlnQ2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnQ2xhc3NOYW1lcy53cmFwcGVyKSxcbiAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW90aW9uU3R5bGUpLCBzdGFja1N0eWxlKSwgY29uZmlnU3R5bGVzID09PSBudWxsIHx8IGNvbmZpZ1N0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnU3R5bGVzLndyYXBwZXIpLFxuICAgICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICAgIHJldHVybiBzZXRIb3ZlcktleXMoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgICAgICByZXR1cm4gcHJldi5pbmNsdWRlcyhzdHJLZXkpID8gcHJldiA6IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocHJldiksIFtzdHJLZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Nb3VzZUxlYXZlOiBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIHJldHVybiBzZXRIb3ZlcktleXMoZnVuY3Rpb24gKHByZXYpIHtcbiAgICAgICAgICByZXR1cm4gcHJldi5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHJldHVybiBrICE9PSBzdHJLZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5vdGljZSwgX2V4dGVuZHMoe30sIHJlc3RDb25maWcsIHtcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgaWYgKGRhdGFJbmRleCA+IC0xKSB7XG4gICAgICAgICAgZGljdFJlZi5jdXJyZW50W3N0cktleV0gPSBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBkaWN0UmVmLmN1cnJlbnRbc3RyS2V5XTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAgY2xhc3NOYW1lczogY29uZmlnQ2xhc3NOYW1lcyxcbiAgICAgIHN0eWxlczogY29uZmlnU3R5bGVzLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNvbmZpZ0NsYXNzTmFtZSwgY3R4Q2xzID09PSBudWxsIHx8IGN0eENscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Q2xzLm5vdGljZSksXG4gICAgICBzdHlsZTogY29uZmlnU3R5bGUsXG4gICAgICB0aW1lczogdGltZXMsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIGV2ZW50S2V5OiBrZXksXG4gICAgICBvbk5vdGljZUNsb3NlOiBvbk5vdGljZUNsb3NlLFxuICAgICAgaG92ZXJpbmc6IHN0YWNrICYmIGhvdmVyS2V5cy5sZW5ndGggPiAwXG4gICAgfSkpKTtcbiAgfSk7XG59O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTm90aWNlTGlzdC5kaXNwbGF5TmFtZSA9ICdOb3RpY2VMaXN0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IE5vdGljZUxpc3Q7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgTm90aWZpY2F0aW9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbnZhciBOb3RpZmljYXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uIE5vdGlmaWNhdGlvblByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjbGFzc05hbWVzID0gX3JlZi5jbGFzc05hbWVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm90aWZpY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB7XG4gICAgICBjbGFzc05hbWVzOiBjbGFzc05hbWVzXG4gICAgfVxuICB9LCBjaGlsZHJlbik7XG59O1xuZXhwb3J0IGRlZmF1bHQgTm90aWZpY2F0aW9uUHJvdmlkZXI7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgTm90aWNlTGlzdCBmcm9tIFwiLi9Ob3RpY2VMaXN0XCI7XG4vLyBhbnQtbm90aWZpY2F0aW9uIGFudC1ub3RpZmljYXRpb24tdG9wUmlnaHRcbnZhciBOb3RpZmljYXRpb25zID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIF9wcm9wcyRwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3Byb3BzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLW5vdGlmaWNhdGlvbicgOiBfcHJvcHMkcHJlZml4Q2xzLFxuICAgIGNvbnRhaW5lciA9IHByb3BzLmNvbnRhaW5lcixcbiAgICBtb3Rpb24gPSBwcm9wcy5tb3Rpb24sXG4gICAgbWF4Q291bnQgPSBwcm9wcy5tYXhDb3VudCxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBvbkFsbFJlbW92ZWQgPSBwcm9wcy5vbkFsbFJlbW92ZWQsXG4gICAgc3RhY2sgPSBwcm9wcy5zdGFjayxcbiAgICByZW5kZXJOb3RpZmljYXRpb25zID0gcHJvcHMucmVuZGVyTm90aWZpY2F0aW9ucztcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKFtdKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBjb25maWdMaXN0ID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXRDb25maWdMaXN0ID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ2xvc2UgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25Ob3RpY2VDbG9zZSA9IGZ1bmN0aW9uIG9uTm90aWNlQ2xvc2Uoa2V5KSB7XG4gICAgdmFyIF9jb25maWckb25DbG9zZTtcbiAgICAvLyBUcmlnZ2VyIGNsb3NlIGV2ZW50XG4gICAgdmFyIGNvbmZpZyA9IGNvbmZpZ0xpc3QuZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBrZXk7XG4gICAgfSk7XG4gICAgY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwIHx8IChfY29uZmlnJG9uQ2xvc2UgPSBjb25maWcub25DbG9zZSkgPT09IG51bGwgfHwgX2NvbmZpZyRvbkNsb3NlID09PSB2b2lkIDAgfHwgX2NvbmZpZyRvbkNsb3NlLmNhbGwoY29uZmlnKTtcbiAgICBzZXRDb25maWdMaXN0KGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ICE9PSBrZXk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKGNvbmZpZykge1xuICAgICAgICBzZXRDb25maWdMaXN0KGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgICAgdmFyIGNsb25lID0gX3RvQ29uc3VtYWJsZUFycmF5KGxpc3QpO1xuXG4gICAgICAgICAgLy8gUmVwbGFjZSBpZiBleGlzdFxuICAgICAgICAgIHZhciBpbmRleCA9IGNsb25lLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBjb25maWcua2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBpbm5lckNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIGNvbmZpZyk7XG4gICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHZhciBfbGlzdCRpbmRleDtcbiAgICAgICAgICAgIGlubmVyQ29uZmlnLnRpbWVzID0gKCgoX2xpc3QkaW5kZXggPSBsaXN0W2luZGV4XSkgPT09IG51bGwgfHwgX2xpc3QkaW5kZXggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9saXN0JGluZGV4LnRpbWVzKSB8fCAwKSArIDE7XG4gICAgICAgICAgICBjbG9uZVtpbmRleF0gPSBpbm5lckNvbmZpZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5uZXJDb25maWcudGltZXMgPSAwO1xuICAgICAgICAgICAgY2xvbmUucHVzaChpbm5lckNvbmZpZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXhDb3VudCA+IDAgJiYgY2xvbmUubGVuZ3RoID4gbWF4Q291bnQpIHtcbiAgICAgICAgICAgIGNsb25lID0gY2xvbmUuc2xpY2UoLW1heENvdW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2Uoa2V5KSB7XG4gICAgICAgIG9uTm90aWNlQ2xvc2Uoa2V5KTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBzZXRDb25maWdMaXN0KFtdKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFBsYWNlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgcGxhY2VtZW50cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGxhY2VtZW50cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5leHRQbGFjZW1lbnRzID0ge307XG4gICAgY29uZmlnTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgIHZhciBfY29uZmlnJHBsYWNlbWVudCA9IGNvbmZpZy5wbGFjZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudCA9IF9jb25maWckcGxhY2VtZW50ID09PSB2b2lkIDAgPyAndG9wUmlnaHQnIDogX2NvbmZpZyRwbGFjZW1lbnQ7XG4gICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgIG5leHRQbGFjZW1lbnRzW3BsYWNlbWVudF0gPSBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdIHx8IFtdO1xuICAgICAgICBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdLnB1c2goY29uZmlnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZpbGwgZXhpc3QgcGxhY2VtZW50cyB0byBhdm9pZCBlbXB0eSBsaXN0IGNhdXNpbmcgcmVtb3ZlIHdpdGhvdXQgbW90aW9uXG4gICAgT2JqZWN0LmtleXMocGxhY2VtZW50cykuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdID0gbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XSB8fCBbXTtcbiAgICB9KTtcbiAgICBzZXRQbGFjZW1lbnRzKG5leHRQbGFjZW1lbnRzKTtcbiAgfSwgW2NvbmZpZ0xpc3RdKTtcblxuICAvLyBDbGVhbiB1cCBjb250YWluZXIgaWYgYWxsIG5vdGljZXMgZmFkZSBvdXRcbiAgdmFyIG9uQWxsTm90aWNlUmVtb3ZlZCA9IGZ1bmN0aW9uIG9uQWxsTm90aWNlUmVtb3ZlZChwbGFjZW1lbnQpIHtcbiAgICBzZXRQbGFjZW1lbnRzKGZ1bmN0aW9uIChvcmlnaW5QbGFjZW1lbnRzKSB7XG4gICAgICB2YXIgY2xvbmUgPSBfb2JqZWN0U3ByZWFkKHt9LCBvcmlnaW5QbGFjZW1lbnRzKTtcbiAgICAgIHZhciBsaXN0ID0gY2xvbmVbcGxhY2VtZW50XSB8fCBbXTtcbiAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGNsb25lW3BsYWNlbWVudF07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gRWZmZWN0IHRlbGwgdGhhdCBwbGFjZW1lbnRzIGlzIGVtcHR5IG5vd1xuICB2YXIgZW1wdHlSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChPYmplY3Qua2V5cyhwbGFjZW1lbnRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBlbXB0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGVtcHR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIFRyaWdnZXIgb25seSB3aGVuIGZyb20gZXhpc3QgdG8gZW1wdHlcbiAgICAgIG9uQWxsUmVtb3ZlZCA9PT0gbnVsbCB8fCBvbkFsbFJlbW92ZWQgPT09IHZvaWQgMCB8fCBvbkFsbFJlbW92ZWQoKTtcbiAgICAgIGVtcHR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtwbGFjZW1lbnRzXSk7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIHBsYWNlbWVudExpc3QgPSBPYmplY3Qua2V5cyhwbGFjZW1lbnRzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBwbGFjZW1lbnRMaXN0Lm1hcChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHBsYWNlbWVudENvbmZpZ0xpc3QgPSBwbGFjZW1lbnRzW3BsYWNlbWVudF07XG4gICAgdmFyIGxpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpY2VMaXN0LCB7XG4gICAgICBrZXk6IHBsYWNlbWVudCxcbiAgICAgIGNvbmZpZ0xpc3Q6IHBsYWNlbWVudENvbmZpZ0xpc3QsXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUgPT09IG51bGwgfHwgY2xhc3NOYW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWUocGxhY2VtZW50KSxcbiAgICAgIHN0eWxlOiBzdHlsZSA9PT0gbnVsbCB8fCBzdHlsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGUocGxhY2VtZW50KSxcbiAgICAgIG1vdGlvbjogbW90aW9uLFxuICAgICAgb25Ob3RpY2VDbG9zZTogb25Ob3RpY2VDbG9zZSxcbiAgICAgIG9uQWxsTm90aWNlUmVtb3ZlZDogb25BbGxOb3RpY2VSZW1vdmVkLFxuICAgICAgc3RhY2s6IHN0YWNrXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlbmRlck5vdGlmaWNhdGlvbnMgPyByZW5kZXJOb3RpZmljYXRpb25zKGxpc3QsIHtcbiAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAga2V5OiBwbGFjZW1lbnRcbiAgICB9KSA6IGxpc3Q7XG4gIH0pKSwgY29udGFpbmVyKTtcbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTm90aWZpY2F0aW9ucy5kaXNwbGF5TmFtZSA9ICdOb3RpZmljYXRpb25zJztcbn1cbmV4cG9ydCBkZWZhdWx0IE5vdGlmaWNhdGlvbnM7IiwiaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJnZXRDb250YWluZXJcIiwgXCJtb3Rpb25cIiwgXCJwcmVmaXhDbHNcIiwgXCJtYXhDb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwib25BbGxSZW1vdmVkXCIsIFwic3RhY2tcIiwgXCJyZW5kZXJOb3RpZmljYXRpb25zXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSBcIi4uL05vdGlmaWNhdGlvbnNcIjtcbmltcG9ydCB7IHVzZUV2ZW50IH0gZnJvbSAncmMtdXRpbCc7XG52YXIgZGVmYXVsdEdldENvbnRhaW5lciA9IGZ1bmN0aW9uIGRlZmF1bHRHZXRDb250YWluZXIoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufTtcbnZhciB1bmlxdWVLZXkgPSAwO1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgb2JqTGlzdCA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBvYmpMaXN0W19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIG9iakxpc3QuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbG9uZVtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VOb3RpZmljYXRpb24oKSB7XG4gIHZhciByb290Q29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9yb290Q29uZmlnJGdldENvbnRhaSA9IHJvb3RDb25maWcuZ2V0Q29udGFpbmVyLFxuICAgIGdldENvbnRhaW5lciA9IF9yb290Q29uZmlnJGdldENvbnRhaSA9PT0gdm9pZCAwID8gZGVmYXVsdEdldENvbnRhaW5lciA6IF9yb290Q29uZmlnJGdldENvbnRhaSxcbiAgICBtb3Rpb24gPSByb290Q29uZmlnLm1vdGlvbixcbiAgICBwcmVmaXhDbHMgPSByb290Q29uZmlnLnByZWZpeENscyxcbiAgICBtYXhDb3VudCA9IHJvb3RDb25maWcubWF4Q291bnQsXG4gICAgY2xhc3NOYW1lID0gcm9vdENvbmZpZy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSByb290Q29uZmlnLnN0eWxlLFxuICAgIG9uQWxsUmVtb3ZlZCA9IHJvb3RDb25maWcub25BbGxSZW1vdmVkLFxuICAgIHN0YWNrID0gcm9vdENvbmZpZy5zdGFjayxcbiAgICByZW5kZXJOb3RpZmljYXRpb25zID0gcm9vdENvbmZpZy5yZW5kZXJOb3RpZmljYXRpb25zLFxuICAgIHNoYXJlQ29uZmlnID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHJvb3RDb25maWcsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGNvbnRhaW5lciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udGFpbmVyID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIG5vdGlmaWNhdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGNvbnRleHRIb2xkZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpZmljYXRpb25zLCB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgcmVmOiBub3RpZmljYXRpb25zUmVmLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIG1vdGlvbjogbW90aW9uLFxuICAgIG1heENvdW50OiBtYXhDb3VudCxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25BbGxSZW1vdmVkOiBvbkFsbFJlbW92ZWQsXG4gICAgc3RhY2s6IHN0YWNrLFxuICAgIHJlbmRlck5vdGlmaWNhdGlvbnM6IHJlbmRlck5vdGlmaWNhdGlvbnNcbiAgfSk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoW10pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICB0YXNrUXVldWUgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldFRhc2tRdWV1ZSA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBvcGVuID0gdXNlRXZlbnQoZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHZhciBtZXJnZWRDb25maWcgPSBtZXJnZUNvbmZpZyhzaGFyZUNvbmZpZywgY29uZmlnKTtcbiAgICBpZiAobWVyZ2VkQ29uZmlnLmtleSA9PT0gbnVsbCB8fCBtZXJnZWRDb25maWcua2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lcmdlZENvbmZpZy5rZXkgPSBcInJjLW5vdGlmaWNhdGlvbi1cIi5jb25jYXQodW5pcXVlS2V5KTtcbiAgICAgIHVuaXF1ZUtleSArPSAxO1xuICAgIH1cbiAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShxdWV1ZSksIFt7XG4gICAgICAgIHR5cGU6ICdvcGVuJyxcbiAgICAgICAgY29uZmlnOiBtZXJnZWRDb25maWdcbiAgICAgIH1dKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGFwaSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGtleSkge1xuICAgICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocXVldWUpLCBbe1xuICAgICAgICAgICAgdHlwZTogJ2Nsb3NlJyxcbiAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgICAgfV0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocXVldWUpLCBbe1xuICAgICAgICAgICAgdHlwZTogJ2Rlc3Ryb3knXG4gICAgICAgICAgfV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQ29udGFpbmVyID09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVhY3QgMTggc2hvdWxkIGFsbCBpbiBlZmZlY3QgdGhhdCB3ZSB3aWxsIGNoZWNrIGNvbnRhaW5lciBpbiBlYWNoIHJlbmRlclxuICAvLyBXaGljaCBtZWFucyBnZXRDb250YWluZXIgc2hvdWxkIGJlIHN0YWJsZS5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRDb250YWluZXIoZ2V0Q29udGFpbmVyKCkpO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIEZsdXNoIHRhc2sgd2hlbiBub2RlIHJlYWR5XG4gICAgaWYgKG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudCAmJiB0YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICB0YXNrUXVldWUuZm9yRWFjaChmdW5jdGlvbiAodGFzaykge1xuICAgICAgICBzd2l0Y2ggKHRhc2sudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ29wZW4nOlxuICAgICAgICAgICAgbm90aWZpY2F0aW9uc1JlZi5jdXJyZW50Lm9wZW4odGFzay5jb25maWcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICAgICAgbm90aWZpY2F0aW9uc1JlZi5jdXJyZW50LmNsb3NlKHRhc2sua2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICAgICAgbm90aWZpY2F0aW9uc1JlZi5jdXJyZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNTI1OTBcbiAgICAgIC8vIFJlYWN0IGBzdGFydFRyYW5zaXRpb25gIHdpbGwgcnVuIG9uY2UgYHVzZUVmZmVjdGAgYnV0IG1hbnkgdGltZXMgYHNldFN0YXRlYCxcbiAgICAgIC8vIFNvIGBzZXRUYXNrUXVldWVgIHdpdGggZmlsdGVyZWQgYXJyYXkgd2lsbCBjYXVzZSBpbmZpbml0ZSBsb29wLlxuICAgICAgLy8gV2UgY2FjaGUgdGhlIGZpcnN0IG1hdGNoIHF1ZXVlIGluc3RlYWQuXG4gICAgICB2YXIgb3JpVGFza1F1ZXVlO1xuICAgICAgdmFyIHRndFRhc2tRdWV1ZTtcblxuICAgICAgLy8gUmVhY3QgMTcgd2lsbCBtaXggb3JkZXIgb2YgZWZmZWN0ICYgc2V0U3RhdGUgaW4gYXN5bmNcbiAgICAgIC8vIC0gb3Blbjogc2V0U3RhdGVbMF1cbiAgICAgIC8vIC0gZWZmZWN0WzBdXG4gICAgICAvLyAtIG9wZW46IHNldFN0YXRlWzFdXG4gICAgICAvLyAtIGVmZmVjdCBzZXRTdGF0ZShbXSkgKiBoZXJlIHdpbGwgY2xlYW4gdXAgWzAsIDFdIGluIFJlYWN0IDE3XG4gICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKG9yaVF1ZXVlKSB7XG4gICAgICAgIGlmIChvcmlUYXNrUXVldWUgIT09IG9yaVF1ZXVlIHx8ICF0Z3RUYXNrUXVldWUpIHtcbiAgICAgICAgICBvcmlUYXNrUXVldWUgPSBvcmlRdWV1ZTtcbiAgICAgICAgICB0Z3RUYXNrUXVldWUgPSBvcmlRdWV1ZS5maWx0ZXIoZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgIHJldHVybiAhdGFza1F1ZXVlLmluY2x1ZGVzKHRhc2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0Z3RUYXNrUXVldWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt0YXNrUXVldWVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmV0dXJuID09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gW2FwaSwgY29udGV4dEhvbGRlcl07XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xudmFyIERFRkFVTFRfT0ZGU0VUID0gODtcbnZhciBERUZBVUxUX1RIUkVTSE9MRCA9IDM7XG52YXIgREVGQVVMVF9HQVAgPSAxNjtcbnZhciB1c2VTdGFjayA9IGZ1bmN0aW9uIHVzZVN0YWNrKGNvbmZpZykge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIG9mZnNldDogREVGQVVMVF9PRkZTRVQsXG4gICAgdGhyZXNob2xkOiBERUZBVUxUX1RIUkVTSE9MRCxcbiAgICBnYXA6IERFRkFVTFRfR0FQXG4gIH07XG4gIGlmIChjb25maWcgJiYgX3R5cGVvZihjb25maWcpID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBfY29uZmlnJG9mZnNldCwgX2NvbmZpZyR0aHJlc2hvbGQsIF9jb25maWckZ2FwO1xuICAgIHJlc3VsdC5vZmZzZXQgPSAoX2NvbmZpZyRvZmZzZXQgPSBjb25maWcub2Zmc2V0KSAhPT0gbnVsbCAmJiBfY29uZmlnJG9mZnNldCAhPT0gdm9pZCAwID8gX2NvbmZpZyRvZmZzZXQgOiBERUZBVUxUX09GRlNFVDtcbiAgICByZXN1bHQudGhyZXNob2xkID0gKF9jb25maWckdGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZCkgIT09IG51bGwgJiYgX2NvbmZpZyR0aHJlc2hvbGQgIT09IHZvaWQgMCA/IF9jb25maWckdGhyZXNob2xkIDogREVGQVVMVF9USFJFU0hPTEQ7XG4gICAgcmVzdWx0LmdhcCA9IChfY29uZmlnJGdhcCA9IGNvbmZpZy5nYXApICE9PSBudWxsICYmIF9jb25maWckZ2FwICE9PSB2b2lkIDAgPyBfY29uZmlnJGdhcCA6IERFRkFVTFRfR0FQO1xuICB9XG4gIHJldHVybiBbISFjb25maWcsIHJlc3VsdF07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlU3RhY2s7IiwiaW1wb3J0IHVzZU5vdGlmaWNhdGlvbiBmcm9tIFwiLi9ob29rcy91c2VOb3RpZmljYXRpb25cIjtcbmltcG9ydCBOb3RpY2UgZnJvbSBcIi4vTm90aWNlXCI7XG5pbXBvcnQgTm90aWZpY2F0aW9uUHJvdmlkZXIgZnJvbSBcIi4vTm90aWZpY2F0aW9uUHJvdmlkZXJcIjtcbmV4cG9ydCB7IHVzZU5vdGlmaWNhdGlvbiwgTm90aWNlLCBOb3RpZmljYXRpb25Qcm92aWRlciB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==