@dwelle/excalidraw 0.3.41 → 0.3.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2229,7 +2229,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2229
2229
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2230
2230
|
|
|
2231
2231
|
"use strict";
|
|
2232
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EXTERNAL_LINK_IMG\": () => (/* binding */ EXTERNAL_LINK_IMG),\n/* harmony export */ \"Hyperlink\": () => (/* binding */ Hyperlink),\n/* harmony export */ \"normalizeLink\": () => (/* binding */ normalizeLink),\n/* harmony export */ \"isLocalLink\": () => (/* binding */ isLocalLink),\n/* harmony export */ \"actionLink\": () => (/* binding */ actionLink),\n/* harmony export */ \"getContextMenuLabel\": () => (/* binding */ getContextMenuLabel),\n/* harmony export */ \"getLinkHandleFromCoords\": () => (/* binding */ getLinkHandleFromCoords),\n/* harmony export */ \"isPointHittingLinkIcon\": () => (/* binding */ isPointHittingLinkIcon),\n/* harmony export */ \"showHyperlinkTooltip\": () => (/* binding */ showHyperlinkTooltip),\n/* harmony export */ \"hideHyperlinkToolip\": () => (/* binding */ hideHyperlinkToolip),\n/* harmony export */ \"shouldHideLinkPopup\": () => (/* binding */ shouldHideLinkPopup)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _actions_register__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../actions/register */ \"../../actions/register.ts\");\n/* harmony import */ var _components_ToolButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _renderer_renderElement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../renderer/renderElement */ \"../../renderer/renderElement.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _components_Tooltip__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../components/Tooltip */ \"../../components/Tooltip.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _collision__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./collision */ \"../../element/collision.ts\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./ */ \"../../element/index.ts\");\n/* harmony import */ var _Hyperlink_scss__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./Hyperlink.scss */ \"../../element/Hyperlink.scss\");\n/* harmony import */ var _Hyperlink_scss__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_Hyperlink_scss__WEBPACK_IMPORTED_MODULE_17__);\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst CONTAINER_WIDTH = 320;\r\nconst SPACE_BOTTOM = 85;\r\nconst CONTAINER_PADDING = 5;\r\nconst CONTAINER_HEIGHT = 42;\r\nconst AUTO_HIDE_TIMEOUT = 500;\r\nconst EXTERNAL_LINK_IMG = document.createElement(\"img\");\r\nEXTERNAL_LINK_IMG.src = `data:${_constants__WEBPACK_IMPORTED_MODULE_12__.MIME_TYPES.svg}, ${encodeURIComponent(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1971c2\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-external-link\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>`)}`;\r\nlet IS_HYPERLINK_TOOLTIP_VISIBLE = false;\r\nconst Hyperlink = ({ element, appState, setAppState, onLinkOpen, }) => {\r\n const linkVal = element.link || \"\";\r\n const [inputVal, setInputVal] = (0,react__WEBPACK_IMPORTED_MODULE_7__.useState)(linkVal);\r\n const inputRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)(null);\r\n const isEditing = appState.showHyperlinkPopup === \"editor\" || !linkVal;\r\n const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_7__.useCallback)(() => {\r\n if (!inputRef.current) {\r\n return;\r\n }\r\n const link = normalizeLink(inputRef.current.value);\r\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.mutateElement)(element, { link });\r\n setAppState({ showHyperlinkPopup: \"info\" });\r\n }, [element, setAppState]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_7__.useLayoutEffect)(() => {\r\n return () => {\r\n handleSubmit();\r\n };\r\n }, [handleSubmit]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_7__.useEffect)(() => {\r\n let timeoutId = null;\r\n const handlePointerMove = (event) => {\r\n if (isEditing) {\r\n return;\r\n }\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n const shouldHide = shouldHideLinkPopup(element, appState, [\r\n event.clientX,\r\n event.clientY,\r\n ]);\r\n if (shouldHide) {\r\n timeoutId = window.setTimeout(() => {\r\n setAppState({ showHyperlinkPopup: false });\r\n }, AUTO_HIDE_TIMEOUT);\r\n }\r\n };\r\n window.addEventListener(_constants__WEBPACK_IMPORTED_MODULE_12__.EVENT.POINTER_MOVE, handlePointerMove, false);\r\n return () => {\r\n window.removeEventListener(_constants__WEBPACK_IMPORTED_MODULE_12__.EVENT.POINTER_MOVE, handlePointerMove, false);\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n };\r\n }, [appState, element, isEditing, setAppState]);\r\n const handleRemove = (0,react__WEBPACK_IMPORTED_MODULE_7__.useCallback)(() => {\r\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.mutateElement)(element, { link: null });\r\n if (isEditing) {\r\n inputRef.current.value = \"\";\r\n }\r\n setAppState({ showHyperlinkPopup: false });\r\n }, [setAppState, element, isEditing]);\r\n const onEdit = () => {\r\n setAppState({ showHyperlinkPopup: \"editor\" });\r\n };\r\n const { x, y } = getCoordsForPopover(element, appState);\r\n if (appState.draggingElement ||\r\n appState.resizingElement ||\r\n appState.isRotating) {\r\n return null;\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"excalidraw-hyperlinkContainer\", style: {\r\n top: `${y}px`,\r\n left: `${x}px`,\r\n width: CONTAINER_WIDTH,\r\n padding: CONTAINER_PADDING,\r\n } }, { children: [isEditing ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"input\", { className: (0,clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\"excalidraw-hyperlinkContainer-input\"), placeholder: \"Type or paste your link here\", ref: inputRef, value: inputVal, onChange: (event) => setInputVal(event.target.value), autoFocus: true, onKeyDown: (event) => {\r\n event.stopPropagation();\r\n // prevent cmd/ctrl+k shortcut when editing link\r\n if (event[_keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.CTRL_OR_CMD] && event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.K) {\r\n event.preventDefault();\r\n }\r\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.ENTER || event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.ESCAPE) {\r\n handleSubmit();\r\n }\r\n } }, void 0)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: element.link || \"\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\"excalidraw-hyperlinkContainer-link\", {\r\n \"d-none\": isEditing,\r\n }), target: isLocalLink(element.link) ? \"_self\" : \"_blank\", onClick: (event) => {\r\n if (onLinkOpen && element.link) {\r\n event.preventDefault();\r\n onLinkOpen(element.link, event.nativeEvent);\r\n }\r\n }, rel: \"noopener noreferrer\" }, { children: element.link }), void 0)), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"excalidraw-hyperlinkContainer__buttons\" }, { children: [!isEditing && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.edit\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.edit\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.edit\"), onClick: onEdit, className: \"excalidraw-hyperlinkContainer--edit\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.editIcon }, void 0)), linkVal && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.remove\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.remove\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.remove\"), onClick: handleRemove, className: \"excalidraw-hyperlinkContainer--remove\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.trash }, void 0))] }), void 0)] }), void 0));\r\n};\r\nconst getCoordsForPopover = (element, appState) => {\r\n const { x: viewPortX, y: viewPortY } = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.sceneCoordsToViewportCoords)({ sceneX: element.x + element.width / 2, sceneY: element.y }, appState);\r\n const x = viewPortX - CONTAINER_WIDTH / 2;\r\n const y = viewPortY - SPACE_BOTTOM;\r\n return { x, y };\r\n};\r\nconst normalizeLink = (link) => {\r\n link = link.trim();\r\n if (link) {\r\n // prefix with protocol if not fully-qualified\r\n if (!link.includes(\"://\") && !/^[[\\\\/]/.test(link)) {\r\n link = `https://${link}`;\r\n }\r\n }\r\n return link;\r\n};\r\nconst isLocalLink = (link) => {\r\n return !!((link === null || link === void 0 ? void 0 : link.includes(location.origin)) || (link === null || link === void 0 ? void 0 : link.startsWith(\"/\")));\r\n};\r\nconst actionLink = (0,_actions_register__WEBPACK_IMPORTED_MODULE_3__.register)({\r\n name: \"link\",\r\n perform: (elements, appState) => {\r\n if (appState.showHyperlinkPopup === \"editor\") {\r\n return false;\r\n }\r\n return {\r\n elements,\r\n appState: Object.assign(Object.assign({}, appState), { showHyperlinkPopup: \"editor\" }),\r\n commitToHistory: true,\r\n };\r\n },\r\n keyTest: (event) => event[_keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.CTRL_OR_CMD] && event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.K,\r\n contextItemLabel: (elements, appState) => getContextMenuLabel(elements, appState),\r\n contextItemPredicate: (elements, appState) => {\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_14__.getSelectedElements)(elements, appState);\r\n return selectedElements.length === 1;\r\n },\r\n PanelComponent: ({ elements, appState, updateData }) => {\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_14__.getSelectedElements)(elements, appState);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.link, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(getContextMenuLabel(elements, appState)), title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.link.label\")} - ${(0,_utils__WEBPACK_IMPORTED_MODULE_1__.getShortcutKey)(\"CtrlOrCmd+K\")}`, onClick: () => updateData(null), selected: selectedElements.length === 1 && !!selectedElements[0].link }, void 0));\r\n },\r\n});\r\nconst getContextMenuLabel = (elements, appState) => {\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_14__.getSelectedElements)(elements, appState);\r\n const label = selectedElements[0].link\r\n ? \"labels.link.edit\"\r\n : \"labels.link.create\";\r\n return label;\r\n};\r\nconst getLinkHandleFromCoords = ([x1, y1, x2, y2], angle, appState) => {\r\n const size = _renderer_renderElement__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_LINK_SIZE;\r\n const linkWidth = size / appState.zoom.value;\r\n const linkHeight = size / appState.zoom.value;\r\n const linkMarginY = size / appState.zoom.value;\r\n const centerX = (x1 + x2) / 2;\r\n const centerY = (y1 + y2) / 2;\r\n const centeringOffset = (size - 8) / (2 * appState.zoom.value);\r\n const dashedLineMargin = 4 / appState.zoom.value;\r\n // Same as `ne` resize handle\r\n const x = x2 + dashedLineMargin - centeringOffset;\r\n const y = y1 - dashedLineMargin - linkMarginY + centeringOffset;\r\n const [rotatedX, rotatedY] = (0,_math__WEBPACK_IMPORTED_MODULE_11__.rotate)(x + linkWidth / 2, y + linkHeight / 2, centerX, centerY, angle);\r\n return [\r\n rotatedX - linkWidth / 2,\r\n rotatedY - linkHeight / 2,\r\n linkWidth,\r\n linkHeight,\r\n ];\r\n};\r\nconst isPointHittingLinkIcon = (element, appState, [x, y]) => {\r\n const threshold = 4 / appState.zoom.value;\r\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_16__.getElementAbsoluteCoords)(element);\r\n const [linkX, linkY, linkWidth, linkHeight] = getLinkHandleFromCoords([x1, y1, x2, y2], element.angle, appState);\r\n const hitLink = x > linkX - threshold &&\r\n x < linkX + threshold + linkWidth &&\r\n y > linkY - threshold &&\r\n y < linkY + linkHeight + threshold;\r\n return hitLink;\r\n};\r\nlet HYPERLINK_TOOLTIP_TIMEOUT_ID = null;\r\nconst showHyperlinkTooltip = (element, appState) => {\r\n if (HYPERLINK_TOOLTIP_TIMEOUT_ID) {\r\n clearTimeout(HYPERLINK_TOOLTIP_TIMEOUT_ID);\r\n }\r\n HYPERLINK_TOOLTIP_TIMEOUT_ID = window.setTimeout(() => renderTooltip(element, appState), _constants__WEBPACK_IMPORTED_MODULE_12__.HYPERLINK_TOOLTIP_DELAY);\r\n};\r\nconst renderTooltip = (element, appState) => {\r\n if (!element.link) {\r\n return;\r\n }\r\n const tooltipDiv = (0,_components_Tooltip__WEBPACK_IMPORTED_MODULE_13__.getTooltipDiv)();\r\n tooltipDiv.classList.add(\"excalidraw-tooltip--visible\");\r\n tooltipDiv.style.maxWidth = \"20rem\";\r\n tooltipDiv.textContent = element.link;\r\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_16__.getElementAbsoluteCoords)(element);\r\n const [linkX, linkY, linkWidth, linkHeight] = getLinkHandleFromCoords([x1, y1, x2, y2], element.angle, appState);\r\n const linkViewportCoords = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.sceneCoordsToViewportCoords)({ sceneX: linkX, sceneY: linkY }, appState);\r\n (0,_components_Tooltip__WEBPACK_IMPORTED_MODULE_13__.updateTooltipPosition)(tooltipDiv, {\r\n left: linkViewportCoords.x,\r\n top: linkViewportCoords.y,\r\n width: linkWidth,\r\n height: linkHeight,\r\n }, \"top\");\r\n IS_HYPERLINK_TOOLTIP_VISIBLE = true;\r\n};\r\nconst hideHyperlinkToolip = () => {\r\n if (HYPERLINK_TOOLTIP_TIMEOUT_ID) {\r\n clearTimeout(HYPERLINK_TOOLTIP_TIMEOUT_ID);\r\n }\r\n if (IS_HYPERLINK_TOOLTIP_VISIBLE) {\r\n IS_HYPERLINK_TOOLTIP_VISIBLE = false;\r\n (0,_components_Tooltip__WEBPACK_IMPORTED_MODULE_13__.getTooltipDiv)().classList.remove(\"excalidraw-tooltip--visible\");\r\n }\r\n};\r\nconst shouldHideLinkPopup = (element, appState, [clientX, clientY]) => {\r\n const { x: sceneX, y: sceneY } = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.viewportCoordsToSceneCoords)({ clientX, clientY }, appState);\r\n const threshold = 15 / appState.zoom.value;\r\n // hitbox to prevent hiding when hovered in element bounding box\r\n if ((0,_collision__WEBPACK_IMPORTED_MODULE_15__.isPointHittingElementBoundingBox)(element, [sceneX, sceneY], threshold)) {\r\n return false;\r\n }\r\n // hit box to prevent hiding when hovered in the vertical area between element and popover\r\n if (sceneX >= element.x &&\r\n sceneX <= element.x + element.width &&\r\n sceneY <= element.y &&\r\n sceneY >= element.y - SPACE_BOTTOM) {\r\n return false;\r\n }\r\n // hit box to prevent hiding when hovered around popover within threshold\r\n const { x: popoverX, y: popoverY } = getCoordsForPopover(element, appState);\r\n if (clientX >= popoverX - threshold &&\r\n clientX <= popoverX + CONTAINER_WIDTH + CONTAINER_PADDING * 2 + threshold &&\r\n clientY >= popoverY - threshold &&\r\n clientY <= popoverY + threshold + CONTAINER_PADDING * 2 + CONTAINER_HEIGHT) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QztLQUNkO0lBRUQsMEZBQTBGO0lBQzFGLElBQ0UsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLO1FBQ25DLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQztRQUNuQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQ2xDO1FBQ0EsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELHlFQUF5RTtJQUN6RSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVFLElBQ0UsT0FBTyxJQUFJLFFBQVEsR0FBRyxTQUFTO1FBQy9CLE9BQU8sSUFBSSxRQUFRLEdBQUcsZUFBZSxHQUFHLGlCQUFpQixHQUFHLENBQUMsR0FBRyxTQUFTO1FBQ3pFLE9BQU8sSUFBSSxRQUFRLEdBQUcsU0FBUztRQUMvQixPQUFPLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLEVBQzFFO1FBQ0EsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2VsZW1lbnQvSHlwZXJsaW5rLnRzeD8zYzYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcFN0YXRlLCBFeGNhbGlkcmF3UHJvcHMsIFBvaW50IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRTaG9ydGN1dEtleSxcbiAgc2NlbmVDb29yZHNUb1ZpZXdwb3J0Q29vcmRzLFxuICB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgbXV0YXRlRWxlbWVudCB9IGZyb20gXCIuL211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvcmVnaXN0ZXJcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi4vY29tcG9uZW50cy9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgeyBlZGl0SWNvbiwgbGluaywgdHJhc2ggfSBmcm9tIFwiLi4vY29tcG9uZW50cy9pY29uc1wiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgREVGQVVMVF9MSU5LX1NJWkUgfSBmcm9tIFwiLi4vcmVuZGVyZXIvcmVuZGVyRWxlbWVudFwiO1xuaW1wb3J0IHsgcm90YXRlIH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7IEVWRU5ULCBIWVBFUkxJTktfVE9PTFRJUF9ERUxBWSwgTUlNRV9UWVBFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEJvdW5kcyB9IGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IHsgZ2V0VG9vbHRpcERpdiwgdXBkYXRlVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVG9vbHRpcFwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgaXNQb2ludEhpdHRpbmdFbGVtZW50Qm91bmRpbmdCb3ggfSBmcm9tIFwiLi9jb2xsaXNpb25cIjtcbmltcG9ydCB7IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyB9IGZyb20gXCIuL1wiO1xuXG5pbXBvcnQgXCIuL0h5cGVybGluay5zY3NzXCI7XG5cbmNvbnN0IENPTlRBSU5FUl9XSURUSCA9IDMyMDtcbmNvbnN0IFNQQUNFX0JPVFRPTSA9IDg1O1xuY29uc3QgQ09OVEFJTkVSX1BBRERJTkcgPSA1O1xuY29uc3QgQ09OVEFJTkVSX0hFSUdIVCA9IDQyO1xuY29uc3QgQVVUT19ISURFX1RJTUVPVVQgPSA1MDA7XG5cbmV4cG9ydCBjb25zdCBFWFRFUk5BTF9MSU5LX0lNRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG5FWFRFUk5BTF9MSU5LX0lNRy5zcmMgPSBgZGF0YToke01JTUVfVFlQRVMuc3ZnfSwgJHtlbmNvZGVVUklDb21wb25lbnQoXG4gIGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMTk3MWMyXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGNsYXNzPVwiZmVhdGhlciBmZWF0aGVyLWV4dGVybmFsLWxpbmtcIj48cGF0aCBkPVwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIj48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz1cIjE1IDMgMjEgMyAyMSA5XCI+PC9wb2x5bGluZT48bGluZSB4MT1cIjEwXCIgeTE9XCIxNFwiIHgyPVwiMjFcIiB5Mj1cIjNcIj48L2xpbmU+PC9zdmc+YCxcbil9YDtcblxubGV0IElTX0hZUEVSTElOS19UT09MVElQX1ZJU0lCTEUgPSBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IEh5cGVybGluayA9ICh7XG4gIGVsZW1lbnQsXG4gIGFwcFN0YXRlLFxuICBzZXRBcHBTdGF0ZSxcbiAgb25MaW5rT3Blbixcbn06IHtcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50O1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgb25MaW5rT3BlbjogRXhjYWxpZHJhd1Byb3BzW1wib25MaW5rT3BlblwiXTtcbn0pID0+IHtcbiAgY29uc3QgbGlua1ZhbCA9IGVsZW1lbnQubGluayB8fCBcIlwiO1xuXG4gIGNvbnN0IFtpbnB1dFZhbCwgc2V0SW5wdXRWYWxdID0gdXNlU3RhdGUobGlua1ZhbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpc0VkaXRpbmcgPSBhcHBTdGF0ZS5zaG93SHlwZXJsaW5rUG9wdXAgPT09IFwiZWRpdG9yXCIgfHwgIWxpbmtWYWw7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmsgPSBub3JtYWxpemVMaW5rKGlucHV0UmVmLmN1cnJlbnQudmFsdWUpO1xuXG4gICAgbXV0YXRlRWxlbWVudChlbGVtZW50LCB7IGxpbmsgfSk7XG4gICAgc2V0QXBwU3RhdGUoeyBzaG93SHlwZXJsaW5rUG9wdXA6IFwiaW5mb1wiIH0pO1xuICB9LCBbZWxlbWVudCwgc2V0QXBwU3RhdGVdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoYW5kbGVTdWJtaXQoKTtcbiAgICB9O1xuICB9LCBbaGFuZGxlU3VibWl0XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdGltZW91dElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBpZiAoaXNFZGl0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzaG91bGRIaWRlID0gc2hvdWxkSGlkZUxpbmtQb3B1cChlbGVtZW50LCBhcHBTdGF0ZSwgW1xuICAgICAgICBldmVudC5jbGllbnRYLFxuICAgICAgICBldmVudC5jbGllbnRZLFxuICAgICAgXSkgYXMgYm9vbGVhbjtcbiAgICAgIGlmIChzaG91bGRIaWRlKSB7XG4gICAgICAgIHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRBcHBTdGF0ZSh7IHNob3dIeXBlcmxpbmtQb3B1cDogZmFsc2UgfSk7XG4gICAgICAgIH0sIEFVVE9fSElERV9USU1FT1VUKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKEVWRU5ULlBPSU5URVJfTU9WRSwgaGFuZGxlUG9pbnRlck1vdmUsIGZhbHNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoRVZFTlQuUE9JTlRFUl9NT1ZFLCBoYW5kbGVQb2ludGVyTW92ZSwgZmFsc2UpO1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbYXBwU3RhdGUsIGVsZW1lbnQsIGlzRWRpdGluZywgc2V0QXBwU3RhdGVdKTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbXV0YXRlRWxlbWVudChlbGVtZW50LCB7IGxpbms6IG51bGwgfSk7XG4gICAgaWYgKGlzRWRpdGluZykge1xuICAgICAgaW5wdXRSZWYuY3VycmVudCEudmFsdWUgPSBcIlwiO1xuICAgIH1cbiAgICBzZXRBcHBTdGF0ZSh7IHNob3dIeXBlcmxpbmtQb3B1cDogZmFsc2UgfSk7XG4gIH0sIFtzZXRBcHBTdGF0ZSwgZWxlbWVudCwgaXNFZGl0aW5nXSk7XG5cbiAgY29uc3Qgb25FZGl0ID0gKCkgPT4ge1xuICAgIHNldEFwcFN0YXRlKHsgc2hvd0h5cGVybGlua1BvcHVwOiBcImVkaXRvclwiIH0pO1xuICB9O1xuICBjb25zdCB7IHgsIHkgfSA9IGdldENvb3Jkc0ZvclBvcG92ZXIoZWxlbWVudCwgYXBwU3RhdGUpO1xuICBpZiAoXG4gICAgYXBwU3RhdGUuZHJhZ2dpbmdFbGVtZW50IHx8XG4gICAgYXBwU3RhdGUucmVzaXppbmdFbGVtZW50IHx8XG4gICAgYXBwU3RhdGUuaXNSb3RhdGluZ1xuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cImV4Y2FsaWRyYXctaHlwZXJsaW5rQ29udGFpbmVyXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgIGxlZnQ6IGAke3h9cHhgLFxuICAgICAgICB3aWR0aDogQ09OVEFJTkVSX1dJRFRILFxuICAgICAgICBwYWRkaW5nOiBDT05UQUlORVJfUEFERElORyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2lzRWRpdGluZyA/IChcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiZXhjYWxpZHJhdy1oeXBlcmxpbmtDb250YWluZXItaW5wdXRcIil9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIG9yIHBhc3RlIHlvdXIgbGluayBoZXJlXCJcbiAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbH1cbiAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRJbnB1dFZhbChldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgY21kL2N0cmwrayBzaG9ydGN1dCB3aGVuIGVkaXRpbmcgbGlua1xuICAgICAgICAgICAgaWYgKGV2ZW50W0tFWVMuQ1RSTF9PUl9DTURdICYmIGV2ZW50LmtleSA9PT0gS0VZUy5LKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkVOVEVSIHx8IGV2ZW50LmtleSA9PT0gS0VZUy5FU0NBUEUpIHtcbiAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj17ZWxlbWVudC5saW5rIHx8IFwiXCJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiZXhjYWxpZHJhdy1oeXBlcmxpbmtDb250YWluZXItbGlua1wiLCB7XG4gICAgICAgICAgICBcImQtbm9uZVwiOiBpc0VkaXRpbmcsXG4gICAgICAgICAgfSl9XG4gICAgICAgICAgdGFyZ2V0PXtpc0xvY2FsTGluayhlbGVtZW50LmxpbmspID8gXCJfc2VsZlwiIDogXCJfYmxhbmtcIn1cbiAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChvbkxpbmtPcGVuICYmIGVsZW1lbnQubGluaykge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBvbkxpbmtPcGVuKGVsZW1lbnQubGluaywgZXZlbnQubmF0aXZlRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgID5cbiAgICAgICAgICB7ZWxlbWVudC5saW5rfVxuICAgICAgICA8L2E+XG4gICAgICApfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJleGNhbGlkcmF3LWh5cGVybGlua0NvbnRhaW5lcl9fYnV0dG9uc1wiPlxuICAgICAgICB7IWlzRWRpdGluZyAmJiAoXG4gICAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmVkaXRcIil9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5lZGl0XCIpfVxuICAgICAgICAgICAgbGFiZWw9e3QoXCJidXR0b25zLmVkaXRcIil9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkVkaXR9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJleGNhbGlkcmF3LWh5cGVybGlua0NvbnRhaW5lci0tZWRpdFwiXG4gICAgICAgICAgICBpY29uPXtlZGl0SWNvbn1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIHtsaW5rVmFsICYmIChcbiAgICAgICAgICA8VG9vbEJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMucmVtb3ZlXCIpfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMucmVtb3ZlXCIpfVxuICAgICAgICAgICAgbGFiZWw9e3QoXCJidXR0b25zLnJlbW92ZVwiKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVJlbW92ZX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImV4Y2FsaWRyYXctaHlwZXJsaW5rQ29udGFpbmVyLS1yZW1vdmVcIlxuICAgICAgICAgICAgaWNvbj17dHJhc2h9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgZ2V0Q29vcmRzRm9yUG9wb3ZlciA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgY29uc3QgeyB4OiB2aWV3UG9ydFgsIHk6IHZpZXdQb3J0WSB9ID0gc2NlbmVDb29yZHNUb1ZpZXdwb3J0Q29vcmRzKFxuICAgIHsgc2NlbmVYOiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoIC8gMiwgc2NlbmVZOiBlbGVtZW50LnkgfSxcbiAgICBhcHBTdGF0ZSxcbiAgKTtcbiAgY29uc3QgeCA9IHZpZXdQb3J0WCAtIENPTlRBSU5FUl9XSURUSCAvIDI7XG4gIGNvbnN0IHkgPSB2aWV3UG9ydFkgLSBTUEFDRV9CT1RUT007XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVMaW5rID0gKGxpbms6IHN0cmluZykgPT4ge1xuICBsaW5rID0gbGluay50cmltKCk7XG4gIGlmIChsaW5rKSB7XG4gICAgLy8gcHJlZml4IHdpdGggcHJvdG9jb2wgaWYgbm90IGZ1bGx5LXF1YWxpZmllZFxuICAgIGlmICghbGluay5pbmNsdWRlcyhcIjovL1wiKSAmJiAhL15bW1xcXFwvXS8udGVzdChsaW5rKSkge1xuICAgICAgbGluayA9IGBodHRwczovLyR7bGlua31gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGluaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0xvY2FsTGluayA9IChsaW5rOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gIHJldHVybiAhIShsaW5rPy5pbmNsdWRlcyhsb2NhdGlvbi5vcmlnaW4pIHx8IGxpbms/LnN0YXJ0c1dpdGgoXCIvXCIpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25MaW5rID0gcmVnaXN0ZXIoe1xuICBuYW1lOiBcImxpbmtcIixcbiAgcGVyZm9ybTogKGVsZW1lbnRzLCBhcHBTdGF0ZSkgPT4ge1xuICAgIGlmIChhcHBTdGF0ZS5zaG93SHlwZXJsaW5rUG9wdXAgPT09IFwiZWRpdG9yXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgYXBwU3RhdGU6IHtcbiAgICAgICAgLi4uYXBwU3RhdGUsXG4gICAgICAgIHNob3dIeXBlcmxpbmtQb3B1cDogXCJlZGl0b3JcIixcbiAgICAgIH0sXG4gICAgICBjb21taXRUb0hpc3Rvcnk6IHRydWUsXG4gICAgfTtcbiAgfSxcbiAga2V5VGVzdDogKGV2ZW50KSA9PiBldmVudFtLRVlTLkNUUkxfT1JfQ01EXSAmJiBldmVudC5rZXkgPT09IEtFWVMuSyxcbiAgY29udGV4dEl0ZW1MYWJlbDogKGVsZW1lbnRzLCBhcHBTdGF0ZSkgPT5cbiAgICBnZXRDb250ZXh0TWVudUxhYmVsKGVsZW1lbnRzLCBhcHBTdGF0ZSksXG4gIGNvbnRleHRJdGVtUHJlZGljYXRlOiAoZWxlbWVudHMsIGFwcFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDE7XG4gIH0sXG4gIFBhbmVsQ29tcG9uZW50OiAoeyBlbGVtZW50cywgYXBwU3RhdGUsIHVwZGF0ZURhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGljb249e2xpbmt9XG4gICAgICAgIGFyaWEtbGFiZWw9e3QoZ2V0Q29udGV4dE1lbnVMYWJlbChlbGVtZW50cywgYXBwU3RhdGUpKX1cbiAgICAgICAgdGl0bGU9e2Ake3QoXCJsYWJlbHMubGluay5sYWJlbFwiKX0gLSAke2dldFNob3J0Y3V0S2V5KFwiQ3RybE9yQ21kK0tcIil9YH1cbiAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlRGF0YShudWxsKX1cbiAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmICEhc2VsZWN0ZWRFbGVtZW50c1swXS5saW5rfVxuICAgICAgLz5cbiAgICApO1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZXh0TWVudUxhYmVsID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbikgPT4ge1xuICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUpO1xuICBjb25zdCBsYWJlbCA9IHNlbGVjdGVkRWxlbWVudHNbMF0hLmxpbmtcbiAgICA/IFwibGFiZWxzLmxpbmsuZWRpdFwiXG4gICAgOiBcImxhYmVscy5saW5rLmNyZWF0ZVwiO1xuICByZXR1cm4gbGFiZWw7XG59O1xuZXhwb3J0IGNvbnN0IGdldExpbmtIYW5kbGVGcm9tQ29vcmRzID0gKFxuICBbeDEsIHkxLCB4MiwgeTJdOiBCb3VuZHMsXG4gIGFuZ2xlOiBudW1iZXIsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbik6IFt4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJdID0+IHtcbiAgY29uc3Qgc2l6ZSA9IERFRkFVTFRfTElOS19TSVpFO1xuICBjb25zdCBsaW5rV2lkdGggPSBzaXplIC8gYXBwU3RhdGUuem9vbS52YWx1ZTtcbiAgY29uc3QgbGlua0hlaWdodCA9IHNpemUgLyBhcHBTdGF0ZS56b29tLnZhbHVlO1xuICBjb25zdCBsaW5rTWFyZ2luWSA9IHNpemUgLyBhcHBTdGF0ZS56b29tLnZhbHVlO1xuICBjb25zdCBjZW50ZXJYID0gKHgxICsgeDIpIC8gMjtcbiAgY29uc3QgY2VudGVyWSA9ICh5MSArIHkyKSAvIDI7XG4gIGNvbnN0IGNlbnRlcmluZ09mZnNldCA9IChzaXplIC0gOCkgLyAoMiAqIGFwcFN0YXRlLnpvb20udmFsdWUpO1xuICBjb25zdCBkYXNoZWRMaW5lTWFyZ2luID0gNCAvIGFwcFN0YXRlLnpvb20udmFsdWU7XG5cbiAgLy8gU2FtZSBhcyBgbmVgIHJlc2l6ZSBoYW5kbGVcbiAgY29uc3QgeCA9IHgyICsgZGFzaGVkTGluZU1hcmdpbiAtIGNlbnRlcmluZ09mZnNldDtcbiAgY29uc3QgeSA9IHkxIC0gZGFzaGVkTGluZU1hcmdpbiAtIGxpbmtNYXJnaW5ZICsgY2VudGVyaW5nT2Zmc2V0O1xuXG4gIGNvbnN0IFtyb3RhdGVkWCwgcm90YXRlZFldID0gcm90YXRlKFxuICAgIHggKyBsaW5rV2lkdGggLyAyLFxuICAgIHkgKyBsaW5rSGVpZ2h0IC8gMixcbiAgICBjZW50ZXJYLFxuICAgIGNlbnRlclksXG4gICAgYW5nbGUsXG4gICk7XG4gIHJldHVybiBbXG4gICAgcm90YXRlZFggLSBsaW5rV2lkdGggLyAyLFxuICAgIHJvdGF0ZWRZIC0gbGlua0hlaWdodCAvIDIsXG4gICAgbGlua1dpZHRoLFxuICAgIGxpbmtIZWlnaHQsXG4gIF07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2ludEhpdHRpbmdMaW5rSWNvbiA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4gIFt4LCB5XTogUG9pbnQsXG4pID0+IHtcbiAgY29uc3QgdGhyZXNob2xkID0gNCAvIGFwcFN0YXRlLnpvb20udmFsdWU7XG5cbiAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50KTtcblxuICBjb25zdCBbbGlua1gsIGxpbmtZLCBsaW5rV2lkdGgsIGxpbmtIZWlnaHRdID0gZ2V0TGlua0hhbmRsZUZyb21Db29yZHMoXG4gICAgW3gxLCB5MSwgeDIsIHkyXSxcbiAgICBlbGVtZW50LmFuZ2xlLFxuICAgIGFwcFN0YXRlLFxuICApO1xuICBjb25zdCBoaXRMaW5rID1cbiAgICB4ID4gbGlua1ggLSB0aHJlc2hvbGQgJiZcbiAgICB4IDwgbGlua1ggKyB0aHJlc2hvbGQgKyBsaW5rV2lkdGggJiZcbiAgICB5ID4gbGlua1kgLSB0aHJlc2hvbGQgJiZcbiAgICB5IDwgbGlua1kgKyBsaW5rSGVpZ2h0ICsgdGhyZXNob2xkO1xuXG4gIHJldHVybiBoaXRMaW5rO1xufTtcblxubGV0IEhZUEVSTElOS19UT09MVElQX1RJTUVPVVRfSUQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuZXhwb3J0IGNvbnN0IHNob3dIeXBlcmxpbmtUb29sdGlwID0gKFxuICBlbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbikgPT4ge1xuICBpZiAoSFlQRVJMSU5LX1RPT0xUSVBfVElNRU9VVF9JRCkge1xuICAgIGNsZWFyVGltZW91dChIWVBFUkxJTktfVE9PTFRJUF9USU1FT1VUX0lEKTtcbiAgfVxuICBIWVBFUkxJTktfVE9PTFRJUF9USU1FT1VUX0lEID0gd2luZG93LnNldFRpbWVvdXQoXG4gICAgKCkgPT4gcmVuZGVyVG9vbHRpcChlbGVtZW50LCBhcHBTdGF0ZSksXG4gICAgSFlQRVJMSU5LX1RPT0xUSVBfREVMQVksXG4gICk7XG59O1xuXG5jb25zdCByZW5kZXJUb29sdGlwID0gKFxuICBlbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbikgPT4ge1xuICBpZiAoIWVsZW1lbnQubGluaykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRvb2x0aXBEaXYgPSBnZXRUb29sdGlwRGl2KCk7XG5cbiAgdG9vbHRpcERpdi5jbGFzc0xpc3QuYWRkKFwiZXhjYWxpZHJhdy10b29sdGlwLS12aXNpYmxlXCIpO1xuICB0b29sdGlwRGl2LnN0eWxlLm1heFdpZHRoID0gXCIyMHJlbVwiO1xuICB0b29sdGlwRGl2LnRleHRDb250ZW50ID0gZWxlbWVudC5saW5rO1xuXG4gIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMoZWxlbWVudCk7XG5cbiAgY29uc3QgW2xpbmtYLCBsaW5rWSwgbGlua1dpZHRoLCBsaW5rSGVpZ2h0XSA9IGdldExpbmtIYW5kbGVGcm9tQ29vcmRzKFxuICAgIFt4MSwgeTEsIHgyLCB5Ml0sXG4gICAgZWxlbWVudC5hbmdsZSxcbiAgICBhcHBTdGF0ZSxcbiAgKTtcblxuICBjb25zdCBsaW5rVmlld3BvcnRDb29yZHMgPSBzY2VuZUNvb3Jkc1RvVmlld3BvcnRDb29yZHMoXG4gICAgeyBzY2VuZVg6IGxpbmtYLCBzY2VuZVk6IGxpbmtZIH0sXG4gICAgYXBwU3RhdGUsXG4gICk7XG5cbiAgdXBkYXRlVG9vbHRpcFBvc2l0aW9uKFxuICAgIHRvb2x0aXBEaXYsXG4gICAge1xuICAgICAgbGVmdDogbGlua1ZpZXdwb3J0Q29vcmRzLngsXG4gICAgICB0b3A6IGxpbmtWaWV3cG9ydENvb3Jkcy55LFxuICAgICAgd2lkdGg6IGxpbmtXaWR0aCxcbiAgICAgIGhlaWdodDogbGlua0hlaWdodCxcbiAgICB9LFxuICAgIFwidG9wXCIsXG4gICk7XG5cbiAgSVNfSFlQRVJMSU5LX1RPT0xUSVBfVklTSUJMRSA9IHRydWU7XG59O1xuZXhwb3J0IGNvbnN0IGhpZGVIeXBlcmxpbmtUb29saXAgPSAoKSA9PiB7XG4gIGlmIChIWVBFUkxJTktfVE9PTFRJUF9USU1FT1VUX0lEKSB7XG4gICAgY2xlYXJUaW1lb3V0KEhZUEVSTElOS19UT09MVElQX1RJTUVPVVRfSUQpO1xuICB9XG4gIGlmIChJU19IWVBFUkxJTktfVE9PTFRJUF9WSVNJQkxFKSB7XG4gICAgSVNfSFlQRVJMSU5LX1RPT0xUSVBfVklTSUJMRSA9IGZhbHNlO1xuICAgIGdldFRvb2x0aXBEaXYoKS5jbGFzc0xpc3QucmVtb3ZlKFwiZXhjYWxpZHJhdy10b29sdGlwLS12aXNpYmxlXCIpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkSGlkZUxpbmtQb3B1cCA9IChcbiAgZWxlbWVudDogTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50LFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4gIFtjbGllbnRYLCBjbGllbnRZXTogUG9pbnQsXG4pOiBCb29sZWFuID0+IHtcbiAgY29uc3QgeyB4OiBzY2VuZVgsIHk6IHNjZW5lWSB9ID0gdmlld3BvcnRDb29yZHNUb1NjZW5lQ29vcmRzKFxuICAgIHsgY2xpZW50WCwgY2xpZW50WSB9LFxuICAgIGFwcFN0YXRlLFxuICApO1xuXG4gIGNvbnN0IHRocmVzaG9sZCA9IDE1IC8gYXBwU3RhdGUuem9vbS52YWx1ZTtcbiAgLy8gaGl0Ym94IHRvIHByZXZlbnQgaGlkaW5nIHdoZW4gaG92ZXJlZCBpbiBlbGVtZW50IGJvdW5kaW5nIGJveFxuICBpZiAoaXNQb2ludEhpdHRpbmdFbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudCwgW3NjZW5lWCwgc2NlbmVZXSwgdGhyZXNob2xkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGhpdCBib3ggdG8gcHJldmVudCBoaWRpbmcgd2hlbiBob3ZlcmVkIGluIHRoZSB2ZXJ0aWNhbCBhcmVhIGJldHdlZW4gZWxlbWVudCBhbmQgcG9wb3ZlclxuICBpZiAoXG4gICAgc2NlbmVYID49IGVsZW1lbnQueCAmJlxuICAgIHNjZW5lWCA8PSBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoICYmXG4gICAgc2NlbmVZIDw9IGVsZW1lbnQueSAmJlxuICAgIHNjZW5lWSA+PSBlbGVtZW50LnkgLSBTUEFDRV9CT1RUT01cbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGhpdCBib3ggdG8gcHJldmVudCBoaWRpbmcgd2hlbiBob3ZlcmVkIGFyb3VuZCBwb3BvdmVyIHdpdGhpbiB0aHJlc2hvbGRcbiAgY29uc3QgeyB4OiBwb3BvdmVyWCwgeTogcG9wb3ZlclkgfSA9IGdldENvb3Jkc0ZvclBvcG92ZXIoZWxlbWVudCwgYXBwU3RhdGUpO1xuXG4gIGlmIChcbiAgICBjbGllbnRYID49IHBvcG92ZXJYIC0gdGhyZXNob2xkICYmXG4gICAgY2xpZW50WCA8PSBwb3BvdmVyWCArIENPTlRBSU5FUl9XSURUSCArIENPTlRBSU5FUl9QQURESU5HICogMiArIHRocmVzaG9sZCAmJlxuICAgIGNsaWVudFkgPj0gcG9wb3ZlclkgLSB0aHJlc2hvbGQgJiZcbiAgICBjbGllbnRZIDw9IHBvcG92ZXJZICsgdGhyZXNob2xkICsgQ09OVEFJTkVSX1BBRERJTkcgKiAyICsgQ09OVEFJTkVSX0hFSUdIVFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../element/Hyperlink.tsx\n");
|
|
2232
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EXTERNAL_LINK_IMG\": () => (/* binding */ EXTERNAL_LINK_IMG),\n/* harmony export */ \"Hyperlink\": () => (/* binding */ Hyperlink),\n/* harmony export */ \"normalizeLink\": () => (/* binding */ normalizeLink),\n/* harmony export */ \"isLocalLink\": () => (/* binding */ isLocalLink),\n/* harmony export */ \"actionLink\": () => (/* binding */ actionLink),\n/* harmony export */ \"getContextMenuLabel\": () => (/* binding */ getContextMenuLabel),\n/* harmony export */ \"getLinkHandleFromCoords\": () => (/* binding */ getLinkHandleFromCoords),\n/* harmony export */ \"isPointHittingLinkIcon\": () => (/* binding */ isPointHittingLinkIcon),\n/* harmony export */ \"showHyperlinkTooltip\": () => (/* binding */ showHyperlinkTooltip),\n/* harmony export */ \"hideHyperlinkToolip\": () => (/* binding */ hideHyperlinkToolip),\n/* harmony export */ \"shouldHideLinkPopup\": () => (/* binding */ shouldHideLinkPopup)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _actions_register__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../actions/register */ \"../../actions/register.ts\");\n/* harmony import */ var _components_ToolButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _components_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _renderer_renderElement__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../renderer/renderElement */ \"../../renderer/renderElement.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../math */ \"../../math.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _components_Tooltip__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../components/Tooltip */ \"../../components/Tooltip.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _collision__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./collision */ \"../../element/collision.ts\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./ */ \"../../element/index.ts\");\n/* harmony import */ var _Hyperlink_scss__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./Hyperlink.scss */ \"../../element/Hyperlink.scss\");\n/* harmony import */ var _Hyperlink_scss__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_Hyperlink_scss__WEBPACK_IMPORTED_MODULE_17__);\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst CONTAINER_WIDTH = 320;\r\nconst SPACE_BOTTOM = 85;\r\nconst CONTAINER_PADDING = 5;\r\nconst CONTAINER_HEIGHT = 42;\r\nconst AUTO_HIDE_TIMEOUT = 500;\r\nconst EXTERNAL_LINK_IMG = document.createElement(\"img\");\r\nEXTERNAL_LINK_IMG.src = `data:${_constants__WEBPACK_IMPORTED_MODULE_12__.MIME_TYPES.svg}, ${encodeURIComponent(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1971c2\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-external-link\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>`)}`;\r\nlet IS_HYPERLINK_TOOLTIP_VISIBLE = false;\r\nconst Hyperlink = ({ element, appState, setAppState, onLinkOpen, }) => {\r\n const linkVal = element.link || \"\";\r\n const [inputVal, setInputVal] = (0,react__WEBPACK_IMPORTED_MODULE_7__.useState)(linkVal);\r\n const inputRef = (0,react__WEBPACK_IMPORTED_MODULE_7__.useRef)(null);\r\n const isEditing = appState.showHyperlinkPopup === \"editor\" || !linkVal;\r\n const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_7__.useCallback)(() => {\r\n if (!inputRef.current) {\r\n return;\r\n }\r\n const link = normalizeLink(inputRef.current.value);\r\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.mutateElement)(element, { link });\r\n setAppState({ showHyperlinkPopup: \"info\" });\r\n }, [element, setAppState]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_7__.useLayoutEffect)(() => {\r\n return () => {\r\n handleSubmit();\r\n };\r\n }, [handleSubmit]);\r\n (0,react__WEBPACK_IMPORTED_MODULE_7__.useEffect)(() => {\r\n let timeoutId = null;\r\n const handlePointerMove = (event) => {\r\n if (isEditing) {\r\n return;\r\n }\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n const shouldHide = shouldHideLinkPopup(element, appState, [\r\n event.clientX,\r\n event.clientY,\r\n ]);\r\n if (shouldHide) {\r\n timeoutId = window.setTimeout(() => {\r\n setAppState({ showHyperlinkPopup: false });\r\n }, AUTO_HIDE_TIMEOUT);\r\n }\r\n };\r\n window.addEventListener(_constants__WEBPACK_IMPORTED_MODULE_12__.EVENT.POINTER_MOVE, handlePointerMove, false);\r\n return () => {\r\n window.removeEventListener(_constants__WEBPACK_IMPORTED_MODULE_12__.EVENT.POINTER_MOVE, handlePointerMove, false);\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n };\r\n }, [appState, element, isEditing, setAppState]);\r\n const handleRemove = (0,react__WEBPACK_IMPORTED_MODULE_7__.useCallback)(() => {\r\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_2__.mutateElement)(element, { link: null });\r\n if (isEditing) {\r\n inputRef.current.value = \"\";\r\n }\r\n setAppState({ showHyperlinkPopup: false });\r\n }, [setAppState, element, isEditing]);\r\n const onEdit = () => {\r\n setAppState({ showHyperlinkPopup: \"editor\" });\r\n };\r\n const { x, y } = getCoordsForPopover(element, appState);\r\n if (appState.draggingElement ||\r\n appState.resizingElement ||\r\n appState.isRotating) {\r\n return null;\r\n }\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"excalidraw-hyperlinkContainer\", style: {\r\n top: `${y}px`,\r\n left: `${x}px`,\r\n width: CONTAINER_WIDTH,\r\n padding: CONTAINER_PADDING,\r\n } }, { children: [isEditing ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"input\", { className: (0,clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\"excalidraw-hyperlinkContainer-input\"), placeholder: \"Type or paste your link here\", ref: inputRef, value: inputVal, onChange: (event) => setInputVal(event.target.value), autoFocus: true, onKeyDown: (event) => {\r\n event.stopPropagation();\r\n // prevent cmd/ctrl+k shortcut when editing link\r\n if (event[_keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.CTRL_OR_CMD] && event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.K) {\r\n event.preventDefault();\r\n }\r\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.ENTER || event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.ESCAPE) {\r\n handleSubmit();\r\n }\r\n } }, void 0)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: element.link || \"\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(\"excalidraw-hyperlinkContainer-link\", {\r\n \"d-none\": isEditing,\r\n }), target: isLocalLink(element.link) ? \"_self\" : \"_blank\", onClick: (event) => {\r\n if (onLinkOpen && element.link) {\r\n event.preventDefault();\r\n onLinkOpen(element.link, event.nativeEvent);\r\n }\r\n }, rel: \"noopener noreferrer\" }, { children: element.link }), void 0)), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"excalidraw-hyperlinkContainer__buttons\" }, { children: [!isEditing && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.edit\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.edit\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.edit\"), onClick: onEdit, className: \"excalidraw-hyperlinkContainer--edit\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.editIcon }, void 0)), linkVal && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.remove\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.remove\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.remove\"), onClick: handleRemove, className: \"excalidraw-hyperlinkContainer--remove\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.trash }, void 0))] }), void 0)] }), void 0));\r\n};\r\nconst getCoordsForPopover = (element, appState) => {\r\n const { x: viewportX, y: viewportY } = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.sceneCoordsToViewportCoords)({ sceneX: element.x + element.width / 2, sceneY: element.y }, appState);\r\n const x = viewportX - appState.offsetLeft - CONTAINER_WIDTH / 2;\r\n const y = viewportY - appState.offsetTop - SPACE_BOTTOM;\r\n return { x, y };\r\n};\r\nconst normalizeLink = (link) => {\r\n link = link.trim();\r\n if (link) {\r\n // prefix with protocol if not fully-qualified\r\n if (!link.includes(\"://\") && !/^[[\\\\/]/.test(link)) {\r\n link = `https://${link}`;\r\n }\r\n }\r\n return link;\r\n};\r\nconst isLocalLink = (link) => {\r\n return !!((link === null || link === void 0 ? void 0 : link.includes(location.origin)) || (link === null || link === void 0 ? void 0 : link.startsWith(\"/\")));\r\n};\r\nconst actionLink = (0,_actions_register__WEBPACK_IMPORTED_MODULE_3__.register)({\r\n name: \"link\",\r\n perform: (elements, appState) => {\r\n if (appState.showHyperlinkPopup === \"editor\") {\r\n return false;\r\n }\r\n return {\r\n elements,\r\n appState: Object.assign(Object.assign({}, appState), { showHyperlinkPopup: \"editor\" }),\r\n commitToHistory: true,\r\n };\r\n },\r\n keyTest: (event) => event[_keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.CTRL_OR_CMD] && event.key === _keys__WEBPACK_IMPORTED_MODULE_9__.KEYS.K,\r\n contextItemLabel: (elements, appState) => getContextMenuLabel(elements, appState),\r\n contextItemPredicate: (elements, appState) => {\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_14__.getSelectedElements)(elements, appState);\r\n return selectedElements.length === 1;\r\n },\r\n PanelComponent: ({ elements, appState, updateData }) => {\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_14__.getSelectedElements)(elements, appState);\r\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ToolButton__WEBPACK_IMPORTED_MODULE_4__.ToolButton, { type: \"button\", icon: _components_icons__WEBPACK_IMPORTED_MODULE_5__.link, \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(getContextMenuLabel(elements, appState)), title: `${(0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.link.label\")} - ${(0,_utils__WEBPACK_IMPORTED_MODULE_1__.getShortcutKey)(\"CtrlOrCmd+K\")}`, onClick: () => updateData(null), selected: selectedElements.length === 1 && !!selectedElements[0].link }, void 0));\r\n },\r\n});\r\nconst getContextMenuLabel = (elements, appState) => {\r\n const selectedElements = (0,_scene__WEBPACK_IMPORTED_MODULE_14__.getSelectedElements)(elements, appState);\r\n const label = selectedElements[0].link\r\n ? \"labels.link.edit\"\r\n : \"labels.link.create\";\r\n return label;\r\n};\r\nconst getLinkHandleFromCoords = ([x1, y1, x2, y2], angle, appState) => {\r\n const size = _renderer_renderElement__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_LINK_SIZE;\r\n const linkWidth = size / appState.zoom.value;\r\n const linkHeight = size / appState.zoom.value;\r\n const linkMarginY = size / appState.zoom.value;\r\n const centerX = (x1 + x2) / 2;\r\n const centerY = (y1 + y2) / 2;\r\n const centeringOffset = (size - 8) / (2 * appState.zoom.value);\r\n const dashedLineMargin = 4 / appState.zoom.value;\r\n // Same as `ne` resize handle\r\n const x = x2 + dashedLineMargin - centeringOffset;\r\n const y = y1 - dashedLineMargin - linkMarginY + centeringOffset;\r\n const [rotatedX, rotatedY] = (0,_math__WEBPACK_IMPORTED_MODULE_11__.rotate)(x + linkWidth / 2, y + linkHeight / 2, centerX, centerY, angle);\r\n return [\r\n rotatedX - linkWidth / 2,\r\n rotatedY - linkHeight / 2,\r\n linkWidth,\r\n linkHeight,\r\n ];\r\n};\r\nconst isPointHittingLinkIcon = (element, appState, [x, y]) => {\r\n const threshold = 4 / appState.zoom.value;\r\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_16__.getElementAbsoluteCoords)(element);\r\n const [linkX, linkY, linkWidth, linkHeight] = getLinkHandleFromCoords([x1, y1, x2, y2], element.angle, appState);\r\n const hitLink = x > linkX - threshold &&\r\n x < linkX + threshold + linkWidth &&\r\n y > linkY - threshold &&\r\n y < linkY + linkHeight + threshold;\r\n return hitLink;\r\n};\r\nlet HYPERLINK_TOOLTIP_TIMEOUT_ID = null;\r\nconst showHyperlinkTooltip = (element, appState) => {\r\n if (HYPERLINK_TOOLTIP_TIMEOUT_ID) {\r\n clearTimeout(HYPERLINK_TOOLTIP_TIMEOUT_ID);\r\n }\r\n HYPERLINK_TOOLTIP_TIMEOUT_ID = window.setTimeout(() => renderTooltip(element, appState), _constants__WEBPACK_IMPORTED_MODULE_12__.HYPERLINK_TOOLTIP_DELAY);\r\n};\r\nconst renderTooltip = (element, appState) => {\r\n if (!element.link) {\r\n return;\r\n }\r\n const tooltipDiv = (0,_components_Tooltip__WEBPACK_IMPORTED_MODULE_13__.getTooltipDiv)();\r\n tooltipDiv.classList.add(\"excalidraw-tooltip--visible\");\r\n tooltipDiv.style.maxWidth = \"20rem\";\r\n tooltipDiv.textContent = element.link;\r\n const [x1, y1, x2, y2] = (0,___WEBPACK_IMPORTED_MODULE_16__.getElementAbsoluteCoords)(element);\r\n const [linkX, linkY, linkWidth, linkHeight] = getLinkHandleFromCoords([x1, y1, x2, y2], element.angle, appState);\r\n const linkViewportCoords = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.sceneCoordsToViewportCoords)({ sceneX: linkX, sceneY: linkY }, appState);\r\n (0,_components_Tooltip__WEBPACK_IMPORTED_MODULE_13__.updateTooltipPosition)(tooltipDiv, {\r\n left: linkViewportCoords.x,\r\n top: linkViewportCoords.y,\r\n width: linkWidth,\r\n height: linkHeight,\r\n }, \"top\");\r\n IS_HYPERLINK_TOOLTIP_VISIBLE = true;\r\n};\r\nconst hideHyperlinkToolip = () => {\r\n if (HYPERLINK_TOOLTIP_TIMEOUT_ID) {\r\n clearTimeout(HYPERLINK_TOOLTIP_TIMEOUT_ID);\r\n }\r\n if (IS_HYPERLINK_TOOLTIP_VISIBLE) {\r\n IS_HYPERLINK_TOOLTIP_VISIBLE = false;\r\n (0,_components_Tooltip__WEBPACK_IMPORTED_MODULE_13__.getTooltipDiv)().classList.remove(\"excalidraw-tooltip--visible\");\r\n }\r\n};\r\nconst shouldHideLinkPopup = (element, appState, [clientX, clientY]) => {\r\n const { x: sceneX, y: sceneY } = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.viewportCoordsToSceneCoords)({ clientX, clientY }, appState);\r\n const threshold = 15 / appState.zoom.value;\r\n // hitbox to prevent hiding when hovered in element bounding box\r\n if ((0,_collision__WEBPACK_IMPORTED_MODULE_15__.isPointHittingElementBoundingBox)(element, [sceneX, sceneY], threshold)) {\r\n return false;\r\n }\r\n // hit box to prevent hiding when hovered in the vertical area between element and popover\r\n if (sceneX >= element.x &&\r\n sceneX <= element.x + element.width &&\r\n sceneY <= element.y &&\r\n sceneY >= element.y - SPACE_BOTTOM) {\r\n return false;\r\n }\r\n // hit box to prevent hiding when hovered around popover within threshold\r\n const { x: popoverX, y: popoverY } = getCoordsForPopover(element, appState);\r\n if (clientX >= popoverX - threshold &&\r\n clientX <= popoverX + CONTAINER_WIDTH + CONTAINER_PADDING * 2 + threshold &&\r\n clientY >= popoverY - threshold &&\r\n clientY <= popoverY + threshold + CONTAINER_PADDING * 2 + CONTAINER_HEIGHT) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDMUUsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELDBGQUEwRjtJQUMxRixJQUNFLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQztRQUNuQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSztRQUNuQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUM7UUFDbkIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUNsQztRQUNBLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCx5RUFBeUU7SUFDekUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU1RSxJQUNFLE9BQU8sSUFBSSxRQUFRLEdBQUcsU0FBUztRQUMvQixPQUFPLElBQUksUUFBUSxHQUFHLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsU0FBUztRQUN6RSxPQUFPLElBQUksUUFBUSxHQUFHLFNBQVM7UUFDL0IsT0FBTyxJQUFJLFFBQVEsR0FBRyxTQUFTLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixFQUMxRTtRQUNBLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9lbGVtZW50L0h5cGVybGluay50c3g/M2M2MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBTdGF0ZSwgRXhjYWxpZHJhd1Byb3BzLCBQb2ludCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0U2hvcnRjdXRLZXksXG4gIHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyxcbiAgdmlld3BvcnRDb29yZHNUb1NjZW5lQ29vcmRzLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IG11dGF0ZUVsZW1lbnQgfSBmcm9tIFwiLi9tdXRhdGVFbGVtZW50XCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCIuLi9hY3Rpb25zL3JlZ2lzdGVyXCI7XG5pbXBvcnQgeyBUb29sQnV0dG9uIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVG9vbEJ1dHRvblwiO1xuaW1wb3J0IHsgZWRpdEljb24sIGxpbmssIHRyYXNoIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaWNvbnNcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgeyBLRVlTIH0gZnJvbSBcIi4uL2tleXNcIjtcbmltcG9ydCB7IERFRkFVTFRfTElOS19TSVpFIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlckVsZW1lbnRcIjtcbmltcG9ydCB7IHJvdGF0ZSB9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQgeyBFVkVOVCwgSFlQRVJMSU5LX1RPT0xUSVBfREVMQVksIE1JTUVfVFlQRVMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCB7IGdldFRvb2x0aXBEaXYsIHVwZGF0ZVRvb2x0aXBQb3NpdGlvbiB9IGZyb20gXCIuLi9jb21wb25lbnRzL1Rvb2x0aXBcIjtcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IGlzUG9pbnRIaXR0aW5nRWxlbWVudEJvdW5kaW5nQm94IH0gZnJvbSBcIi4vY29sbGlzaW9uXCI7XG5pbXBvcnQgeyBnZXRFbGVtZW50QWJzb2x1dGVDb29yZHMgfSBmcm9tIFwiLi9cIjtcblxuaW1wb3J0IFwiLi9IeXBlcmxpbmsuc2Nzc1wiO1xuXG5jb25zdCBDT05UQUlORVJfV0lEVEggPSAzMjA7XG5jb25zdCBTUEFDRV9CT1RUT00gPSA4NTtcbmNvbnN0IENPTlRBSU5FUl9QQURESU5HID0gNTtcbmNvbnN0IENPTlRBSU5FUl9IRUlHSFQgPSA0MjtcbmNvbnN0IEFVVE9fSElERV9USU1FT1VUID0gNTAwO1xuXG5leHBvcnQgY29uc3QgRVhURVJOQUxfTElOS19JTUcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuRVhURVJOQUxfTElOS19JTUcuc3JjID0gYGRhdGE6JHtNSU1FX1RZUEVTLnN2Z30sICR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzE5NzFjMlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci1leHRlcm5hbC1saW5rXCI+PHBhdGggZD1cIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2XCI+PC9wYXRoPjxwb2x5bGluZSBwb2ludHM9XCIxNSAzIDIxIDMgMjEgOVwiPjwvcG9seWxpbmU+PGxpbmUgeDE9XCIxMFwiIHkxPVwiMTRcIiB4Mj1cIjIxXCIgeTI9XCIzXCI+PC9saW5lPjwvc3ZnPmAsXG4pfWA7XG5cbmxldCBJU19IWVBFUkxJTktfVE9PTFRJUF9WSVNJQkxFID0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBIeXBlcmxpbmsgPSAoe1xuICBlbGVtZW50LFxuICBhcHBTdGF0ZSxcbiAgc2V0QXBwU3RhdGUsXG4gIG9uTGlua09wZW4sXG59OiB7XG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudDtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIG9uTGlua09wZW46IEV4Y2FsaWRyYXdQcm9wc1tcIm9uTGlua09wZW5cIl07XG59KSA9PiB7XG4gIGNvbnN0IGxpbmtWYWwgPSBlbGVtZW50LmxpbmsgfHwgXCJcIjtcblxuICBjb25zdCBbaW5wdXRWYWwsIHNldElucHV0VmFsXSA9IHVzZVN0YXRlKGxpbmtWYWwpO1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaXNFZGl0aW5nID0gYXBwU3RhdGUuc2hvd0h5cGVybGlua1BvcHVwID09PSBcImVkaXRvclwiIHx8ICFsaW5rVmFsO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5rID0gbm9ybWFsaXplTGluayhpbnB1dFJlZi5jdXJyZW50LnZhbHVlKTtcblxuICAgIG11dGF0ZUVsZW1lbnQoZWxlbWVudCwgeyBsaW5rIH0pO1xuICAgIHNldEFwcFN0YXRlKHsgc2hvd0h5cGVybGlua1BvcHVwOiBcImluZm9cIiB9KTtcbiAgfSwgW2VsZW1lbnQsIHNldEFwcFN0YXRlXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlU3VibWl0KCk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZVN1Ym1pdF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHRpbWVvdXRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgaWYgKGlzRWRpdGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hvdWxkSGlkZSA9IHNob3VsZEhpZGVMaW5rUG9wdXAoZWxlbWVudCwgYXBwU3RhdGUsIFtcbiAgICAgICAgZXZlbnQuY2xpZW50WCxcbiAgICAgICAgZXZlbnQuY2xpZW50WSxcbiAgICAgIF0pIGFzIGJvb2xlYW47XG4gICAgICBpZiAoc2hvdWxkSGlkZSkge1xuICAgICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0QXBwU3RhdGUoeyBzaG93SHlwZXJsaW5rUG9wdXA6IGZhbHNlIH0pO1xuICAgICAgICB9LCBBVVRPX0hJREVfVElNRU9VVCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihFVkVOVC5QT0lOVEVSX01PVkUsIGhhbmRsZVBvaW50ZXJNb3ZlLCBmYWxzZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKEVWRU5ULlBPSU5URVJfTU9WRSwgaGFuZGxlUG9pbnRlck1vdmUsIGZhbHNlKTtcbiAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2FwcFN0YXRlLCBlbGVtZW50LCBpc0VkaXRpbmcsIHNldEFwcFN0YXRlXSk7XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG11dGF0ZUVsZW1lbnQoZWxlbWVudCwgeyBsaW5rOiBudWxsIH0pO1xuICAgIGlmIChpc0VkaXRpbmcpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQhLnZhbHVlID0gXCJcIjtcbiAgICB9XG4gICAgc2V0QXBwU3RhdGUoeyBzaG93SHlwZXJsaW5rUG9wdXA6IGZhbHNlIH0pO1xuICB9LCBbc2V0QXBwU3RhdGUsIGVsZW1lbnQsIGlzRWRpdGluZ10pO1xuXG4gIGNvbnN0IG9uRWRpdCA9ICgpID0+IHtcbiAgICBzZXRBcHBTdGF0ZSh7IHNob3dIeXBlcmxpbmtQb3B1cDogXCJlZGl0b3JcIiB9KTtcbiAgfTtcbiAgY29uc3QgeyB4LCB5IH0gPSBnZXRDb29yZHNGb3JQb3BvdmVyKGVsZW1lbnQsIGFwcFN0YXRlKTtcbiAgaWYgKFxuICAgIGFwcFN0YXRlLmRyYWdnaW5nRWxlbWVudCB8fFxuICAgIGFwcFN0YXRlLnJlc2l6aW5nRWxlbWVudCB8fFxuICAgIGFwcFN0YXRlLmlzUm90YXRpbmdcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJleGNhbGlkcmF3LWh5cGVybGlua0NvbnRhaW5lclwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICB0b3A6IGAke3l9cHhgLFxuICAgICAgICBsZWZ0OiBgJHt4fXB4YCxcbiAgICAgICAgd2lkdGg6IENPTlRBSU5FUl9XSURUSCxcbiAgICAgICAgcGFkZGluZzogQ09OVEFJTkVSX1BBRERJTkcsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtpc0VkaXRpbmcgPyAoXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImV4Y2FsaWRyYXctaHlwZXJsaW5rQ29udGFpbmVyLWlucHV0XCIpfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBvciBwYXN0ZSB5b3VyIGxpbmsgaGVyZVwiXG4gICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx9XG4gICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0SW5wdXRWYWwoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGNtZC9jdHJsK2sgc2hvcnRjdXQgd2hlbiBlZGl0aW5nIGxpbmtcbiAgICAgICAgICAgIGlmIChldmVudFtLRVlTLkNUUkxfT1JfQ01EXSAmJiBldmVudC5rZXkgPT09IEtFWVMuSykge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5FTlRFUiB8fCBldmVudC5rZXkgPT09IEtFWVMuRVNDQVBFKSB7XG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApIDogKFxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9e2VsZW1lbnQubGluayB8fCBcIlwifVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImV4Y2FsaWRyYXctaHlwZXJsaW5rQ29udGFpbmVyLWxpbmtcIiwge1xuICAgICAgICAgICAgXCJkLW5vbmVcIjogaXNFZGl0aW5nLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHRhcmdldD17aXNMb2NhbExpbmsoZWxlbWVudC5saW5rKSA/IFwiX3NlbGZcIiA6IFwiX2JsYW5rXCJ9XG4gICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAob25MaW5rT3BlbiAmJiBlbGVtZW50LmxpbmspIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgb25MaW5rT3BlbihlbGVtZW50LmxpbmssIGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge2VsZW1lbnQubGlua31cbiAgICAgICAgPC9hPlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZXhjYWxpZHJhdy1oeXBlcmxpbmtDb250YWluZXJfX2J1dHRvbnNcIj5cbiAgICAgICAgeyFpc0VkaXRpbmcgJiYgKFxuICAgICAgICAgIDxUb29sQnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5lZGl0XCIpfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZWRpdFwiKX1cbiAgICAgICAgICAgIGxhYmVsPXt0KFwiYnV0dG9ucy5lZGl0XCIpfVxuICAgICAgICAgICAgb25DbGljaz17b25FZGl0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZXhjYWxpZHJhdy1oeXBlcmxpbmtDb250YWluZXItLWVkaXRcIlxuICAgICAgICAgICAgaWNvbj17ZWRpdEljb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7bGlua1ZhbCAmJiAoXG4gICAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLnJlbW92ZVwiKX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoXCJidXR0b25zLnJlbW92ZVwiKX1cbiAgICAgICAgICAgIGxhYmVsPXt0KFwiYnV0dG9ucy5yZW1vdmVcIil9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVSZW1vdmV9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJleGNhbGlkcmF3LWh5cGVybGlua0NvbnRhaW5lci0tcmVtb3ZlXCJcbiAgICAgICAgICAgIGljb249e3RyYXNofVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IGdldENvb3Jkc0ZvclBvcG92ZXIgPSAoXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKSA9PiB7XG4gIGNvbnN0IHsgeDogdmlld3BvcnRYLCB5OiB2aWV3cG9ydFkgfSA9IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyhcbiAgICB7IHNjZW5lWDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsIHNjZW5lWTogZWxlbWVudC55IH0sXG4gICAgYXBwU3RhdGUsXG4gICk7XG4gIGNvbnN0IHggPSB2aWV3cG9ydFggLSBhcHBTdGF0ZS5vZmZzZXRMZWZ0IC0gQ09OVEFJTkVSX1dJRFRIIC8gMjtcbiAgY29uc3QgeSA9IHZpZXdwb3J0WSAtIGFwcFN0YXRlLm9mZnNldFRvcCAtIFNQQUNFX0JPVFRPTTtcbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUxpbmsgPSAobGluazogc3RyaW5nKSA9PiB7XG4gIGxpbmsgPSBsaW5rLnRyaW0oKTtcbiAgaWYgKGxpbmspIHtcbiAgICAvLyBwcmVmaXggd2l0aCBwcm90b2NvbCBpZiBub3QgZnVsbHktcXVhbGlmaWVkXG4gICAgaWYgKCFsaW5rLmluY2x1ZGVzKFwiOi8vXCIpICYmICEvXltbXFxcXC9dLy50ZXN0KGxpbmspKSB7XG4gICAgICBsaW5rID0gYGh0dHBzOi8vJHtsaW5rfWA7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5rO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTG9jYWxMaW5rID0gKGxpbms6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgcmV0dXJuICEhKGxpbms/LmluY2x1ZGVzKGxvY2F0aW9uLm9yaWdpbikgfHwgbGluaz8uc3RhcnRzV2l0aChcIi9cIikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvbkxpbmsgPSByZWdpc3Rlcih7XG4gIG5hbWU6IFwibGlua1wiLFxuICBwZXJmb3JtOiAoZWxlbWVudHMsIGFwcFN0YXRlKSA9PiB7XG4gICAgaWYgKGFwcFN0YXRlLnNob3dIeXBlcmxpbmtQb3B1cCA9PT0gXCJlZGl0b3JcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudHMsXG4gICAgICBhcHBTdGF0ZToge1xuICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgc2hvd0h5cGVybGlua1BvcHVwOiBcImVkaXRvclwiLFxuICAgICAgfSxcbiAgICAgIGNvbW1pdFRvSGlzdG9yeTogdHJ1ZSxcbiAgICB9O1xuICB9LFxuICBrZXlUZXN0OiAoZXZlbnQpID0+IGV2ZW50W0tFWVMuQ1RSTF9PUl9DTURdICYmIGV2ZW50LmtleSA9PT0gS0VZUy5LLFxuICBjb250ZXh0SXRlbUxhYmVsOiAoZWxlbWVudHMsIGFwcFN0YXRlKSA9PlxuICAgIGdldENvbnRleHRNZW51TGFiZWwoZWxlbWVudHMsIGFwcFN0YXRlKSxcbiAgY29udGV4dEl0ZW1QcmVkaWNhdGU6IChlbGVtZW50cywgYXBwU3RhdGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUpO1xuICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMTtcbiAgfSxcbiAgUGFuZWxDb21wb25lbnQ6ICh7IGVsZW1lbnRzLCBhcHBTdGF0ZSwgdXBkYXRlRGF0YSB9KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VG9vbEJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWNvbj17bGlua31cbiAgICAgICAgYXJpYS1sYWJlbD17dChnZXRDb250ZXh0TWVudUxhYmVsKGVsZW1lbnRzLCBhcHBTdGF0ZSkpfVxuICAgICAgICB0aXRsZT17YCR7dChcImxhYmVscy5saW5rLmxhYmVsXCIpfSAtICR7Z2V0U2hvcnRjdXRLZXkoXCJDdHJsT3JDbWQrS1wiKX1gfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVEYXRhKG51bGwpfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEgJiYgISFzZWxlY3RlZEVsZW1lbnRzWzBdLmxpbmt9XG4gICAgICAvPlxuICAgICk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRleHRNZW51TGFiZWwgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSk7XG4gIGNvbnN0IGxhYmVsID0gc2VsZWN0ZWRFbGVtZW50c1swXSEubGlua1xuICAgID8gXCJsYWJlbHMubGluay5lZGl0XCJcbiAgICA6IFwibGFiZWxzLmxpbmsuY3JlYXRlXCI7XG4gIHJldHVybiBsYWJlbDtcbn07XG5leHBvcnQgY29uc3QgZ2V0TGlua0hhbmRsZUZyb21Db29yZHMgPSAoXG4gIFt4MSwgeTEsIHgyLCB5Ml06IEJvdW5kcyxcbiAgYW5nbGU6IG51bWJlcixcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKTogW3g6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcl0gPT4ge1xuICBjb25zdCBzaXplID0gREVGQVVMVF9MSU5LX1NJWkU7XG4gIGNvbnN0IGxpbmtXaWR0aCA9IHNpemUgLyBhcHBTdGF0ZS56b29tLnZhbHVlO1xuICBjb25zdCBsaW5rSGVpZ2h0ID0gc2l6ZSAvIGFwcFN0YXRlLnpvb20udmFsdWU7XG4gIGNvbnN0IGxpbmtNYXJnaW5ZID0gc2l6ZSAvIGFwcFN0YXRlLnpvb20udmFsdWU7XG4gIGNvbnN0IGNlbnRlclggPSAoeDEgKyB4MikgLyAyO1xuICBjb25zdCBjZW50ZXJZID0gKHkxICsgeTIpIC8gMjtcbiAgY29uc3QgY2VudGVyaW5nT2Zmc2V0ID0gKHNpemUgLSA4KSAvICgyICogYXBwU3RhdGUuem9vbS52YWx1ZSk7XG4gIGNvbnN0IGRhc2hlZExpbmVNYXJnaW4gPSA0IC8gYXBwU3RhdGUuem9vbS52YWx1ZTtcblxuICAvLyBTYW1lIGFzIGBuZWAgcmVzaXplIGhhbmRsZVxuICBjb25zdCB4ID0geDIgKyBkYXNoZWRMaW5lTWFyZ2luIC0gY2VudGVyaW5nT2Zmc2V0O1xuICBjb25zdCB5ID0geTEgLSBkYXNoZWRMaW5lTWFyZ2luIC0gbGlua01hcmdpblkgKyBjZW50ZXJpbmdPZmZzZXQ7XG5cbiAgY29uc3QgW3JvdGF0ZWRYLCByb3RhdGVkWV0gPSByb3RhdGUoXG4gICAgeCArIGxpbmtXaWR0aCAvIDIsXG4gICAgeSArIGxpbmtIZWlnaHQgLyAyLFxuICAgIGNlbnRlclgsXG4gICAgY2VudGVyWSxcbiAgICBhbmdsZSxcbiAgKTtcbiAgcmV0dXJuIFtcbiAgICByb3RhdGVkWCAtIGxpbmtXaWR0aCAvIDIsXG4gICAgcm90YXRlZFkgLSBsaW5rSGVpZ2h0IC8gMixcbiAgICBsaW5rV2lkdGgsXG4gICAgbGlua0hlaWdodCxcbiAgXTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BvaW50SGl0dGluZ0xpbmtJY29uID0gKFxuICBlbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgW3gsIHldOiBQb2ludCxcbikgPT4ge1xuICBjb25zdCB0aHJlc2hvbGQgPSA0IC8gYXBwU3RhdGUuem9vbS52YWx1ZTtcblxuICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gZ2V0RWxlbWVudEFic29sdXRlQ29vcmRzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IFtsaW5rWCwgbGlua1ksIGxpbmtXaWR0aCwgbGlua0hlaWdodF0gPSBnZXRMaW5rSGFuZGxlRnJvbUNvb3JkcyhcbiAgICBbeDEsIHkxLCB4MiwgeTJdLFxuICAgIGVsZW1lbnQuYW5nbGUsXG4gICAgYXBwU3RhdGUsXG4gICk7XG4gIGNvbnN0IGhpdExpbmsgPVxuICAgIHggPiBsaW5rWCAtIHRocmVzaG9sZCAmJlxuICAgIHggPCBsaW5rWCArIHRocmVzaG9sZCArIGxpbmtXaWR0aCAmJlxuICAgIHkgPiBsaW5rWSAtIHRocmVzaG9sZCAmJlxuICAgIHkgPCBsaW5rWSArIGxpbmtIZWlnaHQgKyB0aHJlc2hvbGQ7XG5cbiAgcmV0dXJuIGhpdExpbms7XG59O1xuXG5sZXQgSFlQRVJMSU5LX1RPT0xUSVBfVElNRU9VVF9JRDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3Qgc2hvd0h5cGVybGlua1Rvb2x0aXAgPSAoXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKSA9PiB7XG4gIGlmIChIWVBFUkxJTktfVE9PTFRJUF9USU1FT1VUX0lEKSB7XG4gICAgY2xlYXJUaW1lb3V0KEhZUEVSTElOS19UT09MVElQX1RJTUVPVVRfSUQpO1xuICB9XG4gIEhZUEVSTElOS19UT09MVElQX1RJTUVPVVRfSUQgPSB3aW5kb3cuc2V0VGltZW91dChcbiAgICAoKSA9PiByZW5kZXJUb29sdGlwKGVsZW1lbnQsIGFwcFN0YXRlKSxcbiAgICBIWVBFUkxJTktfVE9PTFRJUF9ERUxBWSxcbiAgKTtcbn07XG5cbmNvbnN0IHJlbmRlclRvb2x0aXAgPSAoXG4gIGVsZW1lbnQ6IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuKSA9PiB7XG4gIGlmICghZWxlbWVudC5saW5rKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdG9vbHRpcERpdiA9IGdldFRvb2x0aXBEaXYoKTtcblxuICB0b29sdGlwRGl2LmNsYXNzTGlzdC5hZGQoXCJleGNhbGlkcmF3LXRvb2x0aXAtLXZpc2libGVcIik7XG4gIHRvb2x0aXBEaXYuc3R5bGUubWF4V2lkdGggPSBcIjIwcmVtXCI7XG4gIHRvb2x0aXBEaXYudGV4dENvbnRlbnQgPSBlbGVtZW50Lmxpbms7XG5cbiAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhlbGVtZW50KTtcblxuICBjb25zdCBbbGlua1gsIGxpbmtZLCBsaW5rV2lkdGgsIGxpbmtIZWlnaHRdID0gZ2V0TGlua0hhbmRsZUZyb21Db29yZHMoXG4gICAgW3gxLCB5MSwgeDIsIHkyXSxcbiAgICBlbGVtZW50LmFuZ2xlLFxuICAgIGFwcFN0YXRlLFxuICApO1xuXG4gIGNvbnN0IGxpbmtWaWV3cG9ydENvb3JkcyA9IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyhcbiAgICB7IHNjZW5lWDogbGlua1gsIHNjZW5lWTogbGlua1kgfSxcbiAgICBhcHBTdGF0ZSxcbiAgKTtcblxuICB1cGRhdGVUb29sdGlwUG9zaXRpb24oXG4gICAgdG9vbHRpcERpdixcbiAgICB7XG4gICAgICBsZWZ0OiBsaW5rVmlld3BvcnRDb29yZHMueCxcbiAgICAgIHRvcDogbGlua1ZpZXdwb3J0Q29vcmRzLnksXG4gICAgICB3aWR0aDogbGlua1dpZHRoLFxuICAgICAgaGVpZ2h0OiBsaW5rSGVpZ2h0LFxuICAgIH0sXG4gICAgXCJ0b3BcIixcbiAgKTtcblxuICBJU19IWVBFUkxJTktfVE9PTFRJUF9WSVNJQkxFID0gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgaGlkZUh5cGVybGlua1Rvb2xpcCA9ICgpID0+IHtcbiAgaWYgKEhZUEVSTElOS19UT09MVElQX1RJTUVPVVRfSUQpIHtcbiAgICBjbGVhclRpbWVvdXQoSFlQRVJMSU5LX1RPT0xUSVBfVElNRU9VVF9JRCk7XG4gIH1cbiAgaWYgKElTX0hZUEVSTElOS19UT09MVElQX1ZJU0lCTEUpIHtcbiAgICBJU19IWVBFUkxJTktfVE9PTFRJUF9WSVNJQkxFID0gZmFsc2U7XG4gICAgZ2V0VG9vbHRpcERpdigpLmNsYXNzTGlzdC5yZW1vdmUoXCJleGNhbGlkcmF3LXRvb2x0aXAtLXZpc2libGVcIik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGRIaWRlTGlua1BvcHVwID0gKFxuICBlbGVtZW50OiBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQsXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgW2NsaWVudFgsIGNsaWVudFldOiBQb2ludCxcbik6IEJvb2xlYW4gPT4ge1xuICBjb25zdCB7IHg6IHNjZW5lWCwgeTogc2NlbmVZIH0gPSB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMoXG4gICAgeyBjbGllbnRYLCBjbGllbnRZIH0sXG4gICAgYXBwU3RhdGUsXG4gICk7XG5cbiAgY29uc3QgdGhyZXNob2xkID0gMTUgLyBhcHBTdGF0ZS56b29tLnZhbHVlO1xuICAvLyBoaXRib3ggdG8gcHJldmVudCBoaWRpbmcgd2hlbiBob3ZlcmVkIGluIGVsZW1lbnQgYm91bmRpbmcgYm94XG4gIGlmIChpc1BvaW50SGl0dGluZ0VsZW1lbnRCb3VuZGluZ0JveChlbGVtZW50LCBbc2NlbmVYLCBzY2VuZVldLCB0aHJlc2hvbGQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaGl0IGJveCB0byBwcmV2ZW50IGhpZGluZyB3aGVuIGhvdmVyZWQgaW4gdGhlIHZlcnRpY2FsIGFyZWEgYmV0d2VlbiBlbGVtZW50IGFuZCBwb3BvdmVyXG4gIGlmIChcbiAgICBzY2VuZVggPj0gZWxlbWVudC54ICYmXG4gICAgc2NlbmVYIDw9IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGggJiZcbiAgICBzY2VuZVkgPD0gZWxlbWVudC55ICYmXG4gICAgc2NlbmVZID49IGVsZW1lbnQueSAtIFNQQUNFX0JPVFRPTVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGl0IGJveCB0byBwcmV2ZW50IGhpZGluZyB3aGVuIGhvdmVyZWQgYXJvdW5kIHBvcG92ZXIgd2l0aGluIHRocmVzaG9sZFxuICBjb25zdCB7IHg6IHBvcG92ZXJYLCB5OiBwb3BvdmVyWSB9ID0gZ2V0Q29vcmRzRm9yUG9wb3ZlcihlbGVtZW50LCBhcHBTdGF0ZSk7XG5cbiAgaWYgKFxuICAgIGNsaWVudFggPj0gcG9wb3ZlclggLSB0aHJlc2hvbGQgJiZcbiAgICBjbGllbnRYIDw9IHBvcG92ZXJYICsgQ09OVEFJTkVSX1dJRFRIICsgQ09OVEFJTkVSX1BBRERJTkcgKiAyICsgdGhyZXNob2xkICYmXG4gICAgY2xpZW50WSA+PSBwb3BvdmVyWSAtIHRocmVzaG9sZCAmJlxuICAgIGNsaWVudFkgPD0gcG9wb3ZlclkgKyB0aHJlc2hvbGQgKyBDT05UQUlORVJfUEFERElORyAqIDIgKyBDT05UQUlORVJfSEVJR0hUXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../element/Hyperlink.tsx\n");
|
|
2233
2233
|
|
|
2234
2234
|
/***/ }),
|
|
2235
2235
|
|