"use strict"; (self["webpackChunk_core_volunteer_app"] = self["webpackChunk_core_volunteer_app"] || []).push([["vendors-node_modules_rc-image_es_index_js-node_modules_rc-input_lib_utils_commonUtils_js-node-8cf92a"],{ /***/ "../../../node_modules/rc-image/es/Image.js": /*!**************************************************!*\ !*** ../../../node_modules/rc-image/es/Image.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_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_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_typeof__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.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_Dom_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/Dom/css */ "../../../node_modules/rc-util/es/Dom/css.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 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 _Preview__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Preview */ "../../../node_modules/rc-image/es/Preview.js"); /* harmony import */ var _PreviewGroup__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./PreviewGroup */ "../../../node_modules/rc-image/es/PreviewGroup.js"); /* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./common */ "../../../node_modules/rc-image/es/common.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js"); /* harmony import */ var _hooks_useRegisterImage__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hooks/useRegisterImage */ "../../../node_modules/rc-image/es/hooks/useRegisterImage.js"); /* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hooks/useStatus */ "../../../node_modules/rc-image/es/hooks/useStatus.js"); var _excluded = ["src", "alt", "onPreviewClose", "prefixCls", "previewPrefixCls", "placeholder", "fallback", "width", "height", "style", "preview", "className", "onClick", "onError", "wrapperClassName", "wrapperStyle", "rootClassName"], _excluded2 = ["src", "visible", "onVisibleChange", "getContainer", "mask", "maskClassName", "movable", "icons", "scaleStep", "minScale", "maxScale", "imageRender", "toolbarRender"]; var ImageInternal = function ImageInternal(props) { var imgSrc = props.src, alt = props.alt, onInitialPreviewClose = props.onPreviewClose, _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? 'rc-image' : _props$prefixCls, _props$previewPrefixC = props.previewPrefixCls, previewPrefixCls = _props$previewPrefixC === void 0 ? "".concat(prefixCls, "-preview") : _props$previewPrefixC, placeholder = props.placeholder, fallback = props.fallback, width = props.width, height = props.height, style = props.style, _props$preview = props.preview, preview = _props$preview === void 0 ? true : _props$preview, className = props.className, onClick = props.onClick, onError = props.onError, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, rootClassName = props.rootClassName, otherProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(props, _excluded); var isCustomPlaceholder = placeholder && placeholder !== true; var _ref = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__["default"])(preview) === 'object' ? preview : {}, previewSrc = _ref.src, _ref$visible = _ref.visible, previewVisible = _ref$visible === void 0 ? undefined : _ref$visible, _ref$onVisibleChange = _ref.onVisibleChange, onPreviewVisibleChange = _ref$onVisibleChange === void 0 ? onInitialPreviewClose : _ref$onVisibleChange, _ref$getContainer = _ref.getContainer, getPreviewContainer = _ref$getContainer === void 0 ? undefined : _ref$getContainer, previewMask = _ref.mask, maskClassName = _ref.maskClassName, movable = _ref.movable, icons = _ref.icons, scaleStep = _ref.scaleStep, minScale = _ref.minScale, maxScale = _ref.maxScale, imageRender = _ref.imageRender, toolbarRender = _ref.toolbarRender, dialogProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(_ref, _excluded2); var src = previewSrc !== null && previewSrc !== void 0 ? previewSrc : imgSrc; var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_8__["default"])(!!previewVisible, { value: previewVisible, onChange: onPreviewVisibleChange }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useMergedState, 2), isShowPreview = _useMergedState2[0], setShowPreview = _useMergedState2[1]; var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_15__["default"])({ src: imgSrc, isCustomPlaceholder: isCustomPlaceholder, fallback: fallback }), _useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useStatus, 3), getImgRef = _useStatus2[0], srcAndOnload = _useStatus2[1], status = _useStatus2[2]; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(null), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useState, 2), mousePosition = _useState2[0], setMousePosition = _useState2[1]; var groupContext = (0,react__WEBPACK_IMPORTED_MODULE_9__.useContext)(_context__WEBPACK_IMPORTED_MODULE_13__.PreviewGroupContext); var canPreview = !!preview; var onPreviewClose = function onPreviewClose() { setShowPreview(false); setMousePosition(null); }; var wrapperClass = classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, wrapperClassName, rootClassName, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-error"), status === 'error')); // ========================= ImageProps ========================= var imgCommonProps = (0,react__WEBPACK_IMPORTED_MODULE_9__.useMemo)(function () { var obj = {}; _common__WEBPACK_IMPORTED_MODULE_12__.COMMON_PROPS.forEach(function (prop) { if (props[prop] !== undefined) { obj[prop] = props[prop]; } }); return obj; }, _common__WEBPACK_IMPORTED_MODULE_12__.COMMON_PROPS.map(function (prop) { return props[prop]; })); // ========================== Register ========================== var registerData = (0,react__WEBPACK_IMPORTED_MODULE_9__.useMemo)(function () { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, imgCommonProps), {}, { src: src }); }, [src, imgCommonProps]); var imageId = (0,_hooks_useRegisterImage__WEBPACK_IMPORTED_MODULE_14__["default"])(canPreview, registerData); // ========================== Preview =========================== var onPreview = function onPreview(e) { var _getOffset = (0,rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_7__.getOffset)(e.target), left = _getOffset.left, top = _getOffset.top; if (groupContext) { groupContext.onPreview(imageId, src, left, top); } else { setMousePosition({ x: left, y: top }); setShowPreview(true); } onClick === null || onClick === void 0 || onClick(e); }; // =========================== Render =========================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(react__WEBPACK_IMPORTED_MODULE_9__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, otherProps, { className: wrapperClass, onClick: canPreview ? onPreview : onClick, style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({ width: width, height: height }, wrapperStyle) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("img", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, imgCommonProps, { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()("".concat(prefixCls, "-img"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, "".concat(prefixCls, "-img-placeholder"), placeholder === true), className), style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({ height: height }, style), ref: getImgRef }, srcAndOnload, { width: width, height: height, onError: onError })), status === 'loading' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", { "aria-hidden": "true", className: "".concat(prefixCls, "-placeholder") }, placeholder), previewMask && canPreview && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()("".concat(prefixCls, "-mask"), maskClassName), style: { display: (style === null || style === void 0 ? void 0 : style.display) === 'none' ? 'none' : undefined } }, previewMask)), !groupContext && canPreview && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Preview__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ "aria-hidden": !isShowPreview, visible: isShowPreview, prefixCls: previewPrefixCls, onClose: onPreviewClose, mousePosition: mousePosition, src: src, alt: alt, imageInfo: { width: width, height: height }, fallback: fallback, getContainer: getPreviewContainer, icons: icons, movable: movable, scaleStep: scaleStep, minScale: minScale, maxScale: maxScale, rootClassName: rootClassName, imageRender: imageRender, imgCommonProps: imgCommonProps, toolbarRender: toolbarRender }, dialogProps))); }; ImageInternal.PreviewGroup = _PreviewGroup__WEBPACK_IMPORTED_MODULE_11__["default"]; if (true) { ImageInternal.displayName = 'Image'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ImageInternal); /***/ }), /***/ "../../../node_modules/rc-image/es/Operations.js": /*!*******************************************************!*\ !*** ../../../node_modules/rc-image/es/Operations.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_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _rc_component_portal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rc-component/portal */ "../../../node_modules/@rc-component/portal/es/index.js"); /* 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_motion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-motion */ "../../../node_modules/rc-motion/es/index.js"); /* 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 _context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js"); var Operations = function Operations(props) { var visible = props.visible, maskTransitionName = props.maskTransitionName, getContainer = props.getContainer, prefixCls = props.prefixCls, rootClassName = props.rootClassName, icons = props.icons, countRender = props.countRender, showSwitch = props.showSwitch, showProgress = props.showProgress, current = props.current, transform = props.transform, count = props.count, scale = props.scale, minScale = props.minScale, maxScale = props.maxScale, closeIcon = props.closeIcon, onActive = props.onActive, onClose = props.onClose, onZoomIn = props.onZoomIn, onZoomOut = props.onZoomOut, onRotateRight = props.onRotateRight, onRotateLeft = props.onRotateLeft, onFlipX = props.onFlipX, onFlipY = props.onFlipY, onReset = props.onReset, toolbarRender = props.toolbarRender, zIndex = props.zIndex, image = props.image; var groupContext = (0,react__WEBPACK_IMPORTED_MODULE_6__.useContext)(_context__WEBPACK_IMPORTED_MODULE_7__.PreviewGroupContext); var rotateLeft = icons.rotateLeft, rotateRight = icons.rotateRight, zoomIn = icons.zoomIn, zoomOut = icons.zoomOut, close = icons.close, left = icons.left, right = icons.right, flipX = icons.flipX, flipY = icons.flipY; var toolClassName = "".concat(prefixCls, "-operations-operation"); react__WEBPACK_IMPORTED_MODULE_6__.useEffect(function () { var onKeyDown = function onKeyDown(e) { if (e.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_5__["default"].ESC) { onClose(); } }; if (visible) { window.addEventListener('keydown', onKeyDown); } return function () { window.removeEventListener('keydown', onKeyDown); }; }, [visible]); var handleActive = function handleActive(e, offset) { e.preventDefault(); e.stopPropagation(); onActive(offset); }; var renderOperation = react__WEBPACK_IMPORTED_MODULE_6__.useCallback(function (_ref) { var type = _ref.type, disabled = _ref.disabled, onClick = _ref.onClick, icon = _ref.icon; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { key: type, className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(toolClassName, "".concat(prefixCls, "-operations-operation-").concat(type), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-operations-operation-disabled"), !!disabled)), onClick: onClick }, icon); }, [toolClassName, prefixCls]); var switchPrevNode = showSwitch ? renderOperation({ icon: left, onClick: function onClick(e) { return handleActive(e, -1); }, type: 'prev', disabled: current === 0 }) : undefined; var switchNextNode = showSwitch ? renderOperation({ icon: right, onClick: function onClick(e) { return handleActive(e, 1); }, type: 'next', disabled: current === count - 1 }) : undefined; var flipYNode = renderOperation({ icon: flipY, onClick: onFlipY, type: 'flipY' }); var flipXNode = renderOperation({ icon: flipX, onClick: onFlipX, type: 'flipX' }); var rotateLeftNode = renderOperation({ icon: rotateLeft, onClick: onRotateLeft, type: 'rotateLeft' }); var rotateRightNode = renderOperation({ icon: rotateRight, onClick: onRotateRight, type: 'rotateRight' }); var zoomOutNode = renderOperation({ icon: zoomOut, onClick: onZoomOut, type: 'zoomOut', disabled: scale <= minScale }); var zoomInNode = renderOperation({ icon: zoomIn, onClick: onZoomIn, type: 'zoomIn', disabled: scale === maxScale }); var toolbarNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: "".concat(prefixCls, "-operations") }, flipYNode, flipXNode, rotateLeftNode, rotateRightNode, zoomOutNode, zoomInNode); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(rc_motion__WEBPACK_IMPORTED_MODULE_4__["default"], { visible: visible, motionName: maskTransitionName }, function (_ref2) { var className = _ref2.className, style = _ref2.style; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(_rc_component_portal__WEBPACK_IMPORTED_MODULE_2__["default"], { open: true, getContainer: getContainer !== null && getContainer !== void 0 ? getContainer : document.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()("".concat(prefixCls, "-operations-wrapper"), className, rootClassName), style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, style), {}, { zIndex: zIndex }) }, closeIcon === null ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("button", { className: "".concat(prefixCls, "-close"), onClick: onClose }, closeIcon || close), showSwitch && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(react__WEBPACK_IMPORTED_MODULE_6__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()("".concat(prefixCls, "-switch-left"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-switch-left-disabled"), current === 0)), onClick: function onClick(e) { return handleActive(e, -1); } }, left), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()("".concat(prefixCls, "-switch-right"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-switch-right-disabled"), current === count - 1)), onClick: function onClick(e) { return handleActive(e, 1); } }, right)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: "".concat(prefixCls, "-footer") }, showProgress && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: "".concat(prefixCls, "-progress") }, countRender ? countRender(current + 1, count) : "".concat(current + 1, " / ").concat(count)), toolbarRender ? toolbarRender(toolbarNode, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ icons: { prevIcon: switchPrevNode, nextIcon: switchNextNode, flipYIcon: flipYNode, flipXIcon: flipXNode, rotateLeftIcon: rotateLeftNode, rotateRightIcon: rotateRightNode, zoomOutIcon: zoomOutNode, zoomInIcon: zoomInNode }, actions: { onActive: onActive, onFlipY: onFlipY, onFlipX: onFlipX, onRotateLeft: onRotateLeft, onRotateRight: onRotateRight, onZoomOut: onZoomOut, onZoomIn: onZoomIn, onReset: onReset, onClose: onClose }, transform: transform }, groupContext ? { current: current, total: count } : {}), {}, { image: image })) : toolbarNode))); }); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Operations); /***/ }), /***/ "../../../node_modules/rc-image/es/Preview.js": /*!****************************************************!*\ !*** ../../../node_modules/rc-image/es/Preview.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_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_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.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 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_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-dialog */ "../../../node_modules/rc-dialog/es/index.js"); /* harmony import */ var rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/Dom/addEventListener */ "../../../node_modules/rc-util/es/Dom/addEventListener.js"); /* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.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 _Operations__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Operations */ "../../../node_modules/rc-image/es/Operations.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js"); /* harmony import */ var _hooks_useImageTransform__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useImageTransform */ "../../../node_modules/rc-image/es/hooks/useImageTransform.js"); /* harmony import */ var _hooks_useMouseEvent__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./hooks/useMouseEvent */ "../../../node_modules/rc-image/es/hooks/useMouseEvent.js"); /* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hooks/useStatus */ "../../../node_modules/rc-image/es/hooks/useStatus.js"); /* harmony import */ var _hooks_useTouchEvent__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hooks/useTouchEvent */ "../../../node_modules/rc-image/es/hooks/useTouchEvent.js"); /* harmony import */ var _previewConfig__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./previewConfig */ "../../../node_modules/rc-image/es/previewConfig.js"); var _excluded = ["fallback", "src", "imgRef"], _excluded2 = ["prefixCls", "src", "alt", "imageInfo", "fallback", "movable", "onClose", "visible", "icons", "rootClassName", "closeIcon", "getContainer", "current", "count", "countRender", "scaleStep", "minScale", "maxScale", "transitionName", "maskTransitionName", "imageRender", "imgCommonProps", "toolbarRender", "onTransform", "onChange"]; var PreviewImage = function PreviewImage(_ref) { var fallback = _ref.fallback, src = _ref.src, imgRef = _ref.imgRef, props = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(_ref, _excluded); var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_14__["default"])({ src: src, fallback: fallback }), _useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useStatus, 2), getImgRef = _useStatus2[0], srcAndOnload = _useStatus2[1]; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("img", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({ ref: function ref(_ref2) { imgRef.current = _ref2; getImgRef(_ref2); } }, props, srcAndOnload)); }; var Preview = function Preview(props) { var prefixCls = props.prefixCls, src = props.src, alt = props.alt, imageInfo = props.imageInfo, fallback = props.fallback, _props$movable = props.movable, movable = _props$movable === void 0 ? true : _props$movable, onClose = props.onClose, visible = props.visible, _props$icons = props.icons, icons = _props$icons === void 0 ? {} : _props$icons, rootClassName = props.rootClassName, closeIcon = props.closeIcon, getContainer = props.getContainer, _props$current = props.current, current = _props$current === void 0 ? 0 : _props$current, _props$count = props.count, count = _props$count === void 0 ? 1 : _props$count, countRender = props.countRender, _props$scaleStep = props.scaleStep, scaleStep = _props$scaleStep === void 0 ? 0.5 : _props$scaleStep, _props$minScale = props.minScale, minScale = _props$minScale === void 0 ? 1 : _props$minScale, _props$maxScale = props.maxScale, maxScale = _props$maxScale === void 0 ? 50 : _props$maxScale, _props$transitionName = props.transitionName, transitionName = _props$transitionName === void 0 ? 'zoom' : _props$transitionName, _props$maskTransition = props.maskTransitionName, maskTransitionName = _props$maskTransition === void 0 ? 'fade' : _props$maskTransition, imageRender = props.imageRender, imgCommonProps = props.imgCommonProps, toolbarRender = props.toolbarRender, onTransform = props.onTransform, onChange = props.onChange, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded2); var imgRef = (0,react__WEBPACK_IMPORTED_MODULE_9__.useRef)(); var groupContext = (0,react__WEBPACK_IMPORTED_MODULE_9__.useContext)(_context__WEBPACK_IMPORTED_MODULE_11__.PreviewGroupContext); var showLeftOrRightSwitches = groupContext && count > 1; var showOperationsProgress = groupContext && count >= 1; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(true), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useState, 2), enableTransition = _useState2[0], setEnableTransition = _useState2[1]; var _useImageTransform = (0,_hooks_useImageTransform__WEBPACK_IMPORTED_MODULE_12__["default"])(imgRef, minScale, maxScale, onTransform), transform = _useImageTransform.transform, resetTransform = _useImageTransform.resetTransform, updateTransform = _useImageTransform.updateTransform, dispatchZoomChange = _useImageTransform.dispatchZoomChange; var _useMouseEvent = (0,_hooks_useMouseEvent__WEBPACK_IMPORTED_MODULE_13__["default"])(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange), isMoving = _useMouseEvent.isMoving, onMouseDown = _useMouseEvent.onMouseDown, onWheel = _useMouseEvent.onWheel; var _useTouchEvent = (0,_hooks_useTouchEvent__WEBPACK_IMPORTED_MODULE_15__["default"])(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange), isTouching = _useTouchEvent.isTouching, onTouchStart = _useTouchEvent.onTouchStart, onTouchMove = _useTouchEvent.onTouchMove, onTouchEnd = _useTouchEvent.onTouchEnd; var rotate = transform.rotate, scale = transform.scale; var wrapClassName = classnames__WEBPACK_IMPORTED_MODULE_5___default()((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-moving"), isMoving)); (0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () { if (!enableTransition) { setEnableTransition(true); } }, [enableTransition]); var onAfterClose = function onAfterClose() { resetTransform('close'); }; var onZoomIn = function onZoomIn() { dispatchZoomChange(_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO + scaleStep, 'zoomIn'); }; var onZoomOut = function onZoomOut() { dispatchZoomChange(_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO / (_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO + scaleStep), 'zoomOut'); }; var onRotateRight = function onRotateRight() { updateTransform({ rotate: rotate + 90 }, 'rotateRight'); }; var onRotateLeft = function onRotateLeft() { updateTransform({ rotate: rotate - 90 }, 'rotateLeft'); }; var onFlipX = function onFlipX() { updateTransform({ flipX: !transform.flipX }, 'flipX'); }; var onFlipY = function onFlipY() { updateTransform({ flipY: !transform.flipY }, 'flipY'); }; var onReset = function onReset() { resetTransform('reset'); }; var onActive = function onActive(offset) { var position = current + offset; if (!Number.isInteger(position) || position < 0 || position > count - 1) { return; } setEnableTransition(false); resetTransform(offset < 0 ? 'prev' : 'next'); onChange === null || onChange === void 0 || onChange(position, current); }; var onKeyDown = function onKeyDown(event) { if (!visible || !showLeftOrRightSwitches) return; if (event.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_8__["default"].LEFT) { onActive(-1); } else if (event.keyCode === rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_8__["default"].RIGHT) { onActive(1); } }; var onDoubleClick = function onDoubleClick(event) { if (visible) { if (scale !== 1) { updateTransform({ x: 0, y: 0, scale: 1 }, 'doubleClick'); } else { dispatchZoomChange(_previewConfig__WEBPACK_IMPORTED_MODULE_16__.BASE_SCALE_RATIO + scaleStep, 'doubleClick', event.clientX, event.clientY); } } }; (0,react__WEBPACK_IMPORTED_MODULE_9__.useEffect)(function () { var onKeyDownListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_7__["default"])(window, 'keydown', onKeyDown, false); return function () { onKeyDownListener.remove(); }; }, [visible, showLeftOrRightSwitches, current]); var imgNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(PreviewImage, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({}, imgCommonProps, { width: props.width, height: props.height, imgRef: imgRef, className: "".concat(prefixCls, "-img"), alt: alt, style: { transform: "translate3d(".concat(transform.x, "px, ").concat(transform.y, "px, 0) scale3d(").concat(transform.flipX ? '-' : '').concat(scale, ", ").concat(transform.flipY ? '-' : '').concat(scale, ", 1) rotate(").concat(rotate, "deg)"), transitionDuration: (!enableTransition || isTouching) && '0s' }, fallback: fallback, src: src, onWheel: onWheel, onMouseDown: onMouseDown, onDoubleClick: onDoubleClick, onTouchStart: onTouchStart, onTouchMove: onTouchMove, onTouchEnd: onTouchEnd, onTouchCancel: onTouchEnd })); var image = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ url: src, alt: alt }, imageInfo); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement((react__WEBPACK_IMPORTED_MODULE_9___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(rc_dialog__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__["default"])({ transitionName: transitionName, maskTransitionName: maskTransitionName, closable: false, keyboard: true, prefixCls: prefixCls, onClose: onClose, visible: visible, classNames: { wrapper: wrapClassName }, rootClassName: rootClassName, getContainer: getContainer }, restProps, { afterClose: onAfterClose }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement("div", { className: "".concat(prefixCls, "-img-wrapper") }, imageRender ? imageRender(imgNode, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ transform: transform, image: image }, groupContext ? { current: current } : {})) : imgNode)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9___default().createElement(_Operations__WEBPACK_IMPORTED_MODULE_10__["default"], { visible: visible, transform: transform, maskTransitionName: maskTransitionName, closeIcon: closeIcon, getContainer: getContainer, prefixCls: prefixCls, rootClassName: rootClassName, icons: icons, countRender: countRender, showSwitch: showLeftOrRightSwitches, showProgress: showOperationsProgress, current: current, count: count, scale: scale, minScale: minScale, maxScale: maxScale, toolbarRender: toolbarRender, onActive: onActive, onZoomIn: onZoomIn, onZoomOut: onZoomOut, onRotateRight: onRotateRight, onRotateLeft: onRotateLeft, onFlipX: onFlipX, onFlipY: onFlipY, onClose: onClose, onReset: onReset, zIndex: restProps.zIndex !== undefined ? restProps.zIndex + 1 : undefined, image: image })); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Preview); /***/ }), /***/ "../../../node_modules/rc-image/es/PreviewGroup.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-image/es/PreviewGroup.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_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_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_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useMergedState */ "../../../node_modules/rc-util/es/hooks/useMergedState.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 _Preview__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Preview */ "../../../node_modules/rc-image/es/Preview.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-image/es/context.js"); /* harmony import */ var _hooks_usePreviewItems__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./hooks/usePreviewItems */ "../../../node_modules/rc-image/es/hooks/usePreviewItems.js"); var _excluded = ["visible", "onVisibleChange", "getContainer", "current", "movable", "minScale", "maxScale", "countRender", "closeIcon", "onChange", "onTransform", "toolbarRender", "imageRender"], _excluded2 = ["src"]; var Group = function Group(_ref) { var _mergedItems$current; var _ref$previewPrefixCls = _ref.previewPrefixCls, previewPrefixCls = _ref$previewPrefixCls === void 0 ? 'rc-image-preview' : _ref$previewPrefixCls, children = _ref.children, _ref$icons = _ref.icons, icons = _ref$icons === void 0 ? {} : _ref$icons, items = _ref.items, preview = _ref.preview, fallback = _ref.fallback; var _ref2 = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(preview) === 'object' ? preview : {}, previewVisible = _ref2.visible, onVisibleChange = _ref2.onVisibleChange, getContainer = _ref2.getContainer, currentIndex = _ref2.current, movable = _ref2.movable, minScale = _ref2.minScale, maxScale = _ref2.maxScale, countRender = _ref2.countRender, closeIcon = _ref2.closeIcon, onChange = _ref2.onChange, onTransform = _ref2.onTransform, toolbarRender = _ref2.toolbarRender, imageRender = _ref2.imageRender, dialogProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref2, _excluded); // ========================== Items =========================== var _usePreviewItems = (0,_hooks_usePreviewItems__WEBPACK_IMPORTED_MODULE_8__["default"])(items), _usePreviewItems2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_usePreviewItems, 3), mergedItems = _usePreviewItems2[0], register = _usePreviewItems2[1], fromItems = _usePreviewItems2[2]; // ========================= Preview ========================== // >>> Index var _useMergedState = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_4__["default"])(0, { value: currentIndex }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useMergedState, 2), current = _useMergedState2[0], setCurrent = _useMergedState2[1]; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(false), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2), keepOpenIndex = _useState2[0], setKeepOpenIndex = _useState2[1]; // >>> Image var _ref3 = ((_mergedItems$current = mergedItems[current]) === null || _mergedItems$current === void 0 ? void 0 : _mergedItems$current.data) || {}, src = _ref3.src, imgCommonProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref3, _excluded2); // >>> Visible var _useMergedState3 = (0,rc_util_es_hooks_useMergedState__WEBPACK_IMPORTED_MODULE_4__["default"])(!!previewVisible, { value: previewVisible, onChange: function onChange(val, prevVal) { onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(val, prevVal, current); } }), _useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useMergedState3, 2), isShowPreview = _useMergedState4[0], setShowPreview = _useMergedState4[1]; // >>> Position var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(null), _useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState3, 2), mousePosition = _useState4[0], setMousePosition = _useState4[1]; var onPreviewFromImage = react__WEBPACK_IMPORTED_MODULE_5__.useCallback(function (id, imageSrc, mouseX, mouseY) { var index = fromItems ? mergedItems.findIndex(function (item) { return item.data.src === imageSrc; }) : mergedItems.findIndex(function (item) { return item.id === id; }); setCurrent(index < 0 ? 0 : index); setShowPreview(true); setMousePosition({ x: mouseX, y: mouseY }); setKeepOpenIndex(true); }, [mergedItems, fromItems]); // Reset current when reopen react__WEBPACK_IMPORTED_MODULE_5__.useEffect(function () { if (isShowPreview) { if (!keepOpenIndex) { setCurrent(0); } } else { setKeepOpenIndex(false); } }, [isShowPreview]); // ========================== Events ========================== var onInternalChange = function onInternalChange(next, prev) { setCurrent(next); onChange === null || onChange === void 0 || onChange(next, prev); }; var onPreviewClose = function onPreviewClose() { setShowPreview(false); setMousePosition(null); }; // ========================= Context ========================== var previewGroupContext = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () { return { register: register, onPreview: onPreviewFromImage }; }, [register, onPreviewFromImage]); // ========================== Render ========================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_context__WEBPACK_IMPORTED_MODULE_7__.PreviewGroupContext.Provider, { value: previewGroupContext }, children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_Preview__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ "aria-hidden": !isShowPreview, movable: movable, visible: isShowPreview, prefixCls: previewPrefixCls, closeIcon: closeIcon, onClose: onPreviewClose, mousePosition: mousePosition, imgCommonProps: imgCommonProps, src: src, fallback: fallback, icons: icons, minScale: minScale, maxScale: maxScale, getContainer: getContainer, current: current, count: mergedItems.length, countRender: countRender, onTransform: onTransform, toolbarRender: toolbarRender, imageRender: imageRender, onChange: onInternalChange }, dialogProps))); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Group); /***/ }), /***/ "../../../node_modules/rc-image/es/common.js": /*!***************************************************!*\ !*** ../../../node_modules/rc-image/es/common.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ COMMON_PROPS: () => (/* binding */ COMMON_PROPS) /* harmony export */ }); var COMMON_PROPS = ['crossOrigin', 'decoding', 'draggable', 'loading', 'referrerPolicy', 'sizes', 'srcSet', 'useMap', 'alt']; /***/ }), /***/ "../../../node_modules/rc-image/es/context.js": /*!****************************************************!*\ !*** ../../../node_modules/rc-image/es/context.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PreviewGroupContext: () => (/* binding */ PreviewGroupContext) /* 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 PreviewGroupContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); /***/ }), /***/ "../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js": /*!************************************************************************!*\ !*** ../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ getFixScaleEleTransPosition) /* 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 rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/css */ "../../../node_modules/rc-util/es/Dom/css.js"); function fixPoint(key, start, width, clientWidth) { var startAddWidth = start + width; var offsetStart = (width - clientWidth) / 2; if (width > clientWidth) { if (start > 0) { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, key, offsetStart); } if (start < 0 && startAddWidth < clientWidth) { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, key, -offsetStart); } } else if (start < 0 || startAddWidth > clientWidth) { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, key, start < 0 ? offsetStart : -offsetStart); } return {}; } /** * Fix positon x,y point when * * Ele width && height < client * - Back origin * * - Ele width | height > clientWidth | clientHeight * - left | top > 0 -> Back 0 * - left | top + width | height < clientWidth | clientHeight -> Back left | top + width | height === clientWidth | clientHeight * * Regardless of other */ function getFixScaleEleTransPosition(width, height, left, top) { var _getClientSize = (0,rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__.getClientSize)(), clientWidth = _getClientSize.width, clientHeight = _getClientSize.height; var fixPos = null; if (width <= clientWidth && height <= clientHeight) { fixPos = { x: 0, y: 0 }; } else if (width > clientWidth || height > clientHeight) { fixPos = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, fixPoint('x', left, width, clientWidth)), fixPoint('y', top, height, clientHeight)); } return fixPos; } /***/ }), /***/ "../../../node_modules/rc-image/es/hooks/useImageTransform.js": /*!********************************************************************!*\ !*** ../../../node_modules/rc-image/es/hooks/useImageTransform.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useImageTransform) /* 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_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/css */ "../../../node_modules/rc-util/es/Dom/css.js"); /* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.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__); var initialTransform = { x: 0, y: 0, rotate: 0, scale: 1, flipX: false, flipY: false }; function useImageTransform(imgRef, minScale, maxScale, onTransform) { var frame = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)(null); var queue = (0,react__WEBPACK_IMPORTED_MODULE_5__.useRef)([]); var _useState = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(initialTransform), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2), transform = _useState2[0], setTransform = _useState2[1]; var resetTransform = function resetTransform(action) { setTransform(initialTransform); if (!(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(initialTransform, transform)) { onTransform === null || onTransform === void 0 || onTransform({ transform: initialTransform, action: action }); } }; /** Direct update transform */ var updateTransform = function updateTransform(newTransform, action) { if (frame.current === null) { queue.current = []; frame.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_4__["default"])(function () { setTransform(function (preState) { var memoState = preState; queue.current.forEach(function (queueState) { memoState = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, memoState), queueState); }); frame.current = null; onTransform === null || onTransform === void 0 || onTransform({ transform: memoState, action: action }); return memoState; }); }); } queue.current.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, transform), newTransform)); }; /** Scale according to the position of centerX and centerY */ var dispatchZoomChange = function dispatchZoomChange(ratio, action, centerX, centerY, isTouch) { var _imgRef$current = imgRef.current, width = _imgRef$current.width, height = _imgRef$current.height, offsetWidth = _imgRef$current.offsetWidth, offsetHeight = _imgRef$current.offsetHeight, offsetLeft = _imgRef$current.offsetLeft, offsetTop = _imgRef$current.offsetTop; var newRatio = ratio; var newScale = transform.scale * ratio; if (newScale > maxScale) { newScale = maxScale; newRatio = maxScale / transform.scale; } else if (newScale < minScale) { // For mobile interactions, allow scaling down to the minimum scale. newScale = isTouch ? newScale : minScale; newRatio = newScale / transform.scale; } /** Default center point scaling */ var mergedCenterX = centerX !== null && centerX !== void 0 ? centerX : innerWidth / 2; var mergedCenterY = centerY !== null && centerY !== void 0 ? centerY : innerHeight / 2; var diffRatio = newRatio - 1; /** Deviation calculated from image size */ var diffImgX = diffRatio * width * 0.5; var diffImgY = diffRatio * height * 0.5; /** The difference between the click position and the edge of the document */ var diffOffsetLeft = diffRatio * (mergedCenterX - transform.x - offsetLeft); var diffOffsetTop = diffRatio * (mergedCenterY - transform.y - offsetTop); /** Final positioning */ var newX = transform.x - (diffOffsetLeft - diffImgX); var newY = transform.y - (diffOffsetTop - diffImgY); /** * When zooming the image * When the image size is smaller than the width and height of the window, the position is initialized */ if (ratio < 1 && newScale === 1) { var mergedWidth = offsetWidth * newScale; var mergedHeight = offsetHeight * newScale; var _getClientSize = (0,rc_util_es_Dom_css__WEBPACK_IMPORTED_MODULE_2__.getClientSize)(), clientWidth = _getClientSize.width, clientHeight = _getClientSize.height; if (mergedWidth <= clientWidth && mergedHeight <= clientHeight) { newX = 0; newY = 0; } } updateTransform({ x: newX, y: newY, scale: newScale }, action); }; return { transform: transform, resetTransform: resetTransform, updateTransform: updateTransform, dispatchZoomChange: dispatchZoomChange }; } /***/ }), /***/ "../../../node_modules/rc-image/es/hooks/useMouseEvent.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-image/es/hooks/useMouseEvent.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useMouseEvent) /* 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_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/addEventListener */ "../../../node_modules/rc-util/es/Dom/addEventListener.js"); /* 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 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 _getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../getFixScaleEleTransPosition */ "../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js"); /* harmony import */ var _previewConfig__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../previewConfig */ "../../../node_modules/rc-image/es/previewConfig.js"); function useMouseEvent(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange) { var rotate = transform.rotate, scale = transform.scale, x = transform.x, y = transform.y; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2), isMoving = _useState2[0], setMoving = _useState2[1]; var startPositionInfo = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({ diffX: 0, diffY: 0, transformX: 0, transformY: 0 }); var onMouseDown = function onMouseDown(event) { // Only allow main button if (!movable || event.button !== 0) return; event.preventDefault(); event.stopPropagation(); startPositionInfo.current = { diffX: event.pageX - x, diffY: event.pageY - y, transformX: x, transformY: y }; setMoving(true); }; var onMouseMove = function onMouseMove(event) { if (visible && isMoving) { updateTransform({ x: event.pageX - startPositionInfo.current.diffX, y: event.pageY - startPositionInfo.current.diffY }, 'move'); } }; var onMouseUp = function onMouseUp() { if (visible && isMoving) { setMoving(false); /** No need to restore the position when the picture is not moved, So as not to interfere with the click */ var _startPositionInfo$cu = startPositionInfo.current, transformX = _startPositionInfo$cu.transformX, transformY = _startPositionInfo$cu.transformY; var hasChangedPosition = x !== transformX && y !== transformY; if (!hasChangedPosition) return; var width = imgRef.current.offsetWidth * scale; var height = imgRef.current.offsetHeight * scale; // eslint-disable-next-line @typescript-eslint/no-shadow var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(), left = _imgRef$current$getBo.left, top = _imgRef$current$getBo.top; var isRotate = rotate % 180 !== 0; var fixState = (0,_getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_5__["default"])(isRotate ? height : width, isRotate ? width : height, left, top); if (fixState) { updateTransform((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, fixState), 'dragRebound'); } } }; var onWheel = function onWheel(event) { if (!visible || event.deltaY == 0) return; // Scale ratio depends on the deltaY size var scaleRatio = Math.abs(event.deltaY / 100); // Limit the maximum scale ratio var mergedScaleRatio = Math.min(scaleRatio, _previewConfig__WEBPACK_IMPORTED_MODULE_6__.WHEEL_MAX_SCALE_RATIO); // Scale the ratio each time var ratio = _previewConfig__WEBPACK_IMPORTED_MODULE_6__.BASE_SCALE_RATIO + mergedScaleRatio * scaleStep; if (event.deltaY > 0) { ratio = _previewConfig__WEBPACK_IMPORTED_MODULE_6__.BASE_SCALE_RATIO / ratio; } dispatchZoomChange(ratio, 'wheel', event.clientX, event.clientY); }; (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () { var onTopMouseUpListener; var onTopMouseMoveListener; var onMouseUpListener; var onMouseMoveListener; if (movable) { onMouseUpListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window, 'mouseup', onMouseUp, false); onMouseMoveListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window, 'mousemove', onMouseMove, false); try { // Resolve if in iframe lost event /* istanbul ignore next */ if (window.top !== window.self) { onTopMouseUpListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window.top, 'mouseup', onMouseUp, false); onTopMouseMoveListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window.top, 'mousemove', onMouseMove, false); } } catch (error) { /* istanbul ignore next */ (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__.warning)(false, "[rc-image] ".concat(error)); } } return function () { var _onMouseUpListener, _onMouseMoveListener, _onTopMouseUpListener, _onTopMouseMoveListen; (_onMouseUpListener = onMouseUpListener) === null || _onMouseUpListener === void 0 || _onMouseUpListener.remove(); (_onMouseMoveListener = onMouseMoveListener) === null || _onMouseMoveListener === void 0 || _onMouseMoveListener.remove(); /* istanbul ignore next */ (_onTopMouseUpListener = onTopMouseUpListener) === null || _onTopMouseUpListener === void 0 || _onTopMouseUpListener.remove(); /* istanbul ignore next */ (_onTopMouseMoveListen = onTopMouseMoveListener) === null || _onTopMouseMoveListen === void 0 || _onTopMouseMoveListen.remove(); }; }, [visible, isMoving, x, y, rotate, movable]); return { isMoving: isMoving, onMouseDown: onMouseDown, onMouseMove: onMouseMove, onMouseUp: onMouseUp, onWheel: onWheel }; } /***/ }), /***/ "../../../node_modules/rc-image/es/hooks/usePreviewItems.js": /*!******************************************************************!*\ !*** ../../../node_modules/rc-image/es/hooks/usePreviewItems.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ usePreviewItems) /* 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_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_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.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 _common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../common */ "../../../node_modules/rc-image/es/common.js"); /** * Merge props provided `items` or context collected images */ function usePreviewItems(items) { // Context collection image data var _React$useState = react__WEBPACK_IMPORTED_MODULE_4__.useState({}), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2), images = _React$useState2[0], setImages = _React$useState2[1]; var registerImage = react__WEBPACK_IMPORTED_MODULE_4__.useCallback(function (id, data) { setImages(function (imgs) { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, imgs), {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, id, data)); }); return function () { setImages(function (imgs) { var cloneImgs = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, imgs); delete cloneImgs[id]; return cloneImgs; }); }; }, []); // items var mergedItems = react__WEBPACK_IMPORTED_MODULE_4__.useMemo(function () { // use `items` first if (items) { return items.map(function (item) { if (typeof item === 'string') { return { data: { src: item } }; } var data = {}; Object.keys(item).forEach(function (key) { if (['src'].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_common__WEBPACK_IMPORTED_MODULE_5__.COMMON_PROPS)).includes(key)) { data[key] = item[key]; } }); return { data: data }; }); } // use registered images secondly return Object.keys(images).reduce(function (total, id) { var _images$id = images[id], canPreview = _images$id.canPreview, data = _images$id.data; if (canPreview) { total.push({ data: data, id: id }); } return total; }, []); }, [items, images]); return [mergedItems, registerImage, !!items]; } /***/ }), /***/ "../../../node_modules/rc-image/es/hooks/useRegisterImage.js": /*!*******************************************************************!*\ !*** ../../../node_modules/rc-image/es/hooks/useRegisterImage.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useRegisterImage) /* 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 _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-image/es/context.js"); var uid = 0; function useRegisterImage(canPreview, data) { var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState(function () { uid += 1; return String(uid); }), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 1), id = _React$useState2[0]; var groupContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(_context__WEBPACK_IMPORTED_MODULE_2__.PreviewGroupContext); var registerData = { data: data, canPreview: canPreview }; // Keep order start // Resolve https://github.com/ant-design/ant-design/issues/28881 // Only need unRegister when component unMount react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { if (groupContext) { return groupContext.register(id, registerData); } }, []); react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { if (groupContext) { groupContext.register(id, registerData); } }, [canPreview, data]); return id; } /***/ }), /***/ "../../../node_modules/rc-image/es/hooks/useStatus.js": /*!************************************************************!*\ !*** ../../../node_modules/rc-image/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_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 _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util */ "../../../node_modules/rc-image/es/util.js"); function useStatus(_ref) { var src = _ref.src, isCustomPlaceholder = _ref.isCustomPlaceholder, fallback = _ref.fallback; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(isCustomPlaceholder ? 'loading' : 'normal'), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2), status = _useState2[0], setStatus = _useState2[1]; var isLoaded = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(false); var isError = status === 'error'; // https://github.com/react-component/image/pull/187 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { var isCurrentSrc = true; (0,_util__WEBPACK_IMPORTED_MODULE_2__.isImageValid)(src).then(function (isValid) { // https://github.com/ant-design/ant-design/issues/44948 // If src changes, the previous setStatus should not be triggered if (!isValid && isCurrentSrc) { setStatus('error'); } }); return function () { isCurrentSrc = false; }; }, [src]); (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { if (isCustomPlaceholder && !isLoaded.current) { setStatus('loading'); } else if (isError) { setStatus('normal'); } }, [src]); var onLoad = function onLoad() { setStatus('normal'); }; var getImgRef = function getImgRef(img) { isLoaded.current = false; if (status === 'loading' && img !== null && img !== void 0 && img.complete && (img.naturalWidth || img.naturalHeight)) { isLoaded.current = true; onLoad(); } }; var srcAndOnload = isError && fallback ? { src: fallback } : { onLoad: onLoad, src: src }; return [getImgRef, srcAndOnload, status]; } /***/ }), /***/ "../../../node_modules/rc-image/es/hooks/useTouchEvent.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-image/es/hooks/useTouchEvent.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useTouchEvent) /* 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_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/addEventListener */ "../../../node_modules/rc-util/es/Dom/addEventListener.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 _getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../getFixScaleEleTransPosition */ "../../../node_modules/rc-image/es/getFixScaleEleTransPosition.js"); function getDistance(a, b) { var x = a.x - b.x; var y = a.y - b.y; return Math.hypot(x, y); } function getCenter(oldPoint1, oldPoint2, newPoint1, newPoint2) { // Calculate the distance each point has moved var distance1 = getDistance(oldPoint1, newPoint1); var distance2 = getDistance(oldPoint2, newPoint2); // If both distances are 0, return the original points if (distance1 === 0 && distance2 === 0) { return [oldPoint1.x, oldPoint1.y]; } // Calculate the ratio of the distances var ratio = distance1 / (distance1 + distance2); // Calculate the new center point based on the ratio var x = oldPoint1.x + ratio * (oldPoint2.x - oldPoint1.x); var y = oldPoint1.y + ratio * (oldPoint2.y - oldPoint1.y); return [x, y]; } function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange) { var rotate = transform.rotate, scale = transform.scale, x = transform.x, y = transform.y; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useState, 2), isTouching = _useState2[0], setIsTouching = _useState2[1]; var touchPointInfo = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)({ point1: { x: 0, y: 0 }, point2: { x: 0, y: 0 }, eventType: 'none' }); var updateTouchPointInfo = function updateTouchPointInfo(values) { touchPointInfo.current = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, touchPointInfo.current), values); }; var onTouchStart = function onTouchStart(event) { if (!movable) return; event.stopPropagation(); setIsTouching(true); var _event$touches = event.touches, touches = _event$touches === void 0 ? [] : _event$touches; if (touches.length > 1) { // touch zoom updateTouchPointInfo({ point1: { x: touches[0].clientX, y: touches[0].clientY }, point2: { x: touches[1].clientX, y: touches[1].clientY }, eventType: 'touchZoom' }); } else { // touch move updateTouchPointInfo({ point1: { x: touches[0].clientX - x, y: touches[0].clientY - y }, eventType: 'move' }); } }; var onTouchMove = function onTouchMove(event) { var _event$touches2 = event.touches, touches = _event$touches2 === void 0 ? [] : _event$touches2; var _touchPointInfo$curre = touchPointInfo.current, point1 = _touchPointInfo$curre.point1, point2 = _touchPointInfo$curre.point2, eventType = _touchPointInfo$curre.eventType; if (touches.length > 1 && eventType === 'touchZoom') { // touch zoom var newPoint1 = { x: touches[0].clientX, y: touches[0].clientY }; var newPoint2 = { x: touches[1].clientX, y: touches[1].clientY }; var _getCenter = getCenter(point1, point2, newPoint1, newPoint2), _getCenter2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getCenter, 2), centerX = _getCenter2[0], centerY = _getCenter2[1]; var ratio = getDistance(newPoint1, newPoint2) / getDistance(point1, point2); dispatchZoomChange(ratio, 'touchZoom', centerX, centerY, true); updateTouchPointInfo({ point1: newPoint1, point2: newPoint2, eventType: 'touchZoom' }); } else if (eventType === 'move') { // touch move updateTransform({ x: touches[0].clientX - point1.x, y: touches[0].clientY - point1.y }, 'move'); updateTouchPointInfo({ eventType: 'move' }); } }; var onTouchEnd = function onTouchEnd() { if (!visible) return; if (isTouching) { setIsTouching(false); } updateTouchPointInfo({ eventType: 'none' }); if (minScale > scale) { /** When the scaling ratio is less than the minimum scaling ratio, reset the scaling ratio */ return updateTransform({ x: 0, y: 0, scale: minScale }, 'touchZoom'); } var width = imgRef.current.offsetWidth * scale; var height = imgRef.current.offsetHeight * scale; // eslint-disable-next-line @typescript-eslint/no-shadow var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(), left = _imgRef$current$getBo.left, top = _imgRef$current$getBo.top; var isRotate = rotate % 180 !== 0; var fixState = (0,_getFixScaleEleTransPosition__WEBPACK_IMPORTED_MODULE_4__["default"])(isRotate ? height : width, isRotate ? width : height, left, top); if (fixState) { updateTransform((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, fixState), 'dragRebound'); } }; (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () { var onTouchMoveListener; if (visible && movable) { onTouchMoveListener = (0,rc_util_es_Dom_addEventListener__WEBPACK_IMPORTED_MODULE_2__["default"])(window, 'touchmove', function (e) { return e.preventDefault(); }, { passive: false }); } return function () { var _onTouchMoveListener; (_onTouchMoveListener = onTouchMoveListener) === null || _onTouchMoveListener === void 0 || _onTouchMoveListener.remove(); }; }, [visible, movable]); return { isTouching: isTouching, onTouchStart: onTouchStart, onTouchMove: onTouchMove, onTouchEnd: onTouchEnd }; } /***/ }), /***/ "../../../node_modules/rc-image/es/index.js": /*!**************************************************!*\ !*** ../../../node_modules/rc-image/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 _Image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Image */ "../../../node_modules/rc-image/es/Image.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Image__WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "../../../node_modules/rc-image/es/previewConfig.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-image/es/previewConfig.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BASE_SCALE_RATIO: () => (/* binding */ BASE_SCALE_RATIO), /* harmony export */ WHEEL_MAX_SCALE_RATIO: () => (/* binding */ WHEEL_MAX_SCALE_RATIO) /* harmony export */ }); /** Scale the ratio base */ var BASE_SCALE_RATIO = 1; /** The maximum zoom ratio when the mouse zooms in, adjustable */ var WHEEL_MAX_SCALE_RATIO = 1; /***/ }), /***/ "../../../node_modules/rc-image/es/util.js": /*!*************************************************!*\ !*** ../../../node_modules/rc-image/es/util.js ***! \*************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isImageValid: () => (/* binding */ isImageValid) /* harmony export */ }); function isImageValid(src) { return new Promise(function (resolve) { var img = document.createElement('img'); img.onerror = function () { return resolve(false); }; img.onload = function () { return resolve(true); }; img.src = src; }); } /***/ }), /***/ "../../../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 }), 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"); 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]; // ========================= Refs ========================= var api = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return { open: function open(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 }]); }); }, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMvdmVuZG9ycy1ub2RlX21vZHVsZXNfcmMtaW1hZ2VfZXNfaW5kZXhfanMtbm9kZV9tb2R1bGVzX3JjLWlucHV0X2xpYl91dGlsc19jb21tb25VdGlsc19qcy1ub2RlLThjZjkyYS52b2x1bnRlZXJhcGkuMDIwN2VkMDFhOTc4ZmMxYmQwYzUuYnVuZGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEQ7QUFDVztBQUNHO0FBQ0Y7QUFDZDtBQUNrQztBQUMxRjtBQUNBO0FBQzRCO0FBQ21CO0FBQ2M7QUFDOUI7QUFDdUI7QUFDdEI7QUFDVTtBQUNGO0FBQ1E7QUFDUTtBQUNkO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4RkFBd0I7QUFDekM7QUFDQSxhQUFhLDZFQUFPLHFDQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw4RkFBd0I7QUFDMUM7QUFDQSx3QkFBd0IsMkVBQWM7QUFDdEM7QUFDQTtBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBLG1CQUFtQiw2REFBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCLG9GQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwrQ0FBUTtBQUMxQixpQkFBaUIsb0ZBQWM7QUFDL0I7QUFDQTtBQUNBLHFCQUFxQixpREFBVSxDQUFDLDBEQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlEQUFFLDZDQUE2QyxxRkFBZSxHQUFHOztBQUV0RjtBQUNBLHVCQUF1Qiw4Q0FBTztBQUM5QjtBQUNBLElB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ZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9JbWFnZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9PcGVyYXRpb25zLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL1ByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW1hZ2UvZXMvUHJldmlld0dyb3VwLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9jb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2dldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VJbWFnZVRyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VNb3VzZUV2ZW50LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2hvb2tzL3VzZVByZXZpZXdJdGVtcy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VSZWdpc3RlckltYWdlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2hvb2tzL3VzZVN0YXR1cy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbWFnZS9lcy9ob29rcy91c2VUb3VjaEV2ZW50LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWltYWdlL2VzL3ByZXZpZXdDb25maWcuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW1hZ2UvZXMvdXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1pbnB1dC9lcy9CYXNlSW5wdXQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvaG9va3MvdXNlQ291bnQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvZXMvdXRpbHMvY29tbW9uVXRpbHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtaW5wdXQvbGliL3V0aWxzL2NvbW1vblV0aWxzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL0Ryb3Bkb3duTWVudS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9LZXl3b3JkVHJpZ2dlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9NZW50aW9ucy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW50aW9ucy9lcy9NZW50aW9uc0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudGlvbnMvZXMvT3B0aW9uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL2hvb2tzL3VzZUVmZmVjdFN0YXRlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnRpb25zL2VzL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9EaXZpZGVyLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvSWNvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL01lbnUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9NZW51SXRlbS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL01lbnVJdGVtR3JvdXAuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L0lubGluZVN1Yk1lbnVMaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvU3ViTWVudS9Qb3B1cFRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9TdWJNZW51L1N1Yk1lbnVMaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvU3ViTWVudS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2NvbnRleHQvSWRDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvY29udGV4dC9NZW51Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2NvbnRleHQvUGF0aENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9jb250ZXh0L1ByaXZhdGVDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlQWNjZXNzaWJpbGl0eS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZUFjdGl2ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZURpcmVjdGlvblN0eWxlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvaG9va3MvdXNlS2V5UmVjb3Jkcy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZU1lbW9DYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL2hvb2tzL3VzZVVVSUQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3BsYWNlbWVudHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy9jb21tb25VdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvdXRpbHMvbW90aW9uVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tZW51L2VzL3V0aWxzL25vZGVVdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1lbnUvZXMvdXRpbHMvdGltZVV0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbWVudS9lcy91dGlscy93YXJuVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvQ1NTTW90aW9uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9DU1NNb3Rpb25MaXN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9Eb21XcmFwcGVyLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9jb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9ob29rcy91c2VEb21Nb3Rpb25FdmVudHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2hvb2tzL3VzZU5leHRGcmFtZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvaG9va3MvdXNlU3RhdHVzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9ob29rcy91c2VTdGVwUXVldWUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLW1vdGlvbi9lcy9pbnRlcmZhY2UuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbW90aW9uL2VzL3V0aWwvZGlmZi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1tb3Rpb24vZXMvdXRpbC9tb3Rpb24uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL05vdGljZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWNlTGlzdC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvTm90aWZpY2F0aW9uUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL05vdGlmaWNhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL2hvb2tzL3VzZU5vdGlmaWNhdGlvbi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1ub3RpZmljYXRpb24vZXMvaG9va3MvdXNlU3RhY2suanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtbm90aWZpY2F0aW9uL2VzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wic3JjXCIsIFwiYWx0XCIsIFwib25QcmV2aWV3Q2xvc2VcIiwgXCJwcmVmaXhDbHNcIiwgXCJwcmV2aWV3UHJlZml4Q2xzXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJmYWxsYmFja1wiLCBcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwic3R5bGVcIiwgXCJwcmV2aWV3XCIsIFwiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcIm9uRXJyb3JcIiwgXCJ3cmFwcGVyQ2xhc3NOYW1lXCIsIFwid3JhcHBlclN0eWxlXCIsIFwicm9vdENsYXNzTmFtZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInNyY1wiLCBcInZpc2libGVcIiwgXCJvblZpc2libGVDaGFuZ2VcIiwgXCJnZXRDb250YWluZXJcIiwgXCJtYXNrXCIsIFwibWFza0NsYXNzTmFtZVwiLCBcIm1vdmFibGVcIiwgXCJpY29uc1wiLCBcInNjYWxlU3RlcFwiLCBcIm1pblNjYWxlXCIsIFwibWF4U2NhbGVcIiwgXCJpbWFnZVJlbmRlclwiLCBcInRvb2xiYXJSZW5kZXJcIl07XG5pbXBvcnQgY24gZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRPZmZzZXQgfSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY3NzXCI7XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByZXZpZXcgZnJvbSBcIi4vUHJldmlld1wiO1xuaW1wb3J0IFByZXZpZXdHcm91cCBmcm9tIFwiLi9QcmV2aWV3R3JvdXBcIjtcbmltcG9ydCB7IENPTU1PTl9QUk9QUyB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgUHJldmlld0dyb3VwQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCB1c2VSZWdpc3RlckltYWdlIGZyb20gXCIuL2hvb2tzL3VzZVJlZ2lzdGVySW1hZ2VcIjtcbmltcG9ydCB1c2VTdGF0dXMgZnJvbSBcIi4vaG9va3MvdXNlU3RhdHVzXCI7XG52YXIgSW1hZ2VJbnRlcm5hbCA9IGZ1bmN0aW9uIEltYWdlSW50ZXJuYWwocHJvcHMpIHtcbiAgdmFyIGltZ1NyYyA9IHByb3BzLnNyYyxcbiAgICBhbHQgPSBwcm9wcy5hbHQsXG4gICAgb25Jbml0aWFsUHJldmlld0Nsb3NlID0gcHJvcHMub25QcmV2aWV3Q2xvc2UsXG4gICAgX3Byb3BzJHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBwcmVmaXhDbHMgPSBfcHJvcHMkcHJlZml4Q2xzID09PSB2b2lkIDAgPyAncmMtaW1hZ2UnIDogX3Byb3BzJHByZWZpeENscyxcbiAgICBfcHJvcHMkcHJldmlld1ByZWZpeEMgPSBwcm9wcy5wcmV2aWV3UHJlZml4Q2xzLFxuICAgIHByZXZpZXdQcmVmaXhDbHMgPSBfcHJvcHMkcHJldmlld1ByZWZpeEMgPT09IHZvaWQgMCA/IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcHJldmlld1wiKSA6IF9wcm9wcyRwcmV2aWV3UHJlZml4QyxcbiAgICBwbGFjZWhvbGRlciA9IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGZhbGxiYWNrID0gcHJvcHMuZmFsbGJhY2ssXG4gICAgd2lkdGggPSBwcm9wcy53aWR0aCxcbiAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBfcHJvcHMkcHJldmlldyA9IHByb3BzLnByZXZpZXcsXG4gICAgcHJldmlldyA9IF9wcm9wcyRwcmV2aWV3ID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJHByZXZpZXcsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uRXJyb3IgPSBwcm9wcy5vbkVycm9yLFxuICAgIHdyYXBwZXJDbGFzc05hbWUgPSBwcm9wcy53cmFwcGVyQ2xhc3NOYW1lLFxuICAgIHdyYXBwZXJTdHlsZSA9IHByb3BzLndyYXBwZXJTdHlsZSxcbiAgICByb290Q2xhc3NOYW1lID0gcHJvcHMucm9vdENsYXNzTmFtZSxcbiAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgaXNDdXN0b21QbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyICE9PSB0cnVlO1xuICB2YXIgX3JlZiA9IF90eXBlb2YocHJldmlldykgPT09ICdvYmplY3QnID8gcHJldmlldyA6IHt9LFxuICAgIHByZXZpZXdTcmMgPSBfcmVmLnNyYyxcbiAgICBfcmVmJHZpc2libGUgPSBfcmVmLnZpc2libGUsXG4gICAgcHJldmlld1Zpc2libGUgPSBfcmVmJHZpc2libGUgPT09IHZvaWQgMCA/IHVuZGVmaW5lZCA6IF9yZWYkdmlzaWJsZSxcbiAgICBfcmVmJG9uVmlzaWJsZUNoYW5nZSA9IF9yZWYub25WaXNpYmxlQ2hhbmdlLFxuICAgIG9uUHJldmlld1Zpc2libGVDaGFuZ2UgPSBfcmVmJG9uVmlzaWJsZUNoYW5nZSA9PT0gdm9pZCAwID8gb25Jbml0aWFsUHJldmlld0Nsb3NlIDogX3JlZiRvblZpc2libGVDaGFuZ2UsXG4gICAgX3JlZiRnZXRDb250YWluZXIgPSBfcmVmLmdldENvbnRhaW5lcixcbiAgICBnZXRQcmV2aWV3Q29udGFpbmVyID0gX3JlZiRnZXRDb250YWluZXIgPT09IHZvaWQgMCA/IHVuZGVmaW5lZCA6IF9yZWYkZ2V0Q29udGFpbmVyLFxuICAgIHByZXZpZXdNYXNrID0gX3JlZi5tYXNrLFxuICAgIG1hc2tDbGFzc05hbWUgPSBfcmVmLm1hc2tDbGFzc05hbWUsXG4gICAgbW92YWJsZSA9IF9yZWYubW92YWJsZSxcbiAgICBpY29ucyA9IF9yZWYuaWNvbnMsXG4gICAgc2NhbGVTdGVwID0gX3JlZi5zY2FsZVN0ZXAsXG4gICAgbWluU2NhbGUgPSBfcmVmLm1pblNjYWxlLFxuICAgIG1heFNjYWxlID0gX3JlZi5tYXhTY2FsZSxcbiAgICBpbWFnZVJlbmRlciA9IF9yZWYuaW1hZ2VSZW5kZXIsXG4gICAgdG9vbGJhclJlbmRlciA9IF9yZWYudG9vbGJhclJlbmRlcixcbiAgICBkaWFsb2dQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQyKTtcbiAgdmFyIHNyYyA9IHByZXZpZXdTcmMgIT09IG51bGwgJiYgcHJldmlld1NyYyAhPT0gdm9pZCAwID8gcHJldmlld1NyYyA6IGltZ1NyYztcbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKCEhcHJldmlld1Zpc2libGUsIHtcbiAgICAgIHZhbHVlOiBwcmV2aWV3VmlzaWJsZSxcbiAgICAgIG9uQ2hhbmdlOiBvblByZXZpZXdWaXNpYmxlQ2hhbmdlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgaXNTaG93UHJldmlldyA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0U2hvd1ByZXZpZXcgPSBfdXNlTWVyZ2VkU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN0YXR1cyA9IHVzZVN0YXR1cyh7XG4gICAgICBzcmM6IGltZ1NyYyxcbiAgICAgIGlzQ3VzdG9tUGxhY2Vob2xkZXI6IGlzQ3VzdG9tUGxhY2Vob2xkZXIsXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2tcbiAgICB9KSxcbiAgICBfdXNlU3RhdHVzMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0dXMsIDMpLFxuICAgIGdldEltZ1JlZiA9IF91c2VTdGF0dXMyWzBdLFxuICAgIHNyY0FuZE9ubG9hZCA9IF91c2VTdGF0dXMyWzFdLFxuICAgIHN0YXR1cyA9IF91c2VTdGF0dXMyWzJdO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgbW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBncm91cENvbnRleHQgPSB1c2VDb250ZXh0KFByZXZpZXdHcm91cENvbnRleHQpO1xuICB2YXIgY2FuUHJldmlldyA9ICEhcHJldmlldztcbiAgdmFyIG9uUHJldmlld0Nsb3NlID0gZnVuY3Rpb24gb25QcmV2aWV3Q2xvc2UoKSB7XG4gICAgc2V0U2hvd1ByZXZpZXcoZmFsc2UpO1xuICAgIHNldE1vdXNlUG9zaXRpb24obnVsbCk7XG4gIH07XG4gIHZhciB3cmFwcGVyQ2xhc3MgPSBjbihwcmVmaXhDbHMsIHdyYXBwZXJDbGFzc05hbWUsIHJvb3RDbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1lcnJvclwiKSwgc3RhdHVzID09PSAnZXJyb3InKSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBJbWFnZVByb3BzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGltZ0NvbW1vblByb3BzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuICAgIENPTU1PTl9QUk9QUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvYmpbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9LCBDT01NT05fUFJPUFMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuIHByb3BzW3Byb3BdO1xuICB9KSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVnaXN0ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHJlZ2lzdGVyRGF0YSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGltZ0NvbW1vblByb3BzKSwge30sIHtcbiAgICAgIHNyYzogc3JjXG4gICAgfSk7XG4gIH0sIFtzcmMsIGltZ0NvbW1vblByb3BzXSk7XG4gIHZhciBpbWFnZUlkID0gdXNlUmVnaXN0ZXJJbWFnZShjYW5QcmV2aWV3LCByZWdpc3RlckRhdGEpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFByZXZpZXcgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvblByZXZpZXcgPSBmdW5jdGlvbiBvblByZXZpZXcoZSkge1xuICAgIHZhciBfZ2V0T2Zmc2V0ID0gZ2V0T2Zmc2V0KGUudGFyZ2V0KSxcbiAgICAgIGxlZnQgPSBfZ2V0T2Zmc2V0LmxlZnQsXG4gICAgICB0b3AgPSBfZ2V0T2Zmc2V0LnRvcDtcbiAgICBpZiAoZ3JvdXBDb250ZXh0KSB7XG4gICAgICBncm91cENvbnRleHQub25QcmV2aWV3KGltYWdlSWQsIHNyYywgbGVmdCwgdG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TW91c2VQb3NpdGlvbih7XG4gICAgICAgIHg6IGxlZnQsXG4gICAgICAgIHk6IHRvcFxuICAgICAgfSk7XG4gICAgICBzZXRTaG93UHJldmlldyh0cnVlKTtcbiAgICB9XG4gICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayhlKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3MsXG4gICAgb25DbGljazogY2FuUHJldmlldyA/IG9uUHJldmlldyA6IG9uQ2xpY2ssXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9LCB3cmFwcGVyU3R5bGUpXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCBfZXh0ZW5kcyh7fSwgaW1nQ29tbW9uUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNuKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaW1nXCIpLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaW1nLXBsYWNlaG9sZGVyXCIpLCBwbGFjZWhvbGRlciA9PT0gdHJ1ZSksIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9LCBzdHlsZSksXG4gICAgcmVmOiBnZXRJbWdSZWZcbiAgfSwgc3JjQW5kT25sb2FkLCB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIG9uRXJyb3I6IG9uRXJyb3JcbiAgfSkpLCBzdGF0dXMgPT09ICdsb2FkaW5nJyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcGxhY2Vob2xkZXJcIilcbiAgfSwgcGxhY2Vob2xkZXIpLCBwcmV2aWV3TWFzayAmJiBjYW5QcmV2aWV3ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNuKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItbWFza1wiKSwgbWFza0NsYXNzTmFtZSksXG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6IChzdHlsZSA9PT0gbnVsbCB8fCBzdHlsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGUuZGlzcGxheSkgPT09ICdub25lJyA/ICdub25lJyA6IHVuZGVmaW5lZFxuICAgIH1cbiAgfSwgcHJldmlld01hc2spKSwgIWdyb3VwQ29udGV4dCAmJiBjYW5QcmV2aWV3ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByZXZpZXcsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtaGlkZGVuXCI6ICFpc1Nob3dQcmV2aWV3LFxuICAgIHZpc2libGU6IGlzU2hvd1ByZXZpZXcsXG4gICAgcHJlZml4Q2xzOiBwcmV2aWV3UHJlZml4Q2xzLFxuICAgIG9uQ2xvc2U6IG9uUHJldmlld0Nsb3NlLFxuICAgIG1vdXNlUG9zaXRpb246IG1vdXNlUG9zaXRpb24sXG4gICAgc3JjOiBzcmMsXG4gICAgYWx0OiBhbHQsXG4gICAgaW1hZ2VJbmZvOiB7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH0sXG4gICAgZmFsbGJhY2s6IGZhbGxiYWNrLFxuICAgIGdldENvbnRhaW5lcjogZ2V0UHJldmlld0NvbnRhaW5lcixcbiAgICBpY29uczogaWNvbnMsXG4gICAgbW92YWJsZTogbW92YWJsZSxcbiAgICBzY2FsZVN0ZXA6IHNjYWxlU3RlcCxcbiAgICBtaW5TY2FsZTogbWluU2NhbGUsXG4gICAgbWF4U2NhbGU6IG1heFNjYWxlLFxuICAgIHJvb3RDbGFzc05hbWU6IHJvb3RDbGFzc05hbWUsXG4gICAgaW1hZ2VSZW5kZXI6IGltYWdlUmVuZGVyLFxuICAgIGltZ0NvbW1vblByb3BzOiBpbWdDb21tb25Qcm9wcyxcbiAgICB0b29sYmFyUmVuZGVyOiB0b29sYmFyUmVuZGVyXG4gIH0sIGRpYWxvZ1Byb3BzKSkpO1xufTtcbkltYWdlSW50ZXJuYWwuUHJldmlld0dyb3VwID0gUHJldmlld0dyb3VwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgSW1hZ2VJbnRlcm5hbC5kaXNwbGF5TmFtZSA9ICdJbWFnZSc7XG59XG5leHBvcnQgZGVmYXVsdCBJbWFnZUludGVybmFsOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IFBvcnRhbCBmcm9tICdAcmMtY29tcG9uZW50L3BvcnRhbCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBDU1NNb3Rpb24gZnJvbSAncmMtbW90aW9uJztcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcmV2aWV3R3JvdXBDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiO1xudmFyIE9wZXJhdGlvbnMgPSBmdW5jdGlvbiBPcGVyYXRpb25zKHByb3BzKSB7XG4gIHZhciB2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICBtYXNrVHJhbnNpdGlvbk5hbWUgPSBwcm9wcy5tYXNrVHJhbnNpdGlvbk5hbWUsXG4gICAgZ2V0Q29udGFpbmVyID0gcHJvcHMuZ2V0Q29udGFpbmVyLFxuICAgIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICByb290Q2xhc3NOYW1lID0gcHJvcHMucm9vdENsYXNzTmFtZSxcbiAgICBpY29ucyA9IHByb3BzLmljb25zLFxuICAgIGNvdW50UmVuZGVyID0gcHJvcHMuY291bnRSZW5kZXIsXG4gICAgc2hvd1N3aXRjaCA9IHByb3BzLnNob3dTd2l0Y2gsXG4gICAgc2hvd1Byb2dyZXNzID0gcHJvcHMuc2hvd1Byb2dyZXNzLFxuICAgIGN1cnJlbnQgPSBwcm9wcy5jdXJyZW50LFxuICAgIHRyYW5zZm9ybSA9IHByb3BzLnRyYW5zZm9ybSxcbiAgICBjb3VudCA9IHByb3BzLmNvdW50LFxuICAgIHNjYWxlID0gcHJvcHMuc2NhbGUsXG4gICAgbWluU2NhbGUgPSBwcm9wcy5taW5TY2FsZSxcbiAgICBtYXhTY2FsZSA9IHByb3BzLm1heFNjYWxlLFxuICAgIGNsb3NlSWNvbiA9IHByb3BzLmNsb3NlSWNvbixcbiAgICBvbkFjdGl2ZSA9IHByb3BzLm9uQWN0aXZlLFxuICAgIG9uQ2xvc2UgPSBwcm9wcy5vbkNsb3NlLFxuICAgIG9uWm9vbUluID0gcHJvcHMub25ab29tSW4sXG4gICAgb25ab29tT3V0ID0gcHJvcHMub25ab29tT3V0LFxuICAgIG9uUm90YXRlUmlnaHQgPSBwcm9wcy5vblJvdGF0ZVJpZ2h0LFxuICAgIG9uUm90YXRlTGVmdCA9IHByb3BzLm9uUm90YXRlTGVmdCxcbiAgICBvbkZsaXBYID0gcHJvcHMub25GbGlwWCxcbiAgICBvbkZsaXBZID0gcHJvcHMub25GbGlwWSxcbiAgICBvblJlc2V0ID0gcHJvcHMub25SZXNldCxcbiAgICB0b29sYmFyUmVuZGVyID0gcHJvcHMudG9vbGJhclJlbmRlcixcbiAgICB6SW5kZXggPSBwcm9wcy56SW5kZXgsXG4gICAgaW1hZ2UgPSBwcm9wcy5pbWFnZTtcbiAgdmFyIGdyb3VwQ29udGV4dCA9IHVzZUNvbnRleHQoUHJldmlld0dyb3VwQ29udGV4dCk7XG4gIHZhciByb3RhdGVMZWZ0ID0gaWNvbnMucm90YXRlTGVmdCxcbiAgICByb3RhdGVSaWdodCA9IGljb25zLnJvdGF0ZVJpZ2h0LFxuICAgIHpvb21JbiA9IGljb25zLnpvb21JbixcbiAgICB6b29tT3V0ID0gaWNvbnMuem9vbU91dCxcbiAgICBjbG9zZSA9IGljb25zLmNsb3NlLFxuICAgIGxlZnQgPSBpY29ucy5sZWZ0LFxuICAgIHJpZ2h0ID0gaWNvbnMucmlnaHQsXG4gICAgZmxpcFggPSBpY29ucy5mbGlwWCxcbiAgICBmbGlwWSA9IGljb25zLmZsaXBZO1xuICB2YXIgdG9vbENsYXNzTmFtZSA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3BlcmF0aW9ucy1vcGVyYXRpb25cIik7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSBLZXlDb2RlLkVTQykge1xuICAgICAgICBvbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlXSk7XG4gIHZhciBoYW5kbGVBY3RpdmUgPSBmdW5jdGlvbiBoYW5kbGVBY3RpdmUoZSwgb2Zmc2V0KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgb25BY3RpdmUob2Zmc2V0KTtcbiAgfTtcbiAgdmFyIHJlbmRlck9wZXJhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgaWNvbiA9IF9yZWYuaWNvbjtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAga2V5OiB0eXBlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKHRvb2xDbGFzc05hbWUsIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3BlcmF0aW9ucy1vcGVyYXRpb24tXCIpLmNvbmNhdCh0eXBlKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW9wZXJhdGlvbnMtb3BlcmF0aW9uLWRpc2FibGVkXCIpLCAhIWRpc2FibGVkKSksXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrXG4gICAgfSwgaWNvbik7XG4gIH0sIFt0b29sQ2xhc3NOYW1lLCBwcmVmaXhDbHNdKTtcbiAgdmFyIHN3aXRjaFByZXZOb2RlID0gc2hvd1N3aXRjaCA/IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogbGVmdCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgLTEpO1xuICAgIH0sXG4gICAgdHlwZTogJ3ByZXYnLFxuICAgIGRpc2FibGVkOiBjdXJyZW50ID09PSAwXG4gIH0pIDogdW5kZWZpbmVkO1xuICB2YXIgc3dpdGNoTmV4dE5vZGUgPSBzaG93U3dpdGNoID8gcmVuZGVyT3BlcmF0aW9uKHtcbiAgICBpY29uOiByaWdodCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgMSk7XG4gICAgfSxcbiAgICB0eXBlOiAnbmV4dCcsXG4gICAgZGlzYWJsZWQ6IGN1cnJlbnQgPT09IGNvdW50IC0gMVxuICB9KSA6IHVuZGVmaW5lZDtcbiAgdmFyIGZsaXBZTm9kZSA9IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogZmxpcFksXG4gICAgb25DbGljazogb25GbGlwWSxcbiAgICB0eXBlOiAnZmxpcFknXG4gIH0pO1xuICB2YXIgZmxpcFhOb2RlID0gcmVuZGVyT3BlcmF0aW9uKHtcbiAgICBpY29uOiBmbGlwWCxcbiAgICBvbkNsaWNrOiBvbkZsaXBYLFxuICAgIHR5cGU6ICdmbGlwWCdcbiAgfSk7XG4gIHZhciByb3RhdGVMZWZ0Tm9kZSA9IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogcm90YXRlTGVmdCxcbiAgICBvbkNsaWNrOiBvblJvdGF0ZUxlZnQsXG4gICAgdHlwZTogJ3JvdGF0ZUxlZnQnXG4gIH0pO1xuICB2YXIgcm90YXRlUmlnaHROb2RlID0gcmVuZGVyT3BlcmF0aW9uKHtcbiAgICBpY29uOiByb3RhdGVSaWdodCxcbiAgICBvbkNsaWNrOiBvblJvdGF0ZVJpZ2h0LFxuICAgIHR5cGU6ICdyb3RhdGVSaWdodCdcbiAgfSk7XG4gIHZhciB6b29tT3V0Tm9kZSA9IHJlbmRlck9wZXJhdGlvbih7XG4gICAgaWNvbjogem9vbU91dCxcbiAgICBvbkNsaWNrOiBvblpvb21PdXQsXG4gICAgdHlwZTogJ3pvb21PdXQnLFxuICAgIGRpc2FibGVkOiBzY2FsZSA8PSBtaW5TY2FsZVxuICB9KTtcbiAgdmFyIHpvb21Jbk5vZGUgPSByZW5kZXJPcGVyYXRpb24oe1xuICAgIGljb246IHpvb21JbixcbiAgICBvbkNsaWNrOiBvblpvb21JbixcbiAgICB0eXBlOiAnem9vbUluJyxcbiAgICBkaXNhYmxlZDogc2NhbGUgPT09IG1heFNjYWxlXG4gIH0pO1xuICB2YXIgdG9vbGJhck5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW9wZXJhdGlvbnNcIilcbiAgfSwgZmxpcFlOb2RlLCBmbGlwWE5vZGUsIHJvdGF0ZUxlZnROb2RlLCByb3RhdGVSaWdodE5vZGUsIHpvb21PdXROb2RlLCB6b29tSW5Ob2RlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENTU01vdGlvbiwge1xuICAgIHZpc2libGU6IHZpc2libGUsXG4gICAgbW90aW9uTmFtZTogbWFza1RyYW5zaXRpb25OYW1lXG4gIH0sIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYyLnN0eWxlO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQb3J0YWwsIHtcbiAgICAgIG9wZW46IHRydWUsXG4gICAgICBnZXRDb250YWluZXI6IGdldENvbnRhaW5lciAhPT0gbnVsbCAmJiBnZXRDb250YWluZXIgIT09IHZvaWQgMCA/IGdldENvbnRhaW5lciA6IGRvY3VtZW50LmJvZHlcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzbmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1vcGVyYXRpb25zLXdyYXBwZXJcIiksIGNsYXNzTmFtZSwgcm9vdENsYXNzTmFtZSksXG4gICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgICAgIHpJbmRleDogekluZGV4XG4gICAgICB9KVxuICAgIH0sIGNsb3NlSWNvbiA9PT0gbnVsbCA/IG51bGwgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2xvc2VcIiksXG4gICAgICBvbkNsaWNrOiBvbkNsb3NlXG4gICAgfSwgY2xvc2VJY29uIHx8IGNsb3NlKSwgc2hvd1N3aXRjaCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3dpdGNoLWxlZnRcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zd2l0Y2gtbGVmdC1kaXNhYmxlZFwiKSwgY3VycmVudCA9PT0gMCkpLFxuICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgLTEpO1xuICAgICAgfVxuICAgIH0sIGxlZnQpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzbmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zd2l0Y2gtcmlnaHRcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zd2l0Y2gtcmlnaHQtZGlzYWJsZWRcIiksIGN1cnJlbnQgPT09IGNvdW50IC0gMSkpLFxuICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVBY3RpdmUoZSwgMSk7XG4gICAgICB9XG4gICAgfSwgcmlnaHQpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWZvb3RlclwiKVxuICAgIH0sIHNob3dQcm9ncmVzcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcHJvZ3Jlc3NcIilcbiAgICB9LCBjb3VudFJlbmRlciA/IGNvdW50UmVuZGVyKGN1cnJlbnQgKyAxLCBjb3VudCkgOiBcIlwiLmNvbmNhdChjdXJyZW50ICsgMSwgXCIgLyBcIikuY29uY2F0KGNvdW50KSksIHRvb2xiYXJSZW5kZXIgPyB0b29sYmFyUmVuZGVyKHRvb2xiYXJOb2RlLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgaWNvbnM6IHtcbiAgICAgICAgcHJldkljb246IHN3aXRjaFByZXZOb2RlLFxuICAgICAgICBuZXh0SWNvbjogc3dpdGNoTmV4dE5vZGUsXG4gICAgICAgIGZsaXBZSWNvbjogZmxpcFlOb2RlLFxuICAgICAgICBmbGlwWEljb246IGZsaXBYTm9kZSxcbiAgICAgICAgcm90YXRlTGVmdEljb246IHJvdGF0ZUxlZnROb2RlLFxuICAgICAgICByb3RhdGVSaWdodEljb246IHJvdGF0ZVJpZ2h0Tm9kZSxcbiAgICAgICAgem9vbU91dEljb246IHpvb21PdXROb2RlLFxuICAgICAgICB6b29tSW5JY29uOiB6b29tSW5Ob2RlXG4gICAgICB9LFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICBvbkFjdGl2ZTogb25BY3RpdmUsXG4gICAgICAgIG9uRmxpcFk6IG9uRmxpcFksXG4gICAgICAgIG9uRmxpcFg6IG9uRmxpcFgsXG4gICAgICAgIG9uUm90YXRlTGVmdDogb25Sb3RhdGVMZWZ0LFxuICAgICAgICBvblJvdGF0ZVJpZ2h0OiBvblJvdGF0ZVJpZ2h0LFxuICAgICAgICBvblpvb21PdXQ6IG9uWm9vbU91dCxcbiAgICAgICAgb25ab29tSW46IG9uWm9vbUluLFxuICAgICAgICBvblJlc2V0OiBvblJlc2V0LFxuICAgICAgICBvbkNsb3NlOiBvbkNsb3NlXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1cbiAgICB9LCBncm91cENvbnRleHQgPyB7XG4gICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgdG90YWw6IGNvdW50XG4gICAgfSA6IHt9KSwge30sIHtcbiAgICAgIGltYWdlOiBpbWFnZVxuICAgIH0pKSA6IHRvb2xiYXJOb2RlKSkpO1xuICB9KTtcbn07XG5leHBvcnQgZGVmYXVsdCBPcGVyYXRpb25zOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiZmFsbGJhY2tcIiwgXCJzcmNcIiwgXCJpbWdSZWZcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJwcmVmaXhDbHNcIiwgXCJzcmNcIiwgXCJhbHRcIiwgXCJpbWFnZUluZm9cIiwgXCJmYWxsYmFja1wiLCBcIm1vdmFibGVcIiwgXCJvbkNsb3NlXCIsIFwidmlzaWJsZVwiLCBcImljb25zXCIsIFwicm9vdENsYXNzTmFtZVwiLCBcImNsb3NlSWNvblwiLCBcImdldENvbnRhaW5lclwiLCBcImN1cnJlbnRcIiwgXCJjb3VudFwiLCBcImNvdW50UmVuZGVyXCIsIFwic2NhbGVTdGVwXCIsIFwibWluU2NhbGVcIiwgXCJtYXhTY2FsZVwiLCBcInRyYW5zaXRpb25OYW1lXCIsIFwibWFza1RyYW5zaXRpb25OYW1lXCIsIFwiaW1hZ2VSZW5kZXJcIiwgXCJpbWdDb21tb25Qcm9wc1wiLCBcInRvb2xiYXJSZW5kZXJcIiwgXCJvblRyYW5zZm9ybVwiLCBcIm9uQ2hhbmdlXCJdO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgRGlhbG9nIGZyb20gJ3JjLWRpYWxvZyc7XG5pbXBvcnQgYWRkRXZlbnRMaXN0ZW5lciBmcm9tIFwicmMtdXRpbC9lcy9Eb20vYWRkRXZlbnRMaXN0ZW5lclwiO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBPcGVyYXRpb25zIGZyb20gXCIuL09wZXJhdGlvbnNcIjtcbmltcG9ydCB7IFByZXZpZXdHcm91cENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgdXNlSW1hZ2VUcmFuc2Zvcm0gZnJvbSBcIi4vaG9va3MvdXNlSW1hZ2VUcmFuc2Zvcm1cIjtcbmltcG9ydCB1c2VNb3VzZUV2ZW50IGZyb20gXCIuL2hvb2tzL3VzZU1vdXNlRXZlbnRcIjtcbmltcG9ydCB1c2VTdGF0dXMgZnJvbSBcIi4vaG9va3MvdXNlU3RhdHVzXCI7XG5pbXBvcnQgdXNlVG91Y2hFdmVudCBmcm9tIFwiLi9ob29rcy91c2VUb3VjaEV2ZW50XCI7XG5pbXBvcnQgeyBCQVNFX1NDQUxFX1JBVElPIH0gZnJvbSBcIi4vcHJldmlld0NvbmZpZ1wiO1xudmFyIFByZXZpZXdJbWFnZSA9IGZ1bmN0aW9uIFByZXZpZXdJbWFnZShfcmVmKSB7XG4gIHZhciBmYWxsYmFjayA9IF9yZWYuZmFsbGJhY2ssXG4gICAgc3JjID0gX3JlZi5zcmMsXG4gICAgaW1nUmVmID0gX3JlZi5pbWdSZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0dXMgPSB1c2VTdGF0dXMoe1xuICAgICAgc3JjOiBzcmMsXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2tcbiAgICB9KSxcbiAgICBfdXNlU3RhdHVzMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0dXMsIDIpLFxuICAgIGdldEltZ1JlZiA9IF91c2VTdGF0dXMyWzBdLFxuICAgIHNyY0FuZE9ubG9hZCA9IF91c2VTdGF0dXMyWzFdO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogZnVuY3Rpb24gcmVmKF9yZWYyKSB7XG4gICAgICBpbWdSZWYuY3VycmVudCA9IF9yZWYyO1xuICAgICAgZ2V0SW1nUmVmKF9yZWYyKTtcbiAgICB9XG4gIH0sIHByb3BzLCBzcmNBbmRPbmxvYWQpKTtcbn07XG52YXIgUHJldmlldyA9IGZ1bmN0aW9uIFByZXZpZXcocHJvcHMpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBzcmMgPSBwcm9wcy5zcmMsXG4gICAgYWx0ID0gcHJvcHMuYWx0LFxuICAgIGltYWdlSW5mbyA9IHByb3BzLmltYWdlSW5mbyxcbiAgICBmYWxsYmFjayA9IHByb3BzLmZhbGxiYWNrLFxuICAgIF9wcm9wcyRtb3ZhYmxlID0gcHJvcHMubW92YWJsZSxcbiAgICBtb3ZhYmxlID0gX3Byb3BzJG1vdmFibGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkbW92YWJsZSxcbiAgICBvbkNsb3NlID0gcHJvcHMub25DbG9zZSxcbiAgICB2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICBfcHJvcHMkaWNvbnMgPSBwcm9wcy5pY29ucyxcbiAgICBpY29ucyA9IF9wcm9wcyRpY29ucyA9PT0gdm9pZCAwID8ge30gOiBfcHJvcHMkaWNvbnMsXG4gICAgcm9vdENsYXNzTmFtZSA9IHByb3BzLnJvb3RDbGFzc05hbWUsXG4gICAgY2xvc2VJY29uID0gcHJvcHMuY2xvc2VJY29uLFxuICAgIGdldENvbnRhaW5lciA9IHByb3BzLmdldENvbnRhaW5lcixcbiAgICBfcHJvcHMkY3VycmVudCA9IHByb3BzLmN1cnJlbnQsXG4gICAgY3VycmVudCA9IF9wcm9wcyRjdXJyZW50ID09PSB2b2lkIDAgPyAwIDogX3Byb3BzJGN1cnJlbnQsXG4gICAgX3Byb3BzJGNvdW50ID0gcHJvcHMuY291bnQsXG4gICAgY291bnQgPSBfcHJvcHMkY291bnQgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkY291bnQsXG4gICAgY291bnRSZW5kZXIgPSBwcm9wcy5jb3VudFJlbmRlcixcbiAgICBfcHJvcHMkc2NhbGVTdGVwID0gcHJvcHMuc2NhbGVTdGVwLFxuICAgIHNjYWxlU3RlcCA9IF9wcm9wcyRzY2FsZVN0ZXAgPT09IHZvaWQgMCA/IDAuNSA6IF9wcm9wcyRzY2FsZVN0ZXAsXG4gICAgX3Byb3BzJG1pblNjYWxlID0gcHJvcHMubWluU2NhbGUsXG4gICAgbWluU2NhbGUgPSBfcHJvcHMkbWluU2NhbGUgPT09IHZvaWQgMCA/IDEgOiBfcHJvcHMkbWluU2NhbGUsXG4gICAgX3Byb3BzJG1heFNjYWxlID0gcHJvcHMubWF4U2NhbGUsXG4gICAgbWF4U2NhbGUgPSBfcHJvcHMkbWF4U2NhbGUgPT09IHZvaWQgMCA/IDUwIDogX3Byb3BzJG1heFNjYWxlLFxuICAgIF9wcm9wcyR0cmFuc2l0aW9uTmFtZSA9IHByb3BzLnRyYW5zaXRpb25OYW1lLFxuICAgIHRyYW5zaXRpb25OYW1lID0gX3Byb3BzJHRyYW5zaXRpb25OYW1lID09PSB2b2lkIDAgPyAnem9vbScgOiBfcHJvcHMkdHJhbnNpdGlvbk5hbWUsXG4gICAgX3Byb3BzJG1hc2tUcmFuc2l0aW9uID0gcHJvcHMubWFza1RyYW5zaXRpb25OYW1lLFxuICAgIG1hc2tUcmFuc2l0aW9uTmFtZSA9IF9wcm9wcyRtYXNrVHJhbnNpdGlvbiA9PT0gdm9pZCAwID8gJ2ZhZGUnIDogX3Byb3BzJG1hc2tUcmFuc2l0aW9uLFxuICAgIGltYWdlUmVuZGVyID0gcHJvcHMuaW1hZ2VSZW5kZXIsXG4gICAgaW1nQ29tbW9uUHJvcHMgPSBwcm9wcy5pbWdDb21tb25Qcm9wcyxcbiAgICB0b29sYmFyUmVuZGVyID0gcHJvcHMudG9vbGJhclJlbmRlcixcbiAgICBvblRyYW5zZm9ybSA9IHByb3BzLm9uVHJhbnNmb3JtLFxuICAgIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgdmFyIGltZ1JlZiA9IHVzZVJlZigpO1xuICB2YXIgZ3JvdXBDb250ZXh0ID0gdXNlQ29udGV4dChQcmV2aWV3R3JvdXBDb250ZXh0KTtcbiAgdmFyIHNob3dMZWZ0T3JSaWdodFN3aXRjaGVzID0gZ3JvdXBDb250ZXh0ICYmIGNvdW50ID4gMTtcbiAgdmFyIHNob3dPcGVyYXRpb25zUHJvZ3Jlc3MgPSBncm91cENvbnRleHQgJiYgY291bnQgPj0gMTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHRydWUpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGVuYWJsZVRyYW5zaXRpb24gPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEVuYWJsZVRyYW5zaXRpb24gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZUltYWdlVHJhbnNmb3JtID0gdXNlSW1hZ2VUcmFuc2Zvcm0oaW1nUmVmLCBtaW5TY2FsZSwgbWF4U2NhbGUsIG9uVHJhbnNmb3JtKSxcbiAgICB0cmFuc2Zvcm0gPSBfdXNlSW1hZ2VUcmFuc2Zvcm0udHJhbnNmb3JtLFxuICAgIHJlc2V0VHJhbnNmb3JtID0gX3VzZUltYWdlVHJhbnNmb3JtLnJlc2V0VHJhbnNmb3JtLFxuICAgIHVwZGF0ZVRyYW5zZm9ybSA9IF91c2VJbWFnZVRyYW5zZm9ybS51cGRhdGVUcmFuc2Zvcm0sXG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlID0gX3VzZUltYWdlVHJhbnNmb3JtLmRpc3BhdGNoWm9vbUNoYW5nZTtcbiAgdmFyIF91c2VNb3VzZUV2ZW50ID0gdXNlTW91c2VFdmVudChpbWdSZWYsIG1vdmFibGUsIHZpc2libGUsIHNjYWxlU3RlcCwgdHJhbnNmb3JtLCB1cGRhdGVUcmFuc2Zvcm0sIGRpc3BhdGNoWm9vbUNoYW5nZSksXG4gICAgaXNNb3ZpbmcgPSBfdXNlTW91c2VFdmVudC5pc01vdmluZyxcbiAgICBvbk1vdXNlRG93biA9IF91c2VNb3VzZUV2ZW50Lm9uTW91c2VEb3duLFxuICAgIG9uV2hlZWwgPSBfdXNlTW91c2VFdmVudC5vbldoZWVsO1xuICB2YXIgX3VzZVRvdWNoRXZlbnQgPSB1c2VUb3VjaEV2ZW50KGltZ1JlZiwgbW92YWJsZSwgdmlzaWJsZSwgbWluU2NhbGUsIHRyYW5zZm9ybSwgdXBkYXRlVHJhbnNmb3JtLCBkaXNwYXRjaFpvb21DaGFuZ2UpLFxuICAgIGlzVG91Y2hpbmcgPSBfdXNlVG91Y2hFdmVudC5pc1RvdWNoaW5nLFxuICAgIG9uVG91Y2hTdGFydCA9IF91c2VUb3VjaEV2ZW50Lm9uVG91Y2hTdGFydCxcbiAgICBvblRvdWNoTW92ZSA9IF91c2VUb3VjaEV2ZW50Lm9uVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hFbmQgPSBfdXNlVG91Y2hFdmVudC5vblRvdWNoRW5kO1xuICB2YXIgcm90YXRlID0gdHJhbnNmb3JtLnJvdGF0ZSxcbiAgICBzY2FsZSA9IHRyYW5zZm9ybS5zY2FsZTtcbiAgdmFyIHdyYXBDbGFzc05hbWUgPSBjbGFzc25hbWVzKF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1tb3ZpbmdcIiksIGlzTW92aW5nKSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVUcmFuc2l0aW9uKSB7XG4gICAgICBzZXRFbmFibGVUcmFuc2l0aW9uKHRydWUpO1xuICAgIH1cbiAgfSwgW2VuYWJsZVRyYW5zaXRpb25dKTtcbiAgdmFyIG9uQWZ0ZXJDbG9zZSA9IGZ1bmN0aW9uIG9uQWZ0ZXJDbG9zZSgpIHtcbiAgICByZXNldFRyYW5zZm9ybSgnY2xvc2UnKTtcbiAgfTtcbiAgdmFyIG9uWm9vbUluID0gZnVuY3Rpb24gb25ab29tSW4oKSB7XG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlKEJBU0VfU0NBTEVfUkFUSU8gKyBzY2FsZVN0ZXAsICd6b29tSW4nKTtcbiAgfTtcbiAgdmFyIG9uWm9vbU91dCA9IGZ1bmN0aW9uIG9uWm9vbU91dCgpIHtcbiAgICBkaXNwYXRjaFpvb21DaGFuZ2UoQkFTRV9TQ0FMRV9SQVRJTyAvIChCQVNFX1NDQUxFX1JBVElPICsgc2NhbGVTdGVwKSwgJ3pvb21PdXQnKTtcbiAgfTtcbiAgdmFyIG9uUm90YXRlUmlnaHQgPSBmdW5jdGlvbiBvblJvdGF0ZVJpZ2h0KCkge1xuICAgIHVwZGF0ZVRyYW5zZm9ybSh7XG4gICAgICByb3RhdGU6IHJvdGF0ZSArIDkwXG4gICAgfSwgJ3JvdGF0ZVJpZ2h0Jyk7XG4gIH07XG4gIHZhciBvblJvdGF0ZUxlZnQgPSBmdW5jdGlvbiBvblJvdGF0ZUxlZnQoKSB7XG4gICAgdXBkYXRlVHJhbnNmb3JtKHtcbiAgICAgIHJvdGF0ZTogcm90YXRlIC0gOTBcbiAgICB9LCAncm90YXRlTGVmdCcpO1xuICB9O1xuICB2YXIgb25GbGlwWCA9IGZ1bmN0aW9uIG9uRmxpcFgoKSB7XG4gICAgdXBkYXRlVHJhbnNmb3JtKHtcbiAgICAgIGZsaXBYOiAhdHJhbnNmb3JtLmZsaXBYXG4gICAgfSwgJ2ZsaXBYJyk7XG4gIH07XG4gIHZhciBvbkZsaXBZID0gZnVuY3Rpb24gb25GbGlwWSgpIHtcbiAgICB1cGRhdGVUcmFuc2Zvcm0oe1xuICAgICAgZmxpcFk6ICF0cmFuc2Zvcm0uZmxpcFlcbiAgICB9LCAnZmxpcFknKTtcbiAgfTtcbiAgdmFyIG9uUmVzZXQgPSBmdW5jdGlvbiBvblJlc2V0KCkge1xuICAgIHJlc2V0VHJhbnNmb3JtKCdyZXNldCcpO1xuICB9O1xuICB2YXIgb25BY3RpdmUgPSBmdW5jdGlvbiBvbkFjdGl2ZShvZmZzZXQpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBjdXJyZW50ICsgb2Zmc2V0O1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwb3NpdGlvbikgfHwgcG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gY291bnQgLSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldEVuYWJsZVRyYW5zaXRpb24oZmFsc2UpO1xuICAgIHJlc2V0VHJhbnNmb3JtKG9mZnNldCA8IDAgPyAncHJldicgOiAnbmV4dCcpO1xuICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2UocG9zaXRpb24sIGN1cnJlbnQpO1xuICB9O1xuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKCF2aXNpYmxlIHx8ICFzaG93TGVmdE9yUmlnaHRTd2l0Y2hlcykgcmV0dXJuO1xuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlDb2RlLkxFRlQpIHtcbiAgICAgIG9uQWN0aXZlKC0xKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuUklHSFQpIHtcbiAgICAgIG9uQWN0aXZlKDEpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uRG91YmxlQ2xpY2sgPSBmdW5jdGlvbiBvbkRvdWJsZUNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIGlmIChzY2FsZSAhPT0gMSkge1xuICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oe1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICBzY2FsZTogMVxuICAgICAgICB9LCAnZG91YmxlQ2xpY2snKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoWm9vbUNoYW5nZShCQVNFX1NDQUxFX1JBVElPICsgc2NhbGVTdGVwLCAnZG91YmxlQ2xpY2snLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uS2V5RG93bkxpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdrZXlkb3duJywgb25LZXlEb3duLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uS2V5RG93bkxpc3RlbmVyLnJlbW92ZSgpO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlLCBzaG93TGVmdE9yUmlnaHRTd2l0Y2hlcywgY3VycmVudF0pO1xuICB2YXIgaW1nTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByZXZpZXdJbWFnZSwgX2V4dGVuZHMoe30sIGltZ0NvbW1vblByb3BzLCB7XG4gICAgd2lkdGg6IHByb3BzLndpZHRoLFxuICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgIGltZ1JlZjogaW1nUmVmLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pbWdcIiksXG4gICAgYWx0OiBhbHQsXG4gICAgc3R5bGU6IHtcbiAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQodHJhbnNmb3JtLngsIFwicHgsIFwiKS5jb25jYXQodHJhbnNmb3JtLnksIFwicHgsIDApIHNjYWxlM2QoXCIpLmNvbmNhdCh0cmFuc2Zvcm0uZmxpcFggPyAnLScgOiAnJykuY29uY2F0KHNjYWxlLCBcIiwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0uZmxpcFkgPyAnLScgOiAnJykuY29uY2F0KHNjYWxlLCBcIiwgMSkgcm90YXRlKFwiKS5jb25jYXQocm90YXRlLCBcImRlZylcIiksXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb246ICghZW5hYmxlVHJhbnNpdGlvbiB8fCBpc1RvdWNoaW5nKSAmJiAnMHMnXG4gICAgfSxcbiAgICBmYWxsYmFjazogZmFsbGJhY2ssXG4gICAgc3JjOiBzcmMsXG4gICAgb25XaGVlbDogb25XaGVlbCxcbiAgICBvbk1vdXNlRG93bjogb25Nb3VzZURvd24sXG4gICAgb25Eb3VibGVDbGljazogb25Eb3VibGVDbGljayxcbiAgICBvblRvdWNoU3RhcnQ6IG9uVG91Y2hTdGFydCxcbiAgICBvblRvdWNoTW92ZTogb25Ub3VjaE1vdmUsXG4gICAgb25Ub3VjaEVuZDogb25Ub3VjaEVuZCxcbiAgICBvblRvdWNoQ2FuY2VsOiBvblRvdWNoRW5kXG4gIH0pKTtcbiAgdmFyIGltYWdlID0gX29iamVjdFNwcmVhZCh7XG4gICAgdXJsOiBzcmMsXG4gICAgYWx0OiBhbHRcbiAgfSwgaW1hZ2VJbmZvKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEaWFsb2csIF9leHRlbmRzKHtcbiAgICB0cmFuc2l0aW9uTmFtZTogdHJhbnNpdGlvbk5hbWUsXG4gICAgbWFza1RyYW5zaXRpb25OYW1lOiBtYXNrVHJhbnNpdGlvbk5hbWUsXG4gICAgY2xvc2FibGU6IGZhbHNlLFxuICAgIGtleWJvYXJkOiB0cnVlLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgdmlzaWJsZTogdmlzaWJsZSxcbiAgICBjbGFzc05hbWVzOiB7XG4gICAgICB3cmFwcGVyOiB3cmFwQ2xhc3NOYW1lXG4gICAgfSxcbiAgICByb290Q2xhc3NOYW1lOiByb290Q2xhc3NOYW1lLFxuICAgIGdldENvbnRhaW5lcjogZ2V0Q29udGFpbmVyXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIGFmdGVyQ2xvc2U6IG9uQWZ0ZXJDbG9zZVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pbWctd3JhcHBlclwiKVxuICB9LCBpbWFnZVJlbmRlciA/IGltYWdlUmVuZGVyKGltZ05vZGUsIF9vYmplY3RTcHJlYWQoe1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgIGltYWdlOiBpbWFnZVxuICB9LCBncm91cENvbnRleHQgPyB7XG4gICAgY3VycmVudDogY3VycmVudFxuICB9IDoge30pKSA6IGltZ05vZGUpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT3BlcmF0aW9ucywge1xuICAgIHZpc2libGU6IHZpc2libGUsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgbWFza1RyYW5zaXRpb25OYW1lOiBtYXNrVHJhbnNpdGlvbk5hbWUsXG4gICAgY2xvc2VJY29uOiBjbG9zZUljb24sXG4gICAgZ2V0Q29udGFpbmVyOiBnZXRDb250YWluZXIsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcm9vdENsYXNzTmFtZTogcm9vdENsYXNzTmFtZSxcbiAgICBpY29uczogaWNvbnMsXG4gICAgY291bnRSZW5kZXI6IGNvdW50UmVuZGVyLFxuICAgIHNob3dTd2l0Y2g6IHNob3dMZWZ0T3JSaWdodFN3aXRjaGVzLFxuICAgIHNob3dQcm9ncmVzczogc2hvd09wZXJhdGlvbnNQcm9ncmVzcyxcbiAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgIGNvdW50OiBjb3VudCxcbiAgICBzY2FsZTogc2NhbGUsXG4gICAgbWluU2NhbGU6IG1pblNjYWxlLFxuICAgIG1heFNjYWxlOiBtYXhTY2FsZSxcbiAgICB0b29sYmFyUmVuZGVyOiB0b29sYmFyUmVuZGVyLFxuICAgIG9uQWN0aXZlOiBvbkFjdGl2ZSxcbiAgICBvblpvb21Jbjogb25ab29tSW4sXG4gICAgb25ab29tT3V0OiBvblpvb21PdXQsXG4gICAgb25Sb3RhdGVSaWdodDogb25Sb3RhdGVSaWdodCxcbiAgICBvblJvdGF0ZUxlZnQ6IG9uUm90YXRlTGVmdCxcbiAgICBvbkZsaXBYOiBvbkZsaXBYLFxuICAgIG9uRmxpcFk6IG9uRmxpcFksXG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBvblJlc2V0OiBvblJlc2V0LFxuICAgIHpJbmRleDogcmVzdFByb3BzLnpJbmRleCAhPT0gdW5kZWZpbmVkID8gcmVzdFByb3BzLnpJbmRleCArIDEgOiB1bmRlZmluZWQsXG4gICAgaW1hZ2U6IGltYWdlXG4gIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBQcmV2aWV3OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcInZpc2libGVcIiwgXCJvblZpc2libGVDaGFuZ2VcIiwgXCJnZXRDb250YWluZXJcIiwgXCJjdXJyZW50XCIsIFwibW92YWJsZVwiLCBcIm1pblNjYWxlXCIsIFwibWF4U2NhbGVcIiwgXCJjb3VudFJlbmRlclwiLCBcImNsb3NlSWNvblwiLCBcIm9uQ2hhbmdlXCIsIFwib25UcmFuc2Zvcm1cIiwgXCJ0b29sYmFyUmVuZGVyXCIsIFwiaW1hZ2VSZW5kZXJcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJzcmNcIl07XG5pbXBvcnQgdXNlTWVyZ2VkU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTWVyZ2VkU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByZXZpZXcgZnJvbSBcIi4vUHJldmlld1wiO1xuaW1wb3J0IHsgUHJldmlld0dyb3VwQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCB1c2VQcmV2aWV3SXRlbXMgZnJvbSBcIi4vaG9va3MvdXNlUHJldmlld0l0ZW1zXCI7XG52YXIgR3JvdXAgPSBmdW5jdGlvbiBHcm91cChfcmVmKSB7XG4gIHZhciBfbWVyZ2VkSXRlbXMkY3VycmVudDtcbiAgdmFyIF9yZWYkcHJldmlld1ByZWZpeENscyA9IF9yZWYucHJldmlld1ByZWZpeENscyxcbiAgICBwcmV2aWV3UHJlZml4Q2xzID0gX3JlZiRwcmV2aWV3UHJlZml4Q2xzID09PSB2b2lkIDAgPyAncmMtaW1hZ2UtcHJldmlldycgOiBfcmVmJHByZXZpZXdQcmVmaXhDbHMsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIF9yZWYkaWNvbnMgPSBfcmVmLmljb25zLFxuICAgIGljb25zID0gX3JlZiRpY29ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJGljb25zLFxuICAgIGl0ZW1zID0gX3JlZi5pdGVtcyxcbiAgICBwcmV2aWV3ID0gX3JlZi5wcmV2aWV3LFxuICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjaztcbiAgdmFyIF9yZWYyID0gX3R5cGVvZihwcmV2aWV3KSA9PT0gJ29iamVjdCcgPyBwcmV2aWV3IDoge30sXG4gICAgcHJldmlld1Zpc2libGUgPSBfcmVmMi52aXNpYmxlLFxuICAgIG9uVmlzaWJsZUNoYW5nZSA9IF9yZWYyLm9uVmlzaWJsZUNoYW5nZSxcbiAgICBnZXRDb250YWluZXIgPSBfcmVmMi5nZXRDb250YWluZXIsXG4gICAgY3VycmVudEluZGV4ID0gX3JlZjIuY3VycmVudCxcbiAgICBtb3ZhYmxlID0gX3JlZjIubW92YWJsZSxcbiAgICBtaW5TY2FsZSA9IF9yZWYyLm1pblNjYWxlLFxuICAgIG1heFNjYWxlID0gX3JlZjIubWF4U2NhbGUsXG4gICAgY291bnRSZW5kZXIgPSBfcmVmMi5jb3VudFJlbmRlcixcbiAgICBjbG9zZUljb24gPSBfcmVmMi5jbG9zZUljb24sXG4gICAgb25DaGFuZ2UgPSBfcmVmMi5vbkNoYW5nZSxcbiAgICBvblRyYW5zZm9ybSA9IF9yZWYyLm9uVHJhbnNmb3JtLFxuICAgIHRvb2xiYXJSZW5kZXIgPSBfcmVmMi50b29sYmFyUmVuZGVyLFxuICAgIGltYWdlUmVuZGVyID0gX3JlZjIuaW1hZ2VSZW5kZXIsXG4gICAgZGlhbG9nUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gSXRlbXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlUHJldmlld0l0ZW1zID0gdXNlUHJldmlld0l0ZW1zKGl0ZW1zKSxcbiAgICBfdXNlUHJldmlld0l0ZW1zMiA9IF9zbGljZWRUb0FycmF5KF91c2VQcmV2aWV3SXRlbXMsIDMpLFxuICAgIG1lcmdlZEl0ZW1zID0gX3VzZVByZXZpZXdJdGVtczJbMF0sXG4gICAgcmVnaXN0ZXIgPSBfdXNlUHJldmlld0l0ZW1zMlsxXSxcbiAgICBmcm9tSXRlbXMgPSBfdXNlUHJldmlld0l0ZW1zMlsyXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFByZXZpZXcgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPj4+IEluZGV4XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZSgwLCB7XG4gICAgICB2YWx1ZTogY3VycmVudEluZGV4XG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgY3VycmVudCA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0Q3VycmVudCA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAga2VlcE9wZW5JbmRleCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0S2VlcE9wZW5JbmRleCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgLy8gPj4+IEltYWdlXG4gIHZhciBfcmVmMyA9ICgoX21lcmdlZEl0ZW1zJGN1cnJlbnQgPSBtZXJnZWRJdGVtc1tjdXJyZW50XSkgPT09IG51bGwgfHwgX21lcmdlZEl0ZW1zJGN1cnJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tZXJnZWRJdGVtcyRjdXJyZW50LmRhdGEpIHx8IHt9LFxuICAgIHNyYyA9IF9yZWYzLnNyYyxcbiAgICBpbWdDb21tb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgX2V4Y2x1ZGVkMik7XG4gIC8vID4+PiBWaXNpYmxlXG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUzID0gdXNlTWVyZ2VkU3RhdGUoISFwcmV2aWV3VmlzaWJsZSwge1xuICAgICAgdmFsdWU6IHByZXZpZXdWaXNpYmxlLFxuICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHZhbCwgcHJldlZhbCkge1xuICAgICAgICBvblZpc2libGVDaGFuZ2UgPT09IG51bGwgfHwgb25WaXNpYmxlQ2hhbmdlID09PSB2b2lkIDAgfHwgb25WaXNpYmxlQ2hhbmdlKHZhbCwgcHJldlZhbCwgY3VycmVudCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZTMsIDIpLFxuICAgIGlzU2hvd1ByZXZpZXcgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldFNob3dQcmV2aWV3ID0gX3VzZU1lcmdlZFN0YXRlNFsxXTtcblxuICAvLyA+Pj4gUG9zaXRpb25cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgbW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0TW91c2VQb3NpdGlvbiA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBvblByZXZpZXdGcm9tSW1hZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoaWQsIGltYWdlU3JjLCBtb3VzZVgsIG1vdXNlWSkge1xuICAgIHZhciBpbmRleCA9IGZyb21JdGVtcyA/IG1lcmdlZEl0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uZGF0YS5zcmMgPT09IGltYWdlU3JjO1xuICAgIH0pIDogbWVyZ2VkSXRlbXMuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgc2V0Q3VycmVudChpbmRleCA8IDAgPyAwIDogaW5kZXgpO1xuICAgIHNldFNob3dQcmV2aWV3KHRydWUpO1xuICAgIHNldE1vdXNlUG9zaXRpb24oe1xuICAgICAgeDogbW91c2VYLFxuICAgICAgeTogbW91c2VZXG4gICAgfSk7XG4gICAgc2V0S2VlcE9wZW5JbmRleCh0cnVlKTtcbiAgfSwgW21lcmdlZEl0ZW1zLCBmcm9tSXRlbXNdKTtcblxuICAvLyBSZXNldCBjdXJyZW50IHdoZW4gcmVvcGVuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzU2hvd1ByZXZpZXcpIHtcbiAgICAgIGlmICgha2VlcE9wZW5JbmRleCkge1xuICAgICAgICBzZXRDdXJyZW50KDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRLZWVwT3BlbkluZGV4KGZhbHNlKTtcbiAgICB9XG4gIH0sIFtpc1Nob3dQcmV2aWV3XSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gRXZlbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkludGVybmFsQ2hhbmdlID0gZnVuY3Rpb24gb25JbnRlcm5hbENoYW5nZShuZXh0LCBwcmV2KSB7XG4gICAgc2V0Q3VycmVudChuZXh0KTtcbiAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKG5leHQsIHByZXYpO1xuICB9O1xuICB2YXIgb25QcmV2aWV3Q2xvc2UgPSBmdW5jdGlvbiBvblByZXZpZXdDbG9zZSgpIHtcbiAgICBzZXRTaG93UHJldmlldyhmYWxzZSk7XG4gICAgc2V0TW91c2VQb3NpdGlvbihudWxsKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENvbnRleHQgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHByZXZpZXdHcm91cENvbnRleHQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnaXN0ZXI6IHJlZ2lzdGVyLFxuICAgICAgb25QcmV2aWV3OiBvblByZXZpZXdGcm9tSW1hZ2VcbiAgICB9O1xuICB9LCBbcmVnaXN0ZXIsIG9uUHJldmlld0Zyb21JbWFnZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJldmlld0dyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwcmV2aWV3R3JvdXBDb250ZXh0XG4gIH0sIGNoaWxkcmVuLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcmV2aWV3LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiAhaXNTaG93UHJldmlldyxcbiAgICBtb3ZhYmxlOiBtb3ZhYmxlLFxuICAgIHZpc2libGU6IGlzU2hvd1ByZXZpZXcsXG4gICAgcHJlZml4Q2xzOiBwcmV2aWV3UHJlZml4Q2xzLFxuICAgIGNsb3NlSWNvbjogY2xvc2VJY29uLFxuICAgIG9uQ2xvc2U6IG9uUHJldmlld0Nsb3NlLFxuICAgIG1vdXNlUG9zaXRpb246IG1vdXNlUG9zaXRpb24sXG4gICAgaW1nQ29tbW9uUHJvcHM6IGltZ0NvbW1vblByb3BzLFxuICAgIHNyYzogc3JjLFxuICAgIGZhbGxiYWNrOiBmYWxsYmFjayxcbiAgICBpY29uczogaWNvbnMsXG4gICAgbWluU2NhbGU6IG1pblNjYWxlLFxuICAgIG1heFNjYWxlOiBtYXhTY2FsZSxcbiAgICBnZXRDb250YWluZXI6IGdldENvbnRhaW5lcixcbiAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgIGNvdW50OiBtZXJnZWRJdGVtcy5sZW5ndGgsXG4gICAgY291bnRSZW5kZXI6IGNvdW50UmVuZGVyLFxuICAgIG9uVHJhbnNmb3JtOiBvblRyYW5zZm9ybSxcbiAgICB0b29sYmFyUmVuZGVyOiB0b29sYmFyUmVuZGVyLFxuICAgIGltYWdlUmVuZGVyOiBpbWFnZVJlbmRlcixcbiAgICBvbkNoYW5nZTogb25JbnRlcm5hbENoYW5nZVxuICB9LCBkaWFsb2dQcm9wcykpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBHcm91cDsiLCJleHBvcnQgdmFyIENPTU1PTl9QUk9QUyA9IFsnY3Jvc3NPcmlnaW4nLCAnZGVjb2RpbmcnLCAnZHJhZ2dhYmxlJywgJ2xvYWRpbmcnLCAncmVmZXJyZXJQb2xpY3knLCAnc2l6ZXMnLCAnc3JjU2V0JywgJ3VzZU1hcCcsICdhbHQnXTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIFByZXZpZXdHcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCB7IGdldENsaWVudFNpemUgfSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY3NzXCI7XG5mdW5jdGlvbiBmaXhQb2ludChrZXksIHN0YXJ0LCB3aWR0aCwgY2xpZW50V2lkdGgpIHtcbiAgdmFyIHN0YXJ0QWRkV2lkdGggPSBzdGFydCArIHdpZHRoO1xuICB2YXIgb2Zmc2V0U3RhcnQgPSAod2lkdGggLSBjbGllbnRXaWR0aCkgLyAyO1xuICBpZiAod2lkdGggPiBjbGllbnRXaWR0aCkge1xuICAgIGlmIChzdGFydCA+IDApIHtcbiAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgb2Zmc2V0U3RhcnQpO1xuICAgIH1cbiAgICBpZiAoc3RhcnQgPCAwICYmIHN0YXJ0QWRkV2lkdGggPCBjbGllbnRXaWR0aCkge1xuICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCAtb2Zmc2V0U3RhcnQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzdGFydCA8IDAgfHwgc3RhcnRBZGRXaWR0aCA+IGNsaWVudFdpZHRoKSB7XG4gICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBzdGFydCA8IDAgPyBvZmZzZXRTdGFydCA6IC1vZmZzZXRTdGFydCk7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIEZpeCBwb3NpdG9uIHgseSBwb2ludCB3aGVuXG4gKlxuICogRWxlIHdpZHRoICYmIGhlaWdodCA8IGNsaWVudFxuICogLSBCYWNrIG9yaWdpblxuICpcbiAqIC0gRWxlIHdpZHRoIHwgaGVpZ2h0ID4gY2xpZW50V2lkdGggfCBjbGllbnRIZWlnaHRcbiAqIC0gbGVmdCB8IHRvcCA+IDAgLT4gQmFjayAwXG4gKiAtIGxlZnQgfCB0b3AgKyB3aWR0aCB8IGhlaWdodCA8IGNsaWVudFdpZHRoIHwgY2xpZW50SGVpZ2h0IC0+IEJhY2sgbGVmdCB8IHRvcCArIHdpZHRoIHwgaGVpZ2h0ID09PSBjbGllbnRXaWR0aCB8IGNsaWVudEhlaWdodFxuICpcbiAqIFJlZ2FyZGxlc3Mgb2Ygb3RoZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Rml4U2NhbGVFbGVUcmFuc1Bvc2l0aW9uKHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCkge1xuICB2YXIgX2dldENsaWVudFNpemUgPSBnZXRDbGllbnRTaXplKCksXG4gICAgY2xpZW50V2lkdGggPSBfZ2V0Q2xpZW50U2l6ZS53aWR0aCxcbiAgICBjbGllbnRIZWlnaHQgPSBfZ2V0Q2xpZW50U2l6ZS5oZWlnaHQ7XG4gIHZhciBmaXhQb3MgPSBudWxsO1xuICBpZiAod2lkdGggPD0gY2xpZW50V2lkdGggJiYgaGVpZ2h0IDw9IGNsaWVudEhlaWdodCkge1xuICAgIGZpeFBvcyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfSBlbHNlIGlmICh3aWR0aCA+IGNsaWVudFdpZHRoIHx8IGhlaWdodCA+IGNsaWVudEhlaWdodCkge1xuICAgIGZpeFBvcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZml4UG9pbnQoJ3gnLCBsZWZ0LCB3aWR0aCwgY2xpZW50V2lkdGgpKSwgZml4UG9pbnQoJ3knLCB0b3AsIGhlaWdodCwgY2xpZW50SGVpZ2h0KSk7XG4gIH1cbiAgcmV0dXJuIGZpeFBvcztcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyBnZXRDbGllbnRTaXplIH0gZnJvbSBcInJjLXV0aWwvZXMvRG9tL2Nzc1wiO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSBcInJjLXV0aWwvZXMvaXNFcXVhbFwiO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG52YXIgaW5pdGlhbFRyYW5zZm9ybSA9IHtcbiAgeDogMCxcbiAgeTogMCxcbiAgcm90YXRlOiAwLFxuICBzY2FsZTogMSxcbiAgZmxpcFg6IGZhbHNlLFxuICBmbGlwWTogZmFsc2Vcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJbWFnZVRyYW5zZm9ybShpbWdSZWYsIG1pblNjYWxlLCBtYXhTY2FsZSwgb25UcmFuc2Zvcm0pIHtcbiAgdmFyIGZyYW1lID0gdXNlUmVmKG51bGwpO1xuICB2YXIgcXVldWUgPSB1c2VSZWYoW10pO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoaW5pdGlhbFRyYW5zZm9ybSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgdHJhbnNmb3JtID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRUcmFuc2Zvcm0gPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgcmVzZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiByZXNldFRyYW5zZm9ybShhY3Rpb24pIHtcbiAgICBzZXRUcmFuc2Zvcm0oaW5pdGlhbFRyYW5zZm9ybSk7XG4gICAgaWYgKCFpc0VxdWFsKGluaXRpYWxUcmFuc2Zvcm0sIHRyYW5zZm9ybSkpIHtcbiAgICAgIG9uVHJhbnNmb3JtID09PSBudWxsIHx8IG9uVHJhbnNmb3JtID09PSB2b2lkIDAgfHwgb25UcmFuc2Zvcm0oe1xuICAgICAgICB0cmFuc2Zvcm06IGluaXRpYWxUcmFuc2Zvcm0sXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqIERpcmVjdCB1cGRhdGUgdHJhbnNmb3JtICovXG4gIHZhciB1cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiB1cGRhdGVUcmFuc2Zvcm0obmV3VHJhbnNmb3JtLCBhY3Rpb24pIHtcbiAgICBpZiAoZnJhbWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcXVldWUuY3VycmVudCA9IFtdO1xuICAgICAgZnJhbWUuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFRyYW5zZm9ybShmdW5jdGlvbiAocHJlU3RhdGUpIHtcbiAgICAgICAgICB2YXIgbWVtb1N0YXRlID0gcHJlU3RhdGU7XG4gICAgICAgICAgcXVldWUuY3VycmVudC5mb3JFYWNoKGZ1bmN0aW9uIChxdWV1ZVN0YXRlKSB7XG4gICAgICAgICAgICBtZW1vU3RhdGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lbW9TdGF0ZSksIHF1ZXVlU3RhdGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZyYW1lLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIG9uVHJhbnNmb3JtID09PSBudWxsIHx8IG9uVHJhbnNmb3JtID09PSB2b2lkIDAgfHwgb25UcmFuc2Zvcm0oe1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBtZW1vU3RhdGUsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBtZW1vU3RhdGU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHF1ZXVlLmN1cnJlbnQucHVzaChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRyYW5zZm9ybSksIG5ld1RyYW5zZm9ybSkpO1xuICB9O1xuXG4gIC8qKiBTY2FsZSBhY2NvcmRpbmcgdG8gdGhlIHBvc2l0aW9uIG9mIGNlbnRlclggYW5kIGNlbnRlclkgKi9cbiAgdmFyIGRpc3BhdGNoWm9vbUNoYW5nZSA9IGZ1bmN0aW9uIGRpc3BhdGNoWm9vbUNoYW5nZShyYXRpbywgYWN0aW9uLCBjZW50ZXJYLCBjZW50ZXJZLCBpc1RvdWNoKSB7XG4gICAgdmFyIF9pbWdSZWYkY3VycmVudCA9IGltZ1JlZi5jdXJyZW50LFxuICAgICAgd2lkdGggPSBfaW1nUmVmJGN1cnJlbnQud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfaW1nUmVmJGN1cnJlbnQuaGVpZ2h0LFxuICAgICAgb2Zmc2V0V2lkdGggPSBfaW1nUmVmJGN1cnJlbnQub2Zmc2V0V2lkdGgsXG4gICAgICBvZmZzZXRIZWlnaHQgPSBfaW1nUmVmJGN1cnJlbnQub2Zmc2V0SGVpZ2h0LFxuICAgICAgb2Zmc2V0TGVmdCA9IF9pbWdSZWYkY3VycmVudC5vZmZzZXRMZWZ0LFxuICAgICAgb2Zmc2V0VG9wID0gX2ltZ1JlZiRjdXJyZW50Lm9mZnNldFRvcDtcbiAgICB2YXIgbmV3UmF0aW8gPSByYXRpbztcbiAgICB2YXIgbmV3U2NhbGUgPSB0cmFuc2Zvcm0uc2NhbGUgKiByYXRpbztcbiAgICBpZiAobmV3U2NhbGUgPiBtYXhTY2FsZSkge1xuICAgICAgbmV3U2NhbGUgPSBtYXhTY2FsZTtcbiAgICAgIG5ld1JhdGlvID0gbWF4U2NhbGUgLyB0cmFuc2Zvcm0uc2NhbGU7XG4gICAgfSBlbHNlIGlmIChuZXdTY2FsZSA8IG1pblNjYWxlKSB7XG4gICAgICAvLyBGb3IgbW9iaWxlIGludGVyYWN0aW9ucywgYWxsb3cgc2NhbGluZyBkb3duIHRvIHRoZSBtaW5pbXVtIHNjYWxlLlxuICAgICAgbmV3U2NhbGUgPSBpc1RvdWNoID8gbmV3U2NhbGUgOiBtaW5TY2FsZTtcbiAgICAgIG5ld1JhdGlvID0gbmV3U2NhbGUgLyB0cmFuc2Zvcm0uc2NhbGU7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgY2VudGVyIHBvaW50IHNjYWxpbmcgKi9cbiAgICB2YXIgbWVyZ2VkQ2VudGVyWCA9IGNlbnRlclggIT09IG51bGwgJiYgY2VudGVyWCAhPT0gdm9pZCAwID8gY2VudGVyWCA6IGlubmVyV2lkdGggLyAyO1xuICAgIHZhciBtZXJnZWRDZW50ZXJZID0gY2VudGVyWSAhPT0gbnVsbCAmJiBjZW50ZXJZICE9PSB2b2lkIDAgPyBjZW50ZXJZIDogaW5uZXJIZWlnaHQgLyAyO1xuICAgIHZhciBkaWZmUmF0aW8gPSBuZXdSYXRpbyAtIDE7XG4gICAgLyoqIERldmlhdGlvbiBjYWxjdWxhdGVkIGZyb20gaW1hZ2Ugc2l6ZSAqL1xuICAgIHZhciBkaWZmSW1nWCA9IGRpZmZSYXRpbyAqIHdpZHRoICogMC41O1xuICAgIHZhciBkaWZmSW1nWSA9IGRpZmZSYXRpbyAqIGhlaWdodCAqIDAuNTtcbiAgICAvKiogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY2xpY2sgcG9zaXRpb24gYW5kIHRoZSBlZGdlIG9mIHRoZSBkb2N1bWVudCAqL1xuICAgIHZhciBkaWZmT2Zmc2V0TGVmdCA9IGRpZmZSYXRpbyAqIChtZXJnZWRDZW50ZXJYIC0gdHJhbnNmb3JtLnggLSBvZmZzZXRMZWZ0KTtcbiAgICB2YXIgZGlmZk9mZnNldFRvcCA9IGRpZmZSYXRpbyAqIChtZXJnZWRDZW50ZXJZIC0gdHJhbnNmb3JtLnkgLSBvZmZzZXRUb3ApO1xuICAgIC8qKiBGaW5hbCBwb3NpdGlvbmluZyAqL1xuICAgIHZhciBuZXdYID0gdHJhbnNmb3JtLnggLSAoZGlmZk9mZnNldExlZnQgLSBkaWZmSW1nWCk7XG4gICAgdmFyIG5ld1kgPSB0cmFuc2Zvcm0ueSAtIChkaWZmT2Zmc2V0VG9wIC0gZGlmZkltZ1kpO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiB6b29taW5nIHRoZSBpbWFnZVxuICAgICAqIFdoZW4gdGhlIGltYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbml0aWFsaXplZFxuICAgICAqL1xuICAgIGlmIChyYXRpbyA8IDEgJiYgbmV3U2NhbGUgPT09IDEpIHtcbiAgICAgIHZhciBtZXJnZWRXaWR0aCA9IG9mZnNldFdpZHRoICogbmV3U2NhbGU7XG4gICAgICB2YXIgbWVyZ2VkSGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0ICogbmV3U2NhbGU7XG4gICAgICB2YXIgX2dldENsaWVudFNpemUgPSBnZXRDbGllbnRTaXplKCksXG4gICAgICAgIGNsaWVudFdpZHRoID0gX2dldENsaWVudFNpemUud2lkdGgsXG4gICAgICAgIGNsaWVudEhlaWdodCA9IF9nZXRDbGllbnRTaXplLmhlaWdodDtcbiAgICAgIGlmIChtZXJnZWRXaWR0aCA8PSBjbGllbnRXaWR0aCAmJiBtZXJnZWRIZWlnaHQgPD0gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgIG5ld1ggPSAwO1xuICAgICAgICBuZXdZID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlVHJhbnNmb3JtKHtcbiAgICAgIHg6IG5ld1gsXG4gICAgICB5OiBuZXdZLFxuICAgICAgc2NhbGU6IG5ld1NjYWxlXG4gICAgfSwgYWN0aW9uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICByZXNldFRyYW5zZm9ybTogcmVzZXRUcmFuc2Zvcm0sXG4gICAgdXBkYXRlVHJhbnNmb3JtOiB1cGRhdGVUcmFuc2Zvcm0sXG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlOiBkaXNwYXRjaFpvb21DaGFuZ2VcbiAgfTtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgYWRkRXZlbnRMaXN0ZW5lciBmcm9tIFwicmMtdXRpbC9lcy9Eb20vYWRkRXZlbnRMaXN0ZW5lclwiO1xuaW1wb3J0IHsgd2FybmluZyB9IGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBnZXRGaXhTY2FsZUVsZVRyYW5zUG9zaXRpb24gZnJvbSBcIi4uL2dldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvblwiO1xuaW1wb3J0IHsgQkFTRV9TQ0FMRV9SQVRJTywgV0hFRUxfTUFYX1NDQUxFX1JBVElPIH0gZnJvbSBcIi4uL3ByZXZpZXdDb25maWdcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU1vdXNlRXZlbnQoaW1nUmVmLCBtb3ZhYmxlLCB2aXNpYmxlLCBzY2FsZVN0ZXAsIHRyYW5zZm9ybSwgdXBkYXRlVHJhbnNmb3JtLCBkaXNwYXRjaFpvb21DaGFuZ2UpIHtcbiAgdmFyIHJvdGF0ZSA9IHRyYW5zZm9ybS5yb3RhdGUsXG4gICAgc2NhbGUgPSB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgeCA9IHRyYW5zZm9ybS54LFxuICAgIHkgPSB0cmFuc2Zvcm0ueTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBpc01vdmluZyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TW92aW5nID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIHN0YXJ0UG9zaXRpb25JbmZvID0gdXNlUmVmKHtcbiAgICBkaWZmWDogMCxcbiAgICBkaWZmWTogMCxcbiAgICB0cmFuc2Zvcm1YOiAwLFxuICAgIHRyYW5zZm9ybVk6IDBcbiAgfSk7XG4gIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIG9uTW91c2VEb3duKGV2ZW50KSB7XG4gICAgLy8gT25seSBhbGxvdyBtYWluIGJ1dHRvblxuICAgIGlmICghbW92YWJsZSB8fCBldmVudC5idXR0b24gIT09IDApIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHN0YXJ0UG9zaXRpb25JbmZvLmN1cnJlbnQgPSB7XG4gICAgICBkaWZmWDogZXZlbnQucGFnZVggLSB4LFxuICAgICAgZGlmZlk6IGV2ZW50LnBhZ2VZIC0geSxcbiAgICAgIHRyYW5zZm9ybVg6IHgsXG4gICAgICB0cmFuc2Zvcm1ZOiB5XG4gICAgfTtcbiAgICBzZXRNb3ZpbmcodHJ1ZSk7XG4gIH07XG4gIHZhciBvbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgaWYgKHZpc2libGUgJiYgaXNNb3ZpbmcpIHtcbiAgICAgIHVwZGF0ZVRyYW5zZm9ybSh7XG4gICAgICAgIHg6IGV2ZW50LnBhZ2VYIC0gc3RhcnRQb3NpdGlvbkluZm8uY3VycmVudC5kaWZmWCxcbiAgICAgICAgeTogZXZlbnQucGFnZVkgLSBzdGFydFBvc2l0aW9uSW5mby5jdXJyZW50LmRpZmZZXG4gICAgICB9LCAnbW92ZScpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uTW91c2VVcCA9IGZ1bmN0aW9uIG9uTW91c2VVcCgpIHtcbiAgICBpZiAodmlzaWJsZSAmJiBpc01vdmluZykge1xuICAgICAgc2V0TW92aW5nKGZhbHNlKTtcblxuICAgICAgLyoqIE5vIG5lZWQgdG8gcmVzdG9yZSB0aGUgcG9zaXRpb24gd2hlbiB0aGUgcGljdHVyZSBpcyBub3QgbW92ZWQsIFNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgY2xpY2sgKi9cbiAgICAgIHZhciBfc3RhcnRQb3NpdGlvbkluZm8kY3UgPSBzdGFydFBvc2l0aW9uSW5mby5jdXJyZW50LFxuICAgICAgICB0cmFuc2Zvcm1YID0gX3N0YXJ0UG9zaXRpb25JbmZvJGN1LnRyYW5zZm9ybVgsXG4gICAgICAgIHRyYW5zZm9ybVkgPSBfc3RhcnRQb3NpdGlvbkluZm8kY3UudHJhbnNmb3JtWTtcbiAgICAgIHZhciBoYXNDaGFuZ2VkUG9zaXRpb24gPSB4ICE9PSB0cmFuc2Zvcm1YICYmIHkgIT09IHRyYW5zZm9ybVk7XG4gICAgICBpZiAoIWhhc0NoYW5nZWRQb3NpdGlvbikgcmV0dXJuO1xuICAgICAgdmFyIHdpZHRoID0gaW1nUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGggKiBzY2FsZTtcbiAgICAgIHZhciBoZWlnaHQgPSBpbWdSZWYuY3VycmVudC5vZmZzZXRIZWlnaHQgKiBzY2FsZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG4gICAgICB2YXIgX2ltZ1JlZiRjdXJyZW50JGdldEJvID0gaW1nUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIGxlZnQgPSBfaW1nUmVmJGN1cnJlbnQkZ2V0Qm8ubGVmdCxcbiAgICAgICAgdG9wID0gX2ltZ1JlZiRjdXJyZW50JGdldEJvLnRvcDtcbiAgICAgIHZhciBpc1JvdGF0ZSA9IHJvdGF0ZSAlIDE4MCAhPT0gMDtcbiAgICAgIHZhciBmaXhTdGF0ZSA9IGdldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvbihpc1JvdGF0ZSA/IGhlaWdodCA6IHdpZHRoLCBpc1JvdGF0ZSA/IHdpZHRoIDogaGVpZ2h0LCBsZWZ0LCB0b3ApO1xuICAgICAgaWYgKGZpeFN0YXRlKSB7XG4gICAgICAgIHVwZGF0ZVRyYW5zZm9ybShfb2JqZWN0U3ByZWFkKHt9LCBmaXhTdGF0ZSksICdkcmFnUmVib3VuZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIG9uV2hlZWwgPSBmdW5jdGlvbiBvbldoZWVsKGV2ZW50KSB7XG4gICAgaWYgKCF2aXNpYmxlIHx8IGV2ZW50LmRlbHRhWSA9PSAwKSByZXR1cm47XG4gICAgLy8gU2NhbGUgcmF0aW8gZGVwZW5kcyBvbiB0aGUgZGVsdGFZIHNpemVcbiAgICB2YXIgc2NhbGVSYXRpbyA9IE1hdGguYWJzKGV2ZW50LmRlbHRhWSAvIDEwMCk7XG4gICAgLy8gTGltaXQgdGhlIG1heGltdW0gc2NhbGUgcmF0aW9cbiAgICB2YXIgbWVyZ2VkU2NhbGVSYXRpbyA9IE1hdGgubWluKHNjYWxlUmF0aW8sIFdIRUVMX01BWF9TQ0FMRV9SQVRJTyk7XG4gICAgLy8gU2NhbGUgdGhlIHJhdGlvIGVhY2ggdGltZVxuICAgIHZhciByYXRpbyA9IEJBU0VfU0NBTEVfUkFUSU8gKyBtZXJnZWRTY2FsZVJhdGlvICogc2NhbGVTdGVwO1xuICAgIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XG4gICAgICByYXRpbyA9IEJBU0VfU0NBTEVfUkFUSU8gLyByYXRpbztcbiAgICB9XG4gICAgZGlzcGF0Y2hab29tQ2hhbmdlKHJhdGlvLCAnd2hlZWwnLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgfTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25Ub3BNb3VzZVVwTGlzdGVuZXI7XG4gICAgdmFyIG9uVG9wTW91c2VNb3ZlTGlzdGVuZXI7XG4gICAgdmFyIG9uTW91c2VVcExpc3RlbmVyO1xuICAgIHZhciBvbk1vdXNlTW92ZUxpc3RlbmVyO1xuICAgIGlmIChtb3ZhYmxlKSB7XG4gICAgICBvbk1vdXNlVXBMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2V1cCcsIG9uTW91c2VVcCwgZmFsc2UpO1xuICAgICAgb25Nb3VzZU1vdmVMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFJlc29sdmUgaWYgaW4gaWZyYW1lIGxvc3QgZXZlbnRcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKHdpbmRvdy50b3AgIT09IHdpbmRvdy5zZWxmKSB7XG4gICAgICAgICAgb25Ub3BNb3VzZVVwTGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyKHdpbmRvdy50b3AsICdtb3VzZXVwJywgb25Nb3VzZVVwLCBmYWxzZSk7XG4gICAgICAgICAgb25Ub3BNb3VzZU1vdmVMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXIod2luZG93LnRvcCwgJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHdhcm5pbmcoZmFsc2UsIFwiW3JjLWltYWdlXSBcIi5jb25jYXQoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfb25Nb3VzZVVwTGlzdGVuZXIsIF9vbk1vdXNlTW92ZUxpc3RlbmVyLCBfb25Ub3BNb3VzZVVwTGlzdGVuZXIsIF9vblRvcE1vdXNlTW92ZUxpc3RlbjtcbiAgICAgIChfb25Nb3VzZVVwTGlzdGVuZXIgPSBvbk1vdXNlVXBMaXN0ZW5lcikgPT09IG51bGwgfHwgX29uTW91c2VVcExpc3RlbmVyID09PSB2b2lkIDAgfHwgX29uTW91c2VVcExpc3RlbmVyLnJlbW92ZSgpO1xuICAgICAgKF9vbk1vdXNlTW92ZUxpc3RlbmVyID0gb25Nb3VzZU1vdmVMaXN0ZW5lcikgPT09IG51bGwgfHwgX29uTW91c2VNb3ZlTGlzdGVuZXIgPT09IHZvaWQgMCB8fCBfb25Nb3VzZU1vdmVMaXN0ZW5lci5yZW1vdmUoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAoX29uVG9wTW91c2VVcExpc3RlbmVyID0gb25Ub3BNb3VzZVVwTGlzdGVuZXIpID09PSBudWxsIHx8IF9vblRvcE1vdXNlVXBMaXN0ZW5lciA9PT0gdm9pZCAwIHx8IF9vblRvcE1vdXNlVXBMaXN0ZW5lci5yZW1vdmUoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAoX29uVG9wTW91c2VNb3ZlTGlzdGVuID0gb25Ub3BNb3VzZU1vdmVMaXN0ZW5lcikgPT09IG51bGwgfHwgX29uVG9wTW91c2VNb3ZlTGlzdGVuID09PSB2b2lkIDAgfHwgX29uVG9wTW91c2VNb3ZlTGlzdGVuLnJlbW92ZSgpO1xuICAgIH07XG4gIH0sIFt2aXNpYmxlLCBpc01vdmluZywgeCwgeSwgcm90YXRlLCBtb3ZhYmxlXSk7XG4gIHJldHVybiB7XG4gICAgaXNNb3Zpbmc6IGlzTW92aW5nLFxuICAgIG9uTW91c2VEb3duOiBvbk1vdXNlRG93bixcbiAgICBvbk1vdXNlTW92ZTogb25Nb3VzZU1vdmUsXG4gICAgb25Nb3VzZVVwOiBvbk1vdXNlVXAsXG4gICAgb25XaGVlbDogb25XaGVlbFxuICB9O1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ09NTU9OX1BST1BTIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuLyoqXG4gKiBNZXJnZSBwcm9wcyBwcm92aWRlZCBgaXRlbXNgIG9yIGNvbnRleHQgY29sbGVjdGVkIGltYWdlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcmV2aWV3SXRlbXMoaXRlbXMpIHtcbiAgLy8gQ29udGV4dCBjb2xsZWN0aW9uIGltYWdlIGRhdGFcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBpbWFnZXMgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEltYWdlcyA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciByZWdpc3RlckltYWdlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGlkLCBkYXRhKSB7XG4gICAgc2V0SW1hZ2VzKGZ1bmN0aW9uIChpbWdzKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpbWdzKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgaWQsIGRhdGEpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2V0SW1hZ2VzKGZ1bmN0aW9uIChpbWdzKSB7XG4gICAgICAgIHZhciBjbG9uZUltZ3MgPSBfb2JqZWN0U3ByZWFkKHt9LCBpbWdzKTtcbiAgICAgICAgZGVsZXRlIGNsb25lSW1nc1tpZF07XG4gICAgICAgIHJldHVybiBjbG9uZUltZ3M7XG4gICAgICB9KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gaXRlbXNcbiAgdmFyIG1lcmdlZEl0ZW1zID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gdXNlIGBpdGVtc2AgZmlyc3RcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHNyYzogaXRlbVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgaWYgKFsnc3JjJ10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShDT01NT05fUFJPUFMpKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBpdGVtW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB1c2UgcmVnaXN0ZXJlZCBpbWFnZXMgc2Vjb25kbHlcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaW1hZ2VzKS5yZWR1Y2UoZnVuY3Rpb24gKHRvdGFsLCBpZCkge1xuICAgICAgdmFyIF9pbWFnZXMkaWQgPSBpbWFnZXNbaWRdLFxuICAgICAgICBjYW5QcmV2aWV3ID0gX2ltYWdlcyRpZC5jYW5QcmV2aWV3LFxuICAgICAgICBkYXRhID0gX2ltYWdlcyRpZC5kYXRhO1xuICAgICAgaWYgKGNhblByZXZpZXcpIHtcbiAgICAgICAgdG90YWwucHVzaCh7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBpZDogaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdG90YWw7XG4gICAgfSwgW10pO1xuICB9LCBbaXRlbXMsIGltYWdlc10pO1xuICByZXR1cm4gW21lcmdlZEl0ZW1zLCByZWdpc3RlckltYWdlLCAhIWl0ZW1zXTtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByZXZpZXdHcm91cENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dFwiO1xudmFyIHVpZCA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSZWdpc3RlckltYWdlKGNhblByZXZpZXcsIGRhdGEpIHtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVpZCArPSAxO1xuICAgICAgcmV0dXJuIFN0cmluZyh1aWQpO1xuICAgIH0pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDEpLFxuICAgIGlkID0gX1JlYWN0JHVzZVN0YXRlMlswXTtcbiAgdmFyIGdyb3VwQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUHJldmlld0dyb3VwQ29udGV4dCk7XG4gIHZhciByZWdpc3RlckRhdGEgPSB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBjYW5QcmV2aWV3OiBjYW5QcmV2aWV3XG4gIH07XG5cbiAgLy8gS2VlcCBvcmRlciBzdGFydFxuICAvLyBSZXNvbHZlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzI4ODgxXG4gIC8vIE9ubHkgbmVlZCB1blJlZ2lzdGVyIHdoZW4gY29tcG9uZW50IHVuTW91bnRcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZ3JvdXBDb250ZXh0KSB7XG4gICAgICByZXR1cm4gZ3JvdXBDb250ZXh0LnJlZ2lzdGVyKGlkLCByZWdpc3RlckRhdGEpO1xuICAgIH1cbiAgfSwgW10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChncm91cENvbnRleHQpIHtcbiAgICAgIGdyb3VwQ29udGV4dC5yZWdpc3RlcihpZCwgcmVnaXN0ZXJEYXRhKTtcbiAgICB9XG4gIH0sIFtjYW5QcmV2aWV3LCBkYXRhXSk7XG4gIHJldHVybiBpZDtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzSW1hZ2VWYWxpZCB9IGZyb20gXCIuLi91dGlsXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTdGF0dXMoX3JlZikge1xuICB2YXIgc3JjID0gX3JlZi5zcmMsXG4gICAgaXNDdXN0b21QbGFjZWhvbGRlciA9IF9yZWYuaXNDdXN0b21QbGFjZWhvbGRlcixcbiAgICBmYWxsYmFjayA9IF9yZWYuZmFsbGJhY2s7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShpc0N1c3RvbVBsYWNlaG9sZGVyID8gJ2xvYWRpbmcnIDogJ25vcm1hbCcpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHN0YXR1cyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3RhdHVzID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIGlzTG9hZGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGlzRXJyb3IgPSBzdGF0dXMgPT09ICdlcnJvcic7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWNvbXBvbmVudC9pbWFnZS9wdWxsLzE4N1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBpc0N1cnJlbnRTcmMgPSB0cnVlO1xuICAgIGlzSW1hZ2VWYWxpZChzcmMpLnRoZW4oZnVuY3Rpb24gKGlzVmFsaWQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ0OTQ4XG4gICAgICAvLyBJZiBzcmMgY2hhbmdlcywgdGhlIHByZXZpb3VzIHNldFN0YXR1cyBzaG91bGQgbm90IGJlIHRyaWdnZXJlZFxuICAgICAgaWYgKCFpc1ZhbGlkICYmIGlzQ3VycmVudFNyYykge1xuICAgICAgICBzZXRTdGF0dXMoJ2Vycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzQ3VycmVudFNyYyA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtzcmNdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNDdXN0b21QbGFjZWhvbGRlciAmJiAhaXNMb2FkZWQuY3VycmVudCkge1xuICAgICAgc2V0U3RhdHVzKCdsb2FkaW5nJyk7XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKSB7XG4gICAgICBzZXRTdGF0dXMoJ25vcm1hbCcpO1xuICAgIH1cbiAgfSwgW3NyY10pO1xuICB2YXIgb25Mb2FkID0gZnVuY3Rpb24gb25Mb2FkKCkge1xuICAgIHNldFN0YXR1cygnbm9ybWFsJyk7XG4gIH07XG4gIHZhciBnZXRJbWdSZWYgPSBmdW5jdGlvbiBnZXRJbWdSZWYoaW1nKSB7XG4gICAgaXNMb2FkZWQuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChzdGF0dXMgPT09ICdsb2FkaW5nJyAmJiBpbWcgIT09IG51bGwgJiYgaW1nICE9PSB2b2lkIDAgJiYgaW1nLmNvbXBsZXRlICYmIChpbWcubmF0dXJhbFdpZHRoIHx8IGltZy5uYXR1cmFsSGVpZ2h0KSkge1xuICAgICAgaXNMb2FkZWQuY3VycmVudCA9IHRydWU7XG4gICAgICBvbkxvYWQoKTtcbiAgICB9XG4gIH07XG4gIHZhciBzcmNBbmRPbmxvYWQgPSBpc0Vycm9yICYmIGZhbGxiYWNrID8ge1xuICAgIHNyYzogZmFsbGJhY2tcbiAgfSA6IHtcbiAgICBvbkxvYWQ6IG9uTG9hZCxcbiAgICBzcmM6IHNyY1xuICB9O1xuICByZXR1cm4gW2dldEltZ1JlZiwgc3JjQW5kT25sb2FkLCBzdGF0dXNdO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBhZGRFdmVudExpc3RlbmVyIGZyb20gXCJyYy11dGlsL2VzL0RvbS9hZGRFdmVudExpc3RlbmVyXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZ2V0Rml4U2NhbGVFbGVUcmFuc1Bvc2l0aW9uIGZyb20gXCIuLi9nZXRGaXhTY2FsZUVsZVRyYW5zUG9zaXRpb25cIjtcbmZ1bmN0aW9uIGdldERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBhLnggLSBiLng7XG4gIHZhciB5ID0gYS55IC0gYi55O1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTtcbn1cbmZ1bmN0aW9uIGdldENlbnRlcihvbGRQb2ludDEsIG9sZFBvaW50MiwgbmV3UG9pbnQxLCBuZXdQb2ludDIpIHtcbiAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBlYWNoIHBvaW50IGhhcyBtb3ZlZFxuICB2YXIgZGlzdGFuY2UxID0gZ2V0RGlzdGFuY2Uob2xkUG9pbnQxLCBuZXdQb2ludDEpO1xuICB2YXIgZGlzdGFuY2UyID0gZ2V0RGlzdGFuY2Uob2xkUG9pbnQyLCBuZXdQb2ludDIpO1xuXG4gIC8vIElmIGJvdGggZGlzdGFuY2VzIGFyZSAwLCByZXR1cm4gdGhlIG9yaWdpbmFsIHBvaW50c1xuICBpZiAoZGlzdGFuY2UxID09PSAwICYmIGRpc3RhbmNlMiA9PT0gMCkge1xuICAgIHJldHVybiBbb2xkUG9pbnQxLngsIG9sZFBvaW50MS55XTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgcmF0aW8gb2YgdGhlIGRpc3RhbmNlc1xuICB2YXIgcmF0aW8gPSBkaXN0YW5jZTEgLyAoZGlzdGFuY2UxICsgZGlzdGFuY2UyKTtcblxuICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBjZW50ZXIgcG9pbnQgYmFzZWQgb24gdGhlIHJhdGlvXG4gIHZhciB4ID0gb2xkUG9pbnQxLnggKyByYXRpbyAqIChvbGRQb2ludDIueCAtIG9sZFBvaW50MS54KTtcbiAgdmFyIHkgPSBvbGRQb2ludDEueSArIHJhdGlvICogKG9sZFBvaW50Mi55IC0gb2xkUG9pbnQxLnkpO1xuICByZXR1cm4gW3gsIHldO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG91Y2hFdmVudChpbWdSZWYsIG1vdmFibGUsIHZpc2libGUsIG1pblNjYWxlLCB0cmFuc2Zvcm0sIHVwZGF0ZVRyYW5zZm9ybSwgZGlzcGF0Y2hab29tQ2hhbmdlKSB7XG4gIHZhciByb3RhdGUgPSB0cmFuc2Zvcm0ucm90YXRlLFxuICAgIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxlLFxuICAgIHggPSB0cmFuc2Zvcm0ueCxcbiAgICB5ID0gdHJhbnNmb3JtLnk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgaXNUb3VjaGluZyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0SXNUb3VjaGluZyA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciB0b3VjaFBvaW50SW5mbyA9IHVzZVJlZih7XG4gICAgcG9pbnQxOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgcG9pbnQyOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgZXZlbnRUeXBlOiAnbm9uZSdcbiAgfSk7XG4gIHZhciB1cGRhdGVUb3VjaFBvaW50SW5mbyA9IGZ1bmN0aW9uIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHZhbHVlcykge1xuICAgIHRvdWNoUG9pbnRJbmZvLmN1cnJlbnQgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRvdWNoUG9pbnRJbmZvLmN1cnJlbnQpLCB2YWx1ZXMpO1xuICB9O1xuICB2YXIgb25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKCFtb3ZhYmxlKSByZXR1cm47XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc2V0SXNUb3VjaGluZyh0cnVlKTtcbiAgICB2YXIgX2V2ZW50JHRvdWNoZXMgPSBldmVudC50b3VjaGVzLFxuICAgICAgdG91Y2hlcyA9IF9ldmVudCR0b3VjaGVzID09PSB2b2lkIDAgPyBbXSA6IF9ldmVudCR0b3VjaGVzO1xuICAgIGlmICh0b3VjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIHRvdWNoIHpvb21cbiAgICAgIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHtcbiAgICAgICAgcG9pbnQxOiB7XG4gICAgICAgICAgeDogdG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgIHk6IHRvdWNoZXNbMF0uY2xpZW50WVxuICAgICAgICB9LFxuICAgICAgICBwb2ludDI6IHtcbiAgICAgICAgICB4OiB0b3VjaGVzWzFdLmNsaWVudFgsXG4gICAgICAgICAgeTogdG91Y2hlc1sxXS5jbGllbnRZXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZTogJ3RvdWNoWm9vbSdcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0b3VjaCBtb3ZlXG4gICAgICB1cGRhdGVUb3VjaFBvaW50SW5mbyh7XG4gICAgICAgIHBvaW50MToge1xuICAgICAgICAgIHg6IHRvdWNoZXNbMF0uY2xpZW50WCAtIHgsXG4gICAgICAgICAgeTogdG91Y2hlc1swXS5jbGllbnRZIC0geVxuICAgICAgICB9LFxuICAgICAgICBldmVudFR5cGU6ICdtb3ZlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICB2YXIgb25Ub3VjaE1vdmUgPSBmdW5jdGlvbiBvblRvdWNoTW92ZShldmVudCkge1xuICAgIHZhciBfZXZlbnQkdG91Y2hlczIgPSBldmVudC50b3VjaGVzLFxuICAgICAgdG91Y2hlcyA9IF9ldmVudCR0b3VjaGVzMiA9PT0gdm9pZCAwID8gW10gOiBfZXZlbnQkdG91Y2hlczI7XG4gICAgdmFyIF90b3VjaFBvaW50SW5mbyRjdXJyZSA9IHRvdWNoUG9pbnRJbmZvLmN1cnJlbnQsXG4gICAgICBwb2ludDEgPSBfdG91Y2hQb2ludEluZm8kY3VycmUucG9pbnQxLFxuICAgICAgcG9pbnQyID0gX3RvdWNoUG9pbnRJbmZvJGN1cnJlLnBvaW50MixcbiAgICAgIGV2ZW50VHlwZSA9IF90b3VjaFBvaW50SW5mbyRjdXJyZS5ldmVudFR5cGU7XG4gICAgaWYgKHRvdWNoZXMubGVuZ3RoID4gMSAmJiBldmVudFR5cGUgPT09ICd0b3VjaFpvb20nKSB7XG4gICAgICAvLyB0b3VjaCB6b29tXG4gICAgICB2YXIgbmV3UG9pbnQxID0ge1xuICAgICAgICB4OiB0b3VjaGVzWzBdLmNsaWVudFgsXG4gICAgICAgIHk6IHRvdWNoZXNbMF0uY2xpZW50WVxuICAgICAgfTtcbiAgICAgIHZhciBuZXdQb2ludDIgPSB7XG4gICAgICAgIHg6IHRvdWNoZXNbMV0uY2xpZW50WCxcbiAgICAgICAgeTogdG91Y2hlc1sxXS5jbGllbnRZXG4gICAgICB9O1xuICAgICAgdmFyIF9nZXRDZW50ZXIgPSBnZXRDZW50ZXIocG9pbnQxLCBwb2ludDIsIG5ld1BvaW50MSwgbmV3UG9pbnQyKSxcbiAgICAgICAgX2dldENlbnRlcjIgPSBfc2xpY2VkVG9BcnJheShfZ2V0Q2VudGVyLCAyKSxcbiAgICAgICAgY2VudGVyWCA9IF9nZXRDZW50ZXIyWzBdLFxuICAgICAgICBjZW50ZXJZID0gX2dldENlbnRlcjJbMV07XG4gICAgICB2YXIgcmF0aW8gPSBnZXREaXN0YW5jZShuZXdQb2ludDEsIG5ld1BvaW50MikgLyBnZXREaXN0YW5jZShwb2ludDEsIHBvaW50Mik7XG4gICAgICBkaXNwYXRjaFpvb21DaGFuZ2UocmF0aW8sICd0b3VjaFpvb20nLCBjZW50ZXJYLCBjZW50ZXJZLCB0cnVlKTtcbiAgICAgIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHtcbiAgICAgICAgcG9pbnQxOiBuZXdQb2ludDEsXG4gICAgICAgIHBvaW50MjogbmV3UG9pbnQyLFxuICAgICAgICBldmVudFR5cGU6ICd0b3VjaFpvb20nXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ21vdmUnKSB7XG4gICAgICAvLyB0b3VjaCBtb3ZlXG4gICAgICB1cGRhdGVUcmFuc2Zvcm0oe1xuICAgICAgICB4OiB0b3VjaGVzWzBdLmNsaWVudFggLSBwb2ludDEueCxcbiAgICAgICAgeTogdG91Y2hlc1swXS5jbGllbnRZIC0gcG9pbnQxLnlcbiAgICAgIH0sICdtb3ZlJyk7XG4gICAgICB1cGRhdGVUb3VjaFBvaW50SW5mbyh7XG4gICAgICAgIGV2ZW50VHlwZTogJ21vdmUnXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICBpZiAoIXZpc2libGUpIHJldHVybjtcbiAgICBpZiAoaXNUb3VjaGluZykge1xuICAgICAgc2V0SXNUb3VjaGluZyhmYWxzZSk7XG4gICAgfVxuICAgIHVwZGF0ZVRvdWNoUG9pbnRJbmZvKHtcbiAgICAgIGV2ZW50VHlwZTogJ25vbmUnXG4gICAgfSk7XG4gICAgaWYgKG1pblNjYWxlID4gc2NhbGUpIHtcbiAgICAgIC8qKiBXaGVuIHRoZSBzY2FsaW5nIHJhdGlvIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSBzY2FsaW5nIHJhdGlvLCByZXNldCB0aGUgc2NhbGluZyByYXRpbyAqL1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zZm9ybSh7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHNjYWxlOiBtaW5TY2FsZVxuICAgICAgfSwgJ3RvdWNoWm9vbScpO1xuICAgIH1cbiAgICB2YXIgd2lkdGggPSBpbWdSZWYuY3VycmVudC5vZmZzZXRXaWR0aCAqIHNjYWxlO1xuICAgIHZhciBoZWlnaHQgPSBpbWdSZWYuY3VycmVudC5vZmZzZXRIZWlnaHQgKiBzY2FsZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvd1xuICAgIHZhciBfaW1nUmVmJGN1cnJlbnQkZ2V0Qm8gPSBpbWdSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIGxlZnQgPSBfaW1nUmVmJGN1cnJlbnQkZ2V0Qm8ubGVmdCxcbiAgICAgIHRvcCA9IF9pbWdSZWYkY3VycmVudCRnZXRCby50b3A7XG4gICAgdmFyIGlzUm90YXRlID0gcm90YXRlICUgMTgwICE9PSAwO1xuICAgIHZhciBmaXhTdGF0ZSA9IGdldEZpeFNjYWxlRWxlVHJhbnNQb3NpdGlvbihpc1JvdGF0ZSA/IGhlaWdodCA6IHdpZHRoLCBpc1JvdGF0ZSA/IHdpZHRoIDogaGVpZ2h0LCBsZWZ0LCB0b3ApO1xuICAgIGlmIChmaXhTdGF0ZSkge1xuICAgICAgdXBkYXRlVHJhbnNmb3JtKF9vYmplY3RTcHJlYWQoe30sIGZpeFN0YXRlKSwgJ2RyYWdSZWJvdW5kJyk7XG4gICAgfVxuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvblRvdWNoTW92ZUxpc3RlbmVyO1xuICAgIGlmICh2aXNpYmxlICYmIG1vdmFibGUpIHtcbiAgICAgIG9uVG91Y2hNb3ZlTGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ3RvdWNobW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9LCB7XG4gICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfb25Ub3VjaE1vdmVMaXN0ZW5lcjtcbiAgICAgIChfb25Ub3VjaE1vdmVMaXN0ZW5lciA9IG9uVG91Y2hNb3ZlTGlzdGVuZXIpID09PSBudWxsIHx8IF9vblRvdWNoTW92ZUxpc3RlbmVyID09PSB2b2lkIDAgfHwgX29uVG91Y2hNb3ZlTGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgfTtcbiAgfSwgW3Zpc2libGUsIG1vdmFibGVdKTtcbiAgcmV0dXJuIHtcbiAgICBpc1RvdWNoaW5nOiBpc1RvdWNoaW5nLFxuICAgIG9uVG91Y2hTdGFydDogb25Ub3VjaFN0YXJ0LFxuICAgIG9uVG91Y2hNb3ZlOiBvblRvdWNoTW92ZSxcbiAgICBvblRvdWNoRW5kOiBvblRvdWNoRW5kXG4gIH07XG59IiwiaW1wb3J0IEltYWdlIGZyb20gXCIuL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9JbWFnZVwiO1xuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7IiwiLyoqIFNjYWxlIHRoZSByYXRpbyBiYXNlICovXG5leHBvcnQgdmFyIEJBU0VfU0NBTEVfUkFUSU8gPSAxO1xuLyoqIFRoZSBtYXhpbXVtIHpvb20gcmF0aW8gd2hlbiB0aGUgbW91c2Ugem9vbXMgaW4sIGFkanVzdGFibGUgKi9cbmV4cG9ydCB2YXIgV0hFRUxfTUFYX1NDQUxFX1JBVElPID0gMTsiLCJleHBvcnQgZnVuY3Rpb24gaXNJbWFnZVZhbGlkKHNyYykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgfTtcbiAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSk7XG4gICAgfTtcbiAgICBpbWcuc3JjID0gc3JjO1xuICB9KTtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoYXNBZGRvbiwgaGFzUHJlZml4U3VmZml4IH0gZnJvbSBcIi4vdXRpbHMvY29tbW9uVXRpbHNcIjtcbnZhciBCYXNlSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgX3Byb3BzLCBfcHJvcHMyLCBfcHJvcHMzO1xuICB2YXIgaW5wdXRFbCA9IHByb3BzLmlucHV0RWxlbWVudCxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBwcmVmaXggPSBwcm9wcy5wcmVmaXgsXG4gICAgc3VmZml4ID0gcHJvcHMuc3VmZml4LFxuICAgIGFkZG9uQmVmb3JlID0gcHJvcHMuYWRkb25CZWZvcmUsXG4gICAgYWRkb25BZnRlciA9IHByb3BzLmFkZG9uQWZ0ZXIsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seSA9IHByb3BzLnJlYWRPbmx5LFxuICAgIGZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkLFxuICAgIHRyaWdnZXJGb2N1cyA9IHByb3BzLnRyaWdnZXJGb2N1cyxcbiAgICBhbGxvd0NsZWFyID0gcHJvcHMuYWxsb3dDbGVhcixcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIGhhbmRsZVJlc2V0ID0gcHJvcHMuaGFuZGxlUmVzZXQsXG4gICAgaGlkZGVuID0gcHJvcHMuaGlkZGVuLFxuICAgIGNsYXNzZXMgPSBwcm9wcy5jbGFzc2VzLFxuICAgIGNsYXNzTmFtZXMgPSBwcm9wcy5jbGFzc05hbWVzLFxuICAgIGRhdGFBdHRycyA9IHByb3BzLmRhdGFBdHRycyxcbiAgICBzdHlsZXMgPSBwcm9wcy5zdHlsZXMsXG4gICAgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMsXG4gICAgb25DbGVhciA9IHByb3BzLm9uQ2xlYXI7XG4gIHZhciBpbnB1dEVsZW1lbnQgPSBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gdm9pZCAwID8gY2hpbGRyZW4gOiBpbnB1dEVsO1xuICB2YXIgQWZmaXhXcmFwcGVyQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy5hZmZpeFdyYXBwZXIpIHx8ICdzcGFuJztcbiAgdmFyIEdyb3VwV3JhcHBlckNvbXBvbmVudCA9IChjb21wb25lbnRzID09PSBudWxsIHx8IGNvbXBvbmVudHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBvbmVudHMuZ3JvdXBXcmFwcGVyKSB8fCAnc3Bhbic7XG4gIHZhciBXcmFwcGVyQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy53cmFwcGVyKSB8fCAnc3Bhbic7XG4gIHZhciBHcm91cEFkZG9uQ29tcG9uZW50ID0gKGNvbXBvbmVudHMgPT09IG51bGwgfHwgY29tcG9uZW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcG9uZW50cy5ncm91cEFkZG9uKSB8fCAnc3Bhbic7XG4gIHZhciBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBvbklucHV0Q2xpY2sgPSBmdW5jdGlvbiBvbklucHV0Q2xpY2soZSkge1xuICAgIHZhciBfY29udGFpbmVyUmVmJGN1cnJlbnQ7XG4gICAgaWYgKChfY29udGFpbmVyUmVmJGN1cnJlbnQgPSBjb250YWluZXJSZWYuY3VycmVudCkgIT09IG51bGwgJiYgX2NvbnRhaW5lclJlZiRjdXJyZW50ICE9PSB2b2lkIDAgJiYgX2NvbnRhaW5lclJlZiRjdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgdHJpZ2dlckZvY3VzID09PSBudWxsIHx8IHRyaWdnZXJGb2N1cyA9PT0gdm9pZCAwIHx8IHRyaWdnZXJGb2N1cygpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGhhc0FmZml4ID0gaGFzUHJlZml4U3VmZml4KHByb3BzKTtcbiAgdmFyIGVsZW1lbnQgPSAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGlucHV0RWxlbWVudCwge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goKF9wcm9wcyA9IGlucHV0RWxlbWVudC5wcm9wcykgPT09IG51bGwgfHwgX3Byb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcHJvcHMuY2xhc3NOYW1lLCAhaGFzQWZmaXggJiYgKGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy52YXJpYW50KSkgfHwgbnVsbFxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVmID09PT09PT09PT09PT09PT09PT09PT09PSAvL1xuICB2YXIgZ3JvdXBSZWYgPSB1c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IGdyb3VwUmVmLmN1cnJlbnQgfHwgY29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT0gUHJlZml4ICYgU3VmZml4ID09PT09PT09PT09PT09PT09PSAvL1xuICBpZiAoaGFzQWZmaXgpIHtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT0gQ2xlYXIgSWNvbiA9PT09PT09PT09PT09PT09PT0gLy9cbiAgICB2YXIgY2xlYXJJY29uID0gbnVsbDtcbiAgICBpZiAoYWxsb3dDbGVhcikge1xuICAgICAgdmFyIG5lZWRDbGVhciA9ICFkaXNhYmxlZCAmJiAhcmVhZE9ubHkgJiYgdmFsdWU7XG4gICAgICB2YXIgY2xlYXJJY29uQ2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jbGVhci1pY29uXCIpO1xuICAgICAgdmFyIGljb25Ob2RlID0gX3R5cGVvZihhbGxvd0NsZWFyKSA9PT0gJ29iamVjdCcgJiYgYWxsb3dDbGVhciAhPT0gbnVsbCAmJiBhbGxvd0NsZWFyICE9PSB2b2lkIDAgJiYgYWxsb3dDbGVhci5jbGVhckljb24gPyBhbGxvd0NsZWFyLmNsZWFySWNvbiA6ICfinJYnO1xuICAgICAgY2xlYXJJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBoYW5kbGVSZXNldCA9PT0gbnVsbCB8fCBoYW5kbGVSZXNldCA9PT0gdm9pZCAwIHx8IGhhbmRsZVJlc2V0KGV2ZW50KTtcbiAgICAgICAgICBvbkNsZWFyID09PSBudWxsIHx8IG9uQ2xlYXIgPT09IHZvaWQgMCB8fCBvbkNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgb25CbHVyIHdoZW4gY2xlYXIgaW5wdXRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvMzEyMDBcbiAgICAgICAgLFxuICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGVhckljb25DbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGNsZWFySWNvbkNscywgXCItaGlkZGVuXCIpLCAhbmVlZENsZWFyKSwgXCJcIi5jb25jYXQoY2xlYXJJY29uQ2xzLCBcIi1oYXMtc3VmZml4XCIpLCAhIXN1ZmZpeCkpXG4gICAgICB9LCBpY29uTm9kZSk7XG4gICAgfVxuICAgIHZhciBhZmZpeFdyYXBwZXJQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWFmZml4LXdyYXBwZXJcIik7XG4gICAgdmFyIGFmZml4V3JhcHBlckNscyA9IGNsc3goYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBkaXNhYmxlZCksIFwiXCIuY29uY2F0KGFmZml4V3JhcHBlclByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQoYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBcIi1mb2N1c2VkXCIpLCBmb2N1c2VkKSwgXCJcIi5jb25jYXQoYWZmaXhXcmFwcGVyUHJlZml4Q2xzLCBcIi1yZWFkb25seVwiKSwgcmVhZE9ubHkpLCBcIlwiLmNvbmNhdChhZmZpeFdyYXBwZXJQcmVmaXhDbHMsIFwiLWlucHV0LXdpdGgtY2xlYXItYnRuXCIpLCBzdWZmaXggJiYgYWxsb3dDbGVhciAmJiB2YWx1ZSksIGNsYXNzZXMgPT09IG51bGwgfHwgY2xhc3NlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3Nlcy5hZmZpeFdyYXBwZXIsIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5hZmZpeFdyYXBwZXIsIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy52YXJpYW50KTtcbiAgICB2YXIgc3VmZml4Tm9kZSA9IChzdWZmaXggfHwgYWxsb3dDbGVhcikgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXN1ZmZpeFwiKSwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnN1ZmZpeCksXG4gICAgICBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLnN1ZmZpeFxuICAgIH0sIGNsZWFySWNvbiwgc3VmZml4KTtcbiAgICBlbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQWZmaXhXcmFwcGVyQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGFmZml4V3JhcHBlckNscyxcbiAgICAgIHN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMuYWZmaXhXcmFwcGVyLFxuICAgICAgb25DbGljazogb25JbnB1dENsaWNrXG4gICAgfSwgZGF0YUF0dHJzID09PSBudWxsIHx8IGRhdGFBdHRycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YUF0dHJzLmFmZml4V3JhcHBlciwge1xuICAgICAgcmVmOiBjb250YWluZXJSZWZcbiAgICB9KSwgcHJlZml4ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1wcmVmaXhcIiksIGNsYXNzTmFtZXMgPT09IG51bGwgfHwgY2xhc3NOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lcy5wcmVmaXgpLFxuICAgICAgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5wcmVmaXhcbiAgICB9LCBwcmVmaXgpLCBlbGVtZW50LCBzdWZmaXhOb2RlKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PSBBZGRvbiA9PT09PT09PT09PT09PT09PT0gLy9cbiAgaWYgKGhhc0FkZG9uKHByb3BzKSkge1xuICAgIHZhciB3cmFwcGVyQ2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ncm91cFwiKTtcbiAgICB2YXIgYWRkb25DbHMgPSBcIlwiLmNvbmNhdCh3cmFwcGVyQ2xzLCBcIi1hZGRvblwiKTtcbiAgICB2YXIgZ3JvdXBXcmFwcGVyQ2xzID0gXCJcIi5jb25jYXQod3JhcHBlckNscywgXCItd3JhcHBlclwiKTtcbiAgICB2YXIgbWVyZ2VkV3JhcHBlckNsYXNzTmFtZSA9IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi13cmFwcGVyXCIpLCB3cmFwcGVyQ2xzLCBjbGFzc2VzID09PSBudWxsIHx8IGNsYXNzZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzZXMud3JhcHBlciwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLndyYXBwZXIpO1xuICAgIHZhciBtZXJnZWRHcm91cENsYXNzTmFtZSA9IGNsc3goZ3JvdXBXcmFwcGVyQ2xzLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGdyb3VwV3JhcHBlckNscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc2VzLmdyb3VwLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuZ3JvdXBXcmFwcGVyKTtcblxuICAgIC8vIE5lZWQgYW5vdGhlciB3cmFwcGVyIGZvciBjaGFuZ2luZyBkaXNwbGF5OnRhYmxlIHRvIGRpc3BsYXk6aW5saW5lLWJsb2NrXG4gICAgLy8gYW5kIHB1dCBzdHlsZSBwcm9wIGluIHdyYXBwZXJcbiAgICBlbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXBXcmFwcGVyQ29tcG9uZW50LCB7XG4gICAgICBjbGFzc05hbWU6IG1lcmdlZEdyb3VwQ2xhc3NOYW1lLFxuICAgICAgcmVmOiBncm91cFJlZlxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZXJDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzTmFtZTogbWVyZ2VkV3JhcHBlckNsYXNzTmFtZVxuICAgIH0sIGFkZG9uQmVmb3JlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEdyb3VwQWRkb25Db21wb25lbnQsIHtcbiAgICAgIGNsYXNzTmFtZTogYWRkb25DbHNcbiAgICB9LCBhZGRvbkJlZm9yZSksIGVsZW1lbnQsIGFkZG9uQWZ0ZXIgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXBBZGRvbkNvbXBvbmVudCwge1xuICAgICAgY2xhc3NOYW1lOiBhZGRvbkNsc1xuICAgIH0sIGFkZG9uQWZ0ZXIpKSk7XG4gIH1cblxuICAvLyBgY2xhc3NOYW1lYCBhbmQgYHN0eWxlYCBhcmUgYWx3YXlzIG9uIHRoZSByb290IGVsZW1lbnRcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwge1xuICAgIGNsYXNzTmFtZTogY2xzeCgoX3Byb3BzMiA9IGVsZW1lbnQucHJvcHMpID09PSBudWxsIHx8IF9wcm9wczIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wczIuY2xhc3NOYW1lLCBjbGFzc05hbWUpIHx8IG51bGwsXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgKF9wcm9wczMgPSBlbGVtZW50LnByb3BzKSA9PT0gbnVsbCB8fCBfcHJvcHMzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcHJvcHMzLnN0eWxlKSwgc3R5bGUpLFxuICAgIGhpZGRlbjogaGlkZGVuXG4gIH0pO1xufSk7XG5leHBvcnQgZGVmYXVsdCBCYXNlSW5wdXQ7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiYXV0b0NvbXBsZXRlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkZvY3VzXCIsIFwib25CbHVyXCIsIFwib25QcmVzc0VudGVyXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcInByZWZpeENsc1wiLCBcImRpc2FibGVkXCIsIFwiaHRtbFNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJtYXhMZW5ndGhcIiwgXCJzdWZmaXhcIiwgXCJzaG93Q291bnRcIiwgXCJjb3VudFwiLCBcInR5cGVcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lc1wiLCBcInN0eWxlc1wiLCBcIm9uQ29tcG9zaXRpb25TdGFydFwiLCBcIm9uQ29tcG9zaXRpb25FbmRcIl07XG5pbXBvcnQgY2xzeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB1c2VNZXJnZWRTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VNZXJnZWRTdGF0ZVwiO1xuaW1wb3J0IG9taXQgZnJvbSBcInJjLXV0aWwvZXMvb21pdFwiO1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCYXNlSW5wdXQgZnJvbSBcIi4vQmFzZUlucHV0XCI7XG5pbXBvcnQgdXNlQ291bnQgZnJvbSBcIi4vaG9va3MvdXNlQ291bnRcIjtcbmltcG9ydCB7IHJlc29sdmVPbkNoYW5nZSwgdHJpZ2dlckZvY3VzIH0gZnJvbSBcIi4vdXRpbHMvY29tbW9uVXRpbHNcIjtcbnZhciBJbnB1dCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBhdXRvQ29tcGxldGUgPSBwcm9wcy5hdXRvQ29tcGxldGUsXG4gICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkZvY3VzID0gcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXIgPSBwcm9wcy5vbkJsdXIsXG4gICAgb25QcmVzc0VudGVyID0gcHJvcHMub25QcmVzc0VudGVyLFxuICAgIG9uS2V5RG93biA9IHByb3BzLm9uS2V5RG93bixcbiAgICBvbktleVVwID0gcHJvcHMub25LZXlVcCxcbiAgICBfcHJvcHMkcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZWZpeENscyA9IF9wcm9wcyRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1pbnB1dCcgOiBfcHJvcHMkcHJlZml4Q2xzLFxuICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgaHRtbFNpemUgPSBwcm9wcy5odG1sU2l6ZSxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgbWF4TGVuZ3RoID0gcHJvcHMubWF4TGVuZ3RoLFxuICAgIHN1ZmZpeCA9IHByb3BzLnN1ZmZpeCxcbiAgICBzaG93Q291bnQgPSBwcm9wcy5zaG93Q291bnQsXG4gICAgY291bnQgPSBwcm9wcy5jb3VudCxcbiAgICBfcHJvcHMkdHlwZSA9IHByb3BzLnR5cGUsXG4gICAgdHlwZSA9IF9wcm9wcyR0eXBlID09PSB2b2lkIDAgPyAndGV4dCcgOiBfcHJvcHMkdHlwZSxcbiAgICBjbGFzc2VzID0gcHJvcHMuY2xhc3NlcyxcbiAgICBjbGFzc05hbWVzID0gcHJvcHMuY2xhc3NOYW1lcyxcbiAgICBzdHlsZXMgPSBwcm9wcy5zdHlsZXMsXG4gICAgX29uQ29tcG9zaXRpb25TdGFydCA9IHByb3BzLm9uQ29tcG9zaXRpb25TdGFydCxcbiAgICBvbkNvbXBvc2l0aW9uRW5kID0gcHJvcHMub25Db21wb3NpdGlvbkVuZCxcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGZvY3VzZWQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldEZvY3VzZWQgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgY29tcG9zaXRpb25SZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIga2V5TG9ja1JlZiA9IHVzZVJlZihmYWxzZSk7XG4gIHZhciBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGhvbGRlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMob3B0aW9uKSB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHRyaWdnZXJGb2N1cyhpbnB1dFJlZi5jdXJyZW50LCBvcHRpb24pO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFZhbHVlID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShwcm9wcy5kZWZhdWx0VmFsdWUsIHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIHZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIHZhciBmb3JtYXRWYWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PSBTZWxlY3QgUmFuZ2UgPT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBzZWxlY3Rpb24gPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFNlbGVjdGlvbiA9IF91c2VTdGF0ZTRbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBDb3VudCA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY291bnRDb25maWcgPSB1c2VDb3VudChjb3VudCwgc2hvd0NvdW50KTtcbiAgdmFyIG1lcmdlZE1heCA9IGNvdW50Q29uZmlnLm1heCB8fCBtYXhMZW5ndGg7XG4gIHZhciB2YWx1ZUxlbmd0aCA9IGNvdW50Q29uZmlnLnN0cmF0ZWd5KGZvcm1hdFZhbHVlKTtcbiAgdmFyIGlzT3V0T2ZSYW5nZSA9ICEhbWVyZ2VkTWF4ICYmIHZhbHVlTGVuZ3RoID4gbWVyZ2VkTWF4O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IFJlZiA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2hvbGRlclJlZiRjdXJyZW50O1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1czogZm9jdXMsXG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQ7XG4gICAgICAgIChfaW5wdXRSZWYkY3VycmVudCA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50ID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQuYmx1cigpO1xuICAgICAgfSxcbiAgICAgIHNldFNlbGVjdGlvblJhbmdlOiBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIF9pbnB1dFJlZiRjdXJyZW50MjtcbiAgICAgICAgKF9pbnB1dFJlZiRjdXJyZW50MiA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50MiA9PT0gdm9pZCAwIHx8IF9pbnB1dFJlZiRjdXJyZW50Mi5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXJlY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KCkge1xuICAgICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQzO1xuICAgICAgICAoX2lucHV0UmVmJGN1cnJlbnQzID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQzID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQzLnNlbGVjdCgpO1xuICAgICAgfSxcbiAgICAgIGlucHV0OiBpbnB1dFJlZi5jdXJyZW50LFxuICAgICAgbmF0aXZlRWxlbWVudDogKChfaG9sZGVyUmVmJGN1cnJlbnQgPSBob2xkZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2hvbGRlclJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaG9sZGVyUmVmJGN1cnJlbnQubmF0aXZlRWxlbWVudCkgfHwgaW5wdXRSZWYuY3VycmVudFxuICAgIH07XG4gIH0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChrZXlMb2NrUmVmLmN1cnJlbnQpIHtcbiAgICAgIGtleUxvY2tSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgICBzZXRGb2N1c2VkKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICByZXR1cm4gcHJldiAmJiBkaXNhYmxlZCA/IGZhbHNlIDogcHJldjtcbiAgICB9KTtcbiAgfSwgW2Rpc2FibGVkXSk7XG4gIHZhciB0cmlnZ2VyQ2hhbmdlID0gZnVuY3Rpb24gdHJpZ2dlckNoYW5nZShlLCBjdXJyZW50VmFsdWUsIGluZm8pIHtcbiAgICB2YXIgY3V0VmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gICAgaWYgKCFjb21wb3NpdGlvblJlZi5jdXJyZW50ICYmIGNvdW50Q29uZmlnLmV4Y2VlZEZvcm1hdHRlciAmJiBjb3VudENvbmZpZy5tYXggJiYgY291bnRDb25maWcuc3RyYXRlZ3koY3VycmVudFZhbHVlKSA+IGNvdW50Q29uZmlnLm1heCkge1xuICAgICAgY3V0VmFsdWUgPSBjb3VudENvbmZpZy5leGNlZWRGb3JtYXR0ZXIoY3VycmVudFZhbHVlLCB7XG4gICAgICAgIG1heDogY291bnRDb25maWcubWF4XG4gICAgICB9KTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IGN1dFZhbHVlKSB7XG4gICAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDQsIF9pbnB1dFJlZiRjdXJyZW50NTtcbiAgICAgICAgc2V0U2VsZWN0aW9uKFsoKF9pbnB1dFJlZiRjdXJyZW50NCA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50NCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2lucHV0UmVmJGN1cnJlbnQ0LnNlbGVjdGlvblN0YXJ0KSB8fCAwLCAoKF9pbnB1dFJlZiRjdXJyZW50NSA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9pbnB1dFJlZiRjdXJyZW50NSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2lucHV0UmVmJGN1cnJlbnQ1LnNlbGVjdGlvbkVuZCkgfHwgMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5mby5zb3VyY2UgPT09ICdjb21wb3NpdGlvbkVuZCcpIHtcbiAgICAgIC8vIEF2b2lkIHRyaWdnZXJpbmcgdHdpY2VcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ2NTg3XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFZhbHVlKGN1dFZhbHVlKTtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzb2x2ZU9uQ2hhbmdlKGlucHV0UmVmLmN1cnJlbnQsIGUsIG9uQ2hhbmdlLCBjdXRWYWx1ZSk7XG4gICAgfVxuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDY7XG4gICAgICAoX2lucHV0UmVmJGN1cnJlbnQ2ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQ2ID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQ2LnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KF9pbnB1dFJlZiRjdXJyZW50NiwgX3RvQ29uc3VtYWJsZUFycmF5KHNlbGVjdGlvbikpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGlvbl0pO1xuICB2YXIgb25JbnRlcm5hbENoYW5nZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDaGFuZ2UoZSkge1xuICAgIHRyaWdnZXJDaGFuZ2UoZSwgZS50YXJnZXQudmFsdWUsIHtcbiAgICAgIHNvdXJjZTogJ2NoYW5nZSdcbiAgICB9KTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxDb21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDb21wb3NpdGlvbkVuZChlKSB7XG4gICAgY29tcG9zaXRpb25SZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHRyaWdnZXJDaGFuZ2UoZSwgZS5jdXJyZW50VGFyZ2V0LnZhbHVlLCB7XG4gICAgICBzb3VyY2U6ICdjb21wb3NpdGlvbkVuZCdcbiAgICB9KTtcbiAgICBvbkNvbXBvc2l0aW9uRW5kID09PSBudWxsIHx8IG9uQ29tcG9zaXRpb25FbmQgPT09IHZvaWQgMCB8fCBvbkNvbXBvc2l0aW9uRW5kKGUpO1xuICB9O1xuICB2YXIgaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZSkge1xuICAgIGlmIChvblByZXNzRW50ZXIgJiYgZS5rZXkgPT09ICdFbnRlcicgJiYgIWtleUxvY2tSZWYuY3VycmVudCkge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIG9uUHJlc3NFbnRlcihlKTtcbiAgICB9XG4gICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwIHx8IG9uS2V5RG93bihlKTtcbiAgfTtcbiAgdmFyIGhhbmRsZUtleVVwID0gZnVuY3Rpb24gaGFuZGxlS2V5VXAoZSkge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uS2V5VXAgPT09IG51bGwgfHwgb25LZXlVcCA9PT0gdm9pZCAwIHx8IG9uS2V5VXAoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVGb2N1cyA9IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGUpIHtcbiAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwIHx8IG9uRm9jdXMoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVCbHVyID0gZnVuY3Rpb24gaGFuZGxlQmx1cihlKSB7XG4gICAgaWYgKGtleUxvY2tSZWYuY3VycmVudCkge1xuICAgICAga2V5TG9ja1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCB8fCBvbkJsdXIoZSk7XG4gIH07XG4gIHZhciBoYW5kbGVSZXNldCA9IGZ1bmN0aW9uIGhhbmRsZVJlc2V0KGUpIHtcbiAgICBzZXRWYWx1ZSgnJyk7XG4gICAgZm9jdXMoKTtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzb2x2ZU9uQ2hhbmdlKGlucHV0UmVmLmN1cnJlbnQsIGUsIG9uQ2hhbmdlKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBJbnB1dCA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb3V0T2ZSYW5nZUNscyA9IGlzT3V0T2ZSYW5nZSAmJiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW91dC1vZi1yYW5nZVwiKTtcbiAgdmFyIGdldElucHV0RWxlbWVudCA9IGZ1bmN0aW9uIGdldElucHV0RWxlbWVudCgpIHtcbiAgICAvLyBGaXggaHR0cHM6Ly9mYi5tZS9yZWFjdC11bmtub3duLXByb3BcbiAgICB2YXIgb3RoZXJQcm9wcyA9IG9taXQocHJvcHMsIFsncHJlZml4Q2xzJywgJ29uUHJlc3NFbnRlcicsICdhZGRvbkJlZm9yZScsICdhZGRvbkFmdGVyJywgJ3ByZWZpeCcsICdzdWZmaXgnLCAnYWxsb3dDbGVhcicsXG4gICAgLy8gSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQsXG4gICAgLy8gc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoLlxuICAgICdkZWZhdWx0VmFsdWUnLCAnc2hvd0NvdW50JywgJ2NvdW50JywgJ2NsYXNzZXMnLCAnaHRtbFNpemUnLCAnc3R5bGVzJywgJ2NsYXNzTmFtZXMnLCAnb25DbGVhciddKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZVxuICAgIH0sIG90aGVyUHJvcHMsIHtcbiAgICAgIG9uQ2hhbmdlOiBvbkludGVybmFsQ2hhbmdlLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChwcmVmaXhDbHMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1kaXNhYmxlZFwiKSwgZGlzYWJsZWQpLCBjbGFzc05hbWVzID09PSBudWxsIHx8IGNsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuaW5wdXQpLFxuICAgICAgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5pbnB1dCxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBzaXplOiBodG1sU2l6ZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBvbkNvbXBvc2l0aW9uU3RhcnQ6IGZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydChlKSB7XG4gICAgICAgIGNvbXBvc2l0aW9uUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBfb25Db21wb3NpdGlvblN0YXJ0ID09PSBudWxsIHx8IF9vbkNvbXBvc2l0aW9uU3RhcnQgPT09IHZvaWQgMCB8fCBfb25Db21wb3NpdGlvblN0YXJ0KGUpO1xuICAgICAgfSxcbiAgICAgIG9uQ29tcG9zaXRpb25FbmQ6IG9uSW50ZXJuYWxDb21wb3NpdGlvbkVuZFxuICAgIH0pKTtcbiAgfTtcbiAgdmFyIGdldFN1ZmZpeCA9IGZ1bmN0aW9uIGdldFN1ZmZpeCgpIHtcbiAgICAvLyBNYXggbGVuZ3RoIHZhbHVlXG4gICAgdmFyIGhhc01heExlbmd0aCA9IE51bWJlcihtZXJnZWRNYXgpID4gMDtcbiAgICBpZiAoc3VmZml4IHx8IGNvdW50Q29uZmlnLnNob3cpIHtcbiAgICAgIHZhciBkYXRhQ291bnQgPSBjb3VudENvbmZpZy5zaG93Rm9ybWF0dGVyID8gY291bnRDb25maWcuc2hvd0Zvcm1hdHRlcih7XG4gICAgICAgIHZhbHVlOiBmb3JtYXRWYWx1ZSxcbiAgICAgICAgY291bnQ6IHZhbHVlTGVuZ3RoLFxuICAgICAgICBtYXhMZW5ndGg6IG1lcmdlZE1heFxuICAgICAgfSkgOiBcIlwiLmNvbmNhdCh2YWx1ZUxlbmd0aCkuY29uY2F0KGhhc01heExlbmd0aCA/IFwiIC8gXCIuY29uY2F0KG1lcmdlZE1heCkgOiAnJyk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNvdW50Q29uZmlnLnNob3cgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbHN4KFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc2hvdy1jb3VudC1zdWZmaXhcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zaG93LWNvdW50LWhhcy1zdWZmaXhcIiksICEhc3VmZml4KSwgY2xhc3NOYW1lcyA9PT0gbnVsbCB8fCBjbGFzc05hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc05hbWVzLmNvdW50KSxcbiAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoe30sIHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5jb3VudClcbiAgICAgIH0sIGRhdGFDb3VudCksIHN1ZmZpeCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VJbnB1dCwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCBvdXRPZlJhbmdlQ2xzKSxcbiAgICBoYW5kbGVSZXNldDogaGFuZGxlUmVzZXQsXG4gICAgdmFsdWU6IGZvcm1hdFZhbHVlLFxuICAgIGZvY3VzZWQ6IGZvY3VzZWQsXG4gICAgdHJpZ2dlckZvY3VzOiBmb2N1cyxcbiAgICBzdWZmaXg6IGdldFN1ZmZpeCgpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXMsXG4gICAgc3R5bGVzOiBzdHlsZXNcbiAgfSksIGdldElucHV0RWxlbWVudCgpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wic2hvd1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQ3V0IGB2YWx1ZWAgYnkgdGhlIGBjb3VudC5tYXhgIHByb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbkNvdW50UmFuZ2UodmFsdWUsIGNvdW50Q29uZmlnKSB7XG4gIGlmICghY291bnRDb25maWcubWF4KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGNvdW50ID0gY291bnRDb25maWcuc3RyYXRlZ3kodmFsdWUpO1xuICByZXR1cm4gY291bnQgPD0gY291bnRDb25maWcubWF4O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ291bnQoY291bnQsIHNob3dDb3VudCkge1xuICByZXR1cm4gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lcmdlZENvbmZpZyA9IHt9O1xuICAgIGlmIChzaG93Q291bnQpIHtcbiAgICAgIG1lcmdlZENvbmZpZy5zaG93ID0gX3R5cGVvZihzaG93Q291bnQpID09PSAnb2JqZWN0JyAmJiBzaG93Q291bnQuZm9ybWF0dGVyID8gc2hvd0NvdW50LmZvcm1hdHRlciA6ICEhc2hvd0NvdW50O1xuICAgIH1cbiAgICBtZXJnZWRDb25maWcgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZENvbmZpZyksIGNvdW50KTtcbiAgICB2YXIgX3JlZiA9IG1lcmdlZENvbmZpZyxcbiAgICAgIHNob3cgPSBfcmVmLnNob3csXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICBzaG93OiAhIXNob3csXG4gICAgICBzaG93Rm9ybWF0dGVyOiB0eXBlb2Ygc2hvdyA9PT0gJ2Z1bmN0aW9uJyA/IHNob3cgOiB1bmRlZmluZWQsXG4gICAgICBzdHJhdGVneTogcmVzdC5zdHJhdGVneSB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW2NvdW50LCBzaG93Q291bnRdKTtcbn0iLCJpbXBvcnQgQmFzZUlucHV0IGZyb20gXCIuL0Jhc2VJbnB1dFwiO1xuaW1wb3J0IElucHV0IGZyb20gXCIuL0lucHV0XCI7XG5leHBvcnQgeyBCYXNlSW5wdXQgfTtcbmV4cG9ydCBkZWZhdWx0IElucHV0OyIsImV4cG9ydCBmdW5jdGlvbiBoYXNBZGRvbihwcm9wcykge1xuICByZXR1cm4gISEocHJvcHMuYWRkb25CZWZvcmUgfHwgcHJvcHMuYWRkb25BZnRlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzUHJlZml4U3VmZml4KHByb3BzKSB7XG4gIHJldHVybiAhIShwcm9wcy5wcmVmaXggfHwgcHJvcHMuc3VmZml4IHx8IHByb3BzLmFsbG93Q2xlYXIpO1xufVxuXG4vLyBUT0RPOiBJdCdzIGJldHRlciB0byB1c2UgYFByb3h5YCByZXBsYWNlIHRoZSBgZWxlbWVudC52YWx1ZWAuIEJ1dCB3ZSBzdGlsbCBuZWVkIHN1cHBvcnQgSUUxMS5cbmZ1bmN0aW9uIGNsb25lRXZlbnQoZXZlbnQsIHRhcmdldCwgdmFsdWUpIHtcbiAgLy8gQSBidWcgcmVwb3J0IGZpbGVkIG9uIFdlYktpdCdzIEJ1Z3ppbGxhIHRyYWNrZXIsIGRhdGluZyBiYWNrIHRvIDIwMDksIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGlzc3VlIG9mIGNsb25lTm9kZSgpIG5vdCBjb3B5aW5nIGZpbGVzIG9mIDxpbnB1dCB0eXBlPVwiZmlsZVwiPiBlbGVtZW50cy5cbiAgLy8gQXMgb2YgdGhlIGxhc3QgdXBkYXRlLCB0aGlzIGJ1ZyB3YXMgc3RpbGwgbWFya2VkIGFzIFwiTkVXLFwiIGluZGljYXRpbmcgdGhhdCBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIHJlc29sdmVkIHlldOKAi+KAiy5cbiAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTIzXG4gIHZhciBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0LmNsb25lTm9kZSh0cnVlKTtcblxuICAvLyBjbGljayBjbGVhciBpY29uXG4gIHZhciBuZXdFdmVudCA9IE9iamVjdC5jcmVhdGUoZXZlbnQsIHtcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfSxcbiAgICBjdXJyZW50VGFyZ2V0OiB7XG4gICAgICB2YWx1ZTogY3VycmVudFRhcmdldFxuICAgIH1cbiAgfSk7XG5cbiAgLy8gRmlsbCBkYXRhXG4gIGN1cnJlbnRUYXJnZXQudmFsdWUgPSB2YWx1ZTtcblxuICAvLyBGaWxsIHNlbGVjdGlvbi4gU29tZSB0eXBlIGxpa2UgYGVtYWlsYCBub3Qgc3VwcG9ydCBzZWxlY3Rpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDc4MzNcbiAgaWYgKHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPT09ICdudW1iZXInICYmIHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uRW5kID09PSAnbnVtYmVyJykge1xuICAgIGN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uU3RhcnQgPSB0YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPSB0YXJnZXQuc2VsZWN0aW9uRW5kO1xuICB9XG4gIGN1cnJlbnRUYXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIG5ld0V2ZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPbkNoYW5nZSh0YXJnZXQsIGUsIG9uQ2hhbmdlLCB0YXJnZXRWYWx1ZSkge1xuICBpZiAoIW9uQ2hhbmdlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBldmVudCA9IGU7XG4gIGlmIChlLnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAvLyBDbG9uZSBhIG5ldyB0YXJnZXQgZm9yIGV2ZW50LlxuICAgIC8vIEF2b2lkIHRoZSBmb2xsb3dpbmcgdXNhZ2UsIHRoZSBzZXRRdWVyeSBtZXRob2QgZ2V0cyB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgLy9cbiAgICAvLyBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgICAvLyA8SW5wdXRcbiAgICAvLyAgIGFsbG93Q2xlYXJcbiAgICAvLyAgIHZhbHVlPXtxdWVyeX1cbiAgICAvLyAgIG9uQ2hhbmdlPXsoZSk9PiB7XG4gICAgLy8gICAgIHNldFF1ZXJ5KChwcmV2U3RhdHVzKSA9PiBlLnRhcmdldC52YWx1ZSk7XG4gICAgLy8gICB9fVxuICAgIC8vIC8+XG5cbiAgICBldmVudCA9IGNsb25lRXZlbnQoZSwgdGFyZ2V0LCAnJyk7XG4gICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRyaWdnZXIgYnkgY29tcG9zaXRpb24gZXZlbnQsIHRoaXMgbWVhbnMgd2UgbmVlZCBmb3JjZSBjaGFuZ2UgdGhlIGlucHV0IHZhbHVlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ1NzM3XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ2NTk4XG4gIGlmICh0YXJnZXQudHlwZSAhPT0gJ2ZpbGUnICYmIHRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBldmVudCA9IGNsb25lRXZlbnQoZSwgdGFyZ2V0LCB0YXJnZXRWYWx1ZSk7XG4gICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuICBvbkNoYW5nZShldmVudCk7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckZvY3VzKGVsZW1lbnQsIG9wdGlvbikge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgZWxlbWVudC5mb2N1cyhvcHRpb24pO1xuXG4gIC8vIFNlbGVjdGlvbiBjb250ZW50XG4gIHZhciBfcmVmID0gb3B0aW9uIHx8IHt9LFxuICAgIGN1cnNvciA9IF9yZWYuY3Vyc29yO1xuICBpZiAoY3Vyc29yKSB7XG4gICAgdmFyIGxlbiA9IGVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgIHN3aXRjaCAoY3Vyc29yKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBsZW4pO1xuICAgIH1cbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNBZGRvbiA9IGhhc0FkZG9uO1xuZXhwb3J0cy5oYXNQcmVmaXhTdWZmaXggPSBoYXNQcmVmaXhTdWZmaXg7XG5leHBvcnRzLnJlc29sdmVPbkNoYW5nZSA9IHJlc29sdmVPbkNoYW5nZTtcbmV4cG9ydHMudHJpZ2dlckZvY3VzID0gdHJpZ2dlckZvY3VzO1xuZnVuY3Rpb24gaGFzQWRkb24ocHJvcHMpIHtcbiAgcmV0dXJuICEhKHByb3BzLmFkZG9uQmVmb3JlIHx8IHByb3BzLmFkZG9uQWZ0ZXIpO1xufVxuZnVuY3Rpb24gaGFzUHJlZml4U3VmZml4KHByb3BzKSB7XG4gIHJldHVybiAhIShwcm9wcy5wcmVmaXggfHwgcHJvcHMuc3VmZml4IHx8IHByb3BzLmFsbG93Q2xlYXIpO1xufVxuXG4vLyBUT0RPOiBJdCdzIGJldHRlciB0byB1c2UgYFByb3h5YCByZXBsYWNlIHRoZSBgZWxlbWVudC52YWx1ZWAuIEJ1dCB3ZSBzdGlsbCBuZWVkIHN1cHBvcnQgSUUxMS5cbmZ1bmN0aW9uIGNsb25lRXZlbnQoZXZlbnQsIHRhcmdldCwgdmFsdWUpIHtcbiAgLy8gQSBidWcgcmVwb3J0IGZpbGVkIG9uIFdlYktpdCdzIEJ1Z3ppbGxhIHRyYWNrZXIsIGRhdGluZyBiYWNrIHRvIDIwMDksIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIGlzc3VlIG9mIGNsb25lTm9kZSgpIG5vdCBjb3B5aW5nIGZpbGVzIG9mIDxpbnB1dCB0eXBlPVwiZmlsZVwiPiBlbGVtZW50cy5cbiAgLy8gQXMgb2YgdGhlIGxhc3QgdXBkYXRlLCB0aGlzIGJ1ZyB3YXMgc3RpbGwgbWFya2VkIGFzIFwiTkVXLFwiIGluZGljYXRpbmcgdGhhdCBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIHJlc29sdmVkIHlldOKAi+KAiy5cbiAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTIzXG4gIHZhciBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0LmNsb25lTm9kZSh0cnVlKTtcblxuICAvLyBjbGljayBjbGVhciBpY29uXG4gIHZhciBuZXdFdmVudCA9IE9iamVjdC5jcmVhdGUoZXZlbnQsIHtcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHZhbHVlOiBjdXJyZW50VGFyZ2V0XG4gICAgfSxcbiAgICBjdXJyZW50VGFyZ2V0OiB7XG4gICAgICB2YWx1ZTogY3VycmVudFRhcmdldFxuICAgIH1cbiAgfSk7XG5cbiAgLy8gRmlsbCBkYXRhXG4gIGN1cnJlbnRUYXJnZXQudmFsdWUgPSB2YWx1ZTtcblxuICAvLyBGaWxsIHNlbGVjdGlvbi4gU29tZSB0eXBlIGxpa2UgYGVtYWlsYCBub3Qgc3VwcG9ydCBzZWxlY3Rpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDc4MzNcbiAgaWYgKHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPT09ICdudW1iZXInICYmIHR5cGVvZiB0YXJnZXQuc2VsZWN0aW9uRW5kID09PSAnbnVtYmVyJykge1xuICAgIGN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uU3RhcnQgPSB0YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPSB0YXJnZXQuc2VsZWN0aW9uRW5kO1xuICB9XG4gIGN1cnJlbnRUYXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIG5ld0V2ZW50O1xufVxuZnVuY3Rpb24gcmVzb2x2ZU9uQ2hhbmdlKHRhcmdldCwgZSwgb25DaGFuZ2UsIHRhcmdldFZhbHVlKSB7XG4gIGlmICghb25DaGFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGV2ZW50ID0gZTtcbiAgaWYgKGUudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgIC8vIENsb25lIGEgbmV3IHRhcmdldCBmb3IgZXZlbnQuXG4gICAgLy8gQXZvaWQgdGhlIGZvbGxvd2luZyB1c2FnZSwgdGhlIHNldFF1ZXJ5IG1ldGhvZCBnZXRzIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAvL1xuICAgIC8vIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAgIC8vIDxJbnB1dFxuICAgIC8vICAgYWxsb3dDbGVhclxuICAgIC8vICAgdmFsdWU9e3F1ZXJ5fVxuICAgIC8vICAgb25DaGFuZ2U9eyhlKT0+IHtcbiAgICAvLyAgICAgc2V0UXVlcnkoKHByZXZTdGF0dXMpID0+IGUudGFyZ2V0LnZhbHVlKTtcbiAgICAvLyAgIH19XG4gICAgLy8gLz5cblxuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsICcnKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHJpZ2dlciBieSBjb21wb3NpdGlvbiBldmVudCwgdGhpcyBtZWFucyB3ZSBuZWVkIGZvcmNlIGNoYW5nZSB0aGUgaW5wdXQgdmFsdWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDU3MzdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDY1OThcbiAgaWYgKHRhcmdldC50eXBlICE9PSAnZmlsZScgJiYgdGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50ID0gY2xvbmVFdmVudChlLCB0YXJnZXQsIHRhcmdldFZhbHVlKTtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG9uQ2hhbmdlKGV2ZW50KTtcbn1cbmZ1bmN0aW9uIHRyaWdnZXJGb2N1cyhlbGVtZW50LCBvcHRpb24pIHtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGVsZW1lbnQuZm9jdXMob3B0aW9uKTtcblxuICAvLyBTZWxlY3Rpb24gY29udGVudFxuICB2YXIgX3JlZiA9IG9wdGlvbiB8fCB7fSxcbiAgICBjdXJzb3IgPSBfcmVmLmN1cnNvcjtcbiAgaWYgKGN1cnNvcikge1xuICAgIHZhciBsZW4gPSBlbGVtZW50LnZhbHVlLmxlbmd0aDtcbiAgICBzd2l0Y2ggKGN1cnNvcikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuLCBsZW4pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbGVuKTtcbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgTWVudSwgeyBNZW51SXRlbSB9IGZyb20gJ3JjLW1lbnUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IE1lbnRpb25zQ29udGV4dCBmcm9tIFwiLi9NZW50aW9uc0NvbnRleHRcIjtcbi8qKlxuICogV2Ugb25seSB1c2UgTWVudSB0byBkaXNwbGF5IHRoZSBjYW5kaWRhdGUuXG4gKiBUaGUgZm9jdXMgaXMgY29udHJvbGxlZCBieSB0ZXh0YXJlYSB0byBtYWtlIGFjY2Vzc2liaWxpdHkgZWFzeS5cbiAqL1xuZnVuY3Rpb24gRHJvcGRvd25NZW51KHByb3BzKSB7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudGlvbnNDb250ZXh0KSxcbiAgICBub3RGb3VuZENvbnRlbnQgPSBfUmVhY3QkdXNlQ29udGV4dC5ub3RGb3VuZENvbnRlbnQsXG4gICAgYWN0aXZlSW5kZXggPSBfUmVhY3QkdXNlQ29udGV4dC5hY3RpdmVJbmRleCxcbiAgICBzZXRBY3RpdmVJbmRleCA9IF9SZWFjdCR1c2VDb250ZXh0LnNldEFjdGl2ZUluZGV4LFxuICAgIHNlbGVjdE9wdGlvbiA9IF9SZWFjdCR1c2VDb250ZXh0LnNlbGVjdE9wdGlvbixcbiAgICBvbkZvY3VzID0gX1JlYWN0JHVzZUNvbnRleHQub25Gb2N1cyxcbiAgICBvbkJsdXIgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkJsdXIsXG4gICAgb25TY3JvbGwgPSBfUmVhY3QkdXNlQ29udGV4dC5vblNjcm9sbDtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBvcHRpb25zID0gcHJvcHMub3B0aW9ucztcbiAgdmFyIGFjdGl2ZU9wdGlvbiA9IG9wdGlvbnNbYWN0aXZlSW5kZXhdIHx8IHt9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudSwge1xuICAgIHByZWZpeENsczogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1tZW51XCIpLFxuICAgIGFjdGl2ZUtleTogYWN0aXZlT3B0aW9uLmtleSxcbiAgICBvblNlbGVjdDogZnVuY3Rpb24gb25TZWxlY3QoX3JlZikge1xuICAgICAgdmFyIGtleSA9IF9yZWYua2V5O1xuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnMuZmluZChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIG9wdGlvbktleSA9IF9yZWYyLmtleTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbktleSA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICBzZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgICB9LFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25TY3JvbGw6IG9uU2Nyb2xsXG4gIH0sIG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24sIGluZGV4KSB7XG4gICAgdmFyIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICBkaXNhYmxlZCA9IG9wdGlvbi5kaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZSA9IG9wdGlvbi5jbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IG9wdGlvbi5zdHlsZSxcbiAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51SXRlbSwge1xuICAgICAga2V5OiBrZXksXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgICAgICBzZXRBY3RpdmVJbmRleChpbmRleCk7XG4gICAgICB9XG4gICAgfSwgbGFiZWwpO1xuICB9KSwgIW9wdGlvbnMubGVuZ3RoICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVJdGVtLCB7XG4gICAgZGlzYWJsZWQ6IHRydWVcbiAgfSwgbm90Rm91bmRDb250ZW50KSk7XG59XG5leHBvcnQgZGVmYXVsdCBEcm9wZG93bk1lbnU7IiwiaW1wb3J0IFRyaWdnZXIgZnJvbSAnQHJjLWNvbXBvbmVudC90cmlnZ2VyJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcGRvd25NZW51IGZyb20gXCIuL0Ryb3Bkb3duTWVudVwiO1xudmFyIEJVSUxUX0lOX1BMQUNFTUVOVFMgPSB7XG4gIGJvdHRvbVJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ2JyJ10sXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9LFxuICBib3R0b21MZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ2JsJ10sXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9LFxuICB0b3BSaWdodDoge1xuICAgIHBvaW50czogWydibCcsICd0ciddLFxuICAgIG9mZnNldDogWzAsIC00XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIHRvcExlZnQ6IHtcbiAgICBwb2ludHM6IFsnYnInLCAndGwnXSxcbiAgICBvZmZzZXQ6IFswLCAtNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9XG59O1xudmFyIEtleXdvcmRUcmlnZ2VyID0gZnVuY3Rpb24gS2V5d29yZFRyaWdnZXIocHJvcHMpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIHZpc2libGUgPSBwcm9wcy52aXNpYmxlLFxuICAgIHRyYW5zaXRpb25OYW1lID0gcHJvcHMudHJhbnNpdGlvbk5hbWUsXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBwcm9wcy5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBkcm9wZG93bkNsYXNzTmFtZSA9IHByb3BzLmRyb3Bkb3duQ2xhc3NOYW1lLFxuICAgIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICBwbGFjZW1lbnQgPSBwcm9wcy5wbGFjZW1lbnQ7XG4gIHZhciBkcm9wZG93blByZWZpeCA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZHJvcGRvd25cIik7XG4gIHZhciBkcm9wZG93bkVsZW1lbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcm9wZG93bk1lbnUsIHtcbiAgICBwcmVmaXhDbHM6IGRyb3Bkb3duUHJlZml4LFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfSk7XG4gIHZhciBkcm9wZG93blBsYWNlbWVudCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3B1cFBsYWNlbWVudDtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgcG9wdXBQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPT09ICd0b3AnID8gJ3RvcExlZnQnIDogJ2JvdHRvbUxlZnQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3B1cFBsYWNlbWVudCA9IHBsYWNlbWVudCA9PT0gJ3RvcCcgPyAndG9wUmlnaHQnIDogJ2JvdHRvbVJpZ2h0JztcbiAgICB9XG4gICAgcmV0dXJuIHBvcHVwUGxhY2VtZW50O1xuICB9LCBbZGlyZWN0aW9uLCBwbGFjZW1lbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyaWdnZXIsIHtcbiAgICBwcmVmaXhDbHM6IGRyb3Bkb3duUHJlZml4LFxuICAgIHBvcHVwVmlzaWJsZTogdmlzaWJsZSxcbiAgICBwb3B1cDogZHJvcGRvd25FbGVtZW50LFxuICAgIHBvcHVwUGxhY2VtZW50OiBkcm9wZG93blBsYWNlbWVudCxcbiAgICBwb3B1cFRyYW5zaXRpb25OYW1lOiB0cmFuc2l0aW9uTmFtZSxcbiAgICBidWlsdGluUGxhY2VtZW50czogQlVJTFRfSU5fUExBQ0VNRU5UUyxcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogZ2V0UG9wdXBDb250YWluZXIsXG4gICAgcG9wdXBDbGFzc05hbWU6IGRyb3Bkb3duQ2xhc3NOYW1lXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5leHBvcnQgZGVmYXVsdCBLZXl3b3JkVHJpZ2dlcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wicHJlZml4Q2xzXCIsIFwiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJwcmVmaXhcIiwgXCJzcGxpdFwiLCBcIm5vdEZvdW5kQ29udGVudFwiLCBcInZhbHVlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiY2hpbGRyZW5cIiwgXCJvcHRpb25zXCIsIFwib3BlblwiLCBcImFsbG93Q2xlYXJcIiwgXCJzaWxlbnRcIiwgXCJ2YWxpZGF0ZVNlYXJjaFwiLCBcImZpbHRlck9wdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uUHJlc3NFbnRlclwiLCBcIm9uU2VhcmNoXCIsIFwib25TZWxlY3RcIiwgXCJvbkZvY3VzXCIsIFwib25CbHVyXCIsIFwidHJhbnNpdGlvbk5hbWVcIiwgXCJwbGFjZW1lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJnZXRQb3B1cENvbnRhaW5lclwiLCBcImRyb3Bkb3duQ2xhc3NOYW1lXCIsIFwicm93c1wiLCBcInZpc2libGVcIiwgXCJvblBvcHVwU2Nyb2xsXCJdLFxuICBfZXhjbHVkZWQyID0gW1wic3VmZml4XCIsIFwicHJlZml4Q2xzXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwidmFsdWVcIiwgXCJhbGxvd0NsZWFyXCIsIFwib25DaGFuZ2VcIiwgXCJjbGFzc05hbWVzXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJvbkNsZWFyXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBCYXNlSW5wdXQgfSBmcm9tICdyYy1pbnB1dCc7XG5pbXBvcnQgVGV4dEFyZWEgZnJvbSAncmMtdGV4dGFyZWEnO1xuaW1wb3J0IHRvQXJyYXkgZnJvbSBcInJjLXV0aWwvZXMvQ2hpbGRyZW4vdG9BcnJheVwiO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG5pbXBvcnQgS2V5Q29kZSBmcm9tIFwicmMtdXRpbC9lcy9LZXlDb2RlXCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlRWZmZWN0LCB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUVmZmVjdFN0YXRlIGZyb20gXCIuL2hvb2tzL3VzZUVmZmVjdFN0YXRlXCI7XG5pbXBvcnQgS2V5d29yZFRyaWdnZXIgZnJvbSBcIi4vS2V5d29yZFRyaWdnZXJcIjtcbmltcG9ydCBNZW50aW9uc0NvbnRleHQgZnJvbSBcIi4vTWVudGlvbnNDb250ZXh0XCI7XG5pbXBvcnQgT3B0aW9uIGZyb20gXCIuL09wdGlvblwiO1xuaW1wb3J0IHsgZmlsdGVyT3B0aW9uIGFzIGRlZmF1bHRGaWx0ZXJPcHRpb24sIHZhbGlkYXRlU2VhcmNoIGFzIGRlZmF1bHRWYWxpZGF0ZVNlYXJjaCwgZ2V0QmVmb3JlU2VsZWN0aW9uVGV4dCwgZ2V0TGFzdE1lYXN1cmVJbmRleCwgcmVwbGFjZVdpdGhNZWFzdXJlLCBzZXRJbnB1dFNlbGVjdGlvbiB9IGZyb20gXCIuL3V0aWxcIjtcbnZhciBJbnRlcm5hbE1lbnRpb25zID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBfcHJvcHMkcHJlZml4ID0gcHJvcHMucHJlZml4LFxuICAgIHByZWZpeCA9IF9wcm9wcyRwcmVmaXggPT09IHZvaWQgMCA/ICdAJyA6IF9wcm9wcyRwcmVmaXgsXG4gICAgX3Byb3BzJHNwbGl0ID0gcHJvcHMuc3BsaXQsXG4gICAgc3BsaXQgPSBfcHJvcHMkc3BsaXQgPT09IHZvaWQgMCA/ICcgJyA6IF9wcm9wcyRzcGxpdCxcbiAgICBfcHJvcHMkbm90Rm91bmRDb250ZW4gPSBwcm9wcy5ub3RGb3VuZENvbnRlbnQsXG4gICAgbm90Rm91bmRDb250ZW50ID0gX3Byb3BzJG5vdEZvdW5kQ29udGVuID09PSB2b2lkIDAgPyAnTm90IEZvdW5kJyA6IF9wcm9wcyRub3RGb3VuZENvbnRlbixcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgIG9wZW4gPSBwcm9wcy5vcGVuLFxuICAgIGFsbG93Q2xlYXIgPSBwcm9wcy5hbGxvd0NsZWFyLFxuICAgIHNpbGVudCA9IHByb3BzLnNpbGVudCxcbiAgICBfcHJvcHMkdmFsaWRhdGVTZWFyY2ggPSBwcm9wcy52YWxpZGF0ZVNlYXJjaCxcbiAgICB2YWxpZGF0ZVNlYXJjaCA9IF9wcm9wcyR2YWxpZGF0ZVNlYXJjaCA9PT0gdm9pZCAwID8gZGVmYXVsdFZhbGlkYXRlU2VhcmNoIDogX3Byb3BzJHZhbGlkYXRlU2VhcmNoLFxuICAgIF9wcm9wcyRmaWx0ZXJPcHRpb24gPSBwcm9wcy5maWx0ZXJPcHRpb24sXG4gICAgZmlsdGVyT3B0aW9uID0gX3Byb3BzJGZpbHRlck9wdGlvbiA9PT0gdm9pZCAwID8gZGVmYXVsdEZpbHRlck9wdGlvbiA6IF9wcm9wcyRmaWx0ZXJPcHRpb24sXG4gICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbktleURvd24gPSBwcm9wcy5vbktleURvd24sXG4gICAgb25LZXlVcCA9IHByb3BzLm9uS2V5VXAsXG4gICAgb25QcmVzc0VudGVyID0gcHJvcHMub25QcmVzc0VudGVyLFxuICAgIG9uU2VhcmNoID0gcHJvcHMub25TZWFyY2gsXG4gICAgb25TZWxlY3QgPSBwcm9wcy5vblNlbGVjdCxcbiAgICBvbkZvY3VzID0gcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXIgPSBwcm9wcy5vbkJsdXIsXG4gICAgdHJhbnNpdGlvbk5hbWUgPSBwcm9wcy50cmFuc2l0aW9uTmFtZSxcbiAgICBwbGFjZW1lbnQgPSBwcm9wcy5wbGFjZW1lbnQsXG4gICAgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgIGdldFBvcHVwQ29udGFpbmVyID0gcHJvcHMuZ2V0UG9wdXBDb250YWluZXIsXG4gICAgZHJvcGRvd25DbGFzc05hbWUgPSBwcm9wcy5kcm9wZG93bkNsYXNzTmFtZSxcbiAgICBfcHJvcHMkcm93cyA9IHByb3BzLnJvd3MsXG4gICAgcm93cyA9IF9wcm9wcyRyb3dzID09PSB2b2lkIDAgPyAxIDogX3Byb3BzJHJvd3MsXG4gICAgdmlzaWJsZSA9IHByb3BzLnZpc2libGUsXG4gICAgb25Qb3B1cFNjcm9sbCA9IHByb3BzLm9uUG9wdXBTY3JvbGwsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgbWVyZ2VkUHJlZml4ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocHJlZml4KSA/IHByZWZpeCA6IFtwcmVmaXhdO1xuICB9LCBbcHJlZml4XSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGNvbnRhaW5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHRleHRhcmVhUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgbWVhc3VyZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGdldFRleHRBcmVhID0gZnVuY3Rpb24gZ2V0VGV4dEFyZWEoKSB7XG4gICAgdmFyIF90ZXh0YXJlYVJlZiRjdXJyZW50O1xuICAgIHJldHVybiAoX3RleHRhcmVhUmVmJGN1cnJlbnQgPSB0ZXh0YXJlYVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudCA9PT0gdm9pZCAwIHx8IChfdGV4dGFyZWFSZWYkY3VycmVudCA9IF90ZXh0YXJlYVJlZiRjdXJyZW50LnJlc2l6YWJsZVRleHRBcmVhKSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQudGV4dEFyZWE7XG4gIH07XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90ZXh0YXJlYVJlZiRjdXJyZW50NDtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgICB2YXIgX3RleHRhcmVhUmVmJGN1cnJlbnQyO1xuICAgICAgICByZXR1cm4gKF90ZXh0YXJlYVJlZiRjdXJyZW50MiA9IHRleHRhcmVhUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90ZXh0YXJlYVJlZiRjdXJyZW50MiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RleHRhcmVhUmVmJGN1cnJlbnQyLmZvY3VzKCk7XG4gICAgICB9LFxuICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgICAgdmFyIF90ZXh0YXJlYVJlZiRjdXJyZW50MztcbiAgICAgICAgcmV0dXJuIChfdGV4dGFyZWFSZWYkY3VycmVudDMgPSB0ZXh0YXJlYVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90ZXh0YXJlYVJlZiRjdXJyZW50My5ibHVyKCk7XG4gICAgICB9LFxuICAgICAgdGV4dGFyZWE6IChfdGV4dGFyZWFSZWYkY3VycmVudDQgPSB0ZXh0YXJlYVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudDQgPT09IHZvaWQgMCB8fCAoX3RleHRhcmVhUmVmJGN1cnJlbnQ0ID0gX3RleHRhcmVhUmVmJGN1cnJlbnQ0LnJlc2l6YWJsZVRleHRBcmVhKSA9PT0gbnVsbCB8fCBfdGV4dGFyZWFSZWYkY3VycmVudDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90ZXh0YXJlYVJlZiRjdXJyZW50NC50ZXh0QXJlYSxcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IGNvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN0YXRlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBtZWFzdXJpbmcgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldE1lYXN1cmluZyA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoJycpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBtZWFzdXJlVGV4dCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0TWVhc3VyZVRleHQgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKCcnKSxcbiAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgbWVhc3VyZVByZWZpeCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0TWVhc3VyZVByZWZpeCA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBfdXNlU3RhdGU3ID0gdXNlU3RhdGUoMCksXG4gICAgX3VzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTcsIDIpLFxuICAgIG1lYXN1cmVMb2NhdGlvbiA9IF91c2VTdGF0ZThbMF0sXG4gICAgc2V0TWVhc3VyZUxvY2F0aW9uID0gX3VzZVN0YXRlOFsxXTtcbiAgdmFyIF91c2VTdGF0ZTkgPSB1c2VTdGF0ZSgwKSxcbiAgICBfdXNlU3RhdGUxMCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTksIDIpLFxuICAgIGFjdGl2ZUluZGV4ID0gX3VzZVN0YXRlMTBbMF0sXG4gICAgc2V0QWN0aXZlSW5kZXggPSBfdXNlU3RhdGUxMFsxXTtcbiAgdmFyIF91c2VTdGF0ZTExID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgIF91c2VTdGF0ZTEyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMTEsIDIpLFxuICAgIGlzRm9jdXMgPSBfdXNlU3RhdGUxMlswXSxcbiAgICBzZXRJc0ZvY3VzID0gX3VzZVN0YXRlMTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFZhbHVlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKCcnLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIG1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRNZXJnZWRWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBPcGVuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW5jIG1lYXN1cmUgZGl2IHRvcCB3aXRoIHRleHRhcmVhIGZvciByYy10cmlnZ2VyIHVzYWdlXG4gICAgaWYgKG1lYXN1cmluZyAmJiBtZWFzdXJlUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lYXN1cmVSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBnZXRUZXh0QXJlYSgpLnNjcm9sbFRvcDtcbiAgICB9XG4gIH0sIFttZWFzdXJpbmddKTtcbiAgdmFyIF9SZWFjdCR1c2VNZW1vID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm5pbmcoZmFsc2UsICdgb3BlbmAgb2YgTWVudGlvbnMgaXMgb25seSB1c2VkIGZvciBkZWJ1ZyB1c2FnZS4gRG8gbm90IHVzZSBpbiB5b3UgcHJvZHVjdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lcmdlZFByZWZpeC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIHZhciBjdXJQcmVmaXggPSBtZXJnZWRQcmVmaXhbaV07XG4gICAgICAgICAgdmFyIGluZGV4ID0gbWVyZ2VkVmFsdWUubGFzdEluZGV4T2YoY3VyUHJlZml4KTtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCAnJywgY3VyUHJlZml4LCBpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW21lYXN1cmluZywgbWVhc3VyZVRleHQsIG1lYXN1cmVQcmVmaXgsIG1lYXN1cmVMb2NhdGlvbl07XG4gICAgfSwgW29wZW4sIG1lYXN1cmluZywgbWVyZ2VkUHJlZml4LCBtZXJnZWRWYWx1ZSwgbWVhc3VyZVRleHQsIG1lYXN1cmVQcmVmaXgsIG1lYXN1cmVMb2NhdGlvbl0pLFxuICAgIF9SZWFjdCR1c2VNZW1vMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vLCA0KSxcbiAgICBtZXJnZWRNZWFzdXJpbmcgPSBfUmVhY3QkdXNlTWVtbzJbMF0sXG4gICAgbWVyZ2VkTWVhc3VyZVRleHQgPSBfUmVhY3QkdXNlTWVtbzJbMV0sXG4gICAgbWVyZ2VkTWVhc3VyZVByZWZpeCA9IF9SZWFjdCR1c2VNZW1vMlsyXSxcbiAgICBtZXJnZWRNZWFzdXJlTG9jYXRpb24gPSBfUmVhY3QkdXNlTWVtbzJbM107XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE9wdGlvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldE9wdGlvbnMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAodGFyZ2V0TWVhc3VyZVRleHQpIHtcbiAgICB2YXIgbGlzdDtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGxpc3QgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgX2l0ZW0ka2V5O1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpdGVtKSwge30sIHtcbiAgICAgICAgICBrZXk6IChfaXRlbSRrZXkgPSBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW0ua2V5KSAhPT0gbnVsbCAmJiBfaXRlbSRrZXkgIT09IHZvaWQgMCA/IF9pdGVtJGtleSA6IGl0ZW0udmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdCA9IHRvQXJyYXkoY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgb3B0aW9uUHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgICAgIGtleSA9IF9yZWYua2V5O1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25Qcm9wcyksIHt9LCB7XG4gICAgICAgICAgbGFiZWw6IG9wdGlvblByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGtleToga2V5IHx8IG9wdGlvblByb3BzLnZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0LmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAvKiogUmV0dXJuIGFsbCByZXN1bHQgaWYgYGZpbHRlck9wdGlvbmAgaXMgZmFsc2UuICovXG4gICAgICBpZiAoZmlsdGVyT3B0aW9uID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb24odGFyZ2V0TWVhc3VyZVRleHQsIG9wdGlvbik7XG4gICAgfSk7XG4gIH0sIFtjaGlsZHJlbiwgb3B0aW9ucywgZmlsdGVyT3B0aW9uXSk7XG4gIHZhciBtZXJnZWRPcHRpb25zID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE9wdGlvbnMobWVyZ2VkTWVhc3VyZVRleHQpO1xuICB9LCBbZ2V0T3B0aW9ucywgbWVyZ2VkTWVhc3VyZVRleHRdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBNZWFzdXJlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNYXJrIHRoYXQgd2Ugd2lsbCByZXNldCBpbnB1dCBzZWxlY3Rpb24gdG8gdGFyZ2V0IHBvc2l0aW9uIHdoZW4gdXNlciBzZWxlY3Qgb3B0aW9uXG4gIHZhciBvblNlbGVjdGlvbkVmZmVjdCA9IHVzZUVmZmVjdFN0YXRlKCk7XG4gIHZhciBzdGFydE1lYXN1cmUgPSBmdW5jdGlvbiBzdGFydE1lYXN1cmUobmV4dE1lYXN1cmVUZXh0LCBuZXh0TWVhc3VyZVByZWZpeCwgbmV4dE1lYXN1cmVMb2NhdGlvbikge1xuICAgIHNldE1lYXN1cmluZyh0cnVlKTtcbiAgICBzZXRNZWFzdXJlVGV4dChuZXh0TWVhc3VyZVRleHQpO1xuICAgIHNldE1lYXN1cmVQcmVmaXgobmV4dE1lYXN1cmVQcmVmaXgpO1xuICAgIHNldE1lYXN1cmVMb2NhdGlvbihuZXh0TWVhc3VyZUxvY2F0aW9uKTtcbiAgICBzZXRBY3RpdmVJbmRleCgwKTtcbiAgfTtcbiAgdmFyIHN0b3BNZWFzdXJlID0gZnVuY3Rpb24gc3RvcE1lYXN1cmUoY2FsbGJhY2spIHtcbiAgICBzZXRNZWFzdXJpbmcoZmFsc2UpO1xuICAgIHNldE1lYXN1cmVMb2NhdGlvbigwKTtcbiAgICBzZXRNZWFzdXJlVGV4dCgnJyk7XG4gICAgb25TZWxlY3Rpb25FZmZlY3QoY2FsbGJhY2spO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDaGFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciB0cmlnZ2VyQ2hhbmdlID0gZnVuY3Rpb24gdHJpZ2dlckNoYW5nZShuZXh0VmFsdWUpIHtcbiAgICBzZXRNZXJnZWRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgfHwgb25DaGFuZ2UobmV4dFZhbHVlKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxDaGFuZ2UgPSBmdW5jdGlvbiBvbkludGVybmFsQ2hhbmdlKF9yZWYyKSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IF9yZWYyLnRhcmdldC52YWx1ZTtcbiAgICB0cmlnZ2VyQ2hhbmdlKG5leHRWYWx1ZSk7XG4gIH07XG4gIHZhciBzZWxlY3RPcHRpb24gPSBmdW5jdGlvbiBzZWxlY3RPcHRpb24ob3B0aW9uKSB7XG4gICAgdmFyIF9nZXRUZXh0QXJlYTtcbiAgICB2YXIgX29wdGlvbiR2YWx1ZSA9IG9wdGlvbi52YWx1ZSxcbiAgICAgIG1lbnRpb25WYWx1ZSA9IF9vcHRpb24kdmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX29wdGlvbiR2YWx1ZTtcbiAgICB2YXIgX3JlcGxhY2VXaXRoTWVhc3VyZSA9IHJlcGxhY2VXaXRoTWVhc3VyZShtZXJnZWRWYWx1ZSwge1xuICAgICAgICBtZWFzdXJlTG9jYXRpb246IG1lcmdlZE1lYXN1cmVMb2NhdGlvbixcbiAgICAgICAgdGFyZ2V0VGV4dDogbWVudGlvblZhbHVlLFxuICAgICAgICBwcmVmaXg6IG1lcmdlZE1lYXN1cmVQcmVmaXgsXG4gICAgICAgIHNlbGVjdGlvblN0YXJ0OiAoX2dldFRleHRBcmVhID0gZ2V0VGV4dEFyZWEoKSkgPT09IG51bGwgfHwgX2dldFRleHRBcmVhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ2V0VGV4dEFyZWEuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIHNwbGl0OiBzcGxpdFxuICAgICAgfSksXG4gICAgICB0ZXh0ID0gX3JlcGxhY2VXaXRoTWVhc3VyZS50ZXh0LFxuICAgICAgc2VsZWN0aW9uTG9jYXRpb24gPSBfcmVwbGFjZVdpdGhNZWFzdXJlLnNlbGVjdGlvbkxvY2F0aW9uO1xuICAgIHRyaWdnZXJDaGFuZ2UodGV4dCk7XG4gICAgc3RvcE1lYXN1cmUoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2UgbmVlZCByZXN0b3JlIHRoZSBzZWxlY3Rpb24gcG9zaXRpb25cbiAgICAgIHNldElucHV0U2VsZWN0aW9uKGdldFRleHRBcmVhKCksIHNlbGVjdGlvbkxvY2F0aW9uKTtcbiAgICB9KTtcbiAgICBvblNlbGVjdCA9PT0gbnVsbCB8fCBvblNlbGVjdCA9PT0gdm9pZCAwIHx8IG9uU2VsZWN0KG9wdGlvbiwgbWVyZ2VkTWVhc3VyZVByZWZpeCk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gS2V5RXZlbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ2hlY2sgaWYgaGl0IHRoZSBtZWFzdXJlIGtleXdvcmRcbiAgdmFyIG9uSW50ZXJuYWxLZXlEb3duID0gZnVuY3Rpb24gb25JbnRlcm5hbEtleURvd24oZXZlbnQpIHtcbiAgICB2YXIgd2hpY2ggPSBldmVudC53aGljaDtcbiAgICBvbktleURvd24gPT09IG51bGwgfHwgb25LZXlEb3duID09PSB2b2lkIDAgfHwgb25LZXlEb3duKGV2ZW50KTtcblxuICAgIC8vIFNraXAgaWYgbm90IG1lYXN1cmluZ1xuICAgIGlmICghbWVyZ2VkTWVhc3VyaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh3aGljaCA9PT0gS2V5Q29kZS5VUCB8fCB3aGljaCA9PT0gS2V5Q29kZS5ET1dOKSB7XG4gICAgICAvLyBDb250cm9sIGFycm93IGZ1bmN0aW9uXG4gICAgICB2YXIgb3B0aW9uTGVuID0gbWVyZ2VkT3B0aW9ucy5sZW5ndGg7XG4gICAgICB2YXIgb2Zmc2V0ID0gd2hpY2ggPT09IEtleUNvZGUuVVAgPyAtMSA6IDE7XG4gICAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSAoYWN0aXZlSW5kZXggKyBvZmZzZXQgKyBvcHRpb25MZW4pICUgb3B0aW9uTGVuO1xuICAgICAgc2V0QWN0aXZlSW5kZXgobmV3QWN0aXZlSW5kZXgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2UgaWYgKHdoaWNoID09PSBLZXlDb2RlLkVTQykge1xuICAgICAgc3RvcE1lYXN1cmUoKTtcbiAgICB9IGVsc2UgaWYgKHdoaWNoID09PSBLZXlDb2RlLkVOVEVSKSB7XG4gICAgICAvLyBNZWFzdXJlIGhpdFxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIGxvYWRpbmcgc2tpcFxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW1lcmdlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHN0b3BNZWFzdXJlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBfb3B0aW9uID0gbWVyZ2VkT3B0aW9uc1thY3RpdmVJbmRleF07XG4gICAgICBzZWxlY3RPcHRpb24oX29wdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBXaGVuIHRvIHN0YXJ0IG1lYXN1cmU6XG4gICAqIDEuIFdoZW4gdXNlciBwcmVzcyBgcHJlZml4YFxuICAgKiAyLiBXaGVuIG1lYXN1cmVUZXh0ICE9PSBwcmV2TWVhc3VyZVRleHRcbiAgICogIC0gSWYgbWVhc3VyZSBoaXRcbiAgICogIC0gSWYgbWVhc3VyaW5nXG4gICAqXG4gICAqIFdoZW4gdG8gc3RvcCBtZWFzdXJlOlxuICAgKiAxLiBTZWxlY3Rpb24gaXMgb3V0IG9mIHJhbmdlXG4gICAqIDIuIENvbnRhaW5zIGBzcGFjZWBcbiAgICogMy4gRVNDIG9yIHNlbGVjdCBvbmVcbiAgICovXG4gIHZhciBvbkludGVybmFsS2V5VXAgPSBmdW5jdGlvbiBvbkludGVybmFsS2V5VXAoZXZlbnQpIHtcbiAgICB2YXIga2V5ID0gZXZlbnQua2V5LFxuICAgICAgd2hpY2ggPSBldmVudC53aGljaDtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciBzZWxlY3Rpb25TdGFydFRleHQgPSBnZXRCZWZvcmVTZWxlY3Rpb25UZXh0KHRhcmdldCk7XG4gICAgdmFyIF9nZXRMYXN0TWVhc3VyZUluZGV4ID0gZ2V0TGFzdE1lYXN1cmVJbmRleChzZWxlY3Rpb25TdGFydFRleHQsIG1lcmdlZFByZWZpeCksXG4gICAgICBtZWFzdXJlSW5kZXggPSBfZ2V0TGFzdE1lYXN1cmVJbmRleC5sb2NhdGlvbixcbiAgICAgIG5leHRNZWFzdXJlUHJlZml4ID0gX2dldExhc3RNZWFzdXJlSW5kZXgucHJlZml4O1xuXG4gICAgLy8gSWYgdGhlIGNsaWVudCBpbXBsZW1lbnRzIGFuIG9uS2V5VXAgaGFuZGxlciwgY2FsbCBpdFxuICAgIG9uS2V5VXAgPT09IG51bGwgfHwgb25LZXlVcCA9PT0gdm9pZCAwIHx8IG9uS2V5VXAoZXZlbnQpO1xuXG4gICAgLy8gU2tpcCBpZiBtYXRjaCB0aGUgd2hpdGUga2V5IGxpc3RcbiAgICBpZiAoW0tleUNvZGUuRVNDLCBLZXlDb2RlLlVQLCBLZXlDb2RlLkRPV04sIEtleUNvZGUuRU5URVJdLmluZGV4T2Yod2hpY2gpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobWVhc3VyZUluZGV4ICE9PSAtMSkge1xuICAgICAgdmFyIG5leHRNZWFzdXJlVGV4dCA9IHNlbGVjdGlvblN0YXJ0VGV4dC5zbGljZShtZWFzdXJlSW5kZXggKyBuZXh0TWVhc3VyZVByZWZpeC5sZW5ndGgpO1xuICAgICAgdmFyIHZhbGlkYXRlTWVhc3VyZSA9IHZhbGlkYXRlU2VhcmNoKG5leHRNZWFzdXJlVGV4dCwgc3BsaXQpO1xuICAgICAgdmFyIG1hdGNoT3B0aW9uID0gISFnZXRPcHRpb25zKG5leHRNZWFzdXJlVGV4dCkubGVuZ3RoO1xuICAgICAgaWYgKHZhbGlkYXRlTWVhc3VyZSkge1xuICAgICAgICAvLyBhZGRpbmcgQWx0R3JhcGggYWxzbyBmb3J0IGF6ZXJ0IGtleWJvYXJkXG4gICAgICAgIGlmIChrZXkgPT09IG5leHRNZWFzdXJlUHJlZml4IHx8IGtleSA9PT0gJ1NoaWZ0JyB8fCB3aGljaCA9PT0gS2V5Q29kZS5BTFQgfHwga2V5ID09PSAnQWx0R3JhcGgnIHx8IG1lcmdlZE1lYXN1cmluZyB8fCBuZXh0TWVhc3VyZVRleHQgIT09IG1lcmdlZE1lYXN1cmVUZXh0ICYmIG1hdGNoT3B0aW9uKSB7XG4gICAgICAgICAgc3RhcnRNZWFzdXJlKG5leHRNZWFzdXJlVGV4dCwgbmV4dE1lYXN1cmVQcmVmaXgsIG1lYXN1cmVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VkTWVhc3VyaW5nKSB7XG4gICAgICAgIC8vIFN0b3AgaWYgbWVhc3VyZVRleHQgaXMgaW52YWxpZGF0ZVxuICAgICAgICBzdG9wTWVhc3VyZSgpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFdlIHdpbGwgdHJpZ2dlciBgb25TZWFyY2hgIHRvIGRldmVsb3BlciBzaW5jZSB0aGV5IG1heSB1c2UgZm9yIGFzeW5jIHVwZGF0ZS5cbiAgICAgICAqIElmIG1ldCBgc3BhY2VgIG1lYW5zIHVzZXIgZmluaXNoZWQgc2VhcmNoaW5nLlxuICAgICAgICovXG4gICAgICBpZiAob25TZWFyY2ggJiYgdmFsaWRhdGVNZWFzdXJlKSB7XG4gICAgICAgIG9uU2VhcmNoKG5leHRNZWFzdXJlVGV4dCwgbmV4dE1lYXN1cmVQcmVmaXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWVyZ2VkTWVhc3VyaW5nKSB7XG4gICAgICBzdG9wTWVhc3VyZSgpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxQcmVzc0VudGVyID0gZnVuY3Rpb24gb25JbnRlcm5hbFByZXNzRW50ZXIoZXZlbnQpIHtcbiAgICBpZiAoIW1lcmdlZE1lYXN1cmluZyAmJiBvblByZXNzRW50ZXIpIHtcbiAgICAgIG9uUHJlc3NFbnRlcihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRm9jdXMgQmx1ciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBmb2N1c1JlZiA9IHVzZVJlZigpO1xuICB2YXIgb25JbnRlcm5hbEZvY3VzID0gZnVuY3Rpb24gb25JbnRlcm5hbEZvY3VzKGV2ZW50KSB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dChmb2N1c1JlZi5jdXJyZW50KTtcbiAgICBpZiAoIWlzRm9jdXMgJiYgZXZlbnQgJiYgb25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIHNldElzRm9jdXModHJ1ZSk7XG4gIH07XG4gIHZhciBvbkludGVybmFsQmx1ciA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxCbHVyKGV2ZW50KSB7XG4gICAgZm9jdXNSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldElzRm9jdXMoZmFsc2UpO1xuICAgICAgc3RvcE1lYXN1cmUoKTtcbiAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCB8fCBvbkJsdXIoZXZlbnQpO1xuICAgIH0sIDApO1xuICB9O1xuICB2YXIgb25Ecm9wZG93bkZvY3VzID0gZnVuY3Rpb24gb25Ecm9wZG93bkZvY3VzKCkge1xuICAgIG9uSW50ZXJuYWxGb2N1cygpO1xuICB9O1xuICB2YXIgb25Ecm9wZG93bkJsdXIgPSBmdW5jdGlvbiBvbkRyb3Bkb3duQmx1cigpIHtcbiAgICBvbkludGVybmFsQmx1cigpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTY3JvbGwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25JbnRlcm5hbFBvcHVwU2Nyb2xsID0gZnVuY3Rpb24gb25JbnRlcm5hbFBvcHVwU2Nyb2xsKGV2ZW50KSB7XG4gICAgb25Qb3B1cFNjcm9sbCA9PT0gbnVsbCB8fCBvblBvcHVwU2Nyb2xsID09PSB2b2lkIDAgfHwgb25Qb3B1cFNjcm9sbChldmVudCk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwcmVmaXhDbHMsIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIHJlZjogY29udGFpbmVyUmVmXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHRBcmVhLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiB0ZXh0YXJlYVJlZixcbiAgICB2YWx1ZTogbWVyZ2VkVmFsdWVcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgcm93czogcm93cyxcbiAgICBvbkNoYW5nZTogb25JbnRlcm5hbENoYW5nZSxcbiAgICBvbktleURvd246IG9uSW50ZXJuYWxLZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uSW50ZXJuYWxLZXlVcCxcbiAgICBvblByZXNzRW50ZXI6IG9uSW50ZXJuYWxQcmVzc0VudGVyLFxuICAgIG9uRm9jdXM6IG9uSW50ZXJuYWxGb2N1cyxcbiAgICBvbkJsdXI6IG9uSW50ZXJuYWxCbHVyXG4gIH0pKSwgbWVyZ2VkTWVhc3VyaW5nICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IG1lYXN1cmVSZWYsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW1lYXN1cmVcIilcbiAgfSwgbWVyZ2VkVmFsdWUuc2xpY2UoMCwgbWVyZ2VkTWVhc3VyZUxvY2F0aW9uKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudGlvbnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIG5vdEZvdW5kQ29udGVudDogbm90Rm91bmRDb250ZW50LFxuICAgICAgYWN0aXZlSW5kZXg6IGFjdGl2ZUluZGV4LFxuICAgICAgc2V0QWN0aXZlSW5kZXg6IHNldEFjdGl2ZUluZGV4LFxuICAgICAgc2VsZWN0T3B0aW9uOiBzZWxlY3RPcHRpb24sXG4gICAgICBvbkZvY3VzOiBvbkRyb3Bkb3duRm9jdXMsXG4gICAgICBvbkJsdXI6IG9uRHJvcGRvd25CbHVyLFxuICAgICAgb25TY3JvbGw6IG9uSW50ZXJuYWxQb3B1cFNjcm9sbFxuICAgIH1cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoS2V5d29yZFRyaWdnZXIsIHtcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICB0cmFuc2l0aW9uTmFtZTogdHJhbnNpdGlvbk5hbWUsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgb3B0aW9uczogbWVyZ2VkT3B0aW9ucyxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lcixcbiAgICBkcm9wZG93bkNsYXNzTmFtZTogZHJvcGRvd25DbGFzc05hbWVcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIG1lcmdlZE1lYXN1cmVQcmVmaXgpKSksIG1lcmdlZFZhbHVlLnNsaWNlKG1lcmdlZE1lYXN1cmVMb2NhdGlvbiArIG1lcmdlZE1lYXN1cmVQcmVmaXgubGVuZ3RoKSkpO1xufSk7XG52YXIgTWVudGlvbnMgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjMsIHJlZikge1xuICB2YXIgc3VmZml4ID0gX3JlZjMuc3VmZml4LFxuICAgIF9yZWYzJHByZWZpeENscyA9IF9yZWYzLnByZWZpeENscyxcbiAgICBwcmVmaXhDbHMgPSBfcmVmMyRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1tZW50aW9ucycgOiBfcmVmMyRwcmVmaXhDbHMsXG4gICAgZGVmYXVsdFZhbHVlID0gX3JlZjMuZGVmYXVsdFZhbHVlLFxuICAgIGN1c3RvbVZhbHVlID0gX3JlZjMudmFsdWUsXG4gICAgYWxsb3dDbGVhciA9IF9yZWYzLmFsbG93Q2xlYXIsXG4gICAgb25DaGFuZ2UgPSBfcmVmMy5vbkNoYW5nZSxcbiAgICBjbGFzc2VzID0gX3JlZjMuY2xhc3NOYW1lcyxcbiAgICBjbGFzc05hbWUgPSBfcmVmMy5jbGFzc05hbWUsXG4gICAgZGlzYWJsZWQgPSBfcmVmMy5kaXNhYmxlZCxcbiAgICBvbkNsZWFyID0gX3JlZjMub25DbGVhcixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYzLCBfZXhjbHVkZWQyKTtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZWYgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGhvbGRlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG1lbnRpb25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9ob2xkZXJSZWYkY3VycmVudCwgX21lbnRpb25SZWYkY3VycmVudDtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZW50aW9uUmVmLmN1cnJlbnQpLCB7fSwge1xuICAgICAgbmF0aXZlRWxlbWVudDogKChfaG9sZGVyUmVmJGN1cnJlbnQgPSBob2xkZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2hvbGRlclJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaG9sZGVyUmVmJGN1cnJlbnQubmF0aXZlRWxlbWVudCkgfHwgKChfbWVudGlvblJlZiRjdXJyZW50ID0gbWVudGlvblJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfbWVudGlvblJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbWVudGlvblJlZiRjdXJyZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUzID0gdXNlTWVyZ2VkU3RhdGUoJycsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgdmFsdWU6IGN1c3RvbVZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZTMsIDIpLFxuICAgIG1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNFswXSxcbiAgICBzZXRNZXJnZWRWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTRbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKGN1cnJlbnRWYWx1ZSkge1xuICAgIHNldE1lcmdlZFZhbHVlKGN1cnJlbnRWYWx1ZSk7XG4gICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZShjdXJyZW50VmFsdWUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZXNldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBoYW5kbGVSZXNldCA9IGZ1bmN0aW9uIGhhbmRsZVJlc2V0KCkge1xuICAgIHRyaWdnZXJDaGFuZ2UoJycpO1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUlucHV0LCB7XG4gICAgc3VmZml4OiBzdWZmaXgsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgdmFsdWU6IG1lcmdlZFZhbHVlLFxuICAgIGFsbG93Q2xlYXI6IGFsbG93Q2xlYXIsXG4gICAgaGFuZGxlUmVzZXQ6IGhhbmRsZVJlc2V0LFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIGNsYXNzTmFtZXM6IGNsYXNzZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHJlZjogaG9sZGVyUmVmLFxuICAgIG9uQ2xlYXI6IG9uQ2xlYXJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxNZW50aW9ucywgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGFzc2VzLm1lbnRpb25zLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIHJlZjogbWVudGlvblJlZixcbiAgICBvbkNoYW5nZTogdHJpZ2dlckNoYW5nZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSwgcmVzdCkpKTtcbn0pO1xuTWVudGlvbnMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0IGRlZmF1bHQgTWVudGlvbnM7IiwiLyogdHNsaW50OmRpc2FibGU6IG5vLW9iamVjdC1saXRlcmFsLXR5cGUtYXNzZXJ0aW9uICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vLyBXZSB3aWxsIG5ldmVyIHVzZSBkZWZhdWx0LCBoZXJlIG9ubHkgdG8gZml4IFR5cGVTY3JpcHQgd2FybmluZ1xudmFyIE1lbnRpb25zQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZXhwb3J0IGRlZmF1bHQgTWVudGlvbnNDb250ZXh0OyIsInZhciBPcHRpb24gPSBmdW5jdGlvbiBPcHRpb24oKSB7XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydCBkZWZhdWx0IE9wdGlvbjsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBUcmlnZ2VyIGEgY2FsbGJhY2sgb24gc3RhdGUgY2hhbmdlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUVmZmVjdFN0YXRlKCkge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoe1xuICAgICAgaWQ6IDAsXG4gICAgICBjYWxsYmFjazogbnVsbFxuICAgIH0pLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGVmZmVjdElkID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRFZmZlY3RJZCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciB1cGRhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBzZXRFZmZlY3RJZChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGlkID0gX3JlZi5pZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZCArIDEsXG4gICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZWZmZWN0SWQkY2FsbGJhY2s7XG4gICAgKF9lZmZlY3RJZCRjYWxsYmFjayA9IGVmZmVjdElkLmNhbGxiYWNrKSA9PT0gbnVsbCB8fCBfZWZmZWN0SWQkY2FsbGJhY2sgPT09IHZvaWQgMCB8fCBfZWZmZWN0SWQkY2FsbGJhY2suY2FsbChlZmZlY3RJZCk7XG4gIH0sIFtlZmZlY3RJZF0pO1xuICByZXR1cm4gdXBkYXRlO1xufSIsImltcG9ydCBNZW50aW9ucyBmcm9tIFwiLi9NZW50aW9uc1wiO1xuZXhwb3J0IGRlZmF1bHQgTWVudGlvbnM7IiwiLyoqXG4gKiBDdXQgaW5wdXQgc2VsZWN0aW9uIGludG8gMiBwYXJ0IGFuZCByZXR1cm4gdGV4dCBiZWZvcmUgc2VsZWN0aW9uIHN0YXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCZWZvcmVTZWxlY3Rpb25UZXh0KGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb25TdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICByZXR1cm4gaW5wdXQudmFsdWUuc2xpY2UoMCwgc2VsZWN0aW9uU3RhcnQpO1xufVxuLyoqXG4gKiBGaW5kIHRoZSBsYXN0IG1hdGNoIHByZWZpeCBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdE1lYXN1cmVJbmRleCh0ZXh0LCBwcmVmaXgpIHtcbiAgcmV0dXJuIHByZWZpeC5yZWR1Y2UoZnVuY3Rpb24gKGxhc3RNYXRjaCwgcHJlZml4U3RyKSB7XG4gICAgdmFyIGxhc3RJbmRleCA9IHRleHQubGFzdEluZGV4T2YocHJlZml4U3RyKTtcbiAgICBpZiAobGFzdEluZGV4ID4gbGFzdE1hdGNoLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhdGlvbjogbGFzdEluZGV4LFxuICAgICAgICBwcmVmaXg6IHByZWZpeFN0clxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGxhc3RNYXRjaDtcbiAgfSwge1xuICAgIGxvY2F0aW9uOiAtMSxcbiAgICBwcmVmaXg6ICcnXG4gIH0pO1xufVxuZnVuY3Rpb24gbG93ZXIoY2hhcikge1xuICByZXR1cm4gKGNoYXIgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiByZWR1Y2VUZXh0KHRleHQsIHRhcmdldFRleHQsIHNwbGl0KSB7XG4gIHZhciBmaXJzdENoYXIgPSB0ZXh0WzBdO1xuICBpZiAoIWZpcnN0Q2hhciB8fCBmaXJzdENoYXIgPT09IHNwbGl0KSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICAvLyBSZXVzZSByZXN0IHRleHQgYXMgaXQgY2FuXG4gIHZhciByZXN0VGV4dCA9IHRleHQ7XG4gIHZhciB0YXJnZXRUZXh0TGVuID0gdGFyZ2V0VGV4dC5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0VGV4dExlbjsgaSArPSAxKSB7XG4gICAgaWYgKGxvd2VyKHJlc3RUZXh0W2ldKSAhPT0gbG93ZXIodGFyZ2V0VGV4dFtpXSkpIHtcbiAgICAgIHJlc3RUZXh0ID0gcmVzdFRleHQuc2xpY2UoaSk7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGkgPT09IHRhcmdldFRleHRMZW4gLSAxKSB7XG4gICAgICByZXN0VGV4dCA9IHJlc3RUZXh0LnNsaWNlKHRhcmdldFRleHRMZW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdFRleHQ7XG59XG5cbi8qKlxuICogUGFpbnQgdGFyZ2V0VGV4dCBpbnRvIGN1cnJlbnQgdGV4dDpcbiAqICB0ZXh0OiBsaXR0bGVAbGl0ZXN0XG4gKiAgdGFyZ2V0VGV4dDogbGlnaHRcbiAqICA9PiBsaXR0bGUgQGxpZ2h0IHRlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VXaXRoTWVhc3VyZSh0ZXh0LCBtZWFzdXJlQ29uZmlnKSB7XG4gIHZhciBtZWFzdXJlTG9jYXRpb24gPSBtZWFzdXJlQ29uZmlnLm1lYXN1cmVMb2NhdGlvbixcbiAgICBwcmVmaXggPSBtZWFzdXJlQ29uZmlnLnByZWZpeCxcbiAgICB0YXJnZXRUZXh0ID0gbWVhc3VyZUNvbmZpZy50YXJnZXRUZXh0LFxuICAgIHNlbGVjdGlvblN0YXJ0ID0gbWVhc3VyZUNvbmZpZy5zZWxlY3Rpb25TdGFydCxcbiAgICBzcGxpdCA9IG1lYXN1cmVDb25maWcuc3BsaXQ7XG5cbiAgLy8gQmVmb3JlIHRleHQgd2lsbCBhcHBlbmQgb25lIHNwYWNlIGlmIGhhdmUgb3RoZXIgdGV4dFxuICB2YXIgYmVmb3JlTWVhc3VyZVRleHQgPSB0ZXh0LnNsaWNlKDAsIG1lYXN1cmVMb2NhdGlvbik7XG4gIGlmIChiZWZvcmVNZWFzdXJlVGV4dFtiZWZvcmVNZWFzdXJlVGV4dC5sZW5ndGggLSBzcGxpdC5sZW5ndGhdID09PSBzcGxpdCkge1xuICAgIGJlZm9yZU1lYXN1cmVUZXh0ID0gYmVmb3JlTWVhc3VyZVRleHQuc2xpY2UoMCwgYmVmb3JlTWVhc3VyZVRleHQubGVuZ3RoIC0gc3BsaXQubGVuZ3RoKTtcbiAgfVxuICBpZiAoYmVmb3JlTWVhc3VyZVRleHQpIHtcbiAgICBiZWZvcmVNZWFzdXJlVGV4dCA9IFwiXCIuY29uY2F0KGJlZm9yZU1lYXN1cmVUZXh0KS5jb25jYXQoc3BsaXQpO1xuICB9XG5cbiAgLy8gQ3V0IGR1cGxpY2F0ZSBzdHJpbmcgd2l0aCBjdXJyZW50IHRhcmdldFRleHRcbiAgdmFyIHJlc3RUZXh0ID0gcmVkdWNlVGV4dCh0ZXh0LnNsaWNlKHNlbGVjdGlvblN0YXJ0KSwgdGFyZ2V0VGV4dC5zbGljZShzZWxlY3Rpb25TdGFydCAtIG1lYXN1cmVMb2NhdGlvbiAtIHByZWZpeC5sZW5ndGgpLCBzcGxpdCk7XG4gIGlmIChyZXN0VGV4dC5zbGljZSgwLCBzcGxpdC5sZW5ndGgpID09PSBzcGxpdCkge1xuICAgIHJlc3RUZXh0ID0gcmVzdFRleHQuc2xpY2Uoc3BsaXQubGVuZ3RoKTtcbiAgfVxuICB2YXIgY29ubmVjdGVkU3RhcnRUZXh0ID0gXCJcIi5jb25jYXQoYmVmb3JlTWVhc3VyZVRleHQpLmNvbmNhdChwcmVmaXgpLmNvbmNhdCh0YXJnZXRUZXh0KS5jb25jYXQoc3BsaXQpO1xuICByZXR1cm4ge1xuICAgIHRleHQ6IFwiXCIuY29uY2F0KGNvbm5lY3RlZFN0YXJ0VGV4dCkuY29uY2F0KHJlc3RUZXh0KSxcbiAgICBzZWxlY3Rpb25Mb2NhdGlvbjogY29ubmVjdGVkU3RhcnRUZXh0Lmxlbmd0aFxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldElucHV0U2VsZWN0aW9uKGlucHV0LCBsb2NhdGlvbikge1xuICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShsb2NhdGlvbiwgbG9jYXRpb24pO1xuXG4gIC8qKlxuICAgKiBSZXNldCBjYXJldCBpbnRvIHZpZXcuXG4gICAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gYWx3YXlzIGNhbGxlZCBieSB1c2VyIGNvbnRyb2wsIGl0J3Mgc2FmZSB0byBmb2N1cyBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXQuYmx1cigpO1xuICBpbnB1dC5mb2N1cygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2VhcmNoKHRleHQsIHNwbGl0KSB7XG4gIHJldHVybiAhc3BsaXQgfHwgdGV4dC5pbmRleE9mKHNwbGl0KSA9PT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT3B0aW9uKGlucHV0LCBfcmVmKSB7XG4gIHZhciBfcmVmJHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICB2YWx1ZSA9IF9yZWYkdmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX3JlZiR2YWx1ZTtcbiAgdmFyIGxvd2VyQ2FzZSA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlKSAhPT0gLTE7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZU1lYXN1cmUgfSBmcm9tIFwiLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXZpZGVyKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gX3JlZi5zdHlsZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzO1xuICB2YXIgbWVhc3VyZSA9IHVzZU1lYXN1cmUoKTtcbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7XG4gICAgcm9sZTogXCJzZXBhcmF0b3JcIixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pdGVtLWRpdmlkZXJcIiksIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0pO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJY29uKF9yZWYpIHtcbiAgdmFyIGljb24gPSBfcmVmLmljb24sXG4gICAgcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGljb25Ob2RlO1xuICBpZiAoaWNvbiA9PT0gbnVsbCB8fCBpY29uID09PSBmYWxzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgaWNvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGljb25Ob2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoaWNvbiwgX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaWNvbiAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAvLyBDb21wYXRpYmxlIGZvciBvcmlnaW4gZGVmaW5pdGlvblxuICAgIGljb25Ob2RlID0gaWNvbjtcbiAgfVxuICByZXR1cm4gaWNvbk5vZGUgfHwgY2hpbGRyZW4gfHwgbnVsbDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJwcmVmaXhDbHNcIiwgXCJyb290Q2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJ0YWJJbmRleFwiLCBcIml0ZW1zXCIsIFwiY2hpbGRyZW5cIiwgXCJkaXJlY3Rpb25cIiwgXCJpZFwiLCBcIm1vZGVcIiwgXCJpbmxpbmVDb2xsYXBzZWRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkT3ZlcmZsb3dcIiwgXCJzdWJNZW51T3BlbkRlbGF5XCIsIFwic3ViTWVudUNsb3NlRGVsYXlcIiwgXCJmb3JjZVN1Yk1lbnVSZW5kZXJcIiwgXCJkZWZhdWx0T3BlbktleXNcIiwgXCJvcGVuS2V5c1wiLCBcImFjdGl2ZUtleVwiLCBcImRlZmF1bHRBY3RpdmVGaXJzdFwiLCBcInNlbGVjdGFibGVcIiwgXCJtdWx0aXBsZVwiLCBcImRlZmF1bHRTZWxlY3RlZEtleXNcIiwgXCJzZWxlY3RlZEtleXNcIiwgXCJvblNlbGVjdFwiLCBcIm9uRGVzZWxlY3RcIiwgXCJpbmxpbmVJbmRlbnRcIiwgXCJtb3Rpb25cIiwgXCJkZWZhdWx0TW90aW9uc1wiLCBcInRyaWdnZXJTdWJNZW51QWN0aW9uXCIsIFwiYnVpbHRpblBsYWNlbWVudHNcIiwgXCJpdGVtSWNvblwiLCBcImV4cGFuZEljb25cIiwgXCJvdmVyZmxvd2VkSW5kaWNhdG9yXCIsIFwib3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lXCIsIFwiZ2V0UG9wdXBDb250YWluZXJcIiwgXCJvbkNsaWNrXCIsIFwib25PcGVuQ2hhbmdlXCIsIFwib25LZXlEb3duXCIsIFwib3BlbkFuaW1hdGlvblwiLCBcIm9wZW5UcmFuc2l0aW9uTmFtZVwiLCBcIl9pbnRlcm5hbFJlbmRlck1lbnVJdGVtXCIsIFwiX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW1cIiwgXCJfaW50ZXJuYWxDb21wb25lbnRzXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgT3ZlcmZsb3cgZnJvbSAncmMtb3ZlcmZsb3cnO1xuaW1wb3J0IHVzZU1lcmdlZFN0YXRlIGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZU1lcmdlZFN0YXRlXCI7XG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwicmMtdXRpbC9lcy9pc0VxdWFsXCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IElkQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvSWRDb250ZXh0XCI7XG5pbXBvcnQgTWVudUNvbnRleHRQcm92aWRlciBmcm9tIFwiLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgeyBQYXRoUmVnaXN0ZXJDb250ZXh0LCBQYXRoVXNlckNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5pbXBvcnQgUHJpdmF0ZUNvbnRleHQgZnJvbSBcIi4vY29udGV4dC9Qcml2YXRlQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlRWxlbWVudHMsIHJlZnJlc2hFbGVtZW50cywgdXNlQWNjZXNzaWJpbGl0eSB9IGZyb20gXCIuL2hvb2tzL3VzZUFjY2Vzc2liaWxpdHlcIjtcbmltcG9ydCB1c2VLZXlSZWNvcmRzLCB7IE9WRVJGTE9XX0tFWSB9IGZyb20gXCIuL2hvb2tzL3VzZUtleVJlY29yZHNcIjtcbmltcG9ydCB1c2VNZW1vQ2FsbGJhY2sgZnJvbSBcIi4vaG9va3MvdXNlTWVtb0NhbGxiYWNrXCI7XG5pbXBvcnQgdXNlVVVJRCBmcm9tIFwiLi9ob29rcy91c2VVVUlEXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmltcG9ydCBTdWJNZW51IGZyb20gXCIuL1N1Yk1lbnVcIjtcbmltcG9ydCB7IHBhcnNlSXRlbXMgfSBmcm9tIFwiLi91dGlscy9ub2RlVXRpbFwiO1xuaW1wb3J0IHsgd2Fybkl0ZW1Qcm9wIH0gZnJvbSBcIi4vdXRpbHMvd2FyblV0aWxcIjtcblxuLyoqXG4gKiBNZW51IG1vZGlmeSBhZnRlciByZWZhY3RvcjpcbiAqICMjIEFkZFxuICogLSBkaXNhYmxlZFxuICpcbiAqICMjIFJlbW92ZVxuICogLSBvcGVuVHJhbnNpdGlvbk5hbWVcbiAqIC0gb3BlbkFuaW1hdGlvblxuICogLSBvbkRlc3Ryb3lcbiAqIC0gc2lkZXJDb2xsYXBzZWQ6IFNlZW1zIGFudGQgZG8gbm90IHVzZSB0aGlzIHByb3AgKE5lZWQgdGVzdCBpbiBhbnRkKVxuICogLSBjb2xsYXBzZWRXaWR0aDogU2VlbXMgdGhpcyBsb2dpYyBzaG91bGQgYmUgaGFuZGxlIGJ5IGFudGQgTGF5b3V0LlNpZGVyXG4gKi9cblxuLy8gb3B0aW1pemUgZm9yIHJlbmRlclxudmFyIEVNUFRZX0xJU1QgPSBbXTtcbnZhciBNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIF9jaGlsZExpc3QkO1xuICB2YXIgX3JlZiA9IHByb3BzLFxuICAgIF9yZWYkcHJlZml4Q2xzID0gX3JlZi5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3JlZiRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1tZW51JyA6IF9yZWYkcHJlZml4Q2xzLFxuICAgIHJvb3RDbGFzc05hbWUgPSBfcmVmLnJvb3RDbGFzc05hbWUsXG4gICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgIF9yZWYkdGFiSW5kZXggPSBfcmVmLnRhYkluZGV4LFxuICAgIHRhYkluZGV4ID0gX3JlZiR0YWJJbmRleCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkdGFiSW5kZXgsXG4gICAgaXRlbXMgPSBfcmVmLml0ZW1zLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBkaXJlY3Rpb24gPSBfcmVmLmRpcmVjdGlvbixcbiAgICBpZCA9IF9yZWYuaWQsXG4gICAgX3JlZiRtb2RlID0gX3JlZi5tb2RlLFxuICAgIG1vZGUgPSBfcmVmJG1vZGUgPT09IHZvaWQgMCA/ICd2ZXJ0aWNhbCcgOiBfcmVmJG1vZGUsXG4gICAgaW5saW5lQ29sbGFwc2VkID0gX3JlZi5pbmxpbmVDb2xsYXBzZWQsXG4gICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgIGRpc2FibGVkT3ZlcmZsb3cgPSBfcmVmLmRpc2FibGVkT3ZlcmZsb3csXG4gICAgX3JlZiRzdWJNZW51T3BlbkRlbGF5ID0gX3JlZi5zdWJNZW51T3BlbkRlbGF5LFxuICAgIHN1Yk1lbnVPcGVuRGVsYXkgPSBfcmVmJHN1Yk1lbnVPcGVuRGVsYXkgPT09IHZvaWQgMCA/IDAuMSA6IF9yZWYkc3ViTWVudU9wZW5EZWxheSxcbiAgICBfcmVmJHN1Yk1lbnVDbG9zZURlbGEgPSBfcmVmLnN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIHN1Yk1lbnVDbG9zZURlbGF5ID0gX3JlZiRzdWJNZW51Q2xvc2VEZWxhID09PSB2b2lkIDAgPyAwLjEgOiBfcmVmJHN1Yk1lbnVDbG9zZURlbGEsXG4gICAgZm9yY2VTdWJNZW51UmVuZGVyID0gX3JlZi5mb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgZGVmYXVsdE9wZW5LZXlzID0gX3JlZi5kZWZhdWx0T3BlbktleXMsXG4gICAgb3BlbktleXMgPSBfcmVmLm9wZW5LZXlzLFxuICAgIGFjdGl2ZUtleSA9IF9yZWYuYWN0aXZlS2V5LFxuICAgIGRlZmF1bHRBY3RpdmVGaXJzdCA9IF9yZWYuZGVmYXVsdEFjdGl2ZUZpcnN0LFxuICAgIF9yZWYkc2VsZWN0YWJsZSA9IF9yZWYuc2VsZWN0YWJsZSxcbiAgICBzZWxlY3RhYmxlID0gX3JlZiRzZWxlY3RhYmxlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzZWxlY3RhYmxlLFxuICAgIF9yZWYkbXVsdGlwbGUgPSBfcmVmLm11bHRpcGxlLFxuICAgIG11bHRpcGxlID0gX3JlZiRtdWx0aXBsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJG11bHRpcGxlLFxuICAgIGRlZmF1bHRTZWxlY3RlZEtleXMgPSBfcmVmLmRlZmF1bHRTZWxlY3RlZEtleXMsXG4gICAgc2VsZWN0ZWRLZXlzID0gX3JlZi5zZWxlY3RlZEtleXMsXG4gICAgb25TZWxlY3QgPSBfcmVmLm9uU2VsZWN0LFxuICAgIG9uRGVzZWxlY3QgPSBfcmVmLm9uRGVzZWxlY3QsXG4gICAgX3JlZiRpbmxpbmVJbmRlbnQgPSBfcmVmLmlubGluZUluZGVudCxcbiAgICBpbmxpbmVJbmRlbnQgPSBfcmVmJGlubGluZUluZGVudCA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJGlubGluZUluZGVudCxcbiAgICBtb3Rpb24gPSBfcmVmLm1vdGlvbixcbiAgICBkZWZhdWx0TW90aW9ucyA9IF9yZWYuZGVmYXVsdE1vdGlvbnMsXG4gICAgX3JlZiR0cmlnZ2VyU3ViTWVudUFjID0gX3JlZi50cmlnZ2VyU3ViTWVudUFjdGlvbixcbiAgICB0cmlnZ2VyU3ViTWVudUFjdGlvbiA9IF9yZWYkdHJpZ2dlclN1Yk1lbnVBYyA9PT0gdm9pZCAwID8gJ2hvdmVyJyA6IF9yZWYkdHJpZ2dlclN1Yk1lbnVBYyxcbiAgICBidWlsdGluUGxhY2VtZW50cyA9IF9yZWYuYnVpbHRpblBsYWNlbWVudHMsXG4gICAgaXRlbUljb24gPSBfcmVmLml0ZW1JY29uLFxuICAgIGV4cGFuZEljb24gPSBfcmVmLmV4cGFuZEljb24sXG4gICAgX3JlZiRvdmVyZmxvd2VkSW5kaWNhID0gX3JlZi5vdmVyZmxvd2VkSW5kaWNhdG9yLFxuICAgIG92ZXJmbG93ZWRJbmRpY2F0b3IgPSBfcmVmJG92ZXJmbG93ZWRJbmRpY2EgPT09IHZvaWQgMCA/ICcuLi4nIDogX3JlZiRvdmVyZmxvd2VkSW5kaWNhLFxuICAgIG92ZXJmbG93ZWRJbmRpY2F0b3JQb3B1cENsYXNzTmFtZSA9IF9yZWYub3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lLFxuICAgIGdldFBvcHVwQ29udGFpbmVyID0gX3JlZi5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgIG9uT3BlbkNoYW5nZSA9IF9yZWYub25PcGVuQ2hhbmdlLFxuICAgIG9uS2V5RG93biA9IF9yZWYub25LZXlEb3duLFxuICAgIG9wZW5BbmltYXRpb24gPSBfcmVmLm9wZW5BbmltYXRpb24sXG4gICAgb3BlblRyYW5zaXRpb25OYW1lID0gX3JlZi5vcGVuVHJhbnNpdGlvbk5hbWUsXG4gICAgX2ludGVybmFsUmVuZGVyTWVudUl0ZW0gPSBfcmVmLl9pbnRlcm5hbFJlbmRlck1lbnVJdGVtLFxuICAgIF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtID0gX3JlZi5faW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbSxcbiAgICBfaW50ZXJuYWxDb21wb25lbnRzID0gX3JlZi5faW50ZXJuYWxDb21wb25lbnRzLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgX1JlYWN0JHVzZU1lbW8gPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbcGFyc2VJdGVtcyhjaGlsZHJlbiwgaXRlbXMsIEVNUFRZX0xJU1QsIF9pbnRlcm5hbENvbXBvbmVudHMsIHByZWZpeENscyksIHBhcnNlSXRlbXMoY2hpbGRyZW4sIGl0ZW1zLCBFTVBUWV9MSVNULCB7fSwgcHJlZml4Q2xzKV07XG4gICAgfSwgW2NoaWxkcmVuLCBpdGVtcywgX2ludGVybmFsQ29tcG9uZW50c10pLFxuICAgIF9SZWFjdCR1c2VNZW1vMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vLCAyKSxcbiAgICBjaGlsZExpc3QgPSBfUmVhY3QkdXNlTWVtbzJbMF0sXG4gICAgbWVhc3VyZUNoaWxkTGlzdCA9IF9SZWFjdCR1c2VNZW1vMlsxXTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBtb3VudGVkID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXRNb3VudGVkID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIGNvbnRhaW5lclJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgdXVpZCA9IHVzZVVVSUQoaWQpO1xuICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gV2FybiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybmluZyghb3BlbkFuaW1hdGlvbiAmJiAhb3BlblRyYW5zaXRpb25OYW1lLCAnYG9wZW5BbmltYXRpb25gIGFuZCBgb3BlblRyYW5zaXRpb25OYW1lYCBpcyByZW1vdmVkLiBQbGVhc2UgdXNlIGBtb3Rpb25gIG9yIGBkZWZhdWx0TW90aW9uYCBpbnN0ZWFkLicpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBPcGVuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKGRlZmF1bHRPcGVuS2V5cywge1xuICAgICAgdmFsdWU6IG9wZW5LZXlzLFxuICAgICAgcG9zdFN0YXRlOiBmdW5jdGlvbiBwb3N0U3RhdGUoa2V5cykge1xuICAgICAgICByZXR1cm4ga2V5cyB8fCBFTVBUWV9MSVNUO1xuICAgICAgfVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIG1lcmdlZE9wZW5LZXlzID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRNZXJnZWRPcGVuS2V5cyA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG5cbiAgLy8gUmVhY3QgMTggd2lsbCBtZXJnZSBtb3VzZSBldmVudCB3aGljaCBtZWFucyB3ZSBvcGVuIGtleSB3aWxsIG5vdCBzeW5jXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvMzg4MThcbiAgdmFyIHRyaWdnZXJPcGVuS2V5cyA9IGZ1bmN0aW9uIHRyaWdnZXJPcGVuS2V5cyhrZXlzKSB7XG4gICAgdmFyIGZvcmNlRmx1c2ggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvVXBkYXRlKCkge1xuICAgICAgc2V0TWVyZ2VkT3BlbktleXMoa2V5cyk7XG4gICAgICBvbk9wZW5DaGFuZ2UgPT09IG51bGwgfHwgb25PcGVuQ2hhbmdlID09PSB2b2lkIDAgfHwgb25PcGVuQ2hhbmdlKGtleXMpO1xuICAgIH1cbiAgICBpZiAoZm9yY2VGbHVzaCkge1xuICAgICAgZmx1c2hTeW5jKGRvVXBkYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9VcGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPj4+Pj4gQ2FjaGUgJiBSZXNldCBvcGVuIGtleXMgd2hlbiBpbmxpbmVDb2xsYXBzZWQgY2hhbmdlZFxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKG1lcmdlZE9wZW5LZXlzKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgaW5saW5lQ2FjaGVPcGVuS2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0SW5saW5lQ2FjaGVPcGVuS2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBtb3VudFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBNb2RlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VNZW1vMyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKChtb2RlID09PSAnaW5saW5lJyB8fCBtb2RlID09PSAndmVydGljYWwnKSAmJiBpbmxpbmVDb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIFsndmVydGljYWwnLCBpbmxpbmVDb2xsYXBzZWRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFttb2RlLCBmYWxzZV07XG4gICAgfSwgW21vZGUsIGlubGluZUNvbGxhcHNlZF0pLFxuICAgIF9SZWFjdCR1c2VNZW1vNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vMywgMiksXG4gICAgbWVyZ2VkTW9kZSA9IF9SZWFjdCR1c2VNZW1vNFswXSxcbiAgICBtZXJnZWRJbmxpbmVDb2xsYXBzZWQgPSBfUmVhY3QkdXNlTWVtbzRbMV07XG4gIHZhciBpc0lubGluZU1vZGUgPSBtZXJnZWRNb2RlID09PSAnaW5saW5lJztcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTUgPSBSZWFjdC51c2VTdGF0ZShtZXJnZWRNb2RlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlNSwgMiksXG4gICAgaW50ZXJuYWxNb2RlID0gX1JlYWN0JHVzZVN0YXRlNlswXSxcbiAgICBzZXRJbnRlcm5hbE1vZGUgPSBfUmVhY3QkdXNlU3RhdGU2WzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlNyA9IFJlYWN0LnVzZVN0YXRlKG1lcmdlZElubGluZUNvbGxhcHNlZCksXG4gICAgX1JlYWN0JHVzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTcsIDIpLFxuICAgIGludGVybmFsSW5saW5lQ29sbGFwc2VkID0gX1JlYWN0JHVzZVN0YXRlOFswXSxcbiAgICBzZXRJbnRlcm5hbElubGluZUNvbGxhcHNlZCA9IF9SZWFjdCR1c2VTdGF0ZThbMV07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0SW50ZXJuYWxNb2RlKG1lcmdlZE1vZGUpO1xuICAgIHNldEludGVybmFsSW5saW5lQ29sbGFwc2VkKG1lcmdlZElubGluZUNvbGxhcHNlZCk7XG4gICAgaWYgKCFtb3VudFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN5bmNocm9ub3VzbHkgdXBkYXRlIE1lcmdlZE9wZW5LZXlzXG4gICAgaWYgKGlzSW5saW5lTW9kZSkge1xuICAgICAgc2V0TWVyZ2VkT3BlbktleXMoaW5saW5lQ2FjaGVPcGVuS2V5cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyaWdnZXIgb3BlbiBldmVudCBpbiBjYXNlIGl0cyBpbiBjb250cm9sXG4gICAgICB0cmlnZ2VyT3BlbktleXMoRU1QVFlfTElTVCk7XG4gICAgfVxuICB9LCBbbWVyZ2VkTW9kZSwgbWVyZ2VkSW5saW5lQ29sbGFwc2VkXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBSZXNwb25zaXZlID09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTkgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUxMCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTksIDIpLFxuICAgIGxhc3RWaXNpYmxlSW5kZXggPSBfUmVhY3QkdXNlU3RhdGUxMFswXSxcbiAgICBzZXRMYXN0VmlzaWJsZUluZGV4ID0gX1JlYWN0JHVzZVN0YXRlMTBbMV07XG4gIHZhciBhbGxWaXNpYmxlID0gbGFzdFZpc2libGVJbmRleCA+PSBjaGlsZExpc3QubGVuZ3RoIC0gMSB8fCBpbnRlcm5hbE1vZGUgIT09ICdob3Jpem9udGFsJyB8fCBkaXNhYmxlZE92ZXJmbG93O1xuXG4gIC8vIENhY2hlXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzSW5saW5lTW9kZSkge1xuICAgICAgc2V0SW5saW5lQ2FjaGVPcGVuS2V5cyhtZXJnZWRPcGVuS2V5cyk7XG4gICAgfVxuICB9LCBbbWVyZ2VkT3BlbktleXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBtb3VudFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUtleVJlY29yZHMgPSB1c2VLZXlSZWNvcmRzKCksXG4gICAgcmVnaXN0ZXJQYXRoID0gX3VzZUtleVJlY29yZHMucmVnaXN0ZXJQYXRoLFxuICAgIHVucmVnaXN0ZXJQYXRoID0gX3VzZUtleVJlY29yZHMudW5yZWdpc3RlclBhdGgsXG4gICAgcmVmcmVzaE92ZXJmbG93S2V5cyA9IF91c2VLZXlSZWNvcmRzLnJlZnJlc2hPdmVyZmxvd0tleXMsXG4gICAgaXNTdWJQYXRoS2V5ID0gX3VzZUtleVJlY29yZHMuaXNTdWJQYXRoS2V5LFxuICAgIGdldEtleVBhdGggPSBfdXNlS2V5UmVjb3Jkcy5nZXRLZXlQYXRoLFxuICAgIGdldEtleXMgPSBfdXNlS2V5UmVjb3Jkcy5nZXRLZXlzLFxuICAgIGdldFN1YlBhdGhLZXlzID0gX3VzZUtleVJlY29yZHMuZ2V0U3ViUGF0aEtleXM7XG4gIHZhciByZWdpc3RlclBhdGhDb250ZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2lzdGVyUGF0aDogcmVnaXN0ZXJQYXRoLFxuICAgICAgdW5yZWdpc3RlclBhdGg6IHVucmVnaXN0ZXJQYXRoXG4gICAgfTtcbiAgfSwgW3JlZ2lzdGVyUGF0aCwgdW5yZWdpc3RlclBhdGhdKTtcbiAgdmFyIHBhdGhVc2VyQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1N1YlBhdGhLZXk6IGlzU3ViUGF0aEtleVxuICAgIH07XG4gIH0sIFtpc1N1YlBhdGhLZXldKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZWZyZXNoT3ZlcmZsb3dLZXlzKGFsbFZpc2libGUgPyBFTVBUWV9MSVNUIDogY2hpbGRMaXN0LnNsaWNlKGxhc3RWaXNpYmxlSW5kZXggKyAxKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gY2hpbGQua2V5O1xuICAgIH0pKTtcbiAgfSwgW2xhc3RWaXNpYmxlSW5kZXgsIGFsbFZpc2libGVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlMyA9IHVzZU1lcmdlZFN0YXRlKGFjdGl2ZUtleSB8fCBkZWZhdWx0QWN0aXZlRmlyc3QgJiYgKChfY2hpbGRMaXN0JCA9IGNoaWxkTGlzdFswXSkgPT09IG51bGwgfHwgX2NoaWxkTGlzdCQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jaGlsZExpc3QkLmtleSksIHtcbiAgICAgIHZhbHVlOiBhY3RpdmVLZXlcbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlMywgMiksXG4gICAgbWVyZ2VkQWN0aXZlS2V5ID0gX3VzZU1lcmdlZFN0YXRlNFswXSxcbiAgICBzZXRNZXJnZWRBY3RpdmVLZXkgPSBfdXNlTWVyZ2VkU3RhdGU0WzFdO1xuICB2YXIgb25BY3RpdmUgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKGtleSkge1xuICAgIHNldE1lcmdlZEFjdGl2ZUtleShrZXkpO1xuICB9KTtcbiAgdmFyIG9uSW5hY3RpdmUgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHNldE1lcmdlZEFjdGl2ZUtleSh1bmRlZmluZWQpO1xuICB9KTtcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdDogY29udGFpbmVyUmVmLmN1cnJlbnQsXG4gICAgICBmb2N1czogZnVuY3Rpb24gZm9jdXMob3B0aW9ucykge1xuICAgICAgICB2YXIgX2NoaWxkTGlzdCRmaW5kO1xuICAgICAgICB2YXIga2V5cyA9IGdldEtleXMoKTtcbiAgICAgICAgdmFyIF9yZWZyZXNoRWxlbWVudHMgPSByZWZyZXNoRWxlbWVudHMoa2V5cywgdXVpZCksXG4gICAgICAgICAgZWxlbWVudHMgPSBfcmVmcmVzaEVsZW1lbnRzLmVsZW1lbnRzLFxuICAgICAgICAgIGtleTJlbGVtZW50ID0gX3JlZnJlc2hFbGVtZW50cy5rZXkyZWxlbWVudCxcbiAgICAgICAgICBlbGVtZW50MmtleSA9IF9yZWZyZXNoRWxlbWVudHMuZWxlbWVudDJrZXk7XG4gICAgICAgIHZhciBmb2N1c2FibGVFbGVtZW50cyA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKGNvbnRhaW5lclJlZi5jdXJyZW50LCBlbGVtZW50cyk7XG4gICAgICAgIHZhciBzaG91bGRGb2N1c0tleSA9IG1lcmdlZEFjdGl2ZUtleSAhPT0gbnVsbCAmJiBtZXJnZWRBY3RpdmVLZXkgIT09IHZvaWQgMCA/IG1lcmdlZEFjdGl2ZUtleSA6IGZvY3VzYWJsZUVsZW1lbnRzWzBdID8gZWxlbWVudDJrZXkuZ2V0KGZvY3VzYWJsZUVsZW1lbnRzWzBdKSA6IChfY2hpbGRMaXN0JGZpbmQgPSBjaGlsZExpc3QuZmluZChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiAhbm9kZS5wcm9wcy5kaXNhYmxlZDtcbiAgICAgICAgfSkpID09PSBudWxsIHx8IF9jaGlsZExpc3QkZmluZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NoaWxkTGlzdCRmaW5kLmtleTtcbiAgICAgICAgdmFyIGVsZW1lbnRUb0ZvY3VzID0ga2V5MmVsZW1lbnQuZ2V0KHNob3VsZEZvY3VzS2V5KTtcbiAgICAgICAgaWYgKHNob3VsZEZvY3VzS2V5ICYmIGVsZW1lbnRUb0ZvY3VzKSB7XG4gICAgICAgICAgdmFyIF9lbGVtZW50VG9Gb2N1cyRmb2N1cztcbiAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9PT0gbnVsbCB8fCBlbGVtZW50VG9Gb2N1cyA9PT0gdm9pZCAwIHx8IChfZWxlbWVudFRvRm9jdXMkZm9jdXMgPSBlbGVtZW50VG9Gb2N1cy5mb2N1cykgPT09IG51bGwgfHwgX2VsZW1lbnRUb0ZvY3VzJGZvY3VzID09PSB2b2lkIDAgfHwgX2VsZW1lbnRUb0ZvY3VzJGZvY3VzLmNhbGwoZWxlbWVudFRvRm9jdXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFNlbGVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPj4+Pj4gU2VsZWN0IGtleXNcbiAgdmFyIF91c2VNZXJnZWRTdGF0ZTUgPSB1c2VNZXJnZWRTdGF0ZShkZWZhdWx0U2VsZWN0ZWRLZXlzIHx8IFtdLCB7XG4gICAgICB2YWx1ZTogc2VsZWN0ZWRLZXlzLFxuICAgICAgLy8gTGVnYWN5IGNvbnZlcnQga2V5IHRvIGFycmF5XG4gICAgICBwb3N0U3RhdGU6IGZ1bmN0aW9uIHBvc3RTdGF0ZShrZXlzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMgPT09IG51bGwgfHwga2V5cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZX0xJU1Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtrZXlzXTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlNSwgMiksXG4gICAgbWVyZ2VkU2VsZWN0S2V5cyA9IF91c2VNZXJnZWRTdGF0ZTZbMF0sXG4gICAgc2V0TWVyZ2VkU2VsZWN0S2V5cyA9IF91c2VNZXJnZWRTdGF0ZTZbMV07XG5cbiAgLy8gPj4+Pj4gVHJpZ2dlciBzZWxlY3RcbiAgdmFyIHRyaWdnZXJTZWxlY3Rpb24gPSBmdW5jdGlvbiB0cmlnZ2VyU2VsZWN0aW9uKGluZm8pIHtcbiAgICBpZiAoc2VsZWN0YWJsZSkge1xuICAgICAgLy8gSW5zZXJ0IG9yIFJlbW92ZVxuICAgICAgdmFyIHRhcmdldEtleSA9IGluZm8ua2V5O1xuICAgICAgdmFyIGV4aXN0ID0gbWVyZ2VkU2VsZWN0S2V5cy5pbmNsdWRlcyh0YXJnZXRLZXkpO1xuICAgICAgdmFyIG5ld1NlbGVjdEtleXM7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKGV4aXN0KSB7XG4gICAgICAgICAgbmV3U2VsZWN0S2V5cyA9IG1lcmdlZFNlbGVjdEtleXMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXkgIT09IHRhcmdldEtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdTZWxlY3RLZXlzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShtZXJnZWRTZWxlY3RLZXlzKSwgW3RhcmdldEtleV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZWxlY3RLZXlzID0gW3RhcmdldEtleV07XG4gICAgICB9XG4gICAgICBzZXRNZXJnZWRTZWxlY3RLZXlzKG5ld1NlbGVjdEtleXMpO1xuXG4gICAgICAvLyBUcmlnZ2VyIGV2ZW50XG4gICAgICB2YXIgc2VsZWN0SW5mbyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgaW5mbyksIHt9LCB7XG4gICAgICAgIHNlbGVjdGVkS2V5czogbmV3U2VsZWN0S2V5c1xuICAgICAgfSk7XG4gICAgICBpZiAoZXhpc3QpIHtcbiAgICAgICAgb25EZXNlbGVjdCA9PT0gbnVsbCB8fCBvbkRlc2VsZWN0ID09PSB2b2lkIDAgfHwgb25EZXNlbGVjdChzZWxlY3RJbmZvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uU2VsZWN0ID09PSBudWxsIHx8IG9uU2VsZWN0ID09PSB2b2lkIDAgfHwgb25TZWxlY3Qoc2VsZWN0SW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hhdGV2ZXIgc2VsZWN0YWJsZSwgYWx3YXlzIGNsb3NlIGl0XG4gICAgaWYgKCFtdWx0aXBsZSAmJiBtZXJnZWRPcGVuS2V5cy5sZW5ndGggJiYgaW50ZXJuYWxNb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgdHJpZ2dlck9wZW5LZXlzKEVNUFRZX0xJU1QpO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IE9wZW4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogQ2xpY2sgZm9yIGl0ZW0uIFN1Yk1lbnUgZG8gbm90IGhhdmUgc2VsZWN0aW9uIHN0YXR1c1xuICAgKi9cbiAgdmFyIG9uSW50ZXJuYWxDbGljayA9IHVzZU1lbW9DYWxsYmFjayhmdW5jdGlvbiAoaW5mbykge1xuICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwIHx8IG9uQ2xpY2sod2Fybkl0ZW1Qcm9wKGluZm8pKTtcbiAgICB0cmlnZ2VyU2VsZWN0aW9uKGluZm8pO1xuICB9KTtcbiAgdmFyIG9uSW50ZXJuYWxPcGVuQ2hhbmdlID0gdXNlTWVtb0NhbGxiYWNrKGZ1bmN0aW9uIChrZXksIG9wZW4pIHtcbiAgICB2YXIgbmV3T3BlbktleXMgPSBtZXJnZWRPcGVuS2V5cy5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiBrICE9PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIG5ld09wZW5LZXlzLnB1c2goa2V5KTtcbiAgICB9IGVsc2UgaWYgKGludGVybmFsTW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICAgIC8vIFdlIG5lZWQgZmluZCBhbGwgcmVsYXRlZCBwb3B1cCB0byBjbG9zZVxuICAgICAgdmFyIHN1YlBhdGhLZXlzID0gZ2V0U3ViUGF0aEtleXMoa2V5KTtcbiAgICAgIG5ld09wZW5LZXlzID0gbmV3T3BlbktleXMuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldHVybiAhc3ViUGF0aEtleXMuaGFzKGspO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaXNFcXVhbChtZXJnZWRPcGVuS2V5cywgbmV3T3BlbktleXMsIHRydWUpKSB7XG4gICAgICB0cmlnZ2VyT3BlbktleXMobmV3T3BlbktleXMsIHRydWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gQWNjZXNzaWJpbGl0eSA9PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3BlbiA9IGZ1bmN0aW9uIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3BlbihrZXksIG9wZW4pIHtcbiAgICB2YXIgbmV4dE9wZW4gPSBvcGVuICE9PSBudWxsICYmIG9wZW4gIT09IHZvaWQgMCA/IG9wZW4gOiAhbWVyZ2VkT3BlbktleXMuaW5jbHVkZXMoa2V5KTtcbiAgICBvbkludGVybmFsT3BlbkNoYW5nZShrZXksIG5leHRPcGVuKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxLZXlEb3duID0gdXNlQWNjZXNzaWJpbGl0eShpbnRlcm5hbE1vZGUsIG1lcmdlZEFjdGl2ZUtleSwgaXNSdGwsIHV1aWQsIGNvbnRhaW5lclJlZiwgZ2V0S2V5cywgZ2V0S2V5UGF0aCwgc2V0TWVyZ2VkQWN0aXZlS2V5LCB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4sIG9uS2V5RG93bik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRNb3VudGVkKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQ29udGV4dCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHByaXZhdGVDb250ZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9pbnRlcm5hbFJlbmRlck1lbnVJdGVtOiBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSxcbiAgICAgIF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtOiBfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbVxuICAgIH07XG4gIH0sIFtfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSwgX2ludGVybmFsUmVuZGVyU3ViTWVudUl0ZW1dKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vID4+Pj4+IENoaWxkcmVuXG4gIHZhciB3cmFwcGVkQ2hpbGRMaXN0ID0gaW50ZXJuYWxNb2RlICE9PSAnaG9yaXpvbnRhbCcgfHwgZGlzYWJsZWRPdmVyZmxvdyA/IGNoaWxkTGlzdCA6XG4gIC8vIE5lZWQgd3JhcCBmb3Igb3ZlcmZsb3cgZHJvcGRvd24gdGhhdCBkbyBub3QgcmVzcG9uc2UgZm9yIG9wZW5cbiAgY2hpbGRMaXN0Lm1hcChmdW5jdGlvbiAoY2hpbGQsIGluZGV4KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIEFsd2F5cyB3cmFwIHByb3ZpZGVyIHRvIGF2b2lkIHN1YiBub2RlIHJlLW1vdW50XG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgIG92ZXJmbG93RGlzYWJsZWQ6IGluZGV4ID4gbGFzdFZpc2libGVJbmRleFxuICAgICAgfSwgY2hpbGQpXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gPj4+Pj4gQ29udGFpbmVyXG4gIHZhciBjb250YWluZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdmVyZmxvdywgX2V4dGVuZHMoe1xuICAgIGlkOiBpZCxcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICBwcmVmaXhDbHM6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb3ZlcmZsb3dcIiksXG4gICAgY29tcG9uZW50OiBcInVsXCIsXG4gICAgaXRlbUNvbXBvbmVudDogTWVudUl0ZW0sXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHByZWZpeENscywgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1yb290XCIpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQoaW50ZXJuYWxNb2RlKSwgY2xhc3NOYW1lLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWlubGluZS1jb2xsYXBzZWRcIiksIGludGVybmFsSW5saW5lQ29sbGFwc2VkKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ydGxcIiksIGlzUnRsKSwgcm9vdENsYXNzTmFtZSksXG4gICAgZGlyOiBkaXJlY3Rpb24sXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIHJvbGU6IFwibWVudVwiLFxuICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICBkYXRhOiB3cmFwcGVkQ2hpbGRMaXN0LFxuICAgIHJlbmRlclJhd0l0ZW06IGZ1bmN0aW9uIHJlbmRlclJhd0l0ZW0obm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcbiAgICByZW5kZXJSYXdSZXN0OiBmdW5jdGlvbiByZW5kZXJSYXdSZXN0KG9taXRJdGVtcykge1xuICAgICAgLy8gV2UgdXNlIG9yaWdpbiBsaXN0IHNpbmNlIHdyYXBwZWQgbGlzdCB1c2UgY29udGV4dCB0byBwcmV2ZW50IG9wZW5cbiAgICAgIHZhciBsZW4gPSBvbWl0SXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIG9yaWdpbk9taXRJdGVtcyA9IGxlbiA/IGNoaWxkTGlzdC5zbGljZSgtbGVuKSA6IG51bGw7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3ViTWVudSwge1xuICAgICAgICBldmVudEtleTogT1ZFUkZMT1dfS0VZLFxuICAgICAgICB0aXRsZTogb3ZlcmZsb3dlZEluZGljYXRvcixcbiAgICAgICAgZGlzYWJsZWQ6IGFsbFZpc2libGUsXG4gICAgICAgIGludGVybmFsUG9wdXBDbG9zZTogbGVuID09PSAwLFxuICAgICAgICBwb3B1cENsYXNzTmFtZTogb3ZlcmZsb3dlZEluZGljYXRvclBvcHVwQ2xhc3NOYW1lXG4gICAgICB9LCBvcmlnaW5PbWl0SXRlbXMpO1xuICAgIH0sXG4gICAgbWF4Q291bnQ6IGludGVybmFsTW9kZSAhPT0gJ2hvcml6b250YWwnIHx8IGRpc2FibGVkT3ZlcmZsb3cgPyBPdmVyZmxvdy5JTlZBTElEQVRFIDogT3ZlcmZsb3cuUkVTUE9OU0lWRSxcbiAgICBzc3I6IFwiZnVsbFwiLFxuICAgIFwiZGF0YS1tZW51LWxpc3RcIjogdHJ1ZSxcbiAgICBvblZpc2libGVDaGFuZ2U6IGZ1bmN0aW9uIG9uVmlzaWJsZUNoYW5nZShuZXdMYXN0SW5kZXgpIHtcbiAgICAgIHNldExhc3RWaXNpYmxlSW5kZXgobmV3TGFzdEluZGV4KTtcbiAgICB9LFxuICAgIG9uS2V5RG93bjogb25JbnRlcm5hbEtleURvd25cbiAgfSwgcmVzdFByb3BzKSk7XG5cbiAgLy8gPj4+Pj4gUmVuZGVyXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcml2YXRlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwcml2YXRlQ29udGV4dFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJZENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdXVpZFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dFByb3ZpZGVyLCB7XG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcm9vdENsYXNzTmFtZTogcm9vdENsYXNzTmFtZSxcbiAgICBtb2RlOiBpbnRlcm5hbE1vZGUsXG4gICAgb3BlbktleXM6IG1lcmdlZE9wZW5LZXlzLFxuICAgIHJ0bDogaXNSdGxcbiAgICAvLyBEaXNhYmxlZFxuICAgICxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAvLyBNb3Rpb25cbiAgICAsXG4gICAgbW90aW9uOiBtb3VudGVkID8gbW90aW9uIDogbnVsbCxcbiAgICBkZWZhdWx0TW90aW9uczogbW91bnRlZCA/IGRlZmF1bHRNb3Rpb25zIDogbnVsbFxuICAgIC8vIEFjdGl2ZVxuICAgICxcbiAgICBhY3RpdmVLZXk6IG1lcmdlZEFjdGl2ZUtleSxcbiAgICBvbkFjdGl2ZTogb25BY3RpdmUsXG4gICAgb25JbmFjdGl2ZTogb25JbmFjdGl2ZVxuICAgIC8vIFNlbGVjdGlvblxuICAgICxcbiAgICBzZWxlY3RlZEtleXM6IG1lcmdlZFNlbGVjdEtleXNcbiAgICAvLyBMZXZlbFxuICAgICxcbiAgICBpbmxpbmVJbmRlbnQ6IGlubGluZUluZGVudFxuICAgIC8vIFBvcHVwXG4gICAgLFxuICAgIHN1Yk1lbnVPcGVuRGVsYXk6IHN1Yk1lbnVPcGVuRGVsYXksXG4gICAgc3ViTWVudUNsb3NlRGVsYXk6IHN1Yk1lbnVDbG9zZURlbGF5LFxuICAgIGZvcmNlU3ViTWVudVJlbmRlcjogZm9yY2VTdWJNZW51UmVuZGVyLFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzOiBidWlsdGluUGxhY2VtZW50cyxcbiAgICB0cmlnZ2VyU3ViTWVudUFjdGlvbjogdHJpZ2dlclN1Yk1lbnVBY3Rpb24sXG4gICAgZ2V0UG9wdXBDb250YWluZXI6IGdldFBvcHVwQ29udGFpbmVyXG4gICAgLy8gSWNvblxuICAgICxcbiAgICBpdGVtSWNvbjogaXRlbUljb24sXG4gICAgZXhwYW5kSWNvbjogZXhwYW5kSWNvblxuICAgIC8vIEV2ZW50c1xuICAgICxcbiAgICBvbkl0ZW1DbGljazogb25JbnRlcm5hbENsaWNrLFxuICAgIG9uT3BlbkNoYW5nZTogb25JbnRlcm5hbE9wZW5DaGFuZ2VcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGF0aFVzZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHBhdGhVc2VyQ29udGV4dFxuICB9LCBjb250YWluZXIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgIH0sXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhdGhSZWdpc3RlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcmVnaXN0ZXJQYXRoQ29udGV4dFxuICB9LCBtZWFzdXJlQ2hpbGRMaXN0KSkpKSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IE1lbnU7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9jcmVhdGVTdXBlciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXJcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcImF0dHJpYnV0ZVwiLCBcImVsZW1lbnRSZWZcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcImV2ZW50S2V5XCIsIFwid2FybktleVwiLCBcImRpc2FibGVkXCIsIFwiaXRlbUljb25cIiwgXCJjaGlsZHJlblwiLCBcInJvbGVcIiwgXCJvbk1vdXNlRW50ZXJcIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbkNsaWNrXCIsIFwib25LZXlEb3duXCIsIFwib25Gb2N1c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcImFjdGl2ZVwiXTtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IE92ZXJmbG93IGZyb20gJ3JjLW92ZXJmbG93JztcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCBvbWl0IGZyb20gXCJyYy11dGlsL2VzL29taXRcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VSZWYgfSBmcm9tIFwicmMtdXRpbC9lcy9yZWZcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbnVJZCB9IGZyb20gXCIuL2NvbnRleHQvSWRDb250ZXh0XCI7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUZ1bGxQYXRoLCB1c2VNZWFzdXJlIH0gZnJvbSBcIi4vY29udGV4dC9QYXRoQ29udGV4dFwiO1xuaW1wb3J0IFByaXZhdGVDb250ZXh0IGZyb20gXCIuL2NvbnRleHQvUHJpdmF0ZUNvbnRleHRcIjtcbmltcG9ydCB1c2VBY3RpdmUgZnJvbSBcIi4vaG9va3MvdXNlQWN0aXZlXCI7XG5pbXBvcnQgdXNlRGlyZWN0aW9uU3R5bGUgZnJvbSBcIi4vaG9va3MvdXNlRGlyZWN0aW9uU3R5bGVcIjtcbmltcG9ydCBJY29uIGZyb20gXCIuL0ljb25cIjtcbmltcG9ydCB7IHdhcm5JdGVtUHJvcCB9IGZyb20gXCIuL3V0aWxzL3dhcm5VdGlsXCI7XG4vLyBTaW5jZSBNZW51IGV2ZW50IHByb3ZpZGUgdGhlIGBpbmZvLml0ZW1gIHdoaWNoIHBvaW50IHRvIHRoZSBNZW51SXRlbSBub2RlIGluc3RhbmNlLlxuLy8gV2UgaGF2ZSB0byB1c2UgY2xhc3MgY29tcG9uZW50IGhlcmUuXG4vLyBUaGlzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gZG9jICYgYXBpIGluIGZ1dHVyZS5cbnZhciBMZWdhY3lNZW51SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTGVnYWN5TWVudUl0ZW0sIF9SZWFjdCRDb21wb25lbnQpO1xuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKExlZ2FjeU1lbnVJdGVtKTtcbiAgZnVuY3Rpb24gTGVnYWN5TWVudUl0ZW0oKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExlZ2FjeU1lbnVJdGVtKTtcbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKExlZ2FjeU1lbnVJdGVtLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgYXR0cmlidXRlID0gX3RoaXMkcHJvcHMuYXR0cmlidXRlLFxuICAgICAgICBlbGVtZW50UmVmID0gX3RoaXMkcHJvcHMuZWxlbWVudFJlZixcbiAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICAvLyBIZXJlIHRoZSBwcm9wcyBhcmUgZXZlbnR1YWxseSBwYXNzZWQgdG8gdGhlIERPTSBlbGVtZW50LlxuICAgICAgLy8gUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzLlxuICAgICAgLy8gVGhlcmVmb3JlLCByZW1vdmUgdGhlIHByb3BzIHRoYXQgaXMgbm90IHVzZWQgaGVyZS5cbiAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9pc3N1ZXMvNDEzOTVcbiAgICAgIHZhciBwYXNzZWRQcm9wcyA9IG9taXQocmVzdFByb3BzLCBbJ2V2ZW50S2V5JywgJ3BvcHVwQ2xhc3NOYW1lJywgJ3BvcHVwT2Zmc2V0JywgJ29uVGl0bGVDbGljayddKTtcbiAgICAgIHdhcm5pbmcoIWF0dHJpYnV0ZSwgJ2BhdHRyaWJ1dGVgIG9mIE1lbnUuSXRlbSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgcGFzcyBhdHRyaWJ1dGUgZGlyZWN0bHkuJyk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT3ZlcmZsb3cuSXRlbSwgX2V4dGVuZHMoe30sIGF0dHJpYnV0ZSwge1xuICAgICAgICB0aXRsZTogdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJyA/IHRpdGxlIDogdW5kZWZpbmVkXG4gICAgICB9LCBwYXNzZWRQcm9wcywge1xuICAgICAgICByZWY6IGVsZW1lbnRSZWZcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIExlZ2FjeU1lbnVJdGVtO1xufShSZWFjdC5Db21wb25lbnQpO1xuLyoqXG4gKiBSZWFsIE1lbnUgSXRlbSBjb21wb25lbnRcbiAqL1xudmFyIEludGVybmFsTWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICB3YXJuS2V5ID0gcHJvcHMud2FybktleSxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGl0ZW1JY29uID0gcHJvcHMuaXRlbUljb24sXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICByb2xlID0gcHJvcHMucm9sZSxcbiAgICBvbk1vdXNlRW50ZXIgPSBwcm9wcy5vbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlID0gcHJvcHMub25Nb3VzZUxlYXZlLFxuICAgIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrLFxuICAgIG9uS2V5RG93biA9IHByb3BzLm9uS2V5RG93bixcbiAgICBvbkZvY3VzID0gcHJvcHMub25Gb2N1cyxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZDIpO1xuICB2YXIgZG9tRGF0YUlkID0gdXNlTWVudUlkKGV2ZW50S2V5KTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIG9uSXRlbUNsaWNrID0gX1JlYWN0JHVzZUNvbnRleHQub25JdGVtQ2xpY2ssXG4gICAgY29udGV4dERpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQuZGlzYWJsZWQsXG4gICAgb3ZlcmZsb3dEaXNhYmxlZCA9IF9SZWFjdCR1c2VDb250ZXh0Lm92ZXJmbG93RGlzYWJsZWQsXG4gICAgY29udGV4dEl0ZW1JY29uID0gX1JlYWN0JHVzZUNvbnRleHQuaXRlbUljb24sXG4gICAgc2VsZWN0ZWRLZXlzID0gX1JlYWN0JHVzZUNvbnRleHQuc2VsZWN0ZWRLZXlzLFxuICAgIG9uQWN0aXZlID0gX1JlYWN0JHVzZUNvbnRleHQub25BY3RpdmU7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dDIgPSBSZWFjdC51c2VDb250ZXh0KFByaXZhdGVDb250ZXh0KSxcbiAgICBfaW50ZXJuYWxSZW5kZXJNZW51SXRlbSA9IF9SZWFjdCR1c2VDb250ZXh0Mi5faW50ZXJuYWxSZW5kZXJNZW51SXRlbTtcbiAgdmFyIGl0ZW1DbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWl0ZW1cIik7XG4gIHZhciBsZWdhY3lNZW51SXRlbVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgZWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgbWVyZ2VkRGlzYWJsZWQgPSBjb250ZXh0RGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBtZXJnZWRFbGVSZWYgPSB1c2VDb21wb3NlUmVmKHJlZiwgZWxlbWVudFJlZik7XG4gIHZhciBjb25uZWN0ZWRLZXlzID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFdhcm4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybktleSkge1xuICAgIHdhcm5pbmcoZmFsc2UsICdNZW51SXRlbSBzaG91bGQgbm90IGxlYXZlIHVuZGVmaW5lZCBga2V5YC4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEluZm8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldEV2ZW50SW5mbyA9IGZ1bmN0aW9uIGdldEV2ZW50SW5mbyhlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAvLyBOb3RlOiBGb3IgbGVnYWN5IGNvZGUgaXMgcmV2ZXJzZWQgd2hpY2ggbm90IGxpa2Ugb3RoZXIgYW50ZCBjb21wb25lbnRcbiAgICAgIGtleVBhdGg6IF90b0NvbnN1bWFibGVBcnJheShjb25uZWN0ZWRLZXlzKS5yZXZlcnNlKCksXG4gICAgICBpdGVtOiBsZWdhY3lNZW51SXRlbVJlZi5jdXJyZW50LFxuICAgICAgZG9tRXZlbnQ6IGVcbiAgICB9O1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEljb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZEl0ZW1JY29uID0gaXRlbUljb24gfHwgY29udGV4dEl0ZW1JY29uO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VBY3RpdmUgPSB1c2VBY3RpdmUoZXZlbnRLZXksIG1lcmdlZERpc2FibGVkLCBvbk1vdXNlRW50ZXIsIG9uTW91c2VMZWF2ZSksXG4gICAgYWN0aXZlID0gX3VzZUFjdGl2ZS5hY3RpdmUsXG4gICAgYWN0aXZlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3VzZUFjdGl2ZSwgX2V4Y2x1ZGVkMyk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTZWxlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZEtleXMuaW5jbHVkZXMoZXZlbnRLZXkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBEaXJlY3Rpb25TdHlsZSA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGRpcmVjdGlvblN0eWxlID0gdXNlRGlyZWN0aW9uU3R5bGUoY29ubmVjdGVkS2V5cy5sZW5ndGgpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRXZlbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSW50ZXJuYWxDbGljayA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDbGljayhlKSB7XG4gICAgaWYgKG1lcmdlZERpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpbmZvID0gZ2V0RXZlbnRJbmZvKGUpO1xuICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwIHx8IG9uQ2xpY2sod2Fybkl0ZW1Qcm9wKGluZm8pKTtcbiAgICBvbkl0ZW1DbGljayhpbmZvKTtcbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxLZXlEb3duID0gZnVuY3Rpb24gb25JbnRlcm5hbEtleURvd24oZSkge1xuICAgIG9uS2V5RG93biA9PT0gbnVsbCB8fCBvbktleURvd24gPT09IHZvaWQgMCB8fCBvbktleURvd24oZSk7XG4gICAgaWYgKGUud2hpY2ggPT09IEtleUNvZGUuRU5URVIpIHtcbiAgICAgIHZhciBpbmZvID0gZ2V0RXZlbnRJbmZvKGUpO1xuXG4gICAgICAvLyBMZWdhY3kuIEtleSB3aWxsIGFsc28gdHJpZ2dlciBjbGljayBldmVudFxuICAgICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgfHwgb25DbGljayh3YXJuSXRlbVByb3AoaW5mbykpO1xuICAgICAgb25JdGVtQ2xpY2soaW5mbyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBhY2Nlc3NpYmlsaXR5LiBIZWxwZXIgd2lsbCBmb2N1cyBlbGVtZW50IHdpdGhvdXQga2V5IGJvYXJkLlxuICAgKiBXZSBzaG91bGQgbWFudWFsbHkgdHJpZ2dlciBhbiBhY3RpdmVcbiAgICovXG4gIHZhciBvbkludGVybmFsRm9jdXMgPSBmdW5jdGlvbiBvbkludGVybmFsRm9jdXMoZSkge1xuICAgIG9uQWN0aXZlKGV2ZW50S2V5KTtcbiAgICBvbkZvY3VzID09PSBudWxsIHx8IG9uRm9jdXMgPT09IHZvaWQgMCB8fCBvbkZvY3VzKGUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9wdGlvblJvbGVQcm9wcyA9IHt9O1xuICBpZiAocHJvcHMucm9sZSA9PT0gJ29wdGlvbicpIHtcbiAgICBvcHRpb25Sb2xlUHJvcHNbJ2FyaWEtc2VsZWN0ZWQnXSA9IHNlbGVjdGVkO1xuICB9XG4gIHZhciByZW5kZXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGVnYWN5TWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICByZWY6IGxlZ2FjeU1lbnVJdGVtUmVmLFxuICAgIGVsZW1lbnRSZWY6IG1lcmdlZEVsZVJlZixcbiAgICByb2xlOiByb2xlID09PSBudWxsID8gJ25vbmUnIDogcm9sZSB8fCAnbWVudWl0ZW0nLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IG51bGwgOiAtMSxcbiAgICBcImRhdGEtbWVudS1pZFwiOiBvdmVyZmxvd0Rpc2FibGVkICYmIGRvbURhdGFJZCA/IG51bGwgOiBkb21EYXRhSWRcbiAgfSwgb21pdChyZXN0UHJvcHMsIFsnZXh0cmEnXSksIGFjdGl2ZVByb3BzLCBvcHRpb25Sb2xlUHJvcHMsIHtcbiAgICBjb21wb25lbnQ6IFwibGlcIixcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQsXG4gICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGlyZWN0aW9uU3R5bGUpLCBzdHlsZSksXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGl0ZW1DbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChpdGVtQ2xzLCBcIi1hY3RpdmVcIiksIGFjdGl2ZSksIFwiXCIuY29uY2F0KGl0ZW1DbHMsIFwiLXNlbGVjdGVkXCIpLCBzZWxlY3RlZCksIFwiXCIuY29uY2F0KGl0ZW1DbHMsIFwiLWRpc2FibGVkXCIpLCBtZXJnZWREaXNhYmxlZCksIGNsYXNzTmFtZSksXG4gICAgb25DbGljazogb25JbnRlcm5hbENsaWNrLFxuICAgIG9uS2V5RG93bjogb25JbnRlcm5hbEtleURvd24sXG4gICAgb25Gb2N1czogb25JbnRlcm5hbEZvY3VzXG4gIH0pLCBjaGlsZHJlbiwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkXG4gICAgfSksXG4gICAgaWNvbjogbWVyZ2VkSXRlbUljb25cbiAgfSkpO1xuICBpZiAoX2ludGVybmFsUmVuZGVyTWVudUl0ZW0pIHtcbiAgICByZW5kZXJOb2RlID0gX2ludGVybmFsUmVuZGVyTWVudUl0ZW0ocmVuZGVyTm9kZSwgcHJvcHMsIHtcbiAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZW5kZXJOb2RlO1xufSk7XG5mdW5jdGlvbiBNZW51SXRlbShwcm9wcywgcmVmKSB7XG4gIHZhciBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFJlY29yZCBLZXlQYXRoID09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZWFzdXJlID0gdXNlTWVhc3VyZSgpO1xuICB2YXIgY29ubmVjdGVkS2V5UGF0aCA9IHVzZUZ1bGxQYXRoKGV2ZW50S2V5KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWVhc3VyZSkge1xuICAgICAgbWVhc3VyZS5yZWdpc3RlclBhdGgoZXZlbnRLZXksIGNvbm5lY3RlZEtleVBhdGgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWVhc3VyZS51bnJlZ2lzdGVyUGF0aChldmVudEtleSwgY29ubmVjdGVkS2V5UGF0aCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2Nvbm5lY3RlZEtleVBhdGhdKTtcbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbE1lbnVJdGVtLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICByZWY6IHJlZlxuICB9KSk7XG59XG5leHBvcnQgZGVmYXVsdCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihNZW51SXRlbSk7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInRpdGxlXCIsIFwiZXZlbnRLZXlcIiwgXCJjaGlsZHJlblwiXTtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IG9taXQgZnJvbSBcInJjLXV0aWwvZXMvb21pdFwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VGdWxsUGF0aCwgdXNlTWVhc3VyZSB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCB7IHBhcnNlQ2hpbGRyZW4gfSBmcm9tIFwiLi91dGlscy9jb21tb25VdGlsXCI7XG52YXIgSW50ZXJuYWxNZW51SXRlbUdyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICB0aXRsZSA9IHByb3BzLnRpdGxlLFxuICAgIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscztcbiAgdmFyIGdyb3VwUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pdGVtLWdyb3VwXCIpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcmVzZW50YXRpb25cIlxuICB9LCByZXN0UHJvcHMsIHtcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGdyb3VwUHJlZml4Q2xzLCBjbGFzc05hbWUpXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcm9sZTogXCJwcmVzZW50YXRpb25cIixcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGdyb3VwUHJlZml4Q2xzLCBcIi10aXRsZVwiKSxcbiAgICB0aXRsZTogdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJyA/IHRpdGxlIDogdW5kZWZpbmVkXG4gIH0sIHRpdGxlKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7XG4gICAgcm9sZTogXCJncm91cFwiLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoZ3JvdXBQcmVmaXhDbHMsIFwiLWxpc3RcIilcbiAgfSwgY2hpbGRyZW4pKTtcbn0pO1xudmFyIE1lbnVJdGVtR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgZXZlbnRLZXkgPSBwcm9wcy5ldmVudEtleSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICB2YXIgY29ubmVjdGVkS2V5UGF0aCA9IHVzZUZ1bGxQYXRoKGV2ZW50S2V5KTtcbiAgdmFyIGNoaWxkTGlzdCA9IHBhcnNlQ2hpbGRyZW4oY2hpbGRyZW4sIGNvbm5lY3RlZEtleVBhdGgpO1xuICB2YXIgbWVhc3VyZSA9IHVzZU1lYXN1cmUoKTtcbiAgaWYgKG1lYXN1cmUpIHtcbiAgICByZXR1cm4gY2hpbGRMaXN0O1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbE1lbnVJdGVtR3JvdXAsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZlxuICB9LCBvbWl0KHByb3BzLCBbJ3dhcm5LZXknXSkpLCBjaGlsZExpc3QpO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBNZW51SXRlbUdyb3VwLmRpc3BsYXlOYW1lID0gJ01lbnVJdGVtR3JvdXAnO1xufVxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW1Hcm91cDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDU1NNb3Rpb24gZnJvbSAncmMtbW90aW9uJztcbmltcG9ydCB7IGdldE1vdGlvbiB9IGZyb20gXCIuLi91dGlscy9tb3Rpb25VdGlsXCI7XG5pbXBvcnQgTWVudUNvbnRleHRQcm92aWRlciwgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5pbXBvcnQgU3ViTWVudUxpc3QgZnJvbSBcIi4vU3ViTWVudUxpc3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIElubGluZVN1Yk1lbnVMaXN0KF9yZWYpIHtcbiAgdmFyIGlkID0gX3JlZi5pZCxcbiAgICBvcGVuID0gX3JlZi5vcGVuLFxuICAgIGtleVBhdGggPSBfcmVmLmtleVBhdGgsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgZml4ZWRNb2RlID0gJ2lubGluZSc7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscyxcbiAgICBmb3JjZVN1Yk1lbnVSZW5kZXIgPSBfUmVhY3QkdXNlQ29udGV4dC5mb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgbW90aW9uID0gX1JlYWN0JHVzZUNvbnRleHQubW90aW9uLFxuICAgIGRlZmF1bHRNb3Rpb25zID0gX1JlYWN0JHVzZUNvbnRleHQuZGVmYXVsdE1vdGlvbnMsXG4gICAgbW9kZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vZGU7XG5cbiAgLy8gQWx3YXlzIHVzZSBsYXRlc3QgbW9kZSBjaGVja1xuICB2YXIgc2FtZU1vZGVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBzYW1lTW9kZVJlZi5jdXJyZW50ID0gbW9kZSA9PT0gZml4ZWRNb2RlO1xuXG4gIC8vIFdlIHJlY29yZCBgZGVzdHJveWAgbWFyayBoZXJlIHNpbmNlIHdoZW4gbW9kZSBjaGFuZ2UgZnJvbSBgaW5saW5lYCB0byBvdGhlcnMuXG4gIC8vIFRoZSBpbmxpbmUgbGlzdCBzaG91bGQgcmVtb3ZlIHdoZW4gbW90aW9uIGVuZC5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKCFzYW1lTW9kZVJlZi5jdXJyZW50KSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBkZXN0cm95ID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICBzZXREZXN0cm95ID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIG1lcmdlZE9wZW4gPSBzYW1lTW9kZVJlZi5jdXJyZW50ID8gb3BlbiA6IGZhbHNlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFZmZlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJlc2V0IGRlc3Ryb3kgc3RhdGUgd2hlbiBtb2RlIGNoYW5nZSBiYWNrXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNhbWVNb2RlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNldERlc3Ryb3koZmFsc2UpO1xuICAgIH1cbiAgfSwgW21vZGVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkTW90aW9uID0gX29iamVjdFNwcmVhZCh7fSwgZ2V0TW90aW9uKGZpeGVkTW9kZSwgbW90aW9uLCBkZWZhdWx0TW90aW9ucykpO1xuXG4gIC8vIE5vIG5lZWQgYXBwZWFyIHNpbmNlIG5lc3QgaW5saW5lQ29sbGFwc2UgY2hhbmdlZFxuICBpZiAoa2V5UGF0aC5sZW5ndGggPiAxKSB7XG4gICAgbWVyZ2VkTW90aW9uLm1vdGlvbkFwcGVhciA9IGZhbHNlO1xuICB9XG5cbiAgLy8gSGlkZSBpbmxpbmUgbGlzdCB3aGVuIG1vZGUgY2hhbmdlZCBhbmQgbW90aW9uIGVuZFxuICB2YXIgb3JpZ2luT25WaXNpYmxlQ2hhbmdlZCA9IG1lcmdlZE1vdGlvbi5vblZpc2libGVDaGFuZ2VkO1xuICBtZXJnZWRNb3Rpb24ub25WaXNpYmxlQ2hhbmdlZCA9IGZ1bmN0aW9uIChuZXdWaXNpYmxlKSB7XG4gICAgaWYgKCFzYW1lTW9kZVJlZi5jdXJyZW50ICYmICFuZXdWaXNpYmxlKSB7XG4gICAgICBzZXREZXN0cm95KHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ2luT25WaXNpYmxlQ2hhbmdlZCA9PT0gbnVsbCB8fCBvcmlnaW5PblZpc2libGVDaGFuZ2VkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5PblZpc2libGVDaGFuZ2VkKG5ld1Zpc2libGUpO1xuICB9O1xuICBpZiAoZGVzdHJveSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51Q29udGV4dFByb3ZpZGVyLCB7XG4gICAgbW9kZTogZml4ZWRNb2RlLFxuICAgIGxvY2tlZDogIXNhbWVNb2RlUmVmLmN1cnJlbnRcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTTW90aW9uLCBfZXh0ZW5kcyh7XG4gICAgdmlzaWJsZTogbWVyZ2VkT3BlblxuICB9LCBtZXJnZWRNb3Rpb24sIHtcbiAgICBmb3JjZVJlbmRlcjogZm9yY2VTdWJNZW51UmVuZGVyLFxuICAgIHJlbW92ZU9uTGVhdmU6IGZhbHNlLFxuICAgIGxlYXZlZENsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1oaWRkZW5cIilcbiAgfSksIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBtb3Rpb25DbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBtb3Rpb25TdHlsZSA9IF9yZWYyLnN0eWxlO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJNZW51TGlzdCwge1xuICAgICAgaWQ6IGlkLFxuICAgICAgY2xhc3NOYW1lOiBtb3Rpb25DbGFzc05hbWUsXG4gICAgICBzdHlsZTogbW90aW9uU3R5bGVcbiAgICB9LCBjaGlsZHJlbik7XG4gIH0pKTtcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnQHJjLWNvbXBvbmVudC90cmlnZ2VyJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCB7IE1lbnVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvTWVudUNvbnRleHRcIjtcbmltcG9ydCB7IHBsYWNlbWVudHMsIHBsYWNlbWVudHNSdGwgfSBmcm9tIFwiLi4vcGxhY2VtZW50c1wiO1xuaW1wb3J0IHsgZ2V0TW90aW9uIH0gZnJvbSBcIi4uL3V0aWxzL21vdGlvblV0aWxcIjtcbnZhciBwb3B1cFBsYWNlbWVudE1hcCA9IHtcbiAgaG9yaXpvbnRhbDogJ2JvdHRvbUxlZnQnLFxuICB2ZXJ0aWNhbDogJ3JpZ2h0VG9wJyxcbiAgJ3ZlcnRpY2FsLWxlZnQnOiAncmlnaHRUb3AnLFxuICAndmVydGljYWwtcmlnaHQnOiAnbGVmdFRvcCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb3B1cFRyaWdnZXIoX3JlZikge1xuICB2YXIgcHJlZml4Q2xzID0gX3JlZi5wcmVmaXhDbHMsXG4gICAgdmlzaWJsZSA9IF9yZWYudmlzaWJsZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgcG9wdXAgPSBfcmVmLnBvcHVwLFxuICAgIHBvcHVwU3R5bGUgPSBfcmVmLnBvcHVwU3R5bGUsXG4gICAgcG9wdXBDbGFzc05hbWUgPSBfcmVmLnBvcHVwQ2xhc3NOYW1lLFxuICAgIHBvcHVwT2Zmc2V0ID0gX3JlZi5wb3B1cE9mZnNldCxcbiAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgbW9kZSA9IF9yZWYubW9kZSxcbiAgICBvblZpc2libGVDaGFuZ2UgPSBfcmVmLm9uVmlzaWJsZUNoYW5nZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBfUmVhY3QkdXNlQ29udGV4dC5nZXRQb3B1cENvbnRhaW5lcixcbiAgICBydGwgPSBfUmVhY3QkdXNlQ29udGV4dC5ydGwsXG4gICAgc3ViTWVudU9wZW5EZWxheSA9IF9SZWFjdCR1c2VDb250ZXh0LnN1Yk1lbnVPcGVuRGVsYXksXG4gICAgc3ViTWVudUNsb3NlRGVsYXkgPSBfUmVhY3QkdXNlQ29udGV4dC5zdWJNZW51Q2xvc2VEZWxheSxcbiAgICBidWlsdGluUGxhY2VtZW50cyA9IF9SZWFjdCR1c2VDb250ZXh0LmJ1aWx0aW5QbGFjZW1lbnRzLFxuICAgIHRyaWdnZXJTdWJNZW51QWN0aW9uID0gX1JlYWN0JHVzZUNvbnRleHQudHJpZ2dlclN1Yk1lbnVBY3Rpb24sXG4gICAgZm9yY2VTdWJNZW51UmVuZGVyID0gX1JlYWN0JHVzZUNvbnRleHQuZm9yY2VTdWJNZW51UmVuZGVyLFxuICAgIHJvb3RDbGFzc05hbWUgPSBfUmVhY3QkdXNlQ29udGV4dC5yb290Q2xhc3NOYW1lLFxuICAgIG1vdGlvbiA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vdGlvbixcbiAgICBkZWZhdWx0TW90aW9ucyA9IF9SZWFjdCR1c2VDb250ZXh0LmRlZmF1bHRNb3Rpb25zO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGlubmVyVmlzaWJsZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0SW5uZXJWaXNpYmxlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIHBsYWNlbWVudCA9IHJ0bCA/IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcGxhY2VtZW50c1J0bCksIGJ1aWx0aW5QbGFjZW1lbnRzKSA6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcGxhY2VtZW50cyksIGJ1aWx0aW5QbGFjZW1lbnRzKTtcbiAgdmFyIHBvcHVwUGxhY2VtZW50ID0gcG9wdXBQbGFjZW1lbnRNYXBbbW9kZV07XG4gIHZhciB0YXJnZXRNb3Rpb24gPSBnZXRNb3Rpb24obW9kZSwgbW90aW9uLCBkZWZhdWx0TW90aW9ucyk7XG4gIHZhciB0YXJnZXRNb3Rpb25SZWYgPSBSZWFjdC51c2VSZWYodGFyZ2V0TW90aW9uKTtcbiAgaWYgKG1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgLyoqXG4gICAgICogUG9wdXBUcmlnZ2VyIGlzIG9ubHkgdXNlZCBmb3IgdmVydGljYWwgYW5kIGhvcml6b250YWwgdHlwZXMuXG4gICAgICogV2hlbiBjb2xsYXBzZWQgaXMgdW5mb2xkZWQsIHRoZSBpbmxpbmUgYW5pbWF0aW9uIHdpbGwgZGVzdHJveSB0aGUgdmVydGljYWwgYW5pbWF0aW9uLlxuICAgICAqL1xuICAgIHRhcmdldE1vdGlvblJlZi5jdXJyZW50ID0gdGFyZ2V0TW90aW9uO1xuICB9XG4gIHZhciBtZXJnZWRNb3Rpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRhcmdldE1vdGlvblJlZi5jdXJyZW50KSwge30sIHtcbiAgICBsZWF2ZWRDbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaGlkZGVuXCIpLFxuICAgIHJlbW92ZU9uTGVhdmU6IGZhbHNlLFxuICAgIG1vdGlvbkFwcGVhcjogdHJ1ZVxuICB9KTtcblxuICAvLyBEZWxheSB0byBjaGFuZ2UgdmlzaWJsZVxuICB2YXIgdmlzaWJsZVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZpc2libGVSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRJbm5lclZpc2libGUodmlzaWJsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJhZi5jYW5jZWwodmlzaWJsZVJlZi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbdmlzaWJsZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJpZ2dlciwge1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIHBvcHVwQ2xhc3NOYW1lOiBjbGFzc05hbWVzKFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcG9wdXBcIiksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ydGxcIiksIHJ0bCksIHBvcHVwQ2xhc3NOYW1lLCByb290Q2xhc3NOYW1lKSxcbiAgICBzdHJldGNoOiBtb2RlID09PSAnaG9yaXpvbnRhbCcgPyAnbWluV2lkdGgnIDogbnVsbCxcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogZ2V0UG9wdXBDb250YWluZXIsXG4gICAgYnVpbHRpblBsYWNlbWVudHM6IHBsYWNlbWVudCxcbiAgICBwb3B1cFBsYWNlbWVudDogcG9wdXBQbGFjZW1lbnQsXG4gICAgcG9wdXBWaXNpYmxlOiBpbm5lclZpc2libGUsXG4gICAgcG9wdXA6IHBvcHVwLFxuICAgIHBvcHVwU3R5bGU6IHBvcHVwU3R5bGUsXG4gICAgcG9wdXBBbGlnbjogcG9wdXBPZmZzZXQgJiYge1xuICAgICAgb2Zmc2V0OiBwb3B1cE9mZnNldFxuICAgIH0sXG4gICAgYWN0aW9uOiBkaXNhYmxlZCA/IFtdIDogW3RyaWdnZXJTdWJNZW51QWN0aW9uXSxcbiAgICBtb3VzZUVudGVyRGVsYXk6IHN1Yk1lbnVPcGVuRGVsYXksXG4gICAgbW91c2VMZWF2ZURlbGF5OiBzdWJNZW51Q2xvc2VEZWxheSxcbiAgICBvblBvcHVwVmlzaWJsZUNoYW5nZTogb25WaXNpYmxlQ2hhbmdlLFxuICAgIGZvcmNlUmVuZGVyOiBmb3JjZVN1Yk1lbnVSZW5kZXIsXG4gICAgcG9wdXBNb3Rpb246IG1lcmdlZE1vdGlvbixcbiAgICBmcmVzaDogdHJ1ZVxuICB9LCBjaGlsZHJlbik7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG52YXIgSW50ZXJuYWxTdWJNZW51TGlzdCA9IGZ1bmN0aW9uIEludGVybmFsU3ViTWVudUxpc3QoX3JlZiwgcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTWVudUNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscyxcbiAgICBtb2RlID0gX1JlYWN0JHVzZUNvbnRleHQubW9kZSxcbiAgICBydGwgPSBfUmVhY3QkdXNlQ29udGV4dC5ydGw7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocHJlZml4Q2xzLCBydGwgJiYgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ydGxcIiksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3ViXCIpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQobW9kZSA9PT0gJ2lubGluZScgPyAnaW5saW5lJyA6ICd2ZXJ0aWNhbCcpLCBjbGFzc05hbWUpLFxuICAgIHJvbGU6IFwibWVudVwiXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIFwiZGF0YS1tZW51LWxpc3RcIjogdHJ1ZSxcbiAgICByZWY6IHJlZlxuICB9KSwgY2hpbGRyZW4pO1xufTtcbnZhciBTdWJNZW51TGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKEludGVybmFsU3ViTWVudUxpc3QpO1xuU3ViTWVudUxpc3QuZGlzcGxheU5hbWUgPSAnU3ViTWVudUxpc3QnO1xuZXhwb3J0IGRlZmF1bHQgU3ViTWVudUxpc3Q7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcInRpdGxlXCIsIFwiZXZlbnRLZXlcIiwgXCJ3YXJuS2V5XCIsIFwiZGlzYWJsZWRcIiwgXCJpbnRlcm5hbFBvcHVwQ2xvc2VcIiwgXCJjaGlsZHJlblwiLCBcIml0ZW1JY29uXCIsIFwiZXhwYW5kSWNvblwiLCBcInBvcHVwQ2xhc3NOYW1lXCIsIFwicG9wdXBPZmZzZXRcIiwgXCJwb3B1cFN0eWxlXCIsIFwib25DbGlja1wiLCBcIm9uTW91c2VFbnRlclwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uVGl0bGVDbGlja1wiLCBcIm9uVGl0bGVNb3VzZUVudGVyXCIsIFwib25UaXRsZU1vdXNlTGVhdmVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhY3RpdmVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBPdmVyZmxvdyBmcm9tICdyYy1vdmVyZmxvdyc7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgU3ViTWVudUxpc3QgZnJvbSBcIi4vU3ViTWVudUxpc3RcIjtcbmltcG9ydCB7IHBhcnNlQ2hpbGRyZW4gfSBmcm9tIFwiLi4vdXRpbHMvY29tbW9uVXRpbFwiO1xuaW1wb3J0IE1lbnVDb250ZXh0UHJvdmlkZXIsIHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuaW1wb3J0IHVzZU1lbW9DYWxsYmFjayBmcm9tIFwiLi4vaG9va3MvdXNlTWVtb0NhbGxiYWNrXCI7XG5pbXBvcnQgUG9wdXBUcmlnZ2VyIGZyb20gXCIuL1BvcHVwVHJpZ2dlclwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB1c2VBY3RpdmUgZnJvbSBcIi4uL2hvb2tzL3VzZUFjdGl2ZVwiO1xuaW1wb3J0IHsgd2Fybkl0ZW1Qcm9wIH0gZnJvbSBcIi4uL3V0aWxzL3dhcm5VdGlsXCI7XG5pbXBvcnQgdXNlRGlyZWN0aW9uU3R5bGUgZnJvbSBcIi4uL2hvb2tzL3VzZURpcmVjdGlvblN0eWxlXCI7XG5pbXBvcnQgSW5saW5lU3ViTWVudUxpc3QgZnJvbSBcIi4vSW5saW5lU3ViTWVudUxpc3RcIjtcbmltcG9ydCB7IFBhdGhUcmFja2VyQ29udGV4dCwgUGF0aFVzZXJDb250ZXh0LCB1c2VGdWxsUGF0aCwgdXNlTWVhc3VyZSB9IGZyb20gXCIuLi9jb250ZXh0L1BhdGhDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VNZW51SWQgfSBmcm9tIFwiLi4vY29udGV4dC9JZENvbnRleHRcIjtcbmltcG9ydCBQcml2YXRlQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9Qcml2YXRlQ29udGV4dFwiO1xudmFyIEludGVybmFsU3ViTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICB0aXRsZSA9IHByb3BzLnRpdGxlLFxuICAgIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgd2FybktleSA9IHByb3BzLndhcm5LZXksXG4gICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBpbnRlcm5hbFBvcHVwQ2xvc2UgPSBwcm9wcy5pbnRlcm5hbFBvcHVwQ2xvc2UsXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpdGVtSWNvbiA9IHByb3BzLml0ZW1JY29uLFxuICAgIGV4cGFuZEljb24gPSBwcm9wcy5leHBhbmRJY29uLFxuICAgIHBvcHVwQ2xhc3NOYW1lID0gcHJvcHMucG9wdXBDbGFzc05hbWUsXG4gICAgcG9wdXBPZmZzZXQgPSBwcm9wcy5wb3B1cE9mZnNldCxcbiAgICBwb3B1cFN0eWxlID0gcHJvcHMucG9wdXBTdHlsZSxcbiAgICBvbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICBvbk1vdXNlRW50ZXIgPSBwcm9wcy5vbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlID0gcHJvcHMub25Nb3VzZUxlYXZlLFxuICAgIG9uVGl0bGVDbGljayA9IHByb3BzLm9uVGl0bGVDbGljayxcbiAgICBvblRpdGxlTW91c2VFbnRlciA9IHByb3BzLm9uVGl0bGVNb3VzZUVudGVyLFxuICAgIG9uVGl0bGVNb3VzZUxlYXZlID0gcHJvcHMub25UaXRsZU1vdXNlTGVhdmUsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgZG9tRGF0YUlkID0gdXNlTWVudUlkKGV2ZW50S2V5KTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIG1vZGUgPSBfUmVhY3QkdXNlQ29udGV4dC5tb2RlLFxuICAgIG9wZW5LZXlzID0gX1JlYWN0JHVzZUNvbnRleHQub3BlbktleXMsXG4gICAgY29udGV4dERpc2FibGVkID0gX1JlYWN0JHVzZUNvbnRleHQuZGlzYWJsZWQsXG4gICAgb3ZlcmZsb3dEaXNhYmxlZCA9IF9SZWFjdCR1c2VDb250ZXh0Lm92ZXJmbG93RGlzYWJsZWQsXG4gICAgYWN0aXZlS2V5ID0gX1JlYWN0JHVzZUNvbnRleHQuYWN0aXZlS2V5LFxuICAgIHNlbGVjdGVkS2V5cyA9IF9SZWFjdCR1c2VDb250ZXh0LnNlbGVjdGVkS2V5cyxcbiAgICBjb250ZXh0SXRlbUljb24gPSBfUmVhY3QkdXNlQ29udGV4dC5pdGVtSWNvbixcbiAgICBjb250ZXh0RXhwYW5kSWNvbiA9IF9SZWFjdCR1c2VDb250ZXh0LmV4cGFuZEljb24sXG4gICAgb25JdGVtQ2xpY2sgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkl0ZW1DbGljayxcbiAgICBvbk9wZW5DaGFuZ2UgPSBfUmVhY3QkdXNlQ29udGV4dC5vbk9wZW5DaGFuZ2UsXG4gICAgb25BY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkFjdGl2ZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0MiA9IFJlYWN0LnVzZUNvbnRleHQoUHJpdmF0ZUNvbnRleHQpLFxuICAgIF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtID0gX1JlYWN0JHVzZUNvbnRleHQyLl9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQzID0gUmVhY3QudXNlQ29udGV4dChQYXRoVXNlckNvbnRleHQpLFxuICAgIGlzU3ViUGF0aEtleSA9IF9SZWFjdCR1c2VDb250ZXh0My5pc1N1YlBhdGhLZXk7XG4gIHZhciBjb25uZWN0ZWRQYXRoID0gdXNlRnVsbFBhdGgoKTtcbiAgdmFyIHN1Yk1lbnVQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXN1Ym1lbnVcIik7XG4gIHZhciBtZXJnZWREaXNhYmxlZCA9IGNvbnRleHREaXNhYmxlZCB8fCBkaXNhYmxlZDtcbiAgdmFyIGVsZW1lbnRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIHBvcHVwUmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gV2FybiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuS2V5KSB7XG4gICAgd2FybmluZyhmYWxzZSwgJ1N1Yk1lbnUgc2hvdWxkIG5vdCBsZWF2ZSB1bmRlZmluZWQgYGtleWAuJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJY29uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRJdGVtSWNvbiA9IGl0ZW1JY29uICE9PSBudWxsICYmIGl0ZW1JY29uICE9PSB2b2lkIDAgPyBpdGVtSWNvbiA6IGNvbnRleHRJdGVtSWNvbjtcbiAgdmFyIG1lcmdlZEV4cGFuZEljb24gPSBleHBhbmRJY29uICE9PSBudWxsICYmIGV4cGFuZEljb24gIT09IHZvaWQgMCA/IGV4cGFuZEljb24gOiBjb250ZXh0RXhwYW5kSWNvbjtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBPcGVuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvcmlnaW5PcGVuID0gb3BlbktleXMuaW5jbHVkZXMoZXZlbnRLZXkpO1xuICB2YXIgb3BlbiA9ICFvdmVyZmxvd0Rpc2FibGVkICYmIG9yaWdpbk9wZW47XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTZWxlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY2hpbGRyZW5TZWxlY3RlZCA9IGlzU3ViUGF0aEtleShzZWxlY3RlZEtleXMsIGV2ZW50S2V5KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEFjdGl2ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlQWN0aXZlID0gdXNlQWN0aXZlKGV2ZW50S2V5LCBtZXJnZWREaXNhYmxlZCwgb25UaXRsZU1vdXNlRW50ZXIsIG9uVGl0bGVNb3VzZUxlYXZlKSxcbiAgICBhY3RpdmUgPSBfdXNlQWN0aXZlLmFjdGl2ZSxcbiAgICBhY3RpdmVQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdXNlQWN0aXZlLCBfZXhjbHVkZWQyKTtcblxuICAvLyBGYWxsYmFjayBvZiBhY3RpdmUgY2hlY2sgdG8gYXZvaWQgaG92ZXIgb24gbWVudSB0aXRsZSBvciBkaXNhYmxlZCBpdGVtXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgY2hpbGRyZW5BY3RpdmUgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldENoaWxkcmVuQWN0aXZlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIHRyaWdnZXJDaGlsZHJlbkFjdGl2ZSA9IGZ1bmN0aW9uIHRyaWdnZXJDaGlsZHJlbkFjdGl2ZShuZXdBY3RpdmUpIHtcbiAgICBpZiAoIW1lcmdlZERpc2FibGVkKSB7XG4gICAgICBzZXRDaGlsZHJlbkFjdGl2ZShuZXdBY3RpdmUpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uSW50ZXJuYWxNb3VzZUVudGVyID0gZnVuY3Rpb24gb25JbnRlcm5hbE1vdXNlRW50ZXIoZG9tRXZlbnQpIHtcbiAgICB0cmlnZ2VyQ2hpbGRyZW5BY3RpdmUodHJ1ZSk7XG4gICAgb25Nb3VzZUVudGVyID09PSBudWxsIHx8IG9uTW91c2VFbnRlciA9PT0gdm9pZCAwIHx8IG9uTW91c2VFbnRlcih7XG4gICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgZG9tRXZlbnQ6IGRvbUV2ZW50XG4gICAgfSk7XG4gIH07XG4gIHZhciBvbkludGVybmFsTW91c2VMZWF2ZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxNb3VzZUxlYXZlKGRvbUV2ZW50KSB7XG4gICAgdHJpZ2dlckNoaWxkcmVuQWN0aXZlKGZhbHNlKTtcbiAgICBvbk1vdXNlTGVhdmUgPT09IG51bGwgfHwgb25Nb3VzZUxlYXZlID09PSB2b2lkIDAgfHwgb25Nb3VzZUxlYXZlKHtcbiAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICBkb21FdmVudDogZG9tRXZlbnRcbiAgICB9KTtcbiAgfTtcbiAgdmFyIG1lcmdlZEFjdGl2ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIHJldHVybiBhY3RpdmU7XG4gICAgfVxuICAgIGlmIChtb2RlICE9PSAnaW5saW5lJykge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuQWN0aXZlIHx8IGlzU3ViUGF0aEtleShbYWN0aXZlS2V5XSwgZXZlbnRLZXkpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFttb2RlLCBhY3RpdmUsIGFjdGl2ZUtleSwgY2hpbGRyZW5BY3RpdmUsIGV2ZW50S2V5LCBpc1N1YlBhdGhLZXldKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBEaXJlY3Rpb25TdHlsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZGlyZWN0aW9uU3R5bGUgPSB1c2VEaXJlY3Rpb25TdHlsZShjb25uZWN0ZWRQYXRoLmxlbmd0aCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFdmVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4+IFRpdGxlIGNsaWNrXG4gIHZhciBvbkludGVybmFsVGl0bGVDbGljayA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxUaXRsZUNsaWNrKGUpIHtcbiAgICAvLyBTa2lwIGlmIGRpc2FibGVkXG4gICAgaWYgKG1lcmdlZERpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9uVGl0bGVDbGljayA9PT0gbnVsbCB8fCBvblRpdGxlQ2xpY2sgPT09IHZvaWQgMCB8fCBvblRpdGxlQ2xpY2soe1xuICAgICAga2V5OiBldmVudEtleSxcbiAgICAgIGRvbUV2ZW50OiBlXG4gICAgfSk7XG5cbiAgICAvLyBUcmlnZ2VyIG9wZW4gYnkgY2xpY2sgd2hlbiBtb2RlIGlzIGBpbmxpbmVgXG4gICAgaWYgKG1vZGUgPT09ICdpbmxpbmUnKSB7XG4gICAgICBvbk9wZW5DaGFuZ2UoZXZlbnRLZXksICFvcmlnaW5PcGVuKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPj4+PiBDb250ZXh0IGZvciBjaGlsZHJlbiBjbGlja1xuICB2YXIgb25NZXJnZWRJdGVtQ2xpY2sgPSB1c2VNZW1vQ2FsbGJhY2soZnVuY3Rpb24gKGluZm8pIHtcbiAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCB8fCBvbkNsaWNrKHdhcm5JdGVtUHJvcChpbmZvKSk7XG4gICAgb25JdGVtQ2xpY2soaW5mbyk7XG4gIH0pO1xuXG4gIC8vID4+Pj4+IFZpc2libGUgY2hhbmdlXG4gIHZhciBvblBvcHVwVmlzaWJsZUNoYW5nZSA9IGZ1bmN0aW9uIG9uUG9wdXBWaXNpYmxlQ2hhbmdlKG5ld1Zpc2libGUpIHtcbiAgICBpZiAobW9kZSAhPT0gJ2lubGluZScpIHtcbiAgICAgIG9uT3BlbkNoYW5nZShldmVudEtleSwgbmV3VmlzaWJsZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBhY2Nlc3NpYmlsaXR5LiBIZWxwZXIgd2lsbCBmb2N1cyBlbGVtZW50IHdpdGhvdXQga2V5IGJvYXJkLlxuICAgKiBXZSBzaG91bGQgbWFudWFsbHkgdHJpZ2dlciBhbiBhY3RpdmVcbiAgICovXG4gIHZhciBvbkludGVybmFsRm9jdXMgPSBmdW5jdGlvbiBvbkludGVybmFsRm9jdXMoKSB7XG4gICAgb25BY3RpdmUoZXZlbnRLZXkpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHBvcHVwSWQgPSBkb21EYXRhSWQgJiYgXCJcIi5jb25jYXQoZG9tRGF0YUlkLCBcIi1wb3B1cFwiKTtcbiAgdmFyIGV4cGFuZEljb25Ob2RlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICAgIGljb246IG1vZGUgIT09ICdob3Jpem9udGFsJyA/IG1lcmdlZEV4cGFuZEljb24gOiB1bmRlZmluZWQsXG4gICAgICBwcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgIGlzT3Blbjogb3BlbixcbiAgICAgICAgLy8gW0xlZ2FjeV0gTm90IHN1cmUgd2h5IG5lZWQgdGhpcyBtYXJrXG4gICAgICAgIGlzU3ViTWVudTogdHJ1ZVxuICAgICAgfSlcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1hcnJvd1wiKVxuICAgIH0pKTtcbiAgfSwgW21vZGUsIG1lcmdlZEV4cGFuZEljb24sIHByb3BzLCBvcGVuLCBzdWJNZW51UHJlZml4Q2xzXSk7XG5cbiAgLy8gPj4+Pj4gVGl0bGVcbiAgdmFyIHRpdGxlTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVpdGVtXCIsXG4gICAgc3R5bGU6IGRpcmVjdGlvblN0eWxlLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItdGl0bGVcIiksXG4gICAgdGFiSW5kZXg6IG1lcmdlZERpc2FibGVkID8gbnVsbCA6IC0xLFxuICAgIHJlZjogZWxlbWVudFJlZixcbiAgICB0aXRsZTogdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJyA/IHRpdGxlIDogbnVsbCxcbiAgICBcImRhdGEtbWVudS1pZFwiOiBvdmVyZmxvd0Rpc2FibGVkICYmIGRvbURhdGFJZCA/IG51bGwgOiBkb21EYXRhSWQsXG4gICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4sXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IHRydWUsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IHBvcHVwSWQsXG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IG1lcmdlZERpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uSW50ZXJuYWxUaXRsZUNsaWNrLFxuICAgIG9uRm9jdXM6IG9uSW50ZXJuYWxGb2N1c1xuICB9LCBhY3RpdmVQcm9wcyksIHRpdGxlLCBleHBhbmRJY29uTm9kZSk7XG5cbiAgLy8gQ2FjaGUgbW9kZSBpZiBpdCBjaGFuZ2UgdG8gYGlubGluZWAgd2hpY2ggZG8gbm90IGhhdmUgcG9wdXAgbW90aW9uXG4gIHZhciB0cmlnZ2VyTW9kZVJlZiA9IFJlYWN0LnVzZVJlZihtb2RlKTtcbiAgaWYgKG1vZGUgIT09ICdpbmxpbmUnICYmIGNvbm5lY3RlZFBhdGgubGVuZ3RoID4gMSkge1xuICAgIHRyaWdnZXJNb2RlUmVmLmN1cnJlbnQgPSAndmVydGljYWwnO1xuICB9IGVsc2Uge1xuICAgIHRyaWdnZXJNb2RlUmVmLmN1cnJlbnQgPSBtb2RlO1xuICB9XG4gIGlmICghb3ZlcmZsb3dEaXNhYmxlZCkge1xuICAgIHZhciB0cmlnZ2VyTW9kZSA9IHRyaWdnZXJNb2RlUmVmLmN1cnJlbnQ7XG5cbiAgICAvLyBTdGlsbCB3cmFwIHdpdGggVHJpZ2dlciBoZXJlIHNpbmNlIHdlIG5lZWQgYXZvaWQgcmVhY3QgcmUtbW91bnQgZG9tIG5vZGVcbiAgICAvLyBXaGljaCBtYWtlcyBtb3Rpb24gZmFpbGVkXG4gICAgdGl0bGVOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUG9wdXBUcmlnZ2VyLCB7XG4gICAgICBtb2RlOiB0cmlnZ2VyTW9kZSxcbiAgICAgIHByZWZpeENsczogc3ViTWVudVByZWZpeENscyxcbiAgICAgIHZpc2libGU6ICFpbnRlcm5hbFBvcHVwQ2xvc2UgJiYgb3BlbiAmJiBtb2RlICE9PSAnaW5saW5lJyxcbiAgICAgIHBvcHVwQ2xhc3NOYW1lOiBwb3B1cENsYXNzTmFtZSxcbiAgICAgIHBvcHVwT2Zmc2V0OiBwb3B1cE9mZnNldCxcbiAgICAgIHBvcHVwU3R5bGU6IHBvcHVwU3R5bGUsXG4gICAgICBwb3B1cDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHRQcm92aWRlclxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGUgb2YgaG9yaXpvbnRhbCBtb2RlXG4gICAgICAsIHtcbiAgICAgICAgbW9kZTogdHJpZ2dlck1vZGUgPT09ICdob3Jpem9udGFsJyA/ICd2ZXJ0aWNhbCcgOiB0cmlnZ2VyTW9kZVxuICAgICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3ViTWVudUxpc3QsIHtcbiAgICAgICAgaWQ6IHBvcHVwSWQsXG4gICAgICAgIHJlZjogcG9wdXBSZWZcbiAgICAgIH0sIGNoaWxkcmVuKSksXG4gICAgICBkaXNhYmxlZDogbWVyZ2VkRGlzYWJsZWQsXG4gICAgICBvblZpc2libGVDaGFuZ2U6IG9uUG9wdXBWaXNpYmxlQ2hhbmdlXG4gICAgfSwgdGl0bGVOb2RlKTtcbiAgfVxuXG4gIC8vID4+Pj4+IExpc3Qgbm9kZVxuICB2YXIgbGlzdE5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdmVyZmxvdy5JdGVtLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJub25lXCJcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgY29tcG9uZW50OiBcImxpXCIsXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhzdWJNZW51UHJlZml4Q2xzLCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1cIikuY29uY2F0KG1vZGUpLCBjbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItb3BlblwiKSwgb3BlbiksIFwiXCIuY29uY2F0KHN1Yk1lbnVQcmVmaXhDbHMsIFwiLWFjdGl2ZVwiKSwgbWVyZ2VkQWN0aXZlKSwgXCJcIi5jb25jYXQoc3ViTWVudVByZWZpeENscywgXCItc2VsZWN0ZWRcIiksIGNoaWxkcmVuU2VsZWN0ZWQpLCBcIlwiLmNvbmNhdChzdWJNZW51UHJlZml4Q2xzLCBcIi1kaXNhYmxlZFwiKSwgbWVyZ2VkRGlzYWJsZWQpKSxcbiAgICBvbk1vdXNlRW50ZXI6IG9uSW50ZXJuYWxNb3VzZUVudGVyLFxuICAgIG9uTW91c2VMZWF2ZTogb25JbnRlcm5hbE1vdXNlTGVhdmVcbiAgfSksIHRpdGxlTm9kZSwgIW92ZXJmbG93RGlzYWJsZWQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5saW5lU3ViTWVudUxpc3QsIHtcbiAgICBpZDogcG9wdXBJZCxcbiAgICBvcGVuOiBvcGVuLFxuICAgIGtleVBhdGg6IGNvbm5lY3RlZFBhdGhcbiAgfSwgY2hpbGRyZW4pKTtcbiAgaWYgKF9pbnRlcm5hbFJlbmRlclN1Yk1lbnVJdGVtKSB7XG4gICAgbGlzdE5vZGUgPSBfaW50ZXJuYWxSZW5kZXJTdWJNZW51SXRlbShsaXN0Tm9kZSwgcHJvcHMsIHtcbiAgICAgIHNlbGVjdGVkOiBjaGlsZHJlblNlbGVjdGVkLFxuICAgICAgYWN0aXZlOiBtZXJnZWRBY3RpdmUsXG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgZGlzYWJsZWQ6IG1lcmdlZERpc2FibGVkXG4gICAgfSk7XG4gIH1cblxuICAvLyA+Pj4+PiBSZW5kZXJcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVDb250ZXh0UHJvdmlkZXIsIHtcbiAgICBvbkl0ZW1DbGljazogb25NZXJnZWRJdGVtQ2xpY2ssXG4gICAgbW9kZTogbW9kZSA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6IG1vZGUsXG4gICAgaXRlbUljb246IG1lcmdlZEl0ZW1JY29uLFxuICAgIGV4cGFuZEljb246IG1lcmdlZEV4cGFuZEljb25cbiAgfSwgbGlzdE5vZGUpO1xufSk7XG52YXIgU3ViTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBldmVudEtleSA9IHByb3BzLmV2ZW50S2V5LFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gIHZhciBjb25uZWN0ZWRLZXlQYXRoID0gdXNlRnVsbFBhdGgoZXZlbnRLZXkpO1xuICB2YXIgY2hpbGRMaXN0ID0gcGFyc2VDaGlsZHJlbihjaGlsZHJlbiwgY29ubmVjdGVkS2V5UGF0aCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gUmVjb3JkIEtleVBhdGggPT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lYXN1cmUgPSB1c2VNZWFzdXJlKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1lYXN1cmUpIHtcbiAgICAgIG1lYXN1cmUucmVnaXN0ZXJQYXRoKGV2ZW50S2V5LCBjb25uZWN0ZWRLZXlQYXRoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1lYXN1cmUudW5yZWdpc3RlclBhdGgoZXZlbnRLZXksIGNvbm5lY3RlZEtleVBhdGgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtjb25uZWN0ZWRLZXlQYXRoXSk7XG4gIHZhciByZW5kZXJOb2RlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChtZWFzdXJlKSB7XG4gICAgcmVuZGVyTm9kZSA9IGNoaWxkTGlzdDtcbiAgfSBlbHNlIHtcbiAgICByZW5kZXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxTdWJNZW51LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSwgY2hpbGRMaXN0KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGF0aFRyYWNrZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbm5lY3RlZEtleVBhdGhcbiAgfSwgcmVuZGVyTm9kZSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFN1Yk1lbnUuZGlzcGxheU5hbWUgPSAnU3ViTWVudSc7XG59XG5leHBvcnQgZGVmYXVsdCBTdWJNZW51OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgSWRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudUlkKHV1aWQsIGV2ZW50S2V5KSB7XG4gIGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gXCJcIi5jb25jYXQodXVpZCwgXCItXCIpLmNvbmNhdChldmVudEtleSk7XG59XG5cbi8qKlxuICogR2V0IGBkYXRhLW1lbnUtaWRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZW51SWQoZXZlbnRLZXkpIHtcbiAgdmFyIGlkID0gUmVhY3QudXNlQ29udGV4dChJZENvbnRleHQpO1xuICByZXR1cm4gZ2V0TWVudUlkKGlkLCBldmVudEtleSk7XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJsb2NrZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWVtbyBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VNZW1vXCI7XG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwicmMtdXRpbC9lcy9pc0VxdWFsXCI7XG5leHBvcnQgdmFyIE1lbnVDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5mdW5jdGlvbiBtZXJnZVByb3BzKG9yaWdpbiwgdGFyZ2V0KSB7XG4gIHZhciBjbG9uZSA9IF9vYmplY3RTcHJlYWQoe30sIG9yaWdpbik7XG4gIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsb25lW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJbmhlcml0YWJsZUNvbnRleHRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgbG9ja2VkID0gX3JlZi5sb2NrZWQsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCk7XG4gIHZhciBpbmhlcml0YWJsZUNvbnRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbWVyZ2VQcm9wcyhjb250ZXh0LCByZXN0UHJvcHMpO1xuICB9LCBbY29udGV4dCwgcmVzdFByb3BzXSwgZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcbiAgICByZXR1cm4gIWxvY2tlZCAmJiAocHJldlswXSAhPT0gbmV4dFswXSB8fCAhaXNFcXVhbChwcmV2WzFdLCBuZXh0WzFdLCB0cnVlKSk7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaW5oZXJpdGFibGVDb250ZXh0XG4gIH0sIGNoaWxkcmVuKTtcbn0iLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIEVtcHR5TGlzdCA9IFtdO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggUmVnaXN0ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdmFyIFBhdGhSZWdpc3RlckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VNZWFzdXJlKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChQYXRoUmVnaXN0ZXJDb250ZXh0KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBQYXRoIFRyYWNrZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB2YXIgUGF0aFRyYWNrZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoRW1wdHlMaXN0KTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VGdWxsUGF0aChldmVudEtleSkge1xuICB2YXIgcGFyZW50S2V5UGF0aCA9IFJlYWN0LnVzZUNvbnRleHQoUGF0aFRyYWNrZXJDb250ZXh0KTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBldmVudEtleSAhPT0gdW5kZWZpbmVkID8gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShwYXJlbnRLZXlQYXRoKSwgW2V2ZW50S2V5XSkgOiBwYXJlbnRLZXlQYXRoO1xuICB9LCBbcGFyZW50S2V5UGF0aCwgZXZlbnRLZXldKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IFBhdGggVXNlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHZhciBQYXRoVXNlckNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgUHJpdmF0ZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5leHBvcnQgZGVmYXVsdCBQcml2YXRlQ29udGV4dDsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IHsgZ2V0Rm9jdXNOb2RlTGlzdCB9IGZyb20gXCJyYy11dGlsL2VzL0RvbS9mb2N1c1wiO1xuaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldE1lbnVJZCB9IGZyb20gXCIuLi9jb250ZXh0L0lkQ29udGV4dFwiO1xuLy8gZGVzdHJ1Y3QgdG8gcmVkdWNlIG1pbmlmeSBzaXplXG52YXIgTEVGVCA9IEtleUNvZGUuTEVGVCxcbiAgUklHSFQgPSBLZXlDb2RlLlJJR0hULFxuICBVUCA9IEtleUNvZGUuVVAsXG4gIERPV04gPSBLZXlDb2RlLkRPV04sXG4gIEVOVEVSID0gS2V5Q29kZS5FTlRFUixcbiAgRVNDID0gS2V5Q29kZS5FU0MsXG4gIEhPTUUgPSBLZXlDb2RlLkhPTUUsXG4gIEVORCA9IEtleUNvZGUuRU5EO1xudmFyIEFycm93S2V5cyA9IFtVUCwgRE9XTiwgTEVGVCwgUklHSFRdO1xuZnVuY3Rpb24gZ2V0T2Zmc2V0KG1vZGUsIGlzUm9vdExldmVsLCBpc1J0bCwgd2hpY2gpIHtcbiAgdmFyIF9vZmZzZXRzO1xuICB2YXIgcHJldiA9ICdwcmV2JztcbiAgdmFyIG5leHQgPSAnbmV4dCc7XG4gIHZhciBjaGlsZHJlbiA9ICdjaGlsZHJlbic7XG4gIHZhciBwYXJlbnQgPSAncGFyZW50JztcblxuICAvLyBJbmxpbmUgZW50ZXIgaXMgc3BlY2lhbCB0aGF0IHdlIHVzZSB1bmlxdWUgb3BlcmF0aW9uXG4gIGlmIChtb2RlID09PSAnaW5saW5lJyAmJiB3aGljaCA9PT0gRU5URVIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5saW5lVHJpZ2dlcjogdHJ1ZVxuICAgIH07XG4gIH1cbiAgdmFyIGlubGluZSA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFVQLCBwcmV2KSwgRE9XTiwgbmV4dCk7XG4gIHZhciBob3Jpem9udGFsID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBMRUZULCBpc1J0bCA/IG5leHQgOiBwcmV2KSwgUklHSFQsIGlzUnRsID8gcHJldiA6IG5leHQpLCBET1dOLCBjaGlsZHJlbiksIEVOVEVSLCBjaGlsZHJlbik7XG4gIHZhciB2ZXJ0aWNhbCA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBVUCwgcHJldiksIERPV04sIG5leHQpLCBFTlRFUiwgY2hpbGRyZW4pLCBFU0MsIHBhcmVudCksIExFRlQsIGlzUnRsID8gY2hpbGRyZW4gOiBwYXJlbnQpLCBSSUdIVCwgaXNSdGwgPyBwYXJlbnQgOiBjaGlsZHJlbik7XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIGlubGluZTogaW5saW5lLFxuICAgIGhvcml6b250YWw6IGhvcml6b250YWwsXG4gICAgdmVydGljYWw6IHZlcnRpY2FsLFxuICAgIGlubGluZVN1YjogaW5saW5lLFxuICAgIGhvcml6b250YWxTdWI6IHZlcnRpY2FsLFxuICAgIHZlcnRpY2FsU3ViOiB2ZXJ0aWNhbFxuICB9O1xuICB2YXIgdHlwZSA9IChfb2Zmc2V0cyA9IG9mZnNldHNbXCJcIi5jb25jYXQobW9kZSkuY29uY2F0KGlzUm9vdExldmVsID8gJycgOiAnU3ViJyldKSA9PT0gbnVsbCB8fCBfb2Zmc2V0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29mZnNldHNbd2hpY2hdO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIHByZXY6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IC0xLFxuICAgICAgICBzaWJsaW5nOiB0cnVlXG4gICAgICB9O1xuICAgIGNhc2UgbmV4dDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgc2libGluZzogdHJ1ZVxuICAgICAgfTtcbiAgICBjYXNlIHBhcmVudDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9mZnNldDogLTEsXG4gICAgICAgIHNpYmxpbmc6IGZhbHNlXG4gICAgICB9O1xuICAgIGNhc2UgY2hpbGRyZW46XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgIHNpYmxpbmc6IGZhbHNlXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZmluZENvbnRhaW5lclVMKGVsZW1lbnQpIHtcbiAgdmFyIGN1cnJlbnQgPSBlbGVtZW50O1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGlmIChjdXJyZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1tZW51LWxpc3QnKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBOb3JtYWxseSBzaG91bGQgbm90IHJlYWNoIHRoaXMgbGluZVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaW5kIGZvY3VzZWQgZWxlbWVudCB3aXRoaW4gZWxlbWVudCBzZXQgcHJvdmlkZWRcbiAqL1xuZnVuY3Rpb24gZ2V0Rm9jdXNFbGVtZW50KGFjdGl2ZUVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBjdXJyZW50ID0gYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGlmIChlbGVtZW50cy5oYXMoY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBmb2N1c2FibGUgZWxlbWVudHMgZnJvbSB0aGUgZWxlbWVudCBzZXQgdW5kZXIgcHJvdmlkZWQgY29udGFpbmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVFbGVtZW50cyhjb250YWluZXIsIGVsZW1lbnRzKSB7XG4gIHZhciBsaXN0ID0gZ2V0Rm9jdXNOb2RlTGlzdChjb250YWluZXIsIHRydWUpO1xuICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgIHJldHVybiBlbGVtZW50cy5oYXMoZWxlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXROZXh0Rm9jdXNFbGVtZW50KHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cywgZm9jdXNNZW51RWxlbWVudCkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAxO1xuICAvLyBLZXkgb24gdGhlIG1lbnUgaXRlbSB3aWxsIG5vdCBnZXQgdmFsaWRhdGUgcGFyZW50IGNvbnRhaW5lclxuICBpZiAoIXBhcmVudFF1ZXJ5Q29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBMaXN0IGN1cnJlbnQgbGV2ZWwgbWVudSBpdGVtIGVsZW1lbnRzXG4gIHZhciBzYW1lTGV2ZWxGb2N1c2FibGVNZW51RWxlbWVudExpc3QgPSBnZXRGb2N1c2FibGVFbGVtZW50cyhwYXJlbnRRdWVyeUNvbnRhaW5lciwgZWxlbWVudHMpO1xuXG4gIC8vIEZpbmQgbmV4dCBmb2N1cyBpbmRleFxuICB2YXIgY291bnQgPSBzYW1lTGV2ZWxGb2N1c2FibGVNZW51RWxlbWVudExpc3QubGVuZ3RoO1xuICB2YXIgZm9jdXNJbmRleCA9IHNhbWVMZXZlbEZvY3VzYWJsZU1lbnVFbGVtZW50TGlzdC5maW5kSW5kZXgoZnVuY3Rpb24gKGVsZSkge1xuICAgIHJldHVybiBmb2N1c01lbnVFbGVtZW50ID09PSBlbGU7XG4gIH0pO1xuICBpZiAob2Zmc2V0IDwgMCkge1xuICAgIGlmIChmb2N1c0luZGV4ID09PSAtMSkge1xuICAgICAgZm9jdXNJbmRleCA9IGNvdW50IC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNJbmRleCAtPSAxO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgZm9jdXNJbmRleCArPSAxO1xuICB9XG4gIGZvY3VzSW5kZXggPSAoZm9jdXNJbmRleCArIGNvdW50KSAlIGNvdW50O1xuXG4gIC8vIEZvY3VzIG1lbnUgaXRlbVxuICByZXR1cm4gc2FtZUxldmVsRm9jdXNhYmxlTWVudUVsZW1lbnRMaXN0W2ZvY3VzSW5kZXhdO1xufVxuZXhwb3J0IHZhciByZWZyZXNoRWxlbWVudHMgPSBmdW5jdGlvbiByZWZyZXNoRWxlbWVudHMoa2V5cywgaWQpIHtcbiAgdmFyIGVsZW1lbnRzID0gbmV3IFNldCgpO1xuICB2YXIga2V5MmVsZW1lbnQgPSBuZXcgTWFwKCk7XG4gIHZhciBlbGVtZW50MmtleSA9IG5ldyBNYXAoKTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1tZW51LWlkPSdcIi5jb25jYXQoZ2V0TWVudUlkKGlkLCBrZXkpLCBcIiddXCIpKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudHMuYWRkKGVsZW1lbnQpO1xuICAgICAgZWxlbWVudDJrZXkuc2V0KGVsZW1lbnQsIGtleSk7XG4gICAgICBrZXkyZWxlbWVudC5zZXQoa2V5LCBlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBrZXkyZWxlbWVudDoga2V5MmVsZW1lbnQsXG4gICAgZWxlbWVudDJrZXk6IGVsZW1lbnQya2V5XG4gIH07XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFjY2Vzc2liaWxpdHkobW9kZSwgYWN0aXZlS2V5LCBpc1J0bCwgaWQsIGNvbnRhaW5lclJlZiwgZ2V0S2V5cywgZ2V0S2V5UGF0aCwgdHJpZ2dlckFjdGl2ZUtleSwgdHJpZ2dlckFjY2Vzc2liaWxpdHlPcGVuLCBvcmlnaW5PbktleURvd24pIHtcbiAgdmFyIHJhZlJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgYWN0aXZlUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlS2V5O1xuICB2YXIgY2xlYW5SYWYgPSBmdW5jdGlvbiBjbGVhblJhZigpIHtcbiAgICByYWYuY2FuY2VsKHJhZlJlZi5jdXJyZW50KTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY2xlYW5SYWYoKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiBmdW5jdGlvbiAoZSkge1xuICAgIHZhciB3aGljaCA9IGUud2hpY2g7XG4gICAgaWYgKFtdLmNvbmNhdChBcnJvd0tleXMsIFtFTlRFUiwgRVNDLCBIT01FLCBFTkRdKS5pbmNsdWRlcyh3aGljaCkpIHtcbiAgICAgIHZhciBrZXlzID0gZ2V0S2V5cygpO1xuICAgICAgdmFyIHJlZnJlc2hlZEVsZW1lbnRzID0gcmVmcmVzaEVsZW1lbnRzKGtleXMsIGlkKTtcbiAgICAgIHZhciBfcmVmcmVzaGVkRWxlbWVudHMgPSByZWZyZXNoZWRFbGVtZW50cyxcbiAgICAgICAgZWxlbWVudHMgPSBfcmVmcmVzaGVkRWxlbWVudHMuZWxlbWVudHMsXG4gICAgICAgIGtleTJlbGVtZW50ID0gX3JlZnJlc2hlZEVsZW1lbnRzLmtleTJlbGVtZW50LFxuICAgICAgICBlbGVtZW50MmtleSA9IF9yZWZyZXNoZWRFbGVtZW50cy5lbGVtZW50MmtleTtcblxuICAgICAgLy8gRmlyc3Qgd2Ugc2hvdWxkIGZpbmQgY3VycmVudCBmb2N1c2VkIE1lbnVJdGVtL1N1Yk1lbnUgZWxlbWVudFxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBrZXkyZWxlbWVudC5nZXQoYWN0aXZlS2V5KTtcbiAgICAgIHZhciBmb2N1c01lbnVFbGVtZW50ID0gZ2V0Rm9jdXNFbGVtZW50KGFjdGl2ZUVsZW1lbnQsIGVsZW1lbnRzKTtcbiAgICAgIHZhciBmb2N1c01lbnVLZXkgPSBlbGVtZW50MmtleS5nZXQoZm9jdXNNZW51RWxlbWVudCk7XG4gICAgICB2YXIgb2Zmc2V0T2JqID0gZ2V0T2Zmc2V0KG1vZGUsIGdldEtleVBhdGgoZm9jdXNNZW51S2V5LCB0cnVlKS5sZW5ndGggPT09IDEsIGlzUnRsLCB3aGljaCk7XG5cbiAgICAgIC8vIFNvbWUgbW9kZSBkbyBub3QgaGF2ZSBmdWxseSBhcnJvdyBvcGVyYXRpb24gbGlrZSBpbmxpbmVcbiAgICAgIGlmICghb2Zmc2V0T2JqICYmIHdoaWNoICE9PSBIT01FICYmIHdoaWNoICE9PSBFTkQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBcnJvdyBwcmV2ZW50IGRlZmF1bHQgdG8gYXZvaWQgcGFnZSBzY3JvbGxcbiAgICAgIGlmIChBcnJvd0tleXMuaW5jbHVkZXMod2hpY2gpIHx8IFtIT01FLCBFTkRdLmluY2x1ZGVzKHdoaWNoKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICB2YXIgdHJ5Rm9jdXMgPSBmdW5jdGlvbiB0cnlGb2N1cyhtZW51RWxlbWVudCkge1xuICAgICAgICBpZiAobWVudUVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZm9jdXNUYXJnZXRFbGVtZW50ID0gbWVudUVsZW1lbnQ7XG5cbiAgICAgICAgICAvLyBGb2N1cyB0byBsaW5rIGluc3RlYWQgb2YgbWVudSBpdGVtIGlmIHBvc3NpYmxlXG4gICAgICAgICAgdmFyIGxpbmsgPSBtZW51RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgICAgaWYgKGxpbmsgIT09IG51bGwgJiYgbGluayAhPT0gdm9pZCAwICYmIGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpIHtcbiAgICAgICAgICAgIGZvY3VzVGFyZ2V0RWxlbWVudCA9IGxpbms7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB0YXJnZXRLZXkgPSBlbGVtZW50MmtleS5nZXQobWVudUVsZW1lbnQpO1xuICAgICAgICAgIHRyaWdnZXJBY3RpdmVLZXkodGFyZ2V0S2V5KTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIERvIG5vdCBgdXNlRWZmZWN0YCBoZXJlIHNpbmNlIGB0cnlGb2N1c2AgbWF5IHRyaWdnZXIgYXN5bmNcbiAgICAgICAgICAgKiB3aGljaCBtYWtlcyBSZWFjdCBzeW5jIHVwZGF0ZSB0aGUgYGFjdGl2ZUtleWBcbiAgICAgICAgICAgKiB0aGF0IGZvcmNlIHJlbmRlciBiZWZvcmUgYHVzZVJlZmAgc2V0IHRoZSBuZXh0IGFjdGl2ZUtleVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNsZWFuUmFmKCk7XG4gICAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSByYWYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVJlZi5jdXJyZW50ID09PSB0YXJnZXRLZXkpIHtcbiAgICAgICAgICAgICAgZm9jdXNUYXJnZXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoW0hPTUUsIEVORF0uaW5jbHVkZXMod2hpY2gpIHx8IG9mZnNldE9iai5zaWJsaW5nIHx8ICFmb2N1c01lbnVFbGVtZW50KSB7XG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFNpYmxpbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRmluZCB3YWxrYWJsZSBmb2N1cyBtZW51IGVsZW1lbnQgY29udGFpbmVyXG4gICAgICAgIHZhciBwYXJlbnRRdWVyeUNvbnRhaW5lcjtcbiAgICAgICAgaWYgKCFmb2N1c01lbnVFbGVtZW50IHx8IG1vZGUgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgcGFyZW50UXVlcnlDb250YWluZXIgPSBjb250YWluZXJSZWYuY3VycmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRRdWVyeUNvbnRhaW5lciA9IGZpbmRDb250YWluZXJVTChmb2N1c01lbnVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBuZXh0IGZvY3VzIGVsZW1lbnRcbiAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQ7XG4gICAgICAgIHZhciBmb2N1c2FibGVFbGVtZW50cyA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cyk7XG4gICAgICAgIGlmICh3aGljaCA9PT0gSE9NRSkge1xuICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBmb2N1c2FibGVFbGVtZW50c1swXTtcbiAgICAgICAgfSBlbHNlIGlmICh3aGljaCA9PT0gRU5EKSB7XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBnZXROZXh0Rm9jdXNFbGVtZW50KHBhcmVudFF1ZXJ5Q29udGFpbmVyLCBlbGVtZW50cywgZm9jdXNNZW51RWxlbWVudCwgb2Zmc2V0T2JqLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9jdXMgbWVudSBpdGVtXG4gICAgICAgIHRyeUZvY3VzKHRhcmdldEVsZW1lbnQpO1xuXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09IElubGluZVRyaWdnZXIgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0T2JqLmlubGluZVRyaWdnZXIpIHtcbiAgICAgICAgLy8gSW5saW5lIHRyaWdnZXIgbm8gbmVlZCBzd2l0Y2ggdG8gc3ViIG1lbnUgaXRlbVxuICAgICAgICB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4oZm9jdXNNZW51S2V5KTtcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IExldmVsID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgfSBlbHNlIGlmIChvZmZzZXRPYmoub2Zmc2V0ID4gMCkge1xuICAgICAgICB0cmlnZ2VyQWNjZXNzaWJpbGl0eU9wZW4oZm9jdXNNZW51S2V5LCB0cnVlKTtcbiAgICAgICAgY2xlYW5SYWYoKTtcbiAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSByYWYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEFzeW5jIHNob3VsZCByZXN5bmMgZWxlbWVudHNcbiAgICAgICAgICByZWZyZXNoZWRFbGVtZW50cyA9IHJlZnJlc2hFbGVtZW50cyhrZXlzLCBpZCk7XG4gICAgICAgICAgdmFyIGNvbnRyb2xJZCA9IGZvY3VzTWVudUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgICAgICAgdmFyIHN1YlF1ZXJ5Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKTtcblxuICAgICAgICAgIC8vIEdldCBzdWIgZm9jdXNhYmxlIG1lbnUgaXRlbVxuICAgICAgICAgIHZhciB0YXJnZXRFbGVtZW50ID0gZ2V0TmV4dEZvY3VzRWxlbWVudChzdWJRdWVyeUNvbnRhaW5lciwgcmVmcmVzaGVkRWxlbWVudHMuZWxlbWVudHMpO1xuXG4gICAgICAgICAgLy8gRm9jdXMgbWVudSBpdGVtXG4gICAgICAgICAgdHJ5Rm9jdXModGFyZ2V0RWxlbWVudCk7XG4gICAgICAgIH0sIDUpO1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXRPYmoub2Zmc2V0IDwgMCkge1xuICAgICAgICB2YXIga2V5UGF0aCA9IGdldEtleVBhdGgoZm9jdXNNZW51S2V5LCB0cnVlKTtcbiAgICAgICAgdmFyIHBhcmVudEtleSA9IGtleVBhdGhba2V5UGF0aC5sZW5ndGggLSAyXTtcbiAgICAgICAgdmFyIHBhcmVudE1lbnVFbGVtZW50ID0ga2V5MmVsZW1lbnQuZ2V0KHBhcmVudEtleSk7XG5cbiAgICAgICAgLy8gRm9jdXMgbWVudSBpdGVtXG4gICAgICAgIHRyaWdnZXJBY2Nlc3NpYmlsaXR5T3BlbihwYXJlbnRLZXksIGZhbHNlKTtcbiAgICAgICAgdHJ5Rm9jdXMocGFyZW50TWVudUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhc3Mgb3JpZ2luIGtleSBkb3duIGV2ZW50XG4gICAgb3JpZ2luT25LZXlEb3duID09PSBudWxsIHx8IG9yaWdpbk9uS2V5RG93biA9PT0gdm9pZCAwIHx8IG9yaWdpbk9uS2V5RG93bihlKTtcbiAgfTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNZW51Q29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0L01lbnVDb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VBY3RpdmUoZXZlbnRLZXksIGRpc2FibGVkLCBvbk1vdXNlRW50ZXIsIG9uTW91c2VMZWF2ZSkge1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE1lbnVDb250ZXh0KSxcbiAgICBhY3RpdmVLZXkgPSBfUmVhY3QkdXNlQ29udGV4dC5hY3RpdmVLZXksXG4gICAgb25BY3RpdmUgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkFjdGl2ZSxcbiAgICBvbkluYWN0aXZlID0gX1JlYWN0JHVzZUNvbnRleHQub25JbmFjdGl2ZTtcbiAgdmFyIHJldCA9IHtcbiAgICBhY3RpdmU6IGFjdGl2ZUtleSA9PT0gZXZlbnRLZXlcbiAgfTtcblxuICAvLyBTa2lwIHdoZW4gZGlzYWJsZWRcbiAgaWYgKCFkaXNhYmxlZCkge1xuICAgIHJldC5vbk1vdXNlRW50ZXIgPSBmdW5jdGlvbiAoZG9tRXZlbnQpIHtcbiAgICAgIG9uTW91c2VFbnRlciA9PT0gbnVsbCB8fCBvbk1vdXNlRW50ZXIgPT09IHZvaWQgMCB8fCBvbk1vdXNlRW50ZXIoe1xuICAgICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgICBkb21FdmVudDogZG9tRXZlbnRcbiAgICAgIH0pO1xuICAgICAgb25BY3RpdmUoZXZlbnRLZXkpO1xuICAgIH07XG4gICAgcmV0Lm9uTW91c2VMZWF2ZSA9IGZ1bmN0aW9uIChkb21FdmVudCkge1xuICAgICAgb25Nb3VzZUxlYXZlID09PSBudWxsIHx8IG9uTW91c2VMZWF2ZSA9PT0gdm9pZCAwIHx8IG9uTW91c2VMZWF2ZSh7XG4gICAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAgIGRvbUV2ZW50OiBkb21FdmVudFxuICAgICAgfSk7XG4gICAgICBvbkluYWN0aXZlKGV2ZW50S2V5KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiByZXQ7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWVudUNvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC9NZW51Q29udGV4dFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRGlyZWN0aW9uU3R5bGUobGV2ZWwpIHtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChNZW51Q29udGV4dCksXG4gICAgbW9kZSA9IF9SZWFjdCR1c2VDb250ZXh0Lm1vZGUsXG4gICAgcnRsID0gX1JlYWN0JHVzZUNvbnRleHQucnRsLFxuICAgIGlubGluZUluZGVudCA9IF9SZWFjdCR1c2VDb250ZXh0LmlubGluZUluZGVudDtcbiAgaWYgKG1vZGUgIT09ICdpbmxpbmUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGxlbiA9IGxldmVsO1xuICByZXR1cm4gcnRsID8ge1xuICAgIHBhZGRpbmdSaWdodDogbGVuICogaW5saW5lSW5kZW50XG4gIH0gOiB7XG4gICAgcGFkZGluZ0xlZnQ6IGxlbiAqIGlubGluZUluZGVudFxuICB9O1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgeyBuZXh0U2xpY2UgfSBmcm9tIFwiLi4vdXRpbHMvdGltZVV0aWxcIjtcbnZhciBQQVRIX1NQTElUID0gJ19fUkNfVVRJTF9QQVRIX1NQTElUX18nO1xudmFyIGdldFBhdGhTdHIgPSBmdW5jdGlvbiBnZXRQYXRoU3RyKGtleVBhdGgpIHtcbiAgcmV0dXJuIGtleVBhdGguam9pbihQQVRIX1NQTElUKTtcbn07XG52YXIgZ2V0UGF0aEtleXMgPSBmdW5jdGlvbiBnZXRQYXRoS2V5cyhrZXlQYXRoU3RyKSB7XG4gIHJldHVybiBrZXlQYXRoU3RyLnNwbGl0KFBBVEhfU1BMSVQpO1xufTtcbmV4cG9ydCB2YXIgT1ZFUkZMT1dfS0VZID0gJ3JjLW1lbnUtbW9yZSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VLZXlSZWNvcmRzKCkge1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGludGVybmFsRm9yY2VVcGRhdGUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIga2V5MnBhdGhSZWYgPSB1c2VSZWYobmV3IE1hcCgpKTtcbiAgdmFyIHBhdGgya2V5UmVmID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoW10pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBvdmVyZmxvd0tleXMgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldE92ZXJmbG93S2V5cyA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciB1cGRhdGVSZWYgPSB1c2VSZWYoMCk7XG4gIHZhciBkZXN0cm95UmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgaWYgKCFkZXN0cm95UmVmLmN1cnJlbnQpIHtcbiAgICAgIGludGVybmFsRm9yY2VVcGRhdGUoe30pO1xuICAgIH1cbiAgfTtcbiAgdmFyIHJlZ2lzdGVyUGF0aCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXksIGtleVBhdGgpIHtcbiAgICAvLyBXYXJuaW5nIGZvciBpbnZhbGlkYXRlIG9yIGR1cGxpY2F0ZWQgYGtleWBcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybmluZygha2V5MnBhdGhSZWYuY3VycmVudC5oYXMoa2V5KSwgXCJEdXBsaWNhdGVkIGtleSAnXCIuY29uY2F0KGtleSwgXCInIHVzZWQgaW4gTWVudSBieSBwYXRoIFtcIikuY29uY2F0KGtleVBhdGguam9pbignID4gJyksIFwiXVwiKSk7XG4gICAgfVxuXG4gICAgLy8gRmlsbCBtYXBcbiAgICB2YXIgY29ubmVjdGVkUGF0aCA9IGdldFBhdGhTdHIoa2V5UGF0aCk7XG4gICAgcGF0aDJrZXlSZWYuY3VycmVudC5zZXQoY29ubmVjdGVkUGF0aCwga2V5KTtcbiAgICBrZXkycGF0aFJlZi5jdXJyZW50LnNldChrZXksIGNvbm5lY3RlZFBhdGgpO1xuICAgIHVwZGF0ZVJlZi5jdXJyZW50ICs9IDE7XG4gICAgdmFyIGlkID0gdXBkYXRlUmVmLmN1cnJlbnQ7XG4gICAgbmV4dFNsaWNlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpZCA9PT0gdXBkYXRlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgdW5yZWdpc3RlclBhdGggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5LCBrZXlQYXRoKSB7XG4gICAgdmFyIGNvbm5lY3RlZFBhdGggPSBnZXRQYXRoU3RyKGtleVBhdGgpO1xuICAgIHBhdGgya2V5UmVmLmN1cnJlbnQuZGVsZXRlKGNvbm5lY3RlZFBhdGgpO1xuICAgIGtleTJwYXRoUmVmLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZnJlc2hPdmVyZmxvd0tleXMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5cykge1xuICAgIHNldE92ZXJmbG93S2V5cyhrZXlzKTtcbiAgfSwgW10pO1xuICB2YXIgZ2V0S2V5UGF0aCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudEtleSwgaW5jbHVkZU92ZXJmbG93KSB7XG4gICAgdmFyIGZ1bGxQYXRoID0ga2V5MnBhdGhSZWYuY3VycmVudC5nZXQoZXZlbnRLZXkpIHx8ICcnO1xuICAgIHZhciBrZXlzID0gZ2V0UGF0aEtleXMoZnVsbFBhdGgpO1xuICAgIGlmIChpbmNsdWRlT3ZlcmZsb3cgJiYgb3ZlcmZsb3dLZXlzLmluY2x1ZGVzKGtleXNbMF0pKSB7XG4gICAgICBrZXlzLnVuc2hpZnQoT1ZFUkZMT1dfS0VZKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sIFtvdmVyZmxvd0tleXNdKTtcbiAgdmFyIGlzU3ViUGF0aEtleSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwYXRoS2V5cywgZXZlbnRLZXkpIHtcbiAgICByZXR1cm4gcGF0aEtleXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbSAhPT0gdW5kZWZpbmVkO1xuICAgIH0pLnNvbWUoZnVuY3Rpb24gKHBhdGhLZXkpIHtcbiAgICAgIHZhciBwYXRoS2V5TGlzdCA9IGdldEtleVBhdGgocGF0aEtleSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gcGF0aEtleUxpc3QuaW5jbHVkZXMoZXZlbnRLZXkpO1xuICAgIH0pO1xuICB9LCBbZ2V0S2V5UGF0aF0pO1xuICB2YXIgZ2V0S2V5cyA9IGZ1bmN0aW9uIGdldEtleXMoKSB7XG4gICAgdmFyIGtleXMgPSBfdG9Db25zdW1hYmxlQXJyYXkoa2V5MnBhdGhSZWYuY3VycmVudC5rZXlzKCkpO1xuICAgIGlmIChvdmVyZmxvd0tleXMubGVuZ3RoKSB7XG4gICAgICBrZXlzLnB1c2goT1ZFUkZMT1dfS0VZKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZpbmQgY3VycmVudCBrZXkgcmVsYXRlZCBjaGlsZCBwYXRoIGtleXNcbiAgICovXG4gIHZhciBnZXRTdWJQYXRoS2V5cyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY29ubmVjdGVkUGF0aCA9IFwiXCIuY29uY2F0KGtleTJwYXRoUmVmLmN1cnJlbnQuZ2V0KGtleSkpLmNvbmNhdChQQVRIX1NQTElUKTtcbiAgICB2YXIgcGF0aEtleXMgPSBuZXcgU2V0KCk7XG4gICAgX3RvQ29uc3VtYWJsZUFycmF5KHBhdGgya2V5UmVmLmN1cnJlbnQua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoS2V5KSB7XG4gICAgICBpZiAocGF0aEtleS5zdGFydHNXaXRoKGNvbm5lY3RlZFBhdGgpKSB7XG4gICAgICAgIHBhdGhLZXlzLmFkZChwYXRoMmtleVJlZi5jdXJyZW50LmdldChwYXRoS2V5KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhdGhLZXlzO1xuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlc3Ryb3lSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4ge1xuICAgIC8vIFJlZ2lzdGVyXG4gICAgcmVnaXN0ZXJQYXRoOiByZWdpc3RlclBhdGgsXG4gICAgdW5yZWdpc3RlclBhdGg6IHVucmVnaXN0ZXJQYXRoLFxuICAgIHJlZnJlc2hPdmVyZmxvd0tleXM6IHJlZnJlc2hPdmVyZmxvd0tleXMsXG4gICAgLy8gVXRpbFxuICAgIGlzU3ViUGF0aEtleTogaXNTdWJQYXRoS2V5LFxuICAgIGdldEtleVBhdGg6IGdldEtleVBhdGgsXG4gICAgZ2V0S2V5czogZ2V0S2V5cyxcbiAgICBnZXRTdWJQYXRoS2V5czogZ2V0U3ViUGF0aEtleXNcbiAgfTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQ2FjaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhbHdheXMgcmV0dXJuIHNhbWUgcmVmIGluc3RlYWQuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGNvbnRleHQgb3B0aW1pemF0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VNZW1vQ2FsbGJhY2soZnVuYykge1xuICB2YXIgZnVuUmVmID0gUmVhY3QudXNlUmVmKGZ1bmMpO1xuICBmdW5SZWYuY3VycmVudCA9IGZ1bmM7XG4gIHZhciBjYWxsYmFjayA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2Z1blJlZiRjdXJyZW50O1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIChfZnVuUmVmJGN1cnJlbnQgPSBmdW5SZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2Z1blJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZnVuUmVmJGN1cnJlbnQuY2FsbC5hcHBseShfZnVuUmVmJGN1cnJlbnQsIFtmdW5SZWZdLmNvbmNhdChhcmdzKSk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGZ1bmMgPyBjYWxsYmFjayA6IHVuZGVmaW5lZDtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZXJnZWRTdGF0ZSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VNZXJnZWRTdGF0ZVwiO1xudmFyIHVuaXF1ZVByZWZpeCA9IE1hdGgucmFuZG9tKCkudG9GaXhlZCg1KS50b1N0cmluZygpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSWQgPSAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVVVJRChpZCkge1xuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUoaWQsIHtcbiAgICAgIHZhbHVlOiBpZFxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIHV1aWQgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldFVVSUQgPSBfdXNlTWVyZ2VkU3RhdGUyWzFdO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGludGVybmFsSWQgKz0gMTtcbiAgICB2YXIgbmV3SWQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnID8gJ3Rlc3QnIDogXCJcIi5jb25jYXQodW5pcXVlUHJlZml4LCBcIi1cIikuY29uY2F0KGludGVybmFsSWQpO1xuICAgIHNldFVVSUQoXCJyYy1tZW51LXV1aWQtXCIuY29uY2F0KG5ld0lkKSk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIHV1aWQ7XG59IiwiaW1wb3J0IE1lbnUgZnJvbSBcIi4vTWVudVwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCIuL01lbnVJdGVtXCI7XG5pbXBvcnQgU3ViTWVudSBmcm9tIFwiLi9TdWJNZW51XCI7XG5pbXBvcnQgTWVudUl0ZW1Hcm91cCBmcm9tIFwiLi9NZW51SXRlbUdyb3VwXCI7XG5pbXBvcnQgeyB1c2VGdWxsUGF0aCB9IGZyb20gXCIuL2NvbnRleHQvUGF0aENvbnRleHRcIjtcbmltcG9ydCBEaXZpZGVyIGZyb20gXCIuL0RpdmlkZXJcIjtcbmV4cG9ydCB7IFN1Yk1lbnUsIE1lbnVJdGVtIGFzIEl0ZW0sIE1lbnVJdGVtLCBNZW51SXRlbUdyb3VwLCBNZW51SXRlbUdyb3VwIGFzIEl0ZW1Hcm91cCwgRGl2aWRlciwgLyoqIEBwcml2YXRlIE9ubHkgdXNlZCBmb3IgYW50ZCBpbnRlcm5hbC4gRG8gbm90IHVzZSBpbiB5b3VyIHByb2R1Y3Rpb24uICovXG51c2VGdWxsUGF0aCB9O1xudmFyIEV4cG9ydE1lbnUgPSBNZW51O1xuRXhwb3J0TWVudS5JdGVtID0gTWVudUl0ZW07XG5FeHBvcnRNZW51LlN1Yk1lbnUgPSBTdWJNZW51O1xuRXhwb3J0TWVudS5JdGVtR3JvdXAgPSBNZW51SXRlbUdyb3VwO1xuRXhwb3J0TWVudS5EaXZpZGVyID0gRGl2aWRlcjtcbmV4cG9ydCBkZWZhdWx0IEV4cG9ydE1lbnU7IiwidmFyIGF1dG9BZGp1c3RPdmVyZmxvdyA9IHtcbiAgYWRqdXN0WDogMSxcbiAgYWRqdXN0WTogMVxufTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IHtcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydibCcsICd0bCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgdG9wUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsnYnInLCAndHInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbUxlZnQ6IHtcbiAgICBwb2ludHM6IFsndGwnLCAnYmwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIGJvdHRvbVJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ2JyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0VG9wOiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ3RsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0Qm90dG9tOiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ2JsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICByaWdodFRvcDoge1xuICAgIHBvaW50czogWyd0bCcsICd0ciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgcmlnaHRCb3R0b206IHtcbiAgICBwb2ludHM6IFsnYmwnLCAnYnInXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH1cbn07XG5leHBvcnQgdmFyIHBsYWNlbWVudHNSdGwgPSB7XG4gIHRvcExlZnQ6IHtcbiAgICBwb2ludHM6IFsnYmwnLCAndGwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIHRvcFJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ3RyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBib3R0b21MZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ2JsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBib3R0b21SaWdodDoge1xuICAgIHBvaW50czogWyd0cicsICdiciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3dcbiAgfSxcbiAgcmlnaHRUb3A6IHtcbiAgICBwb2ludHM6IFsndHInLCAndGwnXSxcbiAgICBvdmVyZmxvdzogYXV0b0FkanVzdE92ZXJmbG93XG4gIH0sXG4gIHJpZ2h0Qm90dG9tOiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ2JsJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0VG9wOiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ3RyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9LFxuICBsZWZ0Qm90dG9tOiB7XG4gICAgcG9pbnRzOiBbJ2JsJywgJ2JyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvd1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgcGxhY2VtZW50czsiLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IHRvQXJyYXkgZnJvbSBcInJjLXV0aWwvZXMvQ2hpbGRyZW4vdG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2hpbGRyZW4oY2hpbGRyZW4sIGtleVBhdGgpIHtcbiAgcmV0dXJuIHRvQXJyYXkoY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAoY2hpbGQsIGluZGV4KSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICB2YXIgX2V2ZW50S2V5LCBfY2hpbGQkcHJvcHM7XG4gICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuICAgICAgdmFyIGV2ZW50S2V5ID0gKF9ldmVudEtleSA9IChfY2hpbGQkcHJvcHMgPSBjaGlsZC5wcm9wcykgPT09IG51bGwgfHwgX2NoaWxkJHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2hpbGQkcHJvcHMuZXZlbnRLZXkpICE9PSBudWxsICYmIF9ldmVudEtleSAhPT0gdm9pZCAwID8gX2V2ZW50S2V5IDoga2V5O1xuICAgICAgdmFyIGVtcHR5S2V5ID0gZXZlbnRLZXkgPT09IG51bGwgfHwgZXZlbnRLZXkgPT09IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbXB0eUtleSkge1xuICAgICAgICBldmVudEtleSA9IFwidG1wX2tleS1cIi5jb25jYXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShrZXlQYXRoKSwgW2luZGV4XSkuam9pbignLScpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjbG9uZVByb3BzID0ge1xuICAgICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgICBldmVudEtleTogZXZlbnRLZXlcbiAgICAgIH07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbXB0eUtleSkge1xuICAgICAgICBjbG9uZVByb3BzLndhcm5LZXkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIGNsb25lUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xufSIsImV4cG9ydCBmdW5jdGlvbiBnZXRNb3Rpb24obW9kZSwgbW90aW9uLCBkZWZhdWx0TW90aW9ucykge1xuICBpZiAobW90aW9uKSB7XG4gICAgcmV0dXJuIG1vdGlvbjtcbiAgfVxuICBpZiAoZGVmYXVsdE1vdGlvbnMpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1vdGlvbnNbbW9kZV0gfHwgZGVmYXVsdE1vdGlvbnMub3RoZXI7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xudmFyIF9leGNsdWRlZCA9IFtcImxhYmVsXCIsIFwiY2hpbGRyZW5cIiwgXCJrZXlcIiwgXCJ0eXBlXCIsIFwiZXh0cmFcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRGl2aWRlciBmcm9tIFwiLi4vRGl2aWRlclwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCIuLi9NZW51SXRlbVwiO1xuaW1wb3J0IE1lbnVJdGVtR3JvdXAgZnJvbSBcIi4uL01lbnVJdGVtR3JvdXBcIjtcbmltcG9ydCBTdWJNZW51IGZyb20gXCIuLi9TdWJNZW51XCI7XG5pbXBvcnQgeyBwYXJzZUNoaWxkcmVuIH0gZnJvbSBcIi4vY29tbW9uVXRpbFwiO1xuZnVuY3Rpb24gY29udmVydEl0ZW1zVG9Ob2RlcyhsaXN0LCBjb21wb25lbnRzLCBwcmVmaXhDbHMpIHtcbiAgdmFyIE1lcmdlZE1lbnVJdGVtID0gY29tcG9uZW50cy5pdGVtLFxuICAgIE1lcmdlZE1lbnVJdGVtR3JvdXAgPSBjb21wb25lbnRzLmdyb3VwLFxuICAgIE1lcmdlZFN1Yk1lbnUgPSBjb21wb25lbnRzLnN1Ym1lbnUsXG4gICAgTWVyZ2VkRGl2aWRlciA9IGNvbXBvbmVudHMuZGl2aWRlcjtcbiAgcmV0dXJuIChsaXN0IHx8IFtdKS5tYXAoZnVuY3Rpb24gKG9wdCwgaW5kZXgpIHtcbiAgICBpZiAob3B0ICYmIF90eXBlb2Yob3B0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBfcmVmID0gb3B0LFxuICAgICAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAga2V5ID0gX3JlZi5rZXksXG4gICAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICAgIGV4dHJhID0gX3JlZi5leHRyYSxcbiAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgbWVyZ2VkS2V5ID0ga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogXCJ0bXAtXCIuY29uY2F0KGluZGV4KTtcblxuICAgICAgLy8gTWVudUl0ZW1Hcm91cCAmIFN1Yk1lbnVJdGVtXG4gICAgICBpZiAoY2hpbGRyZW4gfHwgdHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgIC8vIEdyb3VwXG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lcmdlZE1lbnVJdGVtR3JvdXAsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICAgICAgfSwgcmVzdFByb3BzLCB7XG4gICAgICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgICAgICB9KSwgY29udmVydEl0ZW1zVG9Ob2RlcyhjaGlsZHJlbiwgY29tcG9uZW50cywgcHJlZml4Q2xzKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdWIgTWVudVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkU3ViTWVudSwgX2V4dGVuZHMoe1xuICAgICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICAgIH0sIHJlc3RQcm9wcywge1xuICAgICAgICAgIHRpdGxlOiBsYWJlbFxuICAgICAgICB9KSwgY29udmVydEl0ZW1zVG9Ob2RlcyhjaGlsZHJlbiwgY29tcG9uZW50cywgcHJlZml4Q2xzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1lbnVJdGVtICYgRGl2aWRlclxuICAgICAgaWYgKHR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVyZ2VkRGl2aWRlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICAgIH0sIHJlc3RQcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lcmdlZE1lbnVJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleTogbWVyZ2VkS2V5XG4gICAgICB9LCByZXN0UHJvcHMsIHtcbiAgICAgICAgZXh0cmE6IGV4dHJhXG4gICAgICB9KSwgbGFiZWwsICghIWV4dHJhIHx8IGV4dHJhID09PSAwKSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaXRlbS1leHRyYVwiKVxuICAgICAgfSwgZXh0cmEpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAob3B0KSB7XG4gICAgcmV0dXJuIG9wdDtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtcyhjaGlsZHJlbiwgaXRlbXMsIGtleVBhdGgsIGNvbXBvbmVudHMsIHByZWZpeENscykge1xuICB2YXIgY2hpbGROb2RlcyA9IGNoaWxkcmVuO1xuICB2YXIgbWVyZ2VkQ29tcG9uZW50cyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGRpdmlkZXI6IERpdmlkZXIsXG4gICAgaXRlbTogTWVudUl0ZW0sXG4gICAgZ3JvdXA6IE1lbnVJdGVtR3JvdXAsXG4gICAgc3VibWVudTogU3ViTWVudVxuICB9LCBjb21wb25lbnRzKTtcbiAgaWYgKGl0ZW1zKSB7XG4gICAgY2hpbGROb2RlcyA9IGNvbnZlcnRJdGVtc1RvTm9kZXMoaXRlbXMsIG1lcmdlZENvbXBvbmVudHMsIHByZWZpeENscyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlQ2hpbGRyZW4oY2hpbGROb2Rlcywga2V5UGF0aCk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIG5leHRTbGljZShjYWxsYmFjaykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcIml0ZW1cIl07XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5cbi8qKlxuICogYG9uQ2xpY2tgIGV2ZW50IHJldHVybiBgaW5mby5pdGVtYCB3aGljaCBwb2ludCB0byByZWFjdCBub2RlIGRpcmVjdGx5LlxuICogV2Ugc2hvdWxkIHdhcm5pbmcgdGhpcyBzaW5jZSBpdCB3aWxsIG5vdCB3b3JrIG9uIEZDLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2Fybkl0ZW1Qcm9wKF9yZWYpIHtcbiAgdmFyIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgcmVzdEluZm8gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3RJbmZvLCAnaXRlbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHdhcm5pbmcoZmFsc2UsICdgaW5mby5pdGVtYCBpcyBkZXByZWNhdGVkIHNpbmNlIHdlIHdpbGwgbW92ZSB0byBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCBub3QgcHJvdmlkZXMgUmVhY3QgTm9kZSBpbnN0YW5jZSBpbiBmdXR1cmUuJyk7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdEluZm87XG59IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2RlZmF1bHQtcHJvcHMtbWF0Y2gtcHJvcC10eXBlcywgcmVhY3Qvbm8tbXVsdGktY29tcCwgcmVhY3QvcHJvcC10eXBlcyAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgZmluZERPTU5vZGUgZnJvbSBcInJjLXV0aWwvZXMvRG9tL2ZpbmRET01Ob2RlXCI7XG5pbXBvcnQgeyBmaWxsUmVmLCBnZXROb2RlUmVmLCBzdXBwb3J0UmVmIH0gZnJvbSBcInJjLXV0aWwvZXMvcmVmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IERvbVdyYXBwZXIgZnJvbSBcIi4vRG9tV3JhcHBlclwiO1xuaW1wb3J0IHVzZVN0YXR1cyBmcm9tIFwiLi9ob29rcy91c2VTdGF0dXNcIjtcbmltcG9ydCB7IGlzQWN0aXZlIH0gZnJvbSBcIi4vaG9va3MvdXNlU3RlcFF1ZXVlXCI7XG5pbXBvcnQgeyBTVEFUVVNfTk9ORSwgU1RFUF9QUkVQQVJFLCBTVEVQX1NUQVJUIH0gZnJvbSBcIi4vaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBnZXRUcmFuc2l0aW9uTmFtZSwgc3VwcG9ydFRyYW5zaXRpb24gfSBmcm9tIFwiLi91dGlsL21vdGlvblwiO1xuLyoqXG4gKiBgdHJhbnNpdGlvblN1cHBvcnRgIGlzIHVzZWQgZm9yIG5vbmUgdHJhbnNpdGlvbiB0ZXN0IGNhc2UuXG4gKiBEZWZhdWx0IHdlIHVzZSBicm93c2VyIHRyYW5zaXRpb24gZXZlbnQgc3VwcG9ydCBjaGVjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkNTU01vdGlvbihjb25maWcpIHtcbiAgdmFyIHRyYW5zaXRpb25TdXBwb3J0ID0gY29uZmlnO1xuICBpZiAoX3R5cGVvZihjb25maWcpID09PSAnb2JqZWN0Jykge1xuICAgIHRyYW5zaXRpb25TdXBwb3J0ID0gY29uZmlnLnRyYW5zaXRpb25TdXBwb3J0O1xuICB9XG4gIGZ1bmN0aW9uIGlzU3VwcG9ydFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHRNb3Rpb24pIHtcbiAgICByZXR1cm4gISEocHJvcHMubW90aW9uTmFtZSAmJiB0cmFuc2l0aW9uU3VwcG9ydCAmJiBjb250ZXh0TW90aW9uICE9PSBmYWxzZSk7XG4gIH1cbiAgdmFyIENTU01vdGlvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9wcm9wcyR2aXNpYmxlID0gcHJvcHMudmlzaWJsZSxcbiAgICAgIHZpc2libGUgPSBfcHJvcHMkdmlzaWJsZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyR2aXNpYmxlLFxuICAgICAgX3Byb3BzJHJlbW92ZU9uTGVhdmUgPSBwcm9wcy5yZW1vdmVPbkxlYXZlLFxuICAgICAgcmVtb3ZlT25MZWF2ZSA9IF9wcm9wcyRyZW1vdmVPbkxlYXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJHJlbW92ZU9uTGVhdmUsXG4gICAgICBmb3JjZVJlbmRlciA9IHByb3BzLmZvcmNlUmVuZGVyLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIG1vdGlvbk5hbWUgPSBwcm9wcy5tb3Rpb25OYW1lLFxuICAgICAgbGVhdmVkQ2xhc3NOYW1lID0gcHJvcHMubGVhdmVkQ2xhc3NOYW1lLFxuICAgICAgZXZlbnRQcm9wcyA9IHByb3BzLmV2ZW50UHJvcHM7XG4gICAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChDb250ZXh0KSxcbiAgICAgIGNvbnRleHRNb3Rpb24gPSBfUmVhY3QkdXNlQ29udGV4dC5tb3Rpb247XG4gICAgdmFyIHN1cHBvcnRNb3Rpb24gPSBpc1N1cHBvcnRUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0TW90aW9uKTtcblxuICAgIC8vIFJlZiB0byB0aGUgcmVhY3Qgbm9kZSwgaXQgbWF5IGJlIGEgSFRNTEVsZW1lbnRcbiAgICB2YXIgbm9kZVJlZiA9IHVzZVJlZigpO1xuICAgIC8vIFJlZiB0byB0aGUgZG9tIHdyYXBwZXIgaW4gY2FzZSByZWYgY2FuIG5vdCBwYXNzIHRvIEhUTUxFbGVtZW50XG4gICAgdmFyIHdyYXBwZXJOb2RlUmVmID0gdXNlUmVmKCk7XG4gICAgZnVuY3Rpb24gZ2V0RG9tRWxlbWVudCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEhlcmUgd2UncmUgYXZvaWRpbmcgY2FsbCBmb3IgZmluZERPTU5vZGUgc2luY2UgaXQncyBkZXByZWNhdGVkXG4gICAgICAgIC8vIGluIHN0cmljdCBtb2RlLiBXZSdyZSBjYWxsaW5nIGl0IG9ubHkgd2hlbiBub2RlIHJlZiBpcyBub3RcbiAgICAgICAgLy8gYW4gaW5zdGFuY2Ugb2YgRE9NIEhUTUxFbGVtZW50LiBPdGhlcndpc2UgdXNlXG4gICAgICAgIC8vIGZpbmRET01Ob2RlIGFzIGEgZmluYWwgcmVzb3J0XG4gICAgICAgIHJldHVybiBub2RlUmVmLmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG5vZGVSZWYuY3VycmVudCA6IGZpbmRET01Ob2RlKHdyYXBwZXJOb2RlUmVmLmN1cnJlbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBPbmx5IGhhcHBlbiB3aGVuIGBtb3Rpb25EZWFkbGluZWAgdHJpZ2dlciBidXQgZWxlbWVudCByZW1vdmVkLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIF91c2VTdGF0dXMgPSB1c2VTdGF0dXMoc3VwcG9ydE1vdGlvbiwgdmlzaWJsZSwgZ2V0RG9tRWxlbWVudCwgcHJvcHMpLFxuICAgICAgX3VzZVN0YXR1czIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdHVzLCA0KSxcbiAgICAgIHN0YXR1cyA9IF91c2VTdGF0dXMyWzBdLFxuICAgICAgc3RhdHVzU3RlcCA9IF91c2VTdGF0dXMyWzFdLFxuICAgICAgc3RhdHVzU3R5bGUgPSBfdXNlU3RhdHVzMlsyXSxcbiAgICAgIG1lcmdlZFZpc2libGUgPSBfdXNlU3RhdHVzMlszXTtcblxuICAgIC8vIFJlY29yZCB3aGV0aGVyIGNvbnRlbnQgaGFzIHJlbmRlcmVkXG4gICAgLy8gV2lsbCByZXR1cm4gbnVsbCBmb3IgdW4tcmVuZGVyZWQgZXZlbiB3aGVuIGByZW1vdmVPbkxlYXZlPXtmYWxzZX1gXG4gICAgdmFyIHJlbmRlcmVkUmVmID0gUmVhY3QudXNlUmVmKG1lcmdlZFZpc2libGUpO1xuICAgIGlmIChtZXJnZWRWaXNpYmxlKSB7XG4gICAgICByZW5kZXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhciBzZXROb2RlUmVmID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIG5vZGVSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICBmaWxsUmVmKHJlZiwgbm9kZSk7XG4gICAgfSwgW3JlZl0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT1cbiAgICB2YXIgbW90aW9uQ2hpbGRyZW47XG4gICAgdmFyIG1lcmdlZFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBldmVudFByb3BzKSwge30sIHtcbiAgICAgIHZpc2libGU6IHZpc2libGVcbiAgICB9KTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAvLyBObyBjaGlsZHJlblxuICAgICAgbW90aW9uQ2hpbGRyZW4gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBTVEFUVVNfTk9ORSkge1xuICAgICAgLy8gU3RhYmxlIGNoaWxkcmVuXG4gICAgICBpZiAobWVyZ2VkVmlzaWJsZSkge1xuICAgICAgICBtb3Rpb25DaGlsZHJlbiA9IGNoaWxkcmVuKF9vYmplY3RTcHJlYWQoe30sIG1lcmdlZFByb3BzKSwgc2V0Tm9kZVJlZik7XG4gICAgICB9IGVsc2UgaWYgKCFyZW1vdmVPbkxlYXZlICYmIHJlbmRlcmVkUmVmLmN1cnJlbnQgJiYgbGVhdmVkQ2xhc3NOYW1lKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZXJnZWRQcm9wcyksIHt9LCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBsZWF2ZWRDbGFzc05hbWVcbiAgICAgICAgfSksIHNldE5vZGVSZWYpO1xuICAgICAgfSBlbHNlIGlmIChmb3JjZVJlbmRlciB8fCAhcmVtb3ZlT25MZWF2ZSAmJiAhbGVhdmVkQ2xhc3NOYW1lKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtZXJnZWRQcm9wcyksIHt9LCB7XG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSksIHNldE5vZGVSZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW90aW9uQ2hpbGRyZW4gPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBtb3Rpb25cbiAgICAgIHZhciBzdGF0dXNTdWZmaXg7XG4gICAgICBpZiAoc3RhdHVzU3RlcCA9PT0gU1RFUF9QUkVQQVJFKSB7XG4gICAgICAgIHN0YXR1c1N1ZmZpeCA9ICdwcmVwYXJlJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBY3RpdmUoc3RhdHVzU3RlcCkpIHtcbiAgICAgICAgc3RhdHVzU3VmZml4ID0gJ2FjdGl2ZSc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1c1N0ZXAgPT09IFNURVBfU1RBUlQpIHtcbiAgICAgICAgc3RhdHVzU3VmZml4ID0gJ3N0YXJ0JztcbiAgICAgIH1cbiAgICAgIHZhciBtb3Rpb25DbHMgPSBnZXRUcmFuc2l0aW9uTmFtZShtb3Rpb25OYW1lLCBcIlwiLmNvbmNhdChzdGF0dXMsIFwiLVwiKS5jb25jYXQoc3RhdHVzU3VmZml4KSk7XG4gICAgICBtb3Rpb25DaGlsZHJlbiA9IGNoaWxkcmVuKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWVyZ2VkUHJvcHMpLCB7fSwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoZ2V0VHJhbnNpdGlvbk5hbWUobW90aW9uTmFtZSwgc3RhdHVzKSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgbW90aW9uQ2xzLCBtb3Rpb25DbHMgJiYgc3RhdHVzU3VmZml4KSwgbW90aW9uTmFtZSwgdHlwZW9mIG1vdGlvbk5hbWUgPT09ICdzdHJpbmcnKSksXG4gICAgICAgIHN0eWxlOiBzdGF0dXNTdHlsZVxuICAgICAgfSksIHNldE5vZGVSZWYpO1xuICAgIH1cblxuICAgIC8vIEF1dG8gaW5qZWN0IHJlZiBpZiBjaGlsZCBub2RlIG5vdCBoYXZlIGByZWZgIHByb3BzXG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQobW90aW9uQ2hpbGRyZW4pICYmIHN1cHBvcnRSZWYobW90aW9uQ2hpbGRyZW4pKSB7XG4gICAgICB2YXIgb3JpZ2luTm9kZVJlZiA9IGdldE5vZGVSZWYobW90aW9uQ2hpbGRyZW4pO1xuICAgICAgaWYgKCFvcmlnaW5Ob2RlUmVmKSB7XG4gICAgICAgIG1vdGlvbkNoaWxkcmVuID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChtb3Rpb25DaGlsZHJlbiwge1xuICAgICAgICAgIHJlZjogc2V0Tm9kZVJlZlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERvbVdyYXBwZXIsIHtcbiAgICAgIHJlZjogd3JhcHBlck5vZGVSZWZcbiAgICB9LCBtb3Rpb25DaGlsZHJlbik7XG4gIH0pO1xuICBDU1NNb3Rpb24uZGlzcGxheU5hbWUgPSAnQ1NTTW90aW9uJztcbiAgcmV0dXJuIENTU01vdGlvbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGdlbkNTU01vdGlvbihzdXBwb3J0VHJhbnNpdGlvbik7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZVN1cGVyXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xudmFyIF9leGNsdWRlZCA9IFtcImNvbXBvbmVudFwiLCBcImNoaWxkcmVuXCIsIFwib25WaXNpYmxlQ2hhbmdlZFwiLCBcIm9uQWxsUmVtb3ZlZFwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInN0YXR1c1wiXTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgT3JpZ2luQ1NTTW90aW9uIGZyb20gXCIuL0NTU01vdGlvblwiO1xuaW1wb3J0IHsgZGlmZktleXMsIHBhcnNlS2V5cywgU1RBVFVTX0FERCwgU1RBVFVTX0tFRVAsIFNUQVRVU19SRU1PVkUsIFNUQVRVU19SRU1PVkVEIH0gZnJvbSBcIi4vdXRpbC9kaWZmXCI7XG5pbXBvcnQgeyBzdXBwb3J0VHJhbnNpdGlvbiB9IGZyb20gXCIuL3V0aWwvbW90aW9uXCI7XG52YXIgTU9USU9OX1BST1BfTkFNRVMgPSBbJ2V2ZW50UHJvcHMnLCAndmlzaWJsZScsICdjaGlsZHJlbicsICdtb3Rpb25OYW1lJywgJ21vdGlvbkFwcGVhcicsICdtb3Rpb25FbnRlcicsICdtb3Rpb25MZWF2ZScsICdtb3Rpb25MZWF2ZUltbWVkaWF0ZWx5JywgJ21vdGlvbkRlYWRsaW5lJywgJ3JlbW92ZU9uTGVhdmUnLCAnbGVhdmVkQ2xhc3NOYW1lJywgJ29uQXBwZWFyUHJlcGFyZScsICdvbkFwcGVhclN0YXJ0JywgJ29uQXBwZWFyQWN0aXZlJywgJ29uQXBwZWFyRW5kJywgJ29uRW50ZXJTdGFydCcsICdvbkVudGVyQWN0aXZlJywgJ29uRW50ZXJFbmQnLCAnb25MZWF2ZVN0YXJ0JywgJ29uTGVhdmVBY3RpdmUnLCAnb25MZWF2ZUVuZCddO1xuLyoqXG4gKiBHZW5lcmF0ZSBhIENTU01vdGlvbkxpc3QgY29tcG9uZW50IHdpdGggY29uZmlnXG4gKiBAcGFyYW0gdHJhbnNpdGlvblN1cHBvcnQgTm8gbmVlZCBzaW5jZSBDU1NNb3Rpb25MaXN0IG5vIGxvbmdlciBkZXBlbmRzIG9uIHRyYW5zaXRpb24gc3VwcG9ydFxuICogQHBhcmFtIENTU01vdGlvbiBDU1NNb3Rpb24gY29tcG9uZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5DU1NNb3Rpb25MaXN0KHRyYW5zaXRpb25TdXBwb3J0KSB7XG4gIHZhciBDU1NNb3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IE9yaWdpbkNTU01vdGlvbjtcbiAgdmFyIENTU01vdGlvbkxpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHMoQ1NTTW90aW9uTGlzdCwgX1JlYWN0JENvbXBvbmVudCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDU1NNb3Rpb25MaXN0KTtcbiAgICBmdW5jdGlvbiBDU1NNb3Rpb25MaXN0KCkge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENTU01vdGlvbkxpc3QpO1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgICBrZXlFbnRpdGllczogW11cbiAgICAgIH0pO1xuICAgICAgLy8gWm9tYmllSjogUmV0dXJuIHRoZSBjb3VudCBvZiByZXN0IGtleXMuIEl0J3Mgc2FmZSB0byByZWZhY3RvciBpZiBuZWVkIG1vcmUgaW5mby5cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVLZXlcIiwgZnVuY3Rpb24gKHJlbW92ZUtleSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgdmFyIG5leHRLZXlFbnRpdGllcyA9IHByZXZTdGF0ZS5rZXlFbnRpdGllcy5tYXAoZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgICAgICAgaWYgKGVudGl0eS5rZXkgIT09IHJlbW92ZUtleSkgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVudGl0eSksIHt9LCB7XG4gICAgICAgICAgICAgIHN0YXR1czogU1RBVFVTX1JFTU9WRURcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXlFbnRpdGllczogbmV4dEtleUVudGl0aWVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBrZXlFbnRpdGllcyA9IF90aGlzLnN0YXRlLmtleUVudGl0aWVzO1xuICAgICAgICAgIHZhciByZXN0S2V5c0NvdW50ID0ga2V5RW50aXRpZXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICB2YXIgc3RhdHVzID0gX3JlZi5zdGF0dXM7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzICE9PSBTVEFUVVNfUkVNT1ZFRDtcbiAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgaWYgKHJlc3RLZXlzQ291bnQgPT09IDAgJiYgX3RoaXMucHJvcHMub25BbGxSZW1vdmVkKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkFsbFJlbW92ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhDU1NNb3Rpb25MaXN0LCBbe1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHZhciBrZXlFbnRpdGllcyA9IHRoaXMuc3RhdGUua2V5RW50aXRpZXM7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgX29uVmlzaWJsZUNoYW5nZWQgPSBfdGhpcyRwcm9wcy5vblZpc2libGVDaGFuZ2VkLFxuICAgICAgICAgIG9uQWxsUmVtb3ZlZCA9IF90aGlzJHByb3BzLm9uQWxsUmVtb3ZlZCxcbiAgICAgICAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgUmVhY3QuRnJhZ21lbnQ7XG4gICAgICAgIHZhciBtb3Rpb25Qcm9wcyA9IHt9O1xuICAgICAgICBNT1RJT05fUFJPUF9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgbW90aW9uUHJvcHNbcHJvcF0gPSByZXN0UHJvcHNbcHJvcF07XG4gICAgICAgICAgZGVsZXRlIHJlc3RQcm9wc1twcm9wXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSByZXN0UHJvcHMua2V5cztcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcmVzdFByb3BzLCBrZXlFbnRpdGllcy5tYXAoZnVuY3Rpb24gKF9yZWYyLCBpbmRleCkge1xuICAgICAgICAgIHZhciBzdGF0dXMgPSBfcmVmMi5zdGF0dXMsXG4gICAgICAgICAgICBldmVudFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcbiAgICAgICAgICB2YXIgdmlzaWJsZSA9IHN0YXR1cyA9PT0gU1RBVFVTX0FERCB8fCBzdGF0dXMgPT09IFNUQVRVU19LRUVQO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDU1NNb3Rpb24sIF9leHRlbmRzKHt9LCBtb3Rpb25Qcm9wcywge1xuICAgICAgICAgICAga2V5OiBldmVudFByb3BzLmtleSxcbiAgICAgICAgICAgIHZpc2libGU6IHZpc2libGUsXG4gICAgICAgICAgICBldmVudFByb3BzOiBldmVudFByb3BzLFxuICAgICAgICAgICAgb25WaXNpYmxlQ2hhbmdlZDogZnVuY3Rpb24gb25WaXNpYmxlQ2hhbmdlZChjaGFuZ2VkVmlzaWJsZSkge1xuICAgICAgICAgICAgICBfb25WaXNpYmxlQ2hhbmdlZCA9PT0gbnVsbCB8fCBfb25WaXNpYmxlQ2hhbmdlZCA9PT0gdm9pZCAwIHx8IF9vblZpc2libGVDaGFuZ2VkKGNoYW5nZWRWaXNpYmxlLCB7XG4gICAgICAgICAgICAgICAga2V5OiBldmVudFByb3BzLmtleVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKCFjaGFuZ2VkVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5yZW1vdmVLZXkoZXZlbnRQcm9wcy5rZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksIGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgICAgfSksIHJlZik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XSwgW3tcbiAgICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZjMsIF9yZWY0KSB7XG4gICAgICAgIHZhciBrZXlzID0gX3JlZjMua2V5cztcbiAgICAgICAgdmFyIGtleUVudGl0aWVzID0gX3JlZjQua2V5RW50aXRpZXM7XG4gICAgICAgIHZhciBwYXJzZWRLZXlPYmplY3RzID0gcGFyc2VLZXlzKGtleXMpO1xuICAgICAgICB2YXIgbWl4ZWRLZXlFbnRpdGllcyA9IGRpZmZLZXlzKGtleUVudGl0aWVzLCBwYXJzZWRLZXlPYmplY3RzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXlFbnRpdGllczogbWl4ZWRLZXlFbnRpdGllcy5maWx0ZXIoZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgICAgICAgdmFyIHByZXZFbnRpdHkgPSBrZXlFbnRpdGllcy5maW5kKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICAgICAgICB2YXIga2V5ID0gX3JlZjUua2V5O1xuICAgICAgICAgICAgICByZXR1cm4gZW50aXR5LmtleSA9PT0ga2V5O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSBpZiBhbHJlYWR5IG1hcmsgYXMgcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHByZXZFbnRpdHkgJiYgcHJldkVudGl0eS5zdGF0dXMgPT09IFNUQVRVU19SRU1PVkVEICYmIGVudGl0eS5zdGF0dXMgPT09IFNUQVRVU19SRU1PVkUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XSk7XG4gICAgcmV0dXJuIENTU01vdGlvbkxpc3Q7XG4gIH0oUmVhY3QuQ29tcG9uZW50KTtcbiAgX2RlZmluZVByb3BlcnR5KENTU01vdGlvbkxpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgICBjb21wb25lbnQ6ICdkaXYnXG4gIH0pO1xuICByZXR1cm4gQ1NTTW90aW9uTGlzdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGdlbkNTU01vdGlvbkxpc3Qoc3VwcG9ydFRyYW5zaXRpb24pOyIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZVN1cGVyXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgRG9tV3JhcHBlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRG9tV3JhcHBlciwgX1JlYWN0JENvbXBvbmVudCk7XG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRG9tV3JhcHBlcik7XG4gIGZ1bmN0aW9uIERvbVdyYXBwZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERvbVdyYXBwZXIpO1xuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICBfY3JlYXRlQ2xhc3MoRG9tV3JhcHBlciwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRG9tV3JhcHBlcjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcbmV4cG9ydCBkZWZhdWx0IERvbVdyYXBwZXI7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdGlvblByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwcm9wc1xuICB9LCBjaGlsZHJlbik7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYW5pbWF0aW9uRW5kTmFtZSwgdHJhbnNpdGlvbkVuZE5hbWUgfSBmcm9tIFwiLi4vdXRpbC9tb3Rpb25cIjtcbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiAob25JbnRlcm5hbE1vdGlvbkVuZCkge1xuICB2YXIgY2FjaGVFbGVtZW50UmVmID0gdXNlUmVmKCk7XG5cbiAgLy8gUmVtb3ZlIGV2ZW50c1xuICBmdW5jdGlvbiByZW1vdmVNb3Rpb25FdmVudHMoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGFuaW1hdGlvbkVuZE5hbWUsIG9uSW50ZXJuYWxNb3Rpb25FbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhdGNoIGV2ZW50c1xuICBmdW5jdGlvbiBwYXRjaE1vdGlvbkV2ZW50cyhlbGVtZW50KSB7XG4gICAgaWYgKGNhY2hlRWxlbWVudFJlZi5jdXJyZW50ICYmIGNhY2hlRWxlbWVudFJlZi5jdXJyZW50ICE9PSBlbGVtZW50KSB7XG4gICAgICByZW1vdmVNb3Rpb25FdmVudHMoY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50ICE9PSBjYWNoZUVsZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmROYW1lLCBvbkludGVybmFsTW90aW9uRW5kKTtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihhbmltYXRpb25FbmROYW1lLCBvbkludGVybmFsTW90aW9uRW5kKTtcblxuICAgICAgLy8gU2F2ZSBhcyBjYWNoZSBpbiBjYXNlIGRvbSByZW1vdmVkIHRyaWdnZXIgYnkgYG1vdGlvbkRlYWRsaW5lYFxuICAgICAgY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8vIENsZWFuIHVwIHdoZW4gcmVtb3ZlZFxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVNb3Rpb25FdmVudHMoY2FjaGVFbGVtZW50UmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtwYXRjaE1vdGlvbkV2ZW50cywgcmVtb3ZlTW90aW9uRXZlbnRzXTtcbn0pOyIsImltcG9ydCBjYW5Vc2VEb20gZnJvbSBcInJjLXV0aWwvZXMvRG9tL2NhblVzZURvbVwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEl0J3Mgc2FmZSB0byB1c2UgYHVzZUxheW91dEVmZmVjdGAgYnV0IHRoZSB3YXJuaW5nIGlzIGFubm95aW5nXG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGNhblVzZURvbSgpID8gdXNlTGF5b3V0RWZmZWN0IDogdXNlRWZmZWN0O1xuZXhwb3J0IGRlZmF1bHQgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdDsiLCJpbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5leHRGcmFtZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgZnVuY3Rpb24gY2FuY2VsTmV4dEZyYW1lKCkge1xuICAgIHJhZi5jYW5jZWwobmV4dEZyYW1lUmVmLmN1cnJlbnQpO1xuICB9XG4gIGZ1bmN0aW9uIG5leHRGcmFtZShjYWxsYmFjaykge1xuICAgIHZhciBkZWxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMjtcbiAgICBjYW5jZWxOZXh0RnJhbWUoKTtcbiAgICB2YXIgbmV4dEZyYW1lSWQgPSByYWYoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGRlbGF5IDw9IDEpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIGlzQ2FuY2VsZWQ6IGZ1bmN0aW9uIGlzQ2FuY2VsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dEZyYW1lSWQgIT09IG5leHRGcmFtZVJlZi5jdXJyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0RnJhbWUoY2FsbGJhY2ssIGRlbGF5IC0gMSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbmV4dEZyYW1lUmVmLmN1cnJlbnQgPSBuZXh0RnJhbWVJZDtcbiAgfVxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYW5jZWxOZXh0RnJhbWUoKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiBbbmV4dEZyYW1lLCBjYW5jZWxOZXh0RnJhbWVdO1xufSk7IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IHVzZUV2ZW50IH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgdXNlU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlU3RhdGVcIjtcbmltcG9ydCB1c2VTeW5jU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlU3luY1N0YXRlXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNUQVRVU19BUFBFQVIsIFNUQVRVU19FTlRFUiwgU1RBVFVTX0xFQVZFLCBTVEFUVVNfTk9ORSwgU1RFUF9BQ1RJVkUsIFNURVBfUFJFUEFSRSwgU1RFUF9QUkVQQVJFRCwgU1RFUF9TVEFSVCB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcbmltcG9ydCB1c2VEb21Nb3Rpb25FdmVudHMgZnJvbSBcIi4vdXNlRG9tTW90aW9uRXZlbnRzXCI7XG5pbXBvcnQgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCBmcm9tIFwiLi91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0XCI7XG5pbXBvcnQgdXNlU3RlcFF1ZXVlLCB7IERvU3RlcCwgaXNBY3RpdmUsIFNraXBTdGVwIH0gZnJvbSBcIi4vdXNlU3RlcFF1ZXVlXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTdGF0dXMoc3VwcG9ydE1vdGlvbiwgdmlzaWJsZSwgZ2V0RWxlbWVudCwgX3JlZikge1xuICB2YXIgX3JlZiRtb3Rpb25FbnRlciA9IF9yZWYubW90aW9uRW50ZXIsXG4gICAgbW90aW9uRW50ZXIgPSBfcmVmJG1vdGlvbkVudGVyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRtb3Rpb25FbnRlcixcbiAgICBfcmVmJG1vdGlvbkFwcGVhciA9IF9yZWYubW90aW9uQXBwZWFyLFxuICAgIG1vdGlvbkFwcGVhciA9IF9yZWYkbW90aW9uQXBwZWFyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRtb3Rpb25BcHBlYXIsXG4gICAgX3JlZiRtb3Rpb25MZWF2ZSA9IF9yZWYubW90aW9uTGVhdmUsXG4gICAgbW90aW9uTGVhdmUgPSBfcmVmJG1vdGlvbkxlYXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRtb3Rpb25MZWF2ZSxcbiAgICBtb3Rpb25EZWFkbGluZSA9IF9yZWYubW90aW9uRGVhZGxpbmUsXG4gICAgbW90aW9uTGVhdmVJbW1lZGlhdGVseSA9IF9yZWYubW90aW9uTGVhdmVJbW1lZGlhdGVseSxcbiAgICBvbkFwcGVhclByZXBhcmUgPSBfcmVmLm9uQXBwZWFyUHJlcGFyZSxcbiAgICBvbkVudGVyUHJlcGFyZSA9IF9yZWYub25FbnRlclByZXBhcmUsXG4gICAgb25MZWF2ZVByZXBhcmUgPSBfcmVmLm9uTGVhdmVQcmVwYXJlLFxuICAgIG9uQXBwZWFyU3RhcnQgPSBfcmVmLm9uQXBwZWFyU3RhcnQsXG4gICAgb25FbnRlclN0YXJ0ID0gX3JlZi5vbkVudGVyU3RhcnQsXG4gICAgb25MZWF2ZVN0YXJ0ID0gX3JlZi5vbkxlYXZlU3RhcnQsXG4gICAgb25BcHBlYXJBY3RpdmUgPSBfcmVmLm9uQXBwZWFyQWN0aXZlLFxuICAgIG9uRW50ZXJBY3RpdmUgPSBfcmVmLm9uRW50ZXJBY3RpdmUsXG4gICAgb25MZWF2ZUFjdGl2ZSA9IF9yZWYub25MZWF2ZUFjdGl2ZSxcbiAgICBvbkFwcGVhckVuZCA9IF9yZWYub25BcHBlYXJFbmQsXG4gICAgb25FbnRlckVuZCA9IF9yZWYub25FbnRlckVuZCxcbiAgICBvbkxlYXZlRW5kID0gX3JlZi5vbkxlYXZlRW5kLFxuICAgIG9uVmlzaWJsZUNoYW5nZWQgPSBfcmVmLm9uVmlzaWJsZUNoYW5nZWQ7XG4gIC8vIFVzZWQgZm9yIG91dGVyIHJlbmRlciB1c2FnZSB0byBhdm9pZCBgdmlzaWJsZTogZmFsc2UgJiBzdGF0dXM6IG5vbmVgIHRvIHJlbmRlciBub3RoaW5nXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSgpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIGFzeW5jVmlzaWJsZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0QXN5bmNWaXNpYmxlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTeW5jU3RhdGUgPSB1c2VTeW5jU3RhdGUoU1RBVFVTX05PTkUpLFxuICAgIF91c2VTeW5jU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN5bmNTdGF0ZSwgMiksXG4gICAgZ2V0U3RhdHVzID0gX3VzZVN5bmNTdGF0ZTJbMF0sXG4gICAgc2V0U3RhdHVzID0gX3VzZVN5bmNTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHN0eWxlID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRTdHlsZSA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBjdXJyZW50U3RhdHVzID0gZ2V0U3RhdHVzKCk7XG4gIHZhciBtb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGRlYWRsaW5lUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PSBEb20gTm9kZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZ2V0RG9tRWxlbWVudCgpIHtcbiAgICByZXR1cm4gZ2V0RWxlbWVudCgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gTW90aW9uIEVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgYWN0aXZlUmVmID0gdXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogQ2xlYW4gdXAgc3RhdHVzICYgc3R5bGVcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZU1vdGlvbkVuZFN0YXR1cygpIHtcbiAgICBzZXRTdGF0dXMoU1RBVFVTX05PTkUpO1xuICAgIHNldFN0eWxlKG51bGwsIHRydWUpO1xuICB9XG4gIHZhciBvbkludGVybmFsTW90aW9uRW5kID0gdXNlRXZlbnQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHN0YXR1cyA9IGdldFN0YXR1cygpO1xuICAgIC8vIERvIG5vdGhpbmcgc2luY2Ugbm90IGluIGFueSB0cmFuc2l0aW9uIHN0YXR1cy5cbiAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBgbW90aW9uRGVhZGxpbmVgIHRyaWdnZXIuXG4gICAgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX05PTkUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnQgPSBnZXREb21FbGVtZW50KCk7XG4gICAgaWYgKGV2ZW50ICYmICFldmVudC5kZWFkbGluZSAmJiBldmVudC50YXJnZXQgIT09IGVsZW1lbnQpIHtcbiAgICAgIC8vIGV2ZW50IGV4aXN0c1xuICAgICAgLy8gbm90IGluaXRpYXRlZCBieSBkZWFkbGluZVxuICAgICAgLy8gdHJhbnNpdGlvbkVuZCBub3QgZmlyZWQgYnkgaW5uZXIgZWxlbWVudHNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGN1cnJlbnRBY3RpdmUgPSBhY3RpdmVSZWYuY3VycmVudDtcbiAgICB2YXIgY2FuRW5kO1xuICAgIGlmIChzdGF0dXMgPT09IFNUQVRVU19BUFBFQVIgJiYgY3VycmVudEFjdGl2ZSkge1xuICAgICAgY2FuRW5kID0gb25BcHBlYXJFbmQgPT09IG51bGwgfHwgb25BcHBlYXJFbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQXBwZWFyRW5kKGVsZW1lbnQsIGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gU1RBVFVTX0VOVEVSICYmIGN1cnJlbnRBY3RpdmUpIHtcbiAgICAgIGNhbkVuZCA9IG9uRW50ZXJFbmQgPT09IG51bGwgfHwgb25FbnRlckVuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FbnRlckVuZChlbGVtZW50LCBldmVudCk7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IFNUQVRVU19MRUFWRSAmJiBjdXJyZW50QWN0aXZlKSB7XG4gICAgICBjYW5FbmQgPSBvbkxlYXZlRW5kID09PSBudWxsIHx8IG9uTGVhdmVFbmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uTGVhdmVFbmQoZWxlbWVudCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdXBkYXRlIHN0YXR1cyB3aGVuIGBjYW5FbmRgIGFuZCBub3QgZGVzdHJveWVkXG4gICAgaWYgKGN1cnJlbnRBY3RpdmUgJiYgY2FuRW5kICE9PSBmYWxzZSkge1xuICAgICAgdXBkYXRlTW90aW9uRW5kU3RhdHVzKCk7XG4gICAgfVxuICB9KTtcbiAgdmFyIF91c2VEb21Nb3Rpb25FdmVudHMgPSB1c2VEb21Nb3Rpb25FdmVudHMob25JbnRlcm5hbE1vdGlvbkVuZCksXG4gICAgX3VzZURvbU1vdGlvbkV2ZW50czIgPSBfc2xpY2VkVG9BcnJheShfdXNlRG9tTW90aW9uRXZlbnRzLCAxKSxcbiAgICBwYXRjaE1vdGlvbkV2ZW50cyA9IF91c2VEb21Nb3Rpb25FdmVudHMyWzBdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN0ZXAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldEV2ZW50SGFuZGxlcnMgPSBmdW5jdGlvbiBnZXRFdmVudEhhbmRsZXJzKHRhcmdldFN0YXR1cykge1xuICAgIHN3aXRjaCAodGFyZ2V0U3RhdHVzKSB7XG4gICAgICBjYXNlIFNUQVRVU19BUFBFQVI6XG4gICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgU1RFUF9QUkVQQVJFLCBvbkFwcGVhclByZXBhcmUpLCBTVEVQX1NUQVJULCBvbkFwcGVhclN0YXJ0KSwgU1RFUF9BQ1RJVkUsIG9uQXBwZWFyQWN0aXZlKTtcbiAgICAgIGNhc2UgU1RBVFVTX0VOVEVSOlxuICAgICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFNURVBfUFJFUEFSRSwgb25FbnRlclByZXBhcmUpLCBTVEVQX1NUQVJULCBvbkVudGVyU3RhcnQpLCBTVEVQX0FDVElWRSwgb25FbnRlckFjdGl2ZSk7XG4gICAgICBjYXNlIFNUQVRVU19MRUFWRTpcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBTVEVQX1BSRVBBUkUsIG9uTGVhdmVQcmVwYXJlKSwgU1RFUF9TVEFSVCwgb25MZWF2ZVN0YXJ0KSwgU1RFUF9BQ1RJVkUsIG9uTGVhdmVBY3RpdmUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbiAgdmFyIGV2ZW50SGFuZGxlcnMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0RXZlbnRIYW5kbGVycyhjdXJyZW50U3RhdHVzKTtcbiAgfSwgW2N1cnJlbnRTdGF0dXNdKTtcbiAgdmFyIF91c2VTdGVwUXVldWUgPSB1c2VTdGVwUXVldWUoY3VycmVudFN0YXR1cywgIXN1cHBvcnRNb3Rpb24sIGZ1bmN0aW9uIChuZXdTdGVwKSB7XG4gICAgICAvLyBPbmx5IHByZXBhcmUgc3RlcCBjYW4gYmUgc2tpcFxuICAgICAgaWYgKG5ld1N0ZXAgPT09IFNURVBfUFJFUEFSRSkge1xuICAgICAgICB2YXIgb25QcmVwYXJlID0gZXZlbnRIYW5kbGVyc1tTVEVQX1BSRVBBUkVdO1xuICAgICAgICBpZiAoIW9uUHJlcGFyZSkge1xuICAgICAgICAgIHJldHVybiBTa2lwU3RlcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb25QcmVwYXJlKGdldERvbUVsZW1lbnQoKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3Qgc3RlcCBpcyBzeW5jIHVwZGF0ZVxuICAgICAgaWYgKHN0ZXAgaW4gZXZlbnRIYW5kbGVycykge1xuICAgICAgICB2YXIgX2V2ZW50SGFuZGxlcnMkc3RlcDtcbiAgICAgICAgc2V0U3R5bGUoKChfZXZlbnRIYW5kbGVycyRzdGVwID0gZXZlbnRIYW5kbGVyc1tzdGVwXSkgPT09IG51bGwgfHwgX2V2ZW50SGFuZGxlcnMkc3RlcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2V2ZW50SGFuZGxlcnMkc3RlcC5jYWxsKGV2ZW50SGFuZGxlcnMsIGdldERvbUVsZW1lbnQoKSwgbnVsbCkpIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ZXAgPT09IFNURVBfQUNUSVZFICYmIGN1cnJlbnRTdGF0dXMgIT09IFNUQVRVU19OT05FKSB7XG4gICAgICAgIC8vIFBhdGNoIGV2ZW50cyB3aGVuIG1vdGlvbiBuZWVkZWRcbiAgICAgICAgcGF0Y2hNb3Rpb25FdmVudHMoZ2V0RG9tRWxlbWVudCgpKTtcbiAgICAgICAgaWYgKG1vdGlvbkRlYWRsaW5lID4gMCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChkZWFkbGluZVJlZi5jdXJyZW50KTtcbiAgICAgICAgICBkZWFkbGluZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvbkludGVybmFsTW90aW9uRW5kKHtcbiAgICAgICAgICAgICAgZGVhZGxpbmU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIG1vdGlvbkRlYWRsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0ZXAgPT09IFNURVBfUFJFUEFSRUQpIHtcbiAgICAgICAgdXBkYXRlTW90aW9uRW5kU3RhdHVzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gRG9TdGVwO1xuICAgIH0pLFxuICAgIF91c2VTdGVwUXVldWUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0ZXBRdWV1ZSwgMiksXG4gICAgc3RhcnRTdGVwID0gX3VzZVN0ZXBRdWV1ZTJbMF0sXG4gICAgc3RlcCA9IF91c2VTdGVwUXVldWUyWzFdO1xuICB2YXIgYWN0aXZlID0gaXNBY3RpdmUoc3RlcCk7XG4gIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RhdHVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHZpc2libGVSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgLy8gVXBkYXRlIHdpdGggbmV3IHN0YXR1c1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaGVuIHVzZSBTdXNwZW5zZSwgdGhlIGB2aXNpYmxlYCB3aWxsIHJlcGVhdCB0cmlnZ2VyLFxuICAgIC8vIEJ1dCBub3QgcmVhbCBjaGFuZ2Ugb2YgdGhlIGB2aXNpYmxlYCwgd2UgbmVlZCB0byBza2lwIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzQ0Mzc5XG4gICAgaWYgKG1vdW50ZWRSZWYuY3VycmVudCAmJiB2aXNpYmxlUmVmLmN1cnJlbnQgPT09IHZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0QXN5bmNWaXNpYmxlKHZpc2libGUpO1xuICAgIHZhciBpc01vdW50ZWQgPSBtb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgbW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgIC8vIGlmICghc3VwcG9ydE1vdGlvbikge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cblxuICAgIHZhciBuZXh0U3RhdHVzO1xuXG4gICAgLy8gQXBwZWFyXG4gICAgaWYgKCFpc01vdW50ZWQgJiYgdmlzaWJsZSAmJiBtb3Rpb25BcHBlYXIpIHtcbiAgICAgIG5leHRTdGF0dXMgPSBTVEFUVVNfQVBQRUFSO1xuICAgIH1cblxuICAgIC8vIEVudGVyXG4gICAgaWYgKGlzTW91bnRlZCAmJiB2aXNpYmxlICYmIG1vdGlvbkVudGVyKSB7XG4gICAgICBuZXh0U3RhdHVzID0gU1RBVFVTX0VOVEVSO1xuICAgIH1cblxuICAgIC8vIExlYXZlXG4gICAgaWYgKGlzTW91bnRlZCAmJiAhdmlzaWJsZSAmJiBtb3Rpb25MZWF2ZSB8fCAhaXNNb3VudGVkICYmIG1vdGlvbkxlYXZlSW1tZWRpYXRlbHkgJiYgIXZpc2libGUgJiYgbW90aW9uTGVhdmUpIHtcbiAgICAgIG5leHRTdGF0dXMgPSBTVEFUVVNfTEVBVkU7XG4gICAgfVxuICAgIHZhciBuZXh0RXZlbnRIYW5kbGVycyA9IGdldEV2ZW50SGFuZGxlcnMobmV4dFN0YXR1cyk7XG5cbiAgICAvLyBVcGRhdGUgdG8gbmV4dCBzdGF0dXNcbiAgICBpZiAobmV4dFN0YXR1cyAmJiAoc3VwcG9ydE1vdGlvbiB8fCBuZXh0RXZlbnRIYW5kbGVyc1tTVEVQX1BSRVBBUkVdKSkge1xuICAgICAgc2V0U3RhdHVzKG5leHRTdGF0dXMpO1xuICAgICAgc3RhcnRTdGVwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNldCBiYWNrIGluIGNhc2Ugbm8gbW90aW9uIGJ1dCBwcmV2IHN0YXR1cyBoYXMgcHJlcGFyZSBzdGVwXG4gICAgICBzZXRTdGF0dXMoU1RBVFVTX05PTkUpO1xuICAgIH1cbiAgICB2aXNpYmxlUmVmLmN1cnJlbnQgPSB2aXNpYmxlO1xuICB9LCBbdmlzaWJsZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmVzZXQgd2hlbiBtb3Rpb24gY2hhbmdlZFxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChcbiAgICAvLyBDYW5jZWwgYXBwZWFyXG4gICAgY3VycmVudFN0YXR1cyA9PT0gU1RBVFVTX0FQUEVBUiAmJiAhbW90aW9uQXBwZWFyIHx8XG4gICAgLy8gQ2FuY2VsIGVudGVyXG4gICAgY3VycmVudFN0YXR1cyA9PT0gU1RBVFVTX0VOVEVSICYmICFtb3Rpb25FbnRlciB8fFxuICAgIC8vIENhbmNlbCBsZWF2ZVxuICAgIGN1cnJlbnRTdGF0dXMgPT09IFNUQVRVU19MRUFWRSAmJiAhbW90aW9uTGVhdmUpIHtcbiAgICAgIHNldFN0YXR1cyhTVEFUVVNfTk9ORSk7XG4gICAgfVxuICB9LCBbbW90aW9uQXBwZWFyLCBtb3Rpb25FbnRlciwgbW90aW9uTGVhdmVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBjbGVhclRpbWVvdXQoZGVhZGxpbmVSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFRyaWdnZXIgYG9uVmlzaWJsZUNoYW5nZWRgXG4gIHZhciBmaXJzdE1vdW50Q2hhbmdlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBbdmlzaWJsZSAmIG1vdGlvbiBub3QgZW5kXSA9PiBbIXZpc2libGUgJiBtb3Rpb24gZW5kXSBzdGlsbCBuZWVkIHRyaWdnZXIgb25WaXNpYmxlQ2hhbmdlZFxuICAgIGlmIChhc3luY1Zpc2libGUpIHtcbiAgICAgIGZpcnN0TW91bnRDaGFuZ2VSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChhc3luY1Zpc2libGUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50U3RhdHVzID09PSBTVEFUVVNfTk9ORSkge1xuICAgICAgLy8gU2tpcCBmaXJzdCByZW5kZXIgaXMgaW52aXNpYmxlIHNpbmNlIGl0J3Mgbm90aGluZyBjaGFuZ2VkXG4gICAgICBpZiAoZmlyc3RNb3VudENoYW5nZVJlZi5jdXJyZW50IHx8IGFzeW5jVmlzaWJsZSkge1xuICAgICAgICBvblZpc2libGVDaGFuZ2VkID09PSBudWxsIHx8IG9uVmlzaWJsZUNoYW5nZWQgPT09IHZvaWQgMCB8fCBvblZpc2libGVDaGFuZ2VkKGFzeW5jVmlzaWJsZSk7XG4gICAgICB9XG4gICAgICBmaXJzdE1vdW50Q2hhbmdlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgfSwgW2FzeW5jVmlzaWJsZSwgY3VycmVudFN0YXR1c10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3R5bGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZFN0eWxlID0gc3R5bGU7XG4gIGlmIChldmVudEhhbmRsZXJzW1NURVBfUFJFUEFSRV0gJiYgc3RlcCA9PT0gU1RFUF9TVEFSVCkge1xuICAgIG1lcmdlZFN0eWxlID0gX29iamVjdFNwcmVhZCh7XG4gICAgICB0cmFuc2l0aW9uOiAnbm9uZSdcbiAgICB9LCBtZXJnZWRTdHlsZSk7XG4gIH1cbiAgcmV0dXJuIFtjdXJyZW50U3RhdHVzLCBzdGVwLCBtZXJnZWRTdHlsZSwgYXN5bmNWaXNpYmxlICE9PSBudWxsICYmIGFzeW5jVmlzaWJsZSAhPT0gdm9pZCAwID8gYXN5bmNWaXNpYmxlIDogdmlzaWJsZV07XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgdXNlU3RhdGUgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlU3RhdGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNURVBfQUNUSVZBVEVELCBTVEVQX0FDVElWRSwgU1RFUF9OT05FLCBTVEVQX1BSRVBBUkUsIFNURVBfUFJFUEFSRUQsIFNURVBfU1RBUlQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5pbXBvcnQgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCBmcm9tIFwiLi91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0XCI7XG5pbXBvcnQgdXNlTmV4dEZyYW1lIGZyb20gXCIuL3VzZU5leHRGcmFtZVwiO1xudmFyIEZVTExfU1RFUF9RVUVVRSA9IFtTVEVQX1BSRVBBUkUsIFNURVBfU1RBUlQsIFNURVBfQUNUSVZFLCBTVEVQX0FDVElWQVRFRF07XG52YXIgU0lNUExFX1NURVBfUVVFVUUgPSBbU1RFUF9QUkVQQVJFLCBTVEVQX1BSRVBBUkVEXTtcblxuLyoqIFNraXAgY3VycmVudCBzdGVwICovXG5leHBvcnQgdmFyIFNraXBTdGVwID0gZmFsc2U7XG4vKiogQ3VycmVudCBzdGVwIHNob3VsZCBiZSB1cGRhdGUgaW4gKi9cbmV4cG9ydCB2YXIgRG9TdGVwID0gdHJ1ZTtcbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGl2ZShzdGVwKSB7XG4gIHJldHVybiBzdGVwID09PSBTVEVQX0FDVElWRSB8fCBzdGVwID09PSBTVEVQX0FDVElWQVRFRDtcbn1cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiAoc3RhdHVzLCBwcmVwYXJlT25seSwgY2FsbGJhY2spIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKFNURVBfTk9ORSksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgc3RlcCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3RlcCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlTmV4dEZyYW1lID0gdXNlTmV4dEZyYW1lKCksXG4gICAgX3VzZU5leHRGcmFtZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTmV4dEZyYW1lLCAyKSxcbiAgICBuZXh0RnJhbWUgPSBfdXNlTmV4dEZyYW1lMlswXSxcbiAgICBjYW5jZWxOZXh0RnJhbWUgPSBfdXNlTmV4dEZyYW1lMlsxXTtcbiAgZnVuY3Rpb24gc3RhcnRRdWV1ZSgpIHtcbiAgICBzZXRTdGVwKFNURVBfUFJFUEFSRSwgdHJ1ZSk7XG4gIH1cbiAgdmFyIFNURVBfUVVFVUUgPSBwcmVwYXJlT25seSA/IFNJTVBMRV9TVEVQX1FVRVVFIDogRlVMTF9TVEVQX1FVRVVFO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3RlcCAhPT0gU1RFUF9OT05FICYmIHN0ZXAgIT09IFNURVBfQUNUSVZBVEVEKSB7XG4gICAgICB2YXIgaW5kZXggPSBTVEVQX1FVRVVFLmluZGV4T2Yoc3RlcCk7XG4gICAgICB2YXIgbmV4dFN0ZXAgPSBTVEVQX1FVRVVFW2luZGV4ICsgMV07XG4gICAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2soc3RlcCk7XG4gICAgICBpZiAocmVzdWx0ID09PSBTa2lwU3RlcCkge1xuICAgICAgICAvLyBTa2lwIHdoZW4gbm8gbmVlZGVkXG4gICAgICAgIHNldFN0ZXAobmV4dFN0ZXAsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChuZXh0U3RlcCkge1xuICAgICAgICAvLyBEbyBhcyBmcmFtZSBmb3Igc3RlcCB1cGRhdGVcbiAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgICAgZnVuY3Rpb24gZG9OZXh0KCkge1xuICAgICAgICAgICAgLy8gU2tpcCBzaW5jZSBjdXJyZW50IHF1ZXVlIGlzIG9vZFxuICAgICAgICAgICAgaWYgKGluZm8uaXNDYW5jZWxlZCgpKSByZXR1cm47XG4gICAgICAgICAgICBzZXRTdGVwKG5leHRTdGVwLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZG9OZXh0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE9ubHkgcHJvbWlzZSBzaG91bGQgYmUgYXN5bmNcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4oZG9OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXR1cywgc3RlcF0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYW5jZWxOZXh0RnJhbWUoKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiBbc3RhcnRRdWV1ZSwgc3RlcF07XG59KTsiLCJpbXBvcnQgQ1NTTW90aW9uIGZyb20gXCIuL0NTU01vdGlvblwiO1xuaW1wb3J0IENTU01vdGlvbkxpc3QgZnJvbSBcIi4vQ1NTTW90aW9uTGlzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQcm92aWRlciB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmV4cG9ydCB7IENTU01vdGlvbkxpc3QgfTtcbmV4cG9ydCBkZWZhdWx0IENTU01vdGlvbjsiLCJleHBvcnQgdmFyIFNUQVRVU19OT05FID0gJ25vbmUnO1xuZXhwb3J0IHZhciBTVEFUVVNfQVBQRUFSID0gJ2FwcGVhcic7XG5leHBvcnQgdmFyIFNUQVRVU19FTlRFUiA9ICdlbnRlcic7XG5leHBvcnQgdmFyIFNUQVRVU19MRUFWRSA9ICdsZWF2ZSc7XG5leHBvcnQgdmFyIFNURVBfTk9ORSA9ICdub25lJztcbmV4cG9ydCB2YXIgU1RFUF9QUkVQQVJFID0gJ3ByZXBhcmUnO1xuZXhwb3J0IHZhciBTVEVQX1NUQVJUID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgU1RFUF9BQ1RJVkUgPSAnYWN0aXZlJztcbmV4cG9ydCB2YXIgU1RFUF9BQ1RJVkFURUQgPSAnZW5kJztcbi8qKlxuICogVXNlZCBmb3IgZGlzYWJsZWQgbW90aW9uIGNhc2UuXG4gKiBQcmVwYXJlIHN0YWdlIHdpbGwgc3RpbGwgd29yayBidXQgc3RhcnQgJiBhY3RpdmUgd2lsbCBiZSBza2lwcGVkLlxuICovXG5leHBvcnQgdmFyIFNURVBfUFJFUEFSRUQgPSAncHJlcGFyZWQnOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5leHBvcnQgdmFyIFNUQVRVU19BREQgPSAnYWRkJztcbmV4cG9ydCB2YXIgU1RBVFVTX0tFRVAgPSAna2VlcCc7XG5leHBvcnQgdmFyIFNUQVRVU19SRU1PVkUgPSAncmVtb3ZlJztcbmV4cG9ydCB2YXIgU1RBVFVTX1JFTU9WRUQgPSAncmVtb3ZlZCc7XG5leHBvcnQgZnVuY3Rpb24gd3JhcEtleVRvT2JqZWN0KGtleSkge1xuICB2YXIga2V5T2JqO1xuICBpZiAoa2V5ICYmIF90eXBlb2Yoa2V5KSA9PT0gJ29iamVjdCcgJiYgJ2tleScgaW4ga2V5KSB7XG4gICAga2V5T2JqID0ga2V5O1xuICB9IGVsc2Uge1xuICAgIGtleU9iaiA9IHtcbiAgICAgIGtleToga2V5XG4gICAgfTtcbiAgfVxuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBrZXlPYmopLCB7fSwge1xuICAgIGtleTogU3RyaW5nKGtleU9iai5rZXkpXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlS2V5cygpIHtcbiAgdmFyIGtleXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICByZXR1cm4ga2V5cy5tYXAod3JhcEtleVRvT2JqZWN0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmS2V5cygpIHtcbiAgdmFyIHByZXZLZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcbiAgdmFyIGN1cnJlbnRLZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgdmFyIGxpc3QgPSBbXTtcbiAgdmFyIGN1cnJlbnRJbmRleCA9IDA7XG4gIHZhciBjdXJyZW50TGVuID0gY3VycmVudEtleXMubGVuZ3RoO1xuICB2YXIgcHJldktleU9iamVjdHMgPSBwYXJzZUtleXMocHJldktleXMpO1xuICB2YXIgY3VycmVudEtleU9iamVjdHMgPSBwYXJzZUtleXMoY3VycmVudEtleXMpO1xuXG4gIC8vIENoZWNrIHByZXYga2V5cyB0byBpbnNlcnQgb3Iga2VlcFxuICBwcmV2S2V5T2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlPYmopIHtcbiAgICB2YXIgaGl0ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IGN1cnJlbnRJbmRleDsgaSA8IGN1cnJlbnRMZW47IGkgKz0gMSkge1xuICAgICAgdmFyIGN1cnJlbnRLZXlPYmogPSBjdXJyZW50S2V5T2JqZWN0c1tpXTtcbiAgICAgIGlmIChjdXJyZW50S2V5T2JqLmtleSA9PT0ga2V5T2JqLmtleSkge1xuICAgICAgICAvLyBOZXcgYWRkZWQga2V5cyBzaG91bGQgYWRkIGJlZm9yZSBjdXJyZW50IGtleVxuICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgaSkge1xuICAgICAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChjdXJyZW50S2V5T2JqZWN0cy5zbGljZShjdXJyZW50SW5kZXgsIGkpLm1hcChmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvYmopLCB7fSwge1xuICAgICAgICAgICAgICBzdGF0dXM6IFNUQVRVU19BRERcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjdXJyZW50SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QucHVzaChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRLZXlPYmopLCB7fSwge1xuICAgICAgICAgIHN0YXR1czogU1RBVFVTX0tFRVBcbiAgICAgICAgfSkpO1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gMTtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IGhpdCwgaXQgbWVhbnMga2V5IGlzIHJlbW92ZWRcbiAgICBpZiAoIWhpdCkge1xuICAgICAgbGlzdC5wdXNoKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwga2V5T2JqKSwge30sIHtcbiAgICAgICAgc3RhdHVzOiBTVEFUVVNfUkVNT1ZFXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBBZGQgcmVzdCB0byB0aGUgbGlzdFxuICBpZiAoY3VycmVudEluZGV4IDwgY3VycmVudExlbikge1xuICAgIGxpc3QgPSBsaXN0LmNvbmNhdChjdXJyZW50S2V5T2JqZWN0cy5zbGljZShjdXJyZW50SW5kZXgpLm1hcChmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvYmopLCB7fSwge1xuICAgICAgICBzdGF0dXM6IFNUQVRVU19BRERcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBzYW1lIGtleSB3aGVuIGl0IHJlbW92ZSBhbmQgYWRkIGFnYWluOlxuICAgKiAgICBbMSAtIGFkZCwgMiAtIGtlZXAsIDEgLSByZW1vdmVdIC0+IFsxIC0ga2VlcCwgMiAtIGtlZXBdXG4gICAqL1xuICB2YXIga2V5cyA9IHt9O1xuICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIga2V5ID0gX3JlZi5rZXk7XG4gICAga2V5c1trZXldID0gKGtleXNba2V5XSB8fCAwKSArIDE7XG4gIH0pO1xuICB2YXIgZHVwbGljYXRlZEtleXMgPSBPYmplY3Qua2V5cyhrZXlzKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXlzW2tleV0gPiAxO1xuICB9KTtcbiAgZHVwbGljYXRlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hLZXkpIHtcbiAgICAvLyBSZW1vdmUgYFNUQVRVU19SRU1PVkVgIG5vZGUuXG4gICAgbGlzdCA9IGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIGtleSA9IF9yZWYyLmtleSxcbiAgICAgICAgc3RhdHVzID0gX3JlZjIuc3RhdHVzO1xuICAgICAgcmV0dXJuIGtleSAhPT0gbWF0Y2hLZXkgfHwgc3RhdHVzICE9PSBTVEFUVVNfUkVNT1ZFO1xuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIGBTVEFUVVNfQUREYCB0byBgU1RBVFVTX0tFRVBgXG4gICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAobm9kZS5rZXkgPT09IG1hdGNoS2V5KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBub2RlLnN0YXR1cyA9IFNUQVRVU19LRUVQO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGxpc3Q7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGNhblVzZURPTSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vY2FuVXNlRG9tXCI7XG4vLyA9PT09PT09PT09PT09PT09PSBUcmFuc2l0aW9uID09PT09PT09PT09PT09PT09XG4vLyBFdmVudCB3cmFwcGVyLiBDb3B5IGZyb20gcmVhY3Qgc291cmNlIGNvZGVcbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUpIHtcbiAgdmFyIHByZWZpeGVzID0ge307XG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1tcIldlYmtpdFwiLmNvbmNhdChzdHlsZVByb3ApXSA9IFwid2Via2l0XCIuY29uY2F0KGV2ZW50TmFtZSk7XG4gIHByZWZpeGVzW1wiTW96XCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJtb3pcIi5jb25jYXQoZXZlbnROYW1lKTtcbiAgcHJlZml4ZXNbXCJtc1wiLmNvbmNhdChzdHlsZVByb3ApXSA9IFwiTVNcIi5jb25jYXQoZXZlbnROYW1lKTtcbiAgcHJlZml4ZXNbXCJPXCIuY29uY2F0KHN0eWxlUHJvcCldID0gXCJvXCIuY29uY2F0KGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVzKGRvbVN1cHBvcnQsIHdpbikge1xuICB2YXIgcHJlZml4ZXMgPSB7XG4gICAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gICAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJylcbiAgfTtcbiAgaWYgKGRvbVN1cHBvcnQpIHtcbiAgICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbikpIHtcbiAgICAgIGRlbGV0ZSBwcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICAgIH1cbiAgICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW4pKSB7XG4gICAgICBkZWxldGUgcHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZXM7XG59XG52YXIgdmVuZG9yUHJlZml4ZXMgPSBnZXRWZW5kb3JQcmVmaXhlcyhjYW5Vc2VET00oKSwgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fSk7XG52YXIgc3R5bGUgPSB7fTtcbmlmIChjYW5Vc2VET00oKSkge1xuICB2YXIgX2RvY3VtZW50JGNyZWF0ZUVsZW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHN0eWxlID0gX2RvY3VtZW50JGNyZWF0ZUVsZW1lLnN0eWxlO1xufVxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH1cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG4gIGlmIChwcmVmaXhNYXApIHtcbiAgICB2YXIgc3R5bGVQcm9wTGlzdCA9IE9iamVjdC5rZXlzKHByZWZpeE1hcCk7XG4gICAgdmFyIGxlbiA9IHN0eWxlUHJvcExpc3QubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgIHZhciBzdHlsZVByb3AgPSBzdHlsZVByb3BMaXN0W2ldO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcmVmaXhNYXAsIHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICAgIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxudmFyIGludGVybmFsQW5pbWF0aW9uRW5kTmFtZSA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTtcbnZhciBpbnRlcm5hbFRyYW5zaXRpb25FbmROYW1lID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQnKTtcbmV4cG9ydCB2YXIgc3VwcG9ydFRyYW5zaXRpb24gPSAhIShpbnRlcm5hbEFuaW1hdGlvbkVuZE5hbWUgJiYgaW50ZXJuYWxUcmFuc2l0aW9uRW5kTmFtZSk7XG5leHBvcnQgdmFyIGFuaW1hdGlvbkVuZE5hbWUgPSBpbnRlcm5hbEFuaW1hdGlvbkVuZE5hbWUgfHwgJ2FuaW1hdGlvbmVuZCc7XG5leHBvcnQgdmFyIHRyYW5zaXRpb25FbmROYW1lID0gaW50ZXJuYWxUcmFuc2l0aW9uRW5kTmFtZSB8fCAndHJhbnNpdGlvbmVuZCc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbk5hbWUodHJhbnNpdGlvbk5hbWUsIHRyYW5zaXRpb25UeXBlKSB7XG4gIGlmICghdHJhbnNpdGlvbk5hbWUpIHJldHVybiBudWxsO1xuICBpZiAoX3R5cGVvZih0cmFuc2l0aW9uTmFtZSkgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHR5cGUgPSB0cmFuc2l0aW9uVHlwZS5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25OYW1lW3R5cGVdO1xuICB9XG4gIHJldHVybiBcIlwiLmNvbmNhdCh0cmFuc2l0aW9uTmFtZSwgXCItXCIpLmNvbmNhdCh0cmFuc2l0aW9uVHlwZSk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBLZXlDb2RlIGZyb20gXCJyYy11dGlsL2VzL0tleUNvZGVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBwaWNrQXR0cnMgZnJvbSBcInJjLXV0aWwvZXMvcGlja0F0dHJzXCI7XG52YXIgTm90aWZ5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICBfcHJvcHMkZHVyYXRpb24gPSBwcm9wcy5kdXJhdGlvbixcbiAgICBkdXJhdGlvbiA9IF9wcm9wcyRkdXJhdGlvbiA9PT0gdm9pZCAwID8gNC41IDogX3Byb3BzJGR1cmF0aW9uLFxuICAgIHNob3dQcm9ncmVzcyA9IHByb3BzLnNob3dQcm9ncmVzcyxcbiAgICBfcHJvcHMkcGF1c2VPbkhvdmVyID0gcHJvcHMucGF1c2VPbkhvdmVyLFxuICAgIHBhdXNlT25Ib3ZlciA9IF9wcm9wcyRwYXVzZU9uSG92ZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkcGF1c2VPbkhvdmVyLFxuICAgIGV2ZW50S2V5ID0gcHJvcHMuZXZlbnRLZXksXG4gICAgY29udGVudCA9IHByb3BzLmNvbnRlbnQsXG4gICAgY2xvc2FibGUgPSBwcm9wcy5jbG9zYWJsZSxcbiAgICBfcHJvcHMkY2xvc2VJY29uID0gcHJvcHMuY2xvc2VJY29uLFxuICAgIGNsb3NlSWNvbiA9IF9wcm9wcyRjbG9zZUljb24gPT09IHZvaWQgMCA/ICd4JyA6IF9wcm9wcyRjbG9zZUljb24sXG4gICAgZGl2UHJvcHMgPSBwcm9wcy5wcm9wcyxcbiAgICBvbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICBvbk5vdGljZUNsb3NlID0gcHJvcHMub25Ob3RpY2VDbG9zZSxcbiAgICB0aW1lcyA9IHByb3BzLnRpbWVzLFxuICAgIGZvcmNlZEhvdmVyaW5nID0gcHJvcHMuaG92ZXJpbmc7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgaG92ZXJpbmcgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEhvdmVyaW5nID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgcGVyY2VudCA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGVyY2VudCA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBfUmVhY3QkdXNlU3RhdGU1ID0gUmVhY3QudXNlU3RhdGUoMCksXG4gICAgX1JlYWN0JHVzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTUsIDIpLFxuICAgIHNwZW50VGltZSA9IF9SZWFjdCR1c2VTdGF0ZTZbMF0sXG4gICAgc2V0U3BlbnRUaW1lID0gX1JlYWN0JHVzZVN0YXRlNlsxXTtcbiAgdmFyIG1lcmdlZEhvdmVyaW5nID0gZm9yY2VkSG92ZXJpbmcgfHwgaG92ZXJpbmc7XG4gIHZhciBtZXJnZWRTaG93UHJvZ3Jlc3MgPSBkdXJhdGlvbiA+IDAgJiYgc2hvd1Byb2dyZXNzO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBDbG9zZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkludGVybmFsQ2xvc2UgPSBmdW5jdGlvbiBvbkludGVybmFsQ2xvc2UoKSB7XG4gICAgb25Ob3RpY2VDbG9zZShldmVudEtleSk7XG4gIH07XG4gIHZhciBvbkNsb3NlS2V5RG93biA9IGZ1bmN0aW9uIG9uQ2xvc2VLZXlEb3duKGUpIHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5jb2RlID09PSAnRW50ZXInIHx8IGUua2V5Q29kZSA9PT0gS2V5Q29kZS5FTlRFUikge1xuICAgICAgb25JbnRlcm5hbENsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBFZmZlY3QgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFtZXJnZWRIb3ZlcmluZyAmJiBkdXJhdGlvbiA+IDApIHtcbiAgICAgIHZhciBzdGFydCA9IERhdGUubm93KCkgLSBzcGVudFRpbWU7XG4gICAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBvbkludGVybmFsQ2xvc2UoKTtcbiAgICAgIH0sIGR1cmF0aW9uICogMTAwMCAtIHNwZW50VGltZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocGF1c2VPbkhvdmVyKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIHNldFNwZW50VGltZShEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZHVyYXRpb24sIG1lcmdlZEhvdmVyaW5nLCB0aW1lc10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWVyZ2VkSG92ZXJpbmcgJiYgbWVyZ2VkU2hvd1Byb2dyZXNzICYmIChwYXVzZU9uSG92ZXIgfHwgc3BlbnRUaW1lID09PSAwKSkge1xuICAgICAgdmFyIHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICB2YXIgYW5pbWF0aW9uRnJhbWU7XG4gICAgICB2YXIgY2FsY3VsYXRlID0gZnVuY3Rpb24gY2FsY3VsYXRlKCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZSk7XG4gICAgICAgIGFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcbiAgICAgICAgICB2YXIgcnVudGltZSA9IHRpbWVzdGFtcCArIHNwZW50VGltZSAtIHN0YXJ0O1xuICAgICAgICAgIHZhciBwcm9ncmVzcyA9IE1hdGgubWluKHJ1bnRpbWUgLyAoZHVyYXRpb24gKiAxMDAwKSwgMSk7XG4gICAgICAgICAgc2V0UGVyY2VudChwcm9ncmVzcyAqIDEwMCk7XG4gICAgICAgICAgaWYgKHByb2dyZXNzIDwgMSkge1xuICAgICAgICAgICAgY2FsY3VsYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjYWxjdWxhdGUoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwYXVzZU9uSG92ZXIpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2R1cmF0aW9uLCBzcGVudFRpbWUsIG1lcmdlZEhvdmVyaW5nLCBtZXJnZWRTaG93UHJvZ3Jlc3MsIHRpbWVzXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsb3NhYmxlID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY2xvc2FibGVPYmogPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX3R5cGVvZihjbG9zYWJsZSkgPT09ICdvYmplY3QnICYmIGNsb3NhYmxlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY2xvc2FibGU7XG4gICAgfVxuICAgIGlmIChjbG9zYWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xvc2VJY29uOiBjbG9zZUljb25cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSwgW2Nsb3NhYmxlLCBjbG9zZUljb25dKTtcbiAgdmFyIGFyaWFQcm9wcyA9IHBpY2tBdHRycyhjbG9zYWJsZU9iaiwgdHJ1ZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFByb2dyZXNzID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdmFsaWRQZXJjZW50ID0gMTAwIC0gKCFwZXJjZW50IHx8IHBlcmNlbnQgPCAwID8gMCA6IHBlcmNlbnQgPiAxMDAgPyAxMDAgOiBwZXJjZW50KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbm90aWNlUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ub3RpY2VcIik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZGl2UHJvcHMsIHtcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMobm90aWNlUHJlZml4Q2xzLCBjbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQobm90aWNlUHJlZml4Q2xzLCBcIi1jbG9zYWJsZVwiKSwgY2xvc2FibGUpKSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiBvbk1vdXNlRW50ZXIoZSkge1xuICAgICAgdmFyIF9kaXZQcm9wcyRvbk1vdXNlRW50ZTtcbiAgICAgIHNldEhvdmVyaW5nKHRydWUpO1xuICAgICAgZGl2UHJvcHMgPT09IG51bGwgfHwgZGl2UHJvcHMgPT09IHZvaWQgMCB8fCAoX2RpdlByb3BzJG9uTW91c2VFbnRlID0gZGl2UHJvcHMub25Nb3VzZUVudGVyKSA9PT0gbnVsbCB8fCBfZGl2UHJvcHMkb25Nb3VzZUVudGUgPT09IHZvaWQgMCB8fCBfZGl2UHJvcHMkb25Nb3VzZUVudGUuY2FsbChkaXZQcm9wcywgZSk7XG4gICAgfSxcbiAgICBvbk1vdXNlTGVhdmU6IGZ1bmN0aW9uIG9uTW91c2VMZWF2ZShlKSB7XG4gICAgICB2YXIgX2RpdlByb3BzJG9uTW91c2VMZWF2O1xuICAgICAgc2V0SG92ZXJpbmcoZmFsc2UpO1xuICAgICAgZGl2UHJvcHMgPT09IG51bGwgfHwgZGl2UHJvcHMgPT09IHZvaWQgMCB8fCAoX2RpdlByb3BzJG9uTW91c2VMZWF2ID0gZGl2UHJvcHMub25Nb3VzZUxlYXZlKSA9PT0gbnVsbCB8fCBfZGl2UHJvcHMkb25Nb3VzZUxlYXYgPT09IHZvaWQgMCB8fCBfZGl2UHJvcHMkb25Nb3VzZUxlYXYuY2FsbChkaXZQcm9wcywgZSk7XG4gICAgfSxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLWNvbnRlbnRcIilcbiAgfSwgY29udGVudCksIGNsb3NhYmxlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IDAsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLWNsb3NlXCIpLFxuICAgIG9uS2V5RG93bjogb25DbG9zZUtleURvd24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiQ2xvc2VcIlxuICB9LCBhcmlhUHJvcHMsIHtcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBvbkludGVybmFsQ2xvc2UoKTtcbiAgICB9XG4gIH0pLCBjbG9zYWJsZU9iai5jbG9zZUljb24pLCBtZXJnZWRTaG93UHJvZ3Jlc3MgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwcm9ncmVzc1wiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChub3RpY2VQcmVmaXhDbHMsIFwiLXByb2dyZXNzXCIpLFxuICAgIG1heDogXCIxMDBcIixcbiAgICB2YWx1ZTogdmFsaWRQZXJjZW50XG4gIH0sIHZhbGlkUGVyY2VudCArICclJykpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBOb3RpZnk7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVzXCIsIFwic3R5bGVzXCJdO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbHN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQ1NTTW90aW9uTGlzdCB9IGZyb20gJ3JjLW1vdGlvbic7XG5pbXBvcnQgTm90aWNlIGZyb20gXCIuL05vdGljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ29udGV4dCB9IGZyb20gXCIuL05vdGlmaWNhdGlvblByb3ZpZGVyXCI7XG5pbXBvcnQgdXNlU3RhY2sgZnJvbSBcIi4vaG9va3MvdXNlU3RhY2tcIjtcbnZhciBOb3RpY2VMaXN0ID0gZnVuY3Rpb24gTm90aWNlTGlzdChwcm9wcykge1xuICB2YXIgY29uZmlnTGlzdCA9IHByb3BzLmNvbmZpZ0xpc3QsXG4gICAgcGxhY2VtZW50ID0gcHJvcHMucGxhY2VtZW50LFxuICAgIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBtb3Rpb24gPSBwcm9wcy5tb3Rpb24sXG4gICAgb25BbGxOb3RpY2VSZW1vdmVkID0gcHJvcHMub25BbGxOb3RpY2VSZW1vdmVkLFxuICAgIG9uTm90aWNlQ2xvc2UgPSBwcm9wcy5vbk5vdGljZUNsb3NlLFxuICAgIHN0YWNrQ29uZmlnID0gcHJvcHMuc3RhY2s7XG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoTm90aWZpY2F0aW9uQ29udGV4dCksXG4gICAgY3R4Q2xzID0gX3VzZUNvbnRleHQuY2xhc3NOYW1lcztcbiAgdmFyIGRpY3RSZWYgPSB1c2VSZWYoe30pO1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgbGF0ZXN0Tm90aWNlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRMYXRlc3ROb3RpY2UgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKFtdKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgaG92ZXJLZXlzID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRIb3ZlcktleXMgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIga2V5cyA9IGNvbmZpZ0xpc3QubWFwKGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICBrZXk6IFN0cmluZyhjb25maWcua2V5KVxuICAgIH07XG4gIH0pO1xuICB2YXIgX3VzZVN0YWNrID0gdXNlU3RhY2soc3RhY2tDb25maWcpLFxuICAgIF91c2VTdGFjazIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhY2ssIDIpLFxuICAgIHN0YWNrID0gX3VzZVN0YWNrMlswXSxcbiAgICBfdXNlU3RhY2syJCA9IF91c2VTdGFjazJbMV0sXG4gICAgb2Zmc2V0ID0gX3VzZVN0YWNrMiQub2Zmc2V0LFxuICAgIHRocmVzaG9sZCA9IF91c2VTdGFjazIkLnRocmVzaG9sZCxcbiAgICBnYXAgPSBfdXNlU3RhY2syJC5nYXA7XG4gIHZhciBleHBhbmRlZCA9IHN0YWNrICYmIChob3ZlcktleXMubGVuZ3RoID4gMCB8fCBrZXlzLmxlbmd0aCA8PSB0aHJlc2hvbGQpO1xuICB2YXIgcGxhY2VtZW50TW90aW9uID0gdHlwZW9mIG1vdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IG1vdGlvbihwbGFjZW1lbnQpIDogbW90aW9uO1xuXG4gIC8vIENsZWFuIGhvdmVyIGtleVxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzdGFjayAmJiBob3ZlcktleXMubGVuZ3RoID4gMSkge1xuICAgICAgc2V0SG92ZXJLZXlzKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgIHJldHVybiBwcmV2LmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGtleXMuc29tZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIGRhdGFLZXkgPSBfcmVmLmtleTtcbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IGRhdGFLZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaG92ZXJLZXlzLCBrZXlzLCBzdGFja10pO1xuXG4gIC8vIEZvcmNlIHVwZGF0ZSBsYXRlc3Qgbm90aWNlXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9rZXlzO1xuICAgIGlmIChzdGFjayAmJiBkaWN0UmVmLmN1cnJlbnRbKF9rZXlzID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfa2V5cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2tleXMua2V5XSkge1xuICAgICAgdmFyIF9rZXlzMjtcbiAgICAgIHNldExhdGVzdE5vdGljZShkaWN0UmVmLmN1cnJlbnRbKF9rZXlzMiA9IGtleXNba2V5cy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2tleXMyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfa2V5czIua2V5XSk7XG4gICAgfVxuICB9LCBba2V5cywgc3RhY2tdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENTU01vdGlvbkxpc3QsIF9leHRlbmRzKHtcbiAgICBrZXk6IHBsYWNlbWVudCxcbiAgICBjbGFzc05hbWU6IGNsc3gocHJlZml4Q2xzLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQocGxhY2VtZW50KSwgY3R4Q2xzID09PSBudWxsIHx8IGN0eENscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Q2xzLmxpc3QsIGNsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zdGFja1wiKSwgISFzdGFjayksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc3RhY2stZXhwYW5kZWRcIiksIGV4cGFuZGVkKSksXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGtleXM6IGtleXMsXG4gICAgbW90aW9uQXBwZWFyOiB0cnVlXG4gIH0sIHBsYWNlbWVudE1vdGlvbiwge1xuICAgIG9uQWxsUmVtb3ZlZDogZnVuY3Rpb24gb25BbGxSZW1vdmVkKCkge1xuICAgICAgb25BbGxOb3RpY2VSZW1vdmVkKHBsYWNlbWVudCk7XG4gICAgfVxuICB9KSwgZnVuY3Rpb24gKF9yZWYyLCBub2RlUmVmKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgIG1vdGlvbkNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICAgIG1vdGlvblN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICBtb3Rpb25JbmRleCA9IF9yZWYyLmluZGV4O1xuICAgIHZhciBfcmVmMyA9IGNvbmZpZyxcbiAgICAgIGtleSA9IF9yZWYzLmtleSxcbiAgICAgIHRpbWVzID0gX3JlZjMudGltZXM7XG4gICAgdmFyIHN0cktleSA9IFN0cmluZyhrZXkpO1xuICAgIHZhciBfcmVmNCA9IGNvbmZpZyxcbiAgICAgIGNvbmZpZ0NsYXNzTmFtZSA9IF9yZWY0LmNsYXNzTmFtZSxcbiAgICAgIGNvbmZpZ1N0eWxlID0gX3JlZjQuc3R5bGUsXG4gICAgICBjb25maWdDbGFzc05hbWVzID0gX3JlZjQuY2xhc3NOYW1lcyxcbiAgICAgIGNvbmZpZ1N0eWxlcyA9IF9yZWY0LnN0eWxlcyxcbiAgICAgIHJlc3RDb25maWcgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjQsIF9leGNsdWRlZCk7XG4gICAgdmFyIGRhdGFJbmRleCA9IGtleXMuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHN0cktleTtcbiAgICB9KTtcblxuICAgIC8vIElmIGRhdGFJbmRleCBpcyAtMSwgdGhhdCBtZWFucyB0aGlzIG5vdGljZSBoYXMgYmVlbiByZW1vdmVkIGluIGRhdGEsIGJ1dCBzdGlsbCBpbiBkb21cbiAgICAvLyBTaG91bGQgbWludXMgKG1vdGlvbkluZGV4IC0gMSkgdG8gZ2V0IHRoZSBjb3JyZWN0IGluZGV4IGJlY2F1c2Uga2V5cy5sZW5ndGggaXMgbm90IHRoZSBzYW1lIGFzIGRvbSBsZW5ndGhcbiAgICB2YXIgc3RhY2tTdHlsZSA9IHt9O1xuICAgIGlmIChzdGFjaykge1xuICAgICAgdmFyIGluZGV4ID0ga2V5cy5sZW5ndGggLSAxIC0gKGRhdGFJbmRleCA+IC0xID8gZGF0YUluZGV4IDogbW90aW9uSW5kZXggLSAxKTtcbiAgICAgIHZhciB0cmFuc2Zvcm1YID0gcGxhY2VtZW50ID09PSAndG9wJyB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nID8gJy01MCUnIDogJzAnO1xuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICB2YXIgX2RpY3RSZWYkY3VycmVudCRzdHJLLCBfZGljdFJlZiRjdXJyZW50JHN0cksyLCBfZGljdFJlZiRjdXJyZW50JHN0ckszO1xuICAgICAgICBzdGFja1N0eWxlLmhlaWdodCA9IGV4cGFuZGVkID8gKF9kaWN0UmVmJGN1cnJlbnQkc3RySyA9IGRpY3RSZWYuY3VycmVudFtzdHJLZXldKSA9PT0gbnVsbCB8fCBfZGljdFJlZiRjdXJyZW50JHN0cksgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kaWN0UmVmJGN1cnJlbnQkc3RySy5vZmZzZXRIZWlnaHQgOiBsYXRlc3ROb3RpY2UgPT09IG51bGwgfHwgbGF0ZXN0Tm90aWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYXRlc3ROb3RpY2Uub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybVxuICAgICAgICB2YXIgdmVydGljYWxPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgICB2YXIgX2RpY3RSZWYkY3VycmVudCRrZXlzO1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ICs9ICgoX2RpY3RSZWYkY3VycmVudCRrZXlzID0gZGljdFJlZi5jdXJyZW50W2tleXNba2V5cy5sZW5ndGggLSAxIC0gaV0ua2V5XSkgPT09IG51bGwgfHwgX2RpY3RSZWYkY3VycmVudCRrZXlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGljdFJlZiRjdXJyZW50JGtleXMub2Zmc2V0SGVpZ2h0KSArIGdhcDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHJhbnNmb3JtWSA9IChleHBhbmRlZCA/IHZlcnRpY2FsT2Zmc2V0IDogaW5kZXggKiBvZmZzZXQpICogKHBsYWNlbWVudC5zdGFydHNXaXRoKCd0b3AnKSA/IDEgOiAtMSk7XG4gICAgICAgIHZhciBzY2FsZVggPSAhZXhwYW5kZWQgJiYgbGF0ZXN0Tm90aWNlICE9PSBudWxsICYmIGxhdGVzdE5vdGljZSAhPT0gdm9pZCAwICYmIGxhdGVzdE5vdGljZS5vZmZzZXRXaWR0aCAmJiAoX2RpY3RSZWYkY3VycmVudCRzdHJLMiA9IGRpY3RSZWYuY3VycmVudFtzdHJLZXldKSAhPT0gbnVsbCAmJiBfZGljdFJlZiRjdXJyZW50JHN0cksyICE9PSB2b2lkIDAgJiYgX2RpY3RSZWYkY3VycmVudCRzdHJLMi5vZmZzZXRXaWR0aCA/ICgobGF0ZXN0Tm90aWNlID09PSBudWxsIHx8IGxhdGVzdE5vdGljZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGF0ZXN0Tm90aWNlLm9mZnNldFdpZHRoKSAtIG9mZnNldCAqIDIgKiAoaW5kZXggPCAzID8gaW5kZXggOiAzKSkgLyAoKF9kaWN0UmVmJGN1cnJlbnQkc3RySzMgPSBkaWN0UmVmLmN1cnJlbnRbc3RyS2V5XSkgPT09IG51bGwgfHwgX2RpY3RSZWYkY3VycmVudCRzdHJLMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RpY3RSZWYkY3VycmVudCRzdHJLMy5vZmZzZXRXaWR0aCkgOiAxO1xuICAgICAgICBzdGFja1N0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KHRyYW5zZm9ybVgsIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybVksIFwicHgsIDApIHNjYWxlWChcIikuY29uY2F0KHNjYWxlWCwgXCIpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhY2tTdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKFwiLmNvbmNhdCh0cmFuc2Zvcm1YLCBcIiwgMCwgMClcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICByZWY6IG5vZGVSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ub3RpY2Utd3JhcHBlclwiKSwgbW90aW9uQ2xhc3NOYW1lLCBjb25maWdDbGFzc05hbWVzID09PSBudWxsIHx8IGNvbmZpZ0NsYXNzTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZ0NsYXNzTmFtZXMud3JhcHBlciksXG4gICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1vdGlvblN0eWxlKSwgc3RhY2tTdHlsZSksIGNvbmZpZ1N0eWxlcyA9PT0gbnVsbCB8fCBjb25maWdTdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZ1N0eWxlcy53cmFwcGVyKSxcbiAgICAgIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgICAgICByZXR1cm4gc2V0SG92ZXJLZXlzKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuaW5jbHVkZXMoc3RyS2V5KSA/IHByZXYgOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByZXYpLCBbc3RyS2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICByZXR1cm4gc2V0SG92ZXJLZXlzKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICByZXR1cm4gayAhPT0gc3RyS2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpY2UsIF9leHRlbmRzKHt9LCByZXN0Q29uZmlnLCB7XG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGlmIChkYXRhSW5kZXggPiAtMSkge1xuICAgICAgICAgIGRpY3RSZWYuY3VycmVudFtzdHJLZXldID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZGljdFJlZi5jdXJyZW50W3N0cktleV07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGNsYXNzTmFtZXM6IGNvbmZpZ0NsYXNzTmFtZXMsXG4gICAgICBzdHlsZXM6IGNvbmZpZ1N0eWxlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjb25maWdDbGFzc05hbWUsIGN0eENscyA9PT0gbnVsbCB8fCBjdHhDbHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN0eENscy5ub3RpY2UpLFxuICAgICAgc3R5bGU6IGNvbmZpZ1N0eWxlLFxuICAgICAgdGltZXM6IHRpbWVzLFxuICAgICAga2V5OiBrZXksXG4gICAgICBldmVudEtleToga2V5LFxuICAgICAgb25Ob3RpY2VDbG9zZTogb25Ob3RpY2VDbG9zZSxcbiAgICAgIGhvdmVyaW5nOiBzdGFjayAmJiBob3ZlcktleXMubGVuZ3RoID4gMFxuICAgIH0pKSk7XG4gIH0pO1xufTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIE5vdGljZUxpc3QuZGlzcGxheU5hbWUgPSAnTm90aWNlTGlzdCc7XG59XG5leHBvcnQgZGVmYXVsdCBOb3RpY2VMaXN0OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIE5vdGlmaWNhdGlvbkNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgTm90aWZpY2F0aW9uUHJvdmlkZXIgPSBmdW5jdGlvbiBOb3RpZmljYXRpb25Qcm92aWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lcyA9IF9yZWYuY2xhc3NOYW1lcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5vdGlmaWNhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1xuICAgIH1cbiAgfSwgY2hpbGRyZW4pO1xufTtcbmV4cG9ydCBkZWZhdWx0IE5vdGlmaWNhdGlvblByb3ZpZGVyOyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IE5vdGljZUxpc3QgZnJvbSBcIi4vTm90aWNlTGlzdFwiO1xuLy8gYW50LW5vdGlmaWNhdGlvbiBhbnQtbm90aWZpY2F0aW9uLXRvcFJpZ2h0XG52YXIgTm90aWZpY2F0aW9ucyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBfcHJvcHMkcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZWZpeENscyA9IF9wcm9wcyRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1ub3RpZmljYXRpb24nIDogX3Byb3BzJHByZWZpeENscyxcbiAgICBjb250YWluZXIgPSBwcm9wcy5jb250YWluZXIsXG4gICAgbW90aW9uID0gcHJvcHMubW90aW9uLFxuICAgIG1heENvdW50ID0gcHJvcHMubWF4Q291bnQsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgb25BbGxSZW1vdmVkID0gcHJvcHMub25BbGxSZW1vdmVkLFxuICAgIHN0YWNrID0gcHJvcHMuc3RhY2ssXG4gICAgcmVuZGVyTm90aWZpY2F0aW9ucyA9IHByb3BzLnJlbmRlck5vdGlmaWNhdGlvbnM7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShbXSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgY29uZmlnTGlzdCA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29uZmlnTGlzdCA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsb3NlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uTm90aWNlQ2xvc2UgPSBmdW5jdGlvbiBvbk5vdGljZUNsb3NlKGtleSkge1xuICAgIHZhciBfY29uZmlnJG9uQ2xvc2U7XG4gICAgLy8gVHJpZ2dlciBjbG9zZSBldmVudFxuICAgIHZhciBjb25maWcgPSBjb25maWdMaXN0LmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmtleSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCB8fCAoX2NvbmZpZyRvbkNsb3NlID0gY29uZmlnLm9uQ2xvc2UpID09PSBudWxsIHx8IF9jb25maWckb25DbG9zZSA9PT0gdm9pZCAwIHx8IF9jb25maWckb25DbG9zZS5jYWxsKGNvbmZpZyk7XG4gICAgc2V0Q29uZmlnTGlzdChmdW5jdGlvbiAobGlzdCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleSAhPT0ga2V5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbjogZnVuY3Rpb24gb3Blbihjb25maWcpIHtcbiAgICAgICAgc2V0Q29uZmlnTGlzdChmdW5jdGlvbiAobGlzdCkge1xuICAgICAgICAgIHZhciBjbG9uZSA9IF90b0NvbnN1bWFibGVBcnJheShsaXN0KTtcblxuICAgICAgICAgIC8vIFJlcGxhY2UgaWYgZXhpc3RcbiAgICAgICAgICB2YXIgaW5kZXggPSBjbG9uZS5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gY29uZmlnLmtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgaW5uZXJDb25maWcgPSBfb2JqZWN0U3ByZWFkKHt9LCBjb25maWcpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgX2xpc3QkaW5kZXg7XG4gICAgICAgICAgICBpbm5lckNvbmZpZy50aW1lcyA9ICgoKF9saXN0JGluZGV4ID0gbGlzdFtpbmRleF0pID09PSBudWxsIHx8IF9saXN0JGluZGV4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbGlzdCRpbmRleC50aW1lcykgfHwgMCkgKyAxO1xuICAgICAgICAgICAgY2xvbmVbaW5kZXhdID0gaW5uZXJDb25maWc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlubmVyQ29uZmlnLnRpbWVzID0gMDtcbiAgICAgICAgICAgIGNsb25lLnB1c2goaW5uZXJDb25maWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF4Q291bnQgPiAwICYmIGNsb25lLmxlbmd0aCA+IG1heENvdW50KSB7XG4gICAgICAgICAgICBjbG9uZSA9IGNsb25lLnNsaWNlKC1tYXhDb3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGtleSkge1xuICAgICAgICBvbk5vdGljZUNsb3NlKGtleSk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgc2V0Q29uZmlnTGlzdChbXSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBQbGFjZW1lbnRzID09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTMgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTMsIDIpLFxuICAgIHBsYWNlbWVudHMgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldFBsYWNlbWVudHMgPSBfUmVhY3QkdXNlU3RhdGU0WzFdO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXh0UGxhY2VtZW50cyA9IHt9O1xuICAgIGNvbmZpZ0xpc3QuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICB2YXIgX2NvbmZpZyRwbGFjZW1lbnQgPSBjb25maWcucGxhY2VtZW50LFxuICAgICAgICBwbGFjZW1lbnQgPSBfY29uZmlnJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gJ3RvcFJpZ2h0JyA6IF9jb25maWckcGxhY2VtZW50O1xuICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICBuZXh0UGxhY2VtZW50c1twbGFjZW1lbnRdID0gbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XSB8fCBbXTtcbiAgICAgICAgbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XS5wdXNoKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGaWxsIGV4aXN0IHBsYWNlbWVudHMgdG8gYXZvaWQgZW1wdHkgbGlzdCBjYXVzaW5nIHJlbW92ZSB3aXRob3V0IG1vdGlvblxuICAgIE9iamVjdC5rZXlzKHBsYWNlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgbmV4dFBsYWNlbWVudHNbcGxhY2VtZW50XSA9IG5leHRQbGFjZW1lbnRzW3BsYWNlbWVudF0gfHwgW107XG4gICAgfSk7XG4gICAgc2V0UGxhY2VtZW50cyhuZXh0UGxhY2VtZW50cyk7XG4gIH0sIFtjb25maWdMaXN0XSk7XG5cbiAgLy8gQ2xlYW4gdXAgY29udGFpbmVyIGlmIGFsbCBub3RpY2VzIGZhZGUgb3V0XG4gIHZhciBvbkFsbE5vdGljZVJlbW92ZWQgPSBmdW5jdGlvbiBvbkFsbE5vdGljZVJlbW92ZWQocGxhY2VtZW50KSB7XG4gICAgc2V0UGxhY2VtZW50cyhmdW5jdGlvbiAob3JpZ2luUGxhY2VtZW50cykge1xuICAgICAgdmFyIGNsb25lID0gX29iamVjdFNwcmVhZCh7fSwgb3JpZ2luUGxhY2VtZW50cyk7XG4gICAgICB2YXIgbGlzdCA9IGNsb25lW3BsYWNlbWVudF0gfHwgW107XG4gICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSBjbG9uZVtwbGFjZW1lbnRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEVmZmVjdCB0ZWxsIHRoYXQgcGxhY2VtZW50cyBpcyBlbXB0eSBub3dcbiAgdmFyIGVtcHR5UmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocGxhY2VtZW50cykubGVuZ3RoID4gMCkge1xuICAgICAgZW1wdHlSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChlbXB0eVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUcmlnZ2VyIG9ubHkgd2hlbiBmcm9tIGV4aXN0IHRvIGVtcHR5XG4gICAgICBvbkFsbFJlbW92ZWQgPT09IG51bGwgfHwgb25BbGxSZW1vdmVkID09PSB2b2lkIDAgfHwgb25BbGxSZW1vdmVkKCk7XG4gICAgICBlbXB0eVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9LCBbcGxhY2VtZW50c10pO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBwbGFjZW1lbnRMaXN0ID0gT2JqZWN0LmtleXMocGxhY2VtZW50cyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlUG9ydGFsKCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcGxhY2VtZW50TGlzdC5tYXAoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHZhciBwbGFjZW1lbnRDb25maWdMaXN0ID0gcGxhY2VtZW50c1twbGFjZW1lbnRdO1xuICAgIHZhciBsaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm90aWNlTGlzdCwge1xuICAgICAga2V5OiBwbGFjZW1lbnQsXG4gICAgICBjb25maWdMaXN0OiBwbGFjZW1lbnRDb25maWdMaXN0LFxuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lID09PSBudWxsIHx8IGNsYXNzTmFtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2xhc3NOYW1lKHBsYWNlbWVudCksXG4gICAgICBzdHlsZTogc3R5bGUgPT09IG51bGwgfHwgc3R5bGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlKHBsYWNlbWVudCksXG4gICAgICBtb3Rpb246IG1vdGlvbixcbiAgICAgIG9uTm90aWNlQ2xvc2U6IG9uTm90aWNlQ2xvc2UsXG4gICAgICBvbkFsbE5vdGljZVJlbW92ZWQ6IG9uQWxsTm90aWNlUmVtb3ZlZCxcbiAgICAgIHN0YWNrOiBzdGFja1xuICAgIH0pO1xuICAgIHJldHVybiByZW5kZXJOb3RpZmljYXRpb25zID8gcmVuZGVyTm90aWZpY2F0aW9ucyhsaXN0LCB7XG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGtleTogcGxhY2VtZW50XG4gICAgfSkgOiBsaXN0O1xuICB9KSksIGNvbnRhaW5lcik7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIE5vdGlmaWNhdGlvbnMuZGlzcGxheU5hbWUgPSAnTm90aWZpY2F0aW9ucyc7XG59XG5leHBvcnQgZGVmYXVsdCBOb3RpZmljYXRpb25zOyIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiZ2V0Q29udGFpbmVyXCIsIFwibW90aW9uXCIsIFwicHJlZml4Q2xzXCIsIFwibWF4Q291bnRcIiwgXCJjbGFzc05hbWVcIiwgXCJzdHlsZVwiLCBcIm9uQWxsUmVtb3ZlZFwiLCBcInN0YWNrXCIsIFwicmVuZGVyTm90aWZpY2F0aW9uc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBOb3RpZmljYXRpb25zIGZyb20gXCIuLi9Ob3RpZmljYXRpb25zXCI7XG52YXIgZGVmYXVsdEdldENvbnRhaW5lciA9IGZ1bmN0aW9uIGRlZmF1bHRHZXRDb250YWluZXIoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufTtcbnZhciB1bmlxdWVLZXkgPSAwO1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgb2JqTGlzdCA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBvYmpMaXN0W19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIG9iakxpc3QuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbG9uZVtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VOb3RpZmljYXRpb24oKSB7XG4gIHZhciByb290Q29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9yb290Q29uZmlnJGdldENvbnRhaSA9IHJvb3RDb25maWcuZ2V0Q29udGFpbmVyLFxuICAgIGdldENvbnRhaW5lciA9IF9yb290Q29uZmlnJGdldENvbnRhaSA9PT0gdm9pZCAwID8gZGVmYXVsdEdldENvbnRhaW5lciA6IF9yb290Q29uZmlnJGdldENvbnRhaSxcbiAgICBtb3Rpb24gPSByb290Q29uZmlnLm1vdGlvbixcbiAgICBwcmVmaXhDbHMgPSByb290Q29uZmlnLnByZWZpeENscyxcbiAgICBtYXhDb3VudCA9IHJvb3RDb25maWcubWF4Q291bnQsXG4gICAgY2xhc3NOYW1lID0gcm9vdENvbmZpZy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSByb290Q29uZmlnLnN0eWxlLFxuICAgIG9uQWxsUmVtb3ZlZCA9IHJvb3RDb25maWcub25BbGxSZW1vdmVkLFxuICAgIHN0YWNrID0gcm9vdENvbmZpZy5zdGFjayxcbiAgICByZW5kZXJOb3RpZmljYXRpb25zID0gcm9vdENvbmZpZy5yZW5kZXJOb3RpZmljYXRpb25zLFxuICAgIHNoYXJlQ29uZmlnID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHJvb3RDb25maWcsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGNvbnRhaW5lciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udGFpbmVyID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIG5vdGlmaWNhdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGNvbnRleHRIb2xkZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpZmljYXRpb25zLCB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgcmVmOiBub3RpZmljYXRpb25zUmVmLFxuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIG1vdGlvbjogbW90aW9uLFxuICAgIG1heENvdW50OiBtYXhDb3VudCxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgb25BbGxSZW1vdmVkOiBvbkFsbFJlbW92ZWQsXG4gICAgc3RhY2s6IHN0YWNrLFxuICAgIHJlbmRlck5vdGlmaWNhdGlvbnM6IHJlbmRlck5vdGlmaWNhdGlvbnNcbiAgfSk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoW10pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICB0YXNrUXVldWUgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldFRhc2tRdWV1ZSA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGFwaSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKGNvbmZpZykge1xuICAgICAgICB2YXIgbWVyZ2VkQ29uZmlnID0gbWVyZ2VDb25maWcoc2hhcmVDb25maWcsIGNvbmZpZyk7XG4gICAgICAgIGlmIChtZXJnZWRDb25maWcua2V5ID09PSBudWxsIHx8IG1lcmdlZENvbmZpZy5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG1lcmdlZENvbmZpZy5rZXkgPSBcInJjLW5vdGlmaWNhdGlvbi1cIi5jb25jYXQodW5pcXVlS2V5KTtcbiAgICAgICAgICB1bmlxdWVLZXkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUYXNrUXVldWUoZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocXVldWUpLCBbe1xuICAgICAgICAgICAgdHlwZTogJ29wZW4nLFxuICAgICAgICAgICAgY29uZmlnOiBtZXJnZWRDb25maWdcbiAgICAgICAgICB9XSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZShrZXkpIHtcbiAgICAgICAgc2V0VGFza1F1ZXVlKGZ1bmN0aW9uIChxdWV1ZSkge1xuICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHF1ZXVlKSwgW3tcbiAgICAgICAgICAgIHR5cGU6ICdjbG9zZScsXG4gICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICAgIH1dKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgc2V0VGFza1F1ZXVlKGZ1bmN0aW9uIChxdWV1ZSkge1xuICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHF1ZXVlKSwgW3tcbiAgICAgICAgICAgIHR5cGU6ICdkZXN0cm95J1xuICAgICAgICAgIH1dKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IENvbnRhaW5lciA9PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJlYWN0IDE4IHNob3VsZCBhbGwgaW4gZWZmZWN0IHRoYXQgd2Ugd2lsbCBjaGVjayBjb250YWluZXIgaW4gZWFjaCByZW5kZXJcbiAgLy8gV2hpY2ggbWVhbnMgZ2V0Q29udGFpbmVyIHNob3VsZCBiZSBzdGFibGUuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0Q29udGFpbmVyKGdldENvbnRhaW5lcigpKTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBGbHVzaCB0YXNrIHdoZW4gbm9kZSByZWFkeVxuICAgIGlmIChub3RpZmljYXRpb25zUmVmLmN1cnJlbnQgJiYgdGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgdGFza1F1ZXVlLmZvckVhY2goZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgc3dpdGNoICh0YXNrLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdvcGVuJzpcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudC5vcGVuKHRhc2suY29uZmlnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudC5jbG9zZSh0YXNrLmtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdkZXN0cm95JzpcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnNSZWYuY3VycmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzUyNTkwXG4gICAgICAvLyBSZWFjdCBgc3RhcnRUcmFuc2l0aW9uYCB3aWxsIHJ1biBvbmNlIGB1c2VFZmZlY3RgIGJ1dCBtYW55IHRpbWVzIGBzZXRTdGF0ZWAsXG4gICAgICAvLyBTbyBgc2V0VGFza1F1ZXVlYCB3aXRoIGZpbHRlcmVkIGFycmF5IHdpbGwgY2F1c2UgaW5maW5pdGUgbG9vcC5cbiAgICAgIC8vIFdlIGNhY2hlIHRoZSBmaXJzdCBtYXRjaCBxdWV1ZSBpbnN0ZWFkLlxuICAgICAgdmFyIG9yaVRhc2tRdWV1ZTtcbiAgICAgIHZhciB0Z3RUYXNrUXVldWU7XG5cbiAgICAgIC8vIFJlYWN0IDE3IHdpbGwgbWl4IG9yZGVyIG9mIGVmZmVjdCAmIHNldFN0YXRlIGluIGFzeW5jXG4gICAgICAvLyAtIG9wZW46IHNldFN0YXRlWzBdXG4gICAgICAvLyAtIGVmZmVjdFswXVxuICAgICAgLy8gLSBvcGVuOiBzZXRTdGF0ZVsxXVxuICAgICAgLy8gLSBlZmZlY3Qgc2V0U3RhdGUoW10pICogaGVyZSB3aWxsIGNsZWFuIHVwIFswLCAxXSBpbiBSZWFjdCAxN1xuICAgICAgc2V0VGFza1F1ZXVlKGZ1bmN0aW9uIChvcmlRdWV1ZSkge1xuICAgICAgICBpZiAob3JpVGFza1F1ZXVlICE9PSBvcmlRdWV1ZSB8fCAhdGd0VGFza1F1ZXVlKSB7XG4gICAgICAgICAgb3JpVGFza1F1ZXVlID0gb3JpUXVldWU7XG4gICAgICAgICAgdGd0VGFza1F1ZXVlID0gb3JpUXVldWUuZmlsdGVyKGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRhc2tRdWV1ZS5pbmNsdWRlcyh0YXNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGd0VGFza1F1ZXVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbdGFza1F1ZXVlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJldHVybiA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIFthcGksIGNvbnRleHRIb2xkZXJdO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbnZhciBERUZBVUxUX09GRlNFVCA9IDg7XG52YXIgREVGQVVMVF9USFJFU0hPTEQgPSAzO1xudmFyIERFRkFVTFRfR0FQID0gMTY7XG52YXIgdXNlU3RhY2sgPSBmdW5jdGlvbiB1c2VTdGFjayhjb25maWcpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBvZmZzZXQ6IERFRkFVTFRfT0ZGU0VULFxuICAgIHRocmVzaG9sZDogREVGQVVMVF9USFJFU0hPTEQsXG4gICAgZ2FwOiBERUZBVUxUX0dBUFxuICB9O1xuICBpZiAoY29uZmlnICYmIF90eXBlb2YoY29uZmlnKSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgX2NvbmZpZyRvZmZzZXQsIF9jb25maWckdGhyZXNob2xkLCBfY29uZmlnJGdhcDtcbiAgICByZXN1bHQub2Zmc2V0ID0gKF9jb25maWckb2Zmc2V0ID0gY29uZmlnLm9mZnNldCkgIT09IG51bGwgJiYgX2NvbmZpZyRvZmZzZXQgIT09IHZvaWQgMCA/IF9jb25maWckb2Zmc2V0IDogREVGQVVMVF9PRkZTRVQ7XG4gICAgcmVzdWx0LnRocmVzaG9sZCA9IChfY29uZmlnJHRocmVzaG9sZCA9IGNvbmZpZy50aHJlc2hvbGQpICE9PSBudWxsICYmIF9jb25maWckdGhyZXNob2xkICE9PSB2b2lkIDAgPyBfY29uZmlnJHRocmVzaG9sZCA6IERFRkFVTFRfVEhSRVNIT0xEO1xuICAgIHJlc3VsdC5nYXAgPSAoX2NvbmZpZyRnYXAgPSBjb25maWcuZ2FwKSAhPT0gbnVsbCAmJiBfY29uZmlnJGdhcCAhPT0gdm9pZCAwID8gX2NvbmZpZyRnYXAgOiBERUZBVUxUX0dBUDtcbiAgfVxuICByZXR1cm4gWyEhY29uZmlnLCByZXN1bHRdO1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZVN0YWNrOyIsImltcG9ydCB1c2VOb3RpZmljYXRpb24gZnJvbSBcIi4vaG9va3MvdXNlTm90aWZpY2F0aW9uXCI7XG5pbXBvcnQgTm90aWNlIGZyb20gXCIuL05vdGljZVwiO1xuaW1wb3J0IE5vdGlmaWNhdGlvblByb3ZpZGVyIGZyb20gXCIuL05vdGlmaWNhdGlvblByb3ZpZGVyXCI7XG5leHBvcnQgeyB1c2VOb3RpZmljYXRpb24sIE5vdGljZSwgTm90aWZpY2F0aW9uUHJvdmlkZXIgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=