Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/ui/text-editor/dist/ |
Upload File : |
{"version":3,"file":"text-editor.bundle.js","sources":["../src/commands.js","../src/constants.js","../src/debug/constants.js","../src/helpers/get-selected-node.js","../src/bbcode/convert-text-format-element.js","../src/bbcode/import-from-bbcode.js","../src/helpers/is-paragraph-empty.js","../src/bbcode/trim-empty-paragraphs.js","../src/bbcode/export-to-bbcode.js","../src/bbcode/wrap-node-with.js","../src/plugins/base-plugin.js","../src/toolbar/toolbar-item.js","../src/toolbar/button.js","../src/helpers/wrap-text-in-paragraph.js","../src/plugins/quote/quote-node.js","../src/helpers/get-ancestor.js","../src/helpers/is-block-node.js","../src/helpers/wrap-nodes.js","../src/plugins/quote/quote-plugin.js","../src/plugins/spoiler/spoiler-content-node.js","../src/plugins/spoiler/spoiler-title-text-node.js","../src/plugins/spoiler/spoiler-plugin.js","../src/plugins/spoiler/spoiler-title-node.js","../src/plugins/spoiler/spoiler-node.js","../src/plugins/paragraph/custom-paragraph-node.js","../src/plugins/paragraph/paragraph-plugin.js","../src/plugins/code/code-token-node.js","../src/plugins/code/code-node.js","../src/plugins/code/code-plugin.js","../src/helpers/create-node-selection.js","../src/decorator-component.js","../src/helpers/figure-resizer.js","../src/plugins/file/image/file-image-component.js","../src/plugins/file/image/file-image-node.js","../src/plugins/file/file/file-node.js","../src/helpers/calc-image-size.js","../src/plugins/file/video/file-video-component.js","../src/plugins/file/video/file-video-node.js","../src/helpers/get-drag-selection.js","../src/helpers/get-node-in-selection.js","../src/helpers/register-draggable-node.js","../src/plugins/file/file-plugin.js","../src/helpers/validate-image-url.js","../src/plugins/image/image-component.js","../src/plugins/image/image-node.js","../src/helpers/get-selection-position.js","../src/helpers/adjust-dialog-position.js","../src/helpers/sanitize-url.js","../src/plugins/image/image-dialog.js","../src/plugins/image/image-plugin.js","../src/plugins/mention/mention-node.js","../src/plugins/mention/mention-plugin.js","../src/plugins/smiley/smiley-node.js","../src/plugins/smiley/smiley-dialog.js","../src/plugins/smiley/smiley-plugin.js","../src/plugins/video/video-component.js","../src/plugins/video/video-node.js","../src/plugins/video/video-dialog.js","../src/helpers/validate-video-url.js","../src/plugins/video/video-plugin.js","../src/debug/print-format-properties.js","../src/debug/print-node.js","../src/debug/print-node-selection.js","../src/debug/print-range-selection.js","../src/debug/print-table-selection.js","../src/debug/visit-tree.js","../src/debug/generate-content.js","../src/helpers/create-hash-code.js","../src/helpers/is-root-empty.js","../src/themes/default-theme.js","../src/plugins/plugin-collection.js","../src/component-registry.js","../src/scheme-validation.js","../src/plugins/rich-text/rich-text-plugin.js","../src/plugins/clipboard/clipboard-plain-table-node.js","../src/plugins/clipboard/clipboard-plugin.js","../src/plugins/bold/bold-plugin.js","../src/plugins/italic/italic-plugin.js","../src/plugins/strikethrough/strikethrough-plugin.js","../src/plugins/underline/underline-plugin.js","../src/plugins/clear-format/clear-format-plugin.js","../src/plugins/link/link-editor.js","../src/helpers/validate-url.js","../src/plugins/link/link-plugin.js","../src/plugins/auto-link/auto-link-plugin.js","../src/plugins/tab-indent/tab-indent-plugin.js","../src/plugins/list/list-plugin.js","../src/plugins/table/table-dialog.js","../src/plugins/table/table-plugin.js","../src/plugins/hashtag/hashtag-node.js","../src/plugins/hashtag/hashtag-plugin.js","../src/helpers/create-nodes-from-text.js","../src/plugins/copilot/copilot-plugin.js","../src/plugins/history/history-plugin.js","../src/plugins/block-toolbar/block-toolbar-plugin.js","../src/toolbar/separator.js","../src/toolbar/toolbar.js","../src/plugins/floating-toolbar/floating-toolbar-plugin.js","../src/plugins/toolbar/toolbar-plugin.js","../src/plugins/placeholder/placeholder-plugin.js","../src/text-editor.js","../src/text-editor-component.js","../src/presets/basic-editor.js","../src/presets/basic-editor-component.js","../src/index.js"],"sourcesContent":["import { createCommand, type LexicalCommand } from 'ui.lexical.core';\n\nexport const HIDE_DIALOG_COMMAND: LexicalCommand = createCommand('HIDE_DIALOG_COMMAND');\nexport const DIALOG_VISIBILITY_COMMAND: LexicalCommand = createCommand('DIALOG_VISIBILITY_COMMAND');\nexport const DRAG_START_COMMAND: LexicalCommand = createCommand('DRAG_START_COMMAND');\nexport const DRAG_END_COMMAND: LexicalCommand = createCommand('DRAG_END_COMMAND');\n","import type { NewLineModeType } from './types/new-line-mode-type';\n\n// Node flags\nexport const UNFORMATTED = 1;\n\nexport const NewLineMode: Record<string, NewLineModeType> = {\n\tLINE_BREAK: 'line-break',\n\tPARAGRAPH: 'paragraph',\n\tMIXED: 'mixed',\n};\n","import type { TextNode, RangeSelection } from 'ui.lexical.core';\n\nexport const NON_SINGLE_WIDTH_CHARS_REPLACEMENT: Readonly<Record<string, string>> = (\n\tObject.freeze({\n\t\t'\\t': '\\\\t',\n\t\t'\\n': '\\\\n',\n\t})\n);\n\nexport const NON_SINGLE_WIDTH_CHARS_REGEX: RegExp = new RegExp(\n\tObject.keys(NON_SINGLE_WIDTH_CHARS_REPLACEMENT).join('|'),\n\t'g',\n);\n\nexport const SYMBOLS: Record<string, string> = Object.freeze({\n\tancestorHasNextSibling: '|',\n\tancestorIsLastChild: ' ',\n\thasNextSibling: '├',\n\tisLastChild: '└',\n\tselectedChar: '^',\n\tselectedLine: '>',\n});\n\nexport const FORMAT_PREDICATES = [\n\t(node: TextNode | RangeSelection) => node.hasFormat('bold') && 'Bold',\n\t(node: TextNode | RangeSelection) => node.hasFormat('code') && 'Code',\n\t(node: TextNode | RangeSelection) => node.hasFormat('italic') && 'Italic',\n\t(node: TextNode | RangeSelection) => node.hasFormat('strikethrough') && 'Strikethrough',\n\t(node: TextNode | RangeSelection) => node.hasFormat('subscript') && 'Subscript',\n\t(node: TextNode | RangeSelection) => node.hasFormat('superscript') && 'Superscript',\n\t(node: TextNode | RangeSelection) => node.hasFormat('underline') && 'Underline',\n];\n\nexport const DETAIL_PREDICATES = [\n\t(node: TextNode) => node.isDirectionless() && 'Directionless',\n\t(node: TextNode) => node.isUnmergeable() && 'Unmergeable',\n];\n\nexport const MODE_PREDICATES = [\n\t(node: TextNode) => node.isToken() && 'Token',\n\t(node: TextNode) => node.isSegmented() && 'Segmented',\n];\n","import { type ElementNode, type RangeSelection, type TextNode } from 'ui.lexical.core';\nimport { $isAtNodeEnd } from 'ui.lexical.selection';\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode\n{\n\tconst anchor = selection.anchor;\n\tconst focus = selection.focus;\n\tconst anchorNode = selection.anchor.getNode();\n\tconst focusNode = selection.focus.getNode();\n\tif (anchorNode === focusNode)\n\t{\n\t\treturn anchorNode;\n\t}\n\n\tconst isBackward = selection.isBackward();\n\tif (isBackward)\n\t{\n\t\treturn $isAtNodeEnd(focus) ? anchorNode : focusNode;\n\t}\n\n\treturn $isAtNodeEnd(anchor) ? anchorNode : focusNode;\n}\n","import {\n\t$isTextNode,\n\ttype LexicalNode,\n} from 'ui.lexical.core';\n\nimport { type BBCodeElementNode } from 'ui.bbcode.model';\nimport type { BBCodeConversionOutput } from './types';\n\nconst nodeNameToTextFormat: Object<string, string> = {\n\tb: 'bold',\n\tstrong: 'bold',\n\ti: 'italic',\n\tem: 'italic',\n\ts: 'strikethrough',\n\tdel: 'strikethrough',\n\tu: 'underline',\n\tsub: 'subscript',\n\tsup: 'superscript',\n};\n\nexport function convertTextFormatElement(node: BBCodeElementNode): BBCodeConversionOutput\n{\n\tconst format: string = nodeNameToTextFormat[node.getName()];\n\tif (format === undefined)\n\t{\n\t\treturn { node: null };\n\t}\n\n\treturn {\n\t\tforChild: (lexicalNode: LexicalNode): LexicalNode => {\n\t\t\tif ($isTextNode(lexicalNode) && !lexicalNode.hasFormat(format))\n\t\t\t{\n\t\t\t\tlexicalNode.toggleFormat(format);\n\t\t\t}\n\n\t\t\treturn lexicalNode;\n\t\t},\n\t\tnode: null,\n\t};\n}\n","import { Type } from 'main.core';\nimport {\n\tBBCodeNewLineNode,\n\tBBCodeTabNode,\n\tBBCodeNode,\n\ttype BBCodeRootNode,\n\ttype BBCodeTextNode,\n\ttype BBCodeElementNode,\n\ttype BBCodeScheme,\n\ttype BBCodeContentNode,\n} from 'ui.bbcode.model';\n\nimport { BBCodeParser } from 'ui.bbcode.parser';\nimport { TextEditor } from 'ui.text-editor';\nimport type { BBCodeTextNodeContent } from '../../../bbcode/model/src/nodes/text-node';\n\nimport {\n\ttype BBCodeChildConversion,\n\ttype BBCodeConversionOutput,\n\ttype BBCodeConversionFn,\n\ttype BBCodeImportMap,\n\ttype BBCodeConversion,\n} from './types';\n\nimport {\n\t$isElementNode,\n\t$isLineBreakNode,\n\t$createLineBreakNode,\n\t$createTabNode,\n\t$createTextNode,\n\t$createParagraphNode,\n\t$isDecoratorNode,\n\ttype LexicalNode,\n\ttype ElementNode,\n\ttype ParagraphNode,\n} from 'ui.lexical.core';\n\nexport function $importFromBBCode(bbcode: string, editor: TextEditor, normalize: boolean = true): Array<LexicalNode>\n{\n\tconst scheme: BBCodeScheme = editor.getBBCodeScheme();\n\tconst parser: BBCodeParser = new BBCodeParser({ scheme });\n\tconst ast: BBCodeRootNode = parser.parse(bbcode);\n\tconst elements: BBCodeContentNode = ast.getChildren();\n\n\t// console.log(ast);\n\n\tlet lexicalNodes = [];\n\tfor (const element of elements)\n\t{\n\t\tconst nodes = $createNodesFromBBCode(element, editor);\n\t\tif (nodes !== null)\n\t\t{\n\t\t\tlexicalNodes = [...lexicalNodes, ...nodes];\n\t\t}\n\t}\n\n\treturn normalize ? $normalizeTextNodes(lexicalNodes) : lexicalNodes;\n}\n\nfunction $createNodesFromBBCode(\n\tnode: BBCodeContentNode,\n\teditor: TextEditor,\n\tforChildMap: Map<string, BBCodeChildConversion> = new Map(),\n\tparentLexicalNode: LexicalNode | null = null,\n): Array<LexicalNode>\n{\n\tif (node instanceof BBCodeNewLineNode)\n\t{\n\t\treturn [$createLineBreakNode()];\n\t}\n\n\tif (node instanceof BBCodeTabNode)\n\t{\n\t\treturn [$createTabNode()];\n\t}\n\n\tlet lexicalNodes: Array<LexicalNode> = [];\n\tlet currentLexicalNode = null;\n\n\tconst transformFunction: BBCodeConversionFn | null = getConversionFunction(node, editor);\n\tconst transformOutput: BBCodeConversionOutput | null = transformFunction ? transformFunction(node) : null;\n\tlet postTransform = null;\n\tif (transformOutput !== null)\n\t{\n\t\tpostTransform = transformOutput.after;\n\t\tconst transformNodes = transformOutput.node;\n\t\tcurrentLexicalNode = Array.isArray(transformNodes) ? transformNodes[transformNodes.length - 1] : transformNodes;\n\t\tif (currentLexicalNode !== null)\n\t\t{\n\t\t\tfor (const [, forChildFunction] of forChildMap)\n\t\t\t{\n\t\t\t\tcurrentLexicalNode = forChildFunction(currentLexicalNode, parentLexicalNode);\n\t\t\t\tif (!currentLexicalNode)\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (currentLexicalNode)\n\t\t\t{\n\t\t\t\tlexicalNodes.push(...(Array.isArray(transformNodes) ? transformNodes : [currentLexicalNode]));\n\t\t\t}\n\t\t}\n\n\t\tif (Type.isFunction(transformOutput.forChild))\n\t\t{\n\t\t\tforChildMap.set(node.getName(), transformOutput.forChild);\n\t\t}\n\t}\n\n\tconst children = node.getChildren();\n\tlet childLexicalNodes = [];\n\tfor (const child of children)\n\t{\n\t\tchildLexicalNodes.push(\n\t\t\t...$createNodesFromBBCode(\n\t\t\t\tchild,\n\t\t\t\teditor,\n\t\t\t\tnew Map(forChildMap),\n\t\t\t\tcurrentLexicalNode,\n\t\t\t),\n\t\t);\n\t}\n\n\tif (Type.isFunction(postTransform))\n\t{\n\t\tchildLexicalNodes = postTransform(childLexicalNodes);\n\t}\n\n\t// Unknown node\n\tif (transformOutput === null)\n\t{\n\t\tif (node.getType() === BBCodeNode.ELEMENT_NODE)\n\t\t{\n\t\t\tconst elementNode: BBCodeElementNode = node;\n\t\t\tif (elementNode.isVoid())\n\t\t\t{\n\t\t\t\tchildLexicalNodes = [$createTextNode(elementNode.getOpeningTag()), ...childLexicalNodes];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchildLexicalNodes = [\n\t\t\t\t\t$createTextNode(elementNode.getOpeningTag()),\n\t\t\t\t\t...childLexicalNodes,\n\t\t\t\t\t$createTextNode(elementNode.getClosingTag()),\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchildLexicalNodes = [$createTextNode(node.toString()), ...childLexicalNodes];\n\t\t}\n\t}\n\n\tif (currentLexicalNode === null)\n\t{\n\t\t// If it hasn't been converted to a LexicalNode, we hoist its children\n\t\t// up to the same level as it.\n\t\tlexicalNodes = [...lexicalNodes, ...childLexicalNodes];\n\t}\n\telse if ($isElementNode(currentLexicalNode))\n\t{\n\t\t// If the current node is a ElementNode after conversion,\n\t\t// we can append all the children to it.\n\t\tcurrentLexicalNode.append(...childLexicalNodes);\n\t}\n\n\treturn lexicalNodes;\n}\n\nexport function shouldWrapInParagraph(lexicalNode: LexicalNode | ElementNode): boolean\n{\n\tif ($isElementNode(lexicalNode) && lexicalNode.isInline() === false)\n\t{\n\t\treturn false;\n\t}\n\n\treturn !($isDecoratorNode(lexicalNode) && lexicalNode.isInline() === false);\n}\n\nexport function $normalizeTextNodes(lexicalNodes: Array<LexicalNode>): Array<LexicalNode>\n{\n\tconst result = [];\n\tlet currentParagraph = null;\n\tlet lineBreaks = 0;\n\n\tfor (const lexicalNode of lexicalNodes)\n\t{\n\t\tif ($isLineBreakNode(lexicalNode))\n\t\t{\n\t\t\tlineBreaks++;\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (shouldWrapInParagraph(lexicalNode))\n\t\t{\n\t\t\tif (currentParagraph === null || lineBreaks >= 2)\n\t\t\t{\n\t\t\t\tresult.push(...$createEmptyParagraphs(lineBreaks - 2));\n\t\t\t\tcurrentParagraph = $createParagraphNode();\n\t\t\t\tresult.push(currentParagraph);\n\t\t\t}\n\t\t\telse if (lineBreaks === 1)\n\t\t\t{\n\t\t\t\tcurrentParagraph.append($createLineBreakNode());\n\t\t\t}\n\n\t\t\tcurrentParagraph.append(lexicalNode);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (lineBreaks > 2)\n\t\t\t{\n\t\t\t\tresult.push(...$createEmptyParagraphs(lineBreaks - 2));\n\t\t\t}\n\n\t\t\tresult.push(lexicalNode);\n\t\t\tcurrentParagraph = null;\n\t\t}\n\n\t\tlineBreaks = 0;\n\t}\n\n\tif (result.length === 0)\n\t{\n\t\treturn [$createParagraphNode()];\n\t}\n\n\treturn result;\n}\n\nfunction $createEmptyParagraphs(count: number = 1): Array<ParagraphNode>\n{\n\tconst result = [];\n\tfor (let i = 0; i < count; i++)\n\t{\n\t\tresult.push($createParagraphNode());\n\t}\n\n\treturn result;\n}\n\nfunction getConversionFunction(node: BBCodeNode, editor: TextEditor): BBCodeConversionFn | null\n{\n\tconst nodeName: string = node.getName();\n\tlet currentConversion: BBCodeConversion | null = null;\n\tconst importMap: BBCodeImportMap = editor.getBBCodeImportMap();\n\tconst conversions = importMap.get(nodeName.toLowerCase());\n\tif (conversions !== undefined)\n\t{\n\t\tfor (const conversion of conversions)\n\t\t{\n\t\t\tconst bbCodeConversion: BBCodeConversion = conversion(node);\n\t\t\tif (\n\t\t\t\tbbCodeConversion !== null\n\t\t\t\t&& (currentConversion === null || currentConversion.priority < bbCodeConversion.priority)\n\t\t\t)\n\t\t\t{\n\t\t\t\tcurrentConversion = bbCodeConversion;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (currentConversion === null)\n\t{\n\t\tif (nodeName === '#text')\n\t\t{\n\t\t\treturn convertTextNode;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treturn currentConversion.conversion;\n}\n\nfunction convertTextNode(textNode: BBCodeTextNode): BBCodeConversionOutput\n{\n\tlet textContent: BBCodeTextNodeContent = textNode.getContent();\n\ttextContent = textContent\n\t\t.replaceAll(/\\r?\\n|\\t/gm, ' ')\n\t\t.replace('\\r', '')\n\t;\n\n\tif (textContent === '')\n\t{\n\t\treturn { node: null };\n\t}\n\n\treturn { node: $createTextNode(textContent) };\n}\n","import { $isParagraphNode, $isTextNode, $isLineBreakNode, type ElementNode } from 'ui.lexical.core';\n\nexport function $isParagraphEmpty(node: ElementNode): boolean\n{\n\tif (!$isParagraphNode(node))\n\t{\n\t\treturn false;\n\t}\n\n\tif (node.isEmpty())\n\t{\n\t\treturn true;\n\t}\n\n\treturn node.getChildren().every((child) => {\n\t\treturn (\n\t\t\t$isLineBreakNode(child)\n\t\t\t|| ($isTextNode(child) && /^\\s*$/.test(child.getTextContent()))\n\t\t);\n\t});\n}\n","import {\n\ttype LexicalNode,\n\ttype ElementNode,\n} from 'ui.lexical.core';\n\nimport { $isParagraphEmpty } from '../helpers/is-paragraph-empty';\n\nexport function trimEmptyParagraphs(nodes: Array<LexicalNode | ElementNode>): Array<LexicalNode | ElementNode>\n{\n\tconst trimmedNodes = [...nodes];\n\n\t// trim from the start\n\twhile (trimmedNodes.length > 0 && $isParagraphEmpty(trimmedNodes[0]))\n\t{\n\t\ttrimmedNodes.splice(0, 1);\n\t}\n\n\t// trim from the end\n\twhile (trimmedNodes.length > 0 && $isParagraphEmpty(trimmedNodes[trimmedNodes.length - 1]))\n\t{\n\t\ttrimmedNodes.splice(-1, 1);\n\t}\n\n\treturn trimmedNodes;\n}\n","/* eslint-disable @bitrix24/bitrix24-rules/no-native-dom-methods */\n\nimport { Type } from 'main.core';\nimport type {\n\tBBCodeScheme,\n\tBBCodeRootNode,\n\tBBCodeFragmentNode,\n\tBBCodeTextNode,\n} from 'ui.bbcode.model';\n\nimport { TextEditor } from 'ui.text-editor';\n\nimport {\n\t$isElementNode,\n\t$isTextNode,\n\t$isLineBreakNode,\n\t$isTabNode,\n\ttype LexicalNode, ElementNode,\n} from 'ui.lexical.core';\n\nimport { trimEmptyParagraphs } from './trim-empty-paragraphs';\n\nimport type { BBCodeExportOutput, BBCodeExportMap, BBCodeExportFn } from './types';\n\nexport function $exportToBBCode(lexicalNode: LexicalNode | ElementNode, editor: TextEditor): BBCodeRootNode\n{\n\tconst scheme: BBCodeScheme = editor.getBBCodeScheme();\n\tconst root: BBCodeRootNode = scheme.createRoot();\n\tconst topLevelChildren = trimEmptyParagraphs(lexicalNode.getChildren());\n\n\tfor (const topLevelNode of topLevelChildren)\n\t{\n\t\t$appendNodesToBBCode(topLevelNode, root, editor);\n\t\t// root.appendChild(scheme.createNewLine());\n\t}\n\n\treturn root;\n}\n\nfunction $appendNodesToBBCode(currentNode: LexicalNode | ElementNode, parentNode: Node, editor: TextEditor): void\n{\n\tconst { node, after }: BBCodeExportOutput = getExportFunction(currentNode, editor);\n\tif (!node)\n\t{\n\t\treturn;\n\t}\n\n\tconst scheme: BBCodeScheme = editor.getBBCodeScheme();\n\tconst fragment: BBCodeFragmentNode = scheme.createFragment();\n\tconst children = $isElementNode(currentNode) ? currentNode.getChildren() : [];\n\tfor (const childNode of children)\n\t{\n\t\t$appendNodesToBBCode(childNode, fragment, editor);\n\t}\n\n\tnode.appendChild(fragment);\n\tparentNode.appendChild(node);\n\n\tif (Type.isFunction(after))\n\t{\n\t\tconst newElement = after.call(currentNode, node);\n\t\tif (newElement)\n\t\t{\n\t\t\tnode.getParent().replaceChild(node, newElement);\n\t\t}\n\t}\n}\n\nconst formats = [\n\t'bold',\n\t'italic',\n\t'strikethrough',\n\t'underline',\n];\n\nfunction getExportFunction(lexicalNode: LexicalNode, editor: TextEditor): BBCodeExportOutput\n{\n\tconst type = lexicalNode.getType();\n\tconst exportMap: BBCodeExportMap = editor.getBBCodeExportMap();\n\tconst exportFn: BBCodeExportFn = exportMap.get(type);\n\tif (Type.isFunction(exportFn))\n\t{\n\t\treturn exportFn(lexicalNode);\n\t}\n\n\tconst scheme: BBCodeScheme = editor.getBBCodeScheme();\n\tif ($isTextNode(lexicalNode) && lexicalNode.getType() === 'text')\n\t{\n\t\tconst node: BBCodeTextNode = scheme.createText({\n\t\t\tencode: false,\n\t\t\tcontent: lexicalNode.getTextContent(),\n\t\t});\n\n\t\tif (lexicalNode.getFormat() === 0)\n\t\t{\n\t\t\treturn { node };\n\t\t}\n\n\t\tlet currentNode: BBCodeTextNode = node;\n\t\tformats.forEach((format: string): void => {\n\t\t\tconst formatFn: BBCodeExportFn = exportMap.get(`text:${format}`);\n\t\t\tif (Type.isFunction(formatFn))\n\t\t\t{\n\t\t\t\tcurrentNode = formatFn(lexicalNode, currentNode) || currentNode;\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tnode: currentNode,\n\t\t};\n\t}\n\n\tif ($isLineBreakNode(lexicalNode))\n\t{\n\t\treturn {\n\t\t\tnode: scheme.createNewLine(),\n\t\t};\n\t}\n\n\tif ($isTabNode(lexicalNode))\n\t{\n\t\treturn {\n\t\t\tnode: scheme.createTab(),\n\t\t};\n\t}\n\n\tif ($isTextNode(lexicalNode) || $isElementNode(lexicalNode))\n\t{\n\t\tconst node: BBCodeTextNode = scheme.createText({\n\t\t\tencode: false,\n\t\t\tcontent: lexicalNode.getTextContent(),\n\t\t});\n\n\t\treturn { node };\n\t}\n\n\treturn { node: null };\n}\n","/* eslint-disable @bitrix24/bitrix24-rules/no-native-dom-methods */\nimport { BBCodeElementNode, BBCodeNode } from 'ui.bbcode.model';\nimport { type TextEditor } from '../text-editor';\n\nexport function wrapNodeWith(node: BBCodeNode, tag: string, editor: TextEditor): BBCodeElementNode\n{\n\tconst scheme = editor.getBBCodeScheme();\n\tconst elementNode = scheme.createElement({ name: tag });\n\telementNode.appendChild(node);\n\n\treturn elementNode;\n}\n","import type { LexicalEditor, LexicalNode, LexicalNodeReplacement } from 'ui.lexical.core';\nimport { mergeRegister } from 'ui.lexical.utils';\nimport { BBCodeExportConversion, BBCodeImportConversion } from '../bbcode';\nimport { type TextEditor } from '../text-editor';\nimport type { SchemeValidationOptions } from '../types/scheme-validation-options';\n\nexport interface PluginStaticMembers {\n\tgetName(): string;\n\tgetNodes(editor: TextEditor): Array<Class<LexicalNode>>;\n}\n\nexport interface PluginInterface {}\nexport type PluginClassConstructor = (editor: TextEditor) => PluginInterface;\nexport type PluginConstructor = PluginClassConstructor & PluginStaticMembers;\n\n/**\n * @memberof BX.UI.TextEditor\n */\nexport default class BasePlugin implements PluginStaticMembers\n{\n\t#textEditor: TextEditor = null;\n\t#destroyed: boolean = false;\n\t#removeListeners: Function = () => {};\n\n\tconstructor(textEditor: TextEditor)\n\t{\n\t\tthis.#textEditor = textEditor;\n\t}\n\n\tstatic getName(): string\n\t{\n\t\tthrow new Error('getName must be implemented in a child class');\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode> | LexicalNodeReplacement>\n\t{\n\t\treturn [];\n\t}\n\n\timportBBCode(): BBCodeImportConversion | null\n\t{\n\t\treturn null;\n\t}\n\n\texportBBCode(): BBCodeExportConversion | null\n\t{\n\t\treturn null;\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn null;\n\t}\n\n\tafterInit(): void\n\t{\n\t\t// you can override this method\n\t}\n\n\tgetName(): string\n\t{\n\t\treturn this.constructor.getName();\n\t}\n\n\tgetEditor(): TextEditor\n\t{\n\t\treturn this.#textEditor;\n\t}\n\n\tgetLexicalEditor(): LexicalEditor\n\t{\n\t\treturn this.#textEditor.getLexicalEditor();\n\t}\n\n\tcleanUpRegister(...func: Array<Function>): void\n\t{\n\t\tthis.#removeListeners = mergeRegister(\n\t\t\tthis.#removeListeners,\n\t\t\t...func,\n\t\t);\n\t}\n\n\tisDestroyed(): boolean\n\t{\n\t\treturn this.#destroyed;\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.#destroyed = true;\n\t\tthis.#removeListeners();\n\t\tthis.#removeListeners = null;\n\t}\n}\n","import { EventEmitter } from 'main.core.events';\n\nexport default class ToolbarItem extends EventEmitter\n{\n\tconstructor()\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.ToolbarItem');\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\tthrow new Error('You must implement getContainer() method.');\n\t}\n\n\trender(): HTMLElement\n\t{\n\t\tthrow new Error('You must implement render() method.');\n\t}\n}\n","import { Tag, Type, Dom, Text } from 'main.core';\nimport ToolbarItem from './toolbar-item';\n\n/**\n * @memberof BX.UI.TextEditor\n */\nexport default class Button extends ToolbarItem\n{\n\t#format: string = null;\n\t#blockType: string = null;\n\t#active: boolean = false;\n\t#disabled: boolean = false;\n\t#disableInsideUnformatted = false;\n\t#disableCallback: Function = null;\n\t#container: HTMLElement = null;\n\n\tsetContent(content: string | HTMLElement)\n\t{\n\t\tif (Type.isString(content))\n\t\t{\n\t\t\tthis.getContainer().innerHTML = content;\n\t\t}\n\t\telse if (Type.isElementNode(content))\n\t\t{\n\t\t\tthis.getContainer().append(content);\n\t\t}\n\t}\n\n\tsetFormat(format: string)\n\t{\n\t\tthis.#format = format;\n\t}\n\n\tgetFormat(): string | null\n\t{\n\t\treturn this.#format;\n\t}\n\n\thasFormat(): string | null\n\t{\n\t\treturn this.#format;\n\t}\n\n\tsetBlockType(type: string)\n\t{\n\t\tthis.#blockType = type;\n\t}\n\n\tgetBlockType(): string | null\n\t{\n\t\treturn this.#blockType;\n\t}\n\n\tsetTooltip(tooltip: string | null)\n\t{\n\t\tif (Type.isStringFilled(tooltip))\n\t\t{\n\t\t\tDom.attr(this.getContainer(), 'title', Text.encode(tooltip));\n\t\t}\n\t\telse if (tooltip === null)\n\t\t{\n\t\t\tDom.attr(this.getContainer(), 'title', null);\n\t\t}\n\t}\n\n\tdisableInsideUnformatted(): void\n\t{\n\t\tthis.#disableInsideUnformatted = true;\n\t}\n\n\tenableInsideUnformatted(): void\n\t{\n\t\tthis.#disableInsideUnformatted = false;\n\t}\n\n\tshouldDisableInsideUnformatted(): boolean\n\t{\n\t\treturn this.#disableInsideUnformatted;\n\t}\n\n\tsetActive(active: boolean = true): void\n\t{\n\t\tif (active === this.#active)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#active = active;\n\t\tif (active)\n\t\t{\n\t\t\tDom.addClass(this.getContainer(), '--active');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.getContainer(), '--active');\n\t\t}\n\t}\n\n\tisActive(): boolean\n\t{\n\t\treturn this.#active;\n\t}\n\n\tsetDisabled(disabled: boolean = true): void\n\t{\n\t\tif (disabled === this.#disabled)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#disabled = disabled;\n\t\tif (disabled)\n\t\t{\n\t\t\tDom.attr(this.getContainer(), { disabled: true });\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.attr(this.getContainer(), { disabled: null });\n\t\t}\n\t}\n\n\tdisable(): void\n\t{\n\t\tthis.setDisabled(true);\n\t}\n\n\tenable(): void\n\t{\n\t\tthis.setDisabled(false);\n\t}\n\n\tisDisabled(): boolean\n\t{\n\t\treturn this.#disabled;\n\t}\n\n\thasOwnDisableCallback(): boolean\n\t{\n\t\treturn this.#disableCallback !== null;\n\t}\n\n\tsetDisableCallback(fn: Function): void\n\t{\n\t\tif (Type.isFunction(fn))\n\t\t{\n\t\t\tthis.#disableCallback = fn;\n\t\t}\n\t}\n\n\tinvokeDisableCallback(): boolean\n\t{\n\t\treturn this.#disableCallback();\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\tif (this.#container === null)\n\t\t{\n\t\t\tthis.#container = Tag.render`\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"ui-text-editor-toolbar-button\"\n\t\t\t\t\tonclick=\"${this.#handleClick.bind(this)}\"\n\t\t\t\t>\n\t\t\t\t</button>\n\t\t\t`;\n\t\t}\n\n\t\treturn this.#container;\n\t}\n\n\trender(): HTMLElement\n\t{\n\t\treturn this.getContainer();\n\t}\n\n\t#handleClick(): void\n\t{\n\t\tthis.emit('onClick');\n\t}\n}\n","export function wrapTextInParagraph(text: string): string\n{\n\tlet result = '';\n\tconst parts = text.split(/((?:\\r?\\n){2})/);\n\n\tfor (const part of parts)\n\t{\n\t\tif (part === '\\n\\n' || part === '\\r\\n\\r\\n')\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult += `<p>${part.replaceAll(/(\\r?\\n)/g, '<br>')}</p>`;\n\t}\n\n\treturn result;\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { Type, Dom } from 'main.core';\n\nimport {\n\tElementNode,\n\t$applyNodeReplacement,\n\t$createParagraphNode,\n\t$isElementNode,\n\t$isDecoratorNode,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype SerializedElementNode,\n\ttype LexicalEditor,\n\ttype RangeSelection,\n\ttype ParagraphNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n} from 'ui.lexical.core';\n\nimport { $isParagraphEmpty } from '../../helpers/is-paragraph-empty';\n\nexport class QuoteNode extends ElementNode\n{\n\tstatic getType(): string\n\t{\n\t\treturn 'quote';\n\t}\n\n\tstatic clone(node: QuoteNode): QuoteNode\n\t{\n\t\treturn new QuoteNode(node.__key);\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLElement\n\t{\n\t\tconst element = document.createElement('blockquote');\n\t\telement.setAttribute('spellcheck', 'false');\n\n\t\tif (Type.isStringFilled(config?.theme?.quote))\n\t\t{\n\t\t\tDom.addClass(element, config.theme.quote);\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tupdateDOM(prevNode: QuoteNode, anchor: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\tblockquote: (node: Node) => ({\n\t\t\t\tconversion: (element: HTMLElement): DOMConversionOutput => {\n\t\t\t\t\treturn { node: $createQuoteNode() };\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\tstatic importJSON(serializedNode: SerializedElementNode): QuoteNode\n\t{\n\t\tconst node = $createQuoteNode();\n\t\tnode.setFormat(serializedNode.format);\n\t\tnode.setIndent(serializedNode.indent);\n\t\tnode.setDirection(serializedNode.direction);\n\n\t\treturn node;\n\t}\n\n\texportJSON(): SerializedElementNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: 'quote',\n\t\t};\n\t}\n\n\tcanIndent(): false\n\t{\n\t\treturn false;\n\t}\n\n\tisInline(): false\n\t{\n\t\treturn false;\n\t}\n\n\tcanReplaceWith(replacement: LexicalNode): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tcollapseAtStart(selection: RangeSelection): true\n\t{\n\t\t// const paragraph = $createParagraphNode();\n\t\t// const children = this.getChildren();\n\t\t// children.forEach((child) => paragraph.append(child));\n\t\t// this.replace(paragraph);\n\t\t$removeQuote(this);\n\n\t\treturn true;\n\t}\n\n\tcanBeEmpty(): false\n\t{\n\t\treturn false;\n\t}\n\n\tisShadowRoot(): boolean\n\t{\n\t\treturn true;\n\t}\n\n\t// insertNewAfter(selection: RangeSelection, restoreSelection = true): null | ParagraphNode\n\t// {\n\t// \tconst children = this.getChildren();\n\t// \tconst childrenLength = children.length;\n\t//\n\t// \tif (\n\t// \t\tchildrenLength >= 2\n\t// \t\t&& children[childrenLength - 1].getTextContent() === '\\n'\n\t// \t\t&& children[childrenLength - 2].getTextContent() === '\\n'\n\t// \t\t&& selection.isCollapsed()\n\t// \t\t&& selection.anchor.key === this.__key\n\t// \t\t&& selection.anchor.offset === childrenLength\n\t// \t)\n\t// \t{\n\t// \t\tchildren[childrenLength - 1].remove();\n\t// \t\tchildren[childrenLength - 2].remove();\n\t// \t\tconst newElement = $createParagraphNode();\n\t// \t\tthis.insertAfter(newElement, restoreSelection);\n\t//\n\t// \t\treturn newElement;\n\t// \t}\n\t//\n\t// \tselection.insertLineBreak();\n\t//\n\t// \treturn null;\n\t// }\n}\n\nexport function $createQuoteNode(): QuoteNode\n{\n\treturn $applyNodeReplacement(new QuoteNode());\n}\n\nexport function $isQuoteNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof QuoteNode;\n}\n\nexport function $removeQuote(quoteNode: QuoteNode): boolean\n{\n\tif (!$isQuoteNode(quoteNode))\n\t{\n\t\treturn false;\n\t}\n\n\tlet lastElement = quoteNode;\n\tfor (const child of quoteNode.getChildren())\n\t{\n\t\tif ($isElementNode(child) || $isDecoratorNode(child))\n\t\t{\n\t\t\tlastElement = lastElement.insertAfter(child);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlastElement = lastElement.insertAfter($createParagraphNode().append(child));\n\t\t}\n\t}\n\n\tquoteNode.remove();\n\n\treturn true;\n}\n","import type { LexicalNode } from 'ui.lexical.core';\n\nexport function $getAncestor(node: LexicalNode, predicate: (ancestor: LexicalNode) => boolean): LexicalNode | null\n{\n\tlet parent: LexicalNode = node;\n\twhile (parent !== null && parent.getParent() !== null && !predicate(parent))\n\t{\n\t\tparent = parent.getParentOrThrow();\n\t}\n\n\treturn predicate(parent) ? parent : null;\n}\n","import { $isDecoratorNode, $isElementNode } from 'ui.lexical.core';\nimport type { DecoratorNode, ElementNode, LexicalNode } from 'ui.lexical.core';\n\nexport function $isBlockNode(node: ElementNode | DecoratorNode | LexicalNode): boolean\n{\n\treturn ($isElementNode(node) || $isDecoratorNode(node)) && !node.isInline() && !node.isParentRequired();\n}\n","import type { LexicalNode } from 'ui.lexical.core';\nimport { $isRootOrShadowRoot, type BaseSelection, type ElementNode } from 'ui.lexical.core';\nimport { $getAncestor } from './get-ancestor';\nimport { $isBlockNode } from './is-block-node';\n\nexport function $wrapNodes(selection: BaseSelection | null, createElement: () => ElementNode): ElementNode | null\n{\n\tif (selection === null)\n\t{\n\t\treturn null;\n\t}\n\n\tconst anchor = selection.anchor;\n\tconst anchorNode: ElementNode = anchor.getNode();\n\tconst element: ElementNode = createElement();\n\tif ($isRootOrShadowRoot(anchorNode))\n\t{\n\t\tconst firstChild = anchorNode.getFirstChild();\n\t\tif (firstChild)\n\t\t{\n\t\t\tfirstChild.replace(element, true);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tanchorNode.append(element);\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tconst handled = new Set();\n\tconst nodes: LexicalNode[] = selection.getNodes();\n\tconst firstSelectedBlock = $getAncestor(selection.anchor.getNode(), $isBlockNode);\n\tif (firstSelectedBlock && !nodes.includes(firstSelectedBlock))\n\t{\n\t\tnodes.unshift(firstSelectedBlock);\n\t}\n\n\thandled.add(element.getKey());\n\n\tlet firstNode = true;\n\tfor (const node of nodes)\n\t{\n\t\tif (!$isBlockNode(node) || handled.has(node.getKey()))\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst isParentHandled = $getAncestor(\n\t\t\tnode.getParent(),\n\t\t\t(parentNode: LexicalNode): boolean => handled.has(parentNode.getKey()),\n\t\t);\n\n\t\tif (isParentHandled)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (firstNode)\n\t\t{\n\t\t\tfirstNode = false;\n\t\t\tnode.replace(element);\n\t\t\telement.append(node);\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement.append(node);\n\t\t}\n\n\t\thandled.add(node.getKey());\n\t}\n\n\treturn element;\n}\n","import { Loc, Type } from 'main.core';\n\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\n\nimport {\n\t$getSelection,\n\t$isRangeSelection,\n\t$createParagraphNode,\n\tcreateCommand,\n\tCOMMAND_PRIORITY_LOW,\n\ttype LexicalNode,\n\ttype RangeSelection,\n\ttype ElementNode,\n\ttype LexicalCommand,\n} from 'ui.lexical.core';\n\nimport { $findMatchingParent, $insertNodeToNearestRoot } from 'ui.lexical.utils';\n\nimport {\n\t$importFromBBCode,\n\t$normalizeTextNodes,\n\tshouldWrapInParagraph,\n\ttype BBCodeConversion,\n\ttype BBCodeConversionFn,\n\ttype BBCodeExportOutput,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n} from '../../bbcode';\n\nimport { NewLineMode } from '../../constants';\nimport { $wrapNodes } from '../../helpers/wrap-nodes';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nimport BasePlugin from '../base-plugin';\nimport Button from '../../toolbar/button';\nimport { $createQuoteNode, $isQuoteNode, $removeQuote, QuoteNode } from './quote-node';\n\nimport { type TextEditor } from '../../text-editor';\n\nexport type InsertQuotePayload = {\n\tcontent?: string,\n};\n\n/** @memberof BX.UI.TextEditor.Plugins.Quote */\nexport const INSERT_QUOTE_COMMAND: LexicalCommand<InsertQuotePayload> = createCommand('INSERT_QUOTE_COMMAND');\n\n/** @memberof BX.UI.TextEditor.Plugins.Quote */\nexport const FORMAT_QUOTE_COMMAND: LexicalCommand = createCommand('FORMAT_QUOTE_COMMAND');\n\n/** @memberof BX.UI.TextEditor.Plugins.Quote */\nexport const REMOVE_QUOTE_COMMAND: LexicalCommand = createCommand('REMOVE_QUOTE_COMMAND');\n\nexport class QuotePlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerCommands();\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Quote';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [QuoteNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tquote: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createQuoteNode(),\n\t\t\t\t\t\tafter: (childLexicalNodes: Array<LexicalNode>): Array<LexicalNode> => {\n\t\t\t\t\t\t\treturn $normalizeTextNodes(childLexicalNodes);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tquote: (lexicalNode: LexicalNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'quote' }),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: QuoteNode,\n\t\t\t\tvalidate: ((quoteNode: QuoteNode) => {\n\t\t\t\t\tlet prevParagraph = null;\n\t\t\t\t\tquoteNode.getChildren().forEach((child: LexicalNode | ElementNode) => {\n\t\t\t\t\t\tif (shouldWrapInParagraph(child))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (prevParagraph === null)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst paragraph = $createParagraphNode();\n\t\t\t\t\t\t\t\tchild.replace(paragraph);\n\t\t\t\t\t\t\t\tparagraph.append(child);\n\t\t\t\t\t\t\t\tprevParagraph = paragraph;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tprevParagraph.append(child);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprevParagraph = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn false;\n\t\t\t\t}),\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\tquote: 'quote',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_QUOTE_COMMAND,\n\t\t\t\t(payload) => {\n\t\t\t\t\tconst quoteNode = $createQuoteNode();\n\t\t\t\t\tif (Type.isPlainObject(payload) && Type.isStringFilled(payload.content))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst nodes = $importFromBBCode(payload.content, this.getEditor(), false);\n\t\t\t\t\t\tquoteNode.append(...$normalizeTextNodes(nodes));\n\t\t\t\t\t\t$insertNodeToNearestRoot(quoteNode);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tquoteNode.append($createParagraphNode());\n\t\t\t\t\t\t$insertNodeToNearestRoot(quoteNode);\n\t\t\t\t\t}\n\n\t\t\t\t\tquoteNode.selectStart();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tFORMAT_QUOTE_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif ($isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst quoteNode = $createQuoteNode();\n\t\t\t\t\t\t$wrapNodes(selection, () => quoteNode);\n\n\t\t\t\t\t\tif (quoteNode.isEmpty())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tquoteNode.append($createParagraphNode());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquoteNode.selectStart();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tREMOVE_QUOTE_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet quoteNode = $findMatchingParent(selection.anchor.getNode(), $isQuoteNode);\n\t\t\t\t\tif (!quoteNode)\n\t\t\t\t\t{\n\t\t\t\t\t\tquoteNode = $findMatchingParent(selection.focus.getNode(), $isQuoteNode);\n\t\t\t\t\t}\n\n\t\t\t\t\t$removeQuote(quoteNode);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('quote', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --quote\"></span>');\n\t\t\tbutton.setBlockType('quote');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_QUOTE'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tif (button.isActive())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(REMOVE_QUOTE_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.getEditor().getNewLineMode() === NewLineMode.LINE_BREAK)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_QUOTE_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_QUOTE_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n}\n","/*\neslint-disable no-underscore-dangle,\n@bitrix24/bitrix24-rules/no-pseudo-private,\n@bitrix24/bitrix24-rules/no-native-dom-methods\n*/\n\nimport { Dom, Type } from 'main.core';\n\nimport { type SpoilerNode, $createSpoilerNode } from './spoiler-node';\n\nimport {\n\tElementNode,\n\t$isElementNode,\n\t$isDecoratorNode,\n\t$createParagraphNode,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n\ttype SerializedElementNode,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\n\ntype SerializedSpoilerContentNode = SerializedElementNode;\n\nexport function convertSpoilerContentElement(domNode: HTMLElement): DOMConversionOutput | null\n{\n\tconst node = $createSpoilerContentNode();\n\n\treturn { node };\n}\n\nexport class SpoilerContentNode extends ElementNode\n{\n\tstatic getType(): string\n\t{\n\t\treturn 'spoiler-content';\n\t}\n\n\tstatic clone(node: SpoilerContentNode): SpoilerContentNode\n\t{\n\t\treturn new SpoilerContentNode(node.__key);\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLElement\n\t{\n\t\tconst dom = document.createElement('div');\n\n\t\tif (Type.isStringFilled(config?.theme?.spoiler?.content))\n\t\t{\n\t\t\tDom.addClass(dom, config.theme.spoiler.content);\n\t\t}\n\n\t\treturn dom;\n\t}\n\n\tupdateDOM(prevNode: SpoilerContentNode, dom: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\tdiv: (domNode: HTMLElement) => {\n\t\t\t\tif (!domNode.hasAttribute('data-spoiler-content'))\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tconversion: convertSpoilerContentElement,\n\t\t\t\t\tpriority: 2,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tstatic importJSON(serializedNode: SerializedSpoilerContentNode): SpoilerContentNode\n\t{\n\t\treturn $createSpoilerContentNode();\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\tconst element = document.createElement('div');\n\t\telement.setAttribute('data-spoiler-content', 'true');\n\n\t\treturn { element };\n\t}\n\n\texportJSON(): SerializedSpoilerContentNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: 'spoiler-content',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tisShadowRoot(): boolean\n\t{\n\t\treturn true;\n\t}\n\n\tisParentRequired(): boolean\n\t{\n\t\treturn true;\n\t}\n\n\tcreateParentElementNode(): SpoilerNode\n\t{\n\t\treturn $createSpoilerNode();\n\t}\n\n\tcanIndent(): false\n\t{\n\t\treturn false;\n\t}\n\n\tcanInsertAfter(node: LexicalNode): false\n\t{\n\t\treturn false;\n\t}\n\n\tcanReplaceWith(replacement: LexicalNode): false\n\t{\n\t\treturn false;\n\t}\n\n\tinsertBefore(node: LexicalNode): LexicalNode\n\t{\n\t\tconst firstChild = this.getFirstChild();\n\t\tconst nodeToInsert = (\n\t\t\t$isElementNode(node) || $isDecoratorNode(node)\n\t\t\t\t? node\n\t\t\t\t: $createParagraphNode().append(node)\n\t\t);\n\n\t\tif (firstChild === null)\n\t\t{\n\t\t\tthis.append(nodeToInsert);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfirstChild.insertBefore(nodeToInsert);\n\t\t}\n\n\t\treturn nodeToInsert;\n\t}\n\n\tinsertAfter(node: LexicalNode): LexicalNode\n\t{\n\t\tconst nodeToInsert = (\n\t\t\t$isElementNode(node) || $isDecoratorNode(node)\n\t\t\t\t? node\n\t\t\t\t: $createParagraphNode().append(node)\n\t\t);\n\n\t\tthis.append(nodeToInsert);\n\n\t\treturn nodeToInsert;\n\t}\n}\n\nexport function $createSpoilerContentNode(): SpoilerContentNode\n{\n\treturn new SpoilerContentNode();\n}\n\nexport function $isSpoilerContentNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof SpoilerContentNode;\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport {\n\tTextNode,\n\t$applyNodeReplacement,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype SerializedTextNode,\n} from 'ui.lexical.core';\n\nexport class SpoilerTitleTextNode extends TextNode\n{\n\tstatic getType(): string\n\t{\n\t\treturn 'spoiler-title-text';\n\t}\n\n\tstatic clone(node: SpoilerTitleTextNode): SpoilerTitleTextNode\n\t{\n\t\treturn new SpoilerTitleTextNode(node.__text, node.__key);\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement\n\t{\n\t\treturn super.createDOM(config);\n\t}\n\n\tstatic importJSON(serializedNode: SerializedTextNode): SpoilerTitleTextNode\n\t{\n\t\treturn $createSpoilerTitleTextNode(serializedNode.text);\n\t}\n\n\texportJSON(): SerializedTextNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: 'spoiler-title-text',\n\t\t};\n\t}\n}\n\nexport function $createSpoilerTitleTextNode(text = ''): SpoilerTitleTextNode\n{\n\treturn $applyNodeReplacement(new SpoilerTitleTextNode(text));\n}\n\nexport function $isSpoilerTitleTextNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof SpoilerTitleTextNode;\n}\n","/* eslint-disable @bitrix24/bitrix24-rules/no-native-dom-methods */\nimport { Loc, Type } from 'main.core';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\nimport {\n\t$normalizeTextNodes,\n\tshouldWrapInParagraph,\n\ttype BBCodeConversion,\n\ttype BBCodeConversionFn,\n\ttype BBCodeExportOutput,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n} from '../../bbcode';\n\nimport { $findMatchingParent } from 'ui.lexical.utils';\nimport { $getAncestor } from '../../helpers/get-ancestor';\nimport { $isBlockNode } from '../../helpers/is-block-node';\n\nimport { $createSpoilerContentNode, $isSpoilerContentNode, SpoilerContentNode } from './spoiler-content-node';\nimport { $createSpoiler, $createSpoilerNode, $isSpoilerNode, SpoilerNode } from './spoiler-node';\nimport { $createSpoilerTitleNode, $isSpoilerTitleNode, $removeSpoiler, SpoilerTitleNode } from './spoiler-title-node';\n\nimport BasePlugin from '../base-plugin';\nimport Button from '../../toolbar/button';\n\nimport {\n\t$createParagraphNode,\n\t$getPreviousSelection,\n\t$getSelection,\n\t$isElementNode,\n\t$isDecoratorNode,\n\t$isRangeSelection,\n\t$setSelection,\n\tcreateCommand,\n\t$isRootOrShadowRoot,\n\t$createTextNode,\n\tCOMMAND_PRIORITY_LOW,\n\tCOMMAND_PRIORITY_NORMAL,\n\tINSERT_PARAGRAPH_COMMAND,\n\tDELETE_CHARACTER_COMMAND,\n\tPASTE_COMMAND,\n\tKEY_ENTER_COMMAND,\n\ttype ElementNode,\n\ttype LexicalNode,\n\ttype RangeSelection,\n} from 'ui.lexical.core';\n\nimport { $insertDataTransferForPlainText } from 'ui.lexical.clipboard';\n\nimport { type TextEditor } from '../../text-editor';\nimport { type SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nimport { $createSpoilerTitleTextNode, $isSpoilerTitleTextNode, SpoilerTitleTextNode } from './spoiler-title-text-node';\n\nexport const INSERT_SPOILER_COMMAND = createCommand('INSERT_SPOILER_COMMAND');\nexport const REMOVE_SPOILER_COMMAND = createCommand('REMOVE_SPOILER_COMMAND');\n\nexport class SpoilerPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerNodeTransforms();\n\t\tthis.#registerCommands();\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Spoiler';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [\n\t\t\tSpoilerNode,\n\t\t\tSpoilerTitleNode,\n\t\t\tSpoilerContentNode,\n\t\t\tSpoilerTitleTextNode,\n\t\t];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tspoiler: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\tconst title: string = (\n\t\t\t\t\t\tType.isStringFilled(node.getValue())\n\t\t\t\t\t\t\t? trimSpoilerTitle(node.getValue())\n\t\t\t\t\t\t\t: Loc.getMessage('TEXT_EDITOR_SPOILER_TITLE')\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createSpoilerNode(false),\n\t\t\t\t\t\tafter: (childLexicalNodes: Array<LexicalNode>): Array<LexicalNode> => {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t$createSpoilerTitleNode().append($createSpoilerTitleTextNode(title)),\n\t\t\t\t\t\t\t\t$createSpoilerContentNode().append(...$normalizeTextNodes(childLexicalNodes)),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tspoiler: (spoilerNode: SpoilerNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\t\t\t\tconst titleNode = spoilerNode.getChildren()[0];\n\t\t\t\tconst title = trimSpoilerTitle(titleNode.getTextContent());\n\t\t\t\tconst value = title === Loc.getMessage('TEXT_EDITOR_SPOILER_TITLE') ? '' : title;\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'spoiler', value }),\n\t\t\t\t};\n\t\t\t},\n\t\t\t'spoiler-title': (node: SpoilerTitleNode): BBCodeExportOutput => {\n\t\t\t\treturn {\n\t\t\t\t\tnode: null,\n\t\t\t\t};\n\t\t\t},\n\t\t\t'spoiler-content': (node: SpoilerContentNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createFragment(),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [\n\t\t\t\t{\n\t\t\t\t\tnodeClass: SpoilerNode,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnodeClass: SpoilerContentNode,\n\t\t\t\t\tvalidate: ((contentNode: SpoilerContentNode) => {\n\t\t\t\t\t\tcontentNode.getChildren().forEach((child: LexicalNode | ElementNode) => {\n\t\t\t\t\t\t\tif (shouldWrapInParagraph(child))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst paragraph = $createParagraphNode();\n\t\t\t\t\t\t\t\tchild.replace(paragraph);\n\t\t\t\t\t\t\t\tparagraph.append(child);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t],\n\t\t\tbbcodeMap: {\n\t\t\t\tspoiler: 'spoiler',\n\t\t\t\t'spoiler-content': 'spoiler',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('spoiler', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --insert-spoiler\"></span>');\n\t\t\tbutton.setBlockType('spoiler');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_SPOILER'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tif (button.isActive())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(REMOVE_SPOILER_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_SPOILER_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\t#registerCommands(): () => void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\t// This handles the case when container is collapsed and we delete its previous sibling\n\t\t\t// into it, it would cause collapsed content deleted (since it's display: none, and selection\n\t\t\t// swallows it when deletes single char). Instead we expand container, which is although\n\t\t\t// not perfect, but avoids bigger problem\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDELETE_CHARACTER_COMMAND,\n\t\t\t\tthis.#handleDeleteCharacter.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_ENTER_COMMAND,\n\t\t\t\tthis.#handleEnter.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_PARAGRAPH_COMMAND,\n\t\t\t\t(event: KeyboardEvent) => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif ($isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst spoilerTitleNode: SpoilerTitleNode = $findMatchingParent(\n\t\t\t\t\t\t\tselection.anchor.getNode(),\n\t\t\t\t\t\t\t(node: LexicalNode) => $isSpoilerTitleNode(node),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (spoilerTitleNode)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst newBlock: ElementNode = spoilerTitleNode.insertNewAfter(selection);\n\t\t\t\t\t\t\tif (newBlock)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnewBlock.selectStart();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tPASTE_COMMAND,\n\t\t\t\tthis.#handlePaste.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_SPOILER_COMMAND,\n\t\t\t\t(payload) => {\n\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\tconst title = Type.isPlainObject(payload) && Type.isStringFilled(payload.title) ? payload.title : undefined;\n\t\t\t\t\t\tconst selection = $getSelection();\n\t\t\t\t\t\tconst spoiler = insertSpoiler(selection, title);\n\n\t\t\t\t\t\tspoiler.getTitleNode().select();\n\t\t\t\t\t});\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tREMOVE_SPOILER_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet spoilerNode = $findMatchingParent(selection.anchor.getNode(), $isSpoilerNode);\n\t\t\t\t\t\tif (!spoilerNode)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tspoilerNode = $findMatchingParent(selection.focus.getNode(), $isSpoilerNode);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$removeSpoiler(spoilerNode);\n\t\t\t\t\t});\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerNodeTransforms(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\t// Structure enforcing transformers for each node type. In case nesting structure is not\n\t\t\t// \"Container > Title + Content\" it'll unwrap nodes and convert it back\n\t\t\t// to regular content.\n\t\t\tthis.getEditor().registerNodeTransform(SpoilerNode, (node) => {\n\t\t\t\tconst children = node.getChildren();\n\t\t\t\tif (children.length !== 2 || !$isSpoilerTitleNode(children[0]) || !$isSpoilerContentNode(children[1]))\n\t\t\t\t{\n\t\t\t\t\tfor (const child of children)\n\t\t\t\t\t{\n\t\t\t\t\t\tif ($isElementNode(child) || $isDecoratorNode(child))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode.insertBefore(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode.insertBefore($createParagraphNode().append(child));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.remove();\n\t\t\t\t}\n\t\t\t}),\n\n\t\t\tthis.getEditor().registerNodeTransform(SpoilerTitleNode, (node: SpoilerTitleNode) => {\n\t\t\t\tconst parent: ElementNode = node.getParent();\n\t\t\t\tif (!$isSpoilerNode(parent))\n\t\t\t\t{\n\t\t\t\t\tnode.replace($createParagraphNode().append(...node.getChildren()));\n\t\t\t\t}\n\t\t\t\telse if (\n\t\t\t\t\t(node.getChildrenSize() === 1 && !$isSpoilerTitleTextNode(node.getFirstChild()))\n\t\t\t\t\t|| node.getChildrenSize() > 1\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\t$setSelection(null);\n\t\t\t\t\tconst textContent = trimSpoilerTitle(node.getTextContent());\n\t\t\t\t\tnode.clear();\n\t\t\t\t\tnode.append($createSpoilerTitleTextNode(textContent));\n\t\t\t\t\tnode.select();\n\t\t\t\t}\n\t\t\t}),\n\n\t\t\tthis.getEditor().registerNodeTransform(SpoilerTitleTextNode, (node: SpoilerTitleNode) => {\n\t\t\t\tconst parent: ElementNode = node.getParent();\n\t\t\t\tif (!$isSpoilerTitleNode(parent))\n\t\t\t\t{\n\t\t\t\t\tnode.replace($createParagraphNode().append($createTextNode(node.getTextContent())));\n\t\t\t\t}\n\t\t\t}),\n\n\t\t\tthis.getEditor().registerNodeTransform(SpoilerContentNode, (node) => {\n\t\t\t\tconst parent = node.getParent();\n\t\t\t\tif (!$isSpoilerNode(parent))\n\t\t\t\t{\n\t\t\t\t\tconst children = node.getChildren();\n\t\t\t\t\tfor (const child of children)\n\t\t\t\t\t{\n\t\t\t\t\t\tif ($isElementNode(child) || $isDecoratorNode(child))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode.insertBefore(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode.insertBefore($createParagraphNode().append(child));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.remove();\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n\n\t#handleDeleteCharacter(): boolean\n\t{\n\t\tconst selection: RangeSelection = $getSelection();\n\t\tif (!$isRangeSelection(selection) || !selection.isCollapsed() || selection.anchor.offset !== 0)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst anchorNode = selection.anchor.getNode();\n\t\tconst topLevelElement = anchorNode.getTopLevelElement();\n\t\tif (topLevelElement === null)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst container: SpoilerNode = topLevelElement.getPreviousSibling();\n\t\tif (!$isSpoilerNode(container) || container.getOpen())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tcontainer.setOpen(true);\n\n\t\treturn true;\n\t}\n\n\t#handleEnter(event: KeyboardEvent): boolean\n\t{\n\t\tif (event && (event.ctrlKey || event.metaKey))\n\t\t{\n\t\t\t// Handling CMD+Enter to toggle spoiler element collapsed state\n\t\t\tconst selection: RangeSelection = $getPreviousSelection();\n\t\t\tif ($isRangeSelection(selection) && selection.isCollapsed())\n\t\t\t{\n\t\t\t\tconst parent = $findMatchingParent(\n\t\t\t\t\tselection.anchor.getNode(),\n\t\t\t\t\t(node) => $isElementNode(node) && !node.isInline(),\n\t\t\t\t);\n\n\t\t\t\tif ($isSpoilerTitleNode(parent))\n\t\t\t\t{\n\t\t\t\t\tconst container: SpoilerNode = parent.getParent();\n\t\t\t\t\tif ($isSpoilerNode(container))\n\t\t\t\t\t{\n\t\t\t\t\t\tcontainer.toggleOpen();\n\t\t\t\t\t\t$setSelection(selection.clone());\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#handlePaste(event: ClipboardEvent): boolean\n\t{\n\t\tconst selection: RangeSelection = $getSelection();\n\t\tif (\n\t\t\t!$isRangeSelection(selection)\n\t\t\t|| !(event instanceof ClipboardEvent)\n\t\t\t|| event.clipboardData === null\n\t\t)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst spoilerTitleNode: SpoilerTitleNode = $findMatchingParent(\n\t\t\tselection.anchor.getNode(),\n\t\t\t(node: LexicalNode) => $isSpoilerTitleNode(node),\n\t\t);\n\n\t\tif (spoilerTitleNode)\n\t\t{\n\t\t\t$insertDataTransferForPlainText(event.clipboardData, selection);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nexport function insertSpoiler(selection: RangeSelection, title?: string)\n{\n\tif (!$isRangeSelection(selection))\n\t{\n\t\treturn null;\n\t}\n\n\tconst anchor = selection.anchor;\n\tconst anchorNode: ElementNode = anchor.getNode();\n\tconst spoiler: SpoilerNode = $createSpoiler(true, title);\n\tif ($isRootOrShadowRoot(anchorNode))\n\t{\n\t\tconst firstChild = anchorNode.getFirstChild();\n\t\tif (firstChild)\n\t\t{\n\t\t\tfirstChild.replace(spoiler, true);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tanchorNode.append(spoiler);\n\t\t}\n\n\t\treturn spoiler;\n\t}\n\n\tconst handled = new Set();\n\tconst nodes: LexicalNode[] = selection.getNodes();\n\tconst firstSelectedBlock = $getAncestor(selection.anchor.getNode(), $isBlockNode);\n\tif (firstSelectedBlock && !nodes.includes(firstSelectedBlock))\n\t{\n\t\tnodes.unshift(firstSelectedBlock);\n\t}\n\n\thandled.add(spoiler.getKey());\n\thandled.add(spoiler.getTitleNode().getKey());\n\thandled.add(spoiler.getContentNode().getKey());\n\n\tlet firstNode = true;\n\tfor (const node of nodes)\n\t{\n\t\tif (!$isBlockNode(node) || handled.has(node.getKey()))\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst isParentHandled = $getAncestor(\n\t\t\tnode.getParent(),\n\t\t\t(parentNode: LexicalNode): boolean => handled.has(parentNode.getKey()),\n\t\t);\n\n\t\tif (isParentHandled)\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (firstNode)\n\t\t{\n\t\t\tfirstNode = false;\n\t\t\tnode.replace(spoiler);\n\t\t\tspoiler.getContentNode().append(node);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tspoiler.getContentNode().append(node);\n\t\t}\n\n\t\t// let parent: ElementNode = node.getParent();\n\t\t// while (parent !== null)\n\t\t// {\n\t\t// \tconst parentKey = parent.getKey();\n\t\t// \tconst nextParent: ElementNode = parent.getParent();\n\t\t// \tif ($isRootOrShadowRoot(nextParent) && !handled.has(parentKey))\n\t\t// \t{\n\t\t// \t\thandled.add(parentKey);\n\t\t// \t\tcreateSpoilerOrMerge(parent);\n\t\t//\n\t\t// \t\tbreak;\n\t\t// \t}\n\t\t//\n\t\t// \tparent = nextParent;\n\t\t// }\n\n\t\thandled.add(node.getKey());\n\t}\n\n\treturn spoiler;\n}\n\nexport function trimSpoilerTitle(title: string): string\n{\n\treturn title.trim()\n\t\t.replaceAll(/\\r?\\n|\\t/gm, '')\n\t\t.replace('\\r', '')\n\t\t.replaceAll(/\\s+/g, ' ')\n\t;\n}\n","/*\neslint-disable no-underscore-dangle,\n@bitrix24/bitrix24-rules/no-pseudo-private,\n@bitrix24/bitrix24-rules/no-native-dom-methods\n*/\n\nimport { Dom, Type } from 'main.core';\nimport { UNFORMATTED } from '../../constants';\n\nimport { $isSpoilerContentNode, SpoilerContentNode } from './spoiler-content-node';\nimport { $createSpoilerNode, $isSpoilerNode, type SpoilerNode } from './spoiler-node';\nimport { trimSpoilerTitle } from './spoiler-plugin';\n\nimport {\n\tElementNode,\n\t$createParagraphNode,\n\t$isElementNode,\n\t$isDecoratorNode,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n\ttype RangeSelection,\n\ttype SerializedElementNode,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\nimport { $createSpoilerTitleTextNode } from './spoiler-title-text-node';\n\ntype SerializedSpoilerTitleNode = SerializedElementNode;\n\nexport function convertSummaryElement(domNode: HTMLElement): DOMConversionOutput | null\n{\n\tconst node = $createSpoilerTitleNode();\n\n\treturn { node };\n}\n\nexport class SpoilerTitleNode extends ElementNode\n{\n\t__language: string = 'hack';\n\t__flags: number = UNFORMATTED;\n\n\tstatic getType(): string\n\t{\n\t\treturn 'spoiler-title';\n\t}\n\n\tstatic clone(node: SpoilerTitleNode): SpoilerTitleNode\n\t{\n\t\treturn new SpoilerTitleNode(node.__key);\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLElement\n\t{\n\t\tconst dom = document.createElement('summary');\n\n\t\tif (Type.isStringFilled(config?.theme?.spoiler?.title))\n\t\t{\n\t\t\tDom.addClass(dom, config.theme.spoiler.title);\n\t\t}\n\n\t\tDom.addClass(dom, 'ui-icon-set__scope');\n\n\t\treturn dom;\n\t}\n\n\tupdateDOM(prevNode: SpoilerTitleNode, dom: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\tsummary: (domNode: HTMLElement) => {\n\t\t\t\treturn {\n\t\t\t\t\tconversion: convertSummaryElement,\n\t\t\t\t\tpriority: 1,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tstatic importJSON(serializedNode: SerializedSpoilerTitleNode): SpoilerTitleNode\n\t{\n\t\treturn $createSpoilerTitleNode();\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\tconst element = document.createElement('summary');\n\n\t\treturn { element };\n\t}\n\n\texportJSON(): SerializedSpoilerTitleNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: 'spoiler-title',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tcollapseAtStart(selection: RangeSelection): boolean\n\t{\n\t\tconst spoilerNode: SpoilerNode = this.getParent();\n\t\tif (!$isSpoilerNode(spoilerNode))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $removeSpoiler(spoilerNode);\n\t}\n\n\tinsertNewAfter(selection: RangeSelection, restoreSelection = true): ElementNode\n\t{\n\t\tconst containerNode: SpoilerNode = this.getParentOrThrow();\n\n\t\tif (!$isSpoilerNode(containerNode))\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'SpoilerTitleNode expects to be child of SpoilerNode',\n\t\t\t);\n\t\t}\n\n\t\tif (containerNode.getOpen())\n\t\t{\n\t\t\tconst contentNode: SpoilerContentNode = this.getNextSibling();\n\t\t\tif (!$isSpoilerContentNode(contentNode))\n\t\t\t{\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'SpoilerTitleNode expects to have SpoilerContentNode sibling',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst firstChild = contentNode.getFirstChild();\n\t\t\tif ($isElementNode(firstChild) || $isDecoratorNode(firstChild))\n\t\t\t{\n\t\t\t\treturn firstChild;\n\t\t\t}\n\n\t\t\tconst paragraph = $createParagraphNode();\n\t\t\tcontentNode.append(paragraph);\n\n\t\t\treturn paragraph;\n\t\t}\n\n\t\tconst paragraph = $createParagraphNode();\n\t\tcontainerNode.insertAfter(paragraph, restoreSelection);\n\n\t\treturn paragraph;\n\t}\n\n\tisParentRequired(): boolean\n\t{\n\t\treturn true;\n\t}\n\n\tcreateParentElementNode(): SpoilerNode\n\t{\n\t\treturn $createSpoilerNode();\n\t}\n\n\tcanIndent(): false\n\t{\n\t\treturn false;\n\t}\n\n\tinsertAfter(nodeToInsert: LexicalNode): LexicalNode\n\t{\n\t\tconst textContent = nodeToInsert.getTextContent();\n\t\tthis.clear();\n\t\tthis.append($createSpoilerTitleTextNode(trimSpoilerTitle(textContent)));\n\n\t\treturn this;\n\t}\n}\n\nexport function $createSpoilerTitleNode(): SpoilerTitleNode\n{\n\treturn new SpoilerTitleNode();\n}\n\nexport function $isSpoilerTitleNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof SpoilerTitleNode;\n}\n\nexport function $removeSpoiler(spoilerNode: SpoilerNode): boolean\n{\n\tif (!$isSpoilerNode(spoilerNode))\n\t{\n\t\treturn false;\n\t}\n\n\tconst contentNode: SpoilerContentNode = spoilerNode.getContentNode();\n\tlet lastElement = spoilerNode;\n\n\tif (contentNode !== null)\n\t{\n\t\tfor (const child of contentNode.getChildren())\n\t\t{\n\t\t\tif ($isElementNode(child) || $isDecoratorNode(child))\n\t\t\t{\n\t\t\t\tlastElement = lastElement.insertAfter(child);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlastElement = lastElement.insertAfter($createParagraphNode().append(child));\n\t\t\t}\n\t\t}\n\t}\n\n\tspoilerNode.remove();\n\n\treturn true;\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\nimport { Dom, Type, Loc, Event } from 'main.core';\n\nimport { $createSpoilerContentNode, $isSpoilerContentNode, SpoilerContentNode } from './spoiler-content-node';\nimport { $createSpoilerTitleNode, $isSpoilerTitleNode, SpoilerTitleNode } from './spoiler-title-node';\n\nimport {\n\tElementNode,\n\t$isElementNode,\n\t$isDecoratorNode,\n\t$createParagraphNode,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n\ttype NodeKey,\n\ttype SerializedElementNode,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\nimport { $createSpoilerTitleTextNode } from './spoiler-title-text-node';\n\ntype SerializedSpoilerNode = SerializedElementNode & { open: boolean };\n\nexport class SpoilerNode extends ElementNode\n{\n\t__open: boolean;\n\n\tconstructor(open: boolean, key?: NodeKey)\n\t{\n\t\tsuper(key);\n\n\t\tthis.__open = open;\n\t}\n\n\tstatic getType(): string\n\t{\n\t\treturn 'spoiler';\n\t}\n\n\tstatic clone(node: SpoilerNode): SpoilerNode\n\t{\n\t\treturn new SpoilerNode(node.__open, node.__key);\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLElement\n\t{\n\t\tconst details = document.createElement('details');\n\t\tif (Type.isStringFilled(config?.theme?.spoiler?.container))\n\t\t{\n\t\t\tDom.addClass(details, config.theme.spoiler.container);\n\t\t}\n\n\t\tdetails.open = this.__open;\n\n\t\tEvent.bind(details, 'toggle', () => {\n\t\t\tconst open = editor.getEditorState().read(() => this.getOpen());\n\t\t\tif (open !== details.open)\n\t\t\t{\n\t\t\t\teditor.update(() => this.toggleOpen());\n\t\t\t}\n\t\t});\n\n\t\treturn details;\n\t}\n\n\tupdateDOM(prevNode: SpoilerNode, dom: HTMLDetailsElement, config: EditorConfig): boolean\n\t{\n\t\tif (prevNode.__open !== this.__open)\n\t\t{\n\t\t\tdom.open = this.__open;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tstatic importDOM(): DOMConversionMap<HTMLDetailsElement> | null\n\t{\n\t\treturn {\n\t\t\tdetails: (domNode: HTMLDetailsElement) => {\n\t\t\t\treturn {\n\t\t\t\t\tconversion: (details: HTMLDetailsElement): DOMConversionOutput | null => {\n\t\t\t\t\t\tconst isOpen = Type.isBoolean(details.open) ? details.open : true;\n\n\t\t\t\t\t\treturn { node: $createSpoiler(isOpen) };\n\t\t\t\t\t},\n\t\t\t\t\tpriority: 1,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tstatic importJSON(serializedNode: SerializedSpoilerNode): SpoilerNode\n\t{\n\t\treturn $createSpoilerNode(serializedNode.open);\n\t}\n\n\texportDOM(editor: LexicalEditor): DOMExportOutput\n\t{\n\t\tconst details = document.createElement('details');\n\t\tif (this.__open)\n\t\t{\n\t\t\tdetails.setAttribute('open', true);\n\t\t}\n\n\t\treturn { element: details };\n\t}\n\n\texportJSON(): SerializedSpoilerNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\topen: this.__open,\n\t\t\ttype: 'spoiler',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tisShadowRoot(): boolean\n\t{\n\t\treturn true;\n\t}\n\n\tcanBeEmpty(): false\n\t{\n\t\treturn false;\n\t}\n\n\tappend(...nodesToAppend: LexicalNode[]): this\n\t{\n\t\tfor (const node of nodesToAppend)\n\t\t{\n\t\t\tif ($isSpoilerTitleNode(node))\n\t\t\t{\n\t\t\t\tconst titleNode: SpoilerTitleNode = node;\n\t\t\t\tif (this.getTitleNode() === null)\n\t\t\t\t{\n\t\t\t\t\tsuper.append(titleNode);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.getTitleNode().clear();\n\t\t\t\t\tthis.getTitleNode().append($createSpoilerTitleTextNode(node.getTextContent()));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ($isSpoilerContentNode(node))\n\t\t\t{\n\t\t\t\tconst contentNode: SpoilerContentNode = node;\n\t\t\t\tif (this.getContentNode() === null)\n\t\t\t\t{\n\t\t\t\t\tsuper.append(contentNode);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.getContentNode().append(...contentNode.getChildren());\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ($isElementNode(node) || $isDecoratorNode(node))\n\t\t\t{\n\t\t\t\tthis.getContentNode().append(node);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.getContentNode().append($createParagraphNode().append(node));\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tgetTitleNode(): SpoilerTitleNode | null\n\t{\n\t\treturn this.getChildren()[0] || null;\n\t}\n\n\tgetContentNode(): SpoilerContentNode | null\n\t{\n\t\treturn this.getChildren()[1] || null;\n\t}\n\n\tsetOpen(open: boolean): void\n\t{\n\t\tconst writable = this.getWritable();\n\t\twritable.__open = open;\n\t}\n\n\tgetOpen(): boolean\n\t{\n\t\treturn this.getLatest().__open;\n\t}\n\n\ttoggleOpen(): void\n\t{\n\t\tthis.setOpen(!this.getOpen());\n\t}\n}\n\nexport function $createSpoiler(isOpen: boolean, title: string = Loc.getMessage('TEXT_EDITOR_SPOILER_TITLE')): SpoilerNode\n{\n\treturn $createSpoilerNode(isOpen).append(\n\t\t$createSpoilerTitleNode().append($createSpoilerTitleTextNode(title)),\n\t\t$createSpoilerContentNode(),\n\t);\n}\n\nexport function $createSpoilerNode(isOpen: boolean): SpoilerNode\n{\n\treturn new SpoilerNode(isOpen);\n}\n\nexport function $isSpoilerNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof SpoilerNode;\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport {\n\t$createParagraphNode,\n\t$isTextNode,\n\t$hasUpdateTag,\n\t$isRootNode,\n\tParagraphNode,\n\ttype RangeSelection,\n\ttype NodeKey,\n\ttype SerializedParagraphNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMConversion,\n} from 'ui.lexical.core';\n\nimport { NewLineMode } from '../../constants';\nimport type { NewLineModeType } from '../../types/new-line-mode-type';\n\nexport type SerializedCustomParagraphNode = SerializedParagraphNode & {\n\tmode: NewLineModeType,\n}\n\nexport class CustomParagraphNode extends ParagraphNode\n{\n\t__mode: NewLineModeType = NewLineMode.MIXED;\n\n\tconstructor(__mode: NewLineModeType, key?: NodeKey)\n\t{\n\t\tsuper(key);\n\t\tthis.__mode = __mode;\n\t}\n\n\tstatic getType(): string\n\t{\n\t\treturn 'custom-paragraph';\n\t}\n\n\tstatic clone(node: CustomParagraphNode): CustomParagraphNode\n\t{\n\t\treturn new CustomParagraphNode(node.__mode, node.__key);\n\t}\n\n\tinsertNewAfter(selection: RangeSelection, restoreSelection: boolean): ParagraphNode\n\t{\n\t\tif (this.__mode === NewLineMode.PARAGRAPH)\n\t\t{\n\t\t\treturn super.insertNewAfter(selection, restoreSelection);\n\t\t}\n\n\t\tif (this.__mode === NewLineMode.MIXED)\n\t\t{\n\t\t\tconst children = this.getChildren();\n\t\t\tconst childrenLength = children.length;\n\n\t\t\tif (\n\t\t\t\tchildrenLength >= 1\n\t\t\t\t&& children[childrenLength - 1].getTextContent() === '\\n'\n\t\t\t\t&& selection.isCollapsed()\n\t\t\t\t&& selection.anchor.key === this.__key\n\t\t\t\t&& selection.anchor.offset === childrenLength\n\t\t\t)\n\t\t\t{\n\t\t\t\tchildren[childrenLength - 1].remove();\n\t\t\t\tconst newElement = $createParagraphNode();\n\t\t\t\tthis.insertAfter(newElement, restoreSelection);\n\n\t\t\t\treturn newElement;\n\t\t\t}\n\n\t\t\tif ($hasUpdateTag('paste'))\n\t\t\t{\n\t\t\t\treturn super.insertNewAfter(selection, restoreSelection);\n\t\t\t}\n\t\t}\n\n\t\tselection.insertLineBreak();\n\n\t\treturn null;\n\t}\n\n\t// createDOM(config) {\n\t// \tconst dom = super.createDOM(config);\n\t// \tdom.style = \"border: 1px dashed tomato\";\n\t//\n\t// \treturn dom;\n\t// }\n\n\texportJSON(): SerializedCustomParagraphNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\tmode: this.__mode,\n\t\t\ttype: 'custom-paragraph',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\tp: (node: Node): DOMConversion => ({\n\t\t\t\tconversion: (element: HTMLElement): DOMConversionOutput => {\n\t\t\t\t\treturn { node: $createParagraphNode() };\n\t\t\t\t},\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t\th1: (node: Node): DOMConversion => ({\n\t\t\t\tconversion: convertHeadingElement,\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t\th2: (node: Node): DOMConversion => ({\n\t\t\t\tconversion: convertHeadingElement,\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t\th3: (node: Node): DOMConversion => ({\n\t\t\t\tconversion: convertHeadingElement,\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t\th4: (node: Node): DOMConversion => ({\n\t\t\t\tconversion: convertHeadingElement,\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t\th5: (node: Node): DOMConversion => ({\n\t\t\t\tconversion: convertHeadingElement,\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t\th6: (node: Node): DOMConversion => ({\n\t\t\t\tconversion: convertHeadingElement,\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t};\n\t}\n\n\tcollapseAtStart(): boolean\n\t{\n\t\tconst children = this.getChildren();\n\t\t// If we have an empty (trimmed) first paragraph and try and remove it,\n\t\t// delete the paragraph as long as we have another sibling to go to\n\t\tif (\n\t\t\tchildren.length === 0\n\t\t\t|| ($isTextNode(children[0]) && children[0].getTextContent().trim() === '')\n\t\t)\n\t\t{\n\t\t\tconst nextSibling = this.getNextSibling();\n\t\t\tif (nextSibling !== null)\n\t\t\t{\n\t\t\t\tthis.selectNext();\n\t\t\t\tthis.remove();\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst prevSibling = this.getPreviousSibling();\n\t\t\tif (prevSibling !== null)\n\t\t\t{\n\t\t\t\tthis.selectPrevious();\n\t\t\t\tthis.remove();\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst parentNode = this.getParent();\n\t\t\tif (\n\t\t\t\tparentNode !== null\n\t\t\t\t&& !$isRootNode(parentNode)\n\t\t\t\t&& Object.getPrototypeOf(parentNode).hasOwnProperty('collapseAtStart'))\n\t\t\t{\n\t\t\t\treturn parentNode.collapseAtStart();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tstatic importJSON(serializedParagraphNode: SerializedCustomParagraphNode): ParagraphNode\n\t{\n\t\treturn super.importJSON(serializedParagraphNode);\n\t}\n}\n\nfunction convertHeadingElement(element: HTMLElement): DOMConversionOutput\n{\n\treturn {\n\t\tnode: $createParagraphNode(),\n\t\tforChild: (lexicalNode) => {\n\t\t\tif ($isTextNode(lexicalNode))\n\t\t\t{\n\t\t\t\tlexicalNode.toggleFormat('bold');\n\t\t\t}\n\n\t\t\treturn lexicalNode;\n\t\t},\n\t};\n}\n","\nimport { BBCodeNode, type BBCodeElementNode } from 'ui.bbcode.model';\nimport { $insertDataTransferForPlainText } from 'ui.lexical.clipboard';\nimport type { ElementNode } from 'ui.lexical.core';\nimport {\n\tRootNode,\n\tParagraphNode,\n\t$createParagraphNode,\n\t$isParagraphNode,\n\tcreateCommand,\n\t$getSelection,\n\t$isRangeSelection,\n\tCOMMAND_PRIORITY_EDITOR,\n\tCOMMAND_PRIORITY_LOW,\n\tKEY_ARROW_UP_COMMAND,\n\tKEY_ARROW_LEFT_COMMAND,\n\tKEY_ARROW_DOWN_COMMAND,\n\tKEY_ARROW_RIGHT_COMMAND,\n\tPASTE_COMMAND,\n\ttype LexicalNode,\n\ttype RangeSelection,\n\ttype LexicalCommand,\n\ttype LexicalNodeReplacement,\n} from 'ui.lexical.core';\n\nimport { $setBlocksType } from 'ui.lexical.selection';\nimport { $findMatchingParent } from 'ui.lexical.utils';\n\nimport type {\n\tBBCodeConversion,\n\tBBCodeConversionFn,\n\tBBCodeConversionOutput,\n\tBBCodeExportConversion,\n\tBBCodeExportOutput,\n\tBBCodeImportConversion,\n} from '../../bbcode';\nimport { NewLineMode } from '../../constants';\nimport { wrapTextInParagraph } from '../../helpers/wrap-text-in-paragraph';\n\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nimport BasePlugin from '../base-plugin';\n\nimport { $isCodeNode } from '../code';\nimport { $isQuoteNode } from '../quote';\nimport { $isSpoilerNode } from '../spoiler';\nimport { CustomParagraphNode } from './custom-paragraph-node';\n\nimport { type TextEditor } from '../../text-editor';\n\nimport './paragraph.css';\n\n/** @memberof BX.UI.TextEditor.Plugins.Paragraph */\nexport const FORMAT_PARAGRAPH_COMMAND: LexicalCommand = createCommand('FORMAT_PARAGRAPH_COMMAND');\n\nexport class ParagraphPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerCommands();\n\t\tthis.#registerListeners();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Paragraph';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode> | LexicalNodeReplacement>\n\t{\n\t\treturn [\n\t\t\tCustomParagraphNode,\n\t\t\t{\n\t\t\t\treplace: ParagraphNode,\n\t\t\t\twith: (node: ParagraphNode) => {\n\t\t\t\t\treturn new CustomParagraphNode(editor.getNewLineMode());\n\t\t\t\t},\n\t\t\t\twithClass: CustomParagraphNode,\n\t\t\t},\n\t\t];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tp: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => convertParagraphNode(node),\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tleft: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => convertParagraphNode(node),\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tright: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => convertParagraphNode(node),\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tcenter: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => convertParagraphNode(node),\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tjustify: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => convertParagraphNode(node),\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tparagraph: (lexicalNode: LexicalNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'p' }),\n\t\t\t\t};\n\t\t\t},\n\t\t\t'custom-paragraph': (lexicalNode: LexicalNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'p' }),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: CustomParagraphNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\troot: '#root',\n\t\t\t\ttab: '#tab',\n\t\t\t\ttext: '#text',\n\t\t\t\tparagraph: 'p',\n\t\t\t\t'custom-paragraph': 'p',\n\t\t\t\tlinebreak: '#linebreak',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tFORMAT_PARAGRAPH_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif ($isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\t$setBlocksType(selection, () => $createParagraphNode());\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerNodeTransform(RootNode, (root: RootNode) => {\n\t\t\t\tconst lastChild = root.getLastChild();\n\t\t\t\tif (!$isParagraphNode(lastChild))\n\t\t\t\t{\n\t\t\t\t\troot.append($createParagraphNode());\n\t\t\t\t}\n\t\t\t}),\n\n\t\t\t// When a block node is the first child pressing up/left arrow will insert paragraph\n\t\t\t// above it to allow adding more content. It's similar what $insertBlockNode\n\t\t\t// (mainly for decorators), except it'll always be possible to continue adding\n\t\t\t// new content even if leading paragraph is accidentally deleted\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_ARROW_UP_COMMAND,\n\t\t\t\tthis.#handleEscapeUp.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_ARROW_LEFT_COMMAND,\n\t\t\t\tthis.#handleEscapeUp.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\t// When a block node is the last child pressing down/right arrow will insert paragraph\n\t\t\t// below it to allow adding more content. It's similar what $insertBlockNode\n\t\t\t// (mainly for decorators), except it'll always be possible to continue adding\n\t\t\t// new content even if trailing paragraph is accidentally deleted\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_ARROW_DOWN_COMMAND,\n\t\t\t\tthis.#handleEscapeDown.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_ARROW_RIGHT_COMMAND,\n\t\t\t\tthis.#handleEscapeDown.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tPASTE_COMMAND,\n\t\t\t\tthis.#handlePaste.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#isBlockNode(node: LexicalNode | null | undefined): boolean\n\t{\n\t\treturn $isQuoteNode(node) || $isCodeNode(node) || $isSpoilerNode(node);\n\t}\n\n\t#handlePaste(event): boolean\n\t{\n\t\tif (this.getEditor().getNewLineMode() === NewLineMode.PARAGRAPH)\n\t\t{\n\t\t\t// use a build-in algorithm (Rich Text Plugin)\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.getEditor().getNewLineMode() === NewLineMode.LINE_BREAK)\n\t\t{\n\t\t\tevent.preventDefault();\n\t\t\tthis.getEditor().update(\n\t\t\t\t() => {\n\t\t\t\t\tconst selection = $getSelection();\n\t\t\t\t\tconst { clipboardData } = event;\n\t\t\t\t\tif (clipboardData !== null && $isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\t$insertDataTransferForPlainText(clipboardData, selection);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: 'paste',\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t// Mixed Mode\n\t\tconst clipboardData: DataTransfer = event.clipboardData;\n\t\tif (\n\t\t\t!clipboardData\n\t\t\t|| clipboardData.items.length !== 1\n\t\t\t|| (clipboardData.items[0].type !== 'text/plain' && clipboardData.items[0].type !== 'text/uri-list')\n\t\t)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst text = clipboardData.getData('text/plain') || clipboardData.getData('text/uri-list');\n\t\tconst hasLineBreaks = /\\n/.test(text);\n\t\tif (!hasLineBreaks)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst html = wrapTextInParagraph(text);\n\t\tconst dataTransfer = new DataTransfer();\n\t\tdataTransfer.setData('text/plain', clipboardData.getData('text/plain'));\n\t\tdataTransfer.setData('text/html', html);\n\t\tconst pasteEvent = new ClipboardEvent('paste', {\n\t\t\tclipboardData: dataTransfer,\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t});\n\n\t\tif (pasteEvent.clipboardData.items.length === 0)\n\t\t{\n\t\t\t// Firefox\n\t\t\tpasteEvent.clipboardData.setData('text/plain', clipboardData.getData('text/plain'));\n\t\t\tpasteEvent.clipboardData.setData('text/html', html);\n\t\t}\n\n\t\tthis.getEditor().getEditableContainer().dispatchEvent(pasteEvent);\n\n\t\treturn true;\n\t}\n\n\t#handleEscapeUp(): boolean\n\t{\n\t\tconst selection: RangeSelection = $getSelection();\n\t\tif ($isRangeSelection(selection) && selection.isCollapsed() && selection.anchor.offset === 0)\n\t\t{\n\t\t\tconst container: ElementNode = $findMatchingParent(selection.anchor.getNode(), this.#isBlockNode);\n\t\t\tif (this.#isBlockNode(container))\n\t\t\t{\n\t\t\t\tconst parent: ElementNode = container.getParent();\n\t\t\t\tif (\n\t\t\t\t\tparent !== null\n\t\t\t\t\t&& parent.getFirstChild() === container\n\t\t\t\t\t&& (\n\t\t\t\t\t\tselection.anchor.key === container.getFirstDescendant()?.getKey()\n\t\t\t\t\t\t|| selection.anchor.key === container.getKey()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tcontainer.insertBefore($createParagraphNode());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#handleEscapeDown(): boolean\n\t{\n\t\tconst selection: RangeSelection = $getSelection();\n\t\tif ($isRangeSelection(selection) && selection.isCollapsed())\n\t\t{\n\t\t\tconst container: ElementNode = $findMatchingParent(selection.anchor.getNode(), this.#isBlockNode);\n\t\t\tif (this.#isBlockNode(container))\n\t\t\t{\n\t\t\t\tconst parent: ElementNode = container.getParent();\n\t\t\t\tif (parent !== null && parent.getLastChild() === container)\n\t\t\t\t{\n\t\t\t\t\tconst firstDescendant = container.getFirstDescendant();\n\t\t\t\t\tconst lastDescendant = container.getLastDescendant();\n\t\t\t\t\tif (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tlastDescendant !== null\n\t\t\t\t\t\t\t&& selection.anchor.key === lastDescendant.getKey()\n\t\t\t\t\t\t\t&& selection.anchor.offset === lastDescendant.getTextContentSize()\n\t\t\t\t\t\t) || (\n\t\t\t\t\t\t\tfirstDescendant !== null\n\t\t\t\t\t\t\t&& selection.anchor.key === firstDescendant.getKey()\n\t\t\t\t\t\t\t&& selection.anchor.offset === firstDescendant.getTextContentSize()\n\t\t\t\t\t\t) || (\n\t\t\t\t\t\t\tselection.anchor.key === container.getKey()\n\t\t\t\t\t\t\t&& selection.anchor.offset === container.getTextContentSize()\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tcontainer.insertAfter($createParagraphNode());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nfunction convertParagraphNode(bbcodeNode: BBCodeNode): BBCodeConversionOutput\n{\n\treturn {\n\t\tnode: $createParagraphNode(),\n\t\t// after: (childLexicalNodes: Array<LexicalNode>): Array<LexicalNode> => {\n\t\t// \treturn trimLineBreaks(childLexicalNodes);\n\t\t// },\n\t};\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { UNFORMATTED } from '../../constants';\n\nimport {\n\tTextNode,\n\t$applyNodeReplacement,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype SerializedTextNode,\n\ttype EditorThemeClasses,\n} from 'ui.lexical.core';\n\nimport { addClassNamesToElement, removeClassNamesFromElement } from 'ui.lexical.utils';\n\nimport { $createCodeNode, type CodeNode } from './code-node';\n\ntype SerializedCodeTokenNode = { highlightType: string | null | undefined } & SerializedTextNode;\n\nexport class CodeTokenNode extends TextNode\n{\n\t/** @internal */\n\t__highlightType: string | null | undefined;\n\t__flags: number = UNFORMATTED;\n\n\tconstructor(text: string, highlightType?: string | null | undefined, key?: NodeKey)\n\t{\n\t\tsuper(text, key);\n\t\tthis.__highlightType = highlightType;\n\t}\n\n\tstatic getType(): string\n\t{\n\t\treturn 'code-token';\n\t}\n\n\tstatic clone(node: CodeTokenNode): CodeTokenNode\n\t{\n\t\treturn new CodeTokenNode(\n\t\t\tnode.__text,\n\t\t\tnode.__highlightType || undefined,\n\t\t\tnode.__key,\n\t\t);\n\t}\n\n\tgetHighlightType(): string | null | undefined\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__highlightType;\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement\n\t{\n\t\tconst element = super.createDOM(config);\n\t\tconst className = getHighlightThemeClass(\n\t\t\tconfig.theme,\n\t\t\tthis.__highlightType,\n\t\t);\n\n\t\taddClassNamesToElement(element, className);\n\n\t\treturn element;\n\t}\n\n\tupdateDOM(prevNode: CodeTokenNode, dom: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\tconst update = super.updateDOM(prevNode, dom, config);\n\t\tconst prevClassName = getHighlightThemeClass(config.theme, prevNode.__highlightType);\n\t\tconst nextClassName = getHighlightThemeClass(config.theme, this.__highlightType);\n\t\tif (prevClassName !== nextClassName)\n\t\t{\n\t\t\tif (prevClassName)\n\t\t\t{\n\t\t\t\tremoveClassNamesFromElement(dom, prevClassName);\n\t\t\t}\n\n\t\t\tif (nextClassName)\n\t\t\t{\n\t\t\t\taddClassNamesToElement(dom, nextClassName);\n\t\t\t}\n\t\t}\n\n\t\treturn update;\n\t}\n\n\tstatic importJSON(serializedNode: SerializedCodeTokenNode): CodeTokenNode\n\t{\n\t\tconst node = $createCodeTokenNode(serializedNode.text, serializedNode.highlightType);\n\t\tnode.setFormat(serializedNode.format);\n\t\tnode.setDetail(serializedNode.detail);\n\t\tnode.setMode(serializedNode.mode);\n\t\tnode.setStyle(serializedNode.style);\n\n\t\treturn node;\n\t}\n\n\texportJSON(): SerializedCodeTokenNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\thighlightType: this.getHighlightType(),\n\t\t\ttype: 'code-token',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\t// Prevent formatting (bold, underline, etc)\n\tsetFormat(format: number): this\n\t{\n\t\treturn this;\n\t}\n\n\tisParentRequired(): true\n\t{\n\t\treturn true;\n\t}\n\n\tcreateParentElementNode(): CodeNode\n\t{\n\t\treturn $createCodeNode();\n\t}\n}\n\nfunction getHighlightThemeClass(\n\ttheme: EditorThemeClasses,\n\thighlightType: string | null | undefined,\n): string | null | undefined\n{\n\treturn (\n\t\thighlightType\n\t\t&& theme\n\t\t&& theme.codeHighlight\n\t\t&& theme.codeHighlight[highlightType]\n\t);\n}\n\nexport function $createCodeTokenNode(text: string, highlightType?: string | null | undefined): CodeTokenNode\n{\n\treturn $applyNodeReplacement(new CodeTokenNode(text, highlightType));\n}\n\nexport function $isCodeTokenNode(node: LexicalNode | CodeTokenNode | null | undefined): boolean\n{\n\treturn node instanceof CodeTokenNode;\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { Type, Dom } from 'main.core';\n\nimport {\n\tElementNode,\n\t$applyNodeReplacement,\n\t$createParagraphNode,\n\t$isTabNode,\n\t$isTextNode,\n\t$createLineBreakNode,\n\t$createTabNode,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype SerializedElementNode,\n\ttype LexicalEditor,\n\ttype RangeSelection,\n\ttype ParagraphNode,\n\ttype TabNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n} from 'ui.lexical.core';\nimport { UNFORMATTED } from '../../constants';\n\nimport { type CodeTokenNode, $isCodeTokenNode, $createCodeTokenNode } from './code-token-node';\nimport { getFirstCodeNodeOfLine } from './code-plugin';\n\nexport class CodeNode extends ElementNode\n{\n\t__language = 'lexical-hack';\n\t__flags: number = UNFORMATTED;\n\n\tstatic getType(): string\n\t{\n\t\treturn 'code';\n\t}\n\n\tstatic clone(node: CodeNode): CodeNode\n\t{\n\t\treturn new CodeNode(node.__key);\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLElement\n\t{\n\t\tconst element: HTMLElement = document.createElement('code');\n\t\telement.setAttribute('spellcheck', 'false');\n\n\t\tif (Type.isStringFilled(config?.theme?.code))\n\t\t{\n\t\t\tDom.addClass(element, config.theme.code);\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tupdateDOM(prevNode: CodeNode, anchor: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\texportDOM(editor: LexicalEditor): DOMExportOutput\n\t{\n\t\tconst element = document.createElement('pre');\n\t\telement.setAttribute('spellcheck', 'false');\n\n\t\tif (Type.isStringFilled(editor._config?.theme?.code))\n\t\t{\n\t\t\tDom.addClass(element, editor._config.theme.code);\n\t\t}\n\n\t\treturn { element };\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\t// Typically <pre> is used for code blocks, and <code> for inline code styles\n\t\t\t// but if it's a multi line <code> we'll create a block. Pass through to\n\t\t\t// inline format handled by TextNode otherwise.\n\t\t\tcode: (node: Node) => {\n\t\t\t\tconst isMultiLine = (\n\t\t\t\t\tnode.textContent !== null\n\t\t\t\t\t&& (/\\r?\\n/.test(node.textContent) || hasChildDOMNodeTag(node, 'BR'))\n\t\t\t\t);\n\n\t\t\t\treturn isMultiLine\n\t\t\t\t\t? {\n\t\t\t\t\t\tconversion: convertPreElement,\n\t\t\t\t\t\tpriority: 1,\n\t\t\t\t\t}\n\t\t\t\t\t: null\n\t\t\t\t;\n\t\t\t},\n\t\t\tdiv: (node: Node) => ({\n\t\t\t\tconversion: convertDivElement,\n\t\t\t\tpriority: 1,\n\t\t\t}),\n\t\t\tpre: (node: Node) => ({\n\t\t\t\tconversion: convertPreElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\ttable: (node: Node) => {\n\t\t\t\tconst table: HTMLTableElement = node;\n\t\t\t\t// domNode is a <table> since we matched it by nodeName\n\t\t\t\tif (isGitHubCodeTable(table))\n\t\t\t\t{\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconversion: convertTableElement,\n\t\t\t\t\t\tpriority: 3,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\ttd: (node: Node) => {\n\t\t\t\t// element is a <td> since we matched it by nodeName\n\t\t\t\tconst td: HTMLTableCellElement = node;\n\t\t\t\tconst table: HTMLTableElement | null = td.closest('table');\n\n\t\t\t\tif (isGitHubCodeCell(td))\n\t\t\t\t{\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconversion: convertTableCellElement,\n\t\t\t\t\t\tpriority: 3,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (table && isGitHubCodeTable(table))\n\t\t\t\t{\n\t\t\t\t\t// Return a no-op if it's a table cell in a code table, but not a code line.\n\t\t\t\t\t// Otherwise it'll fall back to the T\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconversion: convertCodeNoop,\n\t\t\t\t\t\tpriority: 3,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\ttr: (node: Node) => {\n\t\t\t\t// element is a <tr> since we matched it by nodeName\n\t\t\t\tconst tr: HTMLTableCellElement = node;\n\t\t\t\tconst table: HTMLTableElement | null = tr.closest('table');\n\t\t\t\tif (table && isGitHubCodeTable(table))\n\t\t\t\t{\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconversion: convertCodeNoop,\n\t\t\t\t\t\tpriority: 3,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t};\n\t}\n\n\tstatic importJSON(serializedNode: SerializedElementNode): CodeNode\n\t{\n\t\tconst node = $createCodeNode();\n\t\tnode.setFormat(serializedNode.format);\n\t\tnode.setIndent(serializedNode.indent);\n\t\tnode.setDirection(serializedNode.direction);\n\n\t\treturn node;\n\t}\n\n\texportJSON(): SerializedElementNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: 'code',\n\t\t};\n\t}\n\n\tcanIndent(): false\n\t{\n\t\treturn false;\n\t}\n\n\tcanReplaceWith(replacement: LexicalNode): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tisInline(): false\n\t{\n\t\treturn false;\n\t}\n\n\tcollapseAtStart(selection: RangeSelection): true\n\t{\n\t\tconst paragraph = $createParagraphNode();\n\t\tconst children = this.getChildren();\n\t\tchildren.forEach((child) => paragraph.append(child));\n\t\tthis.replace(paragraph);\n\n\t\treturn true;\n\t}\n\n\tinsertNewAfter(selection: RangeSelection, restoreSelection = true): null | ParagraphNode | CodeTokenNode | TabNode\n\t{\n\t\tconst children = this.getChildren();\n\t\tconst childrenLength = children.length;\n\n\t\tif (\n\t\t\tchildrenLength >= 2\n\t\t\t&& children[childrenLength - 1].getTextContent() === '\\n'\n\t\t\t&& children[childrenLength - 2].getTextContent() === '\\n'\n\t\t\t&& selection.isCollapsed()\n\t\t\t&& selection.anchor.key === this.__key\n\t\t\t&& selection.anchor.offset === childrenLength\n\t\t)\n\t\t{\n\t\t\tchildren[childrenLength - 1].remove();\n\t\t\tchildren[childrenLength - 2].remove();\n\t\t\tconst newElement = $createParagraphNode();\n\t\t\tthis.insertAfter(newElement, restoreSelection);\n\n\t\t\treturn newElement;\n\t\t}\n\n\t\t// If the selection is within the codeblock, find all leading tabs and\n\t\t// spaces of the current line. Create a new line that has all those\n\t\t// tabs and spaces, such that leading indentation is preserved.\n\t\tconst { anchor, focus } = selection;\n\t\tconst firstPoint = anchor.isBefore(focus) ? anchor : focus;\n\t\tconst firstSelectionNode = firstPoint.getNode();\n\t\tif ($isTextNode(firstSelectionNode))\n\t\t{\n\t\t\tlet node = getFirstCodeNodeOfLine(firstSelectionNode);\n\t\t\tconst insertNodes = [];\n\t\t\t// eslint-disable-next-line no-constant-condition\n\t\t\twhile (true)\n\t\t\t{\n\t\t\t\tif ($isTabNode(node))\n\t\t\t\t{\n\t\t\t\t\tinsertNodes.push($createTabNode());\n\t\t\t\t\tnode = node.getNextSibling();\n\t\t\t\t}\n\t\t\t\telse if ($isCodeTokenNode(node))\n\t\t\t\t{\n\t\t\t\t\tlet spaces = 0;\n\t\t\t\t\tconst text = node.getTextContent();\n\t\t\t\t\tconst textSize = node.getTextContentSize();\n\t\t\t\t\twhile (spaces < textSize && text[spaces] === ' ')\n\t\t\t\t\t{\n\t\t\t\t\t\tspaces++;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (spaces !== 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tinsertNodes.push($createCodeTokenNode(' '.repeat(spaces)));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (spaces !== textSize)\n\t\t\t\t\t{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = node.getNextSibling();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst split = firstSelectionNode.splitText(anchor.offset)[0];\n\t\t\tconst x = anchor.offset === 0 ? 0 : 1;\n\t\t\tconst index = split.getIndexWithinParent() + x;\n\t\t\tconst codeNode = firstSelectionNode.getParentOrThrow();\n\t\t\tconst nodesToInsert = [$createLineBreakNode(), ...insertNodes];\n\t\t\tcodeNode.splice(index, 0, nodesToInsert);\n\t\t\tconst last = insertNodes[insertNodes.length - 1];\n\t\t\tif (last)\n\t\t\t{\n\t\t\t\tlast.select();\n\t\t\t}\n\t\t\telse if (anchor.offset === 0)\n\t\t\t{\n\t\t\t\tsplit.selectPrevious();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tsplit.getNextSibling()?.selectNext(0, 0);\n\t\t\t}\n\t\t}\n\n\t\tif ($isCodeNode(firstSelectionNode))\n\t\t{\n\t\t\tconst { offset } = selection.anchor;\n\t\t\tfirstSelectionNode.splice(offset, 0, [$createLineBreakNode()]);\n\t\t\tfirstSelectionNode.select(offset + 1, offset + 1);\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\nexport function $createCodeNode(): CodeNode\n{\n\treturn $applyNodeReplacement(new CodeNode());\n}\n\nexport function $isCodeNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof CodeNode;\n}\n\nfunction convertPreElement(domNode: Node): DOMConversionOutput\n{\n\treturn { node: $createCodeNode() };\n}\n\nfunction convertDivElement(domNode: Node): DOMConversionOutput\n{\n\t// domNode is a <div> since we matched it by nodeName\n\tconst div = domNode;\n\tconst isCode = isCodeElement(div);\n\tif (!isCode && !isCodeChildElement(div))\n\t{\n\t\treturn {\n\t\t\tnode: null,\n\t\t};\n\t}\n\n\treturn {\n\t\tafter: (childLexicalNodes) => {\n\t\t\tconst domParent = domNode.parentNode;\n\t\t\tif (domParent !== null && domNode !== domParent.lastChild)\n\t\t\t{\n\t\t\t\tchildLexicalNodes.push($createLineBreakNode());\n\t\t\t}\n\n\t\t\treturn childLexicalNodes;\n\t\t},\n\t\tnode: isCode ? $createCodeNode() : null,\n\t};\n}\n\nfunction convertTableElement(): DOMConversionOutput\n{\n\treturn { node: $createCodeNode() };\n}\n\nfunction convertCodeNoop(): DOMConversionOutput\n{\n\treturn { node: null };\n}\n\nfunction convertTableCellElement(domNode: Node): DOMConversionOutput\n{\n\t// domNode is a <td> since we matched it by nodeName\n\tconst cell = domNode;\n\n\treturn {\n\t\tafter: (childLexicalNodes) => {\n\t\t\tif (cell.parentNode && cell.parentNode.nextSibling)\n\t\t\t{\n\t\t\t\t// Append newline between code lines\n\t\t\t\tchildLexicalNodes.push($createLineBreakNode());\n\t\t\t}\n\n\t\t\treturn childLexicalNodes;\n\t\t},\n\t\tnode: null,\n\t};\n}\n\nfunction isCodeElement(div: HTMLElement): boolean\n{\n\treturn div.style.fontFamily.match('monospace') !== null;\n}\n\nfunction isCodeChildElement(node: HTMLElement): boolean\n{\n\tlet parent = node.parentElement;\n\twhile (parent !== null)\n\t{\n\t\tif (isCodeElement(parent))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tparent = parent.parentElement;\n\t}\n\n\treturn false;\n}\n\nfunction isGitHubCodeCell(cell: HTMLTableCellElement): boolean\n{\n\treturn cell.classList.contains('js-file-line');\n}\n\nfunction isGitHubCodeTable(table: HTMLTableElement): boolean\n{\n\treturn table.classList.contains('js-file-line-container');\n}\n\nfunction hasChildDOMNodeTag(node: Node, tagName: string): boolean\n{\n\tlet hasChild = false;\n\tfor (const child of node.childNodes)\n\t{\n\t\tif (Type.isElementNode(child) && child.tagName === tagName)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\thasChild = hasChildDOMNodeTag(child, tagName);\n\t}\n\n\treturn hasChild;\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { Loc, Type } from 'main.core';\nimport { CodeParser, type CodeToken } from 'ui.code-parser';\nimport { $insertDataTransferForPlainText } from 'ui.lexical.clipboard';\n\nimport {\n\tKEY_TAB_COMMAND,\n\tINSERT_TAB_COMMAND,\n\tFORMAT_TEXT_COMMAND,\n\tPASTE_COMMAND,\n\tCOMMAND_PRIORITY_LOW,\n\tCOMMAND_PRIORITY_NORMAL,\n\tCOMMAND_PRIORITY_HIGH,\n\tINDENT_CONTENT_COMMAND,\n\tOUTDENT_CONTENT_COMMAND,\n\tCOMMAND_PRIORITY_EDITOR,\n\tTextNode,\n\t$createTabNode,\n\t$insertNodes,\n\t$getSelection,\n\t$isRangeSelection,\n\t$isTabNode,\n\t$isLineBreakNode,\n\t$getNodeByKey,\n\t$createLineBreakNode,\n\t$createTextNode,\n\t$isTextNode,\n\tcreateCommand,\n\ttype RangeSelection,\n\ttype LexicalCommand,\n\ttype LineBreakNode,\n\ttype TabNode,\n\ttype LexicalNode,\n\ttype NodeKey,\n} from 'ui.lexical.core';\n\nimport { $setBlocksType } from 'ui.lexical.selection';\nimport { $findMatchingParent, $insertNodeToNearestRoot } from 'ui.lexical.utils';\n\nimport { getSelectedNode } from '../../helpers/get-selected-node';\n\nimport BasePlugin from '../base-plugin';\nimport Button from '../../toolbar/button';\nimport { FORMAT_PARAGRAPH_COMMAND } from '../paragraph';\nimport { CodeNode, $isCodeNode, $createCodeNode } from './code-node';\nimport { CodeTokenNode, $isCodeTokenNode, $createCodeTokenNode } from './code-token-node';\n\nimport { type TextEditor } from '../../text-editor';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\nimport type {\n\tBBCodeConversion,\n\tBBCodeConversionFn,\n\tBBCodeExportConversion,\n\tBBCodeExportOutput,\n\tBBCodeImportConversion,\n} from '../../bbcode';\n\nexport type InsertCodePayload = {\n\tcontent?: string,\n};\n\nexport const FORMAT_CODE_COMMAND: LexicalCommand = createCommand('FORMAT_CODE_COMMAND');\nexport const INSERT_CODE_COMMAND: LexicalCommand<InsertCodePayload> = createCommand('INSERT_CODE_COMMAND');\n\nexport class CodePlugin extends BasePlugin\n{\n\t#nodesCurrentlyHighlighting = new Set();\n\t#codeParser = new CodeParser();\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerCommands();\n\t\tthis.#registerComponents();\n\t\tthis.#registerListeners();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Code';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [CodeNode, CodeTokenNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tcode: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createCodeNode(),\n\t\t\t\t\t\tafter: (childLexicalNodes: Array<LexicalNode>): Array<LexicalNode> => {\n\t\t\t\t\t\t\t// const childNodes = trimLineBreaks(childLexicalNodes);\n\t\t\t\t\t\t\tconst content = childLexicalNodes.map(\n\t\t\t\t\t\t\t\t(childNode: LexicalNode) => childNode.getTextContent(),\n\t\t\t\t\t\t\t).join('');\n\n\t\t\t\t\t\t\t// return getCodeTokenNodes(parse(content));\n\t\t\t\t\t\t\treturn [$createTextNode(content)];\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tcode: (lexicalNode: LexicalNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'code' }),\n\t\t\t\t};\n\t\t\t},\n\t\t\t'code-token': (lexicalNode: LexicalNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createText({\n\t\t\t\t\t\tcontent: lexicalNode.getTextContent(),\n\t\t\t\t\t\tencode: false,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: CodeNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\tcode: 'code',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('code', () => {\n\t\t\tconst button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --enclose-text-in-code-tag\"></span>');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_CODE'));\n\t\t\tbutton.setBlockType('code');\n\t\t\tbutton.subscribe('onClick', () => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\tif (button.isActive())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_PARAGRAPH_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_CODE_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tconst handleTextNodeTransform = this.#handleTextNodeTransform.bind(this);\n\n\t\tthis.cleanUpRegister(\n\t\t\t// Prevent formatting\n\t\t\tthis.getEditor().registerNodeTransform(CodeNode, this.#handleCodeNodeTransform.bind(this)),\n\t\t\tthis.getEditor().registerNodeTransform(TextNode, handleTextNodeTransform),\n\t\t\tthis.getEditor().registerNodeTransform(CodeTokenNode, handleTextNodeTransform),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tFORMAT_TEXT_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst node = getSelectedNode(selection);\n\t\t\t\t\t// const parent = node.getParent();\n\n\t\t\t\t\treturn $isCodeTokenNode(node) || $isCodeNode(node);\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_TAB_COMMAND,\n\t\t\t\t(event) => {\n\t\t\t\t\tconst command = this.#handleTab(event.shiftKey);\n\t\t\t\t\tif (command === null)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.getEditor().dispatchCommand(command);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_TAB_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tconst selection = $getSelection();\n\t\t\t\t\tif (!$isSelectionInCode(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$insertNodes([$createTabNode()]);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINDENT_CONTENT_COMMAND,\n\t\t\t\t(payload): boolean => this.#handleMultilineIndent(INDENT_CONTENT_COMMAND),\n\t\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tOUTDENT_CONTENT_COMMAND,\n\t\t\t\t(payload): boolean => this.#handleMultilineIndent(OUTDENT_CONTENT_COMMAND),\n\t\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tPASTE_COMMAND,\n\t\t\t\t(event) => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (\n\t\t\t\t\t\t!$isRangeSelection(selection)\n\t\t\t\t\t\t|| !(event instanceof ClipboardEvent)\n\t\t\t\t\t\t|| event.clipboardData === null\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst codeNode: CodeNode = $findMatchingParent(\n\t\t\t\t\t\tselection.anchor.getNode(),\n\t\t\t\t\t\t(node: LexicalNode) => $isCodeNode(node),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (codeNode)\n\t\t\t\t\t{\n\t\t\t\t\t\t$insertDataTransferForPlainText(event.clipboardData, selection);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_CODE_COMMAND,\n\t\t\t\t(payload: InsertCodePayload) => {\n\t\t\t\t\tconst codeNode = $createCodeNode();\n\t\t\t\t\tif (Type.isPlainObject(payload) && Type.isStringFilled(payload.content))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst tokenNodes = getCodeTokenNodes(this.#codeParser.parse(payload.content));\n\t\t\t\t\t\tcodeNode.append(...tokenNodes);\n\t\t\t\t\t\t$insertNodeToNearestRoot(codeNode);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t$insertNodeToNearestRoot(codeNode);\n\t\t\t\t\t\tcodeNode.selectEnd();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tFORMAT_CODE_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif ($isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (selection.isCollapsed())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$setBlocksType(selection, () => $createCodeNode());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst textContent = selection.getTextContent();\n\t\t\t\t\t\t\tconst codeNode = $createCodeNode();\n\t\t\t\t\t\t\tselection.insertNodes([codeNode]);\n\n\t\t\t\t\t\t\tconst newSelection: RangeSelection = $getSelection();\n\t\t\t\t\t\t\tif ($isRangeSelection(newSelection))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnewSelection.insertRawText(textContent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t);\n\t}\n\n\t#handleCodeNodeTransform(node: CodeNode): void\n\t{\n\t\tconst nodeKey = node.getKey();\n\t\tif (this.#nodesCurrentlyHighlighting.has(nodeKey))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#nodesCurrentlyHighlighting.add(nodeKey);\n\n\t\t// Using nested update call to pass `skipTransforms` since we don't want\n\t\t// each individual code-token node to be transformed again as it's already\n\t\t// in its final state\n\t\tthis.getEditor().update(\n\t\t\t() => {\n\t\t\t\tupdateAndRetainSelection(nodeKey, () => {\n\t\t\t\t\tconst currentNode = $getNodeByKey(nodeKey);\n\n\t\t\t\t\tif (!$isCodeNode(currentNode) || !currentNode.isAttached())\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst code = currentNode.getTextContent();\n\t\t\t\t\tconst codeTokenNodes = getCodeTokenNodes(this.#codeParser.parse(code));\n\t\t\t\t\tconst diffRange = getDiffRange(currentNode.getChildren(), codeTokenNodes);\n\n\t\t\t\t\tconst { from, to, nodesForReplacement } = diffRange;\n\t\t\t\t\tif (from !== to || nodesForReplacement.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tnode.splice(from, to - from, nodesForReplacement);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t},\n\t\t\t{\n\t\t\t\tonUpdate: () => {\n\t\t\t\t\tthis.#nodesCurrentlyHighlighting.delete(nodeKey);\n\t\t\t\t},\n\t\t\t\tskipTransforms: true,\n\t\t\t},\n\t\t);\n\t}\n\n\t#handleTextNodeTransform(node: TextNode)\n\t{\n\t\t// Since CodeNode has flat children structure we only need to check\n\t\t// if node's parent is a code node and run highlighting if so\n\t\tconst parentNode = node.getParent();\n\t\tif ($isCodeNode(parentNode))\n\t\t{\n\t\t\tthis.#handleCodeNodeTransform(parentNode);\n\t\t}\n\t\telse if ($isCodeTokenNode(node))\n\t\t{\n\t\t\t// When code block converted into paragraph or other element\n\t\t\t// code token nodes converted back to normal text\n\t\t\tnode.replace($createTextNode(node.__text));\n\t\t}\n\t}\n\n\t#handleTab(shiftKey: boolean): null | LexicalCommand<void>\n\t{\n\t\tconst selection = $getSelection();\n\t\tif (!$isRangeSelection(selection) || !$isSelectionInCode(selection))\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst indentOrOutdent = shiftKey ? OUTDENT_CONTENT_COMMAND : INDENT_CONTENT_COMMAND;\n\t\tconst tabOrOutdent = shiftKey ? OUTDENT_CONTENT_COMMAND : INSERT_TAB_COMMAND;\n\n\t\t// 1. If multiple lines selected: indent/outdent\n\t\tconst codeLines = $getCodeLines(selection);\n\t\tif (codeLines.length > 1)\n\t\t{\n\t\t\treturn indentOrOutdent;\n\t\t}\n\n\t\t// 2. If entire line selected: indent/outdent\n\t\tconst selectionNodes = selection.getNodes();\n\t\tconst firstNode = selectionNodes[0];\n\t\tif ($isCodeNode(firstNode))\n\t\t{\n\t\t\treturn indentOrOutdent;\n\t\t}\n\n\t\tconst firstOfLine = getFirstCodeNodeOfLine(firstNode);\n\t\tconst lastOfLine = getLastCodeNodeOfLine(firstNode);\n\t\tconst anchor = selection.anchor;\n\t\tconst focus = selection.focus;\n\t\tlet selectionFirst = null;\n\t\tlet selectionLast = null;\n\t\tif (focus.isBefore(anchor))\n\t\t{\n\t\t\tselectionFirst = focus;\n\t\t\tselectionLast = anchor;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tselectionFirst = anchor;\n\t\t\tselectionLast = focus;\n\t\t}\n\n\t\tif (\n\t\t\tfirstOfLine !== null\n\t\t\t&& lastOfLine !== null\n\t\t\t&& selectionFirst.key === firstOfLine.getKey()\n\t\t\t&& selectionFirst.offset === 0\n\t\t\t&& selectionLast.key === lastOfLine.getKey()\n\t\t\t&& selectionLast.offset === lastOfLine.getTextContentSize()\n\t\t)\n\t\t{\n\t\t\treturn indentOrOutdent;\n\t\t}\n\n\t\t// 3. Else: tab/outdent\n\t\treturn tabOrOutdent;\n\t}\n\n\t#handleMultilineIndent(type: LexicalCommand): boolean\n\t{\n\t\tconst selection = $getSelection();\n\t\tif (!$isRangeSelection(selection) || !$isSelectionInCode(selection))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst codeLines = $getCodeLines(selection);\n\t\tconst codeLinesLength = codeLines.length;\n\t\t// Multiple lines selection\n\t\tif (codeLines.length > 1)\n\t\t{\n\t\t\tfor (let i = 0; i < codeLinesLength; i++)\n\t\t\t{\n\t\t\t\tconst line = codeLines[i];\n\t\t\t\tif (line.length > 0)\n\t\t\t\t{\n\t\t\t\t\tlet firstOfLine: null | CodeTokenNode | TabNode | LineBreakNode = line[0];\n\t\t\t\t\t// First and last lines might not be complete\n\t\t\t\t\tif (i === 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tfirstOfLine = getFirstCodeNodeOfLine(firstOfLine);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (firstOfLine !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (type === INDENT_CONTENT_COMMAND)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// eslint-disable-next-line @bitrix24/bitrix24-rules/no-native-dom-methods\n\t\t\t\t\t\t\tfirstOfLine.insertBefore($createTabNode());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ($isTabNode(firstOfLine))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfirstOfLine.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\t// Just one line\n\t\tconst selectionNodes = selection.getNodes();\n\t\tconst firstNode = selectionNodes[0];\n\t\tif ($isCodeNode(firstNode))\n\t\t{\n\t\t\t// CodeNode is empty\n\t\t\tif (type === INDENT_CONTENT_COMMAND)\n\t\t\t{\n\t\t\t\tselection.insertNodes([$createTabNode()]);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tconst firstOfLine = getFirstCodeNodeOfLine(firstNode);\n\t\tif (type === INDENT_CONTENT_COMMAND)\n\t\t{\n\t\t\tif ($isLineBreakNode(firstOfLine))\n\t\t\t{\n\t\t\t\tfirstOfLine.insertAfter($createTabNode());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// eslint-disable-next-line @bitrix24/bitrix24-rules/no-native-dom-methods\n\t\t\t\tfirstOfLine.insertBefore($createTabNode());\n\t\t\t}\n\t\t}\n\t\telse if ($isTabNode(firstOfLine))\n\t\t{\n\t\t\tfirstOfLine.remove();\n\t\t}\n\n\t\treturn true;\n\t}\n}\n\nfunction $isSelectionInCode(selection: null | RangeSelection): boolean\n{\n\tif (!$isRangeSelection(selection))\n\t{\n\t\treturn false;\n\t}\n\tconst anchorNode = selection.anchor.getNode();\n\tconst focusNode = selection.focus.getNode();\n\tif (anchorNode.is(focusNode) && $isCodeNode(anchorNode))\n\t{\n\t\treturn true;\n\t}\n\n\tconst anchorParent = anchorNode.getParent();\n\n\treturn $isCodeNode(anchorParent) && anchorParent.is(focusNode.getParent());\n}\n\nfunction $getCodeLines(selection: RangeSelection): Array<Array<CodeTokenNode | TabNode>>\n{\n\tconst nodes = selection.getNodes();\n\tconst lines: Array<Array<CodeTokenNode | TabNode>> = [[]];\n\tif (nodes.length === 1 && $isCodeNode(nodes[0]))\n\t{\n\t\treturn lines;\n\t}\n\n\tlet lastLine: Array<CodeTokenNode | TabNode> = lines[0];\n\tfor (const [i, node] of nodes.entries())\n\t{\n\t\tif ($isLineBreakNode(node))\n\t\t{\n\t\t\tif (i !== 0 && lastLine.length > 0)\n\t\t\t{\n\t\t\t\tlastLine = [];\n\t\t\t\tlines.push(lastLine);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlastLine.push(node);\n\t\t}\n\t}\n\n\treturn lines;\n}\n\nexport function getFirstCodeNodeOfLine(\n\tanchor: CodeTokenNode | TabNode | LineBreakNode,\n): null | CodeTokenNode | TabNode | LineBreakNode\n{\n\tlet previousNode = anchor;\n\tlet node: null | LexicalNode = anchor;\n\twhile ($isCodeTokenNode(node) || $isTabNode(node))\n\t{\n\t\tpreviousNode = node;\n\t\tnode = node.getPreviousSibling();\n\t}\n\n\treturn previousNode;\n}\n\nexport function getLastCodeNodeOfLine(\n\tanchor: CodeTokenNode | TabNode | LineBreakNode,\n): CodeTokenNode | TabNode | LineBreakNode\n{\n\tlet nextNode = anchor;\n\tlet node: null | LexicalNode = anchor;\n\twhile ($isCodeTokenNode(node) || $isTabNode(node))\n\t{\n\t\tnextNode = node;\n\t\tnode = node.getNextSibling();\n\t}\n\n\treturn nextNode;\n}\n\ntype DiffRange = {\n\tfrom: number;\n\tnodesForReplacement: Array<LexicalNode>;\n\tto: number;\n};\n\n// Finds minimal diff range between two nodes lists. It returns from/to range boundaries of prevNodes\n// that needs to be replaced with `nodes` (subset of nextNodes) to make prevNodes equal to nextNodes.\nfunction getDiffRange(prevNodes: LexicalNode[], nextNodes: LexicalNode[]): DiffRange\n{\n\tlet leadingMatch = 0;\n\twhile (leadingMatch < prevNodes.length)\n\t{\n\t\tif (!isEqual(prevNodes[leadingMatch], nextNodes[leadingMatch]))\n\t\t{\n\t\t\tbreak;\n\t\t}\n\t\tleadingMatch++;\n\t}\n\n\tconst prevNodesLength: number = prevNodes.length;\n\tconst nextNodesLength: number = nextNodes.length;\n\tconst maxTrailingMatch: number = Math.min(prevNodesLength, nextNodesLength) - leadingMatch;\n\n\tlet trailingMatch = 0;\n\twhile (trailingMatch < maxTrailingMatch)\n\t{\n\t\ttrailingMatch++;\n\t\tif (!isEqual(prevNodes[prevNodesLength - trailingMatch], nextNodes[nextNodesLength - trailingMatch]))\n\t\t{\n\t\t\ttrailingMatch--;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst from: number = leadingMatch;\n\tconst to: number = prevNodesLength - trailingMatch;\n\tconst nodesForReplacement: LexicalNode[] = nextNodes.slice(\n\t\tleadingMatch,\n\t\tnextNodesLength - trailingMatch,\n\t);\n\n\treturn {\n\t\tfrom,\n\t\tnodesForReplacement,\n\t\tto,\n\t};\n}\n\nfunction isEqual(nodeA: LexicalNode, nodeB: LexicalNode): boolean\n{\n\t// Only checking for code token nodes, tabs and linebreaks. If it's regular text node\n\t// returning false so that it's transformed into code token node\n\treturn (\n\t\t(\n\t\t\t$isCodeTokenNode(nodeA)\n\t\t\t&& $isCodeTokenNode(nodeB)\n\t\t\t&& nodeA.__text === nodeB.__text\n\t\t\t&& nodeA.__highlightType === nodeB.__highlightType\n\t\t)\n\t\t|| ($isTabNode(nodeA) && $isTabNode(nodeB))\n\t\t|| ($isLineBreakNode(nodeA) && $isLineBreakNode(nodeB))\n\t);\n}\n\nfunction getCodeTokenNodes(tokens: Array<CodeToken>): LexicalNode[]\n{\n\tconst nodes: LexicalNode[] = [];\n\ttokens.forEach((token: CodeToken): void => {\n\t\tconst partials: string[] = token.content.split(/([\\t\\n])/);\n\t\tconst partialsLength: number = partials.length;\n\t\tfor (let i = 0; i < partialsLength; i++)\n\t\t{\n\t\t\tconst part: string = partials[i];\n\t\t\tif (part === '\\n' || part === '\\r\\n')\n\t\t\t{\n\t\t\t\tnodes.push($createLineBreakNode());\n\t\t\t}\n\t\t\telse if (part === '\\t')\n\t\t\t{\n\t\t\t\tnodes.push($createTabNode());\n\t\t\t}\n\t\t\telse if (part.length > 0)\n\t\t\t{\n\t\t\t\tnodes.push($createCodeTokenNode(part, token.type));\n\t\t\t}\n\t\t}\n\t});\n\n\treturn nodes;\n}\n\n// Wrapping update function into selection retainer, that tries to keep cursor at the same\n// position as before.\nfunction updateAndRetainSelection(nodeKey: NodeKey, updateFn: () => boolean): void\n{\n\tconst node: LexicalNode | null = $getNodeByKey(nodeKey);\n\tif (!$isCodeNode(node) || !node.isAttached())\n\t{\n\t\treturn;\n\t}\n\n\t// If it's not range selection (or null selection) there's no need to change it,\n\t// but we can still run highlighting logic\n\tconst selection: RangeSelection = $getSelection();\n\tif (!$isRangeSelection(selection))\n\t{\n\t\tupdateFn();\n\n\t\treturn;\n\t}\n\n\tconst anchor = selection.anchor;\n\tconst anchorOffset: number = anchor.offset;\n\tconst isNewLineAnchor: boolean = (\n\t\tanchor.type === 'element'\n\t\t&& $isLineBreakNode(node.getChildAtIndex(anchor.offset - 1))\n\t);\n\n\t// Calculating previous text offset (all text node prior to anchor + anchor own text offset)\n\tlet textOffset = 0;\n\tif (!isNewLineAnchor)\n\t{\n\t\tconst anchorNode = anchor.getNode();\n\t\ttextOffset = (\n\t\t\tanchorOffset\n\t\t\t+ anchorNode.getPreviousSiblings().reduce((offset, _node) => {\n\t\t\t\treturn offset + _node.getTextContentSize();\n\t\t\t}, 0)\n\t\t);\n\t}\n\n\tconst hasChanges: boolean = updateFn();\n\tif (!hasChanges)\n\t{\n\t\treturn;\n\t}\n\n\t// Non-text anchors only happen for line breaks, otherwise\n\t// selection will be within text node (code token node)\n\tif (isNewLineAnchor)\n\t{\n\t\tanchor.getNode().select(anchorOffset, anchorOffset);\n\n\t\treturn;\n\t}\n\n\t// If it was non-element anchor then we walk through child nodes\n\t// and looking for a position of original text offset\n\tnode.getChildren().some((child) => {\n\t\tconst isText: boolean = $isTextNode(child);\n\t\tif (isText || $isLineBreakNode(child))\n\t\t{\n\t\t\tconst textContentSize = child.getTextContentSize();\n\t\t\tif (isText && textContentSize >= textOffset)\n\t\t\t{\n\t\t\t\tchild.select(textOffset, textOffset);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\ttextOffset -= textContentSize;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n","import {\n\t$getSelection,\n\t$getNodeByKey,\n\t$isNodeSelection,\n\t$createNodeSelection,\n\t$setSelection,\n\ttype NodeKey,\n\ttype NodeSelection,\n} from 'ui.lexical.core';\n\nimport { type TextEditor } from '../text-editor';\n\nfunction isNodeSelected(editor: TextEditor, key: NodeKey): boolean\n{\n\treturn editor.getEditorState().read(() => {\n\t\tconst node = $getNodeByKey(key);\n\t\tif (node === null)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn node.isSelected();\n\t});\n}\n\nexport function createNodeSelection(editor: TextEditor, key: NodeKey)\n{\n\tlet isSelected = false;\n\tconst subscribers = new Set();\n\tconst onSelect = (fn: Function) => {\n\t\tsubscribers.add(fn);\n\t};\n\n\tconst unregisterListener = editor.registerUpdateListener(() => {\n\t\tisSelected = isNodeSelected(editor, key);\n\t\tfor (const subscribeFunc of subscribers)\n\t\t{\n\t\t\tsubscribeFunc(isSelected);\n\t\t}\n\t});\n\n\tconst setSelected = (selected: boolean) => {\n\t\teditor.update(() => {\n\t\t\tlet selection: NodeSelection = $getSelection();\n\t\t\tif (!$isNodeSelection(selection))\n\t\t\t{\n\t\t\t\tselection = $createNodeSelection();\n\t\t\t\t$setSelection(selection);\n\t\t\t}\n\n\t\t\tif (selected)\n\t\t\t{\n\t\t\t\tselection.add(key);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tselection.delete(key);\n\t\t\t}\n\t\t});\n\t};\n\n\tconst clearSelection = () => {\n\t\teditor.update(() => {\n\t\t\tconst selection: NodeSelection = $getSelection();\n\t\t\tif ($isNodeSelection(selection))\n\t\t\t{\n\t\t\t\tselection.clear();\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\tisSelected: () => {\n\t\t\treturn isSelected;\n\t\t},\n\t\tdispose: () => {\n\t\t\tunregisterListener();\n\t\t},\n\t\tonSelect,\n\t\tsetSelected,\n\t\tclearSelection,\n\t};\n}\n","import { Dom, Type, type JsonObject, type JsonValue } from 'main.core';\n\nimport {\n\t$getSelection,\n\t$isNodeSelection,\n\t$getNodeByKey,\n\tCOMMAND_PRIORITY_LOW,\n\tCLICK_COMMAND,\n\tKEY_DELETE_COMMAND,\n\tKEY_BACKSPACE_COMMAND,\n} from 'ui.lexical.core';\n\nimport { mergeRegister } from 'ui.lexical.utils';\nimport { createNodeSelection } from './helpers/create-node-selection';\n\nimport { type TextEditor } from './text-editor';\nimport { type DecoratorComponentOptions } from './types/decorator-component-options';\n\nexport default class DecoratorComponent\n{\n\t#textEditor: TextEditor = null;\n\t#target: HTMLElement = null;\n\t#nodeKey: string = null;\n\t#options: JsonObject = {};\n\t#nodeSelection = null;\n\t#unregisterCommands: Function = null;\n\n\tconstructor(componentOptions: DecoratorComponentOptions)\n\t{\n\t\tconst { textEditor, target, nodeKey, options } = componentOptions;\n\n\t\tthis.#textEditor = textEditor;\n\t\tthis.#target = target;\n\t\tthis.#nodeKey = nodeKey;\n\t\tthis.#options = options;\n\n\t\tthis.#nodeSelection = createNodeSelection(this.getEditor(), this.getNodeKey());\n\t\tthis.#nodeSelection.onSelect((selected: boolean) => {\n\t\t\tif (selected)\n\t\t\t{\n\t\t\t\tDom.addClass(this.getTarget(), '--selected');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(this.getTarget(), '--selected');\n\t\t\t}\n\t\t});\n\n\t\tthis.#unregisterCommands = this.#registerCommands();\n\t}\n\n\tupdate(options: JsonObject): void\n\t{\n\t\t// update\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.#nodeSelection.dispose();\n\t\tthis.#unregisterCommands();\n\t}\n\n\tgetEditor(): TextEditor\n\t{\n\t\treturn this.#textEditor;\n\t}\n\n\tgetNodeKey(): string\n\t{\n\t\treturn this.#nodeKey;\n\t}\n\n\tgetTarget(): HTMLElement\n\t{\n\t\treturn this.#target;\n\t}\n\n\tgetNodeSelection()\n\t{\n\t\treturn this.#nodeSelection;\n\t}\n\n\tisSelected(): boolean\n\t{\n\t\treturn this.#nodeSelection.isSelected();\n\t}\n\n\tsetSelected(selected: boolean)\n\t{\n\t\tthis.#nodeSelection.setSelected(selected);\n\t}\n\n\tgetOptions(): JsonObject\n\t{\n\t\treturn this.#options;\n\t}\n\n\tgetOption(option: string, defaultValue?: JsonValue): JsonValue\n\t{\n\t\tif (!Type.isUndefined(this.#options[option]))\n\t\t{\n\t\t\treturn this.#options[option];\n\t\t}\n\n\t\tif (!Type.isUndefined(defaultValue))\n\t\t{\n\t\t\treturn defaultValue;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t#registerCommands(): Function\n\t{\n\t\treturn mergeRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tCLICK_COMMAND,\n\t\t\t\t(event: MouseEvent) => {\n\t\t\t\t\tif (this.getTarget().contains(event.target))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (event.shiftKey)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.#nodeSelection.setSelected(!this.#nodeSelection.isSelected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.#nodeSelection.clearSelection();\n\t\t\t\t\t\t\tthis.#nodeSelection.setSelected(true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_DELETE_COMMAND,\n\t\t\t\tthis.#handleDelete.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_BACKSPACE_COMMAND,\n\t\t\t\tthis.#handleDelete.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#handleDelete(event: KeyboardEvent): boolean\n\t{\n\t\tif (this.#nodeSelection.isSelected() && $isNodeSelection($getSelection()))\n\t\t{\n\t\t\tevent.preventDefault();\n\n\t\t\tconst node = $getNodeByKey(this.getNodeKey());\n\t\t\tthis.#nodeSelection.setSelected(false);\n\t\t\tif (node)\n\t\t\t{\n\t\t\t\tnode.remove();\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n}\n","import { Type, Tag, Dom, Event } from 'main.core';\nimport { EventEmitter } from 'main.core.events';\nimport { type TextEditor } from '../text-editor';\n\nfunction clamp(value: number, min: number, max: number): number\n{\n\treturn Math.min(Math.max(value, min), max);\n}\n\nconst Direction = {\n\tEAST: 1,\n\tSOUTH: 2,\n\tWEST: 4,\n\tNORTH: 8,\n};\n\nimport './figure-resizer.css';\n\nexport default class FigureResizer extends EventEmitter\n{\n\t#positioning = {\n\t\tcurrentHeight: 0,\n\t\tcurrentWidth: 0,\n\t\tdirection: 0,\n\t\tisResizing: false,\n\t\tratio: 0,\n\t\tstartHeight: 0,\n\t\tstartWidth: 0,\n\t\tstartX: 0,\n\t\tstartY: 0,\n\t};\n\n\t#freeTransform: boolean = false;\n\n\t#onPointerDownHandler: Function = null;\n\t#onPointerMoveHandler: Function = null;\n\t#onPointerUpHandler: Function = null;\n\n\t#container: HTMLElement = null;\n\t#target: HTMLElement = null;\n\t#editor: TextEditor = null;\n\n\t#maxWidth: 'none' | number = 'none';\n\t#maxHeight: 'none' | number = 'none';\n\t#minWidth: number = 16;\n\t#minHeight: number = 16;\n\n\tconstructor({\n\t\ttarget,\n\t\teditor,\n\t\toriginalWidth,\n\t\toriginalHeight,\n\t\tminWidth,\n\t\tminHeight,\n\t\tmaxWidth,\n\t\tmaxHeight,\n\t\tevents,\n\t\tfreeTransform,\n\t})\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.FigureResizer');\n\n\t\tthis.#target = target;\n\t\tthis.#editor = editor;\n\n\t\tthis.#minWidth = Math.min(\n\t\t\tMath.max(this.#minWidth, Type.isNumber(minWidth) ? minWidth : this.#minWidth),\n\t\t\tType.isNumber(originalWidth) ? originalWidth : Infinity,\n\t\t);\n\t\tthis.#minHeight = Math.min(\n\t\t\tMath.max(this.#minHeight, Type.isNumber(minHeight) ? minHeight : this.#minHeight),\n\t\t\tType.isNumber(originalHeight) ? originalHeight : Infinity,\n\t\t);\n\n\t\tthis.#maxWidth = Type.isNumber(maxWidth) ? maxWidth : 'none';\n\t\tthis.#maxHeight = Type.isNumber(maxHeight) ? maxHeight : 'none';\n\t\tthis.#freeTransform = freeTransform === true;\n\n\t\tthis.#onPointerDownHandler = this.#handlePointerDown.bind(this);\n\t\tthis.#onPointerMoveHandler = this.#handlePointerMove.bind(this);\n\t\tthis.#onPointerUpHandler = this.#handlePointerUp.bind(this);\n\n\t\tthis.subscribeFromOptions(events);\n\t}\n\n\tshow(): void\n\t{\n\t\tDom.addClass(this.getContainer(), '--shown');\n\t}\n\n\thide(): void\n\t{\n\t\tDom.removeClass(this.getContainer(), '--shown');\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\tif (this.#container === null)\n\t\t{\n\t\t\tconst freeTransform = Tag.render`\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --north\"\n\t\t\t\t\tdata-direction=\"${Direction.NORTH}\"\n\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t></div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --east\"\n\t\t\t\t\tdata-direction=\"${Direction.EAST}\"\n\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t></div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --south\"\n\t\t\t\t\tdata-direction=\"${Direction.SOUTH}\"\n\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t></div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --west\"\n\t\t\t\t\tdata-direction=\"${Direction.WEST}\"\n\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t></div>\n\t\t\t`;\n\n\t\t\tthis.#container = Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-figure-resizer\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --north-east\"\n\t\t\t\t\t\tdata-direction=\"${Direction.NORTH | Direction.EAST}\" \n\t\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t></div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --south-east\"\n\t\t\t\t\t\tdata-direction=\"${Direction.SOUTH | Direction.EAST}\" \n\t\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --south-west\"\n\t\t\t\t\t\tdata-direction=\"${Direction.SOUTH | Direction.WEST}\" \n\t\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t<div \n\t\t\t\t\t\tclass=\"ui-text-editor-figure-resizer-handle --north-west\"\n\t\t\t\t\t\tdata-direction=\"${Direction.NORTH | Direction.WEST}\" \n\t\t\t\t\t\tonpointerdown=\"${this.#onPointerDownHandler}\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t${this.#freeTransform ? freeTransform : null}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t}\n\n\t\treturn this.#container;\n\t}\n\n\tgetTarget(): HTMLElement\n\t{\n\t\treturn this.#target;\n\t}\n\n\tsetTarget(target: HTMLElement): void\n\t{\n\t\tthis.#target = target;\n\t}\n\n\tgetEditor(): TextEditor\n\t{\n\t\treturn this.#editor;\n\t}\n\n\tisResizing(): boolean\n\t{\n\t\treturn this.#positioning.isResizing;\n\t}\n\n\t#handlePointerDown(event: PointerEvent)\n\t{\n\t\tif (!this.getEditor().isEditable())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tconst direction: number = Number(event.target.dataset.direction);\n\n\t\tconst target = this.getTarget();\n\t\tconst { width, height } = target.getBoundingClientRect();\n\n\t\tthis.#positioning.startWidth = width;\n\t\tthis.#positioning.startHeight = height;\n\t\tthis.#positioning.ratio = width / height;\n\t\tthis.#positioning.currentWidth = width;\n\t\tthis.#positioning.currentHeight = height;\n\t\tthis.#positioning.startX = event.clientX;\n\t\tthis.#positioning.startY = event.clientY;\n\t\tthis.#positioning.isResizing = true;\n\t\tthis.#positioning.direction = direction;\n\n\t\t// setStartCursor(direction);\n\t\tthis.emit('onResizeStart');\n\n\t\tDom.addClass(this.getContainer(), '--resizing');\n\t\tDom.style(target, {\n\t\t\twidth: `${width}px`,\n\t\t\theight: `${height}px`,\n\t\t});\n\n\t\tEvent.bind(document, 'pointermove', this.#onPointerMoveHandler);\n\t\tEvent.bind(document, 'pointerup', this.#onPointerUpHandler);\n\t}\n\n\t#handlePointerMove(event: PointerEvent)\n\t{\n\t\tconst target = this.getTarget();\n\t\tconst isHorizontal = this.#positioning.direction & (Direction.EAST | Direction.WEST);\n\t\tconst isVertical = this.#positioning.direction & (Direction.SOUTH | Direction.NORTH);\n\n\t\tif (this.#positioning.isResizing)\n\t\t{\n\t\t\t// Corner cursor\n\t\t\tif (isHorizontal && isVertical)\n\t\t\t{\n\t\t\t\tlet diff = Math.floor(this.#positioning.startX - event.clientX);\n\t\t\t\tdiff = this.#positioning.direction & Direction.EAST ? -diff : diff;\n\n\t\t\t\tconst width = Math.round(clamp(\n\t\t\t\t\tthis.#positioning.startWidth + diff,\n\t\t\t\t\tthis.#minWidth,\n\t\t\t\t\tthis.#getMaxContainerWidth(),\n\t\t\t\t));\n\n\t\t\t\tconst height = Math.ceil(width / this.#positioning.ratio);\n\n\t\t\t\tDom.style(target, {\n\t\t\t\t\twidth: `${width}px`,\n\t\t\t\t\theight: `${height}px`,\n\t\t\t\t});\n\n\t\t\t\tthis.emit('onResize', { width, height });\n\n\t\t\t\tthis.#positioning.currentHeight = height;\n\t\t\t\tthis.#positioning.currentWidth = width;\n\t\t\t}\n\t\t\telse if (isVertical)\n\t\t\t{\n\t\t\t\tlet diff = Math.floor(this.#positioning.startY - event.clientY);\n\t\t\t\tdiff = this.#positioning.direction & Direction.SOUTH ? -diff : diff;\n\n\t\t\t\tconst height = Math.round(Math.max(\n\t\t\t\t\tthis.#positioning.startHeight + diff,\n\t\t\t\t\tthis.#minHeight,\n\t\t\t\t\t// this.#getMaxContainerHeight(),\n\t\t\t\t));\n\n\t\t\t\tDom.style(target, 'height', `${height}px`);\n\t\t\t\tthis.emit('onResize', { width: this.#positioning.currentWidth, height });\n\n\t\t\t\tthis.#positioning.currentHeight = height;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet diff = Math.floor(this.#positioning.startX - event.clientX);\n\t\t\t\tdiff = this.#positioning.direction & Direction.EAST ? -diff : diff;\n\n\t\t\t\tconst width = Math.round(clamp(\n\t\t\t\t\tthis.#positioning.startWidth + diff,\n\t\t\t\t\tthis.#minWidth,\n\t\t\t\t\tthis.#getMaxContainerWidth(),\n\t\t\t\t));\n\n\t\t\t\tDom.style(target, 'width', `${width}px`);\n\t\t\t\tthis.emit('onResize', { width, height: this.#positioning.currentHeight });\n\n\t\t\t\tthis.#positioning.currentWidth = width;\n\t\t\t}\n\t\t}\n\t}\n\n\t#handlePointerUp()\n\t{\n\t\tif (this.#positioning.isResizing)\n\t\t{\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst width: number = this.#positioning.currentWidth;\n\t\t\t\tconst height: number = this.#positioning.currentHeight;\n\n\t\t\t\tthis.#positioning.startWidth = 0;\n\t\t\t\tthis.#positioning.startHeight = 0;\n\t\t\t\tthis.#positioning.ratio = 0;\n\t\t\t\tthis.#positioning.startX = 0;\n\t\t\t\tthis.#positioning.startY = 0;\n\t\t\t\tthis.#positioning.currentWidth = 0;\n\t\t\t\tthis.#positioning.currentHeight = 0;\n\t\t\t\tthis.#positioning.isResizing = false;\n\n\t\t\t\tDom.removeClass(this.getContainer(), '--resizing');\n\n\t\t\t\tthis.emit('onResizeEnd', { width, height });\n\t\t\t\t// setEndCursor();\n\n\t\t\t\tEvent.unbind(document, 'pointermove', this.#onPointerMoveHandler);\n\t\t\t\tEvent.unbind(document, 'pointerup', this.#onPointerUpHandler);\n\t\t\t}, 200);\n\t\t}\n\t}\n\n\t#getMaxContainerWidth(): number\n\t{\n\t\tconst maxWidth = Type.isNumber(this.#maxWidth) ? this.#maxWidth : Infinity;\n\n\t\tconst editorRootElement = this.getEditor().getRootElement();\n\t\tif (editorRootElement !== null)\n\t\t{\n\t\t\treturn Math.min(editorRootElement.getBoundingClientRect().width - 20, maxWidth);\n\t\t}\n\n\t\treturn 100;\n\t}\n\n\t#getMaxContainerHeight(): number\n\t{\n\t\tif (Type.isNumber(this.#maxHeight))\n\t\t{\n\t\t\treturn this.#maxHeight;\n\t\t}\n\n\t\tconst editorRootElement = this.getEditor().getRootElement();\n\t\tif (editorRootElement !== null)\n\t\t{\n\t\t\treturn editorRootElement.getBoundingClientRect().height - 20;\n\t\t}\n\n\t\treturn 100;\n\t}\n}\n","import { Dom, Tag } from 'main.core';\nimport { MemoryCache, type BaseCache } from 'main.core.cache';\nimport type { BaseEvent } from 'main.core.events';\nimport type { EditorConfig } from 'ui.lexical.core';\n\nimport { $getNodeByKey } from 'ui.lexical.core';\n\nimport DecoratorComponent from '../../../decorator-component';\nimport FigureResizer from '../../../helpers/figure-resizer';\nimport { $isFileImageNode, type FileImageNode } from './file-image-node';\n\nimport type { JsonObject } from 'main.core';\nimport type { DecoratorComponentOptions } from '../../../types/decorator-component-options';\n\nexport class FileImageComponent extends DecoratorComponent\n{\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\t#figureResizer: FigureResizer = null;\n\n\tconstructor(options: DecoratorComponentOptions)\n\t{\n\t\tsuper(options);\n\n\t\tthis.#figureResizer = new FigureResizer({\n\t\t\ttarget: this.getImage(),\n\t\t\teditor: this.getEditor(),\n\t\t\toriginalWidth: this.getOption('width'),\n\t\t\toriginalHeight: this.getOption('height'),\n\t\t\tevents: {\n\t\t\t\tonResizeStart: this.#handleResizeStart.bind(this),\n\t\t\t\tonResizeEnd: this.#handleResizeEnd.bind(this),\n\t\t\t},\n\t\t});\n\n\t\tthis.getNodeSelection().onSelect((selected: boolean) => {\n\t\t\tif (selected || this.#figureResizer.isResizing())\n\t\t\t{\n\t\t\t\tDom.addClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.show();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.hide();\n\t\t\t}\n\n\t\t\tconst draggable = selected && !this.#figureResizer.isResizing();\n\t\t\tthis.#setDraggable(draggable);\n\t\t});\n\n\t\tthis.update(this.getOptions());\n\t\tthis.#render();\n\t}\n\n\t#render()\n\t{\n\t\tDom.append(this.#getContainer(), this.getTarget());\n\t}\n\n\t#getContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\tconst figureResizer = this.#figureResizer.getContainer();\n\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-file-image-component\">\n\t\t\t\t\t${this.#getImageContainer()}\n\t\t\t\t\t${figureResizer}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#getImageContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('image-container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-file-image-container\">\n\t\t\t\t\t${this.getImage()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#setDraggable(draggable: boolean): void\n\t{\n\t\tDom.attr(this.#getImageContainer(), { draggable });\n\t\tif (draggable)\n\t\t{\n\t\t\tDom.addClass(this.#getContainer(), '--draggable');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.#getContainer(), '--draggable');\n\t\t}\n\t}\n\n\t#handleResizeStart(event: BaseEvent): void\n\t{\n\t\tthis.#setDraggable(false);\n\t\tthis.setSelected(true);\n\t}\n\n\t#handleResizeEnd(event: BaseEvent): void\n\t{\n\t\tthis.setSelected(true);\n\n\t\tthis.getEditor().update(() => {\n\t\t\tconst node: FileImageNode = $getNodeByKey(this.getNodeKey());\n\t\t\tif ($isFileImageNode(node))\n\t\t\t{\n\t\t\t\tconst { width, height } = event.getData();\n\t\t\t\tnode.setWidthAndHeight(width, height);\n\t\t\t}\n\t\t});\n\t}\n\n\tgetImage(): HTMLImageElement\n\t{\n\t\treturn this.#refs.remember('image', () => {\n\t\t\tconst img: HTMLImageElement = document.createElement('img');\n\t\t\timg.draggable = false;\n\t\t\timg.src = this.getOption('src');\n\n\t\t\tconst config: EditorConfig = this.getOption('config', {});\n\t\t\tif (config?.theme?.image?.img)\n\t\t\t{\n\t\t\t\timg.className = config.theme.image.img;\n\t\t\t}\n\n\t\t\treturn img;\n\t\t});\n\t}\n\n\tupdate(options: JsonObject)\n\t{\n\t\tconst width = options.width > 0 ? `${options.width}px` : 'inherit';\n\t\tconst aspectRatio = options.width > 0 && options.height > 0 ? `${options.width} / ${options.height}` : 'auto';\n\n\t\tDom.style(this.getImage(), { width, height: 'auto', aspectRatio });\n\t}\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { Type, Dom } from 'main.core';\n\nimport {\n\tDecoratorNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype SerializedDecoratorNode,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\n\nimport { FileImageComponent } from './file-image-component';\n\nimport type { UploaderFileInfo } from 'ui.uploader.core';\nimport type { DecoratorOptions } from '../../../types/decorator-options';\n\nexport type SerializedFileImageNode = SerializedDecoratorNode & {\n\tserverFileId: string | number,\n\tinfo: UploaderFileInfo,\n\twidth: number,\n\theight: number,\n};\n\nimport './file-image.css';\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport class FileImageNode extends DecoratorNode\n{\n\t__serverFileId: string | number;\n\t__info: UploaderFileInfo;\n\t__width: number;\n\t__height: number;\n\n\tconstructor(\n\t\tserverFileId: string | number,\n\t\tinfo: UploaderFileInfo,\n\t\twidth?: number,\n\t\theight?: number,\n\t\tkey?: NodeKey,\n\t)\n\t{\n\t\tsuper(key);\n\n\t\tthis.__serverFileId = serverFileId;\n\t\tthis.__info = Type.isPlainObject(info) ? info : {};\n\t\tthis.__width = Type.isNumber(width) && width > 0 ? Math.round(width) : this.__info.previewWidth;\n\t\tthis.__height = Type.isNumber(height) && height > 0 ? Math.round(height) : this.__info.previewHeight;\n\t}\n\n\tstatic useDecoratorComponent = true;\n\n\tstatic getType(): string\n\t{\n\t\treturn 'file-image';\n\t}\n\n\tstatic clone(node: FileImageNode): FileImageNode\n\t{\n\t\treturn new FileImageNode(node.__serverFileId, node.__info, node.__width, node.__height, node.__key);\n\t}\n\n\tgetId(): string | number\n\t{\n\t\treturn this.__serverFileId;\n\t}\n\n\tgetServerFileId(): string | number\n\t{\n\t\treturn this.__serverFileId;\n\t}\n\n\tgetInfo(): UploaderFileInfo\n\t{\n\t\treturn this.__info;\n\t}\n\n\tsetWidthAndHeight(width: number, height: number): void\n\t{\n\t\tconst writable = this.getWritable();\n\t\tif (Type.isNumber(width))\n\t\t{\n\t\t\twritable.__width = Math.round(width);\n\t\t}\n\n\t\tif (Type.isNumber(height))\n\t\t{\n\t\t\twritable.__height = Math.round(height);\n\t\t}\n\t}\n\n\tgetWidth(): number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__width;\n\t}\n\n\tgetHeight(): number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__height;\n\t}\n\n\tisResized(): boolean\n\t{\n\t\treturn this.__info.previewWidth !== this.getWidth() || this.__info.previewHeight !== this.getHeight();\n\t}\n\n\tstatic importJSON(serializedNode: SerializedFileImageNode): FileImageNode\n\t{\n\t\treturn $createFileImageNode(\n\t\t\tserializedNode.serverFileId,\n\t\t\tserializedNode.info,\n\t\t\tserializedNode.width,\n\t\t\tserializedNode.height,\n\t\t);\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\timg: (domNode: HTMLImageElement) => {\n\t\t\t\tif (!domNode.hasAttribute('data-file-image-id'))\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tconversion: (img: HTMLImageElement): DOMConversionOutput | null => {\n\t\t\t\t\t\tconst { fileImageId, fileImageInfo } = img.dataset;\n\t\t\t\t\t\tlet info = null;\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinfo = JSON.parse(fileImageInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst node = $createFileImageNode(fileImageId, info);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t\tpriority: 1,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\treturn { element: null };\n\t}\n\n\texportJSON(): SerializedFileImageNode\n\t{\n\t\treturn {\n\t\t\tinfo: this.__info,\n\t\t\tserverFileId: this.__serverFileId,\n\t\t\twidth: this.getWidth(),\n\t\t\theight: this.getHeight(),\n\t\t\ttype: 'file-image',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLSpanElement\n\t{\n\t\tconst span = document.createElement('span');\n\t\tif (Type.isStringFilled(config?.theme?.image?.container))\n\t\t{\n\t\t\tDom.addClass(span, config.theme.image.container);\n\t\t}\n\n\t\treturn span;\n\t}\n\n\tupdateDOM(prevNode: FileImageNode, anchor: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tdecorate(editor: LexicalEditor, config: EditorConfig): DecoratorOptions\n\t{\n\t\treturn {\n\t\t\tcomponentClass: FileImageComponent,\n\t\t\toptions: {\n\t\t\t\tsrc: this.__info.previewUrl,\n\t\t\t\twidth: this.getWidth(),\n\t\t\t\theight: this.getHeight(),\n\t\t\t\tmaxWidth: this.getWidth(),\n\t\t\t\tmaxHeight: this.getHeight(),\n\t\t\t\tconfig,\n\t\t\t\t// maxWidth: this.__info.previewWidth,\n\t\t\t\t// maxHeight: this.__info.previewHeight,\n\t\t\t},\n\t\t};\n\t}\n\n\tisInline(): true\n\t{\n\t\treturn true;\n\t}\n}\n\nexport function $createFileImageNode(\n\tserverFileId: string | number,\n\tinfo: UploaderFileInfo = {},\n\twidth: number = null,\n\theight: number = null,\n): FileImageNode\n{\n\treturn new FileImageNode(serverFileId, info, width, height);\n}\n\nexport function $isFileImageNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof FileImageNode;\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { Type, Dom } from 'main.core';\n\nimport {\n\tTextNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype SerializedDecoratorNode,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\n\nimport type { UploaderFileInfo } from 'ui.uploader.core';\n\nexport type SerializedFileNode = SerializedDecoratorNode & {\n\tserverFileId: string | number,\n\tinfo: UploaderFileInfo,\n};\n\nimport './file.css';\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport class FileNode extends TextNode\n{\n\t__serverFileId: string | number;\n\t__info: UploaderFileInfo;\n\n\tconstructor(\n\t\tserverFileId: string | number,\n\t\tinfo: UploaderFileInfo,\n\t\tkey?: NodeKey,\n\t)\n\t{\n\t\tconst fileInfo = Type.isPlainObject(info) ? info : {};\n\n\t\tsuper(fileInfo.name || '', key);\n\n\t\tthis.__serverFileId = serverFileId;\n\t\tthis.__info = fileInfo;\n\t}\n\n\tstatic getType(): string\n\t{\n\t\treturn 'file';\n\t}\n\n\tstatic clone(node: FileNode): FileNode\n\t{\n\t\treturn new FileNode(node.__serverFileId, node.__info, node.__key);\n\t}\n\n\tgetId(): string | number\n\t{\n\t\treturn this.__serverFileId;\n\t}\n\n\tgetServerFileId(): string | number\n\t{\n\t\treturn this.__serverFileId;\n\t}\n\n\tgetInfo(): UploaderFileInfo\n\t{\n\t\treturn this.__info;\n\t}\n\n\tgetName(): string\n\t{\n\t\treturn this.__info.name || 'unknown';\n\t}\n\n\tstatic importJSON(serializedNode: SerializedFileNode): FileNode\n\t{\n\t\treturn $createFileNode(serializedNode.serverFileId, serializedNode.info);\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\tspan: (domNode: HTMLElement) => {\n\t\t\t\tif (!domNode.hasAttribute('data-file-id'))\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tconversion: (span: HTMLSpanElement): DOMConversionOutput | null => {\n\t\t\t\t\t\tconst { fileId, fileInfo } = domNode.dataset;\n\t\t\t\t\t\tlet info = null;\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinfo = JSON.parse(fileInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst node = $createFileNode(fileId, info);\n\n\t\t\t\t\t\treturn { node };\n\t\t\t\t\t},\n\t\t\t\t\tpriority: 1,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\tconst element = document.createElement('span');\n\t\telement.textContent = this.getName();\n\t\telement.setAttribute('data-file-id', this.__serverFileId);\n\t\telement.setAttribute('data-file-info', JSON.stringify(this.__info));\n\n\t\treturn { element };\n\t}\n\n\texportJSON(): SerializedFileNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\tinfo: this.__info,\n\t\t\tserverFileId: this.__serverFileId,\n\t\t\ttype: 'file',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLSpanElement\n\t{\n\t\tconst span = document.createElement('span');\n\t\tif (Type.isStringFilled(config?.theme?.file))\n\t\t{\n\t\t\tDom.addClass(span, config.theme.file);\n\t\t}\n\n\t\tspan.textContent = this.getName();\n\n\t\treturn span;\n\t}\n\n\tupdateDOM(prevNode: FileNode, anchor: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n}\n\nexport function $createFileNode(serverFileId: string | number, info: UploaderFileInfo = {}): FileNode\n{\n\treturn new FileNode(serverFileId, info).setMode('token');\n}\n\nexport function $isFileNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof FileNode;\n}\n","export function calcImageSize(previewWidth, previewHeight, renderWidth, renderHeight): [number, number]\n{\n\tconst ratioWidth: number = renderWidth / previewWidth;\n\tconst ratioHeight: number = renderHeight / previewHeight;\n\tconst ratio: number = Math.min(ratioWidth, ratioHeight);\n\n\tconst useOriginalSize = ratio > 1; // image is too small\n\tconst width = useOriginalSize ? previewWidth : previewWidth * ratio;\n\tconst height = useOriginalSize ? previewHeight : previewHeight * ratio;\n\n\treturn [width, height];\n}\n","import type { JsonObject } from 'main.core';\nimport { Dom, Tag, Type } from 'main.core';\nimport { type BaseCache, MemoryCache } from 'main.core.cache';\nimport type { BaseEvent } from 'main.core.events';\nimport { $getNodeByKey } from 'ui.lexical.core';\nimport type { EditorConfig } from 'ui.lexical.core';\n\nimport DecoratorComponent from '../../../decorator-component';\nimport { calcImageSize } from '../../../helpers/calc-image-size';\nimport FigureResizer from '../../../helpers/figure-resizer';\nimport type { DecoratorComponentOptions } from '../../../types/decorator-component-options';\nimport { $isFileVideoNode, FileVideoNode } from './file-video-node';\n\nexport class FileVideoComponent extends DecoratorComponent\n{\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\t#figureResizer: FigureResizer = null;\n\n\tconstructor(options: DecoratorComponentOptions)\n\t{\n\t\tsuper(options);\n\n\t\tthis.#figureResizer = new FigureResizer({\n\t\t\ttarget: this.#getVideo(),\n\t\t\teditor: this.getEditor(),\n\t\t\tminWidth: 120,\n\t\t\tminHeight: 120,\n\t\t\tevents: {\n\t\t\t\tonResize: this.#handleResize.bind(this),\n\t\t\t\tonResizeEnd: this.#handleResizeEnd.bind(this),\n\t\t\t},\n\t\t});\n\n\t\tthis.getNodeSelection().onSelect((selected: boolean) => {\n\t\t\tif (selected || this.#figureResizer.isResizing())\n\t\t\t{\n\t\t\t\tDom.addClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.show();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.hide();\n\t\t\t}\n\n\t\t\tthis.#setDraggable(selected);\n\t\t});\n\n\t\tthis.update(this.getOptions());\n\t\tthis.#render();\n\t}\n\n\t#render()\n\t{\n\t\tDom.append(this.#getContainer(), this.getTarget());\n\t}\n\n\t#getContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-video-component\">\n\t\t\t\t\t<div class=\"ui-text-editor-video-object-container\">${this.#getVideo()}</div>\n\t\t\t\t\t${this.#figureResizer.getContainer()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#getVideo(): HTMLIFrameElement | HTMLVideoElement\n\t{\n\t\treturn this.#refs.remember('video', () => {\n\t\t\tconst video: HTMLVideoElement = Dom.create({\n\t\t\t\ttag: 'video',\n\t\t\t\tattrs: {\n\t\t\t\t\tcontrols: true,\n\t\t\t\t\tpreload: 'metadata',\n\t\t\t\t\tplaysinline: true,\n\t\t\t\t\tsrc: this.getOption('src'),\n\t\t\t\t},\n\t\t\t\tevents: {\n\t\t\t\t\tloadedmetadata: (event: Event) => {\n\t\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\t\tconst node: FileVideoNode = $getNodeByKey(this.getNodeKey());\n\t\t\t\t\t\t\tif ($isFileVideoNode(node) && node.getWidth() === 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst [width, height] = calcImageSize(\n\t\t\t\t\t\t\t\t\tevent.target.videoWidth,\n\t\t\t\t\t\t\t\t\tevent.target.videoHeight,\n\t\t\t\t\t\t\t\t\t600,\n\t\t\t\t\t\t\t\t\t600,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tnode.setWidthAndHeight(width, height);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst config: EditorConfig = this.getOption('config', {});\n\t\t\tif (config?.theme?.video?.object)\n\t\t\t{\n\t\t\t\tvideo.className = config.theme.video.object;\n\t\t\t}\n\n\t\t\treturn video;\n\t\t});\n\t}\n\n\t#handleResize(event: BaseEvent): void\n\t{\n\t\tthis.update(event.getData());\n\t}\n\n\t#handleResizeEnd(event: BaseEvent): void\n\t{\n\t\tthis.setSelected(true);\n\n\t\tthis.getEditor().update(() => {\n\t\t\tconst node: FileVideoNode = $getNodeByKey(this.getNodeKey());\n\t\t\tif ($isFileVideoNode(node))\n\t\t\t{\n\t\t\t\tconst { width, height } = event.getData();\n\t\t\t\tnode.setWidthAndHeight(width, height);\n\t\t\t}\n\t\t});\n\t}\n\n\t#setDraggable(draggable: boolean): void\n\t{\n\t\tDom.attr(this.#getContainer(), { draggable });\n\t\tif (draggable)\n\t\t{\n\t\t\tDom.addClass(this.#getContainer(), '--draggable');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.#getContainer(), '--draggable');\n\t\t}\n\t}\n\n\tupdate(options: JsonObject): void\n\t{\n\t\tconst width = Type.isNumber(options.width) && options.width > 0 ? options.width : null;\n\t\tconst height = Type.isNumber(options.height) && options.height > 0 ? options.height : null;\n\t\tconst aspectRatio = width > 0 && height > 0 ? `${width} / ${height}` : 'auto';\n\n\t\tDom.adjust(this.#getVideo(), {\n\t\t\tattrs: {\n\t\t\t\twidth,\n\t\t\t\theight: null,\n\t\t\t},\n\t\t\tstyle: {\n\t\t\t\twidth,\n\t\t\t\theight: 'auto',\n\t\t\t\taspectRatio,\n\t\t\t},\n\t\t});\n\t}\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { Type, Dom } from 'main.core';\n\nimport {\n\t$applyNodeReplacement,\n\tDecoratorNode,\n\ttype DOMConversionMap,\n\ttype DOMExportOutput,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype SerializedDecoratorNode,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\n\nimport { FileVideoComponent } from './file-video-component';\n\nimport type { UploaderFileInfo } from 'ui.uploader.core';\nimport type { DecoratorOptions } from '../../../types/decorator-options';\n\nexport type SerializedFileVideoNode = SerializedDecoratorNode & {\n\tserverFileId: string | number,\n\tinfo: UploaderFileInfo,\n\twidth: number,\n\theight: number,\n};\n\nimport './file-video.css';\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport class FileVideoNode extends DecoratorNode\n{\n\t__serverFileId: string | number;\n\t__info: UploaderFileInfo;\n\t__width: number = 0;\n\t__height: number = 0;\n\n\tconstructor(\n\t\tserverFileId: string | number,\n\t\tinfo: UploaderFileInfo,\n\t\twidth?: number,\n\t\theight?: number,\n\t\tkey?: NodeKey,\n\t)\n\t{\n\t\tsuper(key);\n\n\t\tthis.__serverFileId = serverFileId;\n\t\tthis.__info = Type.isPlainObject(info) ? info : {};\n\t\tthis.__width = (\n\t\t\tType.isNumber(width) && width > 0\n\t\t\t\t? Math.round(width)\n\t\t\t\t: (this.__info.previewWidth > 0 ? this.__info.previewWidth : this.__width))\n\t\t;\n\n\t\tthis.__height = (\n\t\t\tType.isNumber(height) && height > 0\n\t\t\t\t? Math.round(height)\n\t\t\t\t: (this.__info.previewHeight > 0 ? this.__info.previewHeight : this.__height)\n\t\t);\n\t}\n\n\tstatic useDecoratorComponent = true;\n\n\tstatic getType(): string\n\t{\n\t\treturn 'file-video';\n\t}\n\n\tstatic clone(node: FileVideoNode): FileVideoNode\n\t{\n\t\treturn new FileVideoNode(node.__serverFileId, node.__info, node.__width, node.__height, node.__key);\n\t}\n\n\tgetId(): string | number\n\t{\n\t\treturn this.__serverFileId;\n\t}\n\n\tgetServerFileId(): string | number\n\t{\n\t\treturn this.__serverFileId;\n\t}\n\n\tgetInfo(): UploaderFileInfo\n\t{\n\t\treturn this.__info;\n\t}\n\n\tsetWidthAndHeight(width: number, height: number): void\n\t{\n\t\tconst writable = this.getWritable();\n\t\tif (Type.isNumber(width))\n\t\t{\n\t\t\twritable.__width = Math.round(width);\n\t\t}\n\n\t\tif (Type.isNumber(height))\n\t\t{\n\t\t\twritable.__height = Math.round(height);\n\t\t}\n\t}\n\n\tgetWidth(): number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__width;\n\t}\n\n\tgetHeight(): number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__height;\n\t}\n\n\tstatic importJSON(serializedNode: SerializedFileVideoNode): FileVideoNode\n\t{\n\t\treturn $createFileVideoNode(\n\t\t\tserializedNode.serverFileId,\n\t\t\tserializedNode.info,\n\t\t\tserializedNode.width,\n\t\t\tserializedNode.height,\n\t\t);\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn null;\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\treturn { element: null };\n\t}\n\n\texportJSON(): SerializedFileVideoNode\n\t{\n\t\treturn {\n\t\t\tinfo: this.__info,\n\t\t\tserverFileId: this.__serverFileId,\n\t\t\twidth: this.getWidth(),\n\t\t\theight: this.getHeight(),\n\t\t\ttype: 'file-video',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLSpanElement\n\t{\n\t\tconst div = document.createElement('span');\n\n\t\tif (Type.isStringFilled(config?.theme?.video?.container))\n\t\t{\n\t\t\tDom.addClass(div, config.theme.video.container);\n\t\t}\n\n\t\treturn div;\n\t}\n\n\tupdateDOM(prevNode: FileVideoNode, anchor: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tdecorate(editor: LexicalEditor, config: EditorConfig): DecoratorOptions\n\t{\n\t\treturn {\n\t\t\tcomponentClass: FileVideoComponent,\n\t\t\toptions: {\n\t\t\t\tsrc: this.__info.downloadUrl,\n\t\t\t\twidth: this.getWidth(),\n\t\t\t\theight: this.getHeight(),\n\t\t\t\tmaxWidth: this.getWidth(),\n\t\t\t\tmaxHeight: this.getHeight(),\n\t\t\t\tconfig,\n\t\t\t},\n\t\t};\n\t}\n\n\tisInline(): true\n\t{\n\t\treturn true;\n\t}\n}\n\nexport function $createFileVideoNode(\n\tserverFileId: string | number,\n\tinfo: UploaderFileInfo = {},\n\twidth: number = null,\n\theight: number = null,\n): FileVideoNode\n{\n\tconst node: FileVideoNode = new FileVideoNode(serverFileId, info, width, height);\n\n\treturn $applyNodeReplacement(node);\n}\n\nexport function $isFileVideoNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof FileVideoNode;\n}\n","interface DragEvent {\n\trangeOffset?: number;\n\trangeParent?: Node;\n}\n\nexport function getDragSelection(event: DragEvent): Range | null\n{\n\tconst target: Element | Document | null = event.target;\n\tlet targetWindow = null;\n\tif (target !== null)\n\t{\n\t\ttargetWindow = target.nodeType === 9 ? target.defaultView : target.ownerDocument.defaultView;\n\t}\n\n\tlet range = null;\n\tconst domSelection = (targetWindow || window).getSelection();\n\tif (document.caretRangeFromPoint)\n\t{\n\t\trange = document.caretRangeFromPoint(event.clientX, event.clientY);\n\t}\n\telse if (event.rangeParent && domSelection !== null)\n\t{\n\t\tdomSelection.collapse(event.rangeParent, event.rangeOffset || 0);\n\t\trange = domSelection.getRangeAt(0);\n\t}\n\telse\n\t{\n\t\tthrow new Error('Cannot get the selection when dragging');\n\t}\n\n\treturn range;\n}\n","import { $getSelection, $isNodeSelection, type LexicalNode } from 'ui.lexical.core';\n\nexport function getNodeInSelection(predicate: (node: LexicalNode) => boolean): LexicalNode | null\n{\n\tconst selection = $getSelection();\n\tif (!$isNodeSelection(selection))\n\t{\n\t\treturn null;\n\t}\n\n\tconst nodes = selection.getNodes();\n\tconst node = nodes[0];\n\n\treturn predicate(node) ? node : null;\n}\n","import { Tag, Type } from 'main.core';\nimport {\n\t$createRangeSelection, $setSelection,\n\tCOMMAND_PRIORITY_HIGH,\n\tCOMMAND_PRIORITY_LOW,\n\tDRAGOVER_COMMAND,\n\tDRAGSTART_COMMAND,\n\tDROP_COMMAND,\n\ttype LexicalNode,\n} from 'ui.lexical.core';\n\nimport { mergeRegister } from 'ui.lexical.utils';\nimport { DRAG_START_COMMAND, DRAG_END_COMMAND } from '../commands';\n\nimport { getDragSelection } from './get-drag-selection';\nimport { getNodeInSelection } from './get-node-in-selection';\n\nimport { type TextEditor } from '../text-editor';\n\nconst DRAG_DATA_FORMAT = 'application/x-lexical-drag-image';\nconst TRANSPARENT_IMAGE = Tag.render`<img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\">`;\n\nexport function registerDraggableNode(\n\teditor: TextEditor,\n\ttargetNode: Class<LexicalNode>,\n\tonDrop: Function,\n): () => void\n{\n\tconst isTargetNode = (node: LexicalNode | null | undefined): boolean => {\n\t\treturn node instanceof targetNode;\n\t};\n\n\tconst getDraggableNode = (): LexicalNode | null => {\n\t\treturn getNodeInSelection((node: LexicalNode) => isTargetNode(node));\n\t};\n\n\treturn mergeRegister(\n\t\teditor.registerCommand(\n\t\t\tDRAGSTART_COMMAND,\n\t\t\t(event: DragEvent): boolean => {\n\t\t\t\tconst draggableNode: LexicalNode = getDraggableNode();\n\t\t\t\tif (!draggableNode)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst success = handleDragStart(event, draggableNode);\n\t\t\t\tif (success)\n\t\t\t\t{\n\t\t\t\t\teditor.dispatchCommand(DRAG_START_COMMAND);\n\t\t\t\t}\n\n\t\t\t\treturn success;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t),\n\n\t\teditor.registerCommand(\n\t\t\tDRAGOVER_COMMAND,\n\t\t\t(event: DragEvent): boolean => {\n\t\t\t\tconst draggableNode: LexicalNode = getDraggableNode();\n\t\t\t\tif (!draggableNode)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn handleDragOver(event, editor);\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t),\n\n\t\teditor.registerCommand(\n\t\t\tDROP_COMMAND,\n\t\t\t(event: DragEvent): boolean => {\n\t\t\t\tconst draggableNode: LexicalNode = getDraggableNode();\n\t\t\t\tif (!draggableNode)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\teditor.dispatchCommand(DRAG_END_COMMAND);\n\n\t\t\t\treturn handleDragDrop(event, editor, draggableNode, onDrop);\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t),\n\t);\n}\n\nfunction handleDragStart(event: DragEvent, draggableNode: LexicalNode): boolean\n{\n\tconst dataTransfer = event.dataTransfer;\n\tif (!dataTransfer)\n\t{\n\t\treturn false;\n\t}\n\n\tdataTransfer.setData('text/plain', '_');\n\tdataTransfer.setDragImage(TRANSPARENT_IMAGE, 0, 0);\n\tdataTransfer.setData(\n\t\tDRAG_DATA_FORMAT,\n\t\tJSON.stringify({\n\t\t\tdata: draggableNode.exportJSON(),\n\t\t\ttype: draggableNode.getType(),\n\t\t}),\n\t);\n\n\treturn true;\n}\n\nfunction handleDragOver(event: DragEvent, editor: TextEditor): boolean\n{\n\tif (!canDrop(event, editor))\n\t{\n\t\tevent.preventDefault();\n\t}\n\n\treturn true;\n}\n\nfunction handleDragDrop(\n\tevent: DragEvent,\n\teditor: TextEditor,\n\tdraggableNode: LexicalNode,\n\tonDrop: Function,\n): boolean\n{\n\tconst dragData = event.dataTransfer?.getData(DRAG_DATA_FORMAT);\n\tif (!dragData)\n\t{\n\t\treturn false;\n\t}\n\n\tconst { type, data } = JSON.parse(dragData);\n\tif (type !== draggableNode.getType() || !Type.isPlainObject(data))\n\t{\n\t\treturn false;\n\t}\n\n\tevent.preventDefault();\n\tif (canDrop(event, editor) && Type.isFunction(onDrop))\n\t{\n\t\tconst range = getDragSelection(event);\n\t\tdraggableNode.remove();\n\t\tconst rangeSelection = $createRangeSelection();\n\t\tif (range !== null && range !== undefined)\n\t\t{\n\t\t\trangeSelection.applyDOMRange(range);\n\t\t}\n\n\t\t$setSelection(rangeSelection);\n\n\t\tonDrop(data);\n\t}\n\n\treturn true;\n}\n\nfunction canDrop(event: DragEvent, editor: TextEditor): boolean\n{\n\tconst target = event.target;\n\tconst selectors = ['code', '.ui-text-editor__file-image'];\n\tconst imageClassName = editor.getThemeClass('image');\n\tif (Type.isStringFilled(imageClassName))\n\t{\n\t\tselectors.push(`.${imageClassName}`);\n\t}\n\n\t// editor.getBBCodeScheme().isAllowedTag();\n\n\treturn (\n\t\ttarget instanceof HTMLElement\n\t\t&& target.closest(selectors.join(',')) === null\n\t\t&& editor.getEditableContainer().contains(target.parentElement)\n\t);\n}\n","import { Type, Text } from 'main.core';\n\nimport {\n\t$createTextNode,\n\tcreateCommand,\n\t$isRootOrShadowRoot,\n\t$insertNodes,\n\t$createParagraphNode,\n\t$nodesOfType,\n\tCOMMAND_PRIORITY_EDITOR,\n\ttype LexicalCommand,\n\ttype LexicalNode,\n} from 'ui.lexical.core';\n\nimport { $wrapNodeInElement } from 'ui.lexical.utils';\nimport { calcImageSize } from '../../helpers/calc-image-size';\n\nimport { registerDraggableNode } from '../../helpers/register-draggable-node';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\nimport BasePlugin from '../base-plugin';\n\nimport { FileNode, $createFileNode } from './file/file-node';\nimport { FileImageNode, $createFileImageNode } from './image/file-image-node';\nimport { FileVideoNode, $createFileVideoNode } from './video/file-video-node';\n\nimport type {\n\tBBCodeConversion,\n\tBBCodeExportOutput,\n\tBBCodeImportConversion,\n\tBBCodeExportConversion,\n\tBBCodeConversionFn,\n} from '../../bbcode';\n\nimport type { UploaderFileInfo } from 'ui.uploader.core';\nimport { type TextEditor } from '../../text-editor';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\n\ntype InsertFilePayload = {\n\tserverFileId: string | number,\n\tinfo: UploaderFileInfo,\n\twidth?: number,\n\theight?: number,\n};\n\ntype RemoveFilePayload = {\n\tserverFileId: string | number,\n\tskipHistoryStack?: boolean,\n};\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport const FileType = {\n\tFILE: 'file',\n\tIMAGE: 'image',\n\tVIDEO: 'video',\n};\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport const ADD_FILE_COMMAND: LexicalCommand<InsertFilePayload> = createCommand('ADD_FILE_COMMAND');\nexport const ADD_FILES_COMMAND: LexicalCommand<InsertFilePayload> = createCommand('ADD_FILES_COMMAND');\nexport const INSERT_FILE_COMMAND: LexicalCommand<InsertFilePayload> = createCommand('INSERT_FILE_COMMAND');\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport const REMOVE_FILE_COMMAND: LexicalCommand<string | number> = createCommand('REMOVE_FILE_COMMAND');\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport const GET_INSERTED_FILES_COMMAND: LexicalCommand = createCommand('GET_INSERTED_FILES_COMMAND');\n\n/** @memberof BX.UI.TextEditor.Plugins.File */\nexport class FilePlugin extends BasePlugin\n{\n\t#enabled: boolean = false;\n\t#mode: 'disk' | 'file' = 'file';\n\t#files: Map<string | number, UploaderFileInfo> = new Map();\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tconst modeOption = editor.getOption('file.mode');\n\t\tthis.#enabled = ['file', 'disk'].includes(modeOption);\n\t\tif (!this.#enabled)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#mode = modeOption;\n\n\t\tconst files: UploaderFileInfo[] = editor.getOption('file.files', []);\n\t\tthis.addFiles(files);\n\n\t\tthis.#registerListeners();\n\n\t\tthis.cleanUpRegister(\n\t\t\tregisterDraggableNode(\n\t\t\t\tthis.getEditor(),\n\t\t\t\tFileImageNode,\n\t\t\t\t(data) => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_FILE_COMMAND, data);\n\t\t\t\t},\n\t\t\t),\n\t\t\tregisterDraggableNode(\n\t\t\t\tthis.getEditor(),\n\t\t\t\tFileVideoNode,\n\t\t\t\t(data) => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_FILE_COMMAND, data);\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'File';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [FileNode, FileImageNode, FileVideoNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion | null\n\t{\n\t\tif (!this.isEnabled())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\t[this.getMode()]: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\t// [DISK FILE ID=n14194]\n\t\t\t\t\t// [DISK FILE ID=14194]\n\n\t\t\t\t\t// [FILE ID=5b87ba3b-edb1-49df-a840-50d17b6c3e8c.fbbdd477d5ff19d61...a875e731fa89cfd1e1]\n\t\t\t\t\t// [FILE ID=14194]\n\t\t\t\t\tconst serverFileId = node.getAttribute('id');\n\t\t\t\t\tconst createTextNode = () => {\n\t\t\t\t\t\treturn { node: $createTextNode(node.toString()) };\n\t\t\t\t\t};\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!Type.isStringFilled(serverFileId)\n\t\t\t\t\t\t|| (this.getMode() === 'disk' && !/^n?\\d+$/i.test(serverFileId))\n\t\t\t\t\t\t|| (this.getMode() === 'file' && !/^(\\d+|[\\da-f-]{36}\\.[\\da-f]{32,})$/i.test(serverFileId))\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn createTextNode();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst info = this.getFile(serverFileId);\n\t\t\t\t\tif (info === null)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn createTextNode();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fileType = this.getFileType(info);\n\t\t\t\t\tif (fileType === FileType.IMAGE)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst width = Text.toInteger(node.getAttribute('width'));\n\t\t\t\t\t\tconst height = Text.toInteger(node.getAttribute('height'));\n\n\t\t\t\t\t\treturn { node: $createFileImageNode(serverFileId, info, width, height) };\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fileType === FileType.VIDEO)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst width = Text.toInteger(node.getAttribute('width'));\n\t\t\t\t\t\tconst height = Text.toInteger(node.getAttribute('height'));\n\n\t\t\t\t\t\treturn { node: $createFileVideoNode(serverFileId, info, width, height) };\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { node: $createFileNode(serverFileId, info) };\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion | null\n\t{\n\t\tif (!this.isEnabled())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfile: (lexicalNode: FileNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\t\t\t\tconst attributes = this.getMode() === 'disk' ? { file: '' } : {};\n\t\t\t\tattributes.id = lexicalNode.getServerFileId();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: this.getMode(), attributes, inline: true }),\n\t\t\t\t};\n\t\t\t},\n\t\t\t'file-video': (lexicalNode: FileVideoNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\t\t\t\tconst attributes = this.getMode() === 'disk' ? { file: '' } : {};\n\t\t\t\tattributes.id = lexicalNode.getServerFileId();\n\n\t\t\t\tconst node = scheme.createElement({ name: this.getMode(), attributes, inline: false });\n\t\t\t\tnode.setAttribute('width', lexicalNode.getWidth());\n\t\t\t\tnode.setAttribute('height', lexicalNode.getHeight());\n\n\t\t\t\treturn { node };\n\t\t\t},\n\t\t\t'file-image': (lexicalNode: FileImageNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\t\t\t\tconst attributes = this.getMode() === 'disk' ? { file: '' } : {};\n\t\t\t\tattributes.id = lexicalNode.getServerFileId();\n\n\t\t\t\tconst node = scheme.createElement({ name: this.getMode(), attributes, inline: true });\n\t\t\t\tif (lexicalNode.isResized())\n\t\t\t\t{\n\t\t\t\t\tnode.setAttribute('width', lexicalNode.getWidth());\n\t\t\t\t\tnode.setAttribute('height', lexicalNode.getHeight());\n\t\t\t\t}\n\n\t\t\t\treturn { node };\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\tif (!this.isEnabled())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tbbcodeMap: {\n\t\t\t\tfile: this.getMode(),\n\t\t\t\t'file-image': this.getMode(),\n\t\t\t\t'file-video': this.getMode(),\n\t\t\t},\n\t\t};\n\t}\n\n\tisEnabled(): boolean\n\t{\n\t\treturn this.#enabled;\n\t}\n\n\tgetMode(): 'disk' | 'file'\n\t{\n\t\treturn this.#mode;\n\t}\n\n\taddFile(file: UploaderFileInfo): void\n\t{\n\t\tif (Type.isPlainObject(file) && (Type.isStringFilled(file.serverFileId) || Type.isNumber(file.serverFileId)))\n\t\t{\n\t\t\tconst serverFileId = file.serverFileId.toString();\n\t\t\tif (!this.#files.has(serverFileId))\n\t\t\t{\n\t\t\t\tthis.#files.set(file.serverFileId.toString(), file);\n\t\t\t}\n\t\t}\n\t}\n\n\taddFiles(files: UploaderFileInfo[]): void\n\t{\n\t\tif (Type.isArrayFilled(files))\n\t\t{\n\t\t\tfiles.forEach((file: UploaderFileInfo) => {\n\t\t\t\tthis.addFile(file);\n\t\t\t});\n\t\t}\n\t}\n\n\tgetFile(serverFileId: string | number): UploaderFileInfo | null\n\t{\n\t\tif (Type.isStringFilled(serverFileId) || Type.isNumber(serverFileId))\n\t\t{\n\t\t\treturn this.#files.get(serverFileId.toString()) || null;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetFileType(file: UploaderFileInfo): string\n\t{\n\t\tif (file?.isImage)\n\t\t{\n\t\t\treturn FileType.IMAGE;\n\t\t}\n\n\t\tif (file?.isVideo)\n\t\t{\n\t\t\treturn FileType.VIDEO;\n\t\t}\n\n\t\treturn FileType.FILE;\n\t}\n\n\tremoveFile(serverFileId: string | number, skipHistoryStack: boolean = true): void\n\t{\n\t\tif (Type.isStringFilled(serverFileId) || Type.isNumber(serverFileId))\n\t\t{\n\t\t\tthis.#files.delete(serverFileId.toString());\n\n\t\t\tthis.getEditor().update(() => {\n\t\t\t\tconst nodes = [\n\t\t\t\t\t...$nodesOfType(FileNode),\n\t\t\t\t\t...$nodesOfType(FileImageNode),\n\t\t\t\t\t...$nodesOfType(FileVideoNode),\n\t\t\t\t];\n\n\t\t\t\tnodes.forEach((node: FileNode | FileImageNode | FileVideoNode) => {\n\t\t\t\t\tif (node.getServerFileId().toString() === serverFileId.toString())\n\t\t\t\t\t{\n\t\t\t\t\t\tnode.remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, skipHistoryStack ? { tag: 'history-merge' } : {});\n\t\t}\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_FILE_COMMAND,\n\t\t\t\t(payload: InsertFilePayload) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!Type.isPlainObject(payload)\n\t\t\t\t\t\t|| !Type.isPlainObject(payload.info)\n\t\t\t\t\t\t|| (!Type.isNumber(payload.serverFileId) && !Type.isStringFilled(payload.serverFileId))\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.addFile(payload.info);\n\n\t\t\t\t\tconst fileType = this.getFileType(payload.info);\n\t\t\t\t\tlet node = null;\n\n\t\t\t\t\tconst previewWidth = payload.info.previewWidth;\n\t\t\t\t\tconst previewHeight = payload.info.previewHeight;\n\t\t\t\t\tconst renderWidth = payload.width;\n\t\t\t\t\tconst renderHeight = payload.height;\n\t\t\t\t\tif (fileType === FileType.IMAGE)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [width, height] = calcImageSize(previewWidth, previewHeight, renderWidth, renderHeight);\n\t\t\t\t\t\tnode = $createFileImageNode(payload.serverFileId, payload.info, width, height);\n\t\t\t\t\t}\n\t\t\t\t\telse if (fileType === FileType.VIDEO)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet width = 0;\n\t\t\t\t\t\tlet height = 0;\n\t\t\t\t\t\tif (previewWidth > 0 && previewHeight > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t[width, height] = calcImageSize(previewWidth, previewHeight, renderWidth, renderHeight);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnode = $createFileVideoNode(payload.serverFileId, payload.info, width, height);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnode = $createFileNode(payload.serverFileId, payload.info);\n\t\t\t\t\t}\n\n\t\t\t\t\t// const selection: RangeSelection = $getSelection();\n\t\t\t\t\t// if ($isRangeSelection(selection) && fileType !== FileType.FILE && payload.inline !== true)\n\t\t\t\t\t// {\n\t\t\t\t\t// \tconst focus: PointType = selection.focus;\n\t\t\t\t\t// \tconst focusNode: TextNode | ElementNode = focus.getNode();\n\t\t\t\t\t// \tif (!selection.isCollapsed())\n\t\t\t\t\t// \t{\n\t\t\t\t\t// \t\tfocusNode.selectEnd();\n\t\t\t\t\t// \t}\n\t\t\t\t\t//\n\t\t\t\t\t// \tconst parentNode: ParagraphNode = $findMatchingParent(\n\t\t\t\t\t// \t\tfocusNode,\n\t\t\t\t\t// \t\t(parent: ElementNode) => $isParagraphNode(parent),\n\t\t\t\t\t// \t);\n\t\t\t\t\t//\n\t\t\t\t\t// \tif (parentNode === null)\n\t\t\t\t\t// \t{\n\t\t\t\t\t// \t\t$insertNodes([node]);\n\t\t\t\t\t// \t\tif ($isRootOrShadowRoot(node.getParentOrThrow()))\n\t\t\t\t\t// \t\t{\n\t\t\t\t\t// \t\t\t$wrapNodeInElement(node, $createParagraphNode).selectEnd();\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (parentNode.isEmpty())\n\t\t\t\t\t// \t{\n\t\t\t\t\t// \t\tparentNode.append(node);\n\t\t\t\t\t// \t\tnode.selectEnd();\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse\n\t\t\t\t\t// \t{\n\t\t\t\t\t// \t\t// const paragraph = $createParagraphNode();\n\t\t\t\t\t// \t\t// paragraph.append(node);\n\t\t\t\t\t// \t\t// parentNode.insertAfter(paragraph);\n\t\t\t\t\t// \t\tparentNode.append($createLineBreakNode());\n\t\t\t\t\t// \t\tparentNode.append(node);\n\t\t\t\t\t// \t\tnode.selectEnd();\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\t\t\t\t\t// else\n\t\t\t\t\t// {\n\t\t\t\t\t// \t$insertNodes([node]);\n\t\t\t\t\t// \tif ($isRootOrShadowRoot(node.getParentOrThrow()))\n\t\t\t\t\t// \t{\n\t\t\t\t\t// \t\t$wrapNodeInElement(node, $createParagraphNode).selectEnd();\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\n\t\t\t\t\t$insertNodes([node]);\n\t\t\t\t\tif ($isRootOrShadowRoot(node.getParentOrThrow()))\n\t\t\t\t\t{\n\t\t\t\t\t\t$wrapNodeInElement(node, $createParagraphNode).selectEnd();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tREMOVE_FILE_COMMAND,\n\t\t\t\t(payload: RemoveFilePayload): boolean => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!Type.isPlainObject(payload)\n\t\t\t\t\t\t|| (!Type.isNumber(payload.serverFileId) && !Type.isStringFilled(payload.serverFileId))\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.removeFile(payload.serverFileId, payload.skipHistoryStack);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tGET_INSERTED_FILES_COMMAND,\n\t\t\t\t(fn: Function): boolean => {\n\t\t\t\t\tif (!Type.isFunction(fn))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nodes = [\n\t\t\t\t\t\t...$nodesOfType(FileNode),\n\t\t\t\t\t\t...$nodesOfType(FileImageNode),\n\t\t\t\t\t\t...$nodesOfType(FileVideoNode),\n\t\t\t\t\t];\n\n\t\t\t\t\tfn(nodes);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tADD_FILE_COMMAND,\n\t\t\t\t(file: UploaderFileInfo): boolean => {\n\t\t\t\t\tthis.addFile(file);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tADD_FILES_COMMAND,\n\t\t\t\t(files: UploaderFileInfo[]): boolean => {\n\t\t\t\t\tthis.addFiles(files);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t);\n\t}\n}\n","export function validateImageUrl(url: string): boolean\n{\n\treturn /^(http:|https:|ftp:|blob:|\\/)/i.test(url);\n}\n","import { Dom, Tag, Type } from 'main.core';\nimport { MemoryCache, type BaseCache } from 'main.core.cache';\nimport type { BaseEvent } from 'main.core.events';\nimport type { EditorConfig } from 'ui.lexical.core';\n\nimport { $getNodeByKey } from 'ui.lexical.core';\n\nimport DecoratorComponent from '../../decorator-component';\nimport FigureResizer from '../../helpers/figure-resizer';\nimport { $isImageNode, ImageNode } from './image-node';\n\nimport type { JsonObject } from 'main.core';\nimport type { DecoratorComponentOptions } from '../../types/decorator-component-options';\n\nexport default class ImageComponent extends DecoratorComponent\n{\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\t#figureResizer: FigureResizer = null;\n\t#maxWidth: number | 'none' = 'none';\n\n\tconstructor(options: DecoratorComponentOptions)\n\t{\n\t\tsuper(options);\n\n\t\tthis.#figureResizer = new FigureResizer({\n\t\t\ttarget: this.getImage(),\n\t\t\teditor: this.getEditor(),\n\t\t\toriginalWidth: this.getOption('width'),\n\t\t\toriginalHeight: this.getOption('height'),\n\t\t\tmaxWidth: this.getMaxWidth(),\n\t\t\tevents: {\n\t\t\t\tonResizeStart: this.#handleResizeStart.bind(this),\n\t\t\t\tonResizeEnd: this.#handleResizeEnd.bind(this),\n\t\t\t},\n\t\t});\n\n\t\tthis.getNodeSelection().onSelect((selected: boolean) => {\n\t\t\tif (selected || this.#figureResizer.isResizing())\n\t\t\t{\n\t\t\t\tDom.addClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.show();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.hide();\n\t\t\t}\n\n\t\t\tconst draggable = selected && !this.#figureResizer.isResizing();\n\t\t\tthis.#setDraggable(draggable);\n\t\t});\n\n\t\tthis.update(this.getOptions());\n\t\tthis.#render();\n\t}\n\n\t#render()\n\t{\n\t\tDom.append(this.#getContainer(), this.getTarget());\n\t}\n\n\t#getContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\tconst figureResizer = this.#figureResizer.getContainer();\n\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-image-component\">\n\t\t\t\t\t${this.#getImageContainer()}\n\t\t\t\t\t${figureResizer}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#getImageContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('image-container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-image-container\">\n\t\t\t\t\t${this.getImage()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#setDraggable(draggable: boolean): void\n\t{\n\t\tDom.attr(this.#getImageContainer(), { draggable });\n\t\tif (draggable)\n\t\t{\n\t\t\tDom.addClass(this.#getContainer(), '--draggable');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.#getContainer(), '--draggable');\n\t\t}\n\t}\n\n\t#handleResizeStart(event: BaseEvent): void\n\t{\n\t\tthis.#setDraggable(false);\n\t\tthis.setSelected(true);\n\t}\n\n\t#handleResizeEnd(event: BaseEvent): void\n\t{\n\t\tthis.setSelected(true);\n\n\t\tthis.getEditor().update(() => {\n\t\t\tconst node: ImageNode = $getNodeByKey(this.getNodeKey());\n\t\t\tif ($isImageNode(node))\n\t\t\t{\n\t\t\t\tconst { width, height } = event.getData();\n\t\t\t\tnode.setWidthAndHeight(width, height);\n\t\t\t}\n\t\t});\n\t}\n\n\tgetImage(): HTMLImageElement\n\t{\n\t\treturn this.#refs.remember('image', () => {\n\t\t\tconst img: HTMLImageElement = document.createElement('img');\n\t\t\timg.draggable = false;\n\t\t\timg.src = this.getOption('src');\n\n\t\t\tconst config: EditorConfig = this.getOption('config', {});\n\t\t\tif (config?.theme?.image?.img)\n\t\t\t{\n\t\t\t\timg.className = config.theme.image.img;\n\t\t\t}\n\n\t\t\timg.onerror = (event) => {\n\t\t\t\timg.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\t\t\t\tDom.addClass(this.getTarget(), '--error ui-icon-set__scope');\n\t\t\t};\n\n\t\t\treturn img;\n\t\t});\n\t}\n\n\tgetMaxWidth(): 'none' | number\n\t{\n\t\treturn this.#maxWidth;\n\t}\n\n\tupdate(options: JsonObject)\n\t{\n\t\tconst width = options.width > 0 ? `${options.width}px` : 'inherit';\n\t\tconst aspectRatio = options.width > 0 && options.height > 0 ? `${options.width} / ${options.height}` : 'auto';\n\n\t\tthis.#maxWidth = options.maxWidth;\n\n\t\tDom.style(this.getImage(), { width, height: 'auto', aspectRatio });\n\t}\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { Type } from 'main.core';\nimport { validateImageUrl } from '../../helpers/validate-image-url';\nimport type { DecoratorOptions } from '../../types/decorator-options';\nimport ImageComponent from './image-component';\n\nimport {\n\tDecoratorNode,\n\t$applyNodeReplacement,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype LexicalEditor,\n\ttype NodeKey,\n\ttype SerializedLexicalNode,\n} from 'ui.lexical.core';\n\nexport interface ImagePayload {\n\tsrc: string;\n\twidth?: number;\n\theight?: number;\n\tmaxWidth?: number;\n\tkey?: NodeKey;\n}\n\nexport type SerializedImageNode = SerializedLexicalNode & {\n\tsrc: string;\n\twidth?: number;\n\theight?: number;\n\tmaxWidth?: number;\n};\n\nexport class ImageNode extends DecoratorNode\n{\n\t__src: string;\n\t__width: 'inherit' | number = 'inherit';\n\t__height: 'inherit' | number = 'inherit';\n\t__maxWidth: number = 'none';\n\n\tconstructor(\n\t\tsrc: string,\n\t\twidth?: 'inherit' | number,\n\t\theight?: 'inherit' | number,\n\t\tmaxWidth?: number,\n\t\tkey?: NodeKey,\n\t)\n\t{\n\t\tsuper(key);\n\n\t\tif (validateImageUrl(src))\n\t\t{\n\t\t\tthis.__src = src;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.__src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\t\t}\n\n\t\tif (Type.isNumber(width))\n\t\t{\n\t\t\tthis.__width = Math.round(width);\n\t\t}\n\n\t\tif (Type.isNumber(height))\n\t\t{\n\t\t\tthis.__height = Math.round(height);\n\t\t}\n\n\t\tif (Type.isNumber(maxWidth))\n\t\t{\n\t\t\tthis.__maxWidth = Math.round(maxWidth);\n\t\t}\n\t}\n\n\tstatic useDecoratorComponent = true;\n\n\tstatic getType(): string\n\t{\n\t\treturn 'image';\n\t}\n\n\tstatic clone(node: ImageNode): ImageNode\n\t{\n\t\treturn new ImageNode(\n\t\t\tnode.__src,\n\t\t\tnode.__width,\n\t\t\tnode.__height,\n\t\t\tnode.__maxWidth,\n\t\t\tnode.__key,\n\t\t);\n\t}\n\n\tstatic importJSON(serializedNode: SerializedImageNode): ImageNode\n\t{\n\t\tconst { width, height, src, maxWidth } = serializedNode;\n\n\t\treturn $createImageNode({ src, width, height, maxWidth });\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\tconst element = document.createElement('img');\n\t\telement.setAttribute('src', this.__src);\n\t\telement.setAttribute('width', this.__width.toString());\n\t\telement.setAttribute('height', this.__height.toString());\n\n\t\treturn { element };\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\timg: (node: Node) => ({\n\t\t\t\tconversion: (domNode: HTMLImageElement): null | DOMConversionOutput => {\n\t\t\t\t\tif (domNode instanceof HTMLImageElement && validateImageUrl(domNode.src))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst { src, width, height } = domNode;\n\t\t\t\t\t\tconst imageNode = $createImageNode({ src, width, height });\n\n\t\t\t\t\t\treturn { node: imageNode };\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportJSON(): SerializedImageNode\n\t{\n\t\treturn {\n\t\t\tsrc: this.getSrc(),\n\t\t\twidth: this.getWidth(),\n\t\t\theight: this.getHeight(),\n\t\t\tmaxWidth: this.getMaxWidth(),\n\t\t\ttype: 'image',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tsetWidthAndHeight(width: 'inherit' | number, height: 'inherit' | number): void\n\t{\n\t\tconst writable = this.getWritable();\n\t\tif (Type.isNumber(width))\n\t\t{\n\t\t\twritable.__width = Math.round(width);\n\t\t}\n\t\telse if (width === 'inherit')\n\t\t{\n\t\t\twritable.__width = width;\n\t\t}\n\n\t\tif (Type.isNumber(height))\n\t\t{\n\t\t\twritable.__height = Math.round(height);\n\t\t}\n\t\telse if (height === 'inherit')\n\t\t{\n\t\t\twritable.__height = height;\n\t\t}\n\t}\n\n\tsetMaxWidth(maxWidth: number | 'none'): void\n\t{\n\t\tif (Type.isNumber(maxWidth) || maxWidth === 'none')\n\t\t{\n\t\t\tconst writable = this.getWritable();\n\t\t\twritable.__maxWidth = Type.isNumber(maxWidth) ? Math.round(maxWidth) : maxWidth;\n\t\t}\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement\n\t{\n\t\tconst span = document.createElement('span');\n\t\tconst theme = config.theme;\n\t\tconst className = theme?.image?.container;\n\t\tif (className !== undefined)\n\t\t{\n\t\t\tspan.className = className;\n\t\t}\n\n\t\treturn span;\n\t}\n\n\tupdateDOM(): false\n\t{\n\t\treturn false;\n\t}\n\n\tgetSrc(): string\n\t{\n\t\treturn this.__src;\n\t}\n\n\tgetWidth(): 'inherit' | number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__width;\n\t}\n\n\tgetHeight(): 'inherit' | number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__height;\n\t}\n\n\tgetMaxWidth(): 'none' | number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__maxWidth;\n\t}\n\n\tdecorate(editor: LexicalEditor, config: EditorConfig): DecoratorOptions\n\t{\n\t\treturn {\n\t\t\tcomponentClass: ImageComponent,\n\t\t\toptions: {\n\t\t\t\tsrc: this.getSrc(),\n\t\t\t\twidth: this.getWidth(),\n\t\t\t\theight: this.getHeight(),\n\t\t\t\tmaxWidth: this.getMaxWidth(),\n\t\t\t\tconfig,\n\t\t\t},\n\t\t};\n\t}\n\n\tisInline(): true\n\t{\n\t\treturn true;\n\t}\n}\n\nexport function $createImageNode({ src, width, height, maxWidth, key }): ImageNode\n{\n\treturn $applyNodeReplacement(new ImageNode(src, width, height, maxWidth, key));\n}\n\nexport function $isImageNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof ImageNode;\n}\n","import {\n\t$isTextNode,\n\t$isRangeSelection,\n\ttype RangeSelection,\n} from 'ui.lexical.core';\n\nimport { type TextEditor } from '../text-editor';\n\nexport function $getSelectionPosition(\n\teditor: TextEditor,\n\tselection: RangeSelection,\n\tscrollerContainer: HTMLElement,\n)\n{\n\t// const range: Range = window.getSelection().getRangeAt(0);\n\tconst range: Range = createRange(selection, editor);\n\tif (range === null)\n\t{\n\t\treturn null;\n\t}\n\n\tconst rangeRects = range.getClientRects();\n\tconst isMultiline = rangeRects.length > 1;\n\tconst isBackward = selection.isBackward();\n\tlet rangeRect = isBackward ? rangeRects[0] : rangeRects[rangeRects.length - 1];\n\n\tif (selection.isCollapsed() && (!rangeRect || (rangeRect.left === 0 && rangeRect.top === 0)))\n\t{\n\t\tlet anchorNode = editor.getElementByKey(selection.anchor.key);\n\t\tlet anchorOffset = selection.anchor.offset;\n\t\tif (anchorNode === null)\n\t\t{\n\t\t\tanchorNode = range.startContainer;\n\t\t\tanchorOffset = range.startOffset;\n\t\t}\n\n\t\tconst targetNode = anchorNode.childNodes[anchorOffset] || anchorNode;\n\n\t\tconst position = targetNode.getBoundingClientRect();\n\t\trangeRect = new DOMRect(\n\t\t\tposition.left,\n\t\t\tposition.top,\n\t\t\t1,\n\t\t\tposition.height,\n\t\t);\n\t}\n\n\tif (!rangeRect)\n\t{\n\t\treturn null;\n\t}\n\n\tconst verticalGap = 10;\n\n\tconst isBodyContainer = scrollerContainer === document.body;\n\tconst scrollLeft = isBodyContainer ? window.pageXOffset : scrollerContainer.scrollLeft;\n\tconst scrollTop = isBodyContainer ? window.pageYOffset : scrollerContainer.scrollTop;\n\n\tlet left = (isBackward ? rangeRect.left : rangeRect.right) + scrollLeft;\n\tlet top = rangeRect.top + scrollTop;\n\tlet bottom = rangeRect.bottom + scrollTop + verticalGap;\n\n\tif (!isBodyContainer)\n\t{\n\t\tconst scrollerRect = scrollerContainer.getBoundingClientRect();\n\t\ttop -= scrollerRect.top;\n\t\tleft -= scrollerRect.left;\n\t\tbottom -= scrollerRect.top;\n\t}\n\n\treturn {\n\t\tleft,\n\t\ttop,\n\t\tbottom,\n\t\tisBackward,\n\t\tisMultiline,\n\t};\n}\n\nfunction createRange(selection: RangeSelection, editor: TextEditor): Range | null\n{\n\tif (!$isRangeSelection(selection))\n\t{\n\t\treturn null;\n\t}\n\n\tconst range = document.createRange();\n\tconst anchorNode = selection.anchor.getNode();\n\tconst focusNode = selection.focus.getNode();\n\n\tconst anchorKey = anchorNode.getKey();\n\tconst focusKey = focusNode.getKey();\n\n\tlet anchorDOM: Node | Text | null = editor.getElementByKey(anchorKey);\n\tlet focusDOM: Node | Text | null = editor.getElementByKey(focusKey);\n\tlet anchorOffset = selection.anchor.offset;\n\tlet focusOffset = selection.focus.offset;\n\n\tif ($isTextNode(anchorNode))\n\t{\n\t\tanchorDOM = getDOMTextNode(anchorDOM);\n\t}\n\n\tif ($isTextNode(focusNode))\n\t{\n\t\tfocusDOM = getDOMTextNode(focusDOM);\n\t}\n\n\tif (anchorDOM === null || focusDOM === null)\n\t{\n\t\treturn null;\n\t}\n\n\tif (anchorDOM.nodeName === 'BR')\n\t{\n\t\t[anchorDOM, anchorOffset] = getDOMIndexWithinParent(anchorDOM);\n\t}\n\n\tif (focusDOM.nodeName === 'BR')\n\t{\n\t\t[focusDOM, focusOffset] = getDOMIndexWithinParent(focusDOM);\n\t}\n\n\tconst firstChild = anchorDOM.firstChild;\n\n\tif (\n\t\tanchorDOM === focusDOM\n\t\t&& firstChild !== null\n\t\t&& firstChild.nodeName === 'BR'\n\t\t&& anchorOffset === 0\n\t\t&& focusOffset === 0\n\t)\n\t{\n\t\tfocusOffset = 1;\n\t}\n\n\ttry\n\t{\n\t\trange.setStart(anchorDOM, anchorOffset);\n\t\trange.setEnd(focusDOM, focusOffset);\n\t}\n\tcatch\n\t{\n\t\treturn null;\n\t}\n\n\tif (range.collapsed && (anchorOffset !== focusOffset || anchorKey !== focusKey))\n\t{\n\t\t// Range is backwards, we need to reverse it\n\t\trange.setStart(focusDOM, focusOffset);\n\t\trange.setEnd(anchorDOM, anchorOffset);\n\t}\n\n\treturn range;\n}\n\nfunction getDOMTextNode(element: Node | null): Text | null\n{\n\tlet node = element;\n\twhile (node !== null)\n\t{\n\t\tif (node.nodeType === Node.TEXT_NODE)\n\t\t{\n\t\t\treturn node;\n\t\t}\n\n\t\tnode = node.firstChild;\n\t}\n\n\treturn null;\n}\n\nfunction getDOMIndexWithinParent(node: ChildNode): [ParentNode, number]\n{\n\tconst parent = node.parentNode;\n\tif (parent === null)\n\t{\n\t\tthrow new Error('Should never happen');\n\t}\n\n\treturn [parent, [...parent.childNodes].indexOf(node)];\n}\n","import { Dom, Type } from 'main.core';\nimport { $getSelection, $isRangeSelection } from 'ui.lexical.core';\nimport { $getSelectionPosition } from './get-selection-position';\n\nimport { type Popup } from 'main.popup';\nimport { type TextEditor } from '../text-editor';\n\nconst lastPositionMap: WeakMap<Popup, 'top' | 'bottom'> = new WeakMap();\nconst editorPadding = 16;\n\nexport function $adjustDialogPosition(\n\tpopup: Popup,\n\teditor: TextEditor,\n\tinitPosition?: (selectionPosition: Object) => {},\n): boolean\n{\n\tconst selection = $getSelection();\n\tif (!$isRangeSelection(selection))\n\t{\n\t\treturn false;\n\t}\n\n\t// for an embedded popup: document.body -> editor.getScrollerContainer()\n\tconst selectionPosition = $getSelectionPosition(editor, selection, document.body);\n\tif (selectionPosition === null)\n\t{\n\t\treturn false;\n\t}\n\n\tconst { top, left, bottom, isBackward } = selectionPosition;\n\tconst scrollerRect: DOMRect = Dom.getPosition(editor.getScrollerContainer());\n\tconst popupRect: DOMRect = Dom.getPosition(popup.getPopupContainer());\n\n\tconst popupWidth: number = popupRect.width;\n\tlet offsetLeft: number = popupWidth / 2;\n\n\t// Try to fit a popup within a scroll area\n\tif (left - offsetLeft < scrollerRect.left)\n\t{\n\t\t// Left boundary\n\t\tconst overflow = scrollerRect.left - (left - offsetLeft);\n\t\toffsetLeft -= overflow + editorPadding;\n\t}\n\telse if (scrollerRect.right < (left + popupWidth - offsetLeft))\n\t{\n\t\t// Right boundary\n\t\toffsetLeft += (left + popupWidth - offsetLeft) - scrollerRect.right + editorPadding;\n\t}\n\n\tpopup.setOffset({ offsetLeft: -offsetLeft });\n\n\tif (bottom < scrollerRect.top || top > scrollerRect.bottom)\n\t{\n\t\t// hide our popup\n\t\tDom.style(popup.getPopupContainer(), { left: '-9999px', top: '-9999px' });\n\t}\n\telse\n\t{\n\t\tconst initialPosition = Type.isFunction(initPosition) ? initPosition(selectionPosition) : (isBackward ? 'top' : 'bottom');\n\t\tconst lastPosition = lastPositionMap.get(popup) || null;\n\t\tlet position = lastPosition === null ? initialPosition : lastPosition;\n\t\tif (top + popupRect.height > scrollerRect.bottom && (scrollerRect.top < top - popupRect.height))\n\t\t{\n\t\t\tposition = 'top';\n\t\t}\n\t\telse if (top - popupRect.height < scrollerRect.top)\n\t\t{\n\t\t\tposition = 'bottom';\n\t\t}\n\n\t\tlastPositionMap.set(popup, position);\n\n\t\tpopup.setBindElement({ left, top, bottom });\n\t\tpopup.adjustPosition({ position, forceBindPosition: true });\n\t}\n\n\treturn true;\n}\n\nexport function clearDialogPosition(popup: Popup)\n{\n\tlastPositionMap.delete(popup);\n}\n","import { Type } from 'main.core';\n\n// eslint-disable-next-line no-control-regex\nconst ATTRIBUTE_WHITESPACES = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g;\nconst SAFE_URL = /^(?:(?:https?|ftps?|mailto):|[^a-z]|[+.a-z-]+(?:[^+.:a-z-]|$))/i;\n\nexport function sanitizeUrl(url: string): string\n{\n\tif (!Type.isStringFilled(url))\n\t{\n\t\treturn '';\n\t}\n\n\tconst normalizedUrl = url.replaceAll(ATTRIBUTE_WHITESPACES, '');\n\n\treturn SAFE_URL.test(normalizedUrl) ? normalizedUrl : '';\n}\n","import { Tag, Type, Loc } from 'main.core';\nimport { MemoryCache, type BaseCache } from 'main.core.cache';\nimport { EventEmitter, type BaseEvent } from 'main.core.events';\nimport { Popup, PopupTarget, PopupTargetOptions } from 'main.popup';\nimport { sanitizeUrl } from '../../helpers/sanitize-url';\n\nimport './image-dialog.css';\n\nexport type ImageDialogOptions = {\n\ttargetContainer?: HTMLElement,\n\tevents?: Object<string, (event: BaseEvent) => {}>,\n}\n\nexport default class ImageDialog extends EventEmitter\n{\n\t#popup: Popup = null;\n\t#imageUrl: string = '';\n\t#targetContainer: HTMLElement = null;\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\n\tconstructor(options: ImageDialogOptions)\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.ImageDialog');\n\n\t\tconst imageDialogOptions: ImageDialogOptions = Type.isPlainObject(options) ? options : {};\n\n\t\tthis.setTargetContainer(imageDialogOptions.targetContainer);\n\t\tthis.subscribeFromOptions(imageDialogOptions.events);\n\t}\n\n\tshow(options: { target: PopupTarget, targetOptions: PopupTargetOptions } = {}): void\n\t{\n\t\tconst target: PopupTarget = options.target ?? undefined;\n\t\tconst targetOptions: PopupTargetOptions = Type.isPlainObject(options.targetOptions) ? options.targetOptions : {};\n\n\t\tif (!Type.isUndefined(target))\n\t\t{\n\t\t\tthis.getPopup().setBindElement(target);\n\t\t}\n\n\t\tthis.getPopup().adjustPosition({\n\t\t\t...targetOptions,\n\t\t\tforceBindPosition: true,\n\t\t});\n\n\t\tthis.getPopup().show();\n\t}\n\n\thide(): void\n\t{\n\t\tthis.getPopup().close();\n\t}\n\n\tisShown(): boolean\n\t{\n\t\treturn this.#popup !== null && this.#popup.isShown();\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.getPopup().destroy();\n\t}\n\n\tsetImageUrl(url: string): void\n\t{\n\t\tif (Type.isString(url))\n\t\t{\n\t\t\tthis.#imageUrl = sanitizeUrl(url);\n\t\t}\n\t}\n\n\tgetImageUrl(): string\n\t{\n\t\treturn this.#imageUrl;\n\t}\n\n\tsetTargetContainer(container: HTMLElement): void\n\t{\n\t\tif (Type.isElementNode(container))\n\t\t{\n\t\t\tthis.#targetContainer = container;\n\t\t}\n\t}\n\n\tgetTargetContainer(): HTMLElement | null\n\t{\n\t\treturn this.#targetContainer;\n\t}\n\n\tgetPopup(): Popup\n\t{\n\t\tif (this.#popup === null)\n\t\t{\n\t\t\tthis.#popup = new Popup({\n\t\t\t\tautoHide: true,\n\t\t\t\tcacheable: false,\n\t\t\t\tpadding: 0,\n\t\t\t\tcloseByEsc: true,\n\t\t\t\ttargetContainer: this.getTargetContainer(),\n\t\t\t\tcontent: this.getContainer(),\n\t\t\t\tevents: {\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tthis.emit('onClose');\n\t\t\t\t\t},\n\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\tthis.emit('onDestroy');\n\t\t\t\t\t},\n\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\tthis.emit('onShow');\n\t\t\t\t\t},\n\t\t\t\t\tonAfterShow: () => {\n\t\t\t\t\t\tthis.emit('onAfterShow');\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn this.#popup;\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-image-dialog\">\n\t\t\t\t\t<div class=\"ui-text-editor-image-dialog-form\">\n\t\t\t\t\t\t<div class=\"ui-ctl ui-ctl-textbox ui-ctl-s ui-ctl-inline ui-ctl-w100 ui-text-editor-image-dialog-textbox\">\n\t\t\t\t\t\t\t<div class=\"ui-ctl-tag\">${Loc.getMessage('TEXT_EDITOR_IMAGE_URL')}</div>\n\t\t\t\t\t\t\t${this.getUrlTextBox()}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button type=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-image-dialog-button\" \n\t\t\t\t\t\t\tonclick=\"${this.#handleSaveBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"image-dialog-save-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --check\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button \n\t\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-image-dialog-button\"\n\t\t\t\t\t\t\tonclick=\"${this.#handleCancelBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"image-dialog-cancel-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --cross-60\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetUrlTextBox(): HTMLInputElement\n\t{\n\t\treturn this.#refs.remember('url-textbox', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<input \n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"ui-ctl-element\"\n\t\t\t\t\tplaceholder=\"https://example.com/image.jpeg\"\n\t\t\t\t\tvalue=\"${this.getImageUrl()}\"\n\t\t\t\t\tonkeydown=\"${this.#handleTextBoxKeyDown.bind(this)}\"\n\t\t\t\t\tdata-testid=\"image-dialog-textbox\"\n\t\t\t\t>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#handleSaveBtnClick(): void\n\t{\n\t\tconst url: string = this.getUrlTextBox().value.trim();\n\t\tif (url.length > 0)\n\t\t{\n\t\t\tthis.setImageUrl(url);\n\t\t\tthis.emit('onSave');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getUrlTextBox().focus();\n\t\t}\n\t}\n\n\t#handleTextBoxKeyDown(event: KeyboardEvent)\n\t{\n\t\tif (event.key === 'Enter')\n\t\t{\n\t\t\tevent.preventDefault();\n\t\t\tthis.#handleSaveBtnClick();\n\t\t}\n\t}\n\n\t#handleCancelBtnClick(): void\n\t{\n\t\tthis.emit('onCancel');\n\t}\n}\n","import { Event, Loc, Type } from 'main.core';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\n\nimport {\n\ttype BBCodeConversion,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n\ttype BBCodeExportOutput,\n\ttype BBCodeConversionFn,\n} from '../../bbcode';\n\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport { $adjustDialogPosition } from '../../helpers/adjust-dialog-position';\nimport {\n\tcreateCommand,\n\t$createTextNode,\n\t$insertNodes,\n\t$isRootOrShadowRoot,\n\t$createParagraphNode,\n\t$getSelection,\n\t$setSelection,\n\t$isRangeSelection,\n\tCOMMAND_PRIORITY_EDITOR,\n\tCOMMAND_PRIORITY_LOW,\n\ttype LexicalNode,\n\ttype LexicalCommand,\n\ttype RangeSelection,\n} from 'ui.lexical.core';\n\nimport { $wrapNodeInElement, mergeRegister } from 'ui.lexical.utils';\nimport { registerDraggableNode } from '../../helpers/register-draggable-node';\nimport { validateImageUrl } from '../../helpers/validate-image-url';\n\nimport Button from '../../toolbar/button';\nimport BasePlugin from '../base-plugin';\nimport ImageDialog from './image-dialog';\nimport { $createImageNode, ImageNode, type ImagePayload } from './image-node';\n\nimport { type TextEditor } from '../../text-editor';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nimport './image-plugin.css';\n\nexport type InsertImagePayload = Readonly<ImagePayload>;\nexport const INSERT_IMAGE_COMMAND: LexicalCommand<InsertImagePayload> = createCommand('INSERT_IMAGE_COMMAND');\nexport const INSERT_IMAGE_DIALOG_COMMAND: LexicalCommand = createCommand('INSERT_IMAGE_DIALOG_COMMAND');\n\nexport class ImagePlugin extends BasePlugin\n{\n\t#imageDialog: ImageDialog = null;\n\t#onEditorScroll: Function = this.#handleEditorScroll.bind(this);\n\t#lastSelection: RangeSelection = null;\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.#registerCommands(),\n\t\t\tregisterDraggableNode(\n\t\t\t\tthis.getEditor(),\n\t\t\t\tImageNode,\n\t\t\t\t(data) => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_IMAGE_COMMAND, data);\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Image';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [ImageNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\timg: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\t// [img]{url}[/img]\n\t\t\t\t\t// [img width={width} height={height}]{url}[/img]\n\t\t\t\t\tconst src = node.getContent().trim();\n\t\t\t\t\tconst width = Number(node.getAttribute('width'));\n\t\t\t\t\tconst height = Number(node.getAttribute('height'));\n\n\t\t\t\t\tif (validateImageUrl(src))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnode: $createImageNode({ src, width, height }),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createTextNode(node.toString()),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\timage: (lexicalNode: ImageNode): BBCodeExportOutput => {\n\t\t\t\tconst attributes = {};\n\t\t\t\tconst width = lexicalNode.getWidth();\n\t\t\t\tconst height = lexicalNode.getHeight();\n\t\t\t\tif (Type.isNumber(width) && Type.isNumber(height))\n\t\t\t\t{\n\t\t\t\t\tattributes.width = width;\n\t\t\t\t\tattributes.height = height;\n\t\t\t\t}\n\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({\n\t\t\t\t\t\tname: 'img',\n\t\t\t\t\t\tinline: true,\n\t\t\t\t\t\tattributes,\n\t\t\t\t\t}),\n\t\t\t\t\tafter: (elementNode: BBCodeElementNode) => {\n\t\t\t\t\t\telementNode.setChildren([scheme.createText(lexicalNode.getSrc())]);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: ImageNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\timage: 'img',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerCommands(): () => void\n\t{\n\t\treturn mergeRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_IMAGE_COMMAND,\n\t\t\t\t(payload: InsertImagePayload) => {\n\t\t\t\t\tif (!validateImageUrl(payload?.src))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst imageNode = $createImageNode(payload);\n\t\t\t\t\t$insertNodes([imageNode]);\n\t\t\t\t\tif ($isRootOrShadowRoot(imageNode.getParentOrThrow()))\n\t\t\t\t\t{\n\t\t\t\t\t\t$wrapNodeInElement(imageNode, $createParagraphNode).selectEnd();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_IMAGE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#lastSelection = selection.clone();\n\t\t\t\t\tif (this.#imageDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#imageDialog.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getEditor().dispatchCommand(HIDE_DIALOG_COMMAND);\n\n\t\t\t\t\tthis.#imageDialog = new ImageDialog({\n\t\t\t\t\t\t// for an embedded popup: document.body -> this.getEditor().getScrollerContainer()\n\t\t\t\t\t\ttargetContainer: document.body,\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tonSave: () => {\n\t\t\t\t\t\t\t\tconst url = this.#imageDialog.getImageUrl();\n\t\t\t\t\t\t\t\tif (!Type.isStringFilled(url))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.#imageDialog.hide();\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_IMAGE_COMMAND, { src: url });\n\n\t\t\t\t\t\t\t\tthis.#imageDialog.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\t\t\tthis.#imageDialog.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\t\tthis.#handleDialogDestroy();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\t\t\tthis.#handleDialogDestroy();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\t\t\tif ($adjustDialogPosition(this.#imageDialog.getPopup(), this.getEditor()))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tEvent.bind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\t\t\t\t\t\t\t\tthis.getEditor().highlightSelection();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonAfterShow: () => {\n\t\t\t\t\t\t\t\tthis.#imageDialog.getUrlTextBox().focus();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.#imageDialog.show();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (this.#imageDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#imageDialog.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDIALOG_VISIBILITY_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn this.#imageDialog !== null && this.#imageDialog.isShown();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#restoreSelection(): boolean\n\t{\n\t\tconst selection = $getSelection();\n\t\tif (!$isRangeSelection(selection) && this.#lastSelection !== null)\n\t\t{\n\t\t\t$setSelection(this.#lastSelection);\n\t\t\tthis.#lastSelection = null;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#handleDialogDestroy(): void\n\t{\n\t\tthis.#imageDialog = null;\n\t\tEvent.unbind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\tthis.getEditor().resetHighlightSelection();\n\n\t\tthis.getEditor().update(() => {\n\t\t\tif (!this.#restoreSelection())\n\t\t\t{\n\t\t\t\tthis.getEditor().focus();\n\t\t\t}\n\t\t});\n\t}\n\n\t#handleEditorScroll(): void\n\t{\n\t\tthis.getEditor().update(() => {\n\t\t\t$adjustDialogPosition(this.#imageDialog.getPopup(), this.getEditor());\n\t\t});\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('image', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --incert-image\"></span>');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_IMAGE'));\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tif (this.#imageDialog !== null && this.#imageDialog.isShown())\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.getEditor().focus(() => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_IMAGE_DIALOG_COMMAND);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#imageDialog !== null)\n\t\t{\n\t\t\tthis.#imageDialog.destroy();\n\t\t}\n\t}\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { Type, Dom } from 'main.core';\n\nimport {\n\t$applyNodeReplacement,\n\tElementNode,\n\t$isRangeSelection,\n\t$createParagraphNode,\n\ttype DOMConversionMap,\n\ttype DOMConversionOutput,\n\ttype DOMExportOutput,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype SerializedElementNode,\n\ttype LexicalEditor,\n\ttype RangeSelection,\n} from 'ui.lexical.core';\n\nexport type SerializedMentionNode = {\n\tmentionName: string,\n\tentityId: string,\n\tid: string | number,\n} & SerializedElementNode;\n\nexport class MentionNode extends ElementNode\n{\n\t__id: string | number;\n\t__entityId: string;\n\n\tconstructor(\n\t\tentityId: string,\n\t\tid: string | number,\n\t\tkey?: NodeKey,\n\t)\n\t{\n\t\tsuper(key);\n\n\t\tthis.__entityId = entityId;\n\t\tthis.__id = id;\n\t}\n\n\tstatic getType(): string\n\t{\n\t\treturn 'mention';\n\t}\n\n\tstatic clone(node: MentionNode): MentionNode\n\t{\n\t\treturn new MentionNode(\n\t\t\tnode.__entityId,\n\t\t\tnode.__id,\n\t\t\tnode.__key,\n\t\t);\n\t}\n\n\tgetId(): string | number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__id;\n\t}\n\n\tgetEntityId(): string\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__entityId;\n\t}\n\n\tstatic importJSON(serializedNode: SerializedMentionNode): MentionNode\n\t{\n\t\tconst node: MentionNode = $createMentionNode(\n\t\t\tserializedNode.entityId,\n\t\t\tserializedNode.id,\n\t\t);\n\n\t\tnode.setFormat(serializedNode.format);\n\t\tnode.setDirection(serializedNode.direction);\n\n\t\treturn node;\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\tspan: (domNode: HTMLElement) => {\n\t\t\t\tif (!domNode.hasAttribute('data-mention-id'))\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tconversion: convertMentionElement,\n\t\t\t\t\tpriority: 1,\n\t\t\t\t};\n\t\t\t},\n\t\t\ta: (domNode: HTMLElement) => {\n\t\t\t\tif (!domNode.hasAttribute('data-mention-id'))\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tconversion: convertMentionElement,\n\t\t\t\t\tpriority: 1,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\tconst element = document.createElement('span');\n\t\telement.setAttribute('data-mention-entity-id', this.__entityId);\n\t\telement.setAttribute('data-mention-id', this.__id.toString());\n\n\t\treturn { element };\n\t}\n\n\texportJSON(): SerializedMentionNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\tentityId: this.__entityId,\n\t\t\tid: this.__id,\n\t\t\ttype: 'mention',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tcreateDOM(config: EditorConfig, editor: LexicalEditor): HTMLSpanElement\n\t{\n\t\tconst element = document.createElement('span');\n\t\tif (Type.isStringFilled(config?.theme?.mention))\n\t\t{\n\t\t\tDom.addClass(element, config.theme.mention);\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tupdateDOM(prevNode: MentionNode, anchor: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tcanInsertTextBefore(): false\n\t{\n\t\treturn false;\n\t}\n\n\tcanInsertTextAfter(): false\n\t{\n\t\treturn false;\n\t}\n\n\tcanBeEmpty(): false\n\t{\n\t\treturn false;\n\t}\n\n\tisInline(): true\n\t{\n\t\treturn true;\n\t}\n\n\tinsertNewAfter(selection: RangeSelection, restoreSelection: boolean): ParagraphNode\n\t{\n\t\tconst newElement = $createParagraphNode();\n\t\tconst direction = this.getDirection();\n\t\tnewElement.setDirection(direction);\n\t\tthis.insertAfter(newElement, restoreSelection);\n\n\t\treturn newElement;\n\t}\n\n\textractWithChild(\n\t\tchild: LexicalNode,\n\t\tselection: RangeSelection,\n\t\tdestination: 'clone' | 'html',\n\t): boolean\n\t{\n\t\tif (!$isRangeSelection(selection))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst anchor = selection.anchor;\n\t\tconst focus = selection.focus;\n\t\tconst anchorNode = anchor.getNode();\n\t\tconst focusNode = focus.getNode();\n\t\tconst isBackward: boolean = selection.isBackward();\n\t\tconst selectionLength: number = (\n\t\t\tisBackward\n\t\t\t\t? anchor.offset - focus.offset\n\t\t\t\t: focus.offset - anchor.offset\n\t\t);\n\n\t\treturn (\n\t\t\tthis.isParentOf(anchorNode)\n\t\t\t&& this.isParentOf(focusNode)\n\t\t\t&& this.getTextContent().length === selectionLength\n\t\t);\n\t}\n}\n\nfunction convertMentionElement(domNode: HTMLElement): DOMConversionOutput | null\n{\n\tconst textContent = domNode.textContent;\n\tif (textContent !== null)\n\t{\n\t\tconst { mentionEntityId, mentionId } = domNode.dataset;\n\t\tconst node = $createMentionNode(mentionEntityId, mentionId);\n\n\t\treturn {\n\t\t\tnode,\n\t\t};\n\t}\n\n\treturn null;\n}\n\nexport function $createMentionNode(entityId: string, id: string | number): MentionNode\n{\n\tconst mentionNode: MentionNode = new MentionNode(entityId, id);\n\n\treturn $applyNodeReplacement(mentionNode);\n}\n\nexport function $isMentionNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof MentionNode;\n}\n","import { Type, Runtime, Loc, Event, Dom } from 'main.core';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\n\nimport type {\n\tBBCodeConversionOutput,\n\tBBCodeConversion,\n\tBBCodeImportConversion,\n\tBBCodeExportConversion,\n\tBBCodeExportOutput,\n} from '../../bbcode';\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport { $getSelectionPosition } from '../../helpers/get-selection-position';\nimport Button from '../../toolbar/button';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nimport BasePlugin from '../base-plugin';\nimport { $createMentionNode, MentionNode } from './mention-node';\n\nimport type { Dialog, DialogOptions } from 'ui.entity-selector';\nimport type { BaseEvent } from 'main.core.events';\nimport { type TextEditor } from '../../text-editor';\n\nimport {\n\t$getSelection,\n\t$isRangeSelection,\n\t$isTextNode,\n\t$createTextNode,\n\tcreateCommand,\n\t$createParagraphNode,\n\t$insertNodes,\n\t$isRootOrShadowRoot,\n\tCOMMAND_PRIORITY_EDITOR,\n\tCOMMAND_PRIORITY_LOW,\n\tKEY_ARROW_DOWN_COMMAND,\n\tKEY_ARROW_UP_COMMAND,\n\tKEY_ENTER_COMMAND,\n\tKEY_ESCAPE_COMMAND,\n\tKEY_TAB_COMMAND,\n\tKEY_DOWN_COMMAND,\n\ttype RangeSelection,\n\ttype LexicalNode,\n\ttype TextNode,\n\ttype LexicalCommand,\n} from 'ui.lexical.core';\n\nimport { $wrapNodeInElement, mergeRegister } from 'ui.lexical.utils';\n\nimport './mention.css';\n\nexport type QueryMatch = {\n\tleadOffset: number;\n\tmatchingString: string;\n\treplaceableString: string;\n};\n\nconst PUNCTUATION = '\\\\.,\\\\+\\\\*\\\\?\\\\$\\\\@\\\\|#{}\\\\(\\\\)\\\\^\\\\-\\\\[\\\\]\\\\\\\\/!%\\'\"~=<>_:;';\nconst TRIGGERS = ['@', '+'].join('');\n\n// Chars we expect to see in a mention (non-space, non-punctuation).\nconst VALID_CHARS = `[^${TRIGGERS}${PUNCTUATION}\\\\s]`;\n\n// Non-standard series of chars. Each series must be preceded and followed by\n// a valid char.\nconst VALID_JOINS = (\n\t'(?:'\n\t+ '\\\\.[ |$]|' // E.g. \"r. \" in \"Mr. Smith\"\n\t+ ' |' // E.g. \" \" in \"Josh Duck\"\n\t+ `[${PUNCTUATION}]|` // E.g. \"-' in \"Salier-Hellendag\"\n\t+ ')'\n);\n\nconst LENGTH_LIMIT = 25;\n\nconst mentionRegex = new RegExp(\n\t'(^|\\\\s|\\\\()('\n\t+ `[${TRIGGERS}]`\n\t+ `((?:${VALID_CHARS}${VALID_JOINS}){0,${LENGTH_LIMIT}})`\n\t+ ')$',\n);\n\nexport type InsertMentionPayload = {\n\tentityId: string,\n\tid: string | number,\n\ttext: string,\n\tbefore?: string,\n\tafter?: string,\n};\n\nexport const INSERT_MENTION_COMMAND: LexicalCommand<InsertMentionPayload> = createCommand('INSERT_MENTION_COMMAND');\nexport const INSERT_MENTION_DIALOG_COMMAND: LexicalCommand<InsertMentionPayload> = createCommand('INSERT_MENTION_DIALOG_COMMAND');\n\nexport class MentionPlugin extends BasePlugin\n{\n\t#dialog: Dialog = null;\n\t#lastQueryMatch: QueryMatch = null;\n\t#mentionListening: boolean = false;\n\t#removeKeyboardCommandsLock: Function = null;\n\t#removeUpdateListener: Function = null;\n\t#onEditorScroll: Function = this.#handleEditorScroll.bind(this);\n\t#lastPosition: { left: number, top: number } = null;\n\t#timeoutId: number = null;\n\t#triggerByAtSign: boolean = false;\n\n\t#dialogOptions: DialogOptions = null;\n\t#entities: Set<string> = new Set();\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tconst entities = editor.getOption('mention.entities', []);\n\t\tthis.#entities = Type.isArrayFilled(entities) ? new Set(entities) : new Set();\n\n\t\tconst dialogOptions = editor.getOption('mention.dialogOptions');\n\t\tif (Type.isPlainObject(dialogOptions))\n\t\t{\n\t\t\tthis.#dialogOptions = dialogOptions;\n\t\t\tif (Type.isArrayFilled(this.#dialogOptions.entities))\n\t\t\t{\n\t\t\t\tfor (const entity of this.#dialogOptions.entities)\n\t\t\t\t{\n\t\t\t\t\tif (Type.isPlainObject(entity) && Type.isStringFilled(entity.id))\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#entities.add(entity.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.#registerKeyDownListener();\n\t\t}\n\n\t\tif (this.#entities.size > 0)\n\t\t{\n\t\t\tthis.#registerCommands();\n\t\t\tthis.#registerComponents();\n\t\t}\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Mention';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [MentionNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion | null\n\t{\n\t\tif (this.#entities.size > 0)\n\t\t{\n\t\t\tconst map = {};\n\t\t\tfor (const entityId of this.#entities)\n\t\t\t{\n\t\t\t\tmap[entityId] = (): BBCodeConversion => ({\n\t\t\t\t\tconversion: this.#convertMentionElement,\n\t\t\t\t\tpriority: 0,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tmention: (lexicalNode: MentionNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({\n\t\t\t\t\t\tname: lexicalNode.getEntityId(),\n\t\t\t\t\t\tvalue: lexicalNode.getId(),\n\t\t\t\t\t\tinline: true,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: MentionNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\tmention: '#mention',\n\t\t\t},\n\t\t};\n\t}\n\n\tshouldTriggerByAtSign(): boolean\n\t{\n\t\treturn this.#triggerByAtSign;\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_MENTION_COMMAND,\n\t\t\t\t(payload: InsertMentionPayload) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!Type.isPlainObject(payload)\n\t\t\t\t\t\t|| !Type.isStringFilled(payload.entityId)\n\t\t\t\t\t\t|| !Type.isStringFilled(payload.text)\n\t\t\t\t\t\t|| (!Type.isStringFilled(payload.id) && !Type.isNumber(payload.id))\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.#entities.has(payload.entityId))\n\t\t\t\t\t{\n\t\t\t\t\t\tconsole.error(`TextEditor: MentionPlugin: entity id \"${payload.entityId}\" was not found.`);\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst mentionNode = $createMentionNode(payload.entityId, payload.id);\n\t\t\t\t\tmentionNode.append($createTextNode(payload.text));\n\n\t\t\t\t\tconst nodesToInsert = [];\n\t\t\t\t\tif (Type.isStringFilled(payload.before))\n\t\t\t\t\t{\n\t\t\t\t\t\tnodesToInsert.push($createTextNode(payload.before));\n\t\t\t\t\t}\n\n\t\t\t\t\tnodesToInsert.push(mentionNode);\n\n\t\t\t\t\tif (Type.isStringFilled(payload.after))\n\t\t\t\t\t{\n\t\t\t\t\t\tnodesToInsert.push($createTextNode(payload.after));\n\t\t\t\t\t}\n\n\t\t\t\t\t$insertNodes(nodesToInsert);\n\t\t\t\t\tif ($isRootOrShadowRoot(mentionNode.getParentOrThrow()))\n\t\t\t\t\t{\n\t\t\t\t\t\t$wrapNodeInElement(mentionNode, $createParagraphNode).selectEnd();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_MENTION_DIALOG_COMMAND,\n\t\t\t\t(payload): boolean => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getEditor().update(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tconst currentText = this.#getTextUpToAnchor(selection);\n\t\t\t\t\t\t\tlet needSpace = currentText !== null && !/(\\s|\\()$/.test(currentText);\n\t\t\t\t\t\t\tif (needSpace)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst anchor = selection.anchor;\n\t\t\t\t\t\t\t\tconst anchorNode = anchor.getNode();\n\t\t\t\t\t\t\t\tif (anchorNode.getIndexWithinParent() === 0 && anchor.offset === 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tneedSpace = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tselection.insertText(needSpace ? ' @' : '@');\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tonUpdate: () => {\n\t\t\t\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\t\t\t\tconst match: null | QueryMatch = this.#getQueryMatch($getSelection());\n\t\t\t\t\t\t\t\t\tif (match !== null && !this.#isSelectionOnEntityBoundary(match.leadOffset))\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tthis.#openDialog(match);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(payload): boolean => {\n\t\t\t\t\tif (!payload || payload.sender !== 'mention')\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#hideDialog();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDIALOG_VISIBILITY_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn this.isDialogVisible();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('mention', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --mention\"></span>');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_MENTION'));\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tif (this.isDialogVisible())\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.getEditor().focus(() => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_MENTION_DIALOG_COMMAND);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\t#convertMentionElement(node: BBCodeElementNode): BBCodeConversionOutput\n\t{\n\t\treturn {\n\t\t\tnode: $createMentionNode(node.getName(), node.getValue()),\n\t\t};\n\t}\n\n\t#registerKeyDownListener(): void\n\t{\n\t\tthis.#triggerByAtSign = true;\n\n\t\tconst keyDownListener = (event: KeyboardEvent) => {\n\t\t\tif (this.#mentionListening)\n\t\t\t{\n\t\t\t\tif (event.key === 'Escape' || event.key === 'Enter')\n\t\t\t\t{\n\t\t\t\t\tthis.#stopMentionListening();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!this.#mentionListening && (event.key === '+' || event.key === '@'))\n\t\t\t{\n\t\t\t\tthis.#timeoutId = setTimeout((): void => {\n\t\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\t\tconst match: null | QueryMatch = this.#getQueryMatch(selection);\n\t\t\t\t\t\tif (match !== null && !this.#isSelectionOnEntityBoundary(match.leadOffset))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.#openDialog(match);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}, 300);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(KEY_DOWN_COMMAND, keyDownListener, COMMAND_PRIORITY_LOW),\n\t\t);\n\t}\n\n\t#registerTextContentListener(): void\n\t{\n\t\tthis.#unregisterTextContentListener();\n\n\t\tthis.#removeUpdateListener = this.getEditor().registerTextContentListener(\n\t\t\tthis.#textContentListener.bind(this),\n\t\t);\n\t}\n\n\t#unregisterTextContentListener(): void\n\t{\n\t\tif (this.#removeUpdateListener !== null)\n\t\t{\n\t\t\tthis.#removeUpdateListener();\n\t\t\tthis.#removeUpdateListener = null;\n\t\t}\n\t}\n\n\t#textContentListener(): void\n\t{\n\t\tthis.getEditor().getEditorState().read(() => {\n\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\tconst match: null | QueryMatch = this.#getQueryMatch(selection);\n\t\t\tif (match !== null && !this.#isSelectionOnEntityBoundary(match.leadOffset))\n\t\t\t{\n\t\t\t\tthis.#openDialog(match);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.#hideDialog();\n\t\t\t}\n\t\t});\n\t}\n\n\t#startMentionListening(): void\n\t{\n\t\tthis.#mentionListening = true;\n\t\tthis.#registerTextContentListener();\n\t}\n\n\t#stopMentionListening(): void\n\t{\n\t\tthis.#mentionListening = false;\n\t\tthis.#unregisterTextContentListener();\n\t}\n\n\t#getQueryMatch(selection: RangeSelection, minMatchLength: number = 0): null | QueryMatch\n\t{\n\t\tif (!$isRangeSelection(selection) || !selection.isCollapsed())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst anchor = selection.anchor;\n\t\tconst anchorNode = anchor.getNode();\n\t\tif (!$isTextNode(anchorNode) || !anchorNode.isSimpleText())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst text: string | null = this.#getTextUpToAnchor(selection);\n\n\t\t// console.log(\"text:\", text);\n\n\t\tif (!Type.isStringFilled(text))\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.#matchMention(text, minMatchLength);\n\t}\n\n\t#getTextUpToAnchor(selection: RangeSelection): string | null\n\t{\n\t\tconst anchor = selection.anchor;\n\t\tif (anchor.type !== 'text')\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst anchorNode = anchor.getNode();\n\t\tif (!anchorNode.isSimpleText())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst anchorOffset: number = anchor.offset;\n\n\t\treturn anchorNode.getTextContent().slice(0, anchorOffset);\n\t}\n\n\t#isSelectionOnEntityBoundary(offset: number): boolean\n\t{\n\t\tif (offset !== 0)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn this.getEditor().getEditorState().read(() => {\n\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\tif ($isRangeSelection(selection))\n\t\t\t{\n\t\t\t\tconst anchor = selection.anchor;\n\t\t\t\tconst anchorNode = anchor.getNode();\n\t\t\t\tconst prevSibling = anchorNode.getPreviousSibling();\n\n\t\t\t\treturn $isTextNode(prevSibling) && prevSibling.isTextEntity();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t}\n\n\t#matchMention(text: string, minMatchLength: number): QueryMatch | null\n\t{\n\t\tconst match = mentionRegex.exec(text);\n\t\tif (match !== null)\n\t\t{\n\t\t\t// The strategy ignores leading whitespace but we need to know it's\n\t\t\t// length to add it to the leadOffset\n\t\t\tconst maybeLeadingWhitespace = match[1];\n\n\t\t\tconst matchingString = match[3];\n\t\t\tif (matchingString.length >= minMatchLength)\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tleadOffset: match.index + maybeLeadingWhitespace.length,\n\t\t\t\t\tmatchingString,\n\t\t\t\t\treplaceableString: match[2],\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Split Lexical TextNode and return a new TextNode only containing matched text.\n\t * Common use cases include: removing the node, replacing with a new node.\n\t */\n\t#splitNodeContainingQuery(match: QueryMatch): TextNode | null\n\t{\n\t\tconst selection: RangeSelection = $getSelection();\n\t\tif (!$isRangeSelection(selection) || !selection.isCollapsed())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst anchor = selection.anchor;\n\t\tif (anchor.type !== 'text')\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst anchorNode = anchor.getNode();\n\t\tif (!anchorNode.isSimpleText())\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tconst selectionOffset = anchor.offset;\n\t\tconst textContent = anchorNode.getTextContent().slice(0, selectionOffset);\n\t\tconst characterOffset: number = match.replaceableString.length;\n\t\tconst queryOffset: number = this.#getFullMatchOffset(textContent, match.matchingString, characterOffset);\n\n\t\tconst startOffset: number = selectionOffset - queryOffset;\n\t\tif (startOffset < 0)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tlet newNode = null;\n\t\tif (startOffset === 0)\n\t\t{\n\t\t\t[newNode] = anchorNode.splitText(selectionOffset);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t[, newNode] = anchorNode.splitText(startOffset, selectionOffset);\n\t\t}\n\n\t\treturn newNode;\n\t}\n\n\t/**\n \t* Walk backwards along user input and forward through entity title to try\n \t* and replace more of the user's text with entity.\n \t*/\n\t#getFullMatchOffset(documentText: string, entryText: string, offset: number): number\n\t{\n\t\tlet triggerOffset: number = offset;\n\t\tfor (let i: number = triggerOffset; i <= entryText.length; i++)\n\t\t{\n\t\t\tif (documentText.slice(-i) === entryText.slice(0, Math.max(0, i)))\n\t\t\t{\n\t\t\t\ttriggerOffset = i;\n\t\t\t}\n\t\t}\n\n\t\treturn triggerOffset;\n\t}\n\n\t#openDialog(queryMatch: QueryMatch): void\n\t{\n\t\tif (this.isDestroyed())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#lastQueryMatch = queryMatch;\n\t\tif (this.#dialog === null)\n\t\t{\n\t\t\tconst dialogOptions = Type.isPlainObject(this.#dialogOptions) ? { ...this.#dialogOptions } : {};\n\t\t\tconst userEvents = dialogOptions.events;\n\n\t\t\tRuntime.loadExtension('ui.entity-selector').then((exports) => {\n\t\t\t\tif (this.isDestroyed())\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { Dialog } = exports;\n\n\t\t\t\tconst entitySelectorOptions: DialogOptions = {\n\t\t\t\t\tmultiple: false,\n\t\t\t\t\tenableSearch: false,\n\t\t\t\t\tclearSearchOnSelect: true,\n\t\t\t\t\thideOnSelect: true,\n\t\t\t\t\thideByEsc: true,\n\t\t\t\t\tautoHide: true,\n\t\t\t\t\theight: 300,\n\t\t\t\t\twidth: 400,\n\t\t\t\t\toffsetAnimation: false,\n\t\t\t\t\tcompactView: true,\n\t\t\t\t\t...dialogOptions,\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\t\tthis.#lockKeyboardCommands();\n\t\t\t\t\t\t\tthis.#startMentionListening();\n\t\t\t\t\t\t\tEvent.bind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonHide: () => {\n\t\t\t\t\t\t\tthis.#handleHideOrDestroy();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\t\tthis.#handleHideOrDestroy();\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'Item:onBeforeSelect': (event: BaseEvent) => {\n\t\t\t\t\t\t\tconst selectedItem = event.getData().item;\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\t\t\t\tconst nodeToReplace: ?TextNode = this.#splitNodeContainingQuery(this.#lastQueryMatch);\n\t\t\t\t\t\t\t\tconst mentionNode: MentionNode = $createMentionNode(\n\t\t\t\t\t\t\t\t\tselectedItem.getEntityId(),\n\t\t\t\t\t\t\t\t\tselectedItem.getId(),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tmentionNode.append(\n\t\t\t\t\t\t\t\t\t$createTextNode(selectedItem.getTitle()),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (nodeToReplace)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tnodeToReplace.replace(mentionNode);\n\t\t\t\t\t\t\t\t\tmentionNode.select();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.#hideDialog();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tthis.#dialog = new Dialog(entitySelectorOptions);\n\n\t\t\t\tthis.getEditor().dispatchCommand(HIDE_DIALOG_COMMAND, { sender: 'mention' });\n\n\t\t\t\tthis.#dialog.subscribeFromOptions(userEvents);\n\t\t\t\tthis.#dialog.show();\n\t\t\t\tthis.#dialog.search(queryMatch.matchingString);\n\t\t\t\tthis.#adjustDialogPosition();\n\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error('TextEditor: MentionPlugin: cannot load \"ui.entity-selector\"', error);\n\t\t\t\t});\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getEditor().dispatchCommand(HIDE_DIALOG_COMMAND, { sender: 'mention' });\n\n\t\t\tthis.#dialog.show();\n\t\t\tthis.#dialog.search(queryMatch.matchingString);\n\t\t\tthis.#adjustDialogPosition();\n\t\t}\n\t}\n\n\tisDialogVisible(): boolean\n\t{\n\t\treturn this.#dialog !== null && this.#dialog.isRendered() && this.#dialog.getPopup().isShown();\n\t}\n\n\t#adjustDialogPosition(): void\n\t{\n\t\tthis.getEditor().update(() => {\n\t\t\tconst selectionPosition = $getSelectionPosition(this.getEditor(), $getSelection(), document.body);\n\t\t\tif (selectionPosition === null)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { top, left, bottom } = selectionPosition;\n\t\t\tconst scrollerRect: DOMRect = Dom.getPosition(this.getEditor().getScrollerContainer());\n\t\t\tconst popupWidth = 400;\n\n\t\t\tlet offsetLeft = 10;\n\t\t\tif (left - offsetLeft < scrollerRect.left)\n\t\t\t{\n\t\t\t\t// Left boundary\n\t\t\t\tconst overflow = scrollerRect.left - (left - offsetLeft);\n\t\t\t\toffsetLeft -= overflow + 16;\n\t\t\t}\n\t\t\telse if (scrollerRect.right < (left + popupWidth - offsetLeft))\n\t\t\t{\n\t\t\t\t// Right boundary\n\t\t\t\toffsetLeft += (left + popupWidth - offsetLeft) - scrollerRect.right + 16;\n\t\t\t}\n\n\t\t\tif (bottom < scrollerRect.top || top > scrollerRect.bottom)\n\t\t\t{\n\t\t\t\tDom.addClass(this.#dialog.getPopup().getPopupContainer(), 'ui-text-editor-mention-popup__hidden');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(this.#dialog.getPopup().getPopupContainer(), 'ui-text-editor-mention-popup__hidden');\n\n\t\t\t\tthis.#dialog.show();\n\t\t\t\tif (this.#lastPosition === null || this.#lastPosition.top !== bottom)\n\t\t\t\t{\n\t\t\t\t\tthis.#lastPosition = { left: left - offsetLeft, top: bottom };\n\t\t\t\t}\n\n\t\t\t\tthis.#dialog.getPopup().setBindElement(this.#lastPosition);\n\t\t\t\tthis.#dialog.getPopup().adjustPosition({ forceBindPosition: true, forceTop: true });\n\t\t\t}\n\t\t});\n\t}\n\n\t#handleEditorScroll(): void\n\t{\n\t\tthis.#adjustDialogPosition();\n\t}\n\n\t#handleHideOrDestroy(): void\n\t{\n\t\tthis.#lastPosition = null;\n\t\tthis.#unlockKeyboardCommands();\n\t\tthis.#stopMentionListening();\n\t\tEvent.unbind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t}\n\n\t#hideDialog(): void\n\t{\n\t\tif (this.#dialog !== null)\n\t\t{\n\t\t\tthis.#dialog.hide();\n\t\t}\n\t}\n\n\t#lockKeyboardCommands(): void\n\t{\n\t\tif (this.#removeKeyboardCommandsLock === null)\n\t\t{\n\t\t\tthis.#removeKeyboardCommandsLock = mergeRegister(\n\t\t\t\tthis.getEditor().registerCommand(KEY_ARROW_DOWN_COMMAND, (): true => true, COMMAND_PRIORITY_LOW),\n\t\t\t\tthis.getEditor().registerCommand(KEY_ARROW_UP_COMMAND, (): true => true, COMMAND_PRIORITY_LOW),\n\t\t\t\tthis.getEditor().registerCommand(KEY_ESCAPE_COMMAND, (): true => true, COMMAND_PRIORITY_LOW),\n\t\t\t\tthis.getEditor().registerCommand(KEY_TAB_COMMAND, (): true => true, COMMAND_PRIORITY_LOW),\n\t\t\t\tthis.getEditor().registerCommand(KEY_ENTER_COMMAND, (): true => true, COMMAND_PRIORITY_LOW),\n\t\t\t);\n\t\t}\n\t}\n\n\t#unlockKeyboardCommands(): void\n\t{\n\t\tif (this.#removeKeyboardCommandsLock !== null)\n\t\t{\n\t\t\tthis.#removeKeyboardCommandsLock();\n\t\t\tthis.#removeKeyboardCommandsLock = null;\n\t\t}\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#timeoutId !== null)\n\t\t{\n\t\t\tclearTimeout(this.#timeoutId);\n\t\t\tthis.#timeoutId = null;\n\t\t}\n\n\t\tif (this.#dialog !== null)\n\t\t{\n\t\t\tthis.#dialog.destroy();\n\t\t}\n\n\t\tthis.#unregisterTextContentListener();\n\t\tthis.#unlockKeyboardCommands();\n\t}\n}\n","/* eslint-disable no-underscore-dangle,@bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { Dom, Type } from 'main.core';\nimport type { DecoratorOptions } from '../../types/decorator-options';\n\nimport {\n\tDecoratorNode,\n\t$applyNodeReplacement,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype DOMExportOutput,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\n\nexport type SerializedSmileyNode = {\n\tsrc: string;\n\ttyping: string;\n\twidth?: number;\n\theight?: number;\n\ttype: 'smiley',\n\tversion: number,\n};\n\nexport class SmileyNode extends DecoratorNode\n{\n\t__src: string;\n\t__typing: string;\n\t__width: number = null;\n\t__height: number = null;\n\n\tstatic getType(): string\n\t{\n\t\treturn 'smiley';\n\t}\n\n\tstatic clone(node: SmileyNode): SmileyNode\n\t{\n\t\treturn new SmileyNode(\n\t\t\tnode.__src,\n\t\t\tnode.__typing,\n\t\t\tnode.__width,\n\t\t\tnode.__height,\n\t\t\tnode.__key,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tsrc: string,\n\t\ttyping: string,\n\t\twidth?: number,\n\t\theight?: number,\n\t\tkey?: NodeKey,\n\t)\n\t{\n\t\tsuper(key);\n\t\tthis.__src = src;\n\t\tthis.__typing = typing;\n\n\t\tif (Type.isNumber(width))\n\t\t{\n\t\t\tthis.__width = width;\n\t\t}\n\n\t\tif (Type.isNumber(height))\n\t\t{\n\t\t\tthis.__height = height;\n\t\t}\n\t}\n\n\tgetSrc(): string\n\t{\n\t\treturn this.__src;\n\t}\n\n\tgetTyping(): string\n\t{\n\t\treturn this.__typing;\n\t}\n\n\tgetWidth(): null | number\n\t{\n\t\treturn this.__width;\n\t}\n\n\tgetHeight(): null | number\n\t{\n\t\treturn this.__height;\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement\n\t{\n\t\tconst img: HTMLImageElement = document.createElement('img');\n\t\timg.src = encodeURI(this.__src);\n\t\tif (this.getWidth() > 0 && this.getHeight() > 0)\n\t\t{\n\t\t\tDom.style(img, {\n\t\t\t\twidth: `${this.getWidth()}px`,\n\t\t\t\theight: `${this.getHeight()}px`,\n\t\t\t});\n\t\t}\n\n\t\tif (Type.isStringFilled(config?.theme?.smiley))\n\t\t{\n\t\t\tDom.addClass(img, config.theme.smiley);\n\t\t}\n\n\t\tDom.attr(img, { draggable: false });\n\n\t\treturn img;\n\t}\n\n\tupdateDOM(prevNode: TextNode, dom: HTMLElement, config: EditorConfig): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tstatic importJSON(serializedNode: SerializedSmileyNode): SmileyNode\n\t{\n\t\tconst { src, typing, width, height } = serializedNode;\n\n\t\treturn $createSmileyNode(src, typing, width, height);\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\tconst span = document.createElement('span');\n\t\tspan.textContent = this.getTyping();\n\n\t\treturn { element: span };\n\t}\n\n\texportJSON(): SerializedSmileyNode\n\t{\n\t\treturn {\n\t\t\tsrc: this.getSrc(),\n\t\t\ttyping: this.getTyping(),\n\t\t\twidth: this.getWidth(),\n\t\t\theight: this.getHeight(),\n\t\t\ttype: 'smiley',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tdecorate(editor: LexicalEditor, config: EditorConfig): DecoratorOptions\n\t{\n\t\treturn {};\n\t}\n\n\tgetTextContent(): string\n\t{\n\t\treturn this.getTyping();\n\t}\n\n\tisInline(): true\n\t{\n\t\treturn true;\n\t}\n\n\tisKeyboardSelectable(): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tisIsolated(): boolean\n\t{\n\t\treturn false;\n\t}\n}\n\nexport function $isSmileyNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof SmileyNode;\n}\n\nexport function $createSmileyNode(src: string, typing: string, width: number, height: number): SmileyNode\n{\n\tconst node = new SmileyNode(src, typing, width, height);\n\t// node.setMode('token');\n\t// node.setDetail('unmergeable');\n\n\treturn $applyNodeReplacement(node);\n}\n","import { Type, Runtime } from 'main.core';\nimport { EventEmitter, type BaseEvent } from 'main.core.events';\nimport { Popup } from 'main.popup';\n\nexport type SmileyDialogOptions = {\n\ttargetNode?: HTMLElement,\n\tevents?: Object<string, (event: BaseEvent) => {}>,\n}\n\nexport class SmileyDialog extends EventEmitter\n{\n\t#popup: Popup = null;\n\t#targetNode: HTMLElement = null;\n\n\tconstructor(dialogOptions)\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.SmileyDialog');\n\n\t\tconst options: SmileyDialogOptions = Type.isPlainObject(dialogOptions) ? dialogOptions : {};\n\n\t\tthis.setTargetNode(options.targetNode);\n\t\tthis.subscribeFromOptions(options.events);\n\t}\n\n\tshow(): void\n\t{\n\t\tthis.getPopup().adjustPosition({ forceBindPosition: true });\n\t\tthis.getPopup().show();\n\t}\n\n\thide(): void\n\t{\n\t\tthis.getPopup().close();\n\t}\n\n\tisShown(): boolean\n\t{\n\t\treturn this.#popup !== null && this.#popup.isShown();\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.getPopup().destroy();\n\t}\n\n\tsetTargetNode(container: HTMLElement): void\n\t{\n\t\tif (Type.isElementNode(container))\n\t\t{\n\t\t\tthis.#targetNode = container;\n\t\t}\n\t}\n\n\tgetTargetNode(): HTMLElement | null\n\t{\n\t\treturn this.#targetNode;\n\t}\n\n\tgetPopup(): Popup\n\t{\n\t\tif (this.#popup === null)\n\t\t{\n\t\t\tconst popupWidth = 360;\n\t\t\tconst targetNode = this.getTargetNode();\n\t\t\tconst rect = targetNode.getBoundingClientRect();\n\t\t\tconst targetNodeWidth = rect.width;\n\n\t\t\tthis.#popup = new Popup({\n\t\t\t\tautoHide: true,\n\t\t\t\tpadding: 0,\n\t\t\t\tcloseByEsc: true,\n\t\t\t\twidth: popupWidth,\n\t\t\t\theight: 250,\n\t\t\t\tbindElement: this.getTargetNode(),\n\t\t\t\tevents: {\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tthis.emit('onClose');\n\t\t\t\t\t},\n\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\tthis.emit('onDestroy');\n\t\t\t\t\t},\n\t\t\t\t\tonFirstShow: () => {\n\t\t\t\t\t\tconst dialog = this;\n\t\t\t\t\t\tRuntime.loadExtension('ui.vue3', 'ui.vue3.components.smiles')\n\t\t\t\t\t\t\t.then((exports) => {\n\t\t\t\t\t\t\t\tconst { BitrixVue, Smiles } = exports;\n\t\t\t\t\t\t\t\tconst app = BitrixVue.createApp({\n\t\t\t\t\t\t\t\t\tmethods: {\n\t\t\t\t\t\t\t\t\t\thandleSelect(text) {\n\t\t\t\t\t\t\t\t\t\t\tdialog.emit('onSelect', { smiley: text.trim() });\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcomponents: {\n\t\t\t\t\t\t\t\t\t\tSmiles,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttemplate: '<Smiles @selectSmile=\"handleSelect($event.text)\"/>',\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tapp.mount(this.#popup.getContentContainer());\n\t\t\t\t\t\t\t}).catch(() => {\n\t\t\t\t\t\t\t\tthis.#popup.close();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t;\n\t\t\t\t\t},\n\t\t\t\t\tonShow: (event) => {\n\t\t\t\t\t\tconst popup = event.getTarget();\n\t\t\t\t\t\tconst offsetLeft = (targetNodeWidth / 2) - (popupWidth / 2);\n\t\t\t\t\t\tconst angleShift = Popup.getOption('angleLeftOffset') - Popup.getOption('angleMinTop');\n\n\t\t\t\t\t\tpopup.setAngle({ offset: popupWidth / 2 - angleShift });\n\t\t\t\t\t\tpopup.setOffset({ offsetLeft: offsetLeft + Popup.getOption('angleLeftOffset') });\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn this.#popup;\n\t}\n}\n","/* eslint-disable no-underscore-dangle */\nimport { Loc, Type } from 'main.core';\nimport { type BaseEvent } from 'main.core.events';\n\nimport {\n\tTextNode,\n\tcreateCommand,\n\t$insertNodes,\n\t$createTextNode,\n\t$createParagraphNode,\n\t$isRootOrShadowRoot,\n\tCOMMAND_PRIORITY_EDITOR,\n\tCOMMAND_PRIORITY_LOW,\n\ttype LexicalCommand,\n\ttype LexicalNode,\n} from 'ui.lexical.core';\n\nimport { SmileyParser, SmileyManager } from 'ui.smiley';\n\nimport { $findMatchingParent, $wrapNodeInElement } from 'ui.lexical.utils';\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport { UNFORMATTED } from '../../constants';\nimport { TextEditorLexicalNode } from '../../types/text-editor-lexical-node';\n\nimport { $createSmileyNode, SmileyNode } from './smiley-node';\nimport Button from '../../toolbar/button';\nimport { SmileyDialog } from './smiley-dialog';\nimport BasePlugin from '../base-plugin';\n\nimport type {\n\tBBCodeExportOutput,\n\tBBCodeImportConversion,\n\tBBCodeExportConversion,\n} from '../../bbcode';\n\nimport { type TextEditor } from '../../text-editor';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\ntype InsertSmileyPayload = string;\n\nexport const INSERT_SMILEY_COMMAND: LexicalCommand<InsertSmileyPayload> = createCommand('INSERT_SMILEY_COMMAND');\nexport const INSERT_SMILEY_DIALOG_COMMAND: LexicalCommand = createCommand('INSERT_SMILEY_DIALOG_COMMAND');\n\nexport class SmileyPlugin extends BasePlugin\n{\n\t#smileyParser: SmileyParser = null;\n\t#smileyDialog: SmileyDialog = null;\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tif (SmileyManager.getSize() > 0)\n\t\t{\n\t\t\tthis.#smileyParser = new SmileyParser(SmileyManager.getAll());\n\t\t\tthis.#registerListeners();\n\t\t\tthis.#registerInsertSmileyCommand();\n\t\t\tthis.#registerComponents();\n\t\t}\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Smiley';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [SmileyNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn null;\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tsmiley: (lexicalNode: SmileyNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createText(lexicalNode.getTyping()),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tbbcodeMap: {\n\t\t\t\tsmiley: '#text',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tconst handledTextNodes = new Set();\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerNodeTransform(TextNode, (node: TextNode) => {\n\t\t\t\tif (!node.isSimpleText() || handledTextNodes.has(node.getKey()))\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst $isUnformatted = $findMatchingParent(\n\t\t\t\t\tnode,\n\t\t\t\t\t(parentNode: TextEditorLexicalNode) => {\n\t\t\t\t\t\treturn (parentNode.__flags & UNFORMATTED) !== 0;\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tif ($isUnformatted)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst splits = this.#smileyParser.parse(node.getTextContent());\n\t\t\t\tif (splits.length > 0)\n\t\t\t\t{\n\t\t\t\t\tconst splitOffsets = splits.reduce((acc, smiley) => {\n\t\t\t\t\t\tacc.push(smiley.start, smiley.end);\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, []);\n\n\t\t\t\t\tconst textNodes = node.splitText(...splitOffsets);\n\t\t\t\t\t// console.log(\"textNodes\", splitOffsets, textNodes);\n\n\t\t\t\t\tfor (const textNode of textNodes)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst smiley = SmileyManager.get(textNode.getTextContent()) || null;\n\t\t\t\t\t\tif (smiley)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// console.log('replace');\n\t\t\t\t\t\t\tconst smileyNode = $createSmileyNode(\n\t\t\t\t\t\t\t\tsmiley.getImage(),\n\t\t\t\t\t\t\t\tsmiley.getTyping(),\n\t\t\t\t\t\t\t\tsmiley.getWidth(),\n\t\t\t\t\t\t\t\tsmiley.getHeight(),\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\ttextNode.replace(smileyNode);\n\t\t\t\t\t\t\t// smileyNode.selectNext(0, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\thandledTextNodes.add(textNode.getKey());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\n\t\t\tthis.getEditor().registerUpdateListener(() => {\n\t\t\t\thandledTextNodes.clear();\n\t\t\t}),\n\n\t\t\t// Workaround for a disappearing cursor in FireFox and Safari.\n\t\t\t// Lexical always sets contentEditable = 'false' for all decorator nodes.\n\t\t\tthis.getEditor().registerMutationListener(\n\t\t\t\tSmileyNode,\n\t\t\t\t(nodeMutations) => {\n\t\t\t\t\tfor (const [nodeKey, mutation] of nodeMutations)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (mutation === 'created')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst dom = this.getEditor().getElementByKey(nodeKey);\n\t\t\t\t\t\t\tdom.contentEditable = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (this.#smileyDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#smileyDialog.hide();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDIALOG_VISIBILITY_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn this.#smileyDialog !== null && this.#smileyDialog.isShown();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerInsertSmileyCommand(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_SMILEY_COMMAND,\n\t\t\t\t(payload) => {\n\t\t\t\t\tconst smiley = SmileyManager.get(payload) || null;\n\t\t\t\t\tif (!smiley)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst smileyNode = $createSmileyNode(\n\t\t\t\t\t\tsmiley.getImage(),\n\t\t\t\t\t\tsmiley.getTyping(),\n\t\t\t\t\t\tsmiley.getWidth(),\n\t\t\t\t\t\tsmiley.getHeight(),\n\t\t\t\t\t);\n\n\t\t\t\t\t$insertNodes([$createTextNode(' '), smileyNode, $createTextNode(' ')]);\n\t\t\t\t\tif ($isRootOrShadowRoot(smileyNode.getParentOrThrow()))\n\t\t\t\t\t{\n\t\t\t\t\t\t$wrapNodeInElement(smileyNode, $createParagraphNode).selectEnd();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_SMILEY_DIALOG_COMMAND,\n\t\t\t\t(payload): boolean => {\n\t\t\t\t\tif (!Type.isPlainObject(payload) || !Type.isElementNode(payload.targetNode))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.#smileyDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.#smileyDialog.getTargetNode() === payload.targetNode)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.#smileyDialog.show();\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.#smileyDialog.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#smileyDialog = new SmileyDialog({\n\t\t\t\t\t\ttargetNode: payload.targetNode,\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tonSelect: (event: BaseEvent) => {\n\t\t\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_SMILEY_COMMAND, event.getData().smiley);\n\t\t\t\t\t\t\t\tthis.#smileyDialog.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\t\t\tthis.#smileyDialog = null;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.#smileyDialog.show();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('smileys', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --insert-emoji\"></span>');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_SMILEYS'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_SMILEY_DIALOG_COMMAND, {\n\t\t\t\t\t\ttargetNode: button.getContainer(),\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#smileyDialog !== null)\n\t\t{\n\t\t\tthis.#smileyDialog.destroy();\n\t\t}\n\t}\n}\n","import { Dom, Tag, Type } from 'main.core';\nimport { MemoryCache, type BaseCache } from 'main.core.cache';\nimport type { BaseEvent } from 'main.core.events';\nimport type { EditorConfig } from 'ui.lexical.core';\n\nimport { $getNodeByKey } from 'ui.lexical.core';\n\nimport DecoratorComponent from '../../decorator-component';\n\nimport type { JsonObject } from 'main.core';\nimport { calcImageSize } from '../../helpers/calc-image-size';\nimport type { DecoratorComponentOptions } from '../../types/decorator-component-options';\nimport { $isVideoNode, VideoNode } from './video-node';\nimport FigureResizer from '../../helpers/figure-resizer';\n\nexport default class VideoComponent extends DecoratorComponent\n{\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\t#figureResizer: FigureResizer = null;\n\t#trusted: boolean = false;\n\n\tconstructor(options: DecoratorComponentOptions)\n\t{\n\t\tsuper(options);\n\n\t\tthis.#trusted = Type.isStringFilled(this.getOption('provider'));\n\n\t\tthis.#figureResizer = new FigureResizer({\n\t\t\ttarget: this.#getVideo(),\n\t\t\teditor: this.getEditor(),\n\t\t\tminWidth: 120,\n\t\t\tminHeight: 120,\n\t\t\tfreeTransform: true,\n\t\t\tevents: {\n\t\t\t\tonResize: this.#handleResize.bind(this),\n\t\t\t\tonResizeEnd: this.#handleResizeEnd.bind(this),\n\t\t\t},\n\t\t});\n\n\t\tthis.getNodeSelection().onSelect((selected: boolean) => {\n\t\t\tif (selected || this.#figureResizer.isResizing())\n\t\t\t{\n\t\t\t\tDom.addClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.show();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(this.#getContainer(), '--selected');\n\t\t\t\tthis.#figureResizer.hide();\n\t\t\t}\n\t\t});\n\n\t\tthis.update(this.getOptions());\n\t\tthis.#render();\n\t}\n\n\t#render()\n\t{\n\t\tDom.append(this.#getContainer(), this.getTarget());\n\t}\n\n\t#getContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-video-component\">\n\t\t\t\t\t<div class=\"ui-text-editor-video-object-container\">${this.#getVideo()}</div>\n\t\t\t\t\t${this.#figureResizer.getContainer()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#getVideo(): HTMLIFrameElement | HTMLVideoElement\n\t{\n\t\treturn this.#refs.remember('video', () => {\n\t\t\tlet video: HTMLIFrameElement | HTMLVideoElement = null;\n\t\t\tconst src = this.getOption('src');\n\t\t\tif (this.#trusted)\n\t\t\t{\n\t\t\t\tvideo = Tag.render`<iframe frameborder=\"0\" src=\"about:blank\" draggable=\"false\"></iframe>`;\n\t\t\t\tvideo.src = src;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvideo = Dom.create({\n\t\t\t\t\ttag: 'video',\n\t\t\t\t\tattrs: {\n\t\t\t\t\t\tcontrols: true,\n\t\t\t\t\t\tpreload: 'metadata',\n\t\t\t\t\t\tplaysinline: true,\n\t\t\t\t\t\tsrc,\n\t\t\t\t\t},\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tloadedmetadata: (event: Event) => {\n\t\t\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\t\t\tconst node: VideoNode = $getNodeByKey(this.getNodeKey());\n\t\t\t\t\t\t\t\tif ($isVideoNode(node) && node.getWidth() === 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst [width, height] = calcImageSize(\n\t\t\t\t\t\t\t\t\t\tevent.target.videoWidth,\n\t\t\t\t\t\t\t\t\t\tevent.target.videoHeight,\n\t\t\t\t\t\t\t\t\t\t600,\n\t\t\t\t\t\t\t\t\t\t600,\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tnode.setWidthAndHeight(width, height);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst config: EditorConfig = this.getOption('config', {});\n\t\t\tif (config?.theme?.video?.object)\n\t\t\t{\n\t\t\t\tvideo.className = config.theme.video.object;\n\t\t\t}\n\n\t\t\treturn video;\n\t\t});\n\t}\n\n\t#handleResize(event: BaseEvent): void\n\t{\n\t\tthis.update(event.getData());\n\t}\n\n\t#handleResizeEnd(event: BaseEvent): void\n\t{\n\t\tthis.setSelected(true);\n\n\t\tthis.getEditor().update(() => {\n\t\t\tconst node: VideoNode = $getNodeByKey(this.getNodeKey());\n\t\t\tif ($isVideoNode(node))\n\t\t\t{\n\t\t\t\tconst { width, height } = event.getData();\n\t\t\t\tnode.setWidthAndHeight(width, height);\n\t\t\t}\n\t\t});\n\t}\n\n\tupdate(options: JsonObject): void\n\t{\n\t\tconst width = Type.isNumber(options.width) && options.width > 0 ? options.width : null;\n\t\tconst height = Type.isNumber(options.height) && options.height > 0 ? options.height : null;\n\t\tconst aspectRatio = width > 0 && height > 0 ? `${width} / ${height}` : 'auto';\n\n\t\tDom.adjust(this.#getVideo(), {\n\t\t\tattrs: {\n\t\t\t\twidth,\n\t\t\t},\n\t\t\tstyle: {\n\t\t\t\twidth,\n\t\t\t\theight: 'auto',\n\t\t\t\taspectRatio,\n\t\t\t},\n\t\t});\n\t}\n}\n","/* eslint-disable no-underscore-dangle, @bitrix24/bitrix24-rules/no-pseudo-private */\n\nimport { Type, Uri } from 'main.core';\nimport VideoComponent from './video-component';\n\nimport {\n\tDecoratorNode,\n\t$applyNodeReplacement,\n\ttype DOMConversionMap,\n\ttype DOMExportOutput,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype LexicalEditor,\n\ttype NodeKey,\n\ttype SerializedLexicalNode,\n} from 'ui.lexical.core';\n\nimport type { DecoratorOptions } from '../../types/decorator-options';\nimport { VideoService } from 'ui.video-service';\n\nexport interface VideoPayload {\n\tsrc: string;\n\twidth?: number;\n\theight?: number;\n\tmaxWidth?: number;\n\tkey?: NodeKey;\n}\n\nexport type SerializedVideoNode = SerializedLexicalNode &\n{\n\tsrc: string;\n\twidth?: number;\n\theight?: number;\n};\n\nexport class VideoNode extends DecoratorNode\n{\n\t__src: string;\n\t__width: number = 560;\n\t__height: number = 315;\n\t__provider: string = null;\n\n\tconstructor(\n\t\tsrc: string,\n\t\twidth?: number,\n\t\theight?: number,\n\t\tkey?: NodeKey,\n\t)\n\t{\n\t\tsuper(key);\n\t\tthis.__src = src;\n\n\t\tif (Type.isNumber(width))\n\t\t{\n\t\t\tthis.__width = Math.round(width);\n\t\t}\n\n\t\tif (Type.isNumber(height))\n\t\t{\n\t\t\tthis.__height = Math.round(height);\n\t\t}\n\n\t\tconst url = /^https?:/.test(src) ? src : `https://${src.replace(/^\\/\\//, '')}`;\n\t\tconst uri = new Uri(url);\n\t\tconst videoService = VideoService.createByHost(uri.getHost());\n\t\tif (videoService)\n\t\t{\n\t\t\tthis.__provider = videoService.getId();\n\t\t}\n\t}\n\n\tstatic useDecoratorComponent = true;\n\n\tstatic getType(): string\n\t{\n\t\treturn 'video';\n\t}\n\n\tstatic clone(node: VideoNode): VideoNode\n\t{\n\t\treturn new VideoNode(\n\t\t\tnode.__src,\n\t\t\tnode.__width,\n\t\t\tnode.__height,\n\t\t\tnode.__key,\n\t\t);\n\t}\n\n\tstatic importJSON(serializedNode: SerializedVideoNode): VideoNode\n\t{\n\t\tconst { width, height, src } = serializedNode;\n\n\t\treturn $createVideoNode({ src, width, height });\n\t}\n\n\texportDOM(): DOMExportOutput\n\t{\n\t\treturn { element: null };\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn null;\n\t}\n\n\texportJSON(): SerializedVideoNode\n\t{\n\t\treturn {\n\t\t\tsrc: this.getSrc(),\n\t\t\twidth: this.getWidth(),\n\t\t\theight: this.getHeight(),\n\t\t\ttype: 'video',\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tsetWidthAndHeight(width: number, height: number): void\n\t{\n\t\tconst writable = this.getWritable();\n\t\tif (Type.isNumber(width))\n\t\t{\n\t\t\twritable.__width = Math.round(width);\n\t\t}\n\n\t\tif (Type.isNumber(height))\n\t\t{\n\t\t\twritable.__height = Math.round(height);\n\t\t}\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement\n\t{\n\t\tconst span = document.createElement('span');\n\t\tconst theme = config.theme;\n\t\tconst className = theme?.video?.container;\n\t\tif (className !== undefined)\n\t\t{\n\t\t\tspan.className = className;\n\t\t}\n\n\t\treturn span;\n\t}\n\n\tupdateDOM(): false\n\t{\n\t\treturn false;\n\t}\n\n\tgetSrc(): string\n\t{\n\t\treturn this.__src;\n\t}\n\n\tgetWidth(): number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__width;\n\t}\n\n\tgetHeight(): number\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__height;\n\t}\n\n\tgetProvider(): string | null\n\t{\n\t\tconst self = this.getLatest();\n\n\t\treturn self.__provider;\n\t}\n\n\tdecorate(editor: LexicalEditor, config: EditorConfig): DecoratorOptions\n\t{\n\t\treturn {\n\t\t\tcomponentClass: VideoComponent,\n\t\t\toptions: {\n\t\t\t\tsrc: this.getSrc(),\n\t\t\t\twidth: this.getWidth(),\n\t\t\t\theight: this.getHeight(),\n\t\t\t\tprovider: this.getProvider(),\n\t\t\t\tconfig,\n\t\t\t},\n\t\t};\n\t}\n\n\tisInline(): true\n\t{\n\t\treturn true;\n\t}\n}\n\nexport function $createVideoNode({ src, width, height, key }): VideoNode\n{\n\treturn $applyNodeReplacement(new VideoNode(src, width, height, key));\n}\n\nexport function $isVideoNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof VideoNode;\n}\n","import { Tag, Type, Dom, Loc } from 'main.core';\nimport { MemoryCache, type BaseCache } from 'main.core.cache';\nimport { EventEmitter, type BaseEvent } from 'main.core.events';\nimport { Popup, PopupTarget, PopupTargetOptions } from 'main.popup';\nimport { sanitizeUrl } from '../../helpers/sanitize-url';\n\nimport './video-dialog.css';\n\nexport type VideoDialogOptions = {\n\ttargetContainer?: HTMLElement,\n\tevents?: Object<string, (event: BaseEvent) => {}>,\n}\n\nexport default class VideoDialog extends EventEmitter\n{\n\t#popup: Popup = null;\n\t#videoUrl: string = '';\n\t#targetContainer: HTMLElement = null;\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\n\tconstructor(options: VideoDialogOptions)\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.VideoDialog');\n\n\t\tconst videoDialogOptions: VideoDialogOptions = Type.isPlainObject(options) ? options : {};\n\n\t\tthis.setTargetContainer(videoDialogOptions.targetContainer);\n\t\tthis.subscribeFromOptions(videoDialogOptions.events);\n\t}\n\n\tshow(options: { target: PopupTarget, targetOptions: PopupTargetOptions } = {}): void\n\t{\n\t\tconst target: PopupTarget = options.target ?? undefined;\n\t\tconst targetOptions: PopupTargetOptions = Type.isPlainObject(options.targetOptions) ? options.targetOptions : {};\n\n\t\tif (!Type.isUndefined(target))\n\t\t{\n\t\t\tthis.getPopup().setBindElement(target);\n\t\t}\n\n\t\tthis.getPopup().adjustPosition({\n\t\t\t...targetOptions,\n\t\t\tforceBindPosition: true,\n\t\t});\n\n\t\tthis.getPopup().show();\n\t}\n\n\thide(): void\n\t{\n\t\tthis.getPopup().close();\n\t}\n\n\tisShown(): boolean\n\t{\n\t\treturn this.#popup !== null && this.#popup.isShown();\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.getPopup().destroy();\n\t}\n\n\tsetVideoUrl(url: string): void\n\t{\n\t\tif (Type.isString(url))\n\t\t{\n\t\t\tthis.#videoUrl = sanitizeUrl(url);\n\t\t}\n\t}\n\n\tgetVideoUrl(): string\n\t{\n\t\treturn this.#videoUrl;\n\t}\n\n\tsetTargetContainer(container: HTMLElement): void\n\t{\n\t\tif (Type.isElementNode(container))\n\t\t{\n\t\t\tthis.#targetContainer = container;\n\t\t}\n\t}\n\n\tgetTargetContainer(): HTMLElement | null\n\t{\n\t\treturn this.#targetContainer;\n\t}\n\n\tgetPopup(): Popup\n\t{\n\t\tif (this.#popup === null)\n\t\t{\n\t\t\tthis.#popup = new Popup({\n\t\t\t\tautoHide: true,\n\t\t\t\tcacheable: false,\n\t\t\t\tpadding: 0,\n\t\t\t\tcloseByEsc: true,\n\t\t\t\ttargetContainer: this.getTargetContainer(),\n\t\t\t\tcontent: this.getContainer(),\n\t\t\t\tevents: {\n\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\tthis.emit('onShow');\n\t\t\t\t\t},\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tthis.emit('onClose');\n\t\t\t\t\t},\n\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\tthis.emit('onDestroy');\n\t\t\t\t\t},\n\t\t\t\t\tonAfterShow: () => {\n\t\t\t\t\t\tthis.getUrlTextBox().focus();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn this.#popup;\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-video-dialog\">\n\t\t\t\t\t<div class=\"ui-text-editor-video-dialog-form\">\n\t\t\t\t\t\t<div class=\"ui-ctl ui-ctl-textbox ui-ctl-s ui-ctl-inline ui-ctl-w100 ui-text-editor-video-dialog-textbox\">\n\t\t\t\t\t\t\t<div class=\"ui-ctl-tag\">${Loc.getMessage('TEXT_EDITOR_VIDEO_INSERT_TITLE')}</div>\n\t\t\t\t\t\t\t${this.getUrlTextBox()}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button type=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-video-dialog-button\" \n\t\t\t\t\t\t\tonclick=\"${this.#handleSaveBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"video-dialog-save-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --check\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button \n\t\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-video-dialog-button\"\n\t\t\t\t\t\t\tonclick=\"${this.#handleCancelBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"video-dialog-cancel-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --cross-60\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t${this.getStatusContainer()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetUrlTextBox(): HTMLInputElement\n\t{\n\t\treturn this.#refs.remember('url-textbox', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<input \n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"ui-ctl-element\"\n\t\t\t\t\tplaceholder=\"https://\"\n\t\t\t\t\tvalue=\"${this.getVideoUrl()}\"\n\t\t\t\t\tonkeydown=\"${this.#handleTextBoxKeyDown.bind(this)}\"\n\t\t\t\t\toninput=\"${this.#handleTextBoxInput.bind(this)}\"\n\t\t\t\t\tdata-testid=\"video-dialog-textbox\"\n\t\t\t\t>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetStatusContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('status', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-video-dialog-status\">${Loc.getMessage('TEXT_EDITOR_VIDEO_INSERT_HINT')}</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tshowError(error: string)\n\t{\n\t\tDom.addClass(this.getStatusContainer(), '--error');\n\t\tDom.addClass(this.getUrlTextBox().parentNode, 'ui-ctl-warning');\n\n\t\tif (Type.isStringFilled(error))\n\t\t{\n\t\t\tthis.getStatusContainer().textContent = error;\n\t\t}\n\t}\n\n\tclearError()\n\t{\n\t\tDom.removeClass(this.getStatusContainer(), '--error');\n\t\tDom.removeClass(this.getUrlTextBox().parentNode, 'ui-ctl-warning');\n\t\tthis.getStatusContainer().textContent = Loc.getMessage('TEXT_EDITOR_VIDEO_INSERT_HINT');\n\t}\n\n\t#handleSaveBtnClick(): void\n\t{\n\t\tconst url: string = this.getUrlTextBox().value.trim();\n\t\tif (url.length > 0)\n\t\t{\n\t\t\tthis.setVideoUrl(url);\n\t\t\tthis.emit('onSave');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getUrlTextBox().focus();\n\t\t}\n\t}\n\n\t#handleTextBoxKeyDown(event: KeyboardEvent)\n\t{\n\t\tif (event.key === 'Enter')\n\t\t{\n\t\t\tevent.preventDefault();\n\t\t\tthis.#handleSaveBtnClick();\n\t\t}\n\t}\n\n\t#handleTextBoxInput(event: KeyboardEvent)\n\t{\n\t\tthis.emit('onInput');\n\t}\n\n\t#handleCancelBtnClick(): void\n\t{\n\t\tthis.emit('onCancel');\n\t}\n}\n","export function validateVideoUrl(url: string): boolean\n{\n\treturn /^(http:|https:|\\/)/i.test(url);\n}\n","import { Type, Loc, Event } from 'main.core';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\n\nimport {\n\ttype BBCodeConversion,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n\ttype BBCodeExportOutput,\n\ttype BBCodeConversionFn,\n} from '../../bbcode';\n\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport { $adjustDialogPosition } from '../../helpers/adjust-dialog-position';\n\nimport {\n\tcreateCommand,\n\t$createTextNode,\n\t$getSelection,\n\t$setSelection,\n\t$isRangeSelection,\n\tCOMMAND_PRIORITY_EDITOR,\n\tCOMMAND_PRIORITY_LOW,\n\ttype LexicalNode,\n\ttype LexicalCommand,\n\ttype RangeSelection,\n} from 'ui.lexical.core';\n\nimport { $insertNodeToNearestRoot } from 'ui.lexical.utils';\n\nimport Button from '../../toolbar/button';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\nimport BasePlugin from '../base-plugin';\nimport VideoDialog from './video-dialog';\n\nimport { sanitizeUrl } from '../../helpers/sanitize-url';\nimport { validateVideoUrl } from '../../helpers/validate-video-url';\n\nimport { $createVideoNode, VideoNode, type VideoPayload } from './video-node';\n\nimport { type TextEditor } from '../../text-editor';\n\nimport './video-plugin.css';\nimport { VideoService } from 'ui.video-service';\n\nexport type InsertVideoPayload = Readonly<VideoPayload>;\n\n/** @memberof BX.UI.TextEditor.Plugins.Video */\nexport const INSERT_VIDEO_COMMAND: LexicalCommand<InsertVideoPayload> = createCommand('INSERT_VIDEO_COMMAND');\n\n/** @memberof BX.UI.TextEditor.Plugins.Video */\nexport const INSERT_VIDEO_DIALOG_COMMAND: LexicalCommand = createCommand('INSERT_VIDEO_DIALOG_COMMAND');\n\nexport class VideoPlugin extends BasePlugin\n{\n\t#videoDialog: VideoDialog = null;\n\t#onEditorScroll: Function = this.#handleEditorScroll.bind(this);\n\t#lastSelection: RangeSelection = null;\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerCommands();\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Video';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [VideoNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tvideo: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\t// [video type={type} width={width} height={height}]{url}[/video]\n\t\t\t\t\tconst src = node.getContent().trim();\n\t\t\t\t\tconst width = Number(node.getAttribute('width'));\n\t\t\t\t\tconst height = Number(node.getAttribute('height'));\n\t\t\t\t\tif (validateVideoUrl(src))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnode: $createVideoNode({ src: sanitizeUrl(src), width, height }),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createTextNode(node.toString()),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tvideo: (lexicalNode: VideoNode): BBCodeExportOutput => {\n\t\t\t\tconst attributes = {};\n\t\t\t\tconst width = lexicalNode.getWidth();\n\t\t\t\tconst height = lexicalNode.getHeight();\n\t\t\t\tif (Type.isNumber(width) && Type.isNumber(height))\n\t\t\t\t{\n\t\t\t\t\tattributes.width = width;\n\t\t\t\t\tattributes.height = height;\n\t\t\t\t}\n\n\t\t\t\tconst provider = lexicalNode.getProvider();\n\t\t\t\tif (Type.isStringFilled(provider))\n\t\t\t\t{\n\t\t\t\t\tattributes.type = provider;\n\t\t\t\t}\n\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({\n\t\t\t\t\t\tname: 'video',\n\t\t\t\t\t\tinline: false,\n\t\t\t\t\t\tattributes,\n\t\t\t\t\t}),\n\t\t\t\t\tafter: (elementNode: BBCodeElementNode) => {\n\t\t\t\t\t\telementNode.setChildren([scheme.createText(lexicalNode.getSrc())]);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: VideoNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\tvideo: 'video',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_VIDEO_COMMAND,\n\t\t\t\t(payload) => {\n\t\t\t\t\tif (Type.isPlainObject(payload) && validateVideoUrl(payload.src))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst videoNode = $createVideoNode({\n\t\t\t\t\t\t\tsrc: VideoService.getEmbeddedUrl(payload.src) || payload.src,\n\t\t\t\t\t\t\twidth: payload.width,\n\t\t\t\t\t\t\theight: payload.height,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$insertNodeToNearestRoot(videoNode);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_VIDEO_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#lastSelection = selection.clone();\n\t\t\t\t\tif (this.#videoDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#videoDialog.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getEditor().dispatchCommand(HIDE_DIALOG_COMMAND);\n\n\t\t\t\t\tthis.#videoDialog = new VideoDialog({\n\t\t\t\t\t\t// for an embedded popup: document.body -> this.getEditor().getScrollerContainer()\n\t\t\t\t\t\ttargetContainer: document.body,\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tonSave: () => {\n\t\t\t\t\t\t\t\tconst url = this.#videoDialog.getVideoUrl();\n\t\t\t\t\t\t\t\tif (!Type.isStringFilled(url))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.#videoDialog.hide();\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!validateVideoUrl(url))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.#videoDialog.showError(Loc.getMessage('TEXT_EDITOR_INVALID_URL'));\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_VIDEO_COMMAND, { src: url });\n\n\t\t\t\t\t\t\t\tthis.#videoDialog.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonInput: () => {\n\t\t\t\t\t\t\t\tthis.#videoDialog.clearError();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\t\t\tthis.#videoDialog.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\t\t\tif ($adjustDialogPosition(this.#videoDialog.getPopup(), this.getEditor()))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tEvent.bind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\t\t\t\t\t\t\t\tthis.getEditor().highlightSelection();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\t\tthis.#handleDialogDestroy();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\t\t\tthis.#handleDialogDestroy();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.#videoDialog.show();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (this.#videoDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#videoDialog.hide();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDIALOG_VISIBILITY_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn this.#videoDialog !== null && this.#videoDialog.isShown();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#restoreSelection(): boolean\n\t{\n\t\tconst selection = $getSelection();\n\t\tif (!$isRangeSelection(selection) && this.#lastSelection !== null)\n\t\t{\n\t\t\t$setSelection(this.#lastSelection);\n\t\t\tthis.#lastSelection = null;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#handleDialogDestroy(): void\n\t{\n\t\tthis.#videoDialog = null;\n\t\tEvent.unbind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\tthis.getEditor().resetHighlightSelection();\n\n\t\tthis.getEditor().update(() => {\n\t\t\tif (!this.#restoreSelection())\n\t\t\t{\n\t\t\t\tthis.getEditor().focus();\n\t\t\t}\n\t\t});\n\t}\n\n\t#handleEditorScroll(): void\n\t{\n\t\tthis.getEditor().update(() => {\n\t\t\t$adjustDialogPosition(this.#videoDialog.getPopup(), this.getEditor());\n\t\t});\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('video', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --insert-video\"></span>');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_VIDEO'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tif (this.#videoDialog !== null && this.#videoDialog.isShown())\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.getEditor().focus(() => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_VIDEO_DIALOG_COMMAND);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#videoDialog !== null)\n\t\t{\n\t\t\tthis.#videoDialog.destroy();\n\t\t}\n\t}\n}\n","import { type RangeSelection, type TextNode } from 'ui.lexical.core';\nimport { FORMAT_PREDICATES } from './constants';\n\nexport function printFormatProperties(nodeOrSelection: TextNode | RangeSelection): string\n{\n\tlet str = FORMAT_PREDICATES.map((predicate) => predicate(nodeOrSelection))\n\t\t.filter(Boolean)\n\t\t.join(', ')\n\t\t.toLocaleLowerCase();\n\n\tif (str !== '')\n\t{\n\t\tstr = `format: ${str}`;\n\t}\n\n\treturn str;\n}\n","import { Type } from 'main.core';\nimport { $isTextNode, LexicalNode, type TextNode } from 'ui.lexical.core';\nimport { $isLinkNode, type LinkNode } from 'ui.lexical.link';\nimport { $isCodeNode, $isCodeTokenNode, type CodeNode, type CodeTokenNode } from '../plugins/code';\nimport {\n\t$isFileNode,\n\t$isFileImageNode,\n\t$isFileVideoNode,\n\ttype FileNode,\n\ttype FileImageNode,\n\ttype FileVideoNode,\n} from '../plugins/file';\n\nimport { $isImageNode, type ImageNode } from '../plugins/image';\nimport { $isMentionNode, type MentionNode } from '../plugins/mention';\nimport { $isSmileyNode, type SmileyNode } from '../plugins/smiley';\nimport { $isVideoNode, type VideoNode } from '../plugins/video';\n\nimport { DETAIL_PREDICATES, MODE_PREDICATES, NON_SINGLE_WIDTH_CHARS_REPLACEMENT } from './constants';\nimport { printFormatProperties } from './print-format-properties';\n\nexport function printNode(node: LexicalNode): string\n{\n\tif ($isCodeTokenNode(node))\n\t{\n\t\tconst codeTokenNode: CodeTokenNode = node;\n\n\t\treturn `{ ${codeTokenNode.__highlightType}: \"${normalize(codeTokenNode.getTextContent())}\" }`;\n\t}\n\n\tif ($isCodeNode(node))\n\t{\n\t\tconst codeTokenNode: CodeNode = node;\n\n\t\treturn `{ children: ${codeTokenNode.getChildrenSize()} }`;\n\t}\n\n\tif ($isTextNode(node))\n\t{\n\t\tconst text = node.getTextContent();\n\t\tconst title = text.length === 0 ? '(empty)' : `\"${normalize(text)}\"`;\n\t\tconst properties = printAllTextNodeProperties(node);\n\n\t\treturn [title, properties.length > 0 ? `{ ${properties} }` : null]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ')\n\t\t\t.trim();\n\t}\n\n\tif ($isFileImageNode(node))\n\t{\n\t\tconst fileImageNode: FileImageNode = node;\n\n\t\treturn `{ id: ${fileImageNode.getId()}, width: ${fileImageNode.getWidth()}, height: ${fileImageNode.getHeight()} }`;\n\t}\n\n\tif ($isFileNode(node))\n\t{\n\t\tconst fileNode: FileNode = node;\n\n\t\treturn `{ id: ${fileNode.getId()} }`;\n\t}\n\n\tif ($isFileVideoNode(node))\n\t{\n\t\tconst fileVideoNode: FileVideoNode = node;\n\n\t\treturn `{ id: ${fileVideoNode.getId()} }`;\n\t}\n\n\tif ($isSmileyNode(node))\n\t{\n\t\tconst smileyNode: SmileyNode = node;\n\n\t\treturn `{ typing: ${smileyNode.getTyping()}, width: ${smileyNode.getWidth()}, height: ${smileyNode.getHeight()} }`;\n\t}\n\n\tif ($isVideoNode(node))\n\t{\n\t\tconst videoNode: VideoNode = node;\n\n\t\treturn `{ width: ${videoNode.getWidth()}, height: ${videoNode.getHeight()} }`;\n\t}\n\n\tif ($isMentionNode(node))\n\t{\n\t\tconst mentionNode: MentionNode = node;\n\n\t\treturn `{ entityId: ${mentionNode.getEntityId()}, id: ${mentionNode.getId()} }`;\n\t}\n\n\tif ($isImageNode(node))\n\t{\n\t\tconst imageNode: ImageNode = node;\n\n\t\treturn `{ width: ${imageNode.getWidth()}, height: ${imageNode.getHeight()} }`;\n\t}\n\n\tif ($isLinkNode(node))\n\t{\n\t\tconst linkNode: LinkNode = node;\n\t\tconst link = linkNode.getURL();\n\t\tconst title = link.length === 0 ? '(empty)' : `\"${normalize(link)}\"`;\n\t\tconst properties = printAllLinkNodeProperties(linkNode);\n\n\t\treturn [title, properties.length > 0 ? `{ ${properties} }` : null]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ')\n\t\t\t.trim();\n\t}\n\n\treturn '';\n}\n\nfunction normalize(text: string)\n{\n\treturn Object.entries(NON_SINGLE_WIDTH_CHARS_REPLACEMENT).reduce(\n\t\t(acc, [key, value]) => acc.replace(new RegExp(key, 'g'), String(value)),\n\t\ttext,\n\t);\n}\n\nfunction printAllTextNodeProperties(node: TextNode): string\n{\n\treturn [\n\t\tprintFormatProperties(node),\n\t\tprintDetailProperties(node),\n\t\tprintModeProperties(node),\n\t]\n\t\t.filter(Boolean)\n\t\t.join(', ');\n}\n\nfunction printAllLinkNodeProperties(node: LinkNode): string\n{\n\treturn [\n\t\tprintTargetProperties(node),\n\t\tprintRelProperties(node),\n\t\tprintTitleProperties(node),\n\t]\n\t\t.filter(Boolean)\n\t\t.join(', ');\n}\n\nfunction printTargetProperties(node: LinkNode): string\n{\n\tlet str = node.getTarget();\n\tif (!Type.isNil(str))\n\t{\n\t\tstr = `target: ${str}`;\n\t}\n\n\treturn str;\n}\n\nfunction printRelProperties(node: LinkNode): string\n{\n\tlet str = node.getRel();\n\tif (!Type.isNil(str))\n\t{\n\t\tstr = `rel: ${str}`;\n\t}\n\n\treturn str;\n}\n\nfunction printTitleProperties(node: LinkNode): string\n{\n\tlet str = node.getTitle();\n\tif (!Type.isNil(str))\n\t{\n\t\tstr = `title: ${str}`;\n\t}\n\n\treturn str;\n}\n\nfunction printDetailProperties(nodeOrSelection: TextNode): string\n{\n\tlet str = DETAIL_PREDICATES.map((predicate) => predicate(nodeOrSelection))\n\t\t.filter(Boolean)\n\t\t.join(', ')\n\t\t.toLocaleLowerCase();\n\n\tif (str !== '')\n\t{\n\t\tstr = `detail: ${str}`;\n\t}\n\n\treturn str;\n}\n\nfunction printModeProperties(nodeOrSelection: TextNode): string\n{\n\tlet str = MODE_PREDICATES.map((predicate) => predicate(nodeOrSelection))\n\t\t.filter(Boolean)\n\t\t.join(', ')\n\t\t.toLocaleLowerCase();\n\n\tif (str !== '')\n\t{\n\t\tstr = `mode: ${str}`;\n\t}\n\n\treturn str;\n}\n","import { $isNodeSelection } from 'ui.lexical.core';\nimport type { BaseSelection } from 'ui.lexical.core';\n\nexport function printNodeSelection(selection: BaseSelection): string\n{\n\tif (!$isNodeSelection(selection))\n\t{\n\t\treturn '';\n\t}\n\n\treturn `: node\\n └ [${[...selection._nodes].join(', ')}]`;\n}\n","import { type RangeSelection } from 'ui.lexical.core';\nimport { printFormatProperties } from './print-format-properties';\n\nexport function printRangeSelection(selection: RangeSelection): string\n{\n\tlet res = '';\n\n\tconst formatText = printFormatProperties(selection);\n\n\tres += `: range ${formatText !== '' ? `{ ${formatText} }` : ''} ${\n\t\tselection.style !== '' ? `{ style: ${selection.style} } ` : ''\n\t}`;\n\n\tconst anchor = selection.anchor;\n\tconst focus = selection.focus;\n\tconst anchorOffset = anchor.offset;\n\tconst focusOffset = focus.offset;\n\n\tres += `\\n ├ anchor { key: ${anchor.key}, offset: ${\n\t\tanchorOffset === null ? 'null' : anchorOffset\n\t}, type: ${anchor.type} }`;\n\tres += `\\n └ focus { key: ${focus.key}, offset: ${\n\t\tfocusOffset === null ? 'null' : focusOffset\n\t}, type: ${focus.type} }`;\n\n\treturn res;\n}\n","import { type TableSelection } from 'ui.lexical.table';\n\nexport function printTableSelection(selection: TableSelection): string\n{\n\treturn `: table\\n └ { table: ${selection.tableKey}, anchorCell: ${selection.anchor.key}, focusCell: ${selection.focus.key} }`;\n}\n","import {\n\t$isElementNode,\n\ttype ElementNode,\n\ttype LexicalNode,\n} from 'ui.lexical.core';\n\nimport { SYMBOLS } from './constants';\n\nexport function visitTree(\n\tcurrentNode: ElementNode,\n\tvisitor: (node: LexicalNode, indentArr: Array<string>) => void,\n\tindent: Array<string> = [],\n): void\n{\n\tconst childNodes = currentNode.getChildren();\n\tconst childNodesLength = childNodes.length;\n\n\tchildNodes.forEach((childNode, i) => {\n\t\tvisitor(\n\t\t\tchildNode,\n\t\t\tindent.concat(\n\t\t\t\ti === childNodesLength - 1\n\t\t\t\t\t? SYMBOLS.isLastChild\n\t\t\t\t\t: SYMBOLS.hasNextSibling,\n\t\t\t),\n\t\t);\n\n\t\tif ($isElementNode(childNode))\n\t\t{\n\t\t\tvisitTree(\n\t\t\t\tchildNode,\n\t\t\t\tvisitor,\n\t\t\t\tindent.concat(\n\t\t\t\t\ti === childNodesLength - 1\n\t\t\t\t\t\t? SYMBOLS.ancestorIsLastChild\n\t\t\t\t\t\t: SYMBOLS.ancestorHasNextSibling,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t});\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { $isElementNode } from 'ui.lexical.core';\nimport {\n\t$getRoot,\n\t$getSelection,\n\t$isNodeSelection,\n\t$isRangeSelection,\n\t$isTextNode,\n\ttype LexicalNode,\n\ttype BaseSelection,\n\ttype LexicalEditor,\n} from 'ui.lexical.core';\n\nimport { $isTableSelection } from 'ui.lexical.table';\nimport { NON_SINGLE_WIDTH_CHARS_REGEX, SYMBOLS } from './constants';\nimport { printNode } from './print-node';\nimport { printNodeSelection } from './print-node-selection';\nimport { printRangeSelection } from './print-range-selection';\nimport { printTableSelection } from './print-table-selection';\nimport { visitTree } from './visit-tree';\n\nimport { type TextEditor } from '../text-editor';\n\nexport function generateContent(editor: TextEditor | LexicalEditor): string\n{\n\tconst editorState = editor.getEditorState();\n\n\t// if (exportDOM)\n\t// {\n\t// \tlet htmlString = '';\n\t// \teditorState.read(() => {\n\t// \t\thtmlString = printPrettyHTML($generateHtmlFromNodes(editor));\n\t// \t});\n\t// \treturn htmlString;\n\t// }\n\n\tlet res = ' root\\n';\n\n\tconst selectionString = editorState.read(() => {\n\t\tconst selection = $getSelection();\n\t\tvisitTree($getRoot(), (node: LexicalNode, indent: Array<string>) => {\n\t\t\tconst nodeKey = node.getKey();\n\t\t\tconst nodeKeyDisplay = `(${nodeKey})`;\n\t\t\tconst typeDisplay = node.getType() || '';\n\t\t\tconst isSelected = node.isSelected();\n\n\t\t\tres += `${isSelected ? SYMBOLS.selectedLine : ' '} ${indent.join(\n\t\t\t\t' ',\n\t\t\t)} ${nodeKeyDisplay} ${typeDisplay} ${printNode(node)}\\n`;\n\n\t\t\tres += printSelectedCharsLine({\n\t\t\t\tindent,\n\t\t\t\tisSelected,\n\t\t\t\tnode,\n\t\t\t\tnodeKeyDisplay,\n\t\t\t\tselection,\n\t\t\t\ttypeDisplay,\n\t\t\t});\n\t\t});\n\n\t\tif (selection === null)\n\t\t{\n\t\t\treturn ': null';\n\t\t}\n\n\t\tif ($isRangeSelection(selection))\n\t\t{\n\t\t\treturn printRangeSelection(selection);\n\t\t}\n\n\t\tif ($isTableSelection(selection))\n\t\t{\n\t\t\treturn printTableSelection(selection);\n\t\t}\n\n\t\treturn printNodeSelection(selection);\n\t});\n\n\tres += `\\n selection${selectionString}`;\n\n\treturn res;\n}\n\nfunction printSelectedCharsLine({\n\tindent,\n\tisSelected,\n\tnode,\n\tnodeKeyDisplay,\n\tselection,\n\ttypeDisplay,\n}: {\n\tindent: Array<string>;\n\tisSelected: boolean;\n\tnode: LexicalNode;\n\tnodeKeyDisplay: string;\n\tselection: BaseSelection | null;\n\ttypeDisplay: string;\n}): string\n{\n\t// No selection or node is not selected.\n\tif (\n\t\t!$isTextNode(node)\n\t\t|| !$isRangeSelection(selection)\n\t\t|| !isSelected\n\t\t|| $isElementNode(node)\n\t)\n\t{\n\t\treturn '';\n\t}\n\n\t// No selected characters.\n\tconst anchor = selection.anchor;\n\tconst focus = selection.focus;\n\n\tif (\n\t\tnode.getTextContent() === ''\n\t\t|| (anchor.getNode() === selection.focus.getNode()\n\t\t\t&& anchor.offset === focus.offset)\n\t)\n\t{\n\t\treturn '';\n\t}\n\n\tconst [start, end] = $getSelectionStartEnd(node, selection);\n\n\tif (start === end)\n\t{\n\t\treturn '';\n\t}\n\n\tconst selectionLastIndent = (\n\t\tindent[indent.length - 1] === SYMBOLS.hasNextSibling\n\t\t\t? SYMBOLS.ancestorHasNextSibling\n\t\t\t: SYMBOLS.ancestorIsLastChild\n\t);\n\n\tconst indentionChars = [...indent.slice(0, -1), selectionLastIndent];\n\tconst unselectedChars = Array.from({ length: start + 1 }).fill(' ');\n\tconst selectedChars = Array.from({ length: end - start }).fill(SYMBOLS.selectedChar);\n\tconst paddingLength = typeDisplay.length + 3; // 2 for the spaces around + 1 for the double quote.\n\tconst nodePrintSpaces = Array.from({ length: nodeKeyDisplay.length + paddingLength }).fill(' ');\n\n\treturn (\n\t\t`${[\n\t\t\tSYMBOLS.selectedLine,\n\t\t\tindentionChars.join(' '),\n\t\t\t[...nodePrintSpaces, ...unselectedChars, ...selectedChars].join(''),\n\t\t].join(' ')}\\n`\n\t);\n}\n\nfunction $getSelectionStartEnd(node: LexicalNode, selection: BaseSelection): [number, number]\n{\n\tconst anchorAndFocus = selection.getStartEndPoints();\n\tif ($isNodeSelection(selection) || anchorAndFocus === null)\n\t{\n\t\treturn [-1, -1];\n\t}\n\n\tconst [anchor, focus] = anchorAndFocus;\n\tconst textContent = node.getTextContent();\n\tconst textLength = textContent.length;\n\n\tlet start = -1;\n\tlet end = -1;\n\n\t// Only one node is being selected.\n\tif (anchor.type === 'text' && focus.type === 'text')\n\t{\n\t\tconst anchorNode = anchor.getNode();\n\t\tconst focusNode = focus.getNode();\n\n\t\tif (\n\t\t\tanchorNode === focusNode\n\t\t\t&& node === anchorNode\n\t\t\t&& anchor.offset !== focus.offset\n\t\t)\n\t\t{\n\t\t\t[start, end] = (\n\t\t\t\tanchor.offset < focus.offset\n\t\t\t\t\t? [anchor.offset, focus.offset]\n\t\t\t\t\t: [focus.offset, anchor.offset]\n\t\t\t);\n\t\t}\n\t\telse if (node === anchorNode)\n\t\t{\n\t\t\t[start, end] = anchorNode.isBefore(focusNode)\n\t\t\t\t? [anchor.offset, textLength]\n\t\t\t\t: [0, anchor.offset];\n\t\t}\n\t\telse if (node === focusNode)\n\t\t{\n\t\t\t[start, end] = focusNode.isBefore(anchorNode)\n\t\t\t\t? [focus.offset, textLength]\n\t\t\t\t: [0, focus.offset];\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Node is within selection but not the anchor nor focus.\n\t\t\t[start, end] = [0, textLength];\n\t\t}\n\t}\n\n\t// Account for non-single width characters.\n\tconst numNonSingleWidthCharBeforeSelection = (\n\t\ttextContent.slice(0, start).match(NON_SINGLE_WIDTH_CHARS_REGEX) || []\n\t).length;\n\tconst numNonSingleWidthCharInSelection = (\n\t\ttextContent.slice(start, end).match(NON_SINGLE_WIDTH_CHARS_REGEX) || []\n\t).length;\n\n\treturn [\n\t\tstart + numNonSingleWidthCharBeforeSelection,\n\t\tend + numNonSingleWidthCharBeforeSelection + numNonSingleWidthCharInSelection,\n\t];\n}\n","export function createHashCode(s): number\n{\n\treturn [...s].reduce(\n\t\t(hash, c) => Math.trunc(Math.imul(31, hash) + c.codePointAt(0)),\n\t\t0,\n\t);\n}\n","import {\n\t$getRoot,\n\t$isDecoratorNode,\n\t$isElementNode,\n\t$isParagraphNode,\n\t$isTextNode,\n\ttype DecoratorNode,\n\ttype ElementNode,\n} from 'ui.lexical.core';\n\nexport function $isRootEmpty(trim: boolean = true): boolean\n{\n\tconst root = $getRoot();\n\tlet text = root.getTextContent();\n\tif (trim)\n\t{\n\t\ttext = text.trim();\n\t}\n\n\tif (text !== '')\n\t{\n\t\treturn false;\n\t}\n\n\tconst children = root.getChildren();\n\tconst childrenLength = children.length;\n\tif (childrenLength > 1)\n\t{\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < childrenLength; i++)\n\t{\n\t\tconst topBlock: ElementNode | DecoratorNode = children[i];\n\t\tif ($isDecoratorNode(topBlock))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif ($isElementNode(topBlock))\n\t\t{\n\t\t\tif (!$isParagraphNode(topBlock))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (topBlock.__indent !== 0)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst topBlockChildren = topBlock.getChildren();\n\t\t\tconst topBlockChildrenLength = topBlockChildren.length;\n\n\t\t\tfor (let s = 0; s < topBlockChildrenLength; s++)\n\t\t\t{\n\t\t\t\tconst child = topBlockChildren[i];\n\t\t\t\tif (!$isTextNode(child))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n","export const defaultTheme = {\n\tblockCursor: 'ui-text-editor__block-cursor',\n\tindent: 'ui-text-editor__indent',\n\tltr: 'ui-text-editor__ltr',\n\trtl: 'ui-text-editor__rtl',\n\n\theading: {\n\t\th1: 'ui-typography-heading-h1',\n\t\th2: 'ui-typography-heading-h2',\n\t\th3: 'ui-typography-heading-h3',\n\t\th4: 'ui-typography-heading-h4',\n\t\th5: 'ui-typography-heading-h5',\n\t\th6: 'ui-typography-heading-h6',\n\t},\n\thashtag: 'ui-typography-hashtag',\n\tlink: 'ui-typography-link',\n\tlist: {\n\t\tlistitem: 'ui-typography-li',\n\t\tnested: {\n\t\t\tlistitem: 'ui-text-editor__nestedListItem',\n\t\t},\n\t\tolDepth: [\n\t\t\t'ui-typography-ol ui-text-editor__ol1',\n\t\t\t'ui-typography-ol ui-text-editor__ol2',\n\t\t\t'ui-typography-ol ui-text-editor__ol3',\n\t\t\t'ui-typography-ol ui-text-editor__ol4',\n\t\t\t'ui-typography-ol ui-text-editor__ol5',\n\t\t],\n\t\tul: 'ui-typography-ul',\n\t},\n\tparagraph: 'ui-typography-paragraph ui-text-editor__paragraph',\n\ttext: {\n\t\tbold: 'ui-typography-text-bold',\n\t\tcode: 'ui-typography-text-code',\n\t\titalic: 'ui-typography-text-italic',\n\t\tstrikethrough: 'ui-typography-text-strikethrough',\n\t\tsubscript: 'ui-typography-text-subscript',\n\t\tsuperscript: 'ui-typography-text-superscript',\n\t\tunderline: 'ui-typography-text-underline',\n\t\tunderlineStrikethrough: 'ui-typography-text-underline-strikethrough',\n\t},\n\tmention: 'ui-typography-mention',\n\tquote: 'ui-typography-quote',\n\tspoiler: {\n\t\tcontainer: 'ui-typography-spoiler',\n\t\ttitle: 'ui-typography-spoiler-title ui-icon-set__scope',\n\t\tcontent: 'ui-typography-spoiler-content',\n\t},\n\tsmiley: 'ui-typography-smiley',\n\tcode: 'ui-typography-code',\n\tcodeHighlight: {\n\t\toperator: 'ui-typography-token-operator',\n\t\tpunctuation: 'ui-typography-token-punctuation',\n\t\tcomment: 'ui-typography-token-comment',\n\t\tword: 'ui-typography-token-word',\n\t\tkeyword: 'ui-typography-token-keyword',\n\t\tboolean: 'ui-typography-token-boolean',\n\t\tregex: 'ui-typography-token-regex',\n\t\tstring: 'ui-typography-token-string',\n\t\tnumber: 'ui-typography-token-number',\n\t\tsemicolon: 'ui-typography-token-semicolon',\n\t\tbracket: 'ui-typography-token-bracket',\n\t\tbrace: 'ui-typography-token-brace',\n\t\tparentheses: 'ui-typography-token-parentheses',\n\t},\n\n\ttable: 'ui-typography-table',\n\ttableRow: 'ui-typography-table-row',\n\ttableCell: 'ui-typography-table-cell',\n\ttableCellHeader: 'ui-typography-table-cell-header',\n\ttableSelection: 'ui-typography-table-selection',\n\n\timage: {\n\t\tcontainer: 'ui-typography-image-container ui-text-editor__image-container',\n\t\timg: 'ui-typography-image',\n\t},\n\n\tvideo: {\n\t\tcontainer: 'ui-typography-video-container ui-text-editor__video-container',\n\t\tobject: 'ui-typography-video-object ui-text-editor__video-object',\n\t},\n\n\tfile: 'ui-text-editor__file',\n};\n","import { Type } from 'main.core';\n\nimport { type TextEditor } from '../text-editor';\nimport type { PluginConstructor } from './base-plugin';\nimport BasePlugin from './base-plugin';\n\nexport default class PluginCollection\n{\n\t#pluginConstructors: Map<string, PluginConstructor> = new Map();\n\t#plugins: Map<string, BasePlugin> = new Map();\n\t#availablePlugins: Map<string, PluginConstructor> = new Map();\n\n\tconstructor(\n\t\tbuiltinPlugins: PluginConstructor[] = [],\n\t\tplugins: Array<string | PluginConstructor> = [],\n\t\tpluginsToRemove: Array<string | PluginConstructor> = [],\n\t)\n\t{\n\t\tfor (const pluginConstructor of builtinPlugins)\n\t\t{\n\t\t\tif (pluginConstructor.getName())\n\t\t\t{\n\t\t\t\tthis.#availablePlugins.set(pluginConstructor.getName(), pluginConstructor);\n\t\t\t}\n\t\t}\n\n\t\tfor (const plugin: string | PluginConstructor of plugins)\n\t\t{\n\t\t\tif (Type.isFunction(plugin) && plugin.getName() && !this.#availablePlugins.has(plugin.getName()))\n\t\t\t{\n\t\t\t\tthis.#availablePlugins.set(plugin.getName(), plugin);\n\t\t\t}\n\t\t}\n\n\t\tconst pluginsToLoad = plugins.filter((plugin: string | PluginConstructor) => {\n\t\t\tif (pluginsToRemove.includes(plugin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (Type.isFunction(plugin) && pluginsToRemove.includes(plugin.getName()))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !pluginsToRemove.includes(this.#availablePlugins.get(plugin));\n\t\t});\n\n\t\tpluginsToLoad\n\t\t\t.map((plugin: PluginConstructor | string) => {\n\t\t\t\treturn Type.isFunction(plugin) ? plugin : this.#availablePlugins.get(plugin);\n\t\t\t})\n\t\t\t.forEach((pluginConstructor: PluginConstructor) => {\n\t\t\t\tif (Type.isFunction(pluginConstructor))\n\t\t\t\t{\n\t\t\t\t\tthis.#pluginConstructors.set(pluginConstructor.getName(), pluginConstructor);\n\t\t\t\t}\n\t\t\t})\n\t\t;\n\t}\n\n\tinit(textEditor: TextEditor): void\n\t{\n\t\tconst instances = [];\n\t\tfor (const [, PluginConstruct] of this.#pluginConstructors)\n\t\t{\n\t\t\tconst plugin = new PluginConstruct(textEditor);\n\t\t\tif (!(plugin instanceof BasePlugin))\n\t\t\t{\n\t\t\t\tthrow new TypeError('TextEditor: a plugin must be an instance of TextEditor.BasePlugin.');\n\t\t\t}\n\n\t\t\tthis.#plugins.set(PluginConstruct.getName(), plugin);\n\t\t\tinstances.push(plugin);\n\t\t}\n\n\t\tinstances.forEach((instance: BasePlugin) => {\n\t\t\tinstance.afterInit();\n\t\t});\n\t}\n\n\tgetConstructors(): PluginConstructor[]\n\t{\n\t\treturn [...this.#pluginConstructors.values()];\n\t}\n\n\tgetPlugins(): Map<string, BasePlugin>\n\t{\n\t\treturn this.#plugins;\n\t}\n\n\t[Symbol.iterator](): IterableIterator<[string, BasePlugin]>\n\t{\n\t\treturn this.#plugins[Symbol.iterator]();\n\t}\n\n\tget(key: PluginConstructor | string): BasePlugin | null\n\t{\n\t\tconst name: string = Type.isFunction(key) ? key.getName() : key;\n\n\t\treturn this.#plugins.get(name) || null;\n\t}\n\n\thas(key: PluginConstructor | string): boolean\n\t{\n\t\tconst name: string = Type.isFunction(key) ? key.getName() : key;\n\n\t\treturn this.#plugins.has(name);\n\t}\n}\n","type Component = {\n\tcallback: Function,\n};\n\nexport default class ComponentRegistry\n{\n\t#components: Map<string, Component> = new Map();\n\n\tregister(name: string, callback: () => {}): void\n\t{\n\t\tthis.#components.set(this.constructor.#normalizeName(name), { callback });\n\t}\n\n\tcreate(name): Object\n\t{\n\t\tconst component: Component = this.#components.get(this.constructor.#normalizeName(name));\n\n\t\treturn component ? component.callback() : null;\n\t}\n\n\tstatic #normalizeName(name: string): string\n\t{\n\t\treturn String(name).toLowerCase();\n\t}\n}\n","/* eslint-disable @bitrix24/bitrix24-rules/no-native-dom-methods */\n\nimport { Type } from 'main.core';\nimport { $createParagraphNode, $isElementNode, $isRootNode, $isTextNode } from 'ui.lexical.core';\nimport { type ElementNode, type LexicalNode } from 'ui.lexical.core';\nimport { type TextEditor } from './text-editor';\nimport { type SchemeNodeValidation, type SchemeValidationOptions } from './types/scheme-validation-options';\n\nexport default class SchemeValidation\n{\n\t#editor: TextEditor = null;\n\t#nodeTypeToBBCodeType: Map<string, string> = new Map();\n\t#nodeValidation: Map<string, Object> = new Map();\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tthis.#editor = editor;\n\n\t\tthis.#initNodeValidation();\n\t}\n\n\tisNodeAllowed(parent: LexicalNode | string, child: LexicalNode | string): boolean\n\t{\n\t\tconst parentCode = Type.isString(parent) ? parent : this.#nodeTypeToBBCodeType.get(parent.getType());\n\t\tconst childCode = Type.isString(child) ? child : this.#nodeTypeToBBCodeType.get(child.getType());\n\n\t\tif (!parentCode)\n\t\t{\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`TextEditor: parent node (${parent.getType()}) doesn't have a bbcode tag.`);\n\t\t}\n\n\t\tif (!childCode)\n\t\t{\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`TextEditor: child node (${child.getType()}) doesn't have a bbcode tag.`);\n\t\t}\n\n\t\treturn this.#editor.getBBCodeScheme().isChildAllowed(parentCode, childCode);\n\t}\n\n\tfindAllowedParent(node: LexicalNode): ElementNode | null\n\t{\n\t\tlet parent: ElementNode = node.getParent();\n\t\twhile (parent !== null)\n\t\t{\n\t\t\tif (this.isNodeAllowed(parent, node))\n\t\t\t{\n\t\t\t\treturn parent;\n\t\t\t}\n\n\t\t\tparent = parent.getParent();\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t#initNodeValidation(): void\n\t{\n\t\tconst handleNodeTransform = this.#handleNodeTransform.bind(this);\n\t\tfor (const [, plugin] of this.#editor.getPlugins())\n\t\t{\n\t\t\tconst validation: SchemeValidationOptions | null = plugin.validateScheme();\n\t\t\tif (!Type.isPlainObject(validation))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (Type.isArrayFilled(validation.nodes))\n\t\t\t{\n\t\t\t\tvalidation.nodes.forEach((nodeValidation: SchemeNodeValidation) => {\n\t\t\t\t\tthis.#editor.registerNodeTransform(nodeValidation.nodeClass, handleNodeTransform);\n\t\t\t\t\tif (Type.isFunction(nodeValidation.validate))\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#nodeValidation.set(nodeValidation.nodeClass.getType(), { validate: nodeValidation.validate });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (Type.isPlainObject(validation.bbcodeMap))\n\t\t\t{\n\t\t\t\tfor (const [nodeType, bbcodeTag] of Object.entries(validation.bbcodeMap))\n\t\t\t\t{\n\t\t\t\t\tthis.#nodeTypeToBBCodeType.set(nodeType, bbcodeTag);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t#handleNodeTransform(node: LexicalNode | ElementNode): void\n\t{\n\t\tconst { validate = null } = this.#nodeValidation.get(node.getType()) || {};\n\t\tif (validate !== null && validate(node, this) === true)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent: ElementNode = node.getParent();\n\t\tif (this.isNodeAllowed(parent, node))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(`TextEditor: ${node.getType()} is not allowed in ${parent.getType()}`);\n\n\t\tthis.moveToNextParent(node);\n\t}\n\n\tmoveToNextParent(node: LexicalNode | ElementNode, removeOnFail: boolean = true): boolean\n\t{\n\t\tlet parent: ElementNode = node.getParent();\n\t\tlet targetNode: ElementNode = null;\n\t\twhile (parent.getParent() !== null)\n\t\t{\n\t\t\tif (this.isNodeAllowed(parent.getParent(), node))\n\t\t\t{\n\t\t\t\ttargetNode = parent;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tparent = parent.getParent();\n\t\t}\n\n\t\tif (targetNode === null)\n\t\t{\n\t\t\tif (removeOnFail)\n\t\t\t{\n\t\t\t\tnode.remove();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif ($isRootNode(targetNode.getParent()) && ($isTextNode(node) || ($isElementNode(node) && node.isInline())))\n\t\t{\n\t\t\ttargetNode.insertBefore($createParagraphNode().append(node));\n\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetNode.insertBefore(node);\n\n\t\treturn true;\n\t}\n}\n","import { registerRichText } from 'ui.lexical.rich-text';\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nexport class RichTextPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.cleanUpRegister(\n\t\t\tregisterRichText(editor.getLexicalEditor()),\n\t\t);\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'RichText';\n\t}\n}\n","import type { DOMConversion, DOMConversionMap, DOMConversionOutput, SerializedElementNode } from 'ui.lexical.core';\nimport { $createLineBreakNode, $createTextNode, ElementNode } from 'ui.lexical.core';\n\nexport class ClipboardPlainTableNode extends ElementNode\n{\n\tstatic getType(): string\n\t{\n\t\treturn 'plain-table-node';\n\t}\n\n\tstatic clone(node: ClipboardPlainTableNode): ClipboardPlainTableNode\n\t{\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tstatic importJSON(serializedNode: SerializedElementNode): ClipboardPlainTableNode\n\t{\n\t\tthrow new Error('Not implemented');\n\t}\n\n\texportJSON(): SerializedElementNode\n\t{\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null\n\t{\n\t\treturn {\n\t\t\ttable: (): DOMConversion => {\n\t\t\t\treturn {\n\t\t\t\t\tconversion: convertTableToPlainText,\n\t\t\t\t\tpriority: 0,\n\t\t\t\t};\n\t\t\t},\n\t\t\ttr: (): DOMConversion => {\n\t\t\t\treturn {\n\t\t\t\t\tconversion: () => ({ node: null }),\n\t\t\t\t\tpriority: 0,\n\t\t\t\t};\n\t\t\t},\n\t\t\ttd: (): DOMConversion => {\n\t\t\t\treturn {\n\t\t\t\t\tconversion: () => ({ node: null }),\n\t\t\t\t\tpriority: 0,\n\t\t\t\t};\n\t\t\t},\n\t\t\tth: (): DOMConversion => {\n\t\t\t\treturn {\n\t\t\t\t\tconversion: () => ({ node: null }),\n\t\t\t\t\tpriority: 0,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction convertTableToPlainText(table: HTMLTableElement): DOMConversionOutput\n{\n\tconst nodes = [];\n\tconst rows = [...table.rows];\n\tfor (const row of rows)\n\t{\n\t\tif (nodes.length > 0)\n\t\t{\n\t\t\tnodes.push($createLineBreakNode());\n\t\t}\n\n\t\tconst cells = [];\n\t\tfor (const cell of row.cells)\n\t\t{\n\t\t\tif (cells.length > 0)\n\t\t\t{\n\t\t\t\t// cells.push($createTabNode());\n\t\t\t\tcells.push($createTextNode(' '));\n\t\t\t}\n\n\t\t\tcells.push($createTextNode(cell.textContent.trim()));\n\t\t}\n\n\t\tnodes.push(...cells);\n\t}\n\n\treturn {\n\t\tnode: nodes,\n\t};\n}\n","import type { LexicalNode, LexicalNodeReplacement } from 'ui.lexical.core';\nimport type { TextEditor } from 'ui.text-editor';\nimport type { PluginConstructor } from '../base-plugin';\nimport BasePlugin from '../base-plugin';\nimport { ClipboardPlainTableNode } from './clipboard-plain-table-node';\n\nexport class ClipboardPlugin extends BasePlugin\n{\n\tstatic getName(): string\n\t{\n\t\treturn 'Clipboard';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode> | LexicalNodeReplacement>\n\t{\n\t\tconst nodes = [];\n\n\t\tconst tablePluginExists = editor.getPlugins().getConstructors().some(\n\t\t\t(plugin: PluginConstructor): boolean => {\n\t\t\t\treturn plugin.getName() === 'Table';\n\t\t\t},\n\t\t);\n\n\t\tif (!tablePluginExists)\n\t\t{\n\t\t\tnodes.push(ClipboardPlainTableNode);\n\t\t}\n\n\t\treturn nodes;\n\t}\n}\n","import { Loc, Browser } from 'main.core';\nimport { type TextNode } from 'ui.lexical.core';\n\nimport {\n\tFORMAT_TEXT_COMMAND,\n} from 'ui.lexical.core';\n\nimport Button from '../../toolbar/button';\nimport BasePlugin from '../base-plugin';\n\nimport {\n\tconvertTextFormatElement,\n\twrapNodeWith,\n\ttype BBCodeExportConversion,\n\ttype BBCodeConversion,\n\ttype BBCodeImportConversion,\n} from '../../bbcode';\n\nimport { type TextEditor } from '../../text-editor';\n\nexport class BoldPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Bold';\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tb: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tcolor: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tbackground: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tsize: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\t'text:bold': (lexicalNode: TextNode, node: Node): Node | null => {\n\t\t\t\tif (lexicalNode.hasFormat('bold'))\n\t\t\t\t{\n\t\t\t\t\treturn wrapNodeWith(node, 'b', this.getEditor());\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('bold', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --bold\"></span>');\n\t\t\tbutton.setFormat('bold');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(\n\t\t\t\tLoc.getMessage('TEXT_EDITOR_BTN_BOLD', { '#keystroke#': Browser.isMac() ? '⌘B' : 'Ctrl+B' }),\n\t\t\t);\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_TEXT_COMMAND, 'bold');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n}\n","import { Browser, Loc } from 'main.core';\n\nimport {\n\twrapNodeWith,\n\tconvertTextFormatElement,\n\ttype BBCodeConversion,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n} from '../../bbcode';\n\nimport Button from '../../toolbar/button';\n\nimport {\n\tFORMAT_TEXT_COMMAND,\n\ttype TextNode,\n} from 'ui.lexical.core';\n\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nexport class ItalicPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Italic';\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\ti: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\t'text:italic': (lexicalNode: TextNode, node: Node): Node | null => {\n\t\t\t\tif (lexicalNode.hasFormat('italic'))\n\t\t\t\t{\n\t\t\t\t\treturn wrapNodeWith(node, 'i', this.getEditor());\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('italic', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --italic\"></span>');\n\t\t\tbutton.setFormat('italic');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(\n\t\t\t\tLoc.getMessage('TEXT_EDITOR_BTN_ITALIC', { '#keystroke#': Browser.isMac() ? '⌘I' : 'Ctrl+I' }),\n\t\t\t);\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_TEXT_COMMAND, 'italic');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n}\n","import { Browser, Loc } from 'main.core';\n\nimport {\n\tconvertTextFormatElement,\n\twrapNodeWith,\n\ttype BBCodeConversion,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n} from '../../bbcode';\n\nimport Button from '../../toolbar/button';\n\nimport {\n\tCOMMAND_PRIORITY_NORMAL,\n\tFORMAT_TEXT_COMMAND,\n\tKEY_MODIFIER_COMMAND,\n\ttype TextNode,\n} from 'ui.lexical.core';\n\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nexport class StrikethroughPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerComponents();\n\t\tthis.#registerKeyModifierCommand();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Strikethrough';\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\ts: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tdel: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\t'text:strikethrough': (lexicalNode: TextNode, node: Node): Node | null => {\n\t\t\t\tif (lexicalNode.hasFormat('strikethrough'))\n\t\t\t\t{\n\t\t\t\t\treturn wrapNodeWith(node, 's', this.getEditor());\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerKeyModifierCommand(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_MODIFIER_COMMAND,\n\t\t\t\t(payload) => {\n\t\t\t\t\tconst event: KeyboardEvent = payload;\n\t\t\t\t\tconst { code, ctrlKey, metaKey, shiftKey } = event;\n\t\t\t\t\tif (code === 'KeyX' && (ctrlKey || metaKey) && shiftKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough');\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('strikethrough', () => {\n\t\t\tconst button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --strikethrough\"></span>');\n\t\t\tbutton.setFormat('strikethrough');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(\n\t\t\t\tLoc.getMessage('TEXT_EDITOR_BTN_STRIKETHROUGH', { '#keystroke#': Browser.isMac() ? '⌘⇧X' : 'Ctrl+Shift+X' }),\n\t\t\t);\n\t\t\tbutton.subscribe('onClick', () => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n}\n","import { Browser, Loc } from 'main.core';\n\nimport {\n\twrapNodeWith,\n\tconvertTextFormatElement,\n\ttype BBCodeConversion,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n} from '../../bbcode';\n\nimport Button from '../../toolbar/button';\n\nimport {\n\tFORMAT_TEXT_COMMAND,\n\ttype TextNode,\n} from 'ui.lexical.core';\n\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nexport class UnderlinePlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Underline';\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tu: (): BBCodeConversion => ({\n\t\t\t\tconversion: convertTextFormatElement,\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\t'text:underline': (lexicalNode: TextNode, node: Node): Node | null => {\n\t\t\t\tif (lexicalNode.hasFormat('underline'))\n\t\t\t\t{\n\t\t\t\t\treturn wrapNodeWith(node, 'u', this.getEditor());\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('underline', () => {\n\t\t\tconst button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --underline\"></span>');\n\t\t\tbutton.setFormat('underline');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(\n\t\t\t\tLoc.getMessage('TEXT_EDITOR_BTN_UNDERLINE', { '#keystroke#': Browser.isMac() ? '⌘U' : 'Ctrl+U' }),\n\t\t\t);\n\t\t\tbutton.subscribe('onClick', () => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(FORMAT_TEXT_COMMAND, 'underline');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n}\n","import { Loc } from 'main.core';\n\nimport {\n\t$getSelection,\n\t$isRangeSelection,\n\t$isTextNode,\n\tcreateCommand,\n\tCOMMAND_PRIORITY_EDITOR,\n\ttype LexicalCommand,\n\ttype BaseSelection,\n\ttype TextNode,\n\ttype LexicalNode,\n} from 'ui.lexical.core';\n\nimport { $isTableSelection } from 'ui.lexical.table';\nimport { $getNearestBlockElementAncestorOrThrow } from 'ui.lexical.utils';\n\nimport Button from '../../toolbar/button';\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nexport const CLEAR_FORMATTING_COMMAND: LexicalCommand = createCommand('CLEAR_FORMATTING_COMMAND');\n\nexport class ClearFormatPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerCommands();\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'ClearFormat';\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tCLEAR_FORMATTING_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tconst selection: BaseSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection) && !$isTableSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst anchor = selection.anchor;\n\t\t\t\t\tconst focus = selection.focus;\n\t\t\t\t\tconst nodes = selection.getNodes();\n\t\t\t\t\tconst extractedNodes = selection.extract();\n\n\t\t\t\t\tif (anchor.key === focus.key && anchor.offset === focus.offset)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tnodes.forEach((node: LexicalNode, idx) => {\n\t\t\t\t\t\t// We split the first and last node by the selection\n\t\t\t\t\t\t// So that we don't format unselected text inside those nodes\n\t\t\t\t\t\tif ($isTextNode(node))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Use a separate variable to ensure TS does not lose the refinement\n\t\t\t\t\t\t\tlet textNode: TextNode = node;\n\t\t\t\t\t\t\tif (idx === 0 && anchor.offset !== 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttextNode = textNode.splitText(anchor.offset)[1] || textNode;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (idx === nodes.length - 1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttextNode = textNode.splitText(focus.offset)[0] || textNode;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * If the selected text has one format applied\n\t\t\t\t\t\t\t * selecting a portion of the text, could\n\t\t\t\t\t\t\t * clear the format to the wrong portion of the text.\n\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t * The cleared text is based on the length of the selected text.\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t// We need this in case the selected text only has one format\n\t\t\t\t\t\t\tconst extractedTextNode = extractedNodes[0];\n\t\t\t\t\t\t\tif (nodes.length === 1 && $isTextNode(extractedTextNode))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttextNode = extractedTextNode;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (textNode.__style !== '')\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttextNode.setStyle('');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (textNode.__format !== 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttextNode.setFormat(0);\n\t\t\t\t\t\t\t\t$getNearestBlockElementAncestorOrThrow(textNode).setFormat('');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* else if ($isHeadingNode(node) || $isQuoteNode(node))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode.replace($createParagraphNode(), true);\n\t\t\t\t\t\t} */\n\t\t\t\t\t});\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('clear-format', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --remove-formatting\"></span>');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_CLEAR_FORMATTING'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(CLEAR_FORMATTING_COMMAND);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n}\n","import { Dom, Tag, Type, Loc } from 'main.core';\nimport { MemoryCache, type BaseCache } from 'main.core.cache';\nimport { EventEmitter, type BaseEvent } from 'main.core.events';\nimport { Popup, PopupTargetOptions, PopupTarget } from 'main.popup';\n\nimport './link-editor.css';\n\nimport { sanitizeUrl } from '../../helpers/sanitize-url';\n\nexport type LinkEditorOptions = {\n\teditMode?: boolean,\n\tautoLinkMode?: boolean,\n\tlinkUrl?: string,\n\ttargetContainer?: HTMLElement,\n\tevents?: Object<string, (event: BaseEvent) => {}>,\n}\n\nexport class LinkEditor extends EventEmitter\n{\n\t#popup: Popup = null;\n\t#editMode: boolean = null;\n\t#autoLinkMode: boolean = null;\n\t#linkUrl: string = '';\n\t#targetContainer: HTMLElement = null;\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\n\tconstructor(options: LinkEditorOptions)\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.LinkEditor');\n\n\t\tconst linkEditorOptions: LinkEditorOptions = Type.isPlainObject(options) ? options : {};\n\n\t\tthis.setTargetContainer(linkEditorOptions.targetContainer);\n\t\tthis.setLinkUrl(linkEditorOptions.linkUrl);\n\n\t\tif (Type.isBoolean(linkEditorOptions.editMode))\n\t\t{\n\t\t\tthis.setEditMode(linkEditorOptions.editMode);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.setEditMode(this.#linkUrl === '');\n\t\t}\n\n\t\tthis.setAutoLinkMode(options.autoLinkMode);\n\n\t\tthis.subscribeFromOptions(linkEditorOptions.events);\n\t}\n\n\tshow(options: { target: PopupTarget, targetOptions: PopupTargetOptions } = {}): void\n\t{\n\t\tconst target: PopupTarget = options.target ?? undefined;\n\t\tconst targetOptions: PopupTargetOptions = Type.isPlainObject(options.targetOptions) ? options.targetOptions : {};\n\n\t\tif (!Type.isUndefined(target))\n\t\t{\n\t\t\tthis.getPopup().setBindElement(target);\n\t\t}\n\n\t\tthis.getPopup().adjustPosition({\n\t\t\t...targetOptions,\n\t\t\tforceBindPosition: true,\n\t\t});\n\n\t\tthis.getPopup().show();\n\t}\n\n\tisShown(): boolean\n\t{\n\t\treturn this.#popup !== null && this.#popup.isShown();\n\t}\n\n\thide(): void\n\t{\n\t\tthis.getPopup().close();\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.getPopup().destroy();\n\t}\n\n\tsetAutoLinkMode(autoLinkMode: boolean = true): void\n\t{\n\t\tif (autoLinkMode === this.#autoLinkMode)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (autoLinkMode)\n\t\t{\n\t\t\tDom.addClass(this.getContainer(), '--auto-link-mode');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.getContainer(), '--auto-link-mode');\n\t\t}\n\n\t\tif (this.#popup !== null)\n\t\t{\n\t\t\tthis.#popup.adjustPosition();\n\t\t}\n\n\t\tthis.#autoLinkMode = autoLinkMode;\n\t}\n\n\tsetEditMode(editMode: boolean = true): void\n\t{\n\t\tif (editMode === this.#editMode)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (editMode)\n\t\t{\n\t\t\tDom.addClass(this.getContainer(), '--edit-mode');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.getContainer(), '--edit-mode');\n\t\t}\n\n\t\tif (this.#popup !== null)\n\t\t{\n\t\t\tthis.#popup.adjustPosition();\n\t\t}\n\n\t\tthis.#editMode = editMode;\n\t}\n\n\tsetLinkUrl(url: string): void\n\t{\n\t\tif (Type.isString(url))\n\t\t{\n\t\t\tthis.#linkUrl = sanitizeUrl(url);\n\n\t\t\tthis.getLinkTextBox().value = this.#linkUrl;\n\t\t\tthis.getLinkLabel().textContent = this.#linkUrl;\n\t\t\tthis.getLinkLabel().href = this.#linkUrl;\n\t\t}\n\t}\n\n\tgetLinkUrl(): string\n\t{\n\t\treturn this.#linkUrl;\n\t}\n\n\tsetTargetContainer(container: HTMLElement): void\n\t{\n\t\tif (Type.isElementNode(container))\n\t\t{\n\t\t\tthis.#targetContainer = container;\n\t\t}\n\t}\n\n\tgetTargetContainer(): HTMLElement | null\n\t{\n\t\treturn this.#targetContainer;\n\t}\n\n\tgetPopup(): Popup\n\t{\n\t\tif (this.#popup === null)\n\t\t{\n\t\t\tthis.#popup = new Popup({\n\t\t\t\tautoHide: true,\n\t\t\t\tcacheable: false,\n\t\t\t\tpadding: 0,\n\t\t\t\tcloseByEsc: true,\n\t\t\t\ttargetContainer: this.getTargetContainer(),\n\t\t\t\tcontent: this.getContainer(),\n\t\t\t\tevents: {\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tthis.emit('onClose');\n\t\t\t\t\t},\n\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\tthis.emit('onDestroy');\n\t\t\t\t\t},\n\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\tthis.emit('onShow');\n\t\t\t\t\t},\n\t\t\t\t\tonAfterShow: () => {\n\t\t\t\t\t\tif (this.#editMode)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.getLinkTextBox().focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn this.#popup;\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-link-editor\">\n\t\t\t\t\t<div class=\"ui-text-editor-link-form\">\n\t\t\t\t\t\t<div class=\"ui-ctl ui-ctl-textbox ui-ctl-s ui-ctl-inline ui-ctl-w100 ui-text-editor-link-textbox\">\n\t\t\t\t\t\t\t<div class=\"ui-ctl-tag\">${Loc.getMessage('TEXT_EDITOR_LINK_URL')}</div>\n\t\t\t\t\t\t\t${this.getLinkTextBox()}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<button type=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-link-form-button\" \n\t\t\t\t\t\t\tonclick=\"${this.#handleSaveBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"save-link-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --check\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button \n\t\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-link-form-button\"\n\t\t\t\t\t\t\tonclick=\"${this.#handleCancelBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"cancel-link-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --cross-60\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"ui-text-editor-link-preview\">\n\t\t\t\t\t\t${this.getLinkLabel()}\n\t\t\t\t\t\t<button \n\t\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-link-form-button\"\n\t\t\t\t\t\t\tonclick=\"${this.#handleEditBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"edit-link-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --pencil-60\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button \n\t\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\t\tclass=\"ui-text-editor-link-form-button ui-text-editor-link-form-delete-btn\"\n\t\t\t\t\t\t\tonclick=\"${this.#handleUnlinkBtnClick.bind(this)}\"\n\t\t\t\t\t\t\tdata-testid=\"unlink-btn\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ui-icon-set --delete-hyperlink\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetLinkTextBox(): HTMLInputElement\n\t{\n\t\treturn this.#refs.remember('link-textbox', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<input \n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"ui-ctl-element\"\n\t\t\t\t\tplaceholder=\"https://\"\n\t\t\t\t\tvalue=\"${this.getLinkUrl()}\"\n\t\t\t\t\tonkeydown=\"${this.#handleLinkTextBoxKeyDown.bind(this)}\"\n\t\t\t\t\tdata-testid=\"link-textbox-input\"\n\t\t\t\t>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetLinkLabel(): HTMLAnchorElement\n\t{\n\t\treturn this.#refs.remember('link-label', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<a href=\"\" target=\"_blank\" class=\"ui-text-editor-link-label\"></a>\n\t\t\t`;\n\t\t});\n\t}\n\n\t#handleSaveBtnClick(): void\n\t{\n\t\tconst url: string = this.getLinkTextBox().value.trim();\n\t\tif (url.length > 0)\n\t\t{\n\t\t\tthis.setLinkUrl(url);\n\t\t\tthis.emit('onSave');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getLinkTextBox().focus();\n\t\t}\n\t}\n\n\t#handleLinkTextBoxKeyDown(event: KeyboardEvent)\n\t{\n\t\tif (event.key === 'Enter')\n\t\t{\n\t\t\tevent.preventDefault();\n\t\t\tthis.#handleSaveBtnClick();\n\t\t}\n\t}\n\n\t#handleCancelBtnClick(): void\n\t{\n\t\tthis.emit('onCancel');\n\t}\n\n\t#handleEditBtnClick(): void\n\t{\n\t\tthis.setEditMode(true);\n\t\tthis.getLinkTextBox().focus();\n\t\tthis.getLinkTextBox().select();\n\t}\n\n\t#handleUnlinkBtnClick(): void\n\t{\n\t\tthis.emit('onUnlink');\n\t}\n}\n","export function validateUrl(url: string): boolean\n{\n\treturn /^(http:|https:|mailto:|tel:|sms:)/i.test(url);\n}\n","/* eslint-disable no-underscore-dangle */\nimport { Browser, Event, Loc, Type, Validation } from 'main.core';\n\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\nimport type { BaseEvent } from 'main.core.events';\nimport type {\n\tBBCodeConversion,\n\tBBCodeConversionFn,\n\tBBCodeExportConversion,\n\tBBCodeExportOutput,\n\tBBCodeImportConversion,\n} from '../../bbcode';\n\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport { UNFORMATTED } from '../../constants';\nimport { $adjustDialogPosition } from '../../helpers/adjust-dialog-position';\nimport { getSelectedNode } from '../../helpers/get-selected-node';\n\nimport Button from '../../toolbar/button';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\nimport { TextEditorLexicalNode } from '../../types/text-editor-lexical-node';\nimport BasePlugin from '../base-plugin';\nimport { LinkEditor } from './link-editor';\n\nimport { sanitizeUrl } from '../../helpers/sanitize-url';\nimport { validateUrl } from '../../helpers/validate-url';\n\nimport {\n\tCOMMAND_PRIORITY_LOW,\n\tCOMMAND_PRIORITY_NORMAL,\n\tPASTE_COMMAND,\n\tKEY_MODIFIER_COMMAND,\n\t$isTextNode,\n\t$isElementNode,\n\t$getSelection,\n\t$setSelection,\n\t$isRangeSelection,\n\t$insertNodes,\n\t$isRootOrShadowRoot,\n\t$createParagraphNode,\n\t$createTextNode,\n\t$getNodeByKey,\n\tcreateCommand,\n\ttype LexicalNode,\n\ttype RangeSelection,\n\ttype NodeKey,\n\ttype LexicalCommand,\n} from 'ui.lexical.core';\n\nimport { $wrapNodeInElement, $findMatchingParent, mergeRegister } from 'ui.lexical.utils';\n\nimport {\n\tLinkNode,\n\tTOGGLE_LINK_COMMAND,\n\t$toggleLink,\n\t$createLinkNode,\n\t$isLinkNode,\n\t$isAutoLinkNode,\n\ttype LinkAttributes,\n\ttype AutoLinkNode,\n} from 'ui.lexical.link';\n\nimport { type TextEditor } from '../../text-editor';\n\nexport const INSERT_LINK_DIALOG_COMMAND: LexicalCommand<string> = createCommand('INSERT_LINK_DIALOG_COMMAND');\n\nexport class LinkPlugin extends BasePlugin\n{\n\t#linkEditor: LinkEditor = null;\n\t#onEditorScroll: Function = this.#handleEditorScroll.bind(this);\n\t#lastSelection: RangeSelection = null;\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerCommands();\n\t\tthis.#registerListeners();\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Link';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [LinkNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\turl: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\t// [url]{url}[/url]\n\t\t\t\t\t// [url={url}]{text}[/url]\n\t\t\t\t\tlet url = node.getValue();\n\t\t\t\t\tif (!validateUrl(url))\n\t\t\t\t\t{\n\t\t\t\t\t\turl = node.toPlainText();\n\t\t\t\t\t\tif (!validateUrl(url))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn { node: null };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createLinkNode(sanitizeUrl(url), { target: '_blank' }),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tlink: (lexicalNode: LinkNode): BBCodeExportOutput => {\n\t\t\t\tconst url = lexicalNode.getURL();\n\t\t\t\tconst children = lexicalNode.getChildren();\n\t\t\t\tconst isSimpleText = (\n\t\t\t\t\tchildren.length === 1\n\t\t\t\t\t&& $isTextNode(children[0])\n\t\t\t\t\t&& children[0].getFormat() === 0\n\t\t\t\t);\n\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\t\t\t\tif (isSimpleText && children[0].getTextContent() === url)\n\t\t\t\t{\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: scheme.createElement({ name: 'url' }),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'url', value: url }),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: LinkNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\tlink: 'url',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerEventListener(LinkNode, 'click', (event: Event, nodeKey: NodeKey) => {\n\t\t\t\tconst linkNode: LinkNode = $getNodeByKey(nodeKey);\n\t\t\t\tif ($isLinkNode(linkNode))\n\t\t\t\t{\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_LINK_DIALOG_COMMAND, linkNode);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.#registerToggleLinkCommand(),\n\t\t\tthis.#registerInsertLinkCommand(),\n\t\t\tthis.#registerKeyModifierCommand(),\n\t\t\tthis.#registerPasteCommand(),\n\t\t);\n\t}\n\n\t#registerToggleLinkCommand(): () => void\n\t{\n\t\treturn this.getEditor().registerCommand(\n\t\t\tTOGGLE_LINK_COMMAND,\n\t\t\t(payload): boolean => {\n\t\t\t\tif (payload === null)\n\t\t\t\t{\n\t\t\t\t\t$toggleLink(payload);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tlet url = null;\n\t\t\t\tlet originalUrl = null;\n\n\t\t\t\tlet attributes = {};\n\t\t\t\tif (Type.isStringFilled(payload))\n\t\t\t\t{\n\t\t\t\t\turl = payload;\n\t\t\t\t}\n\t\t\t\telse if (Type.isPlainObject(payload))\n\t\t\t\t{\n\t\t\t\t\tconst { target, rel, title } = payload;\n\t\t\t\t\tattributes = { rel, target, title };\n\t\t\t\t\turl = payload.url;\n\t\t\t\t\toriginalUrl = payload.originalUrl || null;\n\t\t\t\t}\n\n\t\t\t\tif (Type.isStringFilled(url))\n\t\t\t\t{\n\t\t\t\t\tif (!Type.isStringFilled(attributes.target))\n\t\t\t\t\t{\n\t\t\t\t\t\tattributes.target = '_blank';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (validateUrl(url))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (selection.isCollapsed() && !this.#isLinkSelected(selection))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.#insertLink(selection, url, attributes, originalUrl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$toggleLink(url, attributes);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t);\n\t}\n\n\t#registerInsertLinkCommand(): () => void\n\t{\n\t\treturn mergeRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_LINK_DIALOG_COMMAND,\n\t\t\t\t(payload): boolean => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection) || !this.getEditor().isEditable())\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#lastSelection = selection.clone();\n\t\t\t\t\tif (this.#linkEditor !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#linkEditor.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tlet lineNode = null;\n\t\t\t\t\tlet linkUrl = null;\n\n\t\t\t\t\tif ($isLinkNode(payload))\n\t\t\t\t\t{\n\t\t\t\t\t\tlineNode = payload;\n\t\t\t\t\t\tlinkUrl = lineNode.getURL();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tconst $isUnformatted = $findMatchingParent(\n\t\t\t\t\t\t\tselection.anchor.getNode(),\n\t\t\t\t\t\t\t(node: TextEditorLexicalNode) => {\n\t\t\t\t\t\t\t\treturn (node.__flags & UNFORMATTED) !== 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ($isUnformatted)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst node = getSelectedNode(selection);\n\t\t\t\t\t\tconst linkParent = $findMatchingParent(node, $isLinkNode);\n\n\t\t\t\t\t\tif (linkParent)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlineNode = linkParent;\n\t\t\t\t\t\t\tlinkUrl = lineNode.getURL();\n\t\t\t\t\t\t\tlineNode.select();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ($isLinkNode(node))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlineNode = node;\n\t\t\t\t\t\t\tlinkUrl = lineNode.getURL();\n\t\t\t\t\t\t\tlineNode.select();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getEditor().dispatchCommand(HIDE_DIALOG_COMMAND);\n\n\t\t\t\t\tthis.#linkEditor = new LinkEditor({\n\t\t\t\t\t\tlinkUrl,\n\t\t\t\t\t\tautoLinkMode: $isAutoLinkNode(lineNode),\n\t\t\t\t\t\t// for an embedded popup: document.body -> this.getEditor().getScrollerContainer()\n\t\t\t\t\t\ttargetContainer: document.body,\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tonSave: (event: BaseEvent) => {\n\t\t\t\t\t\t\t\tconst linkEditor: LinkEditor = event.getTarget();\n\t\t\t\t\t\t\t\tlet url = linkEditor.getLinkUrl();\n\t\t\t\t\t\t\t\tif (!Type.isStringFilled(url))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlinkEditor.hide();\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst protocol = Validation.isEmail(url) ? 'mailto:' : 'https://';\n\t\t\t\t\t\t\t\tconst originalUrl = url;\n\t\t\t\t\t\t\t\tif (!validateUrl(url))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\turl = `${protocol}${url}`;\n\t\t\t\t\t\t\t\t\tlinkEditor.setLinkUrl(url);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (lineNode === null)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\t\t\t\t\tthis.#restoreSelection();\n\n\t\t\t\t\t\t\t\t\t\tthis.getEditor().dispatchCommand(TOGGLE_LINK_COMMAND, { url, originalUrl, rel: null });\n\t\t\t\t\t\t\t\t\t\tlinkEditor.setEditMode(false);\n\n\t\t\t\t\t\t\t\t\t\tconst currentSelection: RangeSelection = $getSelection();\n\t\t\t\t\t\t\t\t\t\tif ($isRangeSelection(currentSelection))\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tthis.#lastSelection = currentSelection.clone();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (!$isRangeSelection(currentSelection) || currentSelection.isCollapsed())\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tlinkEditor.hide();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tthis.#convertAutoLinkToLink(currentSelection);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\t\t\t\t\tlineNode.setURL(url);\n\t\t\t\t\t\t\t\t\t\tthis.#convertAutoLinkToLink($getSelection());\n\t\t\t\t\t\t\t\t\t\tlinkEditor.setAutoLinkMode(false);\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tlinkEditor.setEditMode(false);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.getEditor().resetHighlightSelection();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonCancel: (event: BaseEvent) => {\n\t\t\t\t\t\t\t\tconst linkEditor: LinkEditor = event.getTarget();\n\t\t\t\t\t\t\t\tlinkEditor.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonUnlink: (event: BaseEvent) => {\n\t\t\t\t\t\t\t\tif (lineNode === null)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.getEditor().dispatchCommand(TOGGLE_LINK_COMMAND, null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\t\t\t\t\tconst children = lineNode.getChildren();\n\t\t\t\t\t\t\t\t\t\tfor (const child of children)\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line @bitrix24/bitrix24-rules/no-native-dom-methods\n\t\t\t\t\t\t\t\t\t\t\tlineNode.insertBefore(child);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tlineNode.remove();\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst linkEditor: LinkEditor = event.getTarget();\n\t\t\t\t\t\t\t\tlinkEditor.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\t\t\tif ($adjustDialogPosition(this.#linkEditor.getPopup(), this.getEditor()))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tEvent.bind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\t\t\t\t\t\t\t\tthis.getEditor().highlightSelection();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\t\tthis.#handleDialogDestroy();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\t\t\tthis.#handleDialogDestroy();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.#linkEditor.show();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (this.#linkEditor !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#linkEditor.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDIALOG_VISIBILITY_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn this.#linkEditor !== null && this.#linkEditor.isShown();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#restoreSelection(): boolean\n\t{\n\t\tconst selection = $getSelection();\n\t\tif (!$isRangeSelection(selection) && this.#lastSelection !== null)\n\t\t{\n\t\t\t$setSelection(this.#lastSelection);\n\t\t\tthis.#lastSelection = null;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#handleDialogDestroy(): void\n\t{\n\t\tthis.#linkEditor = null;\n\t\tEvent.unbind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\tthis.getEditor().resetHighlightSelection();\n\n\t\tthis.getEditor().update(() => {\n\t\t\tif (!this.#restoreSelection())\n\t\t\t{\n\t\t\t\tthis.getEditor().focus();\n\t\t\t}\n\t\t});\n\t}\n\n\t#handleEditorScroll(): void\n\t{\n\t\tthis.getEditor().update(() => {\n\t\t\t$adjustDialogPosition(this.#linkEditor.getPopup(), this.getEditor());\n\t\t});\n\t}\n\n\t#registerKeyModifierCommand(): () => void\n\t{\n\t\treturn this.getEditor().registerCommand(\n\t\t\tKEY_MODIFIER_COMMAND,\n\t\t\t(payload) => {\n\t\t\t\tconst event: KeyboardEvent = payload;\n\t\t\t\tconst { code, ctrlKey, metaKey } = event;\n\t\t\t\tif (code === 'KeyK' && (ctrlKey || metaKey))\n\t\t\t\t{\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_LINK_DIALOG_COMMAND);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t);\n\t}\n\n\t#registerPasteCommand(): () => void\n\t{\n\t\treturn this.getEditor().registerCommand(\n\t\t\tPASTE_COMMAND,\n\t\t\t(event) => {\n\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\tif (\n\t\t\t\t\t!$isRangeSelection(selection)\n\t\t\t\t\t|| selection.isCollapsed()\n\t\t\t\t\t|| !(event instanceof ClipboardEvent)\n\t\t\t\t\t|| event.clipboardData === null\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst clipboardText = event.clipboardData.getData('text');\n\t\t\t\tif (!validateUrl(clipboardText))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// If we select nodes that are elements then avoid applying the link.\n\t\t\t\tif (!selection.getNodes().some((node) => $isElementNode(node)))\n\t\t\t\t{\n\t\t\t\t\t$toggleLink(clipboardText);\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tCOMMAND_PRIORITY_NORMAL,\n\t\t);\n\t}\n\n\t#insertLink(selection: RangeSelection, url: string, attributes?: LinkAttributes, originalUrl?: string): void\n\t{\n\t\tconst linkUrl = sanitizeUrl(url);\n\t\tconst linkNode = $createLinkNode(linkUrl, attributes);\n\t\tlinkNode.append($createTextNode(Type.isStringFilled(originalUrl) ? originalUrl : linkUrl));\n\n\t\tconst anchor = selection.anchor;\n\t\tif (anchor.type === 'text' && anchor.getNode().isSimpleText())\n\t\t{\n\t\t\tconst anchorNode = anchor.getNode();\n\t\t\tconst selectionOffset = anchor.offset;\n\n\t\t\tconst splitNodes = anchorNode.splitText(selectionOffset);\n\t\t\tif (selectionOffset === 0)\n\t\t\t{\n\t\t\t\t// eslint-disable-next-line @bitrix24/bitrix24-rules/no-native-dom-methods\n\t\t\t\tsplitNodes[0].insertBefore(linkNode);\n\t\t\t\tlinkNode.select();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tsplitNodes[0].insertAfter(linkNode);\n\t\t\t\tlinkNode.select();\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$insertNodes([linkNode]);\n\t\t\tif ($isRootOrShadowRoot(linkNode.getParentOrThrow()))\n\t\t\t{\n\t\t\t\t$wrapNodeInElement(linkNode, $createParagraphNode).selectEnd();\n\t\t\t}\n\t\t}\n\t}\n\n\t#isLinkSelected(selection: RangeSelection): boolean\n\t{\n\t\tconst node = getSelectedNode(selection);\n\t\tconst parent = node.getParent();\n\n\t\treturn $isLinkNode(parent) || $isLinkNode(node);\n\t}\n\n\t#convertAutoLinkToLink(selection: RangeSelection): boolean\n\t{\n\t\tif ($isRangeSelection(selection))\n\t\t{\n\t\t\tconst parent: AutoLinkNode = getSelectedNode(selection).getParent();\n\t\t\tif ($isAutoLinkNode(parent))\n\t\t\t{\n\t\t\t\tconst linkNode = $createLinkNode(\n\t\t\t\t\tparent.getURL(),\n\t\t\t\t\t{\n\t\t\t\t\t\trel: parent.getRel(),\n\t\t\t\t\t\ttarget: Type.isStringFilled(parent.getTarget()) ? parent.getTarget() : '_blank',\n\t\t\t\t\t\ttitle: parent.getTitle(),\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tparent.replace(linkNode, true);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('link', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --link-3\"></span>');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_LINK'));\n\t\t\tbutton.setBlockType('link');\n\t\t\tbutton.disableInsideUnformatted();\n\t\t\tbutton.setTooltip(\n\t\t\t\tLoc.getMessage('TEXT_EDITOR_BTN_LINK', { '#keystroke#': Browser.isMac() ? '⌘K' : 'Ctrl+K' }),\n\t\t\t);\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tif (this.#linkEditor !== null && this.#linkEditor.isShown())\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.getEditor().focus(() => {\n\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_LINK_DIALOG_COMMAND);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#linkEditor !== null)\n\t\t{\n\t\t\tthis.#linkEditor.destroy();\n\t\t}\n\t}\n}\n","import { Type } from 'main.core';\n\nimport {\n\tTextNode,\n\t$createTextNode,\n\t$isElementNode,\n\t$isLineBreakNode,\n\t$isTextNode,\n\ttype LexicalNode,\n\ttype ElementNode,\n} from 'ui.lexical.core';\n\nimport {\n\t$createAutoLinkNode,\n\t$isAutoLinkNode,\n\t$isLinkNode,\n\tAutoLinkNode,\n\ttype LinkAttributes,\n} from 'ui.lexical.link';\n\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nimport type { BBCodeExportConversion, BBCodeExportOutput } from '../../bbcode';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nconst URL_REGEX = (\n\t/((https?:\\/\\/(www\\.)?)|(www\\.))[\\w#%+.:=@~-]{1,256}\\.[\\d()A-Za-z]{1,6}\\b([\\w#%&()+./:=?@[\\]~-]*)(?<![%()+.:\\]-])/\n);\n\nconst EMAIL_REGEX = (\n\t/(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z-]+\\.)+[A-Za-z]{2,}))/\n);\n\nconst MATCHERS = [\n\tcreateLinkMatcherWithRegExp(URL_REGEX, (text: string) => {\n\t\treturn text.startsWith('http') ? text : `https://${text}`;\n\t}),\n\tcreateLinkMatcherWithRegExp(EMAIL_REGEX, (text: string) => {\n\t\treturn `mailto:${text}`;\n\t}),\n];\n\ntype ChangeHandler = (url: string | null, prevUrl: string | null) => void;\n\ntype LinkMatcherResult = {\n\tattributes?: LinkAttributes;\n\tindex: number;\n\tlength: number;\n\ttext: string;\n\turl: string;\n};\n\nexport type LinkMatcher = (text: string) => LinkMatcherResult | null;\n\nexport class AutoLinkPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerListeners();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'AutoLink';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [AutoLinkNode];\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tautolink: (): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'url' }),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: AutoLinkNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\tautolink: 'url',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tconst onChange = (url: string | null, prevUrl: string | null) => {};\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerNodeTransform(TextNode, (textNode: TextNode) => {\n\t\t\t\tconst parent = textNode.getParentOrThrow();\n\t\t\t\tconst previous = textNode.getPreviousSibling();\n\t\t\t\tif ($isAutoLinkNode(parent))\n\t\t\t\t{\n\t\t\t\t\thandleLinkEdit(parent, MATCHERS, onChange);\n\t\t\t\t}\n\t\t\t\telse if (!$isLinkNode(parent))\n\t\t\t\t{\n\t\t\t\t\tif (\n\t\t\t\t\t\ttextNode.isSimpleText()\n\t\t\t\t\t\t&& (startsWithSeparator(textNode.getTextContent()) || !$isAutoLinkNode(previous))\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\thandleLinkCreation(textNode, MATCHERS, onChange);\n\t\t\t\t\t}\n\n\t\t\t\t\thandleBadNeighbors(textNode, MATCHERS, onChange);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction createLinkMatcherWithRegExp(\n\tregExp: RegExp,\n\turlTransformer: (text: string) => string = (text) => text,\n): LinkMatcherResult\n{\n\treturn (text: string) => {\n\t\tconst match = regExp.exec(text);\n\t\tif (match === null)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tindex: match.index,\n\t\t\tlength: match[0].length,\n\t\t\ttext: match[0],\n\t\t\turl: urlTransformer(text),\n\t\t};\n\t};\n}\n\nfunction findFirstMatch(text: string, matchers: Array<LinkMatcher>): LinkMatcherResult | null\n{\n\tfor (const matcher of matchers)\n\t{\n\t\tconst match = matcher(text);\n\t\tif (match)\n\t\t{\n\t\t\treturn match;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nconst PUNCTUATION_OR_SPACE = /[\\s(),.;[\\]]/;\n\nfunction isSeparator(char: string): boolean\n{\n\treturn PUNCTUATION_OR_SPACE.test(char);\n}\n\nfunction endsWithSeparator(textContent: string): boolean\n{\n\treturn isSeparator(textContent[textContent.length - 1]);\n}\n\nfunction startsWithSeparator(textContent: string): boolean\n{\n\treturn isSeparator(textContent[0]);\n}\n\nfunction startsWithFullStop(textContent: string): boolean\n{\n\treturn /^\\.[\\dA-Za-z]+/.test(textContent);\n}\n\nfunction isPreviousNodeValid(node: LexicalNode): boolean\n{\n\tlet previousNode = node.getPreviousSibling();\n\tif ($isElementNode(previousNode))\n\t{\n\t\tpreviousNode = previousNode.getLastDescendant();\n\t}\n\n\treturn (\n\t\tpreviousNode === null\n\t\t|| $isLineBreakNode(previousNode)\n\t\t|| ($isTextNode(previousNode) && endsWithSeparator(previousNode.getTextContent()))\n\t);\n}\n\nfunction isNextNodeValid(node: LexicalNode): boolean\n{\n\tlet nextNode = node.getNextSibling();\n\tif ($isElementNode(nextNode))\n\t{\n\t\tnextNode = nextNode.getFirstDescendant();\n\t}\n\n\treturn (\n\t\tnextNode === null\n\t\t|| $isLineBreakNode(nextNode)\n\t\t|| ($isTextNode(nextNode) && startsWithSeparator(nextNode.getTextContent()))\n\t);\n}\n\nfunction isContentAroundIsValid(matchStart: number, matchEnd: number, text: string, node: TextNode): boolean\n{\n\tconst contentBeforeIsValid = matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(node);\n\tif (!contentBeforeIsValid)\n\t{\n\t\treturn false;\n\t}\n\n\t// contentAfterIsValid\n\treturn matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(node);\n}\n\nfunction handleLinkCreation(node: TextNode, matchers: Array<LinkMatcher>, onChange: ChangeHandler): void\n{\n\tconst nodeText = node.getTextContent();\n\tlet text = nodeText;\n\tlet invalidMatchEnd = 0;\n\tlet remainingTextNode = node;\n\tlet match: LinkMatcherResult | null = findFirstMatch(text, matchers);\n\twhile (match !== null)\n\t{\n\t\tconst matchStart = match.index;\n\t\tconst matchLength = match.length;\n\t\tconst matchEnd = matchStart + matchLength;\n\t\tconst isValid = isContentAroundIsValid(\n\t\t\tinvalidMatchEnd + matchStart,\n\t\t\tinvalidMatchEnd + matchEnd,\n\t\t\tnodeText,\n\t\t\tnode,\n\t\t);\n\n\t\tif (isValid)\n\t\t{\n\t\t\tlet linkTextNode = null;\n\t\t\tif (invalidMatchEnd + matchStart === 0)\n\t\t\t{\n\t\t\t\t[linkTextNode, remainingTextNode] = remainingTextNode.splitText(\n\t\t\t\t\tinvalidMatchEnd + matchLength,\n\t\t\t\t);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t[, linkTextNode, remainingTextNode] = remainingTextNode.splitText(\n\t\t\t\t\tinvalidMatchEnd + matchStart,\n\t\t\t\t\tinvalidMatchEnd + matchStart + matchLength,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst attributes = Type.isPlainObject(match.attributes) ? { ...match.attributes } : {};\n\t\t\tif (!Type.isStringFilled(attributes.target))\n\t\t\t{\n\t\t\t\tattributes.target = '_blank';\n\t\t\t}\n\n\t\t\tconst linkNode = $createAutoLinkNode(match.url, attributes);\n\t\t\tconst textNode = $createTextNode(match.text);\n\t\t\ttextNode.setFormat(linkTextNode.getFormat());\n\t\t\ttextNode.setDetail(linkTextNode.getDetail());\n\t\t\tlinkNode.append(textNode);\n\t\t\tlinkTextNode.replace(linkNode);\n\t\t\tonChange(match.url, null);\n\t\t\tinvalidMatchEnd = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tinvalidMatchEnd += matchEnd;\n\t\t}\n\n\t\ttext = text.slice(Math.max(0, matchEnd));\n\t\tmatch = findFirstMatch(text, matchers);\n\t}\n}\n\nfunction handleLinkEdit(linkNode: AutoLinkNode, matchers: Array<LinkMatcher>, onChange: ChangeHandler): void\n{\n\t// Check children are simple text\n\tconst children = linkNode.getChildren();\n\tconst childrenLength = children.length;\n\tfor (let i = 0; i < childrenLength; i++)\n\t{\n\t\tconst child = children[i];\n\t\tif (!$isTextNode(child) || !child.isSimpleText())\n\t\t{\n\t\t\treplaceWithChildren(linkNode);\n\t\t\tonChange(null, linkNode.getURL());\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Check text content fully matches\n\tconst text = linkNode.getTextContent();\n\tconst match = findFirstMatch(text, matchers);\n\tif (match === null || match.text !== text)\n\t{\n\t\treplaceWithChildren(linkNode);\n\t\tonChange(null, linkNode.getURL());\n\n\t\treturn;\n\t}\n\n\t// Check neighbors\n\tif (!isPreviousNodeValid(linkNode) || !isNextNodeValid(linkNode))\n\t{\n\t\treplaceWithChildren(linkNode);\n\t\tonChange(null, linkNode.getURL());\n\n\t\treturn;\n\t}\n\n\tconst url = linkNode.getURL();\n\tif (url !== match.url)\n\t{\n\t\tlinkNode.setURL(match.url);\n\t\tonChange(match.url, url);\n\t}\n\n\tif (match.attributes)\n\t{\n\t\tconst rel = linkNode.getRel();\n\t\tif (rel !== match.attributes.rel)\n\t\t{\n\t\t\tlinkNode.setRel(match.attributes.rel || null);\n\t\t\tonChange(match.attributes.rel || null, rel);\n\t\t}\n\n\t\tconst target = linkNode.getTarget();\n\t\tif (target !== match.attributes.target)\n\t\t{\n\t\t\tlinkNode.setTarget(match.attributes.target || null);\n\t\t\tonChange(match.attributes.target || null, target);\n\t\t}\n\t}\n}\n\n// Bad neighbours are edits in neighbor nodes that make AutoLinks incompatible.\n// Given the creation preconditions, these can only be simple text nodes.\nfunction handleBadNeighbors(textNode: TextNode, matchers: Array<LinkMatcher>, onChange: ChangeHandler): void\n{\n\tconst previousSibling = textNode.getPreviousSibling();\n\tconst nextSibling = textNode.getNextSibling();\n\tconst text = textNode.getTextContent();\n\n\tif ($isAutoLinkNode(previousSibling) && (!startsWithSeparator(text) || startsWithFullStop(text)))\n\t{\n\t\tpreviousSibling.append(textNode);\n\t\thandleLinkEdit(previousSibling, matchers, onChange);\n\t\tonChange(null, previousSibling.getURL());\n\t}\n\n\tif ($isAutoLinkNode(nextSibling) && !endsWithSeparator(text))\n\t{\n\t\treplaceWithChildren(nextSibling);\n\t\thandleLinkEdit(nextSibling, matchers, onChange);\n\t\tonChange(null, nextSibling.getURL());\n\t}\n}\n\nfunction replaceWithChildren(node: ElementNode): Array<LexicalNode>\n{\n\tconst children = node.getChildren();\n\tconst childrenLength = children.length;\n\n\tfor (let j = childrenLength - 1; j >= 0; j--)\n\t{\n\t\tnode.insertAfter(children[j]);\n\t}\n\n\tnode.remove();\n\n\treturn children.map((child) => child.getLatest());\n}\n","import {\n\tKEY_TAB_COMMAND,\n\tINDENT_CONTENT_COMMAND,\n\tOUTDENT_CONTENT_COMMAND,\n\tCOMMAND_PRIORITY_EDITOR,\n\tCOMMAND_PRIORITY_LOW,\n\t$getSelection,\n\t$isElementNode,\n\t$isRangeSelection,\n\ttype RangeSelection,\n\ttype ElementNode,\n} from 'ui.lexical.core';\n\nimport { $findMatchingParent } from 'ui.lexical.utils';\nimport { $isListItemNode } from 'ui.lexical.list';\n\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nexport class TabIndentPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerListeners();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'TabIndent';\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tKEY_TAB_COMMAND,\n\t\t\t\t(event): boolean => {\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this.getEditor().dispatchCommand(\n\t\t\t\t\t\tevent.shiftKey ? OUTDENT_CONTENT_COMMAND : INDENT_CONTENT_COMMAND,\n\t\t\t\t\t\t{ event, triggerByTab: true },\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\n\t\t\t// Turn off RichText built-in indents\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINDENT_CONTENT_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tconst selection = $getSelection();\n\n\t\t\t\t\treturn !$isSelectionInList(selection);\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tOUTDENT_CONTENT_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tconst selection = $getSelection();\n\n\t\t\t\t\treturn !$isSelectionInList(selection);\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n}\n\nfunction $isSelectionInList(selection: null | RangeSelection): boolean\n{\n\tif (!$isRangeSelection(selection))\n\t{\n\t\treturn false;\n\t}\n\n\tconst isBackward: boolean = selection.isBackward();\n\tconst firstPoint = isBackward ? selection.focus : selection.anchor;\n\tconst firstNode = firstPoint.getNode();\n\n\tif ($isListItemNode(firstNode) && firstPoint.offset === 0)\n\t{\n\t\treturn true;\n\t}\n\n\tconst parentNode = $findMatchingParent(\n\t\tfirstNode,\n\t\t(node: ElementNode) => $isElementNode(node) && !node.isInline(),\n\t);\n\n\treturn $isListItemNode(parentNode) && firstPoint.offset === 0;\n}\n","import { Loc } from 'main.core';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\nimport { $findMatchingParent } from 'ui.lexical.utils';\n\nimport Button from '../../toolbar/button';\nimport BasePlugin from '../base-plugin';\n\nimport {\n\tCOMMAND_PRIORITY_LOW,\n\tINSERT_PARAGRAPH_COMMAND,\n\tINDENT_CONTENT_COMMAND,\n\tCOMMAND_PRIORITY_CRITICAL,\n\t$getSelection,\n\t$isRangeSelection,\n\t$isElementNode,\n\ttype RangeSelection,\n\ttype ElementNode,\n\ttype LexicalNode,\n} from 'ui.lexical.core';\n\nimport {\n\tINSERT_ORDERED_LIST_COMMAND,\n\tINSERT_UNORDERED_LIST_COMMAND,\n\tREMOVE_LIST_COMMAND,\n\tinsertList,\n\tremoveList,\n\t$handleListInsertParagraph,\n\t$isListItemNode,\n\t$isListNode,\n\t$getListDepth,\n\t$createListItemNode,\n\t$createListNode,\n\tListNode,\n\tListItemNode,\n} from 'ui.lexical.list';\n\nimport { type TextEditor } from '../../text-editor';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\nimport type {\n\tBBCodeConversion,\n\tBBCodeImportConversion,\n\tBBCodeConversionFn,\n\tBBCodeExportOutput,\n\tBBCodeExportConversion,\n} from '../../bbcode';\n\nexport class ListPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerListeners();\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'List';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [ListNode, ListItemNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\tlist: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: node.getValue() === '1' ? $createListNode('number', 1) : $createListNode('bullet'),\n\t\t\t\t\t\t// after: (childLexicalNodes: Array<LexicalNode>): Array<LexicalNode> => {\n\t\t\t\t\t\t// \tconst normalizedListItems: Array<ListItemNode> = [];\n\t\t\t\t\t\t// \tfor (const node of childLexicalNodes)\n\t\t\t\t\t\t// \t{\n\t\t\t\t\t\t// \t\tif ($isListItemNode(node))\n\t\t\t\t\t\t// \t\t{\n\t\t\t\t\t\t// \t\t\tnormalizedListItems.push(node);\n\t\t\t\t\t\t// \t\t\tconst children = node.getChildren();\n\t\t\t\t\t\t// \t\t\tif (children.length > 1)\n\t\t\t\t\t\t// \t\t\t{\n\t\t\t\t\t\t// \t\t\t\tchildren.forEach((child) => {\n\t\t\t\t\t\t// \t\t\t\t\tif ($isListNode(child))\n\t\t\t\t\t\t// \t\t\t\t\t{\n\t\t\t\t\t\t// \t\t\t\t\t\tnormalizedListItems.push(this.#wrapInListItem(child));\n\t\t\t\t\t\t// \t\t\t\t\t}\n\t\t\t\t\t\t// \t\t\t\t});\n\t\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t\t// \t\t}\n\t\t\t\t\t\t// \t\telse\n\t\t\t\t\t\t// \t\t{\n\t\t\t\t\t\t// \t\t\tnormalizedListItems.push(this.#wrapInListItem(node));\n\t\t\t\t\t\t// \t\t}\n\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// \treturn normalizedListItems;\n\t\t\t\t\t\t// },\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\t'*': (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createListItemNode(),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\tlist: (lexicalNode: ListNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\t\t\t\tconst node = scheme.createElement({ name: 'list' });\n\t\t\t\tif (lexicalNode.getListType() === 'number')\n\t\t\t\t{\n\t\t\t\t\tnode.setValue('1');\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tnode,\n\t\t\t\t};\n\t\t\t},\n\t\t\tlistitem: (lexicalNode: LexicalNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: '*' }),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [{\n\t\t\t\tnodeClass: ListNode,\n\t\t\t}],\n\t\t\tbbcodeMap: {\n\t\t\t\tlist: 'list',\n\t\t\t\tlistitem: '*',\n\t\t\t},\n\t\t};\n\t}\n\n\t// static #wrapInListItem(node: LexicalNode): ListItemNode\n\t// {\n\t// \tconst listItemWrapper = $createListItemNode();\n\t//\n\t// \treturn listItemWrapper.append(node);\n\t// }\n\n\t#registerListeners(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_ORDERED_LIST_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tinsertList(this.getLexicalEditor(), 'number');\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_UNORDERED_LIST_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tinsertList(this.getLexicalEditor(), 'bullet');\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tREMOVE_LIST_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tremoveList(this.getLexicalEditor());\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_PARAGRAPH_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn $handleListInsertParagraph();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINDENT_CONTENT_COMMAND,\n\t\t\t\t() => !this.#isIndentPermitted(1),\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('bulleted-list', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --bulleted-list\"></span>');\n\t\t\tbutton.setBlockType('bullet');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_BULLETED_LIST'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tif (button.isActive())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(REMOVE_LIST_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_UNORDERED_LIST_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\n\t\tthis.getEditor().getComponentRegistry().register('numbered-list', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --numbered-list\"></span>');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_NUMBERED_LIST'));\n\t\t\tbutton.setBlockType('number');\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\t\t\t\tthis.getEditor().update((): void => {\n\t\t\t\t\tif (button.isActive())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(REMOVE_LIST_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_ORDERED_LIST_COMMAND);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\t#isIndentPermitted(maxDepth: number): boolean\n\t{\n\t\tconst selection: RangeSelection = $getSelection();\n\t\tif (!$isRangeSelection(selection))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst elementNodesInSelection: Set<ElementNode> = this.#getElementNodesInSelection(selection);\n\t\tlet totalDepth = 0;\n\t\tfor (const elementNode of elementNodesInSelection)\n\t\t{\n\t\t\tif ($isListNode(elementNode))\n\t\t\t{\n\t\t\t\ttotalDepth = Math.max($getListDepth(elementNode) + 1, totalDepth);\n\t\t\t}\n\t\t\telse if ($isListItemNode(elementNode))\n\t\t\t{\n\t\t\t\tconst parent = elementNode.getParent();\n\t\t\t\tif (!$isListNode(parent))\n\t\t\t\t{\n\t\t\t\t\tthrow new Error('TextEditor: A ListItemNode must have a ListNode for a parent.');\n\t\t\t\t}\n\n\t\t\t\ttotalDepth = Math.max($getListDepth(parent) + 1, totalDepth);\n\t\t\t}\n\t\t}\n\n\t\treturn totalDepth <= maxDepth;\n\t}\n\n\t#getElementNodesInSelection(selection: RangeSelection): Set<ElementNode>\n\t{\n\t\tconst nodesInSelection = selection.getNodes();\n\t\tconst predicate = (node: ElementNode) => $isElementNode(node) && !node.isInline();\n\n\t\tif (nodesInSelection.length === 0)\n\t\t{\n\t\t\treturn new Set([\n\t\t\t\t$findMatchingParent(selection.anchor.getNode(), predicate),\n\t\t\t\t$findMatchingParent(selection.focus.getNode(), predicate),\n\t\t\t]);\n\t\t}\n\n\t\treturn new Set(\n\t\t\tnodesInSelection.map((n) => ($isElementNode(n) ? n : $findMatchingParent(n, predicate))),\n\t\t);\n\t}\n}\n","import { Dom, Tag, Type } from 'main.core';\nimport { type BaseCache, MemoryCache } from 'main.core.cache';\nimport { type BaseEvent, EventEmitter } from 'main.core.events';\nimport { Popup } from 'main.popup';\nimport './table-dialog.css';\n\nexport type TableDialogOptions = {\n\ttargetNode?: HTMLElement,\n\tevents?: Object<string, (event: BaseEvent) => {}>,\n}\n\nexport default class TableDialog extends EventEmitter\n{\n\t#popup: Popup = null;\n\t#targetNode: HTMLElement = null;\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\t#lastSelectedBox: HTMLElement = null;\n\n\tconstructor(dialogOptions)\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.TableDialog');\n\n\t\tconst options: TableDialogOptions = Type.isPlainObject(dialogOptions) ? dialogOptions : {};\n\n\t\tthis.setTargetNode(options.targetNode);\n\t\tthis.subscribeFromOptions(options.events);\n\t}\n\n\tshow(): void\n\t{\n\t\tthis.getPopup().adjustPosition({ forceBindPosition: true });\n\t\tthis.getPopup().show();\n\t}\n\n\thide(): void\n\t{\n\t\tthis.getPopup().close();\n\t}\n\n\tisShown(): boolean\n\t{\n\t\treturn this.#popup !== null && this.#popup.isShown();\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.getPopup().destroy();\n\t}\n\n\tsetTargetNode(container: HTMLElement): void\n\t{\n\t\tif (Type.isElementNode(container))\n\t\t{\n\t\t\tthis.#targetNode = container;\n\t\t}\n\t}\n\n\tgetTargetNode(): HTMLElement | null\n\t{\n\t\treturn this.#targetNode;\n\t}\n\n\tgetPopup(): Popup\n\t{\n\t\tif (this.#popup === null)\n\t\t{\n\t\t\tconst targetNode = this.getTargetNode();\n\t\t\tconst rect = targetNode.getBoundingClientRect();\n\t\t\tconst targetNodeWidth = rect.width;\n\n\t\t\tthis.#popup = new Popup({\n\t\t\t\tautoHide: true,\n\t\t\t\tcloseByEsc: true,\n\t\t\t\tpadding: 0,\n\t\t\t\tcontent: Tag.render`\n\t\t\t\t\t<div class=\"ui-text-editor-table-dialog\" onclick=\"${this.#handleClick.bind(this)}\">\n\t\t\t\t\t\t${this.getGridContainer()}\n\t\t\t\t\t\t${this.getCaptionContainer()}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t\tbindElement: this.getTargetNode(),\n\t\t\t\tevents: {\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tthis.emit('onClose');\n\t\t\t\t\t},\n\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\tthis.emit('onDestroy');\n\t\t\t\t\t},\n\t\t\t\t\tonShow: (event) => {\n\t\t\t\t\t\tconst popup = event.getTarget();\n\t\t\t\t\t\tconst popupWidth = popup.getPopupContainer().offsetWidth;\n\t\t\t\t\t\tconst offsetLeft = (targetNodeWidth / 2) - (popupWidth / 2);\n\t\t\t\t\t\tconst angleShift = Popup.getOption('angleLeftOffset') - Popup.getOption('angleMinTop');\n\n\t\t\t\t\t\tpopup.setAngle({ offset: popupWidth / 2 - angleShift });\n\t\t\t\t\t\tpopup.setOffset({ offsetLeft: offsetLeft + Popup.getOption('angleLeftOffset') });\n\n\t\t\t\t\t\tthis.#lastSelectedBox = null;\n\t\t\t\t\t\tthis.#highlightBoxes(1, 1);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn this.#popup;\n\t}\n\n\tgetGridContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('grid', () => {\n\t\t\tconst buttons = [];\n\t\t\tfor (let index = 0; index < 100; index++)\n\t\t\t{\n\t\t\t\tconst row = Math.floor(index / 10);\n\t\t\t\tconst column = index % 10;\n\n\t\t\t\tbuttons.push(Tag.render`\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"ui-text-editor-table-dialog-box\"\n\t\t\t\t\t\tdata-column=\"${column + 1}\"\n\t\t\t\t\t\tdata-row=\"${row + 1}\"\n\t\t\t\t\t></button>\n\t\t\t\t`);\n\t\t\t}\n\n\t\t\treturn Tag.render`\n\t\t\t\t<div \n\t\t\t\t\tclass=\"ui-text-editor-table-dialog-grid\" \n\t\t\t\t\tonmousemove=\"${this.#handleMouseMove.bind(this)}\"\n\t\t\t\t>${buttons}</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetCaptionContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('caption', () => {\n\t\t\treturn Tag.render`<div class=\"ui-text-editor-table-dialog-caption\"></div>`;\n\t\t});\n\t}\n\n\t#handleMouseMove(event: MouseEvent)\n\t{\n\t\tif (this.#lastSelectedBox !== event.target && Dom.hasClass(event.target, 'ui-text-editor-table-dialog-box'))\n\t\t{\n\t\t\tconst { row, column } = event.target.dataset;\n\t\t\tthis.#highlightBoxes(row, column);\n\t\t\tthis.#lastSelectedBox = event.target;\n\t\t}\n\t}\n\n\t#handleClick(event: MouseEvent)\n\t{\n\t\tif (this.#lastSelectedBox)\n\t\t{\n\t\t\tconst { row, column } = this.#lastSelectedBox.dataset;\n\t\t\tthis.emit('onSelect', { rows: row, columns: column });\n\t\t}\n\t}\n\n\t#highlightBoxes(rows: number, columns: number)\n\t{\n\t\tlet index = 0;\n\t\tfor (const box of this.getGridContainer().children)\n\t\t{\n\t\t\tconst boxRow = Math.floor(index / 10);\n\t\t\tconst boxColumn = index % 10;\n\t\t\tconst selected = boxRow < rows && boxColumn < columns;\n\t\t\tif (selected)\n\t\t\t{\n\t\t\t\tDom.addClass(box, '--selected');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(box, '--selected');\n\t\t\t}\n\n\t\t\tindex++;\n\t\t}\n\n\t\tthis.getCaptionContainer().textContent = rows && columns ? `${rows} x ${columns}` : '';\n\t}\n}\n","/* eslint-disable @bitrix24/bitrix24-rules/no-native-dom-methods */\nimport { Type, Text, Loc } from 'main.core';\nimport type { BaseEvent } from 'main.core.events';\nimport type { BBCodeElementNode } from 'ui.bbcode.model';\nimport {\n\t$normalizeTextNodes,\n\tshouldWrapInParagraph,\n\ttype BBCodeExportConversion,\n\ttype BBCodeConversion,\n\ttype BBCodeConversionFn,\n\ttype BBCodeExportOutput,\n\ttype BBCodeImportConversion,\n} from '../../bbcode';\n\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport BasePlugin from '../base-plugin';\nimport Button from '../../toolbar/button';\n\nimport {\n\t$isTextNode,\n\tcreateCommand,\n\t$getNodeByKey,\n\t$createParagraphNode,\n\tCOMMAND_PRIORITY_LOW,\n\tCOMMAND_PRIORITY_EDITOR,\n\ttype NodeKey,\n\ttype LexicalCommand,\n\ttype LexicalNode,\n\ttype ElementNode,\n} from 'ui.lexical.core';\n\nimport {\n\tTableNode,\n\tTableCellNode,\n\tTableRowNode,\n\t$isTableNode,\n\t$createTableNode,\n\t$createTableCellNode,\n\t$createTableRowNode,\n\t$createTableNodeWithDimensions,\n\tapplyTableHandlers,\n\tTableCellHeaderStates,\n\tINSERT_TABLE_COMMAND,\n\tTableSelection,\n} from 'ui.lexical.table';\n\nimport { $insertNodeToNearestRoot } from 'ui.lexical.utils';\n\nimport { type TextEditor } from '../../text-editor';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nimport TableDialog from './table-dialog';\n\nexport const INSERT_TABLE_DIALOG_COMMAND: LexicalCommand = createCommand('INSERT_TABLE_DIALOG_COMMAND');\n\nexport class TablePlugin extends BasePlugin\n{\n\t#tableDialog: TableDialog = null;\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerCommands();\n\t\tthis.#registerListeners();\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Table';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [\n\t\t\tTableNode,\n\t\t\tTableCellNode,\n\t\t\tTableRowNode,\n\t\t];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn {\n\t\t\ttable: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createTableNode(),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\ttr: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createTableRowNode(),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\ttd: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createTableCellNode(),\n\t\t\t\t\t\tafter: (childLexicalNodes: Array<LexicalNode>): Array<LexicalNode> => {\n\t\t\t\t\t\t\treturn $normalizeTextNodes(childLexicalNodes);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t\tth: (): BBCodeConversion => ({\n\t\t\t\tconversion: (node: BBCodeElementNode): BBCodeConversionFn | null => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: $createTableCellNode(TableCellHeaderStates.ROW),\n\t\t\t\t\t\tafter: (childLexicalNodes: Array<LexicalNode>): Array<LexicalNode> => {\n\t\t\t\t\t\t\treturn $normalizeTextNodes(childLexicalNodes);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tpriority: 0,\n\t\t\t}),\n\t\t};\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\ttable: (): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'table' }),\n\t\t\t\t};\n\t\t\t},\n\t\t\ttablerow: (): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: 'tr' }),\n\t\t\t\t};\n\t\t\t},\n\t\t\ttablecell: (node: TableCellNode): BBCodeExportOutput => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createElement({ name: node.hasHeader() ? 'th' : 'td' }),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tnodes: [\n\t\t\t\t{\n\t\t\t\t\tnodeClass: TableNode,\n\t\t\t\t\tvalidate: ((tableNode: TableNode) => {\n\t\t\t\t\t\tif (tableNode.getChildrenSize() === 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttableNode.remove();\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnodeClass: TableCellNode,\n\t\t\t\t\tvalidate: ((tableCellNode: TableCellNode) => {\n\t\t\t\t\t\ttableCellNode.getChildren().forEach((child: LexicalNode | ElementNode) => {\n\t\t\t\t\t\t\tif (shouldWrapInParagraph(child))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst paragraph = $createParagraphNode();\n\t\t\t\t\t\t\t\tchild.replace(paragraph);\n\t\t\t\t\t\t\t\tparagraph.append(child);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t],\n\t\t\tbbcodeMap: {\n\t\t\t\ttable: 'table',\n\t\t\t\ttablerow: 'tr',\n\t\t\t\ttablecell: 'td',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('table', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --table-editor\"></span>');\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_TABLE'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().dispatchCommand(INSERT_TABLE_DIALOG_COMMAND, {\n\t\t\t\t\ttargetNode: button.getContainer(),\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_TABLE_COMMAND,\n\t\t\t\t({ columns, rows }) => {\n\t\t\t\t\tconst rowCount = Math.max(1, Text.toNumber(rows));\n\t\t\t\t\tconst columnCount = Math.max(1, Text.toNumber(columns));\n\t\t\t\t\tconst tableNode = $createTableNodeWithDimensions(rowCount, columnCount, false);\n\t\t\t\t\t$insertNodeToNearestRoot(tableNode);\n\n\t\t\t\t\tconst firstDescendant: LexicalNode = tableNode.getFirstDescendant();\n\t\t\t\t\tif ($isTextNode(firstDescendant))\n\t\t\t\t\t{\n\t\t\t\t\t\tfirstDescendant.select();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_TABLE_DIALOG_COMMAND,\n\t\t\t\t(payload): boolean => {\n\t\t\t\t\tif (!Type.isPlainObject(payload) || !Type.isElementNode(payload.targetNode))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.#tableDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.#tableDialog.getTargetNode() === payload.targetNode)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.#tableDialog.show();\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.#tableDialog.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#tableDialog = new TableDialog({\n\t\t\t\t\t\ttargetNode: payload.targetNode,\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tonSelect: (event: BaseEvent) => {\n\t\t\t\t\t\t\t\tthis.getEditor().dispatchCommand(INSERT_TABLE_COMMAND, event.getData());\n\t\t\t\t\t\t\t\tthis.#tableDialog.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonDestroy: () => {\n\t\t\t\t\t\t\t\tthis.#tableDialog = null;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.#tableDialog.show();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (this.#tableDialog !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#tableDialog.hide();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDIALOG_VISIBILITY_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn this.#tableDialog !== null && this.#tableDialog.isShown();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tconst tableSelections: Map<NodeKey, TableSelection> = new Map();\n\t\tconst initializeTableNode = (tableNode: TableNode) => {\n\t\t\tconst nodeKey = tableNode.getKey();\n\t\t\tconst tableElement = this.getEditor().getElementByKey(nodeKey);\n\t\t\tif (tableElement && !tableSelections.has(nodeKey))\n\t\t\t{\n\t\t\t\tconst tableSelection = applyTableHandlers(\n\t\t\t\t\ttableNode,\n\t\t\t\t\ttableElement,\n\t\t\t\t\tthis.getLexicalEditor(),\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\n\t\t\t\ttableSelections.set(nodeKey, tableSelection);\n\t\t\t}\n\t\t};\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerMutationListener(\n\t\t\t\tTableNode,\n\t\t\t\t(nodeMutations) => {\n\t\t\t\t\tfor (const [nodeKey, mutation] of nodeMutations)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (mutation === 'created')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.getEditor().getEditorState().read(() => {\n\t\t\t\t\t\t\t\tconst tableNode = $getNodeByKey(nodeKey);\n\t\t\t\t\t\t\t\tif ($isTableNode(tableNode))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinitializeTableNode(tableNode);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (mutation === 'destroyed')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst tableSelection = tableSelections.get(nodeKey);\n\t\t\t\t\t\t\tif (tableSelection !== undefined)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttableSelection.removeListeners();\n\t\t\t\t\t\t\t\ttableSelections.delete(nodeKey);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#tableDialog !== null)\n\t\t{\n\t\t\tthis.#tableDialog.destroy();\n\t\t}\n\t}\n}\n","/* eslint-disable no-underscore-dangle */\nimport { Dom, Type } from 'main.core';\n\nimport {\n\tTextNode,\n\t$applyNodeReplacement,\n\ttype EditorConfig,\n\ttype LexicalNode,\n\ttype NodeKey,\n\ttype SerializedTextNode,\n} from 'ui.lexical.core';\n\nexport class HashtagNode extends TextNode\n{\n\tstatic getType(): string\n\t{\n\t\treturn 'hashtag';\n\t}\n\n\tstatic clone(node: HashtagNode): HashtagNode\n\t{\n\t\treturn new HashtagNode(node.__text, node.__key);\n\t}\n\n\tconstructor(text: string, key?: NodeKey)\n\t{\n\t\tsuper(text, key);\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement\n\t{\n\t\tconst element = super.createDOM(config);\n\t\tif (Type.isStringFilled(config?.theme?.hashtag))\n\t\t{\n\t\t\tDom.addClass(element, config.theme.hashtag);\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tstatic importJSON(serializedNode: SerializedTextNode): HashtagNode\n\t{\n\t\tconst node = $createHashtagNode(serializedNode.text);\n\t\tnode.setFormat(serializedNode.format);\n\t\tnode.setDetail(serializedNode.detail);\n\t\tnode.setMode(serializedNode.mode);\n\t\tnode.setStyle(serializedNode.style);\n\n\t\treturn node;\n\t}\n\n\texportJSON(): SerializedTextNode\n\t{\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: 'hashtag',\n\t\t};\n\t}\n\n\tcanInsertTextBefore(): boolean\n\t{\n\t\treturn false;\n\t}\n\n\tisTextEntity(): true\n\t{\n\t\treturn true;\n\t}\n}\n\nexport function $createHashtagNode(text = ''): HashtagNode\n{\n\treturn $applyNodeReplacement(new HashtagNode(text));\n}\n\nexport function $isHashtagNode(node: LexicalNode | null | undefined): boolean\n{\n\treturn node instanceof HashtagNode;\n}\n","import type { LexicalNode, TextNode } from 'ui.lexical.core';\nimport {\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportConversion,\n} from '../../bbcode';\n\nimport { registerLexicalTextEntity } from 'ui.lexical.text';\n\nimport { HashtagNode, $createHashtagNode } from './hashtag-node';\nimport BasePlugin from '../base-plugin';\n\nimport { type TextEditor } from '../../text-editor';\nimport type { SchemeValidationOptions } from '../../types/scheme-validation-options';\n\nexport class HashtagPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#registerListeners();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Hashtag';\n\t}\n\n\tstatic getNodes(editor: TextEditor): Array<Class<LexicalNode>>\n\t{\n\t\treturn [HashtagNode];\n\t}\n\n\timportBBCode(): BBCodeImportConversion\n\t{\n\t\treturn null;\n\t}\n\n\texportBBCode(): BBCodeExportConversion\n\t{\n\t\treturn {\n\t\t\thashtag: (lexicalNode: TextNode, node: Node): Node | null => {\n\t\t\t\tconst scheme = this.getEditor().getBBCodeScheme();\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: scheme.createText(lexicalNode.getTextContent()),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\tvalidateScheme(): SchemeValidationOptions | null\n\t{\n\t\treturn {\n\t\t\tbbcodeMap: {\n\t\t\t\thashtag: '#text',\n\t\t\t},\n\t\t};\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tconst createHashtagNode = (textNode: TextNode): HashtagNode => {\n\t\t\treturn $createHashtagNode(textNode.getTextContent());\n\t\t};\n\n\t\tconst getHashtagMatch = (text: string) => {\n\t\t\tconst match: RegExpMatchArray = /(?<=\\s+|^)#([^\\s,.<>[\\]]+)/is.exec(text);\n\t\t\tif (match === null)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst hashtagLength = match[0].length;\n\t\t\tconst startOffset = match.index;\n\t\t\tconst endOffset = startOffset + hashtagLength;\n\n\t\t\treturn {\n\t\t\t\tend: endOffset,\n\t\t\t\tstart: startOffset,\n\t\t\t};\n\t\t};\n\n\t\tthis.cleanUpRegister(\n\t\t\t...registerLexicalTextEntity(\n\t\t\t\tthis.getLexicalEditor(),\n\t\t\t\tgetHashtagMatch,\n\t\t\t\tHashtagNode,\n\t\t\t\tcreateHashtagNode,\n\t\t\t),\n\t\t);\n\t}\n}\n","import { Type } from 'main.core';\nimport { $createLineBreakNode, $createTabNode, $createTextNode, type TextNode } from 'ui.lexical.core';\n\nexport function $createNodesFromText(text: string): TextNode[]\n{\n\tif (!Type.isStringFilled(text))\n\t{\n\t\treturn [];\n\t}\n\n\tconst nodes = [];\n\tconst parts = text.split(/(\\r?\\n|\\t)/);\n\tconst length = parts.length;\n\tfor (let i = 0; i < length; i++)\n\t{\n\t\tconst part = parts[i];\n\t\tif (part === '\\n' || part === '\\r\\n')\n\t\t{\n\t\t\tnodes.push($createLineBreakNode());\n\t\t}\n\t\telse if (part === '\\t')\n\t\t{\n\t\t\tnodes.push($createTabNode());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tnodes.push($createTextNode(part));\n\t\t}\n\t}\n\n\treturn nodes;\n}\n","import { Runtime, Type, Dom, Tag, Loc, Event } from 'main.core';\nimport type { BaseEvent } from 'main.core.events';\nimport type { Copilot, CopilotOptions } from 'ai.copilot';\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport { $createNodesFromText } from '../../helpers/create-nodes-from-text';\nimport { $getSelectionPosition } from '../../helpers/get-selection-position';\n\nimport {\n\t$getSelection,\n\t$isRangeSelection,\n\t$isRootNode,\n\t$isTextNode,\n\tcreateCommand,\n\t$getRoot,\n\t$setSelection,\n\t$isParagraphNode,\n\t$createParagraphNode,\n\tCOMMAND_PRIORITY_EDITOR,\n\tCOMMAND_PRIORITY_LOW,\n\ttype LexicalCommand,\n\ttype PointType,\n\ttype TextNode,\n\ttype ElementNode,\n\ttype RangeSelection,\n} from 'ui.lexical.core';\n\nimport Button from '../../toolbar/button';\nimport BasePlugin from '../base-plugin';\n\nimport { type TextEditor } from '../../text-editor';\n\nimport './copilot.css';\nimport { CustomParagraphNode } from '../paragraph/custom-paragraph-node';\n\nexport const INSERT_COPILOT_DIALOG_COMMAND: LexicalCommand = createCommand('INSERT_COPILOT_DIALOG_COMMAND');\n\nconst CopilotStatus = {\n\tINIT: 'init',\n\tLOADING: 'loading',\n\tLOADED: 'loaded',\n};\n\nexport class CopilotPlugin extends BasePlugin\n{\n\t#copilot: Copilot = null;\n\t#copilotStatus: boolean = CopilotStatus.INIT;\n\t#copilotOptions: CopilotOptions = null;\n\t#targetParagraph: HTMLParagraphElement = null;\n\t#lastSelection: RangeSelection = null;\n\t#onEditorScroll: Function = this.#handleEditorScroll.bind(this);\n\t#triggerBySpace: boolean = false;\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#copilotOptions = editor.getOption('copilot.copilotOptions');\n\t\tif (Type.isPlainObject(this.#copilotOptions))\n\t\t{\n\t\t\tthis.#registerListeners();\n\t\t\tthis.#registerComponents();\n\t\t}\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Copilot';\n\t}\n\n\t#registerListeners(): void\n\t{\n\t\tthis.#triggerBySpace = this.getEditor().getOption('copilot.triggerBySpace', false);\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tINSERT_COPILOT_DIALOG_COMMAND,\n\t\t\t\t(payload): boolean => {\n\t\t\t\t\tconst options = Type.isPlainObject(payload) ? payload : {};\n\t\t\t\t\tthis.show(options);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_EDITOR,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tthis.#hide();\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDIALOG_VISIBILITY_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\treturn this.isCopilotShown();\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.#triggerBySpace ? this.#registerParagraphNodeTransform() : () => {},\n\t\t);\n\t}\n\n\t#registerParagraphNodeTransform(): () => void\n\t{\n\t\treturn this.getEditor().registerNodeTransform(CustomParagraphNode, (node: CustomParagraphNode) => {\n\t\t\tif (node.getChildrenSize() !== 1 || !$isRootNode(node.getParent()))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!$isTextNode(node.getFirstChild()) || node.getFirstChild().getTextContent() !== ' ')\n\t\t\t{\n\t\t\t\tthis.#resetLoader();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\tif (!$isRangeSelection(selection) || !selection.isCollapsed())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst anchorNode = selection.anchor.getNode();\n\t\t\tif (anchorNode !== node.getFirstChild())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.isCopilotLoaded() && !this.isCopilotLoading())\n\t\t\t{\n\t\t\t\tthis.#resetLoader();\n\t\t\t\tthis.#targetParagraph = this.getEditor().getElementByKey(node.getKey());\n\t\t\t\tif (this.#targetParagraph)\n\t\t\t\t{\n\t\t\t\t\tDom.addClass(this.#targetParagraph, 'ui-text-editor-loading-ellipsis');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.getFirstChild().remove();\n\t\t\tnode.select();\n\t\t\tthis.show({\n\t\t\t\tonShow: () => this.#resetLoader(),\n\t\t\t\tonError: () => this.#resetLoader(),\n\t\t\t});\n\t\t});\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tthis.getEditor().getComponentRegistry().register('copilot', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tconst copilotIconClass = '--copilot-ai';\n\t\t\tconst refreshIconClass = '--refresh-5 ui-text-editor-copilot-loading';\n\t\t\tconst icon = Tag.render`\n\t\t\t\t<span class=\"ui-icon-set ${copilotIconClass}\" style=\"--ui-icon-set__icon-color: #8e52ec\"></span>\n\t\t\t`;\n\t\t\tbutton.setContent(icon);\n\t\t\tbutton.setTooltip(Loc.getMessage('TEXT_EDITOR_BTN_COPILOT'));\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().focus();\n\n\t\t\t\tif (this.isCopilotLoading())\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst resetRefresh = () => {\n\t\t\t\t\tif (!Dom.hasClass(icon, copilotIconClass))\n\t\t\t\t\t{\n\t\t\t\t\t\tDom.removeClass(icon, refreshIconClass);\n\t\t\t\t\t\tDom.addClass(icon, copilotIconClass);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.getEditor().dispatchCommand(\n\t\t\t\t\tINSERT_COPILOT_DIALOG_COMMAND,\n\t\t\t\t\t{\n\t\t\t\t\t\tonShow: resetRefresh,\n\t\t\t\t\t\tonError: resetRefresh,\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tif (!this.isCopilotLoaded())\n\t\t\t\t{\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (!this.isCopilotLoaded())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDom.removeClass(icon, copilotIconClass);\n\t\t\t\t\t\t\tDom.addClass(icon, refreshIconClass);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn button;\n\t\t});\n\t}\n\n\tshouldTriggerBySpace(): boolean\n\t{\n\t\treturn this.#triggerBySpace;\n\t}\n\n\tisCopilotLoaded(): boolean\n\t{\n\t\treturn this.#copilotStatus === CopilotStatus.LOADED;\n\t}\n\n\tisCopilotLoading(): boolean\n\t{\n\t\treturn this.#copilotStatus === CopilotStatus.LOADING;\n\t}\n\n\tisCopilotShown(): boolean\n\t{\n\t\treturn this.#copilot !== null && this.#copilot.isShown();\n\t}\n\n\tshow({ onShow, onError } = {})\n\t{\n\t\tif (this.isCopilotLoaded())\n\t\t{\n\t\t\tthis.#show({ onShow });\n\t\t}\n\t\telse if (!this.isCopilotLoading())\n\t\t{\n\t\t\tthis.#createCopilot()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.#show({ onShow });\n\t\t\t\t}).catch(() => {\n\t\t\t\t\tif (Type.isFunction(onError))\n\t\t\t\t\t{\n\t\t\t\t\t\tonError();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t;\n\t\t}\n\t}\n\n\t#show({ onShow } = {})\n\t{\n\t\tthis.getEditor().update(() => {\n\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\tif (!$isRangeSelection(selection) || !this.getEditor().isEditable())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.getEditor().dispatchCommand(HIDE_DIALOG_COMMAND);\n\n\t\t\tconst selectionText = selection.getTextContent();\n\t\t\tconst editorPosition = Dom.getPosition(this.getEditor().getScrollerContainer());\n\t\t\tconst width = Math.min(editorPosition.width, 600);\n\n\t\t\tthis.#lastSelection = selection.clone();\n\n\t\t\tconst selectedText = selectionText.trim();\n\t\t\tif (selectedText.length > 0)\n\t\t\t{\n\t\t\t\tthis.#copilot.setSelectedText(selectedText);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst wholeText = $getRoot().getTextContent().trim();\n\t\t\t\tif (wholeText.length > 0)\n\t\t\t\t{\n\t\t\t\t\tthis.#copilot.setContext(wholeText);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.#copilot.show({ width });\n\n\t\t\tthis.#adjustDialogPosition();\n\n\t\t\tEvent.bind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\n\t\t\tif (!selection.isCollapsed())\n\t\t\t{\n\t\t\t\tthis.getEditor().highlightSelection();\n\t\t\t}\n\n\t\t\tif (Type.isFunction(onShow))\n\t\t\t{\n\t\t\t\tonShow();\n\t\t\t}\n\t\t});\n\t}\n\n\t#hide()\n\t{\n\t\tif (this.isCopilotLoaded() && this.#copilot.isShown())\n\t\t{\n\t\t\tthis.#copilot.hide();\n\t\t}\n\t}\n\n\t#createCopilot(): Promise\n\t{\n\t\tif (this.isDestroyed())\n\t\t{\n\t\t\treturn Promise.reject(new Error('Copilot plugin was destroyed.'));\n\t\t}\n\n\t\tthis.#copilotStatus = CopilotStatus.LOADING;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tRuntime.loadExtension('ai.copilot')\n\t\t\t\t.then(({ Copilot, CopilotEvents }) => {\n\t\t\t\t\tif (this.isDestroyed())\n\t\t\t\t\t{\n\t\t\t\t\t\treject(new Error('Copilot plugin was destroyed.'));\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#copilot = new Copilot({\n\t\t\t\t\t\tshowResultInCopilot: true,\n\t\t\t\t\t\t...this.#copilotOptions,\n\t\t\t\t\t\tautoHide: true,\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.#copilot.subscribe(CopilotEvents.FINISH_INIT, () => {\n\t\t\t\t\t\tif (this.isDestroyed())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treject(new Error('Copilot plugin was destroyed.'));\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.#copilotStatus = CopilotStatus.LOADED;\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.#copilot.subscribe(CopilotEvents.TEXT_SAVE, this.#handleCopilotSave.bind(this));\n\t\t\t\t\tthis.#copilot.subscribe(CopilotEvents.TEXT_PLACE_BELOW, this.#handleCopilotAddBelow.bind(this));\n\t\t\t\t\tthis.#copilot.subscribe(CopilotEvents.HIDE, this.#handleCopilotHide.bind(this));\n\n\t\t\t\t\tthis.#copilot.init();\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\treject();\n\t\t\t\t})\n\t\t\t;\n\t\t});\n\t}\n\n\t#resetLoader(): void\n\t{\n\t\tif (this.#targetParagraph)\n\t\t{\n\t\t\tDom.removeClass(this.#targetParagraph, 'ui-text-editor-loading-ellipsis');\n\t\t}\n\t}\n\n\t// #handleCopilotResult(event: BaseEvent): void\n\t// {\n\t// \tconsole.log('#handleCopilotResult', event.getData());\n\t// \tconst { result } = event.getData();\n\t// \tthis.getEditor().update(\n\t// \t\t() => {\n\t// \t\t\tthis.#targetParagraph.clear();\n\t// \t\t\tthis.#targetParagraph.append($createTextNode(result));\n\t// \t\t},\n\t// \t\t{\n\t// \t\t\tonUpdate: () => {\n\t// \t\t\t\tconst targetNode: HTMLElement = this.getEditor().getElementByKey(this.#targetParagraph.getKey());\n\t// \t\t\t\tthis.#copilot.adjustPosition(targetNode);\n\t// \t\t\t},\n\t// \t\t},\n\t// \t);\n\t// }\n\n\t#adjustDialogPosition(): void\n\t{\n\t\tthis.getEditor().update(() => {\n\t\t\tthis.#restoreSelection();\n\n\t\t\tconst selectionPosition = $getSelectionPosition(this.getEditor(), $getSelection(), document.body);\n\t\t\tif (selectionPosition === null)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { top, left, bottom } = selectionPosition;\n\t\t\tconst scrollerRect: DOMRect = Dom.getPosition(this.getEditor().getScrollerContainer());\n\t\t\tconst popupWidth = Math.min(scrollerRect.width, 600);\n\n\t\t\tlet offsetLeft = popupWidth / 2;\n\t\t\tif (left - offsetLeft < scrollerRect.left)\n\t\t\t{\n\t\t\t\t// Left boundary\n\t\t\t\tconst overflow = scrollerRect.left - (left - offsetLeft);\n\t\t\t\toffsetLeft -= overflow + 16;\n\t\t\t}\n\t\t\telse if (scrollerRect.right < (left + popupWidth - offsetLeft))\n\t\t\t{\n\t\t\t\t// Right boundary\n\t\t\t\toffsetLeft += (left + popupWidth - offsetLeft) - scrollerRect.right + 16;\n\t\t\t}\n\n\t\t\tif (bottom < scrollerRect.top || top > scrollerRect.bottom)\n\t\t\t{\n\t\t\t\tthis.#copilot.adjust({ hide: true });\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.#copilot.adjust({\n\t\t\t\t\thide: false,\n\t\t\t\t\tposition: { left: left - offsetLeft, top: bottom },\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t#handleEditorScroll(): void\n\t{\n\t\tthis.#adjustDialogPosition();\n\t}\n\n\t#restoreSelection(): boolean\n\t{\n\t\tconst selection = $getSelection();\n\t\tif (!$isRangeSelection(selection) && this.#lastSelection !== null)\n\t\t{\n\t\t\t$setSelection(this.#lastSelection);\n\t\t\tthis.#lastSelection = null;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#handleCopilotSave(event: BaseEvent): void\n\t{\n\t\tconst { result } = event.getData();\n\t\tthis.getEditor().update(() => {\n\t\t\tthis.#restoreSelection();\n\n\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\tif ($isRangeSelection(selection))\n\t\t\t{\n\t\t\t\tselection.insertRawText(result);\n\t\t\t}\n\n\t\t\tthis.#hide();\n\t\t});\n\t}\n\n\t#handleCopilotAddBelow(event: BaseEvent): void\n\t{\n\t\tconst { result } = event.getData();\n\t\tthis.getEditor().update(() => {\n\t\t\tthis.#restoreSelection();\n\n\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\tif ($isRangeSelection(selection))\n\t\t\t{\n\t\t\t\tconst focus: PointType = selection.focus;\n\t\t\t\tconst focusNode: TextNode | ElementNode = focus.getNode();\n\t\t\t\tif (!selection.isCollapsed())\n\t\t\t\t{\n\t\t\t\t\tfocusNode.selectEnd();\n\t\t\t\t}\n\n\t\t\t\tconst parentNode: ElementNode = focusNode.getParent();\n\t\t\t\tif ($isParagraphNode(parentNode))\n\t\t\t\t{\n\t\t\t\t\tconst paragraph = $createParagraphNode();\n\t\t\t\t\tparagraph.append(...$createNodesFromText(result));\n\t\t\t\t\tparentNode.insertAfter(paragraph);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tselection.insertLineBreak();\n\t\t\t\t\tselection.insertRawText(result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.#hide();\n\t\t});\n\t}\n\n\t#handleCopilotHide(): void\n\t{\n\t\tEvent.unbind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\tthis.getEditor().resetHighlightSelection();\n\t\tthis.getEditor().update(() => {\n\t\t\tif (!this.#restoreSelection())\n\t\t\t{\n\t\t\t\tthis.getEditor().focus();\n\t\t\t}\n\t\t});\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#copilot !== null)\n\t\t{\n\t\t\tthis.#copilot.hide();\n\t\t\tthis.#copilot = null;\n\t\t}\n\t}\n}\n","import { Browser, Loc } from 'main.core';\nimport Button from '../../toolbar/button';\nimport BasePlugin from '../base-plugin';\n\nimport { type TextEditor } from '../../text-editor';\n\nimport { registerHistory, createEmptyHistoryState } from 'ui.lexical.history';\n\nimport {\n\tUNDO_COMMAND,\n\tREDO_COMMAND,\n\tCAN_UNDO_COMMAND,\n\tCAN_REDO_COMMAND,\n\tCOMMAND_PRIORITY_CRITICAL,\n} from 'ui.lexical.core';\n\nexport class HistoryPlugin extends BasePlugin\n{\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tconst historyState = createEmptyHistoryState();\n\t\tthis.cleanUpRegister(\n\t\t\tregisterHistory(editor.getLexicalEditor(), historyState, 1000),\n\t\t);\n\n\t\tthis.#registerComponents();\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'History';\n\t}\n\n\t#registerComponents(): void\n\t{\n\t\tlet canUndo = false;\n\t\tthis.getEditor().getComponentRegistry().register('undo', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --undo\"></span>');\n\t\t\tbutton.setDisabled(!canUndo);\n\t\t\tbutton.setTooltip(\n\t\t\t\tLoc.getMessage('TEXT_EDITOR_BTN_UNDO', { '#keystroke#': Browser.isMac() ? '⌘Z' : 'Ctrl+Z' }),\n\t\t\t);\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().dispatchCommand(UNDO_COMMAND);\n\t\t\t});\n\n\t\t\tbutton.setDisableCallback(() => {\n\t\t\t\treturn !canUndo || !this.getEditor().isEditable();\n\t\t\t});\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tCAN_UNDO_COMMAND,\n\t\t\t\t(payload) => {\n\t\t\t\t\tcanUndo = payload;\n\t\t\t\t\tbutton.setDisabled(!canUndo);\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t);\n\n\t\t\treturn button;\n\t\t});\n\n\t\tlet canRedo = false;\n\t\tthis.getEditor().getComponentRegistry().register('redo', (): Button => {\n\t\t\tconst button: Button = new Button();\n\t\t\tbutton.setContent('<span class=\"ui-icon-set --redo\"></span>');\n\t\t\tbutton.setDisabled(!canRedo);\n\t\t\tbutton.setTooltip(\n\t\t\t\tLoc.getMessage('TEXT_EDITOR_BTN_REDO', { '#keystroke#': Browser.isMac() ? '⌘⇧Z' : 'Ctrl+Y' }),\n\t\t\t);\n\t\t\tbutton.subscribe('onClick', (): void => {\n\t\t\t\tthis.getEditor().dispatchCommand(REDO_COMMAND);\n\t\t\t});\n\n\t\t\tbutton.setDisableCallback(() => {\n\t\t\t\treturn !canRedo || !this.getEditor().isEditable();\n\t\t\t});\n\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tCAN_REDO_COMMAND,\n\t\t\t\t(payload) => {\n\t\t\t\t\tcanRedo = payload;\n\t\t\t\t\tbutton.setDisabled(!canRedo);\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t);\n\n\t\t\treturn button;\n\t\t});\n\t}\n}\n","import { Dom, Event, Tag, Type, Text } from 'main.core';\nimport { HIDE_DIALOG_COMMAND } from '../../commands';\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\n\nimport {\n\tCOMMAND_PRIORITY_HIGH,\n\tCOMMAND_PRIORITY_LOW,\n\tDRAGOVER_COMMAND,\n\tDROP_COMMAND,\n\t$getNearestNodeFromDOMNode,\n\t$getNodeByKey,\n\t$getRoot,\n\ttype RootNode,\n} from 'ui.lexical.core';\n\nimport { mergeRegister } from 'ui.lexical.utils';\n\nimport './block-toolbar.css';\n\nconst Direction = {\n\tDOWNWARD: 1,\n\tUPWARD: -1,\n\tINDETERMINATE: 0,\n};\n\nconst DRAG_DATA_FORMAT = 'application/x-ui-text-editor-drag-block';\n\nexport class BlockToolbarPlugin extends BasePlugin\n{\n\t#draggableBlockElement: HTMLElement = null;\n\t#lastBlockElementIndex: number = Infinity;\n\t#lastTargetElement: HTMLElement = null;\n\t#container: HTMLElement = null;\n\t#dropLine: HTMLElement = null;\n\t#isDragging = false;\n\n\t#bodyDragDropHandler: Function = null;\n\t#bodyDragOverHandler: Function = null;\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.#registerEvents(),\n\t\t\tthis.#registerListeners(),\n\t\t);\n\n\t\tthis.#bodyDragDropHandler = (event: DragEvent) => {\n\t\t\tthis.getEditor().dispatchCommand(DROP_COMMAND, event);\n\t\t};\n\n\t\tthis.#bodyDragOverHandler = (event: DragEvent) => {\n\t\t\t// prevent default to allow drop\n\t\t\tevent.preventDefault();\n\t\t};\n\n\t\tDom.append(this.getContainer(), this.getEditor().getScrollerContainer());\n\t\tDom.append(this.getDropLine(), this.getEditor().getScrollerContainer());\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'BlockToolbar';\n\t}\n\n\t#registerEvents(): () => void\n\t{\n\t\tconst scroller: HTMLElement = this.getEditor().getScrollerContainer();\n\t\tconst onMouseMove = this.#handleMouseMove.bind(this);\n\t\tconst onMouseLeave = this.#handleMouseLeave.bind(this);\n\t\tEvent.bind(scroller, 'mousemove', onMouseMove);\n\t\tEvent.bind(scroller, 'mouseleave', onMouseLeave);\n\n\t\treturn (): void => {\n\t\t\tEvent.unbind(scroller, 'mousemove', onMouseMove);\n\t\t\tEvent.unbind(scroller, 'mouseleave', onMouseLeave);\n\t\t};\n\t}\n\n\t#registerListeners(): () => void\n\t{\n\t\treturn mergeRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDRAGOVER_COMMAND,\n\t\t\t\tthis.#handleDragOver.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tDROP_COMMAND,\n\t\t\t\tthis.#handleDragDrop.bind(this),\n\t\t\t\tCOMMAND_PRIORITY_HIGH,\n\t\t\t),\n\t\t\tthis.getEditor().registerTextContentListener((): void => {\n\t\t\t\tthis.#setDraggableBlockElement(null);\n\t\t\t\tthis.#updatePosition();\n\t\t\t}),\n\t\t);\n\t}\n\n\t#handleMouseMove(event: MouseEvent): void\n\t{\n\t\tif (!this.getEditor().isEditable())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst target = event.target;\n\t\tif (!(target instanceof HTMLElement))\n\t\t{\n\t\t\tthis.#setDraggableBlockElement(null);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.closest('.ui-text-editor-block-toolbar') !== null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst element = this.#findBlockElement(event);\n\t\tthis.#setDraggableBlockElement(element);\n\t}\n\n\t#handleMouseLeave(): void\n\t{\n\t\tthis.#setDraggableBlockElement(null);\n\t}\n\n\t#findBlockElement(event): HTMLElement | null\n\t{\n\t\tconst scroller = this.getEditor().getScrollerContainer();\n\t\tconst anchorElementRect = scroller.getBoundingClientRect();\n\t\tlet blockElem: HTMLElement | null = null;\n\n\t\tthis.getEditor().getEditorState().read(() => {\n\t\t\tconst root: RootNode = $getRoot();\n\t\t\tconst topLevelNodeKeys = root.getChildrenKeys();\n\t\t\tlet index: number = this.#getCurrentIndex(topLevelNodeKeys.length);\n\t\t\tlet direction: number = Direction.INDETERMINATE;\n\n\t\t\twhile (index >= 0 && index < topLevelNodeKeys.length)\n\t\t\t{\n\t\t\t\tconst key: string = topLevelNodeKeys[index];\n\t\t\t\tconst elem: HTMLElement | null = this.getEditor().getElementByKey(key);\n\t\t\t\tif (elem === null)\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst domRect = elem.getBoundingClientRect();\n\t\t\t\tconst { marginLeft, marginRight, marginTop, marginBottom } = window.getComputedStyle(elem);\n\n\t\t\t\tconst rect = new DOMRect(\n\t\t\t\t\tanchorElementRect.left + parseFloat(marginLeft),\n\t\t\t\t\tdomRect.y - parseFloat(marginTop),\n\t\t\t\t\tdomRect.width + parseFloat(marginRight),\n\t\t\t\t\tdomRect.height + parseFloat(marginBottom),\n\t\t\t\t);\n\n\t\t\t\tconst { x, y } = event;\n\t\t\t\tconst isOnTopSide = y < rect.top;\n\t\t\t\tconst isOnBottomSide = y > rect.bottom;\n\t\t\t\tconst isOnLeftSide = x < rect.left;\n\t\t\t\tconst isOnRightSide = x > rect.right;\n\t\t\t\tconst contains = !isOnTopSide && !isOnBottomSide && !isOnLeftSide && !isOnRightSide;\n\t\t\t\tif (contains)\n\t\t\t\t{\n\t\t\t\t\tblockElem = elem;\n\t\t\t\t\tthis.#lastBlockElementIndex = index;\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (direction === Direction.INDETERMINATE)\n\t\t\t\t{\n\t\t\t\t\tif (isOnTopSide)\n\t\t\t\t\t{\n\t\t\t\t\t\tdirection = Direction.UPWARD;\n\t\t\t\t\t}\n\t\t\t\t\telse if (isOnBottomSide)\n\t\t\t\t\t{\n\t\t\t\t\t\tdirection = Direction.DOWNWARD;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// stop search block element\n\t\t\t\t\t\tdirection = Infinity;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex += direction;\n\t\t\t}\n\t\t});\n\n\t\treturn blockElem;\n\t}\n\n\t#getCurrentIndex(keysLength: number): number\n\t{\n\t\tif (keysLength === 0)\n\t\t{\n\t\t\treturn Infinity;\n\t\t}\n\n\t\tif (this.#lastBlockElementIndex >= 0 && this.#lastBlockElementIndex < keysLength)\n\t\t{\n\t\t\treturn this.#lastBlockElementIndex;\n\t\t}\n\n\t\treturn Math.floor(keysLength / 2);\n\t}\n\n\t#updatePosition(): void\n\t{\n\t\tif (this.#draggableBlockElement === null)\n\t\t{\n\t\t\tDom.style(this.getContainer(), {\n\t\t\t\topacity: 0,\n\t\t\t\ttransform: 'translateY(-10000px)',\n\t\t\t});\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// const styles: CSSStyleDeclaration = window.getComputedStyle(this.#draggableBlockElement);\n\t\t\t// const lineHeight: number = Text.toNumber(styles.lineHeight);\n\t\t\t// const toolbarHeight: number = this.getContainer().offsetHeight;\n\t\t\t// const offset = lineHeight > 0 ? (lineHeight - toolbarHeight) / 2 : 3;\n\n\t\t\tconst offset = Text.toNumber(Dom.style(this.#draggableBlockElement, 'margin-top'));\n\t\t\tconst top: number = this.#draggableBlockElement.offsetTop + offset;\n\n\t\t\tDom.style(this.getContainer(), {\n\t\t\t\topacity: 1,\n\t\t\t\ttransform: `translateY(${top}px)`,\n\t\t\t});\n\t\t}\n\t}\n\n\t#setDraggableBlockElement(element: HTMLElement | null): void\n\t{\n\t\tconst changed = this.#draggableBlockElement !== element;\n\t\tthis.#draggableBlockElement = element;\n\n\t\tif (changed)\n\t\t{\n\t\t\tthis.#updatePosition();\n\t\t}\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\tif (this.#container === null)\n\t\t{\n\t\t\tthis.#container = Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-block-toolbar\">\n\t\t\t\t\t<div \n\t\t\t\t\t\tclass=\"ui-text-editor-block-drag-icon\" \n\t\t\t\t\t\tdraggable=\"true\"\n\t\t\t\t\t\tondragstart=\"${this.#handleDragStart.bind(this)}\" \n\t\t\t\t\t\tondragend=\"${this.#handleDragEnd.bind(this)}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div \n\t\t\t\t\t\t\tclass=\"ui-icon-set --more-points\" \n\t\t\t\t\t\t\tstyle=\"--ui-icon-set__icon-size: 24px; margin-left: -4px\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`;\n\t\t}\n\n\t\treturn this.#container;\n\t}\n\n\tgetDropLine(): HTMLElement\n\t{\n\t\tif (this.#dropLine === null)\n\t\t{\n\t\t\tthis.#dropLine = Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-block-drop-line\"></div>\n\t\t\t`;\n\t\t}\n\n\t\treturn this.#dropLine;\n\t}\n\n\t#handleDragStart(event: DragEvent): void\n\t{\n\t\tconst dataTransfer = event.dataTransfer;\n\t\tif (!dataTransfer || this.#draggableBlockElement === null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.getEditor().dispatchCommand(HIDE_DIALOG_COMMAND);\n\n\t\tdataTransfer.setDragImage(this.#draggableBlockElement, 0, 0);\n\n\t\tlet nodeKey = '';\n\t\tthis.getEditor().update(() => {\n\t\t\tconst node = $getNearestNodeFromDOMNode(this.#draggableBlockElement);\n\t\t\tif (node)\n\t\t\t{\n\t\t\t\tnodeKey = node.getKey();\n\t\t\t}\n\t\t});\n\n\t\tdataTransfer.setData(DRAG_DATA_FORMAT, nodeKey);\n\t\tthis.#isDragging = true;\n\n\t\tEvent.bind(document.body, 'drop', this.#bodyDragDropHandler);\n\t\tEvent.bind(document.body, 'dragover', this.#bodyDragOverHandler);\n\t}\n\n\t#handleDragEnd(event: DragEvent): void\n\t{\n\t\tthis.#isDragging = false;\n\t\tthis.#hideDropLine();\n\n\t\tEvent.unbind(document.body, 'drop', this.#bodyDragDropHandler);\n\t\tEvent.unbind(document.body, 'dragover', this.#bodyDragOverHandler);\n\t}\n\n\t#handleDragOver(event: DragEvent): boolean\n\t{\n\t\tif (this.#isDragging === false)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst hasFiles = event.dataTransfer.types.includes('Files');\n\t\tif (hasFiles || !(event.target instanceof HTMLElement))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst targetBlockElement = this.#findBlockElement(event);\n\t\tif (targetBlockElement === null)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.#lastTargetElement = targetBlockElement;\n\n\t\tthis.#showDropLine(targetBlockElement, event);\n\t\tevent.preventDefault();\n\n\t\treturn true;\n\t}\n\n\t#handleDragDrop(event: DragEvent): boolean\n\t{\n\t\tif (this.#isDragging === false)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst hasFiles = event.dataTransfer.types.includes('Files');\n\t\tconst dragData = event.dataTransfer?.getData(DRAG_DATA_FORMAT) || '';\n\t\tif (hasFiles || !(event.target instanceof HTMLElement) || !Type.isStringFilled(dragData))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst draggedNode = $getNodeByKey(dragData);\n\t\tif (!draggedNode || !(event.target instanceof HTMLElement))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst targetBlockElement = this.#findBlockElement(event) || this.#lastTargetElement;\n\t\tif (!targetBlockElement)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst targetNode = $getNearestNodeFromDOMNode(targetBlockElement);\n\t\tif (!targetNode)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tEvent.unbind(document.body, 'drop', this.#bodyDragDropHandler);\n\t\tEvent.unbind(document.body, 'dragover', this.#bodyDragOverHandler);\n\n\t\tif (targetNode === draggedNode)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tconst { top: targetBlockElemTop, height: targetBlockElemHeight } = targetBlockElement.getBoundingClientRect();\n\t\tconst shouldInsertAfter = event.clientY - targetBlockElemTop > targetBlockElemHeight / 2;\n\t\tif (shouldInsertAfter)\n\t\t{\n\t\t\ttargetNode.insertAfter(draggedNode);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// eslint-disable-next-line @bitrix24/bitrix24-rules/no-native-dom-methods\n\t\t\ttargetNode.insertBefore(draggedNode);\n\t\t}\n\n\t\tthis.#setDraggableBlockElement(null);\n\n\t\treturn true;\n\t}\n\n\t#showDropLine(targetBlockElement: HTMLElement, event: DragEvent)\n\t{\n\t\tconst { top: targetBlockElemTop, height: targetBlockElemHeight } = targetBlockElement.getBoundingClientRect();\n\t\tconst targetStyle: CSSStyleDeclaration = window.getComputedStyle(targetBlockElement);\n\t\tconst relativePosition: DOMRect = Dom.getRelativePosition(targetBlockElement, targetBlockElement.offsetParent);\n\n\t\tlet lineTop: number = relativePosition.top;\n\t\tconst showAtBottom = event.clientY - targetBlockElemTop > targetBlockElemHeight / 2;\n\t\tif (showAtBottom)\n\t\t{\n\t\t\tlineTop += targetBlockElemHeight + parseFloat(targetStyle.marginBottom) * 1.5;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlineTop += parseFloat(targetStyle.marginTop) / 2;\n\t\t}\n\n\t\tconst DROP_LINE_HALF_HEIGHT = 2;\n\t\tconst CONTENT_EDITABLE_AREA_PADDING = 16;\n\t\tconst top: number = lineTop - DROP_LINE_HALF_HEIGHT;\n\n\t\tDom.style(this.getDropLine(), {\n\t\t\topacity: 0.4,\n\t\t\tleft: `${CONTENT_EDITABLE_AREA_PADDING}px`,\n\t\t\tright: `${CONTENT_EDITABLE_AREA_PADDING}px`,\n\t\t\ttransform: `translateY(${top}px)`,\n\t\t});\n\t}\n\n\t#hideDropLine(): void\n\t{\n\t\tDom.style(this.getDropLine(), {\n\t\t\topacity: 0,\n\t\t\ttransform: 'translate(-10000px, -10000px)',\n\t\t});\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tDom.remove(this.getContainer());\n\t\tDom.remove(this.getDropLine());\n\t}\n}\n","import { Tag } from 'main.core';\nimport ToolbarItem from './toolbar-item';\n\nexport default class Separator extends ToolbarItem\n{\n\t#container: HTMLElement = null;\n\n\tgetContainer(): HTMLElement\n\t{\n\t\tif (this.#container === null)\n\t\t{\n\t\t\tthis.#container = Tag.render`<span class=\"ui-text-editor-toolbar-separator\"></span>`;\n\t\t}\n\n\t\treturn this.#container;\n\t}\n\n\trender(): HTMLElement\n\t{\n\t\treturn this.getContainer();\n\t}\n}\n","/* eslint-disable no-underscore-dangle */\nimport { Dom, Tag, Type, Event } from 'main.core';\nimport { MemoryCache, type BaseCache } from 'main.core.cache';\n\nimport 'ui.icon-set.editor';\nimport { UNFORMATTED } from '../constants';\n\nimport {\n\tSELECTION_CHANGE_COMMAND,\n\tCOMMAND_PRIORITY_CRITICAL,\n\tBLUR_COMMAND,\n\tFOCUS_COMMAND,\n\t$getSelection,\n\t$isRangeSelection,\n\t$getRoot,\n\ttype RangeSelection,\n\ttype LexicalNode,\n\ttype ElementNode,\n} from 'ui.lexical.core';\n\nimport { $findMatchingParent, $getNearestNodeOfType, mergeRegister } from 'ui.lexical.utils';\nimport { $isListNode, ListNode } from 'ui.lexical.list';\nimport { $isAutoLinkNode, $isLinkNode } from 'ui.lexical.link';\nimport { $isCodeTokenNode } from '../plugins/code';\n\nimport { type TextEditor } from '../text-editor';\nimport { TextEditorLexicalNode } from '../types/text-editor-lexical-node';\nimport type { ToolbarOptions, ToolbarItem } from '../types/toolbar-options';\nimport Separator from './separator';\nimport Button from './button';\n\nimport './toolbar.css';\n\nexport default class Toolbar\n{\n\t#textEditor: TextEditor = null;\n\t#items: ToolbarItem[] = [];\n\t#rendered: boolean = false;\n\t#moreBtn: Button = null;\n\t#refs: BaseCache<HTMLElement> = new MemoryCache();\n\t#resizeObserver: ResizeObserver = null;\n\t#timeoutId: number = null;\n\t#removeListeners: Function = null;\n\n\tconstructor(textEditor: TextEditor, options: ToolbarOptions)\n\t{\n\t\tthis.#textEditor = textEditor;\n\n\t\tconst toolbarOptions: ToolbarOptions = Type.isArray(options) ? options : [];\n\t\tthis.#fillFromOptions(toolbarOptions);\n\n\t\tif (this.#items.length > 0)\n\t\t{\n\t\t\tthis.#removeListeners = this.#registerListeners();\n\t\t\tthis.#resizeObserver = new ResizeObserver(this.#handleResize.bind(this));\n\t\t}\n\t}\n\n\trenderTo(container: HTMLElement): void\n\t{\n\t\tif (this.isRendered())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (Type.isElementNode(container))\n\t\t{\n\t\t\tthis.#items.forEach((item: ToolbarItem) => {\n\t\t\t\tDom.append(item.render(), this.getItemsContainer());\n\t\t\t});\n\n\t\t\tDom.append(this.getContainer(), container);\n\n\t\t\tif (this.#resizeObserver !== null)\n\t\t\t{\n\t\t\t\tthis.#resizeObserver.observe(this.getContainer());\n\t\t\t}\n\n\t\t\tthis.#rendered = true;\n\t\t}\n\t}\n\n\tisEmpty(): boolean\n\t{\n\t\treturn this.#items.length === 0;\n\t}\n\n\tgetContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-toolbar-container\">\n\t\t\t\t\t${this.getItemsContainer()}\n\t\t\t\t\t${this.getMoreBtnContainer()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetItemsContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('items-container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-toolbar-items\"></div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetMoreBtnContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('more-btn-container', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-toolbar-more-btn\">\n\t\t\t\t${this.getMoreBtn().render()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetMoreBtn(): Button\n\t{\n\t\tif (this.#moreBtn === null)\n\t\t{\n\t\t\tconst resetAnimation = () => {\n\t\t\t\tEvent.unbind(this.getItemsContainer(), 'transitionend', resetAnimation);\n\t\t\t\tDom.style(this.getItemsContainer(), { height: null });\n\t\t\t\tDom.removeClass(this.getItemsContainer(), '--animating');\n\t\t\t};\n\n\t\t\tthis.#moreBtn = new Button();\n\t\t\tthis.#moreBtn.setContent('<span class=\"ui-text-editor-toolbar-more-btn-icon\"></span>');\n\t\t\tthis.#moreBtn.subscribe('onClick', (): void => {\n\t\t\t\tEvent.unbind(this.getItemsContainer(), 'transitionend', resetAnimation);\n\n\t\t\t\tif (Dom.hasClass(this.getContainer(), '--expanded'))\n\t\t\t\t{\n\t\t\t\t\tDom.style(this.getItemsContainer(), { height: `${this.getItemsContainer().scrollHeight}px` });\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tDom.removeClass(this.getContainer(), '--expanded');\n\t\t\t\t\t\tDom.addClass(this.getItemsContainer(), '--animating');\n\t\t\t\t\t\tDom.style(this.getItemsContainer(), { height: null });\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tDom.addClass(this.getItemsContainer(), '--animating');\n\t\t\t\t\tDom.style(this.getItemsContainer(), { height: `${this.getItemsContainer().scrollHeight}px` });\n\t\t\t\t\tDom.addClass(this.getContainer(), '--expanded');\n\t\t\t\t}\n\n\t\t\t\tEvent.bind(this.getItemsContainer(), 'transitionend', resetAnimation);\n\t\t\t});\n\t\t}\n\n\t\treturn this.#moreBtn;\n\t}\n\n\tgetItems(): ToolbarItem[]\n\t{\n\t\treturn this.#items;\n\t}\n\n\tisRendered(): boolean\n\t{\n\t\treturn this.#rendered;\n\t}\n\n\tdestroy(): boolean\n\t{\n\t\tif (this.#removeListeners !== null)\n\t\t{\n\t\t\tthis.#removeListeners();\n\t\t}\n\n\t\tif (this.#resizeObserver !== null)\n\t\t{\n\t\t\tthis.#resizeObserver.disconnect();\n\t\t\tthis.#resizeObserver = null;\n\t\t}\n\n\t\tif (this.isRendered())\n\t\t{\n\t\t\tDom.remove(this.getContainer());\n\t\t}\n\n\t\tif (this.#timeoutId)\n\t\t{\n\t\t\tclearTimeout(this.#timeoutId);\n\t\t}\n\n\t\tthis.#items = null;\n\t\tthis.#refs = null;\n\t}\n\n\t#registerListeners(): () => {}\n\t{\n\t\treturn mergeRegister(\n\t\t\tthis.#textEditor.registerCommand(\n\t\t\t\tSELECTION_CHANGE_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tthis.update();\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t\tthis.#textEditor.registerCommand(\n\t\t\t\tFOCUS_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (this.#timeoutId)\n\t\t\t\t\t{\n\t\t\t\t\t\tclearTimeout(this.#timeoutId);\n\t\t\t\t\t\tthis.#timeoutId = null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t\tthis.#textEditor.registerCommand(\n\t\t\t\tBLUR_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (this.#timeoutId)\n\t\t\t\t\t{\n\t\t\t\t\t\tclearTimeout(this.#timeoutId);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#timeoutId = setTimeout((): void => {\n\t\t\t\t\t\tconst activeElement = document.activeElement;\n\t\t\t\t\t\tconst rootElement = this.#textEditor.getScrollerContainer();\n\t\t\t\t\t\tif (activeElement === null || !rootElement.contains(activeElement))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.reset();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 400);\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t\tthis.#textEditor.registerUpdateListener(() => {\n\t\t\t\tthis.update();\n\t\t\t}),\n\t\t\tthis.#textEditor.registerEditableListener(() => {\n\t\t\t\tthis.update();\n\t\t\t}),\n\t\t);\n\t}\n\n\t#fillFromOptions(options: ToolbarOptions)\n\t{\n\t\toptions.forEach((item: ToolbarItem) => {\n\t\t\tif (item === '|')\n\t\t\t{\n\t\t\t\tthis.#items.push(new Separator());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst component = this.#textEditor.getComponentRegistry().create(item);\n\t\t\t\tif (component === null)\n\t\t\t\t{\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`TextEditor Toolbar: \"${item}\" component doesn't exist.`);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.#items.push(component);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t#handleResize(entries: ResizeObserverEntry[])\n\t{\n\t\tif (this.getContainer().offsetWidth === 0 || Dom.hasClass(this.getItemsContainer(), '--animating'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastItem: ?ToolbarItem = this.#items.at(-1);\n\t\tif (!lastItem || lastItem.getContainer().offsetTop >= lastItem.getContainer().offsetHeight)\n\t\t{\n\t\t\tDom.addClass(this.getContainer(), '--overflowed');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.getContainer(), ['--overflowed', '--expanded']);\n\t\t}\n\t}\n\n\tupdate(): void\n\t{\n\t\tthis.#textEditor.getEditorState().read((): void => {\n\t\t\tlet selection: RangeSelection = $getSelection();\n\t\t\tif (!$isRangeSelection(selection))\n\t\t\t{\n\t\t\t\tselection = null;\n\t\t\t}\n\n\t\t\tlet unformattedNode = null;\n\t\t\tif (selection !== null)\n\t\t\t{\n\t\t\t\tunformattedNode = $findMatchingParent(\n\t\t\t\t\tselection.anchor.getNode(),\n\t\t\t\t\t(node: TextEditorLexicalNode): boolean => {\n\t\t\t\t\t\treturn (node.__flags & UNFORMATTED) !== 0;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst blockTypes: Set<string> = selection === null ? new Set() : this.#getSelectionBlockTypes(selection);\n\t\t\tconst isReadOnly: boolean = !this.#textEditor.isEditable();\n\n\t\t\tthis.#items.forEach((item: Button) => {\n\t\t\t\tif (!(item instanceof Button))\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// First let's figure out a disabled status\n\t\t\t\tif (item.hasOwnDisableCallback())\n\t\t\t\t{\n\t\t\t\t\titem.setDisabled(item.invokeDisableCallback());\n\t\t\t\t}\n\t\t\t\telse if (isReadOnly)\n\t\t\t\t{\n\t\t\t\t\titem.disable();\n\t\t\t\t}\n\t\t\t\telse if (unformattedNode !== null && item.shouldDisableInsideUnformatted())\n\t\t\t\t{\n\t\t\t\t\titem.disable();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\titem.enable();\n\t\t\t\t}\n\n\t\t\t\t// Now set an active status\n\t\t\t\tif (item.isDisabled())\n\t\t\t\t{\n\t\t\t\t\titem.setActive(false);\n\t\t\t\t}\n\t\t\t\telse if (item.hasFormat())\n\t\t\t\t{\n\t\t\t\t\tconst format = item.getFormat();\n\t\t\t\t\titem.setActive(selection === null ? false : selection.hasFormat(format));\n\t\t\t\t}\n\t\t\t\telse if (item.getBlockType() !== null)\n\t\t\t\t{\n\t\t\t\t\titem.setActive(blockTypes.has(item.getBlockType()));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\treset(): void\n\t{\n\t\tthis.#items.forEach((item: Button) => {\n\t\t\tif (item instanceof Button)\n\t\t\t{\n\t\t\t\titem.setActive(false);\n\t\t\t}\n\t\t});\n\t}\n\n\t#getSelectionBlockTypes(selection: RangeSelection): Set<string>\n\t{\n\t\tconst anchorNode = selection.anchor.getNode();\n\t\tconst blockTypes = new Set();\n\t\tlet currentNode: ElementNode | LexicalNode | null = anchorNode;\n\t\twhile (currentNode !== $getRoot() && currentNode !== null)\n\t\t{\n\t\t\tconst blockType = this.#getBlockType(currentNode);\n\t\t\tblockTypes.add(blockType);\n\t\t\tcurrentNode = currentNode.getParent();\n\t\t}\n\n\t\treturn blockTypes;\n\t}\n\n\t#getBlockType(node: LexicalNode): string | null\n\t{\n\t\tif ($isListNode(node))\n\t\t{\n\t\t\tconst listNode: ListNode = node;\n\t\t\tconst parentList = $getNearestNodeOfType(listNode, ListNode);\n\n\t\t\treturn parentList ? parentList.getListType() : listNode.getListType();\n\t\t}\n\n\t\tif ($isLinkNode(node) || $isAutoLinkNode(node))\n\t\t{\n\t\t\treturn 'link';\n\t\t}\n\n\t\tif ($isCodeTokenNode(node))\n\t\t{\n\t\t\treturn 'code';\n\t\t}\n\n\t\treturn node.getType();\n\t}\n}\n","/*\neslint-disable no-underscore-dangle,\n@bitrix24/bitrix24-rules/no-pseudo-private,\n@bitrix24/bitrix24-rules/no-native-dom-methods\n*/\n\nimport { Tag, Runtime, Event } from 'main.core';\nimport { Popup } from 'main.popup';\nimport { DIALOG_VISIBILITY_COMMAND, HIDE_DIALOG_COMMAND } from '../../commands';\nimport { UNFORMATTED } from '../../constants';\nimport { $adjustDialogPosition, clearDialogPosition } from '../../helpers/adjust-dialog-position';\nimport { getSelectedNode } from '../../helpers/get-selected-node';\n\nimport Toolbar from '../../toolbar/toolbar';\n\nimport {\n\t$isTextNode,\n\t$getSelection,\n\t$isRangeSelection,\n\tSELECTION_CHANGE_COMMAND,\n\tCOMMAND_PRIORITY_CRITICAL,\n\tCOMMAND_PRIORITY_LOW,\n\ttype RangeSelection,\n} from 'ui.lexical.core';\n\nimport { $isLinkNode } from 'ui.lexical.link';\nimport { $findMatchingParent, mergeRegister } from 'ui.lexical.utils';\nimport { TextEditorLexicalNode } from '../../types/text-editor-lexical-node';\n\nimport BasePlugin from '../base-plugin';\nimport { type TextEditor } from '../../text-editor';\nimport type { CopilotPlugin } from '../copilot';\n\nexport class FloatingToolbarPlugin extends BasePlugin\n{\n\t#popup: Popup = null;\n\t#toolbar: Toolbar = null;\n\t#showDebounced: Function = null;\n\t#onEditorScroll: Function = this.#handleEditorScroll.bind(this);\n\n\tconstructor(editor: TextEditor)\n\t{\n\t\tsuper(editor);\n\n\t\tthis.#showDebounced = Runtime.debounce(() => {\n\t\t\tthis.getEditor().update(() => {\n\t\t\t\tif (this.#shouldShowDialog())\n\t\t\t\t{\n\t\t\t\t\tthis.#show();\n\t\t\t\t}\n\t\t\t});\n\t\t}, 700);\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'FloatingToolbar';\n\t}\n\n\tafterInit(): void\n\t{\n\t\tconst toolbarOptions = this.getEditor().getOption('floatingToolbar', []);\n\t\tthis.#toolbar = new Toolbar(this.getEditor(), toolbarOptions);\n\t\tif (!this.#toolbar.isEmpty())\n\t\t{\n\t\t\tthis.cleanUpRegister(\n\t\t\t\tthis.#registerListeners(),\n\t\t\t);\n\t\t}\n\t}\n\n\t#registerListeners(): () => void\n\t{\n\t\treturn mergeRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tSELECTION_CHANGE_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tthis.update();\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t\tthis.getEditor().registerUpdateListener(({ editorState }) => {\n\t\t\t\teditorState.read(() => {\n\t\t\t\t\tthis.update();\n\t\t\t\t});\n\t\t\t}),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_DIALOG_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tthis.hide();\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n\n\tupdate(): void\n\t{\n\t\tif (this.#shouldShowDialog())\n\t\t{\n\t\t\tif (this.getPopup().isShown())\n\t\t\t{\n\t\t\t\tthis.#show();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.#showDebounced();\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getPopup().close();\n\t\t}\n\t}\n\n\t#show()\n\t{\n\t\tthis.getPopup().show();\n\t\tclearDialogPosition(this.getPopup());\n\t\tthis.#adjustDialogPosition();\n\t}\n\n\t#adjustDialogPosition(): boolean\n\t{\n\t\treturn $adjustDialogPosition(\n\t\t\tthis.getPopup(),\n\t\t\tthis.getEditor(),\n\t\t\tthis.#initDialogPosition,\n\t\t);\n\t}\n\n\t#initDialogPosition(selectionPosition: Object): string\n\t{\n\t\tconst { isBackward, isMultiline } = selectionPosition;\n\n\t\treturn isBackward || !isMultiline ? 'top' : 'bottom';\n\t}\n\n\t#handleEditorScroll(): void\n\t{\n\t\tthis.getEditor().update(() => {\n\t\t\tthis.#adjustDialogPosition();\n\t\t});\n\t}\n\n\t#shouldShowDialog(): boolean\n\t{\n\t\tif (this.getEditor().isComposing() || !this.getEditor().isEditable())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst selection: RangeSelection = $getSelection();\n\t\tif (!$isRangeSelection(selection) || selection.isCollapsed())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst nativeSelection = window.getSelection();\n\t\tif (nativeSelection === null || nativeSelection.isCollapsed)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst scrollerContainer = this.getEditor().getScrollerContainer();\n\t\tif (!scrollerContainer.contains(nativeSelection.anchorNode))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst $isUnformatted = $findMatchingParent(\n\t\t\tselection.anchor.getNode(),\n\t\t\t(node: TextEditorLexicalNode) => {\n\t\t\t\treturn (node.__flags & UNFORMATTED) !== 0;\n\t\t\t},\n\t\t);\n\n\t\tif ($isUnformatted || selection.getTextContent() === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst rawTextContent = selection.getTextContent().replaceAll('\\n', '');\n\t\tif (!selection.isCollapsed() && rawTextContent === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst node = getSelectedNode(selection);\n\t\tconst parent = node.getParent();\n\t\tif ($isLinkNode(parent) || $isLinkNode(node))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst isSomeDialogVisible = this.getEditor().dispatchCommand(DIALOG_VISIBILITY_COMMAND);\n\t\tif (isSomeDialogVisible)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $isTextNode(node);\n\t}\n\n\tgetPopup(): Popup\n\t{\n\t\tif (this.#popup === null)\n\t\t{\n\t\t\tconst container = Tag.render`<div class=\"ui-text-editor-floating-toolbar\"></div>`;\n\t\t\tthis.#popup = new Popup({\n\t\t\t\tcloseByEsc: true,\n\t\t\t\t// for an embedded popup: document.body -> this.getEditor().getScrollerContainer()\n\t\t\t\ttargetContainer: document.body,\n\t\t\t\tautoHide: true,\n\t\t\t\tcontent: container,\n\t\t\t\tautoHideHandler: (event: MouseEvent): boolean => {\n\t\t\t\t\tlet collapsed = true;\n\t\t\t\t\tconst nativeSelection = window.getSelection();\n\t\t\t\t\tif (nativeSelection.isCollapsed)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getEditor().update(() => {\n\t\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\t\tcollapsed = selection === null || selection.isCollapsed();\n\t\t\t\t\t});\n\n\t\t\t\t\treturn collapsed;\n\t\t\t\t},\n\t\t\t\tevents: {\n\t\t\t\t\tonShow: () => {\n\t\t\t\t\t\tif (this.#adjustDialogPosition())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tEvent.bind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\tEvent.unbind(this.getEditor().getScrollerContainer(), 'scroll', this.#onEditorScroll);\n\t\t\t\t\t\tclearDialogPosition(this.getPopup());\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.#toolbar.renderTo(container);\n\t\t}\n\n\t\treturn this.#popup;\n\t}\n\n\thide()\n\t{\n\t\tif (this.#popup === null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.getPopup().close();\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\n\t\tif (this.#popup !== null)\n\t\t{\n\t\t\tthis.#popup.destroy();\n\t\t\tthis.#popup = null;\n\t\t}\n\n\t\tthis.#toolbar.destroy();\n\t\tthis.#toolbar = null;\n\t}\n}\n","import { Dom } from 'main.core';\nimport {\n\tCOMMAND_PRIORITY_LOW,\n\tcreateCommand,\n\ttype LexicalCommand,\n} from 'ui.lexical.core';\n\nimport Toolbar from '../../toolbar/toolbar';\nimport BasePlugin from '../base-plugin';\n\nexport const TOGGLE_TOOLBAR_COMMAND: LexicalCommand<void> = createCommand('TOGGLE_TOOLBAR_COMMAND');\nexport const SHOW_TOOLBAR_COMMAND: LexicalCommand<void> = createCommand('SHOW_TOOLBAR_COMMAND');\nexport const HIDE_TOOLBAR_COMMAND: LexicalCommand<void> = createCommand('HIDE_TOOLBAR_COMMAND');\n\nexport class ToolbarPlugin extends BasePlugin\n{\n\t#toolbar: Toolbar = null;\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Toolbar';\n\t}\n\n\tgetToolbar(): Toolbar\n\t{\n\t\treturn this.#toolbar;\n\t}\n\n\tisRendered(): boolean\n\t{\n\t\treturn this.#toolbar !== null && this.#toolbar.isRendered();\n\t}\n\n\tshow(): void\n\t{\n\t\tif (this.isRendered())\n\t\t{\n\t\t\tDom.removeClass(this.getEditor().getToolbarContainer(), '--hidden');\n\t\t}\n\t}\n\n\thide(): void\n\t{\n\t\tif (this.isRendered())\n\t\t{\n\t\t\tDom.addClass(this.getEditor().getToolbarContainer(), '--hidden');\n\t\t}\n\t}\n\n\tisShown(): boolean\n\t{\n\t\treturn this.isRendered() && !Dom.hasClass(this.getEditor().getToolbarContainer(), '--hidden');\n\t}\n\n\ttoggle(): void\n\t{\n\t\tif (this.isShown())\n\t\t{\n\t\t\tthis.hide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tafterInit(): void\n\t{\n\t\tthis.#toolbar = new Toolbar(this.getEditor(), this.getEditor().getOption('toolbar'));\n\t\tif (!this.#toolbar.isEmpty())\n\t\t{\n\t\t\tthis.#registerCommands();\n\n\t\t\tthis.#toolbar.renderTo(this.getEditor().getToolbarContainer());\n\t\t\tconst hideToolbar = this.getEditor().getOption('hideToolbar', false);\n\t\t\tif (hideToolbar)\n\t\t\t{\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy(): void\n\t{\n\t\tsuper.destroy();\n\t\tthis.#toolbar.destroy();\n\t}\n\n\t#registerCommands(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tTOGGLE_TOOLBAR_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tthis.toggle();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tSHOW_TOOLBAR_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tthis.show();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tHIDE_TOOLBAR_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tthis.hide();\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\t\t);\n\t}\n}\n","import { Type, Dom, Tag, Text, Loc } from 'main.core';\nimport BasePlugin from '../base-plugin';\n\nimport {\n\t$getSelection,\n\t$isRangeSelection,\n\t$isRootNode,\n\t$isParagraphNode,\n\tSELECTION_CHANGE_COMMAND,\n\tCOMMAND_PRIORITY_CRITICAL,\n\tBLUR_COMMAND,\n\tPASTE_COMMAND,\n\ttype RangeSelection,\n\ttype ParagraphNode,\n} from 'ui.lexical.core';\n\nimport { $canShowPlaceholder } from 'ui.lexical.text';\n\nimport type { CopilotPlugin } from '../copilot';\nimport type { MentionPlugin } from '../mention';\n\nimport './placeholder.css';\n\nexport class PlaceholderPlugin extends BasePlugin\n{\n\t#placeholder: string = null;\n\t#placeholderNode: HTMLElement = null;\n\t#paragraphPlaceholder: string = null;\n\n\tafterInit()\n\t{\n\t\tconst placeholder = this.getEditor().getOption('placeholder');\n\t\tif (Type.isStringFilled(placeholder))\n\t\t{\n\t\t\tthis.#placeholder = placeholder;\n\t\t\tthis.#placeholderNode = Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-placeholder\">${Text.encode(this.#placeholder)}</div>\n\t\t\t`;\n\n\t\t\tDom.append(this.#placeholderNode, this.getEditor().getScrollerContainer());\n\n\t\t\tthis.#registerPlaceholderListeners();\n\t\t}\n\n\t\tlet paragraphPlaceholder = this.getEditor().getOption('paragraphPlaceholder');\n\t\tif (Type.isStringFilled(paragraphPlaceholder))\n\t\t{\n\t\t\tif (paragraphPlaceholder === 'auto')\n\t\t\t{\n\t\t\t\tconst copilotPlugin: CopilotPlugin = this.getEditor().getPlugin('Copilot');\n\t\t\t\tconst copilotEnabled = copilotPlugin !== null && copilotPlugin.shouldTriggerBySpace();\n\t\t\t\tconst mentionPlugin: MentionPlugin = this.getEditor().getPlugin('Mention');\n\t\t\t\tconst mentionEnabled = mentionPlugin !== null && mentionPlugin.shouldTriggerByAtSign();\n\t\t\t\tif (copilotEnabled && mentionEnabled)\n\t\t\t\t{\n\t\t\t\t\tparagraphPlaceholder = Loc.getMessage('TEXT_EDITOR_PLACEHOLDER_MENTION_COPILOT');\n\t\t\t\t}\n\t\t\t\telse if (copilotEnabled)\n\t\t\t\t{\n\t\t\t\t\tparagraphPlaceholder = Loc.getMessage('TEXT_EDITOR_PLACEHOLDER_COPILOT');\n\t\t\t\t}\n\t\t\t\telse if (mentionEnabled)\n\t\t\t\t{\n\t\t\t\t\tparagraphPlaceholder = Loc.getMessage('TEXT_EDITOR_PLACEHOLDER_MENTION');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (paragraphPlaceholder !== 'auto')\n\t\t\t{\n\t\t\t\tthis.#paragraphPlaceholder = paragraphPlaceholder;\n\t\t\t\tthis.#registerParagraphListeners();\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic getName(): string\n\t{\n\t\treturn 'Placeholder';\n\t}\n\n\t#registerPlaceholderListeners(): void\n\t{\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerUpdateListener(() => {\n\t\t\t\tthis.getEditor().getEditorState().read(() => {\n\t\t\t\t\tthis.#togglePlaceholder();\n\t\t\t\t});\n\t\t\t}),\n\t\t);\n\t}\n\n\t#togglePlaceholder(): void\n\t{\n\t\tif (this.#placeholder === null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tlet canShowPlaceholder = $canShowPlaceholder(this.getLexicalEditor().isComposing());\n\t\tif (canShowPlaceholder && this.#paragraphPlaceholder !== null && this.#hasFocus())\n\t\t{\n\t\t\tcanShowPlaceholder = false;\n\t\t}\n\n\t\tif (canShowPlaceholder)\n\t\t{\n\t\t\tDom.addClass(this.#placeholderNode, '--shown');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.#placeholderNode, '--shown');\n\t\t}\n\t}\n\n\t#hasFocus(): boolean\n\t{\n\t\tconst activeElement = document.activeElement;\n\t\tconst rootElement = this.getEditor().getRootElement();\n\n\t\treturn rootElement !== null && activeElement !== null && rootElement.contains(activeElement);\n\t}\n\n\t#hidePlaceholder(): void\n\t{\n\t\tif (this.#placeholderNode !== null)\n\t\t{\n\t\t\tDom.removeClass(this.#placeholderNode, '--shown');\n\t\t}\n\t}\n\n\t#registerParagraphListeners(): void\n\t{\n\t\tlet lastEmptyParagraph: ParagraphNode = null;\n\t\tconst resetParagraphPlaceholder = () => {\n\t\t\tif (lastEmptyParagraph)\n\t\t\t{\n\t\t\t\tconst htmlElement: HTMLParagraphElement | null = this.getEditor().getElementByKey(lastEmptyParagraph.getKey());\n\t\t\t\tif (htmlElement)\n\t\t\t\t{\n\t\t\t\t\tdelete htmlElement.dataset.placeholder;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.cleanUpRegister(\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tSELECTION_CHANGE_COMMAND,\n\t\t\t\t() => {\n\t\t\t\t\tif (!this.getEditor().isEditable())\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\t\t\tlet currentParagraph: ParagraphNode | null = null;\n\t\t\t\t\tif ($isRangeSelection(selection) && selection.isCollapsed())\n\t\t\t\t\t{\n\t\t\t\t\t\tconst node = selection.anchor.getNode();\n\t\t\t\t\t\tif ($isParagraphNode(node) && $isRootNode(node.getParent()) && node.isEmpty())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst htmlElement: HTMLParagraphElement | null = this.getEditor().getElementByKey(node.getKey());\n\t\t\t\t\t\t\tif (htmlElement && this.#hasFocus())\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\thtmlElement.dataset.placeholder = this.#paragraphPlaceholder;\n\t\t\t\t\t\t\t\tcurrentParagraph = node;\n\t\t\t\t\t\t\t\tthis.#hidePlaceholder();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (lastEmptyParagraph && lastEmptyParagraph !== currentParagraph)\n\t\t\t\t\t{\n\t\t\t\t\t\tresetParagraphPlaceholder();\n\t\t\t\t\t}\n\n\t\t\t\t\tlastEmptyParagraph = currentParagraph;\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tPASTE_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tresetParagraphPlaceholder();\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t\t// this.getEditor().registerCommand(\n\t\t\t// \tFOCUS_COMMAND,\n\t\t\t// \t(): boolean => {\n\t\t\t// \t\tresetParagraphPlaceholder();\n\t\t\t//\n\t\t\t// \t\treturn false;\n\t\t\t// \t},\n\t\t\t// \tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t// ),\n\t\t\tthis.getEditor().registerCommand(\n\t\t\t\tBLUR_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tresetParagraphPlaceholder();\n\t\t\t\t\tthis.#togglePlaceholder();\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\t\t);\n\t}\n}\n","/* eslint-disable @bitrix24/bitrix24-rules/no-native-dom-methods */\nimport { Tag, Dom, Type, Cache, Event, Browser, Text } from 'main.core';\nimport { EventEmitter } from 'main.core.events';\nimport { SettingsCollection } from 'main.core.collections';\nimport { DefaultBBCodeScheme, type BBCodeScheme } from 'ui.bbcode.model';\nimport { createDOMRange, createRectsFromDOMRange } from 'ui.lexical.selection';\nimport { HIDE_DIALOG_COMMAND } from './commands';\nimport { NewLineMode } from './constants';\nimport { createHashCode } from './helpers/create-hash-code';\nimport { $isRootEmpty } from './helpers/is-root-empty';\n\nimport { defaultTheme } from './themes/default-theme';\nimport PluginCollection from './plugins/plugin-collection';\nimport ComponentRegistry from './component-registry';\nimport SchemeValidation from './scheme-validation';\nimport BasePlugin from './plugins/base-plugin';\n\nimport { RichTextPlugin } from './plugins/rich-text';\nimport { ParagraphPlugin } from './plugins/paragraph';\nimport { ClipboardPlugin } from './plugins/clipboard';\nimport { BoldPlugin } from './plugins/bold';\nimport { ItalicPlugin } from './plugins/italic';\nimport { StrikethroughPlugin } from './plugins/strikethrough';\nimport { UnderlinePlugin } from './plugins/underline';\nimport { ClearFormatPlugin } from './plugins/clear-format';\nimport { MentionPlugin } from './plugins/mention';\nimport { CodePlugin } from './plugins/code';\nimport { QuotePlugin } from './plugins/quote';\nimport { LinkPlugin } from './plugins/link';\nimport { AutoLinkPlugin } from './plugins/auto-link';\nimport { TabIndentPlugin } from './plugins/tab-indent';\nimport { ListPlugin } from './plugins/list';\nimport { ImagePlugin } from './plugins/image';\nimport { VideoPlugin } from './plugins/video';\nimport { SmileyPlugin } from './plugins/smiley';\nimport { SpoilerPlugin } from './plugins/spoiler';\nimport { TablePlugin } from './plugins/table';\nimport { HashtagPlugin } from './plugins/hashtag';\nimport { CopilotPlugin } from './plugins/copilot';\nimport { HistoryPlugin } from './plugins/history';\nimport { BlockToolbarPlugin } from './plugins/block-toolbar';\nimport { FloatingToolbarPlugin } from './plugins/floating-toolbar';\nimport { ToolbarPlugin } from './plugins/toolbar';\nimport { PlaceholderPlugin } from './plugins/placeholder';\nimport { FilePlugin } from './plugins/file';\n\nimport {\n\t$importFromBBCode,\n\t$exportToBBCode,\n\ttype BBCodeImportMap,\n\ttype BBCodeExportConversion,\n\ttype BBCodeImportConversion,\n\ttype BBCodeExportMap,\n} from './bbcode';\n\nimport {\n\tcreateEditor,\n\t$getRoot,\n\t$createParagraphNode,\n\t$getSelection,\n\t$isRangeSelection,\n\t$getNearestNodeFromDOMNode,\n\t$setSelection,\n\tFOCUS_COMMAND,\n\tBLUR_COMMAND,\n\tKEY_ENTER_COMMAND,\n\tCOMMAND_PRIORITY_LOW,\n\tCOMMAND_PRIORITY_CRITICAL,\n\tCLEAR_HISTORY_COMMAND,\n\ttype LexicalEditor,\n\ttype NodeKey,\n\ttype RootNode,\n\ttype LexicalNode,\n\ttype RangeSelection,\n\ttype EditorThemeClasses,\n\ttype EditorState,\n} from 'ui.lexical.core';\n\nimport { $findMatchingParent, mergeRegister } from 'ui.lexical.utils';\n\nimport type DecoratorComponent from './decorator-component';\nimport type { PluginConstructor } from './plugins/base-plugin';\nimport type { ClearOptions } from './types/clear-options';\nimport type { InitialEditorStateType } from './types/initial-editor-state-type';\nimport type { SetTextOptions } from './types/set-text-options';\nimport type { TextEditorOptions } from './types/text-editor-options';\nimport type { DecoratorOptions } from './types/decorator-options';\nimport type { NewLineModeType } from './types/new-line-mode-type';\n\nconst CollapsingState = {\n\tCOLLAPSED: 'collapsed',\n\tCOLLAPSING: 'collapsing',\n\tEXPANDED: 'expanded',\n\tEXPANDING: 'expanding',\n};\n\nimport './css/layout.css';\n\n/**\n * @memberof BX.UI.TextEditor\n */\nexport class TextEditor extends EventEmitter\n{\n\t#lexicalEditor: LexicalEditor = null;\n\t#componentRegistry: ComponentRegistry = new ComponentRegistry();\n\t#refs: typeof(Cache.MemoryCache) = new Cache.MemoryCache();\n\t#options: SettingsCollection = null;\n\t#plugins: PluginCollection = null;\n\t#newLineMode: NewLineModeType = NewLineMode.MIXED;\n\t#bbcodeScheme: BBCodeScheme = null;\n\t#schemeValidation: SchemeValidation = null;\n\t#bbcodeImportMap: BBCodeImportMap;\n\t#bbcodeExportMap: BBCodeExportMap;\n\t#themeClasses: EditorThemeClasses = {};\n\n\t#decoratorNodes: Set<NodeKey> = new Set();\n\t#decoratorComponents: Map<string, DecoratorComponent> = new Map();\n\t#removeListeners: Function = null;\n\n\t#highlightContainer = Tag.render`<div class=\"ui-text-editor-selection-highlighting\"></div>`;\n\t#autoFocus: boolean = false;\n\t#minHeight: Number | null = null;\n\t#maxHeight: Number | null = null;\n\n\t#collapsingMode: boolean = false;\n\t#collapsingState: string = CollapsingState.EXPANDED;\n\t#collapsingTransitionEnd: Function = this.#handleCollapsingTransition.bind(this);\n\t#paragraphHeight: number = null;\n\n\t#resizeObserver: ResizeObserver = null;\n\t#destroying: boolean = false;\n\t#rendered: boolean = false;\n\t#prevEmptyStatus: boolean = true;\n\n\tconstructor(editorOptions: TextEditorOptions)\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.UI.TextEditor.Editor');\n\n\t\tconst defaultOptions: TextEditorOptions = this.constructor.getDefaultOptions();\n\t\tconst options: TextEditorOptions = Type.isPlainObject(editorOptions) ? editorOptions : {};\n\t\tthis.#options = new SettingsCollection({ ...defaultOptions, ...options });\n\n\t\tconst builtinPlugins = [...this.constructor.getBuiltinPlugins()];\n\t\tconst plugins: Array<string | PluginConstructor> = this.#options.get('plugins', builtinPlugins);\n\t\tconst extraPlugins: Array<PluginConstructor> = this.#options.get('extraPlugins', []);\n\t\tconst pluginsToRemove: Array<PluginConstructor> = this.#options.get('removePlugins', []);\n\n\t\tconst newLineMode = this.#options.get('newLineMode');\n\t\tif ([NewLineMode.LINE_BREAK, NewLineMode.PARAGRAPH].includes(newLineMode))\n\t\t{\n\t\t\tthis.#newLineMode = newLineMode;\n\t\t}\n\n\t\tthis.#themeClasses = defaultTheme;\n\n\t\tthis.#plugins = new PluginCollection(builtinPlugins, [...plugins, ...extraPlugins], pluginsToRemove);\n\t\tconst constructors = this.#plugins.getConstructors();\n\t\tconst nodes = constructors.map((pluginConstructor: PluginConstructor) => {\n\t\t\treturn pluginConstructor.getNodes(this);\n\t\t});\n\n\t\tthis.#lexicalEditor = createEditor({\n\t\t\t// uses when you copy-paste from one to another editor\n\t\t\tnamespace: Type.isStringFilled(options.namespace) ? options.namespace : this.#createNamespace(constructors),\n\t\t\tnodes: nodes.flat(),\n\t\t\tonError: (error: Error) => {\n\t\t\t\tconsole.error(error);\n\t\t\t},\n\t\t\ttheme: this.#themeClasses,\n\t\t\teditable: this.#options.get('editable') !== false,\n\t\t});\n\n\t\tthis.setMinHeight(options.minHeight);\n\t\tthis.setMaxHeight(options.maxHeight);\n\t\tthis.setAutoFocus(options.autoFocus);\n\t\tthis.setVisualOptions(options.visualOptions);\n\n\t\tthis.#removeListeners = mergeRegister(\n\t\t\tthis.#registerCommands(),\n\t\t\tthis.#initDecorateNodes(nodes.flat()),\n\t\t);\n\n\t\tthis.#plugins.init(this);\n\n\t\tthis.#bbcodeImportMap = this.#initBBCodeImportMap();\n\t\tthis.#bbcodeExportMap = this.#initBBCodeExportMap();\n\t\tthis.#bbcodeScheme = this.#initBBCodeScheme();\n\t\tthis.#schemeValidation = new SchemeValidation(this);\n\n\t\tthis.subscribeFromOptions(options.events);\n\t}\n\n\tstatic getBuiltinPlugins(): Class<BasePlugin>[]\n\t{\n\t\treturn [\n\t\t\tRichTextPlugin,\n\t\t\tParagraphPlugin,\n\t\t\tClipboardPlugin,\n\t\t\tBoldPlugin,\n\t\t\tUnderlinePlugin,\n\t\t\tItalicPlugin,\n\t\t\tStrikethroughPlugin,\n\t\t\tClearFormatPlugin,\n\t\t\tTabIndentPlugin,\n\t\t\tCodePlugin,\n\t\t\tQuotePlugin,\n\t\t\tListPlugin,\n\t\t\tMentionPlugin,\n\t\t\tLinkPlugin,\n\t\t\tAutoLinkPlugin,\n\t\t\tImagePlugin,\n\t\t\tVideoPlugin,\n\t\t\tSmileyPlugin,\n\t\t\tSpoilerPlugin,\n\t\t\tTablePlugin,\n\t\t\tHashtagPlugin,\n\t\t\tCopilotPlugin,\n\t\t\tHistoryPlugin,\n\t\t\tBlockToolbarPlugin,\n\t\t\tFloatingToolbarPlugin,\n\t\t\tToolbarPlugin,\n\t\t\tPlaceholderPlugin,\n\t\t\tFilePlugin,\n\t\t];\n\t}\n\n\tstatic getDefaultOptions(): TextEditorOptions\n\t{\n\t\treturn {};\n\t}\n\n\tgetComponentRegistry(): ComponentRegistry\n\t{\n\t\treturn this.#componentRegistry;\n\t}\n\n\tgetOptions(): SettingsCollection\n\t{\n\t\treturn this.#options;\n\t}\n\n\tgetOption(path: string, defaultValue: any = null): any\n\t{\n\t\treturn this.#options.get(path, defaultValue);\n\t}\n\n\tgetThemeClasses(): EditorThemeClasses\n\t{\n\t\treturn this.#themeClasses;\n\t}\n\n\tgetThemeClass(tagName: string): string\n\t{\n\t\tconst className = this.#themeClasses[tagName];\n\t\tif (className !== undefined)\n\t\t{\n\t\t\treturn className;\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tgetNewLineMode(): NewLineModeType\n\t{\n\t\treturn this.#newLineMode;\n\t}\n\n\t#initEditorState(initialEditorState?: InitialEditorStateType, options?: SetTextOptions): void\n\t{\n\t\tif (Type.isNil(initialEditorState))\n\t\t{\n\t\t\tthis.#lexicalEditor.update(() => {\n\t\t\t\tconst root = $getRoot();\n\t\t\t\tif (root.isEmpty())\n\t\t\t\t{\n\t\t\t\t\tconst paragraph = $createParagraphNode();\n\t\t\t\t\troot.append(paragraph);\n\t\t\t\t}\n\t\t\t}, options);\n\t\t}\n\t\telse if (Type.isPlainObject(initialEditorState) || Type.isStringFilled(initialEditorState))\n\t\t{\n\t\t\tconst parsedEditorState: EditorState = this.#lexicalEditor.parseEditorState(initialEditorState);\n\t\t\tthis.#lexicalEditor.setEditorState(parsedEditorState);\n\t\t}\n\t\telse if (Type.isFunction(initialEditorState))\n\t\t{\n\t\t\tthis.#lexicalEditor.update(() => {\n\t\t\t\tconst root = $getRoot();\n\t\t\t\tif (root.isEmpty())\n\t\t\t\t{\n\t\t\t\t\tinitialEditorState(this.#lexicalEditor);\n\t\t\t\t}\n\t\t\t}, options);\n\t\t}\n\t}\n\n\t#initDecorateNodes(editorNodes: Class<LexicalNode>[]): () => void\n\t{\n\t\tconst removeListeners = [];\n\t\teditorNodes.forEach((nodeClass) => {\n\t\t\tif (nodeClass.useDecoratorComponent)\n\t\t\t{\n\t\t\t\tconst removeListener = this.registerMutationListener(\n\t\t\t\t\tnodeClass,\n\t\t\t\t\t(nodes, payload) => {\n\t\t\t\t\t\tfor (const [key, val] of nodes)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (val === 'destroyed')\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst component: DecoratorComponent = this.#decoratorComponents.get(key);\n\t\t\t\t\t\t\t\tif (component)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcomponent.destroy();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.#decoratorComponents.delete(key);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tthis.#decoratorNodes.add(key);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tremoveListeners.push(removeListener);\n\t\t\t}\n\t\t});\n\n\t\tconst removeListener = this.#lexicalEditor.registerDecoratorListener(\n\t\t\t(decorators: Record<NodeKey, DecoratorOptions>) => {\n\t\t\t\tthis.#decoratorNodes.forEach((nodeKey) => {\n\t\t\t\t\tconst decorator = decorators[nodeKey];\n\t\t\t\t\tconst {\n\t\t\t\t\t\tcomponentClass: DecoratorClass,\n\t\t\t\t\t\toptions: decoratorOptions,\n\t\t\t\t\t} = decorator;\n\n\t\t\t\t\tconst component = this.#decoratorComponents.get(nodeKey);\n\t\t\t\t\tconst htmlElement = this.#lexicalEditor.getElementByKey(nodeKey);\n\t\t\t\t\tif (htmlElement?.innerHTML && component)\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponent.update(decoratorOptions);\n\t\t\t\t\t}\n\t\t\t\t\telse if (htmlElement)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#decoratorComponents.set(\n\t\t\t\t\t\t\tnodeKey,\n\t\t\t\t\t\t\tnew DecoratorClass({\n\t\t\t\t\t\t\t\ttextEditor: this,\n\t\t\t\t\t\t\t\ttarget: htmlElement,\n\t\t\t\t\t\t\t\tnodeKey,\n\t\t\t\t\t\t\t\toptions: decoratorOptions,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.#decoratorNodes.clear();\n\t\t\t},\n\t\t);\n\n\t\tremoveListeners.push(removeListener);\n\n\t\treturn mergeRegister(...removeListeners);\n\t}\n\n\t#registerCommands(): () => void\n\t{\n\t\treturn mergeRegister(\n\t\t\tthis.registerCommand(\n\t\t\t\tFOCUS_COMMAND,\n\t\t\t\t(): boolean => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.isCollapsingModeEnabled()\n\t\t\t\t\t\t&& this.#collapsingState === CollapsingState.COLLAPSED\n\t\t\t\t\t\t&& this.isEmpty(false)\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.expand();\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emit('onFocus');\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\n\t\t\tthis.registerCommand(\n\t\t\t\tBLUR_COMMAND,\n\t\t\t\t(event): boolean => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.isCollapsingModeEnabled()\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\tthis.#collapsingState === CollapsingState.COLLAPSING\n\t\t\t\t\t\t\t|| this.#collapsingState === CollapsingState.EXPANDING\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emit('onBlur');\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_CRITICAL,\n\t\t\t),\n\n\t\t\tthis.registerUpdateListener(\n\t\t\t\t({ dirtyElements, dirtyLeaves, prevEditorState, tags }) => {\n\t\t\t\t\tconst isComposing = this.isComposing();\n\t\t\t\t\tconst hasContentChanges = dirtyLeaves.size > 0 || dirtyElements.size > 0;\n\t\t\t\t\tif (isComposing || !hasContentChanges)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst isInitialChange: boolean = prevEditorState.isEmpty();\n\t\t\t\t\tif (this.#options.get('collapsingMode') === true)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (isInitialChange)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.#initCollapsingMode();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.isCollapsed() && !this.isEmpty())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.expand(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!isInitialChange && tags.has('history-merge'))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.emit('onChange', { isInitialChange, tags });\n\n\t\t\t\t\tconst isEmpty = this.isEmpty();\n\t\t\t\t\tif (this.#prevEmptyStatus !== isEmpty)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.#prevEmptyStatus = isEmpty;\n\t\t\t\t\t\tthis.emit('onEmptyContentToggle', { isEmpty, isInitialChange });\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t),\n\n\t\t\tthis.registerCommand(\n\t\t\t\tKEY_ENTER_COMMAND,\n\t\t\t\t(event: KeyboardEvent) => {\n\t\t\t\t\tconst { code, ctrlKey, metaKey } = event;\n\t\t\t\t\tif ((Browser.isMac() && metaKey) || ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.emit('onMetaEnter');\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (code === 'Escape')\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.emit('onEscape');\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tCOMMAND_PRIORITY_LOW,\n\t\t\t),\n\n\t\t\tthis.registerEditableListener((isEditable: boolean): boolean => {\n\t\t\t\tthis.getEditableContainer().contentEditable = isEditable;\n\t\t\t\tif (isEditable)\n\t\t\t\t{\n\t\t\t\t\tDom.removeClass(this.getRootContainer(), '--read-only');\n\t\t\t\t\tDom.addClass(this.getRootContainer(), '--editable');\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tDom.removeClass(this.getRootContainer(), '--editable');\n\t\t\t\t\tDom.addClass(this.getRootContainer(), '--read-only');\n\t\t\t\t}\n\n\t\t\t\tthis.emit('onEditable', { isEditable });\n\t\t\t}),\n\t\t);\n\t}\n\n\t#createNamespace(plugins: PluginConstructor[]): string\n\t{\n\t\tconst hashCode = createHashCode(\n\t\t\tplugins\n\t\t\t\t.map((node) => node.getName())\n\t\t\t\t.sort()\n\t\t\t\t.join('-'),\n\t\t);\n\n\t\treturn String(hashCode);\n\t}\n\n\tgetBBCodeScheme(): BBCodeScheme\n\t{\n\t\treturn this.#bbcodeScheme;\n\t}\n\n\tgetSchemeValidation(): SchemeValidation\n\t{\n\t\treturn this.#schemeValidation;\n\t}\n\n\t#initBBCodeImportMap(): BBCodeImportMap\n\t{\n\t\tconst importMap: BBCodeImportMap = new Map();\n\t\tfor (const [, plugin] of this.#plugins)\n\t\t{\n\t\t\tconst map: BBCodeImportConversion = plugin.importBBCode();\n\t\t\tif (map !== null)\n\t\t\t{\n\t\t\t\tObject.keys(map).forEach((key: string): void => {\n\t\t\t\t\tlet currentValue = importMap.get(key);\n\t\t\t\t\tif (currentValue === undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\tcurrentValue = [];\n\t\t\t\t\t\timportMap.set(key, currentValue);\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentValue.push(map[key]);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn importMap;\n\t}\n\n\t#initBBCodeExportMap(): BBCodeImportMap\n\t{\n\t\tconst exportMap: BBCodeExportMap = new Map();\n\t\tfor (const [, plugin] of this.#plugins)\n\t\t{\n\t\t\tconst map: BBCodeExportConversion | null = plugin.exportBBCode();\n\t\t\tif (map !== null)\n\t\t\t{\n\t\t\t\tObject.keys(map).forEach((nodeType: string): void => {\n\t\t\t\t\tif (Type.isFunction(map[nodeType]))\n\t\t\t\t\t{\n\t\t\t\t\t\texportMap.set(nodeType, map[nodeType]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn exportMap;\n\t}\n\n\t#initBBCodeScheme(): BBCodeScheme\n\t{\n\t\tconst filePlugin: FilePlugin = this.getPlugin('File');\n\t\tconst fileTag = filePlugin?.isEnabled() ? filePlugin.getMode() : 'none';\n\n\t\treturn new DefaultBBCodeScheme({ fileTag });\n\t}\n\n\tsetText(text: string, options?: SetTextOptions): void\n\t{\n\t\tif (Type.isString(text))\n\t\t{\n\t\t\tconst updateOptions = {\n\t\t\t\tdiscrete: Type.isPlainObject(options) && options.discrete === true,\n\t\t\t};\n\n\t\t\tthis.#lexicalEditor.update((): void => {\n\t\t\t\tconst lexicalNodes: Array<LexicalNode> = $importFromBBCode(text, this);\n\t\t\t\tconst root: RootNode = $getRoot();\n\t\t\t\troot.clear();\n\t\t\t\troot.append(...lexicalNodes);\n\t\t\t\t$setSelection(null);\n\t\t\t}, updateOptions);\n\t\t}\n\t}\n\n\tclear(options?: ClearOptions): void\n\t{\n\t\tconst updateOptions = {\n\t\t\tdiscrete: Type.isPlainObject(options) && options.discrete === true,\n\t\t};\n\n\t\tthis.#lexicalEditor.update((): void => {\n\t\t\tconst root: RootNode = $getRoot();\n\t\t\tconst paragraph = $createParagraphNode();\n\t\t\troot.clear();\n\t\t\troot.append(paragraph);\n\n\t\t\t// const selection = $getSelection();\n\t\t\t// if (selection !== null)\n\t\t\t// {\n\t\t\t// \tparagraph.select();\n\t\t\t// }\n\n\t\t\t$setSelection(null);\n\t\t}, updateOptions);\n\t}\n\n\tclearHistory(): void\n\t{\n\t\tthis.dispatchCommand(CLEAR_HISTORY_COMMAND);\n\t}\n\n\tgetText(): string\n\t{\n\t\treturn this.#lexicalEditor.getEditorState().read(() => {\n\t\t\tconst bbCodeAst = $exportToBBCode($getRoot(), this);\n\n\t\t\t// console.log(\"bbCodeAst\", bbCodeAst);\n\n\t\t\treturn bbCodeAst.toString();\n\t\t});\n\t}\n\n\tisEmpty(trim: boolean = true): boolean\n\t{\n\t\treturn this.#lexicalEditor.getEditorState().read(() => {\n\t\t\treturn $isRootEmpty(trim);\n\t\t});\n\t}\n\n\tsetAutoFocus(flag: boolean): void\n\t{\n\t\tif (Type.isBoolean(flag))\n\t\t{\n\t\t\tthis.#autoFocus = flag;\n\t\t}\n\t}\n\n\thasAutoFocus(): boolean\n\t{\n\t\treturn this.#autoFocus;\n\t}\n\n\tsetMinHeight(minHeight: number | null): void\n\t{\n\t\tif ((Type.isNumber(minHeight) && minHeight > 0) || minHeight === null)\n\t\t{\n\t\t\tconst changed = this.#minHeight !== minHeight;\n\t\t\tthis.#minHeight = minHeight;\n\n\t\t\tif (changed)\n\t\t\t{\n\t\t\t\tDom.style(\n\t\t\t\t\tthis.getScrollerContainer(),\n\t\t\t\t\t'--ui-text-editor-min-height',\n\t\t\t\t\tminHeight > 0 ? `${minHeight}px` : null,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetMinHeight(): number | null\n\t{\n\t\treturn this.#minHeight;\n\t}\n\n\tsetMaxHeight(maxHeight: number | null): void\n\t{\n\t\tif ((Type.isNumber(maxHeight) && maxHeight > 0) || maxHeight === null)\n\t\t{\n\t\t\tconst changed = this.#maxHeight !== maxHeight;\n\t\t\tthis.#maxHeight = maxHeight;\n\n\t\t\tif (changed)\n\t\t\t{\n\t\t\t\tDom.style(\n\t\t\t\t\tthis.getScrollerContainer(),\n\t\t\t\t\t'--ui-text-editor-max-height',\n\t\t\t\t\tmaxHeight > 0 ? `${maxHeight}px` : null,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetMaxHeight(): number | null\n\t{\n\t\treturn this.#maxHeight;\n\t}\n\n\tsetVisualOptions(options: TextEditorOptions['visualOption']): void\n\t{\n\t\tif (!Type.isPlainObject(options))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [option, value] of Object.entries(options))\n\t\t{\n\t\t\tconst name = Text.toKebabCase(option);\n\n\t\t\tDom.style(\n\t\t\t\tthis.getRootContainer(),\n\t\t\t\t`--ui-text-editor-${name}`,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t}\n\n\t#initCollapsingMode()\n\t{\n\t\tthis.#collapsingMode = true;\n\t\tif (this.isEmpty())\n\t\t{\n\t\t\tthis.#collapse('hide', false, true);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.expand(false);\n\t\t}\n\t}\n\n\tisCollapsingModeEnabled(): boolean\n\t{\n\t\treturn this.#collapsingMode;\n\t}\n\n\tisCollapsed(): boolean\n\t{\n\t\treturn this.#collapsingState === CollapsingState.COLLAPSED;\n\t}\n\n\t#collapse(mode: 'show' | 'hide' | 'toggle' = 'hide', animate: boolean = true, initialState: boolean = false): void\n\t{\n\t\tif (!this.isCollapsingModeEnabled())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst collapsed = (\n\t\t\tthis.#collapsingState === CollapsingState.COLLAPSED || this.#collapsingState === CollapsingState.COLLAPSING\n\t\t);\n\n\t\tconst expanded = (\n\t\t\tthis.#collapsingState === CollapsingState.EXPANDED || this.#collapsingState === CollapsingState.EXPANDING\n\t\t);\n\n\t\tif ((mode === 'hide' && collapsed) || (mode === 'show' && expanded))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (animate === false)\n\t\t{\n\t\t\tif (collapsed)\n\t\t\t{\n\t\t\t\tthis.#collapsingState = CollapsingState.EXPANDED;\n\t\t\t\tDom.removeClass(this.getRootContainer(), '--collapsed');\n\t\t\t\tthis.emit('onCollapsingToggle', { isOpen: true });\n\t\t\t\tthis.focus();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.#collapsingState = CollapsingState.COLLAPSED;\n\t\t\t\tDom.addClass(this.getRootContainer(), '--collapsed');\n\t\t\t\tthis.emit('onCollapsingToggle', { isOpen: false });\n\t\t\t\tthis.clear();\n\t\t\t\tthis.clearHistory();\n\t\t\t\tif (!initialState)\n\t\t\t\t{\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tEvent.unbind(this.getRootContainer(), 'transitionend', this.#collapsingTransitionEnd);\n\n\t\tif (collapsed)\n\t\t{\n\t\t\tthis.#collapsingState = CollapsingState.EXPANDING;\n\t\t\tthis.blur(); // to avoid a root container scrolling because of a browser focus\n\n\t\t\tconst currentHeight = this.getRootContainer().offsetHeight;\n\t\t\tDom.removeClass(this.getRootContainer(), ['--collapsed', '--collapsing']);\n\t\t\tDom.style(this.getRootContainer(), { height: `${currentHeight}px`, overflow: 'hidden' });\n\t\t\tDom.style(this.getInnerContainer(), { opacity: 0 });\n\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tDom.addClass(this.getRootContainer(), '--expanding');\n\t\t\t\tDom.style(this.getRootContainer(), { height: `${this.getRootContainer().scrollHeight}px` });\n\t\t\t\tDom.style(this.getInnerContainer(), { opacity: 1 });\n\n\t\t\t\tthis.emit('onCollapsingToggle', { isOpen: true });\n\t\t\t});\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.#collapsingState = CollapsingState.COLLAPSING;\n\n\t\t\tconst currentHeight = this.getRootContainer().offsetHeight;\n\n\t\t\tDom.removeClass(this.getRootContainer(), ['--expanding']);\n\t\t\tDom.style(this.getRootContainer(), { height: `${currentHeight}px`, overflow: 'hidden' });\n\t\t\tDom.style(this.getInnerContainer(), { opacity: 1 });\n\n\t\t\tthis.blur();\n\n\t\t\tconst paragraphHeight = this.getParagraphHeight();\n\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tDom.addClass(this.getRootContainer(), '--collapsing');\n\t\t\t\tDom.style(this.getRootContainer(), { height: `${paragraphHeight}px` });\n\t\t\t\tDom.style(this.getInnerContainer(), { opacity: 0 });\n\n\t\t\t\tthis.emit('onCollapsingToggle', { isOpen: false });\n\t\t\t});\n\t\t}\n\n\t\tEvent.bind(this.getRootContainer(), 'transitionend', this.#collapsingTransitionEnd);\n\t}\n\n\tcollapse(animate: boolean = true): void\n\t{\n\t\tthis.#collapse('hide', animate);\n\t}\n\n\texpand(animate: boolean = true): void\n\t{\n\t\tthis.#collapse('show', animate);\n\t}\n\n\ttoggle(animate: boolean = true): void\n\t{\n\t\tthis.#collapse('toggle', animate);\n\t}\n\n\tgetParagraphHeight(): number\n\t{\n\t\tif (this.#paragraphHeight !== null)\n\t\t{\n\t\t\treturn this.#paragraphHeight;\n\t\t}\n\n\t\tconst className = this.getThemeClasses().paragraph || '';\n\t\tconst paragraph = Tag.render`<p class=\"${className}\"><br /></p>`;\n\n\t\tDom.style(paragraph, {\n\t\t\tposition: 'absolute',\n\t\t\ttransform: 'translateY(-1000px)',\n\t\t});\n\n\t\tDom.append(paragraph, this.getScrollerContainer());\n\n\t\tthis.#paragraphHeight = (\n\t\t\tparagraph.offsetHeight\n\t\t\t+ Text.toNumber(Dom.style(paragraph, 'margin-top'))\n\t\t\t+ Text.toNumber(Dom.style(paragraph, 'margin-bottom'))\n\t\t);\n\n\t\tDom.remove(paragraph);\n\n\t\treturn this.#paragraphHeight;\n\t}\n\n\t#handleCollapsingTransition(): void\n\t{\n\t\tEvent.unbind(this.getRootContainer(), 'transitionend', this.#collapsingTransitionEnd);\n\n\t\tDom.style(this.getRootContainer(), { height: null, overflow: null });\n\t\tDom.style(this.getInnerContainer(), { opacity: null });\n\t\tDom.removeClass(this.getRootContainer(), ['--expanding', '--collapsing']);\n\n\t\tif (this.#collapsingState === CollapsingState.COLLAPSING)\n\t\t{\n\t\t\tDom.addClass(this.getRootContainer(), '--collapsed');\n\t\t\tthis.#collapsingState = CollapsingState.COLLAPSED;\n\t\t\tthis.clear();\n\t\t\tthis.clearHistory();\n\t\t\tthis.blur();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.focus();\n\t\t\tthis.#collapsingState = CollapsingState.EXPANDED;\n\t\t}\n\t}\n\n\tgetLexicalEditor(): LexicalEditor\n\t{\n\t\treturn this.#lexicalEditor;\n\t}\n\n\tsetRootElement(contentEditableElement: null | HTMLElement)\n\t{\n\t\tif (Type.isElementNode(contentEditableElement) || contentEditableElement === null)\n\t\t{\n\t\t\tthis.#lexicalEditor.setRootElement(contentEditableElement);\n\t\t}\n\t}\n\n\tgetBBCodeExportMap(): BBCodeExportMap\n\t{\n\t\treturn this.#bbcodeExportMap;\n\t}\n\n\tgetBBCodeImportMap(): BBCodeImportMap\n\t{\n\t\treturn this.#bbcodeImportMap;\n\t}\n\n\tgetEditorState(): EditorState\n\t{\n\t\treturn this.#lexicalEditor.getEditorState();\n\t}\n\n\tgetPlugins(): PluginCollection\n\t{\n\t\treturn this.#plugins;\n\t}\n\n\tgetPlugin(key: PluginConstructor | string): BasePlugin | null\n\t{\n\t\treturn this.#plugins.get(key);\n\t}\n\n\tgetElementByKey(key: NodeKey): HTMLElement | null\n\t{\n\t\treturn this.#lexicalEditor.getElementByKey(key);\n\t}\n\n\tsetEditorState(editorState: EditorState, options?: Object): void\n\t{\n\t\tthis.#lexicalEditor.setEditorState(editorState, options);\n\t}\n\n\tsetEditable(editable: boolean): void\n\t{\n\t\tif (Type.isBoolean(editable))\n\t\t{\n\t\t\tthis.dispatchCommand(HIDE_DIALOG_COMMAND);\n\t\t\tif (!editable)\n\t\t\t{\n\t\t\t\tthis.blur();\n\t\t\t}\n\n\t\t\tthis.#lexicalEditor.setEditable(editable);\n\t\t}\n\t}\n\n\tisEditable(): boolean\n\t{\n\t\treturn this.#lexicalEditor.isEditable();\n\t}\n\n\tregisterUpdateListener(listener): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerUpdateListener(listener);\n\t}\n\n\tregisterEditableListener(listener): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerEditableListener(listener);\n\t}\n\n\tregisterCommand(command, listener, priority): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerCommand(command, listener, priority);\n\t}\n\n\tdispatchCommand(type, payload): boolean\n\t{\n\t\treturn this.#lexicalEditor.dispatchCommand(type, payload);\n\t}\n\n\tregisterMutationListener(klass, listener): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerMutationListener(klass, listener);\n\t}\n\n\tregisterNodeTransform(klass, listener): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerNodeTransform(klass, listener);\n\t}\n\n\tregisterTextContentListener(listener): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerTextContentListener(listener);\n\t}\n\n\tregisterDecoratorListener(listener): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerDecoratorListener(listener);\n\t}\n\n\tregisterRootListener(listener): () => void\n\t{\n\t\treturn this.#lexicalEditor.registerRootListener(listener);\n\t}\n\n\tregisterEventListener(\n\t\tnodeType: Class<LexicalNode>,\n\t\teventType: string,\n\t\teventListener: (event: Event, nodeKey: NodeKey) => void,\n\t): () => void\n\t{\n\t\tconst isCaptured = ['mouseenter', 'mouseleave'].includes(eventType);\n\t\tconst handleEvent = (event: Event) => {\n\t\t\tthis.update(() => {\n\t\t\t\tconst nearestNode = $getNearestNodeFromDOMNode(event.target);\n\t\t\t\tif (nearestNode !== null)\n\t\t\t\t{\n\t\t\t\t\tconst targetNode = (\n\t\t\t\t\t\tisCaptured\n\t\t\t\t\t\t\t? (nearestNode instanceof nodeType ? nearestNode : null)\n\t\t\t\t\t\t\t: $findMatchingParent(nearestNode, (node) => node instanceof nodeType)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (targetNode !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\teventListener(event, targetNode.getKey());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\treturn this.registerRootListener((rootElement, prevRootElement): void => {\n\t\t\tif (rootElement)\n\t\t\t{\n\t\t\t\tEvent.bind(rootElement, eventType, handleEvent, isCaptured);\n\t\t\t}\n\n\t\t\tif (prevRootElement)\n\t\t\t{\n\t\t\t\tEvent.unbind(prevRootElement, eventType, handleEvent, isCaptured);\n\t\t\t}\n\t\t});\n\t}\n\n\tupdate(updateFn: () => void, options?: Object): void\n\t{\n\t\tthis.#lexicalEditor.update(updateFn, options);\n\t}\n\n\tfocus(\n\t\tcallbackFn?: () => void,\n\t\toptions?: { defaultSelection?: 'rootStart' | 'rootEnd' },\n\t): void\n\t{\n\t\tif (!document.hasFocus())\n\t\t{\n\t\t\twindow.focus();\n\t\t}\n\n\t\tthis.#lexicalEditor.focus(\n\t\t\tType.isFunction(callbackFn) ? callbackFn : null,\n\t\t\tType.isPlainObject(options) ? options : { defaultSelection: 'rootStart' },\n\t\t);\n\t}\n\n\thasFocus(): boolean\n\t{\n\t\treturn this.getRootElement().contains(document.activeElement);\n\t}\n\n\tblur(): void\n\t{\n\t\tthis.#lexicalEditor.blur();\n\t}\n\n\tisComposing(): boolean\n\t{\n\t\treturn this.#lexicalEditor.isComposing();\n\t}\n\n\tgetRootElement(): null | HTMLElement\n\t{\n\t\treturn this.#lexicalEditor.getRootElement();\n\t}\n\n\thasNodes(nodes: Array): boolean\n\t{\n\t\treturn this.#lexicalEditor.hasNodes(nodes);\n\t}\n\n\tgetRootContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('root', () => {\n\t\t\tconst classes = [\n\t\t\t\tthis.isEditable() ? '--editable' : '--read-only',\n\t\t\t];\n\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor ${classes.join(' ')}\">\n\t\t\t\t\t${this.getInnerContainer()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetInnerContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('inner', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-inner\">\n\t\t\t\t\t${this.getHeaderContainer()}\n\t\t\t\t\t${this.getToolbarContainer()}\n\t\t\t\t\t${this.getScrollerContainer()}\n\t\t\t\t\t${this.getFooterContainer()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetToolbarContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('toolbar', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-toolbar\" tabindex=\"-1\"></div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetScrollerContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('scroller', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-scroller\">\n\t\t\t\t\t${this.getEditableContainer()}\n\t\t\t\t</div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetEditableContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('editable', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div \n\t\t\t\t\tclass=\"ui-text-editor-editable\" \n\t\t\t\t\tcontenteditable=\"${this.isEditable() ? 'true' : 'false'}\" \n\t\t\t\t\tspellcheck=\"true\"\n\t\t\t\t></div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetFooterContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('footer', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-slot ui-text-editor-footer\" tabindex=\"-1\"></div>\n\t\t\t`;\n\t\t});\n\t}\n\n\tgetHeaderContainer(): HTMLElement\n\t{\n\t\treturn this.#refs.remember('header', () => {\n\t\t\treturn Tag.render`\n\t\t\t\t<div class=\"ui-text-editor-slot ui-text-editor-header\" tabindex=\"-1\"></div>\n\t\t\t`;\n\t\t});\n\t}\n\n\trenderTo(container: HTMLElement, replaceNode: boolean = false): void\n\t{\n\t\tif (!Type.isElementNode(container))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isRendered())\n\t\t{\n\t\t\tif (Type.isStringFilled(this.#options.get('content')))\n\t\t\t{\n\t\t\t\tthis.setText(this.#options.get('content'));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.#initEditorState(this.#options.get('editorState'));\n\t\t\t}\n\t\t}\n\n\t\tif (replaceNode)\n\t\t{\n\t\t\tDom.replace(container, this.getRootContainer());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.append(this.getRootContainer(), container);\n\t\t}\n\n\t\tthis.#lexicalEditor.setRootElement(this.getEditableContainer());\n\n\t\tif (this.hasAutoFocus())\n\t\t{\n\t\t\tthis.focus(null, { defaultSelection: 'rootStart' });\n\t\t}\n\n\t\tif (!this.#rendered)\n\t\t{\n\t\t\tthis.#resizeObserver = new ResizeObserver(() => {\n\t\t\t\tthis.emit('onResize');\n\t\t\t\tthis.dispatchCommand(HIDE_DIALOG_COMMAND, { context: 'resize' });\n\t\t\t});\n\n\t\t\tthis.#resizeObserver.observe(this.getScrollerContainer());\n\t\t}\n\n\t\tthis.#rendered = true;\n\t}\n\n\tisRendered(): boolean\n\t{\n\t\treturn this.#rendered;\n\t}\n\n\thighlightSelection(): void\n\t{\n\t\tthis.getEditorState().read(() => {\n\t\t\tconst selection: RangeSelection = $getSelection();\n\t\t\tif (!$isRangeSelection(selection) || selection.isCollapsed())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst anchor = selection.anchor;\n\t\t\tconst focus = selection.focus;\n\t\t\tconst range = createDOMRange(\n\t\t\t\tthis.#lexicalEditor,\n\t\t\t\tanchor.getNode(),\n\t\t\t\tanchor.offset,\n\t\t\t\tfocus.getNode(),\n\t\t\t\tfocus.offset,\n\t\t\t);\n\n\t\t\tif (range !== null)\n\t\t\t{\n\t\t\t\tconst scrollerContainer = this.getScrollerContainer();\n\t\t\t\tconst scrollerRect = scrollerContainer.getBoundingClientRect();\n\t\t\t\tconst selectionRects = createRectsFromDOMRange(this.#lexicalEditor, range);\n\t\t\t\tconst selectionRectsLength = selectionRects.length;\n\n\t\t\t\tthis.#highlightContainer.innerHTML = '';\n\n\t\t\t\tfor (let i = 0; i < selectionRectsLength; i++)\n\t\t\t\t{\n\t\t\t\t\tconst selectionRect = selectionRects[i];\n\t\t\t\t\tconst elem = Tag.render`<span class=\"ui-text-editor-selection-part\"></span>`;\n\t\t\t\t\tconst top = selectionRect.top - scrollerRect.top + scrollerContainer.scrollTop;\n\t\t\t\t\tconst left = selectionRect.left - scrollerRect.left + scrollerContainer.scrollLeft;\n\n\t\t\t\t\tDom.style(elem, {\n\t\t\t\t\t\ttop: `${top}px`,\n\t\t\t\t\t\tleft: `${left}px`,\n\t\t\t\t\t\theight: `${selectionRect.height}px`,\n\t\t\t\t\t\twidth: `${selectionRect.width}px`,\n\t\t\t\t\t});\n\n\t\t\t\t\tDom.append(elem, this.#highlightContainer);\n\t\t\t\t}\n\n\t\t\t\tDom.append(this.#highlightContainer, this.getScrollerContainer());\n\t\t\t}\n\t\t});\n\t}\n\n\tresetHighlightSelection(): void\n\t{\n\t\tDom.remove(this.#highlightContainer);\n\t}\n\n\tdestroy(): void\n\t{\n\t\tif (this.#destroying)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#destroying = true;\n\t\tthis.emit('onDestroy');\n\n\t\tfor (const [, plugin] of this.#plugins)\n\t\t{\n\t\t\tplugin.destroy();\n\t\t}\n\n\t\tthis.#removeListeners();\n\t\tif (this.isRendered())\n\t\t{\n\t\t\tthis.#resizeObserver.disconnect();\n\t\t\tthis.setRootElement(null);\n\t\t\tDom.remove(this.getRootContainer());\n\t\t}\n\n\t\tthis.#resizeObserver = null;\n\t\tthis.#plugins = null;\n\t\tthis.#lexicalEditor = null;\n\t\tthis.$refs = null;\n\t\tthis.#schemeValidation = null;\n\t\tthis.#bbcodeImportMap = null;\n\t\tthis.#bbcodeExportMap = null;\n\t\tthis.#decoratorNodes = null;\n\t\tthis.#decoratorComponents = null;\n\n\t\tObject.setPrototypeOf(this, null);\n\t}\n}\n","import { Type } from 'main.core';\nimport { TextEditor } from './text-editor';\nimport { type BitrixVueComponentProps } from 'ui.vue3';\n\nexport const TextEditorComponent: BitrixVueComponentProps = {\n\tname: 'TextEditorComponent',\n\tprops: {\n\t\teditorOptions: {\n\t\t\ttype: Object,\n\t\t},\n\t\teditorInstance: {\n\t\t\ttype: TextEditor,\n\t\t\tdefault: null,\n\t\t},\n\t\tevents: {\n\t\t\ttype: Object,\n\t\t\tdefault: {},\n\t\t},\n\t\teditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tsetup()\n\t{\n\t\treturn {\n\t\t\teditorClass: TextEditor,\n\t\t};\n\t},\n\tprovide(): Object<string, any> {\n\t\treturn {\n\t\t\teditor: this.editor,\n\t\t};\n\t},\n\tbeforeCreate()\n\t{\n\t\tif (this.editorInstance === null)\n\t\t{\n\t\t\tthis.hasOwnEditor = true;\n\n\t\t\tconst EditorClass = this.editorClass;\n\t\t\tthis.editor = new EditorClass(this.editorOptions);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.hasOwnEditor = false;\n\t\t\tthis.editor = this.editorInstance;\n\t\t}\n\n\t\tif (Type.isPlainObject(this.events))\n\t\t{\n\t\t\tfor (const [eventName, fn] of Object.entries(this.events))\n\t\t\t{\n\t\t\t\tthis.editor.subscribe(eventName, fn);\n\t\t\t}\n\t\t}\n\t},\n\tcomputed:\n\t{\n\t\theaderContainer(): string\n\t\t{\n\t\t\treturn this.editor.getHeaderContainer();\n\t\t},\n\t\tfooterContainer(): string\n\t\t{\n\t\t\treturn this.editor.getFooterContainer();\n\t\t},\n\t},\n\twatch:\n\t{\n\t\teditable(value: boolean): void\n\t\t{\n\t\t\tthis.editor.setEditable(value);\n\t\t},\n\t},\n\tmounted(): void\n\t{\n\t\tthis.editor.renderTo(this.$refs.container, true);\n\t},\n\tunmounted(): void\n\t{\n\t\tif (this.hasOwnEditor)\n\t\t{\n\t\t\tthis.editor.destroy();\n\t\t\tthis.editor = null;\n\t\t}\n\t},\n\ttemplate: `\n\t\t<div ref=\"container\"></div>\n\t\t<Teleport :to=\"headerContainer\">\n\t\t\t<slot name=\"header\"></slot>\n\t\t</Teleport>\n\t\t<Teleport :to=\"footerContainer\">\n\t\t\t<slot name=\"footer\"></slot>\n\t\t</Teleport>\n\t`,\n};\n","import { type TextEditorOptions } from 'ui.text-editor';\nimport { NewLineMode } from '../constants';\nimport { TextEditor } from '../text-editor';\n\n/**\n * @memberof BX.UI.TextEditor\n */\nexport class BasicEditor extends TextEditor\n{\n\tstatic getDefaultOptions(): TextEditorOptions\n\t{\n\t\treturn {\n\t\t\tplugins: [\n\t\t\t\t'RichText',\n\t\t\t\t'Paragraph',\n\t\t\t\t'Clipboard',\n\t\t\t\t'Bold',\n\t\t\t\t'Underline',\n\t\t\t\t'Italic',\n\t\t\t\t'Strikethrough',\n\t\t\t\t'TabIndent',\n\t\t\t\t'List',\n\t\t\t\t'Mention',\n\t\t\t\t'Link',\n\t\t\t\t'AutoLink',\n\t\t\t\t'Image',\n\t\t\t\t'Copilot',\n\t\t\t\t'History',\n\t\t\t\t'BlockToolbar',\n\t\t\t\t'FloatingToolbar',\n\t\t\t\t'Toolbar',\n\t\t\t\t'Placeholder',\n\t\t\t\t'File',\n\t\t\t],\n\t\t\ttoolbar: [\n\t\t\t\t'bold', 'italic', 'underline', 'strikethrough',\n\t\t\t\t'|',\n\t\t\t\t'numbered-list', 'bulleted-list',\n\t\t\t\t'|',\n\t\t\t\t'link', 'copilot',\n\t\t\t],\n\t\t\tnewLineMode: NewLineMode.MIXED,\n\t\t};\n\t}\n}\n","import { TextEditorComponent } from '../text-editor-component';\nimport { BasicEditor } from './basic-editor';\nimport { type BitrixVueComponentProps } from 'ui.vue3';\n\nexport const BasicEditorComponent: BitrixVueComponentProps = {\n\tname: 'BasicEditorComponent',\n\textends: TextEditorComponent,\n\tsetup(): Object\n\t{\n\t\treturn {\n\t\t\teditorClass: BasicEditor,\n\t\t};\n\t},\n};\n","import type { TextEditorOptions } from './types/text-editor-options';\nimport type { NewLineModeType } from './types/new-line-mode-type';\nimport type { DecoratorComponentOptions } from './types/decorator-component-options';\nimport type { DecoratorOptions } from './types/decorator-options';\nimport type { ToolbarItem, ToolbarOptions } from './types/toolbar-options';\nimport type { InitialEditorStateType } from './types/initial-editor-state-type';\n\nimport * as AllCommands from './commands';\nimport * as AllConstants from './constants';\n\nimport { generateContent } from './debug/generate-content';\n\nimport { TextEditor } from './text-editor';\nimport { TextEditorComponent } from './text-editor-component';\n\nimport { BasicEditor } from './presets/basic-editor';\nimport { BasicEditorComponent } from './presets/basic-editor-component';\n\nimport BasePlugin from './plugins/base-plugin';\nimport Button from './toolbar/button';\n\nimport * as Paragraph from './plugins/paragraph';\nimport * as AutoLink from './plugins/auto-link';\nimport * as BlockToolbar from './plugins/block-toolbar';\nimport * as Bold from './plugins/bold';\nimport * as Code from './plugins/code';\nimport * as FloatingToolbar from './plugins/floating-toolbar';\nimport * as History from './plugins/history';\nimport * as Image from './plugins/image';\nimport * as Italic from './plugins/italic';\nimport * as Link from './plugins/link';\nimport * as List from './plugins/list';\nimport * as Mention from './plugins/mention';\nimport * as Quote from './plugins/quote';\nimport * as Strikethrough from './plugins/strikethrough';\nimport * as TabIndent from './plugins/tab-indent';\nimport * as Toolbar from './plugins/toolbar';\nimport * as Underline from './plugins/underline';\nimport * as Video from './plugins/video';\nimport * as Spoiler from './plugins/spoiler';\nimport * as Smiley from './plugins/smiley';\nimport * as Table from './plugins/table';\nimport * as Hashtag from './plugins/hashtag';\nimport * as File from './plugins/file';\n\n/**\n * @namespace BX.UI.TextEditor.Plugins\n */\nconst Plugins = {\n\tParagraph,\n\tAutoLink,\n\tBlockToolbar,\n\tBold,\n\tCode,\n\tFloatingToolbar,\n\tHistory,\n\tImage,\n\tItalic,\n\tLink,\n\tList,\n\tMention,\n\tQuote,\n\tStrikethrough,\n\tTabIndent,\n\tToolbar,\n\tUnderline,\n\tVideo,\n\tSpoiler,\n\tSmiley,\n\tTable,\n\tHashtag,\n\tFile,\n};\n\n/**\n * @namespace BX.UI.TextEditor.Commands\n */\nconst Commands = { ...AllCommands };\n\n/**\n * @namespace BX.UI.TextEditor.Commands\n */\nconst Constants = { ...AllConstants };\n\n/**\n * @namespace BX.UI.TextEditor.Debug\n */\nconst Debug = {\n\tgenerateContent,\n};\n\n/**\n * @namespace BX.UI.TextEditor\n */\nexport {\n\tTextEditor,\n\tBasicEditor,\n\tTextEditorComponent,\n\tBasicEditorComponent,\n\tBasePlugin,\n\tButton,\n\tPlugins,\n\tCommands,\n\tConstants,\n\tDebug,\n};\n\nexport type {\n\tTextEditorOptions,\n\tNewLineModeType,\n\tDecoratorComponentOptions,\n\tDecoratorOptions,\n\tToolbarOptions,\n\tToolbarItem,\n\tInitialEditorStateType,\n};\n"],"names":["HIDE_DIALOG_COMMAND","createCommand","DIALOG_VISIBILITY_COMMAND","DRAG_START_COMMAND","DRAG_END_COMMAND","UNFORMATTED","NewLineMode","LINE_BREAK","PARAGRAPH","MIXED","NON_SINGLE_WIDTH_CHARS_REPLACEMENT","Object","freeze","NON_SINGLE_WIDTH_CHARS_REGEX","RegExp","keys","join","SYMBOLS","ancestorHasNextSibling","ancestorIsLastChild","hasNextSibling","isLastChild","selectedChar","selectedLine","FORMAT_PREDICATES","node","hasFormat","DETAIL_PREDICATES","isDirectionless","isUnmergeable","MODE_PREDICATES","isToken","isSegmented","getSelectedNode","selection","anchor","focus","anchorNode","getNode","focusNode","isBackward","$isAtNodeEnd","nodeNameToTextFormat","b","strong","i","em","s","del","u","sub","sup","convertTextFormatElement","format","getName","undefined","forChild","lexicalNode","$isTextNode","toggleFormat","$importFromBBCode","bbcode","editor","normalize","scheme","getBBCodeScheme","parser","BBCodeParser","ast","parse","elements","getChildren","lexicalNodes","element","nodes","$createNodesFromBBCode","$normalizeTextNodes","forChildMap","Map","parentLexicalNode","BBCodeNewLineNode","$createLineBreakNode","BBCodeTabNode","$createTabNode","currentLexicalNode","transformFunction","getConversionFunction","transformOutput","postTransform","after","transformNodes","Array","isArray","length","forChildFunction","push","Type","isFunction","set","children","childLexicalNodes","child","getType","BBCodeNode","ELEMENT_NODE","elementNode","isVoid","$createTextNode","getOpeningTag","getClosingTag","toString","$isElementNode","append","shouldWrapInParagraph","isInline","$isDecoratorNode","result","currentParagraph","lineBreaks","$isLineBreakNode","$createEmptyParagraphs","$createParagraphNode","count","nodeName","currentConversion","importMap","getBBCodeImportMap","conversions","get","toLowerCase","conversion","bbCodeConversion","priority","convertTextNode","textNode","textContent","getContent","replaceAll","replace","$isParagraphEmpty","$isParagraphNode","isEmpty","every","test","getTextContent","trimEmptyParagraphs","trimmedNodes","splice","$exportToBBCode","root","createRoot","topLevelChildren","topLevelNode","$appendNodesToBBCode","currentNode","parentNode","getExportFunction","fragment","createFragment","childNode","appendChild","newElement","call","getParent","replaceChild","formats","type","exportMap","getBBCodeExportMap","exportFn","createText","encode","content","getFormat","forEach","formatFn","createNewLine","$isTabNode","createTab","wrapNodeWith","tag","createElement","name","BasePlugin","constructor","textEditor","Error","getNodes","importBBCode","exportBBCode","validateScheme","afterInit","getEditor","getLexicalEditor","cleanUpRegister","func","mergeRegister","isDestroyed","destroy","ToolbarItem","EventEmitter","setEventNamespace","getContainer","render","Button","setContent","isString","innerHTML","isElementNode","setFormat","setBlockType","getBlockType","setTooltip","tooltip","isStringFilled","Dom","attr","Text","disableInsideUnformatted","enableInsideUnformatted","shouldDisableInsideUnformatted","setActive","active","addClass","removeClass","isActive","setDisabled","disabled","disable","enable","isDisabled","hasOwnDisableCallback","setDisableCallback","fn","invokeDisableCallback","Tag","bind","emit","wrapTextInParagraph","text","parts","split","part","QuoteNode","ElementNode","clone","__key","createDOM","config","document","setAttribute","theme","quote","updateDOM","prevNode","importDOM","blockquote","$createQuoteNode","importJSON","serializedNode","setIndent","indent","setDirection","direction","exportJSON","canIndent","canReplaceWith","replacement","collapseAtStart","$removeQuote","canBeEmpty","isShadowRoot","$applyNodeReplacement","$isQuoteNode","quoteNode","lastElement","insertAfter","remove","$getAncestor","predicate","parent","getParentOrThrow","$isBlockNode","isParentRequired","$wrapNodes","$isRootOrShadowRoot","firstChild","getFirstChild","handled","Set","firstSelectedBlock","includes","unshift","add","getKey","firstNode","has","isParentHandled","INSERT_QUOTE_COMMAND","FORMAT_QUOTE_COMMAND","REMOVE_QUOTE_COMMAND","QuotePlugin","nodeClass","validate","prevParagraph","paragraph","bbcodeMap","registerCommand","payload","isPlainObject","$insertNodeToNearestRoot","selectStart","COMMAND_PRIORITY_LOW","$getSelection","$isRangeSelection","$findMatchingParent","getComponentRegistry","register","button","Loc","getMessage","subscribe","update","dispatchCommand","getNewLineMode","convertSpoilerContentElement","domNode","$createSpoilerContentNode","SpoilerContentNode","dom","spoiler","div","hasAttribute","exportDOM","version","createParentElementNode","$createSpoilerNode","canInsertAfter","insertBefore","nodeToInsert","$isSpoilerContentNode","SpoilerTitleTextNode","TextNode","__text","$createSpoilerTitleTextNode","$isSpoilerTitleTextNode","INSERT_SPOILER_COMMAND","REMOVE_SPOILER_COMMAND","SpoilerPlugin","SpoilerNode","SpoilerTitleNode","title","getValue","trimSpoilerTitle","$createSpoilerTitleNode","spoilerNode","titleNode","value","contentNode","DELETE_CHARACTER_COMMAND","KEY_ENTER_COMMAND","COMMAND_PRIORITY_NORMAL","INSERT_PARAGRAPH_COMMAND","event","spoilerTitleNode","$isSpoilerTitleNode","newBlock","insertNewAfter","PASTE_COMMAND","insertSpoiler","getTitleNode","select","$isSpoilerNode","$removeSpoiler","registerNodeTransform","getChildrenSize","$setSelection","clear","isCollapsed","offset","topLevelElement","getTopLevelElement","container","getPreviousSibling","getOpen","setOpen","ctrlKey","metaKey","$getPreviousSelection","toggleOpen","ClipboardEvent","clipboardData","$insertDataTransferForPlainText","$createSpoiler","getContentNode","trim","convertSummaryElement","__language","__flags","summary","restoreSelection","containerNode","getNextSibling","open","key","__open","details","Event","getEditorState","read","isOpen","isBoolean","nodesToAppend","writable","getWritable","getLatest","CustomParagraphNode","ParagraphNode","__mode","childrenLength","$hasUpdateTag","insertLineBreak","mode","p","h1","convertHeadingElement","h2","h3","h4","h5","h6","nextSibling","selectNext","prevSibling","selectPrevious","$isRootNode","getPrototypeOf","hasOwnProperty","serializedParagraphNode","FORMAT_PARAGRAPH_COMMAND","ParagraphPlugin","with","withClass","convertParagraphNode","left","right","center","justify","tab","linebreak","$setBlocksType","COMMAND_PRIORITY_EDITOR","RootNode","lastChild","getLastChild","KEY_ARROW_UP_COMMAND","KEY_ARROW_LEFT_COMMAND","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_RIGHT_COMMAND","$isCodeNode","preventDefault","items","getData","hasLineBreaks","stopPropagation","html","dataTransfer","DataTransfer","setData","pasteEvent","bubbles","cancelable","getEditableContainer","dispatchEvent","getFirstDescendant","firstDescendant","lastDescendant","getLastDescendant","getTextContentSize","bbcodeNode","CodeTokenNode","highlightType","__highlightType","getHighlightType","self","className","getHighlightThemeClass","addClassNamesToElement","prevClassName","nextClassName","removeClassNamesFromElement","$createCodeTokenNode","setDetail","detail","setMode","setStyle","style","$createCodeNode","codeHighlight","$isCodeTokenNode","CodeNode","code","_config","isMultiLine","hasChildDOMNodeTag","convertPreElement","convertDivElement","pre","table","isGitHubCodeTable","convertTableElement","td","closest","isGitHubCodeCell","convertTableCellElement","convertCodeNoop","tr","firstPoint","isBefore","firstSelectionNode","getFirstCodeNodeOfLine","insertNodes","spaces","textSize","repeat","splitText","x","index","getIndexWithinParent","codeNode","nodesToInsert","last","isCode","isCodeElement","isCodeChildElement","domParent","cell","fontFamily","match","parentElement","classList","contains","tagName","hasChild","childNodes","FORMAT_CODE_COMMAND","INSERT_CODE_COMMAND","CodePlugin","CodeParser","map","handleTextNodeTransform","FORMAT_TEXT_COMMAND","COMMAND_PRIORITY_HIGH","KEY_TAB_COMMAND","command","shiftKey","INSERT_TAB_COMMAND","$isSelectionInCode","$insertNodes","INDENT_CONTENT_COMMAND","OUTDENT_CONTENT_COMMAND","tokenNodes","getCodeTokenNodes","selectEnd","newSelection","insertRawText","nodeKey","updateAndRetainSelection","$getNodeByKey","isAttached","codeTokenNodes","diffRange","getDiffRange","from","to","nodesForReplacement","onUpdate","delete","skipTransforms","indentOrOutdent","tabOrOutdent","codeLines","$getCodeLines","selectionNodes","firstOfLine","lastOfLine","getLastCodeNodeOfLine","selectionFirst","selectionLast","codeLinesLength","line","is","anchorParent","lines","lastLine","entries","previousNode","nextNode","prevNodes","nextNodes","leadingMatch","isEqual","prevNodesLength","nextNodesLength","maxTrailingMatch","Math","min","trailingMatch","slice","nodeA","nodeB","tokens","token","partials","partialsLength","updateFn","anchorOffset","isNewLineAnchor","getChildAtIndex","textOffset","getPreviousSiblings","reduce","_node","hasChanges","some","isText","textContentSize","isNodeSelected","isSelected","createNodeSelection","subscribers","onSelect","unregisterListener","registerUpdateListener","subscribeFunc","setSelected","selected","$isNodeSelection","$createNodeSelection","clearSelection","dispose","DecoratorComponent","componentOptions","target","options","getNodeKey","getTarget","getNodeSelection","getOptions","getOption","option","defaultValue","isUndefined","CLICK_COMMAND","KEY_DELETE_COMMAND","KEY_BACKSPACE_COMMAND","clamp","max","Direction","EAST","SOUTH","WEST","NORTH","FigureResizer","originalWidth","originalHeight","minWidth","minHeight","maxWidth","maxHeight","events","freeTransform","currentHeight","currentWidth","isResizing","ratio","startHeight","startWidth","startX","startY","isNumber","Infinity","subscribeFromOptions","show","hide","setTarget","isEditable","Number","dataset","width","height","getBoundingClientRect","clientX","clientY","isHorizontal","isVertical","diff","floor","round","ceil","setTimeout","unbind","editorRootElement","getRootElement","FileImageComponent","MemoryCache","getImage","onResizeStart","onResizeEnd","draggable","remember","img","src","image","aspectRatio","figureResizer","$isFileImageNode","setWidthAndHeight","FileImageNode","DecoratorNode","serverFileId","info","__serverFileId","__info","__width","previewWidth","__height","previewHeight","getId","getServerFileId","getInfo","getWidth","getHeight","isResized","$createFileImageNode","fileImageId","fileImageInfo","JSON","span","decorate","componentClass","previewUrl","useDecoratorComponent","FileNode","fileInfo","$createFileNode","fileId","stringify","file","$isFileNode","calcImageSize","renderWidth","renderHeight","ratioWidth","ratioHeight","useOriginalSize","FileVideoComponent","onResize","adjust","attrs","video","create","controls","preload","playsinline","loadedmetadata","$isFileVideoNode","videoWidth","videoHeight","object","FileVideoNode","$createFileVideoNode","downloadUrl","getDragSelection","targetWindow","nodeType","defaultView","ownerDocument","range","domSelection","window","getSelection","caretRangeFromPoint","rangeParent","collapse","rangeOffset","getRangeAt","getNodeInSelection","DRAG_DATA_FORMAT","TRANSPARENT_IMAGE","registerDraggableNode","targetNode","onDrop","isTargetNode","getDraggableNode","DRAGSTART_COMMAND","draggableNode","success","handleDragStart","DRAGOVER_COMMAND","handleDragOver","DROP_COMMAND","handleDragDrop","setDragImage","data","canDrop","dragData","rangeSelection","$createRangeSelection","applyDOMRange","selectors","imageClassName","getThemeClass","HTMLElement","FileType","FILE","IMAGE","VIDEO","ADD_FILE_COMMAND","ADD_FILES_COMMAND","INSERT_FILE_COMMAND","REMOVE_FILE_COMMAND","GET_INSERTED_FILES_COMMAND","FilePlugin","modeOption","files","addFiles","isEnabled","getMode","getAttribute","createTextNode","getFile","fileType","getFileType","toInteger","attributes","id","inline","addFile","isArrayFilled","isImage","isVideo","removeFile","skipHistoryStack","$nodesOfType","$wrapNodeInElement","validateImageUrl","url","ImageComponent","getMaxWidth","onerror","$isImageNode","ImageNode","__maxWidth","__src","$createImageNode","HTMLImageElement","imageNode","getSrc","setMaxWidth","$getSelectionPosition","scrollerContainer","createRange","rangeRects","getClientRects","isMultiline","rangeRect","top","getElementByKey","startContainer","startOffset","position","DOMRect","verticalGap","isBodyContainer","body","scrollLeft","pageXOffset","scrollTop","pageYOffset","bottom","scrollerRect","anchorKey","focusKey","anchorDOM","focusDOM","focusOffset","getDOMTextNode","getDOMIndexWithinParent","setStart","setEnd","collapsed","Node","TEXT_NODE","indexOf","lastPositionMap","WeakMap","editorPadding","$adjustDialogPosition","popup","initPosition","selectionPosition","getPosition","getScrollerContainer","popupRect","getPopupContainer","popupWidth","offsetLeft","overflow","setOffset","initialPosition","lastPosition","setBindElement","adjustPosition","forceBindPosition","clearDialogPosition","ATTRIBUTE_WHITESPACES","SAFE_URL","sanitizeUrl","normalizedUrl","ImageDialog","imageDialogOptions","setTargetContainer","targetContainer","targetOptions","getPopup","close","isShown","setImageUrl","getImageUrl","getTargetContainer","Popup","autoHide","cacheable","padding","closeByEsc","onClose","onDestroy","onShow","onAfterShow","getUrlTextBox","INSERT_IMAGE_COMMAND","INSERT_IMAGE_DIALOG_COMMAND","ImagePlugin","setChildren","onSave","onCancel","highlightSelection","resetHighlightSelection","MentionNode","entityId","__entityId","__id","getEntityId","$createMentionNode","convertMentionElement","a","mention","canInsertTextBefore","canInsertTextAfter","getDirection","extractWithChild","destination","selectionLength","isParentOf","mentionEntityId","mentionId","mentionNode","$isMentionNode","PUNCTUATION","TRIGGERS","VALID_CHARS","VALID_JOINS","LENGTH_LIMIT","mentionRegex","INSERT_MENTION_COMMAND","INSERT_MENTION_DIALOG_COMMAND","MentionPlugin","entities","dialogOptions","entity","size","shouldTriggerByAtSign","isDialogVisible","isRendered","clearTimeout","console","error","before","currentText","needSpace","insertText","leadOffset","sender","keyDownListener","KEY_DOWN_COMMAND","registerTextContentListener","minMatchLength","isSimpleText","isTextEntity","exec","maybeLeadingWhitespace","matchingString","replaceableString","selectionOffset","characterOffset","queryOffset","newNode","documentText","entryText","triggerOffset","queryMatch","userEvents","Runtime","loadExtension","then","exports","Dialog","entitySelectorOptions","multiple","enableSearch","clearSearchOnSelect","hideOnSelect","hideByEsc","offsetAnimation","compactView","onHide","selectedItem","item","nodeToReplace","getTitle","search","catch","forceTop","KEY_ESCAPE_COMMAND","SmileyNode","__typing","typing","getTyping","encodeURI","smiley","$createSmileyNode","isKeyboardSelectable","isIsolated","$isSmileyNode","SmileyDialog","setTargetNode","getTargetNode","rect","targetNodeWidth","bindElement","onFirstShow","dialog","BitrixVue","Smiles","app","createApp","methods","handleSelect","components","template","mount","getContentContainer","angleShift","setAngle","INSERT_SMILEY_COMMAND","INSERT_SMILEY_DIALOG_COMMAND","SmileyPlugin","SmileyManager","getSize","SmileyParser","getAll","handledTextNodes","$isUnformatted","splits","splitOffsets","acc","start","end","textNodes","smileyNode","registerMutationListener","nodeMutations","mutation","contentEditable","VideoComponent","$isVideoNode","VideoNode","__provider","uri","Uri","videoService","VideoService","createByHost","getHost","$createVideoNode","getProvider","provider","VideoDialog","videoDialogOptions","setVideoUrl","getVideoUrl","getStatusContainer","showError","clearError","validateVideoUrl","INSERT_VIDEO_COMMAND","INSERT_VIDEO_DIALOG_COMMAND","VideoPlugin","videoNode","getEmbeddedUrl","onInput","printFormatProperties","nodeOrSelection","str","filter","Boolean","toLocaleLowerCase","printNode","codeTokenNode","properties","printAllTextNodeProperties","fileImageNode","fileNode","fileVideoNode","$isLinkNode","linkNode","link","getURL","printAllLinkNodeProperties","String","printDetailProperties","printModeProperties","printTargetProperties","printRelProperties","printTitleProperties","isNil","getRel","printNodeSelection","_nodes","printRangeSelection","res","formatText","printTableSelection","tableKey","visitTree","visitor","childNodesLength","concat","generateContent","editorState","selectionString","$getRoot","nodeKeyDisplay","typeDisplay","printSelectedCharsLine","$isTableSelection","$getSelectionStartEnd","selectionLastIndent","indentionChars","unselectedChars","fill","selectedChars","paddingLength","nodePrintSpaces","anchorAndFocus","getStartEndPoints","textLength","numNonSingleWidthCharBeforeSelection","numNonSingleWidthCharInSelection","createHashCode","hash","c","trunc","imul","codePointAt","$isRootEmpty","topBlock","__indent","topBlockChildren","topBlockChildrenLength","defaultTheme","blockCursor","ltr","rtl","heading","hashtag","list","listitem","nested","olDepth","ul","bold","italic","strikethrough","subscript","superscript","underline","underlineStrikethrough","operator","punctuation","comment","word","keyword","boolean","regex","string","number","semicolon","bracket","brace","parentheses","tableRow","tableCell","tableCellHeader","tableSelection","Symbol","iterator","PluginCollection","builtinPlugins","plugins","pluginsToRemove","pluginConstructor","plugin","pluginsToLoad","init","instances","PluginConstruct","TypeError","instance","getConstructors","values","getPlugins","ComponentRegistry","callback","component","SchemeValidation","isNodeAllowed","parentCode","childCode","warn","isChildAllowed","findAllowedParent","moveToNextParent","removeOnFail","handleNodeTransform","validation","nodeValidation","bbcodeTag","RichTextPlugin","registerRichText","ClipboardPlainTableNode","convertTableToPlainText","th","rows","row","cells","ClipboardPlugin","tablePluginExists","BoldPlugin","color","background","Browser","isMac","ItalicPlugin","StrikethroughPlugin","KEY_MODIFIER_COMMAND","UnderlinePlugin","CLEAR_FORMATTING_COMMAND","ClearFormatPlugin","extractedNodes","extract","idx","extractedTextNode","__style","__format","$getNearestBlockElementAncestorOrThrow","LinkEditor","linkEditorOptions","setLinkUrl","linkUrl","editMode","setEditMode","setAutoLinkMode","autoLinkMode","getLinkTextBox","getLinkLabel","href","getLinkUrl","validateUrl","INSERT_LINK_DIALOG_COMMAND","LinkPlugin","LinkNode","toPlainText","$createLinkNode","registerEventListener","TOGGLE_LINK_COMMAND","$toggleLink","originalUrl","rel","lineNode","linkParent","$isAutoLinkNode","linkEditor","protocol","Validation","isEmail","currentSelection","setURL","onUnlink","clipboardText","splitNodes","URL_REGEX","EMAIL_REGEX","MATCHERS","createLinkMatcherWithRegExp","startsWith","AutoLinkPlugin","AutoLinkNode","autolink","onChange","prevUrl","previous","handleLinkEdit","startsWithSeparator","handleLinkCreation","handleBadNeighbors","regExp","urlTransformer","findFirstMatch","matchers","matcher","PUNCTUATION_OR_SPACE","isSeparator","char","endsWithSeparator","startsWithFullStop","isPreviousNodeValid","isNextNodeValid","isContentAroundIsValid","matchStart","matchEnd","contentBeforeIsValid","nodeText","invalidMatchEnd","remainingTextNode","matchLength","isValid","linkTextNode","$createAutoLinkNode","getDetail","replaceWithChildren","setRel","previousSibling","j","TabIndentPlugin","triggerByTab","$isSelectionInList","$isListItemNode","ListPlugin","ListNode","ListItemNode","$createListNode","$createListItemNode","getListType","setValue","INSERT_ORDERED_LIST_COMMAND","insertList","INSERT_UNORDERED_LIST_COMMAND","REMOVE_LIST_COMMAND","removeList","$handleListInsertParagraph","COMMAND_PRIORITY_CRITICAL","maxDepth","elementNodesInSelection","totalDepth","$isListNode","$getListDepth","nodesInSelection","n","TableDialog","getGridContainer","getCaptionContainer","offsetWidth","buttons","column","hasClass","columns","box","boxRow","boxColumn","INSERT_TABLE_DIALOG_COMMAND","TablePlugin","TableNode","TableCellNode","TableRowNode","$createTableNode","$createTableRowNode","$createTableCellNode","TableCellHeaderStates","ROW","tablerow","tablecell","hasHeader","tableNode","tableCellNode","INSERT_TABLE_COMMAND","rowCount","toNumber","columnCount","$createTableNodeWithDimensions","tableSelections","initializeTableNode","tableElement","applyTableHandlers","$isTableNode","removeListeners","HashtagNode","$createHashtagNode","$isHashtagNode","HashtagPlugin","createHashtagNode","getHashtagMatch","hashtagLength","endOffset","registerLexicalTextEntity","$createNodesFromText","INSERT_COPILOT_DIALOG_COMMAND","CopilotStatus","INIT","LOADING","LOADED","CopilotPlugin","shouldTriggerBySpace","isCopilotLoaded","isCopilotLoading","isCopilotShown","onError","copilotIconClass","refreshIconClass","icon","resetRefresh","selectionText","editorPosition","selectedText","setSelectedText","wholeText","setContext","Promise","reject","resolve","Copilot","CopilotEvents","showResultInCopilot","FINISH_INIT","TEXT_SAVE","TEXT_PLACE_BELOW","HIDE","HistoryPlugin","historyState","createEmptyHistoryState","registerHistory","canUndo","UNDO_COMMAND","CAN_UNDO_COMMAND","canRedo","REDO_COMMAND","CAN_REDO_COMMAND","DOWNWARD","UPWARD","INDETERMINATE","BlockToolbarPlugin","getDropLine","scroller","onMouseMove","onMouseLeave","anchorElementRect","blockElem","topLevelNodeKeys","getChildrenKeys","elem","domRect","marginLeft","marginRight","marginTop","marginBottom","getComputedStyle","parseFloat","y","isOnTopSide","isOnBottomSide","isOnLeftSide","isOnRightSide","keysLength","opacity","transform","offsetTop","changed","$getNearestNodeFromDOMNode","hasFiles","types","targetBlockElement","draggedNode","targetBlockElemTop","targetBlockElemHeight","shouldInsertAfter","targetStyle","relativePosition","getRelativePosition","offsetParent","lineTop","showAtBottom","DROP_LINE_HALF_HEIGHT","CONTENT_EDITABLE_AREA_PADDING","Separator","Toolbar","toolbarOptions","ResizeObserver","renderTo","getItemsContainer","observe","getMoreBtnContainer","getMoreBtn","resetAnimation","scrollHeight","requestAnimationFrame","getItems","disconnect","unformattedNode","blockTypes","isReadOnly","reset","SELECTION_CHANGE_COMMAND","FOCUS_COMMAND","BLUR_COMMAND","activeElement","rootElement","registerEditableListener","lastItem","at","offsetHeight","blockType","listNode","parentList","$getNearestNodeOfType","FloatingToolbarPlugin","debounce","autoHideHandler","nativeSelection","isComposing","rawTextContent","isSomeDialogVisible","TOGGLE_TOOLBAR_COMMAND","SHOW_TOOLBAR_COMMAND","HIDE_TOOLBAR_COMMAND","ToolbarPlugin","getToolbar","getToolbarContainer","toggle","hideToolbar","PlaceholderPlugin","placeholder","paragraphPlaceholder","copilotPlugin","getPlugin","copilotEnabled","mentionPlugin","mentionEnabled","canShowPlaceholder","$canShowPlaceholder","lastEmptyParagraph","resetParagraphPlaceholder","htmlElement","CollapsingState","COLLAPSED","COLLAPSING","EXPANDED","EXPANDING","TextEditor","editorOptions","Cache","defaultOptions","getDefaultOptions","SettingsCollection","getBuiltinPlugins","extraPlugins","newLineMode","constructors","createEditor","namespace","flat","editable","setMinHeight","setMaxHeight","setAutoFocus","autoFocus","setVisualOptions","visualOptions","path","getThemeClasses","getSchemeValidation","setText","updateOptions","discrete","clearHistory","CLEAR_HISTORY_COMMAND","getText","bbCodeAst","flag","hasAutoFocus","getMinHeight","getMaxHeight","toKebabCase","getRootContainer","isCollapsingModeEnabled","animate","expand","getParagraphHeight","setRootElement","contentEditableElement","setEditorState","setEditable","blur","listener","klass","registerDecoratorListener","registerRootListener","eventType","eventListener","isCaptured","handleEvent","nearestNode","prevRootElement","callbackFn","hasFocus","defaultSelection","hasNodes","classes","getInnerContainer","getHeaderContainer","getFooterContainer","replaceNode","context","createDOMRange","selectionRects","createRectsFromDOMRange","selectionRectsLength","selectionRect","$refs","setPrototypeOf","initialEditorState","parsedEditorState","parseEditorState","editorNodes","removeListener","val","decorators","decorator","DecoratorClass","decoratorOptions","dirtyElements","dirtyLeaves","prevEditorState","tags","hasContentChanges","isInitialChange","hashCode","sort","currentValue","filePlugin","fileTag","DefaultBBCodeScheme","initialState","expanded","paragraphHeight","TextEditorComponent","props","editorInstance","default","setup","editorClass","provide","beforeCreate","hasOwnEditor","EditorClass","eventName","computed","headerContainer","footerContainer","watch","mounted","unmounted","BasicEditor","toolbar","BasicEditorComponent","extends","Plugins","Paragraph","AutoLink","BlockToolbar","Bold","Code","FloatingToolbar","History","Image","Italic","Link","List","Mention","Quote","Strikethrough","TabIndent","Underline","Video","Spoiler","Smiley","Table","Hashtag","File","Commands","AllCommands","Constants","AllConstants","Debug"],"mappings":";;;;;;CAEO,MAAMA,mBAAmC,GAAGC,6BAAa,CAAC,qBAAqB,CAAC;AACvF,CAAO,MAAMC,yBAAyC,GAAGD,6BAAa,CAAC,2BAA2B,CAAC;AACnG,CAAO,MAAME,kBAAkC,GAAGF,6BAAa,CAAC,oBAAoB,CAAC;AACrF,CAAO,MAAMG,gBAAgC,GAAGH,6BAAa,CAAC,kBAAkB,CAAC;;;;;;;;;CCHjF;AACA,CAAO,MAAMI,WAAW,GAAG,CAAC;AAE5B,CAAO,MAAMC,WAA4C,GAAG;GAC3DC,UAAU,EAAE,YAAY;GACxBC,SAAS,EAAE,WAAW;GACtBC,KAAK,EAAE;CACR,CAAC;;;;;;;CCPM,MAAMC,kCAAoE,GAChFC,MAAM,CAACC,MAAM,CAAC;GACb,IAAI,EAAE,KAAK;GACX,IAAI,EAAE;CACP,CAAC,CACD;AAED,CAAO,MAAMC,4BAAoC,GAAG,IAAIC,MAAM,CAC7DH,MAAM,CAACI,IAAI,CAACL,kCAAkC,CAAC,CAACM,IAAI,CAAC,GAAG,CAAC,EACzD,GAAG,CACH;AAED,CAAO,MAAMC,OAA+B,GAAGN,MAAM,CAACC,MAAM,CAAC;GAC5DM,sBAAsB,EAAE,GAAG;GAC3BC,mBAAmB,EAAE,GAAG;GACxBC,cAAc,EAAE,GAAG;GACnBC,WAAW,EAAE,GAAG;GAChBC,YAAY,EAAE,GAAG;GACjBC,YAAY,EAAE;CACf,CAAC,CAAC;AAEF,CAAO,MAAMC,iBAAiB,GAAG,CAC/BC,IAA+B,IAAKA,IAAI,CAACC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,EACpED,IAA+B,IAAKA,IAAI,CAACC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,EACpED,IAA+B,IAAKA,IAAI,CAACC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,EACxED,IAA+B,IAAKA,IAAI,CAACC,SAAS,CAAC,eAAe,CAAC,IAAI,eAAe,EACtFD,IAA+B,IAAKA,IAAI,CAACC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,EAC9ED,IAA+B,IAAKA,IAAI,CAACC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,EAClFD,IAA+B,IAAKA,IAAI,CAACC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,CAC/E;AAED,CAAO,MAAMC,iBAAiB,GAAG,CAC/BF,IAAc,IAAKA,IAAI,CAACG,eAAe,EAAE,IAAI,eAAe,EAC5DH,IAAc,IAAKA,IAAI,CAACI,aAAa,EAAE,IAAI,aAAa,CACzD;AAED,CAAO,MAAMC,eAAe,GAAG,CAC7BL,IAAc,IAAKA,IAAI,CAACM,OAAO,EAAE,IAAI,OAAO,EAC5CN,IAAc,IAAKA,IAAI,CAACO,WAAW,EAAE,IAAI,WAAW,CACrD;;CCtCM,SAASC,eAAe,CAACC,SAAyB,EACzD;GACC,MAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;GAC7B,MAAMC,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;GAC7C,MAAMC,SAAS,GAAGL,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE;GAC3C,IAAID,UAAU,KAAKE,SAAS,EAC5B;KACC,OAAOF,UAAU;;GAGlB,MAAMG,UAAU,GAAGN,SAAS,CAACM,UAAU,EAAE;GACzC,IAAIA,UAAU,EACd;KACC,OAAOC,iCAAY,CAACL,KAAK,CAAC,GAAGC,UAAU,GAAGE,SAAS;;GAGpD,OAAOE,iCAAY,CAACN,MAAM,CAAC,GAAGE,UAAU,GAAGE,SAAS;CACrD;;CCbA,MAAMG,oBAA4C,GAAG;GACpDC,CAAC,EAAE,MAAM;GACTC,MAAM,EAAE,MAAM;GACdC,CAAC,EAAE,QAAQ;GACXC,EAAE,EAAE,QAAQ;GACZC,CAAC,EAAE,eAAe;GAClBC,GAAG,EAAE,eAAe;GACpBC,CAAC,EAAE,WAAW;GACdC,GAAG,EAAE,WAAW;GAChBC,GAAG,EAAE;CACN,CAAC;AAED,CAAO,SAASC,wBAAwB,CAAC3B,IAAuB,EAChE;GACC,MAAM4B,MAAc,GAAGX,oBAAoB,CAACjB,IAAI,CAAC6B,OAAO,EAAE,CAAC;GAC3D,IAAID,MAAM,KAAKE,SAAS,EACxB;KACC,OAAO;OAAE9B,IAAI,EAAE;MAAM;;GAGtB,OAAO;KACN+B,QAAQ,EAAGC,WAAwB,IAAkB;OACpD,IAAIC,2BAAW,CAACD,WAAW,CAAC,IAAI,CAACA,WAAW,CAAC/B,SAAS,CAAC2B,MAAM,CAAC,EAC9D;SACCI,WAAW,CAACE,YAAY,CAACN,MAAM,CAAC;;OAGjC,OAAOI,WAAW;MAClB;KACDhC,IAAI,EAAE;IACN;CACF;;CCFO,SAASmC,iBAAiB,CAACC,MAAc,EAAEC,MAAkB,EAAEC,SAAkB,GAAG,IAAI,EAC/F;GACC,MAAMC,MAAoB,GAAGF,MAAM,CAACG,eAAe,EAAE;GACrD,MAAMC,MAAoB,GAAG,IAAIC,6BAAY,CAAC;KAAEH;IAAQ,CAAC;GACzD,MAAMI,GAAmB,GAAGF,MAAM,CAACG,KAAK,CAACR,MAAM,CAAC;GAChD,MAAMS,QAA2B,GAAGF,GAAG,CAACG,WAAW,EAAE;;;;GAIrD,IAAIC,YAAY,GAAG,EAAE;GACrB,KAAK,MAAMC,OAAO,IAAIH,QAAQ,EAC9B;KACC,MAAMI,KAAK,GAAGC,sBAAsB,CAACF,OAAO,EAAEX,MAAM,CAAC;KACrD,IAAIY,KAAK,KAAK,IAAI,EAClB;OACCF,YAAY,GAAG,CAAC,GAAGA,YAAY,EAAE,GAAGE,KAAK,CAAC;;;GAI5C,OAAOX,SAAS,GAAGa,mBAAmB,CAACJ,YAAY,CAAC,GAAGA,YAAY;CACpE;CAEA,SAASG,sBAAsB,CAC9BlD,IAAuB,EACvBqC,MAAkB,EAClBe,WAA+C,GAAG,IAAIC,GAAG,EAAE,EAC3DC,iBAAqC,GAAG,IAAI,EAE7C;GACC,IAAItD,IAAI,YAAYuD,iCAAiB,EACrC;KACC,OAAO,CAACC,oCAAoB,EAAE,CAAC;;GAGhC,IAAIxD,IAAI,YAAYyD,6BAAa,EACjC;KACC,OAAO,CAACC,8BAAc,EAAE,CAAC;;GAG1B,IAAIX,YAAgC,GAAG,EAAE;GACzC,IAAIY,kBAAkB,GAAG,IAAI;GAE7B,MAAMC,iBAA4C,GAAGC,qBAAqB,CAAC7D,IAAI,EAAEqC,MAAM,CAAC;GACxF,MAAMyB,eAA8C,GAAGF,iBAAiB,GAAGA,iBAAiB,CAAC5D,IAAI,CAAC,GAAG,IAAI;GACzG,IAAI+D,aAAa,GAAG,IAAI;GACxB,IAAID,eAAe,KAAK,IAAI,EAC5B;KACCC,aAAa,GAAGD,eAAe,CAACE,KAAK;KACrC,MAAMC,cAAc,GAAGH,eAAe,CAAC9D,IAAI;KAC3C2D,kBAAkB,GAAGO,KAAK,CAACC,OAAO,CAACF,cAAc,CAAC,GAAGA,cAAc,CAACA,cAAc,CAACG,MAAM,GAAG,CAAC,CAAC,GAAGH,cAAc;KAC/G,IAAIN,kBAAkB,KAAK,IAAI,EAC/B;OACC,KAAK,MAAM,GAAGU,gBAAgB,CAAC,IAAIjB,WAAW,EAC9C;SACCO,kBAAkB,GAAGU,gBAAgB,CAACV,kBAAkB,EAAEL,iBAAiB,CAAC;SAC5E,IAAI,CAACK,kBAAkB,EACvB;WACC;;;OAIF,IAAIA,kBAAkB,EACtB;SACCZ,YAAY,CAACuB,IAAI,CAAC,IAAIJ,KAAK,CAACC,OAAO,CAACF,cAAc,CAAC,GAAGA,cAAc,GAAG,CAACN,kBAAkB,CAAC,CAAC,CAAC;;;KAI/F,IAAIY,cAAI,CAACC,UAAU,CAACV,eAAe,CAAC/B,QAAQ,CAAC,EAC7C;OACCqB,WAAW,CAACqB,GAAG,CAACzE,IAAI,CAAC6B,OAAO,EAAE,EAAEiC,eAAe,CAAC/B,QAAQ,CAAC;;;GAI3D,MAAM2C,QAAQ,GAAG1E,IAAI,CAAC8C,WAAW,EAAE;GACnC,IAAI6B,iBAAiB,GAAG,EAAE;GAC1B,KAAK,MAAMC,KAAK,IAAIF,QAAQ,EAC5B;KACCC,iBAAiB,CAACL,IAAI,CACrB,GAAGpB,sBAAsB,CACxB0B,KAAK,EACLvC,MAAM,EACN,IAAIgB,GAAG,CAACD,WAAW,CAAC,EACpBO,kBAAkB,CAClB,CACD;;GAGF,IAAIY,cAAI,CAACC,UAAU,CAACT,aAAa,CAAC,EAClC;KACCY,iBAAiB,GAAGZ,aAAa,CAACY,iBAAiB,CAAC;;;;GAIrD,IAAIb,eAAe,KAAK,IAAI,EAC5B;KACC,IAAI9D,IAAI,CAAC6E,OAAO,EAAE,KAAKC,0BAAU,CAACC,YAAY,EAC9C;OACC,MAAMC,WAA8B,GAAGhF,IAAI;OAC3C,IAAIgF,WAAW,CAACC,MAAM,EAAE,EACxB;SACCN,iBAAiB,GAAG,CAACO,+BAAe,CAACF,WAAW,CAACG,aAAa,EAAE,CAAC,EAAE,GAAGR,iBAAiB,CAAC;QACxF,MAED;SACCA,iBAAiB,GAAG,CACnBO,+BAAe,CAACF,WAAW,CAACG,aAAa,EAAE,CAAC,EAC5C,GAAGR,iBAAiB,EACpBO,+BAAe,CAACF,WAAW,CAACI,aAAa,EAAE,CAAC,CAC5C;;MAEF,MAED;OACCT,iBAAiB,GAAG,CAACO,+BAAe,CAAClF,IAAI,CAACqF,QAAQ,EAAE,CAAC,EAAE,GAAGV,iBAAiB,CAAC;;;GAI9E,IAAIhB,kBAAkB,KAAK,IAAI,EAC/B;;;KAGCZ,YAAY,GAAG,CAAC,GAAGA,YAAY,EAAE,GAAG4B,iBAAiB,CAAC;IACtD,MACI,IAAIW,8BAAc,CAAC3B,kBAAkB,CAAC,EAC3C;;;KAGCA,kBAAkB,CAAC4B,MAAM,CAAC,GAAGZ,iBAAiB,CAAC;;GAGhD,OAAO5B,YAAY;CACpB;AAEA,CAAO,SAASyC,qBAAqB,CAACxD,WAAsC,EAC5E;GACC,IAAIsD,8BAAc,CAACtD,WAAW,CAAC,IAAIA,WAAW,CAACyD,QAAQ,EAAE,KAAK,KAAK,EACnE;KACC,OAAO,KAAK;;GAGb,OAAO,EAAEC,gCAAgB,CAAC1D,WAAW,CAAC,IAAIA,WAAW,CAACyD,QAAQ,EAAE,KAAK,KAAK,CAAC;CAC5E;AAEA,CAAO,SAAStC,mBAAmB,CAACJ,YAAgC,EACpE;GACC,MAAM4C,MAAM,GAAG,EAAE;GACjB,IAAIC,gBAAgB,GAAG,IAAI;GAC3B,IAAIC,UAAU,GAAG,CAAC;GAElB,KAAK,MAAM7D,WAAW,IAAIe,YAAY,EACtC;KACC,IAAI+C,gCAAgB,CAAC9D,WAAW,CAAC,EACjC;OACC6D,UAAU,EAAE;OAEZ;;KAGD,IAAIL,qBAAqB,CAACxD,WAAW,CAAC,EACtC;OACC,IAAI4D,gBAAgB,KAAK,IAAI,IAAIC,UAAU,IAAI,CAAC,EAChD;SACCF,MAAM,CAACrB,IAAI,CAAC,GAAGyB,sBAAsB,CAACF,UAAU,GAAG,CAAC,CAAC,CAAC;SACtDD,gBAAgB,GAAGI,oCAAoB,EAAE;SACzCL,MAAM,CAACrB,IAAI,CAACsB,gBAAgB,CAAC;QAC7B,MACI,IAAIC,UAAU,KAAK,CAAC,EACzB;SACCD,gBAAgB,CAACL,MAAM,CAAC/B,oCAAoB,EAAE,CAAC;;OAGhDoC,gBAAgB,CAACL,MAAM,CAACvD,WAAW,CAAC;MACpC,MAED;OACC,IAAI6D,UAAU,GAAG,CAAC,EAClB;SACCF,MAAM,CAACrB,IAAI,CAAC,GAAGyB,sBAAsB,CAACF,UAAU,GAAG,CAAC,CAAC,CAAC;;OAGvDF,MAAM,CAACrB,IAAI,CAACtC,WAAW,CAAC;OACxB4D,gBAAgB,GAAG,IAAI;;KAGxBC,UAAU,GAAG,CAAC;;GAGf,IAAIF,MAAM,CAACvB,MAAM,KAAK,CAAC,EACvB;KACC,OAAO,CAAC4B,oCAAoB,EAAE,CAAC;;GAGhC,OAAOL,MAAM;CACd;CAEA,SAASI,sBAAsB,CAACE,KAAa,GAAG,CAAC,EACjD;GACC,MAAMN,MAAM,GAAG,EAAE;GACjB,KAAK,IAAIvE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6E,KAAK,EAAE7E,CAAC,EAAE,EAC9B;KACCuE,MAAM,CAACrB,IAAI,CAAC0B,oCAAoB,EAAE,CAAC;;GAGpC,OAAOL,MAAM;CACd;CAEA,SAAS9B,qBAAqB,CAAC7D,IAAgB,EAAEqC,MAAkB,EACnE;GACC,MAAM6D,QAAgB,GAAGlG,IAAI,CAAC6B,OAAO,EAAE;GACvC,IAAIsE,iBAA0C,GAAG,IAAI;GACrD,MAAMC,SAA0B,GAAG/D,MAAM,CAACgE,kBAAkB,EAAE;GAC9D,MAAMC,WAAW,GAAGF,SAAS,CAACG,GAAG,CAACL,QAAQ,CAACM,WAAW,EAAE,CAAC;GACzD,IAAIF,WAAW,KAAKxE,SAAS,EAC7B;KACC,KAAK,MAAM2E,UAAU,IAAIH,WAAW,EACpC;OACC,MAAMI,gBAAkC,GAAGD,UAAU,CAACzG,IAAI,CAAC;OAC3D,IACC0G,gBAAgB,KAAK,IAAI,KACrBP,iBAAiB,KAAK,IAAI,IAAIA,iBAAiB,CAACQ,QAAQ,GAAGD,gBAAgB,CAACC,QAAQ,CAAC,EAE1F;SACCR,iBAAiB,GAAGO,gBAAgB;;;;GAKvC,IAAIP,iBAAiB,KAAK,IAAI,EAC9B;KACC,IAAID,QAAQ,KAAK,OAAO,EACxB;OACC,OAAOU,eAAe;;KAGvB,OAAO,IAAI;;GAGZ,OAAOT,iBAAiB,CAACM,UAAU;CACpC;CAEA,SAASG,eAAe,CAACC,QAAwB,EACjD;GACC,IAAIC,WAAkC,GAAGD,QAAQ,CAACE,UAAU,EAAE;GAC9DD,WAAW,GAAGA,WAAW,CACvBE,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,CAC7BC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;GAGnB,IAAIH,WAAW,KAAK,EAAE,EACtB;KACC,OAAO;OAAE9G,IAAI,EAAE;MAAM;;GAGtB,OAAO;KAAEA,IAAI,EAAEkF,+BAAe,CAAC4B,WAAW;IAAG;CAC9C;;CCjSO,SAASI,iBAAiB,CAAClH,IAAiB,EACnD;GACC,IAAI,CAACmH,gCAAgB,CAACnH,IAAI,CAAC,EAC3B;KACC,OAAO,KAAK;;GAGb,IAAIA,IAAI,CAACoH,OAAO,EAAE,EAClB;KACC,OAAO,IAAI;;GAGZ,OAAOpH,IAAI,CAAC8C,WAAW,EAAE,CAACuE,KAAK,CAAEzC,KAAK,IAAK;KAC1C,OACCkB,gCAAgB,CAAClB,KAAK,CAAC,IACnB3C,2BAAW,CAAC2C,KAAK,CAAC,IAAI,OAAO,CAAC0C,IAAI,CAAC1C,KAAK,CAAC2C,cAAc,EAAE,CAAE;IAEhE,CAAC;CACH;;CCbO,SAASC,mBAAmB,CAACvE,KAAuC,EAC3E;GACC,MAAMwE,YAAY,GAAG,CAAC,GAAGxE,KAAK,CAAC;;;GAG/B,OAAOwE,YAAY,CAACrD,MAAM,GAAG,CAAC,IAAI8C,iBAAiB,CAACO,YAAY,CAAC,CAAC,CAAC,CAAC,EACpE;KACCA,YAAY,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;;;GAI1B,OAAOD,YAAY,CAACrD,MAAM,GAAG,CAAC,IAAI8C,iBAAiB,CAACO,YAAY,CAACA,YAAY,CAACrD,MAAM,GAAG,CAAC,CAAC,CAAC,EAC1F;KACCqD,YAAY,CAACC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;GAG3B,OAAOD,YAAY;CACpB;;CCxBA;CAwBO,SAASE,eAAe,CAAC3F,WAAsC,EAAEK,MAAkB,EAC1F;GACC,MAAME,MAAoB,GAAGF,MAAM,CAACG,eAAe,EAAE;GACrD,MAAMoF,IAAoB,GAAGrF,MAAM,CAACsF,UAAU,EAAE;GAChD,MAAMC,gBAAgB,GAAGN,mBAAmB,CAACxF,WAAW,CAACc,WAAW,EAAE,CAAC;GAEvE,KAAK,MAAMiF,YAAY,IAAID,gBAAgB,EAC3C;KACCE,oBAAoB,CAACD,YAAY,EAAEH,IAAI,EAAEvF,MAAM,CAAC;;;;GAIjD,OAAOuF,IAAI;CACZ;CAEA,SAASI,oBAAoB,CAACC,WAAsC,EAAEC,UAAgB,EAAE7F,MAAkB,EAC1G;GACC,MAAM;KAAErC,IAAI;KAAEgE;IAA2B,GAAGmE,iBAAiB,CAACF,WAAW,EAAE5F,MAAM,CAAC;GAClF,IAAI,CAACrC,IAAI,EACT;KACC;;GAGD,MAAMuC,MAAoB,GAAGF,MAAM,CAACG,eAAe,EAAE;GACrD,MAAM4F,QAA4B,GAAG7F,MAAM,CAAC8F,cAAc,EAAE;GAC5D,MAAM3D,QAAQ,GAAGY,8BAAc,CAAC2C,WAAW,CAAC,GAAGA,WAAW,CAACnF,WAAW,EAAE,GAAG,EAAE;GAC7E,KAAK,MAAMwF,SAAS,IAAI5D,QAAQ,EAChC;KACCsD,oBAAoB,CAACM,SAAS,EAAEF,QAAQ,EAAE/F,MAAM,CAAC;;GAGlDrC,IAAI,CAACuI,WAAW,CAACH,QAAQ,CAAC;GAC1BF,UAAU,CAACK,WAAW,CAACvI,IAAI,CAAC;GAE5B,IAAIuE,cAAI,CAACC,UAAU,CAACR,KAAK,CAAC,EAC1B;KACC,MAAMwE,UAAU,GAAGxE,KAAK,CAACyE,IAAI,CAACR,WAAW,EAAEjI,IAAI,CAAC;KAChD,IAAIwI,UAAU,EACd;OACCxI,IAAI,CAAC0I,SAAS,EAAE,CAACC,YAAY,CAAC3I,IAAI,EAAEwI,UAAU,CAAC;;;CAGlD;CAEA,MAAMI,OAAO,GAAG,CACf,MAAM,EACN,QAAQ,EACR,eAAe,EACf,WAAW,CACX;CAED,SAAST,iBAAiB,CAACnG,WAAwB,EAAEK,MAAkB,EACvE;GACC,MAAMwG,IAAI,GAAG7G,WAAW,CAAC6C,OAAO,EAAE;GAClC,MAAMiE,SAA0B,GAAGzG,MAAM,CAAC0G,kBAAkB,EAAE;GAC9D,MAAMC,QAAwB,GAAGF,SAAS,CAACvC,GAAG,CAACsC,IAAI,CAAC;GACpD,IAAItE,cAAI,CAACC,UAAU,CAACwE,QAAQ,CAAC,EAC7B;KACC,OAAOA,QAAQ,CAAChH,WAAW,CAAC;;GAG7B,MAAMO,MAAoB,GAAGF,MAAM,CAACG,eAAe,EAAE;GACrD,IAAIP,2BAAW,CAACD,WAAW,CAAC,IAAIA,WAAW,CAAC6C,OAAO,EAAE,KAAK,MAAM,EAChE;KACC,MAAM7E,IAAoB,GAAGuC,MAAM,CAAC0G,UAAU,CAAC;OAC9CC,MAAM,EAAE,KAAK;OACbC,OAAO,EAAEnH,WAAW,CAACuF,cAAc;MACnC,CAAC;KAEF,IAAIvF,WAAW,CAACoH,SAAS,EAAE,KAAK,CAAC,EACjC;OACC,OAAO;SAAEpJ;QAAM;;KAGhB,IAAIiI,WAA2B,GAAGjI,IAAI;KACtC4I,OAAO,CAACS,OAAO,CAAEzH,MAAc,IAAW;OACzC,MAAM0H,QAAwB,GAAGR,SAAS,CAACvC,GAAG,CAAE,QAAO3E,MAAO,EAAC,CAAC;OAChE,IAAI2C,cAAI,CAACC,UAAU,CAAC8E,QAAQ,CAAC,EAC7B;SACCrB,WAAW,GAAGqB,QAAQ,CAACtH,WAAW,EAAEiG,WAAW,CAAC,IAAIA,WAAW;;MAEhE,CAAC;KAEF,OAAO;OACNjI,IAAI,EAAEiI;MACN;;GAGF,IAAInC,gCAAgB,CAAC9D,WAAW,CAAC,EACjC;KACC,OAAO;OACNhC,IAAI,EAAEuC,MAAM,CAACgH,aAAa;MAC1B;;GAGF,IAAIC,0BAAU,CAACxH,WAAW,CAAC,EAC3B;KACC,OAAO;OACNhC,IAAI,EAAEuC,MAAM,CAACkH,SAAS;MACtB;;GAGF,IAAIxH,2BAAW,CAACD,WAAW,CAAC,IAAIsD,8BAAc,CAACtD,WAAW,CAAC,EAC3D;KACC,MAAMhC,IAAoB,GAAGuC,MAAM,CAAC0G,UAAU,CAAC;OAC9CC,MAAM,EAAE,KAAK;OACbC,OAAO,EAAEnH,WAAW,CAACuF,cAAc;MACnC,CAAC;KAEF,OAAO;OAAEvH;MAAM;;GAGhB,OAAO;KAAEA,IAAI,EAAE;IAAM;CACtB;;CCzIA;AACA,CAGO,SAAS0J,YAAY,CAAC1J,IAAgB,EAAE2J,GAAW,EAAEtH,MAAkB,EAC9E;GACC,MAAME,MAAM,GAAGF,MAAM,CAACG,eAAe,EAAE;GACvC,MAAMwC,WAAW,GAAGzC,MAAM,CAACqH,aAAa,CAAC;KAAEC,IAAI,EAAEF;IAAK,CAAC;GACvD3E,WAAW,CAACuD,WAAW,CAACvI,IAAI,CAAC;GAE7B,OAAOgF,WAAW;CACnB;;CCT2E;CAAA;CAAA;CAa3E;CACA;CACA;AACA,CAAe,MAAM8E,UAAU,CAC/B;GAKCC,WAAW,CAACC,UAAsB,EAClC;KAAA;OAAA;OAAA,OAL0B;;KAAI;OAAA;OAAA,OACR;;KAAK;OAAA;OAAA,OACE,MAAM;;KAIlC,4CAAI,8BAAeA,UAAU;;GAG9B,OAAOnI,OAAO,GACd;KACC,MAAM,IAAIoI,KAAK,CAAC,8CAA8C,CAAC;;GAGhE,OAAOC,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,EAAE;;GAGV8H,YAAY,GACZ;KACC,OAAO,IAAI;;GAGZC,YAAY,GACZ;KACC,OAAO,IAAI;;GAGZC,cAAc,GACd;KACC,OAAO,IAAI;;GAGZC,SAAS,GACT;;;GAIAzI,OAAO,GACP;KACC,OAAO,IAAI,CAACkI,WAAW,CAAClI,OAAO,EAAE;;GAGlC0I,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZC,gBAAgB,GAChB;KACC,OAAO,4CAAI,4BAAaA,gBAAgB,EAAE;;GAG3CC,eAAe,CAAC,GAAGC,IAAqB,EACxC;KACC,4CAAI,wCAAoBC,8BAAa,yCACpC,IAAI,uCACJ,GAAGD,IAAI,CACP;;GAGFE,WAAW,GACX;KACC,+CAAO,IAAI;;GAGZC,OAAO,GACP;KACC,4CAAI,4BAAc,IAAI;KACtB,4CAAI;KACJ,4CAAI,wCAAoB,IAAI;;CAE9B;;CC3Fe,MAAMC,WAAW,SAASC,6BAAY,CACrD;GACChB,WAAW,GACX;KACC,KAAK,EAAE;KACP,IAAI,CAACiB,iBAAiB,CAAC,8BAA8B,CAAC;;GAGvDC,YAAY,GACZ;KACC,MAAM,IAAIhB,KAAK,CAAC,2CAA2C,CAAC;;GAG7DiB,MAAM,GACN;KACC,MAAM,IAAIjB,KAAK,CAAC,qCAAqC,CAAC;;CAExD;;;;ACnBA;CAGA;CACA;CACA;CAFA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAGA,CAAe,MAAMkB,MAAM,SAASL,WAAW,CAC/C;GAAA;KAAA;KAAA;OAAA;;KAAA;OAAA;OAAA,OACmB;;KAAI;OAAA;OAAA,OACD;;KAAI;OAAA;OAAA,OACN;;KAAK;OAAA;OAAA,OACH;;KAAK;OAAA;OAAA,OACE;;KAAK;OAAA;OAAA,OACJ;;KAAI;OAAA;OAAA,OACP;;;GAE1BM,UAAU,CAACjC,OAA6B,EACxC;KACC,IAAI5E,cAAI,CAAC8G,QAAQ,CAAClC,OAAO,CAAC,EAC1B;OACC,IAAI,CAAC8B,YAAY,EAAE,CAACK,SAAS,GAAGnC,OAAO;MACvC,MACI,IAAI5E,cAAI,CAACgH,aAAa,CAACpC,OAAO,CAAC,EACpC;OACC,IAAI,CAAC8B,YAAY,EAAE,CAAC1F,MAAM,CAAC4D,OAAO,CAAC;;;GAIrCqC,SAAS,CAAC5J,MAAc,EACxB;KACC,4CAAI,sBAAWA,MAAM;;GAGtBwH,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZnJ,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZwL,YAAY,CAAC5C,IAAY,EACzB;KACC,4CAAI,4BAAcA,IAAI;;GAGvB6C,YAAY,GACZ;KACC,+CAAO,IAAI;;GAGZC,UAAU,CAACC,OAAsB,EACjC;KACC,IAAIrH,cAAI,CAACsH,cAAc,CAACD,OAAO,CAAC,EAChC;OACCE,aAAG,CAACC,IAAI,CAAC,IAAI,CAACd,YAAY,EAAE,EAAE,OAAO,EAAEe,cAAI,CAAC9C,MAAM,CAAC0C,OAAO,CAAC,CAAC;MAC5D,MACI,IAAIA,OAAO,KAAK,IAAI,EACzB;OACCE,aAAG,CAACC,IAAI,CAAC,IAAI,CAACd,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;;;GAI9CgB,wBAAwB,GACxB;KACC,4CAAI,0DAA6B,IAAI;;GAGtCC,uBAAuB,GACvB;KACC,4CAAI,0DAA6B,KAAK;;GAGvCC,8BAA8B,GAC9B;KACC,+CAAO,IAAI;;GAGZC,SAAS,CAACC,MAAe,GAAG,IAAI,EAChC;KACC,IAAIA,MAAM,6CAAK,IAAI,mBAAQ,EAC3B;OACC;;KAGD,4CAAI,sBAAWA,MAAM;KACrB,IAAIA,MAAM,EACV;OACCP,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACrB,YAAY,EAAE,EAAE,UAAU,CAAC;MAC7C,MAED;OACCa,aAAG,CAACS,WAAW,CAAC,IAAI,CAACtB,YAAY,EAAE,EAAE,UAAU,CAAC;;;GAIlDuB,QAAQ,GACR;KACC,+CAAO,IAAI;;GAGZC,WAAW,CAACC,QAAiB,GAAG,IAAI,EACpC;KACC,IAAIA,QAAQ,6CAAK,IAAI,uBAAU,EAC/B;OACC;;KAGD,4CAAI,0BAAaA,QAAQ;KACzB,IAAIA,QAAQ,EACZ;OACCZ,aAAG,CAACC,IAAI,CAAC,IAAI,CAACd,YAAY,EAAE,EAAE;SAAEyB,QAAQ,EAAE;QAAM,CAAC;MACjD,MAED;OACCZ,aAAG,CAACC,IAAI,CAAC,IAAI,CAACd,YAAY,EAAE,EAAE;SAAEyB,QAAQ,EAAE;QAAM,CAAC;;;GAInDC,OAAO,GACP;KACC,IAAI,CAACF,WAAW,CAAC,IAAI,CAAC;;GAGvBG,MAAM,GACN;KACC,IAAI,CAACH,WAAW,CAAC,KAAK,CAAC;;GAGxBI,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZC,qBAAqB,GACrB;KACC,OAAO,4CAAI,0CAAsB,IAAI;;GAGtCC,kBAAkB,CAACC,EAAY,EAC/B;KACC,IAAIzI,cAAI,CAACC,UAAU,CAACwI,EAAE,CAAC,EACvB;OACC,4CAAI,wCAAoBA,EAAE;;;GAI5BC,qBAAqB,GACrB;KACC,+CAAO,IAAI;;GAGZhC,YAAY,GACZ;KACC,IAAI,4CAAI,8BAAgB,IAAI,EAC5B;OACC,4CAAI,4BAAciC,aAAG,CAAChC,MAAM,cAAC;;;;gBAIlB,CAA+B;;;IAG1C,GAHa,4CAAI,8BAAciC,IAAI,CAAC,IAAI,CAAC,CAGxC;;KAGF,+CAAO,IAAI;;GAGZjC,MAAM,GACN;KACC,OAAO,IAAI,CAACD,YAAY,EAAE;;CAO5B;CAAC,yBAHA;GACC,IAAI,CAACmC,IAAI,CAAC,SAAS,CAAC;CACrB;;CCnLM,SAASC,mBAAmB,CAACC,IAAY,EAChD;GACC,IAAI3H,MAAM,GAAG,EAAE;GACf,MAAM4H,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,gBAAgB,CAAC;GAE1C,KAAK,MAAMC,IAAI,IAAIF,KAAK,EACxB;KACC,IAAIE,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,UAAU,EAC1C;OACC;;KAGD9H,MAAM,IAAK,MAAK8H,IAAI,CAACzG,UAAU,CAAC,UAAU,EAAE,MAAM,CAAE,MAAK;;GAG1D,OAAOrB,MAAM;CACd;;CChBA;CAsBO,MAAM+H,SAAS,SAASC,2BAAW,CAC1C;GACC,OAAO9I,OAAO,GACd;KACC,OAAO,OAAO;;GAGf,OAAO+I,KAAK,CAAC5N,IAAe,EAC5B;KACC,OAAO,IAAI0N,SAAS,CAAC1N,IAAI,CAAC6N,KAAK,CAAC;;GAGjCC,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAMW,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,YAAY,CAAC;KACpD5G,OAAO,CAACiL,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC;KAE3C,IAAI1J,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,qBAAb,cAAeC,KAAK,CAAC,EAC7C;OACCrC,aAAG,CAACQ,QAAQ,CAACtJ,OAAO,EAAE+K,MAAM,CAACG,KAAK,CAACC,KAAK,CAAC;;KAG1C,OAAOnL,OAAO;;GAGfoL,SAAS,CAACC,QAAmB,EAAE3N,MAAmB,EAAEqN,MAAoB,EACxE;KACC,OAAO,KAAK;;GAGb,OAAOO,SAAS,GAChB;KACC,OAAO;OACNC,UAAU,EAAGvO,IAAU,KAAM;SAC5ByG,UAAU,EAAGzD,OAAoB,IAA0B;WAC1D,OAAO;aAAEhD,IAAI,EAAEwO,gBAAgB;YAAI;UACnC;SACD7H,QAAQ,EAAE;QACV;MACD;;GAGF,OAAO8H,UAAU,CAACC,cAAqC,EACvD;KACC,MAAM1O,IAAI,GAAGwO,gBAAgB,EAAE;KAC/BxO,IAAI,CAACwL,SAAS,CAACkD,cAAc,CAAC9M,MAAM,CAAC;KACrC5B,IAAI,CAAC2O,SAAS,CAACD,cAAc,CAACE,MAAM,CAAC;KACrC5O,IAAI,CAAC6O,YAAY,CAACH,cAAc,CAACI,SAAS,CAAC;KAE3C,OAAO9O,IAAI;;GAGZ+O,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrBlG,IAAI,EAAE;MACN;;GAGFmG,SAAS,GACT;KACC,OAAO,KAAK;;GAGbvJ,QAAQ,GACR;KACC,OAAO,KAAK;;GAGbwJ,cAAc,CAACC,WAAwB,EACvC;KACC,OAAO,KAAK;;GAGbC,eAAe,CAAC1O,SAAyB,EACzC;;;;;KAKC2O,YAAY,CAAC,IAAI,CAAC;KAElB,OAAO,IAAI;;GAGZC,UAAU,GACV;KACC,OAAO,KAAK;;GAGbC,YAAY,GACZ;KACC,OAAO,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bb;;AAEA,CAAO,SAASd,gBAAgB,GAChC;GACC,OAAOe,qCAAqB,CAAC,IAAI7B,SAAS,EAAE,CAAC;CAC9C;AAEA,CAAO,SAAS8B,YAAY,CAACxP,IAAoC,EACjE;GACC,OAAOA,IAAI,YAAY0N,SAAS;CACjC;AAEA,CAAO,SAAS0B,YAAY,CAACK,SAAoB,EACjD;GACC,IAAI,CAACD,YAAY,CAACC,SAAS,CAAC,EAC5B;KACC,OAAO,KAAK;;GAGb,IAAIC,WAAW,GAAGD,SAAS;GAC3B,KAAK,MAAM7K,KAAK,IAAI6K,SAAS,CAAC3M,WAAW,EAAE,EAC3C;KACC,IAAIwC,8BAAc,CAACV,KAAK,CAAC,IAAIc,gCAAgB,CAACd,KAAK,CAAC,EACpD;OACC8K,WAAW,GAAGA,WAAW,CAACC,WAAW,CAAC/K,KAAK,CAAC;MAC5C,MAED;OACC8K,WAAW,GAAGA,WAAW,CAACC,WAAW,CAAC3J,oCAAoB,EAAE,CAACT,MAAM,CAACX,KAAK,CAAC,CAAC;;;GAI7E6K,SAAS,CAACG,MAAM,EAAE;GAElB,OAAO,IAAI;CACZ;;CCjLO,SAASC,YAAY,CAAC7P,IAAiB,EAAE8P,SAA6C,EAC7F;GACC,IAAIC,MAAmB,GAAG/P,IAAI;GAC9B,OAAO+P,MAAM,KAAK,IAAI,IAAIA,MAAM,CAACrH,SAAS,EAAE,KAAK,IAAI,IAAI,CAACoH,SAAS,CAACC,MAAM,CAAC,EAC3E;KACCA,MAAM,GAAGA,MAAM,CAACC,gBAAgB,EAAE;;GAGnC,OAAOF,SAAS,CAACC,MAAM,CAAC,GAAGA,MAAM,GAAG,IAAI;CACzC;;CCRO,SAASE,YAAY,CAACjQ,IAA+C,EAC5E;GACC,OAAO,CAACsF,8BAAc,CAACtF,IAAI,CAAC,IAAI0F,gCAAgB,CAAC1F,IAAI,CAAC,KAAK,CAACA,IAAI,CAACyF,QAAQ,EAAE,IAAI,CAACzF,IAAI,CAACkQ,gBAAgB,EAAE;CACxG;;CCDO,SAASC,UAAU,CAAC1P,SAA+B,EAAEmJ,aAAgC,EAC5F;GACC,IAAInJ,SAAS,KAAK,IAAI,EACtB;KACC,OAAO,IAAI;;GAGZ,MAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAME,UAAuB,GAAGF,MAAM,CAACG,OAAO,EAAE;GAChD,MAAMmC,OAAoB,GAAG4G,aAAa,EAAE;GAC5C,IAAIwG,mCAAmB,CAACxP,UAAU,CAAC,EACnC;KACC,MAAMyP,UAAU,GAAGzP,UAAU,CAAC0P,aAAa,EAAE;KAC7C,IAAID,UAAU,EACd;OACCA,UAAU,CAACpJ,OAAO,CAACjE,OAAO,EAAE,IAAI,CAAC;MACjC,MAED;OACCpC,UAAU,CAAC2E,MAAM,CAACvC,OAAO,CAAC;;KAG3B,OAAOA,OAAO;;GAGf,MAAMuN,OAAO,GAAG,IAAIC,GAAG,EAAE;GACzB,MAAMvN,KAAoB,GAAGxC,SAAS,CAACyJ,QAAQ,EAAE;GACjD,MAAMuG,kBAAkB,GAAGZ,YAAY,CAACpP,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EAAEoP,YAAY,CAAC;GACjF,IAAIQ,kBAAkB,IAAI,CAACxN,KAAK,CAACyN,QAAQ,CAACD,kBAAkB,CAAC,EAC7D;KACCxN,KAAK,CAAC0N,OAAO,CAACF,kBAAkB,CAAC;;GAGlCF,OAAO,CAACK,GAAG,CAAC5N,OAAO,CAAC6N,MAAM,EAAE,CAAC;GAE7B,IAAIC,SAAS,GAAG,IAAI;GACpB,KAAK,MAAM9Q,IAAI,IAAIiD,KAAK,EACxB;KACC,IAAI,CAACgN,YAAY,CAACjQ,IAAI,CAAC,IAAIuQ,OAAO,CAACQ,GAAG,CAAC/Q,IAAI,CAAC6Q,MAAM,EAAE,CAAC,EACrD;OACC;;KAGD,MAAMG,eAAe,GAAGnB,YAAY,CACnC7P,IAAI,CAAC0I,SAAS,EAAE,EACfR,UAAuB,IAAcqI,OAAO,CAACQ,GAAG,CAAC7I,UAAU,CAAC2I,MAAM,EAAE,CAAC,CACtE;KAED,IAAIG,eAAe,EACnB;OACC;;KAGD,IAAIF,SAAS,EACb;OACCA,SAAS,GAAG,KAAK;OACjB9Q,IAAI,CAACiH,OAAO,CAACjE,OAAO,CAAC;OACrBA,OAAO,CAACuC,MAAM,CAACvF,IAAI,CAAC;MACpB,MAED;OACCgD,OAAO,CAACuC,MAAM,CAACvF,IAAI,CAAC;;KAGrBuQ,OAAO,CAACK,GAAG,CAAC5Q,IAAI,CAAC6Q,MAAM,EAAE,CAAC;;GAG3B,OAAO7N,OAAO;CACf;;CC9BA;AACA,CAAO,MAAMiO,oBAAwD,GAAGzS,6BAAa,CAAC,sBAAsB,CAAC;;CAE7G;AACA,CAAO,MAAM0S,oBAAoC,GAAG1S,6BAAa,CAAC,sBAAsB,CAAC;;CAEzF;AACA,CAAO,MAAM2S,oBAAoC,GAAG3S,6BAAa,CAAC,sBAAsB,CAAC;CAAC;CAAA;AAE1F,CAAO,MAAM4S,WAAW,SAAStH,UAAU,CAC3C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAEd,4CAAI;KACJ,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,OAAO;;GAGf,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACqL,SAAS,CAAC;;GAGnBvD,YAAY,GACZ;KACC,OAAO;OACNgE,KAAK,EAAE,OAAyB;SAC/B1H,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAEwO,gBAAgB,EAAE;aACxBxK,KAAK,EAAGW,iBAAqC,IAAyB;eACrE,OAAOxB,mBAAmB,CAACwB,iBAAiB,CAAC;;YAE9C;UACD;SACDgC,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN+D,KAAK,EAAGnM,WAAwB,IAAyB;SACxD,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAS;UAC5C;;MAEF;;GAGFQ,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAE3D,SAAS;SACpB4D,QAAQ,EAAI7B,SAAoB,IAAK;WACpC,IAAI8B,aAAa,GAAG,IAAI;WACxB9B,SAAS,CAAC3M,WAAW,EAAE,CAACuG,OAAO,CAAEzE,KAAgC,IAAK;aACrE,IAAIY,qBAAqB,CAACZ,KAAK,CAAC,EAChC;eACC,IAAI2M,aAAa,KAAK,IAAI,EAC1B;iBACC,MAAMC,SAAS,GAAGxL,oCAAoB,EAAE;iBACxCpB,KAAK,CAACqC,OAAO,CAACuK,SAAS,CAAC;iBACxBA,SAAS,CAACjM,MAAM,CAACX,KAAK,CAAC;iBACvB2M,aAAa,GAAGC,SAAS;gBACzB,MAED;iBACCD,aAAa,CAAChM,MAAM,CAACX,KAAK,CAAC;;cAE5B,MAED;eACC2M,aAAa,GAAG,IAAI;;YAErB,CAAC;WAEF,OAAO,KAAK;;QAEb,CAAC;OACFE,SAAS,EAAE;SACVtD,KAAK,EAAE;;MAER;;CAqGH;CAAC,8BAjGA;GACC,IAAI,CAAC1D,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BT,oBAAoB,EACnBU,OAAO,IAAK;KACZ,MAAMlC,SAAS,GAAGjB,gBAAgB,EAAE;KACpC,IAAIjK,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IAAIpN,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAACxI,OAAO,CAAC,EACvE;OACC,MAAMlG,KAAK,GAAGd,iBAAiB,CAACwP,OAAO,CAACxI,OAAO,EAAE,IAAI,CAACoB,SAAS,EAAE,EAAE,KAAK,CAAC;OACzEkF,SAAS,CAAClK,MAAM,CAAC,GAAGpC,mBAAmB,CAACF,KAAK,CAAC,CAAC;OAC/C4O,yCAAwB,CAACpC,SAAS,CAAC;MACnC,MAED;OACCA,SAAS,CAAClK,MAAM,CAACS,oCAAoB,EAAE,CAAC;OACxC6L,yCAAwB,CAACpC,SAAS,CAAC;;KAGpCA,SAAS,CAACqC,WAAW,EAAE;KAEvB,OAAO,IAAI;IACX,EACDC,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BR,oBAAoB,EACpB,MAAM;KACL,MAAMzQ,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACC,MAAMgP,SAAS,GAAGjB,gBAAgB,EAAE;OACpC2B,UAAU,CAAC1P,SAAS,EAAE,MAAMgP,SAAS,CAAC;OAEtC,IAAIA,SAAS,CAACrI,OAAO,EAAE,EACvB;SACCqI,SAAS,CAAClK,MAAM,CAACS,oCAAoB,EAAE,CAAC;;OAGzCyJ,SAAS,CAACqC,WAAW,EAAE;;KAGxB,OAAO,IAAI;IACX,EACDC,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BP,oBAAoB,EACpB,MAAM;KACL,MAAM1Q,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,IAAIgP,SAAS,GAAGyC,oCAAmB,CAACzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EAAE2O,YAAY,CAAC;KAC7E,IAAI,CAACC,SAAS,EACd;OACCA,SAAS,GAAGyC,oCAAmB,CAACzR,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE,EAAE2O,YAAY,CAAC;;KAGzEJ,YAAY,CAACK,SAAS,CAAC;KAEvB,OAAO,IAAI;IACX,EACDsC,oCAAoB,CACpB,CACD;CACF;CAAC,gCAGD;GACC,IAAI,CAACxH,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,OAAO,EAAE,MAAc;KACvE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,2CAA2C,CAAC;KAC9DiH,MAAM,CAAC5G,YAAY,CAAC,OAAO,CAAC;KAC5B4G,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC1DF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAIJ,MAAM,CAAC7F,QAAQ,EAAE,EACrB;WACC,IAAI,CAACjC,SAAS,EAAE,CAACmI,eAAe,CAACvB,oBAAoB,CAAC;UACtD,MACI,IAAI,IAAI,CAAC5G,SAAS,EAAE,CAACoI,cAAc,EAAE,KAAK9T,WAAW,CAACC,UAAU,EACrE;WACC,IAAI,CAACyL,SAAS,EAAE,CAACmI,eAAe,CAACzB,oBAAoB,CAAC;UACtD,MAED;WACC,IAAI,CAAC1G,SAAS,EAAE,CAACmI,eAAe,CAACxB,oBAAoB,CAAC;;QAEvD,CAAC;MACF,CAAC;KAEF,OAAOmB,MAAM;IACb,CAAC;CACH;;;;;;;;;;;;;;;CC5OD;CACA;CACA;CACA;CACA;CAsBO,SAASO,4BAA4B,CAACC,OAAoB,EACjE;GACC,MAAM7S,IAAI,GAAG8S,yBAAyB,EAAE;GAExC,OAAO;KAAE9S;IAAM;CAChB;AAEA,CAAO,MAAM+S,kBAAkB,SAASpF,2BAAW,CACnD;GACC,OAAO9I,OAAO,GACd;KACC,OAAO,iBAAiB;;GAGzB,OAAO+I,KAAK,CAAC5N,IAAwB,EACrC;KACC,OAAO,IAAI+S,kBAAkB,CAAC/S,IAAI,CAAC6N,KAAK,CAAC;;GAG1CC,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAM2Q,GAAG,GAAGhF,QAAQ,CAACpE,aAAa,CAAC,KAAK,CAAC;KAEzC,IAAIrF,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,8CAAb,cAAe+E,OAAO,qBAAtB,sBAAwB9J,OAAO,CAAC,EACxD;OACC2C,aAAG,CAACQ,QAAQ,CAAC0G,GAAG,EAAEjF,MAAM,CAACG,KAAK,CAAC+E,OAAO,CAAC9J,OAAO,CAAC;;KAGhD,OAAO6J,GAAG;;GAGX5E,SAAS,CAACC,QAA4B,EAAE2E,GAAgB,EAAEjF,MAAoB,EAC9E;KACC,OAAO,KAAK;;GAGb,OAAOO,SAAS,GAChB;KACC,OAAO;OACN4E,GAAG,EAAGL,OAAoB,IAAK;SAC9B,IAAI,CAACA,OAAO,CAACM,YAAY,CAAC,sBAAsB,CAAC,EACjD;WACC,OAAO,IAAI;;SAGZ,OAAO;WACN1M,UAAU,EAAEmM,4BAA4B;WACxCjM,QAAQ,EAAE;UACV;;MAEF;;GAGF,OAAO8H,UAAU,CAACC,cAA4C,EAC9D;KACC,OAAOoE,yBAAyB,EAAE;;GAGnCM,SAAS,GACT;KACC,MAAMpQ,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,KAAK,CAAC;KAC7C5G,OAAO,CAACiL,YAAY,CAAC,sBAAsB,EAAE,MAAM,CAAC;KAEpD,OAAO;OAAEjL;MAAS;;GAGnB+L,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrBlG,IAAI,EAAE,iBAAiB;OACvBwK,OAAO,EAAE;MACT;;GAGF/D,YAAY,GACZ;KACC,OAAO,IAAI;;GAGZY,gBAAgB,GAChB;KACC,OAAO,IAAI;;GAGZoD,uBAAuB,GACvB;KACC,OAAOC,kBAAkB,EAAE;;GAG5BvE,SAAS,GACT;KACC,OAAO,KAAK;;GAGbwE,cAAc,CAACxT,IAAiB,EAChC;KACC,OAAO,KAAK;;GAGbiP,cAAc,CAACC,WAAwB,EACvC;KACC,OAAO,KAAK;;GAGbuE,YAAY,CAACzT,IAAiB,EAC9B;KACC,MAAMqQ,UAAU,GAAG,IAAI,CAACC,aAAa,EAAE;KACvC,MAAMoD,YAAY,GACjBpO,8BAAc,CAACtF,IAAI,CAAC,IAAI0F,gCAAgB,CAAC1F,IAAI,CAAC,GAC3CA,IAAI,GACJgG,oCAAoB,EAAE,CAACT,MAAM,CAACvF,IAAI,CACrC;KAED,IAAIqQ,UAAU,KAAK,IAAI,EACvB;OACC,IAAI,CAAC9K,MAAM,CAACmO,YAAY,CAAC;MACzB,MAED;OACCrD,UAAU,CAACoD,YAAY,CAACC,YAAY,CAAC;;KAGtC,OAAOA,YAAY;;GAGpB/D,WAAW,CAAC3P,IAAiB,EAC7B;KACC,MAAM0T,YAAY,GACjBpO,8BAAc,CAACtF,IAAI,CAAC,IAAI0F,gCAAgB,CAAC1F,IAAI,CAAC,GAC3CA,IAAI,GACJgG,oCAAoB,EAAE,CAACT,MAAM,CAACvF,IAAI,CACrC;KAED,IAAI,CAACuF,MAAM,CAACmO,YAAY,CAAC;KAEzB,OAAOA,YAAY;;CAErB;AAEA,CAAO,SAASZ,yBAAyB,GACzC;GACC,OAAO,IAAIC,kBAAkB,EAAE;CAChC;AAEA,CAAO,SAASY,qBAAqB,CAAC3T,IAAoC,EAC1E;GACC,OAAOA,IAAI,YAAY+S,kBAAkB;CAC1C;;CC9KA;CAUO,MAAMa,oBAAoB,SAASC,wBAAQ,CAClD;GACC,OAAOhP,OAAO,GACd;KACC,OAAO,oBAAoB;;GAG5B,OAAO+I,KAAK,CAAC5N,IAA0B,EACvC;KACC,OAAO,IAAI4T,oBAAoB,CAAC5T,IAAI,CAAC8T,MAAM,EAAE9T,IAAI,CAAC6N,KAAK,CAAC;;GAGzDC,SAAS,CAACC,MAAoB,EAC9B;KACC,OAAO,KAAK,CAACD,SAAS,CAACC,MAAM,CAAC;;GAG/B,OAAOU,UAAU,CAACC,cAAkC,EACpD;KACC,OAAOqF,2BAA2B,CAACrF,cAAc,CAACpB,IAAI,CAAC;;GAGxDyB,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrBlG,IAAI,EAAE;MACN;;CAEH;AAEA,CAAO,SAASkL,2BAA2B,CAACzG,IAAI,GAAG,EAAE,EACrD;GACC,OAAOiC,qCAAqB,CAAC,IAAIqE,oBAAoB,CAACtG,IAAI,CAAC,CAAC;CAC7D;AAEA,CAAO,SAAS0G,uBAAuB,CAAChU,IAAoC,EAC5E;GACC,OAAOA,IAAI,YAAY4T,oBAAoB;CAC5C;;CCjDA;AACA,CAoDO,MAAMK,sBAAsB,GAAGzV,6BAAa,CAAC,wBAAwB,CAAC;AAC7E,CAAO,MAAM0V,sBAAsB,GAAG1V,6BAAa,CAAC,wBAAwB,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;AAE9E,CAAO,MAAM2V,aAAa,SAASrK,UAAU,CAC7C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAEd,4CAAI;KACJ,4CAAI;KACJ,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,SAAS;;GAGjB,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CACN+R,WAAW,EACXC,gBAAgB,EAChBtB,kBAAkB,EAClBa,oBAAoB,CACpB;;GAGFzJ,YAAY,GACZ;KACC,OAAO;OACN8I,OAAO,EAAE,OAAyB;SACjCxM,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,MAAMsU,KAAa,GAClB/P,cAAI,CAACsH,cAAc,CAAC7L,IAAI,CAACuU,QAAQ,EAAE,CAAC,GACjCC,gBAAgB,CAACxU,IAAI,CAACuU,QAAQ,EAAE,CAAC,GACjCjC,aAAG,CAACC,UAAU,CAAC,2BAA2B,CAC7C;WAED,OAAO;aACNvS,IAAI,EAAEuT,kBAAkB,CAAC,KAAK,CAAC;aAC/BvP,KAAK,EAAGW,iBAAqC,IAAyB;eACrE,OAAO,CACN8P,uBAAuB,EAAE,CAAClP,MAAM,CAACwO,2BAA2B,CAACO,KAAK,CAAC,CAAC,EACpExB,yBAAyB,EAAE,CAACvN,MAAM,CAAC,GAAGpC,mBAAmB,CAACwB,iBAAiB,CAAC,CAAC,CAC7E;;YAEF;UACD;SACDgC,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN6I,OAAO,EAAGyB,WAAwB,IAAyB;SAC1D,MAAMnS,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SACjD,MAAMmS,SAAS,GAAGD,WAAW,CAAC5R,WAAW,EAAE,CAAC,CAAC,CAAC;SAC9C,MAAMwR,KAAK,GAAGE,gBAAgB,CAACG,SAAS,CAACpN,cAAc,EAAE,CAAC;SAC1D,MAAMqN,KAAK,GAAGN,KAAK,KAAKhC,aAAG,CAACC,UAAU,CAAC,2BAA2B,CAAC,GAAG,EAAE,GAAG+B,KAAK;SAEhF,OAAO;WACNtU,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE,SAAS;aAAE+K;YAAO;UACrD;QACD;OACD,eAAe,EAAG5U,IAAsB,IAAyB;SAChE,OAAO;WACNA,IAAI,EAAE;UACN;QACD;OACD,iBAAiB,EAAGA,IAAwB,IAAyB;SACpE,MAAMuC,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAAC8F,cAAc;UAC3B;;MAEF;;GAGFgC,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CACN;SACCoO,SAAS,EAAE+C;QACX,EACD;SACC/C,SAAS,EAAE0B,kBAAkB;SAC7BzB,QAAQ,EAAIuD,WAA+B,IAAK;WAC/CA,WAAW,CAAC/R,WAAW,EAAE,CAACuG,OAAO,CAAEzE,KAAgC,IAAK;aACvE,IAAIY,qBAAqB,CAACZ,KAAK,CAAC,EAChC;eACC,MAAM4M,SAAS,GAAGxL,oCAAoB,EAAE;eACxCpB,KAAK,CAACqC,OAAO,CAACuK,SAAS,CAAC;eACxBA,SAAS,CAACjM,MAAM,CAACX,KAAK,CAAC;;YAExB,CAAC;WAEF,OAAO,KAAK;;QAEb,CACD;OACD6M,SAAS,EAAE;SACVwB,OAAO,EAAE,SAAS;SAClB,iBAAiB,EAAE;;MAEpB;;CAyRH;CAAC,kCArRA;GACC,IAAI,CAAC1I,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,SAAS,EAAE,MAAc;KACzE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,oDAAoD,CAAC;KACvEiH,MAAM,CAAC5G,YAAY,CAAC,SAAS,CAAC;KAC9B4G,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,yBAAyB,CAAC,CAAC;KAC5DF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAIJ,MAAM,CAAC7F,QAAQ,EAAE,EACrB;WACC,IAAI,CAACjC,SAAS,EAAE,CAACmI,eAAe,CAACwB,sBAAsB,CAAC;UACxD,MAED;WACC,IAAI,CAAC3J,SAAS,EAAE,CAACmI,eAAe,CAACuB,sBAAsB,CAAC;;QAEzD,CAAC;MACF,CAAC;KAEF,OAAO5B,MAAM;IACb,CAAC;CACH;CAAC,gCAGD;GACC,IAAI,CAAC5H,eAAe;;;;;GAKnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BoD,wCAAwB,EACxB,4CAAI,kDAAwB3H,IAAI,CAAC,IAAI,CAAC,EACtC4E,oCAAoB,CACpB,EAED,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BqD,iCAAiB,EACjB,4CAAI,8BAAc5H,IAAI,CAAC,IAAI,CAAC,EAC5B6H,uCAAuB,CACvB,EAED,IAAI,CAACzK,SAAS,EAAE,CAACmH,eAAe,CAC/BuD,wCAAwB,EACvBC,KAAoB,IAAK;KACzB,MAAMzU,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACC,MAAM0U,gBAAkC,GAAGjD,oCAAmB,CAC7DzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EACzBb,IAAiB,IAAKoV,mBAAmB,CAACpV,IAAI,CAAC,CAChD;OAED,IAAImV,gBAAgB,EACpB;SACC,MAAME,QAAqB,GAAGF,gBAAgB,CAACG,cAAc,CAAC7U,SAAS,CAAC;SACxE,IAAI4U,QAAQ,EACZ;WACCA,QAAQ,CAACvD,WAAW,EAAE;;SAGvB,OAAO,IAAI;;;KAIb,OAAO,KAAK;IACZ,EACDC,oCAAoB,CACpB,EAED,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B6D,6BAAa,EACb,4CAAI,8BAAcpI,IAAI,CAAC,IAAI,CAAC,EAC5B6H,uCAAuB,CACvB,EAED,IAAI,CAACzK,SAAS,EAAE,CAACmH,eAAe,CAC/BuC,sBAAsB,EACrBtC,OAAO,IAAK;KACZ,IAAI,CAACpH,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;OAC7B,MAAM6B,KAAK,GAAG/P,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IAAIpN,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAAC2C,KAAK,CAAC,GAAG3C,OAAO,CAAC2C,KAAK,GAAGxS,SAAS;OAC3G,MAAMrB,SAAS,GAAGuR,6BAAa,EAAE;OACjC,MAAMiB,OAAO,GAAGuC,aAAa,CAAC/U,SAAS,EAAE6T,KAAK,CAAC;OAE/CrB,OAAO,CAACwC,YAAY,EAAE,CAACC,MAAM,EAAE;MAC/B,CAAC;KAEF,OAAO,IAAI;IACX,EACD3D,oCAAoB,CACpB,EAED,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BwC,sBAAsB,EACtB,MAAM;KACL,IAAI,CAAC3J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;OAC7B,MAAMhS,SAAyB,GAAGuR,6BAAa,EAAE;OACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;SACC;;OAGD,IAAIiU,WAAW,GAAGxC,oCAAmB,CAACzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EAAE8U,cAAc,CAAC;OACjF,IAAI,CAACjB,WAAW,EAChB;SACCA,WAAW,GAAGxC,oCAAmB,CAACzR,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE,EAAE8U,cAAc,CAAC;;OAG7EC,cAAc,CAAClB,WAAW,CAAC;MAC3B,CAAC;KAEF,OAAO,IAAI;IACX,EACD3C,oCAAoB,CACpB,CACD;CACF;CAAC,oCAGD;GACC,IAAI,CAACtH,eAAe;;;;GAInB,IAAI,CAACF,SAAS,EAAE,CAACsL,qBAAqB,CAACzB,WAAW,EAAGpU,IAAI,IAAK;KAC7D,MAAM0E,QAAQ,GAAG1E,IAAI,CAAC8C,WAAW,EAAE;KACnC,IAAI4B,QAAQ,CAACN,MAAM,KAAK,CAAC,IAAI,CAACgR,mBAAmB,CAAC1Q,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAACiP,qBAAqB,CAACjP,QAAQ,CAAC,CAAC,CAAC,CAAC,EACrG;OACC,KAAK,MAAME,KAAK,IAAIF,QAAQ,EAC5B;SACC,IAAIY,8BAAc,CAACV,KAAK,CAAC,IAAIc,gCAAgB,CAACd,KAAK,CAAC,EACpD;WACC5E,IAAI,CAACyT,YAAY,CAAC7O,KAAK,CAAC;UACxB,MAED;WACC5E,IAAI,CAACyT,YAAY,CAACzN,oCAAoB,EAAE,CAACT,MAAM,CAACX,KAAK,CAAC,CAAC;;;OAIzD5E,IAAI,CAAC4P,MAAM,EAAE;;IAEd,CAAC,EAEF,IAAI,CAACrF,SAAS,EAAE,CAACsL,qBAAqB,CAACxB,gBAAgB,EAAGrU,IAAsB,IAAK;KACpF,MAAM+P,MAAmB,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;KAC5C,IAAI,CAACiN,cAAc,CAAC5F,MAAM,CAAC,EAC3B;OACC/P,IAAI,CAACiH,OAAO,CAACjB,oCAAoB,EAAE,CAACT,MAAM,CAAC,GAAGvF,IAAI,CAAC8C,WAAW,EAAE,CAAC,CAAC;MAClE,MACI,IACH9C,IAAI,CAAC8V,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC9B,uBAAuB,CAAChU,IAAI,CAACsQ,aAAa,EAAE,CAAC,IAC5EtQ,IAAI,CAAC8V,eAAe,EAAE,GAAG,CAAC,EAE9B;OACCC,6BAAa,CAAC,IAAI,CAAC;OACnB,MAAMjP,WAAW,GAAG0N,gBAAgB,CAACxU,IAAI,CAACuH,cAAc,EAAE,CAAC;OAC3DvH,IAAI,CAACgW,KAAK,EAAE;OACZhW,IAAI,CAACuF,MAAM,CAACwO,2BAA2B,CAACjN,WAAW,CAAC,CAAC;OACrD9G,IAAI,CAAC0V,MAAM,EAAE;;IAEd,CAAC,EAEF,IAAI,CAACnL,SAAS,EAAE,CAACsL,qBAAqB,CAACjC,oBAAoB,EAAG5T,IAAsB,IAAK;KACxF,MAAM+P,MAAmB,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;KAC5C,IAAI,CAAC0M,mBAAmB,CAACrF,MAAM,CAAC,EAChC;OACC/P,IAAI,CAACiH,OAAO,CAACjB,oCAAoB,EAAE,CAACT,MAAM,CAACL,+BAAe,CAAClF,IAAI,CAACuH,cAAc,EAAE,CAAC,CAAC,CAAC;;IAEpF,CAAC,EAEF,IAAI,CAACgD,SAAS,EAAE,CAACsL,qBAAqB,CAAC9C,kBAAkB,EAAG/S,IAAI,IAAK;KACpE,MAAM+P,MAAM,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;KAC/B,IAAI,CAACiN,cAAc,CAAC5F,MAAM,CAAC,EAC3B;OACC,MAAMrL,QAAQ,GAAG1E,IAAI,CAAC8C,WAAW,EAAE;OACnC,KAAK,MAAM8B,KAAK,IAAIF,QAAQ,EAC5B;SACC,IAAIY,8BAAc,CAACV,KAAK,CAAC,IAAIc,gCAAgB,CAACd,KAAK,CAAC,EACpD;WACC5E,IAAI,CAACyT,YAAY,CAAC7O,KAAK,CAAC;UACxB,MAED;WACC5E,IAAI,CAACyT,YAAY,CAACzN,oCAAoB,EAAE,CAACT,MAAM,CAACX,KAAK,CAAC,CAAC;;;OAIzD5E,IAAI,CAAC4P,MAAM,EAAE;;IAEd,CAAC,CACF;CACF;CAAC,mCAGD;GACC,MAAMnP,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAACA,SAAS,CAACwV,WAAW,EAAE,IAAIxV,SAAS,CAACC,MAAM,CAACwV,MAAM,KAAK,CAAC,EAC9F;KACC,OAAO,KAAK;;GAGb,MAAMtV,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;GAC7C,MAAMsV,eAAe,GAAGvV,UAAU,CAACwV,kBAAkB,EAAE;GACvD,IAAID,eAAe,KAAK,IAAI,EAC5B;KACC,OAAO,KAAK;;GAGb,MAAME,SAAsB,GAAGF,eAAe,CAACG,kBAAkB,EAAE;GACnE,IAAI,CAACX,cAAc,CAACU,SAAS,CAAC,IAAIA,SAAS,CAACE,OAAO,EAAE,EACrD;KACC,OAAO,KAAK;;GAGbF,SAAS,CAACG,OAAO,CAAC,IAAI,CAAC;GAEvB,OAAO,IAAI;CACZ;CAAC,uBAEYtB,KAAoB,EACjC;GACC,IAAIA,KAAK,KAAKA,KAAK,CAACuB,OAAO,IAAIvB,KAAK,CAACwB,OAAO,CAAC,EAC7C;;KAEC,MAAMjW,SAAyB,GAAGkW,qCAAqB,EAAE;KACzD,IAAI1E,iCAAiB,CAACxR,SAAS,CAAC,IAAIA,SAAS,CAACwV,WAAW,EAAE,EAC3D;OACC,MAAMlG,MAAM,GAAGmC,oCAAmB,CACjCzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EACzBb,IAAI,IAAKsF,8BAAc,CAACtF,IAAI,CAAC,IAAI,CAACA,IAAI,CAACyF,QAAQ,EAAE,CAClD;OAED,IAAI2P,mBAAmB,CAACrF,MAAM,CAAC,EAC/B;SACC,MAAMsG,SAAsB,GAAGtG,MAAM,CAACrH,SAAS,EAAE;SACjD,IAAIiN,cAAc,CAACU,SAAS,CAAC,EAC7B;WACCA,SAAS,CAACO,UAAU,EAAE;WACtBb,6BAAa,CAACtV,SAAS,CAACmN,KAAK,EAAE,CAAC;WAEhC,OAAO,IAAI;;;;;GAMf,OAAO,KAAK;CACb;CAAC,uBAEYsH,KAAqB,EAClC;GACC,MAAMzU,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IACC,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAC1B,EAAEyU,KAAK,YAAY2B,cAAc,CAAC,IAClC3B,KAAK,CAAC4B,aAAa,KAAK,IAAI,EAEhC;KACC,OAAO,KAAK;;GAGb,MAAM3B,gBAAkC,GAAGjD,oCAAmB,CAC7DzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EACzBb,IAAiB,IAAKoV,mBAAmB,CAACpV,IAAI,CAAC,CAChD;GAED,IAAImV,gBAAgB,EACpB;KACC4B,oDAA+B,CAAC7B,KAAK,CAAC4B,aAAa,EAAErW,SAAS,CAAC;KAE/D,OAAO,IAAI;;GAGZ,OAAO,KAAK;CACb;AAGD,CAAO,SAAS+U,aAAa,CAAC/U,SAAyB,EAAE6T,KAAc,EACvE;GACC,IAAI,CAACrC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;KACC,OAAO,IAAI;;GAGZ,MAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAME,UAAuB,GAAGF,MAAM,CAACG,OAAO,EAAE;GAChD,MAAMoS,OAAoB,GAAG+D,cAAc,CAAC,IAAI,EAAE1C,KAAK,CAAC;GACxD,IAAIlE,mCAAmB,CAACxP,UAAU,CAAC,EACnC;KACC,MAAMyP,UAAU,GAAGzP,UAAU,CAAC0P,aAAa,EAAE;KAC7C,IAAID,UAAU,EACd;OACCA,UAAU,CAACpJ,OAAO,CAACgM,OAAO,EAAE,IAAI,CAAC;MACjC,MAED;OACCrS,UAAU,CAAC2E,MAAM,CAAC0N,OAAO,CAAC;;KAG3B,OAAOA,OAAO;;GAGf,MAAM1C,OAAO,GAAG,IAAIC,GAAG,EAAE;GACzB,MAAMvN,KAAoB,GAAGxC,SAAS,CAACyJ,QAAQ,EAAE;GACjD,MAAMuG,kBAAkB,GAAGZ,YAAY,CAACpP,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EAAEoP,YAAY,CAAC;GACjF,IAAIQ,kBAAkB,IAAI,CAACxN,KAAK,CAACyN,QAAQ,CAACD,kBAAkB,CAAC,EAC7D;KACCxN,KAAK,CAAC0N,OAAO,CAACF,kBAAkB,CAAC;;GAGlCF,OAAO,CAACK,GAAG,CAACqC,OAAO,CAACpC,MAAM,EAAE,CAAC;GAC7BN,OAAO,CAACK,GAAG,CAACqC,OAAO,CAACwC,YAAY,EAAE,CAAC5E,MAAM,EAAE,CAAC;GAC5CN,OAAO,CAACK,GAAG,CAACqC,OAAO,CAACgE,cAAc,EAAE,CAACpG,MAAM,EAAE,CAAC;GAE9C,IAAIC,SAAS,GAAG,IAAI;GACpB,KAAK,MAAM9Q,IAAI,IAAIiD,KAAK,EACxB;KACC,IAAI,CAACgN,YAAY,CAACjQ,IAAI,CAAC,IAAIuQ,OAAO,CAACQ,GAAG,CAAC/Q,IAAI,CAAC6Q,MAAM,EAAE,CAAC,EACrD;OACC;;KAGD,MAAMG,eAAe,GAAGnB,YAAY,CACnC7P,IAAI,CAAC0I,SAAS,EAAE,EACfR,UAAuB,IAAcqI,OAAO,CAACQ,GAAG,CAAC7I,UAAU,CAAC2I,MAAM,EAAE,CAAC,CACtE;KAED,IAAIG,eAAe,EACnB;OACC;;KAGD,IAAIF,SAAS,EACb;OACCA,SAAS,GAAG,KAAK;OACjB9Q,IAAI,CAACiH,OAAO,CAACgM,OAAO,CAAC;OACrBA,OAAO,CAACgE,cAAc,EAAE,CAAC1R,MAAM,CAACvF,IAAI,CAAC;MACrC,MAED;OACCiT,OAAO,CAACgE,cAAc,EAAE,CAAC1R,MAAM,CAACvF,IAAI,CAAC;;;;;;;;;;;;;;;;;;;KAmBtCuQ,OAAO,CAACK,GAAG,CAAC5Q,IAAI,CAAC6Q,MAAM,EAAE,CAAC;;GAG3B,OAAOoC,OAAO;CACf;AAEA,CAAO,SAASuB,gBAAgB,CAACF,KAAa,EAC9C;GACC,OAAOA,KAAK,CAAC4C,IAAI,EAAE,CACjBlQ,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAC5BC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CACjBD,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;CAE1B;;CC7hBA;CACA;CACA;CACA;CACA;CA2BO,SAASmQ,qBAAqB,CAACtE,OAAoB,EAC1D;GACC,MAAM7S,IAAI,GAAGyU,uBAAuB,EAAE;GAEtC,OAAO;KAAEzU;IAAM;CAChB;AAEA,CAAO,MAAMqU,gBAAgB,SAAS1G,2BAAW,CACjD;GAAA;KAAA;KAAA,KACCyJ,UAAU,GAAW,MAAM;KAAA,KAC3BC,OAAO,GAAWzY,WAAW;;GAE7B,OAAOiG,OAAO,GACd;KACC,OAAO,eAAe;;GAGvB,OAAO+I,KAAK,CAAC5N,IAAsB,EACnC;KACC,OAAO,IAAIqU,gBAAgB,CAACrU,IAAI,CAAC6N,KAAK,CAAC;;GAGxCC,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAM2Q,GAAG,GAAGhF,QAAQ,CAACpE,aAAa,CAAC,SAAS,CAAC;KAE7C,IAAIrF,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,8CAAb,cAAe+E,OAAO,qBAAtB,sBAAwBqB,KAAK,CAAC,EACtD;OACCxI,aAAG,CAACQ,QAAQ,CAAC0G,GAAG,EAAEjF,MAAM,CAACG,KAAK,CAAC+E,OAAO,CAACqB,KAAK,CAAC;;KAG9CxI,aAAG,CAACQ,QAAQ,CAAC0G,GAAG,EAAE,oBAAoB,CAAC;KAEvC,OAAOA,GAAG;;GAGX5E,SAAS,CAACC,QAA0B,EAAE2E,GAAgB,EAAEjF,MAAoB,EAC5E;KACC,OAAO,KAAK;;GAGb,OAAOO,SAAS,GAChB;KACC,OAAO;OACNgJ,OAAO,EAAGzE,OAAoB,IAAK;SAClC,OAAO;WACNpM,UAAU,EAAE0Q,qBAAqB;WACjCxQ,QAAQ,EAAE;UACV;;MAEF;;GAGF,OAAO8H,UAAU,CAACC,cAA0C,EAC5D;KACC,OAAO+F,uBAAuB,EAAE;;GAGjCrB,SAAS,GACT;KACC,MAAMpQ,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,SAAS,CAAC;KAEjD,OAAO;OAAE5G;MAAS;;GAGnB+L,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrBlG,IAAI,EAAE,eAAe;OACrBwK,OAAO,EAAE;MACT;;GAGFlE,eAAe,CAAC1O,SAAyB,EACzC;KACC,MAAMiU,WAAwB,GAAG,IAAI,CAAChM,SAAS,EAAE;KACjD,IAAI,CAACiN,cAAc,CAACjB,WAAW,CAAC,EAChC;OACC,OAAO,KAAK;;KAGb,OAAOkB,cAAc,CAAClB,WAAW,CAAC;;GAGnCY,cAAc,CAAC7U,SAAyB,EAAE8W,gBAAgB,GAAG,IAAI,EACjE;KACC,MAAMC,aAA0B,GAAG,IAAI,CAACxH,gBAAgB,EAAE;KAE1D,IAAI,CAAC2F,cAAc,CAAC6B,aAAa,CAAC,EAClC;OACC,MAAM,IAAIvN,KAAK,CACd,qDAAqD,CACrD;;KAGF,IAAIuN,aAAa,CAACjB,OAAO,EAAE,EAC3B;OACC,MAAM1B,WAA+B,GAAG,IAAI,CAAC4C,cAAc,EAAE;OAC7D,IAAI,CAAC9D,qBAAqB,CAACkB,WAAW,CAAC,EACvC;SACC,MAAM,IAAI5K,KAAK,CACd,6DAA6D,CAC7D;;OAGF,MAAMoG,UAAU,GAAGwE,WAAW,CAACvE,aAAa,EAAE;OAC9C,IAAIhL,8BAAc,CAAC+K,UAAU,CAAC,IAAI3K,gCAAgB,CAAC2K,UAAU,CAAC,EAC9D;SACC,OAAOA,UAAU;;OAGlB,MAAMmB,SAAS,GAAGxL,oCAAoB,EAAE;OACxC6O,WAAW,CAACtP,MAAM,CAACiM,SAAS,CAAC;OAE7B,OAAOA,SAAS;;KAGjB,MAAMA,SAAS,GAAGxL,oCAAoB,EAAE;KACxCwR,aAAa,CAAC7H,WAAW,CAAC6B,SAAS,EAAE+F,gBAAgB,CAAC;KAEtD,OAAO/F,SAAS;;GAGjBtB,gBAAgB,GAChB;KACC,OAAO,IAAI;;GAGZoD,uBAAuB,GACvB;KACC,OAAOC,kBAAkB,EAAE;;GAG5BvE,SAAS,GACT;KACC,OAAO,KAAK;;GAGbW,WAAW,CAAC+D,YAAyB,EACrC;KACC,MAAM5M,WAAW,GAAG4M,YAAY,CAACnM,cAAc,EAAE;KACjD,IAAI,CAACyO,KAAK,EAAE;KACZ,IAAI,CAACzQ,MAAM,CAACwO,2BAA2B,CAACS,gBAAgB,CAAC1N,WAAW,CAAC,CAAC,CAAC;KAEvE,OAAO,IAAI;;CAEb;AAEA,CAAO,SAAS2N,uBAAuB,GACvC;GACC,OAAO,IAAIJ,gBAAgB,EAAE;CAC9B;AAEA,CAAO,SAASe,mBAAmB,CAACpV,IAAoC,EACxE;GACC,OAAOA,IAAI,YAAYqU,gBAAgB;CACxC;AAEA,CAAO,SAASuB,cAAc,CAAClB,WAAwB,EACvD;GACC,IAAI,CAACiB,cAAc,CAACjB,WAAW,CAAC,EAChC;KACC,OAAO,KAAK;;GAGb,MAAMG,WAA+B,GAAGH,WAAW,CAACuC,cAAc,EAAE;GACpE,IAAIvH,WAAW,GAAGgF,WAAW;GAE7B,IAAIG,WAAW,KAAK,IAAI,EACxB;KACC,KAAK,MAAMjQ,KAAK,IAAIiQ,WAAW,CAAC/R,WAAW,EAAE,EAC7C;OACC,IAAIwC,8BAAc,CAACV,KAAK,CAAC,IAAIc,gCAAgB,CAACd,KAAK,CAAC,EACpD;SACC8K,WAAW,GAAGA,WAAW,CAACC,WAAW,CAAC/K,KAAK,CAAC;QAC5C,MAED;SACC8K,WAAW,GAAGA,WAAW,CAACC,WAAW,CAAC3J,oCAAoB,EAAE,CAACT,MAAM,CAACX,KAAK,CAAC,CAAC;;;;GAK9E8P,WAAW,CAAC9E,MAAM,EAAE;GAEpB,OAAO,IAAI;CACZ;;CC1NA;AACA,CAuBO,MAAMwE,WAAW,SAASzG,2BAAW,CAC5C;GAGC5D,WAAW,CAAC2N,IAAa,EAAEC,GAAa,EACxC;KACC,KAAK,CAACA,GAAG,CAAC;KAEV,IAAI,CAACC,MAAM,GAAGF,IAAI;;GAGnB,OAAO7S,OAAO,GACd;KACC,OAAO,SAAS;;GAGjB,OAAO+I,KAAK,CAAC5N,IAAiB,EAC9B;KACC,OAAO,IAAIoU,WAAW,CAACpU,IAAI,CAAC4X,MAAM,EAAE5X,IAAI,CAAC6N,KAAK,CAAC;;GAGhDC,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAMwV,OAAO,GAAG7J,QAAQ,CAACpE,aAAa,CAAC,SAAS,CAAC;KACjD,IAAIrF,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,8CAAb,cAAe+E,OAAO,qBAAtB,sBAAwBoD,SAAS,CAAC,EAC1D;OACCvK,aAAG,CAACQ,QAAQ,CAACuL,OAAO,EAAE9J,MAAM,CAACG,KAAK,CAAC+E,OAAO,CAACoD,SAAS,CAAC;;KAGtDwB,OAAO,CAACH,IAAI,GAAG,IAAI,CAACE,MAAM;KAE1BE,eAAK,CAAC3K,IAAI,CAAC0K,OAAO,EAAE,QAAQ,EAAE,MAAM;OACnC,MAAMH,IAAI,GAAGrV,MAAM,CAAC0V,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM,IAAI,CAACzB,OAAO,EAAE,CAAC;OAC/D,IAAImB,IAAI,KAAKG,OAAO,CAACH,IAAI,EACzB;SACCrV,MAAM,CAACoQ,MAAM,CAAC,MAAM,IAAI,CAACmE,UAAU,EAAE,CAAC;;MAEvC,CAAC;KAEF,OAAOiB,OAAO;;GAGfzJ,SAAS,CAACC,QAAqB,EAAE2E,GAAuB,EAAEjF,MAAoB,EAC9E;KACC,IAAIM,QAAQ,CAACuJ,MAAM,KAAK,IAAI,CAACA,MAAM,EACnC;OACC5E,GAAG,CAAC0E,IAAI,GAAG,IAAI,CAACE,MAAM;;KAGvB,OAAO,KAAK;;GAGb,OAAOtJ,SAAS,GAChB;KACC,OAAO;OACNuJ,OAAO,EAAGhF,OAA2B,IAAK;SACzC,OAAO;WACNpM,UAAU,EAAGoR,OAA2B,IAAiC;aACxE,MAAMI,MAAM,GAAG1T,cAAI,CAAC2T,SAAS,CAACL,OAAO,CAACH,IAAI,CAAC,GAAGG,OAAO,CAACH,IAAI,GAAG,IAAI;aAEjE,OAAO;eAAE1X,IAAI,EAAEgX,cAAc,CAACiB,MAAM;cAAG;YACvC;WACDtR,QAAQ,EAAE;UACV;;MAEF;;GAGF,OAAO8H,UAAU,CAACC,cAAqC,EACvD;KACC,OAAO6E,kBAAkB,CAAC7E,cAAc,CAACgJ,IAAI,CAAC;;GAG/CtE,SAAS,CAAC/Q,MAAqB,EAC/B;KACC,MAAMwV,OAAO,GAAG7J,QAAQ,CAACpE,aAAa,CAAC,SAAS,CAAC;KACjD,IAAI,IAAI,CAACgO,MAAM,EACf;OACCC,OAAO,CAAC5J,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;;KAGnC,OAAO;OAAEjL,OAAO,EAAE6U;MAAS;;GAG5B9I,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrB2I,IAAI,EAAE,IAAI,CAACE,MAAM;OACjB/O,IAAI,EAAE,SAAS;OACfwK,OAAO,EAAE;MACT;;GAGF/D,YAAY,GACZ;KACC,OAAO,IAAI;;GAGZD,UAAU,GACV;KACC,OAAO,KAAK;;GAGb9J,MAAM,CAAC,GAAG4S,aAA4B,EACtC;KACC,KAAK,MAAMnY,IAAI,IAAImY,aAAa,EAChC;OACC,IAAI/C,mBAAmB,CAACpV,IAAI,CAAC,EAC7B;SACC,MAAM2U,SAA2B,GAAG3U,IAAI;SACxC,IAAI,IAAI,CAACyV,YAAY,EAAE,KAAK,IAAI,EAChC;WACC,KAAK,CAAClQ,MAAM,CAACoP,SAAS,CAAC;UACvB,MAED;WACC,IAAI,CAACc,YAAY,EAAE,CAACO,KAAK,EAAE;WAC3B,IAAI,CAACP,YAAY,EAAE,CAAClQ,MAAM,CAACwO,2BAA2B,CAAC/T,IAAI,CAACuH,cAAc,EAAE,CAAC,CAAC;;QAE/E,MACI,IAAIoM,qBAAqB,CAAC3T,IAAI,CAAC,EACpC;SACC,MAAM6U,WAA+B,GAAG7U,IAAI;SAC5C,IAAI,IAAI,CAACiX,cAAc,EAAE,KAAK,IAAI,EAClC;WACC,KAAK,CAAC1R,MAAM,CAACsP,WAAW,CAAC;UACzB,MAED;WACC,IAAI,CAACoC,cAAc,EAAE,CAAC1R,MAAM,CAAC,GAAGsP,WAAW,CAAC/R,WAAW,EAAE,CAAC;;QAE3D,MACI,IAAIwC,8BAAc,CAACtF,IAAI,CAAC,IAAI0F,gCAAgB,CAAC1F,IAAI,CAAC,EACvD;SACC,IAAI,CAACiX,cAAc,EAAE,CAAC1R,MAAM,CAACvF,IAAI,CAAC;QAClC,MAED;SACC,IAAI,CAACiX,cAAc,EAAE,CAAC1R,MAAM,CAACS,oCAAoB,EAAE,CAACT,MAAM,CAACvF,IAAI,CAAC,CAAC;;;KAInE,OAAO,IAAI;;GAGZyV,YAAY,GACZ;KACC,OAAO,IAAI,CAAC3S,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;;GAGrCmU,cAAc,GACd;KACC,OAAO,IAAI,CAACnU,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;;GAGrC0T,OAAO,CAACkB,IAAa,EACrB;KACC,MAAMU,QAAQ,GAAG,IAAI,CAACC,WAAW,EAAE;KACnCD,QAAQ,CAACR,MAAM,GAAGF,IAAI;;GAGvBnB,OAAO,GACP;KACC,OAAO,IAAI,CAAC+B,SAAS,EAAE,CAACV,MAAM;;GAG/BhB,UAAU,GACV;KACC,IAAI,CAACJ,OAAO,CAAC,CAAC,IAAI,CAACD,OAAO,EAAE,CAAC;;CAE/B;AAEA,CAAO,SAASS,cAAc,CAACiB,MAAe,EAAE3D,KAAa,GAAGhC,aAAG,CAACC,UAAU,CAAC,2BAA2B,CAAC,EAC3G;GACC,OAAOgB,kBAAkB,CAAC0E,MAAM,CAAC,CAAC1S,MAAM,CACvCkP,uBAAuB,EAAE,CAAClP,MAAM,CAACwO,2BAA2B,CAACO,KAAK,CAAC,CAAC,EACpExB,yBAAyB,EAAE,CAC3B;CACF;AAEA,CAAO,SAASS,kBAAkB,CAAC0E,MAAe,EAClD;GACC,OAAO,IAAI7D,WAAW,CAAC6D,MAAM,CAAC;CAC/B;AAEA,CAAO,SAAStC,cAAc,CAAC3V,IAAoC,EACnE;GACC,OAAOA,IAAI,YAAYoU,WAAW;CACnC;;;;;;;;;;;;;;;;;;;;;;;;;CCrNA;CAuBO,MAAMmE,mBAAmB,SAASC,6BAAa,CACtD;GAGCzO,WAAW,CAAC0O,MAAuB,EAAEd,GAAa,EAClD;KACC,KAAK,CAACA,GAAG,CAAC;KAAC,KAJZc,MAAM,GAAoB5Z,WAAW,CAACG,KAAK;KAK1C,IAAI,CAACyZ,MAAM,GAAGA,MAAM;;GAGrB,OAAO5T,OAAO,GACd;KACC,OAAO,kBAAkB;;GAG1B,OAAO+I,KAAK,CAAC5N,IAAyB,EACtC;KACC,OAAO,IAAIuY,mBAAmB,CAACvY,IAAI,CAACyY,MAAM,EAAEzY,IAAI,CAAC6N,KAAK,CAAC;;GAGxDyH,cAAc,CAAC7U,SAAyB,EAAE8W,gBAAyB,EACnE;KACC,IAAI,IAAI,CAACkB,MAAM,KAAK5Z,WAAW,CAACE,SAAS,EACzC;OACC,OAAO,KAAK,CAACuW,cAAc,CAAC7U,SAAS,EAAE8W,gBAAgB,CAAC;;KAGzD,IAAI,IAAI,CAACkB,MAAM,KAAK5Z,WAAW,CAACG,KAAK,EACrC;OACC,MAAM0F,QAAQ,GAAG,IAAI,CAAC5B,WAAW,EAAE;OACnC,MAAM4V,cAAc,GAAGhU,QAAQ,CAACN,MAAM;OAEtC,IACCsU,cAAc,IAAI,CAAC,IAChBhU,QAAQ,CAACgU,cAAc,GAAG,CAAC,CAAC,CAACnR,cAAc,EAAE,KAAK,IAAI,IACtD9G,SAAS,CAACwV,WAAW,EAAE,IACvBxV,SAAS,CAACC,MAAM,CAACiX,GAAG,KAAK,IAAI,CAAC9J,KAAK,IACnCpN,SAAS,CAACC,MAAM,CAACwV,MAAM,KAAKwC,cAAc,EAE9C;SACChU,QAAQ,CAACgU,cAAc,GAAG,CAAC,CAAC,CAAC9I,MAAM,EAAE;SACrC,MAAMpH,UAAU,GAAGxC,oCAAoB,EAAE;SACzC,IAAI,CAAC2J,WAAW,CAACnH,UAAU,EAAE+O,gBAAgB,CAAC;SAE9C,OAAO/O,UAAU;;OAGlB,IAAImQ,6BAAa,CAAC,OAAO,CAAC,EAC1B;SACC,OAAO,KAAK,CAACrD,cAAc,CAAC7U,SAAS,EAAE8W,gBAAgB,CAAC;;;KAI1D9W,SAAS,CAACmY,eAAe,EAAE;KAE3B,OAAO,IAAI;;;;;;;;;;GAUZ7J,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrB8J,IAAI,EAAE,IAAI,CAACJ,MAAM;OACjB5P,IAAI,EAAE,kBAAkB;OACxBwK,OAAO,EAAE;MACT;;GAGF,OAAO/E,SAAS,GAChB;KACC,OAAO;OACNwK,CAAC,EAAG9Y,IAAU,KAAqB;SAClCyG,UAAU,EAAGzD,OAAoB,IAA0B;WAC1D,OAAO;aAAEhD,IAAI,EAAEgG,oCAAoB;YAAI;UACvC;SACDW,QAAQ,EAAE;QACV,CAAC;OACFoS,EAAE,EAAG/Y,IAAU,KAAqB;SACnCyG,UAAU,EAAEuS,qBAAqB;SACjCrS,QAAQ,EAAE;QACV,CAAC;OACFsS,EAAE,EAAGjZ,IAAU,KAAqB;SACnCyG,UAAU,EAAEuS,qBAAqB;SACjCrS,QAAQ,EAAE;QACV,CAAC;OACFuS,EAAE,EAAGlZ,IAAU,KAAqB;SACnCyG,UAAU,EAAEuS,qBAAqB;SACjCrS,QAAQ,EAAE;QACV,CAAC;OACFwS,EAAE,EAAGnZ,IAAU,KAAqB;SACnCyG,UAAU,EAAEuS,qBAAqB;SACjCrS,QAAQ,EAAE;QACV,CAAC;OACFyS,EAAE,EAAGpZ,IAAU,KAAqB;SACnCyG,UAAU,EAAEuS,qBAAqB;SACjCrS,QAAQ,EAAE;QACV,CAAC;OACF0S,EAAE,EAAGrZ,IAAU,KAAqB;SACnCyG,UAAU,EAAEuS,qBAAqB;SACjCrS,QAAQ,EAAE;QACV;MACD;;GAGFwI,eAAe,GACf;KACC,MAAMzK,QAAQ,GAAG,IAAI,CAAC5B,WAAW,EAAE;;;KAGnC,IACC4B,QAAQ,CAACN,MAAM,KAAK,CAAC,IACjBnC,2BAAW,CAACyC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAIA,QAAQ,CAAC,CAAC,CAAC,CAAC6C,cAAc,EAAE,CAAC2P,IAAI,EAAE,KAAK,EAAG,EAE5E;OACC,MAAMoC,WAAW,GAAG,IAAI,CAAC7B,cAAc,EAAE;OACzC,IAAI6B,WAAW,KAAK,IAAI,EACxB;SACC,IAAI,CAACC,UAAU,EAAE;SACjB,IAAI,CAAC3J,MAAM,EAAE;SAEb,OAAO,IAAI;;OAGZ,MAAM4J,WAAW,GAAG,IAAI,CAAClD,kBAAkB,EAAE;OAC7C,IAAIkD,WAAW,KAAK,IAAI,EACxB;SACC,IAAI,CAACC,cAAc,EAAE;SACrB,IAAI,CAAC7J,MAAM,EAAE;SAEb,OAAO,IAAI;;OAGZ,MAAM1H,UAAU,GAAG,IAAI,CAACQ,SAAS,EAAE;OACnC,IACCR,UAAU,KAAK,IAAI,IAChB,CAACwR,2BAAW,CAACxR,UAAU,CAAC,IACxBhJ,MAAM,CAACya,cAAc,CAACzR,UAAU,CAAC,CAAC0R,cAAc,CAAC,iBAAiB,CAAC,EACvE;SACC,OAAO1R,UAAU,CAACiH,eAAe,EAAE;;;KAIrC,OAAO,KAAK;;GAGb,OAAOV,UAAU,CAACoL,uBAAsD,EACxE;KACC,OAAO,KAAK,CAACpL,UAAU,CAACoL,uBAAuB,CAAC;;CAElD;CAEA,SAASb,qBAAqB,CAAChW,OAAoB,EACnD;GACC,OAAO;KACNhD,IAAI,EAAEgG,oCAAoB,EAAE;KAC5BjE,QAAQ,EAAGC,WAAW,IAAK;OAC1B,IAAIC,2BAAW,CAACD,WAAW,CAAC,EAC5B;SACCA,WAAW,CAACE,YAAY,CAAC,MAAM,CAAC;;OAGjC,OAAOF,WAAW;;IAEnB;CACF;;CC9IA;AACA,CAAO,MAAM8X,wBAAwC,GAAGtb,6BAAa,CAAC,0BAA0B,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;AAElG,CAAO,MAAMub,eAAe,SAASjQ,UAAU,CAC/C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAEd,4CAAI;KACJ,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,WAAW;;GAGnB,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CACNkW,mBAAmB,EACnB;OACCtR,OAAO,EAAEuR,6BAAa;OACtBwB,IAAI,EAAGha,IAAmB,IAAK;SAC9B,OAAO,IAAIuY,mBAAmB,CAAClW,MAAM,CAACsQ,cAAc,EAAE,CAAC;QACvD;OACDsH,SAAS,EAAE1B;MACX,CACD;;GAGFpO,YAAY,GACZ;KACC,OAAO;OACN2O,CAAC,EAAE,OAAyB;SAC3BrS,UAAU,EAAGzG,IAAuB,IAAgCka,oBAAoB,CAACla,IAAI,CAAC;SAC9F2G,QAAQ,EAAE;QACV,CAAC;OACFwT,IAAI,EAAE,OAAyB;SAC9B1T,UAAU,EAAGzG,IAAuB,IAAgCka,oBAAoB,CAACla,IAAI,CAAC;SAC9F2G,QAAQ,EAAE;QACV,CAAC;OACFyT,KAAK,EAAE,OAAyB;SAC/B3T,UAAU,EAAGzG,IAAuB,IAAgCka,oBAAoB,CAACla,IAAI,CAAC;SAC9F2G,QAAQ,EAAE;QACV,CAAC;OACF0T,MAAM,EAAE,OAAyB;SAChC5T,UAAU,EAAGzG,IAAuB,IAAgCka,oBAAoB,CAACla,IAAI,CAAC;SAC9F2G,QAAQ,EAAE;QACV,CAAC;OACF2T,OAAO,EAAE,OAAyB;SACjC7T,UAAU,EAAGzG,IAAuB,IAAgCka,oBAAoB,CAACla,IAAI,CAAC;SAC9F2G,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACNoH,SAAS,EAAGxP,WAAwB,IAAyB;SAC5D,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAK;UACxC;QACD;OACD,kBAAkB,EAAG7H,WAAwB,IAAyB;SACrE,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAK;UACxC;;MAEF;;GAGFQ,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAEkH;QACX,CAAC;OACF9G,SAAS,EAAE;SACV7J,IAAI,EAAE,OAAO;SACb2S,GAAG,EAAE,MAAM;SACXjN,IAAI,EAAE,OAAO;SACbkE,SAAS,EAAE,GAAG;SACd,kBAAkB,EAAE,GAAG;SACvBgJ,SAAS,EAAE;;MAEZ;;CAiNH;CAAC,gCA7MA;GACC,IAAI,CAAC/P,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BoI,wBAAwB,EACxB,MAAM;KACL,MAAMrZ,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACCga,mCAAc,CAACha,SAAS,EAAE,MAAMuF,oCAAoB,EAAE,CAAC;;KAGxD,OAAO,IAAI;IACX,EACD0U,uCAAuB,CACvB,CACD;CACF;CAAC,+BAGD;GACC,IAAI,CAACjQ,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACsL,qBAAqB,CAAC8E,wBAAQ,EAAG/S,IAAc,IAAK;KACpE,MAAMgT,SAAS,GAAGhT,IAAI,CAACiT,YAAY,EAAE;KACrC,IAAI,CAAC1T,gCAAgB,CAACyT,SAAS,CAAC,EAChC;OACChT,IAAI,CAACrC,MAAM,CAACS,oCAAoB,EAAE,CAAC;;IAEpC,CAAC;;;;;GAMF,IAAI,CAACuE,SAAS,EAAE,CAACmH,eAAe,CAC/BoJ,oCAAoB,EACpB,4CAAI,oCAAiB3N,IAAI,CAAC,IAAI,CAAC,EAC/B4E,oCAAoB,CACpB,EAED,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BqJ,sCAAsB,EACtB,4CAAI,oCAAiB5N,IAAI,CAAC,IAAI,CAAC,EAC/B4E,oCAAoB,CACpB;;;;;GAMD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BsJ,sCAAsB,EACtB,4CAAI,wCAAmB7N,IAAI,CAAC,IAAI,CAAC,EACjC4E,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BuJ,uCAAuB,EACvB,4CAAI,wCAAmB9N,IAAI,CAAC,IAAI,CAAC,EACjC4E,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B6D,6BAAa,EACb,4CAAI,kCAAcpI,IAAI,CAAC,IAAI,CAAC,EAC5B4E,oCAAoB,CACpB,CACD;CACF;CAAC,uBAEY/R,IAAoC,EACjD;GACC,OAAOwP,YAAY,CAACxP,IAAI,CAAC,IAAIkb,WAAW,CAAClb,IAAI,CAAC,IAAI2V,cAAc,CAAC3V,IAAI,CAAC;CACvE;CAAC,yBAEYkV,KAAK,EAClB;GACC,IAAI,IAAI,CAAC3K,SAAS,EAAE,CAACoI,cAAc,EAAE,KAAK9T,WAAW,CAACE,SAAS,EAC/D;;KAEC,OAAO,KAAK;;GAGb,IAAI,IAAI,CAACwL,SAAS,EAAE,CAACoI,cAAc,EAAE,KAAK9T,WAAW,CAACC,UAAU,EAChE;KACCoW,KAAK,CAACiG,cAAc,EAAE;KACtB,IAAI,CAAC5Q,SAAS,EAAE,CAACkI,MAAM,CACtB,MAAM;OACL,MAAMhS,SAAS,GAAGuR,6BAAa,EAAE;OACjC,MAAM;SAAE8E;QAAe,GAAG5B,KAAK;OAC/B,IAAI4B,aAAa,KAAK,IAAI,IAAI7E,iCAAiB,CAACxR,SAAS,CAAC,EAC1D;SACCsW,oDAA+B,CAACD,aAAa,EAAErW,SAAS,CAAC;;MAE1D,EACD;OACCkJ,GAAG,EAAE;MACL,CACD;KAED,OAAO,IAAI;;;;GAIZ,MAAMmN,aAA2B,GAAG5B,KAAK,CAAC4B,aAAa;GACvD,IACC,CAACA,aAAa,IACXA,aAAa,CAACsE,KAAK,CAAChX,MAAM,KAAK,CAAC,IAC/B0S,aAAa,CAACsE,KAAK,CAAC,CAAC,CAAC,CAACvS,IAAI,KAAK,YAAY,IAAIiO,aAAa,CAACsE,KAAK,CAAC,CAAC,CAAC,CAACvS,IAAI,KAAK,eAAgB,EAErG;KACC,OAAO,KAAK;;GAGb,MAAMyE,IAAI,GAAGwJ,aAAa,CAACuE,OAAO,CAAC,YAAY,CAAC,IAAIvE,aAAa,CAACuE,OAAO,CAAC,eAAe,CAAC;GAC1F,MAAMC,aAAa,GAAG,IAAI,CAAChU,IAAI,CAACgG,IAAI,CAAC;GACrC,IAAI,CAACgO,aAAa,EAClB;KACC,OAAO,KAAK;;GAGbpG,KAAK,CAACiG,cAAc,EAAE;GACtBjG,KAAK,CAACqG,eAAe,EAAE;GAEvB,MAAMC,IAAI,GAAGnO,mBAAmB,CAACC,IAAI,CAAC;GACtC,MAAMmO,YAAY,GAAG,IAAIC,YAAY,EAAE;GACvCD,YAAY,CAACE,OAAO,CAAC,YAAY,EAAE7E,aAAa,CAACuE,OAAO,CAAC,YAAY,CAAC,CAAC;GACvEI,YAAY,CAACE,OAAO,CAAC,WAAW,EAAEH,IAAI,CAAC;GACvC,MAAMI,UAAU,GAAG,IAAI/E,cAAc,CAAC,OAAO,EAAE;KAC9CC,aAAa,EAAE2E,YAAY;KAC3BI,OAAO,EAAE,IAAI;KACbC,UAAU,EAAE;IACZ,CAAC;GAEF,IAAIF,UAAU,CAAC9E,aAAa,CAACsE,KAAK,CAAChX,MAAM,KAAK,CAAC,EAC/C;;KAECwX,UAAU,CAAC9E,aAAa,CAAC6E,OAAO,CAAC,YAAY,EAAE7E,aAAa,CAACuE,OAAO,CAAC,YAAY,CAAC,CAAC;KACnFO,UAAU,CAAC9E,aAAa,CAAC6E,OAAO,CAAC,WAAW,EAAEH,IAAI,CAAC;;GAGpD,IAAI,CAACjR,SAAS,EAAE,CAACwR,oBAAoB,EAAE,CAACC,aAAa,CAACJ,UAAU,CAAC;GAEjE,OAAO,IAAI;CACZ;CAAC,4BAGD;GACC,MAAMnb,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,IAAIA,SAAS,CAACwV,WAAW,EAAE,IAAIxV,SAAS,CAACC,MAAM,CAACwV,MAAM,KAAK,CAAC,EAC5F;KACC,MAAMG,SAAsB,GAAGnE,oCAAmB,CAACzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,0CAAE,IAAI,8BAAc;KACjG,4CAAI,IAAI,8BAAcwV,SAAS,GAC/B;OAAA;OACC,MAAMtG,MAAmB,GAAGsG,SAAS,CAAC3N,SAAS,EAAE;OACjD,IACCqH,MAAM,KAAK,IAAI,IACZA,MAAM,CAACO,aAAa,EAAE,KAAK+F,SAAS,KAEtC5V,SAAS,CAACC,MAAM,CAACiX,GAAG,+BAAKtB,SAAS,CAAC4F,kBAAkB,EAAE,qBAA9B,sBAAgCpL,MAAM,EAAE,KAC9DpQ,SAAS,CAACC,MAAM,CAACiX,GAAG,KAAKtB,SAAS,CAACxF,MAAM,EAAE,CAC9C,EAEF;SACCwF,SAAS,CAAC5C,YAAY,CAACzN,oCAAoB,EAAE,CAAC;;;;GAKjD,OAAO,KAAK;CACb;CAAC,8BAGD;GACC,MAAMvF,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,IAAIA,SAAS,CAACwV,WAAW,EAAE,EAC3D;KACC,MAAMI,SAAsB,GAAGnE,oCAAmB,CAACzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,0CAAE,IAAI,8BAAc;KACjG,4CAAI,IAAI,8BAAcwV,SAAS,GAC/B;OACC,MAAMtG,MAAmB,GAAGsG,SAAS,CAAC3N,SAAS,EAAE;OACjD,IAAIqH,MAAM,KAAK,IAAI,IAAIA,MAAM,CAAC8K,YAAY,EAAE,KAAKxE,SAAS,EAC1D;SACC,MAAM6F,eAAe,GAAG7F,SAAS,CAAC4F,kBAAkB,EAAE;SACtD,MAAME,cAAc,GAAG9F,SAAS,CAAC+F,iBAAiB,EAAE;SACpD,IAEED,cAAc,KAAK,IAAI,IACpB1b,SAAS,CAACC,MAAM,CAACiX,GAAG,KAAKwE,cAAc,CAACtL,MAAM,EAAE,IAChDpQ,SAAS,CAACC,MAAM,CAACwV,MAAM,KAAKiG,cAAc,CAACE,kBAAkB,EAAE,IAElEH,eAAe,KAAK,IAAI,IACrBzb,SAAS,CAACC,MAAM,CAACiX,GAAG,KAAKuE,eAAe,CAACrL,MAAM,EAAE,IACjDpQ,SAAS,CAACC,MAAM,CAACwV,MAAM,KAAKgG,eAAe,CAACG,kBAAkB,EACjE,IACA5b,SAAS,CAACC,MAAM,CAACiX,GAAG,KAAKtB,SAAS,CAACxF,MAAM,EAAE,IACxCpQ,SAAS,CAACC,MAAM,CAACwV,MAAM,KAAKG,SAAS,CAACgG,kBAAkB,EAC3D,EAEF;WACChG,SAAS,CAAC1G,WAAW,CAAC3J,oCAAoB,EAAE,CAAC;;;;;GAMjD,OAAO,KAAK;CACb;CAGD,SAASkU,oBAAoB,CAACoC,UAAsB,EACpD;GACC,OAAO;KACNtc,IAAI,EAAEgG,oCAAoB;;;;IAI1B;CACF;;;;;;;;;CC3WA;CAoBO,MAAMuW,aAAa,SAAS1I,wBAAQ,CAC3C;;;GAKC9J,WAAW,CAACuD,IAAY,EAAEkP,aAAyC,EAAE7E,GAAa,EAClF;KACC,KAAK,CAACrK,IAAI,EAAEqK,GAAG,CAAC;KAAC,KAJlBN,OAAO,GAAWzY,WAAW;KAK5B,IAAI,CAAC6d,eAAe,GAAGD,aAAa;;GAGrC,OAAO3X,OAAO,GACd;KACC,OAAO,YAAY;;GAGpB,OAAO+I,KAAK,CAAC5N,IAAmB,EAChC;KACC,OAAO,IAAIuc,aAAa,CACvBvc,IAAI,CAAC8T,MAAM,EACX9T,IAAI,CAACyc,eAAe,IAAI3a,SAAS,EACjC9B,IAAI,CAAC6N,KAAK,CACV;;GAGF6O,gBAAgB,GAChB;KACC,MAAMC,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACF,eAAe;;GAG5B3O,SAAS,CAACC,MAAoB,EAC9B;KACC,MAAM/K,OAAO,GAAG,KAAK,CAAC8K,SAAS,CAACC,MAAM,CAAC;KACvC,MAAM6O,SAAS,GAAGC,sBAAsB,CACvC9O,MAAM,CAACG,KAAK,EACZ,IAAI,CAACuO,eAAe,CACpB;KAEDK,uCAAsB,CAAC9Z,OAAO,EAAE4Z,SAAS,CAAC;KAE1C,OAAO5Z,OAAO;;GAGfoL,SAAS,CAACC,QAAuB,EAAE2E,GAAgB,EAAEjF,MAAoB,EACzE;KACC,MAAM0E,MAAM,GAAG,KAAK,CAACrE,SAAS,CAACC,QAAQ,EAAE2E,GAAG,EAAEjF,MAAM,CAAC;KACrD,MAAMgP,aAAa,GAAGF,sBAAsB,CAAC9O,MAAM,CAACG,KAAK,EAAEG,QAAQ,CAACoO,eAAe,CAAC;KACpF,MAAMO,aAAa,GAAGH,sBAAsB,CAAC9O,MAAM,CAACG,KAAK,EAAE,IAAI,CAACuO,eAAe,CAAC;KAChF,IAAIM,aAAa,KAAKC,aAAa,EACnC;OACC,IAAID,aAAa,EACjB;SACCE,4CAA2B,CAACjK,GAAG,EAAE+J,aAAa,CAAC;;OAGhD,IAAIC,aAAa,EACjB;SACCF,uCAAsB,CAAC9J,GAAG,EAAEgK,aAAa,CAAC;;;KAI5C,OAAOvK,MAAM;;GAGd,OAAOhE,UAAU,CAACC,cAAuC,EACzD;KACC,MAAM1O,IAAI,GAAGkd,oBAAoB,CAACxO,cAAc,CAACpB,IAAI,EAAEoB,cAAc,CAAC8N,aAAa,CAAC;KACpFxc,IAAI,CAACwL,SAAS,CAACkD,cAAc,CAAC9M,MAAM,CAAC;KACrC5B,IAAI,CAACmd,SAAS,CAACzO,cAAc,CAAC0O,MAAM,CAAC;KACrCpd,IAAI,CAACqd,OAAO,CAAC3O,cAAc,CAACmK,IAAI,CAAC;KACjC7Y,IAAI,CAACsd,QAAQ,CAAC5O,cAAc,CAAC6O,KAAK,CAAC;KAEnC,OAAOvd,IAAI;;GAGZ+O,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrByN,aAAa,EAAE,IAAI,CAACE,gBAAgB,EAAE;OACtC7T,IAAI,EAAE,YAAY;OAClBwK,OAAO,EAAE;MACT;;;;GAIF7H,SAAS,CAAC5J,MAAc,EACxB;KACC,OAAO,IAAI;;GAGZsO,gBAAgB,GAChB;KACC,OAAO,IAAI;;GAGZoD,uBAAuB,GACvB;KACC,OAAOkK,eAAe,EAAE;;CAE1B;CAEA,SAASX,sBAAsB,CAC9B3O,KAAyB,EACzBsO,aAAwC,EAEzC;GACC,OACCA,aAAa,IACVtO,KAAK,IACLA,KAAK,CAACuP,aAAa,IACnBvP,KAAK,CAACuP,aAAa,CAACjB,aAAa,CAAC;CAEvC;AAEA,CAAO,SAASU,oBAAoB,CAAC5P,IAAY,EAAEkP,aAAyC,EAC5F;GACC,OAAOjN,qCAAqB,CAAC,IAAIgN,aAAa,CAACjP,IAAI,EAAEkP,aAAa,CAAC,CAAC;CACrE;AAEA,CAAO,SAASkB,gBAAgB,CAAC1d,IAAoD,EACrF;GACC,OAAOA,IAAI,YAAYuc,aAAa;CACrC;;CClJA;CA4BO,MAAMoB,QAAQ,SAAShQ,2BAAW,CACzC;GAAA;KAAA;KAAA,KACCyJ,UAAU,GAAG,cAAc;KAAA,KAC3BC,OAAO,GAAWzY,WAAW;;GAE7B,OAAOiG,OAAO,GACd;KACC,OAAO,MAAM;;GAGd,OAAO+I,KAAK,CAAC5N,IAAc,EAC3B;KACC,OAAO,IAAI2d,QAAQ,CAAC3d,IAAI,CAAC6N,KAAK,CAAC;;GAGhCC,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAMW,OAAoB,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC3D5G,OAAO,CAACiL,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC;KAE3C,IAAI1J,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,qBAAb,cAAe0P,IAAI,CAAC,EAC5C;OACC9R,aAAG,CAACQ,QAAQ,CAACtJ,OAAO,EAAE+K,MAAM,CAACG,KAAK,CAAC0P,IAAI,CAAC;;KAGzC,OAAO5a,OAAO;;GAGfoL,SAAS,CAACC,QAAkB,EAAE3N,MAAmB,EAAEqN,MAAoB,EACvE;KACC,OAAO,KAAK;;GAGbqF,SAAS,CAAC/Q,MAAqB,EAC/B;KAAA;KACC,MAAMW,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,KAAK,CAAC;KAC7C5G,OAAO,CAACiL,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC;KAE3C,IAAI1J,cAAI,CAACsH,cAAc,oBAACxJ,MAAM,CAACwb,OAAO,8CAAd,gBAAgB3P,KAAK,qBAArB,sBAAuB0P,IAAI,CAAC,EACpD;OACC9R,aAAG,CAACQ,QAAQ,CAACtJ,OAAO,EAAEX,MAAM,CAACwb,OAAO,CAAC3P,KAAK,CAAC0P,IAAI,CAAC;;KAGjD,OAAO;OAAE5a;MAAS;;GAGnB,OAAOsL,SAAS,GAChB;KACC,OAAO;;;;OAINsP,IAAI,EAAG5d,IAAU,IAAK;SACrB,MAAM8d,WAAW,GAChB9d,IAAI,CAAC8G,WAAW,KAAK,IAAI,KACrB,OAAO,CAACQ,IAAI,CAACtH,IAAI,CAAC8G,WAAW,CAAC,IAAIiX,kBAAkB,CAAC/d,IAAI,EAAE,IAAI,CAAC,CACpE;SAED,OAAO8d,WAAW,GACf;WACDrX,UAAU,EAAEuX,iBAAiB;WAC7BrX,QAAQ,EAAE;UACV,GACC,IAAI;QAEP;OACDuM,GAAG,EAAGlT,IAAU,KAAM;SACrByG,UAAU,EAAEwX,iBAAiB;SAC7BtX,QAAQ,EAAE;QACV,CAAC;OACFuX,GAAG,EAAGle,IAAU,KAAM;SACrByG,UAAU,EAAEuX,iBAAiB;SAC7BrX,QAAQ,EAAE;QACV,CAAC;OACFwX,KAAK,EAAGne,IAAU,IAAK;SACtB,MAAMme,KAAuB,GAAGne,IAAI;;SAEpC,IAAIoe,iBAAiB,CAACD,KAAK,CAAC,EAC5B;WACC,OAAO;aACN1X,UAAU,EAAE4X,mBAAmB;aAC/B1X,QAAQ,EAAE;YACV;;SAGF,OAAO,IAAI;QACX;OACD2X,EAAE,EAAGte,IAAU,IAAK;;SAEnB,MAAMse,EAAwB,GAAGte,IAAI;SACrC,MAAMme,KAA8B,GAAGG,EAAE,CAACC,OAAO,CAAC,OAAO,CAAC;SAE1D,IAAIC,gBAAgB,CAACF,EAAE,CAAC,EACxB;WACC,OAAO;aACN7X,UAAU,EAAEgY,uBAAuB;aACnC9X,QAAQ,EAAE;YACV;;SAGF,IAAIwX,KAAK,IAAIC,iBAAiB,CAACD,KAAK,CAAC,EACrC;;;WAGC,OAAO;aACN1X,UAAU,EAAEiY,eAAe;aAC3B/X,QAAQ,EAAE;YACV;;SAGF,OAAO,IAAI;QACX;OACDgY,EAAE,EAAG3e,IAAU,IAAK;;SAEnB,MAAM2e,EAAwB,GAAG3e,IAAI;SACrC,MAAMme,KAA8B,GAAGQ,EAAE,CAACJ,OAAO,CAAC,OAAO,CAAC;SAC1D,IAAIJ,KAAK,IAAIC,iBAAiB,CAACD,KAAK,CAAC,EACrC;WACC,OAAO;aACN1X,UAAU,EAAEiY,eAAe;aAC3B/X,QAAQ,EAAE;YACV;;SAGF,OAAO,IAAI;;MAEZ;;GAGF,OAAO8H,UAAU,CAACC,cAAqC,EACvD;KACC,MAAM1O,IAAI,GAAGwd,eAAe,EAAE;KAC9Bxd,IAAI,CAACwL,SAAS,CAACkD,cAAc,CAAC9M,MAAM,CAAC;KACrC5B,IAAI,CAAC2O,SAAS,CAACD,cAAc,CAACE,MAAM,CAAC;KACrC5O,IAAI,CAAC6O,YAAY,CAACH,cAAc,CAACI,SAAS,CAAC;KAE3C,OAAO9O,IAAI;;GAGZ+O,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrBlG,IAAI,EAAE;MACN;;GAGFmG,SAAS,GACT;KACC,OAAO,KAAK;;GAGbC,cAAc,CAACC,WAAwB,EACvC;KACC,OAAO,KAAK;;GAGbzJ,QAAQ,GACR;KACC,OAAO,KAAK;;GAGb0J,eAAe,CAAC1O,SAAyB,EACzC;KACC,MAAM+Q,SAAS,GAAGxL,oCAAoB,EAAE;KACxC,MAAMtB,QAAQ,GAAG,IAAI,CAAC5B,WAAW,EAAE;KACnC4B,QAAQ,CAAC2E,OAAO,CAAEzE,KAAK,IAAK4M,SAAS,CAACjM,MAAM,CAACX,KAAK,CAAC,CAAC;KACpD,IAAI,CAACqC,OAAO,CAACuK,SAAS,CAAC;KAEvB,OAAO,IAAI;;GAGZ8D,cAAc,CAAC7U,SAAyB,EAAE8W,gBAAgB,GAAG,IAAI,EACjE;KACC,MAAM7S,QAAQ,GAAG,IAAI,CAAC5B,WAAW,EAAE;KACnC,MAAM4V,cAAc,GAAGhU,QAAQ,CAACN,MAAM;KAEtC,IACCsU,cAAc,IAAI,CAAC,IAChBhU,QAAQ,CAACgU,cAAc,GAAG,CAAC,CAAC,CAACnR,cAAc,EAAE,KAAK,IAAI,IACtD7C,QAAQ,CAACgU,cAAc,GAAG,CAAC,CAAC,CAACnR,cAAc,EAAE,KAAK,IAAI,IACtD9G,SAAS,CAACwV,WAAW,EAAE,IACvBxV,SAAS,CAACC,MAAM,CAACiX,GAAG,KAAK,IAAI,CAAC9J,KAAK,IACnCpN,SAAS,CAACC,MAAM,CAACwV,MAAM,KAAKwC,cAAc,EAE9C;OACChU,QAAQ,CAACgU,cAAc,GAAG,CAAC,CAAC,CAAC9I,MAAM,EAAE;OACrClL,QAAQ,CAACgU,cAAc,GAAG,CAAC,CAAC,CAAC9I,MAAM,EAAE;OACrC,MAAMpH,UAAU,GAAGxC,oCAAoB,EAAE;OACzC,IAAI,CAAC2J,WAAW,CAACnH,UAAU,EAAE+O,gBAAgB,CAAC;OAE9C,OAAO/O,UAAU;;;;;;KAMlB,MAAM;OAAE9H,MAAM;OAAEC;MAAO,GAAGF,SAAS;KACnC,MAAMme,UAAU,GAAGle,MAAM,CAACme,QAAQ,CAACle,KAAK,CAAC,GAAGD,MAAM,GAAGC,KAAK;KAC1D,MAAMme,kBAAkB,GAAGF,UAAU,CAAC/d,OAAO,EAAE;KAC/C,IAAIoB,2BAAW,CAAC6c,kBAAkB,CAAC,EACnC;OACC,IAAI9e,IAAI,GAAG+e,sBAAsB,CAACD,kBAAkB,CAAC;OACrD,MAAME,WAAW,GAAG,EAAE;;OAEtB,OAAO,IAAI,EACX;SACC,IAAIxV,0BAAU,CAACxJ,IAAI,CAAC,EACpB;WACCgf,WAAW,CAAC1a,IAAI,CAACZ,8BAAc,EAAE,CAAC;WAClC1D,IAAI,GAAGA,IAAI,CAACyX,cAAc,EAAE;UAC5B,MACI,IAAIiG,gBAAgB,CAAC1d,IAAI,CAAC,EAC/B;WACC,IAAIif,MAAM,GAAG,CAAC;WACd,MAAM3R,IAAI,GAAGtN,IAAI,CAACuH,cAAc,EAAE;WAClC,MAAM2X,QAAQ,GAAGlf,IAAI,CAACqc,kBAAkB,EAAE;WAC1C,OAAO4C,MAAM,GAAGC,QAAQ,IAAI5R,IAAI,CAAC2R,MAAM,CAAC,KAAK,GAAG,EAChD;aACCA,MAAM,EAAE;;WAGT,IAAIA,MAAM,KAAK,CAAC,EAChB;aACCD,WAAW,CAAC1a,IAAI,CAAC4Y,oBAAoB,CAAC,GAAG,CAACiC,MAAM,CAACF,MAAM,CAAC,CAAC,CAAC;;WAG3D,IAAIA,MAAM,KAAKC,QAAQ,EACvB;aACC;;WAGDlf,IAAI,GAAGA,IAAI,CAACyX,cAAc,EAAE;UAC5B,MAED;WACC;;;OAIF,MAAMjK,KAAK,GAAGsR,kBAAkB,CAACM,SAAS,CAAC1e,MAAM,CAACwV,MAAM,CAAC,CAAC,CAAC,CAAC;OAC5D,MAAMmJ,CAAC,GAAG3e,MAAM,CAACwV,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;OACrC,MAAMoJ,KAAK,GAAG9R,KAAK,CAAC+R,oBAAoB,EAAE,GAAGF,CAAC;OAC9C,MAAMG,QAAQ,GAAGV,kBAAkB,CAAC9O,gBAAgB,EAAE;OACtD,MAAMyP,aAAa,GAAG,CAACjc,oCAAoB,EAAE,EAAE,GAAGwb,WAAW,CAAC;OAC9DQ,QAAQ,CAAC9X,MAAM,CAAC4X,KAAK,EAAE,CAAC,EAAEG,aAAa,CAAC;OACxC,MAAMC,IAAI,GAAGV,WAAW,CAACA,WAAW,CAAC5a,MAAM,GAAG,CAAC,CAAC;OAChD,IAAIsb,IAAI,EACR;SACCA,IAAI,CAAChK,MAAM,EAAE;QACb,MACI,IAAIhV,MAAM,CAACwV,MAAM,KAAK,CAAC,EAC5B;SACC1I,KAAK,CAACiM,cAAc,EAAE;QACtB,MAED;SAAA;SACC,yBAAAjM,KAAK,CAACiK,cAAc,EAAE,qBAAtB,sBAAwB8B,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;;;KAI1C,IAAI2B,WAAW,CAAC4D,kBAAkB,CAAC,EACnC;OACC,MAAM;SAAE5I;QAAQ,GAAGzV,SAAS,CAACC,MAAM;OACnCoe,kBAAkB,CAACpX,MAAM,CAACwO,MAAM,EAAE,CAAC,EAAE,CAAC1S,oCAAoB,EAAE,CAAC,CAAC;OAC9Dsb,kBAAkB,CAACpJ,MAAM,CAACQ,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAG,CAAC,CAAC;;KAGlD,OAAO,IAAI;;CAEb;AAEA,CAAO,SAASsH,eAAe,GAC/B;GACC,OAAOjO,qCAAqB,CAAC,IAAIoO,QAAQ,EAAE,CAAC;CAC7C;AAEA,CAAO,SAASzC,WAAW,CAAClb,IAAoC,EAChE;GACC,OAAOA,IAAI,YAAY2d,QAAQ;CAChC;CAEA,SAASK,iBAAiB,CAACnL,OAAa,EACxC;GACC,OAAO;KAAE7S,IAAI,EAAEwd,eAAe;IAAI;CACnC;CAEA,SAASS,iBAAiB,CAACpL,OAAa,EACxC;;GAEC,MAAMK,GAAG,GAAGL,OAAO;GACnB,MAAM8M,MAAM,GAAGC,aAAa,CAAC1M,GAAG,CAAC;GACjC,IAAI,CAACyM,MAAM,IAAI,CAACE,kBAAkB,CAAC3M,GAAG,CAAC,EACvC;KACC,OAAO;OACNlT,IAAI,EAAE;MACN;;GAGF,OAAO;KACNgE,KAAK,EAAGW,iBAAiB,IAAK;OAC7B,MAAMmb,SAAS,GAAGjN,OAAO,CAAC3K,UAAU;OACpC,IAAI4X,SAAS,KAAK,IAAI,IAAIjN,OAAO,KAAKiN,SAAS,CAAClF,SAAS,EACzD;SACCjW,iBAAiB,CAACL,IAAI,CAACd,oCAAoB,EAAE,CAAC;;OAG/C,OAAOmB,iBAAiB;MACxB;KACD3E,IAAI,EAAE2f,MAAM,GAAGnC,eAAe,EAAE,GAAG;IACnC;CACF;CAEA,SAASa,mBAAmB,GAC5B;GACC,OAAO;KAAEre,IAAI,EAAEwd,eAAe;IAAI;CACnC;CAEA,SAASkB,eAAe,GACxB;GACC,OAAO;KAAE1e,IAAI,EAAE;IAAM;CACtB;CAEA,SAASye,uBAAuB,CAAC5L,OAAa,EAC9C;;GAEC,MAAMkN,IAAI,GAAGlN,OAAO;GAEpB,OAAO;KACN7O,KAAK,EAAGW,iBAAiB,IAAK;OAC7B,IAAIob,IAAI,CAAC7X,UAAU,IAAI6X,IAAI,CAAC7X,UAAU,CAACoR,WAAW,EAClD;;SAEC3U,iBAAiB,CAACL,IAAI,CAACd,oCAAoB,EAAE,CAAC;;OAG/C,OAAOmB,iBAAiB;MACxB;KACD3E,IAAI,EAAE;IACN;CACF;CAEA,SAAS4f,aAAa,CAAC1M,GAAgB,EACvC;GACC,OAAOA,GAAG,CAACqK,KAAK,CAACyC,UAAU,CAACC,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI;CACxD;CAEA,SAASJ,kBAAkB,CAAC7f,IAAiB,EAC7C;GACC,IAAI+P,MAAM,GAAG/P,IAAI,CAACkgB,aAAa;GAC/B,OAAOnQ,MAAM,KAAK,IAAI,EACtB;KACC,IAAI6P,aAAa,CAAC7P,MAAM,CAAC,EACzB;OACC,OAAO,IAAI;;KAGZA,MAAM,GAAGA,MAAM,CAACmQ,aAAa;;GAG9B,OAAO,KAAK;CACb;CAEA,SAAS1B,gBAAgB,CAACuB,IAA0B,EACpD;GACC,OAAOA,IAAI,CAACI,SAAS,CAACC,QAAQ,CAAC,cAAc,CAAC;CAC/C;CAEA,SAAShC,iBAAiB,CAACD,KAAuB,EAClD;GACC,OAAOA,KAAK,CAACgC,SAAS,CAACC,QAAQ,CAAC,wBAAwB,CAAC;CAC1D;CAEA,SAASrC,kBAAkB,CAAC/d,IAAU,EAAEqgB,OAAe,EACvD;GACC,IAAIC,QAAQ,GAAG,KAAK;GACpB,KAAK,MAAM1b,KAAK,IAAI5E,IAAI,CAACugB,UAAU,EACnC;KACC,IAAIhc,cAAI,CAACgH,aAAa,CAAC3G,KAAK,CAAC,IAAIA,KAAK,CAACyb,OAAO,KAAKA,OAAO,EAC1D;OACC,OAAO,IAAI;;KAGZC,QAAQ,GAAGvC,kBAAkB,CAACnZ,KAAK,EAAEyb,OAAO,CAAC;;GAG9C,OAAOC,QAAQ;CAChB;;CC/ZA;CA+DO,MAAME,mBAAmC,GAAGhiB,6BAAa,CAAC,qBAAqB,CAAC;AACvF,CAAO,MAAMiiB,mBAAsD,GAAGjiB,6BAAa,CAAC,qBAAqB,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAE3G,CAAO,MAAMkiB,UAAU,SAAS5W,UAAU,CAC1C;GAICC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OALe,IAAImO,GAAG;;KAAE;OAAA;OAAA,OACzB,IAAImQ,wBAAU;;KAM3B,4CAAI;KACJ,4CAAI;KACJ,4CAAI;;GAGL,OAAO9e,OAAO,GACd;KACC,OAAO,MAAM;;GAGd,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACsb,QAAQ,EAAEpB,aAAa,CAAC;;GAGjCpS,YAAY,GACZ;KACC,OAAO;OACNyT,IAAI,EAAE,OAAyB;SAC9BnX,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAEwd,eAAe,EAAE;aACvBxZ,KAAK,EAAGW,iBAAqC,IAAyB;;eAErE,MAAMwE,OAAO,GAAGxE,iBAAiB,CAACic,GAAG,CACnCtY,SAAsB,IAAKA,SAAS,CAACf,cAAc,EAAE,CACtD,CAAChI,IAAI,CAAC,EAAE,CAAC;;;eAGV,OAAO,CAAC2F,+BAAe,CAACiE,OAAO,CAAC,CAAC;;YAElC;UACD;SACDxC,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACNwT,IAAI,EAAG5b,WAAwB,IAAyB;SACvD,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAQ;UAC3C;QACD;OACD,YAAY,EAAG7H,WAAwB,IAAyB;SAC/D,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAAC0G,UAAU,CAAC;aACvBE,OAAO,EAAEnH,WAAW,CAACuF,cAAc,EAAE;aACrC2B,MAAM,EAAE;YACR;UACD;;MAEF;;GAGFmB,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAEsM;QACX,CAAC;OACFlM,SAAS,EAAE;SACVmM,IAAI,EAAE;;MAEP;;CA0XH;CAAC,kCAtXA;GACC,IAAI,CAACrT,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,MAAM,EAAE,MAAM;KAC9D,MAAMC,MAAM,GAAG,IAAIlH,MAAM,EAAE;KAC3BkH,MAAM,CAACjH,UAAU,CAAC,8DAA8D,CAAC;KACjFiH,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,sBAAsB,CAAC,CAAC;KACzDF,MAAM,CAAC5G,YAAY,CAAC,MAAM,CAAC;KAC3B4G,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAM;OACjC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;SAC7B,IAAIJ,MAAM,CAAC7F,QAAQ,EAAE,EACrB;WACC,IAAI,CAACjC,SAAS,EAAE,CAACmI,eAAe,CAACoH,wBAAwB,CAAC;UAC1D,MAED;WACC,IAAI,CAACvP,SAAS,EAAE,CAACmI,eAAe,CAAC8N,mBAAmB,CAAC;;QAEtD,CAAC;MACF,CAAC;KAEF,OAAOnO,MAAM;IACb,CAAC;CACH;CAAC,iCAGD;GACC,MAAMwO,uBAAuB,GAAG,4CAAI,sDAA0B1T,IAAI,CAAC,IAAI,CAAC;GAExE,IAAI,CAAC1C,eAAe;;GAEnB,IAAI,CAACF,SAAS,EAAE,CAACsL,qBAAqB,CAAC8H,QAAQ,EAAE,4CAAI,sDAA0BxQ,IAAI,CAAC,IAAI,CAAC,CAAC,EAC1F,IAAI,CAAC5C,SAAS,EAAE,CAACsL,qBAAqB,CAAChC,wBAAQ,EAAEgN,uBAAuB,CAAC,EACzE,IAAI,CAACtW,SAAS,EAAE,CAACsL,qBAAqB,CAAC0G,aAAa,EAAEsE,uBAAuB,CAAC,EAC9E,IAAI,CAACtW,SAAS,EAAE,CAACmH,eAAe,CAC/BoP,mCAAmB,EACnB,MAAM;KACL,MAAMrgB,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,MAAMT,IAAI,GAAGQ,eAAe,CAACC,SAAS,CAAC;;;KAGvC,OAAOid,gBAAgB,CAAC1d,IAAI,CAAC,IAAIkb,WAAW,CAAClb,IAAI,CAAC;IAClD,EACD+gB,qCAAqB,CACrB,EACD,IAAI,CAACxW,SAAS,EAAE,CAACmH,eAAe,CAC/BsP,+BAAe,EACd9L,KAAK,IAAK;KACV,MAAM+L,OAAO,2CAAG,IAAI,0BAAY/L,KAAK,CAACgM,QAAQ,CAAC;KAC/C,IAAID,OAAO,KAAK,IAAI,EACpB;OACC,OAAO,KAAK;;KAGb/L,KAAK,CAACiG,cAAc,EAAE;KACtB,IAAI,CAAC5Q,SAAS,EAAE,CAACmI,eAAe,CAACuO,OAAO,CAAC;KAEzC,OAAO,IAAI;IACX,EACDlP,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/ByP,kCAAkB,EAClB,MAAM;KACL,MAAM1gB,SAAS,GAAGuR,6BAAa,EAAE;KACjC,IAAI,CAACoP,kBAAkB,CAAC3gB,SAAS,CAAC,EAClC;OACC,OAAO,KAAK;;KAEb4gB,4BAAY,CAAC,CAAC3d,8BAAc,EAAE,CAAC,CAAC;KAEhC,OAAO,IAAI;IACX,EACDqO,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B4P,sCAAsB,EACrB3P,OAAO,4CAAc,IAAI,kDAAwB2P,sCAAsB,CAAC,EACzEtM,uCAAuB,CACvB,EACD,IAAI,CAACzK,SAAS,EAAE,CAACmH,eAAe,CAC/B6P,uCAAuB,EACtB5P,OAAO,4CAAc,IAAI,kDAAwB4P,uCAAuB,CAAC,EAC1EvM,uCAAuB,CACvB,EACD,IAAI,CAACzK,SAAS,EAAE,CAACmH,eAAe,CAC/B6D,6BAAa,EACZL,KAAK,IAAK;KACV,MAAMzU,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IACC,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAC1B,EAAEyU,KAAK,YAAY2B,cAAc,CAAC,IAClC3B,KAAK,CAAC4B,aAAa,KAAK,IAAI,EAEhC;OACC,OAAO,KAAK;;KAGb,MAAM0I,QAAkB,GAAGtN,oCAAmB,CAC7CzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EACzBb,IAAiB,IAAKkb,WAAW,CAAClb,IAAI,CAAC,CACxC;KAED,IAAIwf,QAAQ,EACZ;OACCzI,oDAA+B,CAAC7B,KAAK,CAAC4B,aAAa,EAAErW,SAAS,CAAC;OAE/D,OAAO,IAAI;;KAGZ,OAAO,KAAK;IACZ,EACDuU,uCAAuB,CACvB,CACD;CACF;CAAC,gCAGD;GACC,IAAI,CAACvK,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/B+O,mBAAmB,EAClB9O,OAA0B,IAAK;KAC/B,MAAM6N,QAAQ,GAAGhC,eAAe,EAAE;KAClC,IAAIjZ,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IAAIpN,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAACxI,OAAO,CAAC,EACvE;OACC,MAAMqY,UAAU,GAAGC,iBAAiB,CAAC,4CAAI,4BAAa7e,KAAK,CAAC+O,OAAO,CAACxI,OAAO,CAAC,CAAC;OAC7EqW,QAAQ,CAACja,MAAM,CAAC,GAAGic,UAAU,CAAC;OAC9B3P,yCAAwB,CAAC2N,QAAQ,CAAC;MAClC,MAED;OACC3N,yCAAwB,CAAC2N,QAAQ,CAAC;OAClCA,QAAQ,CAACkC,SAAS,EAAE;;KAGrB,OAAO,IAAI;IACX,EACDhH,uCAAuB,CACvB,EACD,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/B8O,mBAAmB,EACnB,MAAe;KACd,MAAM/f,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACC,IAAIA,SAAS,CAACwV,WAAW,EAAE,EAC3B;SACCwE,mCAAc,CAACha,SAAS,EAAE,MAAM+c,eAAe,EAAE,CAAC;QAClD,MAED;SACC,MAAM1W,WAAW,GAAGrG,SAAS,CAAC8G,cAAc,EAAE;SAC9C,MAAMiY,QAAQ,GAAGhC,eAAe,EAAE;SAClC/c,SAAS,CAACue,WAAW,CAAC,CAACQ,QAAQ,CAAC,CAAC;SAEjC,MAAMmC,YAA4B,GAAG3P,6BAAa,EAAE;SACpD,IAAIC,iCAAiB,CAAC0P,YAAY,CAAC,EACnC;WACCA,YAAY,CAACC,aAAa,CAAC9a,WAAW,CAAC;;;;KAK1C,OAAO,IAAI;IACX,EACD4T,uCAAuB,CACvB,CACD;CACF;CAAC,mCAEwB1a,IAAc,EACvC;GACC,MAAM6hB,OAAO,GAAG7hB,IAAI,CAAC6Q,MAAM,EAAE;GAC7B,IAAI,4CAAI,4DAA6BE,GAAG,CAAC8Q,OAAO,CAAC,EACjD;KACC;;GAGD,4CAAI,4DAA6BjR,GAAG,CAACiR,OAAO,CAAC;;;;;GAK7C,IAAI,CAACtX,SAAS,EAAE,CAACkI,MAAM,CACtB,MAAM;KACLqP,wBAAwB,CAACD,OAAO,EAAE,MAAM;OACvC,MAAM5Z,WAAW,GAAG8Z,6BAAa,CAACF,OAAO,CAAC;OAE1C,IAAI,CAAC3G,WAAW,CAACjT,WAAW,CAAC,IAAI,CAACA,WAAW,CAAC+Z,UAAU,EAAE,EAC1D;SACC,OAAO,KAAK;;OAEb,MAAMpE,IAAI,GAAG3V,WAAW,CAACV,cAAc,EAAE;OACzC,MAAM0a,cAAc,GAAGR,iBAAiB,CAAC,4CAAI,4BAAa7e,KAAK,CAACgb,IAAI,CAAC,CAAC;OACtE,MAAMsE,SAAS,GAAGC,YAAY,CAACla,WAAW,CAACnF,WAAW,EAAE,EAAEmf,cAAc,CAAC;OAEzE,MAAM;SAAEG,IAAI;SAAEC,EAAE;SAAEC;QAAqB,GAAGJ,SAAS;OACnD,IAAIE,IAAI,KAAKC,EAAE,IAAIC,mBAAmB,CAACle,MAAM,GAAG,CAAC,EACjD;SACCpE,IAAI,CAAC0H,MAAM,CAAC0a,IAAI,EAAEC,EAAE,GAAGD,IAAI,EAAEE,mBAAmB,CAAC;SAEjD,OAAO,IAAI;;OAGZ,OAAO,KAAK;MACZ,CAAC;IACF,EACD;KACCC,QAAQ,EAAE,MAAM;OACf,4CAAI,4DAA6BC,MAAM,CAACX,OAAO,CAAC;MAChD;KACDY,cAAc,EAAE;IAChB,CACD;CACF;CAAC,mCAEwBziB,IAAc,EACvC;;;GAGC,MAAMkI,UAAU,GAAGlI,IAAI,CAAC0I,SAAS,EAAE;GACnC,IAAIwS,WAAW,CAAChT,UAAU,CAAC,EAC3B;KACC,4CAAI,sDAA0BA,UAAU;IACxC,MACI,IAAIwV,gBAAgB,CAAC1d,IAAI,CAAC,EAC/B;;;KAGCA,IAAI,CAACiH,OAAO,CAAC/B,+BAAe,CAAClF,IAAI,CAAC8T,MAAM,CAAC,CAAC;;CAE5C;CAAC,qBAEUoN,QAAiB,EAC5B;GACC,MAAMzgB,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAAC2gB,kBAAkB,CAAC3gB,SAAS,CAAC,EACnE;KACC,OAAO,IAAI;;GAGZ,MAAMiiB,eAAe,GAAGxB,QAAQ,GAAGK,uCAAuB,GAAGD,sCAAsB;GACnF,MAAMqB,YAAY,GAAGzB,QAAQ,GAAGK,uCAAuB,GAAGJ,kCAAkB;;;GAG5E,MAAMyB,SAAS,GAAGC,aAAa,CAACpiB,SAAS,CAAC;GAC1C,IAAImiB,SAAS,CAACxe,MAAM,GAAG,CAAC,EACxB;KACC,OAAOse,eAAe;;;;GAIvB,MAAMI,cAAc,GAAGriB,SAAS,CAACyJ,QAAQ,EAAE;GAC3C,MAAM4G,SAAS,GAAGgS,cAAc,CAAC,CAAC,CAAC;GACnC,IAAI5H,WAAW,CAACpK,SAAS,CAAC,EAC1B;KACC,OAAO4R,eAAe;;GAGvB,MAAMK,WAAW,GAAGhE,sBAAsB,CAACjO,SAAS,CAAC;GACrD,MAAMkS,UAAU,GAAGC,qBAAqB,CAACnS,SAAS,CAAC;GACnD,MAAMpQ,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;GAC7B,IAAIuiB,cAAc,GAAG,IAAI;GACzB,IAAIC,aAAa,GAAG,IAAI;GACxB,IAAIxiB,KAAK,CAACke,QAAQ,CAACne,MAAM,CAAC,EAC1B;KACCwiB,cAAc,GAAGviB,KAAK;KACtBwiB,aAAa,GAAGziB,MAAM;IACtB,MAED;KACCwiB,cAAc,GAAGxiB,MAAM;KACvByiB,aAAa,GAAGxiB,KAAK;;GAGtB,IACCoiB,WAAW,KAAK,IAAI,IACjBC,UAAU,KAAK,IAAI,IACnBE,cAAc,CAACvL,GAAG,KAAKoL,WAAW,CAAClS,MAAM,EAAE,IAC3CqS,cAAc,CAAChN,MAAM,KAAK,CAAC,IAC3BiN,aAAa,CAACxL,GAAG,KAAKqL,UAAU,CAACnS,MAAM,EAAE,IACzCsS,aAAa,CAACjN,MAAM,KAAK8M,UAAU,CAAC3G,kBAAkB,EAAE,EAE5D;KACC,OAAOqG,eAAe;;;;GAIvB,OAAOC,YAAY;CACpB;CAAC,iCAEsB9Z,IAAoB,EAC3C;GACC,MAAMpI,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAAC2gB,kBAAkB,CAAC3gB,SAAS,CAAC,EACnE;KACC,OAAO,KAAK;;GAGb,MAAMmiB,SAAS,GAAGC,aAAa,CAACpiB,SAAS,CAAC;GAC1C,MAAM2iB,eAAe,GAAGR,SAAS,CAACxe,MAAM;;GAExC,IAAIwe,SAAS,CAACxe,MAAM,GAAG,CAAC,EACxB;KACC,KAAK,IAAIhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgiB,eAAe,EAAEhiB,CAAC,EAAE,EACxC;OACC,MAAMiiB,IAAI,GAAGT,SAAS,CAACxhB,CAAC,CAAC;OACzB,IAAIiiB,IAAI,CAACjf,MAAM,GAAG,CAAC,EACnB;SACC,IAAI2e,WAA2D,GAAGM,IAAI,CAAC,CAAC,CAAC;;SAEzE,IAAIjiB,CAAC,KAAK,CAAC,EACX;WACC2hB,WAAW,GAAGhE,sBAAsB,CAACgE,WAAW,CAAC;;SAGlD,IAAIA,WAAW,KAAK,IAAI,EACxB;WACC,IAAIla,IAAI,KAAKyY,sCAAsB,EACnC;;aAECyB,WAAW,CAACtP,YAAY,CAAC/P,8BAAc,EAAE,CAAC;YAC1C,MACI,IAAI8F,0BAAU,CAACuZ,WAAW,CAAC,EAChC;aACCA,WAAW,CAACnT,MAAM,EAAE;;;;;KAMxB,OAAO,IAAI;;;;GAIZ,MAAMkT,cAAc,GAAGriB,SAAS,CAACyJ,QAAQ,EAAE;GAC3C,MAAM4G,SAAS,GAAGgS,cAAc,CAAC,CAAC,CAAC;GACnC,IAAI5H,WAAW,CAACpK,SAAS,CAAC,EAC1B;;KAEC,IAAIjI,IAAI,KAAKyY,sCAAsB,EACnC;OACC7gB,SAAS,CAACue,WAAW,CAAC,CAACtb,8BAAc,EAAE,CAAC,CAAC;;KAG1C,OAAO,IAAI;;GAGZ,MAAMqf,WAAW,GAAGhE,sBAAsB,CAACjO,SAAS,CAAC;GACrD,IAAIjI,IAAI,KAAKyY,sCAAsB,EACnC;KACC,IAAIxb,gCAAgB,CAACid,WAAW,CAAC,EACjC;OACCA,WAAW,CAACpT,WAAW,CAACjM,8BAAc,EAAE,CAAC;MACzC,MAED;;OAECqf,WAAW,CAACtP,YAAY,CAAC/P,8BAAc,EAAE,CAAC;;IAE3C,MACI,IAAI8F,0BAAU,CAACuZ,WAAW,CAAC,EAChC;KACCA,WAAW,CAACnT,MAAM,EAAE;;GAGrB,OAAO,IAAI;CACZ;CAGD,SAASwR,kBAAkB,CAAC3gB,SAAgC,EAC5D;GACC,IAAI,CAACwR,iCAAiB,CAACxR,SAAS,CAAC,EACjC;KACC,OAAO,KAAK;;GAEb,MAAMG,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;GAC7C,MAAMC,SAAS,GAAGL,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE;GAC3C,IAAID,UAAU,CAAC0iB,EAAE,CAACxiB,SAAS,CAAC,IAAIoa,WAAW,CAACta,UAAU,CAAC,EACvD;KACC,OAAO,IAAI;;GAGZ,MAAM2iB,YAAY,GAAG3iB,UAAU,CAAC8H,SAAS,EAAE;GAE3C,OAAOwS,WAAW,CAACqI,YAAY,CAAC,IAAIA,YAAY,CAACD,EAAE,CAACxiB,SAAS,CAAC4H,SAAS,EAAE,CAAC;CAC3E;CAEA,SAASma,aAAa,CAACpiB,SAAyB,EAChD;GACC,MAAMwC,KAAK,GAAGxC,SAAS,CAACyJ,QAAQ,EAAE;GAClC,MAAMsZ,KAA4C,GAAG,CAAC,EAAE,CAAC;GACzD,IAAIvgB,KAAK,CAACmB,MAAM,KAAK,CAAC,IAAI8W,WAAW,CAACjY,KAAK,CAAC,CAAC,CAAC,CAAC,EAC/C;KACC,OAAOugB,KAAK;;GAGb,IAAIC,QAAwC,GAAGD,KAAK,CAAC,CAAC,CAAC;GACvD,KAAK,MAAM,CAACpiB,CAAC,EAAEpB,IAAI,CAAC,IAAIiD,KAAK,CAACygB,OAAO,EAAE,EACvC;KACC,IAAI5d,gCAAgB,CAAC9F,IAAI,CAAC,EAC1B;OACC,IAAIoB,CAAC,KAAK,CAAC,IAAIqiB,QAAQ,CAACrf,MAAM,GAAG,CAAC,EAClC;SACCqf,QAAQ,GAAG,EAAE;SACbD,KAAK,CAAClf,IAAI,CAACmf,QAAQ,CAAC;;MAErB,MAED;OACCA,QAAQ,CAACnf,IAAI,CAACtE,IAAI,CAAC;;;GAIrB,OAAOwjB,KAAK;CACb;AAEA,CAAO,SAASzE,sBAAsB,CACrCre,MAA+C,EAEhD;GACC,IAAIijB,YAAY,GAAGjjB,MAAM;GACzB,IAAIV,IAAwB,GAAGU,MAAM;GACrC,OAAOgd,gBAAgB,CAAC1d,IAAI,CAAC,IAAIwJ,0BAAU,CAACxJ,IAAI,CAAC,EACjD;KACC2jB,YAAY,GAAG3jB,IAAI;KACnBA,IAAI,GAAGA,IAAI,CAACsW,kBAAkB,EAAE;;GAGjC,OAAOqN,YAAY;CACpB;AAEA,CAAO,SAASV,qBAAqB,CACpCviB,MAA+C,EAEhD;GACC,IAAIkjB,QAAQ,GAAGljB,MAAM;GACrB,IAAIV,IAAwB,GAAGU,MAAM;GACrC,OAAOgd,gBAAgB,CAAC1d,IAAI,CAAC,IAAIwJ,0BAAU,CAACxJ,IAAI,CAAC,EACjD;KACC4jB,QAAQ,GAAG5jB,IAAI;KACfA,IAAI,GAAGA,IAAI,CAACyX,cAAc,EAAE;;GAG7B,OAAOmM,QAAQ;CAChB;CAQA;CACA;CACA,SAASzB,YAAY,CAAC0B,SAAwB,EAAEC,SAAwB,EACxE;GACC,IAAIC,YAAY,GAAG,CAAC;GACpB,OAAOA,YAAY,GAAGF,SAAS,CAACzf,MAAM,EACtC;KACC,IAAI,CAAC4f,OAAO,CAACH,SAAS,CAACE,YAAY,CAAC,EAAED,SAAS,CAACC,YAAY,CAAC,CAAC,EAC9D;OACC;;KAEDA,YAAY,EAAE;;GAGf,MAAME,eAAuB,GAAGJ,SAAS,CAACzf,MAAM;GAChD,MAAM8f,eAAuB,GAAGJ,SAAS,CAAC1f,MAAM;GAChD,MAAM+f,gBAAwB,GAAGC,IAAI,CAACC,GAAG,CAACJ,eAAe,EAAEC,eAAe,CAAC,GAAGH,YAAY;GAE1F,IAAIO,aAAa,GAAG,CAAC;GACrB,OAAOA,aAAa,GAAGH,gBAAgB,EACvC;KACCG,aAAa,EAAE;KACf,IAAI,CAACN,OAAO,CAACH,SAAS,CAACI,eAAe,GAAGK,aAAa,CAAC,EAAER,SAAS,CAACI,eAAe,GAAGI,aAAa,CAAC,CAAC,EACpG;OACCA,aAAa,EAAE;OACf;;;GAIF,MAAMlC,IAAY,GAAG2B,YAAY;GACjC,MAAM1B,EAAU,GAAG4B,eAAe,GAAGK,aAAa;GAClD,MAAMhC,mBAAkC,GAAGwB,SAAS,CAACS,KAAK,CACzDR,YAAY,EACZG,eAAe,GAAGI,aAAa,CAC/B;GAED,OAAO;KACNlC,IAAI;KACJE,mBAAmB;KACnBD;IACA;CACF;CAEA,SAAS2B,OAAO,CAACQ,KAAkB,EAAEC,KAAkB,EACvD;;;GAGC,OAEE/G,gBAAgB,CAAC8G,KAAK,CAAC,IACpB9G,gBAAgB,CAAC+G,KAAK,CAAC,IACvBD,KAAK,CAAC1Q,MAAM,KAAK2Q,KAAK,CAAC3Q,MAAM,IAC7B0Q,KAAK,CAAC/H,eAAe,KAAKgI,KAAK,CAAChI,eAAe,IAE/CjT,0BAAU,CAACgb,KAAK,CAAC,IAAIhb,0BAAU,CAACib,KAAK,CAAE,IACvC3e,gCAAgB,CAAC0e,KAAK,CAAC,IAAI1e,gCAAgB,CAAC2e,KAAK,CAAE;CAEzD;CAEA,SAAShD,iBAAiB,CAACiD,MAAwB,EACnD;GACC,MAAMzhB,KAAoB,GAAG,EAAE;GAC/ByhB,MAAM,CAACrb,OAAO,CAAEsb,KAAgB,IAAW;KAC1C,MAAMC,QAAkB,GAAGD,KAAK,CAACxb,OAAO,CAACqE,KAAK,CAAC,UAAU,CAAC;KAC1D,MAAMqX,cAAsB,GAAGD,QAAQ,CAACxgB,MAAM;KAC9C,KAAK,IAAIhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyjB,cAAc,EAAEzjB,CAAC,EAAE,EACvC;OACC,MAAMqM,IAAY,GAAGmX,QAAQ,CAACxjB,CAAC,CAAC;OAChC,IAAIqM,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK,MAAM,EACpC;SACCxK,KAAK,CAACqB,IAAI,CAACd,oCAAoB,EAAE,CAAC;QAClC,MACI,IAAIiK,IAAI,KAAK,IAAI,EACtB;SACCxK,KAAK,CAACqB,IAAI,CAACZ,8BAAc,EAAE,CAAC;QAC5B,MACI,IAAI+J,IAAI,CAACrJ,MAAM,GAAG,CAAC,EACxB;SACCnB,KAAK,CAACqB,IAAI,CAAC4Y,oBAAoB,CAACzP,IAAI,EAAEkX,KAAK,CAAC9b,IAAI,CAAC,CAAC;;;IAGpD,CAAC;GAEF,OAAO5F,KAAK;CACb;;CAEA;CACA;CACA,SAAS6e,wBAAwB,CAACD,OAAgB,EAAEiD,QAAuB,EAC3E;GACC,MAAM9kB,IAAwB,GAAG+hB,6BAAa,CAACF,OAAO,CAAC;GACvD,IAAI,CAAC3G,WAAW,CAAClb,IAAI,CAAC,IAAI,CAACA,IAAI,CAACgiB,UAAU,EAAE,EAC5C;KACC;;;;;GAKD,MAAMvhB,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;KACCqkB,QAAQ,EAAE;KAEV;;GAGD,MAAMpkB,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAMqkB,YAAoB,GAAGrkB,MAAM,CAACwV,MAAM;GAC1C,MAAM8O,eAAwB,GAC7BtkB,MAAM,CAACmI,IAAI,KAAK,SAAS,IACtB/C,gCAAgB,CAAC9F,IAAI,CAACilB,eAAe,CAACvkB,MAAM,CAACwV,MAAM,GAAG,CAAC,CAAC,CAC3D;;;GAGD,IAAIgP,UAAU,GAAG,CAAC;GAClB,IAAI,CAACF,eAAe,EACpB;KACC,MAAMpkB,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;KACnCqkB,UAAU,GACTH,YAAY,GACVnkB,UAAU,CAACukB,mBAAmB,EAAE,CAACC,MAAM,CAAC,CAAClP,MAAM,EAAEmP,KAAK,KAAK;OAC5D,OAAOnP,MAAM,GAAGmP,KAAK,CAAChJ,kBAAkB,EAAE;MAC1C,EAAE,CAAC,CACJ;;GAGF,MAAMiJ,UAAmB,GAAGR,QAAQ,EAAE;GACtC,IAAI,CAACQ,UAAU,EACf;KACC;;;;;GAKD,IAAIN,eAAe,EACnB;KACCtkB,MAAM,CAACG,OAAO,EAAE,CAAC6U,MAAM,CAACqP,YAAY,EAAEA,YAAY,CAAC;KAEnD;;;;;GAKD/kB,IAAI,CAAC8C,WAAW,EAAE,CAACyiB,IAAI,CAAE3gB,KAAK,IAAK;KAClC,MAAM4gB,MAAe,GAAGvjB,2BAAW,CAAC2C,KAAK,CAAC;KAC1C,IAAI4gB,MAAM,IAAI1f,gCAAgB,CAAClB,KAAK,CAAC,EACrC;OACC,MAAM6gB,eAAe,GAAG7gB,KAAK,CAACyX,kBAAkB,EAAE;OAClD,IAAImJ,MAAM,IAAIC,eAAe,IAAIP,UAAU,EAC3C;SACCtgB,KAAK,CAAC8Q,MAAM,CAACwP,UAAU,EAAEA,UAAU,CAAC;SAEpC,OAAO,IAAI;;OAEZA,UAAU,IAAIO,eAAe;;KAG9B,OAAO,KAAK;IACZ,CAAC;CACH;;;;;;;;;;;;;;;;;;CCnvBA,SAASC,cAAc,CAACrjB,MAAkB,EAAEsV,GAAY,EACxD;GACC,OAAOtV,MAAM,CAAC0V,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;KACzC,MAAMhY,IAAI,GAAG+hB,6BAAa,CAACpK,GAAG,CAAC;KAC/B,IAAI3X,IAAI,KAAK,IAAI,EACjB;OACC,OAAO,KAAK;;KAGb,OAAOA,IAAI,CAAC2lB,UAAU,EAAE;IACxB,CAAC;CACH;AAEA,CAAO,SAASC,mBAAmB,CAACvjB,MAAkB,EAAEsV,GAAY,EACpE;GACC,IAAIgO,UAAU,GAAG,KAAK;GACtB,MAAME,WAAW,GAAG,IAAIrV,GAAG,EAAE;GAC7B,MAAMsV,QAAQ,GAAI9Y,EAAY,IAAK;KAClC6Y,WAAW,CAACjV,GAAG,CAAC5D,EAAE,CAAC;IACnB;GAED,MAAM+Y,kBAAkB,GAAG1jB,MAAM,CAAC2jB,sBAAsB,CAAC,MAAM;KAC9DL,UAAU,GAAGD,cAAc,CAACrjB,MAAM,EAAEsV,GAAG,CAAC;KACxC,KAAK,MAAMsO,aAAa,IAAIJ,WAAW,EACvC;OACCI,aAAa,CAACN,UAAU,CAAC;;IAE1B,CAAC;GAEF,MAAMO,WAAW,GAAIC,QAAiB,IAAK;KAC1C9jB,MAAM,CAACoQ,MAAM,CAAC,MAAM;OACnB,IAAIhS,SAAwB,GAAGuR,6BAAa,EAAE;OAC9C,IAAI,CAACoU,gCAAgB,CAAC3lB,SAAS,CAAC,EAChC;SACCA,SAAS,GAAG4lB,oCAAoB,EAAE;SAClCtQ,6BAAa,CAACtV,SAAS,CAAC;;OAGzB,IAAI0lB,QAAQ,EACZ;SACC1lB,SAAS,CAACmQ,GAAG,CAAC+G,GAAG,CAAC;QAClB,MAED;SACClX,SAAS,CAAC+hB,MAAM,CAAC7K,GAAG,CAAC;;MAEtB,CAAC;IACF;GAED,MAAM2O,cAAc,GAAG,MAAM;KAC5BjkB,MAAM,CAACoQ,MAAM,CAAC,MAAM;OACnB,MAAMhS,SAAwB,GAAGuR,6BAAa,EAAE;OAChD,IAAIoU,gCAAgB,CAAC3lB,SAAS,CAAC,EAC/B;SACCA,SAAS,CAACuV,KAAK,EAAE;;MAElB,CAAC;IACF;GAED,OAAO;KACN2P,UAAU,EAAE,MAAM;OACjB,OAAOA,UAAU;MACjB;KACDY,OAAO,EAAE,MAAM;OACdR,kBAAkB,EAAE;MACpB;KACDD,QAAQ;KACRI,WAAW;KACXI;IACA;CACF;;CCrEsE;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAKtE,CAAe,MAAME,kBAAkB,CACvC;GAQCzc,WAAW,CAAC0c,gBAA2C,EACvD;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAR0B;;KAAI;OAAA;OAAA,OACP;;KAAI;OAAA;OAAA,OACR;;KAAI;OAAA;OAAA,OACA;;KAAE;OAAA;OAAA,OACR;;KAAI;OAAA;OAAA,OACW;;KAI/B,MAAM;OAAEzc,UAAU;OAAE0c,MAAM;OAAE7E,OAAO;OAAE8E;MAAS,GAAGF,gBAAgB;KAEjE,4CAAI,kCAAezc,UAAU;KAC7B,4CAAI,sBAAW0c,MAAM;KACrB,4CAAI,wBAAY7E,OAAO;KACvB,4CAAI,wBAAY8E,OAAO;KAEvB,4CAAI,oCAAkBf,mBAAmB,CAAC,IAAI,CAACrb,SAAS,EAAE,EAAE,IAAI,CAACqc,UAAU,EAAE,CAAC;KAC9E,4CAAI,kCAAgBd,QAAQ,CAAEK,QAAiB,IAAK;OACnD,IAAIA,QAAQ,EACZ;SACCra,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACua,SAAS,EAAE,EAAE,YAAY,CAAC;QAC5C,MAED;SACC/a,aAAG,CAACS,WAAW,CAAC,IAAI,CAACsa,SAAS,EAAE,EAAE,YAAY,CAAC;;MAEhD,CAAC;KAEF,4CAAI,sFAAuB,IAAI,6CAAoB;;GAGpDpU,MAAM,CAACkU,OAAmB,EAC1B;;;GAIA9b,OAAO,GACP;KACC,4CAAI,kCAAgB0b,OAAO,EAAE;KAC7B,4CAAI;;GAGLhc,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZqc,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZC,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZC,gBAAgB,GAChB;KACC,+CAAO,IAAI;;GAGZnB,UAAU,GACV;KACC,OAAO,4CAAI,kCAAgBA,UAAU,EAAE;;GAGxCO,WAAW,CAACC,QAAiB,EAC7B;KACC,4CAAI,kCAAgBD,WAAW,CAACC,QAAQ,CAAC;;GAG1CY,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZC,SAAS,CAACC,MAAc,EAAEC,YAAwB,EAClD;KACC,IAAI,CAAC3iB,cAAI,CAAC4iB,WAAW,CAAC,4CAAI,sBAAUF,MAAM,CAAC,CAAC,EAC5C;OACC,OAAO,4CAAI,sBAAUA,MAAM,CAAC;;KAG7B,IAAI,CAAC1iB,cAAI,CAAC4iB,WAAW,CAACD,YAAY,CAAC,EACnC;OACC,OAAOA,YAAY;;KAGpB,OAAO,IAAI;;CA2Db;CAAC,gCAvDA;GACC,OAAOvc,8BAAa,CACnB,IAAI,CAACJ,SAAS,EAAE,CAACmH,eAAe,CAC/B0V,6BAAa,EACZlS,KAAiB,IAAK;KACtB,IAAI,IAAI,CAAC2R,SAAS,EAAE,CAACzG,QAAQ,CAAClL,KAAK,CAACwR,MAAM,CAAC,EAC3C;OACC,IAAIxR,KAAK,CAACgM,QAAQ,EAClB;SACC,4CAAI,kCAAgBgF,WAAW,CAAC,CAAC,4CAAI,kCAAgBP,UAAU,EAAE,CAAC;QAClE,MAED;SACC,4CAAI,kCAAgBW,cAAc,EAAE;SACpC,4CAAI,kCAAgBJ,WAAW,CAAC,IAAI,CAAC;;OAGtC,OAAO,IAAI;;KAGZ,OAAO,KAAK;IACZ,EACDnU,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B2V,kCAAkB,EAClB,4CAAI,gCAAela,IAAI,CAAC,IAAI,CAAC,EAC7B4E,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B4V,qCAAqB,EACrB,4CAAI,gCAAena,IAAI,CAAC,IAAI,CAAC,EAC7B4E,oCAAoB,CACpB,CACD;CACF;CAAC,wBAEamD,KAAoB,EAClC;GACC,IAAI,4CAAI,kCAAgByQ,UAAU,EAAE,IAAIS,gCAAgB,CAACpU,6BAAa,EAAE,CAAC,EACzE;KACCkD,KAAK,CAACiG,cAAc,EAAE;KAEtB,MAAMnb,IAAI,GAAG+hB,6BAAa,CAAC,IAAI,CAAC6E,UAAU,EAAE,CAAC;KAC7C,4CAAI,kCAAgBV,WAAW,CAAC,KAAK,CAAC;KACtC,IAAIlmB,IAAI,EACR;OACCA,IAAI,CAAC4P,MAAM,EAAE;OAEb,OAAO,IAAI;;;GAIb,OAAO,KAAK;CACb;;;;;ACvKD,CAIA,SAAS2X,KAAK,CAAC3S,KAAa,EAAEyP,GAAW,EAAEmD,GAAW,EACtD;GACC,OAAOpD,IAAI,CAACC,GAAG,CAACD,IAAI,CAACoD,GAAG,CAAC5S,KAAK,EAAEyP,GAAG,CAAC,EAAEmD,GAAG,CAAC;CAC3C;CAEA,MAAMC,SAAS,GAAG;GACjBC,IAAI,EAAE,CAAC;GACPC,KAAK,EAAE,CAAC;GACRC,IAAI,EAAE,CAAC;GACPC,KAAK,EAAE;CACR,CAAC;AAED,CAA8B;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAE9B,CAAe,MAAMC,aAAa,SAAS/c,6BAAY,CACvD;GA4BChB,WAAW,CAAC;KACX2c,MAAM,EAANA,QAAM;KACNrkB,MAAM;KACN0lB,aAAa;KACbC,cAAc;KACdC,QAAQ;KACRC,SAAS;KACTC,QAAQ,EAARA,UAAQ;KACRC,SAAS;KACTC,MAAM;KACNC;IACA,EACD;KACC,KAAK,EAAE;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAxCM;SACdC,aAAa,EAAE,CAAC;SAChBC,YAAY,EAAE,CAAC;SACf1Z,SAAS,EAAE,CAAC;SACZ2Z,UAAU,EAAE,KAAK;SACjBC,KAAK,EAAE,CAAC;SACRC,WAAW,EAAE,CAAC;SACdC,UAAU,EAAE,CAAC;SACbC,MAAM,EAAE,CAAC;SACTC,MAAM,EAAE;;;KACR;OAAA;OAAA,OAEyB;;KAAK;OAAA;OAAA,OAEG;;KAAI;OAAA;OAAA,OACJ;;KAAI;OAAA;OAAA,OACN;;KAAI;OAAA;OAAA,OAEV;;KAAI;OAAA;OAAA,OACP;;KAAI;OAAA;OAAA,OACL;;KAAI;OAAA;OAAA,OAEG;;KAAM;OAAA;OAAA,OACL;;KAAM;OAAA;OAAA,OAChB;;KAAE;OAAA;OAAA,OACD;;KAgBpB,IAAI,CAAC9d,iBAAiB,CAAC,gCAAgC,CAAC;KAExD,4CAAI,0BAAW0b,QAAM;KACrB,4CAAI,sBAAWrkB,MAAM;KAErB,4CAAI,0BAAa+hB,IAAI,CAACC,GAAG,CACxBD,IAAI,CAACoD,GAAG,yCAAC,IAAI,yBAAYjjB,cAAI,CAACwkB,QAAQ,CAACd,QAAQ,CAAC,GAAGA,QAAQ,2CAAG,IAAI,uBAAU,CAAC,EAC7E1jB,cAAI,CAACwkB,QAAQ,CAAChB,aAAa,CAAC,GAAGA,aAAa,GAAGiB,QAAQ,CACvD;KACD,4CAAI,4BAAc5E,IAAI,CAACC,GAAG,CACzBD,IAAI,CAACoD,GAAG,yCAAC,IAAI,2BAAajjB,cAAI,CAACwkB,QAAQ,CAACb,SAAS,CAAC,GAAGA,SAAS,2CAAG,IAAI,yBAAW,CAAC,EACjF3jB,cAAI,CAACwkB,QAAQ,CAACf,cAAc,CAAC,GAAGA,cAAc,GAAGgB,QAAQ,CACzD;KAED,4CAAI,0BAAazkB,cAAI,CAACwkB,QAAQ,CAACZ,UAAQ,CAAC,GAAGA,UAAQ,GAAG,MAAM;KAC5D,4CAAI,4BAAc5jB,cAAI,CAACwkB,QAAQ,CAACX,SAAS,CAAC,GAAGA,SAAS,GAAG,MAAM;KAC/D,4CAAI,oCAAkBE,aAAa,KAAK,IAAI;KAE5C,4CAAI,kDAAyB,4CAAI,0CAAoBnb,IAAI,CAAC,IAAI,CAAC;KAC/D,4CAAI,kDAAyB,4CAAI,0CAAoBA,IAAI,CAAC,IAAI,CAAC;KAC/D,4CAAI,8CAAuB,4CAAI,sCAAkBA,IAAI,CAAC,IAAI,CAAC;KAE3D,IAAI,CAAC8b,oBAAoB,CAACZ,MAAM,CAAC;;GAGlCa,IAAI,GACJ;KACCpd,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACrB,YAAY,EAAE,EAAE,SAAS,CAAC;;GAG7Cke,IAAI,GACJ;KACCrd,aAAG,CAACS,WAAW,CAAC,IAAI,CAACtB,YAAY,EAAE,EAAE,SAAS,CAAC;;GAGhDA,YAAY,GACZ;KACC,IAAI,4CAAI,kCAAgB,IAAI,EAC5B;OACC,MAAMqd,aAAa,GAAGpb,aAAG,CAAChC,MAAM,oBAAC;;;uBAGf,CAAkB;sBACnB,CAA6B;;;;uBAI5B,CAAiB;sBAClB,CAA6B;;;;uBAI5B,CAAkB;sBACnB,CAA6B;;;;uBAI5B,CAAiB;sBAClB,CAA6B;;IAE9C,GAlBoBuc,SAAS,CAACI,KAAK,0CAChB,IAAI,iDAIHJ,SAAS,CAACC,IAAI,0CACf,IAAI,iDAIHD,SAAS,CAACE,KAAK,0CAChB,IAAI,iDAIHF,SAAS,CAACG,IAAI,0CACf,IAAI,gDAEtB;OAED,4CAAI,gCAAc1a,aAAG,CAAChC,MAAM,kBAAC;;;;wBAIV,CAAmC;uBACpC,CAA6B;;;;wBAI5B,CAAmC;uBACpC,CAA6B;;;;wBAI5B,CAAmC;uBACpC,CAA6B;;;;wBAI5B,CAAmC;uBACpC,CAA6B;;OAE7C,CAA6C;;IAE/C,GApBqBuc,SAAS,CAACI,KAAK,GAAGJ,SAAS,CAACC,IAAI,0CACjC,IAAI,iDAIHD,SAAS,CAACE,KAAK,GAAGF,SAAS,CAACC,IAAI,0CACjC,IAAI,iDAIHD,SAAS,CAACE,KAAK,GAAGF,SAAS,CAACG,IAAI,0CACjC,IAAI,iDAIHH,SAAS,CAACI,KAAK,GAAGJ,SAAS,CAACG,IAAI,0CACjC,IAAI,iDAEpB,4CAAI,oCAAkBU,aAAa,GAAG,IAAI,CAE7C;;KAGF,+CAAO,IAAI;;GAGZzB,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZuC,SAAS,CAAC1C,MAAmB,EAC7B;KACC,4CAAI,0BAAWA,MAAM;;GAGtBnc,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZke,UAAU,GACV;KACC,OAAO,4CAAI,8BAAcA,UAAU;;CAmKrC;CAAC,6BAhKmBvT,KAAmB,EACtC;GACC,IAAI,CAAC,IAAI,CAAC3K,SAAS,EAAE,CAAC8e,UAAU,EAAE,EAClC;KACC;;GAGDnU,KAAK,CAACiG,cAAc,EAAE;GAEtB,MAAMrM,SAAiB,GAAGwa,MAAM,CAACpU,KAAK,CAACwR,MAAM,CAAC6C,OAAO,CAACza,SAAS,CAAC;GAEhE,MAAM4X,MAAM,GAAG,IAAI,CAACG,SAAS,EAAE;GAC/B,MAAM;KAAE2C,KAAK;KAAEC;IAAQ,GAAG/C,MAAM,CAACgD,qBAAqB,EAAE;GAExD,4CAAI,8BAAcd,UAAU,GAAGY,KAAK;GACpC,4CAAI,8BAAcb,WAAW,GAAGc,MAAM;GACtC,4CAAI,8BAAcf,KAAK,GAAGc,KAAK,GAAGC,MAAM;GACxC,4CAAI,8BAAcjB,YAAY,GAAGgB,KAAK;GACtC,4CAAI,8BAAcjB,aAAa,GAAGkB,MAAM;GACxC,4CAAI,8BAAcZ,MAAM,GAAG3T,KAAK,CAACyU,OAAO;GACxC,4CAAI,8BAAcb,MAAM,GAAG5T,KAAK,CAAC0U,OAAO;GACxC,4CAAI,8BAAcnB,UAAU,GAAG,IAAI;GACnC,4CAAI,8BAAc3Z,SAAS,GAAGA,SAAS;;;GAGvC,IAAI,CAAC1B,IAAI,CAAC,eAAe,CAAC;GAE1BtB,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACrB,YAAY,EAAE,EAAE,YAAY,CAAC;GAC/Ca,aAAG,CAACyR,KAAK,CAACmJ,MAAM,EAAE;KACjB8C,KAAK,EAAG,GAAEA,KAAM,IAAG;KACnBC,MAAM,EAAG,GAAEA,MAAO;IAClB,CAAC;GAEF3R,eAAK,CAAC3K,IAAI,CAACa,QAAQ,EAAE,aAAa,0CAAE,IAAI,gDAAuB;GAC/D8J,eAAK,CAAC3K,IAAI,CAACa,QAAQ,EAAE,WAAW,0CAAE,IAAI,4CAAqB;CAC5D;CAAC,6BAEkBkH,KAAmB,EACtC;GACC,MAAMwR,MAAM,GAAG,IAAI,CAACG,SAAS,EAAE;GAC/B,MAAMgD,YAAY,GAAG,4CAAI,8BAAc/a,SAAS,IAAI2Y,SAAS,CAACC,IAAI,GAAGD,SAAS,CAACG,IAAI,CAAC;GACpF,MAAMkC,UAAU,GAAG,4CAAI,8BAAchb,SAAS,IAAI2Y,SAAS,CAACE,KAAK,GAAGF,SAAS,CAACI,KAAK,CAAC;GAEpF,IAAI,4CAAI,8BAAcY,UAAU,EAChC;;KAEC,IAAIoB,YAAY,IAAIC,UAAU,EAC9B;OACC,IAAIC,IAAI,GAAG3F,IAAI,CAAC4F,KAAK,CAAC,4CAAI,8BAAcnB,MAAM,GAAG3T,KAAK,CAACyU,OAAO,CAAC;OAC/DI,IAAI,GAAG,4CAAI,8BAAcjb,SAAS,GAAG2Y,SAAS,CAACC,IAAI,GAAG,CAACqC,IAAI,GAAGA,IAAI;OAElE,MAAMP,KAAK,GAAGpF,IAAI,CAAC6F,KAAK,CAAC1C,KAAK,CAC7B,4CAAI,8BAAcqB,UAAU,GAAGmB,IAAI,0CACnC,IAAI,iEACJ,IAAI,kDACJ,CAAC;OAEF,MAAMN,MAAM,GAAGrF,IAAI,CAAC8F,IAAI,CAACV,KAAK,GAAG,4CAAI,8BAAcd,KAAK,CAAC;OAEzD5c,aAAG,CAACyR,KAAK,CAACmJ,MAAM,EAAE;SACjB8C,KAAK,EAAG,GAAEA,KAAM,IAAG;SACnBC,MAAM,EAAG,GAAEA,MAAO;QAClB,CAAC;OAEF,IAAI,CAACrc,IAAI,CAAC,UAAU,EAAE;SAAEoc,KAAK;SAAEC;QAAQ,CAAC;OAExC,4CAAI,8BAAclB,aAAa,GAAGkB,MAAM;OACxC,4CAAI,8BAAcjB,YAAY,GAAGgB,KAAK;MACtC,MACI,IAAIM,UAAU,EACnB;OACC,IAAIC,IAAI,GAAG3F,IAAI,CAAC4F,KAAK,CAAC,4CAAI,8BAAclB,MAAM,GAAG5T,KAAK,CAAC0U,OAAO,CAAC;OAC/DG,IAAI,GAAG,4CAAI,8BAAcjb,SAAS,GAAG2Y,SAAS,CAACE,KAAK,GAAG,CAACoC,IAAI,GAAGA,IAAI;OAEnE,MAAMN,MAAM,GAAGrF,IAAI,CAAC6F,KAAK,CAAC7F,IAAI,CAACoD,GAAG,CACjC,4CAAI,8BAAcmB,WAAW,GAAGoB,IAAI,0CACpC,IAAI;QAEJ,CAAC;OAEFje,aAAG,CAACyR,KAAK,CAACmJ,MAAM,EAAE,QAAQ,EAAG,GAAE+C,MAAO,IAAG,CAAC;OAC1C,IAAI,CAACrc,IAAI,CAAC,UAAU,EAAE;SAAEoc,KAAK,EAAE,4CAAI,8BAAchB,YAAY;SAAEiB;QAAQ,CAAC;OAExE,4CAAI,8BAAclB,aAAa,GAAGkB,MAAM;MACxC,MAED;OACC,IAAIM,IAAI,GAAG3F,IAAI,CAAC4F,KAAK,CAAC,4CAAI,8BAAcnB,MAAM,GAAG3T,KAAK,CAACyU,OAAO,CAAC;OAC/DI,IAAI,GAAG,4CAAI,8BAAcjb,SAAS,GAAG2Y,SAAS,CAACC,IAAI,GAAG,CAACqC,IAAI,GAAGA,IAAI;OAElE,MAAMP,KAAK,GAAGpF,IAAI,CAAC6F,KAAK,CAAC1C,KAAK,CAC7B,4CAAI,8BAAcqB,UAAU,GAAGmB,IAAI,0CACnC,IAAI,iEACJ,IAAI,kDACJ,CAAC;OAEFje,aAAG,CAACyR,KAAK,CAACmJ,MAAM,EAAE,OAAO,EAAG,GAAE8C,KAAM,IAAG,CAAC;OACxC,IAAI,CAACpc,IAAI,CAAC,UAAU,EAAE;SAAEoc,KAAK;SAAEC,MAAM,EAAE,4CAAI,8BAAclB;QAAe,CAAC;OAEzE,4CAAI,8BAAcC,YAAY,GAAGgB,KAAK;;;CAGzC;CAAC,6BAGD;GACC,IAAI,4CAAI,8BAAcf,UAAU,EAChC;KACC0B,UAAU,CAAC,MAAM;OAChB,MAAMX,KAAa,GAAG,4CAAI,8BAAchB,YAAY;OACpD,MAAMiB,MAAc,GAAG,4CAAI,8BAAclB,aAAa;OAEtD,4CAAI,8BAAcK,UAAU,GAAG,CAAC;OAChC,4CAAI,8BAAcD,WAAW,GAAG,CAAC;OACjC,4CAAI,8BAAcD,KAAK,GAAG,CAAC;OAC3B,4CAAI,8BAAcG,MAAM,GAAG,CAAC;OAC5B,4CAAI,8BAAcC,MAAM,GAAG,CAAC;OAC5B,4CAAI,8BAAcN,YAAY,GAAG,CAAC;OAClC,4CAAI,8BAAcD,aAAa,GAAG,CAAC;OACnC,4CAAI,8BAAcE,UAAU,GAAG,KAAK;OAEpC3c,aAAG,CAACS,WAAW,CAAC,IAAI,CAACtB,YAAY,EAAE,EAAE,YAAY,CAAC;OAElD,IAAI,CAACmC,IAAI,CAAC,aAAa,EAAE;SAAEoc,KAAK;SAAEC;QAAQ,CAAC;;;OAG3C3R,eAAK,CAACsS,MAAM,CAACpc,QAAQ,EAAE,aAAa,0CAAE,IAAI,gDAAuB;OACjE8J,eAAK,CAACsS,MAAM,CAACpc,QAAQ,EAAE,WAAW,0CAAE,IAAI,4CAAqB;MAC7D,EAAE,GAAG,CAAC;;CAET;CAAC,kCAGD;GACC,MAAMma,QAAQ,GAAG5jB,cAAI,CAACwkB,QAAQ,yCAAC,IAAI,wBAAW,2CAAG,IAAI,0BAAaC,QAAQ;GAE1E,MAAMqB,iBAAiB,GAAG,IAAI,CAAC9f,SAAS,EAAE,CAAC+f,cAAc,EAAE;GAC3D,IAAID,iBAAiB,KAAK,IAAI,EAC9B;KACC,OAAOjG,IAAI,CAACC,GAAG,CAACgG,iBAAiB,CAACX,qBAAqB,EAAE,CAACF,KAAK,GAAG,EAAE,EAAErB,QAAQ,CAAC;;GAGhF,OAAO,GAAG;CACX;CAAC,mCAGD;GACC,IAAI5jB,cAAI,CAACwkB,QAAQ,yCAAC,IAAI,0BAAY,EAClC;KACC,+CAAO,IAAI;;GAGZ,MAAMsB,iBAAiB,GAAG,IAAI,CAAC9f,SAAS,EAAE,CAAC+f,cAAc,EAAE;GAC3D,IAAID,iBAAiB,KAAK,IAAI,EAC9B;KACC,OAAOA,iBAAiB,CAACX,qBAAqB,EAAE,CAACD,MAAM,GAAG,EAAE;;GAG7D,OAAO,GAAG;CACX;;;;;AC5UD,CASyE;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAKzE,CAAO,MAAMc,kBAAkB,SAAS/D,kBAAkB,CAC1D;GAICzc,WAAW,CAAC4c,OAAkC,EAC9C;KACC,KAAK,CAACA,OAAO,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OALgB,IAAI6D,2BAAW;;KAAE;OAAA;OAAA,OACjB;;KAM/B,4CAAI,oCAAkB,IAAI1C,aAAa,CAAC;OACvCpB,MAAM,EAAE,IAAI,CAAC+D,QAAQ,EAAE;OACvBpoB,MAAM,EAAE,IAAI,CAACkI,SAAS,EAAE;OACxBwd,aAAa,EAAE,IAAI,CAACf,SAAS,CAAC,OAAO,CAAC;OACtCgB,cAAc,EAAE,IAAI,CAAChB,SAAS,CAAC,QAAQ,CAAC;OACxCqB,MAAM,EAAE;SACPqC,aAAa,EAAE,4CAAI,0CAAoBvd,IAAI,CAAC,IAAI,CAAC;SACjDwd,WAAW,EAAE,4CAAI,sCAAkBxd,IAAI,CAAC,IAAI;;MAE7C,CAAC;KAEF,IAAI,CAAC2Z,gBAAgB,EAAE,CAAChB,QAAQ,CAAEK,QAAiB,IAAK;OACvD,IAAIA,QAAQ,IAAI,4CAAI,kCAAgBsC,UAAU,EAAE,EAChD;SACC3c,aAAG,CAACQ,QAAQ,yCAAC,IAAI,mCAAkB,YAAY,CAAC;SAChD,4CAAI,kCAAgB4c,IAAI,EAAE;QAC1B,MAED;SACCpd,aAAG,CAACS,WAAW,yCAAC,IAAI,mCAAkB,YAAY,CAAC;SACnD,4CAAI,kCAAgB4c,IAAI,EAAE;;OAG3B,MAAMyB,SAAS,GAAGzE,QAAQ,IAAI,CAAC,4CAAI,kCAAgBsC,UAAU,EAAE;OAC/D,4CAAI,gCAAemC,SAAS;MAC5B,CAAC;KAEF,IAAI,CAACnY,MAAM,CAAC,IAAI,CAACsU,UAAU,EAAE,CAAC;KAC9B,4CAAI;;GAkEL0D,QAAQ,GACR;KACC,OAAO,4CAAI,gBAAOI,QAAQ,CAAC,OAAO,EAAE,MAAM;OAAA;OACzC,MAAMC,GAAqB,GAAG9c,QAAQ,CAACpE,aAAa,CAAC,KAAK,CAAC;OAC3DkhB,GAAG,CAACF,SAAS,GAAG,KAAK;OACrBE,GAAG,CAACC,GAAG,GAAG,IAAI,CAAC/D,SAAS,CAAC,KAAK,CAAC;OAE/B,MAAMjZ,MAAoB,GAAG,IAAI,CAACiZ,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;OACzD,IAAIjZ,MAAM,6BAANA,MAAM,CAAEG,KAAK,oCAAb,cAAe8c,KAAK,aAApB,oBAAsBF,GAAG,EAC7B;SACCA,GAAG,CAAClO,SAAS,GAAG7O,MAAM,CAACG,KAAK,CAAC8c,KAAK,CAACF,GAAG;;OAGvC,OAAOA,GAAG;MACV,CAAC;;GAGHrY,MAAM,CAACkU,OAAmB,EAC1B;KACC,MAAM6C,KAAK,GAAG7C,OAAO,CAAC6C,KAAK,GAAG,CAAC,GAAI,GAAE7C,OAAO,CAAC6C,KAAM,IAAG,GAAG,SAAS;KAClE,MAAMyB,WAAW,GAAGtE,OAAO,CAAC6C,KAAK,GAAG,CAAC,IAAI7C,OAAO,CAAC8C,MAAM,GAAG,CAAC,GAAI,GAAE9C,OAAO,CAAC6C,KAAM,MAAK7C,OAAO,CAAC8C,MAAO,EAAC,GAAG,MAAM;KAE7G3d,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACkN,QAAQ,EAAE,EAAE;OAAEjB,KAAK;OAAEC,MAAM,EAAE,MAAM;OAAEwB;MAAa,CAAC;;CAEpE;CAAC,oBAtFA;GACCnf,aAAG,CAACvG,MAAM,yCAAC,IAAI,mCAAkB,IAAI,CAACshB,SAAS,EAAE,CAAC;CACnD;CAAC,0BAGD;GACC,OAAO,4CAAI,gBAAOgE,QAAQ,CAAC,WAAW,EAAE,MAAM;KAC7C,MAAMK,aAAa,GAAG,4CAAI,kCAAgBjgB,YAAY,EAAE;KAExD,OAAOiC,aAAG,CAAChC,MAAM,oBAAC;;OAEhB,CAA4B;OAC5B,CAAgB;;IAElB,2CAHI,IAAI,6CACJggB,aAAa;IAGjB,CAAC;CACH;CAAC,+BAGD;GACC,OAAO,4CAAI,gBAAOL,QAAQ,CAAC,iBAAiB,EAAE,MAAM;KACnD,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;OAEhB,CAAkB;;IAEpB,GAFI,IAAI,CAACuf,QAAQ,EAAE;IAGnB,CAAC;CACH;CAAC,wBAEaG,SAAkB,EAChC;GACC9e,aAAG,CAACC,IAAI,yCAAC,IAAI,6CAAuB;KAAE6e;IAAW,CAAC;GAClD,IAAIA,SAAS,EACb;KACC9e,aAAG,CAACQ,QAAQ,yCAAC,IAAI,mCAAkB,aAAa,CAAC;IACjD,MAED;KACCR,aAAG,CAACS,WAAW,yCAAC,IAAI,mCAAkB,aAAa,CAAC;;CAEtD;CAAC,6BAEkB2I,KAAgB,EACnC;GACC,4CAAI,gCAAe,KAAK;GACxB,IAAI,CAACgR,WAAW,CAAC,IAAI,CAAC;CACvB;CAAC,2BAEgBhR,KAAgB,EACjC;GACC,IAAI,CAACgR,WAAW,CAAC,IAAI,CAAC;GAEtB,IAAI,CAAC3b,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,MAAMzS,IAAmB,GAAG+hB,6BAAa,CAAC,IAAI,CAAC6E,UAAU,EAAE,CAAC;KAC5D,IAAIuE,gBAAgB,CAACnrB,IAAI,CAAC,EAC1B;OACC,MAAM;SAAEwpB,KAAK;SAAEC;QAAQ,GAAGvU,KAAK,CAACmG,OAAO,EAAE;OACzCrb,IAAI,CAACorB,iBAAiB,CAAC5B,KAAK,EAAEC,MAAM,CAAC;;IAEtC,CAAC;CACH;;CCnHD;;CA8BA;AACA,CAAO,MAAM4B,aAAa,SAASC,6BAAa,CAChD;GAMCvhB,WAAW,CACVwhB,YAA6B,EAC7BC,IAAsB,EACtBhC,KAAc,EACdC,MAAe,EACf9R,GAAa,EAEd;KACC,KAAK,CAACA,GAAG,CAAC;KAEV,IAAI,CAAC8T,cAAc,GAAGF,YAAY;KAClC,IAAI,CAACG,MAAM,GAAGnnB,cAAI,CAACqN,aAAa,CAAC4Z,IAAI,CAAC,GAAGA,IAAI,GAAG,EAAE;KAClD,IAAI,CAACG,OAAO,GAAGpnB,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,GAAGpF,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC,GAAG,IAAI,CAACkC,MAAM,CAACE,YAAY;KAC/F,IAAI,CAACC,QAAQ,GAAGtnB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,IAAIA,MAAM,GAAG,CAAC,GAAGrF,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC,GAAG,IAAI,CAACiC,MAAM,CAACI,aAAa;;GAKrG,OAAOjnB,OAAO,GACd;KACC,OAAO,YAAY;;GAGpB,OAAO+I,KAAK,CAAC5N,IAAmB,EAChC;KACC,OAAO,IAAIqrB,aAAa,CAACrrB,IAAI,CAACyrB,cAAc,EAAEzrB,IAAI,CAAC0rB,MAAM,EAAE1rB,IAAI,CAAC2rB,OAAO,EAAE3rB,IAAI,CAAC6rB,QAAQ,EAAE7rB,IAAI,CAAC6N,KAAK,CAAC;;GAGpGke,KAAK,GACL;KACC,OAAO,IAAI,CAACN,cAAc;;GAG3BO,eAAe,GACf;KACC,OAAO,IAAI,CAACP,cAAc;;GAG3BQ,OAAO,GACP;KACC,OAAO,IAAI,CAACP,MAAM;;GAGnBN,iBAAiB,CAAC5B,KAAa,EAAEC,MAAc,EAC/C;KACC,MAAMrR,QAAQ,GAAG,IAAI,CAACC,WAAW,EAAE;KACnC,IAAI9T,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,EACxB;OACCpR,QAAQ,CAACuT,OAAO,GAAGvH,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC;;KAGrC,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACzB;OACCrR,QAAQ,CAACyT,QAAQ,GAAGzH,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC;;;GAIxCyC,QAAQ,GACR;KACC,MAAMvP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACgP,OAAO;;GAGpBQ,SAAS,GACT;KACC,MAAMxP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACkP,QAAQ;;GAGrBO,SAAS,GACT;KACC,OAAO,IAAI,CAACV,MAAM,CAACE,YAAY,KAAK,IAAI,CAACM,QAAQ,EAAE,IAAI,IAAI,CAACR,MAAM,CAACI,aAAa,KAAK,IAAI,CAACK,SAAS,EAAE;;GAGtG,OAAO1d,UAAU,CAACC,cAAuC,EACzD;KACC,OAAO2d,oBAAoB,CAC1B3d,cAAc,CAAC6c,YAAY,EAC3B7c,cAAc,CAAC8c,IAAI,EACnB9c,cAAc,CAAC8a,KAAK,EACpB9a,cAAc,CAAC+a,MAAM,CACrB;;GAGF,OAAOnb,SAAS,GAChB;KACC,OAAO;OACNwc,GAAG,EAAGjY,OAAyB,IAAK;SACnC,IAAI,CAACA,OAAO,CAACM,YAAY,CAAC,oBAAoB,CAAC,EAC/C;WACC,OAAO,IAAI;;SAGZ,OAAO;WACN1M,UAAU,EAAGqkB,GAAqB,IAAiC;aAClE,MAAM;eAAEwB,WAAW;eAAEC;cAAe,GAAGzB,GAAG,CAACvB,OAAO;aAClD,IAAIiC,IAAI,GAAG,IAAI;aACf,IACA;eACCA,IAAI,GAAGgB,IAAI,CAAC5pB,KAAK,CAAC2pB,aAAa,CAAC;cAChC,CACD,MACA;eACC,OAAO,IAAI;;aAGZ,MAAMvsB,IAAI,GAAGqsB,oBAAoB,CAACC,WAAW,EAAEd,IAAI,CAAC;aAEpD,OAAO;eACNxrB;cACA;YACD;WACD2G,QAAQ,EAAE;UACV;;MAEF;;GAGFyM,SAAS,GACT;KACC,OAAO;OAAEpQ,OAAO,EAAE;MAAM;;GAGzB+L,UAAU,GACV;KACC,OAAO;OACNyc,IAAI,EAAE,IAAI,CAACE,MAAM;OACjBH,YAAY,EAAE,IAAI,CAACE,cAAc;OACjCjC,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;OACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;OACxBtjB,IAAI,EAAE,YAAY;OAClBwK,OAAO,EAAE;MACT;;GAGFvF,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAMoqB,IAAI,GAAGze,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC3C,IAAIrF,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,4CAAb,cAAe8c,KAAK,qBAApB,oBAAsB3U,SAAS,CAAC,EACxD;OACCvK,aAAG,CAACQ,QAAQ,CAACmgB,IAAI,EAAE1e,MAAM,CAACG,KAAK,CAAC8c,KAAK,CAAC3U,SAAS,CAAC;;KAGjD,OAAOoW,IAAI;;GAGZre,SAAS,CAACC,QAAuB,EAAE3N,MAAmB,EAAEqN,MAAoB,EAC5E;KACC,OAAO,KAAK;;GAGb2e,QAAQ,CAACrqB,MAAqB,EAAE0L,MAAoB,EACpD;KACC,OAAO;OACN4e,cAAc,EAAEpC,kBAAkB;OAClC5D,OAAO,EAAE;SACRoE,GAAG,EAAE,IAAI,CAACW,MAAM,CAACkB,UAAU;SAC3BpD,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;SACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;SACxBhE,QAAQ,EAAE,IAAI,CAAC+D,QAAQ,EAAE;SACzB9D,SAAS,EAAE,IAAI,CAAC+D,SAAS,EAAE;SAC3Bpe;;;;MAID;;;GAGFtI,QAAQ,GACR;KACC,OAAO,IAAI;;CAEb;CArLa4lB,aAAa,CAuBlBwB,qBAAqB,GAAG,IAAI;AAgKpC,CAAO,SAASR,oBAAoB,CACnCd,YAA6B,EAC7BC,IAAsB,GAAG,EAAE,EAC3BhC,KAAa,GAAG,IAAI,EACpBC,MAAc,GAAG,IAAI,EAEtB;GACC,OAAO,IAAI4B,aAAa,CAACE,YAAY,EAAEC,IAAI,EAAEhC,KAAK,EAAEC,MAAM,CAAC;CAC5D;AAEA,CAAO,SAAS0B,gBAAgB,CAACnrB,IAAoC,EACrE;GACC,OAAOA,IAAI,YAAYqrB,aAAa;CACrC;;CCnOA;;CAyBA;AACA,CAAO,MAAMyB,QAAQ,SAASjZ,wBAAQ,CACtC;GAIC9J,WAAW,CACVwhB,YAA6B,EAC7BC,IAAsB,EACtB7T,GAAa,EAEd;KACC,MAAMoV,QAAQ,GAAGxoB,cAAI,CAACqN,aAAa,CAAC4Z,IAAI,CAAC,GAAGA,IAAI,GAAG,EAAE;KAErD,KAAK,CAACuB,QAAQ,CAACljB,IAAI,IAAI,EAAE,EAAE8N,GAAG,CAAC;KAE/B,IAAI,CAAC8T,cAAc,GAAGF,YAAY;KAClC,IAAI,CAACG,MAAM,GAAGqB,QAAQ;;GAGvB,OAAOloB,OAAO,GACd;KACC,OAAO,MAAM;;GAGd,OAAO+I,KAAK,CAAC5N,IAAc,EAC3B;KACC,OAAO,IAAI8sB,QAAQ,CAAC9sB,IAAI,CAACyrB,cAAc,EAAEzrB,IAAI,CAAC0rB,MAAM,EAAE1rB,IAAI,CAAC6N,KAAK,CAAC;;GAGlEke,KAAK,GACL;KACC,OAAO,IAAI,CAACN,cAAc;;GAG3BO,eAAe,GACf;KACC,OAAO,IAAI,CAACP,cAAc;;GAG3BQ,OAAO,GACP;KACC,OAAO,IAAI,CAACP,MAAM;;GAGnB7pB,OAAO,GACP;KACC,OAAO,IAAI,CAAC6pB,MAAM,CAAC7hB,IAAI,IAAI,SAAS;;GAGrC,OAAO4E,UAAU,CAACC,cAAkC,EACpD;KACC,OAAOse,eAAe,CAACte,cAAc,CAAC6c,YAAY,EAAE7c,cAAc,CAAC8c,IAAI,CAAC;;GAGzE,OAAOld,SAAS,GAChB;KACC,OAAO;OACNme,IAAI,EAAG5Z,OAAoB,IAAK;SAC/B,IAAI,CAACA,OAAO,CAACM,YAAY,CAAC,cAAc,CAAC,EACzC;WACC,OAAO,IAAI;;SAGZ,OAAO;WACN1M,UAAU,EAAGgmB,IAAqB,IAAiC;aAClE,MAAM;eAAEQ,MAAM;eAAEF;cAAU,GAAGla,OAAO,CAAC0W,OAAO;aAC5C,IAAIiC,IAAI,GAAG,IAAI;aACf,IACA;eACCA,IAAI,GAAGgB,IAAI,CAAC5pB,KAAK,CAACmqB,QAAQ,CAAC;cAC3B,CACD,MACA;eACC,OAAO,IAAI;;aAGZ,MAAM/sB,IAAI,GAAGgtB,eAAe,CAACC,MAAM,EAAEzB,IAAI,CAAC;aAE1C,OAAO;eAAExrB;cAAM;YACf;WACD2G,QAAQ,EAAE;UACV;;MAEF;;GAGFyM,SAAS,GACT;KACC,MAAMpQ,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC9C5G,OAAO,CAAC8D,WAAW,GAAG,IAAI,CAACjF,OAAO,EAAE;KACpCmB,OAAO,CAACiL,YAAY,CAAC,cAAc,EAAE,IAAI,CAACwd,cAAc,CAAC;KACzDzoB,OAAO,CAACiL,YAAY,CAAC,gBAAgB,EAAEue,IAAI,CAACU,SAAS,CAAC,IAAI,CAACxB,MAAM,CAAC,CAAC;KAEnE,OAAO;OAAE1oB;MAAS;;GAGnB+L,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrByc,IAAI,EAAE,IAAI,CAACE,MAAM;OACjBH,YAAY,EAAE,IAAI,CAACE,cAAc;OACjC5iB,IAAI,EAAE,MAAM;OACZwK,OAAO,EAAE;MACT;;GAGFvF,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAMoqB,IAAI,GAAGze,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC3C,IAAIrF,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,qBAAb,cAAeif,IAAI,CAAC,EAC5C;OACCrhB,aAAG,CAACQ,QAAQ,CAACmgB,IAAI,EAAE1e,MAAM,CAACG,KAAK,CAACif,IAAI,CAAC;;KAGtCV,IAAI,CAAC3lB,WAAW,GAAG,IAAI,CAACjF,OAAO,EAAE;KAEjC,OAAO4qB,IAAI;;GAGZre,SAAS,CAACC,QAAkB,EAAE3N,MAAmB,EAAEqN,MAAoB,EACvE;KACC,OAAO,KAAK;;CAEd;AAEA,CAAO,SAASif,eAAe,CAACzB,YAA6B,EAAEC,IAAsB,GAAG,EAAE,EAC1F;GACC,OAAO,IAAIsB,QAAQ,CAACvB,YAAY,EAAEC,IAAI,CAAC,CAACnO,OAAO,CAAC,OAAO,CAAC;CACzD;AAEA,CAAO,SAAS+P,WAAW,CAACptB,IAAoC,EAChE;GACC,OAAOA,IAAI,YAAY8sB,QAAQ;CAChC;;CChKO,SAASO,aAAa,CAACzB,YAAY,EAAEE,aAAa,EAAEwB,WAAW,EAAEC,YAAY,EACpF;GACC,MAAMC,UAAkB,GAAGF,WAAW,GAAG1B,YAAY;GACrD,MAAM6B,WAAmB,GAAGF,YAAY,GAAGzB,aAAa;GACxD,MAAMpD,KAAa,GAAGtE,IAAI,CAACC,GAAG,CAACmJ,UAAU,EAAEC,WAAW,CAAC;GAEvD,MAAMC,eAAe,GAAGhF,KAAK,GAAG,CAAC,CAAC;GAClC,MAAMc,KAAK,GAAGkE,eAAe,GAAG9B,YAAY,GAAGA,YAAY,GAAGlD,KAAK;GACnE,MAAMe,MAAM,GAAGiE,eAAe,GAAG5B,aAAa,GAAGA,aAAa,GAAGpD,KAAK;GAEtE,OAAO,CAACc,KAAK,EAAEC,MAAM,CAAC;CACvB;;;;ACVA,CAUoE;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAEpE,CAAO,MAAMkE,kBAAkB,SAASnH,kBAAkB,CAC1D;GAICzc,WAAW,CAAC4c,OAAkC,EAC9C;KACC,KAAK,CAACA,OAAO,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OALgB,IAAI6D,2BAAW;;KAAE;OAAA;OAAA,OACjB;;KAM/B,4CAAI,wCAAkB,IAAI1C,aAAa,CAAC;OACvCpB,MAAM,0CAAE,IAAI,yBAAY;OACxBrkB,MAAM,EAAE,IAAI,CAACkI,SAAS,EAAE;OACxB0d,QAAQ,EAAE,GAAG;OACbC,SAAS,EAAE,GAAG;OACdG,MAAM,EAAE;SACPuF,QAAQ,EAAE,4CAAI,gCAAezgB,IAAI,CAAC,IAAI,CAAC;SACvCwd,WAAW,EAAE,4CAAI,0CAAkBxd,IAAI,CAAC,IAAI;;MAE7C,CAAC;KAEF,IAAI,CAAC2Z,gBAAgB,EAAE,CAAChB,QAAQ,CAAEK,QAAiB,IAAK;OACvD,IAAIA,QAAQ,IAAI,4CAAI,sCAAgBsC,UAAU,EAAE,EAChD;SACC3c,aAAG,CAACQ,QAAQ,yCAAC,IAAI,uCAAkB,YAAY,CAAC;SAChD,4CAAI,sCAAgB4c,IAAI,EAAE;QAC1B,MAED;SACCpd,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAkB,YAAY,CAAC;SACnD,4CAAI,sCAAgB4c,IAAI,EAAE;;OAG3B,4CAAI,oCAAehD,QAAQ;MAC3B,CAAC;KAEF,IAAI,CAAC1T,MAAM,CAAC,IAAI,CAACsU,UAAU,EAAE,CAAC;KAC9B,4CAAI;;GA6FLtU,MAAM,CAACkU,OAAmB,EAC1B;KACC,MAAM6C,KAAK,GAAGjlB,cAAI,CAACwkB,QAAQ,CAACpC,OAAO,CAAC6C,KAAK,CAAC,IAAI7C,OAAO,CAAC6C,KAAK,GAAG,CAAC,GAAG7C,OAAO,CAAC6C,KAAK,GAAG,IAAI;KACtF,MAAMC,MAAM,GAAGllB,cAAI,CAACwkB,QAAQ,CAACpC,OAAO,CAAC8C,MAAM,CAAC,IAAI9C,OAAO,CAAC8C,MAAM,GAAG,CAAC,GAAG9C,OAAO,CAAC8C,MAAM,GAAG,IAAI;KAC1F,MAAMwB,WAAW,GAAGzB,KAAK,GAAG,CAAC,IAAIC,MAAM,GAAG,CAAC,GAAI,GAAED,KAAM,MAAKC,MAAO,EAAC,GAAG,MAAM;KAE7E3d,aAAG,CAAC+hB,MAAM,yCAAC,IAAI,2BAAc;OAC5BC,KAAK,EAAE;SACNtE,KAAK;SACLC,MAAM,EAAE;QACR;OACDlM,KAAK,EAAE;SACNiM,KAAK;SACLC,MAAM,EAAE,MAAM;SACdwB;;MAED,CAAC;;CAEJ;CAAC,sBA3GA;GACCnf,aAAG,CAACvG,MAAM,yCAAC,IAAI,uCAAkB,IAAI,CAACshB,SAAS,EAAE,CAAC;CACnD;CAAC,4BAGD;GACC,OAAO,4CAAI,oBAAOgE,QAAQ,CAAC,WAAW,EAAE,MAAM;KAC7C,OAAO3d,aAAG,CAAChC,MAAM,oBAAC;;0DAEmC,CAAmB;OACtE,CAAqC;;IAEvC,2CAHuD,IAAI,2BACvD,4CAAI,sCAAgBD,YAAY,EAAE;IAGtC,CAAC;CACH;CAAC,sBAGD;GACC,OAAO,4CAAI,oBAAO4f,QAAQ,CAAC,OAAO,EAAE,MAAM;KAAA;KACzC,MAAMkD,KAAuB,GAAGjiB,aAAG,CAACkiB,MAAM,CAAC;OAC1CrkB,GAAG,EAAE,OAAO;OACZmkB,KAAK,EAAE;SACNG,QAAQ,EAAE,IAAI;SACdC,OAAO,EAAE,UAAU;SACnBC,WAAW,EAAE,IAAI;SACjBpD,GAAG,EAAE,IAAI,CAAC/D,SAAS,CAAC,KAAK;QACzB;OACDqB,MAAM,EAAE;SACP+F,cAAc,EAAGlZ,KAAY,IAAK;WACjC,IAAI,CAAC3K,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;aAC7B,MAAMzS,IAAmB,GAAG+hB,6BAAa,CAAC,IAAI,CAAC6E,UAAU,EAAE,CAAC;aAC5D,IAAIyH,gBAAgB,CAACruB,IAAI,CAAC,IAAIA,IAAI,CAACksB,QAAQ,EAAE,KAAK,CAAC,EACnD;eACC,MAAM,CAAC1C,KAAK,EAAEC,MAAM,CAAC,GAAG4D,aAAa,CACpCnY,KAAK,CAACwR,MAAM,CAAC4H,UAAU,EACvBpZ,KAAK,CAACwR,MAAM,CAAC6H,WAAW,EACxB,GAAG,EACH,GAAG,CACH;eAEDvuB,IAAI,CAACorB,iBAAiB,CAAC5B,KAAK,EAAEC,MAAM,CAAC;;YAEtC,CAAC;;;MAGJ,CAAC;KAEF,MAAM1b,MAAoB,GAAG,IAAI,CAACiZ,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;KACzD,IAAIjZ,MAAM,6BAANA,MAAM,CAAEG,KAAK,oCAAb,cAAe6f,KAAK,aAApB,oBAAsBS,MAAM,EAChC;OACCT,KAAK,CAACnR,SAAS,GAAG7O,MAAM,CAACG,KAAK,CAAC6f,KAAK,CAACS,MAAM;;KAG5C,OAAOT,KAAK;IACZ,CAAC;CACH;CAAC,wBAEa7Y,KAAgB,EAC9B;GACC,IAAI,CAACzC,MAAM,CAACyC,KAAK,CAACmG,OAAO,EAAE,CAAC;CAC7B;CAAC,6BAEgBnG,KAAgB,EACjC;GACC,IAAI,CAACgR,WAAW,CAAC,IAAI,CAAC;GAEtB,IAAI,CAAC3b,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,MAAMzS,IAAmB,GAAG+hB,6BAAa,CAAC,IAAI,CAAC6E,UAAU,EAAE,CAAC;KAC5D,IAAIyH,gBAAgB,CAACruB,IAAI,CAAC,EAC1B;OACC,MAAM;SAAEwpB,KAAK;SAAEC;QAAQ,GAAGvU,KAAK,CAACmG,OAAO,EAAE;OACzCrb,IAAI,CAACorB,iBAAiB,CAAC5B,KAAK,EAAEC,MAAM,CAAC;;IAEtC,CAAC;CACH;CAAC,0BAEamB,SAAkB,EAChC;GACC9e,aAAG,CAACC,IAAI,yCAAC,IAAI,uCAAkB;KAAE6e;IAAW,CAAC;GAC7C,IAAIA,SAAS,EACb;KACC9e,aAAG,CAACQ,QAAQ,yCAAC,IAAI,uCAAkB,aAAa,CAAC;IACjD,MAED;KACCR,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAkB,aAAa,CAAC;;CAEtD;;CC5ID;;CA8BA;AACA,CAAO,MAAMkiB,aAAa,SAASnD,6BAAa,CAChD;GAMCvhB,WAAW,CACVwhB,YAA6B,EAC7BC,IAAsB,EACtBhC,KAAc,EACdC,MAAe,EACf9R,GAAa,EAEd;KACC,KAAK,CAACA,GAAG,CAAC;KAAC,KAXZgU,OAAO,GAAW,CAAC;KAAA,KACnBE,QAAQ,GAAW,CAAC;KAYnB,IAAI,CAACJ,cAAc,GAAGF,YAAY;KAClC,IAAI,CAACG,MAAM,GAAGnnB,cAAI,CAACqN,aAAa,CAAC4Z,IAAI,CAAC,GAAGA,IAAI,GAAG,EAAE;KAClD,IAAI,CAACG,OAAO,GACXpnB,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,GAC9BpF,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC,GAChB,IAAI,CAACkC,MAAM,CAACE,YAAY,GAAG,CAAC,GAAG,IAAI,CAACF,MAAM,CAACE,YAAY,GAAG,IAAI,CAACD,OAAS;KAG7E,IAAI,CAACE,QAAQ,GACZtnB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,IAAIA,MAAM,GAAG,CAAC,GAChCrF,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC,GACjB,IAAI,CAACiC,MAAM,CAACI,aAAa,GAAG,CAAC,GAAG,IAAI,CAACJ,MAAM,CAACI,aAAa,GAAG,IAAI,CAACD,QACrE;;GAKF,OAAOhnB,OAAO,GACd;KACC,OAAO,YAAY;;GAGpB,OAAO+I,KAAK,CAAC5N,IAAmB,EAChC;KACC,OAAO,IAAIyuB,aAAa,CAACzuB,IAAI,CAACyrB,cAAc,EAAEzrB,IAAI,CAAC0rB,MAAM,EAAE1rB,IAAI,CAAC2rB,OAAO,EAAE3rB,IAAI,CAAC6rB,QAAQ,EAAE7rB,IAAI,CAAC6N,KAAK,CAAC;;GAGpGke,KAAK,GACL;KACC,OAAO,IAAI,CAACN,cAAc;;GAG3BO,eAAe,GACf;KACC,OAAO,IAAI,CAACP,cAAc;;GAG3BQ,OAAO,GACP;KACC,OAAO,IAAI,CAACP,MAAM;;GAGnBN,iBAAiB,CAAC5B,KAAa,EAAEC,MAAc,EAC/C;KACC,MAAMrR,QAAQ,GAAG,IAAI,CAACC,WAAW,EAAE;KACnC,IAAI9T,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,EACxB;OACCpR,QAAQ,CAACuT,OAAO,GAAGvH,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC;;KAGrC,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACzB;OACCrR,QAAQ,CAACyT,QAAQ,GAAGzH,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC;;;GAIxCyC,QAAQ,GACR;KACC,MAAMvP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACgP,OAAO;;GAGpBQ,SAAS,GACT;KACC,MAAMxP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACkP,QAAQ;;GAGrB,OAAOpd,UAAU,CAACC,cAAuC,EACzD;KACC,OAAOggB,oBAAoB,CAC1BhgB,cAAc,CAAC6c,YAAY,EAC3B7c,cAAc,CAAC8c,IAAI,EACnB9c,cAAc,CAAC8a,KAAK,EACpB9a,cAAc,CAAC+a,MAAM,CACrB;;GAGF,OAAOnb,SAAS,GAChB;KACC,OAAO,IAAI;;GAGZ8E,SAAS,GACT;KACC,OAAO;OAAEpQ,OAAO,EAAE;MAAM;;GAGzB+L,UAAU,GACV;KACC,OAAO;OACNyc,IAAI,EAAE,IAAI,CAACE,MAAM;OACjBH,YAAY,EAAE,IAAI,CAACE,cAAc;OACjCjC,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;OACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;OACxBtjB,IAAI,EAAE,YAAY;OAClBwK,OAAO,EAAE;MACT;;GAGFvF,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAM6Q,GAAG,GAAGlF,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAE1C,IAAIrF,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,4CAAb,cAAe6f,KAAK,qBAApB,oBAAsB1X,SAAS,CAAC,EACxD;OACCvK,aAAG,CAACQ,QAAQ,CAAC4G,GAAG,EAAEnF,MAAM,CAACG,KAAK,CAAC6f,KAAK,CAAC1X,SAAS,CAAC;;KAGhD,OAAOnD,GAAG;;GAGX9E,SAAS,CAACC,QAAuB,EAAE3N,MAAmB,EAAEqN,MAAoB,EAC5E;KACC,OAAO,KAAK;;GAGb2e,QAAQ,CAACrqB,MAAqB,EAAE0L,MAAoB,EACpD;KACC,OAAO;OACN4e,cAAc,EAAEgB,kBAAkB;OAClChH,OAAO,EAAE;SACRoE,GAAG,EAAE,IAAI,CAACW,MAAM,CAACiD,WAAW;SAC5BnF,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;SACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;SACxBhE,QAAQ,EAAE,IAAI,CAAC+D,QAAQ,EAAE;SACzB9D,SAAS,EAAE,IAAI,CAAC+D,SAAS,EAAE;SAC3Bpe;;MAED;;GAGFtI,QAAQ,GACR;KACC,OAAO,IAAI;;CAEb;CA3JagpB,aAAa,CAgClB5B,qBAAqB,GAAG,IAAI;AA6HpC,CAAO,SAAS6B,oBAAoB,CACnCnD,YAA6B,EAC7BC,IAAsB,GAAG,EAAE,EAC3BhC,KAAa,GAAG,IAAI,EACpBC,MAAc,GAAG,IAAI,EAEtB;GACC,MAAMzpB,IAAmB,GAAG,IAAIyuB,aAAa,CAAClD,YAAY,EAAEC,IAAI,EAAEhC,KAAK,EAAEC,MAAM,CAAC;GAEhF,OAAOla,qCAAqB,CAACvP,IAAI,CAAC;CACnC;AAEA,CAAO,SAASquB,gBAAgB,CAACruB,IAAoC,EACrE;GACC,OAAOA,IAAI,YAAYyuB,aAAa;CACrC;;CCtMO,SAASG,gBAAgB,CAAC1Z,KAAgB,EACjD;GACC,MAAMwR,MAAiC,GAAGxR,KAAK,CAACwR,MAAM;GACtD,IAAImI,YAAY,GAAG,IAAI;GACvB,IAAInI,MAAM,KAAK,IAAI,EACnB;KACCmI,YAAY,GAAGnI,MAAM,CAACoI,QAAQ,KAAK,CAAC,GAAGpI,MAAM,CAACqI,WAAW,GAAGrI,MAAM,CAACsI,aAAa,CAACD,WAAW;;GAG7F,IAAIE,KAAK,GAAG,IAAI;GAChB,MAAMC,YAAY,GAAG,CAACL,YAAY,IAAIM,MAAM,EAAEC,YAAY,EAAE;GAC5D,IAAIphB,QAAQ,CAACqhB,mBAAmB,EAChC;KACCJ,KAAK,GAAGjhB,QAAQ,CAACqhB,mBAAmB,CAACna,KAAK,CAACyU,OAAO,EAAEzU,KAAK,CAAC0U,OAAO,CAAC;IAClE,MACI,IAAI1U,KAAK,CAACoa,WAAW,IAAIJ,YAAY,KAAK,IAAI,EACnD;KACCA,YAAY,CAACK,QAAQ,CAACra,KAAK,CAACoa,WAAW,EAAEpa,KAAK,CAACsa,WAAW,IAAI,CAAC,CAAC;KAChEP,KAAK,GAAGC,YAAY,CAACO,UAAU,CAAC,CAAC,CAAC;IAClC,MAED;KACC,MAAM,IAAIxlB,KAAK,CAAC,wCAAwC,CAAC;;GAG1D,OAAOglB,KAAK;CACb;;CC7BO,SAASS,kBAAkB,CAAC5f,SAAyC,EAC5E;GACC,MAAMrP,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACoU,gCAAgB,CAAC3lB,SAAS,CAAC,EAChC;KACC,OAAO,IAAI;;GAGZ,MAAMwC,KAAK,GAAGxC,SAAS,CAACyJ,QAAQ,EAAE;GAClC,MAAMlK,IAAI,GAAGiD,KAAK,CAAC,CAAC,CAAC;GAErB,OAAO6M,SAAS,CAAC9P,IAAI,CAAC,GAAGA,IAAI,GAAG,IAAI;CACrC;;;;ACdA,CAmBA,MAAM2vB,gBAAgB,GAAG,kCAAkC;CAC3D,MAAMC,iBAAiB,GAAG1iB,aAAG,CAAChC,MAAM,oBAAC,4FAA0F,EAAC;AAEhI,CAAO,SAAS2kB,qBAAqB,CACpCxtB,MAAkB,EAClBytB,UAA8B,EAC9BC,MAAgB,EAEjB;GACC,MAAMC,YAAY,GAAIhwB,IAAoC,IAAc;KACvE,OAAOA,IAAI,YAAY8vB,UAAU;IACjC;GAED,MAAMG,gBAAgB,GAAG,MAA0B;KAClD,OAAOP,kBAAkB,CAAE1vB,IAAiB,IAAKgwB,YAAY,CAAChwB,IAAI,CAAC,CAAC;IACpE;GAED,OAAO2K,8BAAa,CACnBtI,MAAM,CAACqP,eAAe,CACrBwe,iCAAiB,EAChBhb,KAAgB,IAAc;KAC9B,MAAMib,aAA0B,GAAGF,gBAAgB,EAAE;KACrD,IAAI,CAACE,aAAa,EAClB;OACC,OAAO,KAAK;;KAGb,MAAMC,OAAO,GAAGC,eAAe,CAACnb,KAAK,EAAEib,aAAa,CAAC;KACrD,IAAIC,OAAO,EACX;OACC/tB,MAAM,CAACqQ,eAAe,CAAChU,kBAAkB,CAAC;;KAG3C,OAAO0xB,OAAO;IACd,EACDrP,qCAAqB,CACrB,EAED1e,MAAM,CAACqP,eAAe,CACrB4e,gCAAgB,EACfpb,KAAgB,IAAc;KAC9B,MAAMib,aAA0B,GAAGF,gBAAgB,EAAE;KACrD,IAAI,CAACE,aAAa,EAClB;OACC,OAAO,KAAK;;KAGb,OAAOI,cAAc,CAACrb,KAAK,EAAE7S,MAAM,CAAC;IACpC,EACD0P,oCAAoB,CACpB,EAED1P,MAAM,CAACqP,eAAe,CACrB8e,4BAAY,EACXtb,KAAgB,IAAc;KAC9B,MAAMib,aAA0B,GAAGF,gBAAgB,EAAE;KACrD,IAAI,CAACE,aAAa,EAClB;OACC,OAAO,KAAK;;KAGb9tB,MAAM,CAACqQ,eAAe,CAAC/T,gBAAgB,CAAC;KAExC,OAAO8xB,cAAc,CAACvb,KAAK,EAAE7S,MAAM,EAAE8tB,aAAa,EAAEJ,MAAM,CAAC;IAC3D,EACDhP,qCAAqB,CACrB,CACD;CACF;CAEA,SAASsP,eAAe,CAACnb,KAAgB,EAAEib,aAA0B,EACrE;GACC,MAAM1U,YAAY,GAAGvG,KAAK,CAACuG,YAAY;GACvC,IAAI,CAACA,YAAY,EACjB;KACC,OAAO,KAAK;;GAGbA,YAAY,CAACE,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;GACvCF,YAAY,CAACiV,YAAY,CAACd,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;GAClDnU,YAAY,CAACE,OAAO,CACnBgU,gBAAgB,EAChBnD,IAAI,CAACU,SAAS,CAAC;KACdyD,IAAI,EAAER,aAAa,CAACphB,UAAU,EAAE;KAChClG,IAAI,EAAEsnB,aAAa,CAACtrB,OAAO;IAC3B,CAAC,CACF;GAED,OAAO,IAAI;CACZ;CAEA,SAAS0rB,cAAc,CAACrb,KAAgB,EAAE7S,MAAkB,EAC5D;GACC,IAAI,CAACuuB,OAAO,CAAC1b,KAAK,EAAE7S,MAAM,CAAC,EAC3B;KACC6S,KAAK,CAACiG,cAAc,EAAE;;GAGvB,OAAO,IAAI;CACZ;CAEA,SAASsV,cAAc,CACtBvb,KAAgB,EAChB7S,MAAkB,EAClB8tB,aAA0B,EAC1BJ,MAAgB,EAEjB;GAAA;GACC,MAAMc,QAAQ,0BAAG3b,KAAK,CAACuG,YAAY,qBAAlB,oBAAoBJ,OAAO,CAACsU,gBAAgB,CAAC;GAC9D,IAAI,CAACkB,QAAQ,EACb;KACC,OAAO,KAAK;;GAGb,MAAM;KAAEhoB,IAAI;KAAE8nB;IAAM,GAAGnE,IAAI,CAAC5pB,KAAK,CAACiuB,QAAQ,CAAC;GAC3C,IAAIhoB,IAAI,KAAKsnB,aAAa,CAACtrB,OAAO,EAAE,IAAI,CAACN,cAAI,CAACqN,aAAa,CAAC+e,IAAI,CAAC,EACjE;KACC,OAAO,KAAK;;GAGbzb,KAAK,CAACiG,cAAc,EAAE;GACtB,IAAIyV,OAAO,CAAC1b,KAAK,EAAE7S,MAAM,CAAC,IAAIkC,cAAI,CAACC,UAAU,CAACurB,MAAM,CAAC,EACrD;KACC,MAAMd,KAAK,GAAGL,gBAAgB,CAAC1Z,KAAK,CAAC;KACrCib,aAAa,CAACvgB,MAAM,EAAE;KACtB,MAAMkhB,cAAc,GAAGC,qCAAqB,EAAE;KAC9C,IAAI9B,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKntB,SAAS,EACzC;OACCgvB,cAAc,CAACE,aAAa,CAAC/B,KAAK,CAAC;;KAGpClZ,6BAAa,CAAC+a,cAAc,CAAC;KAE7Bf,MAAM,CAACY,IAAI,CAAC;;GAGb,OAAO,IAAI;CACZ;CAEA,SAASC,OAAO,CAAC1b,KAAgB,EAAE7S,MAAkB,EACrD;GACC,MAAMqkB,MAAM,GAAGxR,KAAK,CAACwR,MAAM;GAC3B,MAAMuK,SAAS,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC;GACzD,MAAMC,cAAc,GAAG7uB,MAAM,CAAC8uB,aAAa,CAAC,OAAO,CAAC;GACpD,IAAI5sB,cAAI,CAACsH,cAAc,CAACqlB,cAAc,CAAC,EACvC;KACCD,SAAS,CAAC3sB,IAAI,CAAE,IAAG4sB,cAAe,EAAC,CAAC;;;;;GAKrC,OACCxK,MAAM,YAAY0K,WAAW,IAC1B1K,MAAM,CAACnI,OAAO,CAAC0S,SAAS,CAAC1xB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,IAC5C8C,MAAM,CAAC0Z,oBAAoB,EAAE,CAACqE,QAAQ,CAACsG,MAAM,CAACxG,aAAa,CAAC;CAEjE;;CC9HA;AACA,CAAO,MAAMmR,QAAQ,GAAG;GACvBC,IAAI,EAAE,MAAM;GACZC,KAAK,EAAE,OAAO;GACdC,KAAK,EAAE;CACR,CAAC;;CAED;AACA,CAAO,MAAMC,gBAAmD,GAAGjzB,6BAAa,CAAC,kBAAkB,CAAC;AACpG,CAAO,MAAMkzB,iBAAoD,GAAGlzB,6BAAa,CAAC,mBAAmB,CAAC;AACtG,CAAO,MAAMmzB,mBAAsD,GAAGnzB,6BAAa,CAAC,qBAAqB,CAAC;;CAE1G;AACA,CAAO,MAAMozB,mBAAoD,GAAGpzB,6BAAa,CAAC,qBAAqB,CAAC;;CAExG;AACA,CAAO,MAAMqzB,0BAA0C,GAAGrzB,6BAAa,CAAC,4BAA4B,CAAC;;CAErG;CAAA;CAAA;CAAA;CAAA;AACA,CAAO,MAAMszB,UAAU,SAAShoB,UAAU,CAC1C;GAKCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;OAAA,OANK;;KAAK;OAAA;OAAA,OACA;;KAAM;OAAA;OAAA,OACkB,IAAIgB,GAAG;;KAMvD,MAAM0uB,UAAU,GAAG1vB,MAAM,CAAC2kB,SAAS,CAAC,WAAW,CAAC;KAChD,4CAAI,wBAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAACtW,QAAQ,CAACqhB,UAAU,CAAC;KACrD,IAAI,yCAAC,IAAI,qBAAS,EAClB;OACC;;KAGD,4CAAI,kBAASA,UAAU;KAEvB,MAAMC,OAAyB,GAAG3vB,MAAM,CAAC2kB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;KACpE,IAAI,CAACiL,QAAQ,CAACD,OAAK,CAAC;KAEpB,4CAAI;KAEJ,IAAI,CAACvnB,eAAe,CACnBolB,qBAAqB,CACpB,IAAI,CAACtlB,SAAS,EAAE,EAChB8gB,aAAa,EACZsF,IAAI,IAAK;OACT,IAAI,CAACpmB,SAAS,EAAE,CAACmI,eAAe,CAACif,mBAAmB,EAAEhB,IAAI,CAAC;MAC3D,CACD,EACDd,qBAAqB,CACpB,IAAI,CAACtlB,SAAS,EAAE,EAChBkkB,aAAa,EACZkC,IAAI,IAAK;OACT,IAAI,CAACpmB,SAAS,EAAE,CAACmI,eAAe,CAACif,mBAAmB,EAAEhB,IAAI,CAAC;MAC3D,CACD,CACD;;GAGF,OAAO9uB,OAAO,GACd;KACC,OAAO,MAAM;;GAGd,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACyqB,QAAQ,EAAEzB,aAAa,EAAEoD,aAAa,CAAC;;GAGhDtkB,YAAY,GACZ;KACC,IAAI,CAAC,IAAI,CAAC+nB,SAAS,EAAE,EACrB;OACC,OAAO,IAAI;;KAGZ,OAAO;OACN,CAAC,IAAI,CAACC,OAAO,EAAE,GAAG,OAAyB;SAC1C1rB,UAAU,EAAGzG,IAAuB,IAAgC;;;;;;WAMnE,MAAMurB,YAAY,GAAGvrB,IAAI,CAACoyB,YAAY,CAAC,IAAI,CAAC;WAC5C,MAAMC,cAAc,GAAG,MAAM;aAC5B,OAAO;eAAEryB,IAAI,EAAEkF,+BAAe,CAAClF,IAAI,CAACqF,QAAQ,EAAE;cAAG;YACjD;WAED,IACC,CAACd,cAAI,CAACsH,cAAc,CAAC0f,YAAY,CAAC,IAC9B,IAAI,CAAC4G,OAAO,EAAE,KAAK,MAAM,IAAI,CAAC,UAAU,CAAC7qB,IAAI,CAACikB,YAAY,CAAE,IAC5D,IAAI,CAAC4G,OAAO,EAAE,KAAK,MAAM,IAAI,CAAC,qCAAqC,CAAC7qB,IAAI,CAACikB,YAAY,CAAE,EAE5F;aACC,OAAO8G,cAAc,EAAE;;WAGxB,MAAM7G,IAAI,GAAG,IAAI,CAAC8G,OAAO,CAAC/G,YAAY,CAAC;WACvC,IAAIC,IAAI,KAAK,IAAI,EACjB;aACC,OAAO6G,cAAc,EAAE;;WAGxB,MAAME,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAChH,IAAI,CAAC;WACvC,IAAI+G,QAAQ,KAAKlB,QAAQ,CAACE,KAAK,EAC/B;aACC,MAAM/H,KAAK,GAAGxd,cAAI,CAACymB,SAAS,CAACzyB,IAAI,CAACoyB,YAAY,CAAC,OAAO,CAAC,CAAC;aACxD,MAAM3I,MAAM,GAAGzd,cAAI,CAACymB,SAAS,CAACzyB,IAAI,CAACoyB,YAAY,CAAC,QAAQ,CAAC,CAAC;aAE1D,OAAO;eAAEpyB,IAAI,EAAEqsB,oBAAoB,CAACd,YAAY,EAAEC,IAAI,EAAEhC,KAAK,EAAEC,MAAM;cAAG;;WAGzE,IAAI8I,QAAQ,KAAKlB,QAAQ,CAACG,KAAK,EAC/B;aACC,MAAMhI,KAAK,GAAGxd,cAAI,CAACymB,SAAS,CAACzyB,IAAI,CAACoyB,YAAY,CAAC,OAAO,CAAC,CAAC;aACxD,MAAM3I,MAAM,GAAGzd,cAAI,CAACymB,SAAS,CAACzyB,IAAI,CAACoyB,YAAY,CAAC,QAAQ,CAAC,CAAC;aAE1D,OAAO;eAAEpyB,IAAI,EAAE0uB,oBAAoB,CAACnD,YAAY,EAAEC,IAAI,EAAEhC,KAAK,EAAEC,MAAM;cAAG;;WAGzE,OAAO;aAAEzpB,IAAI,EAAEgtB,eAAe,CAACzB,YAAY,EAAEC,IAAI;YAAG;UACpD;SACD7kB,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,IAAI,CAAC,IAAI,CAAC8nB,SAAS,EAAE,EACrB;OACC,OAAO,IAAI;;KAGZ,OAAO;OACN/E,IAAI,EAAGnrB,WAAqB,IAAyB;SACpD,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SACjD,MAAMkwB,UAAU,GAAG,IAAI,CAACP,OAAO,EAAE,KAAK,MAAM,GAAG;WAAEhF,IAAI,EAAE;UAAI,GAAG,EAAE;SAChEuF,UAAU,CAACC,EAAE,GAAG3wB,WAAW,CAACgqB,eAAe,EAAE;SAE7C,OAAO;WACNhsB,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE,IAAI,CAACsoB,OAAO,EAAE;aAAEO,UAAU;aAAEE,MAAM,EAAE;YAAM;UAC7E;QACD;OACD,YAAY,EAAG5wB,WAA0B,IAAyB;SACjE,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SACjD,MAAMkwB,UAAU,GAAG,IAAI,CAACP,OAAO,EAAE,KAAK,MAAM,GAAG;WAAEhF,IAAI,EAAE;UAAI,GAAG,EAAE;SAChEuF,UAAU,CAACC,EAAE,GAAG3wB,WAAW,CAACgqB,eAAe,EAAE;SAE7C,MAAMhsB,IAAI,GAAGuC,MAAM,CAACqH,aAAa,CAAC;WAAEC,IAAI,EAAE,IAAI,CAACsoB,OAAO,EAAE;WAAEO,UAAU;WAAEE,MAAM,EAAE;UAAO,CAAC;SACtF5yB,IAAI,CAACiO,YAAY,CAAC,OAAO,EAAEjM,WAAW,CAACkqB,QAAQ,EAAE,CAAC;SAClDlsB,IAAI,CAACiO,YAAY,CAAC,QAAQ,EAAEjM,WAAW,CAACmqB,SAAS,EAAE,CAAC;SAEpD,OAAO;WAAEnsB;UAAM;QACf;OACD,YAAY,EAAGgC,WAA0B,IAAyB;SACjE,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SACjD,MAAMkwB,UAAU,GAAG,IAAI,CAACP,OAAO,EAAE,KAAK,MAAM,GAAG;WAAEhF,IAAI,EAAE;UAAI,GAAG,EAAE;SAChEuF,UAAU,CAACC,EAAE,GAAG3wB,WAAW,CAACgqB,eAAe,EAAE;SAE7C,MAAMhsB,IAAI,GAAGuC,MAAM,CAACqH,aAAa,CAAC;WAAEC,IAAI,EAAE,IAAI,CAACsoB,OAAO,EAAE;WAAEO,UAAU;WAAEE,MAAM,EAAE;UAAM,CAAC;SACrF,IAAI5wB,WAAW,CAACoqB,SAAS,EAAE,EAC3B;WACCpsB,IAAI,CAACiO,YAAY,CAAC,OAAO,EAAEjM,WAAW,CAACkqB,QAAQ,EAAE,CAAC;WAClDlsB,IAAI,CAACiO,YAAY,CAAC,QAAQ,EAAEjM,WAAW,CAACmqB,SAAS,EAAE,CAAC;;SAGrD,OAAO;WAAEnsB;UAAM;;MAEhB;;GAGFqK,cAAc,GACd;KACC,IAAI,CAAC,IAAI,CAAC6nB,SAAS,EAAE,EACrB;OACC,OAAO,IAAI;;KAGZ,OAAO;OACNzgB,SAAS,EAAE;SACV0b,IAAI,EAAE,IAAI,CAACgF,OAAO,EAAE;SACpB,YAAY,EAAE,IAAI,CAACA,OAAO,EAAE;SAC5B,YAAY,EAAE,IAAI,CAACA,OAAO;;MAE3B;;GAGFD,SAAS,GACT;KACC,+CAAO,IAAI;;GAGZC,OAAO,GACP;KACC,+CAAO,IAAI;;GAGZU,OAAO,CAAC1F,IAAsB,EAC9B;KACC,IAAI5oB,cAAI,CAACqN,aAAa,CAACub,IAAI,CAAC,KAAK5oB,cAAI,CAACsH,cAAc,CAACshB,IAAI,CAAC5B,YAAY,CAAC,IAAIhnB,cAAI,CAACwkB,QAAQ,CAACoE,IAAI,CAAC5B,YAAY,CAAC,CAAC,EAC5G;OACC,MAAMA,YAAY,GAAG4B,IAAI,CAAC5B,YAAY,CAAClmB,QAAQ,EAAE;OACjD,IAAI,CAAC,4CAAI,kBAAQ0L,GAAG,CAACwa,YAAY,CAAC,EAClC;SACC,4CAAI,kBAAQ9mB,GAAG,CAAC0oB,IAAI,CAAC5B,YAAY,CAAClmB,QAAQ,EAAE,EAAE8nB,IAAI,CAAC;;;;GAKtD8E,QAAQ,CAACD,KAAyB,EAClC;KACC,IAAIztB,cAAI,CAACuuB,aAAa,CAACd,KAAK,CAAC,EAC7B;OACCA,KAAK,CAAC3oB,OAAO,CAAE8jB,IAAsB,IAAK;SACzC,IAAI,CAAC0F,OAAO,CAAC1F,IAAI,CAAC;QAClB,CAAC;;;GAIJmF,OAAO,CAAC/G,YAA6B,EACrC;KACC,IAAIhnB,cAAI,CAACsH,cAAc,CAAC0f,YAAY,CAAC,IAAIhnB,cAAI,CAACwkB,QAAQ,CAACwC,YAAY,CAAC,EACpE;OACC,OAAO,4CAAI,kBAAQhlB,GAAG,CAACglB,YAAY,CAAClmB,QAAQ,EAAE,CAAC,IAAI,IAAI;;KAGxD,OAAO,IAAI;;GAGZmtB,WAAW,CAACrF,IAAsB,EAClC;KACC,IAAIA,IAAI,YAAJA,IAAI,CAAE4F,OAAO,EACjB;OACC,OAAO1B,QAAQ,CAACE,KAAK;;KAGtB,IAAIpE,IAAI,YAAJA,IAAI,CAAE6F,OAAO,EACjB;OACC,OAAO3B,QAAQ,CAACG,KAAK;;KAGtB,OAAOH,QAAQ,CAACC,IAAI;;GAGrB2B,UAAU,CAAC1H,YAA6B,EAAE2H,gBAAyB,GAAG,IAAI,EAC1E;KACC,IAAI3uB,cAAI,CAACsH,cAAc,CAAC0f,YAAY,CAAC,IAAIhnB,cAAI,CAACwkB,QAAQ,CAACwC,YAAY,CAAC,EACpE;OACC,4CAAI,kBAAQ/I,MAAM,CAAC+I,YAAY,CAAClmB,QAAQ,EAAE,CAAC;OAE3C,IAAI,CAACkF,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;SAC7B,MAAMxP,KAAK,GAAG,CACb,GAAGkwB,4BAAY,CAACrG,QAAQ,CAAC,EACzB,GAAGqG,4BAAY,CAAC9H,aAAa,CAAC,EAC9B,GAAG8H,4BAAY,CAAC1E,aAAa,CAAC,CAC9B;SAEDxrB,KAAK,CAACoG,OAAO,CAAErJ,IAA8C,IAAK;WACjE,IAAIA,IAAI,CAACgsB,eAAe,EAAE,CAAC3mB,QAAQ,EAAE,KAAKkmB,YAAY,CAAClmB,QAAQ,EAAE,EACjE;aACCrF,IAAI,CAAC4P,MAAM,EAAE;;UAEd,CAAC;QACF,EAAEsjB,gBAAgB,GAAG;SAAEvpB,GAAG,EAAE;QAAiB,GAAG,EAAE,CAAC;;;CAuKvD;CAAC,iCAlKA;GACC,IAAI,CAACc,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BigB,mBAAmB,EAClBhgB,OAA0B,IAAK;KAC/B,IACC,CAACpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IACzB,CAACpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC6Z,IAAI,CAAC,IAChC,CAACjnB,cAAI,CAACwkB,QAAQ,CAACpX,OAAO,CAAC4Z,YAAY,CAAC,IAAI,CAAChnB,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAAC4Z,YAAY,CAAE,EAExF;OACC,OAAO,KAAK;;KAGb,IAAI,CAACsH,OAAO,CAAClhB,OAAO,CAAC6Z,IAAI,CAAC;KAE1B,MAAM+G,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAC7gB,OAAO,CAAC6Z,IAAI,CAAC;KAC/C,IAAIxrB,IAAI,GAAG,IAAI;KAEf,MAAM4rB,YAAY,GAAGja,OAAO,CAAC6Z,IAAI,CAACI,YAAY;KAC9C,MAAME,aAAa,GAAGna,OAAO,CAAC6Z,IAAI,CAACM,aAAa;KAChD,MAAMwB,WAAW,GAAG3b,OAAO,CAAC6X,KAAK;KACjC,MAAM+D,YAAY,GAAG5b,OAAO,CAAC8X,MAAM;KACnC,IAAI8I,QAAQ,KAAKlB,QAAQ,CAACE,KAAK,EAC/B;OACC,MAAM,CAAC/H,KAAK,EAAEC,MAAM,CAAC,GAAG4D,aAAa,CAACzB,YAAY,EAAEE,aAAa,EAAEwB,WAAW,EAAEC,YAAY,CAAC;OAC7FvtB,IAAI,GAAGqsB,oBAAoB,CAAC1a,OAAO,CAAC4Z,YAAY,EAAE5Z,OAAO,CAAC6Z,IAAI,EAAEhC,KAAK,EAAEC,MAAM,CAAC;MAC9E,MACI,IAAI8I,QAAQ,KAAKlB,QAAQ,CAACG,KAAK,EACpC;OACC,IAAIhI,KAAK,GAAG,CAAC;OACb,IAAIC,MAAM,GAAG,CAAC;OACd,IAAImC,YAAY,GAAG,CAAC,IAAIE,aAAa,GAAG,CAAC,EACzC;SACC,CAACtC,KAAK,EAAEC,MAAM,CAAC,GAAG4D,aAAa,CAACzB,YAAY,EAAEE,aAAa,EAAEwB,WAAW,EAAEC,YAAY,CAAC;;OAGxFvtB,IAAI,GAAG0uB,oBAAoB,CAAC/c,OAAO,CAAC4Z,YAAY,EAAE5Z,OAAO,CAAC6Z,IAAI,EAAEhC,KAAK,EAAEC,MAAM,CAAC;MAC9E,MAED;OACCzpB,IAAI,GAAGgtB,eAAe,CAACrb,OAAO,CAAC4Z,YAAY,EAAE5Z,OAAO,CAAC6Z,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkD3DnK,4BAAY,CAAC,CAACrhB,IAAI,CAAC,CAAC;KACpB,IAAIoQ,mCAAmB,CAACpQ,IAAI,CAACgQ,gBAAgB,EAAE,CAAC,EAChD;OACCojB,mCAAkB,CAACpzB,IAAI,EAAEgG,oCAAoB,CAAC,CAAC0b,SAAS,EAAE;;KAG3D,OAAO,IAAI;IACX,EACDhH,uCAAuB,CACvB,EAED,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/BkgB,mBAAmB,EAClBjgB,OAA0B,IAAc;KACxC,IACC,CAACpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IACxB,CAACpN,cAAI,CAACwkB,QAAQ,CAACpX,OAAO,CAAC4Z,YAAY,CAAC,IAAI,CAAChnB,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAAC4Z,YAAY,CAAE,EAExF;OACC,OAAO,KAAK;;KAGb,IAAI,CAAC0H,UAAU,CAACthB,OAAO,CAAC4Z,YAAY,EAAE5Z,OAAO,CAACuhB,gBAAgB,CAAC;KAE/D,OAAO,IAAI;IACX,EACDxY,uCAAuB,CACvB,EAED,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/BmgB,0BAA0B,EACzB7kB,EAAY,IAAc;KAC1B,IAAI,CAACzI,cAAI,CAACC,UAAU,CAACwI,EAAE,CAAC,EACxB;OACC,OAAO,KAAK;;KAGb,MAAM/J,KAAK,GAAG,CACb,GAAGkwB,4BAAY,CAACrG,QAAQ,CAAC,EACzB,GAAGqG,4BAAY,CAAC9H,aAAa,CAAC,EAC9B,GAAG8H,4BAAY,CAAC1E,aAAa,CAAC,CAC9B;KAEDzhB,EAAE,CAAC/J,KAAK,CAAC;KAET,OAAO,IAAI;IACX,EACDyX,uCAAuB,CACvB,EAED,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/B+f,gBAAgB,EACftE,IAAsB,IAAc;KACpC,IAAI,CAAC0F,OAAO,CAAC1F,IAAI,CAAC;KAElB,OAAO,IAAI;IACX,EACDzS,uCAAuB,CACvB,EAED,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/BggB,iBAAiB,EAChBM,KAAyB,IAAc;KACvC,IAAI,CAACC,QAAQ,CAACD,KAAK,CAAC;KAEpB,OAAO,IAAI;IACX,EACDtX,uCAAuB,CACvB,CACD;CACF;;;;;;;;;;;;;;;;;;;;;;;;CCleM,SAAS2Y,gBAAgB,CAACC,GAAW,EAC5C;GACC,OAAO,gCAAgC,CAAChsB,IAAI,CAACgsB,GAAG,CAAC;CAClD;;;;;ACHA,CASuD;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAKvD,CAAe,MAAMC,cAAc,SAAS/M,kBAAkB,CAC9D;GAKCzc,WAAW,CAAC4c,OAAkC,EAC9C;KACC,KAAK,CAACA,OAAO,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OANgB,IAAI6D,2BAAW;;KAAE;OAAA;OAAA,OACjB;;KAAI;OAAA;OAAA,OACP;;KAM5B,4CAAI,wCAAkB,IAAI1C,aAAa,CAAC;OACvCpB,MAAM,EAAE,IAAI,CAAC+D,QAAQ,EAAE;OACvBpoB,MAAM,EAAE,IAAI,CAACkI,SAAS,EAAE;OACxBwd,aAAa,EAAE,IAAI,CAACf,SAAS,CAAC,OAAO,CAAC;OACtCgB,cAAc,EAAE,IAAI,CAAChB,SAAS,CAAC,QAAQ,CAAC;OACxCmB,QAAQ,EAAE,IAAI,CAACqL,WAAW,EAAE;OAC5BnL,MAAM,EAAE;SACPqC,aAAa,EAAE,4CAAI,8CAAoBvd,IAAI,CAAC,IAAI,CAAC;SACjDwd,WAAW,EAAE,4CAAI,0CAAkBxd,IAAI,CAAC,IAAI;;MAE7C,CAAC;KAEF,IAAI,CAAC2Z,gBAAgB,EAAE,CAAChB,QAAQ,CAAEK,QAAiB,IAAK;OACvD,IAAIA,QAAQ,IAAI,4CAAI,sCAAgBsC,UAAU,EAAE,EAChD;SACC3c,aAAG,CAACQ,QAAQ,yCAAC,IAAI,uCAAkB,YAAY,CAAC;SAChD,4CAAI,sCAAgB4c,IAAI,EAAE;QAC1B,MAED;SACCpd,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAkB,YAAY,CAAC;SACnD,4CAAI,sCAAgB4c,IAAI,EAAE;;OAG3B,MAAMyB,SAAS,GAAGzE,QAAQ,IAAI,CAAC,4CAAI,sCAAgBsC,UAAU,EAAE;OAC/D,4CAAI,oCAAemC,SAAS;MAC5B,CAAC;KAEF,IAAI,CAACnY,MAAM,CAAC,IAAI,CAACsU,UAAU,EAAE,CAAC;KAC9B,4CAAI;;GAkEL0D,QAAQ,GACR;KACC,OAAO,4CAAI,oBAAOI,QAAQ,CAAC,OAAO,EAAE,MAAM;OAAA;OACzC,MAAMC,GAAqB,GAAG9c,QAAQ,CAACpE,aAAa,CAAC,KAAK,CAAC;OAC3DkhB,GAAG,CAACF,SAAS,GAAG,KAAK;OACrBE,GAAG,CAACC,GAAG,GAAG,IAAI,CAAC/D,SAAS,CAAC,KAAK,CAAC;OAE/B,MAAMjZ,MAAoB,GAAG,IAAI,CAACiZ,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;OACzD,IAAIjZ,MAAM,6BAANA,MAAM,CAAEG,KAAK,oCAAb,cAAe8c,KAAK,aAApB,oBAAsBF,GAAG,EAC7B;SACCA,GAAG,CAAClO,SAAS,GAAG7O,MAAM,CAACG,KAAK,CAAC8c,KAAK,CAACF,GAAG;;OAGvCA,GAAG,CAAC2I,OAAO,GAAIve,KAAK,IAAK;SACxB4V,GAAG,CAACC,GAAG,GAAG,gFAAgF;SAC1Fjf,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACua,SAAS,EAAE,EAAE,4BAA4B,CAAC;QAC5D;OAED,OAAOiE,GAAG;MACV,CAAC;;GAGH0I,WAAW,GACX;KACC,+CAAO,IAAI;;GAGZ/gB,MAAM,CAACkU,OAAmB,EAC1B;KACC,MAAM6C,KAAK,GAAG7C,OAAO,CAAC6C,KAAK,GAAG,CAAC,GAAI,GAAE7C,OAAO,CAAC6C,KAAM,IAAG,GAAG,SAAS;KAClE,MAAMyB,WAAW,GAAGtE,OAAO,CAAC6C,KAAK,GAAG,CAAC,IAAI7C,OAAO,CAAC8C,MAAM,GAAG,CAAC,GAAI,GAAE9C,OAAO,CAAC6C,KAAM,MAAK7C,OAAO,CAAC8C,MAAO,EAAC,GAAG,MAAM;KAE7G,4CAAI,8BAAa9C,OAAO,CAACwB,QAAQ;KAEjCrc,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACkN,QAAQ,EAAE,EAAE;OAAEjB,KAAK;OAAEC,MAAM,EAAE,MAAM;OAAEwB;MAAa,CAAC;;CAEpE;CAAC,sBAlGA;GACCnf,aAAG,CAACvG,MAAM,yCAAC,IAAI,uCAAkB,IAAI,CAACshB,SAAS,EAAE,CAAC;CACnD;CAAC,4BAGD;GACC,OAAO,4CAAI,oBAAOgE,QAAQ,CAAC,WAAW,EAAE,MAAM;KAC7C,MAAMK,aAAa,GAAG,4CAAI,sCAAgBjgB,YAAY,EAAE;KAExD,OAAOiC,aAAG,CAAChC,MAAM,oBAAC;;OAEhB,CAA4B;OAC5B,CAAgB;;IAElB,2CAHI,IAAI,iDACJggB,aAAa;IAGjB,CAAC;CACH;CAAC,iCAGD;GACC,OAAO,4CAAI,oBAAOL,QAAQ,CAAC,iBAAiB,EAAE,MAAM;KACnD,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;OAEhB,CAAkB;;IAEpB,GAFI,IAAI,CAACuf,QAAQ,EAAE;IAGnB,CAAC;CACH;CAAC,0BAEaG,SAAkB,EAChC;GACC9e,aAAG,CAACC,IAAI,yCAAC,IAAI,iDAAuB;KAAE6e;IAAW,CAAC;GAClD,IAAIA,SAAS,EACb;KACC9e,aAAG,CAACQ,QAAQ,yCAAC,IAAI,uCAAkB,aAAa,CAAC;IACjD,MAED;KACCR,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAkB,aAAa,CAAC;;CAEtD;CAAC,+BAEkB2I,KAAgB,EACnC;GACC,4CAAI,oCAAe,KAAK;GACxB,IAAI,CAACgR,WAAW,CAAC,IAAI,CAAC;CACvB;CAAC,6BAEgBhR,KAAgB,EACjC;GACC,IAAI,CAACgR,WAAW,CAAC,IAAI,CAAC;GAEtB,IAAI,CAAC3b,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,MAAMzS,IAAe,GAAG+hB,6BAAa,CAAC,IAAI,CAAC6E,UAAU,EAAE,CAAC;KACxD,IAAI8M,YAAY,CAAC1zB,IAAI,CAAC,EACtB;OACC,MAAM;SAAEwpB,KAAK;SAAEC;QAAQ,GAAGvU,KAAK,CAACmG,OAAO,EAAE;OACzCrb,IAAI,CAACorB,iBAAiB,CAAC5B,KAAK,EAAEC,MAAM,CAAC;;IAEtC,CAAC;CACH;;CCrHD;CAmCO,MAAMkK,SAAS,SAASrI,6BAAa,CAC5C;GAMCvhB,WAAW,CACVghB,GAAW,EACXvB,KAA0B,EAC1BC,MAA2B,EAC3BtB,QAAiB,EACjBxQ,GAAa,EAEd;KACC,KAAK,CAACA,GAAG,CAAC;KAAC,KAZZgU,OAAO,GAAuB,SAAS;KAAA,KACvCE,QAAQ,GAAuB,SAAS;KAAA,KACxC+H,UAAU,GAAW,MAAM;KAY1B,IAAIP,gBAAgB,CAACtI,GAAG,CAAC,EACzB;OACC,IAAI,CAAC8I,KAAK,GAAG9I,GAAG;MAChB,MAED;OACC,IAAI,CAAC8I,KAAK,GAAG,gFAAgF;;KAG9F,IAAItvB,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,EACxB;OACC,IAAI,CAACmC,OAAO,GAAGvH,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC;;KAGjC,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACzB;OACC,IAAI,CAACoC,QAAQ,GAAGzH,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC;;KAGnC,IAAIllB,cAAI,CAACwkB,QAAQ,CAACZ,QAAQ,CAAC,EAC3B;OACC,IAAI,CAACyL,UAAU,GAAGxP,IAAI,CAAC6F,KAAK,CAAC9B,QAAQ,CAAC;;;GAMxC,OAAOtjB,OAAO,GACd;KACC,OAAO,OAAO;;GAGf,OAAO+I,KAAK,CAAC5N,IAAe,EAC5B;KACC,OAAO,IAAI2zB,SAAS,CACnB3zB,IAAI,CAAC6zB,KAAK,EACV7zB,IAAI,CAAC2rB,OAAO,EACZ3rB,IAAI,CAAC6rB,QAAQ,EACb7rB,IAAI,CAAC4zB,UAAU,EACf5zB,IAAI,CAAC6N,KAAK,CACV;;GAGF,OAAOY,UAAU,CAACC,cAAmC,EACrD;KACC,MAAM;OAAE8a,KAAK;OAAEC,MAAM;OAAEsB,GAAG;OAAE5C;MAAU,GAAGzZ,cAAc;KAEvD,OAAOolB,gBAAgB,CAAC;OAAE/I,GAAG;OAAEvB,KAAK;OAAEC,MAAM;OAAEtB;MAAU,CAAC;;GAG1D/U,SAAS,GACT;KACC,MAAMpQ,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,KAAK,CAAC;KAC7C5G,OAAO,CAACiL,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC4lB,KAAK,CAAC;KACvC7wB,OAAO,CAACiL,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC0d,OAAO,CAACtmB,QAAQ,EAAE,CAAC;KACtDrC,OAAO,CAACiL,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC4d,QAAQ,CAACxmB,QAAQ,EAAE,CAAC;KAExD,OAAO;OAAErC;MAAS;;GAGnB,OAAOsL,SAAS,GAChB;KACC,OAAO;OACNwc,GAAG,EAAG9qB,IAAU,KAAM;SACrByG,UAAU,EAAGoM,OAAyB,IAAiC;WACtE,IAAIA,OAAO,YAAYkhB,gBAAgB,IAAIV,gBAAgB,CAACxgB,OAAO,CAACkY,GAAG,CAAC,EACxE;aACC,MAAM;eAAEA,GAAG;eAAEvB,KAAK;eAAEC;cAAQ,GAAG5W,OAAO;aACtC,MAAMmhB,SAAS,GAAGF,gBAAgB,CAAC;eAAE/I,GAAG;eAAEvB,KAAK;eAAEC;cAAQ,CAAC;aAE1D,OAAO;eAAEzpB,IAAI,EAAEg0B;cAAW;;WAG3B,OAAO,IAAI;UACX;SACDrtB,QAAQ,EAAE;QACV;MACD;;GAGFoI,UAAU,GACV;KACC,OAAO;OACNgc,GAAG,EAAE,IAAI,CAACkJ,MAAM,EAAE;OAClBzK,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;OACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;OACxBhE,QAAQ,EAAE,IAAI,CAACqL,WAAW,EAAE;OAC5B3qB,IAAI,EAAE,OAAO;OACbwK,OAAO,EAAE;MACT;;GAGF+X,iBAAiB,CAAC5B,KAAyB,EAAEC,MAA0B,EACvE;KACC,MAAMrR,QAAQ,GAAG,IAAI,CAACC,WAAW,EAAE;KACnC,IAAI9T,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,EACxB;OACCpR,QAAQ,CAACuT,OAAO,GAAGvH,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC;MACpC,MACI,IAAIA,KAAK,KAAK,SAAS,EAC5B;OACCpR,QAAQ,CAACuT,OAAO,GAAGnC,KAAK;;KAGzB,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACzB;OACCrR,QAAQ,CAACyT,QAAQ,GAAGzH,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC;MACtC,MACI,IAAIA,MAAM,KAAK,SAAS,EAC7B;OACCrR,QAAQ,CAACyT,QAAQ,GAAGpC,MAAM;;;GAI5ByK,WAAW,CAAC/L,QAAyB,EACrC;KACC,IAAI5jB,cAAI,CAACwkB,QAAQ,CAACZ,QAAQ,CAAC,IAAIA,QAAQ,KAAK,MAAM,EAClD;OACC,MAAM/P,QAAQ,GAAG,IAAI,CAACC,WAAW,EAAE;OACnCD,QAAQ,CAACwb,UAAU,GAAGrvB,cAAI,CAACwkB,QAAQ,CAACZ,QAAQ,CAAC,GAAG/D,IAAI,CAAC6F,KAAK,CAAC9B,QAAQ,CAAC,GAAGA,QAAQ;;;GAIjFra,SAAS,CAACC,MAAoB,EAC9B;KAAA;KACC,MAAM0e,IAAI,GAAGze,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC3C,MAAMsE,KAAK,GAAGH,MAAM,CAACG,KAAK;KAC1B,MAAM0O,SAAS,GAAG1O,KAAK,oCAALA,KAAK,CAAE8c,KAAK,qBAAZ,aAAc3U,SAAS;KACzC,IAAIuG,SAAS,KAAK9a,SAAS,EAC3B;OACC2qB,IAAI,CAAC7P,SAAS,GAAGA,SAAS;;KAG3B,OAAO6P,IAAI;;GAGZre,SAAS,GACT;KACC,OAAO,KAAK;;GAGb6lB,MAAM,GACN;KACC,OAAO,IAAI,CAACJ,KAAK;;GAGlB3H,QAAQ,GACR;KACC,MAAMvP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACgP,OAAO;;GAGpBQ,SAAS,GACT;KACC,MAAMxP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACkP,QAAQ;;GAGrB2H,WAAW,GACX;KACC,MAAM7W,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACiX,UAAU;;GAGvBlH,QAAQ,CAACrqB,MAAqB,EAAE0L,MAAoB,EACpD;KACC,OAAO;OACN4e,cAAc,EAAE4G,cAAc;OAC9B5M,OAAO,EAAE;SACRoE,GAAG,EAAE,IAAI,CAACkJ,MAAM,EAAE;SAClBzK,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;SACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;SACxBhE,QAAQ,EAAE,IAAI,CAACqL,WAAW,EAAE;SAC5BzlB;;MAED;;GAGFtI,QAAQ,GACR;KACC,OAAO,IAAI;;CAEb;CA1MakuB,SAAS,CA0Cd9G,qBAAqB,GAAG,IAAI;AAkKpC,CAAO,SAASiH,gBAAgB,CAAC;GAAE/I,GAAG;GAAEvB,KAAK;GAAEC,MAAM;GAAEtB,QAAQ;GAAExQ;CAAI,CAAC,EACtE;GACC,OAAOpI,qCAAqB,CAAC,IAAIokB,SAAS,CAAC5I,GAAG,EAAEvB,KAAK,EAAEC,MAAM,EAAEtB,QAAQ,EAAExQ,GAAG,CAAC,CAAC;CAC/E;AAEA,CAAO,SAAS+b,YAAY,CAAC1zB,IAAoC,EACjE;GACC,OAAOA,IAAI,YAAY2zB,SAAS;CACjC;;CC/OO,SAASQ,qBAAqB,CACpC9xB,MAAkB,EAClB5B,SAAyB,EACzB2zB,iBAA8B,EAE/B;;GAEC,MAAMnF,KAAY,GAAGoF,WAAW,CAAC5zB,SAAS,EAAE4B,MAAM,CAAC;GACnD,IAAI4sB,KAAK,KAAK,IAAI,EAClB;KACC,OAAO,IAAI;;GAGZ,MAAMqF,UAAU,GAAGrF,KAAK,CAACsF,cAAc,EAAE;GACzC,MAAMC,WAAW,GAAGF,UAAU,CAAClwB,MAAM,GAAG,CAAC;GACzC,MAAMrD,UAAU,GAAGN,SAAS,CAACM,UAAU,EAAE;GACzC,IAAI0zB,SAAS,GAAG1zB,UAAU,GAAGuzB,UAAU,CAAC,CAAC,CAAC,GAAGA,UAAU,CAACA,UAAU,CAAClwB,MAAM,GAAG,CAAC,CAAC;GAE9E,IAAI3D,SAAS,CAACwV,WAAW,EAAE,KAAK,CAACwe,SAAS,IAAKA,SAAS,CAACta,IAAI,KAAK,CAAC,IAAIsa,SAAS,CAACC,GAAG,KAAK,CAAE,CAAC,EAC5F;KACC,IAAI9zB,UAAU,GAAGyB,MAAM,CAACsyB,eAAe,CAACl0B,SAAS,CAACC,MAAM,CAACiX,GAAG,CAAC;KAC7D,IAAIoN,YAAY,GAAGtkB,SAAS,CAACC,MAAM,CAACwV,MAAM;KAC1C,IAAItV,UAAU,KAAK,IAAI,EACvB;OACCA,UAAU,GAAGquB,KAAK,CAAC2F,cAAc;OACjC7P,YAAY,GAAGkK,KAAK,CAAC4F,WAAW;;KAGjC,MAAM/E,UAAU,GAAGlvB,UAAU,CAAC2f,UAAU,CAACwE,YAAY,CAAC,IAAInkB,UAAU;KAEpE,MAAMk0B,QAAQ,GAAGhF,UAAU,CAACpG,qBAAqB,EAAE;KACnD+K,SAAS,GAAG,IAAIM,OAAO,CACtBD,QAAQ,CAAC3a,IAAI,EACb2a,QAAQ,CAACJ,GAAG,EACZ,CAAC,EACDI,QAAQ,CAACrL,MAAM,CACf;;GAGF,IAAI,CAACgL,SAAS,EACd;KACC,OAAO,IAAI;;GAGZ,MAAMO,WAAW,GAAG,EAAE;GAEtB,MAAMC,eAAe,GAAGb,iBAAiB,KAAKpmB,QAAQ,CAACknB,IAAI;GAC3D,MAAMC,UAAU,GAAGF,eAAe,GAAG9F,MAAM,CAACiG,WAAW,GAAGhB,iBAAiB,CAACe,UAAU;GACtF,MAAME,SAAS,GAAGJ,eAAe,GAAG9F,MAAM,CAACmG,WAAW,GAAGlB,iBAAiB,CAACiB,SAAS;GAEpF,IAAIlb,IAAI,GAAG,CAACpZ,UAAU,GAAG0zB,SAAS,CAACta,IAAI,GAAGsa,SAAS,CAACra,KAAK,IAAI+a,UAAU;GACvE,IAAIT,GAAG,GAAGD,SAAS,CAACC,GAAG,GAAGW,SAAS;GACnC,IAAIE,MAAM,GAAGd,SAAS,CAACc,MAAM,GAAGF,SAAS,GAAGL,WAAW;GAEvD,IAAI,CAACC,eAAe,EACpB;KACC,MAAMO,YAAY,GAAGpB,iBAAiB,CAAC1K,qBAAqB,EAAE;KAC9DgL,GAAG,IAAIc,YAAY,CAACd,GAAG;KACvBva,IAAI,IAAIqb,YAAY,CAACrb,IAAI;KACzBob,MAAM,IAAIC,YAAY,CAACd,GAAG;;GAG3B,OAAO;KACNva,IAAI;KACJua,GAAG;KACHa,MAAM;KACNx0B,UAAU;KACVyzB;IACA;CACF;CAEA,SAASH,WAAW,CAAC5zB,SAAyB,EAAE4B,MAAkB,EAClE;GACC,IAAI,CAAC4P,iCAAiB,CAACxR,SAAS,CAAC,EACjC;KACC,OAAO,IAAI;;GAGZ,MAAMwuB,KAAK,GAAGjhB,QAAQ,CAACqmB,WAAW,EAAE;GACpC,MAAMzzB,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;GAC7C,MAAMC,SAAS,GAAGL,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE;GAE3C,MAAM40B,SAAS,GAAG70B,UAAU,CAACiQ,MAAM,EAAE;GACrC,MAAM6kB,QAAQ,GAAG50B,SAAS,CAAC+P,MAAM,EAAE;GAEnC,IAAI8kB,SAA6B,GAAGtzB,MAAM,CAACsyB,eAAe,CAACc,SAAS,CAAC;GACrE,IAAIG,QAA4B,GAAGvzB,MAAM,CAACsyB,eAAe,CAACe,QAAQ,CAAC;GACnE,IAAI3Q,YAAY,GAAGtkB,SAAS,CAACC,MAAM,CAACwV,MAAM;GAC1C,IAAI2f,WAAW,GAAGp1B,SAAS,CAACE,KAAK,CAACuV,MAAM;GAExC,IAAIjU,2BAAW,CAACrB,UAAU,CAAC,EAC3B;KACC+0B,SAAS,GAAGG,cAAc,CAACH,SAAS,CAAC;;GAGtC,IAAI1zB,2BAAW,CAACnB,SAAS,CAAC,EAC1B;KACC80B,QAAQ,GAAGE,cAAc,CAACF,QAAQ,CAAC;;GAGpC,IAAID,SAAS,KAAK,IAAI,IAAIC,QAAQ,KAAK,IAAI,EAC3C;KACC,OAAO,IAAI;;GAGZ,IAAID,SAAS,CAACzvB,QAAQ,KAAK,IAAI,EAC/B;KACC,CAACyvB,SAAS,EAAE5Q,YAAY,CAAC,GAAGgR,uBAAuB,CAACJ,SAAS,CAAC;;GAG/D,IAAIC,QAAQ,CAAC1vB,QAAQ,KAAK,IAAI,EAC9B;KACC,CAAC0vB,QAAQ,EAAEC,WAAW,CAAC,GAAGE,uBAAuB,CAACH,QAAQ,CAAC;;GAG5D,MAAMvlB,UAAU,GAAGslB,SAAS,CAACtlB,UAAU;GAEvC,IACCslB,SAAS,KAAKC,QAAQ,IACnBvlB,UAAU,KAAK,IAAI,IACnBA,UAAU,CAACnK,QAAQ,KAAK,IAAI,IAC5B6e,YAAY,KAAK,CAAC,IAClB8Q,WAAW,KAAK,CAAC,EAErB;KACCA,WAAW,GAAG,CAAC;;GAGhB,IACA;KACC5G,KAAK,CAAC+G,QAAQ,CAACL,SAAS,EAAE5Q,YAAY,CAAC;KACvCkK,KAAK,CAACgH,MAAM,CAACL,QAAQ,EAAEC,WAAW,CAAC;IACnC,CACD,MACA;KACC,OAAO,IAAI;;GAGZ,IAAI5G,KAAK,CAACiH,SAAS,KAAKnR,YAAY,KAAK8Q,WAAW,IAAIJ,SAAS,KAAKC,QAAQ,CAAC,EAC/E;;KAECzG,KAAK,CAAC+G,QAAQ,CAACJ,QAAQ,EAAEC,WAAW,CAAC;KACrC5G,KAAK,CAACgH,MAAM,CAACN,SAAS,EAAE5Q,YAAY,CAAC;;GAGtC,OAAOkK,KAAK;CACb;CAEA,SAAS6G,cAAc,CAAC9yB,OAAoB,EAC5C;GACC,IAAIhD,IAAI,GAAGgD,OAAO;GAClB,OAAOhD,IAAI,KAAK,IAAI,EACpB;KACC,IAAIA,IAAI,CAAC8uB,QAAQ,KAAKqH,IAAI,CAACC,SAAS,EACpC;OACC,OAAOp2B,IAAI;;KAGZA,IAAI,GAAGA,IAAI,CAACqQ,UAAU;;GAGvB,OAAO,IAAI;CACZ;CAEA,SAAS0lB,uBAAuB,CAAC/1B,IAAe,EAChD;GACC,MAAM+P,MAAM,GAAG/P,IAAI,CAACkI,UAAU;GAC9B,IAAI6H,MAAM,KAAK,IAAI,EACnB;KACC,MAAM,IAAI9F,KAAK,CAAC,qBAAqB,CAAC;;GAGvC,OAAO,CAAC8F,MAAM,EAAE,CAAC,GAAGA,MAAM,CAACwQ,UAAU,CAAC,CAAC8V,OAAO,CAACr2B,IAAI,CAAC,CAAC;CACtD;;CC9KA,MAAMs2B,eAAiD,GAAG,IAAIC,OAAO,EAAE;CACvE,MAAMC,aAAa,GAAG,EAAE;AAExB,CAAO,SAASC,qBAAqB,CACpCC,KAAY,EACZr0B,MAAkB,EAClBs0B,YAAgD,EAEjD;GACC,MAAMl2B,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;KACC,OAAO,KAAK;;;;GAIb,MAAMm2B,iBAAiB,GAAGzC,qBAAqB,CAAC9xB,MAAM,EAAE5B,SAAS,EAAEuN,QAAQ,CAACknB,IAAI,CAAC;GACjF,IAAI0B,iBAAiB,KAAK,IAAI,EAC9B;KACC,OAAO,KAAK;;GAGb,MAAM;KAAElC,GAAG;KAAEva,IAAI;KAAEob,MAAM;KAAEx0B;IAAY,GAAG61B,iBAAiB;GAC3D,MAAMpB,YAAqB,GAAG1pB,aAAG,CAAC+qB,WAAW,CAACx0B,MAAM,CAACy0B,oBAAoB,EAAE,CAAC;GAC5E,MAAMC,SAAkB,GAAGjrB,aAAG,CAAC+qB,WAAW,CAACH,KAAK,CAACM,iBAAiB,EAAE,CAAC;GAErE,MAAMC,UAAkB,GAAGF,SAAS,CAACvN,KAAK;GAC1C,IAAI0N,UAAkB,GAAGD,UAAU,GAAG,CAAC;;;GAGvC,IAAI9c,IAAI,GAAG+c,UAAU,GAAG1B,YAAY,CAACrb,IAAI,EACzC;;KAEC,MAAMgd,QAAQ,GAAG3B,YAAY,CAACrb,IAAI,IAAIA,IAAI,GAAG+c,UAAU,CAAC;KACxDA,UAAU,IAAIC,QAAQ,GAAGX,aAAa;IACtC,MACI,IAAIhB,YAAY,CAACpb,KAAK,GAAID,IAAI,GAAG8c,UAAU,GAAGC,UAAW,EAC9D;;KAECA,UAAU,IAAK/c,IAAI,GAAG8c,UAAU,GAAGC,UAAU,GAAI1B,YAAY,CAACpb,KAAK,GAAGoc,aAAa;;GAGpFE,KAAK,CAACU,SAAS,CAAC;KAAEF,UAAU,EAAE,CAACA;IAAY,CAAC;GAE5C,IAAI3B,MAAM,GAAGC,YAAY,CAACd,GAAG,IAAIA,GAAG,GAAGc,YAAY,CAACD,MAAM,EAC1D;;KAECzpB,aAAG,CAACyR,KAAK,CAACmZ,KAAK,CAACM,iBAAiB,EAAE,EAAE;OAAE7c,IAAI,EAAE,SAAS;OAAEua,GAAG,EAAE;MAAW,CAAC;IACzE,MAED;KACC,MAAM2C,eAAe,GAAG9yB,cAAI,CAACC,UAAU,CAACmyB,YAAY,CAAC,GAAGA,YAAY,CAACC,iBAAiB,CAAC,GAAI71B,UAAU,GAAG,KAAK,GAAG,QAAS;KACzH,MAAMu2B,YAAY,GAAGhB,eAAe,CAAC/vB,GAAG,CAACmwB,KAAK,CAAC,IAAI,IAAI;KACvD,IAAI5B,QAAQ,GAAGwC,YAAY,KAAK,IAAI,GAAGD,eAAe,GAAGC,YAAY;KACrE,IAAI5C,GAAG,GAAGqC,SAAS,CAACtN,MAAM,GAAG+L,YAAY,CAACD,MAAM,IAAKC,YAAY,CAACd,GAAG,GAAGA,GAAG,GAAGqC,SAAS,CAACtN,MAAO,EAC/F;OACCqL,QAAQ,GAAG,KAAK;MAChB,MACI,IAAIJ,GAAG,GAAGqC,SAAS,CAACtN,MAAM,GAAG+L,YAAY,CAACd,GAAG,EAClD;OACCI,QAAQ,GAAG,QAAQ;;KAGpBwB,eAAe,CAAC7xB,GAAG,CAACiyB,KAAK,EAAE5B,QAAQ,CAAC;KAEpC4B,KAAK,CAACa,cAAc,CAAC;OAAEpd,IAAI;OAAEua,GAAG;OAAEa;MAAQ,CAAC;KAC3CmB,KAAK,CAACc,cAAc,CAAC;OAAE1C,QAAQ;OAAE2C,iBAAiB,EAAE;MAAM,CAAC;;GAG5D,OAAO,IAAI;CACZ;AAEA,CAAO,SAASC,mBAAmB,CAAChB,KAAY,EAChD;GACCJ,eAAe,CAAC9T,MAAM,CAACkU,KAAK,CAAC;CAC9B;;CChFA;CACA,MAAMiB,qBAAqB,GAAG,6DAA6D;CAC3F,MAAMC,QAAQ,GAAG,iEAAiE;AAElF,CAAO,SAASC,WAAW,CAACvE,GAAW,EACvC;GACC,IAAI,CAAC/uB,cAAI,CAACsH,cAAc,CAACynB,GAAG,CAAC,EAC7B;KACC,OAAO,EAAE;;GAGV,MAAMwE,aAAa,GAAGxE,GAAG,CAACtsB,UAAU,CAAC2wB,qBAAqB,EAAE,EAAE,CAAC;GAE/D,OAAOC,QAAQ,CAACtwB,IAAI,CAACwwB,aAAa,CAAC,GAAGA,aAAa,GAAG,EAAE;CACzD;;;;;AChBA,CAM4B;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAO5B,CAAe,MAAMC,WAAW,SAAShtB,6BAAY,CACrD;GAMChB,WAAW,CAAC4c,OAA2B,EACvC;KACC,KAAK,EAAE;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAPO;;KAAI;OAAA;OAAA,OACA;;KAAE;OAAA;OAAA,OACU;;KAAI;OAAA;OAAA,OACJ,IAAI6D,2BAAW;;KAK9C,IAAI,CAACxf,iBAAiB,CAAC,8BAA8B,CAAC;KAEtD,MAAMgtB,kBAAsC,GAAGzzB,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAAC,GAAGA,OAAO,GAAG,EAAE;KAEzF,IAAI,CAACsR,kBAAkB,CAACD,kBAAkB,CAACE,eAAe,CAAC;KAC3D,IAAI,CAACjP,oBAAoB,CAAC+O,kBAAkB,CAAC3P,MAAM,CAAC;;GAGrDa,IAAI,CAACvC,OAAmE,GAAG,EAAE,EAC7E;KAAA;KACC,MAAMD,MAAmB,sBAAGC,OAAO,CAACD,MAAM,8BAAI5kB,SAAS;KACvD,MAAMq2B,aAAiC,GAAG5zB,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAACwR,aAAa,CAAC,GAAGxR,OAAO,CAACwR,aAAa,GAAG,EAAE;KAEhH,IAAI,CAAC5zB,cAAI,CAAC4iB,WAAW,CAACT,MAAM,CAAC,EAC7B;OACC,IAAI,CAAC0R,QAAQ,EAAE,CAACb,cAAc,CAAC7Q,MAAM,CAAC;;KAGvC,IAAI,CAAC0R,QAAQ,EAAE,CAACZ,cAAc,CAAC;OAC9B,GAAGW,aAAa;OAChBV,iBAAiB,EAAE;MACnB,CAAC;KAEF,IAAI,CAACW,QAAQ,EAAE,CAAClP,IAAI,EAAE;;GAGvBC,IAAI,GACJ;KACC,IAAI,CAACiP,QAAQ,EAAE,CAACC,KAAK,EAAE;;GAGxBC,OAAO,GACP;KACC,OAAO,4CAAI,sBAAY,IAAI,IAAI,4CAAI,kBAAQA,OAAO,EAAE;;GAGrDztB,OAAO,GACP;KACC,IAAI,CAACutB,QAAQ,EAAE,CAACvtB,OAAO,EAAE;;GAG1B0tB,WAAW,CAACjF,GAAW,EACvB;KACC,IAAI/uB,cAAI,CAAC8G,QAAQ,CAACioB,GAAG,CAAC,EACtB;OACC,4CAAI,0BAAauE,WAAW,CAACvE,GAAG,CAAC;;;GAInCkF,WAAW,GACX;KACC,+CAAO,IAAI;;GAGZP,kBAAkB,CAAC5hB,SAAsB,EACzC;KACC,IAAI9R,cAAI,CAACgH,aAAa,CAAC8K,SAAS,CAAC,EACjC;OACC,4CAAI,wCAAoBA,SAAS;;;GAInCoiB,kBAAkB,GAClB;KACC,+CAAO,IAAI;;GAGZL,QAAQ,GACR;KACC,IAAI,4CAAI,sBAAY,IAAI,EACxB;OACC,4CAAI,oBAAU,IAAIM,gBAAK,CAAC;SACvBC,QAAQ,EAAE,IAAI;SACdC,SAAS,EAAE,KAAK;SAChBC,OAAO,EAAE,CAAC;SACVC,UAAU,EAAE,IAAI;SAChBZ,eAAe,EAAE,IAAI,CAACO,kBAAkB,EAAE;SAC1CtvB,OAAO,EAAE,IAAI,CAAC8B,YAAY,EAAE;SAC5Bod,MAAM,EAAE;WACP0Q,OAAO,EAAE,MAAM;aACd,IAAI,CAAC3rB,IAAI,CAAC,SAAS,CAAC;YACpB;WACD4rB,SAAS,EAAE,MAAM;aAChB,IAAI,CAAC5rB,IAAI,CAAC,WAAW,CAAC;YACtB;WACD6rB,MAAM,EAAE,MAAM;aACb,IAAI,CAAC7rB,IAAI,CAAC,QAAQ,CAAC;YACnB;WACD8rB,WAAW,EAAE,MAAM;aAClB,IAAI,CAAC9rB,IAAI,CAAC,aAAa,CAAC;;;QAG1B,CAAC;;KAGH,+CAAO,IAAI;;GAGZnC,YAAY,GACZ;KACC,OAAO,4CAAI,oBAAO4f,QAAQ,CAAC,WAAW,EAAE,MAAM;OAC7C,OAAO3d,aAAG,CAAChC,MAAM,oBAAC;;;;iCAIU,CAA0C;SAClE,CAAuB;;;;kBAId,CAAsC;;;;;;;;kBAQtC,CAAwC;;;;;;;IAOrD,GApB8BoH,aAAG,CAACC,UAAU,CAAC,uBAAuB,CAAC,EAC/D,IAAI,CAAC4mB,aAAa,EAAE,EAIX,4CAAI,4CAAqBhsB,IAAI,CAAC,IAAI,CAAC,EAQnC,4CAAI,gDAAuBA,IAAI,CAAC,IAAI,CAAC;MAQpD,CAAC;;GAGHgsB,aAAa,GACb;KACC,OAAO,4CAAI,oBAAOtO,QAAQ,CAAC,aAAa,EAAE,MAAM;OAC/C,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;;;;cAKT,CAAqB;kBACjB,CAAwC;;;IAGrD,GAJW,IAAI,CAACstB,WAAW,EAAE,EACd,4CAAI,gDAAuBrrB,IAAI,CAAC,IAAI,CAAC;MAIpD,CAAC;;CA8BJ;CAAC,gCA1BA;GACC,MAAMmmB,GAAW,GAAG,IAAI,CAAC6F,aAAa,EAAE,CAACvkB,KAAK,CAACsC,IAAI,EAAE;GACrD,IAAIoc,GAAG,CAAClvB,MAAM,GAAG,CAAC,EAClB;KACC,IAAI,CAACm0B,WAAW,CAACjF,GAAG,CAAC;KACrB,IAAI,CAAClmB,IAAI,CAAC,QAAQ,CAAC;IACnB,MAED;KACC,IAAI,CAAC+rB,aAAa,EAAE,CAACx4B,KAAK,EAAE;;CAE9B;CAAC,gCAEqBuU,KAAoB,EAC1C;GACC,IAAIA,KAAK,CAACyC,GAAG,KAAK,OAAO,EACzB;KACCzC,KAAK,CAACiG,cAAc,EAAE;KACtB,4CAAI;;CAEN;CAAC,kCAGD;GACC,IAAI,CAAC/N,IAAI,CAAC,UAAU,CAAC;CACtB;;CCtJM,MAAMgsB,oBAAwD,GAAG56B,6BAAa,CAAC,sBAAsB,CAAC;AAC7G,CAAO,MAAM66B,2BAA2C,GAAG76B,6BAAa,CAAC,6BAA6B,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAExG,CAAO,MAAM86B,WAAW,SAASxvB,UAAU,CAC3C;GAKCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OANa;;KAAI;OAAA;OAAA,OACJ,4CAAI,4CAAqB8K,IAAI,CAAC,IAAI;;KAAC;OAAA;OAAA,OAC9B;;KAMhC,IAAI,CAAC1C,eAAe,yCACnB,IAAI,+CACJolB,qBAAqB,CACpB,IAAI,CAACtlB,SAAS,EAAE,EAChBopB,SAAS,EACRhD,IAAI,IAAK;OACT,IAAI,CAACpmB,SAAS,EAAE,CAACmI,eAAe,CAAC0mB,oBAAoB,EAAEzI,IAAI,CAAC;MAC5D,CACD,CACD;KAED,4CAAI;;GAGL,OAAO9uB,OAAO,GACd;KACC,OAAO,OAAO;;GAGf,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACsxB,SAAS,CAAC;;GAGnBxpB,YAAY,GACZ;KACC,OAAO;OACN2gB,GAAG,EAAE,OAAyB;SAC7BrkB,UAAU,EAAGzG,IAAuB,IAAgC;;;WAGnE,MAAM+qB,GAAG,GAAG/qB,IAAI,CAAC+G,UAAU,EAAE,CAACmQ,IAAI,EAAE;WACpC,MAAMsS,KAAK,GAAGF,MAAM,CAACtpB,IAAI,CAACoyB,YAAY,CAAC,OAAO,CAAC,CAAC;WAChD,MAAM3I,MAAM,GAAGH,MAAM,CAACtpB,IAAI,CAACoyB,YAAY,CAAC,QAAQ,CAAC,CAAC;WAElD,IAAIiB,gBAAgB,CAACtI,GAAG,CAAC,EACzB;aACC,OAAO;eACN/qB,IAAI,EAAE8zB,gBAAgB,CAAC;iBAAE/I,GAAG;iBAAEvB,KAAK;iBAAEC;gBAAQ;cAC7C;;WAGF,OAAO;aACNzpB,IAAI,EAAEkF,+BAAe,CAAClF,IAAI,CAACqF,QAAQ,EAAE;YACrC;UACD;SACDsB,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN4gB,KAAK,EAAGhpB,WAAsB,IAAyB;SACtD,MAAM0wB,UAAU,GAAG,EAAE;SACrB,MAAMlJ,KAAK,GAAGxnB,WAAW,CAACkqB,QAAQ,EAAE;SACpC,MAAMzC,MAAM,GAAGznB,WAAW,CAACmqB,SAAS,EAAE;SACtC,IAAI5nB,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACjD;WACCiJ,UAAU,CAAClJ,KAAK,GAAGA,KAAK;WACxBkJ,UAAU,CAACjJ,MAAM,GAAGA,MAAM;;SAG3B,MAAMlnB,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAC1BC,IAAI,EAAE,KAAK;aACX+oB,MAAM,EAAE,IAAI;aACZF;YACA,CAAC;WACF1uB,KAAK,EAAGgB,WAA8B,IAAK;aAC1CA,WAAW,CAACu0B,WAAW,CAAC,CAACh3B,MAAM,CAAC0G,UAAU,CAACjH,WAAW,CAACiyB,MAAM,EAAE,CAAC,CAAC,CAAC;;UAEnE;;MAEF;;GAGF5pB,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAEsiB;QACX,CAAC;OACFliB,SAAS,EAAE;SACVuZ,KAAK,EAAE;;MAER;;GAsKFngB,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAcA,OAAO,EAAE;;;CAG9B;CAAC,gCA3KA;GACC,OAAOF,8BAAa,CACnB,IAAI,CAACJ,SAAS,EAAE,CAACmH,eAAe,CAC/B0nB,oBAAoB,EACnBznB,OAA2B,IAAK;KAChC,IAAI,CAAC0hB,gBAAgB,CAAC1hB,OAAO,oBAAPA,OAAO,CAAEoZ,GAAG,CAAC,EACnC;OACC,OAAO,KAAK;;KAGb,MAAMiJ,SAAS,GAAGF,gBAAgB,CAACniB,OAAO,CAAC;KAC3C0P,4BAAY,CAAC,CAAC2S,SAAS,CAAC,CAAC;KACzB,IAAI5jB,mCAAmB,CAAC4jB,SAAS,CAAChkB,gBAAgB,EAAE,CAAC,EACrD;OACCojB,mCAAkB,CAACY,SAAS,EAAEhuB,oCAAoB,CAAC,CAAC0b,SAAS,EAAE;;KAGhE,OAAO,IAAI;IACX,EACDhH,uCAAuB,CACvB,EACD,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/B2nB,2BAA2B,EAC3B,MAAe;KACd,MAAM54B,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,4CAAI,oCAAkBA,SAAS,CAACmN,KAAK,EAAE;KACvC,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAc/C,OAAO,EAAE;;KAG5B,IAAI,CAACN,SAAS,EAAE,CAACmI,eAAe,CAACnU,mBAAmB,CAAC;KAErD,4CAAI,gCAAgB,IAAIw5B,WAAW,CAAC;;OAEnCG,eAAe,EAAElqB,QAAQ,CAACknB,IAAI;OAC9B7M,MAAM,EAAE;SACPmR,MAAM,EAAE,MAAM;WACb,MAAMlG,GAAG,GAAG,4CAAI,8BAAckF,WAAW,EAAE;WAC3C,IAAI,CAACj0B,cAAI,CAACsH,cAAc,CAACynB,GAAG,CAAC,EAC7B;aACC,4CAAI,8BAAcnK,IAAI,EAAE;aAExB;;WAGD,IAAI,CAAC5e,SAAS,EAAE,CAACmI,eAAe,CAAC0mB,oBAAoB,EAAE;aAAErO,GAAG,EAAEuI;YAAK,CAAC;WAEpE,4CAAI,8BAAcnK,IAAI,EAAE;UACxB;SACDsQ,QAAQ,EAAE,MAAM;WACf,4CAAI,8BAActQ,IAAI,EAAE;UACxB;SACD4P,OAAO,EAAE,MAAM;WACd,4CAAI;UACJ;SACDC,SAAS,EAAE,MAAM;WAChB,4CAAI;UACJ;SACDC,MAAM,EAAE,MAAM;WACb,IAAIxC,qBAAqB,CAAC,4CAAI,8BAAc2B,QAAQ,EAAE,EAAE,IAAI,CAAC7tB,SAAS,EAAE,CAAC,EACzE;aACCuN,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAAC5C,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,oCAAiB;aACnF,IAAI,CAACvsB,SAAS,EAAE,CAACmvB,kBAAkB,EAAE;;UAEtC;SACDR,WAAW,EAAE,MAAM;WAClB,4CAAI,8BAAcC,aAAa,EAAE,CAACx4B,KAAK,EAAE;;;MAG3C,CAAC;KAEF,4CAAI,8BAAcuoB,IAAI,EAAE;KAExB,OAAO,IAAI;IACX,EACDnX,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EACnB,MAAe;KACd,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAcsM,OAAO,EAAE;;KAG5B,OAAO,KAAK;IACZ,EACDkH,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BjT,yBAAyB,EACzB,MAAe;KACd,OAAO,4CAAI,kCAAkB,IAAI,IAAI,4CAAI,8BAAc65B,OAAO,EAAE;IAChE,EACDvmB,oCAAoB,CACpB,CACD;CACF;CAAC,8BAGD;GACC,MAAMtR,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,4CAAI,sCAAoB,IAAI,EACjE;KACCsV,6BAAa,yCAAC,IAAI,kCAAgB;KAClC,4CAAI,oCAAkB,IAAI;KAE1B,OAAO,IAAI;;GAGZ,OAAO,KAAK;CACb;CAAC,iCAGD;GACC,4CAAI,gCAAgB,IAAI;GACxB+B,eAAK,CAACsS,MAAM,CAAC,IAAI,CAAC7f,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,oCAAiB;GACrF,IAAI,CAACvsB,SAAS,EAAE,CAACovB,uBAAuB,EAAE;GAE1C,IAAI,CAACpvB,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,IAAI,yCAAC,IAAI,yCAAoB,EAC7B;OACC,IAAI,CAAClI,SAAS,EAAE,CAAC5J,KAAK,EAAE;;IAEzB,CAAC;CACH;CAAC,gCAGD;GACC,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7BgkB,qBAAqB,CAAC,4CAAI,8BAAc2B,QAAQ,EAAE,EAAE,IAAI,CAAC7tB,SAAS,EAAE,CAAC;IACrE,CAAC;CACH;CAAC,kCAGD;GACC,IAAI,CAACA,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,OAAO,EAAE,MAAc;KACvE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,kDAAkD,CAAC;KACrEiH,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC1DF,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,4CAAI,kCAAkB,IAAI,IAAI,4CAAI,8BAAc8lB,OAAO,EAAE,EAC7D;SACC;;OAGD,IAAI,CAAC/tB,SAAS,EAAE,CAAC5J,KAAK,CAAC,MAAM;SAC5B,IAAI,CAAC4J,SAAS,EAAE,CAACmI,eAAe,CAAC2mB,2BAA2B,CAAC;QAC7D,CAAC;MACF,CAAC;KAEF,OAAOhnB,MAAM;IACb,CAAC;CACH;;;;;;;;;;;;;CCtTD;CA0BO,MAAMunB,WAAW,SAASjsB,2BAAW,CAC5C;GAIC5D,WAAW,CACV8vB,QAAgB,EAChBlH,EAAmB,EACnBhb,GAAa,EAEd;KACC,KAAK,CAACA,GAAG,CAAC;KAEV,IAAI,CAACmiB,UAAU,GAAGD,QAAQ;KAC1B,IAAI,CAACE,IAAI,GAAGpH,EAAE;;GAGf,OAAO9tB,OAAO,GACd;KACC,OAAO,SAAS;;GAGjB,OAAO+I,KAAK,CAAC5N,IAAiB,EAC9B;KACC,OAAO,IAAI45B,WAAW,CACrB55B,IAAI,CAAC85B,UAAU,EACf95B,IAAI,CAAC+5B,IAAI,EACT/5B,IAAI,CAAC6N,KAAK,CACV;;GAGFke,KAAK,GACL;KACC,MAAMpP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACod,IAAI;;GAGjBC,WAAW,GACX;KACC,MAAMrd,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACmd,UAAU;;GAGvB,OAAOrrB,UAAU,CAACC,cAAqC,EACvD;KACC,MAAM1O,IAAiB,GAAGi6B,kBAAkB,CAC3CvrB,cAAc,CAACmrB,QAAQ,EACvBnrB,cAAc,CAACikB,EAAE,CACjB;KAED3yB,IAAI,CAACwL,SAAS,CAACkD,cAAc,CAAC9M,MAAM,CAAC;KACrC5B,IAAI,CAAC6O,YAAY,CAACH,cAAc,CAACI,SAAS,CAAC;KAE3C,OAAO9O,IAAI;;GAGZ,OAAOsO,SAAS,GAChB;KACC,OAAO;OACNme,IAAI,EAAG5Z,OAAoB,IAAK;SAC/B,IAAI,CAACA,OAAO,CAACM,YAAY,CAAC,iBAAiB,CAAC,EAC5C;WACC,OAAO,IAAI;;SAGZ,OAAO;WACN1M,UAAU,EAAEyzB,qBAAqB;WACjCvzB,QAAQ,EAAE;UACV;QACD;OACDwzB,CAAC,EAAGtnB,OAAoB,IAAK;SAC5B,IAAI,CAACA,OAAO,CAACM,YAAY,CAAC,iBAAiB,CAAC,EAC5C;WACC,OAAO,IAAI;;SAGZ,OAAO;WACN1M,UAAU,EAAEyzB,qBAAqB;WACjCvzB,QAAQ,EAAE;UACV;;MAEF;;GAGFyM,SAAS,GACT;KACC,MAAMpQ,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC9C5G,OAAO,CAACiL,YAAY,CAAC,wBAAwB,EAAE,IAAI,CAAC6rB,UAAU,CAAC;KAC/D92B,OAAO,CAACiL,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC8rB,IAAI,CAAC10B,QAAQ,EAAE,CAAC;KAE7D,OAAO;OAAErC;MAAS;;GAGnB+L,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrB8qB,QAAQ,EAAE,IAAI,CAACC,UAAU;OACzBnH,EAAE,EAAE,IAAI,CAACoH,IAAI;OACblxB,IAAI,EAAE,SAAS;OACfwK,OAAO,EAAE;MACT;;GAGFvF,SAAS,CAACC,MAAoB,EAAE1L,MAAqB,EACrD;KAAA;KACC,MAAMW,OAAO,GAAGgL,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC9C,IAAIrF,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,qBAAb,cAAeksB,OAAO,CAAC,EAC/C;OACCtuB,aAAG,CAACQ,QAAQ,CAACtJ,OAAO,EAAE+K,MAAM,CAACG,KAAK,CAACksB,OAAO,CAAC;;KAG5C,OAAOp3B,OAAO;;GAGfoL,SAAS,CAACC,QAAqB,EAAE3N,MAAmB,EAAEqN,MAAoB,EAC1E;KACC,OAAO,KAAK;;GAGbssB,mBAAmB,GACnB;KACC,OAAO,KAAK;;GAGbC,kBAAkB,GAClB;KACC,OAAO,KAAK;;GAGbjrB,UAAU,GACV;KACC,OAAO,KAAK;;GAGb5J,QAAQ,GACR;KACC,OAAO,IAAI;;GAGZ6P,cAAc,CAAC7U,SAAyB,EAAE8W,gBAAyB,EACnE;KACC,MAAM/O,UAAU,GAAGxC,oCAAoB,EAAE;KACzC,MAAM8I,SAAS,GAAG,IAAI,CAACyrB,YAAY,EAAE;KACrC/xB,UAAU,CAACqG,YAAY,CAACC,SAAS,CAAC;KAClC,IAAI,CAACa,WAAW,CAACnH,UAAU,EAAE+O,gBAAgB,CAAC;KAE9C,OAAO/O,UAAU;;GAGlBgyB,gBAAgB,CACf51B,KAAkB,EAClBnE,SAAyB,EACzBg6B,WAA6B,EAE9B;KACC,IAAI,CAACxoB,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,MAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;KAC/B,MAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;KAC7B,MAAMC,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;KACnC,MAAMC,SAAS,GAAGH,KAAK,CAACE,OAAO,EAAE;KACjC,MAAME,UAAmB,GAAGN,SAAS,CAACM,UAAU,EAAE;KAClD,MAAM25B,eAAuB,GAC5B35B,UAAU,GACPL,MAAM,CAACwV,MAAM,GAAGvV,KAAK,CAACuV,MAAM,GAC5BvV,KAAK,CAACuV,MAAM,GAAGxV,MAAM,CAACwV,MACzB;KAED,OACC,IAAI,CAACykB,UAAU,CAAC/5B,UAAU,CAAC,IACxB,IAAI,CAAC+5B,UAAU,CAAC75B,SAAS,CAAC,IAC1B,IAAI,CAACyG,cAAc,EAAE,CAACnD,MAAM,KAAKs2B,eAAe;;CAGtD;CAEA,SAASR,qBAAqB,CAACrnB,OAAoB,EACnD;GACC,MAAM/L,WAAW,GAAG+L,OAAO,CAAC/L,WAAW;GACvC,IAAIA,WAAW,KAAK,IAAI,EACxB;KACC,MAAM;OAAE8zB,eAAe;OAAEC;MAAW,GAAGhoB,OAAO,CAAC0W,OAAO;KACtD,MAAMvpB,IAAI,GAAGi6B,kBAAkB,CAACW,eAAe,EAAEC,SAAS,CAAC;KAE3D,OAAO;OACN76B;MACA;;GAGF,OAAO,IAAI;CACZ;AAEA,CAAO,SAASi6B,kBAAkB,CAACJ,QAAgB,EAAElH,EAAmB,EACxE;GACC,MAAMmI,WAAwB,GAAG,IAAIlB,WAAW,CAACC,QAAQ,EAAElH,EAAE,CAAC;GAE9D,OAAOpjB,qCAAqB,CAACurB,WAAW,CAAC;CAC1C;AAEA,CAAO,SAASC,cAAc,CAAC/6B,IAAoC,EACnE;GACC,OAAOA,IAAI,YAAY45B,WAAW;CACnC;;CCnLA,MAAMoB,WAAW,GAAG,8DAA8D;CAClF,MAAMC,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC17B,IAAI,CAAC,EAAE,CAAC;;CAEpC;CACA,MAAM27B,WAAW,GAAI,KAAID,QAAS,GAAED,WAAY,MAAK;;CAErD;CACA;CACA,MAAMG,WAAW,GAChB,KAAK,GACH,WAAW;CAAC,EACZ,IAAI;CAAC,EACJ,IAAGH,WAAY,IAAG;CAAC,EACpB,GACF;CAED,MAAMI,YAAY,GAAG,EAAE;CAEvB,MAAMC,YAAY,GAAG,IAAIh8B,MAAM,CAC9B,cAAc,GACX,IAAG47B,QAAS,GAAE,GACd,OAAMC,WAAY,GAAEC,WAAY,OAAMC,YAAa,IAAG,GACvD,IAAI,CACN;AAUD,CAAO,MAAME,sBAA4D,GAAG98B,6BAAa,CAAC,wBAAwB,CAAC;AACnH,CAAO,MAAM+8B,6BAAmE,GAAG/8B,6BAAa,CAAC,+BAA+B,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAElI,CAAO,MAAMg9B,aAAa,SAAS1xB,UAAU,CAC7C;GAcCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAfG;;KAAI;OAAA;OAAA,OACQ;;KAAI;OAAA;OAAA,OACL;;KAAK;OAAA;OAAA,OACM;;KAAI;OAAA;OAAA,OACV;;KAAI;OAAA;OAAA,OACV,4CAAI,gDAAqB8K,IAAI,CAAC,IAAI;;KAAC;OAAA;OAAA,OAChB;;KAAI;OAAA;OAAA,OAC9B;;KAAI;OAAA;OAAA,OACG;;KAAK;OAAA;OAAA,OAED;;KAAI;OAAA;OAAA,OACX,IAAIqD,GAAG;;KAM/B,MAAMirB,QAAQ,GAAGp5B,MAAM,CAAC2kB,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;KACzD,4CAAI,0BAAaziB,cAAI,CAACuuB,aAAa,CAAC2I,QAAQ,CAAC,GAAG,IAAIjrB,GAAG,CAACirB,QAAQ,CAAC,GAAG,IAAIjrB,GAAG,EAAE;KAE7E,MAAMkrB,eAAa,GAAGr5B,MAAM,CAAC2kB,SAAS,CAAC,uBAAuB,CAAC;KAC/D,IAAIziB,cAAI,CAACqN,aAAa,CAAC8pB,eAAa,CAAC,EACrC;OACC,4CAAI,oCAAkBA,eAAa;OACnC,IAAIn3B,cAAI,CAACuuB,aAAa,CAAC,4CAAI,kCAAgB2I,QAAQ,CAAC,EACpD;SACC,KAAK,MAAME,MAAM,IAAI,4CAAI,kCAAgBF,QAAQ,EACjD;WACC,IAAIl3B,cAAI,CAACqN,aAAa,CAAC+pB,MAAM,CAAC,IAAIp3B,cAAI,CAACsH,cAAc,CAAC8vB,MAAM,CAAChJ,EAAE,CAAC,EAChE;aACC,4CAAI,wBAAW/hB,GAAG,CAAC+qB,MAAM,CAAChJ,EAAE,CAAC;;;;OAKhC,4CAAI;;KAGL,IAAI,4CAAI,wBAAWiJ,IAAI,GAAG,CAAC,EAC3B;OACC,4CAAI;OACJ,4CAAI;;;GAIN,OAAO/5B,OAAO,GACd;KACC,OAAO,SAAS;;GAGjB,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACu3B,WAAW,CAAC;;GAGrBzvB,YAAY,GACZ;KACC,IAAI,4CAAI,wBAAWyxB,IAAI,GAAG,CAAC,EAC3B;OACC,MAAMhb,GAAG,GAAG,EAAE;OACd,KAAK,MAAMiZ,QAAQ,4CAAI,IAAI,yBAC3B;SACCjZ,GAAG,CAACiZ,QAAQ,CAAC,GAAG,OAAyB;WACxCpzB,UAAU,0CAAE,IAAI,iDAAuB;WACvCE,QAAQ,EAAE;UACV,CAAC;;OAGH,OAAOia,GAAG;;KAGX,OAAO,IAAI;;GAGZxW,YAAY,GACZ;KACC,OAAO;OACNgwB,OAAO,EAAGp4B,WAAwB,IAAyB;SAC1D,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAC1BC,IAAI,EAAE7H,WAAW,CAACg4B,WAAW,EAAE;aAC/BplB,KAAK,EAAE5S,WAAW,CAAC+pB,KAAK,EAAE;aAC1B6G,MAAM,EAAE;YACR;UACD;;MAEF;;GAGFvoB,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAEuoB;QACX,CAAC;OACFnoB,SAAS,EAAE;SACV2oB,OAAO,EAAE;;MAEV;;GAGFyB,qBAAqB,GACrB;KACC,+CAAO,IAAI;;GA4dZC,eAAe,GACf;KACC,OAAO,4CAAI,wBAAa,IAAI,IAAI,4CAAI,oBAASC,UAAU,EAAE,IAAI,4CAAI,oBAAS3D,QAAQ,EAAE,CAACE,OAAO,EAAE;;GA6F/FztB,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,8BAAgB,IAAI,EAC5B;OACCmxB,YAAY,yCAAC,IAAI,0BAAY;OAC7B,4CAAI,4BAAc,IAAI;;KAGvB,IAAI,4CAAI,wBAAa,IAAI,EACzB;OACC,4CAAI,oBAASnxB,OAAO,EAAE;;KAGvB,4CAAI;KACJ,4CAAI;;CAEN;CAAC,gCAzkBA;GACC,IAAI,CAACJ,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/B4pB,sBAAsB,EACrB3pB,OAA6B,IAAK;KAClC,IACC,CAACpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IACzB,CAACpN,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAACkoB,QAAQ,CAAC,IACtC,CAACt1B,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAACrE,IAAI,CAAC,IACjC,CAAC/I,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAACghB,EAAE,CAAC,IAAI,CAACpuB,cAAI,CAACwkB,QAAQ,CAACpX,OAAO,CAACghB,EAAE,CAAE,EAEpE;OACC,OAAO,KAAK;;KAGb,IAAI,CAAC,4CAAI,wBAAW5hB,GAAG,CAACY,OAAO,CAACkoB,QAAQ,CAAC,EACzC;OACCoC,OAAO,CAACC,KAAK,CAAE,yCAAwCvqB,OAAO,CAACkoB,QAAS,kBAAiB,CAAC;OAE1F,OAAO,KAAK;;KAGb,MAAMiB,WAAW,GAAGb,kBAAkB,CAACtoB,OAAO,CAACkoB,QAAQ,EAAEloB,OAAO,CAACghB,EAAE,CAAC;KACpEmI,WAAW,CAACv1B,MAAM,CAACL,+BAAe,CAACyM,OAAO,CAACrE,IAAI,CAAC,CAAC;KAEjD,MAAMmS,aAAa,GAAG,EAAE;KACxB,IAAIlb,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAACwqB,MAAM,CAAC,EACvC;OACC1c,aAAa,CAACnb,IAAI,CAACY,+BAAe,CAACyM,OAAO,CAACwqB,MAAM,CAAC,CAAC;;KAGpD1c,aAAa,CAACnb,IAAI,CAACw2B,WAAW,CAAC;KAE/B,IAAIv2B,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAAC3N,KAAK,CAAC,EACtC;OACCyb,aAAa,CAACnb,IAAI,CAACY,+BAAe,CAACyM,OAAO,CAAC3N,KAAK,CAAC,CAAC;;KAGnDqd,4BAAY,CAAC5B,aAAa,CAAC;KAC3B,IAAIrP,mCAAmB,CAAC0qB,WAAW,CAAC9qB,gBAAgB,EAAE,CAAC,EACvD;OACCojB,mCAAkB,CAAC0H,WAAW,EAAE90B,oCAAoB,CAAC,CAAC0b,SAAS,EAAE;;KAGlE,OAAO,IAAI;IACX,EACDhH,uCAAuB,CACvB,EACD,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/B6pB,6BAA6B,EAC5B5pB,OAAO,IAAc;KACrB,MAAMlR,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,IAAI,CAAC8J,SAAS,EAAE,CAACkI,MAAM,CACtB,MAAM;OACL,MAAM2pB,WAAW,2CAAG,IAAI,0CAAoB37B,SAAS,CAAC;OACtD,IAAI47B,SAAS,GAAGD,WAAW,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC90B,IAAI,CAAC80B,WAAW,CAAC;OACrE,IAAIC,SAAS,EACb;SACC,MAAM37B,MAAM,GAAGD,SAAS,CAACC,MAAM;SAC/B,MAAME,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;SACnC,IAAID,UAAU,CAAC2e,oBAAoB,EAAE,KAAK,CAAC,IAAI7e,MAAM,CAACwV,MAAM,KAAK,CAAC,EAClE;WACCmmB,SAAS,GAAG,KAAK;;;OAInB57B,SAAS,CAAC67B,UAAU,CAACD,SAAS,GAAG,IAAI,GAAG,GAAG,CAAC;MAC5C,EACD;OACC9Z,QAAQ,EAAE,MAAM;SACf,IAAI,CAAChY,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;WAC7B,MAAMwN,KAAwB,2CAAG,IAAI,kCAAgBjO,6BAAa,EAAE,CAAC;WACrE,IAAIiO,KAAK,KAAK,IAAI,IAAI,yCAAC,IAAI,8DAA8BA,KAAK,CAACsc,UAAU,CAAC,EAC1E;aACC,4CAAI,4BAAatc,KAAK;;UAEvB,CAAC;;MAEH,CACD;KAED,OAAO,IAAI;IACX,EACDlO,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EAClBoT,OAAO,IAAc;KACrB,IAAI,CAACA,OAAO,IAAIA,OAAO,CAAC6qB,MAAM,KAAK,SAAS,EAC5C;OACC,4CAAI;;KAGL,OAAO,KAAK;IACZ,EACDzqB,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BjT,yBAAyB,EACzB,MAAe;KACd,OAAO,IAAI,CAACq9B,eAAe,EAAE;IAC7B,EACD/pB,oCAAoB,CACpB,CACD;CACF;CAAC,kCAGD;GACC,IAAI,CAACxH,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,SAAS,EAAE,MAAc;KACzE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,6CAA6C,CAAC;KAChEiH,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,yBAAyB,CAAC,CAAC;KAC5DF,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,IAAI,CAACspB,eAAe,EAAE,EAC1B;SACC;;OAGD,IAAI,CAACvxB,SAAS,EAAE,CAAC5J,KAAK,CAAC,MAAM;SAC5B,IAAI,CAAC4J,SAAS,EAAE,CAACmI,eAAe,CAAC6oB,6BAA6B,CAAC;QAC/D,CAAC;MACF,CAAC;KAEF,OAAOlpB,MAAM;IACb,CAAC;CACH;CAAC,iCAEsBrS,IAAuB,EAC9C;GACC,OAAO;KACNA,IAAI,EAAEi6B,kBAAkB,CAACj6B,IAAI,CAAC6B,OAAO,EAAE,EAAE7B,IAAI,CAACuU,QAAQ,EAAE;IACxD;CACF;CAAC,qCAGD;GACC,4CAAI,wCAAoB,IAAI;GAE5B,MAAMkoB,eAAe,GAAIvnB,KAAoB,IAAK;KACjD,4CAAI,IAAI,yCACR;OACC,IAAIA,KAAK,CAACyC,GAAG,KAAK,QAAQ,IAAIzC,KAAK,CAACyC,GAAG,KAAK,OAAO,EACnD;SACC,4CAAI;;MAEL,MACI,IAAI,yCAAC,IAAI,uCAAkB,KAAKzC,KAAK,CAACyC,GAAG,KAAK,GAAG,IAAIzC,KAAK,CAACyC,GAAG,KAAK,GAAG,CAAC,EAC5E;OACC,4CAAI,4BAAcwS,UAAU,CAAC,MAAY;SACxC,IAAI,CAAC5f,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;WACnC,MAAMhS,SAAyB,GAAGuR,6BAAa,EAAE;WACjD,MAAMiO,KAAwB,2CAAG,IAAI,kCAAgBxf,SAAS,CAAC;WAC/D,IAAIwf,KAAK,KAAK,IAAI,IAAI,yCAAC,IAAI,8DAA8BA,KAAK,CAACsc,UAAU,CAAC,EAC1E;aACC,4CAAI,4BAAatc,KAAK;;UAEvB,CAAC;QACF,EAAE,GAAG,CAAC;;KAGR,OAAO,KAAK;IACZ;GAED,IAAI,CAACxV,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAACgrB,gCAAgB,EAAED,eAAe,EAAE1qB,oCAAoB,CAAC,CACzF;CACF;CAAC,yCAGD;GACC,4CAAI;GAEJ,4CAAI,kDAAyB,IAAI,CAACxH,SAAS,EAAE,CAACoyB,2BAA2B,CACxE,4CAAI,8CAAsBxvB,IAAI,CAAC,IAAI,CAAC,CACpC;CACF;CAAC,2CAGD;GACC,IAAI,4CAAI,oDAA2B,IAAI,EACvC;KACC,4CAAI;KACJ,4CAAI,kDAAyB,IAAI;;CAEnC;CAAC,iCAGD;GACC,IAAI,CAAC5C,SAAS,EAAE,CAACwN,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;KAC5C,MAAMvX,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,MAAMiO,KAAwB,2CAAG,IAAI,kCAAgBxf,SAAS,CAAC;KAC/D,IAAIwf,KAAK,KAAK,IAAI,IAAI,yCAAC,IAAI,8DAA8BA,KAAK,CAACsc,UAAU,CAAC,EAC1E;OACC,4CAAI,4BAAatc,KAAK;MACtB,MAED;OACC,4CAAI;;IAEL,CAAC;CACH;CAAC,mCAGD;GACC,4CAAI,0CAAqB,IAAI;GAC7B,4CAAI;CACL;CAAC,kCAGD;GACC,4CAAI,0CAAqB,KAAK;GAC9B,4CAAI;CACL;CAAC,yBAEcxf,SAAyB,EAAEm8B,cAAsB,GAAG,CAAC,EACpE;GACC,IAAI,CAAC3qB,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAACA,SAAS,CAACwV,WAAW,EAAE,EAC7D;KACC,OAAO,IAAI;;GAGZ,MAAMvV,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAME,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;GACnC,IAAI,CAACoB,2BAAW,CAACrB,UAAU,CAAC,IAAI,CAACA,UAAU,CAACi8B,YAAY,EAAE,EAC1D;KACC,OAAO,IAAI;;GAGZ,MAAMvvB,IAAmB,2CAAG,IAAI,0CAAoB7M,SAAS,CAAC;;;;GAI9D,IAAI,CAAC8D,cAAI,CAACsH,cAAc,CAACyB,IAAI,CAAC,EAC9B;KACC,OAAO,IAAI;;GAGZ,+CAAO,IAAI,gCAAeA,IAAI,EAAEsvB,cAAc;CAC/C;CAAC,6BAEkBn8B,SAAyB,EAC5C;GACC,MAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,IAAIA,MAAM,CAACmI,IAAI,KAAK,MAAM,EAC1B;KACC,OAAO,IAAI;;GAGZ,MAAMjI,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;GACnC,IAAI,CAACD,UAAU,CAACi8B,YAAY,EAAE,EAC9B;KACC,OAAO,IAAI;;GAGZ,MAAM9X,YAAoB,GAAGrkB,MAAM,CAACwV,MAAM;GAE1C,OAAOtV,UAAU,CAAC2G,cAAc,EAAE,CAACgd,KAAK,CAAC,CAAC,EAAEQ,YAAY,CAAC;CAC1D;CAAC,uCAE4B7O,MAAc,EAC3C;GACC,IAAIA,MAAM,KAAK,CAAC,EAChB;KACC,OAAO,KAAK;;GAGb,OAAO,IAAI,CAAC3L,SAAS,EAAE,CAACwN,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;KACnD,MAAMvX,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACC,MAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;OAC/B,MAAME,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;OACnC,MAAM2Y,WAAW,GAAG5Y,UAAU,CAAC0V,kBAAkB,EAAE;OAEnD,OAAOrU,2BAAW,CAACuX,WAAW,CAAC,IAAIA,WAAW,CAACsjB,YAAY,EAAE;;KAG9D,OAAO,KAAK;IACZ,CAAC;CACH;CAAC,wBAEaxvB,IAAY,EAAEsvB,cAAsB,EAClD;GACC,MAAM3c,KAAK,GAAGob,YAAY,CAAC0B,IAAI,CAACzvB,IAAI,CAAC;GACrC,IAAI2S,KAAK,KAAK,IAAI,EAClB;;;KAGC,MAAM+c,sBAAsB,GAAG/c,KAAK,CAAC,CAAC,CAAC;KAEvC,MAAMgd,cAAc,GAAGhd,KAAK,CAAC,CAAC,CAAC;KAC/B,IAAIgd,cAAc,CAAC74B,MAAM,IAAIw4B,cAAc,EAC3C;OACC,OAAO;SACNL,UAAU,EAAEtc,KAAK,CAACX,KAAK,GAAG0d,sBAAsB,CAAC54B,MAAM;SACvD64B,cAAc;SACdC,iBAAiB,EAAEjd,KAAK,CAAC,CAAC;QAC1B;;;GAIH,OAAO,IAAI;CACZ;CAAC,oCAMyBA,KAAiB,EAC3C;GACC,MAAMxf,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAACA,SAAS,CAACwV,WAAW,EAAE,EAC7D;KACC,OAAO,IAAI;;GAGZ,MAAMvV,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,IAAIA,MAAM,CAACmI,IAAI,KAAK,MAAM,EAC1B;KACC,OAAO,IAAI;;GAGZ,MAAMjI,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;GACnC,IAAI,CAACD,UAAU,CAACi8B,YAAY,EAAE,EAC9B;KACC,OAAO,IAAI;;GAGZ,MAAMM,eAAe,GAAGz8B,MAAM,CAACwV,MAAM;GACrC,MAAMpP,WAAW,GAAGlG,UAAU,CAAC2G,cAAc,EAAE,CAACgd,KAAK,CAAC,CAAC,EAAE4Y,eAAe,CAAC;GACzE,MAAMC,eAAuB,GAAGnd,KAAK,CAACid,iBAAiB,CAAC94B,MAAM;GAC9D,MAAMi5B,WAAmB,2CAAG,IAAI,4CAAqBv2B,WAAW,EAAEmZ,KAAK,CAACgd,cAAc,EAAEG,eAAe,CAAC;GAExG,MAAMvI,WAAmB,GAAGsI,eAAe,GAAGE,WAAW;GACzD,IAAIxI,WAAW,GAAG,CAAC,EACnB;KACC,OAAO,IAAI;;GAGZ,IAAIyI,OAAO,GAAG,IAAI;GAClB,IAAIzI,WAAW,KAAK,CAAC,EACrB;KACC,CAACyI,OAAO,CAAC,GAAG18B,UAAU,CAACwe,SAAS,CAAC+d,eAAe,CAAC;IACjD,MAED;KACC,GAAGG,OAAO,CAAC,GAAG18B,UAAU,CAACwe,SAAS,CAACyV,WAAW,EAAEsI,eAAe,CAAC;;GAGjE,OAAOG,OAAO;CACf;CAAC,8BAMmBC,YAAoB,EAAEC,SAAiB,EAAEtnB,MAAc,EAC3E;GACC,IAAIunB,aAAqB,GAAGvnB,MAAM;GAClC,KAAK,IAAI9U,CAAS,GAAGq8B,aAAa,EAAEr8B,CAAC,IAAIo8B,SAAS,CAACp5B,MAAM,EAAEhD,CAAC,EAAE,EAC9D;KACC,IAAIm8B,YAAY,CAAChZ,KAAK,CAAC,CAACnjB,CAAC,CAAC,KAAKo8B,SAAS,CAACjZ,KAAK,CAAC,CAAC,EAAEH,IAAI,CAACoD,GAAG,CAAC,CAAC,EAAEpmB,CAAC,CAAC,CAAC,EACjE;OACCq8B,aAAa,GAAGr8B,CAAC;;;GAInB,OAAOq8B,aAAa;CACrB;CAAC,sBAEWC,UAAsB,EAClC;GACC,IAAI,IAAI,CAAC9yB,WAAW,EAAE,EACtB;KACC;;GAGD,4CAAI,sCAAmB8yB,UAAU;GACjC,IAAI,4CAAI,wBAAa,IAAI,EACzB;KACC,MAAMhC,aAAa,GAAGn3B,cAAI,CAACqN,aAAa,yCAAC,IAAI,kCAAgB,GAAG;OAAE,2CAAG,IAAI;MAAiB,GAAG,EAAE;KAC/F,MAAM+rB,UAAU,GAAGjC,aAAa,CAACrT,MAAM;KAEvCuV,iBAAO,CAACC,aAAa,CAAC,oBAAoB,CAAC,CAACC,IAAI,CAAEC,OAAO,IAAK;OAC7D,IAAI,IAAI,CAACnzB,WAAW,EAAE,EACtB;SACC;;OAGD,MAAM;SAAEozB;QAAQ,GAAGD,OAAO;OAE1B,MAAME,qBAAoC,GAAG;SAC5CC,QAAQ,EAAE,KAAK;SACfC,YAAY,EAAE,KAAK;SACnBC,mBAAmB,EAAE,IAAI;SACzBC,YAAY,EAAE,IAAI;SAClBC,SAAS,EAAE,IAAI;SACf3F,QAAQ,EAAE,IAAI;SACdlP,MAAM,EAAE,GAAG;SACXD,KAAK,EAAE,GAAG;SACV+U,eAAe,EAAE,KAAK;SACtBC,WAAW,EAAE,IAAI;SACjB,GAAG9C,aAAa;SAChBrT,MAAM,EAAE;WACP4Q,MAAM,EAAE,MAAM;aACb,4CAAI;aACJ,4CAAI;aACJnhB,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAAC5C,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;YACnF;WACD2H,MAAM,EAAE,MAAM;aACb,4CAAI;YACJ;WACDzF,SAAS,EAAE,MAAM;aAChB,4CAAI;YACJ;WACD,qBAAqB,EAAG9jB,KAAgB,IAAK;aAC5C,MAAMwpB,YAAY,GAAGxpB,KAAK,CAACmG,OAAO,EAAE,CAACsjB,IAAI;aACzCzpB,KAAK,CAACiG,cAAc,EAAE;aAEtB,IAAI,CAAC5Q,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;eACnC,MAAMmsB,aAAwB,2CAAG,IAAI,gGAA2B,IAAI,oCAAiB;eACrF,MAAM9D,WAAwB,GAAGb,kBAAkB,CAClDyE,YAAY,CAAC1E,WAAW,EAAE,EAC1B0E,YAAY,CAAC3S,KAAK,EAAE,CACpB;eAED+O,WAAW,CAACv1B,MAAM,CACjBL,+BAAe,CAACw5B,YAAY,CAACG,QAAQ,EAAE,CAAC,CACxC;eAED,IAAID,aAAa,EACjB;iBACCA,aAAa,CAAC33B,OAAO,CAAC6zB,WAAW,CAAC;iBAClCA,WAAW,CAACplB,MAAM,EAAE;;eAGrB,4CAAI;cACJ,CAAC;;;QAGJ;OAED,4CAAI,sBAAW,IAAIsoB,MAAM,CAACC,qBAAqB,CAAC;OAEhD,IAAI,CAAC1zB,SAAS,EAAE,CAACmI,eAAe,CAACnU,mBAAmB,EAAE;SAAEi+B,MAAM,EAAE;QAAW,CAAC;OAE5E,4CAAI,oBAASvT,oBAAoB,CAAC0U,UAAU,CAAC;OAC7C,4CAAI,oBAASzU,IAAI,EAAE;OACnB,4CAAI,oBAAS4V,MAAM,CAACpB,UAAU,CAACT,cAAc,CAAC;OAC9C,4CAAI;MACJ,CAAC,CACA8B,KAAK,CAAE7C,KAAK,IAAK;OACjBD,OAAO,CAACC,KAAK,CAAC,6DAA6D,EAAEA,KAAK,CAAC;MACnF,CAAC;IACH,MAED;KACC,IAAI,CAAC3xB,SAAS,EAAE,CAACmI,eAAe,CAACnU,mBAAmB,EAAE;OAAEi+B,MAAM,EAAE;MAAW,CAAC;KAE5E,4CAAI,oBAAStT,IAAI,EAAE;KACnB,4CAAI,oBAAS4V,MAAM,CAACpB,UAAU,CAACT,cAAc,CAAC;KAC9C,4CAAI;;CAEN;CAAC,kCAQD;GACC,IAAI,CAAC1yB,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,MAAMmkB,iBAAiB,GAAGzC,qBAAqB,CAAC,IAAI,CAAC5pB,SAAS,EAAE,EAAEyH,6BAAa,EAAE,EAAEhE,QAAQ,CAACknB,IAAI,CAAC;KACjG,IAAI0B,iBAAiB,KAAK,IAAI,EAC9B;OACC;;KAGD,MAAM;OAAElC,GAAG;OAAEva,IAAI;OAAEob;MAAQ,GAAGqB,iBAAiB;KAC/C,MAAMpB,YAAqB,GAAG1pB,aAAG,CAAC+qB,WAAW,CAAC,IAAI,CAACtsB,SAAS,EAAE,CAACusB,oBAAoB,EAAE,CAAC;KACtF,MAAMG,UAAU,GAAG,GAAG;KAEtB,IAAIC,UAAU,GAAG,EAAE;KACnB,IAAI/c,IAAI,GAAG+c,UAAU,GAAG1B,YAAY,CAACrb,IAAI,EACzC;;OAEC,MAAMgd,QAAQ,GAAG3B,YAAY,CAACrb,IAAI,IAAIA,IAAI,GAAG+c,UAAU,CAAC;OACxDA,UAAU,IAAIC,QAAQ,GAAG,EAAE;MAC3B,MACI,IAAI3B,YAAY,CAACpb,KAAK,GAAID,IAAI,GAAG8c,UAAU,GAAGC,UAAW,EAC9D;;OAECA,UAAU,IAAK/c,IAAI,GAAG8c,UAAU,GAAGC,UAAU,GAAI1B,YAAY,CAACpb,KAAK,GAAG,EAAE;;KAGzE,IAAImb,MAAM,GAAGC,YAAY,CAACd,GAAG,IAAIA,GAAG,GAAGc,YAAY,CAACD,MAAM,EAC1D;OACCzpB,aAAG,CAACQ,QAAQ,CAAC,4CAAI,oBAAS8rB,QAAQ,EAAE,CAACpB,iBAAiB,EAAE,EAAE,sCAAsC,CAAC;MACjG,MAED;OACClrB,aAAG,CAACS,WAAW,CAAC,4CAAI,oBAAS6rB,QAAQ,EAAE,CAACpB,iBAAiB,EAAE,EAAE,sCAAsC,CAAC;OAEpG,4CAAI,oBAAS9N,IAAI,EAAE;OACnB,IAAI,4CAAI,oCAAmB,IAAI,IAAI,4CAAI,gCAAewL,GAAG,KAAKa,MAAM,EACpE;SACC,4CAAI,kCAAiB;WAAEpb,IAAI,EAAEA,IAAI,GAAG+c,UAAU;WAAExC,GAAG,EAAEa;UAAQ;;OAG9D,4CAAI,oBAAS6C,QAAQ,EAAE,CAACb,cAAc,yCAAC,IAAI,gCAAe;OAC1D,4CAAI,oBAASa,QAAQ,EAAE,CAACZ,cAAc,CAAC;SAAEC,iBAAiB,EAAE,IAAI;SAAEuH,QAAQ,EAAE;QAAM,CAAC;;IAEpF,CAAC;CACH;CAAC,kCAGD;GACC,4CAAI;CACL;CAAC,iCAGD;GACC,4CAAI,kCAAiB,IAAI;GACzB,4CAAI;GACJ,4CAAI;GACJlnB,eAAK,CAACsS,MAAM,CAAC,IAAI,CAAC7f,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;CACtF;CAAC,wBAGD;GACC,IAAI,4CAAI,wBAAa,IAAI,EACzB;KACC,4CAAI,oBAAS3N,IAAI,EAAE;;CAErB;CAAC,kCAGD;GACC,IAAI,4CAAI,gEAAiC,IAAI,EAC7C;KACC,4CAAI,8DAA+Bxe,8BAAa,CAC/C,IAAI,CAACJ,SAAS,EAAE,CAACmH,eAAe,CAACsJ,sCAAsB,EAAE,MAAY,IAAI,EAAEjJ,oCAAoB,CAAC,EAChG,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAACoJ,oCAAoB,EAAE,MAAY,IAAI,EAAE/I,oCAAoB,CAAC,EAC9F,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAACutB,kCAAkB,EAAE,MAAY,IAAI,EAAEltB,oCAAoB,CAAC,EAC5F,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAACsP,+BAAe,EAAE,MAAY,IAAI,EAAEjP,oCAAoB,CAAC,EACzF,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAACqD,iCAAiB,EAAE,MAAY,IAAI,EAAEhD,oCAAoB,CAAC,CAC3F;;CAEH;CAAC,oCAGD;GACC,IAAI,4CAAI,gEAAiC,IAAI,EAC7C;KACC,4CAAI;KACJ,4CAAI,8DAA+B,IAAI;;CAEzC;;;;;;;;;;;;;CC/vBD;CAwBO,MAAMmtB,UAAU,SAAS5T,6BAAa,CAC7C;GAMC,OAAOzmB,OAAO,GACd;KACC,OAAO,QAAQ;;GAGhB,OAAO+I,KAAK,CAAC5N,IAAgB,EAC7B;KACC,OAAO,IAAIk/B,UAAU,CACpBl/B,IAAI,CAAC6zB,KAAK,EACV7zB,IAAI,CAACm/B,QAAQ,EACbn/B,IAAI,CAAC2rB,OAAO,EACZ3rB,IAAI,CAAC6rB,QAAQ,EACb7rB,IAAI,CAAC6N,KAAK,CACV;;GAGF9D,WAAW,CACVghB,GAAW,EACXqU,MAAc,EACd5V,KAAc,EACdC,MAAe,EACf9R,GAAa,EAEd;KACC,KAAK,CAACA,GAAG,CAAC;KAAC,KA3BZgU,OAAO,GAAW,IAAI;KAAA,KACtBE,QAAQ,GAAW,IAAI;KA2BtB,IAAI,CAACgI,KAAK,GAAG9I,GAAG;KAChB,IAAI,CAACoU,QAAQ,GAAGC,MAAM;KAEtB,IAAI76B,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,EACxB;OACC,IAAI,CAACmC,OAAO,GAAGnC,KAAK;;KAGrB,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACzB;OACC,IAAI,CAACoC,QAAQ,GAAGpC,MAAM;;;GAIxBwK,MAAM,GACN;KACC,OAAO,IAAI,CAACJ,KAAK;;GAGlBwL,SAAS,GACT;KACC,OAAO,IAAI,CAACF,QAAQ;;GAGrBjT,QAAQ,GACR;KACC,OAAO,IAAI,CAACP,OAAO;;GAGpBQ,SAAS,GACT;KACC,OAAO,IAAI,CAACN,QAAQ;;GAGrB/d,SAAS,CAACC,MAAoB,EAC9B;KAAA;KACC,MAAM+c,GAAqB,GAAG9c,QAAQ,CAACpE,aAAa,CAAC,KAAK,CAAC;KAC3DkhB,GAAG,CAACC,GAAG,GAAGuU,SAAS,CAAC,IAAI,CAACzL,KAAK,CAAC;KAC/B,IAAI,IAAI,CAAC3H,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,CAACC,SAAS,EAAE,GAAG,CAAC,EAC/C;OACCrgB,aAAG,CAACyR,KAAK,CAACuN,GAAG,EAAE;SACdtB,KAAK,EAAG,GAAE,IAAI,CAAC0C,QAAQ,EAAG,IAAG;SAC7BzC,MAAM,EAAG,GAAE,IAAI,CAAC0C,SAAS,EAAG;QAC5B,CAAC;;KAGH,IAAI5nB,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,qBAAb,cAAeqxB,MAAM,CAAC,EAC9C;OACCzzB,aAAG,CAACQ,QAAQ,CAACwe,GAAG,EAAE/c,MAAM,CAACG,KAAK,CAACqxB,MAAM,CAAC;;KAGvCzzB,aAAG,CAACC,IAAI,CAAC+e,GAAG,EAAE;OAAEF,SAAS,EAAE;MAAO,CAAC;KAEnC,OAAOE,GAAG;;GAGX1c,SAAS,CAACC,QAAkB,EAAE2E,GAAgB,EAAEjF,MAAoB,EACpE;KACC,OAAO,KAAK;;GAGb,OAAOU,UAAU,CAACC,cAAoC,EACtD;KACC,MAAM;OAAEqc,GAAG;OAAEqU,MAAM;OAAE5V,KAAK;OAAEC;MAAQ,GAAG/a,cAAc;KAErD,OAAO8wB,iBAAiB,CAACzU,GAAG,EAAEqU,MAAM,EAAE5V,KAAK,EAAEC,MAAM,CAAC;;GAGrDrW,SAAS,GACT;KACC,MAAMqZ,IAAI,GAAGze,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC3C6iB,IAAI,CAAC3lB,WAAW,GAAG,IAAI,CAACu4B,SAAS,EAAE;KAEnC,OAAO;OAAEr8B,OAAO,EAAEypB;MAAM;;GAGzB1d,UAAU,GACV;KACC,OAAO;OACNgc,GAAG,EAAE,IAAI,CAACkJ,MAAM,EAAE;OAClBmL,MAAM,EAAE,IAAI,CAACC,SAAS,EAAE;OACxB7V,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;OACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;OACxBtjB,IAAI,EAAE,QAAQ;OACdwK,OAAO,EAAE;MACT;;GAGFqZ,QAAQ,CAACrqB,MAAqB,EAAE0L,MAAoB,EACpD;KACC,OAAO,EAAE;;GAGVxG,cAAc,GACd;KACC,OAAO,IAAI,CAAC83B,SAAS,EAAE;;GAGxB55B,QAAQ,GACR;KACC,OAAO,IAAI;;GAGZg6B,oBAAoB,GACpB;KACC,OAAO,KAAK;;GAGbC,UAAU,GACV;KACC,OAAO,KAAK;;CAEd;AAEA,CAAO,SAASC,aAAa,CAAC3/B,IAAoC,EAClE;GACC,OAAOA,IAAI,YAAYk/B,UAAU;CAClC;AAEA,CAAO,SAASM,iBAAiB,CAACzU,GAAW,EAAEqU,MAAc,EAAE5V,KAAa,EAAEC,MAAc,EAC5F;GACC,MAAMzpB,IAAI,GAAG,IAAIk/B,UAAU,CAACnU,GAAG,EAAEqU,MAAM,EAAE5V,KAAK,EAAEC,MAAM,CAAC;;;;GAIvD,OAAOla,qCAAqB,CAACvP,IAAI,CAAC;CACnC;;CCpLmC;CAAA;AAOnC,CAAO,MAAM4/B,YAAY,SAAS70B,6BAAY,CAC9C;GAIChB,WAAW,CAAC2xB,aAAa,EACzB;KACC,KAAK,EAAE;KAAC;OAAA;OAAA,OALO;;KAAI;OAAA;OAAA,OACO;;KAK1B,IAAI,CAAC1wB,iBAAiB,CAAC,+BAA+B,CAAC;KAEvD,MAAM2b,OAA4B,GAAGpiB,cAAI,CAACqN,aAAa,CAAC8pB,aAAa,CAAC,GAAGA,aAAa,GAAG,EAAE;KAE3F,IAAI,CAACmE,aAAa,CAAClZ,OAAO,CAACmJ,UAAU,CAAC;KACtC,IAAI,CAAC7G,oBAAoB,CAACtC,OAAO,CAAC0B,MAAM,CAAC;;GAG1Ca,IAAI,GACJ;KACC,IAAI,CAACkP,QAAQ,EAAE,CAACZ,cAAc,CAAC;OAAEC,iBAAiB,EAAE;MAAM,CAAC;KAC3D,IAAI,CAACW,QAAQ,EAAE,CAAClP,IAAI,EAAE;;GAGvBC,IAAI,GACJ;KACC,IAAI,CAACiP,QAAQ,EAAE,CAACC,KAAK,EAAE;;GAGxBC,OAAO,GACP;KACC,OAAO,4CAAI,0BAAY,IAAI,IAAI,4CAAI,sBAAQA,OAAO,EAAE;;GAGrDztB,OAAO,GACP;KACC,IAAI,CAACutB,QAAQ,EAAE,CAACvtB,OAAO,EAAE;;GAG1Bg1B,aAAa,CAACxpB,SAAsB,EACpC;KACC,IAAI9R,cAAI,CAACgH,aAAa,CAAC8K,SAAS,CAAC,EACjC;OACC,4CAAI,8BAAeA,SAAS;;;GAI9BypB,aAAa,GACb;KACC,+CAAO,IAAI;;GAGZ1H,QAAQ,GACR;KACC,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,MAAMnB,UAAU,GAAG,GAAG;OACtB,MAAMnH,UAAU,GAAG,IAAI,CAACgQ,aAAa,EAAE;OACvC,MAAMC,IAAI,GAAGjQ,UAAU,CAACpG,qBAAqB,EAAE;OAC/C,MAAMsW,eAAe,GAAGD,IAAI,CAACvW,KAAK;OAElC,4CAAI,wBAAU,IAAIkP,gBAAK,CAAC;SACvBC,QAAQ,EAAE,IAAI;SACdE,OAAO,EAAE,CAAC;SACVC,UAAU,EAAE,IAAI;SAChBtP,KAAK,EAAEyN,UAAU;SACjBxN,MAAM,EAAE,GAAG;SACXwW,WAAW,EAAE,IAAI,CAACH,aAAa,EAAE;SACjCzX,MAAM,EAAE;WACP0Q,OAAO,EAAE,MAAM;aACd,IAAI,CAAC3rB,IAAI,CAAC,SAAS,CAAC;YACpB;WACD4rB,SAAS,EAAE,MAAM;aAChB,IAAI,CAAC5rB,IAAI,CAAC,WAAW,CAAC;YACtB;WACD8yB,WAAW,EAAE,MAAM;aAClB,MAAMC,MAAM,GAAG,IAAI;aACnBvC,iBAAO,CAACC,aAAa,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAC3DC,IAAI,CAAEC,OAAO,IAAK;eAClB,MAAM;iBAAEqC,SAAS;iBAAEC;gBAAQ,GAAGtC,OAAO;eACrC,MAAMuC,GAAG,GAAGF,SAAS,CAACG,SAAS,CAAC;iBAC/BC,OAAO,EAAE;mBACRC,YAAY,CAACnzB,IAAI,EAAE;qBAClB6yB,MAAM,CAAC/yB,IAAI,CAAC,UAAU,EAAE;uBAAEmyB,MAAM,EAAEjyB,IAAI,CAAC4J,IAAI;sBAAI,CAAC;;kBAEjD;iBACDwpB,UAAU,EAAE;mBACXL;kBACA;iBACDM,QAAQ,EAAE;gBACV,CAAC;eAEFL,GAAG,CAACM,KAAK,CAAC,4CAAI,sBAAQC,mBAAmB,EAAE,CAAC;cAC5C,CAAC,CAAC9B,KAAK,CAAC,MAAM;eACd,4CAAI,sBAAQ1G,KAAK,EAAE;cACnB,CAAC;YAEH;WACDY,MAAM,EAAG/jB,KAAK,IAAK;aAClB,MAAMwhB,KAAK,GAAGxhB,KAAK,CAAC2R,SAAS,EAAE;aAC/B,MAAMqQ,UAAU,GAAI8I,eAAe,GAAG,CAAC,GAAK/I,UAAU,GAAG,CAAE;aAC3D,MAAM6J,UAAU,GAAGpI,gBAAK,CAAC1R,SAAS,CAAC,iBAAiB,CAAC,GAAG0R,gBAAK,CAAC1R,SAAS,CAAC,aAAa,CAAC;aAEtF0P,KAAK,CAACqK,QAAQ,CAAC;eAAE7qB,MAAM,EAAE+gB,UAAU,GAAG,CAAC,GAAG6J;cAAY,CAAC;aACvDpK,KAAK,CAACU,SAAS,CAAC;eAAEF,UAAU,EAAEA,UAAU,GAAGwB,gBAAK,CAAC1R,SAAS,CAAC,iBAAiB;cAAG,CAAC;;;QAGlF,CAAC;;KAGH,+CAAO,IAAI;;CAEb;;CCvHA;AACA,CAuCO,MAAMga,qBAA0D,GAAGxiC,6BAAa,CAAC,uBAAuB,CAAC;AAChH,CAAO,MAAMyiC,4BAA4C,GAAGziC,6BAAa,CAAC,8BAA8B,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;AAE1G,CAAO,MAAM0iC,YAAY,SAASp3B,UAAU,CAC5C;GAICC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OALe;;KAAI;OAAA;OAAA,OACJ;;KAM7B,IAAI8+B,uBAAa,CAACC,OAAO,EAAE,GAAG,CAAC,EAC/B;OACC,4CAAI,kCAAiB,IAAIC,sBAAY,CAACF,uBAAa,CAACG,MAAM,EAAE,CAAC;OAC7D,4CAAI;OACJ,4CAAI;OACJ,4CAAI;;;GAIN,OAAOz/B,OAAO,GACd;KACC,OAAO,QAAQ;;GAGhB,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAAC68B,UAAU,CAAC;;GAGpB/0B,YAAY,GACZ;KACC,OAAO,IAAI;;GAGZC,YAAY,GACZ;KACC,OAAO;OACNm1B,MAAM,EAAGv9B,WAAuB,IAAyB;SACxD,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAAC0G,UAAU,CAACjH,WAAW,CAACq9B,SAAS,EAAE;UAC/C;;MAEF;;GAGFh1B,cAAc,GACd;KACC,OAAO;OACNoH,SAAS,EAAE;SACV8tB,MAAM,EAAE;;MAET;;GAiMF10B,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,oCAAmB,IAAI,EAC/B;OACC,4CAAI,gCAAeA,OAAO,EAAE;;;CAG/B;CAAC,iCAtMA;GACC,MAAM02B,gBAAgB,GAAG,IAAI/wB,GAAG,EAAE;GAElC,IAAI,CAAC/F,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACsL,qBAAqB,CAAChC,wBAAQ,EAAG7T,IAAc,IAAK;KACpE,IAAI,CAACA,IAAI,CAAC68B,YAAY,EAAE,IAAI0E,gBAAgB,CAACxwB,GAAG,CAAC/Q,IAAI,CAAC6Q,MAAM,EAAE,CAAC,EAC/D;OACC;;KAGD,MAAM2wB,cAAc,GAAGtvB,oCAAmB,CACzClS,IAAI,EACHkI,UAAiC,IAAK;OACtC,OAAO,CAACA,UAAU,CAACmP,OAAO,GAAGzY,WAAW,MAAM,CAAC;MAC/C,CACD;KAED,IAAI4iC,cAAc,EAClB;OACC;;KAGD,MAAMC,MAAM,GAAG,4CAAI,gCAAe7+B,KAAK,CAAC5C,IAAI,CAACuH,cAAc,EAAE,CAAC;KAC9D,IAAIk6B,MAAM,CAACr9B,MAAM,GAAG,CAAC,EACrB;OACC,MAAMs9B,YAAY,GAAGD,MAAM,CAACrc,MAAM,CAAC,CAACuc,GAAG,EAAEpC,MAAM,KAAK;SACnDoC,GAAG,CAACr9B,IAAI,CAACi7B,MAAM,CAACqC,KAAK,EAAErC,MAAM,CAACsC,GAAG,CAAC;SAElC,OAAOF,GAAG;QACV,EAAE,EAAE,CAAC;OAEN,MAAMG,SAAS,GAAG9hC,IAAI,CAACof,SAAS,CAAC,GAAGsiB,YAAY,CAAC;;;OAGjD,KAAK,MAAM76B,QAAQ,IAAIi7B,SAAS,EAChC;SACC,MAAMvC,MAAM,GAAG4B,uBAAa,CAAC56B,GAAG,CAACM,QAAQ,CAACU,cAAc,EAAE,CAAC,IAAI,IAAI;SACnE,IAAIg4B,MAAM,EACV;;WAEC,MAAMwC,UAAU,GAAGvC,iBAAiB,CACnCD,MAAM,CAAC9U,QAAQ,EAAE,EACjB8U,MAAM,CAACF,SAAS,EAAE,EAClBE,MAAM,CAACrT,QAAQ,EAAE,EACjBqT,MAAM,CAACpT,SAAS,EAAE,CAClB;WAEDtlB,QAAQ,CAACI,OAAO,CAAC86B,UAAU,CAAC;;UAE5B,MAED;WACCR,gBAAgB,CAAC3wB,GAAG,CAAC/J,QAAQ,CAACgK,MAAM,EAAE,CAAC;;;;IAI1C,CAAC,EAEF,IAAI,CAACtG,SAAS,EAAE,CAACyb,sBAAsB,CAAC,MAAM;KAC7Cub,gBAAgB,CAACvrB,KAAK,EAAE;IACxB,CAAC;;;GAIF,IAAI,CAACzL,SAAS,EAAE,CAACy3B,wBAAwB,CACxC9C,UAAU,EACT+C,aAAa,IAAK;KAClB,KAAK,MAAM,CAACpgB,OAAO,EAAEqgB,QAAQ,CAAC,IAAID,aAAa,EAC/C;OACC,IAAIC,QAAQ,KAAK,SAAS,EAC1B;SACC,MAAMlvB,GAAG,GAAG,IAAI,CAACzI,SAAS,EAAE,CAACoqB,eAAe,CAAC9S,OAAO,CAAC;SACrD7O,GAAG,CAACmvB,eAAe,GAAG,IAAI;;;IAG5B,CACD,EACD,IAAI,CAAC53B,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EACnB,MAAe;KACd,IAAI,4CAAI,oCAAmB,IAAI,EAC/B;OACC,4CAAI,gCAAe4qB,IAAI,EAAE;;KAG1B,OAAO,KAAK;IACZ,EACDpX,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BjT,yBAAyB,EACzB,MAAe;KACd,OAAO,4CAAI,oCAAmB,IAAI,IAAI,4CAAI,gCAAe65B,OAAO,EAAE;IAClE,EACDvmB,oCAAoB,CACpB,CACD;CACF;CAAC,yCAGD;GACC,IAAI,CAACtH,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BsvB,qBAAqB,EACpBrvB,OAAO,IAAK;KACZ,MAAM4tB,MAAM,GAAG4B,uBAAa,CAAC56B,GAAG,CAACoL,OAAO,CAAC,IAAI,IAAI;KACjD,IAAI,CAAC4tB,MAAM,EACX;OACC,OAAO,KAAK;;KAGb,MAAMwC,UAAU,GAAGvC,iBAAiB,CACnCD,MAAM,CAAC9U,QAAQ,EAAE,EACjB8U,MAAM,CAACF,SAAS,EAAE,EAClBE,MAAM,CAACrT,QAAQ,EAAE,EACjBqT,MAAM,CAACpT,SAAS,EAAE,CAClB;KAED9K,4BAAY,CAAC,CAACnc,+BAAe,CAAC,GAAG,CAAC,EAAE68B,UAAU,EAAE78B,+BAAe,CAAC,GAAG,CAAC,CAAC,CAAC;KACtE,IAAIkL,mCAAmB,CAAC2xB,UAAU,CAAC/xB,gBAAgB,EAAE,CAAC,EACtD;OACCojB,mCAAkB,CAAC2O,UAAU,EAAE/7B,oCAAoB,CAAC,CAAC0b,SAAS,EAAE;;KAGjE,OAAO,IAAI;IACX,EACDhH,uCAAuB,CACvB,EACD,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/BuvB,4BAA4B,EAC3BtvB,OAAO,IAAc;KACrB,IAAI,CAACpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IAAI,CAACpN,cAAI,CAACgH,aAAa,CAACoG,OAAO,CAACme,UAAU,CAAC,EAC3E;OACC,OAAO,KAAK;;KAGb,IAAI,4CAAI,oCAAmB,IAAI,EAC/B;OACC,IAAI,4CAAI,gCAAegQ,aAAa,EAAE,KAAKnuB,OAAO,CAACme,UAAU,EAC7D;SACC,4CAAI,gCAAe5G,IAAI,EAAE;SAEzB,OAAO,IAAI;;OAGZ,4CAAI,gCAAere,OAAO,EAAE;;KAG7B,4CAAI,kCAAiB,IAAI+0B,YAAY,CAAC;OACrC9P,UAAU,EAAEne,OAAO,CAACme,UAAU;OAC9BzH,MAAM,EAAE;SACPvC,QAAQ,EAAG5Q,KAAgB,IAAK;WAC/B,IAAI,CAAC3K,SAAS,EAAE,CAACmI,eAAe,CAACsuB,qBAAqB,EAAE9rB,KAAK,CAACmG,OAAO,EAAE,CAACkkB,MAAM,CAAC;WAC/E,4CAAI,gCAAepW,IAAI,EAAE;UACzB;SACD6P,SAAS,EAAE,MAAM;WAChB,4CAAI,kCAAiB,IAAI;;;MAG3B,CAAC;KAEF,4CAAI,gCAAe9P,IAAI,EAAE;KAEzB,OAAO,IAAI;IACX,EACDnX,oCAAoB,CACpB,CACD;CACF;CAAC,kCAGD;GACC,IAAI,CAACxH,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,SAAS,EAAE,MAAc;KACzE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,kDAAkD,CAAC;KACrEiH,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,yBAAyB,CAAC,CAAC;KAC5DF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAI,CAAClI,SAAS,EAAE,CAACmI,eAAe,CAACuuB,4BAA4B,EAAE;WAC9DnR,UAAU,EAAEzd,MAAM,CAACpH,YAAY;UAC/B,CAAC;QACF,CAAC;MACF,CAAC;KAEF,OAAOoH,MAAM;IACb,CAAC;CACH;;;;;;;;;;;;;;;;;AC9RD,CAayD;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAEzD,CAAe,MAAM+vB,cAAc,SAAS5b,kBAAkB,CAC9D;GAKCzc,WAAW,CAAC4c,OAAkC,EAC9C;KACC,KAAK,CAACA,OAAO,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OANgB,IAAI6D,2BAAW;;KAAE;OAAA;OAAA,OACjB;;KAAI;OAAA;OAAA,OAChB;;KAMnB,4CAAI,wBAAYjmB,cAAI,CAACsH,cAAc,CAAC,IAAI,CAACmb,SAAS,CAAC,UAAU,CAAC,CAAC;KAE/D,4CAAI,wCAAkB,IAAIc,aAAa,CAAC;OACvCpB,MAAM,0CAAE,IAAI,6BAAY;OACxBrkB,MAAM,EAAE,IAAI,CAACkI,SAAS,EAAE;OACxB0d,QAAQ,EAAE,GAAG;OACbC,SAAS,EAAE,GAAG;OACdI,aAAa,EAAE,IAAI;OACnBD,MAAM,EAAE;SACPuF,QAAQ,EAAE,4CAAI,oCAAezgB,IAAI,CAAC,IAAI,CAAC;SACvCwd,WAAW,EAAE,4CAAI,0CAAkBxd,IAAI,CAAC,IAAI;;MAE7C,CAAC;KAEF,IAAI,CAAC2Z,gBAAgB,EAAE,CAAChB,QAAQ,CAAEK,QAAiB,IAAK;OACvD,IAAIA,QAAQ,IAAI,4CAAI,sCAAgBsC,UAAU,EAAE,EAChD;SACC3c,aAAG,CAACQ,QAAQ,yCAAC,IAAI,uCAAkB,YAAY,CAAC;SAChD,4CAAI,sCAAgB4c,IAAI,EAAE;QAC1B,MAED;SACCpd,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAkB,YAAY,CAAC;SACnD,4CAAI,sCAAgB4c,IAAI,EAAE;;MAE3B,CAAC;KAEF,IAAI,CAAC1W,MAAM,CAAC,IAAI,CAACsU,UAAU,EAAE,CAAC;KAC9B,4CAAI;;GA0FLtU,MAAM,CAACkU,OAAmB,EAC1B;KACC,MAAM6C,KAAK,GAAGjlB,cAAI,CAACwkB,QAAQ,CAACpC,OAAO,CAAC6C,KAAK,CAAC,IAAI7C,OAAO,CAAC6C,KAAK,GAAG,CAAC,GAAG7C,OAAO,CAAC6C,KAAK,GAAG,IAAI;KACtF,MAAMC,MAAM,GAAGllB,cAAI,CAACwkB,QAAQ,CAACpC,OAAO,CAAC8C,MAAM,CAAC,IAAI9C,OAAO,CAAC8C,MAAM,GAAG,CAAC,GAAG9C,OAAO,CAAC8C,MAAM,GAAG,IAAI;KAC1F,MAAMwB,WAAW,GAAGzB,KAAK,GAAG,CAAC,IAAIC,MAAM,GAAG,CAAC,GAAI,GAAED,KAAM,MAAKC,MAAO,EAAC,GAAG,MAAM;KAE7E3d,aAAG,CAAC+hB,MAAM,yCAAC,IAAI,+BAAc;OAC5BC,KAAK,EAAE;SACNtE;QACA;OACDjM,KAAK,EAAE;SACNiM,KAAK;SACLC,MAAM,EAAE,MAAM;SACdwB;;MAED,CAAC;;CAEJ;CAAC,sBAvGA;GACCnf,aAAG,CAACvG,MAAM,yCAAC,IAAI,uCAAkB,IAAI,CAACshB,SAAS,EAAE,CAAC;CACnD;CAAC,4BAGD;GACC,OAAO,4CAAI,oBAAOgE,QAAQ,CAAC,WAAW,EAAE,MAAM;KAC7C,OAAO3d,aAAG,CAAChC,MAAM,oBAAC;;0DAEmC,CAAmB;OACtE,CAAqC;;IAEvC,2CAHuD,IAAI,+BACvD,4CAAI,sCAAgBD,YAAY,EAAE;IAGtC,CAAC;CACH;CAAC,wBAGD;GACC,OAAO,4CAAI,oBAAO4f,QAAQ,CAAC,OAAO,EAAE,MAAM;KAAA;KACzC,IAAIkD,KAA2C,GAAG,IAAI;KACtD,MAAMhD,GAAG,GAAG,IAAI,CAAC/D,SAAS,CAAC,KAAK,CAAC;KACjC,4CAAI,IAAI,uBACR;OACC+G,KAAK,GAAG7gB,aAAG,CAAChC,MAAM,sBAAC,uEAAqE,EAAC;OACzF6iB,KAAK,CAAChD,GAAG,GAAGA,GAAG;MACf,MAED;OACCgD,KAAK,GAAGjiB,aAAG,CAACkiB,MAAM,CAAC;SAClBrkB,GAAG,EAAE,OAAO;SACZmkB,KAAK,EAAE;WACNG,QAAQ,EAAE,IAAI;WACdC,OAAO,EAAE,UAAU;WACnBC,WAAW,EAAE,IAAI;WACjBpD;UACA;SACD1C,MAAM,EAAE;WACP+F,cAAc,EAAGlZ,KAAY,IAAK;aACjC,IAAI,CAAC3K,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;eAC7B,MAAMzS,IAAe,GAAG+hB,6BAAa,CAAC,IAAI,CAAC6E,UAAU,EAAE,CAAC;eACxD,IAAIyb,YAAY,CAACriC,IAAI,CAAC,IAAIA,IAAI,CAACksB,QAAQ,EAAE,KAAK,CAAC,EAC/C;iBACC,MAAM,CAAC1C,KAAK,EAAEC,MAAM,CAAC,GAAG4D,aAAa,CACpCnY,KAAK,CAACwR,MAAM,CAAC4H,UAAU,EACvBpZ,KAAK,CAACwR,MAAM,CAAC6H,WAAW,EACxB,GAAG,EACH,GAAG,CACH;iBAEDvuB,IAAI,CAACorB,iBAAiB,CAAC5B,KAAK,EAAEC,MAAM,CAAC;;cAEtC,CAAC;;;QAGJ,CAAC;;KAGH,MAAM1b,MAAoB,GAAG,IAAI,CAACiZ,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;KACzD,IAAIjZ,MAAM,6BAANA,MAAM,CAAEG,KAAK,oCAAb,cAAe6f,KAAK,aAApB,oBAAsBS,MAAM,EAChC;OACCT,KAAK,CAACnR,SAAS,GAAG7O,MAAM,CAACG,KAAK,CAAC6f,KAAK,CAACS,MAAM;;KAG5C,OAAOT,KAAK;IACZ,CAAC;CACH;CAAC,0BAEa7Y,KAAgB,EAC9B;GACC,IAAI,CAACzC,MAAM,CAACyC,KAAK,CAACmG,OAAO,EAAE,CAAC;CAC7B;CAAC,6BAEgBnG,KAAgB,EACjC;GACC,IAAI,CAACgR,WAAW,CAAC,IAAI,CAAC;GAEtB,IAAI,CAAC3b,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,MAAMzS,IAAe,GAAG+hB,6BAAa,CAAC,IAAI,CAAC6E,UAAU,EAAE,CAAC;KACxD,IAAIyb,YAAY,CAACriC,IAAI,CAAC,EACtB;OACC,MAAM;SAAEwpB,KAAK;SAAEC;QAAQ,GAAGvU,KAAK,CAACmG,OAAO,EAAE;OACzCrb,IAAI,CAACorB,iBAAiB,CAAC5B,KAAK,EAAEC,MAAM,CAAC;;IAEtC,CAAC;CACH;;CC7ID;CAmCO,MAAM6Y,SAAS,SAAShX,6BAAa,CAC5C;GAMCvhB,WAAW,CACVghB,GAAW,EACXvB,KAAc,EACdC,MAAe,EACf9R,GAAa,EAEd;KACC,KAAK,CAACA,GAAG,CAAC;KAAC,KAXZgU,OAAO,GAAW,GAAG;KAAA,KACrBE,QAAQ,GAAW,GAAG;KAAA,KACtB0W,UAAU,GAAW,IAAI;KAUxB,IAAI,CAAC1O,KAAK,GAAG9I,GAAG;KAEhB,IAAIxmB,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,EACxB;OACC,IAAI,CAACmC,OAAO,GAAGvH,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC;;KAGjC,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACzB;OACC,IAAI,CAACoC,QAAQ,GAAGzH,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC;;KAGnC,MAAM6J,GAAG,GAAG,UAAU,CAAChsB,IAAI,CAACyjB,GAAG,CAAC,GAAGA,GAAG,GAAI,WAAUA,GAAG,CAAC9jB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAE,EAAC;KAC9E,MAAMu7B,GAAG,GAAG,IAAIC,aAAG,CAACnP,GAAG,CAAC;KACxB,MAAMoP,YAAY,GAAGC,4BAAY,CAACC,YAAY,CAACJ,GAAG,CAACK,OAAO,EAAE,CAAC;KAC7D,IAAIH,YAAY,EAChB;OACC,IAAI,CAACH,UAAU,GAAGG,YAAY,CAAC3W,KAAK,EAAE;;;GAMxC,OAAOlnB,OAAO,GACd;KACC,OAAO,OAAO;;GAGf,OAAO+I,KAAK,CAAC5N,IAAe,EAC5B;KACC,OAAO,IAAIsiC,SAAS,CACnBtiC,IAAI,CAAC6zB,KAAK,EACV7zB,IAAI,CAAC2rB,OAAO,EACZ3rB,IAAI,CAAC6rB,QAAQ,EACb7rB,IAAI,CAAC6N,KAAK,CACV;;GAGF,OAAOY,UAAU,CAACC,cAAmC,EACrD;KACC,MAAM;OAAE8a,KAAK;OAAEC,MAAM;OAAEsB;MAAK,GAAGrc,cAAc;KAE7C,OAAOo0B,gBAAgB,CAAC;OAAE/X,GAAG;OAAEvB,KAAK;OAAEC;MAAQ,CAAC;;GAGhDrW,SAAS,GACT;KACC,OAAO;OAAEpQ,OAAO,EAAE;MAAM;;GAGzB,OAAOsL,SAAS,GAChB;KACC,OAAO,IAAI;;GAGZS,UAAU,GACV;KACC,OAAO;OACNgc,GAAG,EAAE,IAAI,CAACkJ,MAAM,EAAE;OAClBzK,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;OACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;OACxBtjB,IAAI,EAAE,OAAO;OACbwK,OAAO,EAAE;MACT;;GAGF+X,iBAAiB,CAAC5B,KAAa,EAAEC,MAAc,EAC/C;KACC,MAAMrR,QAAQ,GAAG,IAAI,CAACC,WAAW,EAAE;KACnC,IAAI9T,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,EACxB;OACCpR,QAAQ,CAACuT,OAAO,GAAGvH,IAAI,CAAC6F,KAAK,CAACT,KAAK,CAAC;;KAGrC,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACzB;OACCrR,QAAQ,CAACyT,QAAQ,GAAGzH,IAAI,CAAC6F,KAAK,CAACR,MAAM,CAAC;;;GAIxC3b,SAAS,CAACC,MAAoB,EAC9B;KAAA;KACC,MAAM0e,IAAI,GAAGze,QAAQ,CAACpE,aAAa,CAAC,MAAM,CAAC;KAC3C,MAAMsE,KAAK,GAAGH,MAAM,CAACG,KAAK;KAC1B,MAAM0O,SAAS,GAAG1O,KAAK,oCAALA,KAAK,CAAE6f,KAAK,qBAAZ,aAAc1X,SAAS;KACzC,IAAIuG,SAAS,KAAK9a,SAAS,EAC3B;OACC2qB,IAAI,CAAC7P,SAAS,GAAGA,SAAS;;KAG3B,OAAO6P,IAAI;;GAGZre,SAAS,GACT;KACC,OAAO,KAAK;;GAGb6lB,MAAM,GACN;KACC,OAAO,IAAI,CAACJ,KAAK;;GAGlB3H,QAAQ,GACR;KACC,MAAMvP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACgP,OAAO;;GAGpBQ,SAAS,GACT;KACC,MAAMxP,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAACkP,QAAQ;;GAGrBkX,WAAW,GACX;KACC,MAAMpmB,IAAI,GAAG,IAAI,CAACrE,SAAS,EAAE;KAE7B,OAAOqE,IAAI,CAAC4lB,UAAU;;GAGvB7V,QAAQ,CAACrqB,MAAqB,EAAE0L,MAAoB,EACpD;KACC,OAAO;OACN4e,cAAc,EAAEyV,cAAc;OAC9Bzb,OAAO,EAAE;SACRoE,GAAG,EAAE,IAAI,CAACkJ,MAAM,EAAE;SAClBzK,KAAK,EAAE,IAAI,CAAC0C,QAAQ,EAAE;SACtBzC,MAAM,EAAE,IAAI,CAAC0C,SAAS,EAAE;SACxB6W,QAAQ,EAAE,IAAI,CAACD,WAAW,EAAE;SAC5Bh1B;;MAED;;GAGFtI,QAAQ,GACR;KACC,OAAO,IAAI;;CAEb;CA7Ja68B,SAAS,CAoCdzV,qBAAqB,GAAG,IAAI;AA2HpC,CAAO,SAASiW,gBAAgB,CAAC;GAAE/X,GAAG;GAAEvB,KAAK;GAAEC,MAAM;GAAE9R;CAAI,CAAC,EAC5D;GACC,OAAOpI,qCAAqB,CAAC,IAAI+yB,SAAS,CAACvX,GAAG,EAAEvB,KAAK,EAAEC,MAAM,EAAE9R,GAAG,CAAC,CAAC;CACrE;AAEA,CAAO,SAAS0qB,YAAY,CAACriC,IAAoC,EACjE;GACC,OAAOA,IAAI,YAAYsiC,SAAS;CACjC;;;;;;AC1MA,CAM4B;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAO5B,CAAe,MAAMW,WAAW,SAASl4B,6BAAY,CACrD;GAMChB,WAAW,CAAC4c,OAA2B,EACvC;KACC,KAAK,EAAE;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAPO;;KAAI;OAAA;OAAA,OACA;;KAAE;OAAA;OAAA,OACU;;KAAI;OAAA;OAAA,OACJ,IAAI6D,2BAAW;;KAK9C,IAAI,CAACxf,iBAAiB,CAAC,8BAA8B,CAAC;KAEtD,MAAMk4B,kBAAsC,GAAG3+B,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAAC,GAAGA,OAAO,GAAG,EAAE;KAEzF,IAAI,CAACsR,kBAAkB,CAACiL,kBAAkB,CAAChL,eAAe,CAAC;KAC3D,IAAI,CAACjP,oBAAoB,CAACia,kBAAkB,CAAC7a,MAAM,CAAC;;GAGrDa,IAAI,CAACvC,OAAmE,GAAG,EAAE,EAC7E;KAAA;KACC,MAAMD,MAAmB,sBAAGC,OAAO,CAACD,MAAM,8BAAI5kB,SAAS;KACvD,MAAMq2B,aAAiC,GAAG5zB,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAACwR,aAAa,CAAC,GAAGxR,OAAO,CAACwR,aAAa,GAAG,EAAE;KAEhH,IAAI,CAAC5zB,cAAI,CAAC4iB,WAAW,CAACT,MAAM,CAAC,EAC7B;OACC,IAAI,CAAC0R,QAAQ,EAAE,CAACb,cAAc,CAAC7Q,MAAM,CAAC;;KAGvC,IAAI,CAAC0R,QAAQ,EAAE,CAACZ,cAAc,CAAC;OAC9B,GAAGW,aAAa;OAChBV,iBAAiB,EAAE;MACnB,CAAC;KAEF,IAAI,CAACW,QAAQ,EAAE,CAAClP,IAAI,EAAE;;GAGvBC,IAAI,GACJ;KACC,IAAI,CAACiP,QAAQ,EAAE,CAACC,KAAK,EAAE;;GAGxBC,OAAO,GACP;KACC,OAAO,4CAAI,0BAAY,IAAI,IAAI,4CAAI,sBAAQA,OAAO,EAAE;;GAGrDztB,OAAO,GACP;KACC,IAAI,CAACutB,QAAQ,EAAE,CAACvtB,OAAO,EAAE;;GAG1Bs4B,WAAW,CAAC7P,GAAW,EACvB;KACC,IAAI/uB,cAAI,CAAC8G,QAAQ,CAACioB,GAAG,CAAC,EACtB;OACC,4CAAI,0BAAauE,WAAW,CAACvE,GAAG,CAAC;;;GAInC8P,WAAW,GACX;KACC,+CAAO,IAAI;;GAGZnL,kBAAkB,CAAC5hB,SAAsB,EACzC;KACC,IAAI9R,cAAI,CAACgH,aAAa,CAAC8K,SAAS,CAAC,EACjC;OACC,4CAAI,4CAAoBA,SAAS;;;GAInCoiB,kBAAkB,GAClB;KACC,+CAAO,IAAI;;GAGZL,QAAQ,GACR;KACC,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,4CAAI,wBAAU,IAAIM,gBAAK,CAAC;SACvBC,QAAQ,EAAE,IAAI;SACdC,SAAS,EAAE,KAAK;SAChBC,OAAO,EAAE,CAAC;SACVC,UAAU,EAAE,IAAI;SAChBZ,eAAe,EAAE,IAAI,CAACO,kBAAkB,EAAE;SAC1CtvB,OAAO,EAAE,IAAI,CAAC8B,YAAY,EAAE;SAC5Bod,MAAM,EAAE;WACP4Q,MAAM,EAAE,MAAM;aACb,IAAI,CAAC7rB,IAAI,CAAC,QAAQ,CAAC;YACnB;WACD2rB,OAAO,EAAE,MAAM;aACd,IAAI,CAAC3rB,IAAI,CAAC,SAAS,CAAC;YACpB;WACD4rB,SAAS,EAAE,MAAM;aAChB,IAAI,CAAC5rB,IAAI,CAAC,WAAW,CAAC;YACtB;WACD8rB,WAAW,EAAE,MAAM;aAClB,IAAI,CAACC,aAAa,EAAE,CAACx4B,KAAK,EAAE;;;QAG9B,CAAC;;KAGH,+CAAO,IAAI;;GAGZsK,YAAY,GACZ;KACC,OAAO,4CAAI,oBAAO4f,QAAQ,CAAC,WAAW,EAAE,MAAM;OAC7C,OAAO3d,aAAG,CAAChC,MAAM,oBAAC;;;;iCAIU,CAAmD;SAC3E,CAAuB;;;;kBAId,CAAsC;;;;;;;;kBAQtC,CAAwC;;;;;;OAMnD,CAA4B;;IAE9B,GArB8BoH,aAAG,CAACC,UAAU,CAAC,gCAAgC,CAAC,EACxE,IAAI,CAAC4mB,aAAa,EAAE,EAIX,4CAAI,gDAAqBhsB,IAAI,CAAC,IAAI,CAAC,EAQnC,4CAAI,oDAAuBA,IAAI,CAAC,IAAI,CAAC,EAMhD,IAAI,CAACk2B,kBAAkB,EAAE;MAG7B,CAAC;;GAGHlK,aAAa,GACb;KACC,OAAO,4CAAI,oBAAOtO,QAAQ,CAAC,aAAa,EAAE,MAAM;OAC/C,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;;;;cAKT,CAAqB;kBACjB,CAAwC;gBAC1C,CAAsC;;;IAGjD,GALW,IAAI,CAACk4B,WAAW,EAAE,EACd,4CAAI,oDAAuBj2B,IAAI,CAAC,IAAI,CAAC,EACvC,4CAAI,4CAAqBA,IAAI,CAAC,IAAI,CAAC;MAIhD,CAAC;;GAGHk2B,kBAAkB,GAClB;KACC,OAAO,4CAAI,oBAAOxY,QAAQ,CAAC,QAAQ,EAAE,MAAM;OAC1C,OAAO3d,aAAG,CAAChC,MAAM,kBAAC;sDAC+B,CAAkD;IACnG,GADmDoH,aAAG,CAACC,UAAU,CAAC,+BAA+B,CAAC;MAElG,CAAC;;GAGH+wB,SAAS,CAACpH,KAAa,EACvB;KACCpwB,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC+2B,kBAAkB,EAAE,EAAE,SAAS,CAAC;KAClDv3B,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC6sB,aAAa,EAAE,CAACjxB,UAAU,EAAE,gBAAgB,CAAC;KAE/D,IAAI3D,cAAI,CAACsH,cAAc,CAACqwB,KAAK,CAAC,EAC9B;OACC,IAAI,CAACmH,kBAAkB,EAAE,CAACv8B,WAAW,GAAGo1B,KAAK;;;GAI/CqH,UAAU,GACV;KACCz3B,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC82B,kBAAkB,EAAE,EAAE,SAAS,CAAC;KACrDv3B,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC4sB,aAAa,EAAE,CAACjxB,UAAU,EAAE,gBAAgB,CAAC;KAClE,IAAI,CAACm7B,kBAAkB,EAAE,CAACv8B,WAAW,GAAGwL,aAAG,CAACC,UAAU,CAAC,+BAA+B,CAAC;;CAmCzF;CAAC,kCA/BA;GACC,MAAM+gB,GAAW,GAAG,IAAI,CAAC6F,aAAa,EAAE,CAACvkB,KAAK,CAACsC,IAAI,EAAE;GACrD,IAAIoc,GAAG,CAAClvB,MAAM,GAAG,CAAC,EAClB;KACC,IAAI,CAAC++B,WAAW,CAAC7P,GAAG,CAAC;KACrB,IAAI,CAAClmB,IAAI,CAAC,QAAQ,CAAC;IACnB,MAED;KACC,IAAI,CAAC+rB,aAAa,EAAE,CAACx4B,KAAK,EAAE;;CAE9B;CAAC,kCAEqBuU,KAAoB,EAC1C;GACC,IAAIA,KAAK,CAACyC,GAAG,KAAK,OAAO,EACzB;KACCzC,KAAK,CAACiG,cAAc,EAAE;KACtB,4CAAI;;CAEN;CAAC,8BAEmBjG,KAAoB,EACxC;GACC,IAAI,CAAC9H,IAAI,CAAC,SAAS,CAAC;CACrB;CAAC,oCAGD;GACC,IAAI,CAACA,IAAI,CAAC,UAAU,CAAC;CACtB;;CCpOM,SAASo2B,gBAAgB,CAAClQ,GAAW,EAC5C;GACC,OAAO,qBAAqB,CAAChsB,IAAI,CAACgsB,GAAG,CAAC;CACvC;;CC2CA;AACA,CAAO,MAAMmQ,oBAAwD,GAAGjlC,6BAAa,CAAC,sBAAsB,CAAC;;CAE7G;AACA,CAAO,MAAMklC,2BAA2C,GAAGllC,6BAAa,CAAC,6BAA6B,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAExG,CAAO,MAAMmlC,WAAW,SAAS75B,UAAU,CAC3C;GAKCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OANa;;KAAI;OAAA;OAAA,OACJ,4CAAI,gDAAqB8K,IAAI,CAAC,IAAI;;KAAC;OAAA;OAAA,OAC9B;;KAMhC,4CAAI;KACJ,4CAAI;;GAGL,OAAOtL,OAAO,GACd;KACC,OAAO,OAAO;;GAGf,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACigC,SAAS,CAAC;;GAGnBn4B,YAAY,GACZ;KACC,OAAO;OACN4jB,KAAK,EAAE,OAAyB;SAC/BtnB,UAAU,EAAGzG,IAAuB,IAAgC;;WAEnE,MAAM+qB,GAAG,GAAG/qB,IAAI,CAAC+G,UAAU,EAAE,CAACmQ,IAAI,EAAE;WACpC,MAAMsS,KAAK,GAAGF,MAAM,CAACtpB,IAAI,CAACoyB,YAAY,CAAC,OAAO,CAAC,CAAC;WAChD,MAAM3I,MAAM,GAAGH,MAAM,CAACtpB,IAAI,CAACoyB,YAAY,CAAC,QAAQ,CAAC,CAAC;WAClD,IAAIoR,gBAAgB,CAACzY,GAAG,CAAC,EACzB;aACC,OAAO;eACN/qB,IAAI,EAAE8iC,gBAAgB,CAAC;iBAAE/X,GAAG,EAAE8M,WAAW,CAAC9M,GAAG,CAAC;iBAAEvB,KAAK;iBAAEC;gBAAQ;cAC/D;;WAGF,OAAO;aACNzpB,IAAI,EAAEkF,+BAAe,CAAClF,IAAI,CAACqF,QAAQ,EAAE;YACrC;UACD;SACDsB,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN2jB,KAAK,EAAG/rB,WAAsB,IAAyB;SACtD,MAAM0wB,UAAU,GAAG,EAAE;SACrB,MAAMlJ,KAAK,GAAGxnB,WAAW,CAACkqB,QAAQ,EAAE;SACpC,MAAMzC,MAAM,GAAGznB,WAAW,CAACmqB,SAAS,EAAE;SACtC,IAAI5nB,cAAI,CAACwkB,QAAQ,CAACS,KAAK,CAAC,IAAIjlB,cAAI,CAACwkB,QAAQ,CAACU,MAAM,CAAC,EACjD;WACCiJ,UAAU,CAAClJ,KAAK,GAAGA,KAAK;WACxBkJ,UAAU,CAACjJ,MAAM,GAAGA,MAAM;;SAG3B,MAAMuZ,QAAQ,GAAGhhC,WAAW,CAAC+gC,WAAW,EAAE;SAC1C,IAAIx+B,cAAI,CAACsH,cAAc,CAACm3B,QAAQ,CAAC,EACjC;WACCtQ,UAAU,CAAC7pB,IAAI,GAAGm6B,QAAQ;;SAG3B,MAAMzgC,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAC1BC,IAAI,EAAE,OAAO;aACb+oB,MAAM,EAAE,KAAK;aACbF;YACA,CAAC;WACF1uB,KAAK,EAAGgB,WAA8B,IAAK;aAC1CA,WAAW,CAACu0B,WAAW,CAAC,CAACh3B,MAAM,CAAC0G,UAAU,CAACjH,WAAW,CAACiyB,MAAM,EAAE,CAAC,CAAC,CAAC;;UAEnE;;MAEF;;GAGF5pB,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAEixB;QACX,CAAC;OACF7wB,SAAS,EAAE;SACVsc,KAAK,EAAE;;MAER;;GA+KFljB,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAcA,OAAO,EAAE;;;CAG9B;CAAC,gCApLA;GACC,IAAI,CAACJ,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/B+xB,oBAAoB,EACnB9xB,OAAO,IAAK;KACZ,IAAIpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IAAI6xB,gBAAgB,CAAC7xB,OAAO,CAACoZ,GAAG,CAAC,EAChE;OACC,MAAM6Y,SAAS,GAAGd,gBAAgB,CAAC;SAClC/X,GAAG,EAAE4X,4BAAY,CAACkB,cAAc,CAAClyB,OAAO,CAACoZ,GAAG,CAAC,IAAIpZ,OAAO,CAACoZ,GAAG;SAC5DvB,KAAK,EAAE7X,OAAO,CAAC6X,KAAK;SACpBC,MAAM,EAAE9X,OAAO,CAAC8X;QAChB,CAAC;OAEF5X,yCAAwB,CAAC+xB,SAAS,CAAC;OAEnC,OAAO,IAAI;;KAGZ,OAAO,KAAK;IACZ,EACDlpB,uCAAuB,CACvB,EAED,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/BgyB,2BAA2B,EAC3B,MAAe;KACd,MAAMjjC,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,4CAAI,wCAAkBA,SAAS,CAACmN,KAAK,EAAE;KACvC,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAc/C,OAAO,EAAE;;KAG5B,IAAI,CAACN,SAAS,EAAE,CAACmI,eAAe,CAACnU,mBAAmB,CAAC;KAErD,4CAAI,gCAAgB,IAAI0kC,WAAW,CAAC;;OAEnC/K,eAAe,EAAElqB,QAAQ,CAACknB,IAAI;OAC9B7M,MAAM,EAAE;SACPmR,MAAM,EAAE,MAAM;WACb,MAAMlG,GAAG,GAAG,4CAAI,8BAAc8P,WAAW,EAAE;WAC3C,IAAI,CAAC7+B,cAAI,CAACsH,cAAc,CAACynB,GAAG,CAAC,EAC7B;aACC,4CAAI,8BAAcnK,IAAI,EAAE;aAExB;;WAGD,IAAI,CAACqa,gBAAgB,CAAClQ,GAAG,CAAC,EAC1B;aACC,4CAAI,8BAAcgQ,SAAS,CAAChxB,aAAG,CAACC,UAAU,CAAC,yBAAyB,CAAC,CAAC;aAEtE;;WAGD,IAAI,CAAChI,SAAS,EAAE,CAACmI,eAAe,CAAC+wB,oBAAoB,EAAE;aAAE1Y,GAAG,EAAEuI;YAAK,CAAC;WAEpE,4CAAI,8BAAcnK,IAAI,EAAE;UACxB;SACD2a,OAAO,EAAE,MAAM;WACd,4CAAI,8BAAcP,UAAU,EAAE;UAC9B;SACD9J,QAAQ,EAAE,MAAM;WACf,4CAAI,8BAActQ,IAAI,EAAE;UACxB;SACD8P,MAAM,EAAE,MAAM;WACb,IAAIxC,qBAAqB,CAAC,4CAAI,8BAAc2B,QAAQ,EAAE,EAAE,IAAI,CAAC7tB,SAAS,EAAE,CAAC,EACzE;aACCuN,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAAC5C,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;aACnF,IAAI,CAACvsB,SAAS,EAAE,CAACmvB,kBAAkB,EAAE;;UAEtC;SACDX,OAAO,EAAE,MAAM;WACd,4CAAI;UACJ;SACDC,SAAS,EAAE,MAAM;WAChB,4CAAI;;;MAGN,CAAC;KACF,4CAAI,8BAAc9P,IAAI,EAAE;KAExB,OAAO,IAAI;IACX,EACDnX,oCAAoB,CACpB,EAED,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EACnB,MAAe;KACd,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAc4qB,IAAI,EAAE;;KAGzB,OAAO,KAAK;IACZ,EACDpX,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BjT,yBAAyB,EACzB,MAAe;KACd,OAAO,4CAAI,kCAAkB,IAAI,IAAI,4CAAI,8BAAc65B,OAAO,EAAE;IAChE,EACDvmB,oCAAoB,CACpB,CACD;CACF;CAAC,gCAGD;GACC,MAAMtR,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,4CAAI,0CAAoB,IAAI,EACjE;KACCsV,6BAAa,yCAAC,IAAI,sCAAgB;KAClC,4CAAI,wCAAkB,IAAI;KAE1B,OAAO,IAAI;;GAGZ,OAAO,KAAK;CACb;CAAC,mCAGD;GACC,4CAAI,gCAAgB,IAAI;GACxB+B,eAAK,CAACsS,MAAM,CAAC,IAAI,CAAC7f,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;GACrF,IAAI,CAACvsB,SAAS,EAAE,CAACovB,uBAAuB,EAAE;GAE1C,IAAI,CAACpvB,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,IAAI,yCAAC,IAAI,6CAAoB,EAC7B;OACC,IAAI,CAAClI,SAAS,EAAE,CAAC5J,KAAK,EAAE;;IAEzB,CAAC;CACH;CAAC,kCAGD;GACC,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7BgkB,qBAAqB,CAAC,4CAAI,8BAAc2B,QAAQ,EAAE,EAAE,IAAI,CAAC7tB,SAAS,EAAE,CAAC;IACrE,CAAC;CACH;CAAC,kCAGD;GACC,IAAI,CAACA,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,OAAO,EAAE,MAAc;KACvE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,kDAAkD,CAAC;KACrEiH,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC1DF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,4CAAI,kCAAkB,IAAI,IAAI,4CAAI,8BAAc8lB,OAAO,EAAE,EAC7D;SACC;;OAGD,IAAI,CAAC/tB,SAAS,EAAE,CAAC5J,KAAK,CAAC,MAAM;SAC5B,IAAI,CAAC4J,SAAS,EAAE,CAACmI,eAAe,CAACgxB,2BAA2B,CAAC;QAC7D,CAAC;MACF,CAAC;KAEF,OAAOrxB,MAAM;IACb,CAAC;CACH;;;;;;;;;;;;;CC3TM,SAAS0xB,qBAAqB,CAACC,eAA0C,EAChF;GACC,IAAIC,GAAG,GAAGlkC,iBAAiB,CAAC6gB,GAAG,CAAE9Q,SAAS,IAAKA,SAAS,CAACk0B,eAAe,CAAC,CAAC,CACxEE,MAAM,CAACC,OAAO,CAAC,CACf5kC,IAAI,CAAC,IAAI,CAAC,CACV6kC,iBAAiB,EAAE;GAErB,IAAIH,GAAG,KAAK,EAAE,EACd;KACCA,GAAG,GAAI,WAAUA,GAAI,EAAC;;GAGvB,OAAOA,GAAG;CACX;;CCKO,SAASI,SAAS,CAACrkC,IAAiB,EAC3C;GACC,IAAI0d,gBAAgB,CAAC1d,IAAI,CAAC,EAC1B;KACC,MAAMskC,aAA4B,GAAGtkC,IAAI;KAEzC,OAAQ,KAAIskC,aAAa,CAAC7nB,eAAgB,MAAKna,SAAS,CAACgiC,aAAa,CAAC/8B,cAAc,EAAE,CAAE,KAAI;;GAG9F,IAAI2T,WAAW,CAAClb,IAAI,CAAC,EACrB;KACC,MAAMskC,aAAuB,GAAGtkC,IAAI;KAEpC,OAAQ,eAAcskC,aAAa,CAACxuB,eAAe,EAAG,IAAG;;GAG1D,IAAI7T,2BAAW,CAACjC,IAAI,CAAC,EACrB;KACC,MAAMsN,IAAI,GAAGtN,IAAI,CAACuH,cAAc,EAAE;KAClC,MAAM+M,KAAK,GAAGhH,IAAI,CAAClJ,MAAM,KAAK,CAAC,GAAG,SAAS,GAAI,IAAG9B,SAAS,CAACgL,IAAI,CAAE,GAAE;KACpE,MAAMi3B,UAAU,GAAGC,0BAA0B,CAACxkC,IAAI,CAAC;KAEnD,OAAO,CAACsU,KAAK,EAAEiwB,UAAU,CAACngC,MAAM,GAAG,CAAC,GAAI,KAAImgC,UAAW,IAAG,GAAG,IAAI,CAAC,CAChEL,MAAM,CAACC,OAAO,CAAC,CACf5kC,IAAI,CAAC,GAAG,CAAC,CACT2X,IAAI,EAAE;;GAGT,IAAIiU,gBAAgB,CAACnrB,IAAI,CAAC,EAC1B;KACC,MAAMykC,aAA4B,GAAGzkC,IAAI;KAEzC,OAAQ,SAAQykC,aAAa,CAAC1Y,KAAK,EAAG,YAAW0Y,aAAa,CAACvY,QAAQ,EAAG,aAAYuY,aAAa,CAACtY,SAAS,EAAG,IAAG;;GAGpH,IAAIiB,WAAW,CAACptB,IAAI,CAAC,EACrB;KACC,MAAM0kC,QAAkB,GAAG1kC,IAAI;KAE/B,OAAQ,SAAQ0kC,QAAQ,CAAC3Y,KAAK,EAAG,IAAG;;GAGrC,IAAIsC,gBAAgB,CAACruB,IAAI,CAAC,EAC1B;KACC,MAAM2kC,aAA4B,GAAG3kC,IAAI;KAEzC,OAAQ,SAAQ2kC,aAAa,CAAC5Y,KAAK,EAAG,IAAG;;GAG1C,IAAI4T,aAAa,CAAC3/B,IAAI,CAAC,EACvB;KACC,MAAM+hC,UAAsB,GAAG/hC,IAAI;KAEnC,OAAQ,aAAY+hC,UAAU,CAAC1C,SAAS,EAAG,YAAW0C,UAAU,CAAC7V,QAAQ,EAAG,aAAY6V,UAAU,CAAC5V,SAAS,EAAG,IAAG;;GAGnH,IAAIkW,YAAY,CAACriC,IAAI,CAAC,EACtB;KACC,MAAM4jC,SAAoB,GAAG5jC,IAAI;KAEjC,OAAQ,YAAW4jC,SAAS,CAAC1X,QAAQ,EAAG,aAAY0X,SAAS,CAACzX,SAAS,EAAG,IAAG;;GAG9E,IAAI4O,cAAc,CAAC/6B,IAAI,CAAC,EACxB;KACC,MAAM86B,WAAwB,GAAG96B,IAAI;KAErC,OAAQ,eAAc86B,WAAW,CAACd,WAAW,EAAG,SAAQc,WAAW,CAAC/O,KAAK,EAAG,IAAG;;GAGhF,IAAI2H,YAAY,CAAC1zB,IAAI,CAAC,EACtB;KACC,MAAMg0B,SAAoB,GAAGh0B,IAAI;KAEjC,OAAQ,YAAWg0B,SAAS,CAAC9H,QAAQ,EAAG,aAAY8H,SAAS,CAAC7H,SAAS,EAAG,IAAG;;GAG9E,IAAIyY,2BAAW,CAAC5kC,IAAI,CAAC,EACrB;KACC,MAAM6kC,QAAkB,GAAG7kC,IAAI;KAC/B,MAAM8kC,IAAI,GAAGD,QAAQ,CAACE,MAAM,EAAE;KAC9B,MAAMzwB,KAAK,GAAGwwB,IAAI,CAAC1gC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAI,IAAG9B,SAAS,CAACwiC,IAAI,CAAE,GAAE;KACpE,MAAMP,UAAU,GAAGS,0BAA0B,CAACH,QAAQ,CAAC;KAEvD,OAAO,CAACvwB,KAAK,EAAEiwB,UAAU,CAACngC,MAAM,GAAG,CAAC,GAAI,KAAImgC,UAAW,IAAG,GAAG,IAAI,CAAC,CAChEL,MAAM,CAACC,OAAO,CAAC,CACf5kC,IAAI,CAAC,GAAG,CAAC,CACT2X,IAAI,EAAE;;GAGT,OAAO,EAAE;CACV;CAEA,SAAS5U,SAAS,CAACgL,IAAY,EAC/B;GACC,OAAOpO,MAAM,CAACwkB,OAAO,CAACzkB,kCAAkC,CAAC,CAACmmB,MAAM,CAC/D,CAACuc,GAAG,EAAE,CAAChqB,GAAG,EAAE/C,KAAK,CAAC,KAAK+sB,GAAG,CAAC16B,OAAO,CAAC,IAAI5H,MAAM,CAACsY,GAAG,EAAE,GAAG,CAAC,EAAEstB,MAAM,CAACrwB,KAAK,CAAC,CAAC,EACvEtH,IAAI,CACJ;CACF;CAEA,SAASk3B,0BAA0B,CAACxkC,IAAc,EAClD;GACC,OAAO,CACN+jC,qBAAqB,CAAC/jC,IAAI,CAAC,EAC3BklC,qBAAqB,CAACllC,IAAI,CAAC,EAC3BmlC,mBAAmB,CAACnlC,IAAI,CAAC,CACzB,CACCkkC,MAAM,CAACC,OAAO,CAAC,CACf5kC,IAAI,CAAC,IAAI,CAAC;CACb;CAEA,SAASylC,0BAA0B,CAAChlC,IAAc,EAClD;GACC,OAAO,CACNolC,qBAAqB,CAACplC,IAAI,CAAC,EAC3BqlC,kBAAkB,CAACrlC,IAAI,CAAC,EACxBslC,oBAAoB,CAACtlC,IAAI,CAAC,CAC1B,CACCkkC,MAAM,CAACC,OAAO,CAAC,CACf5kC,IAAI,CAAC,IAAI,CAAC;CACb;CAEA,SAAS6lC,qBAAqB,CAACplC,IAAc,EAC7C;GACC,IAAIikC,GAAG,GAAGjkC,IAAI,CAAC6mB,SAAS,EAAE;GAC1B,IAAI,CAACtiB,cAAI,CAACghC,KAAK,CAACtB,GAAG,CAAC,EACpB;KACCA,GAAG,GAAI,WAAUA,GAAI,EAAC;;GAGvB,OAAOA,GAAG;CACX;CAEA,SAASoB,kBAAkB,CAACrlC,IAAc,EAC1C;GACC,IAAIikC,GAAG,GAAGjkC,IAAI,CAACwlC,MAAM,EAAE;GACvB,IAAI,CAACjhC,cAAI,CAACghC,KAAK,CAACtB,GAAG,CAAC,EACpB;KACCA,GAAG,GAAI,QAAOA,GAAI,EAAC;;GAGpB,OAAOA,GAAG;CACX;CAEA,SAASqB,oBAAoB,CAACtlC,IAAc,EAC5C;GACC,IAAIikC,GAAG,GAAGjkC,IAAI,CAAC6+B,QAAQ,EAAE;GACzB,IAAI,CAACt6B,cAAI,CAACghC,KAAK,CAACtB,GAAG,CAAC,EACpB;KACCA,GAAG,GAAI,UAASA,GAAI,EAAC;;GAGtB,OAAOA,GAAG;CACX;CAEA,SAASiB,qBAAqB,CAAClB,eAAyB,EACxD;GACC,IAAIC,GAAG,GAAG/jC,iBAAiB,CAAC0gB,GAAG,CAAE9Q,SAAS,IAAKA,SAAS,CAACk0B,eAAe,CAAC,CAAC,CACxEE,MAAM,CAACC,OAAO,CAAC,CACf5kC,IAAI,CAAC,IAAI,CAAC,CACV6kC,iBAAiB,EAAE;GAErB,IAAIH,GAAG,KAAK,EAAE,EACd;KACCA,GAAG,GAAI,WAAUA,GAAI,EAAC;;GAGvB,OAAOA,GAAG;CACX;CAEA,SAASkB,mBAAmB,CAACnB,eAAyB,EACtD;GACC,IAAIC,GAAG,GAAG5jC,eAAe,CAACugB,GAAG,CAAE9Q,SAAS,IAAKA,SAAS,CAACk0B,eAAe,CAAC,CAAC,CACtEE,MAAM,CAACC,OAAO,CAAC,CACf5kC,IAAI,CAAC,IAAI,CAAC,CACV6kC,iBAAiB,EAAE;GAErB,IAAIH,GAAG,KAAK,EAAE,EACd;KACCA,GAAG,GAAI,SAAQA,GAAI,EAAC;;GAGrB,OAAOA,GAAG;CACX;;CC1MO,SAASwB,kBAAkB,CAAChlC,SAAwB,EAC3D;GACC,IAAI,CAAC2lB,gCAAgB,CAAC3lB,SAAS,CAAC,EAChC;KACC,OAAO,EAAE;;GAGV,OAAQ,gBAAe,CAAC,GAAGA,SAAS,CAACilC,MAAM,CAAC,CAACnmC,IAAI,CAAC,IAAI,CAAE,GAAE;CAC3D;;CCRO,SAASomC,mBAAmB,CAACllC,SAAyB,EAC7D;GACC,IAAImlC,GAAG,GAAG,EAAE;GAEZ,MAAMC,UAAU,GAAG9B,qBAAqB,CAACtjC,SAAS,CAAC;GAEnDmlC,GAAG,IAAK,WAAUC,UAAU,KAAK,EAAE,GAAI,KAAIA,UAAW,IAAG,GAAG,EAAG,IAC9DplC,SAAS,CAAC8c,KAAK,KAAK,EAAE,GAAI,YAAW9c,SAAS,CAAC8c,KAAM,KAAI,GAAG,EAC5D,EAAC;GAEF,MAAM7c,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;GAC7B,MAAMokB,YAAY,GAAGrkB,MAAM,CAACwV,MAAM;GAClC,MAAM2f,WAAW,GAAGl1B,KAAK,CAACuV,MAAM;GAEhC0vB,GAAG,IAAK,uBAAsBllC,MAAM,CAACiX,GAAI,aACxCoN,YAAY,KAAK,IAAI,GAAG,MAAM,GAAGA,YACjC,WAAUrkB,MAAM,CAACmI,IAAK,IAAG;GAC1B+8B,GAAG,IAAK,sBAAqBjlC,KAAK,CAACgX,GAAI,aACtCke,WAAW,KAAK,IAAI,GAAG,MAAM,GAAGA,WAChC,WAAUl1B,KAAK,CAACkI,IAAK,IAAG;GAEzB,OAAO+8B,GAAG;CACX;;CCxBO,SAASE,mBAAmB,CAACrlC,SAAyB,EAC7D;GACC,OAAQ,yBAAwBA,SAAS,CAACslC,QAAS,iBAAgBtlC,SAAS,CAACC,MAAM,CAACiX,GAAI,gBAAelX,SAAS,CAACE,KAAK,CAACgX,GAAI,IAAG;CAC/H;;CCGO,SAASquB,SAAS,CACxB/9B,WAAwB,EACxBg+B,OAA8D,EAC9Dr3B,MAAqB,GAAG,EAAE,EAE3B;GACC,MAAM2R,UAAU,GAAGtY,WAAW,CAACnF,WAAW,EAAE;GAC5C,MAAMojC,gBAAgB,GAAG3lB,UAAU,CAACnc,MAAM;GAE1Cmc,UAAU,CAAClX,OAAO,CAAC,CAACf,SAAS,EAAElH,CAAC,KAAK;KACpC6kC,OAAO,CACN39B,SAAS,EACTsG,MAAM,CAACu3B,MAAM,CACZ/kC,CAAC,KAAK8kC,gBAAgB,GAAG,CAAC,GACvB1mC,OAAO,CAACI,WAAW,GACnBJ,OAAO,CAACG,cAAc,CACzB,CACD;KAED,IAAI2F,8BAAc,CAACgD,SAAS,CAAC,EAC7B;OACC09B,SAAS,CACR19B,SAAS,EACT29B,OAAO,EACPr3B,MAAM,CAACu3B,MAAM,CACZ/kC,CAAC,KAAK8kC,gBAAgB,GAAG,CAAC,GACvB1mC,OAAO,CAACE,mBAAmB,GAC3BF,OAAO,CAACC,sBAAsB,CACjC,CACD;;IAEF,CAAC;CACH;;CCxCA;CAwBO,SAAS2mC,eAAe,CAAC/jC,MAAkC,EAClE;GACC,MAAMgkC,WAAW,GAAGhkC,MAAM,CAAC0V,cAAc,EAAE;;;;;;;;;;;GAW3C,IAAI6tB,GAAG,GAAG,SAAS;GAEnB,MAAMU,eAAe,GAAGD,WAAW,CAACruB,IAAI,CAAC,MAAM;KAC9C,MAAMvX,SAAS,GAAGuR,6BAAa,EAAE;KACjCg0B,SAAS,CAACO,wBAAQ,EAAE,EAAE,CAACvmC,IAAiB,EAAE4O,MAAqB,KAAK;OACnE,MAAMiT,OAAO,GAAG7hB,IAAI,CAAC6Q,MAAM,EAAE;OAC7B,MAAM21B,cAAc,GAAI,IAAG3kB,OAAQ,GAAE;OACrC,MAAM4kB,WAAW,GAAGzmC,IAAI,CAAC6E,OAAO,EAAE,IAAI,EAAE;OACxC,MAAM8gB,UAAU,GAAG3lB,IAAI,CAAC2lB,UAAU,EAAE;OAEpCigB,GAAG,IAAK,GAAEjgB,UAAU,GAAGnmB,OAAO,CAACM,YAAY,GAAG,GAAI,IAAG8O,MAAM,CAACrP,IAAI,CAC/D,GAAG,CACF,IAAGinC,cAAe,IAAGC,WAAY,IAAGpC,SAAS,CAACrkC,IAAI,CAAE,IAAG;OAEzD4lC,GAAG,IAAIc,sBAAsB,CAAC;SAC7B93B,MAAM;SACN+W,UAAU;SACV3lB,IAAI;SACJwmC,cAAc;SACd/lC,SAAS;SACTgmC;QACA,CAAC;MACF,CAAC;KAEF,IAAIhmC,SAAS,KAAK,IAAI,EACtB;OACC,OAAO,QAAQ;;KAGhB,IAAIwR,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACC,OAAOklC,mBAAmB,CAACllC,SAAS,CAAC;;KAGtC,IAAIkmC,kCAAiB,CAAClmC,SAAS,CAAC,EAChC;OACC,OAAOqlC,mBAAmB,CAACrlC,SAAS,CAAC;;KAGtC,OAAOglC,kBAAkB,CAAChlC,SAAS,CAAC;IACpC,CAAC;GAEFmlC,GAAG,IAAK,eAAcU,eAAgB,EAAC;GAEvC,OAAOV,GAAG;CACX;CAEA,SAASc,sBAAsB,CAAC;GAC/B93B,MAAM;GACN+W,UAAU;GACV3lB,IAAI;GACJwmC,cAAc;GACd/lC,SAAS;GACTgmC;CAQD,CAAC,EACD;;GAEC,IACC,CAACxkC,2BAAW,CAACjC,IAAI,CAAC,IACf,CAACiS,iCAAiB,CAACxR,SAAS,CAAC,IAC7B,CAACklB,UAAU,IACXrgB,8BAAc,CAACtF,IAAI,CAAC,EAExB;KACC,OAAO,EAAE;;;;GAIV,MAAMU,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,MAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;GAE7B,IACCX,IAAI,CAACuH,cAAc,EAAE,KAAK,EAAE,IACxB7G,MAAM,CAACG,OAAO,EAAE,KAAKJ,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE,IAC9CH,MAAM,CAACwV,MAAM,KAAKvV,KAAK,CAACuV,MAAO,EAEpC;KACC,OAAO,EAAE;;GAGV,MAAM,CAAC0rB,KAAK,EAAEC,GAAG,CAAC,GAAG+E,qBAAqB,CAAC5mC,IAAI,EAAES,SAAS,CAAC;GAE3D,IAAImhC,KAAK,KAAKC,GAAG,EACjB;KACC,OAAO,EAAE;;GAGV,MAAMgF,mBAAmB,GACxBj4B,MAAM,CAACA,MAAM,CAACxK,MAAM,GAAG,CAAC,CAAC,KAAK5E,OAAO,CAACG,cAAc,GACjDH,OAAO,CAACC,sBAAsB,GAC9BD,OAAO,CAACE,mBACX;GAED,MAAMonC,cAAc,GAAG,CAAC,GAAGl4B,MAAM,CAAC2V,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAEsiB,mBAAmB,CAAC;GACpE,MAAME,eAAe,GAAG7iC,KAAK,CAACke,IAAI,CAAC;KAAEhe,MAAM,EAAEw9B,KAAK,GAAG;IAAG,CAAC,CAACoF,IAAI,CAAC,GAAG,CAAC;GACnE,MAAMC,aAAa,GAAG/iC,KAAK,CAACke,IAAI,CAAC;KAAEhe,MAAM,EAAEy9B,GAAG,GAAGD;IAAO,CAAC,CAACoF,IAAI,CAACxnC,OAAO,CAACK,YAAY,CAAC;GACpF,MAAMqnC,aAAa,GAAGT,WAAW,CAACriC,MAAM,GAAG,CAAC,CAAC;GAC7C,MAAM+iC,eAAe,GAAGjjC,KAAK,CAACke,IAAI,CAAC;KAAEhe,MAAM,EAAEoiC,cAAc,CAACpiC,MAAM,GAAG8iC;IAAe,CAAC,CAACF,IAAI,CAAC,GAAG,CAAC;GAE/F,OACE,GAAE,CACFxnC,OAAO,CAACM,YAAY,EACpBgnC,cAAc,CAACvnC,IAAI,CAAC,GAAG,CAAC,EACxB,CAAC,GAAG4nC,eAAe,EAAE,GAAGJ,eAAe,EAAE,GAAGE,aAAa,CAAC,CAAC1nC,IAAI,CAAC,EAAE,CAAC,CACnE,CAACA,IAAI,CAAC,GAAG,CAAE,IAAG;CAEjB;CAEA,SAASqnC,qBAAqB,CAAC5mC,IAAiB,EAAES,SAAwB,EAC1E;GACC,MAAM2mC,cAAc,GAAG3mC,SAAS,CAAC4mC,iBAAiB,EAAE;GACpD,IAAIjhB,gCAAgB,CAAC3lB,SAAS,CAAC,IAAI2mC,cAAc,KAAK,IAAI,EAC1D;KACC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;GAGhB,MAAM,CAAC1mC,MAAM,EAAEC,KAAK,CAAC,GAAGymC,cAAc;GACtC,MAAMtgC,WAAW,GAAG9G,IAAI,CAACuH,cAAc,EAAE;GACzC,MAAM+/B,UAAU,GAAGxgC,WAAW,CAAC1C,MAAM;GAErC,IAAIw9B,KAAK,GAAG,CAAC,CAAC;GACd,IAAIC,GAAG,GAAG,CAAC,CAAC;;;GAGZ,IAAInhC,MAAM,CAACmI,IAAI,KAAK,MAAM,IAAIlI,KAAK,CAACkI,IAAI,KAAK,MAAM,EACnD;KACC,MAAMjI,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;KACnC,MAAMC,SAAS,GAAGH,KAAK,CAACE,OAAO,EAAE;KAEjC,IACCD,UAAU,KAAKE,SAAS,IACrBd,IAAI,KAAKY,UAAU,IACnBF,MAAM,CAACwV,MAAM,KAAKvV,KAAK,CAACuV,MAAM,EAElC;OACC,CAAC0rB,KAAK,EAAEC,GAAG,CAAC,GACXnhC,MAAM,CAACwV,MAAM,GAAGvV,KAAK,CAACuV,MAAM,GACzB,CAACxV,MAAM,CAACwV,MAAM,EAAEvV,KAAK,CAACuV,MAAM,CAAC,GAC7B,CAACvV,KAAK,CAACuV,MAAM,EAAExV,MAAM,CAACwV,MAAM,CAC/B;MACD,MACI,IAAIlW,IAAI,KAAKY,UAAU,EAC5B;OACC,CAACghC,KAAK,EAAEC,GAAG,CAAC,GAAGjhC,UAAU,CAACie,QAAQ,CAAC/d,SAAS,CAAC,GAC1C,CAACJ,MAAM,CAACwV,MAAM,EAAEoxB,UAAU,CAAC,GAC3B,CAAC,CAAC,EAAE5mC,MAAM,CAACwV,MAAM,CAAC;MACrB,MACI,IAAIlW,IAAI,KAAKc,SAAS,EAC3B;OACC,CAAC8gC,KAAK,EAAEC,GAAG,CAAC,GAAG/gC,SAAS,CAAC+d,QAAQ,CAACje,UAAU,CAAC,GAC1C,CAACD,KAAK,CAACuV,MAAM,EAAEoxB,UAAU,CAAC,GAC1B,CAAC,CAAC,EAAE3mC,KAAK,CAACuV,MAAM,CAAC;MACpB,MAED;;OAEC,CAAC0rB,KAAK,EAAEC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAEyF,UAAU,CAAC;;;;;GAKhC,MAAMC,oCAAoC,GAAG,CAC5CzgC,WAAW,CAACyd,KAAK,CAAC,CAAC,EAAEqd,KAAK,CAAC,CAAC3hB,KAAK,CAAC7gB,4BAA4B,CAAC,IAAI,EAAE,EACpEgF,MAAM;GACR,MAAMojC,gCAAgC,GAAG,CACxC1gC,WAAW,CAACyd,KAAK,CAACqd,KAAK,EAAEC,GAAG,CAAC,CAAC5hB,KAAK,CAAC7gB,4BAA4B,CAAC,IAAI,EAAE,EACtEgF,MAAM;GAER,OAAO,CACNw9B,KAAK,GAAG2F,oCAAoC,EAC5C1F,GAAG,GAAG0F,oCAAoC,GAAGC,gCAAgC,CAC7E;CACF;;CCxNO,SAASC,cAAc,CAACnmC,CAAC,EAChC;GACC,OAAO,CAAC,GAAGA,CAAC,CAAC,CAAC8jB,MAAM,CACnB,CAACsiB,IAAI,EAAEC,CAAC,KAAKvjB,IAAI,CAACwjB,KAAK,CAACxjB,IAAI,CAACyjB,IAAI,CAAC,EAAE,EAAEH,IAAI,CAAC,GAAGC,CAAC,CAACG,WAAW,CAAC,CAAC,CAAC,CAAC,EAC/D,CAAC,CACD;CACF;;CCIO,SAASC,YAAY,CAAC7wB,IAAa,GAAG,IAAI,EACjD;GACC,MAAMtP,IAAI,GAAG2+B,wBAAQ,EAAE;GACvB,IAAIj5B,IAAI,GAAG1F,IAAI,CAACL,cAAc,EAAE;GAChC,IAAI2P,IAAI,EACR;KACC5J,IAAI,GAAGA,IAAI,CAAC4J,IAAI,EAAE;;GAGnB,IAAI5J,IAAI,KAAK,EAAE,EACf;KACC,OAAO,KAAK;;GAGb,MAAM5I,QAAQ,GAAGkD,IAAI,CAAC9E,WAAW,EAAE;GACnC,MAAM4V,cAAc,GAAGhU,QAAQ,CAACN,MAAM;GACtC,IAAIsU,cAAc,GAAG,CAAC,EACtB;KACC,OAAO,KAAK;;GAGb,KAAK,IAAItX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsX,cAAc,EAAEtX,CAAC,EAAE,EACvC;KACC,MAAM4mC,QAAqC,GAAGtjC,QAAQ,CAACtD,CAAC,CAAC;KACzD,IAAIsE,gCAAgB,CAACsiC,QAAQ,CAAC,EAC9B;OACC,OAAO,KAAK;;KAGb,IAAI1iC,8BAAc,CAAC0iC,QAAQ,CAAC,EAC5B;OACC,IAAI,CAAC7gC,gCAAgB,CAAC6gC,QAAQ,CAAC,EAC/B;SACC,OAAO,KAAK;;OAGb,IAAIA,QAAQ,CAACC,QAAQ,KAAK,CAAC,EAC3B;SACC,OAAO,KAAK;;OAGb,MAAMC,gBAAgB,GAAGF,QAAQ,CAACllC,WAAW,EAAE;OAC/C,MAAMqlC,sBAAsB,GAAGD,gBAAgB,CAAC9jC,MAAM;OAEtD,KAAK,IAAI9C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6mC,sBAAsB,EAAE7mC,CAAC,EAAE,EAC/C;SACC,MAAMsD,KAAK,GAAGsjC,gBAAgB,CAAC9mC,CAAC,CAAC;SACjC,IAAI,CAACa,2BAAW,CAAC2C,KAAK,CAAC,EACvB;WACC,OAAO,KAAK;;;;;GAMhB,OAAO,IAAI;CACZ;;CClEO,MAAMwjC,YAAY,GAAG;GAC3BC,WAAW,EAAE,8BAA8B;GAC3Cz5B,MAAM,EAAE,wBAAwB;GAChC05B,GAAG,EAAE,qBAAqB;GAC1BC,GAAG,EAAE,qBAAqB;GAE1BC,OAAO,EAAE;KACRzvB,EAAE,EAAE,0BAA0B;KAC9BE,EAAE,EAAE,0BAA0B;KAC9BC,EAAE,EAAE,0BAA0B;KAC9BC,EAAE,EAAE,0BAA0B;KAC9BC,EAAE,EAAE,0BAA0B;KAC9BC,EAAE,EAAE;IACJ;GACDovB,OAAO,EAAE,uBAAuB;GAChC3D,IAAI,EAAE,oBAAoB;GAC1B4D,IAAI,EAAE;KACLC,QAAQ,EAAE,kBAAkB;KAC5BC,MAAM,EAAE;OACPD,QAAQ,EAAE;MACV;KACDE,OAAO,EAAE,CACR,sCAAsC,EACtC,sCAAsC,EACtC,sCAAsC,EACtC,sCAAsC,EACtC,sCAAsC,CACtC;KACDC,EAAE,EAAE;IACJ;GACDt3B,SAAS,EAAE,mDAAmD;GAC9DlE,IAAI,EAAE;KACLy7B,IAAI,EAAE,yBAAyB;KAC/BnrB,IAAI,EAAE,yBAAyB;KAC/BorB,MAAM,EAAE,2BAA2B;KACnCC,aAAa,EAAE,kCAAkC;KACjDC,SAAS,EAAE,8BAA8B;KACzCC,WAAW,EAAE,gCAAgC;KAC7CC,SAAS,EAAE,8BAA8B;KACzCC,sBAAsB,EAAE;IACxB;GACDjP,OAAO,EAAE,uBAAuB;GAChCjsB,KAAK,EAAE,qBAAqB;GAC5B8E,OAAO,EAAE;KACRoD,SAAS,EAAE,uBAAuB;KAClC/B,KAAK,EAAE,gDAAgD;KACvDnL,OAAO,EAAE;IACT;GACDo2B,MAAM,EAAE,sBAAsB;GAC9B3hB,IAAI,EAAE,oBAAoB;GAC1BH,aAAa,EAAE;KACd6rB,QAAQ,EAAE,8BAA8B;KACxCC,WAAW,EAAE,iCAAiC;KAC9CC,OAAO,EAAE,6BAA6B;KACtCC,IAAI,EAAE,0BAA0B;KAChCC,OAAO,EAAE,6BAA6B;KACtCC,OAAO,EAAE,6BAA6B;KACtCC,KAAK,EAAE,2BAA2B;KAClCC,MAAM,EAAE,4BAA4B;KACpCC,MAAM,EAAE,4BAA4B;KACpCC,SAAS,EAAE,+BAA+B;KAC1CC,OAAO,EAAE,6BAA6B;KACtCC,KAAK,EAAE,2BAA2B;KAClCC,WAAW,EAAE;IACb;GAED/rB,KAAK,EAAE,qBAAqB;GAC5BgsB,QAAQ,EAAE,yBAAyB;GACnCC,SAAS,EAAE,0BAA0B;GACrCC,eAAe,EAAE,iCAAiC;GAClDC,cAAc,EAAE,+BAA+B;GAE/Ctf,KAAK,EAAE;KACN3U,SAAS,EAAE,+DAA+D;KAC1EyU,GAAG,EAAE;IACL;GAEDiD,KAAK,EAAE;KACN1X,SAAS,EAAE,+DAA+D;KAC1EmY,MAAM,EAAE;IACR;GAEDrB,IAAI,EAAE;CACP,CAAC;;;ACnFD,CAIuC;CAAA;CAAA;CAAA,mBAuFrCod,MAAM,CAACC,QAAQ;AArFjB,CAAe,MAAMC,gBAAgB,CACrC;GAKC1gC,WAAW,CACV2gC,cAAmC,GAAG,EAAE,EACxCC,OAA0C,GAAG,EAAE,EAC/CC,eAAkD,GAAG,EAAE,EAExD;KAAA;OAAA;OAAA,OATsD,IAAIvnC,GAAG;;KAAE;OAAA;OAAA,OAC3B,IAAIA,GAAG;;KAAE;OAAA;OAAA,OACO,IAAIA,GAAG;;KAQ1D,KAAK,MAAMwnC,iBAAiB,IAAIH,cAAc,EAC9C;OACC,IAAIG,iBAAiB,CAAChpC,OAAO,EAAE,EAC/B;SACC,4CAAI,wCAAmB4C,GAAG,CAAComC,iBAAiB,CAAChpC,OAAO,EAAE,EAAEgpC,iBAAiB,CAAC;;;KAI5E,KAAK,MAAMC,MAAkC,IAAIH,OAAO,EACxD;OACC,IAAIpmC,cAAI,CAACC,UAAU,CAACsmC,MAAM,CAAC,IAAIA,MAAM,CAACjpC,OAAO,EAAE,IAAI,CAAC,4CAAI,wCAAmBkP,GAAG,CAAC+5B,MAAM,CAACjpC,OAAO,EAAE,CAAC,EAChG;SACC,4CAAI,wCAAmB4C,GAAG,CAACqmC,MAAM,CAACjpC,OAAO,EAAE,EAAEipC,MAAM,CAAC;;;KAItD,MAAMC,aAAa,GAAGJ,OAAO,CAACzG,MAAM,CAAE4G,MAAkC,IAAK;OAC5E,IAAIF,eAAe,CAACl6B,QAAQ,CAACo6B,MAAM,CAAC,EACpC;SACC,OAAO,KAAK;;OAGb,IAAIvmC,cAAI,CAACC,UAAU,CAACsmC,MAAM,CAAC,IAAIF,eAAe,CAACl6B,QAAQ,CAACo6B,MAAM,CAACjpC,OAAO,EAAE,CAAC,EACzE;SACC,OAAO,KAAK;;OAGb,OAAO,CAAC+oC,eAAe,CAACl6B,QAAQ,CAAC,4CAAI,wCAAmBnK,GAAG,CAACukC,MAAM,CAAC,CAAC;MACpE,CAAC;KAEFC,aAAa,CACXnqB,GAAG,CAAEkqB,MAAkC,IAAK;OAC5C,OAAOvmC,cAAI,CAACC,UAAU,CAACsmC,MAAM,CAAC,GAAGA,MAAM,GAAG,4CAAI,wCAAmBvkC,GAAG,CAACukC,MAAM,CAAC;MAC5E,CAAC,CACDzhC,OAAO,CAAEwhC,iBAAoC,IAAK;OAClD,IAAItmC,cAAI,CAACC,UAAU,CAACqmC,iBAAiB,CAAC,EACtC;SACC,4CAAI,4CAAqBpmC,GAAG,CAAComC,iBAAiB,CAAChpC,OAAO,EAAE,EAAEgpC,iBAAiB,CAAC;;MAE7E,CAAC;;GAIJG,IAAI,CAAChhC,UAAsB,EAC3B;KACC,MAAMihC,SAAS,GAAG,EAAE;KACpB,KAAK,MAAM,GAAGC,eAAe,CAAC,4CAAI,IAAI,6CACtC;OACC,MAAMJ,MAAM,GAAG,IAAII,eAAe,CAAClhC,UAAU,CAAC;OAC9C,IAAI,EAAE8gC,MAAM,YAAYhhC,UAAU,CAAC,EACnC;SACC,MAAM,IAAIqhC,SAAS,CAAC,oEAAoE,CAAC;;OAG1F,4CAAI,sBAAU1mC,GAAG,CAACymC,eAAe,CAACrpC,OAAO,EAAE,EAAEipC,MAAM,CAAC;OACpDG,SAAS,CAAC3mC,IAAI,CAACwmC,MAAM,CAAC;;KAGvBG,SAAS,CAAC5hC,OAAO,CAAE+hC,QAAoB,IAAK;OAC3CA,QAAQ,CAAC9gC,SAAS,EAAE;MACpB,CAAC;;GAGH+gC,eAAe,GACf;KACC,OAAO,CAAC,GAAG,4CAAI,4CAAqBC,MAAM,EAAE,CAAC;;GAG9CC,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZ,qBACA;KACC,OAAO,4CAAI,sBAAUhB,MAAM,CAACC,QAAQ,CAAC,EAAE;;GAGxCjkC,GAAG,CAACoR,GAA+B,EACnC;KACC,MAAM9N,IAAY,GAAGtF,cAAI,CAACC,UAAU,CAACmT,GAAG,CAAC,GAAGA,GAAG,CAAC9V,OAAO,EAAE,GAAG8V,GAAG;KAE/D,OAAO,4CAAI,sBAAUpR,GAAG,CAACsD,IAAI,CAAC,IAAI,IAAI;;GAGvCkH,GAAG,CAAC4G,GAA+B,EACnC;KACC,MAAM9N,IAAY,GAAGtF,cAAI,CAACC,UAAU,CAACmT,GAAG,CAAC,GAAGA,GAAG,CAAC9V,OAAO,EAAE,GAAG8V,GAAG;KAE/D,OAAO,4CAAI,sBAAU5G,GAAG,CAAClH,IAAI,CAAC;;CAEhC;;;;ACzGA,CAAe,MAAM2hC,iBAAiB,CACtC;GAAA;KAAA;OAAA;OAAA,OACuC,IAAInoC,GAAG;;;GAE7C+O,QAAQ,CAACvI,IAAY,EAAE4hC,QAAkB,EACzC;KACC,4CAAI,4BAAahnC,GAAG,yCAAC,IAAI,CAACsF,WAAW,kCAAgBF,IAAI,GAAG;OAAE4hC;MAAU,CAAC;;GAG1Ezd,MAAM,CAACnkB,IAAI,EACX;KACC,MAAM6hC,SAAoB,GAAG,4CAAI,4BAAanlC,GAAG,yCAAC,IAAI,CAACwD,WAAW,kCAAgBF,IAAI,EAAE;KAExF,OAAO6hC,SAAS,GAAGA,SAAS,CAACD,QAAQ,EAAE,GAAG,IAAI;;CAOhD;CAAC,yBAJsB5hC,IAAY,EAClC;GACC,OAAOo7B,MAAM,CAACp7B,IAAI,CAAC,CAACrD,WAAW,EAAE;CAClC;CAAC,sBAnBmBglC,iBAAiB;GAAA;CAAA;;CCJtC;CAGiG;CAAA;CAAA;CAAA;CAAA;AAKjG,CAAe,MAAMG,gBAAgB,CACrC;GAKC5hC,WAAW,CAAC1H,MAAkB,EAC9B;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OALsB;;KAAI;OAAA;OAAA,OACmB,IAAIgB,GAAG;;KAAE;OAAA;OAAA,OACf,IAAIA,GAAG;;KAI7C,4CAAI,0BAAWhB,MAAM;KAErB,4CAAI;;GAGLupC,aAAa,CAAC77B,MAA4B,EAAEnL,KAA2B,EACvE;KACC,MAAMinC,UAAU,GAAGtnC,cAAI,CAAC8G,QAAQ,CAAC0E,MAAM,CAAC,GAAGA,MAAM,GAAG,4CAAI,gDAAuBxJ,GAAG,CAACwJ,MAAM,CAAClL,OAAO,EAAE,CAAC;KACpG,MAAMinC,SAAS,GAAGvnC,cAAI,CAAC8G,QAAQ,CAACzG,KAAK,CAAC,GAAGA,KAAK,GAAG,4CAAI,gDAAuB2B,GAAG,CAAC3B,KAAK,CAACC,OAAO,EAAE,CAAC;KAEhG,IAAI,CAACgnC,UAAU,EACf;;OAEC5P,OAAO,CAAC8P,IAAI,CAAE,4BAA2Bh8B,MAAM,CAAClL,OAAO,EAAG,8BAA6B,CAAC;;KAGzF,IAAI,CAACinC,SAAS,EACd;;OAEC7P,OAAO,CAAC8P,IAAI,CAAE,2BAA0BnnC,KAAK,CAACC,OAAO,EAAG,8BAA6B,CAAC;;KAGvF,OAAO,4CAAI,wBAASrC,eAAe,EAAE,CAACwpC,cAAc,CAACH,UAAU,EAAEC,SAAS,CAAC;;GAG5EG,iBAAiB,CAACjsC,IAAiB,EACnC;KACC,IAAI+P,MAAmB,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;KAC1C,OAAOqH,MAAM,KAAK,IAAI,EACtB;OACC,IAAI,IAAI,CAAC67B,aAAa,CAAC77B,MAAM,EAAE/P,IAAI,CAAC,EACpC;SACC,OAAO+P,MAAM;;OAGdA,MAAM,GAAGA,MAAM,CAACrH,SAAS,EAAE;;KAG5B,OAAO,IAAI;;GAuDZwjC,gBAAgB,CAAClsC,IAA+B,EAAEmsC,YAAqB,GAAG,IAAI,EAC9E;KACC,IAAIp8B,MAAmB,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;KAC1C,IAAIonB,UAAuB,GAAG,IAAI;KAClC,OAAO/f,MAAM,CAACrH,SAAS,EAAE,KAAK,IAAI,EAClC;OACC,IAAI,IAAI,CAACkjC,aAAa,CAAC77B,MAAM,CAACrH,SAAS,EAAE,EAAE1I,IAAI,CAAC,EAChD;SACC8vB,UAAU,GAAG/f,MAAM;SAEnB;;OAGDA,MAAM,GAAGA,MAAM,CAACrH,SAAS,EAAE;;KAG5B,IAAIonB,UAAU,KAAK,IAAI,EACvB;OACC,IAAIqc,YAAY,EAChB;SACCnsC,IAAI,CAAC4P,MAAM,EAAE;;OAGd,OAAO,KAAK;;KAGb,IAAI8J,2BAAW,CAACoW,UAAU,CAACpnB,SAAS,EAAE,CAAC,KAAKzG,2BAAW,CAACjC,IAAI,CAAC,IAAKsF,8BAAc,CAACtF,IAAI,CAAC,IAAIA,IAAI,CAACyF,QAAQ,EAAG,CAAC,EAC3G;OACCqqB,UAAU,CAACrc,YAAY,CAACzN,oCAAoB,EAAE,CAACT,MAAM,CAACvF,IAAI,CAAC,CAAC;OAE5D,OAAO,IAAI;;KAGZ8vB,UAAU,CAACrc,YAAY,CAACzT,IAAI,CAAC;KAE7B,OAAO,IAAI;;CAEb;CAAC,gCAxFA;GACC,MAAMosC,mBAAmB,GAAG,4CAAI,8CAAsBj/B,IAAI,CAAC,IAAI,CAAC;GAChE,KAAK,MAAM,GAAG29B,MAAM,CAAC,IAAI,4CAAI,wBAASS,UAAU,EAAE,EAClD;KACC,MAAMc,UAA0C,GAAGvB,MAAM,CAACzgC,cAAc,EAAE;KAC1E,IAAI,CAAC9F,cAAI,CAACqN,aAAa,CAACy6B,UAAU,CAAC,EACnC;OACC;;KAGD,IAAI9nC,cAAI,CAACuuB,aAAa,CAACuZ,UAAU,CAACppC,KAAK,CAAC,EACxC;OACCopC,UAAU,CAACppC,KAAK,CAACoG,OAAO,CAAEijC,cAAoC,IAAK;SAClE,4CAAI,wBAASz2B,qBAAqB,CAACy2B,cAAc,CAACj7B,SAAS,EAAE+6B,mBAAmB,CAAC;SACjF,IAAI7nC,cAAI,CAACC,UAAU,CAAC8nC,cAAc,CAACh7B,QAAQ,CAAC,EAC5C;WACC,4CAAI,oCAAiB7M,GAAG,CAAC6nC,cAAc,CAACj7B,SAAS,CAACxM,OAAO,EAAE,EAAE;aAAEyM,QAAQ,EAAEg7B,cAAc,CAACh7B;YAAU,CAAC;;QAEpG,CAAC;;KAGH,IAAI/M,cAAI,CAACqN,aAAa,CAACy6B,UAAU,CAAC56B,SAAS,CAAC,EAC5C;OACC,KAAK,MAAM,CAACqd,QAAQ,EAAEyd,SAAS,CAAC,IAAIrtC,MAAM,CAACwkB,OAAO,CAAC2oB,UAAU,CAAC56B,SAAS,CAAC,EACxE;SACC,4CAAI,gDAAuBhN,GAAG,CAACqqB,QAAQ,EAAEyd,SAAS,CAAC;;;;CAIvD;CAAC,+BAEoBvsC,IAA+B,EACpD;GACC,MAAM;KAAEsR,QAAQ,GAAG;IAAM,GAAG,4CAAI,oCAAiB/K,GAAG,CAACvG,IAAI,CAAC6E,OAAO,EAAE,CAAC,IAAI,EAAE;GAC1E,IAAIyM,QAAQ,KAAK,IAAI,IAAIA,QAAQ,CAACtR,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,EACtD;KACC;;GAGD,MAAM+P,MAAmB,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;GAC5C,IAAI,IAAI,CAACkjC,aAAa,CAAC77B,MAAM,EAAE/P,IAAI,CAAC,EACpC;KACC;;;;GAIDi8B,OAAO,CAAC8P,IAAI,CAAE,eAAc/rC,IAAI,CAAC6E,OAAO,EAAG,sBAAqBkL,MAAM,CAAClL,OAAO,EAAG,EAAC,CAAC;GAEnF,IAAI,CAACqnC,gBAAgB,CAAClsC,IAAI,CAAC;CAC5B;;CCvGM,MAAMwsC,cAAc,SAAS1iC,UAAU,CAC9C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAEb,IAAI,CAACoI,eAAe,CACnBgiC,oCAAgB,CAACpqC,MAAM,CAACmI,gBAAgB,EAAE,CAAC,CAC3C;;GAGF,OAAO3I,OAAO,GACd;KACC,OAAO,UAAU;;CAEnB;;CChBO,MAAM6qC,uBAAuB,SAAS/+B,2BAAW,CACxD;GACC,OAAO9I,OAAO,GACd;KACC,OAAO,kBAAkB;;GAG1B,OAAO+I,KAAK,CAAC5N,IAA6B,EAC1C;KACC,MAAM,IAAIiK,KAAK,CAAC,iBAAiB,CAAC;;GAGnC,OAAOwE,UAAU,CAACC,cAAqC,EACvD;KACC,MAAM,IAAIzE,KAAK,CAAC,iBAAiB,CAAC;;GAGnC8E,UAAU,GACV;KACC,MAAM,IAAI9E,KAAK,CAAC,iBAAiB,CAAC;;GAGnC,OAAOqE,SAAS,GAChB;KACC,OAAO;OACN6P,KAAK,EAAE,MAAqB;SAC3B,OAAO;WACN1X,UAAU,EAAEkmC,uBAAuB;WACnChmC,QAAQ,EAAE;UACV;QACD;OACDgY,EAAE,EAAE,MAAqB;SACxB,OAAO;WACNlY,UAAU,EAAE,OAAO;aAAEzG,IAAI,EAAE;YAAM,CAAC;WAClC2G,QAAQ,EAAE;UACV;QACD;OACD2X,EAAE,EAAE,MAAqB;SACxB,OAAO;WACN7X,UAAU,EAAE,OAAO;aAAEzG,IAAI,EAAE;YAAM,CAAC;WAClC2G,QAAQ,EAAE;UACV;QACD;OACDimC,EAAE,EAAE,MAAqB;SACxB,OAAO;WACNnmC,UAAU,EAAE,OAAO;aAAEzG,IAAI,EAAE;YAAM,CAAC;WAClC2G,QAAQ,EAAE;UACV;;MAEF;;CAEH;CAEA,SAASgmC,uBAAuB,CAACxuB,KAAuB,EACxD;GACC,MAAMlb,KAAK,GAAG,EAAE;GAChB,MAAM4pC,IAAI,GAAG,CAAC,GAAG1uB,KAAK,CAAC0uB,IAAI,CAAC;GAC5B,KAAK,MAAMC,GAAG,IAAID,IAAI,EACtB;KACC,IAAI5pC,KAAK,CAACmB,MAAM,GAAG,CAAC,EACpB;OACCnB,KAAK,CAACqB,IAAI,CAACd,oCAAoB,EAAE,CAAC;;KAGnC,MAAMupC,KAAK,GAAG,EAAE;KAChB,KAAK,MAAMhtB,IAAI,IAAI+sB,GAAG,CAACC,KAAK,EAC5B;OACC,IAAIA,KAAK,CAAC3oC,MAAM,GAAG,CAAC,EACpB;;SAEC2oC,KAAK,CAACzoC,IAAI,CAACY,+BAAe,CAAC,GAAG,CAAC,CAAC;;OAGjC6nC,KAAK,CAACzoC,IAAI,CAACY,+BAAe,CAAC6a,IAAI,CAACjZ,WAAW,CAACoQ,IAAI,EAAE,CAAC,CAAC;;KAGrDjU,KAAK,CAACqB,IAAI,CAAC,GAAGyoC,KAAK,CAAC;;GAGrB,OAAO;KACN/sC,IAAI,EAAEiD;IACN;CACF;;CC/EO,MAAM+pC,eAAe,SAASljC,UAAU,CAC/C;GACC,OAAOjI,OAAO,GACd;KACC,OAAO,WAAW;;GAGnB,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,MAAMY,KAAK,GAAG,EAAE;KAEhB,MAAMgqC,iBAAiB,GAAG5qC,MAAM,CAACkpC,UAAU,EAAE,CAACF,eAAe,EAAE,CAAC9lB,IAAI,CAClEulB,MAAyB,IAAc;OACvC,OAAOA,MAAM,CAACjpC,OAAO,EAAE,KAAK,OAAO;MACnC,CACD;KAED,IAAI,CAACorC,iBAAiB,EACtB;OACChqC,KAAK,CAACqB,IAAI,CAACooC,uBAAuB,CAAC;;KAGpC,OAAOzpC,KAAK;;CAEd;;CCdsB;AAItB,CAAO,MAAMiqC,UAAU,SAASpjC,UAAU,CAC1C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAEd,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,MAAM;;GAGdsI,YAAY,GACZ;KACC,OAAO;OACNjJ,CAAC,EAAE,OAAyB;SAC3BuF,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV,CAAC;OACFwmC,KAAK,EAAE,OAAyB;SAC/B1mC,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV,CAAC;OACFymC,UAAU,EAAE,OAAyB;SACpC3mC,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV,CAAC;OACFi1B,IAAI,EAAE,OAAyB;SAC9Bn1B,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN,WAAW,EAAE,CAACpI,WAAqB,EAAEhC,IAAU,KAAkB;SAChE,IAAIgC,WAAW,CAAC/B,SAAS,CAAC,MAAM,CAAC,EACjC;WACC,OAAOyJ,YAAY,CAAC1J,IAAI,EAAE,GAAG,EAAE,IAAI,CAACuK,SAAS,EAAE,CAAC;;SAGjD,OAAO,IAAI;;MAEZ;;CAuBH;CAAC,kCAnBA;GACC,IAAI,CAACA,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,MAAM,EAAE,MAAc;KACtE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,0CAA0C,CAAC;KAC7DiH,MAAM,CAAC7G,SAAS,CAAC,MAAM,CAAC;KACxB6G,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAChB2G,aAAG,CAACC,UAAU,CAAC,sBAAsB,EAAE;OAAE,aAAa,EAAE86B,iBAAO,CAACC,KAAK,EAAE,GAAG,IAAI,GAAG;MAAU,CAAC,CAC5F;KACDj7B,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAI,CAAClI,SAAS,EAAE,CAACmI,eAAe,CAACoO,mCAAmB,EAAE,MAAM,CAAC;QAC7D,CAAC;MACF,CAAC;KAEF,OAAOzO,MAAM;IACb,CAAC;CACH;;;;;;;;CCxEuC;AAGxC,CAAO,MAAMk7B,YAAY,SAASzjC,UAAU,CAC5C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAEd,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,QAAQ;;GAGhBsI,YAAY,GACZ;KACC,OAAO;OACN/I,CAAC,EAAE,OAAyB;SAC3BqF,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN,aAAa,EAAE,CAACpI,WAAqB,EAAEhC,IAAU,KAAkB;SAClE,IAAIgC,WAAW,CAAC/B,SAAS,CAAC,QAAQ,CAAC,EACnC;WACC,OAAOyJ,YAAY,CAAC1J,IAAI,EAAE,GAAG,EAAE,IAAI,CAACuK,SAAS,EAAE,CAAC;;SAGjD,OAAO,IAAI;;MAEZ;;CAuBH;CAAC,kCAnBA;GACC,IAAI,CAACA,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,QAAQ,EAAE,MAAc;KACxE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,4CAA4C,CAAC;KAC/DiH,MAAM,CAAC7G,SAAS,CAAC,QAAQ,CAAC;KAC1B6G,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAChB2G,aAAG,CAACC,UAAU,CAAC,wBAAwB,EAAE;OAAE,aAAa,EAAE86B,iBAAO,CAACC,KAAK,EAAE,GAAG,IAAI,GAAG;MAAU,CAAC,CAC9F;KACDj7B,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAI,CAAClI,SAAS,EAAE,CAACmI,eAAe,CAACoO,mCAAmB,EAAE,QAAQ,CAAC;QAC/D,CAAC;MACF,CAAC;KAEF,OAAOzO,MAAM;IACb,CAAC;CACH;;;;;;;;CC1DuC;CAAA;AAGxC,CAAO,MAAMm7B,mBAAmB,SAAS1jC,UAAU,CACnD;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAEd,4CAAI;KACJ,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,eAAe;;GAGvBsI,YAAY,GACZ;KACC,OAAO;OACN7I,CAAC,EAAE,OAAyB;SAC3BmF,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV,CAAC;OACFpF,GAAG,EAAE,OAAyB;SAC7BkF,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN,oBAAoB,EAAE,CAACpI,WAAqB,EAAEhC,IAAU,KAAkB;SACzE,IAAIgC,WAAW,CAAC/B,SAAS,CAAC,eAAe,CAAC,EAC1C;WACC,OAAOyJ,YAAY,CAAC1J,IAAI,EAAE,GAAG,EAAE,IAAI,CAACuK,SAAS,EAAE,CAAC;;SAGjD,OAAO,IAAI;;MAEZ;;CA8CH;CAAC,wCA1CA;GACC,IAAI,CAACE,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/B+7B,oCAAoB,EACnB97B,OAAO,IAAK;KACZ,MAAMuD,KAAoB,GAAGvD,OAAO;KACpC,MAAM;OAAEiM,IAAI;OAAEnH,OAAO;OAAEC,OAAO;OAAEwK;MAAU,GAAGhM,KAAK;KAClD,IAAI0I,IAAI,KAAK,MAAM,KAAKnH,OAAO,IAAIC,OAAO,CAAC,IAAIwK,QAAQ,EACvD;OACChM,KAAK,CAACiG,cAAc,EAAE;OACtB,IAAI,CAAC5Q,SAAS,EAAE,CAACmI,eAAe,CAACoO,mCAAmB,EAAE,eAAe,CAAC;OAEtE,OAAO,IAAI;;KAGZ,OAAO,KAAK;IACZ,EACD9L,uCAAuB,CACvB,CACD;CACF;CAAC,kCAGD;GACC,IAAI,CAACzK,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,eAAe,EAAE,MAAM;KACvE,MAAMC,MAAM,GAAG,IAAIlH,MAAM,EAAE;KAC3BkH,MAAM,CAACjH,UAAU,CAAC,mDAAmD,CAAC;KACtEiH,MAAM,CAAC7G,SAAS,CAAC,eAAe,CAAC;KACjC6G,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAChB2G,aAAG,CAACC,UAAU,CAAC,+BAA+B,EAAE;OAAE,aAAa,EAAE86B,iBAAO,CAACC,KAAK,EAAE,GAAG,KAAK,GAAG;MAAgB,CAAC,CAC5G;KACDj7B,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAM;OACjC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAI,CAAClI,SAAS,EAAE,CAACmI,eAAe,CAACoO,mCAAmB,EAAE,eAAe,CAAC;QACtE,CAAC;MACF,CAAC;KAEF,OAAOzO,MAAM;IACb,CAAC;CACH;;;;;;;;CC1FuC;AAGxC,CAAO,MAAMq7B,eAAe,SAAS5jC,UAAU,CAC/C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAEd,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,WAAW;;GAGnBsI,YAAY,GACZ;KACC,OAAO;OACN3I,CAAC,EAAE,OAAyB;SAC3BiF,UAAU,EAAE9E,wBAAwB;SACpCgF,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN,gBAAgB,EAAE,CAACpI,WAAqB,EAAEhC,IAAU,KAAkB;SACrE,IAAIgC,WAAW,CAAC/B,SAAS,CAAC,WAAW,CAAC,EACtC;WACC,OAAOyJ,YAAY,CAAC1J,IAAI,EAAE,GAAG,EAAE,IAAI,CAACuK,SAAS,EAAE,CAAC;;SAGjD,OAAO,IAAI;;MAEZ;;CAuBH;CAAC,kCAnBA;GACC,IAAI,CAACA,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,WAAW,EAAE,MAAM;KACnE,MAAMC,MAAM,GAAG,IAAIlH,MAAM,EAAE;KAC3BkH,MAAM,CAACjH,UAAU,CAAC,+CAA+C,CAAC;KAClEiH,MAAM,CAAC7G,SAAS,CAAC,WAAW,CAAC;KAC7B6G,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAChB2G,aAAG,CAACC,UAAU,CAAC,2BAA2B,EAAE;OAAE,aAAa,EAAE86B,iBAAO,CAACC,KAAK,EAAE,GAAG,IAAI,GAAG;MAAU,CAAC,CACjG;KACDj7B,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAM;OACjC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAI,CAAClI,SAAS,EAAE,CAACmI,eAAe,CAACoO,mCAAmB,EAAE,WAAW,CAAC;QAClE,CAAC;MACF,CAAC;KAEF,OAAOzO,MAAM;IACb,CAAC;CACH;;;;;;;;CCxDM,MAAMs7B,wBAAwC,GAAGnvC,6BAAa,CAAC,0BAA0B,CAAC;CAAC;CAAA;AAElG,CAAO,MAAMovC,iBAAiB,SAAS9jC,UAAU,CACjD;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAEd,4CAAI;KACJ,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,aAAa;;CA+FtB;CAAC,gCA3FA;GACC,IAAI,CAAC4I,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/Bi8B,wBAAwB,EACxB,MAAM;KACL,MAAMltC,SAAwB,GAAGuR,6BAAa,EAAE;KAChD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAACkmC,kCAAiB,CAAClmC,SAAS,CAAC,EAClE;OACC,OAAO,KAAK;;KAGb,MAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;KAC/B,MAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;KAC7B,MAAMsC,KAAK,GAAGxC,SAAS,CAACyJ,QAAQ,EAAE;KAClC,MAAM2jC,cAAc,GAAGptC,SAAS,CAACqtC,OAAO,EAAE;KAE1C,IAAIptC,MAAM,CAACiX,GAAG,KAAKhX,KAAK,CAACgX,GAAG,IAAIjX,MAAM,CAACwV,MAAM,KAAKvV,KAAK,CAACuV,MAAM,EAC9D;OACC,OAAO,KAAK;;KAGbjT,KAAK,CAACoG,OAAO,CAAC,CAACrJ,IAAiB,EAAE+tC,GAAG,KAAK;;;OAGzC,IAAI9rC,2BAAW,CAACjC,IAAI,CAAC,EACrB;;SAEC,IAAI6G,QAAkB,GAAG7G,IAAI;SAC7B,IAAI+tC,GAAG,KAAK,CAAC,IAAIrtC,MAAM,CAACwV,MAAM,KAAK,CAAC,EACpC;WACCrP,QAAQ,GAAGA,QAAQ,CAACuY,SAAS,CAAC1e,MAAM,CAACwV,MAAM,CAAC,CAAC,CAAC,CAAC,IAAIrP,QAAQ;;SAE5D,IAAIknC,GAAG,KAAK9qC,KAAK,CAACmB,MAAM,GAAG,CAAC,EAC5B;WACCyC,QAAQ,GAAGA,QAAQ,CAACuY,SAAS,CAACze,KAAK,CAACuV,MAAM,CAAC,CAAC,CAAC,CAAC,IAAIrP,QAAQ;;;CAGlE;CACA;CACA;CACA;CACA;CACA;;SAEO,MAAMmnC,iBAAiB,GAAGH,cAAc,CAAC,CAAC,CAAC;SAC3C,IAAI5qC,KAAK,CAACmB,MAAM,KAAK,CAAC,IAAInC,2BAAW,CAAC+rC,iBAAiB,CAAC,EACxD;WACCnnC,QAAQ,GAAGmnC,iBAAiB;;SAG7B,IAAInnC,QAAQ,CAAConC,OAAO,KAAK,EAAE,EAC3B;WACCpnC,QAAQ,CAACyW,QAAQ,CAAC,EAAE,CAAC;;SAGtB,IAAIzW,QAAQ,CAACqnC,QAAQ,KAAK,CAAC,EAC3B;WACCrnC,QAAQ,CAAC2E,SAAS,CAAC,CAAC,CAAC;WACrB2iC,uDAAsC,CAACtnC,QAAQ,CAAC,CAAC2E,SAAS,CAAC,EAAE,CAAC;;;;CAItE;CACA;CACA;MACM,CAAC;;KAEF,OAAO,IAAI;IACX,EACDkP,uCAAuB,CACvB,CACD;CACF;CAAC,kCAGD;GACC,IAAI,CAACnQ,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,cAAc,EAAE,MAAc;KAC9E,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,uDAAuD,CAAC;KAC1EiH,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,kCAAkC,CAAC,CAAC;KACrEF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAI,CAAClI,SAAS,EAAE,CAACmI,eAAe,CAACi7B,wBAAwB,CAAC;QAC1D,CAAC;MACF,CAAC;KAEF,OAAOt7B,MAAM;IACb,CAAC;CACH;;;;;;ACjID,CAOyD;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAUzD,CAAO,MAAM+7B,UAAU,SAASrjC,6BAAY,CAC5C;GAQChB,WAAW,CAAC4c,OAA0B,EACtC;KACC,KAAK,EAAE;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OATO;;KAAI;OAAA;OAAA,OACC;;KAAI;OAAA;OAAA,OACA;;KAAI;OAAA;OAAA,OACV;;KAAE;OAAA;OAAA,OACW;;KAAI;OAAA;OAAA,OACJ,IAAI6D,2BAAW;;KAK9C,IAAI,CAACxf,iBAAiB,CAAC,6BAA6B,CAAC;KAErD,MAAMqjC,iBAAoC,GAAG9pC,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAAC,GAAGA,OAAO,GAAG,EAAE;KAEvF,IAAI,CAACsR,kBAAkB,CAACoW,iBAAiB,CAACnW,eAAe,CAAC;KAC1D,IAAI,CAACoW,UAAU,CAACD,iBAAiB,CAACE,OAAO,CAAC;KAE1C,IAAIhqC,cAAI,CAAC2T,SAAS,CAACm2B,iBAAiB,CAACG,QAAQ,CAAC,EAC9C;OACC,IAAI,CAACC,WAAW,CAACJ,iBAAiB,CAACG,QAAQ,CAAC;MAC5C,MAED;OACC,IAAI,CAACC,WAAW,CAAC,4CAAI,0BAAc,EAAE,CAAC;;KAGvC,IAAI,CAACC,eAAe,CAAC/nB,OAAO,CAACgoB,YAAY,CAAC;KAE1C,IAAI,CAAC1lB,oBAAoB,CAAColB,iBAAiB,CAAChmB,MAAM,CAAC;;GAGpDa,IAAI,CAACvC,OAAmE,GAAG,EAAE,EAC7E;KAAA;KACC,MAAMD,MAAmB,sBAAGC,OAAO,CAACD,MAAM,8BAAI5kB,SAAS;KACvD,MAAMq2B,aAAiC,GAAG5zB,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAACwR,aAAa,CAAC,GAAGxR,OAAO,CAACwR,aAAa,GAAG,EAAE;KAEhH,IAAI,CAAC5zB,cAAI,CAAC4iB,WAAW,CAACT,MAAM,CAAC,EAC7B;OACC,IAAI,CAAC0R,QAAQ,EAAE,CAACb,cAAc,CAAC7Q,MAAM,CAAC;;KAGvC,IAAI,CAAC0R,QAAQ,EAAE,CAACZ,cAAc,CAAC;OAC9B,GAAGW,aAAa;OAChBV,iBAAiB,EAAE;MACnB,CAAC;KAEF,IAAI,CAACW,QAAQ,EAAE,CAAClP,IAAI,EAAE;;GAGvBoP,OAAO,GACP;KACC,OAAO,4CAAI,0BAAY,IAAI,IAAI,4CAAI,sBAAQA,OAAO,EAAE;;GAGrDnP,IAAI,GACJ;KACC,IAAI,CAACiP,QAAQ,EAAE,CAACC,KAAK,EAAE;;GAGxBxtB,OAAO,GACP;KACC,IAAI,CAACutB,QAAQ,EAAE,CAACvtB,OAAO,EAAE;;GAG1B6jC,eAAe,CAACC,YAAqB,GAAG,IAAI,EAC5C;KACC,IAAIA,YAAY,6CAAK,IAAI,+BAAc,EACvC;OACC;;KAGD,IAAIA,YAAY,EAChB;OACC7iC,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACrB,YAAY,EAAE,EAAE,kBAAkB,CAAC;MACrD,MAED;OACCa,aAAG,CAACS,WAAW,CAAC,IAAI,CAACtB,YAAY,EAAE,EAAE,kBAAkB,CAAC;;KAGzD,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,4CAAI,sBAAQusB,cAAc,EAAE;;KAG7B,4CAAI,kCAAiBmX,YAAY;;GAGlCF,WAAW,CAACD,QAAiB,GAAG,IAAI,EACpC;KACC,IAAIA,QAAQ,6CAAK,IAAI,uBAAU,EAC/B;OACC;;KAGD,IAAIA,QAAQ,EACZ;OACC1iC,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACrB,YAAY,EAAE,EAAE,aAAa,CAAC;MAChD,MAED;OACCa,aAAG,CAACS,WAAW,CAAC,IAAI,CAACtB,YAAY,EAAE,EAAE,aAAa,CAAC;;KAGpD,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,4CAAI,sBAAQusB,cAAc,EAAE;;KAG7B,4CAAI,0BAAagX,QAAQ;;GAG1BF,UAAU,CAAChb,GAAW,EACtB;KACC,IAAI/uB,cAAI,CAAC8G,QAAQ,CAACioB,GAAG,CAAC,EACtB;OACC,4CAAI,wBAAYuE,WAAW,CAACvE,GAAG,CAAC;OAEhC,IAAI,CAACsb,cAAc,EAAE,CAACh6B,KAAK,2CAAG,IAAI,qBAAS;OAC3C,IAAI,CAACi6B,YAAY,EAAE,CAAC/nC,WAAW,2CAAG,IAAI,qBAAS;OAC/C,IAAI,CAAC+nC,YAAY,EAAE,CAACC,IAAI,2CAAG,IAAI,qBAAS;;;GAI1CC,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZ9W,kBAAkB,CAAC5hB,SAAsB,EACzC;KACC,IAAI9R,cAAI,CAACgH,aAAa,CAAC8K,SAAS,CAAC,EACjC;OACC,4CAAI,4CAAoBA,SAAS;;;GAInCoiB,kBAAkB,GAClB;KACC,+CAAO,IAAI;;GAGZL,QAAQ,GACR;KACC,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,4CAAI,wBAAU,IAAIM,gBAAK,CAAC;SACvBC,QAAQ,EAAE,IAAI;SACdC,SAAS,EAAE,KAAK;SAChBC,OAAO,EAAE,CAAC;SACVC,UAAU,EAAE,IAAI;SAChBZ,eAAe,EAAE,IAAI,CAACO,kBAAkB,EAAE;SAC1CtvB,OAAO,EAAE,IAAI,CAAC8B,YAAY,EAAE;SAC5Bod,MAAM,EAAE;WACP0Q,OAAO,EAAE,MAAM;aACd,IAAI,CAAC3rB,IAAI,CAAC,SAAS,CAAC;YACpB;WACD4rB,SAAS,EAAE,MAAM;aAChB,IAAI,CAAC5rB,IAAI,CAAC,WAAW,CAAC;YACtB;WACD6rB,MAAM,EAAE,MAAM;aACb,IAAI,CAAC7rB,IAAI,CAAC,QAAQ,CAAC;YACnB;WACD8rB,WAAW,EAAE,MAAM;aAClB,4CAAI,IAAI,yBACR;eACC,IAAI,CAAC0V,cAAc,EAAE,CAACjuC,KAAK,EAAE;;;;QAIhC,CAAC;;KAGH,+CAAO,IAAI;;GAGZsK,YAAY,GACZ;KACC,OAAO,4CAAI,oBAAO4f,QAAQ,CAAC,WAAW,EAAE,MAAM;OAC7C,OAAO3d,aAAG,CAAChC,MAAM,oBAAC;;;;iCAIU,CAAyC;SACjE,CAAwB;;;;kBAIf,CAAsC;;;;;;;;kBAQtC,CAAwC;;;;;;;QAOlD,CAAsB;;;;kBAIZ,CAAsC;;;;;;;;kBAQtC,CAAwC;;;;;;;IAOrD,GAvC8BoH,aAAG,CAACC,UAAU,CAAC,sBAAsB,CAAC,EAC9D,IAAI,CAACq8B,cAAc,EAAE,EAIZ,4CAAI,gDAAqBzhC,IAAI,CAAC,IAAI,CAAC,EAQnC,4CAAI,oDAAuBA,IAAI,CAAC,IAAI,CAAC,EAO/C,IAAI,CAAC0hC,YAAY,EAAE,EAIT,4CAAI,4CAAqB1hC,IAAI,CAAC,IAAI,CAAC,EAQnC,4CAAI,gDAAuBA,IAAI,CAAC,IAAI,CAAC;MAQpD,CAAC;;GAGHyhC,cAAc,GACd;KACC,OAAO,4CAAI,oBAAO/jB,QAAQ,CAAC,cAAc,EAAE,MAAM;OAChD,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;;;;cAKT,CAAoB;kBAChB,CAA4C;;;IAGzD,GAJW,IAAI,CAAC6jC,UAAU,EAAE,EACb,4CAAI,wDAA2B5hC,IAAI,CAAC,IAAI,CAAC;MAIxD,CAAC;;GAGH0hC,YAAY,GACZ;KACC,OAAO,4CAAI,oBAAOhkB,QAAQ,CAAC,YAAY,EAAE,MAAM;OAC9C,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;IAElB;MACA,CAAC;;CA0CJ;CAAC,kCAtCA;GACC,MAAMooB,GAAW,GAAG,IAAI,CAACsb,cAAc,EAAE,CAACh6B,KAAK,CAACsC,IAAI,EAAE;GACtD,IAAIoc,GAAG,CAAClvB,MAAM,GAAG,CAAC,EAClB;KACC,IAAI,CAACkqC,UAAU,CAAChb,GAAG,CAAC;KACpB,IAAI,CAAClmB,IAAI,CAAC,QAAQ,CAAC;IACnB,MAED;KACC,IAAI,CAACwhC,cAAc,EAAE,CAACjuC,KAAK,EAAE;;CAE/B;CAAC,oCAEyBuU,KAAoB,EAC9C;GACC,IAAIA,KAAK,CAACyC,GAAG,KAAK,OAAO,EACzB;KACCzC,KAAK,CAACiG,cAAc,EAAE;KACtB,4CAAI;;CAEN;CAAC,oCAGD;GACC,IAAI,CAAC/N,IAAI,CAAC,UAAU,CAAC;CACtB;CAAC,gCAGD;GACC,IAAI,CAACqhC,WAAW,CAAC,IAAI,CAAC;GACtB,IAAI,CAACG,cAAc,EAAE,CAACjuC,KAAK,EAAE;GAC7B,IAAI,CAACiuC,cAAc,EAAE,CAACl5B,MAAM,EAAE;CAC/B;CAAC,kCAGD;GACC,IAAI,CAACtI,IAAI,CAAC,UAAU,CAAC;CACtB;;CCpTM,SAAS4hC,WAAW,CAAC1b,GAAW,EACvC;GACC,OAAO,oCAAoC,CAAChsB,IAAI,CAACgsB,GAAG,CAAC;CACtD;;CCHA;AACA,CA+DO,MAAM2b,0BAAkD,GAAGzwC,6BAAa,CAAC,4BAA4B,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAE9G,CAAO,MAAM0wC,UAAU,SAASplC,UAAU,CAC1C;GAKCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OANW;;KAAI;OAAA;OAAA,OACF,4CAAI,gDAAqB8K,IAAI,CAAC,IAAI;;KAAC;OAAA;OAAA,OAC9B;;KAMhC,4CAAI;KACJ,4CAAI;KACJ,4CAAI;;GAGL,OAAOtL,OAAO,GACd;KACC,OAAO,MAAM;;GAGd,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAAC8sC,wBAAQ,CAAC;;GAGlBhlC,YAAY,GACZ;KACC,OAAO;OACNmpB,GAAG,EAAE,OAAyB;SAC7B7sB,UAAU,EAAGzG,IAAuB,IAAgC;;;WAGnE,IAAIszB,GAAG,GAAGtzB,IAAI,CAACuU,QAAQ,EAAE;WACzB,IAAI,CAACy6B,WAAW,CAAC1b,GAAG,CAAC,EACrB;aACCA,GAAG,GAAGtzB,IAAI,CAACovC,WAAW,EAAE;aACxB,IAAI,CAACJ,WAAW,CAAC1b,GAAG,CAAC,EACrB;eACC,OAAO;iBAAEtzB,IAAI,EAAE;gBAAM;;;WAIvB,OAAO;aACNA,IAAI,EAAEqvC,+BAAe,CAACxX,WAAW,CAACvE,GAAG,CAAC,EAAE;eAAE5M,MAAM,EAAE;cAAU;YAC5D;UACD;SACD/f,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN06B,IAAI,EAAG9iC,WAAqB,IAAyB;SACpD,MAAMsxB,GAAG,GAAGtxB,WAAW,CAAC+iC,MAAM,EAAE;SAChC,MAAMrgC,QAAQ,GAAG1C,WAAW,CAACc,WAAW,EAAE;SAC1C,MAAM+5B,YAAY,GACjBn4B,QAAQ,CAACN,MAAM,KAAK,CAAC,IAClBnC,2BAAW,CAACyC,QAAQ,CAAC,CAAC,CAAC,CAAC,IACxBA,QAAQ,CAAC,CAAC,CAAC,CAAC0E,SAAS,EAAE,KAAK,CAC/B;SAED,MAAM7G,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SACjD,IAAIq6B,YAAY,IAAIn4B,QAAQ,CAAC,CAAC,CAAC,CAAC6C,cAAc,EAAE,KAAK+rB,GAAG,EACxD;WACC,OAAO;aACNtzB,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;eAAEC,IAAI,EAAE;cAAO;YAC1C;;SAGF,OAAO;WACN7J,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE,KAAK;aAAE+K,KAAK,EAAE0e;YAAK;UACtD;;MAEF;;GAGFjpB,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAE89B;QACX,CAAC;OACF19B,SAAS,EAAE;SACVqzB,IAAI,EAAE;;MAEP;;GAidFj6B,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,gCAAiB,IAAI,EAC7B;OACC,4CAAI,4BAAaA,OAAO,EAAE;;;CAG7B;CAAC,iCAtdA;GACC,IAAI,CAACJ,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAAC+kC,qBAAqB,CAACH,wBAAQ,EAAE,OAAO,EAAE,CAACj6B,KAAY,EAAE2M,OAAgB,KAAK;KAC7F,MAAMgjB,QAAkB,GAAG9iB,6BAAa,CAACF,OAAO,CAAC;KACjD,IAAI+iB,2BAAW,CAACC,QAAQ,CAAC,EACzB;OACC,IAAI,CAACt6B,SAAS,EAAE,CAACmI,eAAe,CAACu8B,0BAA0B,EAAEpK,QAAQ,CAAC;;IAEvE,CAAC,CACF;CACF;CAAC,gCAGD;GACC,IAAI,CAACp6B,eAAe,yCACnB,IAAI,qGACJ,IAAI,qGACJ,IAAI,2GACJ,IAAI,kDACJ;CACF;CAAC,uCAGD;GACC,OAAO,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CACtC69B,mCAAmB,EAClB59B,OAAO,IAAc;KACrB,IAAIA,OAAO,KAAK,IAAI,EACpB;OACC69B,2BAAW,CAAC79B,OAAO,CAAC;OAEpB,OAAO,IAAI;;KAGZ,MAAMlR,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,IAAI6yB,GAAG,GAAG,IAAI;KACd,IAAImc,WAAW,GAAG,IAAI;KAEtB,IAAI/c,UAAU,GAAG,EAAE;KACnB,IAAInuB,cAAI,CAACsH,cAAc,CAAC8F,OAAO,CAAC,EAChC;OACC2hB,GAAG,GAAG3hB,OAAO;MACb,MACI,IAAIpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,EACpC;OACC,MAAM;SAAE+U,MAAM;SAAEgpB,GAAG;SAAEp7B;QAAO,GAAG3C,OAAO;OACtC+gB,UAAU,GAAG;SAAEgd,GAAG;SAAEhpB,MAAM;SAAEpS;QAAO;OACnCgf,GAAG,GAAG3hB,OAAO,CAAC2hB,GAAG;OACjBmc,WAAW,GAAG99B,OAAO,CAAC89B,WAAW,IAAI,IAAI;;KAG1C,IAAIlrC,cAAI,CAACsH,cAAc,CAACynB,GAAG,CAAC,EAC5B;OACC,IAAI,CAAC/uB,cAAI,CAACsH,cAAc,CAAC6mB,UAAU,CAAChM,MAAM,CAAC,EAC3C;SACCgM,UAAU,CAAChM,MAAM,GAAG,QAAQ;;OAG7B,IAAIsoB,WAAW,CAAC1b,GAAG,CAAC,EACpB;SACC,IAAI7yB,SAAS,CAACwV,WAAW,EAAE,IAAI,yCAAC,IAAI,oCAAiBxV,SAAS,CAAC,EAC/D;WACC,4CAAI,4BAAaA,SAAS,EAAE6yB,GAAG,EAAEZ,UAAU,EAAE+c,WAAW;UACxD,MAED;WACCD,2BAAW,CAAClc,GAAG,EAAEZ,UAAU,CAAC;;SAG7B,OAAO,IAAI;;OAGZ,OAAO,KAAK;;KAGb,OAAO,KAAK;IACZ,EACD3gB,oCAAoB,CACpB;CACF;CAAC,uCAGD;GACC,OAAOpH,8BAAa,CACnB,IAAI,CAACJ,SAAS,EAAE,CAACmH,eAAe,CAC/Bu9B,0BAA0B,EACzBt9B,OAAO,IAAc;KACrB,MAAMlR,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC8J,SAAS,EAAE,CAAC8e,UAAU,EAAE,EACnE;OACC,OAAO,KAAK;;KAGb,4CAAI,wCAAkB5oB,SAAS,CAACmN,KAAK,EAAE;KACvC,IAAI,4CAAI,gCAAiB,IAAI,EAC7B;OACC,4CAAI,4BAAa/C,OAAO,EAAE;;KAG3B,IAAI8kC,QAAQ,GAAG,IAAI;KACnB,IAAIpB,OAAO,GAAG,IAAI;KAElB,IAAI3J,2BAAW,CAACjzB,OAAO,CAAC,EACxB;OACCg+B,QAAQ,GAAGh+B,OAAO;OAClB48B,OAAO,GAAGoB,QAAQ,CAAC5K,MAAM,EAAE;MAC3B,MAED;OACC,MAAMvD,cAAc,GAAGtvB,oCAAmB,CACzCzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EACzBb,IAA2B,IAAK;SAChC,OAAO,CAACA,IAAI,CAACqX,OAAO,GAAGzY,WAAW,MAAM,CAAC;QACzC,CACD;OAED,IAAI4iC,cAAc,EAClB;SACC,OAAO,KAAK;;OAGb,MAAMxhC,IAAI,GAAGQ,eAAe,CAACC,SAAS,CAAC;OACvC,MAAMmvC,UAAU,GAAG19B,oCAAmB,CAAClS,IAAI,EAAE4kC,2BAAW,CAAC;OAEzD,IAAIgL,UAAU,EACd;SACCD,QAAQ,GAAGC,UAAU;SACrBrB,OAAO,GAAGoB,QAAQ,CAAC5K,MAAM,EAAE;SAC3B4K,QAAQ,CAACj6B,MAAM,EAAE;QACjB,MACI,IAAIkvB,2BAAW,CAAC5kC,IAAI,CAAC,EAC1B;SACC2vC,QAAQ,GAAG3vC,IAAI;SACfuuC,OAAO,GAAGoB,QAAQ,CAAC5K,MAAM,EAAE;SAC3B4K,QAAQ,CAACj6B,MAAM,EAAE;;;KAInB,IAAI,CAACnL,SAAS,EAAE,CAACmI,eAAe,CAACnU,mBAAmB,CAAC;KAErD,4CAAI,8BAAe,IAAI6vC,UAAU,CAAC;OACjCG,OAAO;OACPI,YAAY,EAAEkB,+BAAe,CAACF,QAAQ,CAAC;;OAEvCzX,eAAe,EAAElqB,QAAQ,CAACknB,IAAI;OAC9B7M,MAAM,EAAE;SACPmR,MAAM,EAAGtkB,KAAgB,IAAK;WAC7B,MAAM46B,UAAsB,GAAG56B,KAAK,CAAC2R,SAAS,EAAE;WAChD,IAAIyM,GAAG,GAAGwc,UAAU,CAACf,UAAU,EAAE;WACjC,IAAI,CAACxqC,cAAI,CAACsH,cAAc,CAACynB,GAAG,CAAC,EAC7B;aACCwc,UAAU,CAAC3mB,IAAI,EAAE;aAEjB;;WAGD,MAAM4mB,QAAQ,GAAGC,oBAAU,CAACC,OAAO,CAAC3c,GAAG,CAAC,GAAG,SAAS,GAAG,UAAU;WACjE,MAAMmc,WAAW,GAAGnc,GAAG;WACvB,IAAI,CAAC0b,WAAW,CAAC1b,GAAG,CAAC,EACrB;aACCA,GAAG,GAAI,GAAEyc,QAAS,GAAEzc,GAAI,EAAC;aACzBwc,UAAU,CAACxB,UAAU,CAAChb,GAAG,CAAC;;WAG3B,IAAIqc,QAAQ,KAAK,IAAI,EACrB;aACC,IAAI,CAACplC,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;eAC7B,4CAAI;eAEJ,IAAI,CAAClI,SAAS,EAAE,CAACmI,eAAe,CAAC68B,mCAAmB,EAAE;iBAAEjc,GAAG;iBAAEmc,WAAW;iBAAEC,GAAG,EAAE;gBAAM,CAAC;eACtFI,UAAU,CAACrB,WAAW,CAAC,KAAK,CAAC;eAE7B,MAAMyB,gBAAgC,GAAGl+B,6BAAa,EAAE;eACxD,IAAIC,iCAAiB,CAACi+B,gBAAgB,CAAC,EACvC;iBACC,4CAAI,wCAAkBA,gBAAgB,CAACtiC,KAAK,EAAE;;eAG/C,IAAI,CAACqE,iCAAiB,CAACi+B,gBAAgB,CAAC,IAAIA,gBAAgB,CAACj6B,WAAW,EAAE,EAC1E;iBACC65B,UAAU,CAAC3mB,IAAI,EAAE;;eAGlB,4CAAI,kDAAwB+mB,gBAAgB;cAC5C,CAAC;YACF,MAED;aACC,IAAI,CAAC3lC,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;eAC7Bk9B,QAAQ,CAACQ,MAAM,CAAC7c,GAAG,CAAC;eACpB,4CAAI,kDAAwBthB,6BAAa,EAAE;eAC3C89B,UAAU,CAACpB,eAAe,CAAC,KAAK,CAAC;cACjC,CAAC;aAEFoB,UAAU,CAACrB,WAAW,CAAC,KAAK,CAAC;;WAG9B,IAAI,CAAClkC,SAAS,EAAE,CAACovB,uBAAuB,EAAE;UAC1C;SACDF,QAAQ,EAAGvkB,KAAgB,IAAK;WAC/B,MAAM46B,UAAsB,GAAG56B,KAAK,CAAC2R,SAAS,EAAE;WAChDipB,UAAU,CAAC3mB,IAAI,EAAE;UACjB;SACDinB,QAAQ,EAAGl7B,KAAgB,IAAK;WAC/B,IAAIy6B,QAAQ,KAAK,IAAI,EACrB;aACC,IAAI,CAACplC,SAAS,EAAE,CAACmI,eAAe,CAAC68B,mCAAmB,EAAE,IAAI,CAAC;YAC3D,MAED;aACC,IAAI,CAAChlC,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;eAC7B,MAAM/N,QAAQ,GAAGirC,QAAQ,CAAC7sC,WAAW,EAAE;eACvC,KAAK,MAAM8B,KAAK,IAAIF,QAAQ,EAC5B;;iBAECirC,QAAQ,CAACl8B,YAAY,CAAC7O,KAAK,CAAC;;eAG7B+qC,QAAQ,CAAC//B,MAAM,EAAE;cACjB,CAAC;;WAGH,MAAMkgC,UAAsB,GAAG56B,KAAK,CAAC2R,SAAS,EAAE;WAChDipB,UAAU,CAAC3mB,IAAI,EAAE;UACjB;SACD8P,MAAM,EAAE,MAAM;WACb,IAAIxC,qBAAqB,CAAC,4CAAI,4BAAa2B,QAAQ,EAAE,EAAE,IAAI,CAAC7tB,SAAS,EAAE,CAAC,EACxE;aACCuN,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAAC5C,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;aACnF,IAAI,CAACvsB,SAAS,EAAE,CAACmvB,kBAAkB,EAAE;;UAEtC;SACDX,OAAO,EAAE,MAAM;WACd,4CAAI;UACJ;SACDC,SAAS,EAAE,MAAM;WAChB,4CAAI;;;MAGN,CAAC;KAEF,4CAAI,4BAAa9P,IAAI,EAAE;KAEvB,OAAO,IAAI;IACX,EACDnX,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EACnB,MAAe;KACd,IAAI,4CAAI,gCAAiB,IAAI,EAC7B;OACC,4CAAI,4BAAasM,OAAO,EAAE;;KAG3B,OAAO,KAAK;IACZ,EACDkH,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BjT,yBAAyB,EACzB,MAAe;KACd,OAAO,4CAAI,gCAAiB,IAAI,IAAI,4CAAI,4BAAa65B,OAAO,EAAE;IAC9D,EACDvmB,oCAAoB,CACpB,CACD;CACF;CAAC,gCAGD;GACC,MAAMtR,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,4CAAI,0CAAoB,IAAI,EACjE;KACCsV,6BAAa,yCAAC,IAAI,sCAAgB;KAClC,4CAAI,wCAAkB,IAAI;KAE1B,OAAO,IAAI;;GAGZ,OAAO,KAAK;CACb;CAAC,mCAGD;GACC,4CAAI,8BAAe,IAAI;GACvB+B,eAAK,CAACsS,MAAM,CAAC,IAAI,CAAC7f,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;GACrF,IAAI,CAACvsB,SAAS,EAAE,CAACovB,uBAAuB,EAAE;GAE1C,IAAI,CAACpvB,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,IAAI,yCAAC,IAAI,6CAAoB,EAC7B;OACC,IAAI,CAAClI,SAAS,EAAE,CAAC5J,KAAK,EAAE;;IAEzB,CAAC;CACH;CAAC,kCAGD;GACC,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7BgkB,qBAAqB,CAAC,4CAAI,4BAAa2B,QAAQ,EAAE,EAAE,IAAI,CAAC7tB,SAAS,EAAE,CAAC;IACpE,CAAC;CACH;CAAC,0CAGD;GACC,OAAO,IAAI,CAACA,SAAS,EAAE,CAACmH,eAAe,CACtC+7B,oCAAoB,EACnB97B,OAAO,IAAK;KACZ,MAAMuD,KAAoB,GAAGvD,OAAO;KACpC,MAAM;OAAEiM,IAAI;OAAEnH,OAAO;OAAEC;MAAS,GAAGxB,KAAK;KACxC,IAAI0I,IAAI,KAAK,MAAM,KAAKnH,OAAO,IAAIC,OAAO,CAAC,EAC3C;OACCxB,KAAK,CAACiG,cAAc,EAAE;OACtB,IAAI,CAAC5Q,SAAS,EAAE,CAACmI,eAAe,CAACu8B,0BAA0B,CAAC;OAE5D,OAAO,IAAI;;KAGZ,OAAO,KAAK;IACZ,EACDj6B,uCAAuB,CACvB;CACF;CAAC,kCAGD;GACC,OAAO,IAAI,CAACzK,SAAS,EAAE,CAACmH,eAAe,CACtC6D,6BAAa,EACZL,KAAK,IAAK;KACV,MAAMzU,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IACC,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAC1BA,SAAS,CAACwV,WAAW,EAAE,IACvB,EAAEf,KAAK,YAAY2B,cAAc,CAAC,IAClC3B,KAAK,CAAC4B,aAAa,KAAK,IAAI,EAEhC;OACC,OAAO,KAAK;;KAGb,MAAMu5B,aAAa,GAAGn7B,KAAK,CAAC4B,aAAa,CAACuE,OAAO,CAAC,MAAM,CAAC;KACzD,IAAI,CAAC2zB,WAAW,CAACqB,aAAa,CAAC,EAC/B;OACC,OAAO,KAAK;;;;KAIb,IAAI,CAAC5vC,SAAS,CAACyJ,QAAQ,EAAE,CAACqb,IAAI,CAAEvlB,IAAI,IAAKsF,8BAAc,CAACtF,IAAI,CAAC,CAAC,EAC9D;OACCwvC,2BAAW,CAACa,aAAa,CAAC;OAC1Bn7B,KAAK,CAACiG,cAAc,EAAE;OAEtB,OAAO,IAAI;;KAGZ,OAAO,KAAK;IACZ,EACDnG,uCAAuB,CACvB;CACF;CAAC,sBAEWvU,SAAyB,EAAE6yB,GAAW,EAAEZ,UAA2B,EAAE+c,WAAoB,EACrG;GACC,MAAMlB,OAAO,GAAG1W,WAAW,CAACvE,GAAG,CAAC;GAChC,MAAMuR,QAAQ,GAAGwK,+BAAe,CAACd,OAAO,EAAE7b,UAAU,CAAC;GACrDmS,QAAQ,CAACt/B,MAAM,CAACL,+BAAe,CAACX,cAAI,CAACsH,cAAc,CAAC4jC,WAAW,CAAC,GAAGA,WAAW,GAAGlB,OAAO,CAAC,CAAC;GAE1F,MAAM7tC,MAAM,GAAGD,SAAS,CAACC,MAAM;GAC/B,IAAIA,MAAM,CAACmI,IAAI,KAAK,MAAM,IAAInI,MAAM,CAACG,OAAO,EAAE,CAACg8B,YAAY,EAAE,EAC7D;KACC,MAAMj8B,UAAU,GAAGF,MAAM,CAACG,OAAO,EAAE;KACnC,MAAMs8B,eAAe,GAAGz8B,MAAM,CAACwV,MAAM;KAErC,MAAMo6B,UAAU,GAAG1vC,UAAU,CAACwe,SAAS,CAAC+d,eAAe,CAAC;KACxD,IAAIA,eAAe,KAAK,CAAC,EACzB;;OAECmT,UAAU,CAAC,CAAC,CAAC,CAAC78B,YAAY,CAACoxB,QAAQ,CAAC;OACpCA,QAAQ,CAACnvB,MAAM,EAAE;MACjB,MAED;OACC46B,UAAU,CAAC,CAAC,CAAC,CAAC3gC,WAAW,CAACk1B,QAAQ,CAAC;OACnCA,QAAQ,CAACnvB,MAAM,EAAE;;IAElB,MAED;KACC2L,4BAAY,CAAC,CAACwjB,QAAQ,CAAC,CAAC;KACxB,IAAIz0B,mCAAmB,CAACy0B,QAAQ,CAAC70B,gBAAgB,EAAE,CAAC,EACpD;OACCojB,mCAAkB,CAACyR,QAAQ,EAAE7+B,oCAAoB,CAAC,CAAC0b,SAAS,EAAE;;;CAGjE;CAAC,0BAEejhB,SAAyB,EACzC;GACC,MAAMT,IAAI,GAAGQ,eAAe,CAACC,SAAS,CAAC;GACvC,MAAMsP,MAAM,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;GAE/B,OAAOk8B,2BAAW,CAAC70B,MAAM,CAAC,IAAI60B,2BAAW,CAAC5kC,IAAI,CAAC;CAChD;CAAC,iCAEsBS,SAAyB,EAChD;GACC,IAAIwR,iCAAiB,CAACxR,SAAS,CAAC,EAChC;KACC,MAAMsP,MAAoB,GAAGvP,eAAe,CAACC,SAAS,CAAC,CAACiI,SAAS,EAAE;KACnE,IAAImnC,+BAAe,CAAC9/B,MAAM,CAAC,EAC3B;OACC,MAAM80B,QAAQ,GAAGwK,+BAAe,CAC/Bt/B,MAAM,CAACg1B,MAAM,EAAE,EACf;SACC2K,GAAG,EAAE3/B,MAAM,CAACy1B,MAAM,EAAE;SACpB9e,MAAM,EAAEniB,cAAI,CAACsH,cAAc,CAACkE,MAAM,CAAC8W,SAAS,EAAE,CAAC,GAAG9W,MAAM,CAAC8W,SAAS,EAAE,GAAG,QAAQ;SAC/EvS,KAAK,EAAEvE,MAAM,CAAC8uB,QAAQ;QACtB,CACD;OAED9uB,MAAM,CAAC9I,OAAO,CAAC49B,QAAQ,EAAE,IAAI,CAAC;OAE9B,OAAO,IAAI;;;GAIb,OAAO,KAAK;CACb;CAAC,kCAGD;GACC,IAAI,CAACt6B,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,MAAM,EAAE,MAAc;KACtE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,4CAA4C,CAAC;KAC/DiH,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,sBAAsB,CAAC,CAAC;KACzDF,MAAM,CAAC5G,YAAY,CAAC,MAAM,CAAC;KAC3B4G,MAAM,CAACpG,wBAAwB,EAAE;KACjCoG,MAAM,CAAC1G,UAAU,CAChB2G,aAAG,CAACC,UAAU,CAAC,sBAAsB,EAAE;OAAE,aAAa,EAAE86B,iBAAO,CAACC,KAAK,EAAE,GAAG,IAAI,GAAG;MAAU,CAAC,CAC5F;KACDj7B,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,4CAAI,gCAAiB,IAAI,IAAI,4CAAI,4BAAa8lB,OAAO,EAAE,EAC3D;SACC;;OAGD,IAAI,CAAC/tB,SAAS,EAAE,CAAC5J,KAAK,CAAC,MAAM;SAC5B,IAAI,CAAC4J,SAAS,EAAE,CAACmI,eAAe,CAACu8B,0BAA0B,CAAC;QAC5D,CAAC;MACF,CAAC;KAEF,OAAO58B,MAAM;IACb,CAAC;CACH;;;;;;;;;CC9kBD,MAAMk+B,SAAS,GACd,kHACA;CAED,MAAMC,WAAW,GAChB,2HACA;CAED,MAAMC,QAAQ,GAAG,CAChBC,2BAA2B,CAACH,SAAS,EAAGjjC,IAAY,IAAK;GACxD,OAAOA,IAAI,CAACqjC,UAAU,CAAC,MAAM,CAAC,GAAGrjC,IAAI,GAAI,WAAUA,IAAK,EAAC;CAC1D,CAAC,CAAC,EACFojC,2BAA2B,CAACF,WAAW,EAAGljC,IAAY,IAAK;GAC1D,OAAQ,UAASA,IAAK,EAAC;CACxB,CAAC,CAAC,CACF;CAAC;AAcF,CAAO,MAAMsjC,cAAc,SAAS9mC,UAAU,CAC9C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAEd,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,UAAU;;GAGlB,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACwuC,4BAAY,CAAC;;GAGtBzmC,YAAY,GACZ;KACC,OAAO;OACN0mC,QAAQ,EAAE,MAA0B;SACnC,MAAMvuC,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAO;UAC1C;;MAEF;;GAGFQ,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAEw/B;QACX,CAAC;OACFp/B,SAAS,EAAE;SACVq/B,QAAQ,EAAE;;MAEX;;CA8BH;CAAC,iCA1BA;GACC,MAAMC,QAAQ,GAAG,CAACzd,GAAkB,EAAE0d,OAAsB,KAAK,EAAE;GAEnE,IAAI,CAACvmC,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACsL,qBAAqB,CAAChC,wBAAQ,EAAGhN,QAAkB,IAAK;KACxE,MAAMkJ,MAAM,GAAGlJ,QAAQ,CAACmJ,gBAAgB,EAAE;KAC1C,MAAMihC,QAAQ,GAAGpqC,QAAQ,CAACyP,kBAAkB,EAAE;KAC9C,IAAIu5B,+BAAe,CAAC9/B,MAAM,CAAC,EAC3B;OACCmhC,cAAc,CAACnhC,MAAM,EAAE0gC,QAAQ,EAAEM,QAAQ,CAAC;MAC1C,MACI,IAAI,CAACnM,2BAAW,CAAC70B,MAAM,CAAC,EAC7B;OACC,IACClJ,QAAQ,CAACg2B,YAAY,EAAE,KACnBsU,mBAAmB,CAACtqC,QAAQ,CAACU,cAAc,EAAE,CAAC,IAAI,CAACsoC,+BAAe,CAACoB,QAAQ,CAAC,CAAC,EAElF;SACCG,kBAAkB,CAACvqC,QAAQ,EAAE4pC,QAAQ,EAAEM,QAAQ,CAAC;;OAGjDM,kBAAkB,CAACxqC,QAAQ,EAAE4pC,QAAQ,EAAEM,QAAQ,CAAC;;IAEjD,CAAC,CACF;CACF;CAGD,SAASL,2BAA2B,CACnCY,MAAc,EACdC,cAAwC,GAAIjkC,IAAI,IAAKA,IAAI,EAE1D;GACC,OAAQA,IAAY,IAAK;KACxB,MAAM2S,KAAK,GAAGqxB,MAAM,CAACvU,IAAI,CAACzvB,IAAI,CAAC;KAC/B,IAAI2S,KAAK,KAAK,IAAI,EAClB;OACC,OAAO,IAAI;;KAGZ,OAAO;OACNX,KAAK,EAAEW,KAAK,CAACX,KAAK;OAClBlb,MAAM,EAAE6b,KAAK,CAAC,CAAC,CAAC,CAAC7b,MAAM;OACvBkJ,IAAI,EAAE2S,KAAK,CAAC,CAAC,CAAC;OACdqT,GAAG,EAAEie,cAAc,CAACjkC,IAAI;MACxB;IACD;CACF;CAEA,SAASkkC,cAAc,CAAClkC,IAAY,EAAEmkC,QAA4B,EAClE;GACC,KAAK,MAAMC,OAAO,IAAID,QAAQ,EAC9B;KACC,MAAMxxB,KAAK,GAAGyxB,OAAO,CAACpkC,IAAI,CAAC;KAC3B,IAAI2S,KAAK,EACT;OACC,OAAOA,KAAK;;;GAId,OAAO,IAAI;CACZ;CAEA,MAAM0xB,oBAAoB,GAAG,cAAc;CAE3C,SAASC,WAAW,CAACC,IAAY,EACjC;GACC,OAAOF,oBAAoB,CAACrqC,IAAI,CAACuqC,IAAI,CAAC;CACvC;CAEA,SAASC,iBAAiB,CAAChrC,WAAmB,EAC9C;GACC,OAAO8qC,WAAW,CAAC9qC,WAAW,CAACA,WAAW,CAAC1C,MAAM,GAAG,CAAC,CAAC,CAAC;CACxD;CAEA,SAAS+sC,mBAAmB,CAACrqC,WAAmB,EAChD;GACC,OAAO8qC,WAAW,CAAC9qC,WAAW,CAAC,CAAC,CAAC,CAAC;CACnC;CAEA,SAASirC,kBAAkB,CAACjrC,WAAmB,EAC/C;GACC,OAAO,gBAAgB,CAACQ,IAAI,CAACR,WAAW,CAAC;CAC1C;CAEA,SAASkrC,mBAAmB,CAAChyC,IAAiB,EAC9C;GACC,IAAI2jB,YAAY,GAAG3jB,IAAI,CAACsW,kBAAkB,EAAE;GAC5C,IAAIhR,8BAAc,CAACqe,YAAY,CAAC,EAChC;KACCA,YAAY,GAAGA,YAAY,CAACvH,iBAAiB,EAAE;;GAGhD,OACCuH,YAAY,KAAK,IAAI,IAClB7d,gCAAgB,CAAC6d,YAAY,CAAC,IAC7B1hB,2BAAW,CAAC0hB,YAAY,CAAC,IAAImuB,iBAAiB,CAACnuB,YAAY,CAACpc,cAAc,EAAE,CAAE;CAEpF;CAEA,SAAS0qC,eAAe,CAACjyC,IAAiB,EAC1C;GACC,IAAI4jB,QAAQ,GAAG5jB,IAAI,CAACyX,cAAc,EAAE;GACpC,IAAInS,8BAAc,CAACse,QAAQ,CAAC,EAC5B;KACCA,QAAQ,GAAGA,QAAQ,CAAC3H,kBAAkB,EAAE;;GAGzC,OACC2H,QAAQ,KAAK,IAAI,IACd9d,gCAAgB,CAAC8d,QAAQ,CAAC,IACzB3hB,2BAAW,CAAC2hB,QAAQ,CAAC,IAAIutB,mBAAmB,CAACvtB,QAAQ,CAACrc,cAAc,EAAE,CAAE;CAE9E;CAEA,SAAS2qC,sBAAsB,CAACC,UAAkB,EAAEC,QAAgB,EAAE9kC,IAAY,EAAEtN,IAAc,EAClG;GACC,MAAMqyC,oBAAoB,GAAGF,UAAU,GAAG,CAAC,GAAGP,WAAW,CAACtkC,IAAI,CAAC6kC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAGH,mBAAmB,CAAChyC,IAAI,CAAC;GAC3G,IAAI,CAACqyC,oBAAoB,EACzB;KACC,OAAO,KAAK;;;;GAIb,OAAOD,QAAQ,GAAG9kC,IAAI,CAAClJ,MAAM,GAAGwtC,WAAW,CAACtkC,IAAI,CAAC8kC,QAAQ,CAAC,CAAC,GAAGH,eAAe,CAACjyC,IAAI,CAAC;CACpF;CAEA,SAASoxC,kBAAkB,CAACpxC,IAAc,EAAEyxC,QAA4B,EAAEV,QAAuB,EACjG;GACC,MAAMuB,QAAQ,GAAGtyC,IAAI,CAACuH,cAAc,EAAE;GACtC,IAAI+F,IAAI,GAAGglC,QAAQ;GACnB,IAAIC,eAAe,GAAG,CAAC;GACvB,IAAIC,iBAAiB,GAAGxyC,IAAI;GAC5B,IAAIigB,KAA+B,GAAGuxB,cAAc,CAAClkC,IAAI,EAAEmkC,QAAQ,CAAC;GACpE,OAAOxxB,KAAK,KAAK,IAAI,EACrB;KACC,MAAMkyB,UAAU,GAAGlyB,KAAK,CAACX,KAAK;KAC9B,MAAMmzB,WAAW,GAAGxyB,KAAK,CAAC7b,MAAM;KAChC,MAAMguC,QAAQ,GAAGD,UAAU,GAAGM,WAAW;KACzC,MAAMC,OAAO,GAAGR,sBAAsB,CACrCK,eAAe,GAAGJ,UAAU,EAC5BI,eAAe,GAAGH,QAAQ,EAC1BE,QAAQ,EACRtyC,IAAI,CACJ;KAED,IAAI0yC,OAAO,EACX;OACC,IAAIC,YAAY,GAAG,IAAI;OACvB,IAAIJ,eAAe,GAAGJ,UAAU,KAAK,CAAC,EACtC;SACC,CAACQ,YAAY,EAAEH,iBAAiB,CAAC,GAAGA,iBAAiB,CAACpzB,SAAS,CAC9DmzB,eAAe,GAAGE,WAAW,CAC7B;QACD,MAED;SACC,GAAGE,YAAY,EAAEH,iBAAiB,CAAC,GAAGA,iBAAiB,CAACpzB,SAAS,CAChEmzB,eAAe,GAAGJ,UAAU,EAC5BI,eAAe,GAAGJ,UAAU,GAAGM,WAAW,CAC1C;;OAGF,MAAM/f,UAAU,GAAGnuB,cAAI,CAACqN,aAAa,CAACqO,KAAK,CAACyS,UAAU,CAAC,GAAG;SAAE,GAAGzS,KAAK,CAACyS;QAAY,GAAG,EAAE;OACtF,IAAI,CAACnuB,cAAI,CAACsH,cAAc,CAAC6mB,UAAU,CAAChM,MAAM,CAAC,EAC3C;SACCgM,UAAU,CAAChM,MAAM,GAAG,QAAQ;;OAG7B,MAAMme,QAAQ,GAAG+N,mCAAmB,CAAC3yB,KAAK,CAACqT,GAAG,EAAEZ,UAAU,CAAC;OAC3D,MAAM7rB,QAAQ,GAAG3B,+BAAe,CAAC+a,KAAK,CAAC3S,IAAI,CAAC;OAC5CzG,QAAQ,CAAC2E,SAAS,CAACmnC,YAAY,CAACvpC,SAAS,EAAE,CAAC;OAC5CvC,QAAQ,CAACsW,SAAS,CAACw1B,YAAY,CAACE,SAAS,EAAE,CAAC;OAC5ChO,QAAQ,CAACt/B,MAAM,CAACsB,QAAQ,CAAC;OACzB8rC,YAAY,CAAC1rC,OAAO,CAAC49B,QAAQ,CAAC;OAC9BkM,QAAQ,CAAC9wB,KAAK,CAACqT,GAAG,EAAE,IAAI,CAAC;OACzBif,eAAe,GAAG,CAAC;MACnB,MAED;OACCA,eAAe,IAAIH,QAAQ;;KAG5B9kC,IAAI,GAAGA,IAAI,CAACiX,KAAK,CAACH,IAAI,CAACoD,GAAG,CAAC,CAAC,EAAE4qB,QAAQ,CAAC,CAAC;KACxCnyB,KAAK,GAAGuxB,cAAc,CAAClkC,IAAI,EAAEmkC,QAAQ,CAAC;;CAExC;CAEA,SAASP,cAAc,CAACrM,QAAsB,EAAE4M,QAA4B,EAAEV,QAAuB,EACrG;;GAEC,MAAMrsC,QAAQ,GAAGmgC,QAAQ,CAAC/hC,WAAW,EAAE;GACvC,MAAM4V,cAAc,GAAGhU,QAAQ,CAACN,MAAM;GACtC,KAAK,IAAIhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsX,cAAc,EAAEtX,CAAC,EAAE,EACvC;KACC,MAAMwD,KAAK,GAAGF,QAAQ,CAACtD,CAAC,CAAC;KACzB,IAAI,CAACa,2BAAW,CAAC2C,KAAK,CAAC,IAAI,CAACA,KAAK,CAACi4B,YAAY,EAAE,EAChD;OACCiW,mBAAmB,CAACjO,QAAQ,CAAC;OAC7BkM,QAAQ,CAAC,IAAI,EAAElM,QAAQ,CAACE,MAAM,EAAE,CAAC;OAEjC;;;;;GAKF,MAAMz3B,IAAI,GAAGu3B,QAAQ,CAACt9B,cAAc,EAAE;GACtC,MAAM0Y,KAAK,GAAGuxB,cAAc,CAAClkC,IAAI,EAAEmkC,QAAQ,CAAC;GAC5C,IAAIxxB,KAAK,KAAK,IAAI,IAAIA,KAAK,CAAC3S,IAAI,KAAKA,IAAI,EACzC;KACCwlC,mBAAmB,CAACjO,QAAQ,CAAC;KAC7BkM,QAAQ,CAAC,IAAI,EAAElM,QAAQ,CAACE,MAAM,EAAE,CAAC;KAEjC;;;;GAID,IAAI,CAACiN,mBAAmB,CAACnN,QAAQ,CAAC,IAAI,CAACoN,eAAe,CAACpN,QAAQ,CAAC,EAChE;KACCiO,mBAAmB,CAACjO,QAAQ,CAAC;KAC7BkM,QAAQ,CAAC,IAAI,EAAElM,QAAQ,CAACE,MAAM,EAAE,CAAC;KAEjC;;GAGD,MAAMzR,GAAG,GAAGuR,QAAQ,CAACE,MAAM,EAAE;GAC7B,IAAIzR,GAAG,KAAKrT,KAAK,CAACqT,GAAG,EACrB;KACCuR,QAAQ,CAACsL,MAAM,CAAClwB,KAAK,CAACqT,GAAG,CAAC;KAC1Byd,QAAQ,CAAC9wB,KAAK,CAACqT,GAAG,EAAEA,GAAG,CAAC;;GAGzB,IAAIrT,KAAK,CAACyS,UAAU,EACpB;KACC,MAAMgd,GAAG,GAAG7K,QAAQ,CAACW,MAAM,EAAE;KAC7B,IAAIkK,GAAG,KAAKzvB,KAAK,CAACyS,UAAU,CAACgd,GAAG,EAChC;OACC7K,QAAQ,CAACkO,MAAM,CAAC9yB,KAAK,CAACyS,UAAU,CAACgd,GAAG,IAAI,IAAI,CAAC;OAC7CqB,QAAQ,CAAC9wB,KAAK,CAACyS,UAAU,CAACgd,GAAG,IAAI,IAAI,EAAEA,GAAG,CAAC;;KAG5C,MAAMhpB,MAAM,GAAGme,QAAQ,CAAChe,SAAS,EAAE;KACnC,IAAIH,MAAM,KAAKzG,KAAK,CAACyS,UAAU,CAAChM,MAAM,EACtC;OACCme,QAAQ,CAACzb,SAAS,CAACnJ,KAAK,CAACyS,UAAU,CAAChM,MAAM,IAAI,IAAI,CAAC;OACnDqqB,QAAQ,CAAC9wB,KAAK,CAACyS,UAAU,CAAChM,MAAM,IAAI,IAAI,EAAEA,MAAM,CAAC;;;CAGpD;;CAEA;CACA;CACA,SAAS2qB,kBAAkB,CAACxqC,QAAkB,EAAE4qC,QAA4B,EAAEV,QAAuB,EACrG;GACC,MAAMiC,eAAe,GAAGnsC,QAAQ,CAACyP,kBAAkB,EAAE;GACrD,MAAMgD,WAAW,GAAGzS,QAAQ,CAAC4Q,cAAc,EAAE;GAC7C,MAAMnK,IAAI,GAAGzG,QAAQ,CAACU,cAAc,EAAE;GAEtC,IAAIsoC,+BAAe,CAACmD,eAAe,CAAC,KAAK,CAAC7B,mBAAmB,CAAC7jC,IAAI,CAAC,IAAIykC,kBAAkB,CAACzkC,IAAI,CAAC,CAAC,EAChG;KACC0lC,eAAe,CAACztC,MAAM,CAACsB,QAAQ,CAAC;KAChCqqC,cAAc,CAAC8B,eAAe,EAAEvB,QAAQ,EAAEV,QAAQ,CAAC;KACnDA,QAAQ,CAAC,IAAI,EAAEiC,eAAe,CAACjO,MAAM,EAAE,CAAC;;GAGzC,IAAI8K,+BAAe,CAACv2B,WAAW,CAAC,IAAI,CAACw4B,iBAAiB,CAACxkC,IAAI,CAAC,EAC5D;KACCwlC,mBAAmB,CAACx5B,WAAW,CAAC;KAChC43B,cAAc,CAAC53B,WAAW,EAAEm4B,QAAQ,EAAEV,QAAQ,CAAC;KAC/CA,QAAQ,CAAC,IAAI,EAAEz3B,WAAW,CAACyrB,MAAM,EAAE,CAAC;;CAEtC;CAEA,SAAS+N,mBAAmB,CAAC9yC,IAAiB,EAC9C;GACC,MAAM0E,QAAQ,GAAG1E,IAAI,CAAC8C,WAAW,EAAE;GACnC,MAAM4V,cAAc,GAAGhU,QAAQ,CAACN,MAAM;GAEtC,KAAK,IAAI6uC,CAAC,GAAGv6B,cAAc,GAAG,CAAC,EAAEu6B,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAC5C;KACCjzC,IAAI,CAAC2P,WAAW,CAACjL,QAAQ,CAACuuC,CAAC,CAAC,CAAC;;GAG9BjzC,IAAI,CAAC4P,MAAM,EAAE;GAEb,OAAOlL,QAAQ,CAACkc,GAAG,CAAEhc,KAAK,IAAKA,KAAK,CAAC0T,SAAS,EAAE,CAAC;CAClD;;;;;;;;CClXwC;AAGxC,CAAO,MAAM46B,eAAe,SAASppC,UAAU,CAC/C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAEd,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,WAAW;;CA6CpB;CAAC,iCAzCA;GACC,IAAI,CAAC4I,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BsP,+BAAe,EACd9L,KAAK,IAAc;KACnB,MAAMzU,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;OACC,OAAO,KAAK;;KAGb,OAAO,IAAI,CAAC8J,SAAS,EAAE,CAACmI,eAAe,CACtCwC,KAAK,CAACgM,QAAQ,GAAGK,uCAAuB,GAAGD,sCAAsB,EACjE;OAAEpM,KAAK;OAAEi+B,YAAY,EAAE;MAAM,CAC7B;IACD,EACDz4B,uCAAuB,CACvB;;GAGD,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/B4P,sCAAsB,EACtB,MAAe;KACd,MAAM7gB,SAAS,GAAGuR,6BAAa,EAAE;KAEjC,OAAO,CAACohC,kBAAkB,CAAC3yC,SAAS,CAAC;IACrC,EACDsR,oCAAoB,CACpB,EAED,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B6P,uCAAuB,EACvB,MAAe;KACd,MAAM9gB,SAAS,GAAGuR,6BAAa,EAAE;KAEjC,OAAO,CAACohC,kBAAkB,CAAC3yC,SAAS,CAAC;IACrC,EACDsR,oCAAoB,CACpB,CACD;CACF;CAGD,SAASqhC,kBAAkB,CAAC3yC,SAAgC,EAC5D;GACC,IAAI,CAACwR,iCAAiB,CAACxR,SAAS,CAAC,EACjC;KACC,OAAO,KAAK;;GAGb,MAAMM,UAAmB,GAAGN,SAAS,CAACM,UAAU,EAAE;GAClD,MAAM6d,UAAU,GAAG7d,UAAU,GAAGN,SAAS,CAACE,KAAK,GAAGF,SAAS,CAACC,MAAM;GAClE,MAAMoQ,SAAS,GAAG8N,UAAU,CAAC/d,OAAO,EAAE;GAEtC,IAAIwyC,+BAAe,CAACviC,SAAS,CAAC,IAAI8N,UAAU,CAAC1I,MAAM,KAAK,CAAC,EACzD;KACC,OAAO,IAAI;;GAGZ,MAAMhO,UAAU,GAAGgK,oCAAmB,CACrCpB,SAAS,EACR9Q,IAAiB,IAAKsF,8BAAc,CAACtF,IAAI,CAAC,IAAI,CAACA,IAAI,CAACyF,QAAQ,EAAE,CAC/D;GAED,OAAO4tC,+BAAe,CAACnrC,UAAU,CAAC,IAAI0W,UAAU,CAAC1I,MAAM,KAAK,CAAC;CAC9D;;;;;;;;CCjEyB;CAAA;CAAA;CAAA;AAYzB,CAAO,MAAMo9B,UAAU,SAASxpC,UAAU,CAC1C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAEd,4CAAI;KACJ,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,MAAM;;GAGd,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAACkxC,wBAAQ,EAAEC,4BAAY,CAAC;;GAGhCrpC,YAAY,GACZ;KACC,OAAO;OACNu+B,IAAI,EAAE,OAAyB;SAC9BjiC,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAEA,IAAI,CAACuU,QAAQ,EAAE,KAAK,GAAG,GAAGk/B,+BAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAGA,+BAAe,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;YA2BvF;UACD;;SACD9sC,QAAQ,EAAE;QACV,CAAC;OACF,GAAG,EAAE,OAAyB;SAC7BF,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAE0zC,mCAAmB;YACzB;UACD;SACD/sC,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACNs+B,IAAI,EAAG1mC,WAAqB,IAAyB;SACpD,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SACjD,MAAMxC,IAAI,GAAGuC,MAAM,CAACqH,aAAa,CAAC;WAAEC,IAAI,EAAE;UAAQ,CAAC;SACnD,IAAI7H,WAAW,CAAC2xC,WAAW,EAAE,KAAK,QAAQ,EAC1C;WACC3zC,IAAI,CAAC4zC,QAAQ,CAAC,GAAG,CAAC;;SAGnB,OAAO;WACN5zC;UACA;QACD;OACD2oC,QAAQ,EAAG3mC,WAAwB,IAAyB;SAC3D,MAAMO,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAK;UACxC;;MAEF;;GAGFQ,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CAAC;SACPoO,SAAS,EAAEkiC;QACX,CAAC;OACF9hC,SAAS,EAAE;SACVi3B,IAAI,EAAE,MAAM;SACZC,QAAQ,EAAE;;MAEX;;;;;;;;;CAsJH;CAAC,iCA3IA;GACC,IAAI,CAACl+B,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BmiC,2CAA2B,EAC3B,MAAM;KACLC,0BAAU,CAAC,IAAI,CAACtpC,gBAAgB,EAAE,EAAE,QAAQ,CAAC;KAE7C,OAAO,IAAI;IACX,EACDuH,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BqiC,6CAA6B,EAC7B,MAAM;KACLD,0BAAU,CAAC,IAAI,CAACtpC,gBAAgB,EAAE,EAAE,QAAQ,CAAC;KAE7C,OAAO,IAAI;IACX,EACDuH,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BsiC,mCAAmB,EACnB,MAAM;KACLC,0BAAU,CAAC,IAAI,CAACzpC,gBAAgB,EAAE,CAAC;KAEnC,OAAO,IAAI;IACX,EACDuH,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BuD,wCAAwB,EACxB,MAAe;KACd,OAAOi/B,0CAA0B,EAAE;IACnC,EACDniC,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B4P,sCAAsB,EACtB,MAAM,yCAAC,IAAI,0CAAoB,CAAC,CAAC,EACjC6yB,yCAAyB,CACzB,CACD;CACF;CAAC,kCAGD;GACC,IAAI,CAAC5pC,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,eAAe,EAAE,MAAc;KAC/E,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,mDAAmD,CAAC;KACtEiH,MAAM,CAAC5G,YAAY,CAAC,QAAQ,CAAC;KAC7B4G,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,+BAA+B,CAAC,CAAC;KAClEF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAIJ,MAAM,CAAC7F,QAAQ,EAAE,EACrB;WACC,IAAI,CAACjC,SAAS,EAAE,CAACmI,eAAe,CAACshC,mCAAmB,CAAC;UACrD,MAED;WACC,IAAI,CAACzpC,SAAS,EAAE,CAACmI,eAAe,CAACqhC,6CAA6B,CAAC;;QAEhE,CAAC;MACF,CAAC;KAEF,OAAO1hC,MAAM;IACb,CAAC;GAEF,IAAI,CAAC9H,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,eAAe,EAAE,MAAc;KAC/E,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,mDAAmD,CAAC;KACtEiH,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,+BAA+B,CAAC,CAAC;KAClEF,MAAM,CAAC5G,YAAY,CAAC,QAAQ,CAAC;KAC7B4G,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OACxB,IAAI,CAAC4J,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAY;SACnC,IAAIJ,MAAM,CAAC7F,QAAQ,EAAE,EACrB;WACC,IAAI,CAACjC,SAAS,EAAE,CAACmI,eAAe,CAACshC,mCAAmB,CAAC;UACrD,MAED;WACC,IAAI,CAACzpC,SAAS,EAAE,CAACmI,eAAe,CAACmhC,2CAA2B,CAAC;;QAE9D,CAAC;MACF,CAAC;KAEF,OAAOxhC,MAAM;IACb,CAAC;CACH;CAAC,6BAEkB+hC,QAAgB,EACnC;GACC,MAAM3zC,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;KACC,OAAO,KAAK;;GAGb,MAAM4zC,uBAAyC,2CAAG,IAAI,4DAA6B5zC,SAAS,CAAC;GAC7F,IAAI6zC,UAAU,GAAG,CAAC;GAClB,KAAK,MAAMtvC,WAAW,IAAIqvC,uBAAuB,EACjD;KACC,IAAIE,2BAAW,CAACvvC,WAAW,CAAC,EAC5B;OACCsvC,UAAU,GAAGlwB,IAAI,CAACoD,GAAG,CAACgtB,6BAAa,CAACxvC,WAAW,CAAC,GAAG,CAAC,EAAEsvC,UAAU,CAAC;MACjE,MACI,IAAIjB,+BAAe,CAACruC,WAAW,CAAC,EACrC;OACC,MAAM+K,MAAM,GAAG/K,WAAW,CAAC0D,SAAS,EAAE;OACtC,IAAI,CAAC6rC,2BAAW,CAACxkC,MAAM,CAAC,EACxB;SACC,MAAM,IAAI9F,KAAK,CAAC,+DAA+D,CAAC;;OAGjFqqC,UAAU,GAAGlwB,IAAI,CAACoD,GAAG,CAACgtB,6BAAa,CAACzkC,MAAM,CAAC,GAAG,CAAC,EAAEukC,UAAU,CAAC;;;GAI9D,OAAOA,UAAU,IAAIF,QAAQ;CAC9B;CAAC,sCAE2B3zC,SAAyB,EACrD;GACC,MAAMg0C,gBAAgB,GAAGh0C,SAAS,CAACyJ,QAAQ,EAAE;GAC7C,MAAM4F,SAAS,GAAI9P,IAAiB,IAAKsF,8BAAc,CAACtF,IAAI,CAAC,IAAI,CAACA,IAAI,CAACyF,QAAQ,EAAE;GAEjF,IAAIgvC,gBAAgB,CAACrwC,MAAM,KAAK,CAAC,EACjC;KACC,OAAO,IAAIoM,GAAG,CAAC,CACd0B,oCAAmB,CAACzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EAAEiP,SAAS,CAAC,EAC1DoC,oCAAmB,CAACzR,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE,EAAEiP,SAAS,CAAC,CACzD,CAAC;;GAGH,OAAO,IAAIU,GAAG,CACbikC,gBAAgB,CAAC7zB,GAAG,CAAE8zB,CAAC,IAAMpvC,8BAAc,CAACovC,CAAC,CAAC,GAAGA,CAAC,GAAGxiC,oCAAmB,CAACwiC,CAAC,EAAE5kC,SAAS,CAAE,CAAC,CACxF;CACF;;;;;;;;;;;;;AC1SD,CAI4B;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAO5B,CAAe,MAAM6kC,WAAW,SAAS5pC,6BAAY,CACrD;GAMChB,WAAW,CAAC2xB,aAAa,EACzB;KACC,KAAK,EAAE;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAPO;;KAAI;OAAA;OAAA,OACO;;KAAI;OAAA;OAAA,OACC,IAAIlR,2BAAW;;KAAE;OAAA;OAAA,OACjB;;KAK/B,IAAI,CAACxf,iBAAiB,CAAC,8BAA8B,CAAC;KAEtD,MAAM2b,OAA2B,GAAGpiB,cAAI,CAACqN,aAAa,CAAC8pB,aAAa,CAAC,GAAGA,aAAa,GAAG,EAAE;KAE1F,IAAI,CAACmE,aAAa,CAAClZ,OAAO,CAACmJ,UAAU,CAAC;KACtC,IAAI,CAAC7G,oBAAoB,CAACtC,OAAO,CAAC0B,MAAM,CAAC;;GAG1Ca,IAAI,GACJ;KACC,IAAI,CAACkP,QAAQ,EAAE,CAACZ,cAAc,CAAC;OAAEC,iBAAiB,EAAE;MAAM,CAAC;KAC3D,IAAI,CAACW,QAAQ,EAAE,CAAClP,IAAI,EAAE;;GAGvBC,IAAI,GACJ;KACC,IAAI,CAACiP,QAAQ,EAAE,CAACC,KAAK,EAAE;;GAGxBC,OAAO,GACP;KACC,OAAO,4CAAI,0BAAY,IAAI,IAAI,4CAAI,sBAAQA,OAAO,EAAE;;GAGrDztB,OAAO,GACP;KACC,IAAI,CAACutB,QAAQ,EAAE,CAACvtB,OAAO,EAAE;;GAG1Bg1B,aAAa,CAACxpB,SAAsB,EACpC;KACC,IAAI9R,cAAI,CAACgH,aAAa,CAAC8K,SAAS,CAAC,EACjC;OACC,4CAAI,kCAAeA,SAAS;;;GAI9BypB,aAAa,GACb;KACC,+CAAO,IAAI;;GAGZ1H,QAAQ,GACR;KACC,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,MAAMtI,UAAU,GAAG,IAAI,CAACgQ,aAAa,EAAE;OACvC,MAAMC,IAAI,GAAGjQ,UAAU,CAACpG,qBAAqB,EAAE;OAC/C,MAAMsW,eAAe,GAAGD,IAAI,CAACvW,KAAK;OAElC,4CAAI,wBAAU,IAAIkP,gBAAK,CAAC;SACvBC,QAAQ,EAAE,IAAI;SACdG,UAAU,EAAE,IAAI;SAChBD,OAAO,EAAE,CAAC;SACV1vB,OAAO,EAAE+D,aAAG,CAAChC,MAAM,oBAAC;yDAC+B,CAA+B;QAChF,CAA0B;QAC1B,CAA6B;;KAE/B,GAJqD,4CAAI,kCAAciC,IAAI,CAAC,IAAI,CAAC,EAC7E,IAAI,CAACynC,gBAAgB,EAAE,EACvB,IAAI,CAACC,mBAAmB,EAAE,CAE7B;SACD5U,WAAW,EAAE,IAAI,CAACH,aAAa,EAAE;SACjCzX,MAAM,EAAE;WACP0Q,OAAO,EAAE,MAAM;aACd,IAAI,CAAC3rB,IAAI,CAAC,SAAS,CAAC;YACpB;WACD4rB,SAAS,EAAE,MAAM;aAChB,IAAI,CAAC5rB,IAAI,CAAC,WAAW,CAAC;YACtB;WACD6rB,MAAM,EAAG/jB,KAAK,IAAK;aAClB,MAAMwhB,KAAK,GAAGxhB,KAAK,CAAC2R,SAAS,EAAE;aAC/B,MAAMoQ,UAAU,GAAGP,KAAK,CAACM,iBAAiB,EAAE,CAAC8d,WAAW;aACxD,MAAM5d,UAAU,GAAI8I,eAAe,GAAG,CAAC,GAAK/I,UAAU,GAAG,CAAE;aAC3D,MAAM6J,UAAU,GAAGpI,gBAAK,CAAC1R,SAAS,CAAC,iBAAiB,CAAC,GAAG0R,gBAAK,CAAC1R,SAAS,CAAC,aAAa,CAAC;aAEtF0P,KAAK,CAACqK,QAAQ,CAAC;eAAE7qB,MAAM,EAAE+gB,UAAU,GAAG,CAAC,GAAG6J;cAAY,CAAC;aACvDpK,KAAK,CAACU,SAAS,CAAC;eAAEF,UAAU,EAAEA,UAAU,GAAGwB,gBAAK,CAAC1R,SAAS,CAAC,iBAAiB;cAAG,CAAC;aAEhF,4CAAI,wCAAoB,IAAI;aAC5B,4CAAI,oCAAiB,CAAC,EAAE,CAAC;;;QAG3B,CAAC;;KAGH,+CAAO,IAAI;;GAGZ4tB,gBAAgB,GAChB;KACC,OAAO,4CAAI,oBAAO/pB,QAAQ,CAAC,MAAM,EAAE,MAAM;OACxC,MAAMkqB,OAAO,GAAG,EAAE;OAClB,KAAK,IAAIz1B,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,GAAG,EAAEA,KAAK,EAAE,EACxC;SACC,MAAMwtB,GAAG,GAAG1oB,IAAI,CAAC4F,KAAK,CAAC1K,KAAK,GAAG,EAAE,CAAC;SAClC,MAAM01B,MAAM,GAAG11B,KAAK,GAAG,EAAE;SAEzBy1B,OAAO,CAACzwC,IAAI,CAAC4I,aAAG,CAAChC,MAAM,sBAAC;;;qBAGT,CAAa;kBAChB,CAAU;;KAEtB,GAHiB8pC,MAAM,GAAG,CAAC,EACblI,GAAG,GAAG,CAAC,EAEnB;;OAGH,OAAO5/B,aAAG,CAAChC,MAAM,sBAAC;;;oBAGH,CAAmC;OAChD,CAAU;IACZ,GAFiB,4CAAI,sCAAkBiC,IAAI,CAAC,IAAI,CAAC,EAC7C4nC,OAAO;MAEX,CAAC;;GAGHF,mBAAmB,GACnB;KACC,OAAO,4CAAI,oBAAOhqB,QAAQ,CAAC,SAAS,EAAE,MAAM;OAC3C,OAAO3d,aAAG,CAAChC,MAAM,kBAAC,yDAAuD;MACzE,CAAC;;CA4CJ;CAAC,2BAzCiBgK,KAAiB,EAClC;GACC,IAAI,4CAAI,0CAAsBA,KAAK,CAACwR,MAAM,IAAI5a,aAAG,CAACmpC,QAAQ,CAAC//B,KAAK,CAACwR,MAAM,EAAE,iCAAiC,CAAC,EAC3G;KACC,MAAM;OAAEomB,GAAG;OAAEkI;MAAQ,GAAG9/B,KAAK,CAACwR,MAAM,CAAC6C,OAAO;KAC5C,4CAAI,oCAAiBujB,GAAG,EAAEkI,MAAM;KAChC,4CAAI,wCAAoB9/B,KAAK,CAACwR,MAAM;;CAEtC;CAAC,yBAEYxR,KAAiB,EAC9B;GACC,4CAAI,IAAI,uCACR;KACC,MAAM;OAAE43B,GAAG;OAAEkI;MAAQ,GAAG,4CAAI,sCAAkBzrB,OAAO;KACrD,IAAI,CAACnc,IAAI,CAAC,UAAU,EAAE;OAAEy/B,IAAI,EAAEC,GAAG;OAAEoI,OAAO,EAAEF;MAAQ,CAAC;;CAEvD;CAAC,0BAEenI,IAAY,EAAEqI,OAAe,EAC7C;GACC,IAAI51B,KAAK,GAAG,CAAC;GACb,KAAK,MAAM61B,GAAG,IAAI,IAAI,CAACP,gBAAgB,EAAE,CAAClwC,QAAQ,EAClD;KACC,MAAM0wC,MAAM,GAAGhxB,IAAI,CAAC4F,KAAK,CAAC1K,KAAK,GAAG,EAAE,CAAC;KACrC,MAAM+1B,SAAS,GAAG/1B,KAAK,GAAG,EAAE;KAC5B,MAAM6G,QAAQ,GAAGivB,MAAM,GAAGvI,IAAI,IAAIwI,SAAS,GAAGH,OAAO;KACrD,IAAI/uB,QAAQ,EACZ;OACCra,aAAG,CAACQ,QAAQ,CAAC6oC,GAAG,EAAE,YAAY,CAAC;MAC/B,MAED;OACCrpC,aAAG,CAACS,WAAW,CAAC4oC,GAAG,EAAE,YAAY,CAAC;;KAGnC71B,KAAK,EAAE;;GAGR,IAAI,CAACu1B,mBAAmB,EAAE,CAAC/tC,WAAW,GAAG+lC,IAAI,IAAIqI,OAAO,GAAI,GAAErI,IAAK,MAAKqI,OAAQ,EAAC,GAAG,EAAE;CACvF;;CCtLD;AACA,CAoDO,MAAMI,2BAA2C,GAAG92C,6BAAa,CAAC,6BAA6B,CAAC;CAAC;CAAA;CAAA;CAAA;AAExG,CAAO,MAAM+2C,WAAW,SAASzrC,UAAU,CAC3C;GAGCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAJa;;KAM3B,4CAAI;KACJ,4CAAI;KACJ,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,OAAO;;GAGf,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CACNmzC,0BAAS,EACTC,8BAAa,EACbC,6BAAY,CACZ;;GAGFvrC,YAAY,GACZ;KACC,OAAO;OACNgU,KAAK,EAAE,OAAyB;SAC/B1X,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAE21C,iCAAgB;YACtB;UACD;SACDhvC,QAAQ,EAAE;QACV,CAAC;OACFgY,EAAE,EAAE,OAAyB;SAC5BlY,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAE41C,oCAAmB;YACzB;UACD;SACDjvC,QAAQ,EAAE;QACV,CAAC;OACF2X,EAAE,EAAE,OAAyB;SAC5B7X,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAE61C,qCAAoB,EAAE;aAC5B7xC,KAAK,EAAGW,iBAAqC,IAAyB;eACrE,OAAOxB,mBAAmB,CAACwB,iBAAiB,CAAC;;YAE9C;UACD;SACDgC,QAAQ,EAAE;QACV,CAAC;OACFimC,EAAE,EAAE,OAAyB;SAC5BnmC,UAAU,EAAGzG,IAAuB,IAAgC;WACnE,OAAO;aACNA,IAAI,EAAE61C,qCAAoB,CAACC,sCAAqB,CAACC,GAAG,CAAC;aACrD/xC,KAAK,EAAGW,iBAAqC,IAAyB;eACrE,OAAOxB,mBAAmB,CAACwB,iBAAiB,CAAC;;YAE9C;UACD;SACDgC,QAAQ,EAAE;QACV;MACD;;GAGFyD,YAAY,GACZ;KACC,OAAO;OACN+T,KAAK,EAAE,MAA0B;SAChC,MAAM5b,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAS;UAC5C;QACD;OACDmsC,QAAQ,EAAE,MAA0B;SACnC,MAAMzzC,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE;YAAM;UACzC;QACD;OACDosC,SAAS,EAAGj2C,IAAmB,IAAyB;SACvD,MAAMuC,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAACqH,aAAa,CAAC;aAAEC,IAAI,EAAE7J,IAAI,CAACk2C,SAAS,EAAE,GAAG,IAAI,GAAG;YAAM;UACnE;;MAEF;;GAGF7rC,cAAc,GACd;KACC,OAAO;OACNpH,KAAK,EAAE,CACN;SACCoO,SAAS,EAAEmkC,0BAAS;SACpBlkC,QAAQ,EAAI6kC,SAAoB,IAAK;WACpC,IAAIA,SAAS,CAACrgC,eAAe,EAAE,KAAK,CAAC,EACrC;aACCqgC,SAAS,CAACvmC,MAAM,EAAE;aAElB,OAAO,IAAI;;WAGZ,OAAO,KAAK;;QAEb,EACD;SACCyB,SAAS,EAAEokC,8BAAa;SACxBnkC,QAAQ,EAAI8kC,aAA4B,IAAK;WAC5CA,aAAa,CAACtzC,WAAW,EAAE,CAACuG,OAAO,CAAEzE,KAAgC,IAAK;aACzE,IAAIY,qBAAqB,CAACZ,KAAK,CAAC,EAChC;eACC,MAAM4M,SAAS,GAAGxL,oCAAoB,EAAE;eACxCpB,KAAK,CAACqC,OAAO,CAACuK,SAAS,CAAC;eACxBA,SAAS,CAACjM,MAAM,CAACX,KAAK,CAAC;;YAExB,CAAC;WAEF,OAAO,KAAK;;QAEb,CACD;OACD6M,SAAS,EAAE;SACV0M,KAAK,EAAE,OAAO;SACd63B,QAAQ,EAAE,IAAI;SACdC,SAAS,EAAE;;MAEZ;;GAuJFprC,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAcA,OAAO,EAAE;;;CAG9B;CAAC,kCA5JA;GACC,IAAI,CAACN,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,OAAO,EAAE,MAAc;KACvE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,kDAAkD,CAAC;KACrEiH,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC1DF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAACmI,eAAe,CAAC4iC,2BAA2B,EAAE;SAC7DxlB,UAAU,EAAEzd,MAAM,CAACpH,YAAY;QAC/B,CAAC;MACF,CAAC;KAEF,OAAOoH,MAAM;IACb,CAAC;CACH;CAAC,gCAGD;GACC,IAAI,CAAC5H,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/B2kC,qCAAoB,EACpB,CAAC;KAAEnB,OAAO;KAAErI;IAAM,KAAK;KACtB,MAAMyJ,QAAQ,GAAGlyB,IAAI,CAACoD,GAAG,CAAC,CAAC,EAAExb,cAAI,CAACuqC,QAAQ,CAAC1J,IAAI,CAAC,CAAC;KACjD,MAAM2J,WAAW,GAAGpyB,IAAI,CAACoD,GAAG,CAAC,CAAC,EAAExb,cAAI,CAACuqC,QAAQ,CAACrB,OAAO,CAAC,CAAC;KACvD,MAAMiB,SAAS,GAAGM,+CAA8B,CAACH,QAAQ,EAAEE,WAAW,EAAE,KAAK,CAAC;KAC9E3kC,yCAAwB,CAACskC,SAAS,CAAC;KAEnC,MAAMj6B,eAA4B,GAAGi6B,SAAS,CAACl6B,kBAAkB,EAAE;KACnE,IAAIha,2BAAW,CAACia,eAAe,CAAC,EAChC;OACCA,eAAe,CAACxG,MAAM,EAAE;;KAGzB,OAAO,IAAI;IACX,EACDgF,uCAAuB,CACvB,EACD,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/B4jC,2BAA2B,EAC1B3jC,OAAO,IAAc;KACrB,IAAI,CAACpN,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,IAAI,CAACpN,cAAI,CAACgH,aAAa,CAACoG,OAAO,CAACme,UAAU,CAAC,EAC3E;OACC,OAAO,KAAK;;KAGb,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,IAAI,4CAAI,8BAAcgQ,aAAa,EAAE,KAAKnuB,OAAO,CAACme,UAAU,EAC5D;SACC,4CAAI,8BAAc5G,IAAI,EAAE;SAExB,OAAO,IAAI;;OAGZ,4CAAI,8BAAcre,OAAO,EAAE;;KAG5B,4CAAI,gCAAgB,IAAI8pC,WAAW,CAAC;OACnC7kB,UAAU,EAAEne,OAAO,CAACme,UAAU;OAC9BzH,MAAM,EAAE;SACPvC,QAAQ,EAAG5Q,KAAgB,IAAK;WAC/B,IAAI,CAAC3K,SAAS,EAAE,CAACmI,eAAe,CAAC2jC,qCAAoB,EAAEnhC,KAAK,CAACmG,OAAO,EAAE,CAAC;WACvE,4CAAI,8BAAc8N,IAAI,EAAE;UACxB;SACD6P,SAAS,EAAE,MAAM;WAChB,4CAAI,gCAAgB,IAAI;;;MAG1B,CAAC;KAEF,4CAAI,8BAAc9P,IAAI,EAAE;KAExB,OAAO,IAAI;IACX,EACDnX,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EACnB,MAAe;KACd,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;OACC,4CAAI,8BAAc4qB,IAAI,EAAE;;KAGzB,OAAO,KAAK;IACZ,EACDpX,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BjT,yBAAyB,EACzB,MAAe;KACd,OAAO,4CAAI,kCAAkB,IAAI,IAAI,4CAAI,8BAAc65B,OAAO,EAAE;IAChE,EACDvmB,oCAAoB,CACpB,CACD;CACF;CAAC,iCAGD;GACC,MAAM2kC,eAA6C,GAAG,IAAIrzC,GAAG,EAAE;GAC/D,MAAMszC,mBAAmB,GAAIR,SAAoB,IAAK;KACrD,MAAMt0B,OAAO,GAAGs0B,SAAS,CAACtlC,MAAM,EAAE;KAClC,MAAM+lC,YAAY,GAAG,IAAI,CAACrsC,SAAS,EAAE,CAACoqB,eAAe,CAAC9S,OAAO,CAAC;KAC9D,IAAI+0B,YAAY,IAAI,CAACF,eAAe,CAAC3lC,GAAG,CAAC8Q,OAAO,CAAC,EACjD;OACC,MAAMyoB,cAAc,GAAGuM,mCAAkB,CACxCV,SAAS,EACTS,YAAY,EACZ,IAAI,CAACpsC,gBAAgB,EAAE,EACvB,IAAI,CACJ;OAEDksC,eAAe,CAACjyC,GAAG,CAACod,OAAO,EAAEyoB,cAAc,CAAC;;IAE7C;GAED,IAAI,CAAC7/B,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACy3B,wBAAwB,CACxCwT,0BAAS,EACRvT,aAAa,IAAK;KAClB,KAAK,MAAM,CAACpgB,OAAO,EAAEqgB,QAAQ,CAAC,IAAID,aAAa,EAC/C;OACC,IAAIC,QAAQ,KAAK,SAAS,EAC1B;SACC,IAAI,CAAC33B,SAAS,EAAE,CAACwN,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;WAC5C,MAAMm+B,SAAS,GAAGp0B,6BAAa,CAACF,OAAO,CAAC;WACxC,IAAIi1B,6BAAY,CAACX,SAAS,CAAC,EAC3B;aACCQ,mBAAmB,CAACR,SAAS,CAAC;;UAE/B,CAAC;QACF,MACI,IAAIjU,QAAQ,KAAK,WAAW,EACjC;SACC,MAAMoI,cAAc,GAAGoM,eAAe,CAACnwC,GAAG,CAACsb,OAAO,CAAC;SACnD,IAAIyoB,cAAc,KAAKxoC,SAAS,EAChC;WACCwoC,cAAc,CAACyM,eAAe,EAAE;WAChCL,eAAe,CAACl0B,MAAM,CAACX,OAAO,CAAC;;;;IAIlC,CACD,CACD;CACF;;;;;;;;;CCpVD;AACA,CAWO,MAAMm1B,WAAW,SAASnjC,wBAAQ,CACzC;GACC,OAAOhP,OAAO,GACd;KACC,OAAO,SAAS;;GAGjB,OAAO+I,KAAK,CAAC5N,IAAiB,EAC9B;KACC,OAAO,IAAIg3C,WAAW,CAACh3C,IAAI,CAAC8T,MAAM,EAAE9T,IAAI,CAAC6N,KAAK,CAAC;;GAGhD9D,WAAW,CAACuD,IAAY,EAAEqK,GAAa,EACvC;KACC,KAAK,CAACrK,IAAI,EAAEqK,GAAG,CAAC;;GAGjB7J,SAAS,CAACC,MAAoB,EAC9B;KAAA;KACC,MAAM/K,OAAO,GAAG,KAAK,CAAC8K,SAAS,CAACC,MAAM,CAAC;KACvC,IAAIxJ,cAAI,CAACsH,cAAc,CAACkC,MAAM,qCAANA,MAAM,CAAEG,KAAK,qBAAb,cAAeu6B,OAAO,CAAC,EAC/C;OACC38B,aAAG,CAACQ,QAAQ,CAACtJ,OAAO,EAAE+K,MAAM,CAACG,KAAK,CAACu6B,OAAO,CAAC;;KAG5C,OAAOzlC,OAAO;;GAGf,OAAOyL,UAAU,CAACC,cAAkC,EACpD;KACC,MAAM1O,IAAI,GAAGi3C,kBAAkB,CAACvoC,cAAc,CAACpB,IAAI,CAAC;KACpDtN,IAAI,CAACwL,SAAS,CAACkD,cAAc,CAAC9M,MAAM,CAAC;KACrC5B,IAAI,CAACmd,SAAS,CAACzO,cAAc,CAAC0O,MAAM,CAAC;KACrCpd,IAAI,CAACqd,OAAO,CAAC3O,cAAc,CAACmK,IAAI,CAAC;KACjC7Y,IAAI,CAACsd,QAAQ,CAAC5O,cAAc,CAAC6O,KAAK,CAAC;KAEnC,OAAOvd,IAAI;;GAGZ+O,UAAU,GACV;KACC,OAAO;OACN,GAAG,KAAK,CAACA,UAAU,EAAE;OACrBlG,IAAI,EAAE;MACN;;GAGFwxB,mBAAmB,GACnB;KACC,OAAO,KAAK;;GAGbyC,YAAY,GACZ;KACC,OAAO,IAAI;;CAEb;AAEA,CAAO,SAASma,kBAAkB,CAAC3pC,IAAI,GAAG,EAAE,EAC5C;GACC,OAAOiC,qCAAqB,CAAC,IAAIynC,WAAW,CAAC1pC,IAAI,CAAC,CAAC;CACpD;AAEA,CAAO,SAAS4pC,cAAc,CAACl3C,IAAoC,EACnE;GACC,OAAOA,IAAI,YAAYg3C,WAAW;CACnC;;CCrEwC;AAKxC,CAAO,MAAMG,aAAa,SAASrtC,UAAU,CAC7C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAEd,4CAAI;;GAGL,OAAOR,OAAO,GACd;KACC,OAAO,SAAS;;GAGjB,OAAOqI,QAAQ,CAAC7H,MAAkB,EAClC;KACC,OAAO,CAAC20C,WAAW,CAAC;;GAGrB7sC,YAAY,GACZ;KACC,OAAO,IAAI;;GAGZC,YAAY,GACZ;KACC,OAAO;OACNq+B,OAAO,EAAE,CAACzmC,WAAqB,EAAEhC,IAAU,KAAkB;SAC5D,MAAMuC,MAAM,GAAG,IAAI,CAACgI,SAAS,EAAE,CAAC/H,eAAe,EAAE;SAEjD,OAAO;WACNxC,IAAI,EAAEuC,MAAM,CAAC0G,UAAU,CAACjH,WAAW,CAACuF,cAAc,EAAE;UACpD;;MAEF;;GAGF8C,cAAc,GACd;KACC,OAAO;OACNoH,SAAS,EAAE;SACVg3B,OAAO,EAAE;;MAEV;;CAmCH;CAAC,iCA/BA;GACC,MAAM2O,iBAAiB,GAAIvwC,QAAkB,IAAkB;KAC9D,OAAOowC,kBAAkB,CAACpwC,QAAQ,CAACU,cAAc,EAAE,CAAC;IACpD;GAED,MAAM8vC,eAAe,GAAI/pC,IAAY,IAAK;KACzC,MAAM2S,KAAuB,GAAG,8BAA8B,CAAC8c,IAAI,CAACzvB,IAAI,CAAC;KACzE,IAAI2S,KAAK,KAAK,IAAI,EAClB;OACC,OAAO,IAAI;;KAGZ,MAAMq3B,aAAa,GAAGr3B,KAAK,CAAC,CAAC,CAAC,CAAC7b,MAAM;KACrC,MAAMywB,WAAW,GAAG5U,KAAK,CAACX,KAAK;KAC/B,MAAMi4B,SAAS,GAAG1iB,WAAW,GAAGyiB,aAAa;KAE7C,OAAO;OACNzV,GAAG,EAAE0V,SAAS;OACd3V,KAAK,EAAE/M;MACP;IACD;GAED,IAAI,CAACpqB,eAAe,CACnB,GAAG+sC,yCAAyB,CAC3B,IAAI,CAAChtC,gBAAgB,EAAE,EACvB6sC,eAAe,EACfL,WAAW,EACXI,iBAAiB,CACjB,CACD;CACF;;;;;;;;;;;CCxFM,SAASK,oBAAoB,CAACnqC,IAAY,EACjD;GACC,IAAI,CAAC/I,cAAI,CAACsH,cAAc,CAACyB,IAAI,CAAC,EAC9B;KACC,OAAO,EAAE;;GAGV,MAAMrK,KAAK,GAAG,EAAE;GAChB,MAAMsK,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,YAAY,CAAC;GACtC,MAAMpJ,MAAM,GAAGmJ,KAAK,CAACnJ,MAAM;GAC3B,KAAK,IAAIhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgD,MAAM,EAAEhD,CAAC,EAAE,EAC/B;KACC,MAAMqM,IAAI,GAAGF,KAAK,CAACnM,CAAC,CAAC;KACrB,IAAIqM,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK,MAAM,EACpC;OACCxK,KAAK,CAACqB,IAAI,CAACd,oCAAoB,EAAE,CAAC;MAClC,MACI,IAAIiK,IAAI,KAAK,IAAI,EACtB;OACCxK,KAAK,CAACqB,IAAI,CAACZ,8BAAc,EAAE,CAAC;MAC5B,MAED;OACCT,KAAK,CAACqB,IAAI,CAACY,+BAAe,CAACuI,IAAI,CAAC,CAAC;;;GAInC,OAAOxK,KAAK;CACb;;;;AC/BA,CAkCO,MAAMy0C,6BAA6C,GAAGl5C,6BAAa,CAAC,+BAA+B,CAAC;CAE3G,MAAMm5C,aAAa,GAAG;GACrBC,IAAI,EAAE,MAAM;GACZC,OAAO,EAAE,SAAS;GAClBC,MAAM,EAAE;CACT,CAAC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAEF,CAAO,MAAMC,aAAa,SAASjuC,UAAU,CAC7C;GASCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAVK;;KAAI;OAAA;OAAA,OACEs1C,aAAa,CAACC;;KAAI;OAAA;OAAA,OACV;;KAAI;OAAA;OAAA,OACG;;KAAI;OAAA;OAAA,OACZ;;KAAI;OAAA;OAAA,OACT,4CAAI,gDAAqBzqC,IAAI,CAAC,IAAI;;KAAC;OAAA;OAAA,OACpC;;KAM1B,4CAAI,sCAAmB9K,MAAM,CAAC2kB,SAAS,CAAC,wBAAwB,CAAC;KACjE,IAAIziB,cAAI,CAACqN,aAAa,yCAAC,IAAI,oCAAiB,EAC5C;OACC,4CAAI;OACJ,4CAAI;;;GAIN,OAAO/P,OAAO,GACd;KACC,OAAO,SAAS;;GAuIjBm2C,oBAAoB,GACpB;KACC,+CAAO,IAAI;;GAGZC,eAAe,GACf;KACC,OAAO,4CAAI,sCAAoBN,aAAa,CAACG,MAAM;;GAGpDI,gBAAgB,GAChB;KACC,OAAO,4CAAI,sCAAoBP,aAAa,CAACE,OAAO;;GAGrDM,cAAc,GACd;KACC,OAAO,4CAAI,0BAAc,IAAI,IAAI,4CAAI,sBAAU7f,OAAO,EAAE;;GAGzDpP,IAAI,CAAC;KAAE+P,MAAM;KAAEmf;IAAS,GAAG,EAAE,EAC7B;KACC,IAAI,IAAI,CAACH,eAAe,EAAE,EAC1B;OACC,4CAAI,gBAAO;SAAEhf;QAAQ;MACrB,MACI,IAAI,CAAC,IAAI,CAACif,gBAAgB,EAAE,EACjC;OACC,4CAAI,oCACFpa,IAAI,CAAC,MAAM;SACX,4CAAI,gBAAO;WAAE7E;UAAQ;QACrB,CAAC,CAAC8F,KAAK,CAAC,MAAM;SACd,IAAIx6B,cAAI,CAACC,UAAU,CAAC4zC,OAAO,CAAC,EAC5B;WACCA,OAAO,EAAE;;QAEV,CAAC;;;GAqQLvtC,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,0BAAc,IAAI,EAC1B;OACC,4CAAI,sBAAUse,IAAI,EAAE;OACpB,4CAAI,wBAAY,IAAI;;;CAGvB;CAAC,iCAtbA;GACC,4CAAI,sCAAmB,IAAI,CAAC5e,SAAS,EAAE,CAACyc,SAAS,CAAC,wBAAwB,EAAE,KAAK,CAAC;GAElF,IAAI,CAACvc,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BgmC,6BAA6B,EAC5B/lC,OAAO,IAAc;KACrB,MAAMgV,OAAO,GAAGpiB,cAAI,CAACqN,aAAa,CAACD,OAAO,CAAC,GAAGA,OAAO,GAAG,EAAE;KAC1D,IAAI,CAACuX,IAAI,CAACvC,OAAO,CAAC;KAElB,OAAO,IAAI;IACX,EACDjM,uCAAuB,CACvB,EACD,IAAI,CAACnQ,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EACnB,MAAe;KACd,4CAAI;KAEJ,OAAO,KAAK;IACZ,EACDwT,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/BjT,yBAAyB,EACzB,MAAe;KACd,OAAO,IAAI,CAAC05C,cAAc,EAAE;IAC5B,EACDpmC,oCAAoB,CACpB,EACD,4CAAI,8EAAmB,IAAI,wEAAqC,MAAM,EAAE,CACxE;CACF;CAAC,4CAGD;GACC,OAAO,IAAI,CAACxH,SAAS,EAAE,CAACsL,qBAAqB,CAAC0C,mBAAmB,EAAGvY,IAAyB,IAAK;KACjG,IAAIA,IAAI,CAAC8V,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC4D,2BAAW,CAAC1Z,IAAI,CAAC0I,SAAS,EAAE,CAAC,EAClE;OACC;;KAGD,IAAI,CAACzG,2BAAW,CAACjC,IAAI,CAACsQ,aAAa,EAAE,CAAC,IAAItQ,IAAI,CAACsQ,aAAa,EAAE,CAAC/I,cAAc,EAAE,KAAK,GAAG,EACvF;OACC,4CAAI;OAEJ;;KAGD,MAAM9G,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAACA,SAAS,CAACwV,WAAW,EAAE,EAC7D;OACC;;KAGD,MAAMrV,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;KAC7C,IAAID,UAAU,KAAKZ,IAAI,CAACsQ,aAAa,EAAE,EACvC;OACC;;KAGD,IAAI,CAAC,IAAI,CAAC2nC,eAAe,EAAE,IAAI,CAAC,IAAI,CAACC,gBAAgB,EAAE,EACvD;OACC,4CAAI;OACJ,4CAAI,wCAAoB,IAAI,CAAC3tC,SAAS,EAAE,CAACoqB,eAAe,CAAC30B,IAAI,CAAC6Q,MAAM,EAAE,CAAC;OACvE,4CAAI,IAAI,uCACR;SACC/E,aAAG,CAACQ,QAAQ,yCAAC,IAAI,uCAAmB,iCAAiC,CAAC;;;KAIxEtM,IAAI,CAACsQ,aAAa,EAAE,CAACV,MAAM,EAAE;KAC7B5P,IAAI,CAAC0V,MAAM,EAAE;KACb,IAAI,CAACwT,IAAI,CAAC;OACT+P,MAAM,EAAE,8CAAM,IAAI,+BAAe;OACjCmf,OAAO,EAAE,8CAAM,IAAI;MACnB,CAAC;IACF,CAAC;CACH;CAAC,kCAGD;GACC,IAAI,CAAC7tC,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,SAAS,EAAE,MAAc;KACzE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnC,MAAMktC,gBAAgB,GAAG,cAAc;KACvC,MAAMC,gBAAgB,GAAG,4CAA4C;KACrE,MAAMC,IAAI,GAAGrrC,aAAG,CAAChC,MAAM,oBAAC;+BACE,CAAmB;IAC7C,GAD4BmtC,gBAAgB,CAC3C;KACDhmC,MAAM,CAACjH,UAAU,CAACmtC,IAAI,CAAC;KACvBlmC,MAAM,CAAC1G,UAAU,CAAC2G,aAAG,CAACC,UAAU,CAAC,yBAAyB,CAAC,CAAC;KAC5DF,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAAC5J,KAAK,EAAE;OAExB,IAAI,IAAI,CAACu3C,gBAAgB,EAAE,EAC3B;SACC;;OAGD,MAAMM,YAAY,GAAG,MAAM;SAC1B,IAAI,CAAC1sC,aAAG,CAACmpC,QAAQ,CAACsD,IAAI,EAAEF,gBAAgB,CAAC,EACzC;WACCvsC,aAAG,CAACS,WAAW,CAACgsC,IAAI,EAAED,gBAAgB,CAAC;WACvCxsC,aAAG,CAACQ,QAAQ,CAACisC,IAAI,EAAEF,gBAAgB,CAAC;;QAErC;OAED,IAAI,CAAC9tC,SAAS,EAAE,CAACmI,eAAe,CAC/BglC,6BAA6B,EAC7B;SACCze,MAAM,EAAEuf,YAAY;SACpBJ,OAAO,EAAEI;QACT,CACD;OAED,IAAI,CAAC,IAAI,CAACP,eAAe,EAAE,EAC3B;SACC9tB,UAAU,CAAC,MAAM;WAChB,IAAI,CAAC,IAAI,CAAC8tB,eAAe,EAAE,EAC3B;aACCnsC,aAAG,CAACS,WAAW,CAACgsC,IAAI,EAAEF,gBAAgB,CAAC;aACvCvsC,aAAG,CAACQ,QAAQ,CAACisC,IAAI,EAAED,gBAAgB,CAAC;;UAErC,EAAE,GAAG,CAAC;;MAER,CAAC;KAEF,OAAOjmC,MAAM;IACb,CAAC;CACH;CAAC,gBA2CK;GAAE4mB;CAAO,CAAC,GAAG,EAAE,EACrB;GACC,IAAI,CAAC1uB,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,MAAMhS,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC8J,SAAS,EAAE,CAAC8e,UAAU,EAAE,EACnE;OACC;;KAGD,IAAI,CAAC9e,SAAS,EAAE,CAACmI,eAAe,CAACnU,mBAAmB,CAAC;KAErD,MAAMk6C,aAAa,GAAGh4C,SAAS,CAAC8G,cAAc,EAAE;KAChD,MAAMmxC,cAAc,GAAG5sC,aAAG,CAAC+qB,WAAW,CAAC,IAAI,CAACtsB,SAAS,EAAE,CAACusB,oBAAoB,EAAE,CAAC;KAC/E,MAAMtN,KAAK,GAAGpF,IAAI,CAACC,GAAG,CAACq0B,cAAc,CAAClvB,KAAK,EAAE,GAAG,CAAC;KAEjD,4CAAI,wCAAkB/oB,SAAS,CAACmN,KAAK,EAAE;KAEvC,MAAM+qC,YAAY,GAAGF,aAAa,CAACvhC,IAAI,EAAE;KACzC,IAAIyhC,YAAY,CAACv0C,MAAM,GAAG,CAAC,EAC3B;OACC,4CAAI,sBAAUw0C,eAAe,CAACD,YAAY,CAAC;MAC3C,MAED;OACC,MAAME,SAAS,GAAGtS,wBAAQ,EAAE,CAACh/B,cAAc,EAAE,CAAC2P,IAAI,EAAE;OACpD,IAAI2hC,SAAS,CAACz0C,MAAM,GAAG,CAAC,EACxB;SACC,4CAAI,sBAAU00C,UAAU,CAACD,SAAS,CAAC;;;KAIrC,4CAAI,sBAAU3vB,IAAI,CAAC;OAAEM;MAAO,CAAC;KAE7B,4CAAI;KAEJ1R,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAAC5C,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;KAEnF,IAAI,CAACr2B,SAAS,CAACwV,WAAW,EAAE,EAC5B;OACC,IAAI,CAAC1L,SAAS,EAAE,CAACmvB,kBAAkB,EAAE;;KAGtC,IAAIn1B,cAAI,CAACC,UAAU,CAACy0B,MAAM,CAAC,EAC3B;OACCA,MAAM,EAAE;;IAET,CAAC;CACH;CAAC,kBAGD;GACC,IAAI,IAAI,CAACgf,eAAe,EAAE,IAAI,4CAAI,sBAAU3f,OAAO,EAAE,EACrD;KACC,4CAAI,sBAAUnP,IAAI,EAAE;;CAEtB;CAAC,2BAGD;GACC,IAAI,IAAI,CAACve,WAAW,EAAE,EACtB;KACC,OAAOmuC,OAAO,CAACC,MAAM,CAAC,IAAI/uC,KAAK,CAAC,+BAA+B,CAAC,CAAC;;GAGlE,4CAAI,oCAAkB0tC,aAAa,CAACE,OAAO;GAE3C,OAAO,IAAIkB,OAAO,CAAC,CAACE,OAAO,EAAED,MAAM,KAAK;KACvCpb,iBAAO,CAACC,aAAa,CAAC,YAAY,CAAC,CACjCC,IAAI,CAAC,CAAC;OAAEob,OAAO;OAAEC;MAAe,KAAK;OACrC,IAAI,IAAI,CAACvuC,WAAW,EAAE,EACtB;SACCouC,MAAM,CAAC,IAAI/uC,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAElD;;OAGD,4CAAI,wBAAY,IAAIivC,OAAO,CAAC;SAC3BE,mBAAmB,EAAE,IAAI;SACzB,2CAAG,IAAI,mCAAgB;SACvBzgB,QAAQ,EAAE;QACV,CAAC;OAEF,4CAAI,sBAAUnmB,SAAS,CAAC2mC,aAAa,CAACE,WAAW,EAAE,MAAM;SACxD,IAAI,IAAI,CAACzuC,WAAW,EAAE,EACtB;WACCouC,MAAM,CAAC,IAAI/uC,KAAK,CAAC,+BAA+B,CAAC,CAAC;WAElD;;SAGD,4CAAI,oCAAkB0tC,aAAa,CAACG,MAAM;SAC1CmB,OAAO,EAAE;QACT,CAAC;OAEF,4CAAI,sBAAUzmC,SAAS,CAAC2mC,aAAa,CAACG,SAAS,EAAE,4CAAI,0CAAoBnsC,IAAI,CAAC,IAAI,CAAC,CAAC;OACpF,4CAAI,sBAAUqF,SAAS,CAAC2mC,aAAa,CAACI,gBAAgB,EAAE,4CAAI,kDAAwBpsC,IAAI,CAAC,IAAI,CAAC,CAAC;OAC/F,4CAAI,sBAAUqF,SAAS,CAAC2mC,aAAa,CAACK,IAAI,EAAE,4CAAI,0CAAoBrsC,IAAI,CAAC,IAAI,CAAC,CAAC;OAE/E,4CAAI,sBAAU69B,IAAI,EAAE;MACpB,CAAC,CACDjM,KAAK,CAAC,MAAM;OACZia,MAAM,EAAE;MACR,CAAC;IAEH,CAAC;CACH;CAAC,yBAGD;GACC,4CAAI,IAAI,uCACR;KACCltC,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAmB,iCAAiC,CAAC;;CAE3E;CAAC,oCAqBD;GACC,IAAI,CAAChC,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,4CAAI;KAEJ,MAAMmkB,iBAAiB,GAAGzC,qBAAqB,CAAC,IAAI,CAAC5pB,SAAS,EAAE,EAAEyH,6BAAa,EAAE,EAAEhE,QAAQ,CAACknB,IAAI,CAAC;KACjG,IAAI0B,iBAAiB,KAAK,IAAI,EAC9B;OACC;;KAGD,MAAM;OAAElC,GAAG;OAAEva,IAAI;OAAEob;MAAQ,GAAGqB,iBAAiB;KAC/C,MAAMpB,YAAqB,GAAG1pB,aAAG,CAAC+qB,WAAW,CAAC,IAAI,CAACtsB,SAAS,EAAE,CAACusB,oBAAoB,EAAE,CAAC;KACtF,MAAMG,UAAU,GAAG7S,IAAI,CAACC,GAAG,CAACmR,YAAY,CAAChM,KAAK,EAAE,GAAG,CAAC;KAEpD,IAAI0N,UAAU,GAAGD,UAAU,GAAG,CAAC;KAC/B,IAAI9c,IAAI,GAAG+c,UAAU,GAAG1B,YAAY,CAACrb,IAAI,EACzC;;OAEC,MAAMgd,QAAQ,GAAG3B,YAAY,CAACrb,IAAI,IAAIA,IAAI,GAAG+c,UAAU,CAAC;OACxDA,UAAU,IAAIC,QAAQ,GAAG,EAAE;MAC3B,MACI,IAAI3B,YAAY,CAACpb,KAAK,GAAID,IAAI,GAAG8c,UAAU,GAAGC,UAAW,EAC9D;;OAECA,UAAU,IAAK/c,IAAI,GAAG8c,UAAU,GAAGC,UAAU,GAAI1B,YAAY,CAACpb,KAAK,GAAG,EAAE;;KAGzE,IAAImb,MAAM,GAAGC,YAAY,CAACd,GAAG,IAAIA,GAAG,GAAGc,YAAY,CAACD,MAAM,EAC1D;OACC,4CAAI,sBAAU1H,MAAM,CAAC;SAAE1E,IAAI,EAAE;QAAM,CAAC;MACpC,MAED;OACC,4CAAI,sBAAU0E,MAAM,CAAC;SACpB1E,IAAI,EAAE,KAAK;SACX2L,QAAQ,EAAE;WAAE3a,IAAI,EAAEA,IAAI,GAAG+c,UAAU;WAAExC,GAAG,EAAEa;;QAC1C,CAAC;;IAEH,CAAC;CACH;CAAC,kCAGD;GACC,4CAAI;CACL;CAAC,gCAGD;GACC,MAAM90B,SAAS,GAAGuR,6BAAa,EAAE;GACjC,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAI,4CAAI,0CAAoB,IAAI,EACjE;KACCsV,6BAAa,yCAAC,IAAI,sCAAgB;KAClC,4CAAI,wCAAkB,IAAI;KAE1B,OAAO,IAAI;;GAGZ,OAAO,KAAK;CACb;CAAC,6BAEkBb,KAAgB,EACnC;GACC,MAAM;KAAEvP;IAAQ,GAAGuP,KAAK,CAACmG,OAAO,EAAE;GAClC,IAAI,CAAC9Q,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,4CAAI;KAEJ,MAAMhS,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACCA,SAAS,CAACmhB,aAAa,CAACjc,MAAM,CAAC;;KAGhC,4CAAI;IACJ,CAAC;CACH;CAAC,iCAEsBuP,KAAgB,EACvC;GACC,MAAM;KAAEvP;IAAQ,GAAGuP,KAAK,CAACmG,OAAO,EAAE;GAClC,IAAI,CAAC9Q,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,4CAAI;KAEJ,MAAMhS,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIC,iCAAiB,CAACxR,SAAS,CAAC,EAChC;OACC,MAAME,KAAgB,GAAGF,SAAS,CAACE,KAAK;OACxC,MAAMG,SAAiC,GAAGH,KAAK,CAACE,OAAO,EAAE;OACzD,IAAI,CAACJ,SAAS,CAACwV,WAAW,EAAE,EAC5B;SACCnV,SAAS,CAAC4gB,SAAS,EAAE;;OAGtB,MAAMxZ,UAAuB,GAAGpH,SAAS,CAAC4H,SAAS,EAAE;OACrD,IAAIvB,gCAAgB,CAACe,UAAU,CAAC,EAChC;SACC,MAAMsJ,SAAS,GAAGxL,oCAAoB,EAAE;SACxCwL,SAAS,CAACjM,MAAM,CAAC,GAAGkyC,oBAAoB,CAAC9xC,MAAM,CAAC,CAAC;SACjDuC,UAAU,CAACyH,WAAW,CAAC6B,SAAS,CAAC;QACjC,MAED;SACC/Q,SAAS,CAACmY,eAAe,EAAE;SAC3BnY,SAAS,CAACmhB,aAAa,CAACjc,MAAM,CAAC;;;KAIjC,4CAAI;IACJ,CAAC;CACH;CAAC,+BAGD;GACCmS,eAAK,CAACsS,MAAM,CAAC,IAAI,CAAC7f,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;GACrF,IAAI,CAACvsB,SAAS,EAAE,CAACovB,uBAAuB,EAAE;GAC1C,IAAI,CAACpvB,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,IAAI,yCAAC,IAAI,6CAAoB,EAC7B;OACC,IAAI,CAAClI,SAAS,EAAE,CAAC5J,KAAK,EAAE;;IAEzB,CAAC;CACH;;CClewB;AAEzB,CAAO,MAAM84C,aAAa,SAAS3vC,UAAU,CAC7C;GACCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAEd,MAAMq3C,YAAY,GAAGC,0CAAuB,EAAE;KAC9C,IAAI,CAAClvC,eAAe,CACnBmvC,kCAAe,CAACv3C,MAAM,CAACmI,gBAAgB,EAAE,EAAEkvC,YAAY,EAAE,IAAI,CAAC,CAC9D;KAED,4CAAI;;GAGL,OAAO73C,OAAO,GACd;KACC,OAAO,SAAS;;CAiElB;CAAC,kCA7DA;GACC,IAAIg4C,OAAO,GAAG,KAAK;GACnB,IAAI,CAACtvC,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,MAAM,EAAE,MAAc;KACtE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,0CAA0C,CAAC;KAC7DiH,MAAM,CAAC5F,WAAW,CAAC,CAACotC,OAAO,CAAC;KAC5BxnC,MAAM,CAAC1G,UAAU,CAChB2G,aAAG,CAACC,UAAU,CAAC,sBAAsB,EAAE;OAAE,aAAa,EAAE86B,iBAAO,CAACC,KAAK,EAAE,GAAG,IAAI,GAAG;MAAU,CAAC,CAC5F;KACDj7B,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAACmI,eAAe,CAAConC,4BAAY,CAAC;MAC9C,CAAC;KAEFznC,MAAM,CAACtF,kBAAkB,CAAC,MAAM;OAC/B,OAAO,CAAC8sC,OAAO,IAAI,CAAC,IAAI,CAACtvC,SAAS,EAAE,CAAC8e,UAAU,EAAE;MACjD,CAAC;KAEF,IAAI,CAAC9e,SAAS,EAAE,CAACmH,eAAe,CAC/BqoC,gCAAgB,EACfpoC,OAAO,IAAK;OACZkoC,OAAO,GAAGloC,OAAO;OACjBU,MAAM,CAAC5F,WAAW,CAAC,CAACotC,OAAO,CAAC;OAE5B,OAAO,KAAK;MACZ,EACD1F,yCAAyB,CACzB;KAED,OAAO9hC,MAAM;IACb,CAAC;GAEF,IAAI2nC,OAAO,GAAG,KAAK;GACnB,IAAI,CAACzvC,SAAS,EAAE,CAAC4H,oBAAoB,EAAE,CAACC,QAAQ,CAAC,MAAM,EAAE,MAAc;KACtE,MAAMC,MAAc,GAAG,IAAIlH,MAAM,EAAE;KACnCkH,MAAM,CAACjH,UAAU,CAAC,0CAA0C,CAAC;KAC7DiH,MAAM,CAAC5F,WAAW,CAAC,CAACutC,OAAO,CAAC;KAC5B3nC,MAAM,CAAC1G,UAAU,CAChB2G,aAAG,CAACC,UAAU,CAAC,sBAAsB,EAAE;OAAE,aAAa,EAAE86B,iBAAO,CAACC,KAAK,EAAE,GAAG,KAAK,GAAG;MAAU,CAAC,CAC7F;KACDj7B,MAAM,CAACG,SAAS,CAAC,SAAS,EAAE,MAAY;OACvC,IAAI,CAACjI,SAAS,EAAE,CAACmI,eAAe,CAACunC,4BAAY,CAAC;MAC9C,CAAC;KAEF5nC,MAAM,CAACtF,kBAAkB,CAAC,MAAM;OAC/B,OAAO,CAACitC,OAAO,IAAI,CAAC,IAAI,CAACzvC,SAAS,EAAE,CAAC8e,UAAU,EAAE;MACjD,CAAC;KAEF,IAAI,CAAC9e,SAAS,EAAE,CAACmH,eAAe,CAC/BwoC,gCAAgB,EACfvoC,OAAO,IAAK;OACZqoC,OAAO,GAAGroC,OAAO;OACjBU,MAAM,CAAC5F,WAAW,CAAC,CAACutC,OAAO,CAAC;OAE5B,OAAO,KAAK;MACZ,EACD7F,yCAAyB,CACzB;KAED,OAAO9hC,MAAM;IACb,CAAC;CACH;;;;;;;;;;;AChGD,CAoBA,MAAMoV,WAAS,GAAG;GACjB0yB,QAAQ,EAAE,CAAC;GACXC,MAAM,EAAE,CAAC,CAAC;GACVC,aAAa,EAAE;CAChB,CAAC;CAED,MAAM1qB,kBAAgB,GAAG,yCAAyC;CAAC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAEnE,CAAO,MAAM2qB,kBAAkB,SAASxwC,UAAU,CAClD;GAWCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAZuB;;KAAI;OAAA;OAAA,OACT2mB;;KAAQ;OAAA;OAAA,OACP;;KAAI;OAAA;OAAA,OACZ;;KAAI;OAAA;OAAA,OACL;;KAAI;OAAA;OAAA,OACf;;KAAK;OAAA;OAAA,OAEc;;KAAI;OAAA;OAAA,OACJ;;KAMhC,IAAI,CAACve,eAAe,yCACnB,IAAI,+EACJ,IAAI,gDACJ;KAED,4CAAI,gDAAyByK,KAAgB,IAAK;OACjD,IAAI,CAAC3K,SAAS,EAAE,CAACmI,eAAe,CAAC8d,4BAAY,EAAEtb,KAAK,CAAC;MACrD;KAED,4CAAI,gDAAyBA,KAAgB,IAAK;;OAEjDA,KAAK,CAACiG,cAAc,EAAE;MACtB;KAEDrP,aAAG,CAACvG,MAAM,CAAC,IAAI,CAAC0F,YAAY,EAAE,EAAE,IAAI,CAACV,SAAS,EAAE,CAACusB,oBAAoB,EAAE,CAAC;KACxEhrB,aAAG,CAACvG,MAAM,CAAC,IAAI,CAACg1C,WAAW,EAAE,EAAE,IAAI,CAAChwC,SAAS,EAAE,CAACusB,oBAAoB,EAAE,CAAC;;GAGxE,OAAOj1B,OAAO,GACd;KACC,OAAO,cAAc;;GA2LtBoJ,YAAY,GACZ;KACC,IAAI,4CAAI,kCAAgB,IAAI,EAC5B;OACC,4CAAI,gCAAciC,aAAG,CAAChC,MAAM,oBAAC;;;;;qBAKb,CAAmC;mBACrC,CAAiC;;;;;;;;IAQ/C,GATkB,4CAAI,sCAAkBiC,IAAI,CAAC,IAAI,CAAC,EAClC,4CAAI,kCAAgBA,IAAI,CAAC,IAAI,CAAC,CAQ7C;;KAGF,+CAAO,IAAI;;GAGZotC,WAAW,GACX;KACC,IAAI,4CAAI,4BAAe,IAAI,EAC3B;OACC,4CAAI,0BAAartC,aAAG,CAAChC,MAAM,sBAAC;;IAE5B,EAAC;;KAGF,+CAAO,IAAI;;GAiKZL,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEfiB,aAAG,CAAC8D,MAAM,CAAC,IAAI,CAAC3E,YAAY,EAAE,CAAC;KAC/Ba,aAAG,CAAC8D,MAAM,CAAC,IAAI,CAAC2qC,WAAW,EAAE,CAAC;;CAEhC;CAAC,4BAhYA;GACC,MAAMC,QAAqB,GAAG,IAAI,CAACjwC,SAAS,EAAE,CAACusB,oBAAoB,EAAE;GACrE,MAAM2jB,WAAW,GAAG,4CAAI,0CAAkBttC,IAAI,CAAC,IAAI,CAAC;GACpD,MAAMutC,YAAY,GAAG,4CAAI,wCAAmBvtC,IAAI,CAAC,IAAI,CAAC;GACtD2K,eAAK,CAAC3K,IAAI,CAACqtC,QAAQ,EAAE,WAAW,EAAEC,WAAW,CAAC;GAC9C3iC,eAAK,CAAC3K,IAAI,CAACqtC,QAAQ,EAAE,YAAY,EAAEE,YAAY,CAAC;GAEhD,OAAO,MAAY;KAClB5iC,eAAK,CAACsS,MAAM,CAACowB,QAAQ,EAAE,WAAW,EAAEC,WAAW,CAAC;KAChD3iC,eAAK,CAACsS,MAAM,CAACowB,QAAQ,EAAE,YAAY,EAAEE,YAAY,CAAC;IAClD;CACF;CAAC,iCAGD;GACC,OAAO/vC,8BAAa,CACnB,IAAI,CAACJ,SAAS,EAAE,CAACmH,eAAe,CAC/B4e,gCAAgB,EAChB,4CAAI,oCAAiBnjB,IAAI,CAAC,IAAI,CAAC,EAC/B4E,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B8e,4BAAY,EACZ,4CAAI,oCAAiBrjB,IAAI,CAAC,IAAI,CAAC,EAC/B4T,qCAAqB,CACrB,EACD,IAAI,CAACxW,SAAS,EAAE,CAACoyB,2BAA2B,CAAC,MAAY;KACxD,4CAAI,wDAA2B,IAAI;KACnC,4CAAI;IACJ,CAAC,CACF;CACF;CAAC,6BAEgBznB,KAAiB,EAClC;GACC,IAAI,CAAC,IAAI,CAAC3K,SAAS,EAAE,CAAC8e,UAAU,EAAE,EAClC;KACC;;GAGD,MAAM3C,MAAM,GAAGxR,KAAK,CAACwR,MAAM;GAC3B,IAAI,EAAEA,MAAM,YAAY0K,WAAW,CAAC,EACpC;KACC,4CAAI,wDAA2B,IAAI;KAEnC;;GAGD,IAAI1K,MAAM,CAACnI,OAAO,CAAC,+BAA+B,CAAC,KAAK,IAAI,EAC5D;KACC;;GAGD,MAAMvb,OAAO,2CAAG,IAAI,wCAAmBkS,KAAK,CAAC;GAC7C,4CAAI,wDAA2BlS,OAAO;CACvC;CAAC,8BAGD;GACC,4CAAI,wDAA2B,IAAI;CACpC;CAAC,4BAEiBkS,KAAK,EACvB;GACC,MAAMslC,QAAQ,GAAG,IAAI,CAACjwC,SAAS,EAAE,CAACusB,oBAAoB,EAAE;GACxD,MAAM6jB,iBAAiB,GAAGH,QAAQ,CAAC9wB,qBAAqB,EAAE;GAC1D,IAAIkxB,SAA6B,GAAG,IAAI;GAExC,IAAI,CAACrwC,SAAS,EAAE,CAACwN,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;KAC5C,MAAMpQ,IAAc,GAAG2+B,wBAAQ,EAAE;KACjC,MAAMsU,gBAAgB,GAAGjzC,IAAI,CAACkzC,eAAe,EAAE;KAC/C,IAAIx7B,KAAa,2CAAG,IAAI,sCAAkBu7B,gBAAgB,CAACz2C,MAAM,CAAC;KAClE,IAAI0K,SAAiB,GAAG2Y,WAAS,CAAC4yB,aAAa;KAE/C,OAAO/6B,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGu7B,gBAAgB,CAACz2C,MAAM,EACpD;OACC,MAAMuT,GAAW,GAAGkjC,gBAAgB,CAACv7B,KAAK,CAAC;OAC3C,MAAMy7B,IAAwB,GAAG,IAAI,CAACxwC,SAAS,EAAE,CAACoqB,eAAe,CAAChd,GAAG,CAAC;OACtE,IAAIojC,IAAI,KAAK,IAAI,EACjB;SACC;;OAGD,MAAMC,OAAO,GAAGD,IAAI,CAACrxB,qBAAqB,EAAE;OAC5C,MAAM;SAAEuxB,UAAU;SAAEC,WAAW;SAAEC,SAAS;SAAEC;QAAc,GAAGjsB,MAAM,CAACksB,gBAAgB,CAACN,IAAI,CAAC;OAE1F,MAAMhb,IAAI,GAAG,IAAIhL,OAAO,CACvB4lB,iBAAiB,CAACxgC,IAAI,GAAGmhC,UAAU,CAACL,UAAU,CAAC,EAC/CD,OAAO,CAACO,CAAC,GAAGD,UAAU,CAACH,SAAS,CAAC,EACjCH,OAAO,CAACxxB,KAAK,GAAG8xB,UAAU,CAACJ,WAAW,CAAC,EACvCF,OAAO,CAACvxB,MAAM,GAAG6xB,UAAU,CAACF,YAAY,CAAC,CACzC;OAED,MAAM;SAAE/7B,CAAC;SAAEk8B;QAAG,GAAGrmC,KAAK;OACtB,MAAMsmC,WAAW,GAAGD,CAAC,GAAGxb,IAAI,CAACrL,GAAG;OAChC,MAAM+mB,cAAc,GAAGF,CAAC,GAAGxb,IAAI,CAACxK,MAAM;OACtC,MAAMmmB,YAAY,GAAGr8B,CAAC,GAAG0gB,IAAI,CAAC5lB,IAAI;OAClC,MAAMwhC,aAAa,GAAGt8B,CAAC,GAAG0gB,IAAI,CAAC3lB,KAAK;OACpC,MAAMgG,QAAQ,GAAG,CAACo7B,WAAW,IAAI,CAACC,cAAc,IAAI,CAACC,YAAY,IAAI,CAACC,aAAa;OACnF,IAAIv7B,QAAQ,EACZ;SACCw6B,SAAS,GAAGG,IAAI;SAChB,4CAAI,oDAA0Bz7B,KAAK;SAEnC;;OAGD,IAAIxQ,SAAS,KAAK2Y,WAAS,CAAC4yB,aAAa,EACzC;SACC,IAAImB,WAAW,EACf;WACC1sC,SAAS,GAAG2Y,WAAS,CAAC2yB,MAAM;UAC5B,MACI,IAAIqB,cAAc,EACvB;WACC3sC,SAAS,GAAG2Y,WAAS,CAAC0yB,QAAQ;UAC9B,MAED;;WAECrrC,SAAS,GAAGka,QAAQ;;;OAItB1J,KAAK,IAAIxQ,SAAS;;IAEnB,CAAC;GAEF,OAAO8rC,SAAS;CACjB;CAAC,2BAEgBgB,UAAkB,EACnC;GACC,IAAIA,UAAU,KAAK,CAAC,EACpB;KACC,OAAO5yB,QAAQ;;GAGhB,IAAI,4CAAI,qDAA2B,CAAC,IAAI,4CAAI,oDAA0B4yB,UAAU,EAChF;KACC,+CAAO,IAAI;;GAGZ,OAAOx3B,IAAI,CAAC4F,KAAK,CAAC4xB,UAAU,GAAG,CAAC,CAAC;CAClC;CAAC,4BAGD;GACC,IAAI,4CAAI,sDAA4B,IAAI,EACxC;KACC9vC,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACtS,YAAY,EAAE,EAAE;OAC9B4wC,OAAO,EAAE,CAAC;OACVC,SAAS,EAAE;MACX,CAAC;IACF,MAED;;;;;;KAMC,MAAM5lC,MAAM,GAAGlK,cAAI,CAACuqC,QAAQ,CAACzqC,aAAG,CAACyR,KAAK,yCAAC,IAAI,mDAAyB,YAAY,CAAC,CAAC;KAClF,MAAMmX,GAAW,GAAG,4CAAI,kDAAwBqnB,SAAS,GAAG7lC,MAAM;KAElEpK,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACtS,YAAY,EAAE,EAAE;OAC9B4wC,OAAO,EAAE,CAAC;OACVC,SAAS,EAAG,cAAapnB,GAAI;MAC7B,CAAC;;CAEJ;CAAC,oCAEyB1xB,OAA2B,EACrD;GACC,MAAMg5C,OAAO,GAAG,4CAAI,sDAA4Bh5C,OAAO;GACvD,4CAAI,oDAA0BA,OAAO;GAErC,IAAIg5C,OAAO,EACX;KACC,4CAAI;;CAEN;CAAC,2BAsCgB9mC,KAAgB,EACjC;GACC,MAAMuG,YAAY,GAAGvG,KAAK,CAACuG,YAAY;GACvC,IAAI,CAACA,YAAY,IAAI,4CAAI,sDAA4B,IAAI,EACzD;KACC;;GAGD,IAAI,CAAClR,SAAS,EAAE,CAACmI,eAAe,CAACnU,mBAAmB,CAAC;GAErDkd,YAAY,CAACiV,YAAY,yCAAC,IAAI,mDAAyB,CAAC,EAAE,CAAC,CAAC;GAE5D,IAAI7O,OAAO,GAAG,EAAE;GAChB,IAAI,CAACtX,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,MAAMzS,IAAI,GAAGi8C,0CAA0B,yCAAC,IAAI,kDAAwB;KACpE,IAAIj8C,IAAI,EACR;OACC6hB,OAAO,GAAG7hB,IAAI,CAAC6Q,MAAM,EAAE;;IAExB,CAAC;GAEF4K,YAAY,CAACE,OAAO,CAACgU,kBAAgB,EAAE9N,OAAO,CAAC;GAC/C,4CAAI,8BAAe,IAAI;GAEvB/J,eAAK,CAAC3K,IAAI,CAACa,QAAQ,CAACknB,IAAI,EAAE,MAAM,0CAAE,IAAI,8CAAsB;GAC5Dpd,eAAK,CAAC3K,IAAI,CAACa,QAAQ,CAACknB,IAAI,EAAE,UAAU,0CAAE,IAAI,8CAAsB;CACjE;CAAC,yBAEchgB,KAAgB,EAC/B;GACC,4CAAI,8BAAe,KAAK;GACxB,4CAAI;GAEJ4C,eAAK,CAACsS,MAAM,CAACpc,QAAQ,CAACknB,IAAI,EAAE,MAAM,0CAAE,IAAI,8CAAsB;GAC9Dpd,eAAK,CAACsS,MAAM,CAACpc,QAAQ,CAACknB,IAAI,EAAE,UAAU,0CAAE,IAAI,8CAAsB;CACnE;CAAC,0BAEehgB,KAAgB,EAChC;GACC,IAAI,4CAAI,gCAAiB,KAAK,EAC9B;KACC,OAAO,KAAK;;GAGb,MAAMgnC,QAAQ,GAAGhnC,KAAK,CAACuG,YAAY,CAAC0gC,KAAK,CAACzrC,QAAQ,CAAC,OAAO,CAAC;GAC3D,IAAIwrC,QAAQ,IAAI,EAAEhnC,KAAK,CAACwR,MAAM,YAAY0K,WAAW,CAAC,EACtD;KACC,OAAO,KAAK;;GAGb,MAAMgrB,kBAAkB,2CAAG,IAAI,wCAAmBlnC,KAAK,CAAC;GACxD,IAAIknC,kBAAkB,KAAK,IAAI,EAC/B;KACC,OAAO,KAAK;;GAGb,4CAAI,4CAAsBA,kBAAkB;GAE5C,4CAAI,gCAAeA,kBAAkB,EAAElnC,KAAK;GAC5CA,KAAK,CAACiG,cAAc,EAAE;GAEtB,OAAO,IAAI;CACZ;CAAC,0BAEejG,KAAgB,EAChC;GAAA;GACC,IAAI,4CAAI,gCAAiB,KAAK,EAC9B;KACC,OAAO,KAAK;;GAGb,MAAMgnC,QAAQ,GAAGhnC,KAAK,CAACuG,YAAY,CAAC0gC,KAAK,CAACzrC,QAAQ,CAAC,OAAO,CAAC;GAC3D,MAAMmgB,QAAQ,GAAG,wBAAA3b,KAAK,CAACuG,YAAY,qBAAlB,oBAAoBJ,OAAO,CAACsU,kBAAgB,CAAC,KAAI,EAAE;GACpE,IAAIusB,QAAQ,IAAI,EAAEhnC,KAAK,CAACwR,MAAM,YAAY0K,WAAW,CAAC,IAAI,CAAC7sB,cAAI,CAACsH,cAAc,CAACglB,QAAQ,CAAC,EACxF;KACC,OAAO,KAAK;;GAGb,MAAMwrB,WAAW,GAAGt6B,6BAAa,CAAC8O,QAAQ,CAAC;GAC3C,IAAI,CAACwrB,WAAW,IAAI,EAAEnnC,KAAK,CAACwR,MAAM,YAAY0K,WAAW,CAAC,EAC1D;KACC,OAAO,KAAK;;GAGb,MAAMgrB,kBAAkB,GAAG,4CAAI,wCAAmBlnC,KAAK,6CAAK,IAAI,yCAAmB;GACnF,IAAI,CAACknC,kBAAkB,EACvB;KACC,OAAO,KAAK;;GAGb,MAAMtsB,UAAU,GAAGmsB,0CAA0B,CAACG,kBAAkB,CAAC;GACjE,IAAI,CAACtsB,UAAU,EACf;KACC,OAAO,KAAK;;GAGbhY,eAAK,CAACsS,MAAM,CAACpc,QAAQ,CAACknB,IAAI,EAAE,MAAM,0CAAE,IAAI,8CAAsB;GAC9Dpd,eAAK,CAACsS,MAAM,CAACpc,QAAQ,CAACknB,IAAI,EAAE,UAAU,0CAAE,IAAI,8CAAsB;GAElE,IAAIpF,UAAU,KAAKusB,WAAW,EAC9B;KACC,OAAO,IAAI;;GAGZ,MAAM;KAAE3nB,GAAG,EAAE4nB,kBAAkB;KAAE7yB,MAAM,EAAE8yB;IAAuB,GAAGH,kBAAkB,CAAC1yB,qBAAqB,EAAE;GAC7G,MAAM8yB,iBAAiB,GAAGtnC,KAAK,CAAC0U,OAAO,GAAG0yB,kBAAkB,GAAGC,qBAAqB,GAAG,CAAC;GACxF,IAAIC,iBAAiB,EACrB;KACC1sB,UAAU,CAACngB,WAAW,CAAC0sC,WAAW,CAAC;IACnC,MAED;;KAECvsB,UAAU,CAACrc,YAAY,CAAC4oC,WAAW,CAAC;;GAGrC,4CAAI,wDAA2B,IAAI;GAEnC,OAAO,IAAI;CACZ;CAAC,wBAEaD,kBAA+B,EAAElnC,KAAgB,EAC/D;GACC,MAAM;KAAEwf,GAAG,EAAE4nB,kBAAkB;KAAE7yB,MAAM,EAAE8yB;IAAuB,GAAGH,kBAAkB,CAAC1yB,qBAAqB,EAAE;GAC7G,MAAM+yB,WAAgC,GAAGttB,MAAM,CAACksB,gBAAgB,CAACe,kBAAkB,CAAC;GACpF,MAAMM,gBAAyB,GAAG5wC,aAAG,CAAC6wC,mBAAmB,CAACP,kBAAkB,EAAEA,kBAAkB,CAACQ,YAAY,CAAC;GAE9G,IAAIC,OAAe,GAAGH,gBAAgB,CAAChoB,GAAG;GAC1C,MAAMooB,YAAY,GAAG5nC,KAAK,CAAC0U,OAAO,GAAG0yB,kBAAkB,GAAGC,qBAAqB,GAAG,CAAC;GACnF,IAAIO,YAAY,EAChB;KACCD,OAAO,IAAIN,qBAAqB,GAAGjB,UAAU,CAACmB,WAAW,CAACrB,YAAY,CAAC,GAAG,GAAG;IAC7E,MAED;KACCyB,OAAO,IAAIvB,UAAU,CAACmB,WAAW,CAACtB,SAAS,CAAC,GAAG,CAAC;;GAGjD,MAAM4B,qBAAqB,GAAG,CAAC;GAC/B,MAAMC,6BAA6B,GAAG,EAAE;GACxC,MAAMtoB,GAAW,GAAGmoB,OAAO,GAAGE,qBAAqB;GAEnDjxC,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACg9B,WAAW,EAAE,EAAE;KAC7BsB,OAAO,EAAE,GAAG;KACZ1hC,IAAI,EAAG,GAAE6iC,6BAA8B,IAAG;KAC1C5iC,KAAK,EAAG,GAAE4iC,6BAA8B,IAAG;KAC3ClB,SAAS,EAAG,cAAapnB,GAAI;IAC7B,CAAC;CACH;CAAC,0BAGD;GACC5oB,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACg9B,WAAW,EAAE,EAAE;KAC7BsB,OAAO,EAAE,CAAC;KACVC,SAAS,EAAE;IACX,CAAC;CACH;;;;;;;;;;AC3bD,CACyC;AAEzC,CAAe,MAAMmB,SAAS,SAASnyC,WAAW,CAClD;GAAA;KAAA;KAAA;OAAA;OAAA,OAC2B;;;GAE1BG,YAAY,GACZ;KACC,IAAI,4CAAI,kCAAgB,IAAI,EAC5B;OACC,4CAAI,gCAAciC,aAAG,CAAChC,MAAM,oBAAC,wDAAsD,EAAC;;KAGrF,+CAAO,IAAI;;GAGZA,MAAM,GACN;KACC,OAAO,IAAI,CAACD,YAAY,EAAE;;CAE5B;;;;;;ACrBA,CA+BuB;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAEvB,CAAe,MAAMiyC,OAAO,CAC5B;GAUCnzC,WAAW,CAACC,UAAsB,EAAE2c,QAAuB,EAC3D;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAV0B;;KAAI;OAAA;OAAA,OACN;;KAAE;OAAA;OAAA,OACL;;KAAK;OAAA;OAAA,OACP;;KAAI;OAAA;OAAA,OACS,IAAI6D,2BAAW;;KAAE;OAAA;OAAA,OACf;;KAAI;OAAA;OAAA,OACjB;;KAAI;OAAA;OAAA,OACI;;KAI5B,4CAAI,kCAAexgB,UAAU;KAE7B,MAAMmzC,cAA8B,GAAG54C,cAAI,CAACJ,OAAO,CAACwiB,QAAO,CAAC,GAAGA,QAAO,GAAG,EAAE;KAC3E,4CAAI,sCAAkBw2B,cAAc;KAEpC,IAAI,4CAAI,kBAAQ/4C,MAAM,GAAG,CAAC,EAC1B;OACC,4CAAI,oFAAoB,IAAI,+CAAqB;OACjD,4CAAI,sCAAmB,IAAIg5C,cAAc,CAAC,4CAAI,oCAAejwC,IAAI,CAAC,IAAI,CAAC,CAAC;;;GAI1EkwC,QAAQ,CAAChnC,SAAsB,EAC/B;KACC,IAAI,IAAI,CAAC0lB,UAAU,EAAE,EACrB;OACC;;KAGD,IAAIx3B,cAAI,CAACgH,aAAa,CAAC8K,SAAS,CAAC,EACjC;OACC,4CAAI,kBAAQhN,OAAO,CAAEs1B,IAAiB,IAAK;SAC1C7yB,aAAG,CAACvG,MAAM,CAACo5B,IAAI,CAACzzB,MAAM,EAAE,EAAE,IAAI,CAACoyC,iBAAiB,EAAE,CAAC;QACnD,CAAC;OAEFxxC,aAAG,CAACvG,MAAM,CAAC,IAAI,CAAC0F,YAAY,EAAE,EAAEoL,SAAS,CAAC;OAE1C,IAAI,4CAAI,wCAAqB,IAAI,EACjC;SACC,4CAAI,oCAAiBknC,OAAO,CAAC,IAAI,CAACtyC,YAAY,EAAE,CAAC;;OAGlD,4CAAI,0BAAa,IAAI;;;GAIvB7D,OAAO,GACP;KACC,OAAO,4CAAI,kBAAQhD,MAAM,KAAK,CAAC;;GAGhC6G,YAAY,GACZ;KACC,OAAO,4CAAI,oBAAO4f,QAAQ,CAAC,WAAW,EAAE,MAAM;OAC7C,OAAO3d,aAAG,CAAChC,MAAM,oBAAC;;OAEhB,CAA2B;OAC3B,CAA6B;;IAE/B,GAHI,IAAI,CAACoyC,iBAAiB,EAAE,EACxB,IAAI,CAACE,mBAAmB,EAAE;MAG9B,CAAC;;GAGHF,iBAAiB,GACjB;KACC,OAAO,4CAAI,oBAAOzyB,QAAQ,CAAC,iBAAiB,EAAE,MAAM;OACnD,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;IAElB;MACA,CAAC;;GAGHsyC,mBAAmB,GACnB;KACC,OAAO,4CAAI,oBAAO3yB,QAAQ,CAAC,oBAAoB,EAAE,MAAM;OACtD,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;MAEjB,CAA6B;;IAE9B,GAFG,IAAI,CAACuyC,UAAU,EAAE,CAACvyC,MAAM,EAAE;MAG7B,CAAC;;GAGHuyC,UAAU,GACV;KACC,IAAI,4CAAI,0BAAc,IAAI,EAC1B;OACC,MAAMC,cAAc,GAAG,MAAM;SAC5B5lC,eAAK,CAACsS,MAAM,CAAC,IAAI,CAACkzB,iBAAiB,EAAE,EAAE,eAAe,EAAEI,cAAc,CAAC;SACvE5xC,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC+/B,iBAAiB,EAAE,EAAE;WAAE7zB,MAAM,EAAE;UAAM,CAAC;SACrD3d,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC+wC,iBAAiB,EAAE,EAAE,aAAa,CAAC;QACxD;OAED,4CAAI,wBAAY,IAAInyC,MAAM,EAAE;OAC5B,4CAAI,sBAAUC,UAAU,CAAC,4DAA4D,CAAC;OACtF,4CAAI,sBAAUoH,SAAS,CAAC,SAAS,EAAE,MAAY;SAC9CsF,eAAK,CAACsS,MAAM,CAAC,IAAI,CAACkzB,iBAAiB,EAAE,EAAE,eAAe,EAAEI,cAAc,CAAC;SAEvE,IAAI5xC,aAAG,CAACmpC,QAAQ,CAAC,IAAI,CAAChqC,YAAY,EAAE,EAAE,YAAY,CAAC,EACnD;WACCa,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC+/B,iBAAiB,EAAE,EAAE;aAAE7zB,MAAM,EAAG,GAAE,IAAI,CAAC6zB,iBAAiB,EAAE,CAACK,YAAa;YAAK,CAAC;WAC7FC,qBAAqB,CAAC,MAAM;aAC3B9xC,aAAG,CAACS,WAAW,CAAC,IAAI,CAACtB,YAAY,EAAE,EAAE,YAAY,CAAC;aAClDa,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACgxC,iBAAiB,EAAE,EAAE,aAAa,CAAC;aACrDxxC,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC+/B,iBAAiB,EAAE,EAAE;eAAE7zB,MAAM,EAAE;cAAM,CAAC;YACrD,CAAC;UACF,MAED;WACC3d,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACgxC,iBAAiB,EAAE,EAAE,aAAa,CAAC;WACrDxxC,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC+/B,iBAAiB,EAAE,EAAE;aAAE7zB,MAAM,EAAG,GAAE,IAAI,CAAC6zB,iBAAiB,EAAE,CAACK,YAAa;YAAK,CAAC;WAC7F7xC,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACrB,YAAY,EAAE,EAAE,YAAY,CAAC;;SAGhD6M,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAACmwC,iBAAiB,EAAE,EAAE,eAAe,EAAEI,cAAc,CAAC;QACrE,CAAC;;KAGH,+CAAO,IAAI;;GAGZG,QAAQ,GACR;KACC,+CAAO,IAAI;;GAGZ9hB,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZlxB,OAAO,GACP;KACC,IAAI,4CAAI,8CAAsB,IAAI,EAClC;OACC,4CAAI;;KAGL,IAAI,4CAAI,wCAAqB,IAAI,EACjC;OACC,4CAAI,oCAAiBizC,UAAU,EAAE;OACjC,4CAAI,sCAAmB,IAAI;;KAG5B,IAAI,IAAI,CAAC/hB,UAAU,EAAE,EACrB;OACCjwB,aAAG,CAAC8D,MAAM,CAAC,IAAI,CAAC3E,YAAY,EAAE,CAAC;;KAGhC,4CAAI,IAAI,+BACR;OACC+wB,YAAY,yCAAC,IAAI,8BAAY;;KAG9B,4CAAI,oBAAU,IAAI;KAClB,4CAAI,sBAAS,IAAI;;GAmGlBvpB,MAAM,GACN;KACC,4CAAI,gCAAasF,cAAc,EAAE,CAACC,IAAI,CAAC,MAAY;OAClD,IAAIvX,SAAyB,GAAGuR,6BAAa,EAAE;OAC/C,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,EACjC;SACCA,SAAS,GAAG,IAAI;;OAGjB,IAAIs9C,eAAe,GAAG,IAAI;OAC1B,IAAIt9C,SAAS,KAAK,IAAI,EACtB;SACCs9C,eAAe,GAAG7rC,oCAAmB,CACpCzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EACzBb,IAA2B,IAAc;WACzC,OAAO,CAACA,IAAI,CAACqX,OAAO,GAAGzY,WAAW,MAAM,CAAC;UACzC,CACD;;OAGF,MAAMo/C,UAAuB,GAAGv9C,SAAS,KAAK,IAAI,GAAG,IAAI+P,GAAG,EAAE,2CAAG,IAAI,oDAAyB/P,SAAS,CAAC;OACxG,MAAMw9C,UAAmB,GAAG,CAAC,4CAAI,gCAAa50B,UAAU,EAAE;OAE1D,4CAAI,kBAAQhgB,OAAO,CAAEs1B,IAAY,IAAK;SACrC,IAAI,EAAEA,IAAI,YAAYxzB,MAAM,CAAC,EAC7B;WACC;;;;SAID,IAAIwzB,IAAI,CAAC7xB,qBAAqB,EAAE,EAChC;WACC6xB,IAAI,CAAClyB,WAAW,CAACkyB,IAAI,CAAC1xB,qBAAqB,EAAE,CAAC;UAC9C,MACI,IAAIgxC,UAAU,EACnB;WACCtf,IAAI,CAAChyB,OAAO,EAAE;UACd,MACI,IAAIoxC,eAAe,KAAK,IAAI,IAAIpf,IAAI,CAACxyB,8BAA8B,EAAE,EAC1E;WACCwyB,IAAI,CAAChyB,OAAO,EAAE;UACd,MAED;WACCgyB,IAAI,CAAC/xB,MAAM,EAAE;;;;SAId,IAAI+xB,IAAI,CAAC9xB,UAAU,EAAE,EACrB;WACC8xB,IAAI,CAACvyB,SAAS,CAAC,KAAK,CAAC;UACrB,MACI,IAAIuyB,IAAI,CAAC1+B,SAAS,EAAE,EACzB;WACC,MAAM2B,MAAM,GAAG+8B,IAAI,CAACv1B,SAAS,EAAE;WAC/Bu1B,IAAI,CAACvyB,SAAS,CAAC3L,SAAS,KAAK,IAAI,GAAG,KAAK,GAAGA,SAAS,CAACR,SAAS,CAAC2B,MAAM,CAAC,CAAC;UACxE,MACI,IAAI+8B,IAAI,CAACjzB,YAAY,EAAE,KAAK,IAAI,EACrC;WACCizB,IAAI,CAACvyB,SAAS,CAAC4xC,UAAU,CAACjtC,GAAG,CAAC4tB,IAAI,CAACjzB,YAAY,EAAE,CAAC,CAAC;;QAEpD,CAAC;MACF,CAAC;;GAGHwyC,KAAK,GACL;KACC,4CAAI,kBAAQ70C,OAAO,CAAEs1B,IAAY,IAAK;OACrC,IAAIA,IAAI,YAAYxzB,MAAM,EAC1B;SACCwzB,IAAI,CAACvyB,SAAS,CAAC,KAAK,CAAC;;MAEtB,CAAC;;CAwCJ;CAAC,iCA/MA;GACC,OAAOzB,8BAAa,CACnB,4CAAI,gCAAa+G,eAAe,CAC/BysC,wCAAwB,EACxB,MAAM;KACL,IAAI,CAAC1rC,MAAM,EAAE;KAEb,OAAO,KAAK;IACZ,EACD0hC,yCAAyB,CACzB,EACD,4CAAI,gCAAaziC,eAAe,CAC/B0sC,6BAAa,EACb,MAAe;KACd,4CAAI,IAAI,+BACR;OACCpiB,YAAY,yCAAC,IAAI,8BAAY;OAC7B,4CAAI,gCAAc,IAAI;;KAGvB,OAAO,KAAK;IACZ,EACDmY,yCAAyB,CACzB,EACD,4CAAI,gCAAaziC,eAAe,CAC/B2sC,4BAAY,EACZ,MAAe;KACd,4CAAI,IAAI,+BACR;OACCriB,YAAY,yCAAC,IAAI,8BAAY;;KAG9B,4CAAI,gCAAc7R,UAAU,CAAC,MAAY;OACxC,MAAMm0B,aAAa,GAAGtwC,QAAQ,CAACswC,aAAa;OAC5C,MAAMC,WAAW,GAAG,4CAAI,gCAAaznB,oBAAoB,EAAE;OAC3D,IAAIwnB,aAAa,KAAK,IAAI,IAAI,CAACC,WAAW,CAACn+B,QAAQ,CAACk+B,aAAa,CAAC,EAClE;SACC,IAAI,CAACJ,KAAK,EAAE;;MAEb,EAAE,GAAG,CAAC;KAEP,OAAO,KAAK;IACZ,EACD/J,yCAAyB,CACzB,EACD,4CAAI,gCAAanuB,sBAAsB,CAAC,MAAM;KAC7C,IAAI,CAACvT,MAAM,EAAE;IACb,CAAC,EACF,4CAAI,gCAAa+rC,wBAAwB,CAAC,MAAM;KAC/C,IAAI,CAAC/rC,MAAM,EAAE;IACb,CAAC,CACF;CACF;CAAC,2BAEgBkU,OAAuB,EACxC;GACCA,OAAO,CAACtd,OAAO,CAAEs1B,IAAiB,IAAK;KACtC,IAAIA,IAAI,KAAK,GAAG,EAChB;OACC,4CAAI,kBAAQr6B,IAAI,CAAC,IAAI24C,SAAS,EAAE,CAAC;MACjC,MAED;OACC,MAAMvR,SAAS,GAAG,4CAAI,gCAAav5B,oBAAoB,EAAE,CAAC6b,MAAM,CAAC2Q,IAAI,CAAC;OACtE,IAAI+M,SAAS,KAAK,IAAI,EACtB;;SAECzP,OAAO,CAAC8P,IAAI,CAAE,wBAAuBpN,IAAK,4BAA2B,CAAC;QACtE,MAED;SACC,4CAAI,kBAAQr6B,IAAI,CAAConC,SAAS,CAAC;;;IAG7B,CAAC;CACH;CAAC,0BAEahoB,OAA8B,EAC5C;GACC,IAAI,IAAI,CAACzY,YAAY,EAAE,CAAC6pC,WAAW,KAAK,CAAC,IAAIhpC,aAAG,CAACmpC,QAAQ,CAAC,IAAI,CAACqI,iBAAiB,EAAE,EAAE,aAAa,CAAC,EAClG;KACC;;GAGD,MAAMmB,QAAsB,GAAG,4CAAI,kBAAQC,EAAE,CAAC,CAAC,CAAC,CAAC;GACjD,IAAI,CAACD,QAAQ,IAAIA,QAAQ,CAACxzC,YAAY,EAAE,CAAC8wC,SAAS,IAAI0C,QAAQ,CAACxzC,YAAY,EAAE,CAAC0zC,YAAY,EAC1F;KACC7yC,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAACrB,YAAY,EAAE,EAAE,cAAc,CAAC;IACjD,MAED;KACCa,aAAG,CAACS,WAAW,CAAC,IAAI,CAACtB,YAAY,EAAE,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;;CAEtE;CAAC,kCA6EuBxK,SAAyB,EACjD;GACC,MAAMG,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;GAC7C,MAAMm9C,UAAU,GAAG,IAAIxtC,GAAG,EAAE;GAC5B,IAAIvI,WAA6C,GAAGrH,UAAU;GAC9D,OAAOqH,WAAW,KAAKs+B,wBAAQ,EAAE,IAAIt+B,WAAW,KAAK,IAAI,EACzD;KACC,MAAM22C,SAAS,2CAAG,IAAI,gCAAe32C,WAAW,CAAC;KACjD+1C,UAAU,CAACptC,GAAG,CAACguC,SAAS,CAAC;KACzB32C,WAAW,GAAGA,WAAW,CAACS,SAAS,EAAE;;GAGtC,OAAOs1C,UAAU;CAClB;CAAC,wBAEah+C,IAAiB,EAC/B;GACC,IAAIu0C,2BAAW,CAACv0C,IAAI,CAAC,EACrB;KACC,MAAM6+C,QAAkB,GAAG7+C,IAAI;KAC/B,MAAM8+C,UAAU,GAAGC,sCAAqB,CAACF,QAAQ,EAAEtL,wBAAQ,CAAC;KAE5D,OAAOuL,UAAU,GAAGA,UAAU,CAACnL,WAAW,EAAE,GAAGkL,QAAQ,CAAClL,WAAW,EAAE;;GAGtE,IAAI/O,2BAAW,CAAC5kC,IAAI,CAAC,IAAI6vC,+BAAe,CAAC7vC,IAAI,CAAC,EAC9C;KACC,OAAO,MAAM;;GAGd,IAAI0d,gBAAgB,CAAC1d,IAAI,CAAC,EAC1B;KACC,OAAO,MAAM;;GAGd,OAAOA,IAAI,CAAC6E,OAAO,EAAE;CACtB;;;;ACjZD,CA6BwC;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAIxC,CAAO,MAAMm6C,qBAAqB,SAASl1C,UAAU,CACrD;GAMCC,WAAW,CAAC1H,MAAkB,EAC9B;KACC,KAAK,CAACA,MAAM,CAAC;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAPC;;KAAI;OAAA;OAAA,OACA;;KAAI;OAAA;OAAA,OACG;;KAAI;OAAA;OAAA,OACH,4CAAI,gDAAqB8K,IAAI,CAAC,IAAI;;KAM7D,4CAAI,oCAAkBywB,iBAAO,CAACqhB,QAAQ,CAAC,MAAM;OAC5C,IAAI,CAAC10C,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;SAC7B,4CAAI,IAAI,2CACR;WACC,4CAAI;;QAEL,CAAC;MACF,EAAE,GAAG,CAAC;;GAGR,OAAO5Q,OAAO,GACd;KACC,OAAO,iBAAiB;;GAGzByI,SAAS,GACT;KACC,MAAM6yC,cAAc,GAAG,IAAI,CAAC5yC,SAAS,EAAE,CAACyc,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;KACxE,4CAAI,wBAAY,IAAIk2B,OAAO,CAAC,IAAI,CAAC3yC,SAAS,EAAE,EAAE4yC,cAAc,CAAC;KAC7D,IAAI,CAAC,4CAAI,sBAAU/1C,OAAO,EAAE,EAC5B;OACC,IAAI,CAACqD,eAAe,yCACnB,IAAI,gDACJ;;;GAiCHgI,MAAM,GACN;KACC,4CAAI,IAAI,2CACR;OACC,IAAI,IAAI,CAAC2lB,QAAQ,EAAE,CAACE,OAAO,EAAE,EAC7B;SACC,4CAAI;QACJ,MAED;SACC,4CAAI;;MAEL,MAED;OACC,IAAI,CAACF,QAAQ,EAAE,CAACC,KAAK,EAAE;;;GA6FzBD,QAAQ,GACR;KACC,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,MAAM/hB,SAAS,GAAGnJ,aAAG,CAAChC,MAAM,oBAAC,qDAAmD,EAAC;OACjF,4CAAI,wBAAU,IAAIwtB,gBAAK,CAAC;SACvBI,UAAU,EAAE,IAAI;;SAEhBZ,eAAe,EAAElqB,QAAQ,CAACknB,IAAI;SAC9ByD,QAAQ,EAAE,IAAI;SACdxvB,OAAO,EAAEkN,SAAS;SAClB6oC,eAAe,EAAGhqC,KAAiB,IAAc;WAChD,IAAIghB,SAAS,GAAG,IAAI;WACpB,MAAMipB,eAAe,GAAGhwB,MAAM,CAACC,YAAY,EAAE;WAC7C,IAAI+vB,eAAe,CAAClpC,WAAW,EAC/B;aACC,OAAO,IAAI;;WAGZ,IAAI,CAAC1L,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;aAC7B,MAAMhS,SAAyB,GAAGuR,6BAAa,EAAE;aACjDkkB,SAAS,GAAGz1B,SAAS,KAAK,IAAI,IAAIA,SAAS,CAACwV,WAAW,EAAE;YACzD,CAAC;WAEF,OAAOigB,SAAS;UAChB;SACD7N,MAAM,EAAE;WACP4Q,MAAM,EAAE,MAAM;aACb,4CAAI,IAAI,uDACR;eACCnhB,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAAC5C,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;;YAEpF;WACDiC,OAAO,EAAE,MAAM;aACdjhB,eAAK,CAACsS,MAAM,CAAC,IAAI,CAAC7f,SAAS,EAAE,CAACusB,oBAAoB,EAAE,EAAE,QAAQ,0CAAE,IAAI,wCAAiB;aACrFY,mBAAmB,CAAC,IAAI,CAACU,QAAQ,EAAE,CAAC;;;QAGtC,CAAC;OAEF,4CAAI,sBAAUilB,QAAQ,CAAChnC,SAAS,CAAC;;KAGlC,+CAAO,IAAI;;GAGZ8S,IAAI,GACJ;KACC,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC;;KAGD,IAAI,CAACiP,QAAQ,EAAE,CAACC,KAAK,EAAE;;GAGxBxtB,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KAEf,IAAI,4CAAI,0BAAY,IAAI,EACxB;OACC,4CAAI,sBAAQA,OAAO,EAAE;OACrB,4CAAI,wBAAU,IAAI;;KAGnB,4CAAI,sBAAUA,OAAO,EAAE;KACvB,4CAAI,wBAAY,IAAI;;CAEtB;CAAC,iCA7MA;GACC,OAAOF,8BAAa,CACnB,IAAI,CAACJ,SAAS,EAAE,CAACmH,eAAe,CAC/BysC,wCAAwB,EACxB,MAAM;KACL,IAAI,CAAC1rC,MAAM,EAAE;KAEb,OAAO,KAAK;IACZ,EACD0hC,yCAAyB,CACzB,EACD,IAAI,CAAC5pC,SAAS,EAAE,CAACyb,sBAAsB,CAAC,CAAC;KAAEqgB;IAAa,KAAK;KAC5DA,WAAW,CAACruB,IAAI,CAAC,MAAM;OACtB,IAAI,CAACvF,MAAM,EAAE;MACb,CAAC;IACF,CAAC,EACF,IAAI,CAAClI,SAAS,EAAE,CAACmH,eAAe,CAC/BnT,mBAAmB,EACnB,MAAe;KACd,IAAI,CAAC4qB,IAAI,EAAE;KAEX,OAAO,KAAK;IACZ,EACDpX,oCAAoB,CACpB,CACD;CACF;CAAC,oBAsBD;GACC,IAAI,CAACqmB,QAAQ,EAAE,CAAClP,IAAI,EAAE;GACtBwO,mBAAmB,CAAC,IAAI,CAACU,QAAQ,EAAE,CAAC;GACpC,4CAAI;CACL;CAAC,oCAGD;GACC,OAAO3B,qBAAqB,CAC3B,IAAI,CAAC2B,QAAQ,EAAE,EACf,IAAI,CAAC7tB,SAAS,EAAE,0CAChB,IAAI,4CACJ;CACF;CAAC,8BAEmBqsB,iBAAyB,EAC7C;GACC,MAAM;KAAE71B,UAAU;KAAEyzB;IAAa,GAAGoC,iBAAiB;GAErD,OAAO71B,UAAU,IAAI,CAACyzB,WAAW,GAAG,KAAK,GAAG,QAAQ;CACrD;CAAC,kCAGD;GACC,IAAI,CAACjqB,SAAS,EAAE,CAACkI,MAAM,CAAC,MAAM;KAC7B,4CAAI;IACJ,CAAC;CACH;CAAC,8BAGD;GACC,IAAI,IAAI,CAAClI,SAAS,EAAE,CAAC60C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC70C,SAAS,EAAE,CAAC8e,UAAU,EAAE,EACpE;KACC,OAAO,KAAK;;GAGb,MAAM5oB,SAAyB,GAAGuR,6BAAa,EAAE;GACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAIA,SAAS,CAACwV,WAAW,EAAE,EAC5D;KACC,OAAO,KAAK;;GAGb,MAAMkpC,eAAe,GAAGhwB,MAAM,CAACC,YAAY,EAAE;GAC7C,IAAI+vB,eAAe,KAAK,IAAI,IAAIA,eAAe,CAAClpC,WAAW,EAC3D;KACC,OAAO,KAAK;;GAGb,MAAMme,iBAAiB,GAAG,IAAI,CAAC7pB,SAAS,EAAE,CAACusB,oBAAoB,EAAE;GACjE,IAAI,CAAC1C,iBAAiB,CAAChU,QAAQ,CAAC++B,eAAe,CAACv+C,UAAU,CAAC,EAC3D;KACC,OAAO,KAAK;;GAGb,MAAM4gC,cAAc,GAAGtvB,oCAAmB,CACzCzR,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE,EACzBb,IAA2B,IAAK;KAChC,OAAO,CAACA,IAAI,CAACqX,OAAO,GAAGzY,WAAW,MAAM,CAAC;IACzC,CACD;GAED,IAAI4iC,cAAc,IAAI/gC,SAAS,CAAC8G,cAAc,EAAE,KAAK,EAAE,EACvD;KACC,OAAO,KAAK;;GAGb,MAAM83C,cAAc,GAAG5+C,SAAS,CAAC8G,cAAc,EAAE,CAACP,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;GACtE,IAAI,CAACvG,SAAS,CAACwV,WAAW,EAAE,IAAIopC,cAAc,KAAK,EAAE,EACrD;KACC,OAAO,KAAK;;GAGb,MAAMr/C,IAAI,GAAGQ,eAAe,CAACC,SAAS,CAAC;GACvC,MAAMsP,MAAM,GAAG/P,IAAI,CAAC0I,SAAS,EAAE;GAC/B,IAAIk8B,2BAAW,CAAC70B,MAAM,CAAC,IAAI60B,2BAAW,CAAC5kC,IAAI,CAAC,EAC5C;KACC,OAAO,KAAK;;GAGb,MAAMs/C,mBAAmB,GAAG,IAAI,CAAC/0C,SAAS,EAAE,CAACmI,eAAe,CAACjU,yBAAyB,CAAC;GACvF,IAAI6gD,mBAAmB,EACvB;KACC,OAAO,KAAK;;GAGb,OAAOr9C,2BAAW,CAACjC,IAAI,CAAC;CACzB;;;;;;;;CCpMM,MAAMu/C,sBAA4C,GAAG/gD,6BAAa,CAAC,wBAAwB,CAAC;AACnG,CAAO,MAAMghD,oBAA0C,GAAGhhD,6BAAa,CAAC,sBAAsB,CAAC;AAC/F,CAAO,MAAMihD,oBAA0C,GAAGjhD,6BAAa,CAAC,sBAAsB,CAAC;CAAC;CAAA;AAEhG,CAAO,MAAMkhD,aAAa,SAAS51C,UAAU,CAC7C;GAAA;KAAA;KAAA;OAAA;;KAAA;OAAA;OAAA,OACqB;;;GAEpB,OAAOjI,OAAO,GACd;KACC,OAAO,SAAS;;GAGjB89C,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZ5jB,UAAU,GACV;KACC,OAAO,4CAAI,8BAAc,IAAI,IAAI,4CAAI,0BAAUA,UAAU,EAAE;;GAG5D7S,IAAI,GACJ;KACC,IAAI,IAAI,CAAC6S,UAAU,EAAE,EACrB;OACCjwB,aAAG,CAACS,WAAW,CAAC,IAAI,CAAChC,SAAS,EAAE,CAACq1C,mBAAmB,EAAE,EAAE,UAAU,CAAC;;;GAIrEz2B,IAAI,GACJ;KACC,IAAI,IAAI,CAAC4S,UAAU,EAAE,EACrB;OACCjwB,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC/B,SAAS,EAAE,CAACq1C,mBAAmB,EAAE,EAAE,UAAU,CAAC;;;GAIlEtnB,OAAO,GACP;KACC,OAAO,IAAI,CAACyD,UAAU,EAAE,IAAI,CAACjwB,aAAG,CAACmpC,QAAQ,CAAC,IAAI,CAAC1qC,SAAS,EAAE,CAACq1C,mBAAmB,EAAE,EAAE,UAAU,CAAC;;GAG9FC,MAAM,GACN;KACC,IAAI,IAAI,CAACvnB,OAAO,EAAE,EAClB;OACC,IAAI,CAACnP,IAAI,EAAE;MACX,MAED;OACC,IAAI,CAACD,IAAI,EAAE;;;GAIb5e,SAAS,GACT;KACC,4CAAI,4BAAY,IAAI4yC,OAAO,CAAC,IAAI,CAAC3yC,SAAS,EAAE,EAAE,IAAI,CAACA,SAAS,EAAE,CAACyc,SAAS,CAAC,SAAS,CAAC,CAAC;KACpF,IAAI,CAAC,4CAAI,0BAAU5f,OAAO,EAAE,EAC5B;OACC,4CAAI;OAEJ,4CAAI,0BAAUi2C,QAAQ,CAAC,IAAI,CAAC9yC,SAAS,EAAE,CAACq1C,mBAAmB,EAAE,CAAC;OAC9D,MAAME,WAAW,GAAG,IAAI,CAACv1C,SAAS,EAAE,CAACyc,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC;OACpE,IAAI84B,WAAW,EACf;SACC,IAAI,CAAC32B,IAAI,EAAE;;;;GAKdte,OAAO,GACP;KACC,KAAK,CAACA,OAAO,EAAE;KACf,4CAAI,0BAAUA,OAAO,EAAE;;CAmCzB;CAAC,gCA/BA;GACC,IAAI,CAACJ,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/B6tC,sBAAsB,EACtB,MAAe;KACd,IAAI,CAACM,MAAM,EAAE;KAEb,OAAO,IAAI;IACX,EACD9tC,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B8tC,oBAAoB,EACpB,MAAe;KACd,IAAI,CAACt2B,IAAI,EAAE;KAEX,OAAO,IAAI;IACX,EACDnX,oCAAoB,CACpB,EACD,IAAI,CAACxH,SAAS,EAAE,CAACmH,eAAe,CAC/B+tC,oBAAoB,EACpB,MAAe;KACd,IAAI,CAACt2B,IAAI,EAAE;KAEX,OAAO,IAAI;IACX,EACDpX,oCAAoB,CACpB,CACD;CACF;;;;;;;;;;;;;ACvHD,CAqB2B;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAE3B,CAAO,MAAMguC,iBAAiB,SAASj2C,UAAU,CACjD;GAAA;KAAA;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OACwB;;KAAI;OAAA;OAAA,OACK;;KAAI;OAAA;OAAA,OACJ;;;GAEhCQ,SAAS,GACT;KACC,MAAM01C,WAAW,GAAG,IAAI,CAACz1C,SAAS,EAAE,CAACyc,SAAS,CAAC,aAAa,CAAC;KAC7D,IAAIziB,cAAI,CAACsH,cAAc,CAACm0C,WAAW,CAAC,EACpC;OACC,4CAAI,gCAAgBA,WAAW;OAC/B,4CAAI,wCAAoB9yC,aAAG,CAAChC,MAAM,oBAAC;8CACM,CAAiC;IAC1E,GAD2Cc,cAAI,CAAC9C,MAAM,yCAAC,IAAI,8BAAc,CACxE;OAED4C,aAAG,CAACvG,MAAM,yCAAC,IAAI,uCAAmB,IAAI,CAACgF,SAAS,EAAE,CAACusB,oBAAoB,EAAE,CAAC;OAE1E,4CAAI;;KAGL,IAAImpB,oBAAoB,GAAG,IAAI,CAAC11C,SAAS,EAAE,CAACyc,SAAS,CAAC,sBAAsB,CAAC;KAC7E,IAAIziB,cAAI,CAACsH,cAAc,CAACo0C,oBAAoB,CAAC,EAC7C;OACC,IAAIA,oBAAoB,KAAK,MAAM,EACnC;SACC,MAAMC,aAA4B,GAAG,IAAI,CAAC31C,SAAS,EAAE,CAAC41C,SAAS,CAAC,SAAS,CAAC;SAC1E,MAAMC,cAAc,GAAGF,aAAa,KAAK,IAAI,IAAIA,aAAa,CAAClI,oBAAoB,EAAE;SACrF,MAAMqI,aAA4B,GAAG,IAAI,CAAC91C,SAAS,EAAE,CAAC41C,SAAS,CAAC,SAAS,CAAC;SAC1E,MAAMG,cAAc,GAAGD,aAAa,KAAK,IAAI,IAAIA,aAAa,CAACxkB,qBAAqB,EAAE;SACtF,IAAIukB,cAAc,IAAIE,cAAc,EACpC;WACCL,oBAAoB,GAAG3tC,aAAG,CAACC,UAAU,CAAC,yCAAyC,CAAC;UAChF,MACI,IAAI6tC,cAAc,EACvB;WACCH,oBAAoB,GAAG3tC,aAAG,CAACC,UAAU,CAAC,iCAAiC,CAAC;UACxE,MACI,IAAI+tC,cAAc,EACvB;WACCL,oBAAoB,GAAG3tC,aAAG,CAACC,UAAU,CAAC,iCAAiC,CAAC;;;OAI1E,IAAI0tC,oBAAoB,KAAK,MAAM,EACnC;SACC,4CAAI,kDAAyBA,oBAAoB;SACjD,4CAAI;;;;GAKP,OAAOp+C,OAAO,GACd;KACC,OAAO,aAAa;;CAsItB;CAAC,0CAlIA;GACC,IAAI,CAAC4I,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACyb,sBAAsB,CAAC,MAAM;KAC7C,IAAI,CAACzb,SAAS,EAAE,CAACwN,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;OAC5C,4CAAI;MACJ,CAAC;IACF,CAAC,CACF;CACF;CAAC,+BAGD;GACC,IAAI,4CAAI,kCAAkB,IAAI,EAC9B;KACC;;GAGD,IAAIuoC,kBAAkB,GAAGC,mCAAmB,CAAC,IAAI,CAACh2C,gBAAgB,EAAE,CAAC40C,WAAW,EAAE,CAAC;GACnF,IAAImB,kBAAkB,IAAI,4CAAI,oDAA2B,IAAI,4CAAI,IAAI,yBAAY,EACjF;KACCA,kBAAkB,GAAG,KAAK;;GAG3B,IAAIA,kBAAkB,EACtB;KACCz0C,aAAG,CAACQ,QAAQ,yCAAC,IAAI,uCAAmB,SAAS,CAAC;IAC9C,MAED;KACCR,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAmB,SAAS,CAAC;;CAEnD;CAAC,sBAGD;GACC,MAAM+xC,aAAa,GAAGtwC,QAAQ,CAACswC,aAAa;GAC5C,MAAMC,WAAW,GAAG,IAAI,CAACh0C,SAAS,EAAE,CAAC+f,cAAc,EAAE;GAErD,OAAOi0B,WAAW,KAAK,IAAI,IAAID,aAAa,KAAK,IAAI,IAAIC,WAAW,CAACn+B,QAAQ,CAACk+B,aAAa,CAAC;CAC7F;CAAC,6BAGD;GACC,IAAI,4CAAI,0CAAsB,IAAI,EAClC;KACCxyC,aAAG,CAACS,WAAW,yCAAC,IAAI,uCAAmB,SAAS,CAAC;;CAEnD;CAAC,wCAGD;GACC,IAAIk0C,kBAAiC,GAAG,IAAI;GAC5C,MAAMC,yBAAyB,GAAG,MAAM;KACvC,IAAID,kBAAkB,EACtB;OACC,MAAME,WAAwC,GAAG,IAAI,CAACp2C,SAAS,EAAE,CAACoqB,eAAe,CAAC8rB,kBAAkB,CAAC5vC,MAAM,EAAE,CAAC;OAC9G,IAAI8vC,WAAW,EACf;SACC,OAAOA,WAAW,CAACp3B,OAAO,CAACy2B,WAAW;;;IAGxC;GAED,IAAI,CAACv1C,eAAe,CACnB,IAAI,CAACF,SAAS,EAAE,CAACmH,eAAe,CAC/BysC,wCAAwB,EACxB,MAAM;KACL,IAAI,CAAC,IAAI,CAAC5zC,SAAS,EAAE,CAAC8e,UAAU,EAAE,EAClC;OACC,OAAO,KAAK;;KAGb,MAAM5oB,SAAyB,GAAGuR,6BAAa,EAAE;KACjD,IAAIpM,gBAAsC,GAAG,IAAI;KACjD,IAAIqM,iCAAiB,CAACxR,SAAS,CAAC,IAAIA,SAAS,CAACwV,WAAW,EAAE,EAC3D;OACC,MAAMjW,IAAI,GAAGS,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;OACvC,IAAIsG,gCAAgB,CAACnH,IAAI,CAAC,IAAI0Z,2BAAW,CAAC1Z,IAAI,CAAC0I,SAAS,EAAE,CAAC,IAAI1I,IAAI,CAACoH,OAAO,EAAE,EAC7E;SACC,MAAMu5C,WAAwC,GAAG,IAAI,CAACp2C,SAAS,EAAE,CAACoqB,eAAe,CAAC30B,IAAI,CAAC6Q,MAAM,EAAE,CAAC;SAChG,IAAI8vC,WAAW,4CAAI,IAAI,yBAAY,EACnC;WACCA,WAAW,CAACp3B,OAAO,CAACy2B,WAAW,2CAAG,IAAI,+CAAsB;WAC5Dp6C,gBAAgB,GAAG5F,IAAI;WACvB,4CAAI;;;;KAKP,IAAIygD,kBAAkB,IAAIA,kBAAkB,KAAK76C,gBAAgB,EACjE;OACC86C,yBAAyB,EAAE;;KAG5BD,kBAAkB,GAAG76C,gBAAgB;KAErC,OAAO,KAAK;IACZ,EACDuuC,yCAAyB,CACzB,EACD,IAAI,CAAC5pC,SAAS,EAAE,CAACmH,eAAe,CAC/B6D,6BAAa,EACb,MAAe;KACdmrC,yBAAyB,EAAE;KAE3B,OAAO,KAAK;IACZ,EACDvM,yCAAyB,CACzB;;;;;;;;;;GAUD,IAAI,CAAC5pC,SAAS,EAAE,CAACmH,eAAe,CAC/B2sC,4BAAY,EACZ,MAAe;KACdqC,yBAAyB,EAAE;KAC3B,4CAAI;KAEJ,OAAO,KAAK;IACZ,EACDvM,yCAAyB,CACzB,CACD;CACF;;;;;;;;;;;;;AClND,CAyFA,MAAMyM,eAAe,GAAG;GACvBC,SAAS,EAAE,WAAW;GACtBC,UAAU,EAAE,YAAY;GACxBC,QAAQ,EAAE,UAAU;GACpBC,SAAS,EAAE;CACZ,CAAC;AAED;CAEA;CACA;CACA;CAFA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;CAAA;AAGA,CAAO,MAAMC,UAAU,SAASl2C,6BAAY,CAC5C;GAgCChB,WAAW,CAACm3C,aAAgC,EAC5C;KACC,KAAK,EAAE;KAAC;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;;KAAA;OAAA;OAAA,OAjCuB;;KAAI;OAAA;OAAA,OACI,IAAI1V,iBAAiB;;KAAE;OAAA;OAAA,OAC5B,IAAI2V,eAAK,CAAC32B,WAAW;;KAAE;OAAA;OAAA,OAC3B;;KAAI;OAAA;OAAA,OACN;;KAAI;OAAA;OAAA,OACD3rB,WAAW,CAACG;;KAAK;OAAA;OAAA,OACnB;;KAAI;OAAA;OAAA,OACI;;KAAI;OAAA;OAAA;;KAAA;OAAA;OAAA;;KAAA;OAAA;OAAA,OAGN;;KAAE;OAAA;OAAA,OAEN,IAAIwR,GAAG;;KAAE;OAAA;OAAA,OACe,IAAInN,GAAG;;KAAE;OAAA;OAAA,OACpC;;KAAI;OAAA;OAAA,OAEX6J,aAAG,CAAChC,MAAM,oBAAC,2DAAyD;;KAAA;OAAA;OAAA,OACpE;;KAAK;OAAA;OAAA,OACC;;KAAI;OAAA;OAAA,OACJ;;KAAI;OAAA;OAAA,OAEL;;KAAK;OAAA;OAAA,OACL01C,eAAe,CAACG;;KAAQ;OAAA;OAAA,OACd,4CAAI,4DAA6B5zC,IAAI,CAAC,IAAI;;KAAC;OAAA;OAAA,OACrD;;KAAI;OAAA;OAAA,OAEG;;KAAI;OAAA;OAAA,OACf;;KAAK;OAAA;OAAA,OACP;;KAAK;OAAA;OAAA,OACE;;KAK3B,IAAI,CAACnC,iBAAiB,CAAC,yBAAyB,CAAC;KAEjD,MAAMo2C,cAAiC,GAAG,IAAI,CAACr3C,WAAW,CAACs3C,iBAAiB,EAAE;KAC9E,MAAM16B,SAA0B,GAAGpiB,cAAI,CAACqN,aAAa,CAACsvC,aAAa,CAAC,GAAGA,aAAa,GAAG,EAAE;KACzF,4CAAI,4BAAY,IAAII,wCAAkB,CAAC;OAAE,GAAGF,cAAc;OAAE,GAAGz6B;MAAS,CAAC;KAEzE,MAAM+jB,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC3gC,WAAW,CAACw3C,iBAAiB,EAAE,CAAC;KAChE,MAAM5W,SAA0C,GAAG,4CAAI,0BAAUpkC,GAAG,CAAC,SAAS,EAAEmkC,cAAc,CAAC;KAC/F,MAAM8W,YAAsC,GAAG,4CAAI,0BAAUj7C,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;KACpF,MAAMqkC,eAAyC,GAAG,4CAAI,0BAAUrkC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC;KAExF,MAAMk7C,WAAW,GAAG,4CAAI,0BAAUl7C,GAAG,CAAC,aAAa,CAAC;KACpD,IAAI,CAAC1H,WAAW,CAACC,UAAU,EAAED,WAAW,CAACE,SAAS,CAAC,CAAC2R,QAAQ,CAAC+wC,WAAW,CAAC,EACzE;OACC,4CAAI,gCAAgBA,WAAW;;KAGhC,4CAAI,kCAAiBrZ,YAAY;KAEjC,4CAAI,4BAAY,IAAIqC,gBAAgB,CAACC,cAAc,EAAE,CAAC,GAAGC,SAAO,EAAE,GAAG6W,YAAY,CAAC,EAAE5W,eAAe,CAAC;KACpG,MAAM8W,YAAY,GAAG,4CAAI,0BAAUrW,eAAe,EAAE;KACpD,MAAMpoC,MAAK,GAAGy+C,YAAY,CAAC9gC,GAAG,CAAEiqB,iBAAoC,IAAK;OACxE,OAAOA,iBAAiB,CAAC3gC,QAAQ,CAAC,IAAI,CAAC;MACvC,CAAC;KAEF,4CAAI,oCAAkBy3C,4BAAY,CAAC;;OAElCC,SAAS,EAAEr9C,cAAI,CAACsH,cAAc,CAAC8a,SAAO,CAACi7B,SAAS,CAAC,GAAGj7B,SAAO,CAACi7B,SAAS,2CAAG,IAAI,sCAAkBF,YAAY,CAAC;OAC3Gz+C,KAAK,EAAEA,MAAK,CAAC4+C,IAAI,EAAE;OACnBzJ,OAAO,EAAGlc,KAAY,IAAK;SAC1BD,OAAO,CAACC,KAAK,CAACA,KAAK,CAAC;QACpB;OACDhuB,KAAK,0CAAE,IAAI,+BAAc;OACzB4zC,QAAQ,EAAE,4CAAI,0BAAUv7C,GAAG,CAAC,UAAU,CAAC,KAAK;MAC5C,CAAC;KAEF,IAAI,CAACw7C,YAAY,CAACp7B,SAAO,CAACuB,SAAS,CAAC;KACpC,IAAI,CAAC85B,YAAY,CAACr7B,SAAO,CAACyB,SAAS,CAAC;KACpC,IAAI,CAAC65B,YAAY,CAACt7B,SAAO,CAACu7B,SAAS,CAAC;KACpC,IAAI,CAACC,gBAAgB,CAACx7B,SAAO,CAACy7B,aAAa,CAAC;KAE5C,4CAAI,4CAAoBz3C,8BAAa,yCACpC,IAAI,uFACJ,IAAI,0CAAoB1H,MAAK,CAAC4+C,IAAI,EAAE,EACpC;KAED,4CAAI,0BAAU7W,IAAI,CAAC,IAAI,CAAC;KAExB,4CAAI,gFAAoB,IAAI,+CAAuB;KACnD,4CAAI,gFAAoB,IAAI,+CAAuB;KACnD,4CAAI,0EAAiB,IAAI,yCAAoB;KAC7C,4CAAI,0CAAqB,IAAIW,gBAAgB,CAAC,IAAI,CAAC;KAEnD,IAAI,CAAC1iB,oBAAoB,CAACtC,SAAO,CAAC0B,MAAM,CAAC;;GAG1C,OAAOk5B,iBAAiB,GACxB;KACC,OAAO,CACN/U,cAAc,EACdzyB,eAAe,EACfizB,eAAe,EACfE,UAAU,EACVQ,eAAe,EACfH,YAAY,EACZC,mBAAmB,EACnBI,iBAAiB,EACjBsF,eAAe,EACfxyB,UAAU,EACVtP,WAAW,EACXkiC,UAAU,EACV9X,aAAa,EACb0T,UAAU,EACV0B,cAAc,EACdtX,WAAW,EACXqK,WAAW,EACXzC,YAAY,EACZ/sB,aAAa,EACbohC,WAAW,EACX4B,aAAa,EACbY,aAAa,EACb0B,aAAa,EACba,kBAAkB,EAClB0E,qBAAqB,EACrBU,aAAa,EACbK,iBAAiB,EACjBjuB,UAAU,CACV;;GAGF,OAAOuvB,iBAAiB,GACxB;KACC,OAAO,EAAE;;GAGVlvC,oBAAoB,GACpB;KACC,+CAAO,IAAI;;GAGZ4U,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZC,SAAS,CAACq7B,IAAY,EAAEn7B,YAAiB,GAAG,IAAI,EAChD;KACC,OAAO,4CAAI,0BAAU3gB,GAAG,CAAC87C,IAAI,EAAEn7B,YAAY,CAAC;;GAG7Co7B,eAAe,GACf;KACC,+CAAO,IAAI;;GAGZnxB,aAAa,CAAC9Q,OAAe,EAC7B;KACC,MAAMzD,SAAS,GAAG,4CAAI,gCAAeyD,OAAO,CAAC;KAC7C,IAAIzD,SAAS,KAAK9a,SAAS,EAC3B;OACC,OAAO8a,SAAS;;KAGjB,OAAO,EAAE;;GAGVjK,cAAc,GACd;KACC,+CAAO,IAAI;;GAgPZnQ,eAAe,GACf;KACC,+CAAO,IAAI;;GAGZ+/C,mBAAmB,GACnB;KACC,+CAAO,IAAI;;GAuDZC,OAAO,CAACl1C,IAAY,EAAEqZ,OAAwB,EAC9C;KACC,IAAIpiB,cAAI,CAAC8G,QAAQ,CAACiC,IAAI,CAAC,EACvB;OACC,MAAMm1C,aAAa,GAAG;SACrBC,QAAQ,EAAEn+C,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAAC,IAAIA,OAAO,CAAC+7B,QAAQ,KAAK;QAC9D;OAED,4CAAI,kCAAgBjwC,MAAM,CAAC,MAAY;SACtC,MAAM1P,YAAgC,GAAGZ,iBAAiB,CAACmL,IAAI,EAAE,IAAI,CAAC;SACtE,MAAM1F,IAAc,GAAG2+B,wBAAQ,EAAE;SACjC3+B,IAAI,CAACoO,KAAK,EAAE;SACZpO,IAAI,CAACrC,MAAM,CAAC,GAAGxC,YAAY,CAAC;SAC5BgT,6BAAa,CAAC,IAAI,CAAC;QACnB,EAAE0sC,aAAa,CAAC;;;GAInBzsC,KAAK,CAAC2Q,OAAsB,EAC5B;KACC,MAAM87B,aAAa,GAAG;OACrBC,QAAQ,EAAEn+C,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAAC,IAAIA,OAAO,CAAC+7B,QAAQ,KAAK;MAC9D;KAED,4CAAI,kCAAgBjwC,MAAM,CAAC,MAAY;OACtC,MAAM7K,IAAc,GAAG2+B,wBAAQ,EAAE;OACjC,MAAM/0B,SAAS,GAAGxL,oCAAoB,EAAE;OACxC4B,IAAI,CAACoO,KAAK,EAAE;OACZpO,IAAI,CAACrC,MAAM,CAACiM,SAAS,CAAC;;;;;;;;OAQtBuE,6BAAa,CAAC,IAAI,CAAC;MACnB,EAAE0sC,aAAa,CAAC;;GAGlBE,YAAY,GACZ;KACC,IAAI,CAACjwC,eAAe,CAACkwC,qCAAqB,CAAC;;GAG5CC,OAAO,GACP;KACC,OAAO,4CAAI,kCAAgB9qC,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;OACtD,MAAM8qC,SAAS,GAAGn7C,eAAe,CAAC4+B,wBAAQ,EAAE,EAAE,IAAI,CAAC;;;;OAInD,OAAOuc,SAAS,CAACz9C,QAAQ,EAAE;MAC3B,CAAC;;GAGH+B,OAAO,CAAC8P,IAAa,GAAG,IAAI,EAC5B;KACC,OAAO,4CAAI,kCAAgBa,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;OACtD,OAAO+vB,YAAY,CAAC7wB,IAAI,CAAC;MACzB,CAAC;;GAGH+qC,YAAY,CAACc,IAAa,EAC1B;KACC,IAAIx+C,cAAI,CAAC2T,SAAS,CAAC6qC,IAAI,CAAC,EACxB;OACC,4CAAI,4BAAcA,IAAI;;;GAIxBC,YAAY,GACZ;KACC,+CAAO,IAAI;;GAGZjB,YAAY,CAAC75B,SAAwB,EACrC;KACC,IAAK3jB,cAAI,CAACwkB,QAAQ,CAACb,SAAS,CAAC,IAAIA,SAAS,GAAG,CAAC,IAAKA,SAAS,KAAK,IAAI,EACrE;OACC,MAAM8zB,OAAO,GAAG,4CAAI,kCAAgB9zB,SAAS;OAC7C,4CAAI,gCAAcA,SAAS;OAE3B,IAAI8zB,OAAO,EACX;SACClwC,aAAG,CAACyR,KAAK,CACR,IAAI,CAACuZ,oBAAoB,EAAE,EAC3B,6BAA6B,EAC7B5O,SAAS,GAAG,CAAC,GAAI,GAAEA,SAAU,IAAG,GAAG,IAAI,CACvC;;;;GAKJ+6B,YAAY,GACZ;KACC,+CAAO,IAAI;;GAGZjB,YAAY,CAAC55B,SAAwB,EACrC;KACC,IAAK7jB,cAAI,CAACwkB,QAAQ,CAACX,SAAS,CAAC,IAAIA,SAAS,GAAG,CAAC,IAAKA,SAAS,KAAK,IAAI,EACrE;OACC,MAAM4zB,OAAO,GAAG,4CAAI,kCAAgB5zB,SAAS;OAC7C,4CAAI,gCAAcA,SAAS;OAE3B,IAAI4zB,OAAO,EACX;SACClwC,aAAG,CAACyR,KAAK,CACR,IAAI,CAACuZ,oBAAoB,EAAE,EAC3B,6BAA6B,EAC7B1O,SAAS,GAAG,CAAC,GAAI,GAAEA,SAAU,IAAG,GAAG,IAAI,CACvC;;;;GAKJ86B,YAAY,GACZ;KACC,+CAAO,IAAI;;GAGZf,gBAAgB,CAACx7B,OAA0C,EAC3D;KACC,IAAI,CAACpiB,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAAC,EAChC;OACC;;KAGD,KAAK,MAAM,CAACM,MAAM,EAAErS,KAAK,CAAC,IAAI1V,MAAM,CAACwkB,OAAO,CAACiD,OAAO,CAAC,EACrD;OACC,MAAM9c,IAAI,GAAGmC,cAAI,CAACm3C,WAAW,CAACl8B,MAAM,CAAC;OAErCnb,aAAG,CAACyR,KAAK,CACR,IAAI,CAAC6lC,gBAAgB,EAAE,EACtB,oBAAmBv5C,IAAK,EAAC,EAC1B+K,KAAK,CACL;;;GAiBHyuC,uBAAuB,GACvB;KACC,+CAAO,IAAI;;GAGZptC,WAAW,GACX;KACC,OAAO,4CAAI,0CAAsB2qC,eAAe,CAACC,SAAS;;GA8F3DtxB,QAAQ,CAAC+zB,OAAgB,GAAG,IAAI,EAChC;KACC,4CAAI,wBAAW,MAAM,EAAEA,OAAO;;GAG/BC,MAAM,CAACD,OAAgB,GAAG,IAAI,EAC9B;KACC,4CAAI,wBAAW,MAAM,EAAEA,OAAO;;GAG/BzD,MAAM,CAACyD,OAAgB,GAAG,IAAI,EAC9B;KACC,4CAAI,wBAAW,QAAQ,EAAEA,OAAO;;GAGjCE,kBAAkB,GAClB;KACC,IAAI,4CAAI,0CAAsB,IAAI,EAClC;OACC,+CAAO,IAAI;;KAGZ,MAAM5mC,SAAS,GAAG,IAAI,CAAC0lC,eAAe,EAAE,CAAC9wC,SAAS,IAAI,EAAE;KACxD,MAAMA,SAAS,GAAGtE,aAAG,CAAChC,MAAM,sBAAC,aAAU,CAAY,cAAY,GAAtB0R,SAAS,CAAc;KAEhE9Q,aAAG,CAACyR,KAAK,CAAC/L,SAAS,EAAE;OACpBsjB,QAAQ,EAAE,UAAU;OACpBgnB,SAAS,EAAE;MACX,CAAC;KAEFhwC,aAAG,CAACvG,MAAM,CAACiM,SAAS,EAAE,IAAI,CAACslB,oBAAoB,EAAE,CAAC;KAElD,4CAAI,wCACHtlB,SAAS,CAACmtC,YAAY,GACpB3yC,cAAI,CAACuqC,QAAQ,CAACzqC,aAAG,CAACyR,KAAK,CAAC/L,SAAS,EAAE,YAAY,CAAC,CAAC,GACjDxF,cAAI,CAACuqC,QAAQ,CAACzqC,aAAG,CAACyR,KAAK,CAAC/L,SAAS,EAAE,eAAe,CAAC,CACrD;KAED1F,aAAG,CAAC8D,MAAM,CAAC4B,SAAS,CAAC;KAErB,+CAAO,IAAI;;GA0BZhH,gBAAgB,GAChB;KACC,+CAAO,IAAI;;GAGZi5C,cAAc,CAACC,sBAA0C,EACzD;KACC,IAAIn/C,cAAI,CAACgH,aAAa,CAACm4C,sBAAsB,CAAC,IAAIA,sBAAsB,KAAK,IAAI,EACjF;OACC,4CAAI,kCAAgBD,cAAc,CAACC,sBAAsB,CAAC;;;GAI5D36C,kBAAkB,GAClB;KACC,+CAAO,IAAI;;GAGZ1C,kBAAkB,GAClB;KACC,+CAAO,IAAI;;GAGZ0R,cAAc,GACd;KACC,OAAO,4CAAI,kCAAgBA,cAAc,EAAE;;GAG5CwzB,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZ4U,SAAS,CAACxoC,GAA+B,EACzC;KACC,OAAO,4CAAI,0BAAUpR,GAAG,CAACoR,GAAG,CAAC;;GAG9Bgd,eAAe,CAAChd,GAAY,EAC5B;KACC,OAAO,4CAAI,kCAAgBgd,eAAe,CAAChd,GAAG,CAAC;;GAGhDgsC,cAAc,CAACtd,WAAwB,EAAE1f,OAAgB,EACzD;KACC,4CAAI,kCAAgBg9B,cAAc,CAACtd,WAAW,EAAE1f,OAAO,CAAC;;GAGzDi9B,WAAW,CAAC9B,QAAiB,EAC7B;KACC,IAAIv9C,cAAI,CAAC2T,SAAS,CAAC4pC,QAAQ,CAAC,EAC5B;OACC,IAAI,CAACpvC,eAAe,CAACnU,mBAAmB,CAAC;OACzC,IAAI,CAACujD,QAAQ,EACb;SACC,IAAI,CAAC+B,IAAI,EAAE;;OAGZ,4CAAI,kCAAgBD,WAAW,CAAC9B,QAAQ,CAAC;;;GAI3Cz4B,UAAU,GACV;KACC,OAAO,4CAAI,kCAAgBA,UAAU,EAAE;;GAGxCrD,sBAAsB,CAAC89B,QAAQ,EAC/B;KACC,OAAO,4CAAI,kCAAgB99B,sBAAsB,CAAC89B,QAAQ,CAAC;;GAG5DtF,wBAAwB,CAACsF,QAAQ,EACjC;KACC,OAAO,4CAAI,kCAAgBtF,wBAAwB,CAACsF,QAAQ,CAAC;;GAG9DpyC,eAAe,CAACuP,OAAO,EAAE6iC,QAAQ,EAAEn9C,QAAQ,EAC3C;KACC,OAAO,4CAAI,kCAAgB+K,eAAe,CAACuP,OAAO,EAAE6iC,QAAQ,EAAEn9C,QAAQ,CAAC;;GAGxE+L,eAAe,CAAC7J,IAAI,EAAE8I,OAAO,EAC7B;KACC,OAAO,4CAAI,kCAAgBe,eAAe,CAAC7J,IAAI,EAAE8I,OAAO,CAAC;;GAG1DqwB,wBAAwB,CAAC+hB,KAAK,EAAED,QAAQ,EACxC;KACC,OAAO,4CAAI,kCAAgB9hB,wBAAwB,CAAC+hB,KAAK,EAAED,QAAQ,CAAC;;GAGrEjuC,qBAAqB,CAACkuC,KAAK,EAAED,QAAQ,EACrC;KACC,OAAO,4CAAI,kCAAgBjuC,qBAAqB,CAACkuC,KAAK,EAAED,QAAQ,CAAC;;GAGlEnnB,2BAA2B,CAACmnB,QAAQ,EACpC;KACC,OAAO,4CAAI,kCAAgBnnB,2BAA2B,CAACmnB,QAAQ,CAAC;;GAGjEE,yBAAyB,CAACF,QAAQ,EAClC;KACC,OAAO,4CAAI,kCAAgBE,yBAAyB,CAACF,QAAQ,CAAC;;GAG/DG,oBAAoB,CAACH,QAAQ,EAC7B;KACC,OAAO,4CAAI,kCAAgBG,oBAAoB,CAACH,QAAQ,CAAC;;GAG1DxU,qBAAqB,CACpBxgB,QAA4B,EAC5Bo1B,SAAiB,EACjBC,aAAuD,EAExD;KACC,MAAMC,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC1zC,QAAQ,CAACwzC,SAAS,CAAC;KACnE,MAAMG,WAAW,GAAInvC,KAAY,IAAK;OACrC,IAAI,CAACzC,MAAM,CAAC,MAAM;SACjB,MAAM6xC,WAAW,GAAGrI,0CAA0B,CAAC/mC,KAAK,CAACwR,MAAM,CAAC;SAC5D,IAAI49B,WAAW,KAAK,IAAI,EACxB;WACC,MAAMx0B,UAAU,GACfs0B,UAAU,GACNE,WAAW,YAAYx1B,QAAQ,GAAGw1B,WAAW,GAAG,IAAI,GACrDpyC,oCAAmB,CAACoyC,WAAW,EAAGtkD,IAAI,IAAKA,IAAI,YAAY8uB,QAAQ,CACtE;WAED,IAAIgB,UAAU,KAAK,IAAI,EACvB;aACCq0B,aAAa,CAACjvC,KAAK,EAAE4a,UAAU,CAACjf,MAAM,EAAE,CAAC;;;QAG3C,CAAC;MACF;KAED,OAAO,IAAI,CAACozC,oBAAoB,CAAC,CAAC1F,WAAW,EAAEgG,eAAe,KAAW;OACxE,IAAIhG,WAAW,EACf;SACCzmC,eAAK,CAAC3K,IAAI,CAACoxC,WAAW,EAAE2F,SAAS,EAAEG,WAAW,EAAED,UAAU,CAAC;;OAG5D,IAAIG,eAAe,EACnB;SACCzsC,eAAK,CAACsS,MAAM,CAACm6B,eAAe,EAAEL,SAAS,EAAEG,WAAW,EAAED,UAAU,CAAC;;MAElE,CAAC;;GAGH3xC,MAAM,CAACqS,QAAoB,EAAE6B,OAAgB,EAC7C;KACC,4CAAI,kCAAgBlU,MAAM,CAACqS,QAAQ,EAAE6B,OAAO,CAAC;;GAG9ChmB,KAAK,CACJ6jD,UAAuB,EACvB79B,OAAwD,EAEzD;KACC,IAAI,CAAC3Y,QAAQ,CAACy2C,QAAQ,EAAE,EACxB;OACCt1B,MAAM,CAACxuB,KAAK,EAAE;;KAGf,4CAAI,kCAAgBA,KAAK,CACxB4D,cAAI,CAACC,UAAU,CAACggD,UAAU,CAAC,GAAGA,UAAU,GAAG,IAAI,EAC/CjgD,cAAI,CAACqN,aAAa,CAAC+U,OAAO,CAAC,GAAGA,OAAO,GAAG;OAAE+9B,gBAAgB,EAAE;MAAa,CACzE;;GAGFD,QAAQ,GACR;KACC,OAAO,IAAI,CAACn6B,cAAc,EAAE,CAAClK,QAAQ,CAACpS,QAAQ,CAACswC,aAAa,CAAC;;GAG9DuF,IAAI,GACJ;KACC,4CAAI,kCAAgBA,IAAI,EAAE;;GAG3BzE,WAAW,GACX;KACC,OAAO,4CAAI,kCAAgBA,WAAW,EAAE;;GAGzC90B,cAAc,GACd;KACC,OAAO,4CAAI,kCAAgBA,cAAc,EAAE;;GAG5Cq6B,QAAQ,CAAC1hD,KAAY,EACrB;KACC,OAAO,4CAAI,kCAAgB0hD,QAAQ,CAAC1hD,KAAK,CAAC;;GAG3CmgD,gBAAgB,GAChB;KACC,OAAO,4CAAI,oBAAOv4B,QAAQ,CAAC,MAAM,EAAE,MAAM;OACxC,MAAM+5B,OAAO,GAAG,CACf,IAAI,CAACv7B,UAAU,EAAE,GAAG,YAAY,GAAG,aAAa,CAChD;OAED,OAAOnc,aAAG,CAAChC,MAAM,sBAAC;iCACU,CAAoB;OAC9C,CAA2B;;IAE7B,GAH8B05C,OAAO,CAACrlD,IAAI,CAAC,GAAG,CAAC,EAC3C,IAAI,CAACslD,iBAAiB,EAAE;MAG5B,CAAC;;GAGHA,iBAAiB,GACjB;KACC,OAAO,4CAAI,oBAAOh6B,QAAQ,CAAC,OAAO,EAAE,MAAM;OACzC,OAAO3d,aAAG,CAAChC,MAAM,sBAAC;;OAEhB,CAA4B;OAC5B,CAA6B;OAC7B,CAA8B;OAC9B,CAA4B;;IAE9B,GALI,IAAI,CAAC45C,kBAAkB,EAAE,EACzB,IAAI,CAAClF,mBAAmB,EAAE,EAC1B,IAAI,CAAC9oB,oBAAoB,EAAE,EAC3B,IAAI,CAACiuB,kBAAkB,EAAE;MAG7B,CAAC;;GAGHnF,mBAAmB,GACnB;KACC,OAAO,4CAAI,oBAAO/0B,QAAQ,CAAC,SAAS,EAAE,MAAM;OAC3C,OAAO3d,aAAG,CAAChC,MAAM,kBAAC;;IAElB;MACA,CAAC;;GAGH4rB,oBAAoB,GACpB;KACC,OAAO,4CAAI,oBAAOjM,QAAQ,CAAC,UAAU,EAAE,MAAM;OAC5C,OAAO3d,aAAG,CAAChC,MAAM,kBAAC;;OAEhB,CAA8B;;IAEhC,GAFI,IAAI,CAAC6Q,oBAAoB,EAAE;MAG/B,CAAC;;GAGHA,oBAAoB,GACpB;KACC,OAAO,4CAAI,oBAAO8O,QAAQ,CAAC,UAAU,EAAE,MAAM;OAC5C,OAAO3d,aAAG,CAAChC,MAAM,kBAAC;;;wBAGC,CAAuC;;;IAG1D,GAHqB,IAAI,CAACme,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO;MAIzD,CAAC;;GAGH07B,kBAAkB,GAClB;KACC,OAAO,4CAAI,oBAAOl6B,QAAQ,CAAC,QAAQ,EAAE,MAAM;OAC1C,OAAO3d,aAAG,CAAChC,MAAM,kBAAC;;IAElB;MACA,CAAC;;GAGH45C,kBAAkB,GAClB;KACC,OAAO,4CAAI,oBAAOj6B,QAAQ,CAAC,QAAQ,EAAE,MAAM;OAC1C,OAAO3d,aAAG,CAAChC,MAAM,kBAAC;;IAElB;MACA,CAAC;;GAGHmyC,QAAQ,CAAChnC,SAAsB,EAAE2uC,WAAoB,GAAG,KAAK,EAC7D;KACC,IAAI,CAACzgD,cAAI,CAACgH,aAAa,CAAC8K,SAAS,CAAC,EAClC;OACC;;KAGD,IAAI,CAAC,IAAI,CAAC0lB,UAAU,EAAE,EACtB;OACC,IAAIx3B,cAAI,CAACsH,cAAc,CAAC,4CAAI,0BAAUtF,GAAG,CAAC,SAAS,CAAC,CAAC,EACrD;SACC,IAAI,CAACi8C,OAAO,CAAC,4CAAI,0BAAUj8C,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,MAED;SACC,4CAAI,sCAAkB,4CAAI,0BAAUA,GAAG,CAAC,aAAa,CAAC;;;KAIxD,IAAIy+C,WAAW,EACf;OACCl5C,aAAG,CAAC7E,OAAO,CAACoP,SAAS,EAAE,IAAI,CAAC+sC,gBAAgB,EAAE,CAAC;MAC/C,MAED;OACCt3C,aAAG,CAACvG,MAAM,CAAC,IAAI,CAAC69C,gBAAgB,EAAE,EAAE/sC,SAAS,CAAC;;KAG/C,4CAAI,kCAAgBotC,cAAc,CAAC,IAAI,CAAC1nC,oBAAoB,EAAE,CAAC;KAE/D,IAAI,IAAI,CAACinC,YAAY,EAAE,EACvB;OACC,IAAI,CAACriD,KAAK,CAAC,IAAI,EAAE;SAAE+jD,gBAAgB,EAAE;QAAa,CAAC;;KAGpD,IAAI,yCAAC,IAAI,2BAAU,EACnB;OACC,4CAAI,0CAAmB,IAAItH,cAAc,CAAC,MAAM;SAC/C,IAAI,CAAChwC,IAAI,CAAC,UAAU,CAAC;SACrB,IAAI,CAACsF,eAAe,CAACnU,mBAAmB,EAAE;WAAE0mD,OAAO,EAAE;UAAU,CAAC;QAChE,CAAC;OAEF,4CAAI,wCAAiB1H,OAAO,CAAC,IAAI,CAACzmB,oBAAoB,EAAE,CAAC;;KAG1D,4CAAI,8BAAa,IAAI;;GAGtBiF,UAAU,GACV;KACC,+CAAO,IAAI;;GAGZrC,kBAAkB,GAClB;KACC,IAAI,CAAC3hB,cAAc,EAAE,CAACC,IAAI,CAAC,MAAM;OAChC,MAAMvX,SAAyB,GAAGuR,6BAAa,EAAE;OACjD,IAAI,CAACC,iCAAiB,CAACxR,SAAS,CAAC,IAAIA,SAAS,CAACwV,WAAW,EAAE,EAC5D;SACC;;OAGD,MAAMvV,MAAM,GAAGD,SAAS,CAACC,MAAM;OAC/B,MAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;OAC7B,MAAMsuB,KAAK,GAAGi2B,mCAAc,yCAC3B,IAAI,mCACJxkD,MAAM,CAACG,OAAO,EAAE,EAChBH,MAAM,CAACwV,MAAM,EACbvV,KAAK,CAACE,OAAO,EAAE,EACfF,KAAK,CAACuV,MAAM,CACZ;OAED,IAAI+Y,KAAK,KAAK,IAAI,EAClB;SACC,MAAMmF,iBAAiB,GAAG,IAAI,CAAC0C,oBAAoB,EAAE;SACrD,MAAMtB,YAAY,GAAGpB,iBAAiB,CAAC1K,qBAAqB,EAAE;SAC9D,MAAMy7B,cAAc,GAAGC,4CAAuB,yCAAC,IAAI,mCAAiBn2B,KAAK,CAAC;SAC1E,MAAMo2B,oBAAoB,GAAGF,cAAc,CAAC/gD,MAAM;SAElD,4CAAI,4CAAqBkH,SAAS,GAAG,EAAE;SAEvC,KAAK,IAAIlK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGikD,oBAAoB,EAAEjkD,CAAC,EAAE,EAC7C;WACC,MAAMkkD,aAAa,GAAGH,cAAc,CAAC/jD,CAAC,CAAC;WACvC,MAAM25C,IAAI,GAAG7tC,aAAG,CAAChC,MAAM,oBAAC,qDAAmD,EAAC;WAC5E,MAAMwpB,GAAG,GAAG4wB,aAAa,CAAC5wB,GAAG,GAAGc,YAAY,CAACd,GAAG,GAAGN,iBAAiB,CAACiB,SAAS;WAC9E,MAAMlb,IAAI,GAAGmrC,aAAa,CAACnrC,IAAI,GAAGqb,YAAY,CAACrb,IAAI,GAAGia,iBAAiB,CAACe,UAAU;WAElFrpB,aAAG,CAACyR,KAAK,CAACw9B,IAAI,EAAE;aACfrmB,GAAG,EAAG,GAAEA,GAAI,IAAG;aACfva,IAAI,EAAG,GAAEA,IAAK,IAAG;aACjBsP,MAAM,EAAG,GAAE67B,aAAa,CAAC77B,MAAO,IAAG;aACnCD,KAAK,EAAG,GAAE87B,aAAa,CAAC97B,KAAM;YAC9B,CAAC;WAEF1d,aAAG,CAACvG,MAAM,CAACw1C,IAAI,0CAAE,IAAI,4CAAqB;;SAG3CjvC,aAAG,CAACvG,MAAM,yCAAC,IAAI,6CAAsB,IAAI,CAACuxB,oBAAoB,EAAE,CAAC;;MAElE,CAAC;;GAGH6C,uBAAuB,GACvB;KACC7tB,aAAG,CAAC8D,MAAM,yCAAC,IAAI,4CAAqB;;GAGrC/E,OAAO,GACP;KACC,4CAAI,IAAI,6BACR;OACC;;KAGD,4CAAI,8BAAe,IAAI;KACvB,IAAI,CAACuC,IAAI,CAAC,WAAW,CAAC;KAEtB,KAAK,MAAM,GAAG09B,MAAM,CAAC,4CAAI,IAAI,2BAC7B;OACCA,MAAM,CAACjgC,OAAO,EAAE;;KAGjB,4CAAI;KACJ,IAAI,IAAI,CAACkxB,UAAU,EAAE,EACrB;OACC,4CAAI,wCAAiB+hB,UAAU,EAAE;OACjC,IAAI,CAAC2F,cAAc,CAAC,IAAI,CAAC;OACzB33C,aAAG,CAAC8D,MAAM,CAAC,IAAI,CAACwzC,gBAAgB,EAAE,CAAC;;KAGpC,4CAAI,0CAAmB,IAAI;KAC3B,4CAAI,4BAAY,IAAI;KACpB,4CAAI,oCAAkB,IAAI;KAC1B,IAAI,CAACmC,KAAK,GAAG,IAAI;KACjB,4CAAI,0CAAqB,IAAI;KAC7B,4CAAI,wCAAoB,IAAI;KAC5B,4CAAI,wCAAoB,IAAI;KAC5B,4CAAI,sCAAmB,IAAI;KAC3B,4CAAI,gDAAwB,IAAI;KAEhCrmD,MAAM,CAACsmD,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;;CAEnC;CAAC,2BAhhCiBC,kBAA2C,EAAE9+B,OAAwB,EACtF;GACC,IAAIpiB,cAAI,CAACghC,KAAK,CAACkgB,kBAAkB,CAAC,EAClC;KACC,4CAAI,kCAAgBhzC,MAAM,CAAC,MAAM;OAChC,MAAM7K,IAAI,GAAG2+B,wBAAQ,EAAE;OACvB,IAAI3+B,IAAI,CAACR,OAAO,EAAE,EAClB;SACC,MAAMoK,SAAS,GAAGxL,oCAAoB,EAAE;SACxC4B,IAAI,CAACrC,MAAM,CAACiM,SAAS,CAAC;;MAEvB,EAAEmV,OAAO,CAAC;IACX,MACI,IAAIpiB,cAAI,CAACqN,aAAa,CAAC6zC,kBAAkB,CAAC,IAAIlhD,cAAI,CAACsH,cAAc,CAAC45C,kBAAkB,CAAC,EAC1F;KACC,MAAMC,iBAA8B,GAAG,4CAAI,kCAAgBC,gBAAgB,CAACF,kBAAkB,CAAC;KAC/F,4CAAI,kCAAgB9B,cAAc,CAAC+B,iBAAiB,CAAC;IACrD,MACI,IAAInhD,cAAI,CAACC,UAAU,CAACihD,kBAAkB,CAAC,EAC5C;KACC,4CAAI,kCAAgBhzC,MAAM,CAAC,MAAM;OAChC,MAAM7K,IAAI,GAAG2+B,wBAAQ,EAAE;OACvB,IAAI3+B,IAAI,CAACR,OAAO,EAAE,EAClB;SACCq+C,kBAAkB,yCAAC,IAAI,kCAAgB;;MAExC,EAAE9+B,OAAO,CAAC;;CAEb;CAAC,6BAEkBi/B,WAAiC,EACpD;GACC,MAAM7O,eAAe,GAAG,EAAE;GAC1B6O,WAAW,CAACv8C,OAAO,CAAEgI,SAAS,IAAK;KAClC,IAAIA,SAAS,CAACwb,qBAAqB,EACnC;OACC,MAAMg5B,cAAc,GAAG,IAAI,CAAC7jB,wBAAwB,CACnD3wB,SAAS,EACT,CAACpO,KAAK,EAAE0O,OAAO,KAAK;SACnB,KAAK,MAAM,CAACgG,GAAG,EAAEmuC,GAAG,CAAC,IAAI7iD,KAAK,EAC9B;WACC,IAAI6iD,GAAG,KAAK,WAAW,EACvB;aACC,MAAMpa,SAA6B,GAAG,4CAAI,8CAAsBnlC,GAAG,CAACoR,GAAG,CAAC;aACxE,IAAI+zB,SAAS,EACb;eACCA,SAAS,CAAC7gC,OAAO,EAAE;;aAGpB,4CAAI,8CAAsB2X,MAAM,CAAC7K,GAAG,CAAC;YACrC,MAED;aACC,4CAAI,oCAAiB/G,GAAG,CAAC+G,GAAG,CAAC;;;QAG/B,CACD;OAEDo/B,eAAe,CAACzyC,IAAI,CAACuhD,cAAc,CAAC;;IAErC,CAAC;GAEF,MAAMA,cAAc,GAAG,4CAAI,kCAAgB7B,yBAAyB,CAClE+B,UAA6C,IAAK;KAClD,4CAAI,oCAAiB18C,OAAO,CAAEwY,OAAO,IAAK;OACzC,MAAMmkC,SAAS,GAAGD,UAAU,CAAClkC,OAAO,CAAC;OACrC,MAAM;SACL8K,cAAc,EAAEs5B,cAAc;SAC9Bt/B,OAAO,EAAEu/B;QACT,GAAGF,SAAS;OAEb,MAAMta,SAAS,GAAG,4CAAI,8CAAsBnlC,GAAG,CAACsb,OAAO,CAAC;OACxD,MAAM8+B,WAAW,GAAG,4CAAI,kCAAgBhsB,eAAe,CAAC9S,OAAO,CAAC;OAChE,IAAI8+B,WAAW,YAAXA,WAAW,CAAEr1C,SAAS,IAAIogC,SAAS,EACvC;SACCA,SAAS,CAACj5B,MAAM,CAACyzC,gBAAgB,CAAC;QAClC,MACI,IAAIvF,WAAW,EACpB;SACC,4CAAI,8CAAsBl8C,GAAG,CAC5Bod,OAAO,EACP,IAAIokC,cAAc,CAAC;WAClBj8C,UAAU,EAAE,IAAI;WAChB0c,MAAM,EAAEi6B,WAAW;WACnB9+B,OAAO;WACP8E,OAAO,EAAEu/B;UACT,CAAC,CACF;;MAEF,CAAC;KAEF,4CAAI,oCAAiBlwC,KAAK,EAAE;IAC5B,CACD;GAED+gC,eAAe,CAACzyC,IAAI,CAACuhD,cAAc,CAAC;GAEpC,OAAOl7C,8BAAa,CAAC,GAAGosC,eAAe,CAAC;CACzC;CAAC,gCAGD;GACC,OAAOpsC,8BAAa,CACnB,IAAI,CAAC+G,eAAe,CACnB0sC,6BAAa,EACb,MAAe;KACd,IACC,IAAI,CAACiF,uBAAuB,EAAE,IAC3B,4CAAI,0CAAsBzC,eAAe,CAACC,SAAS,IACnD,IAAI,CAACz5C,OAAO,CAAC,KAAK,CAAC,EAEvB;OACC,IAAI,CAACm8C,MAAM,EAAE;OAEb,OAAO,IAAI;;KAGZ,IAAI,CAACn2C,IAAI,CAAC,SAAS,CAAC;KAEpB,OAAO,KAAK;IACZ,EACD+mC,yCAAyB,CACzB,EAED,IAAI,CAACziC,eAAe,CACnB2sC,4BAAY,EACXnpC,KAAK,IAAc;KACnB,IACC,IAAI,CAACmuC,uBAAuB,EAAE,KAE7B,4CAAI,0CAAsBzC,eAAe,CAACE,UAAU,IACjD,4CAAI,0CAAsBF,eAAe,CAACI,SAAS,CACtD,EAEF;OACC,OAAO,IAAI;;KAGZ,IAAI,CAAC5zC,IAAI,CAAC,QAAQ,CAAC;KAEnB,OAAO,KAAK;IACZ,EACD+mC,yCAAyB,CACzB,EAED,IAAI,CAACnuB,sBAAsB,CAC1B,CAAC;KAAEmgC,aAAa;KAAEC,WAAW;KAAEC,eAAe;KAAEC;IAAM,KAAK;KAC1D,MAAMlH,WAAW,GAAG,IAAI,CAACA,WAAW,EAAE;KACtC,MAAMmH,iBAAiB,GAAGH,WAAW,CAACxqB,IAAI,GAAG,CAAC,IAAIuqB,aAAa,CAACvqB,IAAI,GAAG,CAAC;KACxE,IAAIwjB,WAAW,IAAI,CAACmH,iBAAiB,EACrC;OACC;;KAGD,MAAMC,eAAwB,GAAGH,eAAe,CAACj/C,OAAO,EAAE;KAC1D,IAAI,4CAAI,0BAAUb,GAAG,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAChD;OACC,IAAIigD,eAAe,EACnB;SACC,4CAAI;QACJ,MACI,IAAI,IAAI,CAACvwC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC7O,OAAO,EAAE,EAC9C;SACC,IAAI,CAACm8C,MAAM,CAAC,KAAK,CAAC;;;KAIpB,IAAI,CAACiD,eAAe,IAAIF,IAAI,CAACv1C,GAAG,CAAC,eAAe,CAAC,EACjD;OACC;;KAGD,IAAI,CAAC3D,IAAI,CAAC,UAAU,EAAE;OAAEo5C,eAAe;OAAEF;MAAM,CAAC;KAEhD,MAAMl/C,OAAO,GAAG,IAAI,CAACA,OAAO,EAAE;KAC9B,IAAI,4CAAI,0CAAsBA,OAAO,EACrC;OACC,4CAAI,wCAAoBA,OAAO;OAC/B,IAAI,CAACgG,IAAI,CAAC,sBAAsB,EAAE;SAAEhG,OAAO;SAAEo/C;QAAiB,CAAC;;IAEhE,CACD,EAED,IAAI,CAAC90C,eAAe,CACnBqD,iCAAiB,EAChBG,KAAoB,IAAK;KACzB,MAAM;OAAE0I,IAAI;OAAEnH,OAAO;OAAEC;MAAS,GAAGxB,KAAK;KACxC,IAAKm4B,iBAAO,CAACC,KAAK,EAAE,IAAI52B,OAAO,IAAKD,OAAO,EAC3C;OACC,IAAI,CAACrJ,IAAI,CAAC,aAAa,CAAC;OAExB,OAAO,IAAI;;KAGZ,IAAIwQ,IAAI,KAAK,QAAQ,EACrB;OACC,IAAI,CAACxQ,IAAI,CAAC,UAAU,CAAC;OAErB,OAAO,IAAI;;KAGZ,OAAO,KAAK;IACZ,EACD2E,oCAAoB,CACpB,EAED,IAAI,CAACysC,wBAAwB,CAAEn1B,UAAmB,IAAc;KAC/D,IAAI,CAACtN,oBAAoB,EAAE,CAAComB,eAAe,GAAG9Y,UAAU;KACxD,IAAIA,UAAU,EACd;OACCvd,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC62C,gBAAgB,EAAE,EAAE,aAAa,CAAC;OACvDt3C,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC82C,gBAAgB,EAAE,EAAE,YAAY,CAAC;MACnD,MAED;OACCt3C,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC62C,gBAAgB,EAAE,EAAE,YAAY,CAAC;OACtDt3C,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC82C,gBAAgB,EAAE,EAAE,aAAa,CAAC;;KAGrD,IAAI,CAACh2C,IAAI,CAAC,YAAY,EAAE;OAAEic;MAAY,CAAC;IACvC,CAAC,CACF;CACF;CAAC,2BAEgBshB,OAA4B,EAC7C;GACC,MAAM8b,QAAQ,GAAGhf,cAAc,CAC9BkD,OAAO,CACL/pB,GAAG,CAAE5gB,IAAI,IAAKA,IAAI,CAAC6B,OAAO,EAAE,CAAC,CAC7B6kD,IAAI,EAAE,CACNnnD,IAAI,CAAC,GAAG,CAAC,CACX;GAED,OAAO0lC,MAAM,CAACwhB,QAAQ,CAAC;CACxB;CAAC,iCAaD;GACC,MAAMrgD,SAA0B,GAAG,IAAI/C,GAAG,EAAE;GAC5C,KAAK,MAAM,GAAGynC,MAAM,CAAC,4CAAI,IAAI,2BAC7B;KACC,MAAMlqB,GAA2B,GAAGkqB,MAAM,CAAC3gC,YAAY,EAAE;KACzD,IAAIyW,GAAG,KAAK,IAAI,EAChB;OACC1hB,MAAM,CAACI,IAAI,CAACshB,GAAG,CAAC,CAACvX,OAAO,CAAEsO,GAAW,IAAW;SAC/C,IAAIgvC,YAAY,GAAGvgD,SAAS,CAACG,GAAG,CAACoR,GAAG,CAAC;SACrC,IAAIgvC,YAAY,KAAK7kD,SAAS,EAC9B;WACC6kD,YAAY,GAAG,EAAE;WACjBvgD,SAAS,CAAC3B,GAAG,CAACkT,GAAG,EAAEgvC,YAAY,CAAC;;SAGjCA,YAAY,CAACriD,IAAI,CAACsc,GAAG,CAACjJ,GAAG,CAAC,CAAC;QAC3B,CAAC;;;GAIJ,OAAOvR,SAAS;CACjB;CAAC,iCAGD;GACC,MAAM0C,SAA0B,GAAG,IAAIzF,GAAG,EAAE;GAC5C,KAAK,MAAM,GAAGynC,MAAM,CAAC,4CAAI,IAAI,2BAC7B;KACC,MAAMlqB,GAAkC,GAAGkqB,MAAM,CAAC1gC,YAAY,EAAE;KAChE,IAAIwW,GAAG,KAAK,IAAI,EAChB;OACC1hB,MAAM,CAACI,IAAI,CAACshB,GAAG,CAAC,CAACvX,OAAO,CAAEylB,QAAgB,IAAW;SACpD,IAAIvqB,cAAI,CAACC,UAAU,CAACoc,GAAG,CAACkO,QAAQ,CAAC,CAAC,EAClC;WACChmB,SAAS,CAACrE,GAAG,CAACqqB,QAAQ,EAAElO,GAAG,CAACkO,QAAQ,CAAC,CAAC;;QAEvC,CAAC;;;GAIJ,OAAOhmB,SAAS;CACjB;CAAC,8BAGD;GACC,MAAM89C,UAAsB,GAAG,IAAI,CAACzG,SAAS,CAAC,MAAM,CAAC;GACrD,MAAM0G,OAAO,GAAGD,UAAU,YAAVA,UAAU,CAAE10B,SAAS,EAAE,GAAG00B,UAAU,CAACz0B,OAAO,EAAE,GAAG,MAAM;GAEvE,OAAO,IAAI20B,mCAAmB,CAAC;KAAED;IAAS,CAAC;CAC5C;CAAC,gCAgJD;GACC,4CAAI,sCAAmB,IAAI;GAC3B,IAAI,IAAI,CAACz/C,OAAO,EAAE,EAClB;KACC,4CAAI,wBAAW,MAAM,EAAE,KAAK,EAAE,IAAI;IAClC,MAED;KACC,IAAI,CAACm8C,MAAM,CAAC,KAAK,CAAC;;CAEpB;CAAC,oBAYS1qC,IAAgC,GAAG,MAAM,EAAEyqC,OAAgB,GAAG,IAAI,EAAEyD,YAAqB,GAAG,KAAK,EAC3G;GACC,IAAI,CAAC,IAAI,CAAC1D,uBAAuB,EAAE,EACnC;KACC;;GAGD,MAAMntB,SAAS,GACd,4CAAI,0CAAsB0qB,eAAe,CAACC,SAAS,IAAI,4CAAI,0CAAsBD,eAAe,CAACE,UACjG;GAED,MAAMkG,QAAQ,GACb,4CAAI,0CAAsBpG,eAAe,CAACG,QAAQ,IAAI,4CAAI,0CAAsBH,eAAe,CAACI,SAChG;GAED,IAAKnoC,IAAI,KAAK,MAAM,IAAIqd,SAAS,IAAMrd,IAAI,KAAK,MAAM,IAAImuC,QAAS,EACnE;KACC;;GAGD,IAAI1D,OAAO,KAAK,KAAK,EACrB;KACC,IAAIptB,SAAS,EACb;OACC,4CAAI,wCAAoB0qB,eAAe,CAACG,QAAQ;OAChDj1C,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC62C,gBAAgB,EAAE,EAAE,aAAa,CAAC;OACvD,IAAI,CAACh2C,IAAI,CAAC,oBAAoB,EAAE;SAAE6K,MAAM,EAAE;QAAM,CAAC;OACjD,IAAI,CAACtX,KAAK,EAAE;MACZ,MAED;OACC,4CAAI,wCAAoBigD,eAAe,CAACC,SAAS;OACjD/0C,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC82C,gBAAgB,EAAE,EAAE,aAAa,CAAC;OACpD,IAAI,CAACh2C,IAAI,CAAC,oBAAoB,EAAE;SAAE6K,MAAM,EAAE;QAAO,CAAC;OAClD,IAAI,CAACjC,KAAK,EAAE;OACZ,IAAI,CAAC2sC,YAAY,EAAE;OACnB,IAAI,CAACoE,YAAY,EACjB;SACC,IAAI,CAAClD,IAAI,EAAE;;;KAIb;;GAGD/rC,eAAK,CAACsS,MAAM,CAAC,IAAI,CAACg5B,gBAAgB,EAAE,EAAE,eAAe,0CAAE,IAAI,sDAA0B;GAErF,IAAIltB,SAAS,EACb;KACC,4CAAI,wCAAoB0qB,eAAe,CAACI,SAAS;KACjD,IAAI,CAAC6C,IAAI,EAAE,CAAC;;KAEZ,MAAMt7B,aAAa,GAAG,IAAI,CAAC66B,gBAAgB,EAAE,CAACzE,YAAY;KAC1D7yC,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC62C,gBAAgB,EAAE,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;KACzEt3C,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC6lC,gBAAgB,EAAE,EAAE;OAAE35B,MAAM,EAAG,GAAElB,aAAc,IAAG;OAAE4O,QAAQ,EAAE;MAAU,CAAC;KACxFrrB,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACsnC,iBAAiB,EAAE,EAAE;OAAEhJ,OAAO,EAAE;MAAG,CAAC;KAEnD+B,qBAAqB,CAAC,MAAM;OAC3B9xC,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC82C,gBAAgB,EAAE,EAAE,aAAa,CAAC;OACpDt3C,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC6lC,gBAAgB,EAAE,EAAE;SAAE35B,MAAM,EAAG,GAAE,IAAI,CAAC25B,gBAAgB,EAAE,CAACzF,YAAa;QAAK,CAAC;OAC3F7xC,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACsnC,iBAAiB,EAAE,EAAE;SAAEhJ,OAAO,EAAE;QAAG,CAAC;OAEnD,IAAI,CAACzuC,IAAI,CAAC,oBAAoB,EAAE;SAAE6K,MAAM,EAAE;QAAM,CAAC;MACjD,CAAC;IACF,MAED;KACC,4CAAI,wCAAoB2oC,eAAe,CAACE,UAAU;KAElD,MAAMv4B,aAAa,GAAG,IAAI,CAAC66B,gBAAgB,EAAE,CAACzE,YAAY;KAE1D7yC,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC62C,gBAAgB,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;KACzDt3C,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC6lC,gBAAgB,EAAE,EAAE;OAAE35B,MAAM,EAAG,GAAElB,aAAc,IAAG;OAAE4O,QAAQ,EAAE;MAAU,CAAC;KACxFrrB,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACsnC,iBAAiB,EAAE,EAAE;OAAEhJ,OAAO,EAAE;MAAG,CAAC;KAEnD,IAAI,CAACgI,IAAI,EAAE;KAEX,MAAMoD,eAAe,GAAG,IAAI,CAACzD,kBAAkB,EAAE;KAEjD5F,qBAAqB,CAAC,MAAM;OAC3B9xC,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC82C,gBAAgB,EAAE,EAAE,cAAc,CAAC;OACrDt3C,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC6lC,gBAAgB,EAAE,EAAE;SAAE35B,MAAM,EAAG,GAAEw9B,eAAgB;QAAK,CAAC;OACtEn7C,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACsnC,iBAAiB,EAAE,EAAE;SAAEhJ,OAAO,EAAE;QAAG,CAAC;OAEnD,IAAI,CAACzuC,IAAI,CAAC,oBAAoB,EAAE;SAAE6K,MAAM,EAAE;QAAO,CAAC;MAClD,CAAC;;GAGHH,eAAK,CAAC3K,IAAI,CAAC,IAAI,CAACi2C,gBAAgB,EAAE,EAAE,eAAe,0CAAE,IAAI,sDAA0B;CACpF;CAAC,wCA8CD;GACCtrC,eAAK,CAACsS,MAAM,CAAC,IAAI,CAACg5B,gBAAgB,EAAE,EAAE,eAAe,0CAAE,IAAI,sDAA0B;GAErFt3C,aAAG,CAACyR,KAAK,CAAC,IAAI,CAAC6lC,gBAAgB,EAAE,EAAE;KAAE35B,MAAM,EAAE,IAAI;KAAE0N,QAAQ,EAAE;IAAM,CAAC;GACpErrB,aAAG,CAACyR,KAAK,CAAC,IAAI,CAACsnC,iBAAiB,EAAE,EAAE;KAAEhJ,OAAO,EAAE;IAAM,CAAC;GACtD/vC,aAAG,CAACS,WAAW,CAAC,IAAI,CAAC62C,gBAAgB,EAAE,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;GAEzE,IAAI,4CAAI,0CAAsBxC,eAAe,CAACE,UAAU,EACxD;KACCh1C,aAAG,CAACQ,QAAQ,CAAC,IAAI,CAAC82C,gBAAgB,EAAE,EAAE,aAAa,CAAC;KACpD,4CAAI,wCAAoBxC,eAAe,CAACC,SAAS;KACjD,IAAI,CAAC7qC,KAAK,EAAE;KACZ,IAAI,CAAC2sC,YAAY,EAAE;KACnB,IAAI,CAACkB,IAAI,EAAE;IACX,MAED;KACC,IAAI,CAACljD,KAAK,EAAE;KACZ,4CAAI,wCAAoBigD,eAAe,CAACG,QAAQ;;CAElD;;OCl3BYmG,mBAA4C,GAAG;GAC3Dr9C,IAAI,EAAE,qBAAqB;GAC3Bs9C,KAAK,EAAE;KACNjG,aAAa,EAAE;OACdr4C,IAAI,EAAE3J;MACN;KACDkoD,cAAc,EAAE;OACfv+C,IAAI,EAAEo4C,UAAU;OAChBoG,OAAO,EAAE;MACT;KACDh/B,MAAM,EAAE;OACPxf,IAAI,EAAE3J,MAAM;OACZmoD,OAAO,EAAE;MACT;KACDvF,QAAQ,EAAE;OACTj5C,IAAI,EAAEs7B,OAAO;OACbkjB,OAAO,EAAE;;IAEV;GACDC,KAAK,GACL;KACC,OAAO;OACNC,WAAW,EAAEtG;MACb;IACD;GACDuG,OAAO,GAAwB;KAC9B,OAAO;OACNnlD,MAAM,EAAE,IAAI,CAACA;MACb;IACD;GACDolD,YAAY,GACZ;KACC,IAAI,IAAI,CAACL,cAAc,KAAK,IAAI,EAChC;OACC,IAAI,CAACM,YAAY,GAAG,IAAI;OAExB,MAAMC,WAAW,GAAG,IAAI,CAACJ,WAAW;OACpC,IAAI,CAACllD,MAAM,GAAG,IAAIslD,WAAW,CAAC,IAAI,CAACzG,aAAa,CAAC;MACjD,MAED;OACC,IAAI,CAACwG,YAAY,GAAG,KAAK;OACzB,IAAI,CAACrlD,MAAM,GAAG,IAAI,CAAC+kD,cAAc;;KAGlC,IAAI7iD,cAAI,CAACqN,aAAa,CAAC,IAAI,CAACyW,MAAM,CAAC,EACnC;OACC,KAAK,MAAM,CAACu/B,SAAS,EAAE56C,EAAE,CAAC,IAAI9N,MAAM,CAACwkB,OAAO,CAAC,IAAI,CAAC2E,MAAM,CAAC,EACzD;SACC,IAAI,CAAChmB,MAAM,CAACmQ,SAAS,CAACo1C,SAAS,EAAE56C,EAAE,CAAC;;;IAGtC;GACD66C,QAAQ,EACR;KACCC,eAAe,GACf;OACC,OAAO,IAAI,CAACzlD,MAAM,CAACyiD,kBAAkB,EAAE;MACvC;KACDiD,eAAe,GACf;OACC,OAAO,IAAI,CAAC1lD,MAAM,CAAC0iD,kBAAkB,EAAE;;IAExC;GACDiD,KAAK,EACL;KACClG,QAAQ,CAACltC,KAAc,EACvB;OACC,IAAI,CAACvS,MAAM,CAACuhD,WAAW,CAAChvC,KAAK,CAAC;;IAE/B;GACDqzC,OAAO,GACP;KACC,IAAI,CAAC5lD,MAAM,CAACg7C,QAAQ,CAAC,IAAI,CAACkI,KAAK,CAAClvC,SAAS,EAAE,IAAI,CAAC;IAChD;GACD6xC,SAAS,GACT;KACC,IAAI,IAAI,CAACR,YAAY,EACrB;OACC,IAAI,CAACrlD,MAAM,CAACwI,OAAO,EAAE;OACrB,IAAI,CAACxI,MAAM,GAAG,IAAI;;IAEnB;GACDs+B,QAAQ,EAAG;;;;;;;;;CASZ,CAAC;;CC5FD;CACA;CACA;AACA,CAAO,MAAMwnB,WAAW,SAASlH,UAAU,CAC3C;GACC,OAAOI,iBAAiB,GACxB;KACC,OAAO;OACN1W,OAAO,EAAE,CACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,MAAM,EACN,WAAW,EACX,QAAQ,EACR,eAAe,EACf,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,MAAM,CACN;OACDyd,OAAO,EAAE,CACR,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAC9C,GAAG,EACH,eAAe,EAAE,eAAe,EAChC,GAAG,EACH,MAAM,EAAE,SAAS,CACjB;OACD3G,WAAW,EAAE5iD,WAAW,CAACG;MACzB;;CAEH;;OCxCaqpD,oBAA6C,GAAG;GAC5Dx+C,IAAI,EAAE,sBAAsB;GAC5By+C,OAAO,EAAEpB,mBAAmB;GAC5BI,KAAK,GACL;KACC,OAAO;OACNC,WAAW,EAAEY;MACb;;CAEH,CAAC;;CCgCD;CACA;CACA;AACA,OAAMI,OAAO,GAAG;GACfC,SAAS;GACTC,QAAQ;GACRC,YAAY;GACZC,IAAI;GACJC,IAAI;GACJC,eAAe;GACfC,OAAO;GACPC,KAAK;GACLC,MAAM;GACNC,IAAI;GACJC,IAAI;GACJC,OAAO;GACPC,KAAK;GACLC,aAAa;GACbC,SAAS;YACTpM,SAAO;GACPqM,SAAS;GACTC,KAAK;GACLC,OAAO;GACPC,MAAM;GACNC,KAAK;GACLC,OAAO;GACPC;CACD,CAAC;;CAED;CACA;CACA;AACA,OAAMC,QAAQ,GAAG;GAAE,GAAGC;CAAY,CAAC;;CAEnC;CACA;CACA;AACA,OAAMC,SAAS,GAAG;GAAE,GAAGC;CAAa,CAAC;;CAErC;CACA;CACA;AACA,OAAMC,KAAK,GAAG;GACb9jB;CACD,CAAC;;;;;;;;;;;;;;;;;"}