@openstage/glyph-element 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/THIRD-PARTY-NOTICES.md +1505 -0
  2. package/dist/chunks/bash-Dw1nAEst.js +171 -0
  3. package/dist/chunks/bash-Dw1nAEst.js.map +1 -0
  4. package/dist/chunks/csharp-D8ELXkGi.js +262 -0
  5. package/dist/chunks/csharp-D8ELXkGi.js.map +1 -0
  6. package/dist/chunks/css-DQEU4whB.js +142 -0
  7. package/dist/chunks/css-DQEU4whB.js.map +1 -0
  8. package/dist/chunks/fsharp-D4SqCnMZ.js +242 -0
  9. package/dist/chunks/fsharp-D4SqCnMZ.js.map +1 -0
  10. package/dist/chunks/go-BJIB22rX.js +142 -0
  11. package/dist/chunks/go-BJIB22rX.js.map +1 -0
  12. package/dist/chunks/haskell-eGGgAkgA.js +140 -0
  13. package/dist/chunks/haskell-eGGgAkgA.js.map +1 -0
  14. package/dist/chunks/highlight-core-C0K6BIzZ.js +967 -0
  15. package/dist/chunks/highlight-core-C0K6BIzZ.js.map +1 -0
  16. package/dist/chunks/java-DHPUyZsV.js +171 -0
  17. package/dist/chunks/java-DHPUyZsV.js.map +1 -0
  18. package/dist/chunks/javascript-D_CG8suQ.js +438 -0
  19. package/dist/chunks/javascript-D_CG8suQ.js.map +1 -0
  20. package/dist/chunks/json-BD6qkh12.js +38 -0
  21. package/dist/chunks/json-BD6qkh12.js.map +1 -0
  22. package/dist/chunks/kotlin-C75rnxi-.js +203 -0
  23. package/dist/chunks/kotlin-C75rnxi-.js.map +1 -0
  24. package/dist/chunks/markdown-B6LMDWi1.js +183 -0
  25. package/dist/chunks/markdown-B6LMDWi1.js.map +1 -0
  26. package/dist/chunks/ocaml-CMtC1T-S.js +54 -0
  27. package/dist/chunks/ocaml-CMtC1T-S.js.map +1 -0
  28. package/dist/chunks/prosemirror-dAj0dboi.js +7790 -0
  29. package/dist/chunks/prosemirror-dAj0dboi.js.map +1 -0
  30. package/dist/chunks/python-ny4cvzzX.js +240 -0
  31. package/dist/chunks/python-ny4cvzzX.js.map +1 -0
  32. package/dist/chunks/rolldown-runtime-BE9Pkid1.js +13 -0
  33. package/dist/chunks/rust-8OMNiTht.js +171 -0
  34. package/dist/chunks/rust-8OMNiTht.js.map +1 -0
  35. package/dist/chunks/scala-BB851ZJZ.js +164 -0
  36. package/dist/chunks/scala-BB851ZJZ.js.map +1 -0
  37. package/dist/chunks/sql-CoOMeU5k.js +120 -0
  38. package/dist/chunks/sql-CoOMeU5k.js.map +1 -0
  39. package/dist/chunks/tiptap-Cb4W88fy.js +8527 -0
  40. package/dist/chunks/tiptap-Cb4W88fy.js.map +1 -0
  41. package/dist/chunks/typescript-Dh7IycF2.js +523 -0
  42. package/dist/chunks/typescript-Dh7IycF2.js.map +1 -0
  43. package/dist/chunks/vendor-B82PcruV.js +1799 -0
  44. package/dist/chunks/vendor-B82PcruV.js.map +1 -0
  45. package/dist/chunks/xml-BpsgObpu.js +168 -0
  46. package/dist/chunks/xml-BpsgObpu.js.map +1 -0
  47. package/dist/codeblock-backspace.d.ts +3 -0
  48. package/dist/codeblock-backspace.d.ts.map +1 -0
  49. package/dist/document-conversion.d.ts +29 -0
  50. package/dist/document-conversion.d.ts.map +1 -0
  51. package/dist/editor-element.d.ts +93 -0
  52. package/dist/editor-element.d.ts.map +1 -0
  53. package/dist/glyph-editor-element.js +783 -0
  54. package/dist/glyph-editor-element.js.map +1 -0
  55. package/dist/header.d.ts +18 -0
  56. package/dist/header.d.ts.map +1 -0
  57. package/dist/index.d.ts +62 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/link-dialog.d.ts +29 -0
  60. package/dist/link-dialog.d.ts.map +1 -0
  61. package/dist/safe-href.d.ts +2 -0
  62. package/dist/safe-href.d.ts.map +1 -0
  63. package/dist/slash-menu.d.ts +22 -0
  64. package/dist/slash-menu.d.ts.map +1 -0
  65. package/dist/styles.d.ts +2 -0
  66. package/dist/styles.d.ts.map +1 -0
  67. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiptap-Cb4W88fy.js","names":["__defProp","__export","createChainableState","CommandManager","commands_exports","blur","clearContent","clearNodes","command","createParagraphNear","cut","deleteCurrentNode","deleteNode","deleteRange","deleteSelection","enter","exitCode","extendMarkRange","first","focus","forEach","insertContent","insertContentAt","joinBackward","joinDown","joinForward","joinItemBackward","joinItemForward","joinTextblockBackward","joinTextblockForward","joinUp","keyboardShortcut","lift","liftEmptyBlock","liftListItem","newlineInCode","resetAttributes","scrollIntoView","selectAll","selectNodeBackward","selectNodeForward","selectParentNode","selectTextblockEnd","selectTextblockStart","setContent","setMark","setMeta","setNode","setNodeSelection","setTextDirection","setTextSelection","sinkListItem","splitBlock","splitListItem","toggleList","toggleMark","toggleNode","toggleWrap","undoInputRule","unsetAllMarks","unsetMark","unsetTextDirection","updateAttributes","wrapIn","wrapInList","originalCreateParagraphNear","getNodeType","originalDeleteSelection","originalExitCode","isRegExp","objectIncludes","findMarkInSet","isMarkInSet","getMarkRange","getMarkType","TextSelection2","isTextSelection","TextSelection3","minMax","resolveFocusPosition","Selection","TextSelection4","isAndroid","isiOS","isSafari","removeWhitespaces","elementFromString","createNodeFromContent","ProseMirrorNode","selectionToInsertionEnd","Selection2","isFragment","Fragment2","originalJoinUp","originalJoinDown","originalJoinBackward","originalJoinForward","joinPoint2","originalCommand","originalCommand2","isMacOS","normalizeKeyName","isNodeActive","originalLift","originalLiftEmptyBlock","originalLiftListItem","originalNewlineInCode","getSchemaTypeNameByName","deleteProps","originalSelectNodeBackward","originalSelectNodeForward","originalSelectParentNode","originalSelectTextblockEnd","originalSelectTextblockStart","createDocument","getMarkAttributes","combineTransactionSteps","defaultBlockAt","findChildrenInRange","findParentNodeClosestToPos","findParentNode","getExtensionField","flattenExtensions","getHTMLFromFragment","isFunction","callOrReturn","isEmptyObject","splitExtensions","getAttributesFromExtensions","splitStyleDeclarations","parseStyleEntries","mergeAttributes","getRenderedAttributes","fromString","injectExtensionAttributesToParseRule","cleanUpSchemaItem","buildAttributeSpec","getSchemaByResolvedExtensions","Schema2","findDuplicates","sortExtensions","resolveExtensions","getTextBetween","getTextSerializersFromSchema","getNodeAttributes","getAttributes","removeDuplicates","simplifyChangedRanges","getChangedRanges","getMarksBetween","getSchemaTypeByName","getSplittedAttributes","getTextContentFromNodes","isMarkActive","isExtensionRulesEnabled","isList","isNodeEmpty","isNodeSelection","canSetMark","NodeSelection2","TextSelection5","originalSinkListItem","ensureMarks","NodeSelection3","TextSelection6","Fragment3","TextSelection7","canSplit2","joinListBackwards","joinListForwards","createInnerSelectionForWholeDocList","TextSelection8","originalWrapIn","originalWrapInList","InputRule","inputRuleMatcherHandler","run","inputRulesPlugin","Fragment4","getType","isPlainObject","mergeDeep","Extendable","Mark","isNumber","PasteRule","pasteRuleMatcherHandler","run2","tiptapDragFromOtherEditor","createClipboardPasteEvent","pasteRulesPlugin","Plugin2","Fragment5","ExtensionManager","extensions_exports","ClipboardTextSerializer","Commands","Delete","Drop","Editable","FocusEvents","Keymap","Paste","Tabindex","TextDirection","focusEventsPluginKey","Extension","Plugin3","Plugin4","PluginKey2","Plugin5","PluginKey3","PluginKey4","Plugin6","Selection3","Plugin7","PluginKey5","Plugin8","PluginKey6","Plugin9","PluginKey7","Plugin10","PluginKey8","textblockTypeInputRule","markdown_exports","createAtomBlockMarkdownSpec","createBlockMarkdownSpec","createInlineMarkdownSpec","parseAttributes","parseIndentedBlocks","renderNestedMarkdownContent","serializeAttributes","parseShortcodeAttributes","serializeShortcodeAttributes","updateMarkViewAttributes","Node3","markPasteRule","__defProp","__export","originalCreateParagraphNear","originalDeleteSelection","originalExitCode","TextSelection2","TextSelection3","Selection","TextSelection4","ProseMirrorNode","Selection2","Fragment2","originalJoinUp","originalJoinDown","originalJoinBackward","originalJoinForward","joinPoint2","originalCommand","originalCommand2","originalLift","originalLiftEmptyBlock","originalLiftListItem","originalNewlineInCode","originalSelectNodeBackward","originalSelectNodeForward","originalSelectParentNode","originalSelectTextblockEnd","originalSelectTextblockStart","isFunction","Schema2","NodeSelection2","TextSelection5","originalSinkListItem","NodeSelection3","TextSelection6","Fragment3","TextSelection7","canSplit2","TextSelection8","originalWrapIn","originalWrapInList","run","Fragment4","Plugin2","Fragment5","Plugin3","Plugin4","PluginKey2","Plugin5","PluginKey3","PluginKey4","Plugin6","Selection3","Plugin7","PluginKey5","Plugin8","PluginKey6","Plugin9","PluginKey7","Plugin10","PluginKey8","canJoin2","NodeSelection4","inputRegex","Node","starInputRegex","starPasteRegex","underscoreInputRegex","underscorePasteRegex","inputRegex","pasteRegex","DEFAULT_TAB_SIZE","backtickInputRegex","tildeInputRegex","CodeBlock","Node","Selection","Node","Node","Node","Node","Text","UNICODE_WHITESPACE_PATTERN","UNICODE_WHITESPACE_REGEX","UNICODE_WHITESPACE_REGEX_END","UNICODE_WHITESPACE_REGEX_GLOBAL","isValidLinkStructure","autolink","clickHandler","Plugin2","PluginKey2","pasteHandler","Plugin3","PluginKey3","isAllowedUri","Link","find2","Node","Node2","mergeAttributes2","getNodeType2","isNodeActive2","mergeAttributes3","wrappingInputRule2","inputRegex","Node4","mergeAttributes4","renderNestedMarkdownContent2","wrappingInputRule3","Node5","mergeAttributes5","Extension2","Node","Node","CharacterCount","Dropcursor","Extension2","Focus","Extension3","Plugin2","PluginKey2","Gapcursor","Extension4","DEFAULT_DATA_ATTRIBUTE","preparePlaceholderAttribute","Placeholder","Extension5","Plugin3","PluginKey3","Decoration2","DecorationSet2","Selection","Extension6","Plugin4","PluginKey4","DecorationSet3","Decoration3","skipTrailingNodeMeta","nodeEqualsType","TrailingNode","Extension7","PluginKey5","Plugin5","UndoRedo","Extension8","CodeBlock","Dropcursor","Gapcursor","UndoRedo","Link","TrailingNode","index_default","getChangedRanges","combineTransactionSteps","findChildrenInRange","getMarksBetween","Plugin2","PluginKey2","getAttributes","Plugin3","PluginKey3","Mark","mergeAttributes","markPasteRule","find2","index_default","Extension","Extension2","Extension3","Plugin2","PluginKey2","Extension4","callOrReturn","getExtensionField","Extension5","Plugin3","PluginKey3","isNodeEmpty","Decoration2","DecorationSet2","Extension6","Plugin4","PluginKey4","isNodeSelection","DecorationSet3","Decoration3","Extension7","PluginKey5","Plugin5","Extension8","Node","mergeAttributes","Selection","textblockTypeInputRule","highlight"],"sources":["../../node_modules/@tiptap/core/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/core/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-blockquote/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-bold/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-code/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-code-block/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-document/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-hard-break/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-heading/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-horizontal-rule/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-italic/dist/index.js","../../../../node_modules/linkifyjs/dist/linkify.mjs","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-link/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-list/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-paragraph/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-strike/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-text/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extension-underline/dist/index.js","../../../../node_modules/@tiptap/starter-kit/node_modules/@tiptap/extensions/dist/index.js","../../../../node_modules/@tiptap/starter-kit/dist/index.js","../../node_modules/@tiptap/extension-link/dist/index.js","../../node_modules/@tiptap/extensions/dist/index.js","../../node_modules/@tiptap/extension-placeholder/dist/index.js","../../node_modules/@tiptap/extension-code-block/dist/index.js","../../node_modules/@tiptap/extension-code-block-lowlight/dist/index.js"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/helpers/createChainableState.ts\nfunction createChainableState(config) {\n const { state, transaction } = config;\n let { selection } = transaction;\n let { doc } = transaction;\n let { storedMarks } = transaction;\n return {\n ...state,\n apply: state.apply.bind(state),\n applyTransaction: state.applyTransaction.bind(state),\n plugins: state.plugins,\n schema: state.schema,\n reconfigure: state.reconfigure.bind(state),\n toJSON: state.toJSON.bind(state),\n get storedMarks() {\n return storedMarks;\n },\n get selection() {\n return selection;\n },\n get doc() {\n return doc;\n },\n get tr() {\n selection = transaction.selection;\n doc = transaction.doc;\n storedMarks = transaction.storedMarks;\n return transaction;\n }\n };\n}\n\n// src/CommandManager.ts\nvar CommandManager = class {\n constructor(props) {\n this.editor = props.editor;\n this.rawCommands = this.editor.extensionManager.commands;\n this.customState = props.state;\n }\n get hasCustomState() {\n return !!this.customState;\n }\n get state() {\n return this.customState || this.editor.state;\n }\n get commands() {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const { tr } = state;\n const props = this.buildProps(tr);\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const method = (...args) => {\n const callback = command2(...args)(props);\n if (!tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callback;\n };\n return [name, method];\n })\n );\n }\n get chain() {\n return () => this.createChain();\n }\n get can() {\n return () => this.createCan();\n }\n createChain(startTr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const callbacks = [];\n const hasStartTransaction = !!startTr;\n const tr = startTr || state.tr;\n const run3 = () => {\n if (!hasStartTransaction && shouldDispatch && !tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callbacks.every((callback) => callback === true);\n };\n const chain = {\n ...Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const chainedCommand = (...args) => {\n const props = this.buildProps(tr, shouldDispatch);\n const callback = command2(...args)(props);\n callbacks.push(callback);\n return chain;\n };\n return [name, chainedCommand];\n })\n ),\n run: run3\n };\n return chain;\n }\n createCan(startTr) {\n const { rawCommands, state } = this;\n const dispatch = false;\n const tr = startTr || state.tr;\n const props = this.buildProps(tr, dispatch);\n const formattedCommands = Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)({ ...props, dispatch: void 0 })];\n })\n );\n return {\n ...formattedCommands,\n chain: () => this.createChain(tr, dispatch)\n };\n }\n buildProps(tr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const props = {\n tr,\n editor,\n view,\n state: createChainableState({\n state,\n transaction: tr\n }),\n dispatch: shouldDispatch ? () => void 0 : void 0,\n chain: () => this.createChain(tr, shouldDispatch),\n can: () => this.createCan(tr),\n get commands() {\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)(props)];\n })\n );\n }\n };\n return props;\n }\n};\n\n// src/commands/index.ts\nvar commands_exports = {};\n__export(commands_exports, {\n blur: () => blur,\n clearContent: () => clearContent,\n clearNodes: () => clearNodes,\n command: () => command,\n createParagraphNear: () => createParagraphNear,\n cut: () => cut,\n deleteCurrentNode: () => deleteCurrentNode,\n deleteNode: () => deleteNode,\n deleteRange: () => deleteRange,\n deleteSelection: () => deleteSelection,\n enter: () => enter,\n exitCode: () => exitCode,\n extendMarkRange: () => extendMarkRange,\n first: () => first,\n focus: () => focus,\n forEach: () => forEach,\n insertContent: () => insertContent,\n insertContentAt: () => insertContentAt,\n joinBackward: () => joinBackward,\n joinDown: () => joinDown,\n joinForward: () => joinForward,\n joinItemBackward: () => joinItemBackward,\n joinItemForward: () => joinItemForward,\n joinTextblockBackward: () => joinTextblockBackward,\n joinTextblockForward: () => joinTextblockForward,\n joinUp: () => joinUp,\n keyboardShortcut: () => keyboardShortcut,\n lift: () => lift,\n liftEmptyBlock: () => liftEmptyBlock,\n liftListItem: () => liftListItem,\n newlineInCode: () => newlineInCode,\n resetAttributes: () => resetAttributes,\n scrollIntoView: () => scrollIntoView,\n selectAll: () => selectAll,\n selectNodeBackward: () => selectNodeBackward,\n selectNodeForward: () => selectNodeForward,\n selectParentNode: () => selectParentNode,\n selectTextblockEnd: () => selectTextblockEnd,\n selectTextblockStart: () => selectTextblockStart,\n setContent: () => setContent,\n setMark: () => setMark,\n setMeta: () => setMeta,\n setNode: () => setNode,\n setNodeSelection: () => setNodeSelection,\n setTextDirection: () => setTextDirection,\n setTextSelection: () => setTextSelection,\n sinkListItem: () => sinkListItem,\n splitBlock: () => splitBlock,\n splitListItem: () => splitListItem,\n toggleList: () => toggleList,\n toggleMark: () => toggleMark,\n toggleNode: () => toggleNode,\n toggleWrap: () => toggleWrap,\n undoInputRule: () => undoInputRule,\n unsetAllMarks: () => unsetAllMarks,\n unsetMark: () => unsetMark,\n unsetTextDirection: () => unsetTextDirection,\n updateAttributes: () => updateAttributes,\n wrapIn: () => wrapIn,\n wrapInList: () => wrapInList\n});\n\n// src/commands/blur.ts\nvar blur = () => ({ editor, view }) => {\n requestAnimationFrame(() => {\n var _a;\n if (!editor.isDestroyed) {\n ;\n view.dom.blur();\n (_a = window == null ? void 0 : window.getSelection()) == null ? void 0 : _a.removeAllRanges();\n }\n });\n return true;\n};\n\n// src/commands/clearContent.ts\nvar clearContent = (emitUpdate = true) => ({ commands }) => {\n return commands.setContent(\"\", { emitUpdate });\n};\n\n// src/commands/clearNodes.ts\nimport { liftTarget } from \"@tiptap/pm/transform\";\nvar clearNodes = () => ({ state, tr, dispatch }) => {\n const { selection } = tr;\n const { ranges } = selection;\n if (!dispatch) {\n return true;\n }\n ranges.forEach(({ $from, $to }) => {\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.isText) {\n return;\n }\n const { doc, mapping } = tr;\n const $mappedFrom = doc.resolve(mapping.map(pos));\n const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize));\n const nodeRange = $mappedFrom.blockRange($mappedTo);\n if (!nodeRange) {\n return;\n }\n const targetLiftDepth = liftTarget(nodeRange);\n if (node.type.isTextblock) {\n const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());\n tr.setNodeMarkup(nodeRange.start, defaultType);\n }\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n });\n });\n return true;\n};\n\n// src/commands/command.ts\nvar command = (fn) => (props) => {\n return fn(props);\n};\n\n// src/commands/createParagraphNear.ts\nimport { createParagraphNear as originalCreateParagraphNear } from \"@tiptap/pm/commands\";\nvar createParagraphNear = () => ({ state, dispatch }) => {\n return originalCreateParagraphNear(state, dispatch);\n};\n\n// src/commands/cut.ts\nimport { TextSelection } from \"@tiptap/pm/state\";\nvar cut = (originRange, targetPos) => ({ editor, tr }) => {\n const { state } = editor;\n const contentSlice = state.doc.slice(originRange.from, originRange.to);\n tr.deleteRange(originRange.from, originRange.to);\n const newPos = tr.mapping.map(targetPos);\n tr.insert(newPos, contentSlice.content);\n tr.setSelection(new TextSelection(tr.doc.resolve(Math.max(newPos - 1, 0))));\n return true;\n};\n\n// src/commands/deleteCurrentNode.ts\nvar deleteCurrentNode = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const currentNode = selection.$anchor.node();\n if (currentNode.content.size > 0) {\n return false;\n }\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === currentNode.type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/helpers/getNodeType.ts\nfunction getNodeType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.nodes[nameOrType]) {\n throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.nodes[nameOrType];\n }\n return nameOrType;\n}\n\n// src/commands/deleteNode.ts\nvar deleteNode = (typeOrName) => ({ tr, state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/deleteRange.ts\nvar deleteRange = (range) => ({ tr, dispatch }) => {\n const { from, to } = range;\n if (dispatch) {\n tr.delete(from, to);\n }\n return true;\n};\n\n// src/commands/deleteSelection.ts\nimport { deleteSelection as originalDeleteSelection } from \"@tiptap/pm/commands\";\nvar deleteSelection = () => ({ state, dispatch }) => {\n return originalDeleteSelection(state, dispatch);\n};\n\n// src/commands/enter.ts\nvar enter = () => ({ commands }) => {\n return commands.keyboardShortcut(\"Enter\");\n};\n\n// src/commands/exitCode.ts\nimport { exitCode as originalExitCode } from \"@tiptap/pm/commands\";\nvar exitCode = () => ({ state, dispatch }) => {\n return originalExitCode(state, dispatch);\n};\n\n// src/commands/extendMarkRange.ts\nimport { TextSelection as TextSelection2 } from \"@tiptap/pm/state\";\n\n// src/utilities/isRegExp.ts\nfunction isRegExp(value) {\n return Object.prototype.toString.call(value) === \"[object RegExp]\";\n}\n\n// src/utilities/objectIncludes.ts\nfunction objectIncludes(object1, object2, options = { strict: true }) {\n const keys = Object.keys(object2);\n if (!keys.length) {\n return true;\n }\n return keys.every((key) => {\n if (options.strict) {\n return object2[key] === object1[key];\n }\n if (isRegExp(object2[key])) {\n return object2[key].test(object1[key]);\n }\n return object2[key] === object1[key];\n });\n}\n\n// src/helpers/getMarkRange.ts\nfunction findMarkInSet(marks, type, attributes = {}) {\n return marks.find((item) => {\n return item.type === type && objectIncludes(\n // Only check equality for the attributes that are provided\n Object.fromEntries(Object.keys(attributes).map((k) => [k, item.attrs[k]])),\n attributes\n );\n });\n}\nfunction isMarkInSet(marks, type, attributes = {}) {\n return !!findMarkInSet(marks, type, attributes);\n}\nfunction getMarkRange($pos, type, attributes) {\n if (!$pos || !type) {\n return;\n }\n let start = $pos.parent.childAfter($pos.parentOffset);\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n start = $pos.parent.childBefore($pos.parentOffset);\n }\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n return;\n }\n if (!attributes) {\n const firstMark = start.node.marks.find((mark2) => mark2.type === type);\n if (firstMark) {\n attributes = firstMark.attrs;\n }\n }\n const mark = findMarkInSet([...start.node.marks], type, attributes);\n if (!mark) {\n return;\n }\n let startIndex = start.index;\n let startPos = $pos.start() + start.offset;\n let endIndex = startIndex + 1;\n let endPos = startPos + start.node.nodeSize;\n while (startIndex > 0 && isMarkInSet([...$pos.parent.child(startIndex - 1).marks], type, attributes)) {\n startIndex -= 1;\n startPos -= $pos.parent.child(startIndex).nodeSize;\n }\n while (endIndex < $pos.parent.childCount && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\n endPos += $pos.parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n return {\n from: startPos,\n to: endPos\n };\n}\n\n// src/helpers/getMarkType.ts\nfunction getMarkType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.marks[nameOrType]) {\n throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.marks[nameOrType];\n }\n return nameOrType;\n}\n\n// src/commands/extendMarkRange.ts\nvar extendMarkRange = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n const type = getMarkType(typeOrName, state.schema);\n const { doc, selection } = tr;\n const { $from, from, to } = selection;\n if (dispatch) {\n const range = getMarkRange($from, type, attributes);\n if (range && range.from <= from && range.to >= to) {\n const newSelection = TextSelection2.create(doc, range.from, range.to);\n tr.setSelection(newSelection);\n }\n }\n return true;\n};\n\n// src/commands/first.ts\nvar first = (commands) => (props) => {\n const items = typeof commands === \"function\" ? commands(props) : commands;\n for (let i = 0; i < items.length; i += 1) {\n if (items[i](props)) {\n return true;\n }\n }\n return false;\n};\n\n// src/helpers/isTextSelection.ts\nimport { TextSelection as TextSelection3 } from \"@tiptap/pm/state\";\nfunction isTextSelection(value) {\n return value instanceof TextSelection3;\n}\n\n// src/helpers/resolveFocusPosition.ts\nimport { Selection, TextSelection as TextSelection4 } from \"@tiptap/pm/state\";\n\n// src/utilities/minMax.ts\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\n\n// src/helpers/resolveFocusPosition.ts\nfunction resolveFocusPosition(doc, position = null) {\n if (!position) {\n return null;\n }\n const selectionAtStart = Selection.atStart(doc);\n const selectionAtEnd = Selection.atEnd(doc);\n if (position === \"start\" || position === true) {\n return selectionAtStart;\n }\n if (position === \"end\") {\n return selectionAtEnd;\n }\n const minPos = selectionAtStart.from;\n const maxPos = selectionAtEnd.to;\n if (position === \"all\") {\n return TextSelection4.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos));\n }\n return TextSelection4.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));\n}\n\n// src/utilities/isAndroid.ts\nfunction isAndroid() {\n return navigator.platform === \"Android\" || /android/i.test(navigator.userAgent);\n}\n\n// src/utilities/isiOS.ts\nfunction isiOS() {\n return [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) || // iPad on iOS 13 detection\n navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document;\n}\n\n// src/utilities/isSafari.ts\nfunction isSafari() {\n return typeof navigator !== \"undefined\" ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n}\n\n// src/commands/focus.ts\nvar focus = (position = null, options = {}) => ({ editor, view, tr, dispatch }) => {\n options = {\n scrollIntoView: true,\n ...options\n };\n const delayedFocus = () => {\n if (isiOS() || isAndroid()) {\n ;\n view.dom.focus();\n }\n if (isSafari() && !isiOS() && !isAndroid()) {\n ;\n view.dom.focus({ preventScroll: true });\n }\n requestAnimationFrame(() => {\n if (!editor.isDestroyed) {\n view.focus();\n if (options == null ? void 0 : options.scrollIntoView) {\n editor.commands.scrollIntoView();\n }\n }\n });\n };\n try {\n if (view.hasFocus() && position === null || position === false) {\n return true;\n }\n } catch {\n return false;\n }\n if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\n delayedFocus();\n return true;\n }\n const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection;\n const isSameSelection = editor.state.selection.eq(selection);\n if (dispatch) {\n if (!isSameSelection) {\n tr.setSelection(selection);\n }\n if (isSameSelection && tr.storedMarks) {\n tr.setStoredMarks(tr.storedMarks);\n }\n delayedFocus();\n }\n return true;\n};\n\n// src/commands/forEach.ts\nvar forEach = (items, fn) => (props) => {\n return items.every((item, index) => fn(item, { ...props, index }));\n};\n\n// src/commands/insertContent.ts\nvar insertContent = (value, options) => ({ tr, commands }) => {\n return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options);\n};\n\n// src/commands/insertContentAt.ts\nimport { Fragment as Fragment2 } from \"@tiptap/pm/model\";\n\n// src/helpers/createNodeFromContent.ts\nimport { DOMParser, Fragment, Node as ProseMirrorNode, Schema } from \"@tiptap/pm/model\";\n\n// src/utilities/elementFromString.ts\nvar removeWhitespaces = (node) => {\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i];\n if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\n node.removeChild(child);\n } else if (child.nodeType === 1) {\n removeWhitespaces(child);\n }\n }\n return node;\n};\nfunction elementFromString(value) {\n if (typeof window === \"undefined\") {\n throw new Error(\"[tiptap error]: there is no window object available, so this function cannot be used\");\n }\n const wrappedValue = `<body>${value}</body>`;\n const html = new window.DOMParser().parseFromString(wrappedValue, \"text/html\").body;\n return removeWhitespaces(html);\n}\n\n// src/helpers/createNodeFromContent.ts\nfunction createNodeFromContent(content, schema, options) {\n if (content instanceof ProseMirrorNode || content instanceof Fragment) {\n return content;\n }\n options = {\n slice: true,\n parseOptions: {},\n ...options\n };\n const isJSONContent = typeof content === \"object\" && content !== null;\n const isTextContent = typeof content === \"string\";\n if (isJSONContent) {\n try {\n const isArrayContent = Array.isArray(content) && content.length > 0;\n if (isArrayContent) {\n return Fragment.fromArray(content.map((item) => schema.nodeFromJSON(item)));\n }\n const node = schema.nodeFromJSON(content);\n if (options.errorOnInvalidContent) {\n node.check();\n }\n return node;\n } catch (error) {\n if (options.errorOnInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid JSON content\", { cause: error });\n }\n console.warn(\"[tiptap warn]: Invalid content.\", \"Passed value:\", content, \"Error:\", error);\n return createNodeFromContent(\"\", schema, options);\n }\n }\n if (isTextContent) {\n if (options.errorOnInvalidContent) {\n let hasInvalidContent = false;\n let invalidContent = \"\";\n const contentCheckSchema = new Schema({\n topNode: schema.spec.topNode,\n marks: schema.spec.marks,\n // Prosemirror's schemas are executed such that: the last to execute, matches last\n // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle\n nodes: schema.spec.nodes.append({\n __tiptap__private__unknown__catch__all__node: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [\n {\n tag: \"*\",\n getAttrs: (e) => {\n hasInvalidContent = true;\n invalidContent = typeof e === \"string\" ? e : e.outerHTML;\n return null;\n }\n }\n ]\n }\n })\n });\n if (options.slice) {\n DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);\n } else {\n DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);\n }\n if (options.errorOnInvalidContent && hasInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid HTML content\", {\n cause: new Error(`Invalid element found: ${invalidContent}`)\n });\n }\n }\n const parser = DOMParser.fromSchema(schema);\n if (options.slice) {\n return parser.parseSlice(elementFromString(content), options.parseOptions).content;\n }\n return parser.parse(elementFromString(content), options.parseOptions);\n }\n return createNodeFromContent(\"\", schema, options);\n}\n\n// src/helpers/selectionToInsertionEnd.ts\nimport { Selection as Selection2 } from \"@tiptap/pm/state\";\nimport { ReplaceAroundStep, ReplaceStep } from \"@tiptap/pm/transform\";\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n const last = tr.steps.length - 1;\n if (last < startLen) {\n return;\n }\n const step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\n return;\n }\n const map = tr.mapping.maps[last];\n let end = 0;\n map.forEach((_from, _to, _newFrom, newTo) => {\n if (end === 0) {\n end = newTo;\n }\n });\n tr.setSelection(Selection2.near(tr.doc.resolve(end), bias));\n}\n\n// src/commands/insertContentAt.ts\nvar isFragment = (nodeOrFragment) => {\n return !(\"type\" in nodeOrFragment);\n};\nvar insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => {\n var _a;\n if (dispatch) {\n options = {\n parseOptions: editor.options.parseOptions,\n updateSelection: true,\n applyInputRules: false,\n applyPasteRules: false,\n ...options\n };\n let content;\n const emitContentError = (error) => {\n editor.emit(\"contentError\", {\n editor,\n error,\n disableCollaboration: () => {\n if (\"collaboration\" in editor.storage && typeof editor.storage.collaboration === \"object\" && editor.storage.collaboration) {\n ;\n editor.storage.collaboration.isDisabled = true;\n }\n }\n });\n };\n const parseOptions = {\n preserveWhitespace: \"full\",\n ...options.parseOptions\n };\n if (!options.errorOnInvalidContent && !editor.options.enableContentCheck && editor.options.emitContentError) {\n try {\n createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: true\n });\n } catch (e) {\n emitContentError(e);\n }\n }\n try {\n content = createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: (_a = options.errorOnInvalidContent) != null ? _a : editor.options.enableContentCheck\n });\n } catch (e) {\n emitContentError(e);\n return false;\n }\n let { from, to } = typeof position === \"number\" ? { from: position, to: position } : { from: position.from, to: position.to };\n let isOnlyTextContent = true;\n let isOnlyBlockContent = true;\n const nodes = isFragment(content) ? content : [content];\n nodes.forEach((node) => {\n node.check();\n isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;\n isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;\n });\n if (from === to && isOnlyBlockContent) {\n const { parent } = tr.doc.resolve(from);\n const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;\n if (isEmptyTextBlock) {\n from -= 1;\n to += 1;\n }\n }\n let newContent;\n if (isOnlyTextContent) {\n if (Array.isArray(value)) {\n newContent = value.map((v) => v.text || \"\").join(\"\");\n } else if (value instanceof Fragment2) {\n let text = \"\";\n value.forEach((node) => {\n if (node.text) {\n text += node.text;\n }\n });\n newContent = text;\n } else if (typeof value === \"object\" && !!value && !!value.text) {\n newContent = value.text;\n } else {\n newContent = value;\n }\n tr.insertText(newContent, from, to);\n } else {\n newContent = content;\n const $from = tr.doc.resolve(from);\n const $fromNode = $from.node();\n const fromSelectionAtStart = $from.parentOffset === 0;\n const isTextSelection2 = $fromNode.isText || $fromNode.isTextblock;\n const hasContent = $fromNode.content.size > 0;\n if (fromSelectionAtStart && isTextSelection2 && hasContent && isOnlyBlockContent) {\n from = Math.max(0, from - 1);\n }\n tr.replaceWith(from, to, newContent);\n }\n if (options.updateSelection) {\n selectionToInsertionEnd(tr, tr.steps.length - 1, -1);\n }\n if (options.applyInputRules) {\n tr.setMeta(\"applyInputRules\", { from, text: newContent });\n }\n if (options.applyPasteRules) {\n tr.setMeta(\"applyPasteRules\", { from, text: newContent });\n }\n }\n return true;\n};\n\n// src/commands/join.ts\nimport {\n joinBackward as originalJoinBackward,\n joinDown as originalJoinDown,\n joinForward as originalJoinForward,\n joinUp as originalJoinUp\n} from \"@tiptap/pm/commands\";\nvar joinUp = () => ({ state, dispatch }) => {\n return originalJoinUp(state, dispatch);\n};\nvar joinDown = () => ({ state, dispatch }) => {\n return originalJoinDown(state, dispatch);\n};\nvar joinBackward = () => ({ state, dispatch }) => {\n return originalJoinBackward(state, dispatch);\n};\nvar joinForward = () => ({ state, dispatch }) => {\n return originalJoinForward(state, dispatch);\n};\n\n// src/commands/joinItemBackward.ts\nimport { joinPoint } from \"@tiptap/pm/transform\";\nvar joinItemBackward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinItemForward.ts\nimport { joinPoint as joinPoint2 } from \"@tiptap/pm/transform\";\nvar joinItemForward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint2(state.doc, state.selection.$from.pos, 1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinTextblockBackward.ts\nimport { joinTextblockBackward as originalCommand } from \"@tiptap/pm/commands\";\nvar joinTextblockBackward = () => ({ state, dispatch }) => {\n return originalCommand(state, dispatch);\n};\n\n// src/commands/joinTextblockForward.ts\nimport { joinTextblockForward as originalCommand2 } from \"@tiptap/pm/commands\";\nvar joinTextblockForward = () => ({ state, dispatch }) => {\n return originalCommand2(state, dispatch);\n};\n\n// src/utilities/isMacOS.ts\nfunction isMacOS() {\n return typeof navigator !== \"undefined\" ? /Mac/.test(navigator.platform) : false;\n}\n\n// src/commands/keyboardShortcut.ts\nfunction normalizeKeyName(name) {\n const parts = name.split(/-(?!$)/);\n let result = parts[parts.length - 1];\n if (result === \"Space\") {\n result = \" \";\n }\n let alt;\n let ctrl;\n let shift;\n let meta;\n for (let i = 0; i < parts.length - 1; i += 1) {\n const mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) {\n meta = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else if (/^mod$/i.test(mod)) {\n if (isiOS() || isMacOS()) {\n meta = true;\n } else {\n ctrl = true;\n }\n } else {\n throw new Error(`Unrecognized modifier name: ${mod}`);\n }\n }\n if (alt) {\n result = `Alt-${result}`;\n }\n if (ctrl) {\n result = `Ctrl-${result}`;\n }\n if (meta) {\n result = `Meta-${result}`;\n }\n if (shift) {\n result = `Shift-${result}`;\n }\n return result;\n}\nvar keyboardShortcut = (name) => ({ editor, view, tr, dispatch }) => {\n const keys = normalizeKeyName(name).split(/-(?!$)/);\n const key = keys.find((item) => ![\"Alt\", \"Ctrl\", \"Meta\", \"Shift\"].includes(item));\n const event = new KeyboardEvent(\"keydown\", {\n key: key === \"Space\" ? \" \" : key,\n altKey: keys.includes(\"Alt\"),\n ctrlKey: keys.includes(\"Ctrl\"),\n metaKey: keys.includes(\"Meta\"),\n shiftKey: keys.includes(\"Shift\"),\n bubbles: true,\n cancelable: true\n });\n const capturedTransaction = editor.captureTransaction(() => {\n view.someProp(\"handleKeyDown\", (f) => f(view, event));\n });\n capturedTransaction == null ? void 0 : capturedTransaction.steps.forEach((step) => {\n const newStep = step.map(tr.mapping);\n if (newStep && dispatch) {\n tr.maybeStep(newStep);\n }\n });\n return true;\n};\n\n// src/commands/lift.ts\nimport { lift as originalLift } from \"@tiptap/pm/commands\";\n\n// src/helpers/isNodeActive.ts\nfunction isNodeActive(state, typeOrName, attributes = {}) {\n const { from, to, empty } = state.selection;\n const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;\n const nodeRanges = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n nodeRanges.push({\n node,\n from: relativeFrom,\n to: relativeTo\n });\n });\n const selectionRange = to - from;\n const matchedNodeRanges = nodeRanges.filter((nodeRange) => {\n if (!type) {\n return true;\n }\n return type.name === nodeRange.node.type.name;\n }).filter((nodeRange) => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));\n if (empty) {\n return !!matchedNodeRanges.length;\n }\n const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);\n return range >= selectionRange;\n}\n\n// src/commands/lift.ts\nvar lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (!isActive2) {\n return false;\n }\n return originalLift(state, dispatch);\n};\n\n// src/commands/liftEmptyBlock.ts\nimport { liftEmptyBlock as originalLiftEmptyBlock } from \"@tiptap/pm/commands\";\nvar liftEmptyBlock = () => ({ state, dispatch }) => {\n return originalLiftEmptyBlock(state, dispatch);\n};\n\n// src/commands/liftListItem.ts\nimport { liftListItem as originalLiftListItem } from \"@tiptap/pm/schema-list\";\nvar liftListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalLiftListItem(type)(state, dispatch);\n};\n\n// src/commands/newlineInCode.ts\nimport { newlineInCode as originalNewlineInCode } from \"@tiptap/pm/commands\";\nvar newlineInCode = () => ({ state, dispatch }) => {\n return originalNewlineInCode(state, dispatch);\n};\n\n// src/helpers/getSchemaTypeNameByName.ts\nfunction getSchemaTypeNameByName(name, schema) {\n if (schema.nodes[name]) {\n return \"node\";\n }\n if (schema.marks[name]) {\n return \"mark\";\n }\n return null;\n}\n\n// src/utilities/deleteProps.ts\nfunction deleteProps(obj, propOrProps) {\n const props = typeof propOrProps === \"string\" ? [propOrProps] : propOrProps;\n return Object.keys(obj).reduce((newObj, prop) => {\n if (!props.includes(prop)) {\n newObj[prop] = obj[prop];\n }\n return newObj;\n }, {});\n}\n\n// src/commands/resetAttributes.ts\nvar resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n let canReset = false;\n tr.selection.ranges.forEach((range) => {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n canReset = true;\n if (dispatch) {\n tr.setNodeMarkup(pos, void 0, deleteProps(node.attrs, attributes));\n }\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n canReset = true;\n if (dispatch) {\n tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));\n }\n }\n });\n }\n });\n });\n return canReset;\n};\n\n// src/commands/scrollIntoView.ts\nvar scrollIntoView = () => ({ tr, dispatch }) => {\n if (dispatch) {\n tr.scrollIntoView();\n }\n return true;\n};\n\n// src/commands/selectAll.ts\nimport { AllSelection } from \"@tiptap/pm/state\";\nvar selectAll = () => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = new AllSelection(tr.doc);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/selectNodeBackward.ts\nimport { selectNodeBackward as originalSelectNodeBackward } from \"@tiptap/pm/commands\";\nvar selectNodeBackward = () => ({ state, dispatch }) => {\n return originalSelectNodeBackward(state, dispatch);\n};\n\n// src/commands/selectNodeForward.ts\nimport { selectNodeForward as originalSelectNodeForward } from \"@tiptap/pm/commands\";\nvar selectNodeForward = () => ({ state, dispatch }) => {\n return originalSelectNodeForward(state, dispatch);\n};\n\n// src/commands/selectParentNode.ts\nimport { selectParentNode as originalSelectParentNode } from \"@tiptap/pm/commands\";\nvar selectParentNode = () => ({ state, dispatch }) => {\n return originalSelectParentNode(state, dispatch);\n};\n\n// src/commands/selectTextblockEnd.ts\nimport { selectTextblockEnd as originalSelectTextblockEnd } from \"@tiptap/pm/commands\";\nvar selectTextblockEnd = () => ({ state, dispatch }) => {\n return originalSelectTextblockEnd(state, dispatch);\n};\n\n// src/commands/selectTextblockStart.ts\nimport { selectTextblockStart as originalSelectTextblockStart } from \"@tiptap/pm/commands\";\nvar selectTextblockStart = () => ({ state, dispatch }) => {\n return originalSelectTextblockStart(state, dispatch);\n};\n\n// src/helpers/createDocument.ts\nfunction createDocument(content, schema, parseOptions = {}, options = {}) {\n return createNodeFromContent(content, schema, {\n slice: false,\n parseOptions,\n errorOnInvalidContent: options.errorOnInvalidContent\n });\n}\n\n// src/commands/setContent.ts\nvar setContent = (content, { errorOnInvalidContent, emitUpdate = true, parseOptions = {} } = {}) => ({ editor, tr, dispatch, commands }) => {\n const { doc } = tr;\n if (parseOptions.preserveWhitespace !== \"full\") {\n const document2 = createDocument(content, editor.schema, parseOptions, {\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n if (dispatch) {\n tr.replaceWith(0, doc.content.size, document2).setMeta(\"preventUpdate\", !emitUpdate);\n }\n return true;\n }\n if (dispatch) {\n tr.setMeta(\"preventUpdate\", !emitUpdate);\n }\n return commands.insertContentAt({ from: 0, to: doc.content.size }, content, {\n parseOptions,\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n};\n\n// src/helpers/getMarkAttributes.ts\nfunction getMarkAttributes(state, typeOrName) {\n const type = getMarkType(typeOrName, state.schema);\n const { from, to, empty } = state.selection;\n const marks = [];\n if (empty) {\n if (state.storedMarks) {\n marks.push(...state.storedMarks);\n }\n marks.push(...state.selection.$head.marks());\n } else {\n state.doc.nodesBetween(from, to, (node) => {\n marks.push(...node.marks);\n });\n }\n const mark = marks.find((markItem) => markItem.type.name === type.name);\n if (!mark) {\n return {};\n }\n return { ...mark.attrs };\n}\n\n// src/helpers/combineTransactionSteps.ts\nimport { Transform } from \"@tiptap/pm/transform\";\nfunction combineTransactionSteps(oldDoc, transactions) {\n const transform = new Transform(oldDoc);\n transactions.forEach((transaction) => {\n transaction.steps.forEach((step) => {\n transform.step(step);\n });\n });\n return transform;\n}\n\n// src/helpers/defaultBlockAt.ts\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i += 1) {\n const { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs()) {\n return type;\n }\n }\n return null;\n}\n\n// src/helpers/findChildren.ts\nfunction findChildren(node, predicate) {\n const nodesWithPos = [];\n node.descendants((child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findChildrenInRange.ts\nfunction findChildrenInRange(node, range, predicate) {\n const nodesWithPos = [];\n node.nodesBetween(range.from, range.to, (child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findParentNodeClosestToPos.ts\nfunction findParentNodeClosestToPos($pos, predicate) {\n for (let i = $pos.depth; i > 0; i -= 1) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node\n };\n }\n }\n}\n\n// src/helpers/findParentNode.ts\nfunction findParentNode(predicate) {\n return (selection) => findParentNodeClosestToPos(selection.$from, predicate);\n}\n\n// src/helpers/getExtensionField.ts\nfunction getExtensionField(extension, field, context) {\n if (extension.config[field] === void 0 && extension.parent) {\n return getExtensionField(extension.parent, field, context);\n }\n if (typeof extension.config[field] === \"function\") {\n const value = extension.config[field].bind({\n ...context,\n parent: extension.parent ? getExtensionField(extension.parent, field, context) : null\n });\n return value;\n }\n return extension.config[field];\n}\n\n// src/helpers/flattenExtensions.ts\nfunction flattenExtensions(extensions) {\n return extensions.map((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addExtensions = getExtensionField(extension, \"addExtensions\", context);\n if (addExtensions) {\n return [extension, ...flattenExtensions(addExtensions())];\n }\n return extension;\n }).flat(10);\n}\n\n// src/helpers/generateHTML.ts\nimport { Node } from \"@tiptap/pm/model\";\n\n// src/helpers/getHTMLFromFragment.ts\nimport { DOMSerializer } from \"@tiptap/pm/model\";\nfunction getHTMLFromFragment(fragment, schema) {\n const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment);\n const temporaryDocument = document.implementation.createHTMLDocument();\n const container = temporaryDocument.createElement(\"div\");\n container.appendChild(documentFragment);\n return container.innerHTML;\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nimport { Schema as Schema2 } from \"@tiptap/pm/model\";\n\n// src/utilities/isFunction.ts\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/utilities/callOrReturn.ts\nfunction callOrReturn(value, context = void 0, ...props) {\n if (isFunction(value)) {\n if (context) {\n return value.bind(context)(...props);\n }\n return value(...props);\n }\n return value;\n}\n\n// src/utilities/isEmptyObject.ts\nfunction isEmptyObject(value = {}) {\n return Object.keys(value).length === 0 && value.constructor === Object;\n}\n\n// src/helpers/splitExtensions.ts\nfunction splitExtensions(extensions) {\n const baseExtensions = extensions.filter((extension) => extension.type === \"extension\");\n const nodeExtensions = extensions.filter((extension) => extension.type === \"node\");\n const markExtensions = extensions.filter((extension) => extension.type === \"mark\");\n return {\n baseExtensions,\n nodeExtensions,\n markExtensions\n };\n}\n\n// src/helpers/getAttributesFromExtensions.ts\nfunction getAttributesFromExtensions(extensions) {\n const extensionAttributes = [];\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];\n const defaultAttribute = {\n default: null,\n validate: void 0,\n rendered: true,\n renderHTML: null,\n parseHTML: null,\n keepOnSplit: true,\n isRequired: false\n };\n const nodeExtensionTypes = nodeExtensions.filter((ext) => ext.name !== \"text\").map((ext) => ext.name);\n const markExtensionTypes = markExtensions.map((ext) => ext.name);\n const allExtensionTypes = [...nodeExtensionTypes, ...markExtensionTypes];\n extensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n extensions: nodeAndMarkExtensions\n };\n const addGlobalAttributes = getExtensionField(\n extension,\n \"addGlobalAttributes\",\n context\n );\n if (!addGlobalAttributes) {\n return;\n }\n const globalAttributes = addGlobalAttributes();\n globalAttributes.forEach((globalAttribute) => {\n let resolvedTypes;\n if (Array.isArray(globalAttribute.types)) {\n resolvedTypes = globalAttribute.types;\n } else if (globalAttribute.types === \"*\") {\n resolvedTypes = allExtensionTypes;\n } else if (globalAttribute.types === \"nodes\") {\n resolvedTypes = nodeExtensionTypes;\n } else if (globalAttribute.types === \"marks\") {\n resolvedTypes = markExtensionTypes;\n } else {\n resolvedTypes = [];\n }\n resolvedTypes.forEach((type) => {\n Object.entries(globalAttribute.attributes).forEach(([name, attribute]) => {\n extensionAttributes.push({\n type,\n name,\n attribute: {\n ...defaultAttribute,\n ...attribute\n }\n });\n });\n });\n });\n });\n nodeAndMarkExtensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addAttributes = getExtensionField(\n extension,\n \"addAttributes\",\n context\n );\n if (!addAttributes) {\n return;\n }\n const attributes = addAttributes();\n Object.entries(attributes).forEach(([name, attribute]) => {\n const mergedAttr = {\n ...defaultAttribute,\n ...attribute\n };\n if (typeof (mergedAttr == null ? void 0 : mergedAttr.default) === \"function\") {\n mergedAttr.default = mergedAttr.default();\n }\n if ((mergedAttr == null ? void 0 : mergedAttr.isRequired) && (mergedAttr == null ? void 0 : mergedAttr.default) === void 0) {\n delete mergedAttr.default;\n }\n extensionAttributes.push({\n type: extension.name,\n name,\n attribute: mergedAttr\n });\n });\n });\n return extensionAttributes;\n}\n\n// src/utilities/mergeAttributes.ts\nfunction splitStyleDeclarations(styles) {\n const result = [];\n let current = \"\";\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let parenDepth = 0;\n const length = styles.length;\n for (let i = 0; i < length; i += 1) {\n const char = styles[i];\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n current += char;\n continue;\n }\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n current += char;\n continue;\n }\n if (!inSingleQuote && !inDoubleQuote) {\n if (char === \"(\") {\n parenDepth += 1;\n current += char;\n continue;\n }\n if (char === \")\" && parenDepth > 0) {\n parenDepth -= 1;\n current += char;\n continue;\n }\n if (char === \";\" && parenDepth === 0) {\n result.push(current);\n current = \"\";\n continue;\n }\n }\n current += char;\n }\n if (current) {\n result.push(current);\n }\n return result;\n}\nfunction parseStyleEntries(styles) {\n const pairs = [];\n const declarations = splitStyleDeclarations(styles || \"\");\n const numDeclarations = declarations.length;\n for (let i = 0; i < numDeclarations; i += 1) {\n const declaration = declarations[i];\n const firstColonIndex = declaration.indexOf(\":\");\n if (firstColonIndex === -1) {\n continue;\n }\n const property = declaration.slice(0, firstColonIndex).trim();\n const value = declaration.slice(firstColonIndex + 1).trim();\n if (property && value) {\n pairs.push([property, value]);\n }\n }\n return pairs;\n}\nfunction mergeAttributes(...objects) {\n return objects.filter((item) => !!item).reduce((items, item) => {\n const mergedAttributes = { ...items };\n Object.entries(item).forEach(([key, value]) => {\n const exists = mergedAttributes[key];\n if (!exists) {\n mergedAttributes[key] = value;\n return;\n }\n if (key === \"class\") {\n const valueClasses = value ? String(value).split(\" \") : [];\n const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(\" \") : [];\n const insertClasses = valueClasses.filter((valueClass) => !existingClasses.includes(valueClass));\n mergedAttributes[key] = [...existingClasses, ...insertClasses].join(\" \");\n } else if (key === \"style\") {\n const styleMap = new Map([...parseStyleEntries(mergedAttributes[key]), ...parseStyleEntries(value)]);\n mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join(\"; \");\n } else {\n mergedAttributes[key] = value;\n }\n });\n return mergedAttributes;\n }, {});\n}\n\n// src/helpers/getRenderedAttributes.ts\nfunction getRenderedAttributes(nodeOrMark, extensionAttributes) {\n return extensionAttributes.filter((attribute) => attribute.type === nodeOrMark.type.name).filter((item) => item.attribute.rendered).map((item) => {\n if (!item.attribute.renderHTML) {\n return {\n [item.name]: nodeOrMark.attrs[item.name]\n };\n }\n return item.attribute.renderHTML(nodeOrMark.attrs) || {};\n }).reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});\n}\n\n// src/utilities/fromString.ts\nfunction fromString(value) {\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.match(/^[+-]?(?:\\d*\\.)?\\d+$/)) {\n return Number(value);\n }\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n return value;\n}\n\n// src/helpers/injectExtensionAttributesToParseRule.ts\nfunction injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {\n if (\"style\" in parseRule) {\n return parseRule;\n }\n return {\n ...parseRule,\n getAttrs: (node) => {\n const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;\n if (oldAttributes === false) {\n return false;\n }\n const newAttributes = extensionAttributes.reduce((items, item) => {\n const value = item.attribute.parseHTML ? item.attribute.parseHTML(node) : fromString(node.getAttribute(item.name));\n if (value === null || value === void 0) {\n return items;\n }\n return {\n ...items,\n [item.name]: value\n };\n }, {});\n return { ...oldAttributes, ...newAttributes };\n }\n };\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nfunction cleanUpSchemaItem(data) {\n return Object.fromEntries(\n // @ts-ignore\n Object.entries(data).filter(([key, value]) => {\n if (key === \"attrs\" && isEmptyObject(value)) {\n return false;\n }\n return value !== null && value !== void 0;\n })\n );\n}\nfunction buildAttributeSpec(extensionAttribute) {\n var _a, _b;\n const spec = {};\n if (!((_a = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _a.isRequired) && \"default\" in ((extensionAttribute == null ? void 0 : extensionAttribute.attribute) || {})) {\n spec.default = extensionAttribute.attribute.default;\n }\n if (((_b = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _b.validate) !== void 0) {\n spec.validate = extensionAttribute.attribute.validate;\n }\n return [extensionAttribute.name, spec];\n}\nfunction getSchemaByResolvedExtensions(extensions, editor) {\n var _a;\n const allAttributes = getAttributesFromExtensions(extensions);\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const topNode = (_a = nodeExtensions.find((extension) => getExtensionField(extension, \"topNode\"))) == null ? void 0 : _a.name;\n const nodes = Object.fromEntries(\n nodeExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraNodeFields = extensions.reduce((fields, e) => {\n const extendNodeSchema = getExtensionField(e, \"extendNodeSchema\", context);\n return {\n ...fields,\n ...extendNodeSchema ? extendNodeSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraNodeFields,\n content: callOrReturn(getExtensionField(extension, \"content\", context)),\n marks: callOrReturn(getExtensionField(extension, \"marks\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n inline: callOrReturn(getExtensionField(extension, \"inline\", context)),\n atom: callOrReturn(getExtensionField(extension, \"atom\", context)),\n selectable: callOrReturn(getExtensionField(extension, \"selectable\", context)),\n draggable: callOrReturn(getExtensionField(extension, \"draggable\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n whitespace: callOrReturn(getExtensionField(extension, \"whitespace\", context)),\n linebreakReplacement: callOrReturn(\n getExtensionField(extension, \"linebreakReplacement\", context)\n ),\n defining: callOrReturn(getExtensionField(extension, \"defining\", context)),\n isolating: callOrReturn(getExtensionField(extension, \"isolating\", context)),\n attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (node) => renderHTML({\n node,\n HTMLAttributes: getRenderedAttributes(node, extensionAttributes)\n });\n }\n const renderText = getExtensionField(extension, \"renderText\", context);\n if (renderText) {\n schema.toText = renderText;\n }\n return [extension.name, schema];\n })\n );\n const marks = Object.fromEntries(\n markExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraMarkFields = extensions.reduce((fields, e) => {\n const extendMarkSchema = getExtensionField(e, \"extendMarkSchema\", context);\n return {\n ...fields,\n ...extendMarkSchema ? extendMarkSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraMarkFields,\n inclusive: callOrReturn(getExtensionField(extension, \"inclusive\", context)),\n excludes: callOrReturn(getExtensionField(extension, \"excludes\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n spanning: callOrReturn(getExtensionField(extension, \"spanning\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (mark) => renderHTML({\n mark,\n HTMLAttributes: getRenderedAttributes(mark, extensionAttributes)\n });\n }\n return [extension.name, schema];\n })\n );\n return new Schema2({\n topNode,\n nodes,\n marks\n });\n}\n\n// src/utilities/findDuplicates.ts\nfunction findDuplicates(items) {\n const filtered = items.filter((el, index) => items.indexOf(el) !== index);\n return Array.from(new Set(filtered));\n}\n\n// src/helpers/sortExtensions.ts\nfunction sortExtensions(extensions) {\n const defaultPriority = 100;\n return extensions.sort((a, b) => {\n const priorityA = getExtensionField(a, \"priority\") || defaultPriority;\n const priorityB = getExtensionField(b, \"priority\") || defaultPriority;\n if (priorityA > priorityB) {\n return -1;\n }\n if (priorityA < priorityB) {\n return 1;\n }\n return 0;\n });\n}\n\n// src/helpers/resolveExtensions.ts\nfunction resolveExtensions(extensions) {\n const resolvedExtensions = sortExtensions(flattenExtensions(extensions));\n const duplicatedNames = findDuplicates(resolvedExtensions.map((extension) => extension.name));\n if (duplicatedNames.length) {\n console.warn(\n `[tiptap warn]: Duplicate extension names found: [${duplicatedNames.map((item) => `'${item}'`).join(\", \")}]. This can lead to issues.`\n );\n }\n return resolvedExtensions;\n}\n\n// src/helpers/getSchema.ts\nfunction getSchema(extensions, editor) {\n const resolvedExtensions = resolveExtensions(extensions);\n return getSchemaByResolvedExtensions(resolvedExtensions, editor);\n}\n\n// src/helpers/generateHTML.ts\nfunction generateHTML(doc, extensions) {\n const schema = getSchema(extensions);\n const contentNode = Node.fromJSON(schema, doc);\n return getHTMLFromFragment(contentNode.content, schema);\n}\n\n// src/helpers/generateJSON.ts\nimport { DOMParser as DOMParser2 } from \"@tiptap/pm/model\";\nfunction generateJSON(html, extensions) {\n const schema = getSchema(extensions);\n const dom = elementFromString(html);\n return DOMParser2.fromSchema(schema).parse(dom).toJSON();\n}\n\n// src/helpers/generateText.ts\nimport { Node as Node2 } from \"@tiptap/pm/model\";\n\n// src/helpers/getTextBetween.ts\nfunction getTextBetween(startNode, range, options) {\n const { from, to } = range;\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n let text = \"\";\n startNode.nodesBetween(from, to, (node, pos, parent, index) => {\n var _a;\n if (node.isBlock && pos > from) {\n text += blockSeparator;\n }\n const textSerializer = textSerializers == null ? void 0 : textSerializers[node.type.name];\n if (textSerializer) {\n if (parent) {\n text += textSerializer({\n node,\n pos,\n parent,\n index,\n range\n });\n }\n return false;\n }\n if (node.isText) {\n text += (_a = node == null ? void 0 : node.text) == null ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos);\n }\n });\n return text;\n}\n\n// src/helpers/getText.ts\nfunction getText(node, options) {\n const range = {\n from: 0,\n to: node.content.size\n };\n return getTextBetween(node, range, options);\n}\n\n// src/helpers/getTextSerializersFromSchema.ts\nfunction getTextSerializersFromSchema(schema) {\n return Object.fromEntries(\n Object.entries(schema.nodes).filter(([, node]) => node.spec.toText).map(([name, node]) => [name, node.spec.toText])\n );\n}\n\n// src/helpers/generateText.ts\nfunction generateText(doc, extensions, options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n const schema = getSchema(extensions);\n const contentNode = Node2.fromJSON(schema, doc);\n return getText(contentNode, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(schema),\n ...textSerializers\n }\n });\n}\n\n// src/helpers/getNodeAttributes.ts\nfunction getNodeAttributes(state, typeOrName) {\n const type = getNodeType(typeOrName, state.schema);\n const { from, to } = state.selection;\n const nodes = [];\n state.doc.nodesBetween(from, to, (node2) => {\n nodes.push(node2);\n });\n const node = nodes.reverse().find((nodeItem) => nodeItem.type.name === type.name);\n if (!node) {\n return {};\n }\n return { ...node.attrs };\n}\n\n// src/helpers/getAttributes.ts\nfunction getAttributes(state, typeOrName) {\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (schemaType === \"node\") {\n return getNodeAttributes(state, typeOrName);\n }\n if (schemaType === \"mark\") {\n return getMarkAttributes(state, typeOrName);\n }\n return {};\n}\n\n// src/utilities/removeDuplicates.ts\nfunction removeDuplicates(array, by = JSON.stringify) {\n const seen = {};\n return array.filter((item) => {\n const key = by(item);\n return Object.prototype.hasOwnProperty.call(seen, key) ? false : seen[key] = true;\n });\n}\n\n// src/helpers/getChangedRanges.ts\nfunction simplifyChangedRanges(changes) {\n const uniqueChanges = removeDuplicates(changes);\n return uniqueChanges.length === 1 ? uniqueChanges : uniqueChanges.filter((change, index) => {\n const rest = uniqueChanges.filter((_, i) => i !== index);\n return !rest.some((otherChange) => {\n return change.oldRange.from >= otherChange.oldRange.from && change.oldRange.to <= otherChange.oldRange.to && change.newRange.from >= otherChange.newRange.from && change.newRange.to <= otherChange.newRange.to;\n });\n });\n}\nfunction getChangedRanges(transform) {\n const { mapping, steps } = transform;\n const changes = [];\n mapping.maps.forEach((stepMap, index) => {\n const ranges = [];\n if (!stepMap.ranges.length) {\n const { from, to } = steps[index];\n if (from === void 0 || to === void 0) {\n return;\n }\n ranges.push({ from, to });\n } else {\n stepMap.forEach((from, to) => {\n ranges.push({ from, to });\n });\n }\n ranges.forEach(({ from, to }) => {\n const newStart = mapping.slice(index).map(from, -1);\n const newEnd = mapping.slice(index).map(to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n changes.push({\n oldRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n }\n });\n });\n });\n return simplifyChangedRanges(changes);\n}\n\n// src/helpers/getDebugJSON.ts\nfunction getDebugJSON(node, startOffset = 0) {\n const isTopNode = node.type === node.type.schema.topNodeType;\n const increment = isTopNode ? 0 : 1;\n const from = startOffset;\n const to = from + node.nodeSize;\n const marks = node.marks.map((mark) => {\n const output2 = {\n type: mark.type.name\n };\n if (Object.keys(mark.attrs).length) {\n output2.attrs = { ...mark.attrs };\n }\n return output2;\n });\n const attrs = { ...node.attrs };\n const output = {\n type: node.type.name,\n from,\n to\n };\n if (Object.keys(attrs).length) {\n output.attrs = attrs;\n }\n if (marks.length) {\n output.marks = marks;\n }\n if (node.content.childCount) {\n output.content = [];\n node.forEach((child, offset) => {\n var _a;\n (_a = output.content) == null ? void 0 : _a.push(getDebugJSON(child, startOffset + offset + increment));\n });\n }\n if (node.text) {\n output.text = node.text;\n }\n return output;\n}\n\n// src/helpers/getMarksBetween.ts\nfunction getMarksBetween(from, to, doc) {\n const marks = [];\n if (from === to) {\n doc.resolve(from).marks().forEach((mark) => {\n const $pos = doc.resolve(from);\n const range = getMarkRange($pos, mark.type);\n if (!range) {\n return;\n }\n marks.push({\n mark,\n ...range\n });\n });\n } else {\n doc.nodesBetween(from, to, (node, pos) => {\n if (!node || (node == null ? void 0 : node.nodeSize) === void 0) {\n return;\n }\n marks.push(\n ...node.marks.map((mark) => ({\n from: pos,\n to: pos + node.nodeSize,\n mark\n }))\n );\n });\n }\n return marks;\n}\n\n// src/helpers/getNodeAtPosition.ts\nvar getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {\n const $pos = state.doc.resolve(pos);\n let currentDepth = maxDepth;\n let node = null;\n while (currentDepth > 0 && node === null) {\n const currentNode = $pos.node(currentDepth);\n if ((currentNode == null ? void 0 : currentNode.type.name) === typeOrName) {\n node = currentNode;\n } else {\n currentDepth -= 1;\n }\n }\n return [node, currentDepth];\n};\n\n// src/helpers/getSchemaTypeByName.ts\nfunction getSchemaTypeByName(name, schema) {\n return schema.nodes[name] || schema.marks[name] || null;\n}\n\n// src/helpers/getSplittedAttributes.ts\nfunction getSplittedAttributes(extensionAttributes, typeName, attributes) {\n return Object.fromEntries(\n Object.entries(attributes).filter(([name]) => {\n const extensionAttribute = extensionAttributes.find((item) => {\n return item.type === typeName && item.name === name;\n });\n if (!extensionAttribute) {\n return false;\n }\n return extensionAttribute.attribute.keepOnSplit;\n })\n );\n}\n\n// src/helpers/getTextContentFromNodes.ts\nvar getTextContentFromNodes = ($from, maxMatch = 500) => {\n let textBefore = \"\";\n const sliceEndPos = $from.parentOffset;\n $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {\n var _a, _b;\n const chunk = ((_b = (_a = node.type.spec).toText) == null ? void 0 : _b.call(_a, {\n node,\n pos,\n parent,\n index\n })) || node.textContent || \"%leaf%\";\n textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos));\n });\n return textBefore;\n};\n\n// src/helpers/isMarkActive.ts\nfunction isMarkActive(state, typeOrName, attributes = {}) {\n const { empty, ranges } = state.selection;\n const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;\n if (empty) {\n return !!(state.storedMarks || state.selection.$from.marks()).filter((mark) => {\n if (!type) {\n return true;\n }\n return type.name === mark.type.name;\n }).find((mark) => objectIncludes(mark.attrs, attributes, { strict: false }));\n }\n let selectionRange = 0;\n const markRanges = [];\n ranges.forEach(({ $from, $to }) => {\n const from = $from.pos;\n const to = $to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (type && node.inlineContent && !node.type.allowsMarkType(type)) {\n return false;\n }\n if (!node.isText && !node.marks.length) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n const range2 = relativeTo - relativeFrom;\n selectionRange += range2;\n markRanges.push(\n ...node.marks.map((mark) => ({\n mark,\n from: relativeFrom,\n to: relativeTo\n }))\n );\n });\n });\n if (selectionRange === 0) {\n return false;\n }\n const matchedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return type.name === markRange.mark.type.name;\n }).filter((markRange) => objectIncludes(markRange.mark.attrs, attributes, { strict: false })).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const excludedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return markRange.mark.type !== type && markRange.mark.type.excludes(type);\n }).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;\n return range >= selectionRange;\n}\n\n// src/helpers/isActive.ts\nfunction isActive(state, name, attributes = {}) {\n if (!name) {\n return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);\n }\n const schemaType = getSchemaTypeNameByName(name, state.schema);\n if (schemaType === \"node\") {\n return isNodeActive(state, name, attributes);\n }\n if (schemaType === \"mark\") {\n return isMarkActive(state, name, attributes);\n }\n return false;\n}\n\n// src/helpers/isAtEndOfNode.ts\nvar isAtEndOfNode = (state, nodeType) => {\n const { $from, $to, $anchor } = state.selection;\n if (nodeType) {\n const parentNode = findParentNode((node) => node.type.name === nodeType)(state.selection);\n if (!parentNode) {\n return false;\n }\n const $parentPos = state.doc.resolve(parentNode.pos + 1);\n if ($anchor.pos + 1 === $parentPos.end()) {\n return true;\n }\n return false;\n }\n if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isAtStartOfNode.ts\nvar isAtStartOfNode = (state) => {\n const { $from, $to } = state.selection;\n if ($from.parentOffset > 0 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isExtensionRulesEnabled.ts\nfunction isExtensionRulesEnabled(extension, enabled) {\n if (Array.isArray(enabled)) {\n return enabled.some((enabledExtension) => {\n const name = typeof enabledExtension === \"string\" ? enabledExtension : enabledExtension.name;\n return name === extension.name;\n });\n }\n return enabled;\n}\n\n// src/helpers/isList.ts\nfunction isList(name, extensions) {\n const { nodeExtensions } = splitExtensions(extensions);\n const extension = nodeExtensions.find((item) => item.name === name);\n if (!extension) {\n return false;\n }\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const group = callOrReturn(getExtensionField(extension, \"group\", context));\n if (typeof group !== \"string\") {\n return false;\n }\n return group.split(\" \").includes(\"list\");\n}\n\n// src/helpers/isNodeEmpty.ts\nfunction isNodeEmpty(node, {\n checkChildren = true,\n ignoreWhitespace = false\n} = {}) {\n var _a;\n if (ignoreWhitespace) {\n if (node.type.name === \"hardBreak\") {\n return true;\n }\n if (node.isText) {\n return !/\\S/.test((_a = node.text) != null ? _a : \"\");\n }\n }\n if (node.isText) {\n return !node.text;\n }\n if (node.isAtom || node.isLeaf) {\n return false;\n }\n if (node.content.childCount === 0) {\n return true;\n }\n if (checkChildren) {\n let isContentEmpty = true;\n node.content.forEach((childNode) => {\n if (isContentEmpty === false) {\n return;\n }\n if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {\n isContentEmpty = false;\n }\n });\n return isContentEmpty;\n }\n return false;\n}\n\n// src/helpers/isNodeSelection.ts\nimport { NodeSelection } from \"@tiptap/pm/state\";\nfunction isNodeSelection(value) {\n return value instanceof NodeSelection;\n}\n\n// src/helpers/isNodeViewSelected.ts\nfunction isNodeViewSelected({\n selection,\n pos,\n nodeSize,\n selectedOnTextSelection = false\n}) {\n const { from, to } = selection;\n if (from <= pos && to >= pos + nodeSize) {\n return true;\n }\n if (selectedOnTextSelection && isTextSelection(selection) && from > pos && to < pos + nodeSize) {\n return true;\n }\n return false;\n}\n\n// src/helpers/MappablePosition.ts\nvar MappablePosition = class _MappablePosition {\n constructor(position) {\n this.position = position;\n }\n /**\n * Creates a MappablePosition from a JSON object.\n */\n static fromJSON(json) {\n return new _MappablePosition(json.position);\n }\n /**\n * Converts the MappablePosition to a JSON object.\n */\n toJSON() {\n return {\n position: this.position\n };\n }\n};\nfunction getUpdatedPosition(position, transaction) {\n const mapResult = transaction.mapping.mapResult(position.position);\n return {\n position: new MappablePosition(mapResult.pos),\n mapResult\n };\n}\nfunction createMappablePosition(position) {\n return new MappablePosition(position);\n}\n\n// src/helpers/posToDOMRect.ts\nfunction posToDOMRect(view, from, to) {\n const minPos = 0;\n const maxPos = view.state.doc.content.size;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const start = view.coordsAtPos(resolvedFrom);\n const end = view.coordsAtPos(resolvedEnd, -1);\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n const width = right - left;\n const height = bottom - top;\n const x = left;\n const y = top;\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y\n };\n return {\n ...data,\n toJSON: () => data\n };\n}\n\n// src/helpers/rewriteUnknownContent.ts\nfunction rewriteUnknownContentInner({\n json,\n validMarks,\n validNodes,\n options,\n rewrittenContent = []\n}) {\n if (json.marks && Array.isArray(json.marks)) {\n json.marks = json.marks.filter((mark) => {\n const name = typeof mark === \"string\" ? mark : mark.type;\n if (validMarks.has(name)) {\n return true;\n }\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(mark)),\n unsupported: name\n });\n return false;\n });\n }\n if (json.content && Array.isArray(json.content)) {\n json.content = json.content.map(\n (value) => rewriteUnknownContentInner({\n json: value,\n validMarks,\n validNodes,\n options,\n rewrittenContent\n }).json\n ).filter((a) => a !== null && a !== void 0);\n }\n if (json.type && !validNodes.has(json.type)) {\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(json)),\n unsupported: json.type\n });\n if (json.content && Array.isArray(json.content) && (options == null ? void 0 : options.fallbackToParagraph) !== false) {\n json.type = \"paragraph\";\n return {\n json,\n rewrittenContent\n };\n }\n return {\n json: null,\n rewrittenContent\n };\n }\n return { json, rewrittenContent };\n}\nfunction rewriteUnknownContent(json, schema, options) {\n return rewriteUnknownContentInner({\n json,\n validNodes: new Set(Object.keys(schema.nodes)),\n validMarks: new Set(Object.keys(schema.marks)),\n options\n });\n}\n\n// src/commands/setMark.ts\nfunction canSetMark(state, tr, newMarkType) {\n var _a;\n const { selection } = tr;\n let cursor = null;\n if (isTextSelection(selection)) {\n cursor = selection.$cursor;\n }\n if (cursor) {\n const currentMarks = (_a = state.storedMarks) != null ? _a : cursor.marks();\n const parentAllowsMarkType = cursor.parent.type.allowsMarkType(newMarkType);\n return parentAllowsMarkType && (!!newMarkType.isInSet(currentMarks) || !currentMarks.some((mark) => mark.type.excludes(newMarkType)));\n }\n const { ranges } = selection;\n return ranges.some(({ $from, $to }) => {\n let someNodeSupportsMark = $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false;\n state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\n if (someNodeSupportsMark) {\n return false;\n }\n if (node.isInline) {\n const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);\n const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks) || !node.marks.some((otherMark) => otherMark.type.excludes(newMarkType));\n someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;\n }\n return !someNodeSupportsMark;\n });\n return someNodeSupportsMark;\n });\n}\nvar setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n const type = getMarkType(typeOrName, state.schema);\n if (dispatch) {\n if (empty) {\n const oldAttributes = getMarkAttributes(state, type);\n tr.addStoredMark(\n type.create({\n ...oldAttributes,\n ...attributes\n })\n );\n } else {\n ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n const trimmedFrom = Math.max(pos, from);\n const trimmedTo = Math.min(pos + node.nodeSize, to);\n const someHasMark = node.marks.find((mark) => mark.type === type);\n if (someHasMark) {\n node.marks.forEach((mark) => {\n if (type === mark.type) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n type.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n } else {\n tr.addMark(trimmedFrom, trimmedTo, type.create(attributes));\n }\n });\n });\n }\n }\n return canSetMark(state, tr, type);\n};\n\n// src/commands/setMeta.ts\nvar setMeta = (key, value) => ({ tr }) => {\n tr.setMeta(key, value);\n return true;\n};\n\n// src/commands/setNode.ts\nimport { setBlockType } from \"@tiptap/pm/commands\";\nvar setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {\n const type = getNodeType(typeOrName, state.schema);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (!type.isTextblock) {\n console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.');\n return false;\n }\n return chain().command(({ commands }) => {\n const canSetBlock = setBlockType(type, { ...attributesToCopy, ...attributes })(state);\n if (canSetBlock) {\n return true;\n }\n return commands.clearNodes();\n }).command(({ state: updatedState }) => {\n return setBlockType(type, { ...attributesToCopy, ...attributes })(updatedState, dispatch);\n }).run();\n};\n\n// src/commands/setNodeSelection.ts\nimport { NodeSelection as NodeSelection2 } from \"@tiptap/pm/state\";\nvar setNodeSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const from = minMax(position, 0, doc.content.size);\n const selection = NodeSelection2.create(doc, from);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/setTextDirection.ts\nvar setTextDirection = (direction, position) => ({ tr, state, dispatch }) => {\n const { selection } = state;\n let from;\n let to;\n if (typeof position === \"number\") {\n from = position;\n to = position;\n } else if (position && \"from\" in position && \"to\" in position) {\n from = position.from;\n to = position.to;\n } else {\n from = selection.from;\n to = selection.to;\n }\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n tr.setNodeMarkup(pos, void 0, {\n ...node.attrs,\n dir: direction\n });\n });\n }\n return true;\n};\n\n// src/commands/setTextSelection.ts\nimport { TextSelection as TextSelection5 } from \"@tiptap/pm/state\";\nvar setTextSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const { from, to } = typeof position === \"number\" ? { from: position, to: position } : position;\n const minPos = TextSelection5.atStart(doc).from;\n const maxPos = TextSelection5.atEnd(doc).to;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const selection = TextSelection5.create(doc, resolvedFrom, resolvedEnd);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/sinkListItem.ts\nimport { sinkListItem as originalSinkListItem } from \"@tiptap/pm/schema-list\";\nvar sinkListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalSinkListItem(type)(state, dispatch);\n};\n\n// src/commands/splitBlock.ts\nimport { NodeSelection as NodeSelection3, TextSelection as TextSelection6 } from \"@tiptap/pm/state\";\nimport { canSplit } from \"@tiptap/pm/transform\";\nfunction ensureMarks(state, splittableMarks) {\n const marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks == null ? void 0 : splittableMarks.includes(mark.type.name));\n state.tr.ensureMarks(filteredMarks);\n }\n}\nvar splitBlock = ({ keepMarks = true } = {}) => ({ tr, state, dispatch, editor }) => {\n const { selection, doc } = tr;\n const { $from, $to } = selection;\n const extensionAttributes = editor.extensionManager.attributes;\n const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\n if (selection instanceof NodeSelection3 && selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(doc, $from.pos)) {\n return false;\n }\n if (dispatch) {\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.split($from.pos).scrollIntoView();\n }\n return true;\n }\n if (!$from.parent.isBlock) {\n return false;\n }\n const atEnd = $to.parentOffset === $to.parent.content.size;\n const deflt = $from.depth === 0 ? void 0 : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n let types = atEnd && deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : void 0)) {\n can = true;\n types = deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n }\n if (dispatch) {\n if (can) {\n if (selection instanceof TextSelection6) {\n tr.deleteSelection();\n }\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\n const first2 = tr.mapping.map($from.before());\n const $first = tr.doc.resolve(first2);\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n }\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.scrollIntoView();\n }\n return can;\n};\n\n// src/commands/splitListItem.ts\nimport { Fragment as Fragment3, Slice } from \"@tiptap/pm/model\";\nimport { TextSelection as TextSelection7 } from \"@tiptap/pm/state\";\nimport { canSplit as canSplit2 } from \"@tiptap/pm/transform\";\nvar splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr, state, dispatch, editor }) => {\n var _a;\n const type = getNodeType(typeOrName, state.schema);\n const { $from, $to } = state.selection;\n const node = state.selection.node;\n if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) {\n return false;\n }\n const grandParent = $from.node(-1);\n if (grandParent.type !== type) {\n return false;\n }\n const extensionAttributes = editor.extensionManager.attributes;\n if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\n if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) {\n return false;\n }\n if (dispatch) {\n let wrap = Fragment3.empty;\n const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\n wrap = Fragment3.from($from.node(d).copy(wrap));\n }\n const depthAfter = (\n // eslint-disable-next-line no-nested-ternary\n $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3\n );\n const newNextTypeAttributes2 = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n const nextType2 = ((_a = type.contentMatch.defaultType) == null ? void 0 : _a.createAndFill(newNextTypeAttributes2)) || void 0;\n wrap = wrap.append(Fragment3.from(type.createAndFill(null, nextType2) || void 0));\n const start = $from.before($from.depth - (depthBefore - 1));\n tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\n if (sel > -1) {\n return false;\n }\n if (n.isTextblock && n.content.size === 0) {\n sel = pos + 1;\n }\n });\n if (sel > -1) {\n tr.setSelection(TextSelection7.near(tr.doc.resolve(sel)));\n }\n tr.scrollIntoView();\n }\n return true;\n }\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n const newTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),\n ...overrideAttrs\n };\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n tr.delete($from.pos, $to.pos);\n const types = nextType ? [\n { type, attrs: newTypeAttributes },\n { type: nextType, attrs: newNextTypeAttributes }\n ] : [{ type, attrs: newTypeAttributes }];\n if (!canSplit2(tr.doc, $from.pos, 2)) {\n return false;\n }\n if (dispatch) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n tr.split($from.pos, 2, types).scrollIntoView();\n if (!marks || !dispatch) {\n return true;\n }\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n return true;\n};\n\n// src/commands/toggleList.ts\nimport { TextSelection as TextSelection8 } from \"@tiptap/pm/state\";\nimport { canJoin } from \"@tiptap/pm/transform\";\nvar joinListBackwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);\n if (before === void 0) {\n return true;\n }\n const nodeBefore = tr.doc.nodeAt(before);\n const canJoinBackwards = list.node.type === (nodeBefore == null ? void 0 : nodeBefore.type) && canJoin(tr.doc, list.pos);\n if (!canJoinBackwards) {\n return true;\n }\n tr.join(list.pos);\n return true;\n};\nvar joinListForwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const after = tr.doc.resolve(list.start).after(list.depth);\n if (after === void 0) {\n return true;\n }\n const nodeAfter = tr.doc.nodeAt(after);\n const canJoinForwards = list.node.type === (nodeAfter == null ? void 0 : nodeAfter.type) && canJoin(tr.doc, after);\n if (!canJoinForwards) {\n return true;\n }\n tr.join(after);\n return true;\n};\nfunction createInnerSelectionForWholeDocList(tr) {\n const doc = tr.doc;\n const list = doc.firstChild;\n if (!list) {\n return null;\n }\n const $start = doc.resolve(1);\n const $end = doc.resolve(list.nodeSize - 1);\n return TextSelection8.between($start, $end);\n}\nvar toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can }) => {\n const { extensions, splittableMarks } = editor.extensionManager;\n const listType = getNodeType(listTypeOrName, state.schema);\n const itemType = getNodeType(itemTypeOrName, state.schema);\n const { selection, storedMarks } = state;\n const { $from, $to } = selection;\n const range = $from.blockRange($to);\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (!range) {\n return false;\n }\n const parentList = findParentNode((node) => isList(node.type.name, extensions))(selection);\n const isAllSelection = selection.from === 0 && selection.to === state.doc.content.size;\n const topLevelNodes = state.doc.content.content;\n const soleTopLevelNode = topLevelNodes.length === 1 ? topLevelNodes[0] : null;\n const allSelectionList = isAllSelection && soleTopLevelNode && isList(soleTopLevelNode.type.name, extensions) ? {\n node: soleTopLevelNode,\n pos: 0,\n depth: 0\n } : null;\n const currentList = parentList != null ? parentList : allSelectionList;\n const isInsideExistingList = !!parentList && range.depth >= 1 && range.depth - parentList.depth <= 1;\n const hasWholeDocSelectedList = !!allSelectionList;\n if ((isInsideExistingList || hasWholeDocSelectedList) && currentList) {\n if (currentList.node.type === listType) {\n if (isAllSelection && hasWholeDocSelectedList) {\n return chain().command(({ tr: trx, dispatch: disp }) => {\n const nextSelection = createInnerSelectionForWholeDocList(trx);\n if (!nextSelection) {\n return false;\n }\n trx.setSelection(nextSelection);\n if (disp) {\n disp(trx);\n }\n return true;\n }).liftListItem(itemType).run();\n }\n return commands.liftListItem(itemType);\n }\n if (isList(currentList.node.type.name, extensions) && listType.validContent(currentList.node.content)) {\n return chain().command(() => {\n tr.setNodeMarkup(currentList.pos, listType);\n return true;\n }).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n }\n if (!keepMarks || !marks || !dispatch) {\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n};\n\n// src/commands/toggleMark.ts\nvar toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {\n const { extendEmptyMarkRange = false } = options;\n const type = getMarkType(typeOrName, state.schema);\n const isActive2 = isMarkActive(state, type, attributes);\n if (isActive2) {\n return commands.unsetMark(type, { extendEmptyMarkRange });\n }\n return commands.setMark(type, attributes);\n};\n\n// src/commands/toggleNode.ts\nvar toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const toggleType = getNodeType(toggleTypeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (isActive2) {\n return commands.setNode(toggleType, attributesToCopy);\n }\n return commands.setNode(type, { ...attributesToCopy, ...attributes });\n};\n\n// src/commands/toggleWrap.ts\nvar toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (isActive2) {\n return commands.lift(type);\n }\n return commands.wrapIn(type, attributes);\n};\n\n// src/commands/undoInputRule.ts\nvar undoInputRule = () => ({ state, dispatch }) => {\n const plugins = state.plugins;\n for (let i = 0; i < plugins.length; i += 1) {\n const plugin = plugins[i];\n let undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n const tr = state.tr;\n const toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n }\n if (undoable.text) {\n const marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n } else {\n tr.delete(undoable.from, undoable.to);\n }\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/unsetAllMarks.ts\nvar unsetAllMarks = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n if (empty) {\n return true;\n }\n if (dispatch) {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos);\n });\n }\n return true;\n};\n\n// src/commands/unsetMark.ts\nvar unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {\n var _a;\n const { extendEmptyMarkRange = false } = options;\n const { selection } = tr;\n const type = getMarkType(typeOrName, state.schema);\n const { $from, empty, ranges } = selection;\n if (!dispatch) {\n return true;\n }\n if (empty && extendEmptyMarkRange) {\n let { from, to } = selection;\n const attrs = (_a = $from.marks().find((mark) => mark.type === type)) == null ? void 0 : _a.attrs;\n const range = getMarkRange($from, type, attrs);\n if (range) {\n from = range.from;\n to = range.to;\n }\n tr.removeMark(from, to, type);\n } else {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos, type);\n });\n }\n tr.removeStoredMark(type);\n return true;\n};\n\n// src/commands/unsetTextDirection.ts\nvar unsetTextDirection = (position) => ({ tr, state, dispatch }) => {\n const { selection } = state;\n let from;\n let to;\n if (typeof position === \"number\") {\n from = position;\n to = position;\n } else if (position && \"from\" in position && \"to\" in position) {\n from = position.from;\n to = position.to;\n } else {\n from = selection.from;\n to = selection.to;\n }\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const newAttrs = { ...node.attrs };\n delete newAttrs.dir;\n tr.setNodeMarkup(pos, void 0, newAttrs);\n });\n }\n return true;\n};\n\n// src/commands/updateAttributes.ts\nvar updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n let canUpdate = false;\n tr.selection.ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n let lastPos;\n let lastNode;\n let trimmedFrom;\n let trimmedTo;\n if (tr.selection.empty) {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n canUpdate = true;\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n });\n } else {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (pos < from && nodeType && nodeType === node.type) {\n canUpdate = true;\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n if (pos >= from && pos <= to) {\n if (nodeType && nodeType === node.type) {\n canUpdate = true;\n if (dispatch) {\n tr.setNodeMarkup(pos, void 0, {\n ...node.attrs,\n ...attributes\n });\n }\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n canUpdate = true;\n if (dispatch) {\n const trimmedFrom2 = Math.max(pos, from);\n const trimmedTo2 = Math.min(pos + node.nodeSize, to);\n tr.addMark(\n trimmedFrom2,\n trimmedTo2,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n }\n });\n }\n }\n });\n }\n if (lastNode) {\n if (lastPos !== void 0 && dispatch) {\n tr.setNodeMarkup(lastPos, void 0, {\n ...lastNode.attrs,\n ...attributes\n });\n }\n if (markType && lastNode.marks.length) {\n lastNode.marks.forEach((mark) => {\n if (markType === mark.type && dispatch) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n }\n }\n });\n return canUpdate;\n};\n\n// src/commands/wrapIn.ts\nimport { wrapIn as originalWrapIn } from \"@tiptap/pm/commands\";\nvar wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapIn(type, attributes)(state, dispatch);\n};\n\n// src/commands/wrapInList.ts\nimport { wrapInList as originalWrapInList } from \"@tiptap/pm/schema-list\";\nvar wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapInList(type, attributes)(state, dispatch);\n};\n\n// src/Editor.ts\nimport { EditorState } from \"@tiptap/pm/state\";\nimport { EditorView } from \"@tiptap/pm/view\";\n\n// src/EventEmitter.ts\nvar EventEmitter = class {\n constructor() {\n this.callbacks = {};\n }\n on(event, fn) {\n if (!this.callbacks[event]) {\n this.callbacks[event] = [];\n }\n this.callbacks[event].push(fn);\n return this;\n }\n emit(event, ...args) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n callbacks.forEach((callback) => callback.apply(this, args));\n }\n return this;\n }\n off(event, fn) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter((callback) => callback !== fn);\n } else {\n delete this.callbacks[event];\n }\n }\n return this;\n }\n once(event, fn) {\n const onceFn = (...args) => {\n this.off(event, onceFn);\n fn.apply(this, args);\n };\n return this.on(event, onceFn);\n }\n removeAllListeners() {\n this.callbacks = {};\n }\n};\n\n// src/ExtensionManager.ts\nimport { keymap } from \"@tiptap/pm/keymap\";\n\n// src/InputRule.ts\nimport { Fragment as Fragment4 } from \"@tiptap/pm/model\";\nimport { Plugin } from \"@tiptap/pm/state\";\nvar InputRule = class {\n constructor(config) {\n var _a;\n this.find = config.find;\n this.handler = config.handler;\n this.undoable = (_a = config.undoable) != null ? _a : true;\n }\n};\nvar inputRuleMatcherHandler = (text, find) => {\n if (isRegExp(find)) {\n return find.exec(text);\n }\n const inputRuleMatch = find(text);\n if (!inputRuleMatch) {\n return null;\n }\n const result = [inputRuleMatch.text];\n result.index = inputRuleMatch.index;\n result.input = text;\n result.data = inputRuleMatch.data;\n if (inputRuleMatch.replaceWith) {\n if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".');\n }\n result.push(inputRuleMatch.replaceWith);\n }\n return result;\n};\nfunction run(config) {\n var _a;\n const { editor, from, to, text, rules, plugin } = config;\n const { view } = editor;\n if (view.composing) {\n return false;\n }\n const $from = view.state.doc.resolve(from);\n if (\n // check for code node\n $from.parent.type.spec.code || // check for code mark\n !!((_a = $from.nodeBefore || $from.nodeAfter) == null ? void 0 : _a.marks.find((mark) => mark.type.spec.code))\n ) {\n return false;\n }\n let matched = false;\n const textBefore = getTextContentFromNodes($from) + text;\n rules.forEach((rule) => {\n if (matched) {\n return;\n }\n const match = inputRuleMatcherHandler(textBefore, rule.find);\n if (!match) {\n return;\n }\n const tr = view.state.tr;\n const state = createChainableState({\n state: view.state,\n transaction: tr\n });\n const range = {\n from: from - (match[0].length - text.length),\n to\n };\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can\n });\n if (handler === null || !tr.steps.length) {\n return;\n }\n if (rule.undoable) {\n tr.setMeta(plugin, {\n transform: tr,\n from,\n to,\n text\n });\n }\n view.dispatch(tr);\n matched = true;\n });\n return matched;\n}\nfunction inputRulesPlugin(props) {\n const { editor, rules } = props;\n const plugin = new Plugin({\n state: {\n init() {\n return null;\n },\n apply(tr, prev, state) {\n const stored = tr.getMeta(plugin);\n if (stored) {\n return stored;\n }\n const simulatedInputMeta = tr.getMeta(\"applyInputRules\");\n const isSimulatedInput = !!simulatedInputMeta;\n if (isSimulatedInput) {\n setTimeout(() => {\n let { text } = simulatedInputMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment4.from(text), state.schema);\n }\n const { from } = simulatedInputMeta;\n const to = from + text.length;\n run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n });\n }\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection;\n if ($cursor) {\n run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\",\n rules,\n plugin\n });\n }\n });\n return false;\n }\n },\n // add support for input rules to trigger on enter\n // this is useful for example for code blocks\n handleKeyDown(view, event) {\n if (event.key !== \"Enter\") {\n return false;\n }\n const { $cursor } = view.state.selection;\n if ($cursor) {\n return run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\\n\",\n rules,\n plugin\n });\n }\n return false;\n }\n },\n // @ts-ignore\n isInputRules: true\n });\n return plugin;\n}\n\n// src/utilities/isPlainObject.ts\nfunction getType(value) {\n return Object.prototype.toString.call(value).slice(8, -1);\n}\nfunction isPlainObject(value) {\n if (getType(value) !== \"Object\") {\n return false;\n }\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n\n// src/utilities/mergeDeep.ts\nfunction mergeDeep(target, source) {\n const output = { ...target };\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n output[key] = mergeDeep(target[key], source[key]);\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}\n\n// src/Extendable.ts\nvar Extendable = class {\n constructor(config = {}) {\n this.type = \"extendable\";\n this.parent = null;\n this.child = null;\n this.name = \"\";\n this.config = {\n name: this.name\n };\n this.config = {\n ...this.config,\n ...config\n };\n this.name = this.config.name;\n }\n get options() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addOptions\", {\n name: this.name\n })\n ) || {}\n };\n }\n get storage() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addStorage\", {\n name: this.name,\n options: this.options\n })\n ) || {}\n };\n }\n configure(options = {}) {\n const extension = this.extend({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options, options);\n }\n });\n extension.name = this.name;\n extension.parent = this.parent;\n this.child = null;\n return extension;\n }\n extend(extendedConfig = {}) {\n const extension = new this.constructor({ ...this.config, ...extendedConfig });\n extension.parent = this;\n this.child = extension;\n extension.name = \"name\" in extendedConfig ? extendedConfig.name : extension.parent.name;\n return extension;\n }\n};\n\n// src/Mark.ts\nvar Mark = class _Mark extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"mark\";\n }\n /**\n * Create a new Mark instance\n * @param config - Mark configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Mark(resolvedConfig);\n }\n static handleExit({ editor, mark }) {\n const { tr } = editor.state;\n const currentPos = editor.state.selection.$from;\n const isAtEnd = currentPos.pos === currentPos.end();\n if (isAtEnd) {\n const currentMarks = currentPos.marks();\n const isInMark = !!currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (!isInMark) {\n return false;\n }\n const removeMark = currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (removeMark) {\n tr.removeStoredMark(removeMark);\n }\n tr.insertText(\" \", currentPos.pos);\n editor.view.dispatch(tr);\n return true;\n }\n return false;\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/PasteRule.ts\nimport { Fragment as Fragment5 } from \"@tiptap/pm/model\";\nimport { Plugin as Plugin2 } from \"@tiptap/pm/state\";\n\n// src/utilities/isNumber.ts\nfunction isNumber(value) {\n return typeof value === \"number\";\n}\n\n// src/PasteRule.ts\nvar PasteRule = class {\n constructor(config) {\n this.find = config.find;\n this.handler = config.handler;\n }\n};\nvar pasteRuleMatcherHandler = (text, find, event) => {\n if (isRegExp(find)) {\n return [...text.matchAll(find)];\n }\n const matches = find(text, event);\n if (!matches) {\n return [];\n }\n return matches.map((pasteRuleMatch) => {\n const result = [pasteRuleMatch.text];\n result.index = pasteRuleMatch.index;\n result.input = text;\n result.data = pasteRuleMatch.data;\n if (pasteRuleMatch.replaceWith) {\n if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".');\n }\n result.push(pasteRuleMatch.replaceWith);\n }\n return result;\n });\n};\nfunction run2(config) {\n const { editor, state, from, to, rule, pasteEvent, dropEvent } = config;\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handlers = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n var _a, _b, _c, _d, _e;\n if (((_b = (_a = node.type) == null ? void 0 : _a.spec) == null ? void 0 : _b.code) || !(node.isText || node.isTextblock || node.isInline)) {\n return;\n }\n const contentSize = (_e = (_d = (_c = node.content) == null ? void 0 : _c.size) != null ? _d : node.nodeSize) != null ? _e : 0;\n const resolvedFrom = Math.max(from, pos);\n const resolvedTo = Math.min(to, pos + contentSize);\n if (resolvedFrom >= resolvedTo) {\n return;\n }\n const textToMatch = node.isText ? node.text || \"\" : node.textBetween(resolvedFrom - pos, resolvedTo - pos, void 0, \"\\uFFFC\");\n const matches = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);\n matches.forEach((match) => {\n if (match.index === void 0) {\n return;\n }\n const start = resolvedFrom + match.index + 1;\n const end = start + match[0].length;\n const range = {\n from: state.tr.mapping.map(start),\n to: state.tr.mapping.map(end)\n };\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can,\n pasteEvent,\n dropEvent\n });\n handlers.push(handler);\n });\n });\n const success = handlers.every((handler) => handler !== null);\n return success;\n}\nvar tiptapDragFromOtherEditor = null;\nvar createClipboardPasteEvent = (text) => {\n var _a;\n const event = new ClipboardEvent(\"paste\", {\n clipboardData: new DataTransfer()\n });\n (_a = event.clipboardData) == null ? void 0 : _a.setData(\"text/html\", text);\n return event;\n};\nfunction pasteRulesPlugin(props) {\n const { editor, rules } = props;\n let dragSourceElement = null;\n let isPastedFromProseMirror = false;\n let isDroppedFromProseMirror = false;\n let pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n let dropEvent;\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n const processEvent = ({\n state,\n from,\n to,\n rule,\n pasteEvt\n }) => {\n const tr = state.tr;\n const chainableState = createChainableState({\n state,\n transaction: tr\n });\n const handler = run2({\n editor,\n state: chainableState,\n from: Math.max(from - 1, 0),\n to: to.b - 1,\n rule,\n pasteEvent: pasteEvt,\n dropEvent\n });\n if (!handler || !tr.steps.length) {\n return;\n }\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n return tr;\n };\n const plugins = rules.map((rule) => {\n return new Plugin2({\n // we register a global drag handler to track the current drag source element\n view(view) {\n const handleDragstart = (event) => {\n var _a;\n dragSourceElement = ((_a = view.dom.parentElement) == null ? void 0 : _a.contains(event.target)) ? view.dom.parentElement : null;\n if (dragSourceElement) {\n tiptapDragFromOtherEditor = editor;\n }\n };\n const handleDragend = () => {\n if (tiptapDragFromOtherEditor) {\n tiptapDragFromOtherEditor = null;\n }\n };\n window.addEventListener(\"dragstart\", handleDragstart);\n window.addEventListener(\"dragend\", handleDragend);\n return {\n destroy() {\n window.removeEventListener(\"dragstart\", handleDragstart);\n window.removeEventListener(\"dragend\", handleDragend);\n }\n };\n },\n props: {\n handleDOMEvents: {\n drop: (view, event) => {\n isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;\n dropEvent = event;\n if (!isDroppedFromProseMirror) {\n const dragFromOtherEditor = tiptapDragFromOtherEditor;\n if (dragFromOtherEditor == null ? void 0 : dragFromOtherEditor.isEditable) {\n setTimeout(() => {\n const selection = dragFromOtherEditor.state.selection;\n if (selection) {\n dragFromOtherEditor.commands.deleteRange({ from: selection.from, to: selection.to });\n }\n }, 10);\n }\n }\n return false;\n },\n paste: (_view, event) => {\n var _a;\n const html = (_a = event.clipboardData) == null ? void 0 : _a.getData(\"text/html\");\n pasteEvent = event;\n isPastedFromProseMirror = !!(html == null ? void 0 : html.includes(\"data-pm-slice\"));\n return false;\n }\n }\n },\n appendTransaction: (transactions, oldState, state) => {\n const transaction = transactions[0];\n const isPaste = transaction.getMeta(\"uiEvent\") === \"paste\" && !isPastedFromProseMirror;\n const isDrop = transaction.getMeta(\"uiEvent\") === \"drop\" && !isDroppedFromProseMirror;\n const simulatedPasteMeta = transaction.getMeta(\"applyPasteRules\");\n const isSimulatedPaste = !!simulatedPasteMeta;\n if (!isPaste && !isDrop && !isSimulatedPaste) {\n return;\n }\n if (isSimulatedPaste) {\n let { text } = simulatedPasteMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment5.from(text), state.schema);\n }\n const { from: from2 } = simulatedPasteMeta;\n const to2 = from2 + text.length;\n const pasteEvt = createClipboardPasteEvent(text);\n return processEvent({\n rule,\n state,\n from: from2,\n to: { b: to2 },\n pasteEvt\n });\n }\n const from = oldState.doc.content.findDiffStart(state.doc.content);\n const to = oldState.doc.content.findDiffEnd(state.doc.content);\n if (!isNumber(from) || !to || from === to.b) {\n return;\n }\n return processEvent({\n rule,\n state,\n from,\n to,\n pasteEvt: pasteEvent\n });\n }\n });\n });\n return plugins;\n}\n\n// src/ExtensionManager.ts\nvar ExtensionManager = class {\n constructor(extensions, editor) {\n this.splittableMarks = [];\n this.editor = editor;\n this.baseExtensions = extensions;\n this.extensions = resolveExtensions(extensions);\n this.schema = getSchemaByResolvedExtensions(this.extensions, editor);\n this.setupExtensions();\n }\n /**\n * Get all commands from the extensions.\n * @returns An object with all commands where the key is the command name and the value is the command function\n */\n get commands() {\n return this.extensions.reduce((commands, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const addCommands = getExtensionField(extension, \"addCommands\", context);\n if (!addCommands) {\n return commands;\n }\n return {\n ...commands,\n ...addCommands()\n };\n }, {});\n }\n /**\n * Get all registered Prosemirror plugins from the extensions.\n * @returns An array of Prosemirror plugins\n */\n get plugins() {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions].reverse());\n const allPlugins = extensions.flatMap((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const plugins = [];\n const addKeyboardShortcuts = getExtensionField(\n extension,\n \"addKeyboardShortcuts\",\n context\n );\n let defaultBindings = {};\n if (extension.type === \"mark\" && getExtensionField(extension, \"exitable\", context)) {\n defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension });\n }\n if (addKeyboardShortcuts) {\n const bindings = Object.fromEntries(\n Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {\n return [shortcut, () => method({ editor })];\n })\n );\n defaultBindings = { ...defaultBindings, ...bindings };\n }\n const keyMapPlugin = keymap(defaultBindings);\n plugins.push(keyMapPlugin);\n const addInputRules = getExtensionField(extension, \"addInputRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {\n const rules = addInputRules();\n if (rules && rules.length) {\n const inputResult = inputRulesPlugin({\n editor,\n rules\n });\n const inputPlugins = Array.isArray(inputResult) ? inputResult : [inputResult];\n plugins.push(...inputPlugins);\n }\n }\n const addPasteRules = getExtensionField(extension, \"addPasteRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {\n const rules = addPasteRules();\n if (rules && rules.length) {\n const pasteRules = pasteRulesPlugin({ editor, rules });\n plugins.push(...pasteRules);\n }\n }\n const addProseMirrorPlugins = getExtensionField(\n extension,\n \"addProseMirrorPlugins\",\n context\n );\n if (addProseMirrorPlugins) {\n const proseMirrorPlugins = addProseMirrorPlugins();\n plugins.push(...proseMirrorPlugins);\n }\n return plugins;\n });\n return allPlugins;\n }\n /**\n * Get all attributes from the extensions.\n * @returns An array of attributes\n */\n get attributes() {\n return getAttributesFromExtensions(this.extensions);\n }\n /**\n * Get all node views from the extensions.\n * @returns An object with all node views where the key is the node name and the value is the node view function\n */\n get nodeViews() {\n const { editor } = this;\n const { nodeExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n nodeExtensions.filter((extension) => !!getExtensionField(extension, \"addNodeView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getNodeType(extension.name, this.schema)\n };\n const addNodeView = getExtensionField(extension, \"addNodeView\", context);\n if (!addNodeView) {\n return [];\n }\n const nodeViewResult = addNodeView();\n if (!nodeViewResult) {\n return [];\n }\n const nodeview = (node, view, getPos, decorations, innerDecorations) => {\n const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);\n return nodeViewResult({\n // pass-through\n node,\n view,\n getPos,\n decorations,\n innerDecorations,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes\n });\n };\n return [extension.name, nodeview];\n })\n );\n }\n /**\n * Get the composed dispatchTransaction function from all extensions.\n * @param baseDispatch The base dispatch function (e.g. from the editor or user props)\n * @returns A composed dispatch function\n */\n dispatchTransaction(baseDispatch) {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions].reverse());\n return extensions.reduceRight((next, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const dispatchTransaction = getExtensionField(\n extension,\n \"dispatchTransaction\",\n context\n );\n if (!dispatchTransaction) {\n return next;\n }\n return (transaction) => {\n dispatchTransaction.call(context, { transaction, next });\n };\n }, baseDispatch);\n }\n /**\n * Get the composed transformPastedHTML function from all extensions.\n * @param baseTransform The base transform function (e.g. from the editor props)\n * @returns A composed transform function that chains all extension transforms\n */\n transformPastedHTML(baseTransform) {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions]);\n return extensions.reduce(\n (transform, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const extensionTransform = getExtensionField(\n extension,\n \"transformPastedHTML\",\n context\n );\n if (!extensionTransform) {\n return transform;\n }\n return (html, view) => {\n const transformedHtml = transform(html, view);\n return extensionTransform.call(context, transformedHtml);\n };\n },\n baseTransform || ((html) => html)\n );\n }\n get markViews() {\n const { editor } = this;\n const { markExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n markExtensions.filter((extension) => !!getExtensionField(extension, \"addMarkView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getMarkType(extension.name, this.schema)\n };\n const addMarkView = getExtensionField(extension, \"addMarkView\", context);\n if (!addMarkView) {\n return [];\n }\n const markView = (mark, view, inline) => {\n const HTMLAttributes = getRenderedAttributes(mark, extensionAttributes);\n return addMarkView()({\n // pass-through\n mark,\n view,\n inline,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes,\n updateAttributes: (attrs) => {\n updateMarkViewAttributes(mark, editor, attrs);\n }\n });\n };\n return [extension.name, markView];\n })\n );\n }\n /**\n * Destroy the extension manager and clean up all extension references\n * to prevent memory leaks through parent/child extension chains.\n *\n * Walks each extension's full parent chain and nulls every forward\n * `parent.child → current` link where the parent still points to the\n * current node. This breaks the retention path from module-scope\n * singleton roots through deep extend() chains.\n *\n * Only ancestor `.child` links matching the current chain are cleared.\n * The `.parent` pointer on ancestors is never touched — extensions\n * may be shared across live editors, so their own backward references\n * and non-matching forward links must remain intact.\n */\n destroy() {\n this.extensions.forEach((extension) => {\n let current = extension;\n while (current.parent) {\n const parent = current.parent;\n if (parent.child === current) {\n parent.child = null;\n }\n current = parent;\n }\n });\n this.extensions = [];\n this.baseExtensions = [];\n this.schema = null;\n this.editor = null;\n }\n /**\n * Go through all extensions, create extension storages & setup marks\n * & bind editor event listener.\n */\n setupExtensions() {\n const extensions = this.extensions;\n this.editor.extensionStorage = Object.fromEntries(\n extensions.map((extension) => [extension.name, extension.storage])\n );\n extensions.forEach((extension) => {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n if (extension.type === \"mark\") {\n const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, \"keepOnSplit\", context))) != null ? _a : true;\n if (keepOnSplit) {\n this.splittableMarks.push(extension.name);\n }\n }\n const onBeforeCreate = getExtensionField(extension, \"onBeforeCreate\", context);\n const onCreate = getExtensionField(extension, \"onCreate\", context);\n const onUpdate = getExtensionField(extension, \"onUpdate\", context);\n const onSelectionUpdate = getExtensionField(\n extension,\n \"onSelectionUpdate\",\n context\n );\n const onTransaction = getExtensionField(extension, \"onTransaction\", context);\n const onFocus = getExtensionField(extension, \"onFocus\", context);\n const onBlur = getExtensionField(extension, \"onBlur\", context);\n const onDestroy = getExtensionField(extension, \"onDestroy\", context);\n if (onBeforeCreate) {\n this.editor.on(\"beforeCreate\", onBeforeCreate);\n }\n if (onCreate) {\n this.editor.on(\"create\", onCreate);\n }\n if (onUpdate) {\n this.editor.on(\"update\", onUpdate);\n }\n if (onSelectionUpdate) {\n this.editor.on(\"selectionUpdate\", onSelectionUpdate);\n }\n if (onTransaction) {\n this.editor.on(\"transaction\", onTransaction);\n }\n if (onFocus) {\n this.editor.on(\"focus\", onFocus);\n }\n if (onBlur) {\n this.editor.on(\"blur\", onBlur);\n }\n if (onDestroy) {\n this.editor.on(\"destroy\", onDestroy);\n }\n });\n }\n};\nExtensionManager.resolve = resolveExtensions;\nExtensionManager.sort = sortExtensions;\nExtensionManager.flatten = flattenExtensions;\n\n// src/extensions/index.ts\nvar extensions_exports = {};\n__export(extensions_exports, {\n ClipboardTextSerializer: () => ClipboardTextSerializer,\n Commands: () => Commands,\n Delete: () => Delete,\n Drop: () => Drop,\n Editable: () => Editable,\n FocusEvents: () => FocusEvents,\n Keymap: () => Keymap,\n Paste: () => Paste,\n Tabindex: () => Tabindex,\n TextDirection: () => TextDirection,\n focusEventsPluginKey: () => focusEventsPluginKey\n});\n\n// src/extensions/clipboardTextSerializer.ts\nimport { Plugin as Plugin3, PluginKey } from \"@tiptap/pm/state\";\n\n// src/Extension.ts\nvar Extension = class _Extension extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"extension\";\n }\n /**\n * Create a new Extension instance\n * @param config - Extension configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Extension(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/extensions/clipboardTextSerializer.ts\nvar ClipboardTextSerializer = Extension.create({\n name: \"clipboardTextSerializer\",\n addOptions() {\n return {\n blockSeparator: void 0\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin3({\n key: new PluginKey(\"clipboardTextSerializer\"),\n props: {\n clipboardTextSerializer: () => {\n const { editor } = this;\n const { state, schema } = editor;\n const { doc, selection } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range2) => range2.$from.pos));\n const to = Math.max(...ranges.map((range2) => range2.$to.pos));\n const textSerializers = getTextSerializersFromSchema(schema);\n const range = { from, to };\n return getTextBetween(doc, range, {\n ...this.options.blockSeparator !== void 0 ? { blockSeparator: this.options.blockSeparator } : {},\n textSerializers\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/commands.ts\nvar Commands = Extension.create({\n name: \"commands\",\n addCommands() {\n return {\n ...commands_exports\n };\n }\n});\n\n// src/extensions/delete.ts\nimport { RemoveMarkStep } from \"@tiptap/pm/transform\";\nvar Delete = Extension.create({\n name: \"delete\",\n onUpdate({ transaction, appendedTransactions }) {\n var _a, _b, _c;\n const callback = () => {\n var _a2, _b2, _c2, _d;\n if ((_d = (_c2 = (_b2 = (_a2 = this.editor.options.coreExtensionOptions) == null ? void 0 : _a2.delete) == null ? void 0 : _b2.filterTransaction) == null ? void 0 : _c2.call(_b2, transaction)) != null ? _d : transaction.getMeta(\"y-sync$\")) {\n return;\n }\n const nextTransaction = combineTransactionSteps(transaction.before, [transaction, ...appendedTransactions]);\n const changes = getChangedRanges(nextTransaction);\n changes.forEach((change) => {\n if (nextTransaction.mapping.mapResult(change.oldRange.from).deletedAfter && nextTransaction.mapping.mapResult(change.oldRange.to).deletedBefore) {\n nextTransaction.before.nodesBetween(change.oldRange.from, change.oldRange.to, (node, from) => {\n const to = from + node.nodeSize - 2;\n const isFullyWithinRange = change.oldRange.from <= from && to <= change.oldRange.to;\n this.editor.emit(\"delete\", {\n type: \"node\",\n node,\n from,\n to,\n newFrom: nextTransaction.mapping.map(from),\n newTo: nextTransaction.mapping.map(to),\n deletedRange: change.oldRange,\n newRange: change.newRange,\n partial: !isFullyWithinRange,\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n });\n }\n });\n const mapping = nextTransaction.mapping;\n nextTransaction.steps.forEach((step, index) => {\n var _a3, _b3;\n if (step instanceof RemoveMarkStep) {\n const newStart = mapping.slice(index).map(step.from, -1);\n const newEnd = mapping.slice(index).map(step.to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n const foundBeforeMark = newStart > 0 ? (_a3 = nextTransaction.doc.nodeAt(newStart - 1)) == null ? void 0 : _a3.marks.some((mark) => mark.eq(step.mark)) : false;\n const foundAfterMark = (_b3 = nextTransaction.doc.nodeAt(newEnd)) == null ? void 0 : _b3.marks.some((mark) => mark.eq(step.mark));\n this.editor.emit(\"delete\", {\n type: \"mark\",\n mark: step.mark,\n from: step.from,\n to: step.to,\n deletedRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n },\n partial: Boolean(foundAfterMark || foundBeforeMark),\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n }\n });\n };\n if ((_c = (_b = (_a = this.editor.options.coreExtensionOptions) == null ? void 0 : _a.delete) == null ? void 0 : _b.async) != null ? _c : true) {\n setTimeout(callback, 0);\n } else {\n callback();\n }\n }\n});\n\n// src/extensions/drop.ts\nimport { Plugin as Plugin4, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nvar Drop = Extension.create({\n name: \"drop\",\n addProseMirrorPlugins() {\n return [\n new Plugin4({\n key: new PluginKey2(\"tiptapDrop\"),\n props: {\n handleDrop: (_, e, slice, moved) => {\n this.editor.emit(\"drop\", {\n editor: this.editor,\n event: e,\n slice,\n moved\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/editable.ts\nimport { Plugin as Plugin5, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nvar Editable = Extension.create({\n name: \"editable\",\n addProseMirrorPlugins() {\n return [\n new Plugin5({\n key: new PluginKey3(\"editable\"),\n props: {\n editable: () => this.editor.options.editable\n }\n })\n ];\n }\n});\n\n// src/extensions/focusEvents.ts\nimport { Plugin as Plugin6, PluginKey as PluginKey4 } from \"@tiptap/pm/state\";\nvar focusEventsPluginKey = new PluginKey4(\"focusEvents\");\nvar FocusEvents = Extension.create({\n name: \"focusEvents\",\n addProseMirrorPlugins() {\n const { editor } = this;\n return [\n new Plugin6({\n key: focusEventsPluginKey,\n props: {\n handleDOMEvents: {\n focus: (view, event) => {\n editor.isFocused = true;\n const transaction = editor.state.tr.setMeta(\"focus\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n },\n blur: (view, event) => {\n editor.isFocused = false;\n const transaction = editor.state.tr.setMeta(\"blur\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n }\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/keymap.ts\nimport { Plugin as Plugin7, PluginKey as PluginKey5, Selection as Selection3 } from \"@tiptap/pm/state\";\nvar Keymap = Extension.create({\n name: \"keymap\",\n addKeyboardShortcuts() {\n const handleBackspace = () => this.editor.commands.first(({ commands }) => [\n () => commands.undoInputRule(),\n // maybe convert first text block node to default node\n () => commands.command(({ tr }) => {\n const { selection, doc } = tr;\n const { empty, $anchor } = selection;\n const { pos, parent } = $anchor;\n const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr.doc.resolve(pos - 1) : $anchor;\n const parentIsIsolating = $parentPos.parent.type.spec.isolating;\n const parentPos = $anchor.pos - $anchor.parentOffset;\n const isAtStart = parentIsIsolating && $parentPos.parent.childCount === 1 ? parentPos === $anchor.pos : Selection3.atStart(doc).from === pos;\n if (!empty || !parent.type.isTextblock || parent.textContent.length || !isAtStart || isAtStart && $anchor.parent.type.name === \"paragraph\") {\n return false;\n }\n return commands.clearNodes();\n }),\n () => commands.deleteSelection(),\n () => commands.joinBackward(),\n () => commands.selectNodeBackward()\n ]);\n const handleDelete = () => this.editor.commands.first(({ commands }) => [\n () => commands.deleteSelection(),\n () => commands.deleteCurrentNode(),\n () => commands.joinForward(),\n () => commands.selectNodeForward()\n ]);\n const handleEnter = () => this.editor.commands.first(({ commands }) => [\n () => commands.newlineInCode(),\n () => commands.createParagraphNear(),\n () => commands.liftEmptyBlock(),\n () => commands.splitBlock()\n ]);\n const baseKeymap = {\n Enter: handleEnter,\n \"Mod-Enter\": () => this.editor.commands.exitCode(),\n Backspace: handleBackspace,\n \"Mod-Backspace\": handleBackspace,\n \"Shift-Backspace\": handleBackspace,\n Delete: handleDelete,\n \"Mod-Delete\": handleDelete,\n \"Mod-a\": () => this.editor.commands.selectAll()\n };\n const pcKeymap = {\n ...baseKeymap\n };\n const macKeymap = {\n ...baseKeymap,\n \"Ctrl-h\": handleBackspace,\n \"Alt-Backspace\": handleBackspace,\n \"Ctrl-d\": handleDelete,\n \"Ctrl-Alt-Backspace\": handleDelete,\n \"Alt-Delete\": handleDelete,\n \"Alt-d\": handleDelete,\n \"Ctrl-a\": () => this.editor.commands.selectTextblockStart(),\n \"Ctrl-e\": () => this.editor.commands.selectTextblockEnd()\n };\n if (isiOS() || isMacOS()) {\n return macKeymap;\n }\n return pcKeymap;\n },\n addProseMirrorPlugins() {\n return [\n // With this plugin we check if the whole document was selected and deleted.\n // In this case we will additionally call `clearNodes()` to convert e.g. a heading\n // to a paragraph if necessary.\n // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\n // with many other commands.\n new Plugin7({\n key: new PluginKey5(\"clearDocument\"),\n appendTransaction: (transactions, oldState, newState) => {\n if (transactions.some((tr2) => tr2.getMeta(\"composition\"))) {\n return;\n }\n const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n const ignoreTr = transactions.some((transaction) => transaction.getMeta(\"preventClearDocument\"));\n if (!docChanges || ignoreTr) {\n return;\n }\n const { empty, from, to } = oldState.selection;\n const allFrom = Selection3.atStart(oldState.doc).from;\n const allEnd = Selection3.atEnd(oldState.doc).to;\n const allWasSelected = from === allFrom && to === allEnd;\n if (empty || !allWasSelected) {\n return;\n }\n const isEmpty = isNodeEmpty(newState.doc);\n if (!isEmpty) {\n return;\n }\n const tr = newState.tr;\n const state = createChainableState({\n state: newState,\n transaction: tr\n });\n const { commands } = new CommandManager({\n editor: this.editor,\n state\n });\n commands.clearNodes();\n if (!tr.steps.length) {\n return;\n }\n return tr;\n }\n })\n ];\n }\n});\n\n// src/extensions/paste.ts\nimport { Plugin as Plugin8, PluginKey as PluginKey6 } from \"@tiptap/pm/state\";\nvar Paste = Extension.create({\n name: \"paste\",\n addProseMirrorPlugins() {\n return [\n new Plugin8({\n key: new PluginKey6(\"tiptapPaste\"),\n props: {\n handlePaste: (_view, e, slice) => {\n this.editor.emit(\"paste\", {\n editor: this.editor,\n event: e,\n slice\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/tabindex.ts\nimport { Plugin as Plugin9, PluginKey as PluginKey7 } from \"@tiptap/pm/state\";\nvar Tabindex = Extension.create({\n name: \"tabindex\",\n addOptions() {\n return {\n value: void 0\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin9({\n key: new PluginKey7(\"tabindex\"),\n props: {\n attributes: () => {\n var _a;\n if (!this.editor.isEditable && this.options.value === void 0) {\n return {};\n }\n return { tabindex: (_a = this.options.value) != null ? _a : \"0\" };\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/textDirection.ts\nimport { Plugin as Plugin10, PluginKey as PluginKey8 } from \"@tiptap/pm/state\";\nvar TextDirection = Extension.create({\n name: \"textDirection\",\n addOptions() {\n return {\n direction: void 0\n };\n },\n addGlobalAttributes() {\n if (!this.options.direction) {\n return [];\n }\n const { nodeExtensions } = splitExtensions(this.extensions);\n return [\n {\n types: nodeExtensions.filter((extension) => extension.name !== \"text\").map((extension) => extension.name),\n attributes: {\n dir: {\n default: this.options.direction,\n parseHTML: (element) => {\n const dir = element.getAttribute(\"dir\");\n if (dir && (dir === \"ltr\" || dir === \"rtl\" || dir === \"auto\")) {\n return dir;\n }\n return this.options.direction;\n },\n renderHTML: (attributes) => {\n if (!attributes.dir) {\n return {};\n }\n return {\n dir: attributes.dir\n };\n }\n }\n }\n }\n ];\n },\n addProseMirrorPlugins() {\n return [\n new Plugin10({\n key: new PluginKey8(\"textDirection\"),\n props: {\n attributes: () => {\n const direction = this.options.direction;\n if (!direction) {\n return {};\n }\n return {\n dir: direction\n };\n }\n }\n })\n ];\n }\n});\n\n// src/NodePos.ts\nvar NodePos = class _NodePos {\n constructor(pos, editor, isBlock = false, node = null) {\n this.currentNode = null;\n this.actualDepth = null;\n this.isBlock = isBlock;\n this.resolvedPos = pos;\n this.editor = editor;\n this.currentNode = node;\n }\n get name() {\n return this.node.type.name;\n }\n get node() {\n return this.currentNode || this.resolvedPos.node();\n }\n get element() {\n return this.editor.view.domAtPos(this.pos).node;\n }\n get depth() {\n var _a;\n return (_a = this.actualDepth) != null ? _a : this.resolvedPos.depth;\n }\n get pos() {\n return this.resolvedPos.pos;\n }\n get content() {\n return this.node.content;\n }\n set content(content) {\n let from = this.from;\n let to = this.to;\n if (this.isBlock) {\n if (this.content.size === 0) {\n console.error(`You can\\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);\n return;\n }\n from = this.from + 1;\n to = this.to - 1;\n }\n this.editor.commands.insertContentAt({ from, to }, content);\n }\n get attributes() {\n return this.node.attrs;\n }\n get textContent() {\n return this.node.textContent;\n }\n get size() {\n return this.node.nodeSize;\n }\n get from() {\n if (this.isBlock) {\n return this.pos;\n }\n return this.resolvedPos.start(this.resolvedPos.depth);\n }\n get range() {\n return {\n from: this.from,\n to: this.to\n };\n }\n get to() {\n if (this.isBlock) {\n return this.pos + this.size;\n }\n return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);\n }\n get parent() {\n if (this.depth === 0) {\n return null;\n }\n const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);\n const $pos = this.resolvedPos.doc.resolve(parentPos);\n return new _NodePos($pos, this.editor);\n }\n get before() {\n let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.from - 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get after() {\n let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.to + 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get children() {\n const children = [];\n this.node.content.forEach((node, offset) => {\n const isBlock = node.isBlock && !node.isTextblock;\n const isNonTextAtom = node.isAtom && !node.isText;\n const isInline = node.isInline;\n const targetPos = this.pos + offset + (isNonTextAtom ? 0 : 1);\n if (targetPos < 0 || targetPos > this.resolvedPos.doc.nodeSize - 2) {\n return;\n }\n const $pos = this.resolvedPos.doc.resolve(targetPos);\n if (!isBlock && !isInline && $pos.depth <= this.depth) {\n return;\n }\n const childNodePos = new _NodePos($pos, this.editor, isBlock, isBlock || isInline ? node : null);\n if (isBlock) {\n childNodePos.actualDepth = this.depth + 1;\n }\n children.push(childNodePos);\n });\n return children;\n }\n get firstChild() {\n return this.children[0] || null;\n }\n get lastChild() {\n const children = this.children;\n return children[children.length - 1] || null;\n }\n closest(selector, attributes = {}) {\n let node = null;\n let currentNode = this.parent;\n while (currentNode && !node) {\n if (currentNode.node.type.name === selector) {\n if (Object.keys(attributes).length > 0) {\n const nodeAttributes = currentNode.node.attrs;\n const attrKeys = Object.keys(attributes);\n for (let index = 0; index < attrKeys.length; index += 1) {\n const key = attrKeys[index];\n if (nodeAttributes[key] !== attributes[key]) {\n break;\n }\n }\n } else {\n node = currentNode;\n }\n }\n currentNode = currentNode.parent;\n }\n return node;\n }\n querySelector(selector, attributes = {}) {\n return this.querySelectorAll(selector, attributes, true)[0] || null;\n }\n querySelectorAll(selector, attributes = {}, firstItemOnly = false) {\n let nodes = [];\n if (!this.children || this.children.length === 0) {\n return nodes;\n }\n const attrKeys = Object.keys(attributes);\n this.children.forEach((childPos) => {\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n if (childPos.node.type.name === selector) {\n const doesAllAttributesMatch = attrKeys.every((key) => attributes[key] === childPos.node.attrs[key]);\n if (doesAllAttributesMatch) {\n nodes.push(childPos);\n }\n }\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n nodes = nodes.concat(childPos.querySelectorAll(selector, attributes, firstItemOnly));\n });\n return nodes;\n }\n setAttribute(attributes) {\n const { tr } = this.editor.state;\n tr.setNodeMarkup(this.from, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n this.editor.view.dispatch(tr);\n }\n};\n\n// src/style.ts\nvar style = `.ProseMirror {\n position: relative;\n}\n\n.ProseMirror {\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n display: inline !important;\n border: none !important;\n margin: 0 !important;\n width: 0 !important;\n height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n}\n\n.ProseMirror-hideselection *::selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection * {\n caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n}`;\n\n// src/utilities/createStyleTag.ts\nfunction createStyleTag(style2, nonce, suffix) {\n const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : \"\"}]`);\n if (tiptapStyleTag !== null) {\n return tiptapStyleTag;\n }\n const styleNode = document.createElement(\"style\");\n if (nonce) {\n styleNode.setAttribute(\"nonce\", nonce);\n }\n styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : \"\"}`, \"\");\n styleNode.innerHTML = style2;\n document.getElementsByTagName(\"head\")[0].appendChild(styleNode);\n return styleNode;\n}\n\n// src/Editor.ts\nvar Editor = class extends EventEmitter {\n constructor(options = {}) {\n super();\n this.css = null;\n this.className = \"tiptap\";\n this.editorView = null;\n this.isFocused = false;\n this.destroyed = false;\n /**\n * The editor is considered initialized after the `create` event has been emitted.\n */\n this.isInitialized = false;\n this.extensionStorage = {};\n /**\n * A unique ID for this editor instance.\n */\n this.instanceId = Math.random().toString(36).slice(2, 9);\n this.options = {\n element: typeof document !== \"undefined\" ? document.createElement(\"div\") : null,\n content: \"\",\n injectCSS: true,\n injectNonce: void 0,\n extensions: [],\n autofocus: false,\n editable: true,\n textDirection: void 0,\n editorProps: {},\n parseOptions: {},\n coreExtensionOptions: {},\n enableInputRules: true,\n enablePasteRules: true,\n enableCoreExtensions: true,\n enableContentCheck: false,\n emitContentError: false,\n onBeforeCreate: () => null,\n onCreate: () => null,\n onMount: () => null,\n onUnmount: () => null,\n onUpdate: () => null,\n onSelectionUpdate: () => null,\n onTransaction: () => null,\n onFocus: () => null,\n onBlur: () => null,\n onDestroy: () => null,\n onContentError: ({ error }) => {\n throw error;\n },\n onPaste: () => null,\n onDrop: () => null,\n onDelete: () => null,\n enableExtensionDispatchTransaction: true\n };\n this.isCapturingTransaction = false;\n this.capturedTransaction = null;\n /**\n * Returns a set of utilities for working with positions and ranges.\n */\n this.utils = {\n getUpdatedPosition,\n createMappablePosition\n };\n this.setOptions(options);\n this.createExtensionManager();\n this.createCommandManager();\n this.createSchema();\n this.on(\"beforeCreate\", this.options.onBeforeCreate);\n this.emit(\"beforeCreate\", { editor: this });\n this.on(\"mount\", this.options.onMount);\n this.on(\"unmount\", this.options.onUnmount);\n this.on(\"contentError\", this.options.onContentError);\n this.on(\"create\", this.options.onCreate);\n this.on(\"update\", this.options.onUpdate);\n this.on(\"selectionUpdate\", this.options.onSelectionUpdate);\n this.on(\"transaction\", this.options.onTransaction);\n this.on(\"focus\", this.options.onFocus);\n this.on(\"blur\", this.options.onBlur);\n this.on(\"destroy\", this.options.onDestroy);\n this.on(\"drop\", ({ event, slice, moved }) => this.options.onDrop(event, slice, moved));\n this.on(\"paste\", ({ event, slice }) => this.options.onPaste(event, slice));\n this.on(\"delete\", this.options.onDelete);\n const initialDoc = this.createDoc();\n const selection = resolveFocusPosition(initialDoc, this.options.autofocus);\n this.editorState = EditorState.create({\n doc: initialDoc,\n schema: this.schema,\n selection: selection || void 0\n });\n if (this.options.element) {\n this.mount(this.options.element);\n }\n }\n /**\n * Attach the editor to the DOM, creating a new editor view.\n */\n mount(el) {\n if (typeof document === \"undefined\") {\n throw new Error(\n `[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.`\n );\n }\n this.createView(el);\n this.emit(\"mount\", { editor: this });\n if (this.css && !document.head.contains(this.css)) {\n document.head.appendChild(this.css);\n }\n window.setTimeout(() => {\n if (this.isDestroyed) {\n return;\n }\n if (this.options.autofocus !== false && this.options.autofocus !== null) {\n this.commands.focus(this.options.autofocus);\n }\n this.emit(\"create\", { editor: this });\n this.isInitialized = true;\n }, 0);\n }\n /**\n * Remove the editor from the DOM, but still allow remounting at a different point in time\n */\n unmount() {\n if (this.editorView) {\n const dom = this.editorView.dom;\n if (dom == null ? void 0 : dom.editor) {\n delete dom.editor;\n }\n this.editorView.destroy();\n }\n this.editorView = null;\n this.isInitialized = false;\n if (this.css && !document.querySelectorAll(`.${this.className}`).length) {\n try {\n if (typeof this.css.remove === \"function\") {\n this.css.remove();\n } else if (this.css.parentNode) {\n this.css.parentNode.removeChild(this.css);\n }\n } catch (error) {\n console.warn(\"Failed to remove CSS element:\", error);\n }\n }\n this.css = null;\n this.emit(\"unmount\", { editor: this });\n }\n /**\n * Returns the editor storage.\n */\n get storage() {\n return this.extensionStorage;\n }\n /**\n * An object of all registered commands.\n */\n get commands() {\n return this.commandManager.commands;\n }\n /**\n * Create a command chain to call multiple commands at once.\n */\n chain() {\n return this.commandManager.chain();\n }\n /**\n * Check if a command or a command chain can be executed. Without executing it.\n */\n can() {\n return this.commandManager.can();\n }\n /**\n * Inject CSS styles.\n */\n injectCSS() {\n if (this.options.injectCSS && typeof document !== \"undefined\") {\n this.css = createStyleTag(style, this.options.injectNonce);\n }\n }\n /**\n * Update editor options.\n *\n * @param options A list of options\n */\n setOptions(options = {}) {\n this.options = {\n ...this.options,\n ...options\n };\n if (!this.editorView || !this.state || this.isDestroyed) {\n return;\n }\n if (this.options.editorProps) {\n this.view.setProps(this.options.editorProps);\n }\n this.view.updateState(this.state);\n }\n /**\n * Update editable state of the editor.\n */\n setEditable(editable, emitUpdate = true) {\n this.setOptions({ editable });\n if (emitUpdate) {\n this.emit(\"update\", { editor: this, transaction: this.state.tr, appendedTransactions: [] });\n }\n }\n /**\n * Returns whether the editor is editable.\n */\n get isEditable() {\n return this.options.editable && this.view && this.view.editable;\n }\n /**\n * Returns the editor view.\n */\n get view() {\n if (this.editorView) {\n return this.editorView;\n }\n return new Proxy(\n {\n state: this.editorState,\n updateState: (state) => {\n this.editorState = state;\n },\n dispatch: (tr) => {\n this.dispatchTransaction(tr);\n },\n // Stub some commonly accessed properties to prevent errors\n composing: false,\n dragging: null,\n editable: true,\n isDestroyed: false\n },\n {\n get: (obj, key) => {\n if (this.editorView) {\n return this.editorView[key];\n }\n if (key === \"state\") {\n return this.editorState;\n }\n if (key in obj) {\n return Reflect.get(obj, key);\n }\n throw new Error(\n `[tiptap error]: The editor view is not available. Cannot access view['${key}']. The editor may not be mounted yet.`\n );\n }\n }\n );\n }\n /**\n * Returns the editor state.\n */\n get state() {\n if (this.editorView) {\n this.editorState = this.view.state;\n }\n return this.editorState;\n }\n /**\n * Register a ProseMirror plugin.\n *\n * @param plugin A ProseMirror plugin\n * @param handlePlugins Control how to merge the plugin into the existing plugins.\n * @returns The new editor state\n */\n registerPlugin(plugin, handlePlugins) {\n const plugins = isFunction(handlePlugins) ? handlePlugins(plugin, [...this.state.plugins]) : [...this.state.plugins, plugin];\n const state = this.state.reconfigure({ plugins });\n this.view.updateState(state);\n return state;\n }\n /**\n * Unregister a ProseMirror plugin.\n *\n * @param nameOrPluginKeyToRemove The plugins name\n * @returns The new editor state or undefined if the editor is destroyed\n */\n unregisterPlugin(nameOrPluginKeyToRemove) {\n if (this.isDestroyed) {\n return void 0;\n }\n const prevPlugins = this.state.plugins;\n let plugins = prevPlugins;\n [].concat(nameOrPluginKeyToRemove).forEach((nameOrPluginKey) => {\n const name = typeof nameOrPluginKey === \"string\" ? `${nameOrPluginKey}$` : nameOrPluginKey.key;\n plugins = plugins.filter((plugin) => !plugin.key.startsWith(name));\n });\n if (prevPlugins.length === plugins.length) {\n return void 0;\n }\n const state = this.state.reconfigure({\n plugins\n });\n this.view.updateState(state);\n return state;\n }\n /**\n * Creates an extension manager.\n */\n createExtensionManager() {\n var _a, _b, _c, _d;\n const coreExtensions = this.options.enableCoreExtensions ? [\n Editable,\n ClipboardTextSerializer.configure({\n blockSeparator: (_b = (_a = this.options.coreExtensionOptions) == null ? void 0 : _a.clipboardTextSerializer) == null ? void 0 : _b.blockSeparator\n }),\n Commands,\n FocusEvents,\n Keymap,\n Tabindex.configure({\n value: (_d = (_c = this.options.coreExtensionOptions) == null ? void 0 : _c.tabindex) == null ? void 0 : _d.value\n }),\n Drop,\n Paste,\n Delete,\n TextDirection.configure({\n direction: this.options.textDirection\n })\n ].filter((ext) => {\n if (typeof this.options.enableCoreExtensions === \"object\") {\n return this.options.enableCoreExtensions[ext.name] !== false;\n }\n return true;\n }) : [];\n const allExtensions = [...coreExtensions, ...this.options.extensions].filter((extension) => {\n return [\"extension\", \"node\", \"mark\"].includes(extension == null ? void 0 : extension.type);\n });\n this.extensionManager = new ExtensionManager(allExtensions, this);\n }\n /**\n * Creates an command manager.\n */\n createCommandManager() {\n this.commandManager = new CommandManager({\n editor: this\n });\n }\n /**\n * Creates a ProseMirror schema.\n */\n createSchema() {\n this.schema = this.extensionManager.schema;\n }\n /**\n * Creates the initial document.\n */\n createDoc() {\n let doc;\n try {\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: this.options.enableContentCheck\n });\n } catch (e) {\n if (!(e instanceof Error) || ![\"[tiptap error]: Invalid JSON content\", \"[tiptap error]: Invalid HTML content\"].includes(e.message)) {\n throw e;\n }\n this.emit(\"contentError\", {\n editor: this,\n error: e,\n disableCollaboration: () => {\n if (\"collaboration\" in this.storage && typeof this.storage.collaboration === \"object\" && this.storage.collaboration) {\n ;\n this.storage.collaboration.isDisabled = true;\n }\n this.options.extensions = this.options.extensions.filter((extension) => extension.name !== \"collaboration\");\n this.createExtensionManager();\n }\n });\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: false\n });\n }\n return doc;\n }\n /**\n * Creates a ProseMirror view.\n */\n createView(element) {\n const { editorProps, enableExtensionDispatchTransaction } = this.options;\n const baseDispatch = editorProps.dispatchTransaction || this.dispatchTransaction.bind(this);\n const dispatch = enableExtensionDispatchTransaction ? this.extensionManager.dispatchTransaction(baseDispatch) : baseDispatch;\n const baseTransformPastedHTML = editorProps.transformPastedHTML;\n const transformPastedHTML = this.extensionManager.transformPastedHTML(baseTransformPastedHTML);\n this.editorView = new EditorView(element, {\n ...editorProps,\n attributes: {\n // add `role=\"textbox\"` to the editor element\n role: \"textbox\",\n ...editorProps == null ? void 0 : editorProps.attributes\n },\n dispatchTransaction: dispatch,\n transformPastedHTML,\n state: this.editorState,\n markViews: this.extensionManager.markViews,\n nodeViews: this.extensionManager.nodeViews\n });\n const newState = this.state.reconfigure({\n plugins: this.extensionManager.plugins\n });\n this.view.updateState(newState);\n this.prependClass();\n this.injectCSS();\n const dom = this.view.dom;\n dom.editor = this;\n }\n /**\n * Creates all node and mark views.\n */\n createNodeViews() {\n if (this.view.isDestroyed) {\n return;\n }\n this.view.setProps({\n markViews: this.extensionManager.markViews,\n nodeViews: this.extensionManager.nodeViews\n });\n }\n /**\n * Prepend class name to element.\n */\n prependClass() {\n this.view.dom.className = `${this.className} ${this.view.dom.className}`;\n }\n captureTransaction(fn) {\n this.isCapturingTransaction = true;\n fn();\n this.isCapturingTransaction = false;\n const tr = this.capturedTransaction;\n this.capturedTransaction = null;\n return tr;\n }\n /**\n * The callback over which to send transactions (state updates) produced by the view.\n *\n * @param transaction An editor state transaction\n */\n dispatchTransaction(transaction) {\n if (this.view.isDestroyed) {\n return;\n }\n if (this.isCapturingTransaction) {\n if (!this.capturedTransaction) {\n this.capturedTransaction = transaction;\n return;\n }\n transaction.steps.forEach((step) => {\n var _a;\n return (_a = this.capturedTransaction) == null ? void 0 : _a.step(step);\n });\n return;\n }\n const { state, transactions } = this.state.applyTransaction(transaction);\n const selectionHasChanged = !this.state.selection.eq(state.selection);\n const rootTrWasApplied = transactions.includes(transaction);\n const prevState = this.state;\n this.emit(\"beforeTransaction\", {\n editor: this,\n transaction,\n nextState: state\n });\n if (!rootTrWasApplied) {\n return;\n }\n this.view.updateState(state);\n this.emit(\"transaction\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n if (selectionHasChanged) {\n this.emit(\"selectionUpdate\", {\n editor: this,\n transaction\n });\n }\n const mostRecentFocusTr = transactions.findLast((tr) => tr.getMeta(\"focus\") || tr.getMeta(\"blur\"));\n const focus2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"focus\");\n const blur2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"blur\");\n if (focus2) {\n this.emit(\"focus\", {\n editor: this,\n event: focus2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (blur2) {\n this.emit(\"blur\", {\n editor: this,\n event: blur2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (transaction.getMeta(\"preventUpdate\") || !transactions.some((tr) => tr.docChanged) || prevState.doc.eq(state.doc)) {\n return;\n }\n this.emit(\"update\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n }\n /**\n * Get attributes of the currently selected node or mark.\n */\n getAttributes(nameOrType) {\n return getAttributes(this.state, nameOrType);\n }\n isActive(nameOrAttributes, attributesOrUndefined) {\n const name = typeof nameOrAttributes === \"string\" ? nameOrAttributes : null;\n const attributes = typeof nameOrAttributes === \"string\" ? attributesOrUndefined : nameOrAttributes;\n return isActive(this.state, name, attributes);\n }\n /**\n * Get the document as JSON.\n */\n getJSON() {\n return this.state.doc.toJSON();\n }\n /**\n * Get the document as HTML.\n */\n getHTML() {\n return getHTMLFromFragment(this.state.doc.content, this.schema);\n }\n /**\n * Get the document as text.\n */\n getText(options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n return getText(this.state.doc, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(this.schema),\n ...textSerializers\n }\n });\n }\n /**\n * Check if there is no content.\n */\n get isEmpty() {\n return isNodeEmpty(this.state.doc);\n }\n /**\n * Destroy the editor.\n */\n destroy() {\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.emit(\"destroy\");\n this.unmount();\n this.removeAllListeners();\n this.extensionManager.destroy();\n this.extensionManager = null;\n this.schema = null;\n this.commandManager = null;\n this.extensionStorage = {};\n }\n /**\n * Check if the editor is already destroyed.\n */\n get isDestroyed() {\n var _a, _b;\n return (_b = (_a = this.editorView) == null ? void 0 : _a.isDestroyed) != null ? _b : true;\n }\n $node(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelector(selector, attributes)) || null;\n }\n $nodes(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelectorAll(selector, attributes)) || null;\n }\n $pos(pos) {\n const $pos = this.state.doc.resolve(pos);\n return new NodePos($pos, this);\n }\n get $doc() {\n return this.$pos(0);\n }\n};\n\n// src/inputRules/markInputRule.ts\nfunction markInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n const markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/nodeInputRule.ts\nfunction nodeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const { tr } = state;\n const start = range.from;\n let end = range.to;\n const newNode = config.type.create(attributes);\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n let matchStart = start + offset;\n if (matchStart > end) {\n matchStart = end;\n } else {\n end = matchStart + match[1].length;\n }\n const lastChar = match[0][match[0].length - 1];\n tr.insertText(lastChar, start + match[0].length - 1);\n tr.replaceWith(matchStart, end, newNode);\n } else if (match[0]) {\n const insertionStart = config.type.isInline ? start : start - 1;\n tr.insert(insertionStart, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end));\n }\n tr.scrollIntoView();\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/textblockTypeInputRule.ts\nfunction textblockTypeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const $start = state.doc.resolve(range.from);\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {\n return null;\n }\n state.tr.delete(range.from, range.to).setBlockType(range.from, range.from, config.type, attributes);\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/textInputRule.ts\nfunction textInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/wrappingInputRule.ts\nimport { canJoin as canJoin2, findWrapping } from \"@tiptap/pm/transform\";\nfunction wrappingInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match, chain }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const tr = state.tr.delete(range.from, range.to);\n const $start = tr.doc.resolve(range.from);\n const blockRange = $start.blockRange();\n const wrapping = blockRange && findWrapping(blockRange, config.type, attributes);\n if (!wrapping) {\n return null;\n }\n tr.wrap(blockRange, wrapping);\n if (config.keepMarks && config.editor) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = config.editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n }\n if (config.keepAttributes) {\n const nodeType = config.type.name === \"bulletList\" || config.type.name === \"orderedList\" ? \"listItem\" : \"taskList\";\n chain().updateAttributes(nodeType, attributes).run();\n }\n const before = tr.doc.resolve(range.from - 1).nodeBefore;\n if (before && before.type === config.type && canJoin2(tr.doc, range.from - 1) && (!config.joinPredicate || config.joinPredicate(match, before))) {\n tr.join(range.from - 1);\n }\n },\n undoable: config.undoable\n });\n}\n\n// src/jsx-runtime.ts\nfunction Fragment6(props) {\n return props.children;\n}\nvar h = (tag, attributes) => {\n if (tag === \"slot\") {\n return 0;\n }\n if (tag instanceof Function) {\n return tag(attributes);\n }\n const { children, ...rest } = attributes != null ? attributes : {};\n if (tag === \"svg\") {\n throw new Error(\"SVG elements are not supported in the JSX syntax, use the array syntax instead\");\n }\n return [tag, rest, children];\n};\n\n// src/lib/ResizableNodeView.ts\nvar isTouchEvent = (e) => {\n return \"touches\" in e;\n};\nvar ResizableNodeView = class {\n /**\n * Creates a new ResizableNodeView instance.\n *\n * The constructor sets up the resize handles, applies initial sizing from\n * node attributes, and configures all resize behavior options.\n *\n * @param options - Configuration options for the resizable node view\n */\n constructor(options) {\n /** Active resize handle directions */\n this.directions = [\"bottom-left\", \"bottom-right\", \"top-left\", \"top-right\"];\n /** Minimum allowed dimensions */\n this.minSize = {\n height: 8,\n width: 8\n };\n /** Whether to always preserve aspect ratio */\n this.preserveAspectRatio = false;\n /** CSS class names for elements */\n this.classNames = {\n container: \"\",\n wrapper: \"\",\n handle: \"\",\n resizing: \"\"\n };\n /** Initial width of the element (for aspect ratio calculation) */\n this.initialWidth = 0;\n /** Initial height of the element (for aspect ratio calculation) */\n this.initialHeight = 0;\n /** Calculated aspect ratio (width / height) */\n this.aspectRatio = 1;\n /** Whether a resize operation is currently active */\n this.isResizing = false;\n /** The handle currently being dragged */\n this.activeHandle = null;\n /** Starting mouse X position when resize began */\n this.startX = 0;\n /** Starting mouse Y position when resize began */\n this.startY = 0;\n /** Element width when resize began */\n this.startWidth = 0;\n /** Element height when resize began */\n this.startHeight = 0;\n /** Whether Shift key is currently pressed (for temporary aspect ratio lock) */\n this.isShiftKeyPressed = false;\n /** Last known editable state of the editor */\n this.lastEditableState = void 0;\n /** Map of handle elements by direction */\n this.handleMap = /* @__PURE__ */ new Map();\n /**\n * Handles mouse movement during an active resize.\n *\n * Calculates the delta from the starting position, computes new dimensions\n * based on the active handle direction, applies constraints and aspect ratio,\n * then updates the element's style and calls the onResize callback.\n *\n * @param event - The mouse move event\n */\n this.handleMouseMove = (event) => {\n if (!this.isResizing || !this.activeHandle) {\n return;\n }\n const deltaX = event.clientX - this.startX;\n const deltaY = event.clientY - this.startY;\n this.handleResize(deltaX, deltaY);\n };\n this.handleTouchMove = (event) => {\n if (!this.isResizing || !this.activeHandle) {\n return;\n }\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const deltaX = touch.clientX - this.startX;\n const deltaY = touch.clientY - this.startY;\n this.handleResize(deltaX, deltaY);\n };\n /**\n * Completes the resize operation when the mouse button is released.\n *\n * Captures final dimensions, calls the onCommit callback to persist changes,\n * removes the resizing state and class, and cleans up document-level listeners.\n */\n this.handleMouseUp = () => {\n if (!this.isResizing) {\n return;\n }\n const finalWidth = this.element.offsetWidth;\n const finalHeight = this.element.offsetHeight;\n this.onCommit(finalWidth, finalHeight);\n this.isResizing = false;\n this.activeHandle = null;\n this.container.dataset.resizeState = \"false\";\n if (this.classNames.resizing) {\n this.container.classList.remove(this.classNames.resizing);\n }\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n document.removeEventListener(\"keyup\", this.handleKeyUp);\n };\n /**\n * Tracks Shift key state to enable temporary aspect ratio locking.\n *\n * When Shift is pressed during resize, aspect ratio is preserved even if\n * preserveAspectRatio is false.\n *\n * @param event - The keyboard event\n */\n this.handleKeyDown = (event) => {\n if (event.key === \"Shift\") {\n this.isShiftKeyPressed = true;\n }\n };\n /**\n * Tracks Shift key release to disable temporary aspect ratio locking.\n *\n * @param event - The keyboard event\n */\n this.handleKeyUp = (event) => {\n if (event.key === \"Shift\") {\n this.isShiftKeyPressed = false;\n }\n };\n var _a, _b, _c, _d, _e, _f;\n this.node = options.node;\n this.editor = options.editor;\n this.element = options.element;\n this.contentElement = options.contentElement;\n this.getPos = options.getPos;\n this.onResize = options.onResize;\n this.onCommit = options.onCommit;\n this.onUpdate = options.onUpdate;\n if ((_a = options.options) == null ? void 0 : _a.min) {\n this.minSize = {\n ...this.minSize,\n ...options.options.min\n };\n }\n if ((_b = options.options) == null ? void 0 : _b.max) {\n this.maxSize = options.options.max;\n }\n if ((_c = options == null ? void 0 : options.options) == null ? void 0 : _c.directions) {\n this.directions = options.options.directions;\n }\n if ((_d = options.options) == null ? void 0 : _d.preserveAspectRatio) {\n this.preserveAspectRatio = options.options.preserveAspectRatio;\n }\n if ((_e = options.options) == null ? void 0 : _e.className) {\n this.classNames = {\n container: options.options.className.container || \"\",\n wrapper: options.options.className.wrapper || \"\",\n handle: options.options.className.handle || \"\",\n resizing: options.options.className.resizing || \"\"\n };\n }\n if ((_f = options.options) == null ? void 0 : _f.createCustomHandle) {\n this.createCustomHandle = options.options.createCustomHandle;\n }\n this.wrapper = this.createWrapper();\n this.container = this.createContainer();\n this.applyInitialSize();\n this.attachHandles();\n this.editor.on(\"update\", this.handleEditorUpdate.bind(this));\n }\n /**\n * Returns the top-level DOM node that should be placed in the editor.\n *\n * This is required by the ProseMirror NodeView interface. The container\n * includes the wrapper, handles, and the actual content element.\n *\n * @returns The container element to be inserted into the editor\n */\n get dom() {\n return this.container;\n }\n get contentDOM() {\n var _a;\n return (_a = this.contentElement) != null ? _a : null;\n }\n handleEditorUpdate() {\n const isEditable = this.editor.isEditable;\n if (isEditable === this.lastEditableState) {\n return;\n }\n this.lastEditableState = isEditable;\n if (!isEditable) {\n this.removeHandles();\n } else if (isEditable && this.handleMap.size === 0) {\n this.attachHandles();\n }\n }\n /**\n * Called when the node's content or attributes change.\n *\n * Updates the internal node reference. If a custom `onUpdate` callback\n * was provided, it will be called to handle additional update logic.\n *\n * @param node - The new/updated node\n * @param decorations - Node decorations\n * @param innerDecorations - Inner decorations\n * @returns `false` if the node type has changed (requires full rebuild), otherwise the result of `onUpdate` or `true`\n */\n update(node, decorations, innerDecorations) {\n if (node.type !== this.node.type) {\n return false;\n }\n this.node = node;\n if (this.onUpdate) {\n return this.onUpdate(node, decorations, innerDecorations);\n }\n return true;\n }\n /**\n * Cleanup method called when the node view is being removed.\n *\n * Removes all event listeners to prevent memory leaks. This is required\n * by the ProseMirror NodeView interface. If a resize is active when\n * destroy is called, it will be properly cancelled.\n */\n destroy() {\n if (this.isResizing) {\n this.container.dataset.resizeState = \"false\";\n if (this.classNames.resizing) {\n this.container.classList.remove(this.classNames.resizing);\n }\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n document.removeEventListener(\"keyup\", this.handleKeyUp);\n this.isResizing = false;\n this.activeHandle = null;\n }\n this.editor.off(\"update\", this.handleEditorUpdate.bind(this));\n this.container.remove();\n }\n /**\n * Creates the outer container element.\n *\n * The container is the top-level element returned by the NodeView and\n * wraps the entire resizable node. It's set up with flexbox to handle\n * alignment and includes data attributes for styling and identification.\n *\n * @returns The container element\n */\n createContainer() {\n const element = document.createElement(\"div\");\n element.dataset.resizeContainer = \"\";\n element.dataset.node = this.node.type.name;\n element.style.display = this.node.type.isInline ? \"inline-flex\" : \"flex\";\n if (this.classNames.container) {\n element.className = this.classNames.container;\n }\n element.appendChild(this.wrapper);\n return element;\n }\n /**\n * Creates the wrapper element that contains the content and handles.\n *\n * The wrapper uses relative positioning so that resize handles can be\n * positioned absolutely within it. This is the direct parent of the\n * content element being made resizable.\n *\n * @returns The wrapper element\n */\n createWrapper() {\n const element = document.createElement(\"div\");\n element.style.position = \"relative\";\n element.style.display = \"block\";\n element.dataset.resizeWrapper = \"\";\n if (this.classNames.wrapper) {\n element.className = this.classNames.wrapper;\n }\n element.appendChild(this.element);\n return element;\n }\n /**\n * Creates a resize handle element for a specific direction.\n *\n * Each handle is absolutely positioned and includes a data attribute\n * identifying its direction for styling purposes.\n *\n * @param direction - The resize direction for this handle\n * @returns The handle element\n */\n createHandle(direction) {\n const handle = document.createElement(\"div\");\n handle.dataset.resizeHandle = direction;\n handle.style.position = \"absolute\";\n if (this.classNames.handle) {\n handle.className = this.classNames.handle;\n }\n return handle;\n }\n /**\n * Positions a handle element according to its direction.\n *\n * Corner handles (e.g., 'top-left') are positioned at the intersection\n * of two edges. Edge handles (e.g., 'top') span the full width or height.\n *\n * @param handle - The handle element to position\n * @param direction - The direction determining the position\n */\n positionHandle(handle, direction) {\n const isTop = direction.includes(\"top\");\n const isBottom = direction.includes(\"bottom\");\n const isLeft = direction.includes(\"left\");\n const isRight = direction.includes(\"right\");\n if (isTop) {\n handle.style.top = \"0\";\n }\n if (isBottom) {\n handle.style.bottom = \"0\";\n }\n if (isLeft) {\n handle.style.left = \"0\";\n }\n if (isRight) {\n handle.style.right = \"0\";\n }\n if (direction === \"top\" || direction === \"bottom\") {\n handle.style.left = \"0\";\n handle.style.right = \"0\";\n }\n if (direction === \"left\" || direction === \"right\") {\n handle.style.top = \"0\";\n handle.style.bottom = \"0\";\n }\n }\n /**\n * Creates and attaches all resize handles to the wrapper.\n *\n * Iterates through the configured directions, creates a handle for each,\n * positions it, attaches the mousedown listener, and appends it to the DOM.\n */\n attachHandles() {\n this.directions.forEach((direction) => {\n let handle;\n if (this.createCustomHandle) {\n handle = this.createCustomHandle(direction);\n } else {\n handle = this.createHandle(direction);\n }\n if (!(handle instanceof HTMLElement)) {\n console.warn(\n `[ResizableNodeView] createCustomHandle(\"${direction}\") did not return an HTMLElement. Falling back to default handle.`\n );\n handle = this.createHandle(direction);\n }\n if (!this.createCustomHandle) {\n this.positionHandle(handle, direction);\n }\n handle.addEventListener(\"mousedown\", (event) => this.handleResizeStart(event, direction));\n handle.addEventListener(\"touchstart\", (event) => this.handleResizeStart(event, direction));\n this.handleMap.set(direction, handle);\n this.wrapper.appendChild(handle);\n });\n }\n /**\n * Removes all resize handles from the wrapper.\n *\n * Cleans up the handle map and removes each handle element from the DOM.\n */\n removeHandles() {\n this.handleMap.forEach((el) => el.remove());\n this.handleMap.clear();\n }\n /**\n * Applies initial sizing from node attributes to the element.\n *\n * If width/height attributes exist on the node, they're applied to the element.\n * Otherwise, the element's natural/current dimensions are measured. The aspect\n * ratio is calculated for later use in aspect-ratio-preserving resizes.\n */\n applyInitialSize() {\n const width = this.node.attrs.width;\n const height = this.node.attrs.height;\n if (width) {\n this.element.style.width = `${width}px`;\n this.initialWidth = width;\n } else {\n this.initialWidth = this.element.offsetWidth;\n }\n if (height) {\n this.element.style.height = `${height}px`;\n this.initialHeight = height;\n } else {\n this.initialHeight = this.element.offsetHeight;\n }\n if (this.initialWidth > 0 && this.initialHeight > 0) {\n this.aspectRatio = this.initialWidth / this.initialHeight;\n }\n }\n /**\n * Initiates a resize operation when a handle is clicked.\n *\n * Captures the starting mouse position and element dimensions, sets up\n * the resize state, adds the resizing class and state attribute, and\n * attaches document-level listeners for mouse movement and keyboard input.\n *\n * @param event - The mouse down event\n * @param direction - The direction of the handle being dragged\n */\n handleResizeStart(event, direction) {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.activeHandle = direction;\n if (isTouchEvent(event)) {\n this.startX = event.touches[0].clientX;\n this.startY = event.touches[0].clientY;\n } else {\n this.startX = event.clientX;\n this.startY = event.clientY;\n }\n this.startWidth = this.element.offsetWidth;\n this.startHeight = this.element.offsetHeight;\n if (this.startWidth > 0 && this.startHeight > 0) {\n this.aspectRatio = this.startWidth / this.startHeight;\n }\n const pos = this.getPos();\n if (pos !== void 0) {\n }\n this.container.dataset.resizeState = \"true\";\n if (this.classNames.resizing) {\n this.container.classList.add(this.classNames.resizing);\n }\n document.addEventListener(\"mousemove\", this.handleMouseMove);\n document.addEventListener(\"touchmove\", this.handleTouchMove);\n document.addEventListener(\"mouseup\", this.handleMouseUp);\n document.addEventListener(\"keydown\", this.handleKeyDown);\n document.addEventListener(\"keyup\", this.handleKeyUp);\n }\n handleResize(deltaX, deltaY) {\n if (!this.activeHandle) {\n return;\n }\n const shouldPreserveAspectRatio = this.preserveAspectRatio || this.isShiftKeyPressed;\n const { width, height } = this.calculateNewDimensions(this.activeHandle, deltaX, deltaY);\n const constrained = this.applyConstraints(width, height, shouldPreserveAspectRatio);\n this.element.style.width = `${constrained.width}px`;\n this.element.style.height = `${constrained.height}px`;\n if (this.onResize) {\n this.onResize(constrained.width, constrained.height);\n }\n }\n /**\n * Calculates new dimensions based on mouse delta and resize direction.\n *\n * Takes the starting dimensions and applies the mouse movement delta\n * according to the handle direction. For corner handles, both dimensions\n * are affected. For edge handles, only one dimension changes. If aspect\n * ratio should be preserved, delegates to applyAspectRatio.\n *\n * @param direction - The active resize handle direction\n * @param deltaX - Horizontal mouse movement since resize start\n * @param deltaY - Vertical mouse movement since resize start\n * @returns The calculated width and height\n */\n calculateNewDimensions(direction, deltaX, deltaY) {\n let newWidth = this.startWidth;\n let newHeight = this.startHeight;\n const isRight = direction.includes(\"right\");\n const isLeft = direction.includes(\"left\");\n const isBottom = direction.includes(\"bottom\");\n const isTop = direction.includes(\"top\");\n if (isRight) {\n newWidth = this.startWidth + deltaX;\n } else if (isLeft) {\n newWidth = this.startWidth - deltaX;\n }\n if (isBottom) {\n newHeight = this.startHeight + deltaY;\n } else if (isTop) {\n newHeight = this.startHeight - deltaY;\n }\n if (direction === \"right\" || direction === \"left\") {\n newWidth = this.startWidth + (isRight ? deltaX : -deltaX);\n }\n if (direction === \"top\" || direction === \"bottom\") {\n newHeight = this.startHeight + (isBottom ? deltaY : -deltaY);\n }\n const shouldPreserveAspectRatio = this.preserveAspectRatio || this.isShiftKeyPressed;\n if (shouldPreserveAspectRatio) {\n return this.applyAspectRatio(newWidth, newHeight, direction);\n }\n return { width: newWidth, height: newHeight };\n }\n /**\n * Applies min/max constraints to dimensions.\n *\n * When aspect ratio is NOT preserved, constraints are applied independently\n * to width and height. When aspect ratio IS preserved, constraints are\n * applied while maintaining the aspect ratio—if one dimension hits a limit,\n * the other is recalculated proportionally.\n *\n * This ensures that aspect ratio is never broken when constrained.\n *\n * @param width - The unconstrained width\n * @param height - The unconstrained height\n * @param preserveAspectRatio - Whether to maintain aspect ratio while constraining\n * @returns The constrained dimensions\n */\n applyConstraints(width, height, preserveAspectRatio) {\n var _a, _b, _c, _d;\n if (!preserveAspectRatio) {\n let constrainedWidth2 = Math.max(this.minSize.width, width);\n let constrainedHeight2 = Math.max(this.minSize.height, height);\n if ((_a = this.maxSize) == null ? void 0 : _a.width) {\n constrainedWidth2 = Math.min(this.maxSize.width, constrainedWidth2);\n }\n if ((_b = this.maxSize) == null ? void 0 : _b.height) {\n constrainedHeight2 = Math.min(this.maxSize.height, constrainedHeight2);\n }\n return { width: constrainedWidth2, height: constrainedHeight2 };\n }\n let constrainedWidth = width;\n let constrainedHeight = height;\n if (constrainedWidth < this.minSize.width) {\n constrainedWidth = this.minSize.width;\n constrainedHeight = constrainedWidth / this.aspectRatio;\n }\n if (constrainedHeight < this.minSize.height) {\n constrainedHeight = this.minSize.height;\n constrainedWidth = constrainedHeight * this.aspectRatio;\n }\n if (((_c = this.maxSize) == null ? void 0 : _c.width) && constrainedWidth > this.maxSize.width) {\n constrainedWidth = this.maxSize.width;\n constrainedHeight = constrainedWidth / this.aspectRatio;\n }\n if (((_d = this.maxSize) == null ? void 0 : _d.height) && constrainedHeight > this.maxSize.height) {\n constrainedHeight = this.maxSize.height;\n constrainedWidth = constrainedHeight * this.aspectRatio;\n }\n return { width: constrainedWidth, height: constrainedHeight };\n }\n /**\n * Adjusts dimensions to maintain the original aspect ratio.\n *\n * For horizontal handles (left/right), uses width as the primary dimension\n * and calculates height from it. For vertical handles (top/bottom), uses\n * height as primary and calculates width. For corner handles, uses width\n * as the primary dimension.\n *\n * @param width - The new width\n * @param height - The new height\n * @param direction - The active resize direction\n * @returns Dimensions adjusted to preserve aspect ratio\n */\n applyAspectRatio(width, height, direction) {\n const isHorizontal = direction === \"left\" || direction === \"right\";\n const isVertical = direction === \"top\" || direction === \"bottom\";\n if (isHorizontal) {\n return {\n width,\n height: width / this.aspectRatio\n };\n }\n if (isVertical) {\n return {\n width: height * this.aspectRatio,\n height\n };\n }\n return {\n width,\n height: width / this.aspectRatio\n };\n }\n};\nvar ResizableNodeview = ResizableNodeView;\n\n// src/utilities/canInsertNode.ts\nimport { NodeSelection as NodeSelection4 } from \"@tiptap/pm/state\";\nfunction canInsertNode(state, nodeType) {\n const { selection } = state;\n const { $from } = selection;\n if (selection instanceof NodeSelection4) {\n const index = $from.index();\n const parent = $from.parent;\n return parent.canReplaceWith(index, index + 1, nodeType);\n }\n let depth = $from.depth;\n while (depth >= 0) {\n const index = $from.index(depth);\n const parent = $from.node(depth);\n const match = parent.contentMatchAt(index);\n if (match.matchType(nodeType)) {\n return true;\n }\n depth -= 1;\n }\n return false;\n}\n\n// src/utilities/escapeForRegEx.ts\nfunction escapeForRegEx(string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n\n// src/utilities/getStyleProperty.ts\nfunction getStyleProperty(element, propertyName) {\n const styleAttr = element.getAttribute(\"style\");\n if (!styleAttr) {\n return null;\n }\n const decls = styleAttr.split(\";\").map((decl) => decl.trim()).filter(Boolean);\n const target = propertyName.toLowerCase();\n for (let i = decls.length - 1; i >= 0; i -= 1) {\n const decl = decls[i];\n const colonIndex = decl.indexOf(\":\");\n if (colonIndex === -1) {\n continue;\n }\n const prop = decl.slice(0, colonIndex).trim().toLowerCase();\n if (prop === target) {\n return decl.slice(colonIndex + 1).trim();\n }\n }\n return null;\n}\n\n// src/utilities/htmlEntities.ts\nfunction decodeHtmlEntities(text) {\n return text.replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&amp;/g, \"&\");\n}\nfunction encodeHtmlEntities(text) {\n return text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n// src/utilities/isFirefox.ts\nfunction isFirefox() {\n return typeof navigator !== \"undefined\" ? /Firefox/.test(navigator.userAgent) : false;\n}\n\n// src/utilities/isString.ts\nfunction isString(value) {\n return typeof value === \"string\";\n}\n\n// src/utilities/markdown/index.ts\nvar markdown_exports = {};\n__export(markdown_exports, {\n createAtomBlockMarkdownSpec: () => createAtomBlockMarkdownSpec,\n createBlockMarkdownSpec: () => createBlockMarkdownSpec,\n createInlineMarkdownSpec: () => createInlineMarkdownSpec,\n parseAttributes: () => parseAttributes,\n parseIndentedBlocks: () => parseIndentedBlocks,\n renderNestedMarkdownContent: () => renderNestedMarkdownContent,\n serializeAttributes: () => serializeAttributes\n});\n\n// src/utilities/markdown/attributeUtils.ts\nfunction parseAttributes(attrString) {\n if (!(attrString == null ? void 0 : attrString.trim())) {\n return {};\n }\n const attributes = {};\n const quotedStrings = [];\n const tempString = attrString.replace(/[\"']([^\"']*)[\"']/g, (match) => {\n quotedStrings.push(match);\n return `__QUOTED_${quotedStrings.length - 1}__`;\n });\n const classMatches = tempString.match(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g);\n if (classMatches) {\n const classes = classMatches.map((match) => match.trim().slice(1));\n attributes.class = classes.join(\" \");\n }\n const idMatch = tempString.match(/(?:^|\\s)#([a-zA-Z][\\w-]*)/);\n if (idMatch) {\n attributes.id = idMatch[1];\n }\n const kvRegex = /([a-zA-Z][\\w-]*)\\s*=\\s*(__QUOTED_\\d+__)/g;\n const kvMatches = Array.from(tempString.matchAll(kvRegex));\n kvMatches.forEach(([, key, quotedRef]) => {\n var _a;\n const quotedIndex = parseInt(((_a = quotedRef.match(/__QUOTED_(\\d+)__/)) == null ? void 0 : _a[1]) || \"0\", 10);\n const quotedValue = quotedStrings[quotedIndex];\n if (quotedValue) {\n attributes[key] = quotedValue.slice(1, -1);\n }\n });\n const cleanString = tempString.replace(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g, \"\").replace(/(?:^|\\s)#([a-zA-Z][\\w-]*)/g, \"\").replace(/([a-zA-Z][\\w-]*)\\s*=\\s*__QUOTED_\\d+__/g, \"\").trim();\n if (cleanString) {\n const booleanAttrs = cleanString.split(/\\s+/).filter(Boolean);\n booleanAttrs.forEach((attr) => {\n if (attr.match(/^[a-zA-Z][\\w-]*$/)) {\n attributes[attr] = true;\n }\n });\n }\n return attributes;\n}\nfunction serializeAttributes(attributes) {\n if (!attributes || Object.keys(attributes).length === 0) {\n return \"\";\n }\n const parts = [];\n if (attributes.class) {\n const classes = String(attributes.class).split(/\\s+/).filter(Boolean);\n classes.forEach((cls) => parts.push(`.${cls}`));\n }\n if (attributes.id) {\n parts.push(`#${attributes.id}`);\n }\n Object.entries(attributes).forEach(([key, value]) => {\n if (key === \"class\" || key === \"id\") {\n return;\n }\n if (value === true) {\n parts.push(key);\n } else if (value !== false && value != null) {\n parts.push(`${key}=\"${String(value)}\"`);\n }\n });\n return parts.join(\" \");\n}\n\n// src/utilities/markdown/createAtomBlockMarkdownSpec.ts\nfunction createAtomBlockMarkdownSpec(options) {\n const {\n nodeName,\n name: markdownName,\n parseAttributes: parseAttributes2 = parseAttributes,\n serializeAttributes: serializeAttributes2 = serializeAttributes,\n defaultAttributes = {},\n requiredAttributes = [],\n allowedAttributes\n } = options;\n const blockName = markdownName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((key) => {\n if (key in attrs) {\n filtered[key] = attrs[key];\n }\n });\n return filtered;\n };\n return {\n parseMarkdown: (token, h2) => {\n const attrs = { ...defaultAttributes, ...token.attributes };\n return h2.createNode(nodeName, attrs, []);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"block\",\n start(src) {\n var _a;\n const regex = new RegExp(`^:::${blockName}(?:\\\\s|$)`, \"m\");\n const index = (_a = src.match(regex)) == null ? void 0 : _a.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, _lexer) {\n const regex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*:::(?:\\\\n|$)`);\n const match = src.match(regex);\n if (!match) {\n return void 0;\n }\n const attrString = match[1] || \"\";\n const attributes = parseAttributes2(attrString);\n const missingRequired = requiredAttributes.find((required) => !(required in attributes));\n if (missingRequired) {\n return void 0;\n }\n return {\n type: nodeName,\n raw: match[0],\n attributes\n };\n }\n },\n renderMarkdown: (node) => {\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` {${attrs}}` : \"\";\n return `:::${blockName}${attrString} :::`;\n }\n };\n}\n\n// src/utilities/markdown/createBlockMarkdownSpec.ts\nfunction createBlockMarkdownSpec(options) {\n const {\n nodeName,\n name: markdownName,\n getContent,\n parseAttributes: parseAttributes2 = parseAttributes,\n serializeAttributes: serializeAttributes2 = serializeAttributes,\n defaultAttributes = {},\n content = \"block\",\n allowedAttributes\n } = options;\n const blockName = markdownName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((key) => {\n if (key in attrs) {\n filtered[key] = attrs[key];\n }\n });\n return filtered;\n };\n return {\n parseMarkdown: (token, h2) => {\n let nodeContent;\n if (getContent) {\n const contentResult = getContent(token);\n nodeContent = typeof contentResult === \"string\" ? [{ type: \"text\", text: contentResult }] : contentResult;\n } else if (content === \"block\") {\n nodeContent = h2.parseChildren(token.tokens || []);\n } else {\n nodeContent = h2.parseInline(token.tokens || []);\n }\n const attrs = { ...defaultAttributes, ...token.attributes };\n return h2.createNode(nodeName, attrs, nodeContent);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"block\",\n start(src) {\n var _a;\n const regex = new RegExp(`^:::${blockName}`, \"m\");\n const index = (_a = src.match(regex)) == null ? void 0 : _a.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, lexer) {\n var _a;\n const openingRegex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*\\\\n`);\n const openingMatch = src.match(openingRegex);\n if (!openingMatch) {\n return void 0;\n }\n const [openingTag, attrString = \"\"] = openingMatch;\n const attributes = parseAttributes2(attrString);\n let level = 1;\n const position = openingTag.length;\n let matchedContent = \"\";\n const blockPattern = /^:::([\\w-]*)(\\s.*)?/gm;\n const remaining = src.slice(position);\n blockPattern.lastIndex = 0;\n for (; ; ) {\n const match = blockPattern.exec(remaining);\n if (match === null) {\n break;\n }\n const matchPos = match.index;\n const blockType = match[1];\n if ((_a = match[2]) == null ? void 0 : _a.endsWith(\":::\")) {\n continue;\n }\n if (blockType) {\n level += 1;\n } else {\n level -= 1;\n if (level === 0) {\n const rawContent = remaining.slice(0, matchPos);\n matchedContent = rawContent.trim();\n const fullMatch = src.slice(0, position + matchPos + match[0].length);\n let contentTokens = [];\n if (matchedContent) {\n if (content === \"block\") {\n contentTokens = lexer.blockTokens(rawContent);\n contentTokens.forEach((token) => {\n if (token.text && (!token.tokens || token.tokens.length === 0)) {\n token.tokens = lexer.inlineTokens(token.text);\n }\n });\n while (contentTokens.length > 0) {\n const lastToken = contentTokens[contentTokens.length - 1];\n if (lastToken.type === \"paragraph\" && (!lastToken.text || lastToken.text.trim() === \"\")) {\n contentTokens.pop();\n } else {\n break;\n }\n }\n } else {\n contentTokens = lexer.inlineTokens(matchedContent);\n }\n }\n return {\n type: nodeName,\n raw: fullMatch,\n attributes,\n content: matchedContent,\n tokens: contentTokens\n };\n }\n }\n }\n return void 0;\n }\n },\n renderMarkdown: (node, h2) => {\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` {${attrs}}` : \"\";\n const renderedContent = h2.renderChildren(node.content || [], \"\\n\\n\");\n return `:::${blockName}${attrString}\n\n${renderedContent}\n\n:::`;\n }\n };\n}\n\n// src/utilities/markdown/createInlineMarkdownSpec.ts\nfunction parseShortcodeAttributes(attrString) {\n if (!attrString.trim()) {\n return {};\n }\n const attributes = {};\n const regex = /(\\w+)=(?:\"([^\"]*)\"|'([^']*)')/g;\n let match = regex.exec(attrString);\n while (match !== null) {\n const [, key, doubleQuoted, singleQuoted] = match;\n attributes[key] = doubleQuoted || singleQuoted;\n match = regex.exec(attrString);\n }\n return attributes;\n}\nfunction serializeShortcodeAttributes(attrs) {\n return Object.entries(attrs).filter(([, value]) => value !== void 0 && value !== null).map(([key, value]) => `${key}=\"${value}\"`).join(\" \");\n}\nfunction createInlineMarkdownSpec(options) {\n const {\n nodeName,\n name: shortcodeName,\n getContent,\n parseAttributes: parseAttributes2 = parseShortcodeAttributes,\n serializeAttributes: serializeAttributes2 = serializeShortcodeAttributes,\n defaultAttributes = {},\n selfClosing = false,\n allowedAttributes\n } = options;\n const shortcode = shortcodeName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((attr) => {\n const attrName = typeof attr === \"string\" ? attr : attr.name;\n const skipIfDefault = typeof attr === \"string\" ? void 0 : attr.skipIfDefault;\n if (attrName in attrs) {\n const value = attrs[attrName];\n if (skipIfDefault !== void 0 && value === skipIfDefault) {\n return;\n }\n filtered[attrName] = value;\n }\n });\n return filtered;\n };\n const escapedShortcode = shortcode.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return {\n parseMarkdown: (token, h2) => {\n const attrs = { ...defaultAttributes, ...token.attributes };\n if (selfClosing) {\n return h2.createNode(nodeName, attrs);\n }\n const content = getContent ? getContent(token) : token.content || \"\";\n if (content) {\n return h2.createNode(nodeName, attrs, [h2.createTextNode(content)]);\n }\n return h2.createNode(nodeName, attrs, []);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"inline\",\n start(src) {\n const startPattern = selfClosing ? new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\]`) : new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\][\\\\s\\\\S]*?\\\\[\\\\/${escapedShortcode}\\\\]`);\n const match = src.match(startPattern);\n const index = match == null ? void 0 : match.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, _lexer) {\n const tokenPattern = selfClosing ? new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]`) : new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]([\\\\s\\\\S]*?)\\\\[\\\\/${escapedShortcode}\\\\]`);\n const match = src.match(tokenPattern);\n if (!match) {\n return void 0;\n }\n let content = \"\";\n let attrString = \"\";\n if (selfClosing) {\n const [, attrs] = match;\n attrString = attrs;\n } else {\n const [, attrs, contentMatch] = match;\n attrString = attrs;\n content = contentMatch || \"\";\n }\n const attributes = parseAttributes2(attrString.trim());\n return {\n type: nodeName,\n raw: match[0],\n content: content.trim(),\n attributes\n };\n }\n },\n renderMarkdown: (node) => {\n let content = \"\";\n if (getContent) {\n content = getContent(node);\n } else if (node.content && node.content.length > 0) {\n content = node.content.filter((child) => child.type === \"text\").map((child) => child.text).join(\"\");\n }\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` ${attrs}` : \"\";\n if (selfClosing) {\n return `[${shortcode}${attrString}]`;\n }\n return `[${shortcode}${attrString}]${content}[/${shortcode}]`;\n }\n };\n}\n\n// src/utilities/markdown/parseIndentedBlocks.ts\nfunction parseIndentedBlocks(src, config, lexer) {\n var _a, _b, _c, _d;\n const lines = src.split(\"\\n\");\n const items = [];\n let totalRaw = \"\";\n let i = 0;\n const baseIndentSize = config.baseIndentSize || 2;\n while (i < lines.length) {\n const currentLine = lines[i];\n const itemMatch = currentLine.match(config.itemPattern);\n if (!itemMatch) {\n if (items.length > 0) {\n break;\n } else if (currentLine.trim() === \"\") {\n i += 1;\n totalRaw = `${totalRaw}${currentLine}\n`;\n continue;\n } else {\n return void 0;\n }\n }\n const itemData = config.extractItemData(itemMatch);\n const { indentLevel, mainContent } = itemData;\n totalRaw = `${totalRaw}${currentLine}\n`;\n const itemContent = [mainContent];\n i += 1;\n while (i < lines.length) {\n const nextLine = lines[i];\n if (nextLine.trim() === \"\") {\n const nextNonEmptyIndex = lines.slice(i + 1).findIndex((l) => l.trim() !== \"\");\n if (nextNonEmptyIndex === -1) {\n break;\n }\n const nextNonEmpty = lines[i + 1 + nextNonEmptyIndex];\n const nextIndent2 = ((_b = (_a = nextNonEmpty.match(/^(\\s*)/)) == null ? void 0 : _a[1]) == null ? void 0 : _b.length) || 0;\n if (nextIndent2 > indentLevel) {\n itemContent.push(nextLine);\n totalRaw = `${totalRaw}${nextLine}\n`;\n i += 1;\n continue;\n } else {\n break;\n }\n }\n const nextIndent = ((_d = (_c = nextLine.match(/^(\\s*)/)) == null ? void 0 : _c[1]) == null ? void 0 : _d.length) || 0;\n if (nextIndent > indentLevel) {\n itemContent.push(nextLine);\n totalRaw = `${totalRaw}${nextLine}\n`;\n i += 1;\n } else {\n break;\n }\n }\n let nestedTokens;\n const nestedContent = itemContent.slice(1);\n if (nestedContent.length > 0) {\n const dedentedNested = nestedContent.map((nestedLine) => nestedLine.slice(indentLevel + baseIndentSize)).join(\"\\n\");\n if (dedentedNested.trim()) {\n if (config.customNestedParser) {\n nestedTokens = config.customNestedParser(dedentedNested);\n } else {\n nestedTokens = lexer.blockTokens(dedentedNested);\n }\n }\n }\n const token = config.createToken(itemData, nestedTokens);\n items.push(token);\n }\n if (items.length === 0) {\n return void 0;\n }\n return {\n items,\n raw: totalRaw\n };\n}\n\n// src/utilities/markdown/renderNestedMarkdownContent.ts\nfunction renderNestedMarkdownContent(node, h2, prefixOrGenerator, ctx) {\n if (!node || !Array.isArray(node.content)) {\n return \"\";\n }\n const prefix = typeof prefixOrGenerator === \"function\" ? prefixOrGenerator(ctx) : prefixOrGenerator;\n const [content, ...children] = node.content;\n const mainContent = h2.renderChildren([content]);\n let output = `${prefix}${mainContent}`;\n if (children && children.length > 0) {\n children.forEach((child, index) => {\n var _a, _b;\n const childContent = (_b = (_a = h2.renderChild) == null ? void 0 : _a.call(h2, child, index + 1)) != null ? _b : h2.renderChildren([child]);\n if (childContent !== void 0 && childContent !== null) {\n const indentedChild = childContent.split(\"\\n\").map((line) => line ? h2.indent(line) : h2.indent(\"\")).join(\"\\n\");\n output += child.type === \"paragraph\" ? `\n\n${indentedChild}` : `\n${indentedChild}`;\n }\n });\n }\n return output;\n}\n\n// src/utilities/nodeViewPositionRegistry.ts\nvar positionUpdateRegistries = /* @__PURE__ */ new WeakMap();\nfunction schedulePositionCheck(editor, callback) {\n let registry = positionUpdateRegistries.get(editor);\n if (!registry) {\n const newRegistry = {\n callbacks: /* @__PURE__ */ new Set(),\n rafId: null,\n handler: () => {\n if (newRegistry.rafId !== null) {\n cancelAnimationFrame(newRegistry.rafId);\n }\n newRegistry.rafId = requestAnimationFrame(() => {\n newRegistry.rafId = null;\n newRegistry.callbacks.forEach((cb) => cb());\n });\n }\n };\n positionUpdateRegistries.set(editor, newRegistry);\n editor.on(\"update\", newRegistry.handler);\n registry = newRegistry;\n }\n registry.callbacks.add(callback);\n}\nfunction cancelPositionCheck(editor, callback) {\n const registry = positionUpdateRegistries.get(editor);\n if (!registry) {\n return;\n }\n registry.callbacks.delete(callback);\n if (registry.callbacks.size === 0) {\n if (registry.rafId !== null) {\n cancelAnimationFrame(registry.rafId);\n }\n editor.off(\"update\", registry.handler);\n positionUpdateRegistries.delete(editor);\n }\n}\n\n// src/MarkView.ts\nfunction updateMarkViewAttributes(checkMark, editor, attrs = {}) {\n const { state } = editor;\n const { doc, tr } = state;\n const thisMark = checkMark;\n doc.descendants((node, pos) => {\n const from = tr.mapping.map(pos);\n const to = tr.mapping.map(pos) + node.nodeSize;\n let foundMark = null;\n node.marks.forEach((mark) => {\n if (mark !== thisMark) {\n return false;\n }\n foundMark = mark;\n });\n if (!foundMark) {\n return;\n }\n let needsUpdate = false;\n Object.keys(attrs).forEach((k) => {\n if (attrs[k] !== foundMark.attrs[k]) {\n needsUpdate = true;\n }\n });\n if (needsUpdate) {\n const updatedMark = checkMark.type.create({\n ...checkMark.attrs,\n ...attrs\n });\n tr.removeMark(from, to, checkMark.type);\n tr.addMark(from, to, updatedMark);\n }\n });\n if (tr.docChanged) {\n editor.view.dispatch(tr);\n }\n}\nvar MarkView = class {\n constructor(component, props, options) {\n this.component = component;\n this.editor = props.editor;\n this.options = { ...options };\n this.mark = props.mark;\n this.HTMLAttributes = props.HTMLAttributes;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n /**\n * Update the attributes of the mark in the document.\n * @param attrs The attributes to update.\n */\n updateAttributes(attrs, checkMark) {\n updateMarkViewAttributes(checkMark || this.mark, this.editor, attrs);\n }\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n};\n\n// src/Node.ts\nvar Node3 = class _Node extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"node\";\n }\n /**\n * Create a new Node instance\n * @param config - Node configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Node(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/NodeView.ts\nimport { NodeSelection as NodeSelection5 } from \"@tiptap/pm/state\";\nvar NodeView = class {\n constructor(component, props, options) {\n this.isDragging = false;\n this.component = component;\n this.editor = props.editor;\n this.options = {\n stopEvent: null,\n ignoreMutation: null,\n ...options\n };\n this.extension = props.extension;\n this.node = props.node;\n this.decorations = props.decorations;\n this.innerDecorations = props.innerDecorations;\n this.view = props.view;\n this.HTMLAttributes = props.HTMLAttributes;\n this.getPos = props.getPos;\n this.mount();\n }\n mount() {\n return;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n onDragStart(event) {\n var _a, _b, _c, _d, _e, _f, _g;\n const { view } = this.editor;\n const target = event.target;\n const dragHandle = target.nodeType === 3 ? (_a = target.parentElement) == null ? void 0 : _a.closest(\"[data-drag-handle]\") : target.closest(\"[data-drag-handle]\");\n if (!this.dom || ((_b = this.contentDOM) == null ? void 0 : _b.contains(target)) || !dragHandle) {\n return;\n }\n let x = 0;\n let y = 0;\n if (this.dom !== dragHandle) {\n const domBox = this.dom.getBoundingClientRect();\n const handleBox = dragHandle.getBoundingClientRect();\n const offsetX = (_d = event.offsetX) != null ? _d : (_c = event.nativeEvent) == null ? void 0 : _c.offsetX;\n const offsetY = (_f = event.offsetY) != null ? _f : (_e = event.nativeEvent) == null ? void 0 : _e.offsetY;\n x = handleBox.x - domBox.x + offsetX;\n y = handleBox.y - domBox.y + offsetY;\n }\n const clonedNode = this.dom.cloneNode(true);\n try {\n const domBox = this.dom.getBoundingClientRect();\n clonedNode.style.width = `${Math.round(domBox.width)}px`;\n clonedNode.style.height = `${Math.round(domBox.height)}px`;\n clonedNode.style.boxSizing = \"border-box\";\n clonedNode.style.pointerEvents = \"none\";\n } catch {\n }\n let dragImageWrapper = null;\n try {\n dragImageWrapper = document.createElement(\"div\");\n dragImageWrapper.style.position = \"absolute\";\n dragImageWrapper.style.top = \"-9999px\";\n dragImageWrapper.style.left = \"-9999px\";\n dragImageWrapper.style.pointerEvents = \"none\";\n dragImageWrapper.appendChild(clonedNode);\n document.body.appendChild(dragImageWrapper);\n (_g = event.dataTransfer) == null ? void 0 : _g.setDragImage(clonedNode, x, y);\n } finally {\n if (dragImageWrapper) {\n setTimeout(() => {\n try {\n dragImageWrapper == null ? void 0 : dragImageWrapper.remove();\n } catch {\n }\n }, 0);\n }\n }\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return;\n }\n const selection = NodeSelection5.create(view.state.doc, pos);\n const transaction = view.state.tr.setSelection(selection);\n view.dispatch(transaction);\n }\n stopEvent(event) {\n var _a;\n if (!this.dom) {\n return false;\n }\n if (typeof this.options.stopEvent === \"function\") {\n return this.options.stopEvent({ event });\n }\n const target = event.target;\n const isInElement = this.dom.contains(target) && !((_a = this.contentDOM) == null ? void 0 : _a.contains(target));\n if (!isInElement) {\n return false;\n }\n const isDragEvent = event.type.startsWith(\"drag\");\n const isDragOverEnterEvent = event.type === \"dragover\" || event.type === \"dragenter\";\n const isDropEvent = event.type === \"drop\";\n const isInput = [\"INPUT\", \"BUTTON\", \"SELECT\", \"TEXTAREA\"].includes(target.tagName) || target.isContentEditable;\n if (isInput && !isDropEvent && !isDragEvent) {\n return true;\n }\n const { isEditable } = this.editor;\n const { isDragging } = this;\n const isDraggable = !!this.node.type.spec.draggable;\n const isSelectable = NodeSelection5.isSelectable(this.node);\n const isCopyEvent = event.type === \"copy\";\n const isPasteEvent = event.type === \"paste\";\n const isCutEvent = event.type === \"cut\";\n const isClickEvent = event.type === \"mousedown\";\n if (!isDraggable && isSelectable && isDragEvent && event.target === this.dom) {\n event.preventDefault();\n }\n if (isDraggable && isDragEvent && !isDragging && event.target === this.dom) {\n event.preventDefault();\n return false;\n }\n if (isDraggable && isEditable && !isDragging && isClickEvent) {\n const dragHandle = target.closest(\"[data-drag-handle]\");\n const isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\n if (isValidDragHandle) {\n this.isDragging = true;\n document.addEventListener(\n \"dragend\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"drop\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"mouseup\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n }\n }\n if (isDragging || isDragOverEnterEvent || isDropEvent || isCopyEvent || isPasteEvent || isCutEvent || isClickEvent && isSelectable) {\n return false;\n }\n return true;\n }\n /**\n * Called when a DOM [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) or a selection change happens within the view.\n * @return `false` if the editor should re-read the selection or re-parse the range around the mutation\n * @return `true` if it can safely be ignored.\n */\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n /**\n * Update the attributes of the prosemirror node.\n */\n updateAttributes(attributes) {\n this.editor.commands.command(({ tr }) => {\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return false;\n }\n tr.setNodeMarkup(pos, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n return true;\n });\n }\n /**\n * Delete the node.\n */\n deleteNode() {\n const from = this.getPos();\n if (typeof from !== \"number\") {\n return;\n }\n const to = from + this.node.nodeSize;\n this.editor.commands.deleteRange({ from, to });\n }\n};\n\n// src/pasteRules/markPasteRule.ts\nfunction markPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match, pasteEvent }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n let markEnd = range.to;\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n const isMatchAtEndOfText = match.index !== void 0 && match.input !== void 0 && match.index + match[0].length >= match.input.length;\n if (!isMatchAtEndOfText) {\n tr.removeStoredMark(config.type);\n }\n }\n }\n });\n}\n\n// src/pasteRules/nodePasteRule.ts\nfunction nodePasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler({ match, chain, range, pasteEvent }) {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n const content = callOrReturn(config.getContent, void 0, attributes);\n if (attributes === false || attributes === null) {\n return null;\n }\n const node = { type: config.type.name, attrs: attributes };\n if (content) {\n node.content = content;\n }\n if (match.input) {\n chain().deleteRange(range).insertContentAt(range.from, node);\n }\n }\n });\n}\n\n// src/pasteRules/textPasteRule.ts\nfunction textPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n }\n });\n}\n\n// src/Tracker.ts\nvar Tracker = class {\n constructor(transaction) {\n this.transaction = transaction;\n this.currentStep = this.transaction.steps.length;\n }\n map(position) {\n let deleted = false;\n const mappedPosition = this.transaction.steps.slice(this.currentStep).reduce((newPosition, step) => {\n const mapResult = step.getMap().mapResult(newPosition);\n if (mapResult.deleted) {\n deleted = true;\n }\n return mapResult.pos;\n }, position);\n return {\n position: mappedPosition,\n deleted\n };\n }\n};\nexport {\n CommandManager,\n Editor,\n Extendable,\n Extension,\n Fragment6 as Fragment,\n InputRule,\n MappablePosition,\n Mark,\n MarkView,\n Node3 as Node,\n NodePos,\n NodeView,\n PasteRule,\n ResizableNodeView,\n ResizableNodeview,\n Tracker,\n callOrReturn,\n canInsertNode,\n cancelPositionCheck,\n combineTransactionSteps,\n commands_exports as commands,\n createAtomBlockMarkdownSpec,\n createBlockMarkdownSpec,\n createChainableState,\n createDocument,\n h as createElement,\n createInlineMarkdownSpec,\n createMappablePosition,\n createNodeFromContent,\n createStyleTag,\n decodeHtmlEntities,\n defaultBlockAt,\n deleteProps,\n elementFromString,\n encodeHtmlEntities,\n escapeForRegEx,\n extensions_exports as extensions,\n findChildren,\n findChildrenInRange,\n findDuplicates,\n findParentNode,\n findParentNodeClosestToPos,\n flattenExtensions,\n fromString,\n generateHTML,\n generateJSON,\n generateText,\n getAttributes,\n getAttributesFromExtensions,\n getChangedRanges,\n getDebugJSON,\n getExtensionField,\n getHTMLFromFragment,\n getMarkAttributes,\n getMarkRange,\n getMarkType,\n getMarksBetween,\n getNodeAtPosition,\n getNodeAttributes,\n getNodeType,\n getRenderedAttributes,\n getSchema,\n getSchemaByResolvedExtensions,\n getSchemaTypeByName,\n getSchemaTypeNameByName,\n getSplittedAttributes,\n getStyleProperty,\n getText,\n getTextBetween,\n getTextContentFromNodes,\n getTextSerializersFromSchema,\n getUpdatedPosition,\n h,\n injectExtensionAttributesToParseRule,\n inputRulesPlugin,\n isActive,\n isAndroid,\n isAtEndOfNode,\n isAtStartOfNode,\n isEmptyObject,\n isExtensionRulesEnabled,\n isFirefox,\n isFunction,\n isList,\n isMacOS,\n isMarkActive,\n isNodeActive,\n isNodeEmpty,\n isNodeSelection,\n isNodeViewSelected,\n isNumber,\n isPlainObject,\n isRegExp,\n isSafari,\n isString,\n isTextSelection,\n isiOS,\n markInputRule,\n markPasteRule,\n markdown_exports as markdown,\n mergeAttributes,\n mergeDeep,\n minMax,\n nodeInputRule,\n nodePasteRule,\n objectIncludes,\n parseAttributes,\n parseIndentedBlocks,\n pasteRulesPlugin,\n posToDOMRect,\n removeDuplicates,\n renderNestedMarkdownContent,\n resolveExtensions,\n resolveFocusPosition,\n rewriteUnknownContent,\n schedulePositionCheck,\n selectionToInsertionEnd,\n serializeAttributes,\n sortExtensions,\n splitExtensions,\n textInputRule,\n textPasteRule,\n textblockTypeInputRule,\n updateMarkViewAttributes,\n wrappingInputRule\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/helpers/createChainableState.ts\nfunction createChainableState(config) {\n const { state, transaction } = config;\n let { selection } = transaction;\n let { doc } = transaction;\n let { storedMarks } = transaction;\n return {\n ...state,\n apply: state.apply.bind(state),\n applyTransaction: state.applyTransaction.bind(state),\n plugins: state.plugins,\n schema: state.schema,\n reconfigure: state.reconfigure.bind(state),\n toJSON: state.toJSON.bind(state),\n get storedMarks() {\n return storedMarks;\n },\n get selection() {\n return selection;\n },\n get doc() {\n return doc;\n },\n get tr() {\n selection = transaction.selection;\n doc = transaction.doc;\n storedMarks = transaction.storedMarks;\n return transaction;\n }\n };\n}\n\n// src/CommandManager.ts\nvar CommandManager = class {\n constructor(props) {\n this.editor = props.editor;\n this.rawCommands = this.editor.extensionManager.commands;\n this.customState = props.state;\n }\n get hasCustomState() {\n return !!this.customState;\n }\n get state() {\n return this.customState || this.editor.state;\n }\n get commands() {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const { tr } = state;\n const props = this.buildProps(tr);\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const method = (...args) => {\n const callback = command2(...args)(props);\n if (!tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callback;\n };\n return [name, method];\n })\n );\n }\n get chain() {\n return () => this.createChain();\n }\n get can() {\n return () => this.createCan();\n }\n createChain(startTr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const callbacks = [];\n const hasStartTransaction = !!startTr;\n const tr = startTr || state.tr;\n const run3 = () => {\n if (!hasStartTransaction && shouldDispatch && !tr.getMeta(\"preventDispatch\") && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callbacks.every((callback) => callback === true);\n };\n const chain = {\n ...Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n const chainedCommand = (...args) => {\n const props = this.buildProps(tr, shouldDispatch);\n const callback = command2(...args)(props);\n callbacks.push(callback);\n return chain;\n };\n return [name, chainedCommand];\n })\n ),\n run: run3\n };\n return chain;\n }\n createCan(startTr) {\n const { rawCommands, state } = this;\n const dispatch = false;\n const tr = startTr || state.tr;\n const props = this.buildProps(tr, dispatch);\n const formattedCommands = Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)({ ...props, dispatch: void 0 })];\n })\n );\n return {\n ...formattedCommands,\n chain: () => this.createChain(tr, dispatch)\n };\n }\n buildProps(tr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const props = {\n tr,\n editor,\n view,\n state: createChainableState({\n state,\n transaction: tr\n }),\n dispatch: shouldDispatch ? () => void 0 : void 0,\n chain: () => this.createChain(tr, shouldDispatch),\n can: () => this.createCan(tr),\n get commands() {\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command2]) => {\n return [name, (...args) => command2(...args)(props)];\n })\n );\n }\n };\n return props;\n }\n};\n\n// src/commands/index.ts\nvar commands_exports = {};\n__export(commands_exports, {\n blur: () => blur,\n clearContent: () => clearContent,\n clearNodes: () => clearNodes,\n command: () => command,\n createParagraphNear: () => createParagraphNear,\n cut: () => cut,\n deleteCurrentNode: () => deleteCurrentNode,\n deleteNode: () => deleteNode,\n deleteRange: () => deleteRange,\n deleteSelection: () => deleteSelection,\n enter: () => enter,\n exitCode: () => exitCode,\n extendMarkRange: () => extendMarkRange,\n first: () => first,\n focus: () => focus,\n forEach: () => forEach,\n insertContent: () => insertContent,\n insertContentAt: () => insertContentAt,\n joinBackward: () => joinBackward,\n joinDown: () => joinDown,\n joinForward: () => joinForward,\n joinItemBackward: () => joinItemBackward,\n joinItemForward: () => joinItemForward,\n joinTextblockBackward: () => joinTextblockBackward,\n joinTextblockForward: () => joinTextblockForward,\n joinUp: () => joinUp,\n keyboardShortcut: () => keyboardShortcut,\n lift: () => lift,\n liftEmptyBlock: () => liftEmptyBlock,\n liftListItem: () => liftListItem,\n newlineInCode: () => newlineInCode,\n resetAttributes: () => resetAttributes,\n scrollIntoView: () => scrollIntoView,\n selectAll: () => selectAll,\n selectNodeBackward: () => selectNodeBackward,\n selectNodeForward: () => selectNodeForward,\n selectParentNode: () => selectParentNode,\n selectTextblockEnd: () => selectTextblockEnd,\n selectTextblockStart: () => selectTextblockStart,\n setContent: () => setContent,\n setMark: () => setMark,\n setMeta: () => setMeta,\n setNode: () => setNode,\n setNodeSelection: () => setNodeSelection,\n setTextDirection: () => setTextDirection,\n setTextSelection: () => setTextSelection,\n sinkListItem: () => sinkListItem,\n splitBlock: () => splitBlock,\n splitListItem: () => splitListItem,\n toggleList: () => toggleList,\n toggleMark: () => toggleMark,\n toggleNode: () => toggleNode,\n toggleWrap: () => toggleWrap,\n undoInputRule: () => undoInputRule,\n unsetAllMarks: () => unsetAllMarks,\n unsetMark: () => unsetMark,\n unsetTextDirection: () => unsetTextDirection,\n updateAttributes: () => updateAttributes,\n wrapIn: () => wrapIn,\n wrapInList: () => wrapInList\n});\n\n// src/commands/blur.ts\nvar blur = () => ({ editor, view }) => {\n requestAnimationFrame(() => {\n var _a;\n if (!editor.isDestroyed) {\n ;\n view.dom.blur();\n (_a = window == null ? void 0 : window.getSelection()) == null ? void 0 : _a.removeAllRanges();\n }\n });\n return true;\n};\n\n// src/commands/clearContent.ts\nvar clearContent = (emitUpdate = true) => ({ commands }) => {\n return commands.setContent(\"\", { emitUpdate });\n};\n\n// src/commands/clearNodes.ts\nimport { liftTarget } from \"@tiptap/pm/transform\";\nvar clearNodes = () => ({ state, tr, dispatch }) => {\n const { selection } = tr;\n const { ranges } = selection;\n if (!dispatch) {\n return true;\n }\n ranges.forEach(({ $from, $to }) => {\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.isText) {\n return;\n }\n const { doc, mapping } = tr;\n const $mappedFrom = doc.resolve(mapping.map(pos));\n const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize));\n const nodeRange = $mappedFrom.blockRange($mappedTo);\n if (!nodeRange) {\n return;\n }\n const targetLiftDepth = liftTarget(nodeRange);\n if (node.type.isTextblock) {\n const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());\n tr.setNodeMarkup(nodeRange.start, defaultType);\n }\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n });\n });\n return true;\n};\n\n// src/commands/command.ts\nvar command = (fn) => (props) => {\n return fn(props);\n};\n\n// src/commands/createParagraphNear.ts\nimport { createParagraphNear as originalCreateParagraphNear } from \"@tiptap/pm/commands\";\nvar createParagraphNear = () => ({ state, dispatch }) => {\n return originalCreateParagraphNear(state, dispatch);\n};\n\n// src/commands/cut.ts\nimport { TextSelection } from \"@tiptap/pm/state\";\nvar cut = (originRange, targetPos) => ({ editor, tr }) => {\n const { state } = editor;\n const contentSlice = state.doc.slice(originRange.from, originRange.to);\n tr.deleteRange(originRange.from, originRange.to);\n const newPos = tr.mapping.map(targetPos);\n tr.insert(newPos, contentSlice.content);\n tr.setSelection(new TextSelection(tr.doc.resolve(Math.max(newPos - 1, 0))));\n return true;\n};\n\n// src/commands/deleteCurrentNode.ts\nvar deleteCurrentNode = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const currentNode = selection.$anchor.node();\n if (currentNode.content.size > 0) {\n return false;\n }\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === currentNode.type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/helpers/getNodeType.ts\nfunction getNodeType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.nodes[nameOrType]) {\n throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.nodes[nameOrType];\n }\n return nameOrType;\n}\n\n// src/commands/deleteNode.ts\nvar deleteNode = (typeOrName) => ({ tr, state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/deleteRange.ts\nvar deleteRange = (range) => ({ tr, dispatch }) => {\n const { from, to } = range;\n if (dispatch) {\n tr.delete(from, to);\n }\n return true;\n};\n\n// src/commands/deleteSelection.ts\nimport { deleteSelection as originalDeleteSelection } from \"@tiptap/pm/commands\";\nvar deleteSelection = () => ({ state, dispatch }) => {\n return originalDeleteSelection(state, dispatch);\n};\n\n// src/commands/enter.ts\nvar enter = () => ({ commands }) => {\n return commands.keyboardShortcut(\"Enter\");\n};\n\n// src/commands/exitCode.ts\nimport { exitCode as originalExitCode } from \"@tiptap/pm/commands\";\nvar exitCode = () => ({ state, dispatch }) => {\n return originalExitCode(state, dispatch);\n};\n\n// src/commands/extendMarkRange.ts\nimport { TextSelection as TextSelection2 } from \"@tiptap/pm/state\";\n\n// src/utilities/isRegExp.ts\nfunction isRegExp(value) {\n return Object.prototype.toString.call(value) === \"[object RegExp]\";\n}\n\n// src/utilities/objectIncludes.ts\nfunction objectIncludes(object1, object2, options = { strict: true }) {\n const keys = Object.keys(object2);\n if (!keys.length) {\n return true;\n }\n return keys.every((key) => {\n if (options.strict) {\n return object2[key] === object1[key];\n }\n if (isRegExp(object2[key])) {\n return object2[key].test(object1[key]);\n }\n return object2[key] === object1[key];\n });\n}\n\n// src/helpers/getMarkRange.ts\nfunction findMarkInSet(marks, type, attributes = {}) {\n return marks.find((item) => {\n return item.type === type && objectIncludes(\n // Only check equality for the attributes that are provided\n Object.fromEntries(Object.keys(attributes).map((k) => [k, item.attrs[k]])),\n attributes\n );\n });\n}\nfunction isMarkInSet(marks, type, attributes = {}) {\n return !!findMarkInSet(marks, type, attributes);\n}\nfunction getMarkRange($pos, type, attributes) {\n if (!$pos || !type) {\n return;\n }\n let start = $pos.parent.childAfter($pos.parentOffset);\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n start = $pos.parent.childBefore($pos.parentOffset);\n }\n if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {\n return;\n }\n if (!attributes) {\n const firstMark = start.node.marks.find((mark2) => mark2.type === type);\n if (firstMark) {\n attributes = firstMark.attrs;\n }\n }\n const mark = findMarkInSet([...start.node.marks], type, attributes);\n if (!mark) {\n return;\n }\n let startIndex = start.index;\n let startPos = $pos.start() + start.offset;\n let endIndex = startIndex + 1;\n let endPos = startPos + start.node.nodeSize;\n while (startIndex > 0 && isMarkInSet([...$pos.parent.child(startIndex - 1).marks], type, attributes)) {\n startIndex -= 1;\n startPos -= $pos.parent.child(startIndex).nodeSize;\n }\n while (endIndex < $pos.parent.childCount && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\n endPos += $pos.parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n return {\n from: startPos,\n to: endPos\n };\n}\n\n// src/helpers/getMarkType.ts\nfunction getMarkType(nameOrType, schema) {\n if (typeof nameOrType === \"string\") {\n if (!schema.marks[nameOrType]) {\n throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.marks[nameOrType];\n }\n return nameOrType;\n}\n\n// src/commands/extendMarkRange.ts\nvar extendMarkRange = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n const type = getMarkType(typeOrName, state.schema);\n const { doc, selection } = tr;\n const { $from, from, to } = selection;\n if (dispatch) {\n const range = getMarkRange($from, type, attributes);\n if (range && range.from <= from && range.to >= to) {\n const newSelection = TextSelection2.create(doc, range.from, range.to);\n tr.setSelection(newSelection);\n }\n }\n return true;\n};\n\n// src/commands/first.ts\nvar first = (commands) => (props) => {\n const items = typeof commands === \"function\" ? commands(props) : commands;\n for (let i = 0; i < items.length; i += 1) {\n if (items[i](props)) {\n return true;\n }\n }\n return false;\n};\n\n// src/helpers/isTextSelection.ts\nimport { TextSelection as TextSelection3 } from \"@tiptap/pm/state\";\nfunction isTextSelection(value) {\n return value instanceof TextSelection3;\n}\n\n// src/helpers/resolveFocusPosition.ts\nimport { Selection, TextSelection as TextSelection4 } from \"@tiptap/pm/state\";\n\n// src/utilities/minMax.ts\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\n\n// src/helpers/resolveFocusPosition.ts\nfunction resolveFocusPosition(doc, position = null) {\n if (!position) {\n return null;\n }\n const selectionAtStart = Selection.atStart(doc);\n const selectionAtEnd = Selection.atEnd(doc);\n if (position === \"start\" || position === true) {\n return selectionAtStart;\n }\n if (position === \"end\") {\n return selectionAtEnd;\n }\n const minPos = selectionAtStart.from;\n const maxPos = selectionAtEnd.to;\n if (position === \"all\") {\n return TextSelection4.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos));\n }\n return TextSelection4.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));\n}\n\n// src/utilities/isAndroid.ts\nfunction isAndroid() {\n return navigator.platform === \"Android\" || /android/i.test(navigator.userAgent);\n}\n\n// src/utilities/isiOS.ts\nfunction isiOS() {\n return [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) || // iPad on iOS 13 detection\n navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document;\n}\n\n// src/utilities/isSafari.ts\nfunction isSafari() {\n return typeof navigator !== \"undefined\" ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n}\n\n// src/commands/focus.ts\nvar focus = (position = null, options = {}) => ({ editor, view, tr, dispatch }) => {\n options = {\n scrollIntoView: true,\n ...options\n };\n const delayedFocus = () => {\n if (isiOS() || isAndroid()) {\n ;\n view.dom.focus();\n }\n if (isSafari() && !isiOS() && !isAndroid()) {\n ;\n view.dom.focus({ preventScroll: true });\n }\n requestAnimationFrame(() => {\n if (!editor.isDestroyed) {\n view.focus();\n if (options == null ? void 0 : options.scrollIntoView) {\n editor.commands.scrollIntoView();\n }\n }\n });\n };\n try {\n if (view.hasFocus() && position === null || position === false) {\n return true;\n }\n } catch {\n return false;\n }\n if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\n delayedFocus();\n return true;\n }\n const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection;\n const isSameSelection = editor.state.selection.eq(selection);\n if (dispatch) {\n if (!isSameSelection) {\n tr.setSelection(selection);\n }\n if (isSameSelection && tr.storedMarks) {\n tr.setStoredMarks(tr.storedMarks);\n }\n delayedFocus();\n }\n return true;\n};\n\n// src/commands/forEach.ts\nvar forEach = (items, fn) => (props) => {\n return items.every((item, index) => fn(item, { ...props, index }));\n};\n\n// src/commands/insertContent.ts\nvar insertContent = (value, options) => ({ tr, commands }) => {\n return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options);\n};\n\n// src/commands/insertContentAt.ts\nimport { Fragment as Fragment2 } from \"@tiptap/pm/model\";\n\n// src/helpers/createNodeFromContent.ts\nimport { DOMParser, Fragment, Node as ProseMirrorNode, Schema } from \"@tiptap/pm/model\";\n\n// src/utilities/elementFromString.ts\nvar removeWhitespaces = (node) => {\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i];\n if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\n node.removeChild(child);\n } else if (child.nodeType === 1) {\n removeWhitespaces(child);\n }\n }\n return node;\n};\nfunction elementFromString(value) {\n if (typeof window === \"undefined\") {\n throw new Error(\"[tiptap error]: there is no window object available, so this function cannot be used\");\n }\n const wrappedValue = `<body>${value}</body>`;\n const html = new window.DOMParser().parseFromString(wrappedValue, \"text/html\").body;\n return removeWhitespaces(html);\n}\n\n// src/helpers/createNodeFromContent.ts\nfunction createNodeFromContent(content, schema, options) {\n if (content instanceof ProseMirrorNode || content instanceof Fragment) {\n return content;\n }\n options = {\n slice: true,\n parseOptions: {},\n ...options\n };\n const isJSONContent = typeof content === \"object\" && content !== null;\n const isTextContent = typeof content === \"string\";\n if (isJSONContent) {\n try {\n const isArrayContent = Array.isArray(content) && content.length > 0;\n if (isArrayContent) {\n return Fragment.fromArray(content.map((item) => schema.nodeFromJSON(item)));\n }\n const node = schema.nodeFromJSON(content);\n if (options.errorOnInvalidContent) {\n node.check();\n }\n return node;\n } catch (error) {\n if (options.errorOnInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid JSON content\", { cause: error });\n }\n console.warn(\"[tiptap warn]: Invalid content.\", \"Passed value:\", content, \"Error:\", error);\n return createNodeFromContent(\"\", schema, options);\n }\n }\n if (isTextContent) {\n if (options.errorOnInvalidContent) {\n let hasInvalidContent = false;\n let invalidContent = \"\";\n const contentCheckSchema = new Schema({\n topNode: schema.spec.topNode,\n marks: schema.spec.marks,\n // Prosemirror's schemas are executed such that: the last to execute, matches last\n // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle\n nodes: schema.spec.nodes.append({\n __tiptap__private__unknown__catch__all__node: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [\n {\n tag: \"*\",\n getAttrs: (e) => {\n hasInvalidContent = true;\n invalidContent = typeof e === \"string\" ? e : e.outerHTML;\n return null;\n }\n }\n ]\n }\n })\n });\n if (options.slice) {\n DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);\n } else {\n DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);\n }\n if (options.errorOnInvalidContent && hasInvalidContent) {\n throw new Error(\"[tiptap error]: Invalid HTML content\", {\n cause: new Error(`Invalid element found: ${invalidContent}`)\n });\n }\n }\n const parser = DOMParser.fromSchema(schema);\n if (options.slice) {\n return parser.parseSlice(elementFromString(content), options.parseOptions).content;\n }\n return parser.parse(elementFromString(content), options.parseOptions);\n }\n return createNodeFromContent(\"\", schema, options);\n}\n\n// src/helpers/selectionToInsertionEnd.ts\nimport { Selection as Selection2 } from \"@tiptap/pm/state\";\nimport { ReplaceAroundStep, ReplaceStep } from \"@tiptap/pm/transform\";\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n const last = tr.steps.length - 1;\n if (last < startLen) {\n return;\n }\n const step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\n return;\n }\n const map = tr.mapping.maps[last];\n let end = 0;\n map.forEach((_from, _to, _newFrom, newTo) => {\n if (end === 0) {\n end = newTo;\n }\n });\n tr.setSelection(Selection2.near(tr.doc.resolve(end), bias));\n}\n\n// src/commands/insertContentAt.ts\nvar isFragment = (nodeOrFragment) => {\n return !(\"type\" in nodeOrFragment);\n};\nvar insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => {\n var _a;\n if (dispatch) {\n options = {\n parseOptions: editor.options.parseOptions,\n updateSelection: true,\n applyInputRules: false,\n applyPasteRules: false,\n ...options\n };\n let content;\n const emitContentError = (error) => {\n editor.emit(\"contentError\", {\n editor,\n error,\n disableCollaboration: () => {\n if (\"collaboration\" in editor.storage && typeof editor.storage.collaboration === \"object\" && editor.storage.collaboration) {\n ;\n editor.storage.collaboration.isDisabled = true;\n }\n }\n });\n };\n const parseOptions = {\n preserveWhitespace: \"full\",\n ...options.parseOptions\n };\n if (!options.errorOnInvalidContent && !editor.options.enableContentCheck && editor.options.emitContentError) {\n try {\n createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: true\n });\n } catch (e) {\n emitContentError(e);\n }\n }\n try {\n content = createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: (_a = options.errorOnInvalidContent) != null ? _a : editor.options.enableContentCheck\n });\n } catch (e) {\n emitContentError(e);\n return false;\n }\n let { from, to } = typeof position === \"number\" ? { from: position, to: position } : { from: position.from, to: position.to };\n let isOnlyTextContent = true;\n let isOnlyBlockContent = true;\n const nodes = isFragment(content) ? content : [content];\n nodes.forEach((node) => {\n node.check();\n isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;\n isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;\n });\n if (from === to && isOnlyBlockContent) {\n const { parent } = tr.doc.resolve(from);\n const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;\n if (isEmptyTextBlock) {\n from -= 1;\n to += 1;\n }\n }\n let newContent;\n if (isOnlyTextContent) {\n if (Array.isArray(value)) {\n newContent = value.map((v) => v.text || \"\").join(\"\");\n } else if (value instanceof Fragment2) {\n let text = \"\";\n value.forEach((node) => {\n if (node.text) {\n text += node.text;\n }\n });\n newContent = text;\n } else if (typeof value === \"object\" && !!value && !!value.text) {\n newContent = value.text;\n } else {\n newContent = value;\n }\n tr.insertText(newContent, from, to);\n } else {\n newContent = content;\n const $from = tr.doc.resolve(from);\n const $fromNode = $from.node();\n const fromSelectionAtStart = $from.parentOffset === 0;\n const isTextSelection2 = $fromNode.isText || $fromNode.isTextblock;\n const hasContent = $fromNode.content.size > 0;\n if (fromSelectionAtStart && isTextSelection2 && hasContent && isOnlyBlockContent) {\n from = Math.max(0, from - 1);\n }\n tr.replaceWith(from, to, newContent);\n }\n if (options.updateSelection) {\n selectionToInsertionEnd(tr, tr.steps.length - 1, -1);\n }\n if (options.applyInputRules) {\n tr.setMeta(\"applyInputRules\", { from, text: newContent });\n }\n if (options.applyPasteRules) {\n tr.setMeta(\"applyPasteRules\", { from, text: newContent });\n }\n }\n return true;\n};\n\n// src/commands/join.ts\nimport {\n joinBackward as originalJoinBackward,\n joinDown as originalJoinDown,\n joinForward as originalJoinForward,\n joinUp as originalJoinUp\n} from \"@tiptap/pm/commands\";\nvar joinUp = () => ({ state, dispatch }) => {\n return originalJoinUp(state, dispatch);\n};\nvar joinDown = () => ({ state, dispatch }) => {\n return originalJoinDown(state, dispatch);\n};\nvar joinBackward = () => ({ state, dispatch }) => {\n return originalJoinBackward(state, dispatch);\n};\nvar joinForward = () => ({ state, dispatch }) => {\n return originalJoinForward(state, dispatch);\n};\n\n// src/commands/joinItemBackward.ts\nimport { joinPoint } from \"@tiptap/pm/transform\";\nvar joinItemBackward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinItemForward.ts\nimport { joinPoint as joinPoint2 } from \"@tiptap/pm/transform\";\nvar joinItemForward = () => ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint2(state.doc, state.selection.$from.pos, 1);\n if (point === null || point === void 0) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n } catch {\n return false;\n }\n};\n\n// src/commands/joinTextblockBackward.ts\nimport { joinTextblockBackward as originalCommand } from \"@tiptap/pm/commands\";\nvar joinTextblockBackward = () => ({ state, dispatch }) => {\n return originalCommand(state, dispatch);\n};\n\n// src/commands/joinTextblockForward.ts\nimport { joinTextblockForward as originalCommand2 } from \"@tiptap/pm/commands\";\nvar joinTextblockForward = () => ({ state, dispatch }) => {\n return originalCommand2(state, dispatch);\n};\n\n// src/utilities/isMacOS.ts\nfunction isMacOS() {\n return typeof navigator !== \"undefined\" ? /Mac/.test(navigator.platform) : false;\n}\n\n// src/commands/keyboardShortcut.ts\nfunction normalizeKeyName(name) {\n const parts = name.split(/-(?!$)/);\n let result = parts[parts.length - 1];\n if (result === \"Space\") {\n result = \" \";\n }\n let alt;\n let ctrl;\n let shift;\n let meta;\n for (let i = 0; i < parts.length - 1; i += 1) {\n const mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) {\n meta = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else if (/^mod$/i.test(mod)) {\n if (isiOS() || isMacOS()) {\n meta = true;\n } else {\n ctrl = true;\n }\n } else {\n throw new Error(`Unrecognized modifier name: ${mod}`);\n }\n }\n if (alt) {\n result = `Alt-${result}`;\n }\n if (ctrl) {\n result = `Ctrl-${result}`;\n }\n if (meta) {\n result = `Meta-${result}`;\n }\n if (shift) {\n result = `Shift-${result}`;\n }\n return result;\n}\nvar keyboardShortcut = (name) => ({ editor, view, tr, dispatch }) => {\n const keys = normalizeKeyName(name).split(/-(?!$)/);\n const key = keys.find((item) => ![\"Alt\", \"Ctrl\", \"Meta\", \"Shift\"].includes(item));\n const event = new KeyboardEvent(\"keydown\", {\n key: key === \"Space\" ? \" \" : key,\n altKey: keys.includes(\"Alt\"),\n ctrlKey: keys.includes(\"Ctrl\"),\n metaKey: keys.includes(\"Meta\"),\n shiftKey: keys.includes(\"Shift\"),\n bubbles: true,\n cancelable: true\n });\n const capturedTransaction = editor.captureTransaction(() => {\n view.someProp(\"handleKeyDown\", (f) => f(view, event));\n });\n capturedTransaction == null ? void 0 : capturedTransaction.steps.forEach((step) => {\n const newStep = step.map(tr.mapping);\n if (newStep && dispatch) {\n tr.maybeStep(newStep);\n }\n });\n return true;\n};\n\n// src/commands/lift.ts\nimport { lift as originalLift } from \"@tiptap/pm/commands\";\n\n// src/helpers/isNodeActive.ts\nfunction isNodeActive(state, typeOrName, attributes = {}) {\n const { from, to, empty } = state.selection;\n const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;\n const nodeRanges = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n nodeRanges.push({\n node,\n from: relativeFrom,\n to: relativeTo\n });\n });\n const selectionRange = to - from;\n const matchedNodeRanges = nodeRanges.filter((nodeRange) => {\n if (!type) {\n return true;\n }\n return type.name === nodeRange.node.type.name;\n }).filter((nodeRange) => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));\n if (empty) {\n return !!matchedNodeRanges.length;\n }\n const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);\n return range >= selectionRange;\n}\n\n// src/commands/lift.ts\nvar lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (!isActive2) {\n return false;\n }\n return originalLift(state, dispatch);\n};\n\n// src/commands/liftEmptyBlock.ts\nimport { liftEmptyBlock as originalLiftEmptyBlock } from \"@tiptap/pm/commands\";\nvar liftEmptyBlock = () => ({ state, dispatch }) => {\n return originalLiftEmptyBlock(state, dispatch);\n};\n\n// src/commands/liftListItem.ts\nimport { liftListItem as originalLiftListItem } from \"@tiptap/pm/schema-list\";\nvar liftListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalLiftListItem(type)(state, dispatch);\n};\n\n// src/commands/newlineInCode.ts\nimport { newlineInCode as originalNewlineInCode } from \"@tiptap/pm/commands\";\nvar newlineInCode = () => ({ state, dispatch }) => {\n return originalNewlineInCode(state, dispatch);\n};\n\n// src/helpers/getSchemaTypeNameByName.ts\nfunction getSchemaTypeNameByName(name, schema) {\n if (schema.nodes[name]) {\n return \"node\";\n }\n if (schema.marks[name]) {\n return \"mark\";\n }\n return null;\n}\n\n// src/utilities/deleteProps.ts\nfunction deleteProps(obj, propOrProps) {\n const props = typeof propOrProps === \"string\" ? [propOrProps] : propOrProps;\n return Object.keys(obj).reduce((newObj, prop) => {\n if (!props.includes(prop)) {\n newObj[prop] = obj[prop];\n }\n return newObj;\n }, {});\n}\n\n// src/commands/resetAttributes.ts\nvar resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n let canReset = false;\n tr.selection.ranges.forEach((range) => {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n canReset = true;\n if (dispatch) {\n tr.setNodeMarkup(pos, void 0, deleteProps(node.attrs, attributes));\n }\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n canReset = true;\n if (dispatch) {\n tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));\n }\n }\n });\n }\n });\n });\n return canReset;\n};\n\n// src/commands/scrollIntoView.ts\nvar scrollIntoView = () => ({ tr, dispatch }) => {\n if (dispatch) {\n tr.scrollIntoView();\n }\n return true;\n};\n\n// src/commands/selectAll.ts\nimport { AllSelection } from \"@tiptap/pm/state\";\nvar selectAll = () => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = new AllSelection(tr.doc);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/selectNodeBackward.ts\nimport { selectNodeBackward as originalSelectNodeBackward } from \"@tiptap/pm/commands\";\nvar selectNodeBackward = () => ({ state, dispatch }) => {\n return originalSelectNodeBackward(state, dispatch);\n};\n\n// src/commands/selectNodeForward.ts\nimport { selectNodeForward as originalSelectNodeForward } from \"@tiptap/pm/commands\";\nvar selectNodeForward = () => ({ state, dispatch }) => {\n return originalSelectNodeForward(state, dispatch);\n};\n\n// src/commands/selectParentNode.ts\nimport { selectParentNode as originalSelectParentNode } from \"@tiptap/pm/commands\";\nvar selectParentNode = () => ({ state, dispatch }) => {\n return originalSelectParentNode(state, dispatch);\n};\n\n// src/commands/selectTextblockEnd.ts\nimport { selectTextblockEnd as originalSelectTextblockEnd } from \"@tiptap/pm/commands\";\nvar selectTextblockEnd = () => ({ state, dispatch }) => {\n return originalSelectTextblockEnd(state, dispatch);\n};\n\n// src/commands/selectTextblockStart.ts\nimport { selectTextblockStart as originalSelectTextblockStart } from \"@tiptap/pm/commands\";\nvar selectTextblockStart = () => ({ state, dispatch }) => {\n return originalSelectTextblockStart(state, dispatch);\n};\n\n// src/helpers/createDocument.ts\nfunction createDocument(content, schema, parseOptions = {}, options = {}) {\n return createNodeFromContent(content, schema, {\n slice: false,\n parseOptions,\n errorOnInvalidContent: options.errorOnInvalidContent\n });\n}\n\n// src/commands/setContent.ts\nvar setContent = (content, { errorOnInvalidContent, emitUpdate = true, parseOptions = {} } = {}) => ({ editor, tr, dispatch, commands }) => {\n const { doc } = tr;\n if (parseOptions.preserveWhitespace !== \"full\") {\n const document2 = createDocument(content, editor.schema, parseOptions, {\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n if (dispatch) {\n tr.replaceWith(0, doc.content.size, document2).setMeta(\"preventUpdate\", !emitUpdate);\n }\n return true;\n }\n if (dispatch) {\n tr.setMeta(\"preventUpdate\", !emitUpdate);\n }\n return commands.insertContentAt({ from: 0, to: doc.content.size }, content, {\n parseOptions,\n errorOnInvalidContent: errorOnInvalidContent != null ? errorOnInvalidContent : editor.options.enableContentCheck\n });\n};\n\n// src/helpers/getMarkAttributes.ts\nfunction getMarkAttributes(state, typeOrName) {\n const type = getMarkType(typeOrName, state.schema);\n const { from, to, empty } = state.selection;\n const marks = [];\n if (empty) {\n if (state.storedMarks) {\n marks.push(...state.storedMarks);\n }\n marks.push(...state.selection.$head.marks());\n } else {\n state.doc.nodesBetween(from, to, (node) => {\n marks.push(...node.marks);\n });\n }\n const mark = marks.find((markItem) => markItem.type.name === type.name);\n if (!mark) {\n return {};\n }\n return { ...mark.attrs };\n}\n\n// src/helpers/combineTransactionSteps.ts\nimport { Transform } from \"@tiptap/pm/transform\";\nfunction combineTransactionSteps(oldDoc, transactions) {\n const transform = new Transform(oldDoc);\n transactions.forEach((transaction) => {\n transaction.steps.forEach((step) => {\n transform.step(step);\n });\n });\n return transform;\n}\n\n// src/helpers/defaultBlockAt.ts\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i += 1) {\n const { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs()) {\n return type;\n }\n }\n return null;\n}\n\n// src/helpers/findChildren.ts\nfunction findChildren(node, predicate) {\n const nodesWithPos = [];\n node.descendants((child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findChildrenInRange.ts\nfunction findChildrenInRange(node, range, predicate) {\n const nodesWithPos = [];\n node.nodesBetween(range.from, range.to, (child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos\n });\n }\n });\n return nodesWithPos;\n}\n\n// src/helpers/findParentNodeClosestToPos.ts\nfunction findParentNodeClosestToPos($pos, predicate) {\n for (let i = $pos.depth; i > 0; i -= 1) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node\n };\n }\n }\n}\n\n// src/helpers/findParentNode.ts\nfunction findParentNode(predicate) {\n return (selection) => findParentNodeClosestToPos(selection.$from, predicate);\n}\n\n// src/helpers/getExtensionField.ts\nfunction getExtensionField(extension, field, context) {\n if (extension.config[field] === void 0 && extension.parent) {\n return getExtensionField(extension.parent, field, context);\n }\n if (typeof extension.config[field] === \"function\") {\n const value = extension.config[field].bind({\n ...context,\n parent: extension.parent ? getExtensionField(extension.parent, field, context) : null\n });\n return value;\n }\n return extension.config[field];\n}\n\n// src/helpers/flattenExtensions.ts\nfunction flattenExtensions(extensions) {\n return extensions.map((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addExtensions = getExtensionField(extension, \"addExtensions\", context);\n if (addExtensions) {\n return [extension, ...flattenExtensions(addExtensions())];\n }\n return extension;\n }).flat(10);\n}\n\n// src/helpers/generateHTML.ts\nimport { Node } from \"@tiptap/pm/model\";\n\n// src/helpers/getHTMLFromFragment.ts\nimport { DOMSerializer } from \"@tiptap/pm/model\";\nfunction getHTMLFromFragment(fragment, schema) {\n const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment);\n const temporaryDocument = document.implementation.createHTMLDocument();\n const container = temporaryDocument.createElement(\"div\");\n container.appendChild(documentFragment);\n return container.innerHTML;\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nimport { Schema as Schema2 } from \"@tiptap/pm/model\";\n\n// src/utilities/isFunction.ts\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/utilities/callOrReturn.ts\nfunction callOrReturn(value, context = void 0, ...props) {\n if (isFunction(value)) {\n if (context) {\n return value.bind(context)(...props);\n }\n return value(...props);\n }\n return value;\n}\n\n// src/utilities/isEmptyObject.ts\nfunction isEmptyObject(value = {}) {\n return Object.keys(value).length === 0 && value.constructor === Object;\n}\n\n// src/helpers/splitExtensions.ts\nfunction splitExtensions(extensions) {\n const baseExtensions = extensions.filter((extension) => extension.type === \"extension\");\n const nodeExtensions = extensions.filter((extension) => extension.type === \"node\");\n const markExtensions = extensions.filter((extension) => extension.type === \"mark\");\n return {\n baseExtensions,\n nodeExtensions,\n markExtensions\n };\n}\n\n// src/helpers/getAttributesFromExtensions.ts\nfunction getAttributesFromExtensions(extensions) {\n const extensionAttributes = [];\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];\n const defaultAttribute = {\n default: null,\n validate: void 0,\n rendered: true,\n renderHTML: null,\n parseHTML: null,\n keepOnSplit: true,\n isRequired: false\n };\n const nodeExtensionTypes = nodeExtensions.filter((ext) => ext.name !== \"text\").map((ext) => ext.name);\n const markExtensionTypes = markExtensions.map((ext) => ext.name);\n const allExtensionTypes = [...nodeExtensionTypes, ...markExtensionTypes];\n extensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n extensions: nodeAndMarkExtensions\n };\n const addGlobalAttributes = getExtensionField(\n extension,\n \"addGlobalAttributes\",\n context\n );\n if (!addGlobalAttributes) {\n return;\n }\n const globalAttributes = addGlobalAttributes();\n globalAttributes.forEach((globalAttribute) => {\n let resolvedTypes;\n if (Array.isArray(globalAttribute.types)) {\n resolvedTypes = globalAttribute.types;\n } else if (globalAttribute.types === \"*\") {\n resolvedTypes = allExtensionTypes;\n } else if (globalAttribute.types === \"nodes\") {\n resolvedTypes = nodeExtensionTypes;\n } else if (globalAttribute.types === \"marks\") {\n resolvedTypes = markExtensionTypes;\n } else {\n resolvedTypes = [];\n }\n resolvedTypes.forEach((type) => {\n Object.entries(globalAttribute.attributes).forEach(([name, attribute]) => {\n extensionAttributes.push({\n type,\n name,\n attribute: {\n ...defaultAttribute,\n ...attribute\n }\n });\n });\n });\n });\n });\n nodeAndMarkExtensions.forEach((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const addAttributes = getExtensionField(\n extension,\n \"addAttributes\",\n context\n );\n if (!addAttributes) {\n return;\n }\n const attributes = addAttributes();\n Object.entries(attributes).forEach(([name, attribute]) => {\n const mergedAttr = {\n ...defaultAttribute,\n ...attribute\n };\n if (typeof (mergedAttr == null ? void 0 : mergedAttr.default) === \"function\") {\n mergedAttr.default = mergedAttr.default();\n }\n if ((mergedAttr == null ? void 0 : mergedAttr.isRequired) && (mergedAttr == null ? void 0 : mergedAttr.default) === void 0) {\n delete mergedAttr.default;\n }\n extensionAttributes.push({\n type: extension.name,\n name,\n attribute: mergedAttr\n });\n });\n });\n return extensionAttributes;\n}\n\n// src/utilities/mergeAttributes.ts\nfunction splitStyleDeclarations(styles) {\n const result = [];\n let current = \"\";\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let parenDepth = 0;\n const length = styles.length;\n for (let i = 0; i < length; i += 1) {\n const char = styles[i];\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n current += char;\n continue;\n }\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n current += char;\n continue;\n }\n if (!inSingleQuote && !inDoubleQuote) {\n if (char === \"(\") {\n parenDepth += 1;\n current += char;\n continue;\n }\n if (char === \")\" && parenDepth > 0) {\n parenDepth -= 1;\n current += char;\n continue;\n }\n if (char === \";\" && parenDepth === 0) {\n result.push(current);\n current = \"\";\n continue;\n }\n }\n current += char;\n }\n if (current) {\n result.push(current);\n }\n return result;\n}\nfunction parseStyleEntries(styles) {\n const pairs = [];\n const declarations = splitStyleDeclarations(styles || \"\");\n const numDeclarations = declarations.length;\n for (let i = 0; i < numDeclarations; i += 1) {\n const declaration = declarations[i];\n const firstColonIndex = declaration.indexOf(\":\");\n if (firstColonIndex === -1) {\n continue;\n }\n const property = declaration.slice(0, firstColonIndex).trim();\n const value = declaration.slice(firstColonIndex + 1).trim();\n if (property && value) {\n pairs.push([property, value]);\n }\n }\n return pairs;\n}\nfunction mergeAttributes(...objects) {\n return objects.filter((item) => !!item).reduce((items, item) => {\n const mergedAttributes = { ...items };\n Object.entries(item).forEach(([key, value]) => {\n const exists = mergedAttributes[key];\n if (!exists) {\n mergedAttributes[key] = value;\n return;\n }\n if (key === \"class\") {\n const valueClasses = value ? String(value).split(\" \") : [];\n const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(\" \") : [];\n const insertClasses = valueClasses.filter((valueClass) => !existingClasses.includes(valueClass));\n mergedAttributes[key] = [...existingClasses, ...insertClasses].join(\" \");\n } else if (key === \"style\") {\n const styleMap = new Map([...parseStyleEntries(mergedAttributes[key]), ...parseStyleEntries(value)]);\n mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join(\"; \");\n } else {\n mergedAttributes[key] = value;\n }\n });\n return mergedAttributes;\n }, {});\n}\n\n// src/helpers/getRenderedAttributes.ts\nfunction getRenderedAttributes(nodeOrMark, extensionAttributes) {\n return extensionAttributes.filter((attribute) => attribute.type === nodeOrMark.type.name).filter((item) => item.attribute.rendered).map((item) => {\n if (!item.attribute.renderHTML) {\n return {\n [item.name]: nodeOrMark.attrs[item.name]\n };\n }\n return item.attribute.renderHTML(nodeOrMark.attrs) || {};\n }).reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});\n}\n\n// src/utilities/fromString.ts\nfunction fromString(value) {\n if (typeof value !== \"string\") {\n return value;\n }\n if (value.match(/^[+-]?(?:\\d*\\.)?\\d+$/)) {\n return Number(value);\n }\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n return value;\n}\n\n// src/helpers/injectExtensionAttributesToParseRule.ts\nfunction injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {\n if (\"style\" in parseRule) {\n return parseRule;\n }\n return {\n ...parseRule,\n getAttrs: (node) => {\n const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;\n if (oldAttributes === false) {\n return false;\n }\n const newAttributes = extensionAttributes.reduce((items, item) => {\n const value = item.attribute.parseHTML ? item.attribute.parseHTML(node) : fromString(node.getAttribute(item.name));\n if (value === null || value === void 0) {\n return items;\n }\n return {\n ...items,\n [item.name]: value\n };\n }, {});\n return { ...oldAttributes, ...newAttributes };\n }\n };\n}\n\n// src/helpers/getSchemaByResolvedExtensions.ts\nfunction cleanUpSchemaItem(data) {\n return Object.fromEntries(\n // @ts-ignore\n Object.entries(data).filter(([key, value]) => {\n if (key === \"attrs\" && isEmptyObject(value)) {\n return false;\n }\n return value !== null && value !== void 0;\n })\n );\n}\nfunction buildAttributeSpec(extensionAttribute) {\n var _a, _b;\n const spec = {};\n if (!((_a = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _a.isRequired) && \"default\" in ((extensionAttribute == null ? void 0 : extensionAttribute.attribute) || {})) {\n spec.default = extensionAttribute.attribute.default;\n }\n if (((_b = extensionAttribute == null ? void 0 : extensionAttribute.attribute) == null ? void 0 : _b.validate) !== void 0) {\n spec.validate = extensionAttribute.attribute.validate;\n }\n return [extensionAttribute.name, spec];\n}\nfunction getSchemaByResolvedExtensions(extensions, editor) {\n var _a;\n const allAttributes = getAttributesFromExtensions(extensions);\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const topNode = (_a = nodeExtensions.find((extension) => getExtensionField(extension, \"topNode\"))) == null ? void 0 : _a.name;\n const nodes = Object.fromEntries(\n nodeExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraNodeFields = extensions.reduce((fields, e) => {\n const extendNodeSchema = getExtensionField(e, \"extendNodeSchema\", context);\n return {\n ...fields,\n ...extendNodeSchema ? extendNodeSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraNodeFields,\n content: callOrReturn(getExtensionField(extension, \"content\", context)),\n marks: callOrReturn(getExtensionField(extension, \"marks\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n inline: callOrReturn(getExtensionField(extension, \"inline\", context)),\n atom: callOrReturn(getExtensionField(extension, \"atom\", context)),\n selectable: callOrReturn(getExtensionField(extension, \"selectable\", context)),\n draggable: callOrReturn(getExtensionField(extension, \"draggable\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n whitespace: callOrReturn(getExtensionField(extension, \"whitespace\", context)),\n linebreakReplacement: callOrReturn(\n getExtensionField(extension, \"linebreakReplacement\", context)\n ),\n defining: callOrReturn(getExtensionField(extension, \"defining\", context)),\n isolating: callOrReturn(getExtensionField(extension, \"isolating\", context)),\n attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (node) => renderHTML({\n node,\n HTMLAttributes: getRenderedAttributes(node, extensionAttributes)\n });\n }\n const renderText = getExtensionField(extension, \"renderText\", context);\n if (renderText) {\n schema.toText = renderText;\n }\n return [extension.name, schema];\n })\n );\n const marks = Object.fromEntries(\n markExtensions.map((extension) => {\n const extensionAttributes = allAttributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor\n };\n const extraMarkFields = extensions.reduce((fields, e) => {\n const extendMarkSchema = getExtensionField(e, \"extendMarkSchema\", context);\n return {\n ...fields,\n ...extendMarkSchema ? extendMarkSchema(extension) : {}\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraMarkFields,\n inclusive: callOrReturn(getExtensionField(extension, \"inclusive\", context)),\n excludes: callOrReturn(getExtensionField(extension, \"excludes\", context)),\n group: callOrReturn(getExtensionField(extension, \"group\", context)),\n spanning: callOrReturn(getExtensionField(extension, \"spanning\", context)),\n code: callOrReturn(getExtensionField(extension, \"code\", context)),\n attrs: Object.fromEntries(extensionAttributes.map(buildAttributeSpec))\n });\n const parseHTML = callOrReturn(getExtensionField(extension, \"parseHTML\", context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(\n (parseRule) => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)\n );\n }\n const renderHTML = getExtensionField(extension, \"renderHTML\", context);\n if (renderHTML) {\n schema.toDOM = (mark) => renderHTML({\n mark,\n HTMLAttributes: getRenderedAttributes(mark, extensionAttributes)\n });\n }\n return [extension.name, schema];\n })\n );\n return new Schema2({\n topNode,\n nodes,\n marks\n });\n}\n\n// src/utilities/findDuplicates.ts\nfunction findDuplicates(items) {\n const filtered = items.filter((el, index) => items.indexOf(el) !== index);\n return Array.from(new Set(filtered));\n}\n\n// src/helpers/sortExtensions.ts\nfunction sortExtensions(extensions) {\n const defaultPriority = 100;\n return extensions.sort((a, b) => {\n const priorityA = getExtensionField(a, \"priority\") || defaultPriority;\n const priorityB = getExtensionField(b, \"priority\") || defaultPriority;\n if (priorityA > priorityB) {\n return -1;\n }\n if (priorityA < priorityB) {\n return 1;\n }\n return 0;\n });\n}\n\n// src/helpers/resolveExtensions.ts\nfunction resolveExtensions(extensions) {\n const resolvedExtensions = sortExtensions(flattenExtensions(extensions));\n const duplicatedNames = findDuplicates(resolvedExtensions.map((extension) => extension.name));\n if (duplicatedNames.length) {\n console.warn(\n `[tiptap warn]: Duplicate extension names found: [${duplicatedNames.map((item) => `'${item}'`).join(\", \")}]. This can lead to issues.`\n );\n }\n return resolvedExtensions;\n}\n\n// src/helpers/getSchema.ts\nfunction getSchema(extensions, editor) {\n const resolvedExtensions = resolveExtensions(extensions);\n return getSchemaByResolvedExtensions(resolvedExtensions, editor);\n}\n\n// src/helpers/generateHTML.ts\nfunction generateHTML(doc, extensions) {\n const schema = getSchema(extensions);\n const contentNode = Node.fromJSON(schema, doc);\n return getHTMLFromFragment(contentNode.content, schema);\n}\n\n// src/helpers/generateJSON.ts\nimport { DOMParser as DOMParser2 } from \"@tiptap/pm/model\";\nfunction generateJSON(html, extensions) {\n const schema = getSchema(extensions);\n const dom = elementFromString(html);\n return DOMParser2.fromSchema(schema).parse(dom).toJSON();\n}\n\n// src/helpers/generateText.ts\nimport { Node as Node2 } from \"@tiptap/pm/model\";\n\n// src/helpers/getTextBetween.ts\nfunction getTextBetween(startNode, range, options) {\n const { from, to } = range;\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n let text = \"\";\n startNode.nodesBetween(from, to, (node, pos, parent, index) => {\n var _a;\n if (node.isBlock && pos > from) {\n text += blockSeparator;\n }\n const textSerializer = textSerializers == null ? void 0 : textSerializers[node.type.name];\n if (textSerializer) {\n if (parent) {\n text += textSerializer({\n node,\n pos,\n parent,\n index,\n range\n });\n }\n return false;\n }\n if (node.isText) {\n text += (_a = node == null ? void 0 : node.text) == null ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos);\n }\n });\n return text;\n}\n\n// src/helpers/getText.ts\nfunction getText(node, options) {\n const range = {\n from: 0,\n to: node.content.size\n };\n return getTextBetween(node, range, options);\n}\n\n// src/helpers/getTextSerializersFromSchema.ts\nfunction getTextSerializersFromSchema(schema) {\n return Object.fromEntries(\n Object.entries(schema.nodes).filter(([, node]) => node.spec.toText).map(([name, node]) => [name, node.spec.toText])\n );\n}\n\n// src/helpers/generateText.ts\nfunction generateText(doc, extensions, options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n const schema = getSchema(extensions);\n const contentNode = Node2.fromJSON(schema, doc);\n return getText(contentNode, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(schema),\n ...textSerializers\n }\n });\n}\n\n// src/helpers/getNodeAttributes.ts\nfunction getNodeAttributes(state, typeOrName) {\n const type = getNodeType(typeOrName, state.schema);\n const { from, to } = state.selection;\n const nodes = [];\n state.doc.nodesBetween(from, to, (node2) => {\n nodes.push(node2);\n });\n const node = nodes.reverse().find((nodeItem) => nodeItem.type.name === type.name);\n if (!node) {\n return {};\n }\n return { ...node.attrs };\n}\n\n// src/helpers/getAttributes.ts\nfunction getAttributes(state, typeOrName) {\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (schemaType === \"node\") {\n return getNodeAttributes(state, typeOrName);\n }\n if (schemaType === \"mark\") {\n return getMarkAttributes(state, typeOrName);\n }\n return {};\n}\n\n// src/utilities/removeDuplicates.ts\nfunction removeDuplicates(array, by = JSON.stringify) {\n const seen = {};\n return array.filter((item) => {\n const key = by(item);\n return Object.prototype.hasOwnProperty.call(seen, key) ? false : seen[key] = true;\n });\n}\n\n// src/helpers/getChangedRanges.ts\nfunction simplifyChangedRanges(changes) {\n const uniqueChanges = removeDuplicates(changes);\n return uniqueChanges.length === 1 ? uniqueChanges : uniqueChanges.filter((change, index) => {\n const rest = uniqueChanges.filter((_, i) => i !== index);\n return !rest.some((otherChange) => {\n return change.oldRange.from >= otherChange.oldRange.from && change.oldRange.to <= otherChange.oldRange.to && change.newRange.from >= otherChange.newRange.from && change.newRange.to <= otherChange.newRange.to;\n });\n });\n}\nfunction getChangedRanges(transform) {\n const { mapping, steps } = transform;\n const changes = [];\n mapping.maps.forEach((stepMap, index) => {\n const ranges = [];\n if (!stepMap.ranges.length) {\n const { from, to } = steps[index];\n if (from === void 0 || to === void 0) {\n return;\n }\n ranges.push({ from, to });\n } else {\n stepMap.forEach((from, to) => {\n ranges.push({ from, to });\n });\n }\n ranges.forEach(({ from, to }) => {\n const newStart = mapping.slice(index).map(from, -1);\n const newEnd = mapping.slice(index).map(to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n changes.push({\n oldRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n }\n });\n });\n });\n return simplifyChangedRanges(changes);\n}\n\n// src/helpers/getDebugJSON.ts\nfunction getDebugJSON(node, startOffset = 0) {\n const isTopNode = node.type === node.type.schema.topNodeType;\n const increment = isTopNode ? 0 : 1;\n const from = startOffset;\n const to = from + node.nodeSize;\n const marks = node.marks.map((mark) => {\n const output2 = {\n type: mark.type.name\n };\n if (Object.keys(mark.attrs).length) {\n output2.attrs = { ...mark.attrs };\n }\n return output2;\n });\n const attrs = { ...node.attrs };\n const output = {\n type: node.type.name,\n from,\n to\n };\n if (Object.keys(attrs).length) {\n output.attrs = attrs;\n }\n if (marks.length) {\n output.marks = marks;\n }\n if (node.content.childCount) {\n output.content = [];\n node.forEach((child, offset) => {\n var _a;\n (_a = output.content) == null ? void 0 : _a.push(getDebugJSON(child, startOffset + offset + increment));\n });\n }\n if (node.text) {\n output.text = node.text;\n }\n return output;\n}\n\n// src/helpers/getMarksBetween.ts\nfunction getMarksBetween(from, to, doc) {\n const marks = [];\n if (from === to) {\n doc.resolve(from).marks().forEach((mark) => {\n const $pos = doc.resolve(from);\n const range = getMarkRange($pos, mark.type);\n if (!range) {\n return;\n }\n marks.push({\n mark,\n ...range\n });\n });\n } else {\n doc.nodesBetween(from, to, (node, pos) => {\n if (!node || (node == null ? void 0 : node.nodeSize) === void 0) {\n return;\n }\n marks.push(\n ...node.marks.map((mark) => ({\n from: pos,\n to: pos + node.nodeSize,\n mark\n }))\n );\n });\n }\n return marks;\n}\n\n// src/helpers/getNodeAtPosition.ts\nvar getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {\n const $pos = state.doc.resolve(pos);\n let currentDepth = maxDepth;\n let node = null;\n while (currentDepth > 0 && node === null) {\n const currentNode = $pos.node(currentDepth);\n if ((currentNode == null ? void 0 : currentNode.type.name) === typeOrName) {\n node = currentNode;\n } else {\n currentDepth -= 1;\n }\n }\n return [node, currentDepth];\n};\n\n// src/helpers/getSchemaTypeByName.ts\nfunction getSchemaTypeByName(name, schema) {\n return schema.nodes[name] || schema.marks[name] || null;\n}\n\n// src/helpers/getSplittedAttributes.ts\nfunction getSplittedAttributes(extensionAttributes, typeName, attributes) {\n return Object.fromEntries(\n Object.entries(attributes).filter(([name]) => {\n const extensionAttribute = extensionAttributes.find((item) => {\n return item.type === typeName && item.name === name;\n });\n if (!extensionAttribute) {\n return false;\n }\n return extensionAttribute.attribute.keepOnSplit;\n })\n );\n}\n\n// src/helpers/getTextContentFromNodes.ts\nvar getTextContentFromNodes = ($from, maxMatch = 500) => {\n let textBefore = \"\";\n const sliceEndPos = $from.parentOffset;\n $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {\n var _a, _b;\n const chunk = ((_b = (_a = node.type.spec).toText) == null ? void 0 : _b.call(_a, {\n node,\n pos,\n parent,\n index\n })) || node.textContent || \"%leaf%\";\n textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos));\n });\n return textBefore;\n};\n\n// src/helpers/isMarkActive.ts\nfunction isMarkActive(state, typeOrName, attributes = {}) {\n const { empty, ranges } = state.selection;\n const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;\n if (empty) {\n return !!(state.storedMarks || state.selection.$from.marks()).filter((mark) => {\n if (!type) {\n return true;\n }\n return type.name === mark.type.name;\n }).find((mark) => objectIncludes(mark.attrs, attributes, { strict: false }));\n }\n let selectionRange = 0;\n const markRanges = [];\n ranges.forEach(({ $from, $to }) => {\n const from = $from.pos;\n const to = $to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (type && node.inlineContent && !node.type.allowsMarkType(type)) {\n return false;\n }\n if (!node.isText && !node.marks.length) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n const range2 = relativeTo - relativeFrom;\n selectionRange += range2;\n markRanges.push(\n ...node.marks.map((mark) => ({\n mark,\n from: relativeFrom,\n to: relativeTo\n }))\n );\n });\n });\n if (selectionRange === 0) {\n return false;\n }\n const matchedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return type.name === markRange.mark.type.name;\n }).filter((markRange) => objectIncludes(markRange.mark.attrs, attributes, { strict: false })).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const excludedRange = markRanges.filter((markRange) => {\n if (!type) {\n return true;\n }\n return markRange.mark.type !== type && markRange.mark.type.excludes(type);\n }).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;\n return range >= selectionRange;\n}\n\n// src/helpers/isActive.ts\nfunction isActive(state, name, attributes = {}) {\n if (!name) {\n return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);\n }\n const schemaType = getSchemaTypeNameByName(name, state.schema);\n if (schemaType === \"node\") {\n return isNodeActive(state, name, attributes);\n }\n if (schemaType === \"mark\") {\n return isMarkActive(state, name, attributes);\n }\n return false;\n}\n\n// src/helpers/isAtEndOfNode.ts\nvar isAtEndOfNode = (state, nodeType) => {\n const { $from, $to, $anchor } = state.selection;\n if (nodeType) {\n const parentNode = findParentNode((node) => node.type.name === nodeType)(state.selection);\n if (!parentNode) {\n return false;\n }\n const $parentPos = state.doc.resolve(parentNode.pos + 1);\n if ($anchor.pos + 1 === $parentPos.end()) {\n return true;\n }\n return false;\n }\n if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isAtStartOfNode.ts\nvar isAtStartOfNode = (state) => {\n const { $from, $to } = state.selection;\n if ($from.parentOffset > 0 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\n// src/helpers/isExtensionRulesEnabled.ts\nfunction isExtensionRulesEnabled(extension, enabled) {\n if (Array.isArray(enabled)) {\n return enabled.some((enabledExtension) => {\n const name = typeof enabledExtension === \"string\" ? enabledExtension : enabledExtension.name;\n return name === extension.name;\n });\n }\n return enabled;\n}\n\n// src/helpers/isList.ts\nfunction isList(name, extensions) {\n const { nodeExtensions } = splitExtensions(extensions);\n const extension = nodeExtensions.find((item) => item.name === name);\n if (!extension) {\n return false;\n }\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n const group = callOrReturn(getExtensionField(extension, \"group\", context));\n if (typeof group !== \"string\") {\n return false;\n }\n return group.split(\" \").includes(\"list\");\n}\n\n// src/helpers/isNodeEmpty.ts\nfunction isNodeEmpty(node, {\n checkChildren = true,\n ignoreWhitespace = false\n} = {}) {\n var _a;\n if (ignoreWhitespace) {\n if (node.type.name === \"hardBreak\") {\n return true;\n }\n if (node.isText) {\n return !/\\S/.test((_a = node.text) != null ? _a : \"\");\n }\n }\n if (node.isText) {\n return !node.text;\n }\n if (node.isAtom || node.isLeaf) {\n return false;\n }\n if (node.content.childCount === 0) {\n return true;\n }\n if (checkChildren) {\n let isContentEmpty = true;\n node.content.forEach((childNode) => {\n if (isContentEmpty === false) {\n return;\n }\n if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {\n isContentEmpty = false;\n }\n });\n return isContentEmpty;\n }\n return false;\n}\n\n// src/helpers/isNodeSelection.ts\nimport { NodeSelection } from \"@tiptap/pm/state\";\nfunction isNodeSelection(value) {\n return value instanceof NodeSelection;\n}\n\n// src/helpers/isNodeViewSelected.ts\nfunction isNodeViewSelected({\n selection,\n pos,\n nodeSize,\n selectedOnTextSelection = false\n}) {\n const { from, to } = selection;\n if (from <= pos && to >= pos + nodeSize) {\n return true;\n }\n if (selectedOnTextSelection && isTextSelection(selection) && from > pos && to < pos + nodeSize) {\n return true;\n }\n return false;\n}\n\n// src/helpers/MappablePosition.ts\nvar MappablePosition = class _MappablePosition {\n constructor(position) {\n this.position = position;\n }\n /**\n * Creates a MappablePosition from a JSON object.\n */\n static fromJSON(json) {\n return new _MappablePosition(json.position);\n }\n /**\n * Converts the MappablePosition to a JSON object.\n */\n toJSON() {\n return {\n position: this.position\n };\n }\n};\nfunction getUpdatedPosition(position, transaction) {\n const mapResult = transaction.mapping.mapResult(position.position);\n return {\n position: new MappablePosition(mapResult.pos),\n mapResult\n };\n}\nfunction createMappablePosition(position) {\n return new MappablePosition(position);\n}\n\n// src/helpers/posToDOMRect.ts\nfunction posToDOMRect(view, from, to) {\n const minPos = 0;\n const maxPos = view.state.doc.content.size;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const start = view.coordsAtPos(resolvedFrom);\n const end = view.coordsAtPos(resolvedEnd, -1);\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n const width = right - left;\n const height = bottom - top;\n const x = left;\n const y = top;\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y\n };\n return {\n ...data,\n toJSON: () => data\n };\n}\n\n// src/helpers/rewriteUnknownContent.ts\nfunction rewriteUnknownContentInner({\n json,\n validMarks,\n validNodes,\n options,\n rewrittenContent = []\n}) {\n if (json.marks && Array.isArray(json.marks)) {\n json.marks = json.marks.filter((mark) => {\n const name = typeof mark === \"string\" ? mark : mark.type;\n if (validMarks.has(name)) {\n return true;\n }\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(mark)),\n unsupported: name\n });\n return false;\n });\n }\n if (json.content && Array.isArray(json.content)) {\n json.content = json.content.map(\n (value) => rewriteUnknownContentInner({\n json: value,\n validMarks,\n validNodes,\n options,\n rewrittenContent\n }).json\n ).filter((a) => a !== null && a !== void 0);\n }\n if (json.type && !validNodes.has(json.type)) {\n rewrittenContent.push({\n original: JSON.parse(JSON.stringify(json)),\n unsupported: json.type\n });\n if (json.content && Array.isArray(json.content) && (options == null ? void 0 : options.fallbackToParagraph) !== false) {\n json.type = \"paragraph\";\n return {\n json,\n rewrittenContent\n };\n }\n return {\n json: null,\n rewrittenContent\n };\n }\n return { json, rewrittenContent };\n}\nfunction rewriteUnknownContent(json, schema, options) {\n return rewriteUnknownContentInner({\n json,\n validNodes: new Set(Object.keys(schema.nodes)),\n validMarks: new Set(Object.keys(schema.marks)),\n options\n });\n}\n\n// src/commands/setMark.ts\nfunction canSetMark(state, tr, newMarkType) {\n var _a;\n const { selection } = tr;\n let cursor = null;\n if (isTextSelection(selection)) {\n cursor = selection.$cursor;\n }\n if (cursor) {\n const currentMarks = (_a = state.storedMarks) != null ? _a : cursor.marks();\n const parentAllowsMarkType = cursor.parent.type.allowsMarkType(newMarkType);\n return parentAllowsMarkType && (!!newMarkType.isInSet(currentMarks) || !currentMarks.some((mark) => mark.type.excludes(newMarkType)));\n }\n const { ranges } = selection;\n return ranges.some(({ $from, $to }) => {\n let someNodeSupportsMark = $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false;\n state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\n if (someNodeSupportsMark) {\n return false;\n }\n if (node.isInline) {\n const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);\n const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks) || !node.marks.some((otherMark) => otherMark.type.excludes(newMarkType));\n someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;\n }\n return !someNodeSupportsMark;\n });\n return someNodeSupportsMark;\n });\n}\nvar setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n const type = getMarkType(typeOrName, state.schema);\n if (dispatch) {\n if (empty) {\n const oldAttributes = getMarkAttributes(state, type);\n tr.addStoredMark(\n type.create({\n ...oldAttributes,\n ...attributes\n })\n );\n } else {\n ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n const trimmedFrom = Math.max(pos, from);\n const trimmedTo = Math.min(pos + node.nodeSize, to);\n const someHasMark = node.marks.find((mark) => mark.type === type);\n if (someHasMark) {\n node.marks.forEach((mark) => {\n if (type === mark.type) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n type.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n } else {\n tr.addMark(trimmedFrom, trimmedTo, type.create(attributes));\n }\n });\n });\n }\n }\n return canSetMark(state, tr, type);\n};\n\n// src/commands/setMeta.ts\nvar setMeta = (key, value) => ({ tr }) => {\n tr.setMeta(key, value);\n return true;\n};\n\n// src/commands/setNode.ts\nimport { setBlockType } from \"@tiptap/pm/commands\";\nvar setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {\n const type = getNodeType(typeOrName, state.schema);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (!type.isTextblock) {\n console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.');\n return false;\n }\n return chain().command(({ commands }) => {\n const canSetBlock = setBlockType(type, { ...attributesToCopy, ...attributes })(state);\n if (canSetBlock) {\n return true;\n }\n return commands.clearNodes();\n }).command(({ state: updatedState }) => {\n return setBlockType(type, { ...attributesToCopy, ...attributes })(updatedState, dispatch);\n }).run();\n};\n\n// src/commands/setNodeSelection.ts\nimport { NodeSelection as NodeSelection2 } from \"@tiptap/pm/state\";\nvar setNodeSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const from = minMax(position, 0, doc.content.size);\n const selection = NodeSelection2.create(doc, from);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/setTextDirection.ts\nvar setTextDirection = (direction, position) => ({ tr, state, dispatch }) => {\n const { selection } = state;\n let from;\n let to;\n if (typeof position === \"number\") {\n from = position;\n to = position;\n } else if (position && \"from\" in position && \"to\" in position) {\n from = position.from;\n to = position.to;\n } else {\n from = selection.from;\n to = selection.to;\n }\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n tr.setNodeMarkup(pos, void 0, {\n ...node.attrs,\n dir: direction\n });\n });\n }\n return true;\n};\n\n// src/commands/setTextSelection.ts\nimport { TextSelection as TextSelection5 } from \"@tiptap/pm/state\";\nvar setTextSelection = (position) => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const { from, to } = typeof position === \"number\" ? { from: position, to: position } : position;\n const minPos = TextSelection5.atStart(doc).from;\n const maxPos = TextSelection5.atEnd(doc).to;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const selection = TextSelection5.create(doc, resolvedFrom, resolvedEnd);\n tr.setSelection(selection);\n }\n return true;\n};\n\n// src/commands/sinkListItem.ts\nimport { sinkListItem as originalSinkListItem } from \"@tiptap/pm/schema-list\";\nvar sinkListItem = (typeOrName) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalSinkListItem(type)(state, dispatch);\n};\n\n// src/commands/splitBlock.ts\nimport { NodeSelection as NodeSelection3, TextSelection as TextSelection6 } from \"@tiptap/pm/state\";\nimport { canSplit } from \"@tiptap/pm/transform\";\nfunction ensureMarks(state, splittableMarks) {\n const marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks == null ? void 0 : splittableMarks.includes(mark.type.name));\n state.tr.ensureMarks(filteredMarks);\n }\n}\nvar splitBlock = ({ keepMarks = true } = {}) => ({ tr, state, dispatch, editor }) => {\n const { selection, doc } = tr;\n const { $from, $to } = selection;\n const extensionAttributes = editor.extensionManager.attributes;\n const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\n if (selection instanceof NodeSelection3 && selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(doc, $from.pos)) {\n return false;\n }\n if (dispatch) {\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.split($from.pos).scrollIntoView();\n }\n return true;\n }\n if (!$from.parent.isBlock) {\n return false;\n }\n const atEnd = $to.parentOffset === $to.parent.content.size;\n const deflt = $from.depth === 0 ? void 0 : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n let types = atEnd && deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : void 0)) {\n can = true;\n types = deflt ? [\n {\n type: deflt,\n attrs: newAttributes\n }\n ] : void 0;\n }\n if (dispatch) {\n if (can) {\n if (selection instanceof TextSelection6) {\n tr.deleteSelection();\n }\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\n const first2 = tr.mapping.map($from.before());\n const $first = tr.doc.resolve(first2);\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n }\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.scrollIntoView();\n }\n return can;\n};\n\n// src/commands/splitListItem.ts\nimport { Fragment as Fragment3, Slice } from \"@tiptap/pm/model\";\nimport { TextSelection as TextSelection7 } from \"@tiptap/pm/state\";\nimport { canSplit as canSplit2 } from \"@tiptap/pm/transform\";\nvar splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr, state, dispatch, editor }) => {\n var _a;\n const type = getNodeType(typeOrName, state.schema);\n const { $from, $to } = state.selection;\n const node = state.selection.node;\n if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) {\n return false;\n }\n const grandParent = $from.node(-1);\n if (grandParent.type !== type) {\n return false;\n }\n const extensionAttributes = editor.extensionManager.attributes;\n if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\n if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) {\n return false;\n }\n if (dispatch) {\n let wrap = Fragment3.empty;\n const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\n wrap = Fragment3.from($from.node(d).copy(wrap));\n }\n const depthAfter = (\n // eslint-disable-next-line no-nested-ternary\n $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3\n );\n const newNextTypeAttributes2 = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n const nextType2 = ((_a = type.contentMatch.defaultType) == null ? void 0 : _a.createAndFill(newNextTypeAttributes2)) || void 0;\n wrap = wrap.append(Fragment3.from(type.createAndFill(null, nextType2) || void 0));\n const start = $from.before($from.depth - (depthBefore - 1));\n tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\n if (sel > -1) {\n return false;\n }\n if (n.isTextblock && n.content.size === 0) {\n sel = pos + 1;\n }\n });\n if (sel > -1) {\n tr.setSelection(TextSelection7.near(tr.doc.resolve(sel)));\n }\n tr.scrollIntoView();\n }\n return true;\n }\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n const newTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),\n ...overrideAttrs\n };\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs\n };\n tr.delete($from.pos, $to.pos);\n const types = nextType ? [\n { type, attrs: newTypeAttributes },\n { type: nextType, attrs: newNextTypeAttributes }\n ] : [{ type, attrs: newTypeAttributes }];\n if (!canSplit2(tr.doc, $from.pos, 2)) {\n return false;\n }\n if (dispatch) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n tr.split($from.pos, 2, types).scrollIntoView();\n if (!marks || !dispatch) {\n return true;\n }\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n return true;\n};\n\n// src/commands/toggleList.ts\nimport { TextSelection as TextSelection8 } from \"@tiptap/pm/state\";\nimport { canJoin } from \"@tiptap/pm/transform\";\nvar joinListBackwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);\n if (before === void 0) {\n return true;\n }\n const nodeBefore = tr.doc.nodeAt(before);\n const canJoinBackwards = list.node.type === (nodeBefore == null ? void 0 : nodeBefore.type) && canJoin(tr.doc, list.pos);\n if (!canJoinBackwards) {\n return true;\n }\n tr.join(list.pos);\n return true;\n};\nvar joinListForwards = (tr, listType) => {\n const list = findParentNode((node) => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const after = tr.doc.resolve(list.start).after(list.depth);\n if (after === void 0) {\n return true;\n }\n const nodeAfter = tr.doc.nodeAt(after);\n const canJoinForwards = list.node.type === (nodeAfter == null ? void 0 : nodeAfter.type) && canJoin(tr.doc, after);\n if (!canJoinForwards) {\n return true;\n }\n tr.join(after);\n return true;\n};\nfunction createInnerSelectionForWholeDocList(tr) {\n const doc = tr.doc;\n const list = doc.firstChild;\n if (!list) {\n return null;\n }\n const $start = doc.resolve(1);\n const $end = doc.resolve(list.nodeSize - 1);\n return TextSelection8.between($start, $end);\n}\nvar toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can }) => {\n const { extensions, splittableMarks } = editor.extensionManager;\n const listType = getNodeType(listTypeOrName, state.schema);\n const itemType = getNodeType(itemTypeOrName, state.schema);\n const { selection, storedMarks } = state;\n const { $from, $to } = selection;\n const range = $from.blockRange($to);\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (!range) {\n return false;\n }\n const parentList = findParentNode((node) => isList(node.type.name, extensions))(selection);\n const isAllSelection = selection.from === 0 && selection.to === state.doc.content.size;\n const topLevelNodes = state.doc.content.content;\n const soleTopLevelNode = topLevelNodes.length === 1 ? topLevelNodes[0] : null;\n const allSelectionList = isAllSelection && soleTopLevelNode && isList(soleTopLevelNode.type.name, extensions) ? {\n node: soleTopLevelNode,\n pos: 0,\n depth: 0\n } : null;\n const currentList = parentList != null ? parentList : allSelectionList;\n const isInsideExistingList = !!parentList && range.depth >= 1 && range.depth - parentList.depth <= 1;\n const hasWholeDocSelectedList = !!allSelectionList;\n if ((isInsideExistingList || hasWholeDocSelectedList) && currentList) {\n if (currentList.node.type === listType) {\n if (isAllSelection && hasWholeDocSelectedList) {\n return chain().command(({ tr: trx, dispatch: disp }) => {\n const nextSelection = createInnerSelectionForWholeDocList(trx);\n if (!nextSelection) {\n return false;\n }\n trx.setSelection(nextSelection);\n if (disp) {\n disp(trx);\n }\n return true;\n }).liftListItem(itemType).run();\n }\n return commands.liftListItem(itemType);\n }\n if (isList(currentList.node.type.name, extensions) && listType.validContent(currentList.node.content)) {\n return chain().command(() => {\n tr.setNodeMarkup(currentList.pos, listType);\n return true;\n }).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n }\n if (!keepMarks || !marks || !dispatch) {\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n }\n return chain().command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run();\n};\n\n// src/commands/toggleMark.ts\nvar toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {\n const { extendEmptyMarkRange = false } = options;\n const type = getMarkType(typeOrName, state.schema);\n const isActive2 = isMarkActive(state, type, attributes);\n if (isActive2) {\n return commands.unsetMark(type, { extendEmptyMarkRange });\n }\n return commands.setMark(type, attributes);\n};\n\n// src/commands/toggleNode.ts\nvar toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const toggleType = getNodeType(toggleTypeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n let attributesToCopy;\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n attributesToCopy = state.selection.$anchor.parent.attrs;\n }\n if (isActive2) {\n return commands.setNode(toggleType, attributesToCopy);\n }\n return commands.setNode(type, { ...attributesToCopy, ...attributes });\n};\n\n// src/commands/toggleWrap.ts\nvar toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive2 = isNodeActive(state, type, attributes);\n if (isActive2) {\n return commands.lift(type);\n }\n return commands.wrapIn(type, attributes);\n};\n\n// src/commands/undoInputRule.ts\nvar undoInputRule = () => ({ state, dispatch }) => {\n const plugins = state.plugins;\n for (let i = 0; i < plugins.length; i += 1) {\n const plugin = plugins[i];\n let undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n const tr = state.tr;\n const toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n }\n if (undoable.text) {\n const marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n } else {\n tr.delete(undoable.from, undoable.to);\n }\n }\n return true;\n }\n }\n return false;\n};\n\n// src/commands/unsetAllMarks.ts\nvar unsetAllMarks = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n if (empty) {\n return true;\n }\n if (dispatch) {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos);\n });\n }\n return true;\n};\n\n// src/commands/unsetMark.ts\nvar unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {\n var _a;\n const { extendEmptyMarkRange = false } = options;\n const { selection } = tr;\n const type = getMarkType(typeOrName, state.schema);\n const { $from, empty, ranges } = selection;\n if (!dispatch) {\n return true;\n }\n if (empty && extendEmptyMarkRange) {\n let { from, to } = selection;\n const attrs = (_a = $from.marks().find((mark) => mark.type === type)) == null ? void 0 : _a.attrs;\n const range = getMarkRange($from, type, attrs);\n if (range) {\n from = range.from;\n to = range.to;\n }\n tr.removeMark(from, to, type);\n } else {\n ranges.forEach((range) => {\n tr.removeMark(range.$from.pos, range.$to.pos, type);\n });\n }\n tr.removeStoredMark(type);\n return true;\n};\n\n// src/commands/unsetTextDirection.ts\nvar unsetTextDirection = (position) => ({ tr, state, dispatch }) => {\n const { selection } = state;\n let from;\n let to;\n if (typeof position === \"number\") {\n from = position;\n to = position;\n } else if (position && \"from\" in position && \"to\" in position) {\n from = position.from;\n to = position.to;\n } else {\n from = selection.from;\n to = selection.to;\n }\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const newAttrs = { ...node.attrs };\n delete newAttrs.dir;\n tr.setNodeMarkup(pos, void 0, newAttrs);\n });\n }\n return true;\n};\n\n// src/commands/updateAttributes.ts\nvar updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === \"string\" ? typeOrName : typeOrName.name,\n state.schema\n );\n if (!schemaType) {\n return false;\n }\n if (schemaType === \"node\") {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === \"mark\") {\n markType = getMarkType(typeOrName, state.schema);\n }\n let canUpdate = false;\n tr.selection.ranges.forEach((range) => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n let lastPos;\n let lastNode;\n let trimmedFrom;\n let trimmedTo;\n if (tr.selection.empty) {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n canUpdate = true;\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n });\n } else {\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (pos < from && nodeType && nodeType === node.type) {\n canUpdate = true;\n trimmedFrom = Math.max(pos, from);\n trimmedTo = Math.min(pos + node.nodeSize, to);\n lastPos = pos;\n lastNode = node;\n }\n if (pos >= from && pos <= to) {\n if (nodeType && nodeType === node.type) {\n canUpdate = true;\n if (dispatch) {\n tr.setNodeMarkup(pos, void 0, {\n ...node.attrs,\n ...attributes\n });\n }\n }\n if (markType && node.marks.length) {\n node.marks.forEach((mark) => {\n if (markType === mark.type) {\n canUpdate = true;\n if (dispatch) {\n const trimmedFrom2 = Math.max(pos, from);\n const trimmedTo2 = Math.min(pos + node.nodeSize, to);\n tr.addMark(\n trimmedFrom2,\n trimmedTo2,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n }\n });\n }\n }\n });\n }\n if (lastNode) {\n if (lastPos !== void 0 && dispatch) {\n tr.setNodeMarkup(lastPos, void 0, {\n ...lastNode.attrs,\n ...attributes\n });\n }\n if (markType && lastNode.marks.length) {\n lastNode.marks.forEach((mark) => {\n if (markType === mark.type && dispatch) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n markType.create({\n ...mark.attrs,\n ...attributes\n })\n );\n }\n });\n }\n }\n });\n return canUpdate;\n};\n\n// src/commands/wrapIn.ts\nimport { wrapIn as originalWrapIn } from \"@tiptap/pm/commands\";\nvar wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapIn(type, attributes)(state, dispatch);\n};\n\n// src/commands/wrapInList.ts\nimport { wrapInList as originalWrapInList } from \"@tiptap/pm/schema-list\";\nvar wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return originalWrapInList(type, attributes)(state, dispatch);\n};\n\n// src/Editor.ts\nimport { EditorState } from \"@tiptap/pm/state\";\nimport { EditorView } from \"@tiptap/pm/view\";\n\n// src/EventEmitter.ts\nvar EventEmitter = class {\n constructor() {\n this.callbacks = {};\n }\n on(event, fn) {\n if (!this.callbacks[event]) {\n this.callbacks[event] = [];\n }\n this.callbacks[event].push(fn);\n return this;\n }\n emit(event, ...args) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n callbacks.forEach((callback) => callback.apply(this, args));\n }\n return this;\n }\n off(event, fn) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter((callback) => callback !== fn);\n } else {\n delete this.callbacks[event];\n }\n }\n return this;\n }\n once(event, fn) {\n const onceFn = (...args) => {\n this.off(event, onceFn);\n fn.apply(this, args);\n };\n return this.on(event, onceFn);\n }\n removeAllListeners() {\n this.callbacks = {};\n }\n};\n\n// src/ExtensionManager.ts\nimport { keymap } from \"@tiptap/pm/keymap\";\n\n// src/InputRule.ts\nimport { Fragment as Fragment4 } from \"@tiptap/pm/model\";\nimport { Plugin } from \"@tiptap/pm/state\";\nvar InputRule = class {\n constructor(config) {\n var _a;\n this.find = config.find;\n this.handler = config.handler;\n this.undoable = (_a = config.undoable) != null ? _a : true;\n }\n};\nvar inputRuleMatcherHandler = (text, find) => {\n if (isRegExp(find)) {\n return find.exec(text);\n }\n const inputRuleMatch = find(text);\n if (!inputRuleMatch) {\n return null;\n }\n const result = [inputRuleMatch.text];\n result.index = inputRuleMatch.index;\n result.input = text;\n result.data = inputRuleMatch.data;\n if (inputRuleMatch.replaceWith) {\n if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".');\n }\n result.push(inputRuleMatch.replaceWith);\n }\n return result;\n};\nfunction run(config) {\n var _a;\n const { editor, from, to, text, rules, plugin } = config;\n const { view } = editor;\n if (view.composing) {\n return false;\n }\n const $from = view.state.doc.resolve(from);\n if (\n // check for code node\n $from.parent.type.spec.code || // check for code mark\n !!((_a = $from.nodeBefore || $from.nodeAfter) == null ? void 0 : _a.marks.find((mark) => mark.type.spec.code))\n ) {\n return false;\n }\n let matched = false;\n const textBefore = getTextContentFromNodes($from) + text;\n rules.forEach((rule) => {\n if (matched) {\n return;\n }\n const match = inputRuleMatcherHandler(textBefore, rule.find);\n if (!match) {\n return;\n }\n const tr = view.state.tr;\n const state = createChainableState({\n state: view.state,\n transaction: tr\n });\n const range = {\n from: from - (match[0].length - text.length),\n to\n };\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can\n });\n if (handler === null || !tr.steps.length) {\n return;\n }\n if (rule.undoable) {\n tr.setMeta(plugin, {\n transform: tr,\n from,\n to,\n text\n });\n }\n view.dispatch(tr);\n matched = true;\n });\n return matched;\n}\nfunction inputRulesPlugin(props) {\n const { editor, rules } = props;\n const plugin = new Plugin({\n state: {\n init() {\n return null;\n },\n apply(tr, prev, state) {\n const stored = tr.getMeta(plugin);\n if (stored) {\n return stored;\n }\n const simulatedInputMeta = tr.getMeta(\"applyInputRules\");\n const isSimulatedInput = !!simulatedInputMeta;\n if (isSimulatedInput) {\n setTimeout(() => {\n let { text } = simulatedInputMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment4.from(text), state.schema);\n }\n const { from } = simulatedInputMeta;\n const to = from + text.length;\n run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n });\n }\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run({\n editor,\n from,\n to,\n text,\n rules,\n plugin\n });\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n const { $cursor } = view.state.selection;\n if ($cursor) {\n run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\",\n rules,\n plugin\n });\n }\n });\n return false;\n }\n },\n // add support for input rules to trigger on enter\n // this is useful for example for code blocks\n handleKeyDown(view, event) {\n if (event.key !== \"Enter\") {\n return false;\n }\n const { $cursor } = view.state.selection;\n if ($cursor) {\n return run({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: \"\\n\",\n rules,\n plugin\n });\n }\n return false;\n }\n },\n // @ts-ignore\n isInputRules: true\n });\n return plugin;\n}\n\n// src/utilities/isPlainObject.ts\nfunction getType(value) {\n return Object.prototype.toString.call(value).slice(8, -1);\n}\nfunction isPlainObject(value) {\n if (getType(value) !== \"Object\") {\n return false;\n }\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n\n// src/utilities/mergeDeep.ts\nfunction mergeDeep(target, source) {\n const output = { ...target };\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n output[key] = mergeDeep(target[key], source[key]);\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}\n\n// src/Extendable.ts\nvar Extendable = class {\n constructor(config = {}) {\n this.type = \"extendable\";\n this.parent = null;\n this.child = null;\n this.name = \"\";\n this.config = {\n name: this.name\n };\n this.config = {\n ...this.config,\n ...config\n };\n this.name = this.config.name;\n }\n get options() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addOptions\", {\n name: this.name\n })\n ) || {}\n };\n }\n get storage() {\n return {\n ...callOrReturn(\n getExtensionField(this, \"addStorage\", {\n name: this.name,\n options: this.options\n })\n ) || {}\n };\n }\n configure(options = {}) {\n const extension = this.extend({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options, options);\n }\n });\n extension.name = this.name;\n extension.parent = this.parent;\n this.child = null;\n return extension;\n }\n extend(extendedConfig = {}) {\n const extension = new this.constructor({ ...this.config, ...extendedConfig });\n extension.parent = this;\n this.child = extension;\n extension.name = \"name\" in extendedConfig ? extendedConfig.name : extension.parent.name;\n return extension;\n }\n};\n\n// src/Mark.ts\nvar Mark = class _Mark extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"mark\";\n }\n /**\n * Create a new Mark instance\n * @param config - Mark configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Mark(resolvedConfig);\n }\n static handleExit({ editor, mark }) {\n const { tr } = editor.state;\n const currentPos = editor.state.selection.$from;\n const isAtEnd = currentPos.pos === currentPos.end();\n if (isAtEnd) {\n const currentMarks = currentPos.marks();\n const isInMark = !!currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (!isInMark) {\n return false;\n }\n const removeMark = currentMarks.find((m) => (m == null ? void 0 : m.type.name) === mark.name);\n if (removeMark) {\n tr.removeStoredMark(removeMark);\n }\n tr.insertText(\" \", currentPos.pos);\n editor.view.dispatch(tr);\n return true;\n }\n return false;\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/PasteRule.ts\nimport { Fragment as Fragment5 } from \"@tiptap/pm/model\";\nimport { Plugin as Plugin2 } from \"@tiptap/pm/state\";\n\n// src/utilities/isNumber.ts\nfunction isNumber(value) {\n return typeof value === \"number\";\n}\n\n// src/PasteRule.ts\nvar PasteRule = class {\n constructor(config) {\n this.find = config.find;\n this.handler = config.handler;\n }\n};\nvar pasteRuleMatcherHandler = (text, find, event) => {\n if (isRegExp(find)) {\n return [...text.matchAll(find)];\n }\n const matches = find(text, event);\n if (!matches) {\n return [];\n }\n return matches.map((pasteRuleMatch) => {\n const result = [pasteRuleMatch.text];\n result.index = pasteRuleMatch.index;\n result.input = text;\n result.data = pasteRuleMatch.data;\n if (pasteRuleMatch.replaceWith) {\n if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".');\n }\n result.push(pasteRuleMatch.replaceWith);\n }\n return result;\n });\n};\nfunction run2(config) {\n const { editor, state, from, to, rule, pasteEvent, dropEvent } = config;\n const { commands, chain, can } = new CommandManager({\n editor,\n state\n });\n const handlers = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n var _a, _b, _c, _d, _e;\n if (((_b = (_a = node.type) == null ? void 0 : _a.spec) == null ? void 0 : _b.code) || !(node.isText || node.isTextblock || node.isInline)) {\n return;\n }\n const contentSize = (_e = (_d = (_c = node.content) == null ? void 0 : _c.size) != null ? _d : node.nodeSize) != null ? _e : 0;\n const resolvedFrom = Math.max(from, pos);\n const resolvedTo = Math.min(to, pos + contentSize);\n if (resolvedFrom >= resolvedTo) {\n return;\n }\n const textToMatch = node.isText ? node.text || \"\" : node.textBetween(resolvedFrom - pos, resolvedTo - pos, void 0, \"\\uFFFC\");\n const matches = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);\n matches.forEach((match) => {\n if (match.index === void 0) {\n return;\n }\n const start = resolvedFrom + match.index + 1;\n const end = start + match[0].length;\n const range = {\n from: state.tr.mapping.map(start),\n to: state.tr.mapping.map(end)\n };\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can,\n pasteEvent,\n dropEvent\n });\n handlers.push(handler);\n });\n });\n const success = handlers.every((handler) => handler !== null);\n return success;\n}\nvar tiptapDragFromOtherEditor = null;\nvar createClipboardPasteEvent = (text) => {\n var _a;\n const event = new ClipboardEvent(\"paste\", {\n clipboardData: new DataTransfer()\n });\n (_a = event.clipboardData) == null ? void 0 : _a.setData(\"text/html\", text);\n return event;\n};\nfunction pasteRulesPlugin(props) {\n const { editor, rules } = props;\n let dragSourceElement = null;\n let isPastedFromProseMirror = false;\n let isDroppedFromProseMirror = false;\n let pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n let dropEvent;\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n const processEvent = ({\n state,\n from,\n to,\n rule,\n pasteEvt\n }) => {\n const tr = state.tr;\n const chainableState = createChainableState({\n state,\n transaction: tr\n });\n const handler = run2({\n editor,\n state: chainableState,\n from: Math.max(from - 1, 0),\n to: to.b - 1,\n rule,\n pasteEvent: pasteEvt,\n dropEvent\n });\n if (!handler || !tr.steps.length) {\n return;\n }\n try {\n dropEvent = typeof DragEvent !== \"undefined\" ? new DragEvent(\"drop\") : null;\n } catch {\n dropEvent = null;\n }\n pasteEvent = typeof ClipboardEvent !== \"undefined\" ? new ClipboardEvent(\"paste\") : null;\n return tr;\n };\n const plugins = rules.map((rule) => {\n return new Plugin2({\n // we register a global drag handler to track the current drag source element\n view(view) {\n const handleDragstart = (event) => {\n var _a;\n dragSourceElement = ((_a = view.dom.parentElement) == null ? void 0 : _a.contains(event.target)) ? view.dom.parentElement : null;\n if (dragSourceElement) {\n tiptapDragFromOtherEditor = editor;\n }\n };\n const handleDragend = () => {\n if (tiptapDragFromOtherEditor) {\n tiptapDragFromOtherEditor = null;\n }\n };\n window.addEventListener(\"dragstart\", handleDragstart);\n window.addEventListener(\"dragend\", handleDragend);\n return {\n destroy() {\n window.removeEventListener(\"dragstart\", handleDragstart);\n window.removeEventListener(\"dragend\", handleDragend);\n }\n };\n },\n props: {\n handleDOMEvents: {\n drop: (view, event) => {\n isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;\n dropEvent = event;\n if (!isDroppedFromProseMirror) {\n const dragFromOtherEditor = tiptapDragFromOtherEditor;\n if (dragFromOtherEditor == null ? void 0 : dragFromOtherEditor.isEditable) {\n setTimeout(() => {\n const selection = dragFromOtherEditor.state.selection;\n if (selection) {\n dragFromOtherEditor.commands.deleteRange({ from: selection.from, to: selection.to });\n }\n }, 10);\n }\n }\n return false;\n },\n paste: (_view, event) => {\n var _a;\n const html = (_a = event.clipboardData) == null ? void 0 : _a.getData(\"text/html\");\n pasteEvent = event;\n isPastedFromProseMirror = !!(html == null ? void 0 : html.includes(\"data-pm-slice\"));\n return false;\n }\n }\n },\n appendTransaction: (transactions, oldState, state) => {\n const transaction = transactions[0];\n const isPaste = transaction.getMeta(\"uiEvent\") === \"paste\" && !isPastedFromProseMirror;\n const isDrop = transaction.getMeta(\"uiEvent\") === \"drop\" && !isDroppedFromProseMirror;\n const simulatedPasteMeta = transaction.getMeta(\"applyPasteRules\");\n const isSimulatedPaste = !!simulatedPasteMeta;\n if (!isPaste && !isDrop && !isSimulatedPaste) {\n return;\n }\n if (isSimulatedPaste) {\n let { text } = simulatedPasteMeta;\n if (typeof text === \"string\") {\n text = text;\n } else {\n text = getHTMLFromFragment(Fragment5.from(text), state.schema);\n }\n const { from: from2 } = simulatedPasteMeta;\n const to2 = from2 + text.length;\n const pasteEvt = createClipboardPasteEvent(text);\n return processEvent({\n rule,\n state,\n from: from2,\n to: { b: to2 },\n pasteEvt\n });\n }\n const from = oldState.doc.content.findDiffStart(state.doc.content);\n const to = oldState.doc.content.findDiffEnd(state.doc.content);\n if (!isNumber(from) || !to || from === to.b) {\n return;\n }\n return processEvent({\n rule,\n state,\n from,\n to,\n pasteEvt: pasteEvent\n });\n }\n });\n });\n return plugins;\n}\n\n// src/ExtensionManager.ts\nvar ExtensionManager = class {\n constructor(extensions, editor) {\n this.splittableMarks = [];\n this.editor = editor;\n this.baseExtensions = extensions;\n this.extensions = resolveExtensions(extensions);\n this.schema = getSchemaByResolvedExtensions(this.extensions, editor);\n this.setupExtensions();\n }\n /**\n * Get all commands from the extensions.\n * @returns An object with all commands where the key is the command name and the value is the command function\n */\n get commands() {\n return this.extensions.reduce((commands, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const addCommands = getExtensionField(extension, \"addCommands\", context);\n if (!addCommands) {\n return commands;\n }\n return {\n ...commands,\n ...addCommands()\n };\n }, {});\n }\n /**\n * Get all registered Prosemirror plugins from the extensions.\n * @returns An array of Prosemirror plugins\n */\n get plugins() {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions].reverse());\n const allPlugins = extensions.flatMap((extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const plugins = [];\n const addKeyboardShortcuts = getExtensionField(\n extension,\n \"addKeyboardShortcuts\",\n context\n );\n let defaultBindings = {};\n if (extension.type === \"mark\" && getExtensionField(extension, \"exitable\", context)) {\n defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension });\n }\n if (addKeyboardShortcuts) {\n const bindings = Object.fromEntries(\n Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {\n return [shortcut, () => method({ editor })];\n })\n );\n defaultBindings = { ...defaultBindings, ...bindings };\n }\n const keyMapPlugin = keymap(defaultBindings);\n plugins.push(keyMapPlugin);\n const addInputRules = getExtensionField(extension, \"addInputRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {\n const rules = addInputRules();\n if (rules && rules.length) {\n const inputResult = inputRulesPlugin({\n editor,\n rules\n });\n const inputPlugins = Array.isArray(inputResult) ? inputResult : [inputResult];\n plugins.push(...inputPlugins);\n }\n }\n const addPasteRules = getExtensionField(extension, \"addPasteRules\", context);\n if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {\n const rules = addPasteRules();\n if (rules && rules.length) {\n const pasteRules = pasteRulesPlugin({ editor, rules });\n plugins.push(...pasteRules);\n }\n }\n const addProseMirrorPlugins = getExtensionField(\n extension,\n \"addProseMirrorPlugins\",\n context\n );\n if (addProseMirrorPlugins) {\n const proseMirrorPlugins = addProseMirrorPlugins();\n plugins.push(...proseMirrorPlugins);\n }\n return plugins;\n });\n return allPlugins;\n }\n /**\n * Get all attributes from the extensions.\n * @returns An array of attributes\n */\n get attributes() {\n return getAttributesFromExtensions(this.extensions);\n }\n /**\n * Get all node views from the extensions.\n * @returns An object with all node views where the key is the node name and the value is the node view function\n */\n get nodeViews() {\n const { editor } = this;\n const { nodeExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n nodeExtensions.filter((extension) => !!getExtensionField(extension, \"addNodeView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getNodeType(extension.name, this.schema)\n };\n const addNodeView = getExtensionField(extension, \"addNodeView\", context);\n if (!addNodeView) {\n return [];\n }\n const nodeViewResult = addNodeView();\n if (!nodeViewResult) {\n return [];\n }\n const nodeview = (node, view, getPos, decorations, innerDecorations) => {\n const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);\n return nodeViewResult({\n // pass-through\n node,\n view,\n getPos,\n decorations,\n innerDecorations,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes\n });\n };\n return [extension.name, nodeview];\n })\n );\n }\n /**\n * Get the composed dispatchTransaction function from all extensions.\n * @param baseDispatch The base dispatch function (e.g. from the editor or user props)\n * @returns A composed dispatch function\n */\n dispatchTransaction(baseDispatch) {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions].reverse());\n return extensions.reduceRight((next, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const dispatchTransaction = getExtensionField(\n extension,\n \"dispatchTransaction\",\n context\n );\n if (!dispatchTransaction) {\n return next;\n }\n return (transaction) => {\n dispatchTransaction.call(context, { transaction, next });\n };\n }, baseDispatch);\n }\n /**\n * Get the composed transformPastedHTML function from all extensions.\n * @param baseTransform The base transform function (e.g. from the editor props)\n * @returns A composed transform function that chains all extension transforms\n */\n transformPastedHTML(baseTransform) {\n const { editor } = this;\n const extensions = sortExtensions([...this.extensions]);\n return extensions.reduce(\n (transform, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n const extensionTransform = getExtensionField(\n extension,\n \"transformPastedHTML\",\n context\n );\n if (!extensionTransform) {\n return transform;\n }\n return (html, view) => {\n const transformedHtml = transform(html, view);\n return extensionTransform.call(context, transformedHtml);\n };\n },\n baseTransform || ((html) => html)\n );\n }\n get markViews() {\n const { editor } = this;\n const { markExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(\n markExtensions.filter((extension) => !!getExtensionField(extension, \"addMarkView\")).map((extension) => {\n const extensionAttributes = this.attributes.filter((attribute) => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor,\n type: getMarkType(extension.name, this.schema)\n };\n const addMarkView = getExtensionField(extension, \"addMarkView\", context);\n if (!addMarkView) {\n return [];\n }\n const markView = (mark, view, inline) => {\n const HTMLAttributes = getRenderedAttributes(mark, extensionAttributes);\n return addMarkView()({\n // pass-through\n mark,\n view,\n inline,\n // tiptap-specific\n editor,\n extension,\n HTMLAttributes,\n updateAttributes: (attrs) => {\n updateMarkViewAttributes(mark, editor, attrs);\n }\n });\n };\n return [extension.name, markView];\n })\n );\n }\n /**\n * Destroy the extension manager and clean up all extension references\n * to prevent memory leaks through parent/child extension chains.\n *\n * Walks each extension's full parent chain and nulls every forward\n * `parent.child → current` link where the parent still points to the\n * current node. This breaks the retention path from module-scope\n * singleton roots through deep extend() chains.\n *\n * Only ancestor `.child` links matching the current chain are cleared.\n * The `.parent` pointer on ancestors is never touched — extensions\n * may be shared across live editors, so their own backward references\n * and non-matching forward links must remain intact.\n */\n destroy() {\n this.extensions.forEach((extension) => {\n let current = extension;\n while (current.parent) {\n const parent = current.parent;\n if (parent.child === current) {\n parent.child = null;\n }\n current = parent;\n }\n });\n this.extensions = [];\n this.baseExtensions = [];\n this.schema = null;\n this.editor = null;\n }\n /**\n * Go through all extensions, create extension storages & setup marks\n * & bind editor event listener.\n */\n setupExtensions() {\n const extensions = this.extensions;\n this.editor.extensionStorage = Object.fromEntries(\n extensions.map((extension) => [extension.name, extension.storage])\n );\n extensions.forEach((extension) => {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: this.editor.extensionStorage[extension.name],\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema)\n };\n if (extension.type === \"mark\") {\n const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, \"keepOnSplit\", context))) != null ? _a : true;\n if (keepOnSplit) {\n this.splittableMarks.push(extension.name);\n }\n }\n const onBeforeCreate = getExtensionField(extension, \"onBeforeCreate\", context);\n const onCreate = getExtensionField(extension, \"onCreate\", context);\n const onUpdate = getExtensionField(extension, \"onUpdate\", context);\n const onSelectionUpdate = getExtensionField(\n extension,\n \"onSelectionUpdate\",\n context\n );\n const onTransaction = getExtensionField(extension, \"onTransaction\", context);\n const onFocus = getExtensionField(extension, \"onFocus\", context);\n const onBlur = getExtensionField(extension, \"onBlur\", context);\n const onDestroy = getExtensionField(extension, \"onDestroy\", context);\n if (onBeforeCreate) {\n this.editor.on(\"beforeCreate\", onBeforeCreate);\n }\n if (onCreate) {\n this.editor.on(\"create\", onCreate);\n }\n if (onUpdate) {\n this.editor.on(\"update\", onUpdate);\n }\n if (onSelectionUpdate) {\n this.editor.on(\"selectionUpdate\", onSelectionUpdate);\n }\n if (onTransaction) {\n this.editor.on(\"transaction\", onTransaction);\n }\n if (onFocus) {\n this.editor.on(\"focus\", onFocus);\n }\n if (onBlur) {\n this.editor.on(\"blur\", onBlur);\n }\n if (onDestroy) {\n this.editor.on(\"destroy\", onDestroy);\n }\n });\n }\n};\nExtensionManager.resolve = resolveExtensions;\nExtensionManager.sort = sortExtensions;\nExtensionManager.flatten = flattenExtensions;\n\n// src/extensions/index.ts\nvar extensions_exports = {};\n__export(extensions_exports, {\n ClipboardTextSerializer: () => ClipboardTextSerializer,\n Commands: () => Commands,\n Delete: () => Delete,\n Drop: () => Drop,\n Editable: () => Editable,\n FocusEvents: () => FocusEvents,\n Keymap: () => Keymap,\n Paste: () => Paste,\n Tabindex: () => Tabindex,\n TextDirection: () => TextDirection,\n focusEventsPluginKey: () => focusEventsPluginKey\n});\n\n// src/extensions/clipboardTextSerializer.ts\nimport { Plugin as Plugin3, PluginKey } from \"@tiptap/pm/state\";\n\n// src/Extension.ts\nvar Extension = class _Extension extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"extension\";\n }\n /**\n * Create a new Extension instance\n * @param config - Extension configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Extension(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/extensions/clipboardTextSerializer.ts\nvar ClipboardTextSerializer = Extension.create({\n name: \"clipboardTextSerializer\",\n addOptions() {\n return {\n blockSeparator: void 0\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin3({\n key: new PluginKey(\"clipboardTextSerializer\"),\n props: {\n clipboardTextSerializer: () => {\n const { editor } = this;\n const { state, schema } = editor;\n const { doc, selection } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map((range2) => range2.$from.pos));\n const to = Math.max(...ranges.map((range2) => range2.$to.pos));\n const textSerializers = getTextSerializersFromSchema(schema);\n const range = { from, to };\n return getTextBetween(doc, range, {\n ...this.options.blockSeparator !== void 0 ? { blockSeparator: this.options.blockSeparator } : {},\n textSerializers\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/commands.ts\nvar Commands = Extension.create({\n name: \"commands\",\n addCommands() {\n return {\n ...commands_exports\n };\n }\n});\n\n// src/extensions/delete.ts\nimport { RemoveMarkStep } from \"@tiptap/pm/transform\";\nvar Delete = Extension.create({\n name: \"delete\",\n onUpdate({ transaction, appendedTransactions }) {\n var _a, _b, _c;\n const callback = () => {\n var _a2, _b2, _c2, _d;\n if ((_d = (_c2 = (_b2 = (_a2 = this.editor.options.coreExtensionOptions) == null ? void 0 : _a2.delete) == null ? void 0 : _b2.filterTransaction) == null ? void 0 : _c2.call(_b2, transaction)) != null ? _d : transaction.getMeta(\"y-sync$\")) {\n return;\n }\n const nextTransaction = combineTransactionSteps(transaction.before, [transaction, ...appendedTransactions]);\n const changes = getChangedRanges(nextTransaction);\n changes.forEach((change) => {\n if (nextTransaction.mapping.mapResult(change.oldRange.from).deletedAfter && nextTransaction.mapping.mapResult(change.oldRange.to).deletedBefore) {\n nextTransaction.before.nodesBetween(change.oldRange.from, change.oldRange.to, (node, from) => {\n const to = from + node.nodeSize - 2;\n const isFullyWithinRange = change.oldRange.from <= from && to <= change.oldRange.to;\n this.editor.emit(\"delete\", {\n type: \"node\",\n node,\n from,\n to,\n newFrom: nextTransaction.mapping.map(from),\n newTo: nextTransaction.mapping.map(to),\n deletedRange: change.oldRange,\n newRange: change.newRange,\n partial: !isFullyWithinRange,\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n });\n }\n });\n const mapping = nextTransaction.mapping;\n nextTransaction.steps.forEach((step, index) => {\n var _a3, _b3;\n if (step instanceof RemoveMarkStep) {\n const newStart = mapping.slice(index).map(step.from, -1);\n const newEnd = mapping.slice(index).map(step.to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n const foundBeforeMark = newStart > 0 ? (_a3 = nextTransaction.doc.nodeAt(newStart - 1)) == null ? void 0 : _a3.marks.some((mark) => mark.eq(step.mark)) : false;\n const foundAfterMark = (_b3 = nextTransaction.doc.nodeAt(newEnd)) == null ? void 0 : _b3.marks.some((mark) => mark.eq(step.mark));\n this.editor.emit(\"delete\", {\n type: \"mark\",\n mark: step.mark,\n from: step.from,\n to: step.to,\n deletedRange: {\n from: oldStart,\n to: oldEnd\n },\n newRange: {\n from: newStart,\n to: newEnd\n },\n partial: Boolean(foundAfterMark || foundBeforeMark),\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction\n });\n }\n });\n };\n if ((_c = (_b = (_a = this.editor.options.coreExtensionOptions) == null ? void 0 : _a.delete) == null ? void 0 : _b.async) != null ? _c : true) {\n setTimeout(callback, 0);\n } else {\n callback();\n }\n }\n});\n\n// src/extensions/drop.ts\nimport { Plugin as Plugin4, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nvar Drop = Extension.create({\n name: \"drop\",\n addProseMirrorPlugins() {\n return [\n new Plugin4({\n key: new PluginKey2(\"tiptapDrop\"),\n props: {\n handleDrop: (_, e, slice, moved) => {\n this.editor.emit(\"drop\", {\n editor: this.editor,\n event: e,\n slice,\n moved\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/editable.ts\nimport { Plugin as Plugin5, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nvar Editable = Extension.create({\n name: \"editable\",\n addProseMirrorPlugins() {\n return [\n new Plugin5({\n key: new PluginKey3(\"editable\"),\n props: {\n editable: () => this.editor.options.editable\n }\n })\n ];\n }\n});\n\n// src/extensions/focusEvents.ts\nimport { Plugin as Plugin6, PluginKey as PluginKey4 } from \"@tiptap/pm/state\";\nvar focusEventsPluginKey = new PluginKey4(\"focusEvents\");\nvar FocusEvents = Extension.create({\n name: \"focusEvents\",\n addProseMirrorPlugins() {\n const { editor } = this;\n return [\n new Plugin6({\n key: focusEventsPluginKey,\n props: {\n handleDOMEvents: {\n focus: (view, event) => {\n editor.isFocused = true;\n const transaction = editor.state.tr.setMeta(\"focus\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n },\n blur: (view, event) => {\n editor.isFocused = false;\n const transaction = editor.state.tr.setMeta(\"blur\", { event }).setMeta(\"addToHistory\", false);\n view.dispatch(transaction);\n return false;\n }\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/keymap.ts\nimport { Plugin as Plugin7, PluginKey as PluginKey5, Selection as Selection3 } from \"@tiptap/pm/state\";\nvar Keymap = Extension.create({\n name: \"keymap\",\n addKeyboardShortcuts() {\n const handleBackspace = () => this.editor.commands.first(({ commands }) => [\n () => commands.undoInputRule(),\n // maybe convert first text block node to default node\n () => commands.command(({ tr }) => {\n const { selection, doc } = tr;\n const { empty, $anchor } = selection;\n const { pos, parent } = $anchor;\n const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr.doc.resolve(pos - 1) : $anchor;\n const parentIsIsolating = $parentPos.parent.type.spec.isolating;\n const parentPos = $anchor.pos - $anchor.parentOffset;\n const isAtStart = parentIsIsolating && $parentPos.parent.childCount === 1 ? parentPos === $anchor.pos : Selection3.atStart(doc).from === pos;\n if (!empty || !parent.type.isTextblock || parent.textContent.length || !isAtStart || isAtStart && $anchor.parent.type.name === \"paragraph\") {\n return false;\n }\n return commands.clearNodes();\n }),\n () => commands.deleteSelection(),\n () => commands.joinBackward(),\n () => commands.selectNodeBackward()\n ]);\n const handleDelete = () => this.editor.commands.first(({ commands }) => [\n () => commands.deleteSelection(),\n () => commands.deleteCurrentNode(),\n () => commands.joinForward(),\n () => commands.selectNodeForward()\n ]);\n const handleEnter = () => this.editor.commands.first(({ commands }) => [\n () => commands.newlineInCode(),\n () => commands.createParagraphNear(),\n () => commands.liftEmptyBlock(),\n () => commands.splitBlock()\n ]);\n const baseKeymap = {\n Enter: handleEnter,\n \"Mod-Enter\": () => this.editor.commands.exitCode(),\n Backspace: handleBackspace,\n \"Mod-Backspace\": handleBackspace,\n \"Shift-Backspace\": handleBackspace,\n Delete: handleDelete,\n \"Mod-Delete\": handleDelete,\n \"Mod-a\": () => this.editor.commands.selectAll()\n };\n const pcKeymap = {\n ...baseKeymap\n };\n const macKeymap = {\n ...baseKeymap,\n \"Ctrl-h\": handleBackspace,\n \"Alt-Backspace\": handleBackspace,\n \"Ctrl-d\": handleDelete,\n \"Ctrl-Alt-Backspace\": handleDelete,\n \"Alt-Delete\": handleDelete,\n \"Alt-d\": handleDelete,\n \"Ctrl-a\": () => this.editor.commands.selectTextblockStart(),\n \"Ctrl-e\": () => this.editor.commands.selectTextblockEnd()\n };\n if (isiOS() || isMacOS()) {\n return macKeymap;\n }\n return pcKeymap;\n },\n addProseMirrorPlugins() {\n return [\n // With this plugin we check if the whole document was selected and deleted.\n // In this case we will additionally call `clearNodes()` to convert e.g. a heading\n // to a paragraph if necessary.\n // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\n // with many other commands.\n new Plugin7({\n key: new PluginKey5(\"clearDocument\"),\n appendTransaction: (transactions, oldState, newState) => {\n if (transactions.some((tr2) => tr2.getMeta(\"composition\"))) {\n return;\n }\n const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n const ignoreTr = transactions.some((transaction) => transaction.getMeta(\"preventClearDocument\"));\n if (!docChanges || ignoreTr) {\n return;\n }\n const { empty, from, to } = oldState.selection;\n const allFrom = Selection3.atStart(oldState.doc).from;\n const allEnd = Selection3.atEnd(oldState.doc).to;\n const allWasSelected = from === allFrom && to === allEnd;\n if (empty || !allWasSelected) {\n return;\n }\n const isEmpty = isNodeEmpty(newState.doc);\n if (!isEmpty) {\n return;\n }\n const tr = newState.tr;\n const state = createChainableState({\n state: newState,\n transaction: tr\n });\n const { commands } = new CommandManager({\n editor: this.editor,\n state\n });\n commands.clearNodes();\n if (!tr.steps.length) {\n return;\n }\n return tr;\n }\n })\n ];\n }\n});\n\n// src/extensions/paste.ts\nimport { Plugin as Plugin8, PluginKey as PluginKey6 } from \"@tiptap/pm/state\";\nvar Paste = Extension.create({\n name: \"paste\",\n addProseMirrorPlugins() {\n return [\n new Plugin8({\n key: new PluginKey6(\"tiptapPaste\"),\n props: {\n handlePaste: (_view, e, slice) => {\n this.editor.emit(\"paste\", {\n editor: this.editor,\n event: e,\n slice\n });\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/tabindex.ts\nimport { Plugin as Plugin9, PluginKey as PluginKey7 } from \"@tiptap/pm/state\";\nvar Tabindex = Extension.create({\n name: \"tabindex\",\n addOptions() {\n return {\n value: void 0\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin9({\n key: new PluginKey7(\"tabindex\"),\n props: {\n attributes: () => {\n var _a;\n if (!this.editor.isEditable && this.options.value === void 0) {\n return {};\n }\n return { tabindex: (_a = this.options.value) != null ? _a : \"0\" };\n }\n }\n })\n ];\n }\n});\n\n// src/extensions/textDirection.ts\nimport { Plugin as Plugin10, PluginKey as PluginKey8 } from \"@tiptap/pm/state\";\nvar TextDirection = Extension.create({\n name: \"textDirection\",\n addOptions() {\n return {\n direction: void 0\n };\n },\n addGlobalAttributes() {\n if (!this.options.direction) {\n return [];\n }\n const { nodeExtensions } = splitExtensions(this.extensions);\n return [\n {\n types: nodeExtensions.filter((extension) => extension.name !== \"text\").map((extension) => extension.name),\n attributes: {\n dir: {\n default: this.options.direction,\n parseHTML: (element) => {\n const dir = element.getAttribute(\"dir\");\n if (dir && (dir === \"ltr\" || dir === \"rtl\" || dir === \"auto\")) {\n return dir;\n }\n return this.options.direction;\n },\n renderHTML: (attributes) => {\n if (!attributes.dir) {\n return {};\n }\n return {\n dir: attributes.dir\n };\n }\n }\n }\n }\n ];\n },\n addProseMirrorPlugins() {\n return [\n new Plugin10({\n key: new PluginKey8(\"textDirection\"),\n props: {\n attributes: () => {\n const direction = this.options.direction;\n if (!direction) {\n return {};\n }\n return {\n dir: direction\n };\n }\n }\n })\n ];\n }\n});\n\n// src/NodePos.ts\nvar NodePos = class _NodePos {\n constructor(pos, editor, isBlock = false, node = null) {\n this.currentNode = null;\n this.actualDepth = null;\n this.isBlock = isBlock;\n this.resolvedPos = pos;\n this.editor = editor;\n this.currentNode = node;\n }\n get name() {\n return this.node.type.name;\n }\n get node() {\n return this.currentNode || this.resolvedPos.node();\n }\n get element() {\n return this.editor.view.domAtPos(this.pos).node;\n }\n get depth() {\n var _a;\n return (_a = this.actualDepth) != null ? _a : this.resolvedPos.depth;\n }\n get pos() {\n return this.resolvedPos.pos;\n }\n get content() {\n return this.node.content;\n }\n set content(content) {\n let from = this.from;\n let to = this.to;\n if (this.isBlock) {\n if (this.content.size === 0) {\n console.error(`You can\\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);\n return;\n }\n from = this.from + 1;\n to = this.to - 1;\n }\n this.editor.commands.insertContentAt({ from, to }, content);\n }\n get attributes() {\n return this.node.attrs;\n }\n get textContent() {\n return this.node.textContent;\n }\n get size() {\n return this.node.nodeSize;\n }\n get from() {\n if (this.isBlock) {\n return this.pos;\n }\n return this.resolvedPos.start(this.resolvedPos.depth);\n }\n get range() {\n return {\n from: this.from,\n to: this.to\n };\n }\n get to() {\n if (this.isBlock) {\n return this.pos + this.size;\n }\n return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);\n }\n get parent() {\n if (this.depth === 0) {\n return null;\n }\n const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);\n const $pos = this.resolvedPos.doc.resolve(parentPos);\n return new _NodePos($pos, this.editor);\n }\n get before() {\n let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.from - 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get after() {\n let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.to + 3);\n }\n return new _NodePos($pos, this.editor);\n }\n get children() {\n const children = [];\n this.node.content.forEach((node, offset) => {\n const isBlock = node.isBlock && !node.isTextblock;\n const isNonTextAtom = node.isAtom && !node.isText;\n const isInline = node.isInline;\n const targetPos = this.pos + offset + (isNonTextAtom ? 0 : 1);\n if (targetPos < 0 || targetPos > this.resolvedPos.doc.nodeSize - 2) {\n return;\n }\n const $pos = this.resolvedPos.doc.resolve(targetPos);\n if (!isBlock && !isInline && $pos.depth <= this.depth) {\n return;\n }\n const childNodePos = new _NodePos($pos, this.editor, isBlock, isBlock || isInline ? node : null);\n if (isBlock) {\n childNodePos.actualDepth = this.depth + 1;\n }\n children.push(childNodePos);\n });\n return children;\n }\n get firstChild() {\n return this.children[0] || null;\n }\n get lastChild() {\n const children = this.children;\n return children[children.length - 1] || null;\n }\n closest(selector, attributes = {}) {\n let node = null;\n let currentNode = this.parent;\n while (currentNode && !node) {\n if (currentNode.node.type.name === selector) {\n if (Object.keys(attributes).length > 0) {\n const nodeAttributes = currentNode.node.attrs;\n const attrKeys = Object.keys(attributes);\n for (let index = 0; index < attrKeys.length; index += 1) {\n const key = attrKeys[index];\n if (nodeAttributes[key] !== attributes[key]) {\n break;\n }\n }\n } else {\n node = currentNode;\n }\n }\n currentNode = currentNode.parent;\n }\n return node;\n }\n querySelector(selector, attributes = {}) {\n return this.querySelectorAll(selector, attributes, true)[0] || null;\n }\n querySelectorAll(selector, attributes = {}, firstItemOnly = false) {\n let nodes = [];\n if (!this.children || this.children.length === 0) {\n return nodes;\n }\n const attrKeys = Object.keys(attributes);\n this.children.forEach((childPos) => {\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n if (childPos.node.type.name === selector) {\n const doesAllAttributesMatch = attrKeys.every((key) => attributes[key] === childPos.node.attrs[key]);\n if (doesAllAttributesMatch) {\n nodes.push(childPos);\n }\n }\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n nodes = nodes.concat(childPos.querySelectorAll(selector, attributes, firstItemOnly));\n });\n return nodes;\n }\n setAttribute(attributes) {\n const { tr } = this.editor.state;\n tr.setNodeMarkup(this.from, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n this.editor.view.dispatch(tr);\n }\n};\n\n// src/style.ts\nvar style = `.ProseMirror {\n position: relative;\n}\n\n.ProseMirror {\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n display: inline !important;\n border: none !important;\n margin: 0 !important;\n width: 0 !important;\n height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n}\n\n.ProseMirror-hideselection *::selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection * {\n caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n}`;\n\n// src/utilities/createStyleTag.ts\nfunction createStyleTag(style2, nonce, suffix) {\n const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : \"\"}]`);\n if (tiptapStyleTag !== null) {\n return tiptapStyleTag;\n }\n const styleNode = document.createElement(\"style\");\n if (nonce) {\n styleNode.setAttribute(\"nonce\", nonce);\n }\n styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : \"\"}`, \"\");\n styleNode.innerHTML = style2;\n document.getElementsByTagName(\"head\")[0].appendChild(styleNode);\n return styleNode;\n}\n\n// src/Editor.ts\nvar Editor = class extends EventEmitter {\n constructor(options = {}) {\n super();\n this.css = null;\n this.className = \"tiptap\";\n this.editorView = null;\n this.isFocused = false;\n this.destroyed = false;\n /**\n * The editor is considered initialized after the `create` event has been emitted.\n */\n this.isInitialized = false;\n this.extensionStorage = {};\n /**\n * A unique ID for this editor instance.\n */\n this.instanceId = Math.random().toString(36).slice(2, 9);\n this.options = {\n element: typeof document !== \"undefined\" ? document.createElement(\"div\") : null,\n content: \"\",\n injectCSS: true,\n injectNonce: void 0,\n extensions: [],\n autofocus: false,\n editable: true,\n textDirection: void 0,\n editorProps: {},\n parseOptions: {},\n coreExtensionOptions: {},\n enableInputRules: true,\n enablePasteRules: true,\n enableCoreExtensions: true,\n enableContentCheck: false,\n emitContentError: false,\n onBeforeCreate: () => null,\n onCreate: () => null,\n onMount: () => null,\n onUnmount: () => null,\n onUpdate: () => null,\n onSelectionUpdate: () => null,\n onTransaction: () => null,\n onFocus: () => null,\n onBlur: () => null,\n onDestroy: () => null,\n onContentError: ({ error }) => {\n throw error;\n },\n onPaste: () => null,\n onDrop: () => null,\n onDelete: () => null,\n enableExtensionDispatchTransaction: true\n };\n this.isCapturingTransaction = false;\n this.capturedTransaction = null;\n /**\n * Returns a set of utilities for working with positions and ranges.\n */\n this.utils = {\n getUpdatedPosition,\n createMappablePosition\n };\n this.setOptions(options);\n this.createExtensionManager();\n this.createCommandManager();\n this.createSchema();\n this.on(\"beforeCreate\", this.options.onBeforeCreate);\n this.emit(\"beforeCreate\", { editor: this });\n this.on(\"mount\", this.options.onMount);\n this.on(\"unmount\", this.options.onUnmount);\n this.on(\"contentError\", this.options.onContentError);\n this.on(\"create\", this.options.onCreate);\n this.on(\"update\", this.options.onUpdate);\n this.on(\"selectionUpdate\", this.options.onSelectionUpdate);\n this.on(\"transaction\", this.options.onTransaction);\n this.on(\"focus\", this.options.onFocus);\n this.on(\"blur\", this.options.onBlur);\n this.on(\"destroy\", this.options.onDestroy);\n this.on(\"drop\", ({ event, slice, moved }) => this.options.onDrop(event, slice, moved));\n this.on(\"paste\", ({ event, slice }) => this.options.onPaste(event, slice));\n this.on(\"delete\", this.options.onDelete);\n const initialDoc = this.createDoc();\n const selection = resolveFocusPosition(initialDoc, this.options.autofocus);\n this.editorState = EditorState.create({\n doc: initialDoc,\n schema: this.schema,\n selection: selection || void 0\n });\n if (this.options.element) {\n this.mount(this.options.element);\n }\n }\n /**\n * Attach the editor to the DOM, creating a new editor view.\n */\n mount(el) {\n if (typeof document === \"undefined\") {\n throw new Error(\n `[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.`\n );\n }\n this.createView(el);\n this.emit(\"mount\", { editor: this });\n if (this.css && !document.head.contains(this.css)) {\n document.head.appendChild(this.css);\n }\n window.setTimeout(() => {\n if (this.isDestroyed) {\n return;\n }\n if (this.options.autofocus !== false && this.options.autofocus !== null) {\n this.commands.focus(this.options.autofocus);\n }\n this.emit(\"create\", { editor: this });\n this.isInitialized = true;\n }, 0);\n }\n /**\n * Remove the editor from the DOM, but still allow remounting at a different point in time\n */\n unmount() {\n if (this.editorView) {\n const dom = this.editorView.dom;\n if (dom == null ? void 0 : dom.editor) {\n delete dom.editor;\n }\n this.editorView.destroy();\n }\n this.editorView = null;\n this.isInitialized = false;\n if (this.css && !document.querySelectorAll(`.${this.className}`).length) {\n try {\n if (typeof this.css.remove === \"function\") {\n this.css.remove();\n } else if (this.css.parentNode) {\n this.css.parentNode.removeChild(this.css);\n }\n } catch (error) {\n console.warn(\"Failed to remove CSS element:\", error);\n }\n }\n this.css = null;\n this.emit(\"unmount\", { editor: this });\n }\n /**\n * Returns the editor storage.\n */\n get storage() {\n return this.extensionStorage;\n }\n /**\n * An object of all registered commands.\n */\n get commands() {\n return this.commandManager.commands;\n }\n /**\n * Create a command chain to call multiple commands at once.\n */\n chain() {\n return this.commandManager.chain();\n }\n /**\n * Check if a command or a command chain can be executed. Without executing it.\n */\n can() {\n return this.commandManager.can();\n }\n /**\n * Inject CSS styles.\n */\n injectCSS() {\n if (this.options.injectCSS && typeof document !== \"undefined\") {\n this.css = createStyleTag(style, this.options.injectNonce);\n }\n }\n /**\n * Update editor options.\n *\n * @param options A list of options\n */\n setOptions(options = {}) {\n this.options = {\n ...this.options,\n ...options\n };\n if (!this.editorView || !this.state || this.isDestroyed) {\n return;\n }\n if (this.options.editorProps) {\n this.view.setProps(this.options.editorProps);\n }\n this.view.updateState(this.state);\n }\n /**\n * Update editable state of the editor.\n */\n setEditable(editable, emitUpdate = true) {\n this.setOptions({ editable });\n if (emitUpdate) {\n this.emit(\"update\", { editor: this, transaction: this.state.tr, appendedTransactions: [] });\n }\n }\n /**\n * Returns whether the editor is editable.\n */\n get isEditable() {\n return this.options.editable && this.view && this.view.editable;\n }\n /**\n * Returns the editor view.\n */\n get view() {\n if (this.editorView) {\n return this.editorView;\n }\n return new Proxy(\n {\n state: this.editorState,\n updateState: (state) => {\n this.editorState = state;\n },\n dispatch: (tr) => {\n this.dispatchTransaction(tr);\n },\n // Stub some commonly accessed properties to prevent errors\n composing: false,\n dragging: null,\n editable: true,\n isDestroyed: false\n },\n {\n get: (obj, key) => {\n if (this.editorView) {\n return this.editorView[key];\n }\n if (key === \"state\") {\n return this.editorState;\n }\n if (key in obj) {\n return Reflect.get(obj, key);\n }\n throw new Error(\n `[tiptap error]: The editor view is not available. Cannot access view['${key}']. The editor may not be mounted yet.`\n );\n }\n }\n );\n }\n /**\n * Returns the editor state.\n */\n get state() {\n if (this.editorView) {\n this.editorState = this.view.state;\n }\n return this.editorState;\n }\n /**\n * Register a ProseMirror plugin.\n *\n * @param plugin A ProseMirror plugin\n * @param handlePlugins Control how to merge the plugin into the existing plugins.\n * @returns The new editor state\n */\n registerPlugin(plugin, handlePlugins) {\n const plugins = isFunction(handlePlugins) ? handlePlugins(plugin, [...this.state.plugins]) : [...this.state.plugins, plugin];\n const state = this.state.reconfigure({ plugins });\n this.view.updateState(state);\n return state;\n }\n /**\n * Unregister a ProseMirror plugin.\n *\n * @param nameOrPluginKeyToRemove The plugins name\n * @returns The new editor state or undefined if the editor is destroyed\n */\n unregisterPlugin(nameOrPluginKeyToRemove) {\n if (this.isDestroyed) {\n return void 0;\n }\n const prevPlugins = this.state.plugins;\n let plugins = prevPlugins;\n [].concat(nameOrPluginKeyToRemove).forEach((nameOrPluginKey) => {\n const name = typeof nameOrPluginKey === \"string\" ? `${nameOrPluginKey}$` : nameOrPluginKey.key;\n plugins = plugins.filter((plugin) => !plugin.key.startsWith(name));\n });\n if (prevPlugins.length === plugins.length) {\n return void 0;\n }\n const state = this.state.reconfigure({\n plugins\n });\n this.view.updateState(state);\n return state;\n }\n /**\n * Creates an extension manager.\n */\n createExtensionManager() {\n var _a, _b, _c, _d;\n const coreExtensions = this.options.enableCoreExtensions ? [\n Editable,\n ClipboardTextSerializer.configure({\n blockSeparator: (_b = (_a = this.options.coreExtensionOptions) == null ? void 0 : _a.clipboardTextSerializer) == null ? void 0 : _b.blockSeparator\n }),\n Commands,\n FocusEvents,\n Keymap,\n Tabindex.configure({\n value: (_d = (_c = this.options.coreExtensionOptions) == null ? void 0 : _c.tabindex) == null ? void 0 : _d.value\n }),\n Drop,\n Paste,\n Delete,\n TextDirection.configure({\n direction: this.options.textDirection\n })\n ].filter((ext) => {\n if (typeof this.options.enableCoreExtensions === \"object\") {\n return this.options.enableCoreExtensions[ext.name] !== false;\n }\n return true;\n }) : [];\n const allExtensions = [...coreExtensions, ...this.options.extensions].filter((extension) => {\n return [\"extension\", \"node\", \"mark\"].includes(extension == null ? void 0 : extension.type);\n });\n this.extensionManager = new ExtensionManager(allExtensions, this);\n }\n /**\n * Creates an command manager.\n */\n createCommandManager() {\n this.commandManager = new CommandManager({\n editor: this\n });\n }\n /**\n * Creates a ProseMirror schema.\n */\n createSchema() {\n this.schema = this.extensionManager.schema;\n }\n /**\n * Creates the initial document.\n */\n createDoc() {\n let doc;\n try {\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: this.options.enableContentCheck\n });\n } catch (e) {\n if (!(e instanceof Error) || ![\"[tiptap error]: Invalid JSON content\", \"[tiptap error]: Invalid HTML content\"].includes(e.message)) {\n throw e;\n }\n this.emit(\"contentError\", {\n editor: this,\n error: e,\n disableCollaboration: () => {\n if (\"collaboration\" in this.storage && typeof this.storage.collaboration === \"object\" && this.storage.collaboration) {\n ;\n this.storage.collaboration.isDisabled = true;\n }\n this.options.extensions = this.options.extensions.filter((extension) => extension.name !== \"collaboration\");\n this.createExtensionManager();\n }\n });\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {\n errorOnInvalidContent: false\n });\n }\n return doc;\n }\n /**\n * Creates a ProseMirror view.\n */\n createView(element) {\n const { editorProps, enableExtensionDispatchTransaction } = this.options;\n const baseDispatch = editorProps.dispatchTransaction || this.dispatchTransaction.bind(this);\n const dispatch = enableExtensionDispatchTransaction ? this.extensionManager.dispatchTransaction(baseDispatch) : baseDispatch;\n const baseTransformPastedHTML = editorProps.transformPastedHTML;\n const transformPastedHTML = this.extensionManager.transformPastedHTML(baseTransformPastedHTML);\n this.editorView = new EditorView(element, {\n ...editorProps,\n attributes: {\n // add `role=\"textbox\"` to the editor element\n role: \"textbox\",\n ...editorProps == null ? void 0 : editorProps.attributes\n },\n dispatchTransaction: dispatch,\n transformPastedHTML,\n state: this.editorState,\n markViews: this.extensionManager.markViews,\n nodeViews: this.extensionManager.nodeViews\n });\n const newState = this.state.reconfigure({\n plugins: this.extensionManager.plugins\n });\n this.view.updateState(newState);\n this.prependClass();\n this.injectCSS();\n const dom = this.view.dom;\n dom.editor = this;\n }\n /**\n * Creates all node and mark views.\n */\n createNodeViews() {\n if (this.view.isDestroyed) {\n return;\n }\n this.view.setProps({\n markViews: this.extensionManager.markViews,\n nodeViews: this.extensionManager.nodeViews\n });\n }\n /**\n * Prepend class name to element.\n */\n prependClass() {\n this.view.dom.className = `${this.className} ${this.view.dom.className}`;\n }\n captureTransaction(fn) {\n this.isCapturingTransaction = true;\n fn();\n this.isCapturingTransaction = false;\n const tr = this.capturedTransaction;\n this.capturedTransaction = null;\n return tr;\n }\n /**\n * The callback over which to send transactions (state updates) produced by the view.\n *\n * @param transaction An editor state transaction\n */\n dispatchTransaction(transaction) {\n if (this.view.isDestroyed) {\n return;\n }\n if (this.isCapturingTransaction) {\n if (!this.capturedTransaction) {\n this.capturedTransaction = transaction;\n return;\n }\n transaction.steps.forEach((step) => {\n var _a;\n return (_a = this.capturedTransaction) == null ? void 0 : _a.step(step);\n });\n return;\n }\n const { state, transactions } = this.state.applyTransaction(transaction);\n const selectionHasChanged = !this.state.selection.eq(state.selection);\n const rootTrWasApplied = transactions.includes(transaction);\n const prevState = this.state;\n this.emit(\"beforeTransaction\", {\n editor: this,\n transaction,\n nextState: state\n });\n if (!rootTrWasApplied) {\n return;\n }\n this.view.updateState(state);\n this.emit(\"transaction\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n if (selectionHasChanged) {\n this.emit(\"selectionUpdate\", {\n editor: this,\n transaction\n });\n }\n const mostRecentFocusTr = transactions.findLast((tr) => tr.getMeta(\"focus\") || tr.getMeta(\"blur\"));\n const focus2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"focus\");\n const blur2 = mostRecentFocusTr == null ? void 0 : mostRecentFocusTr.getMeta(\"blur\");\n if (focus2) {\n this.emit(\"focus\", {\n editor: this,\n event: focus2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (blur2) {\n this.emit(\"blur\", {\n editor: this,\n event: blur2.event,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transaction: mostRecentFocusTr\n });\n }\n if (transaction.getMeta(\"preventUpdate\") || !transactions.some((tr) => tr.docChanged) || prevState.doc.eq(state.doc)) {\n return;\n }\n this.emit(\"update\", {\n editor: this,\n transaction,\n appendedTransactions: transactions.slice(1)\n });\n }\n /**\n * Get attributes of the currently selected node or mark.\n */\n getAttributes(nameOrType) {\n return getAttributes(this.state, nameOrType);\n }\n isActive(nameOrAttributes, attributesOrUndefined) {\n const name = typeof nameOrAttributes === \"string\" ? nameOrAttributes : null;\n const attributes = typeof nameOrAttributes === \"string\" ? attributesOrUndefined : nameOrAttributes;\n return isActive(this.state, name, attributes);\n }\n /**\n * Get the document as JSON.\n */\n getJSON() {\n return this.state.doc.toJSON();\n }\n /**\n * Get the document as HTML.\n */\n getHTML() {\n return getHTMLFromFragment(this.state.doc.content, this.schema);\n }\n /**\n * Get the document as text.\n */\n getText(options) {\n const { blockSeparator = \"\\n\\n\", textSerializers = {} } = options || {};\n return getText(this.state.doc, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(this.schema),\n ...textSerializers\n }\n });\n }\n /**\n * Check if there is no content.\n */\n get isEmpty() {\n return isNodeEmpty(this.state.doc);\n }\n /**\n * Destroy the editor.\n */\n destroy() {\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.emit(\"destroy\");\n this.unmount();\n this.removeAllListeners();\n this.extensionManager.destroy();\n this.extensionManager = null;\n this.schema = null;\n this.commandManager = null;\n this.extensionStorage = {};\n }\n /**\n * Check if the editor is already destroyed.\n */\n get isDestroyed() {\n var _a, _b;\n return (_b = (_a = this.editorView) == null ? void 0 : _a.isDestroyed) != null ? _b : true;\n }\n $node(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelector(selector, attributes)) || null;\n }\n $nodes(selector, attributes) {\n var _a;\n return ((_a = this.$doc) == null ? void 0 : _a.querySelectorAll(selector, attributes)) || null;\n }\n $pos(pos) {\n const $pos = this.state.doc.resolve(pos);\n return new NodePos($pos, this);\n }\n get $doc() {\n return this.$pos(0);\n }\n};\n\n// src/inputRules/markInputRule.ts\nfunction markInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n const markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/nodeInputRule.ts\nfunction nodeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const { tr } = state;\n const start = range.from;\n let end = range.to;\n const newNode = config.type.create(attributes);\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n let matchStart = start + offset;\n if (matchStart > end) {\n matchStart = end;\n } else {\n end = matchStart + match[1].length;\n }\n const lastChar = match[0][match[0].length - 1];\n tr.insertText(lastChar, start + match[0].length - 1);\n tr.replaceWith(matchStart, end, newNode);\n } else if (match[0]) {\n const insertionStart = config.type.isInline ? start : start - 1;\n tr.insert(insertionStart, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end));\n }\n tr.scrollIntoView();\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/textblockTypeInputRule.ts\nfunction textblockTypeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const $start = state.doc.resolve(range.from);\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {\n return null;\n }\n state.tr.delete(range.from, range.to).setBlockType(range.from, range.from, config.type, attributes);\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/textInputRule.ts\nfunction textInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n },\n undoable: config.undoable\n });\n}\n\n// src/inputRules/wrappingInputRule.ts\nimport { canJoin as canJoin2, findWrapping } from \"@tiptap/pm/transform\";\nfunction wrappingInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match, chain }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match) || {};\n const tr = state.tr.delete(range.from, range.to);\n const $start = tr.doc.resolve(range.from);\n const blockRange = $start.blockRange();\n const wrapping = blockRange && findWrapping(blockRange, config.type, attributes);\n if (!wrapping) {\n return null;\n }\n tr.wrap(blockRange, wrapping);\n if (config.keepMarks && config.editor) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = config.editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n if (marks) {\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n }\n if (config.keepAttributes) {\n const nodeType = config.type.name === \"bulletList\" || config.type.name === \"orderedList\" ? \"listItem\" : \"taskList\";\n chain().updateAttributes(nodeType, attributes).run();\n }\n const before = tr.doc.resolve(range.from - 1).nodeBefore;\n if (before && before.type === config.type && canJoin2(tr.doc, range.from - 1) && (!config.joinPredicate || config.joinPredicate(match, before))) {\n tr.join(range.from - 1);\n }\n },\n undoable: config.undoable\n });\n}\n\n// src/jsx-runtime.ts\nfunction Fragment6(props) {\n return props.children;\n}\nvar h = (tag, attributes) => {\n if (tag === \"slot\") {\n return 0;\n }\n if (tag instanceof Function) {\n return tag(attributes);\n }\n const { children, ...rest } = attributes != null ? attributes : {};\n if (tag === \"svg\") {\n throw new Error(\"SVG elements are not supported in the JSX syntax, use the array syntax instead\");\n }\n return [tag, rest, children];\n};\n\n// src/lib/ResizableNodeView.ts\nvar isTouchEvent = (e) => {\n return \"touches\" in e;\n};\nvar ResizableNodeView = class {\n /**\n * Creates a new ResizableNodeView instance.\n *\n * The constructor sets up the resize handles, applies initial sizing from\n * node attributes, and configures all resize behavior options.\n *\n * @param options - Configuration options for the resizable node view\n */\n constructor(options) {\n /** Active resize handle directions */\n this.directions = [\"bottom-left\", \"bottom-right\", \"top-left\", \"top-right\"];\n /** Minimum allowed dimensions */\n this.minSize = {\n height: 8,\n width: 8\n };\n /** Whether to always preserve aspect ratio */\n this.preserveAspectRatio = false;\n /** CSS class names for elements */\n this.classNames = {\n container: \"\",\n wrapper: \"\",\n handle: \"\",\n resizing: \"\"\n };\n /** Initial width of the element (for aspect ratio calculation) */\n this.initialWidth = 0;\n /** Initial height of the element (for aspect ratio calculation) */\n this.initialHeight = 0;\n /** Calculated aspect ratio (width / height) */\n this.aspectRatio = 1;\n /** Whether a resize operation is currently active */\n this.isResizing = false;\n /** The handle currently being dragged */\n this.activeHandle = null;\n /** Starting mouse X position when resize began */\n this.startX = 0;\n /** Starting mouse Y position when resize began */\n this.startY = 0;\n /** Element width when resize began */\n this.startWidth = 0;\n /** Element height when resize began */\n this.startHeight = 0;\n /** Whether Shift key is currently pressed (for temporary aspect ratio lock) */\n this.isShiftKeyPressed = false;\n /** Last known editable state of the editor */\n this.lastEditableState = void 0;\n /** Map of handle elements by direction */\n this.handleMap = /* @__PURE__ */ new Map();\n /**\n * Handles mouse movement during an active resize.\n *\n * Calculates the delta from the starting position, computes new dimensions\n * based on the active handle direction, applies constraints and aspect ratio,\n * then updates the element's style and calls the onResize callback.\n *\n * @param event - The mouse move event\n */\n this.handleMouseMove = (event) => {\n if (!this.isResizing || !this.activeHandle) {\n return;\n }\n const deltaX = event.clientX - this.startX;\n const deltaY = event.clientY - this.startY;\n this.handleResize(deltaX, deltaY);\n };\n this.handleTouchMove = (event) => {\n if (!this.isResizing || !this.activeHandle) {\n return;\n }\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const deltaX = touch.clientX - this.startX;\n const deltaY = touch.clientY - this.startY;\n this.handleResize(deltaX, deltaY);\n };\n /**\n * Completes the resize operation when the mouse button is released.\n *\n * Captures final dimensions, calls the onCommit callback to persist changes,\n * removes the resizing state and class, and cleans up document-level listeners.\n */\n this.handleMouseUp = () => {\n if (!this.isResizing) {\n return;\n }\n const finalWidth = this.element.offsetWidth;\n const finalHeight = this.element.offsetHeight;\n this.onCommit(finalWidth, finalHeight);\n this.isResizing = false;\n this.activeHandle = null;\n this.container.dataset.resizeState = \"false\";\n if (this.classNames.resizing) {\n this.container.classList.remove(this.classNames.resizing);\n }\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n document.removeEventListener(\"keyup\", this.handleKeyUp);\n };\n /**\n * Tracks Shift key state to enable temporary aspect ratio locking.\n *\n * When Shift is pressed during resize, aspect ratio is preserved even if\n * preserveAspectRatio is false.\n *\n * @param event - The keyboard event\n */\n this.handleKeyDown = (event) => {\n if (event.key === \"Shift\") {\n this.isShiftKeyPressed = true;\n }\n };\n /**\n * Tracks Shift key release to disable temporary aspect ratio locking.\n *\n * @param event - The keyboard event\n */\n this.handleKeyUp = (event) => {\n if (event.key === \"Shift\") {\n this.isShiftKeyPressed = false;\n }\n };\n var _a, _b, _c, _d, _e, _f;\n this.node = options.node;\n this.editor = options.editor;\n this.element = options.element;\n this.contentElement = options.contentElement;\n this.getPos = options.getPos;\n this.onResize = options.onResize;\n this.onCommit = options.onCommit;\n this.onUpdate = options.onUpdate;\n if ((_a = options.options) == null ? void 0 : _a.min) {\n this.minSize = {\n ...this.minSize,\n ...options.options.min\n };\n }\n if ((_b = options.options) == null ? void 0 : _b.max) {\n this.maxSize = options.options.max;\n }\n if ((_c = options == null ? void 0 : options.options) == null ? void 0 : _c.directions) {\n this.directions = options.options.directions;\n }\n if ((_d = options.options) == null ? void 0 : _d.preserveAspectRatio) {\n this.preserveAspectRatio = options.options.preserveAspectRatio;\n }\n if ((_e = options.options) == null ? void 0 : _e.className) {\n this.classNames = {\n container: options.options.className.container || \"\",\n wrapper: options.options.className.wrapper || \"\",\n handle: options.options.className.handle || \"\",\n resizing: options.options.className.resizing || \"\"\n };\n }\n if ((_f = options.options) == null ? void 0 : _f.createCustomHandle) {\n this.createCustomHandle = options.options.createCustomHandle;\n }\n this.wrapper = this.createWrapper();\n this.container = this.createContainer();\n this.applyInitialSize();\n this.attachHandles();\n this.editor.on(\"update\", this.handleEditorUpdate.bind(this));\n }\n /**\n * Returns the top-level DOM node that should be placed in the editor.\n *\n * This is required by the ProseMirror NodeView interface. The container\n * includes the wrapper, handles, and the actual content element.\n *\n * @returns The container element to be inserted into the editor\n */\n get dom() {\n return this.container;\n }\n get contentDOM() {\n var _a;\n return (_a = this.contentElement) != null ? _a : null;\n }\n handleEditorUpdate() {\n const isEditable = this.editor.isEditable;\n if (isEditable === this.lastEditableState) {\n return;\n }\n this.lastEditableState = isEditable;\n if (!isEditable) {\n this.removeHandles();\n } else if (isEditable && this.handleMap.size === 0) {\n this.attachHandles();\n }\n }\n /**\n * Called when the node's content or attributes change.\n *\n * Updates the internal node reference. If a custom `onUpdate` callback\n * was provided, it will be called to handle additional update logic.\n *\n * @param node - The new/updated node\n * @param decorations - Node decorations\n * @param innerDecorations - Inner decorations\n * @returns `false` if the node type has changed (requires full rebuild), otherwise the result of `onUpdate` or `true`\n */\n update(node, decorations, innerDecorations) {\n if (node.type !== this.node.type) {\n return false;\n }\n this.node = node;\n if (this.onUpdate) {\n return this.onUpdate(node, decorations, innerDecorations);\n }\n return true;\n }\n /**\n * Cleanup method called when the node view is being removed.\n *\n * Removes all event listeners to prevent memory leaks. This is required\n * by the ProseMirror NodeView interface. If a resize is active when\n * destroy is called, it will be properly cancelled.\n */\n destroy() {\n if (this.isResizing) {\n this.container.dataset.resizeState = \"false\";\n if (this.classNames.resizing) {\n this.container.classList.remove(this.classNames.resizing);\n }\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n document.removeEventListener(\"keyup\", this.handleKeyUp);\n this.isResizing = false;\n this.activeHandle = null;\n }\n this.editor.off(\"update\", this.handleEditorUpdate.bind(this));\n this.container.remove();\n }\n /**\n * Creates the outer container element.\n *\n * The container is the top-level element returned by the NodeView and\n * wraps the entire resizable node. It's set up with flexbox to handle\n * alignment and includes data attributes for styling and identification.\n *\n * @returns The container element\n */\n createContainer() {\n const element = document.createElement(\"div\");\n element.dataset.resizeContainer = \"\";\n element.dataset.node = this.node.type.name;\n element.style.display = this.node.type.isInline ? \"inline-flex\" : \"flex\";\n if (this.classNames.container) {\n element.className = this.classNames.container;\n }\n element.appendChild(this.wrapper);\n return element;\n }\n /**\n * Creates the wrapper element that contains the content and handles.\n *\n * The wrapper uses relative positioning so that resize handles can be\n * positioned absolutely within it. This is the direct parent of the\n * content element being made resizable.\n *\n * @returns The wrapper element\n */\n createWrapper() {\n const element = document.createElement(\"div\");\n element.style.position = \"relative\";\n element.style.display = \"block\";\n element.dataset.resizeWrapper = \"\";\n if (this.classNames.wrapper) {\n element.className = this.classNames.wrapper;\n }\n element.appendChild(this.element);\n return element;\n }\n /**\n * Creates a resize handle element for a specific direction.\n *\n * Each handle is absolutely positioned and includes a data attribute\n * identifying its direction for styling purposes.\n *\n * @param direction - The resize direction for this handle\n * @returns The handle element\n */\n createHandle(direction) {\n const handle = document.createElement(\"div\");\n handle.dataset.resizeHandle = direction;\n handle.style.position = \"absolute\";\n if (this.classNames.handle) {\n handle.className = this.classNames.handle;\n }\n return handle;\n }\n /**\n * Positions a handle element according to its direction.\n *\n * Corner handles (e.g., 'top-left') are positioned at the intersection\n * of two edges. Edge handles (e.g., 'top') span the full width or height.\n *\n * @param handle - The handle element to position\n * @param direction - The direction determining the position\n */\n positionHandle(handle, direction) {\n const isTop = direction.includes(\"top\");\n const isBottom = direction.includes(\"bottom\");\n const isLeft = direction.includes(\"left\");\n const isRight = direction.includes(\"right\");\n if (isTop) {\n handle.style.top = \"0\";\n }\n if (isBottom) {\n handle.style.bottom = \"0\";\n }\n if (isLeft) {\n handle.style.left = \"0\";\n }\n if (isRight) {\n handle.style.right = \"0\";\n }\n if (direction === \"top\" || direction === \"bottom\") {\n handle.style.left = \"0\";\n handle.style.right = \"0\";\n }\n if (direction === \"left\" || direction === \"right\") {\n handle.style.top = \"0\";\n handle.style.bottom = \"0\";\n }\n }\n /**\n * Creates and attaches all resize handles to the wrapper.\n *\n * Iterates through the configured directions, creates a handle for each,\n * positions it, attaches the mousedown listener, and appends it to the DOM.\n */\n attachHandles() {\n this.directions.forEach((direction) => {\n let handle;\n if (this.createCustomHandle) {\n handle = this.createCustomHandle(direction);\n } else {\n handle = this.createHandle(direction);\n }\n if (!(handle instanceof HTMLElement)) {\n console.warn(\n `[ResizableNodeView] createCustomHandle(\"${direction}\") did not return an HTMLElement. Falling back to default handle.`\n );\n handle = this.createHandle(direction);\n }\n if (!this.createCustomHandle) {\n this.positionHandle(handle, direction);\n }\n handle.addEventListener(\"mousedown\", (event) => this.handleResizeStart(event, direction));\n handle.addEventListener(\"touchstart\", (event) => this.handleResizeStart(event, direction));\n this.handleMap.set(direction, handle);\n this.wrapper.appendChild(handle);\n });\n }\n /**\n * Removes all resize handles from the wrapper.\n *\n * Cleans up the handle map and removes each handle element from the DOM.\n */\n removeHandles() {\n this.handleMap.forEach((el) => el.remove());\n this.handleMap.clear();\n }\n /**\n * Applies initial sizing from node attributes to the element.\n *\n * If width/height attributes exist on the node, they're applied to the element.\n * Otherwise, the element's natural/current dimensions are measured. The aspect\n * ratio is calculated for later use in aspect-ratio-preserving resizes.\n */\n applyInitialSize() {\n const width = this.node.attrs.width;\n const height = this.node.attrs.height;\n if (width) {\n this.element.style.width = `${width}px`;\n this.initialWidth = width;\n } else {\n this.initialWidth = this.element.offsetWidth;\n }\n if (height) {\n this.element.style.height = `${height}px`;\n this.initialHeight = height;\n } else {\n this.initialHeight = this.element.offsetHeight;\n }\n if (this.initialWidth > 0 && this.initialHeight > 0) {\n this.aspectRatio = this.initialWidth / this.initialHeight;\n }\n }\n /**\n * Initiates a resize operation when a handle is clicked.\n *\n * Captures the starting mouse position and element dimensions, sets up\n * the resize state, adds the resizing class and state attribute, and\n * attaches document-level listeners for mouse movement and keyboard input.\n *\n * @param event - The mouse down event\n * @param direction - The direction of the handle being dragged\n */\n handleResizeStart(event, direction) {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.activeHandle = direction;\n if (isTouchEvent(event)) {\n this.startX = event.touches[0].clientX;\n this.startY = event.touches[0].clientY;\n } else {\n this.startX = event.clientX;\n this.startY = event.clientY;\n }\n this.startWidth = this.element.offsetWidth;\n this.startHeight = this.element.offsetHeight;\n if (this.startWidth > 0 && this.startHeight > 0) {\n this.aspectRatio = this.startWidth / this.startHeight;\n }\n const pos = this.getPos();\n if (pos !== void 0) {\n }\n this.container.dataset.resizeState = \"true\";\n if (this.classNames.resizing) {\n this.container.classList.add(this.classNames.resizing);\n }\n document.addEventListener(\"mousemove\", this.handleMouseMove);\n document.addEventListener(\"touchmove\", this.handleTouchMove);\n document.addEventListener(\"mouseup\", this.handleMouseUp);\n document.addEventListener(\"keydown\", this.handleKeyDown);\n document.addEventListener(\"keyup\", this.handleKeyUp);\n }\n handleResize(deltaX, deltaY) {\n if (!this.activeHandle) {\n return;\n }\n const shouldPreserveAspectRatio = this.preserveAspectRatio || this.isShiftKeyPressed;\n const { width, height } = this.calculateNewDimensions(this.activeHandle, deltaX, deltaY);\n const constrained = this.applyConstraints(width, height, shouldPreserveAspectRatio);\n this.element.style.width = `${constrained.width}px`;\n this.element.style.height = `${constrained.height}px`;\n if (this.onResize) {\n this.onResize(constrained.width, constrained.height);\n }\n }\n /**\n * Calculates new dimensions based on mouse delta and resize direction.\n *\n * Takes the starting dimensions and applies the mouse movement delta\n * according to the handle direction. For corner handles, both dimensions\n * are affected. For edge handles, only one dimension changes. If aspect\n * ratio should be preserved, delegates to applyAspectRatio.\n *\n * @param direction - The active resize handle direction\n * @param deltaX - Horizontal mouse movement since resize start\n * @param deltaY - Vertical mouse movement since resize start\n * @returns The calculated width and height\n */\n calculateNewDimensions(direction, deltaX, deltaY) {\n let newWidth = this.startWidth;\n let newHeight = this.startHeight;\n const isRight = direction.includes(\"right\");\n const isLeft = direction.includes(\"left\");\n const isBottom = direction.includes(\"bottom\");\n const isTop = direction.includes(\"top\");\n if (isRight) {\n newWidth = this.startWidth + deltaX;\n } else if (isLeft) {\n newWidth = this.startWidth - deltaX;\n }\n if (isBottom) {\n newHeight = this.startHeight + deltaY;\n } else if (isTop) {\n newHeight = this.startHeight - deltaY;\n }\n if (direction === \"right\" || direction === \"left\") {\n newWidth = this.startWidth + (isRight ? deltaX : -deltaX);\n }\n if (direction === \"top\" || direction === \"bottom\") {\n newHeight = this.startHeight + (isBottom ? deltaY : -deltaY);\n }\n const shouldPreserveAspectRatio = this.preserveAspectRatio || this.isShiftKeyPressed;\n if (shouldPreserveAspectRatio) {\n return this.applyAspectRatio(newWidth, newHeight, direction);\n }\n return { width: newWidth, height: newHeight };\n }\n /**\n * Applies min/max constraints to dimensions.\n *\n * When aspect ratio is NOT preserved, constraints are applied independently\n * to width and height. When aspect ratio IS preserved, constraints are\n * applied while maintaining the aspect ratio—if one dimension hits a limit,\n * the other is recalculated proportionally.\n *\n * This ensures that aspect ratio is never broken when constrained.\n *\n * @param width - The unconstrained width\n * @param height - The unconstrained height\n * @param preserveAspectRatio - Whether to maintain aspect ratio while constraining\n * @returns The constrained dimensions\n */\n applyConstraints(width, height, preserveAspectRatio) {\n var _a, _b, _c, _d;\n if (!preserveAspectRatio) {\n let constrainedWidth2 = Math.max(this.minSize.width, width);\n let constrainedHeight2 = Math.max(this.minSize.height, height);\n if ((_a = this.maxSize) == null ? void 0 : _a.width) {\n constrainedWidth2 = Math.min(this.maxSize.width, constrainedWidth2);\n }\n if ((_b = this.maxSize) == null ? void 0 : _b.height) {\n constrainedHeight2 = Math.min(this.maxSize.height, constrainedHeight2);\n }\n return { width: constrainedWidth2, height: constrainedHeight2 };\n }\n let constrainedWidth = width;\n let constrainedHeight = height;\n if (constrainedWidth < this.minSize.width) {\n constrainedWidth = this.minSize.width;\n constrainedHeight = constrainedWidth / this.aspectRatio;\n }\n if (constrainedHeight < this.minSize.height) {\n constrainedHeight = this.minSize.height;\n constrainedWidth = constrainedHeight * this.aspectRatio;\n }\n if (((_c = this.maxSize) == null ? void 0 : _c.width) && constrainedWidth > this.maxSize.width) {\n constrainedWidth = this.maxSize.width;\n constrainedHeight = constrainedWidth / this.aspectRatio;\n }\n if (((_d = this.maxSize) == null ? void 0 : _d.height) && constrainedHeight > this.maxSize.height) {\n constrainedHeight = this.maxSize.height;\n constrainedWidth = constrainedHeight * this.aspectRatio;\n }\n return { width: constrainedWidth, height: constrainedHeight };\n }\n /**\n * Adjusts dimensions to maintain the original aspect ratio.\n *\n * For horizontal handles (left/right), uses width as the primary dimension\n * and calculates height from it. For vertical handles (top/bottom), uses\n * height as primary and calculates width. For corner handles, uses width\n * as the primary dimension.\n *\n * @param width - The new width\n * @param height - The new height\n * @param direction - The active resize direction\n * @returns Dimensions adjusted to preserve aspect ratio\n */\n applyAspectRatio(width, height, direction) {\n const isHorizontal = direction === \"left\" || direction === \"right\";\n const isVertical = direction === \"top\" || direction === \"bottom\";\n if (isHorizontal) {\n return {\n width,\n height: width / this.aspectRatio\n };\n }\n if (isVertical) {\n return {\n width: height * this.aspectRatio,\n height\n };\n }\n return {\n width,\n height: width / this.aspectRatio\n };\n }\n};\nvar ResizableNodeview = ResizableNodeView;\n\n// src/utilities/canInsertNode.ts\nimport { NodeSelection as NodeSelection4 } from \"@tiptap/pm/state\";\nfunction canInsertNode(state, nodeType) {\n const { selection } = state;\n const { $from } = selection;\n if (selection instanceof NodeSelection4) {\n const index = $from.index();\n const parent = $from.parent;\n return parent.canReplaceWith(index, index + 1, nodeType);\n }\n let depth = $from.depth;\n while (depth >= 0) {\n const index = $from.index(depth);\n const parent = $from.node(depth);\n const match = parent.contentMatchAt(index);\n if (match.matchType(nodeType)) {\n return true;\n }\n depth -= 1;\n }\n return false;\n}\n\n// src/utilities/escapeForRegEx.ts\nfunction escapeForRegEx(string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n\n// src/utilities/getStyleProperty.ts\nfunction getStyleProperty(element, propertyName) {\n const styleAttr = element.getAttribute(\"style\");\n if (!styleAttr) {\n return null;\n }\n const decls = styleAttr.split(\";\").map((decl) => decl.trim()).filter(Boolean);\n const target = propertyName.toLowerCase();\n for (let i = decls.length - 1; i >= 0; i -= 1) {\n const decl = decls[i];\n const colonIndex = decl.indexOf(\":\");\n if (colonIndex === -1) {\n continue;\n }\n const prop = decl.slice(0, colonIndex).trim().toLowerCase();\n if (prop === target) {\n return decl.slice(colonIndex + 1).trim();\n }\n }\n return null;\n}\n\n// src/utilities/htmlEntities.ts\nfunction decodeHtmlEntities(text) {\n return text.replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&amp;/g, \"&\");\n}\nfunction encodeHtmlEntities(text) {\n return text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n// src/utilities/isFirefox.ts\nfunction isFirefox() {\n return typeof navigator !== \"undefined\" ? /Firefox/.test(navigator.userAgent) : false;\n}\n\n// src/utilities/isString.ts\nfunction isString(value) {\n return typeof value === \"string\";\n}\n\n// src/utilities/markdown/index.ts\nvar markdown_exports = {};\n__export(markdown_exports, {\n createAtomBlockMarkdownSpec: () => createAtomBlockMarkdownSpec,\n createBlockMarkdownSpec: () => createBlockMarkdownSpec,\n createInlineMarkdownSpec: () => createInlineMarkdownSpec,\n parseAttributes: () => parseAttributes,\n parseIndentedBlocks: () => parseIndentedBlocks,\n renderNestedMarkdownContent: () => renderNestedMarkdownContent,\n serializeAttributes: () => serializeAttributes\n});\n\n// src/utilities/markdown/attributeUtils.ts\nfunction parseAttributes(attrString) {\n if (!(attrString == null ? void 0 : attrString.trim())) {\n return {};\n }\n const attributes = {};\n const quotedStrings = [];\n const tempString = attrString.replace(/[\"']([^\"']*)[\"']/g, (match) => {\n quotedStrings.push(match);\n return `__QUOTED_${quotedStrings.length - 1}__`;\n });\n const classMatches = tempString.match(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g);\n if (classMatches) {\n const classes = classMatches.map((match) => match.trim().slice(1));\n attributes.class = classes.join(\" \");\n }\n const idMatch = tempString.match(/(?:^|\\s)#([a-zA-Z][\\w-]*)/);\n if (idMatch) {\n attributes.id = idMatch[1];\n }\n const kvRegex = /([a-zA-Z][\\w-]*)\\s*=\\s*(__QUOTED_\\d+__)/g;\n const kvMatches = Array.from(tempString.matchAll(kvRegex));\n kvMatches.forEach(([, key, quotedRef]) => {\n var _a;\n const quotedIndex = parseInt(((_a = quotedRef.match(/__QUOTED_(\\d+)__/)) == null ? void 0 : _a[1]) || \"0\", 10);\n const quotedValue = quotedStrings[quotedIndex];\n if (quotedValue) {\n attributes[key] = quotedValue.slice(1, -1);\n }\n });\n const cleanString = tempString.replace(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g, \"\").replace(/(?:^|\\s)#([a-zA-Z][\\w-]*)/g, \"\").replace(/([a-zA-Z][\\w-]*)\\s*=\\s*__QUOTED_\\d+__/g, \"\").trim();\n if (cleanString) {\n const booleanAttrs = cleanString.split(/\\s+/).filter(Boolean);\n booleanAttrs.forEach((attr) => {\n if (attr.match(/^[a-zA-Z][\\w-]*$/)) {\n attributes[attr] = true;\n }\n });\n }\n return attributes;\n}\nfunction serializeAttributes(attributes) {\n if (!attributes || Object.keys(attributes).length === 0) {\n return \"\";\n }\n const parts = [];\n if (attributes.class) {\n const classes = String(attributes.class).split(/\\s+/).filter(Boolean);\n classes.forEach((cls) => parts.push(`.${cls}`));\n }\n if (attributes.id) {\n parts.push(`#${attributes.id}`);\n }\n Object.entries(attributes).forEach(([key, value]) => {\n if (key === \"class\" || key === \"id\") {\n return;\n }\n if (value === true) {\n parts.push(key);\n } else if (value !== false && value != null) {\n parts.push(`${key}=\"${String(value)}\"`);\n }\n });\n return parts.join(\" \");\n}\n\n// src/utilities/markdown/createAtomBlockMarkdownSpec.ts\nfunction createAtomBlockMarkdownSpec(options) {\n const {\n nodeName,\n name: markdownName,\n parseAttributes: parseAttributes2 = parseAttributes,\n serializeAttributes: serializeAttributes2 = serializeAttributes,\n defaultAttributes = {},\n requiredAttributes = [],\n allowedAttributes\n } = options;\n const blockName = markdownName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((key) => {\n if (key in attrs) {\n filtered[key] = attrs[key];\n }\n });\n return filtered;\n };\n return {\n parseMarkdown: (token, h2) => {\n const attrs = { ...defaultAttributes, ...token.attributes };\n return h2.createNode(nodeName, attrs, []);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"block\",\n start(src) {\n var _a;\n const regex = new RegExp(`^:::${blockName}(?:\\\\s|$)`, \"m\");\n const index = (_a = src.match(regex)) == null ? void 0 : _a.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, _lexer) {\n const regex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*:::(?:\\\\n|$)`);\n const match = src.match(regex);\n if (!match) {\n return void 0;\n }\n const attrString = match[1] || \"\";\n const attributes = parseAttributes2(attrString);\n const missingRequired = requiredAttributes.find((required) => !(required in attributes));\n if (missingRequired) {\n return void 0;\n }\n return {\n type: nodeName,\n raw: match[0],\n attributes\n };\n }\n },\n renderMarkdown: (node) => {\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` {${attrs}}` : \"\";\n return `:::${blockName}${attrString} :::`;\n }\n };\n}\n\n// src/utilities/markdown/createBlockMarkdownSpec.ts\nfunction createBlockMarkdownSpec(options) {\n const {\n nodeName,\n name: markdownName,\n getContent,\n parseAttributes: parseAttributes2 = parseAttributes,\n serializeAttributes: serializeAttributes2 = serializeAttributes,\n defaultAttributes = {},\n content = \"block\",\n allowedAttributes\n } = options;\n const blockName = markdownName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((key) => {\n if (key in attrs) {\n filtered[key] = attrs[key];\n }\n });\n return filtered;\n };\n return {\n parseMarkdown: (token, h2) => {\n let nodeContent;\n if (getContent) {\n const contentResult = getContent(token);\n nodeContent = typeof contentResult === \"string\" ? [{ type: \"text\", text: contentResult }] : contentResult;\n } else if (content === \"block\") {\n nodeContent = h2.parseChildren(token.tokens || []);\n } else {\n nodeContent = h2.parseInline(token.tokens || []);\n }\n const attrs = { ...defaultAttributes, ...token.attributes };\n return h2.createNode(nodeName, attrs, nodeContent);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"block\",\n start(src) {\n var _a;\n const regex = new RegExp(`^:::${blockName}`, \"m\");\n const index = (_a = src.match(regex)) == null ? void 0 : _a.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, lexer) {\n var _a;\n const openingRegex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*\\\\n`);\n const openingMatch = src.match(openingRegex);\n if (!openingMatch) {\n return void 0;\n }\n const [openingTag, attrString = \"\"] = openingMatch;\n const attributes = parseAttributes2(attrString);\n let level = 1;\n const position = openingTag.length;\n let matchedContent = \"\";\n const blockPattern = /^:::([\\w-]*)(\\s.*)?/gm;\n const remaining = src.slice(position);\n blockPattern.lastIndex = 0;\n for (; ; ) {\n const match = blockPattern.exec(remaining);\n if (match === null) {\n break;\n }\n const matchPos = match.index;\n const blockType = match[1];\n if ((_a = match[2]) == null ? void 0 : _a.endsWith(\":::\")) {\n continue;\n }\n if (blockType) {\n level += 1;\n } else {\n level -= 1;\n if (level === 0) {\n const rawContent = remaining.slice(0, matchPos);\n matchedContent = rawContent.trim();\n const fullMatch = src.slice(0, position + matchPos + match[0].length);\n let contentTokens = [];\n if (matchedContent) {\n if (content === \"block\") {\n contentTokens = lexer.blockTokens(rawContent);\n contentTokens.forEach((token) => {\n if (token.text && (!token.tokens || token.tokens.length === 0)) {\n token.tokens = lexer.inlineTokens(token.text);\n }\n });\n while (contentTokens.length > 0) {\n const lastToken = contentTokens[contentTokens.length - 1];\n if (lastToken.type === \"paragraph\" && (!lastToken.text || lastToken.text.trim() === \"\")) {\n contentTokens.pop();\n } else {\n break;\n }\n }\n } else {\n contentTokens = lexer.inlineTokens(matchedContent);\n }\n }\n return {\n type: nodeName,\n raw: fullMatch,\n attributes,\n content: matchedContent,\n tokens: contentTokens\n };\n }\n }\n }\n return void 0;\n }\n },\n renderMarkdown: (node, h2) => {\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` {${attrs}}` : \"\";\n const renderedContent = h2.renderChildren(node.content || [], \"\\n\\n\");\n return `:::${blockName}${attrString}\n\n${renderedContent}\n\n:::`;\n }\n };\n}\n\n// src/utilities/markdown/createInlineMarkdownSpec.ts\nfunction parseShortcodeAttributes(attrString) {\n if (!attrString.trim()) {\n return {};\n }\n const attributes = {};\n const regex = /(\\w+)=(?:\"([^\"]*)\"|'([^']*)')/g;\n let match = regex.exec(attrString);\n while (match !== null) {\n const [, key, doubleQuoted, singleQuoted] = match;\n attributes[key] = doubleQuoted || singleQuoted;\n match = regex.exec(attrString);\n }\n return attributes;\n}\nfunction serializeShortcodeAttributes(attrs) {\n return Object.entries(attrs).filter(([, value]) => value !== void 0 && value !== null).map(([key, value]) => `${key}=\"${value}\"`).join(\" \");\n}\nfunction createInlineMarkdownSpec(options) {\n const {\n nodeName,\n name: shortcodeName,\n getContent,\n parseAttributes: parseAttributes2 = parseShortcodeAttributes,\n serializeAttributes: serializeAttributes2 = serializeShortcodeAttributes,\n defaultAttributes = {},\n selfClosing = false,\n allowedAttributes\n } = options;\n const shortcode = shortcodeName || nodeName;\n const filterAttributes = (attrs) => {\n if (!allowedAttributes) {\n return attrs;\n }\n const filtered = {};\n allowedAttributes.forEach((attr) => {\n const attrName = typeof attr === \"string\" ? attr : attr.name;\n const skipIfDefault = typeof attr === \"string\" ? void 0 : attr.skipIfDefault;\n if (attrName in attrs) {\n const value = attrs[attrName];\n if (skipIfDefault !== void 0 && value === skipIfDefault) {\n return;\n }\n filtered[attrName] = value;\n }\n });\n return filtered;\n };\n const escapedShortcode = shortcode.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return {\n parseMarkdown: (token, h2) => {\n const attrs = { ...defaultAttributes, ...token.attributes };\n if (selfClosing) {\n return h2.createNode(nodeName, attrs);\n }\n const content = getContent ? getContent(token) : token.content || \"\";\n if (content) {\n return h2.createNode(nodeName, attrs, [h2.createTextNode(content)]);\n }\n return h2.createNode(nodeName, attrs, []);\n },\n markdownTokenizer: {\n name: nodeName,\n level: \"inline\",\n start(src) {\n const startPattern = selfClosing ? new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\]`) : new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\][\\\\s\\\\S]*?\\\\[\\\\/${escapedShortcode}\\\\]`);\n const match = src.match(startPattern);\n const index = match == null ? void 0 : match.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, _tokens, _lexer) {\n const tokenPattern = selfClosing ? new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]`) : new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]([\\\\s\\\\S]*?)\\\\[\\\\/${escapedShortcode}\\\\]`);\n const match = src.match(tokenPattern);\n if (!match) {\n return void 0;\n }\n let content = \"\";\n let attrString = \"\";\n if (selfClosing) {\n const [, attrs] = match;\n attrString = attrs;\n } else {\n const [, attrs, contentMatch] = match;\n attrString = attrs;\n content = contentMatch || \"\";\n }\n const attributes = parseAttributes2(attrString.trim());\n return {\n type: nodeName,\n raw: match[0],\n content: content.trim(),\n attributes\n };\n }\n },\n renderMarkdown: (node) => {\n let content = \"\";\n if (getContent) {\n content = getContent(node);\n } else if (node.content && node.content.length > 0) {\n content = node.content.filter((child) => child.type === \"text\").map((child) => child.text).join(\"\");\n }\n const filteredAttrs = filterAttributes(node.attrs || {});\n const attrs = serializeAttributes2(filteredAttrs);\n const attrString = attrs ? ` ${attrs}` : \"\";\n if (selfClosing) {\n return `[${shortcode}${attrString}]`;\n }\n return `[${shortcode}${attrString}]${content}[/${shortcode}]`;\n }\n };\n}\n\n// src/utilities/markdown/parseIndentedBlocks.ts\nfunction parseIndentedBlocks(src, config, lexer) {\n var _a, _b, _c, _d;\n const lines = src.split(\"\\n\");\n const items = [];\n let totalRaw = \"\";\n let i = 0;\n const baseIndentSize = config.baseIndentSize || 2;\n while (i < lines.length) {\n const currentLine = lines[i];\n const itemMatch = currentLine.match(config.itemPattern);\n if (!itemMatch) {\n if (items.length > 0) {\n break;\n } else if (currentLine.trim() === \"\") {\n i += 1;\n totalRaw = `${totalRaw}${currentLine}\n`;\n continue;\n } else {\n return void 0;\n }\n }\n const itemData = config.extractItemData(itemMatch);\n const { indentLevel, mainContent } = itemData;\n totalRaw = `${totalRaw}${currentLine}\n`;\n const itemContent = [mainContent];\n i += 1;\n while (i < lines.length) {\n const nextLine = lines[i];\n if (nextLine.trim() === \"\") {\n const nextNonEmptyIndex = lines.slice(i + 1).findIndex((l) => l.trim() !== \"\");\n if (nextNonEmptyIndex === -1) {\n break;\n }\n const nextNonEmpty = lines[i + 1 + nextNonEmptyIndex];\n const nextIndent2 = ((_b = (_a = nextNonEmpty.match(/^(\\s*)/)) == null ? void 0 : _a[1]) == null ? void 0 : _b.length) || 0;\n if (nextIndent2 > indentLevel) {\n itemContent.push(nextLine);\n totalRaw = `${totalRaw}${nextLine}\n`;\n i += 1;\n continue;\n } else {\n break;\n }\n }\n const nextIndent = ((_d = (_c = nextLine.match(/^(\\s*)/)) == null ? void 0 : _c[1]) == null ? void 0 : _d.length) || 0;\n if (nextIndent > indentLevel) {\n itemContent.push(nextLine);\n totalRaw = `${totalRaw}${nextLine}\n`;\n i += 1;\n } else {\n break;\n }\n }\n let nestedTokens;\n const nestedContent = itemContent.slice(1);\n if (nestedContent.length > 0) {\n const dedentedNested = nestedContent.map((nestedLine) => nestedLine.slice(indentLevel + baseIndentSize)).join(\"\\n\");\n if (dedentedNested.trim()) {\n if (config.customNestedParser) {\n nestedTokens = config.customNestedParser(dedentedNested);\n } else {\n nestedTokens = lexer.blockTokens(dedentedNested);\n }\n }\n }\n const token = config.createToken(itemData, nestedTokens);\n items.push(token);\n }\n if (items.length === 0) {\n return void 0;\n }\n return {\n items,\n raw: totalRaw\n };\n}\n\n// src/utilities/markdown/renderNestedMarkdownContent.ts\nfunction renderNestedMarkdownContent(node, h2, prefixOrGenerator, ctx) {\n if (!node || !Array.isArray(node.content)) {\n return \"\";\n }\n const prefix = typeof prefixOrGenerator === \"function\" ? prefixOrGenerator(ctx) : prefixOrGenerator;\n const [content, ...children] = node.content;\n const mainContent = h2.renderChildren([content]);\n let output = `${prefix}${mainContent}`;\n if (children && children.length > 0) {\n children.forEach((child, index) => {\n var _a, _b;\n const childContent = (_b = (_a = h2.renderChild) == null ? void 0 : _a.call(h2, child, index + 1)) != null ? _b : h2.renderChildren([child]);\n if (childContent !== void 0 && childContent !== null) {\n const indentedChild = childContent.split(\"\\n\").map((line) => line ? h2.indent(line) : h2.indent(\"\")).join(\"\\n\");\n output += child.type === \"paragraph\" ? `\n\n${indentedChild}` : `\n${indentedChild}`;\n }\n });\n }\n return output;\n}\n\n// src/utilities/nodeViewPositionRegistry.ts\nvar positionUpdateRegistries = /* @__PURE__ */ new WeakMap();\nfunction schedulePositionCheck(editor, callback) {\n let registry = positionUpdateRegistries.get(editor);\n if (!registry) {\n const newRegistry = {\n callbacks: /* @__PURE__ */ new Set(),\n rafId: null,\n handler: () => {\n if (newRegistry.rafId !== null) {\n cancelAnimationFrame(newRegistry.rafId);\n }\n newRegistry.rafId = requestAnimationFrame(() => {\n newRegistry.rafId = null;\n newRegistry.callbacks.forEach((cb) => cb());\n });\n }\n };\n positionUpdateRegistries.set(editor, newRegistry);\n editor.on(\"update\", newRegistry.handler);\n registry = newRegistry;\n }\n registry.callbacks.add(callback);\n}\nfunction cancelPositionCheck(editor, callback) {\n const registry = positionUpdateRegistries.get(editor);\n if (!registry) {\n return;\n }\n registry.callbacks.delete(callback);\n if (registry.callbacks.size === 0) {\n if (registry.rafId !== null) {\n cancelAnimationFrame(registry.rafId);\n }\n editor.off(\"update\", registry.handler);\n positionUpdateRegistries.delete(editor);\n }\n}\n\n// src/MarkView.ts\nfunction updateMarkViewAttributes(checkMark, editor, attrs = {}) {\n const { state } = editor;\n const { doc, tr } = state;\n const thisMark = checkMark;\n doc.descendants((node, pos) => {\n const from = tr.mapping.map(pos);\n const to = tr.mapping.map(pos) + node.nodeSize;\n let foundMark = null;\n node.marks.forEach((mark) => {\n if (mark !== thisMark) {\n return false;\n }\n foundMark = mark;\n });\n if (!foundMark) {\n return;\n }\n let needsUpdate = false;\n Object.keys(attrs).forEach((k) => {\n if (attrs[k] !== foundMark.attrs[k]) {\n needsUpdate = true;\n }\n });\n if (needsUpdate) {\n const updatedMark = checkMark.type.create({\n ...checkMark.attrs,\n ...attrs\n });\n tr.removeMark(from, to, checkMark.type);\n tr.addMark(from, to, updatedMark);\n }\n });\n if (tr.docChanged) {\n editor.view.dispatch(tr);\n }\n}\nvar MarkView = class {\n constructor(component, props, options) {\n this.component = component;\n this.editor = props.editor;\n this.options = { ...options };\n this.mark = props.mark;\n this.HTMLAttributes = props.HTMLAttributes;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n /**\n * Update the attributes of the mark in the document.\n * @param attrs The attributes to update.\n */\n updateAttributes(attrs, checkMark) {\n updateMarkViewAttributes(checkMark || this.mark, this.editor, attrs);\n }\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n};\n\n// src/Node.ts\nvar Node3 = class _Node extends Extendable {\n constructor() {\n super(...arguments);\n this.type = \"node\";\n }\n /**\n * Create a new Node instance\n * @param config - Node configuration object or a function that returns a configuration object\n */\n static create(config = {}) {\n const resolvedConfig = typeof config === \"function\" ? config() : config;\n return new _Node(resolvedConfig);\n }\n configure(options) {\n return super.configure(options);\n }\n extend(extendedConfig) {\n const resolvedConfig = typeof extendedConfig === \"function\" ? extendedConfig() : extendedConfig;\n return super.extend(resolvedConfig);\n }\n};\n\n// src/NodeView.ts\nimport { NodeSelection as NodeSelection5 } from \"@tiptap/pm/state\";\nvar NodeView = class {\n constructor(component, props, options) {\n this.isDragging = false;\n this.component = component;\n this.editor = props.editor;\n this.options = {\n stopEvent: null,\n ignoreMutation: null,\n ...options\n };\n this.extension = props.extension;\n this.node = props.node;\n this.decorations = props.decorations;\n this.innerDecorations = props.innerDecorations;\n this.view = props.view;\n this.HTMLAttributes = props.HTMLAttributes;\n this.getPos = props.getPos;\n this.mount();\n }\n mount() {\n return;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n onDragStart(event) {\n var _a, _b, _c, _d, _e, _f, _g;\n const { view } = this.editor;\n const target = event.target;\n const dragHandle = target.nodeType === 3 ? (_a = target.parentElement) == null ? void 0 : _a.closest(\"[data-drag-handle]\") : target.closest(\"[data-drag-handle]\");\n if (!this.dom || ((_b = this.contentDOM) == null ? void 0 : _b.contains(target)) || !dragHandle) {\n return;\n }\n let x = 0;\n let y = 0;\n if (this.dom !== dragHandle) {\n const domBox = this.dom.getBoundingClientRect();\n const handleBox = dragHandle.getBoundingClientRect();\n const offsetX = (_d = event.offsetX) != null ? _d : (_c = event.nativeEvent) == null ? void 0 : _c.offsetX;\n const offsetY = (_f = event.offsetY) != null ? _f : (_e = event.nativeEvent) == null ? void 0 : _e.offsetY;\n x = handleBox.x - domBox.x + offsetX;\n y = handleBox.y - domBox.y + offsetY;\n }\n const clonedNode = this.dom.cloneNode(true);\n try {\n const domBox = this.dom.getBoundingClientRect();\n clonedNode.style.width = `${Math.round(domBox.width)}px`;\n clonedNode.style.height = `${Math.round(domBox.height)}px`;\n clonedNode.style.boxSizing = \"border-box\";\n clonedNode.style.pointerEvents = \"none\";\n } catch {\n }\n let dragImageWrapper = null;\n try {\n dragImageWrapper = document.createElement(\"div\");\n dragImageWrapper.style.position = \"absolute\";\n dragImageWrapper.style.top = \"-9999px\";\n dragImageWrapper.style.left = \"-9999px\";\n dragImageWrapper.style.pointerEvents = \"none\";\n dragImageWrapper.appendChild(clonedNode);\n document.body.appendChild(dragImageWrapper);\n (_g = event.dataTransfer) == null ? void 0 : _g.setDragImage(clonedNode, x, y);\n } finally {\n if (dragImageWrapper) {\n setTimeout(() => {\n try {\n dragImageWrapper == null ? void 0 : dragImageWrapper.remove();\n } catch {\n }\n }, 0);\n }\n }\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return;\n }\n const selection = NodeSelection5.create(view.state.doc, pos);\n const transaction = view.state.tr.setSelection(selection);\n view.dispatch(transaction);\n }\n stopEvent(event) {\n var _a;\n if (!this.dom) {\n return false;\n }\n if (typeof this.options.stopEvent === \"function\") {\n return this.options.stopEvent({ event });\n }\n const target = event.target;\n const isInElement = this.dom.contains(target) && !((_a = this.contentDOM) == null ? void 0 : _a.contains(target));\n if (!isInElement) {\n return false;\n }\n const isDragEvent = event.type.startsWith(\"drag\");\n const isDragOverEnterEvent = event.type === \"dragover\" || event.type === \"dragenter\";\n const isDropEvent = event.type === \"drop\";\n const isInput = [\"INPUT\", \"BUTTON\", \"SELECT\", \"TEXTAREA\"].includes(target.tagName) || target.isContentEditable;\n if (isInput && !isDropEvent && !isDragEvent) {\n return true;\n }\n const { isEditable } = this.editor;\n const { isDragging } = this;\n const isDraggable = !!this.node.type.spec.draggable;\n const isSelectable = NodeSelection5.isSelectable(this.node);\n const isCopyEvent = event.type === \"copy\";\n const isPasteEvent = event.type === \"paste\";\n const isCutEvent = event.type === \"cut\";\n const isClickEvent = event.type === \"mousedown\";\n if (!isDraggable && isSelectable && isDragEvent && event.target === this.dom) {\n event.preventDefault();\n }\n if (isDraggable && isDragEvent && !isDragging && event.target === this.dom) {\n event.preventDefault();\n return false;\n }\n if (isDraggable && isEditable && !isDragging && isClickEvent) {\n const dragHandle = target.closest(\"[data-drag-handle]\");\n const isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\n if (isValidDragHandle) {\n this.isDragging = true;\n document.addEventListener(\n \"dragend\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"drop\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n document.addEventListener(\n \"mouseup\",\n () => {\n this.isDragging = false;\n },\n { once: true }\n );\n }\n }\n if (isDragging || isDragOverEnterEvent || isDropEvent || isCopyEvent || isPasteEvent || isCutEvent || isClickEvent && isSelectable) {\n return false;\n }\n return true;\n }\n /**\n * Called when a DOM [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) or a selection change happens within the view.\n * @return `false` if the editor should re-read the selection or re-parse the range around the mutation\n * @return `true` if it can safely be ignored.\n */\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === \"function\") {\n return this.options.ignoreMutation({ mutation });\n }\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n if (mutation.type === \"selection\") {\n return false;\n }\n if (this.dom.contains(mutation.target) && mutation.type === \"childList\" && (isiOS() || isAndroid()) && this.editor.isFocused) {\n const changedNodes = [...Array.from(mutation.addedNodes), ...Array.from(mutation.removedNodes)];\n if (changedNodes.every((node) => node.isContentEditable)) {\n return false;\n }\n }\n if (this.contentDOM === mutation.target && mutation.type === \"attributes\") {\n return true;\n }\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n /**\n * Update the attributes of the prosemirror node.\n */\n updateAttributes(attributes) {\n this.editor.commands.command(({ tr }) => {\n const pos = this.getPos();\n if (typeof pos !== \"number\") {\n return false;\n }\n tr.setNodeMarkup(pos, void 0, {\n ...this.node.attrs,\n ...attributes\n });\n return true;\n });\n }\n /**\n * Delete the node.\n */\n deleteNode() {\n const from = this.getPos();\n if (typeof from !== \"number\") {\n return;\n }\n const to = from + this.node.nodeSize;\n this.editor.commands.deleteRange({ from, to });\n }\n};\n\n// src/pasteRules/markPasteRule.ts\nfunction markPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match, pasteEvent }) => {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n let markEnd = range.to;\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter((item) => {\n const excluded = item.mark.type.excluded;\n return excluded.find((type) => type === config.type && type !== item.mark.type);\n }).filter((item) => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n const isMatchAtEndOfText = match.index !== void 0 && match.input !== void 0 && match.index + match[0].length >= match.input.length;\n if (!isMatchAtEndOfText) {\n tr.removeStoredMark(config.type);\n }\n }\n }\n });\n}\n\n// src/pasteRules/nodePasteRule.ts\nfunction nodePasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler({ match, chain, range, pasteEvent }) {\n const attributes = callOrReturn(config.getAttributes, void 0, match, pasteEvent);\n const content = callOrReturn(config.getContent, void 0, attributes);\n if (attributes === false || attributes === null) {\n return null;\n }\n const node = { type: config.type.name, attrs: attributes };\n if (content) {\n node.content = content;\n }\n if (match.input) {\n chain().deleteRange(range).insertContentAt(range.from, node);\n }\n }\n });\n}\n\n// src/pasteRules/textPasteRule.ts\nfunction textPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n }\n });\n}\n\n// src/Tracker.ts\nvar Tracker = class {\n constructor(transaction) {\n this.transaction = transaction;\n this.currentStep = this.transaction.steps.length;\n }\n map(position) {\n let deleted = false;\n const mappedPosition = this.transaction.steps.slice(this.currentStep).reduce((newPosition, step) => {\n const mapResult = step.getMap().mapResult(newPosition);\n if (mapResult.deleted) {\n deleted = true;\n }\n return mapResult.pos;\n }, position);\n return {\n position: mappedPosition,\n deleted\n };\n }\n};\nexport {\n CommandManager,\n Editor,\n Extendable,\n Extension,\n Fragment6 as Fragment,\n InputRule,\n MappablePosition,\n Mark,\n MarkView,\n Node3 as Node,\n NodePos,\n NodeView,\n PasteRule,\n ResizableNodeView,\n ResizableNodeview,\n Tracker,\n callOrReturn,\n canInsertNode,\n cancelPositionCheck,\n combineTransactionSteps,\n commands_exports as commands,\n createAtomBlockMarkdownSpec,\n createBlockMarkdownSpec,\n createChainableState,\n createDocument,\n h as createElement,\n createInlineMarkdownSpec,\n createMappablePosition,\n createNodeFromContent,\n createStyleTag,\n decodeHtmlEntities,\n defaultBlockAt,\n deleteProps,\n elementFromString,\n encodeHtmlEntities,\n escapeForRegEx,\n extensions_exports as extensions,\n findChildren,\n findChildrenInRange,\n findDuplicates,\n findParentNode,\n findParentNodeClosestToPos,\n flattenExtensions,\n fromString,\n generateHTML,\n generateJSON,\n generateText,\n getAttributes,\n getAttributesFromExtensions,\n getChangedRanges,\n getDebugJSON,\n getExtensionField,\n getHTMLFromFragment,\n getMarkAttributes,\n getMarkRange,\n getMarkType,\n getMarksBetween,\n getNodeAtPosition,\n getNodeAttributes,\n getNodeType,\n getRenderedAttributes,\n getSchema,\n getSchemaByResolvedExtensions,\n getSchemaTypeByName,\n getSchemaTypeNameByName,\n getSplittedAttributes,\n getStyleProperty,\n getText,\n getTextBetween,\n getTextContentFromNodes,\n getTextSerializersFromSchema,\n getUpdatedPosition,\n h,\n injectExtensionAttributesToParseRule,\n inputRulesPlugin,\n isActive,\n isAndroid,\n isAtEndOfNode,\n isAtStartOfNode,\n isEmptyObject,\n isExtensionRulesEnabled,\n isFirefox,\n isFunction,\n isList,\n isMacOS,\n isMarkActive,\n isNodeActive,\n isNodeEmpty,\n isNodeSelection,\n isNodeViewSelected,\n isNumber,\n isPlainObject,\n isRegExp,\n isSafari,\n isString,\n isTextSelection,\n isiOS,\n markInputRule,\n markPasteRule,\n markdown_exports as markdown,\n mergeAttributes,\n mergeDeep,\n minMax,\n nodeInputRule,\n nodePasteRule,\n objectIncludes,\n parseAttributes,\n parseIndentedBlocks,\n pasteRulesPlugin,\n posToDOMRect,\n removeDuplicates,\n renderNestedMarkdownContent,\n resolveExtensions,\n resolveFocusPosition,\n rewriteUnknownContent,\n schedulePositionCheck,\n selectionToInsertionEnd,\n serializeAttributes,\n sortExtensions,\n splitExtensions,\n textInputRule,\n textPasteRule,\n textblockTypeInputRule,\n updateMarkViewAttributes,\n wrappingInputRule\n};\n//# sourceMappingURL=index.js.map","// src/jsx-runtime.ts\nfunction Fragment(props) {\n return props.children;\n}\nvar h = (tag, attributes) => {\n if (tag === \"slot\") {\n return 0;\n }\n if (tag instanceof Function) {\n return tag(attributes);\n }\n const { children, ...rest } = attributes != null ? attributes : {};\n if (tag === \"svg\") {\n throw new Error(\"SVG elements are not supported in the JSX syntax, use the array syntax instead\");\n }\n return [tag, rest, children];\n};\nexport {\n Fragment,\n h as createElement,\n h,\n h as jsx,\n h as jsxDEV,\n h as jsxs\n};\n//# sourceMappingURL=jsx-runtime.js.map","// src/blockquote.tsx\nimport { mergeAttributes, Node, wrappingInputRule } from \"@tiptap/core\";\nimport { jsx } from \"@tiptap/core/jsx-runtime\";\nvar inputRegex = /^\\s*>\\s$/;\nvar Blockquote = Node.create({\n name: \"blockquote\",\n addOptions() {\n return {\n HTMLAttributes: {}\n };\n },\n content: \"block+\",\n group: \"block\",\n defining: true,\n parseHTML() {\n return [{ tag: \"blockquote\" }];\n },\n renderHTML({ HTMLAttributes }) {\n return /* @__PURE__ */ jsx(\"blockquote\", { ...mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), children: /* @__PURE__ */ jsx(\"slot\", {}) });\n },\n parseMarkdown: (token, helpers) => {\n var _a;\n const parseBlockChildren = (_a = helpers.parseBlockChildren) != null ? _a : helpers.parseChildren;\n return helpers.createNode(\"blockquote\", void 0, parseBlockChildren(token.tokens || []));\n },\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return \"\";\n }\n const prefix = \">\";\n const result = [];\n node.content.forEach((child, index) => {\n var _a, _b;\n const childContent = (_b = (_a = h.renderChild) == null ? void 0 : _a.call(h, child, index)) != null ? _b : h.renderChildren([child]);\n const lines = childContent.split(\"\\n\");\n const linesWithPrefix = lines.map((line) => {\n if (line.trim() === \"\") {\n return prefix;\n }\n return `${prefix} ${line}`;\n });\n result.push(linesWithPrefix.join(\"\\n\"));\n });\n return result.join(`\n${prefix}\n`);\n },\n addCommands() {\n return {\n setBlockquote: () => ({ commands }) => {\n return commands.wrapIn(this.name);\n },\n toggleBlockquote: () => ({ commands }) => {\n return commands.toggleWrap(this.name);\n },\n unsetBlockquote: () => ({ commands }) => {\n return commands.lift(this.name);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Shift-b\": () => this.editor.commands.toggleBlockquote()\n };\n },\n addInputRules() {\n return [\n wrappingInputRule({\n find: inputRegex,\n type: this.type\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = Blockquote;\nexport {\n Blockquote,\n index_default as default,\n inputRegex\n};\n//# sourceMappingURL=index.js.map","// src/bold.tsx\nimport { Mark, markInputRule, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { jsx } from \"@tiptap/core/jsx-runtime\";\nvar starInputRegex = /(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))$/;\nvar starPasteRegex = /(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))/g;\nvar underscoreInputRegex = /(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))$/;\nvar underscorePasteRegex = /(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))/g;\nvar Bold = Mark.create({\n name: \"bold\",\n addOptions() {\n return {\n HTMLAttributes: {}\n };\n },\n parseHTML() {\n return [\n {\n tag: \"strong\"\n },\n {\n tag: \"b\",\n getAttrs: (node) => node.style.fontWeight !== \"normal\" && null\n },\n {\n style: \"font-weight=400\",\n clearMark: (mark) => mark.type.name === this.name\n },\n {\n style: \"font-weight\",\n getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return /* @__PURE__ */ jsx(\"strong\", { ...mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), children: /* @__PURE__ */ jsx(\"slot\", {}) });\n },\n markdownTokenName: \"strong\",\n parseMarkdown: (token, helpers) => {\n return helpers.applyMark(\"bold\", helpers.parseInline(token.tokens || []));\n },\n markdownOptions: {\n htmlReopen: {\n open: \"<strong>\",\n close: \"</strong>\"\n }\n },\n renderMarkdown: (node, h) => {\n return `**${h.renderChildren(node)}**`;\n },\n addCommands() {\n return {\n setBold: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleBold: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetBold: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-b\": () => this.editor.commands.toggleBold(),\n \"Mod-B\": () => this.editor.commands.toggleBold()\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: starInputRegex,\n type: this.type\n }),\n markInputRule({\n find: underscoreInputRegex,\n type: this.type\n })\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: starPasteRegex,\n type: this.type\n }),\n markPasteRule({\n find: underscorePasteRegex,\n type: this.type\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = Bold;\nexport {\n Bold,\n index_default as default,\n starInputRegex,\n starPasteRegex,\n underscoreInputRegex,\n underscorePasteRegex\n};\n//# sourceMappingURL=index.js.map","// src/code.ts\nimport { Mark, markInputRule, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nvar inputRegex = /(^|[^`])`([^`]+)`(?!`)$/;\nvar pasteRegex = /(^|[^`])`([^`]+)`(?!`)/g;\nvar Code = Mark.create({\n name: \"code\",\n addOptions() {\n return {\n HTMLAttributes: {}\n };\n },\n excludes: \"_\",\n code: true,\n exitable: true,\n parseHTML() {\n return [{ tag: \"code\" }];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"code\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n markdownTokenName: \"codespan\",\n parseMarkdown: (token, helpers) => {\n return helpers.applyMark(\"code\", [{ type: \"text\", text: token.text || \"\" }]);\n },\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return \"\";\n }\n return `\\`${h.renderChildren(node.content)}\\``;\n },\n addCommands() {\n return {\n setCode: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleCode: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetCode: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-e\": () => this.editor.commands.toggleCode()\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: inputRegex,\n type: this.type\n })\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: pasteRegex,\n type: this.type\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = Code;\nexport {\n Code,\n index_default as default,\n inputRegex,\n pasteRegex\n};\n//# sourceMappingURL=index.js.map","// src/code-block.ts\nimport { mergeAttributes, Node, textblockTypeInputRule } from \"@tiptap/core\";\nimport { Plugin, PluginKey, Selection, TextSelection } from \"@tiptap/pm/state\";\nvar DEFAULT_TAB_SIZE = 4;\nvar backtickInputRegex = /^```([a-z]+)?[\\s\\n]$/;\nvar tildeInputRegex = /^~~~([a-z]+)?[\\s\\n]$/;\nvar CodeBlock = Node.create({\n name: \"codeBlock\",\n addOptions() {\n return {\n languageClassPrefix: \"language-\",\n exitOnTripleEnter: true,\n exitOnArrowDown: true,\n defaultLanguage: null,\n enableTabIndentation: false,\n tabSize: DEFAULT_TAB_SIZE,\n HTMLAttributes: {}\n };\n },\n content: \"text*\",\n marks: \"\",\n group: \"block\",\n code: true,\n defining: true,\n addAttributes() {\n return {\n language: {\n default: this.options.defaultLanguage,\n parseHTML: (element) => {\n var _a;\n const { languageClassPrefix } = this.options;\n if (!languageClassPrefix) {\n return null;\n }\n const classNames = [...((_a = element.firstElementChild) == null ? void 0 : _a.classList) || []];\n const languages = classNames.filter((className) => className.startsWith(languageClassPrefix)).map((className) => className.replace(languageClassPrefix, \"\"));\n const language = languages[0];\n if (!language) {\n return null;\n }\n return language;\n },\n rendered: false\n }\n };\n },\n parseHTML() {\n return [\n {\n tag: \"pre\",\n preserveWhitespace: \"full\"\n }\n ];\n },\n renderHTML({ node, HTMLAttributes }) {\n return [\n \"pre\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n [\n \"code\",\n {\n class: node.attrs.language ? this.options.languageClassPrefix + node.attrs.language : null\n },\n 0\n ]\n ];\n },\n markdownTokenName: \"code\",\n parseMarkdown: (token, helpers) => {\n var _a, _b;\n if (((_a = token.raw) == null ? void 0 : _a.startsWith(\"```\")) === false && ((_b = token.raw) == null ? void 0 : _b.startsWith(\"~~~\")) === false && token.codeBlockStyle !== \"indented\") {\n return [];\n }\n return helpers.createNode(\n \"codeBlock\",\n { language: token.lang || null },\n token.text ? [helpers.createTextNode(token.text)] : []\n );\n },\n renderMarkdown: (node, h) => {\n var _a;\n let output = \"\";\n const language = ((_a = node.attrs) == null ? void 0 : _a.language) || \"\";\n if (!node.content) {\n output = `\\`\\`\\`${language}\n\n\\`\\`\\``;\n } else {\n const lines = [`\\`\\`\\`${language}`, h.renderChildren(node.content), \"```\"];\n output = lines.join(\"\\n\");\n }\n return output;\n },\n addCommands() {\n return {\n setCodeBlock: (attributes) => ({ commands }) => {\n return commands.setNode(this.name, attributes);\n },\n toggleCodeBlock: (attributes) => ({ commands }) => {\n return commands.toggleNode(this.name, \"paragraph\", attributes);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Alt-c\": () => this.editor.commands.toggleCodeBlock(),\n // remove code block when at start of document or code block is empty\n Backspace: () => {\n const { empty, $anchor } = this.editor.state.selection;\n const isAtStart = $anchor.pos === 1;\n if (!empty || $anchor.parent.type.name !== this.name) {\n return false;\n }\n if (isAtStart || !$anchor.parent.textContent.length) {\n return this.editor.commands.clearNodes();\n }\n return false;\n },\n // handle tab indentation\n Tab: ({ editor }) => {\n var _a;\n if (!this.options.enableTabIndentation) {\n return false;\n }\n const tabSize = (_a = this.options.tabSize) != null ? _a : DEFAULT_TAB_SIZE;\n const { state } = editor;\n const { selection } = state;\n const { $from, empty } = selection;\n if ($from.parent.type !== this.type) {\n return false;\n }\n const indent = \" \".repeat(tabSize);\n if (empty) {\n return editor.commands.insertContent(indent);\n }\n return editor.commands.command(({ tr }) => {\n const { from, to } = selection;\n const text = state.doc.textBetween(from, to, \"\\n\", \"\\n\");\n const lines = text.split(\"\\n\");\n const indentedText = lines.map((line) => indent + line).join(\"\\n\");\n tr.replaceWith(from, to, state.schema.text(indentedText));\n return true;\n });\n },\n // handle shift+tab reverse indentation\n \"Shift-Tab\": ({ editor }) => {\n var _a;\n if (!this.options.enableTabIndentation) {\n return false;\n }\n const tabSize = (_a = this.options.tabSize) != null ? _a : DEFAULT_TAB_SIZE;\n const { state } = editor;\n const { selection } = state;\n const { $from, empty } = selection;\n if ($from.parent.type !== this.type) {\n return false;\n }\n if (empty) {\n return editor.commands.command(({ tr }) => {\n var _a2;\n const { pos } = $from;\n const codeBlockStart = $from.start();\n const codeBlockEnd = $from.end();\n const allText = state.doc.textBetween(codeBlockStart, codeBlockEnd, \"\\n\", \"\\n\");\n const lines = allText.split(\"\\n\");\n let currentLineIndex = 0;\n let charCount = 0;\n const relativeCursorPos = pos - codeBlockStart;\n for (let i = 0; i < lines.length; i += 1) {\n if (charCount + lines[i].length >= relativeCursorPos) {\n currentLineIndex = i;\n break;\n }\n charCount += lines[i].length + 1;\n }\n const currentLine = lines[currentLineIndex];\n const leadingSpaces = ((_a2 = currentLine.match(/^ */)) == null ? void 0 : _a2[0]) || \"\";\n const spacesToRemove = Math.min(leadingSpaces.length, tabSize);\n if (spacesToRemove === 0) {\n return true;\n }\n let lineStartPos = codeBlockStart;\n for (let i = 0; i < currentLineIndex; i += 1) {\n lineStartPos += lines[i].length + 1;\n }\n tr.delete(lineStartPos, lineStartPos + spacesToRemove);\n const cursorPosInLine = pos - lineStartPos;\n if (cursorPosInLine <= spacesToRemove) {\n tr.setSelection(TextSelection.create(tr.doc, lineStartPos));\n }\n return true;\n });\n }\n return editor.commands.command(({ tr }) => {\n const { from, to } = selection;\n const text = state.doc.textBetween(from, to, \"\\n\", \"\\n\");\n const lines = text.split(\"\\n\");\n const reverseIndentText = lines.map((line) => {\n var _a2;\n const leadingSpaces = ((_a2 = line.match(/^ */)) == null ? void 0 : _a2[0]) || \"\";\n const spacesToRemove = Math.min(leadingSpaces.length, tabSize);\n return line.slice(spacesToRemove);\n }).join(\"\\n\");\n tr.replaceWith(from, to, state.schema.text(reverseIndentText));\n return true;\n });\n },\n // exit node on triple enter\n Enter: ({ editor }) => {\n if (!this.options.exitOnTripleEnter) {\n return false;\n }\n const { state } = editor;\n const { selection } = state;\n const { $from, empty } = selection;\n if (!empty || $from.parent.type !== this.type) {\n return false;\n }\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n const endsWithDoubleNewline = $from.parent.textContent.endsWith(\"\\n\\n\");\n if (!isAtEnd || !endsWithDoubleNewline) {\n return false;\n }\n return editor.chain().command(({ tr }) => {\n tr.delete($from.pos - 2, $from.pos);\n return true;\n }).exitCode().run();\n },\n // exit node on arrow down\n ArrowDown: ({ editor }) => {\n if (!this.options.exitOnArrowDown) {\n return false;\n }\n const { state } = editor;\n const { selection, doc } = state;\n const { $from, empty } = selection;\n if (!empty || $from.parent.type !== this.type) {\n return false;\n }\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n if (!isAtEnd) {\n return false;\n }\n const after = $from.after();\n if (after === void 0) {\n return false;\n }\n const nodeAfter = doc.nodeAt(after);\n if (nodeAfter) {\n return editor.commands.command(({ tr }) => {\n tr.setSelection(Selection.near(doc.resolve(after)));\n return true;\n });\n }\n return editor.commands.exitCode();\n }\n };\n },\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => ({\n language: match[1]\n })\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => ({\n language: match[1]\n })\n })\n ];\n },\n addProseMirrorPlugins() {\n return [\n // this plugin creates a code block for pasted content from VS Code\n // we can also detect the copied code language\n new Plugin({\n key: new PluginKey(\"codeBlockVSCodeHandler\"),\n props: {\n handlePaste: (view, event) => {\n if (!event.clipboardData) {\n return false;\n }\n if (this.editor.isActive(this.type.name)) {\n return false;\n }\n const text = event.clipboardData.getData(\"text/plain\");\n const vscode = event.clipboardData.getData(\"vscode-editor-data\");\n const vscodeData = vscode ? JSON.parse(vscode) : void 0;\n const language = vscodeData == null ? void 0 : vscodeData.mode;\n if (!text || !language) {\n return false;\n }\n const { tr, schema } = view.state;\n const textNode = schema.text(text.replace(/\\r\\n?/g, \"\\n\"));\n tr.replaceSelectionWith(this.type.create({ language }, textNode));\n if (tr.selection.$from.parent.type !== this.type) {\n tr.setSelection(TextSelection.near(tr.doc.resolve(Math.max(0, tr.selection.from - 2))));\n }\n tr.setMeta(\"paste\", true);\n view.dispatch(tr);\n return true;\n }\n }\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = CodeBlock;\nexport {\n CodeBlock,\n backtickInputRegex,\n index_default as default,\n tildeInputRegex\n};\n//# sourceMappingURL=index.js.map","// src/document.ts\nimport { Node } from \"@tiptap/core\";\nvar Document = Node.create({\n name: \"doc\",\n topNode: true,\n content: \"block+\",\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return \"\";\n }\n return h.renderChildren(node.content, \"\\n\\n\");\n }\n});\n\n// src/index.ts\nvar index_default = Document;\nexport {\n Document,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/hard-break.ts\nimport { mergeAttributes, Node } from \"@tiptap/core\";\nvar HardBreak = Node.create({\n name: \"hardBreak\",\n markdownTokenName: \"br\",\n addOptions() {\n return {\n keepMarks: true,\n HTMLAttributes: {}\n };\n },\n inline: true,\n group: \"inline\",\n selectable: false,\n linebreakReplacement: true,\n parseHTML() {\n return [{ tag: \"br\" }];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"br\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n },\n renderText() {\n return \"\\n\";\n },\n renderMarkdown: () => ` \n`,\n parseMarkdown: () => {\n return {\n type: \"hardBreak\"\n };\n },\n addCommands() {\n return {\n setHardBreak: () => ({ commands, chain, state, editor }) => {\n return commands.first([\n () => commands.exitCode(),\n () => commands.command(() => {\n const { selection, storedMarks } = state;\n if (selection.$from.parent.type.spec.isolating) {\n return false;\n }\n const { keepMarks } = this.options;\n const { splittableMarks } = editor.extensionManager;\n const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks();\n return chain().insertContent({ type: this.name }).command(({ tr, dispatch }) => {\n if (dispatch && marks && keepMarks) {\n const filteredMarks = marks.filter((mark) => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n return true;\n }).run();\n })\n ]);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Enter\": () => this.editor.commands.setHardBreak(),\n \"Shift-Enter\": () => this.editor.commands.setHardBreak()\n };\n }\n});\n\n// src/index.ts\nvar index_default = HardBreak;\nexport {\n HardBreak,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/heading.ts\nimport { mergeAttributes, Node, textblockTypeInputRule } from \"@tiptap/core\";\nvar Heading = Node.create({\n name: \"heading\",\n addOptions() {\n return {\n levels: [1, 2, 3, 4, 5, 6],\n HTMLAttributes: {}\n };\n },\n content: \"inline*\",\n group: \"block\",\n defining: true,\n addAttributes() {\n return {\n level: {\n default: 1,\n rendered: false\n }\n };\n },\n parseHTML() {\n return this.options.levels.map((level) => ({\n tag: `h${level}`,\n attrs: { level }\n }));\n },\n renderHTML({ node, HTMLAttributes }) {\n const hasLevel = this.options.levels.includes(node.attrs.level);\n const level = hasLevel ? node.attrs.level : this.options.levels[0];\n return [`h${level}`, mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n parseMarkdown: (token, helpers) => {\n return helpers.createNode(\"heading\", { level: token.depth || 1 }, helpers.parseInline(token.tokens || []));\n },\n renderMarkdown: (node, h) => {\n var _a;\n const level = ((_a = node.attrs) == null ? void 0 : _a.level) ? parseInt(node.attrs.level, 10) : 1;\n const headingChars = \"#\".repeat(level);\n if (!node.content) {\n return \"\";\n }\n return `${headingChars} ${h.renderChildren(node.content)}`;\n },\n addCommands() {\n return {\n setHeading: (attributes) => ({ commands }) => {\n if (!this.options.levels.includes(attributes.level)) {\n return false;\n }\n return commands.setNode(this.name, attributes);\n },\n toggleHeading: (attributes) => ({ commands }) => {\n if (!this.options.levels.includes(attributes.level)) {\n return false;\n }\n return commands.toggleNode(this.name, \"paragraph\", attributes);\n }\n };\n },\n addKeyboardShortcuts() {\n return this.options.levels.reduce(\n (items, level) => ({\n ...items,\n ...{\n [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level })\n }\n }),\n {}\n );\n },\n addInputRules() {\n return this.options.levels.map((level) => {\n return textblockTypeInputRule({\n find: new RegExp(`^(#{${Math.min(...this.options.levels)},${level}})\\\\s$`),\n type: this.type,\n getAttributes: {\n level\n }\n });\n });\n }\n});\n\n// src/index.ts\nvar index_default = Heading;\nexport {\n Heading,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/horizontal-rule.ts\nimport { canInsertNode, isNodeSelection, mergeAttributes, Node, nodeInputRule } from \"@tiptap/core\";\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\";\nvar HorizontalRule = Node.create({\n name: \"horizontalRule\",\n addOptions() {\n return {\n HTMLAttributes: {},\n nextNodeType: \"paragraph\"\n };\n },\n group: \"block\",\n parseHTML() {\n return [{ tag: \"hr\" }];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"hr\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n },\n markdownTokenName: \"hr\",\n parseMarkdown: (token, helpers) => {\n return helpers.createNode(\"horizontalRule\");\n },\n renderMarkdown: () => {\n return \"---\";\n },\n addCommands() {\n return {\n setHorizontalRule: () => ({ chain, state }) => {\n if (!canInsertNode(state, state.schema.nodes[this.name])) {\n return false;\n }\n const { selection } = state;\n const { $to: $originTo } = selection;\n const currentChain = chain();\n if (isNodeSelection(selection)) {\n currentChain.insertContentAt($originTo.pos, {\n type: this.name\n });\n } else {\n currentChain.insertContent({ type: this.name });\n }\n return currentChain.command(({ state: chainState, tr, dispatch }) => {\n if (dispatch) {\n const { $to } = tr.selection;\n const posAfter = $to.end();\n if ($to.nodeAfter) {\n if ($to.nodeAfter.isTextblock) {\n tr.setSelection(TextSelection.create(tr.doc, $to.pos + 1));\n } else if ($to.nodeAfter.isBlock) {\n tr.setSelection(NodeSelection.create(tr.doc, $to.pos));\n } else {\n tr.setSelection(TextSelection.create(tr.doc, $to.pos));\n }\n } else {\n const nodeType = chainState.schema.nodes[this.options.nextNodeType] || $to.parent.type.contentMatch.defaultType;\n const node = nodeType == null ? void 0 : nodeType.create();\n if (node) {\n tr.insert(posAfter, node);\n tr.setSelection(TextSelection.create(tr.doc, posAfter + 1));\n }\n }\n tr.scrollIntoView();\n }\n return true;\n }).run();\n }\n };\n },\n addInputRules() {\n return [\n nodeInputRule({\n find: /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n type: this.type\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = HorizontalRule;\nexport {\n HorizontalRule,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/italic.ts\nimport { Mark, markInputRule, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nvar starInputRegex = /(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))$/;\nvar starPasteRegex = /(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))/g;\nvar underscoreInputRegex = /(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))$/;\nvar underscorePasteRegex = /(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))/g;\nvar Italic = Mark.create({\n name: \"italic\",\n addOptions() {\n return {\n HTMLAttributes: {}\n };\n },\n parseHTML() {\n return [\n {\n tag: \"em\"\n },\n {\n tag: \"i\",\n getAttrs: (node) => node.style.fontStyle !== \"normal\" && null\n },\n {\n style: \"font-style=normal\",\n clearMark: (mark) => mark.type.name === this.name\n },\n {\n style: \"font-style=italic\"\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"em\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setItalic: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleItalic: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetItalic: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n }\n };\n },\n markdownTokenName: \"em\",\n parseMarkdown: (token, helpers) => {\n return helpers.applyMark(\"italic\", helpers.parseInline(token.tokens || []));\n },\n markdownOptions: {\n htmlReopen: {\n open: \"<em>\",\n close: \"</em>\"\n }\n },\n renderMarkdown: (node, h) => {\n return `*${h.renderChildren(node)}*`;\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-i\": () => this.editor.commands.toggleItalic(),\n \"Mod-I\": () => this.editor.commands.toggleItalic()\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: starInputRegex,\n type: this.type\n }),\n markInputRule({\n find: underscoreInputRegex,\n type: this.type\n })\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: starPasteRegex,\n type: this.type\n }),\n markPasteRule({\n find: underscorePasteRegex,\n type: this.type\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = Italic;\nexport {\n Italic,\n index_default as default,\n starInputRegex,\n starPasteRegex,\n underscoreInputRegex,\n underscorePasteRegex\n};\n//# sourceMappingURL=index.js.map","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections<T>} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n if (!(name in groups)) {\n groups[name] = [];\n }\n return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections<T>} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n if (flags[numeric]) {\n flags[asciinumeric] = true;\n flags[alphanumeric] = true;\n }\n if (flags[ascii]) {\n flags[asciinumeric] = true;\n flags[alpha] = true;\n }\n if (flags[asciinumeric]) {\n flags[alphanumeric] = true;\n }\n if (flags[alpha]) {\n flags[alphanumeric] = true;\n }\n if (flags[alphanumeric]) {\n flags[domain] = true;\n }\n if (flags[emoji]) {\n flags[domain] = true;\n }\n for (const k in flags) {\n const group = registerGroup(k, groups);\n if (group.indexOf(t) < 0) {\n group.push(t);\n }\n }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections<T>} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n const result = {};\n for (const c in groups) {\n if (groups[c].indexOf(t) >= 0) {\n result[c] = true;\n }\n }\n return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State<T> }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State<T>][]} jr */\n this.jr = [];\n /** @type {?State<T>} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections<string>\n */\nState.groups = {};\nState.prototype = {\n accepts() {\n return !!this.t;\n },\n /**\n * Follow an existing transition from the given input to the next state.\n * Does not mutate.\n * @param {string} input character or token type to transition on\n * @returns {?State<T>} the next state, if any\n */\n go(input) {\n const state = this;\n const nextState = state.j[input];\n if (nextState) {\n return nextState;\n }\n for (let i = 0; i < state.jr.length; i++) {\n const regex = state.jr[i][0];\n const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n if (nextState && regex.test(input)) {\n return nextState;\n }\n }\n // Nowhere left to jump! Return default, if any\n return state.jd;\n },\n /**\n * Whether the state has a transition for the given input. Set the second\n * argument to true to only look for an exact match (and not a default or\n * regular-expression-based transition)\n * @param {string} input\n * @param {boolean} exactOnly\n */\n has(input, exactOnly = false) {\n return exactOnly ? input in this.j : !!this.go(input);\n },\n /**\n * Short for \"transition all\"; create a transition from the array of items\n * in the given list to the same final resulting state.\n * @param {string | string[]} inputs Group of inputs to transition on\n * @param {Transition<T> | State<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [groups] Master list of token groups\n */\n ta(inputs, next, flags, groups) {\n for (let i = 0; i < inputs.length; i++) {\n this.tt(inputs[i], next, flags, groups);\n }\n },\n /**\n * Short for \"take regexp transition\"; defines a transition for this state\n * when it encounters a token which matches the given regular expression\n * @param {RegExp} regexp Regular expression transition (populate first)\n * @param {T | State<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [groups] Master list of token groups\n * @returns {State<T>} taken after the given input\n */\n tr(regexp, next, flags, groups) {\n groups = groups || State.groups;\n let nextState;\n if (next && next.j) {\n nextState = next;\n } else {\n // Token with maybe token groups\n nextState = new State(next);\n if (flags && groups) {\n addToGroups(next, flags, groups);\n }\n }\n this.jr.push([regexp, nextState]);\n return nextState;\n },\n /**\n * Short for \"take transitions\", will take as many sequential transitions as\n * the length of the given input and returns the\n * resulting final state.\n * @param {string | string[]} input\n * @param {T | State<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [groups] Master list of token groups\n * @returns {State<T>} taken after the given input\n */\n ts(input, next, flags, groups) {\n let state = this;\n const len = input.length;\n if (!len) {\n return state;\n }\n for (let i = 0; i < len - 1; i++) {\n state = state.tt(input[i]);\n }\n return state.tt(input[len - 1], next, flags, groups);\n },\n /**\n * Short for \"take transition\", this is a method for building/working with\n * state machines.\n *\n * If a state already exists for the given input, returns it.\n *\n * If a token is specified, that state will emit that token when reached by\n * the linkify engine.\n *\n * If no state exists, it will be initialized with some default transitions\n * that resemble existing default transitions.\n *\n * If a state is given for the second argument, that state will be\n * transitioned to on the given input regardless of what that input\n * previously did.\n *\n * Specify a token group flags to define groups that this token belongs to.\n * The token will be added to corresponding entires in the given groups\n * object.\n *\n * @param {string} input character, token type to transition on\n * @param {T | State<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [groups] Master list of groups\n * @returns {State<T>} taken after the given input\n */\n tt(input, next, flags, groups) {\n groups = groups || State.groups;\n const state = this;\n\n // Check if existing state given, just a basic transition\n if (next && next.j) {\n state.j[input] = next;\n return next;\n }\n const t = next;\n\n // Take the transition with the usual default mechanisms and use that as\n // a template for creating the next state\n let nextState,\n templateState = state.go(input);\n if (templateState) {\n nextState = new State();\n Object.assign(nextState.j, templateState.j);\n nextState.jr.push.apply(nextState.jr, templateState.jr);\n nextState.jd = templateState.jd;\n nextState.t = templateState.t;\n } else {\n nextState = new State();\n }\n if (t) {\n // Ensure newly token is in the same groups as the old token\n if (groups) {\n if (nextState.t && typeof nextState.t === 'string') {\n const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);\n addToGroups(t, allFlags, groups);\n } else if (flags) {\n addToGroups(t, flags, groups);\n }\n }\n nextState.t = t; // overwrite anything that was previously there\n }\n state.j[input] = nextState;\n return nextState;\n }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {RegExp} regexp\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string | string[]} input\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string} input\n * @param {T | State<T>} [next]\n * @param {Collections<T>} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // (\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // )\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // <\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // >\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEMOJI: EMOJI$1,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tHYPHEN: HYPHEN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tLOCALHOST: LOCALHOST,\n\tNL: NL,\n\tNUM: NUM,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tSCHEME: SCHEME,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tSYM: SYM,\n\tTILDE: TILDE,\n\tTLD: TLD,\n\tUNDERSCORE: UNDERSCORE,\n\tUTLD: UTLD,\n\tUWORD: UWORD,\n\tWORD: WORD,\n\tWS: WS\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tDIGIT: DIGIT,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tLETTER: LETTER,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\n\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n // Frequently used states (name argument removed during minification)\n /** @type Collections<string> */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State<string> */\n const Start = new State();\n if (tlds == null) {\n tlds = decodeTlds(encodedTlds);\n }\n if (utlds == null) {\n utlds = decodeTlds(encodedUtlds);\n }\n\n // States for special URL symbols that accept immediately after start\n tt(Start, \"'\", APOSTROPHE);\n tt(Start, '{', OPENBRACE);\n tt(Start, '}', CLOSEBRACE);\n tt(Start, '[', OPENBRACKET);\n tt(Start, ']', CLOSEBRACKET);\n tt(Start, '(', OPENPAREN);\n tt(Start, ')', CLOSEPAREN);\n tt(Start, '<', OPENANGLEBRACKET);\n tt(Start, '>', CLOSEANGLEBRACKET);\n tt(Start, '(', FULLWIDTHLEFTPAREN);\n tt(Start, ')', FULLWIDTHRIGHTPAREN);\n tt(Start, '「', LEFTCORNERBRACKET);\n tt(Start, '」', RIGHTCORNERBRACKET);\n tt(Start, '『', LEFTWHITECORNERBRACKET);\n tt(Start, '』', RIGHTWHITECORNERBRACKET);\n tt(Start, '<', FULLWIDTHLESSTHAN);\n tt(Start, '>', FULLWIDTHGREATERTHAN);\n tt(Start, '&', AMPERSAND);\n tt(Start, '*', ASTERISK);\n tt(Start, '@', AT);\n tt(Start, '`', BACKTICK);\n tt(Start, '^', CARET);\n tt(Start, ':', COLON);\n tt(Start, ',', COMMA);\n tt(Start, '$', DOLLAR);\n tt(Start, '.', DOT);\n tt(Start, '=', EQUALS);\n tt(Start, '!', EXCLAMATION);\n tt(Start, '-', HYPHEN);\n tt(Start, '%', PERCENT);\n tt(Start, '|', PIPE);\n tt(Start, '+', PLUS);\n tt(Start, '#', POUND);\n tt(Start, '?', QUERY);\n tt(Start, '\"', QUOTE);\n tt(Start, '/', SLASH);\n tt(Start, ';', SEMI);\n tt(Start, '~', TILDE);\n tt(Start, '_', UNDERSCORE);\n tt(Start, '\\\\', BACKSLASH);\n tt(Start, '・', FULLWIDTHMIDDLEDOT);\n const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n [asciinumeric]: true\n });\n const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n [alphanumeric]: true\n });\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, DIGIT, Asciinumeric);\n tr(Word, ASCII_LETTER, Word);\n tr(Asciinumeric, DIGIT, Asciinumeric);\n tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n // Same as previous, but specific to non-fsm.ascii alphabet words\n const UWord = tr(Start, LETTER, UWORD, {\n [alpha]: true\n });\n tr(UWord, ASCII_LETTER); // Non-accepting\n tr(UWord, DIGIT, Alphanumeric);\n tr(UWord, LETTER, UWord);\n tr(Alphanumeric, DIGIT, Alphanumeric);\n tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Nl = tt(Start, LF, NL, {\n [whitespace]: true\n });\n const Cr = tt(Start, CR, WS, {\n [whitespace]: true\n });\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, OBJECT_REPLACEMENT, Ws);\n tt(Cr, LF, Nl); // \\r\\n\n tt(Cr, OBJECT_REPLACEMENT, Ws);\n tr(Cr, SPACE, Ws);\n tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, Ws);\n tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n // Emoji tokens. They are not grouped by the scanner except in cases where a\n // zero-width joiner is present\n const Emoji = tr(Start, EMOJI, EMOJI$1, {\n [emoji]: true\n });\n tt(Emoji, '#'); // no transition, emoji regex seems to match #\n tr(Emoji, EMOJI, Emoji);\n tt(Emoji, EMOJI_VARIATION, Emoji);\n // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n tt(EmojiJoiner, '#');\n tr(EmojiJoiner, EMOJI, Emoji);\n // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n // Generates states for top-level domains\n // Note that this is most accurate when tlds are in alphabetical order\n const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n for (let i = 0; i < tlds.length; i++) {\n fastts(Start, tlds[i], TLD, WORD, wordjr);\n }\n for (let i = 0; i < utlds.length; i++) {\n fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n }\n addToGroups(TLD, {\n tld: true,\n ascii: true\n }, groups);\n addToGroups(UTLD, {\n utld: true,\n alpha: true\n }, groups);\n\n // Collect the states generated by different protocols. NOTE: If any new TLDs\n // get added that are also protocols, set the token to be the same as the\n // protocol to ensure parsing works as expected.\n fastts(Start, 'file', SCHEME, WORD, wordjr);\n fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n addToGroups(SCHEME, {\n scheme: true,\n ascii: true\n }, groups);\n addToGroups(SLASH_SCHEME, {\n slashscheme: true,\n ascii: true\n }, groups);\n\n // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n for (let i = 0; i < customSchemes.length; i++) {\n const sch = customSchemes[i][0];\n const optionalSlashSlash = customSchemes[i][1];\n const flags = optionalSlashSlash ? {\n [scheme]: true\n } : {\n [slashscheme]: true\n };\n if (sch.indexOf('-') >= 0) {\n flags[domain] = true;\n } else if (!ASCII_LETTER.test(sch)) {\n flags[numeric] = true; // numbers only\n } else if (DIGIT.test(sch)) {\n flags[asciinumeric] = true;\n } else {\n flags[ascii] = true;\n }\n ts(Start, sch, sch, flags);\n }\n\n // Localhost token\n ts(Start, 'localhost', LOCALHOST, {\n ascii: true\n });\n\n // Set default transition for start state (some symbol)\n Start.jd = new State(SYM);\n return {\n start: Start,\n tokens: Object.assign({\n groups\n }, tk)\n };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State<string>} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n // State machine is not case sensitive, so input is tokenized in lowercased\n // form (still returns regular case). Uses selective `toLowerCase` because\n // lowercasing the entire string causes the length and character position to\n // vary in some non-English strings with V8-based runtimes.\n const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n const charCount = iterable.length; // <= len if there are emojis, etc\n const tokens = []; // return value\n\n // cursor through the string itself, accounting for characters that have\n // width with length 2 such as emojis\n let cursor = 0;\n\n // Cursor through the array-representation of the string\n let charCursor = 0;\n\n // Tokenize the string\n while (charCursor < charCount) {\n let state = start;\n let nextState = null;\n let tokenLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n let charsSinceAccepts = -1;\n while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n charsSinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts += iterable[charCursor].length;\n charsSinceAccepts++;\n }\n tokenLength += iterable[charCursor].length;\n cursor += iterable[charCursor].length;\n charCursor++;\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n charCursor -= charsSinceAccepts;\n tokenLength -= sinceAccepts;\n\n // No more jumps, just make a new token from the last accepting one\n tokens.push({\n t: latestAccepting.t,\n // token type/name\n v: str.slice(cursor - tokenLength, cursor),\n // string value\n s: cursor - tokenLength,\n // start index\n e: cursor // end index (excluding)\n });\n }\n return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n const result = [];\n const len = str.length;\n let index = 0;\n while (index < len) {\n let first = str.charCodeAt(index);\n let second;\n let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n : str.slice(index, index + 2); // two-index characters\n result.push(char);\n index += char.length;\n }\n return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State<string>} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State<string>][]} jr\n * @returns {State<string>}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n let next;\n const len = input.length;\n for (let i = 0; i < len - 1; i++) {\n const char = input[i];\n if (state.j[char]) {\n next = state.j[char];\n } else {\n next = new State(defaultt);\n next.jr = jr.slice();\n state.j[char] = next;\n }\n state = next;\n }\n next = new State(t);\n next.jr = jr.slice();\n state.j[input[len - 1]] = next;\n return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n const words = [];\n const stack = [];\n let i = 0;\n let digits = '0123456789';\n while (i < encoded.length) {\n let popDigitCount = 0;\n while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n popDigitCount++; // encountered some digits, have to pop to go one level up trie\n }\n if (popDigitCount > 0) {\n words.push(stack.join('')); // whatever preceded the pop digits must be a word\n for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n stack.pop();\n }\n i += popDigitCount;\n } else {\n stack.push(encoded[i]); // drop down a level into the trie\n i++;\n }\n }\n return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt<string>`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n * events?: OptObj<EventListeners>,\n * \tformat?: Opt<string>,\n * \tformatHref?: Opt<string>,\n * \tnl2br?: boolean,\n * \ttagName?: Opt<any>,\n * \ttarget?: Opt<string>,\n * \trel?: Opt<string>,\n * \tvalidate?: Opt<boolean>,\n * \ttruncate?: Opt<number>,\n * \tclassName?: Opt<string>,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required<Opts>\n */\nconst defaults = {\n defaultProtocol: 'http',\n events: null,\n format: noop,\n formatHref: noop,\n nl2br: false,\n tagName: 'a',\n target: null,\n rel: null,\n validate: true,\n truncate: Infinity,\n className: null,\n attributes: null,\n ignoreTags: [],\n render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n * internal use) default render function that determines how to generate an\n * HTML element based on a link token's derived tagName, attributes and HTML.\n * Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n let o = Object.assign({}, defaults);\n if (opts) {\n o = Object.assign(o, opts instanceof Options ? opts.o : opts);\n }\n\n // Ensure all ignored tags are uppercase\n const ignoredTags = o.ignoreTags;\n const uppercaseIgnoredTags = [];\n for (let i = 0; i < ignoredTags.length; i++) {\n uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n }\n /** @protected */\n this.o = o;\n if (defaultRender) {\n this.defaultRender = defaultRender;\n }\n this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n o: defaults,\n /**\n * @type string[]\n */\n ignoreTags: [],\n /**\n * @param {IntermediateRepresentation} ir\n * @returns {any}\n */\n defaultRender(ir) {\n return ir;\n },\n /**\n * Returns true or false based on whether a token should be displayed as a\n * link based on the user options.\n * @param {MultiToken} token\n * @returns {boolean}\n */\n check(token) {\n return this.get('validate', token.toString(), token);\n },\n // Private methods\n\n /**\n * Resolve an option's value based on the value of the option and the given\n * params. If operator and token are specified and the target option is\n * callable, automatically calls the function with the given argument.\n * @template {keyof Opts} K\n * @param {K} key Name of option to use\n * @param {string} [operator] will be passed to the target option if it's a\n * function. If not specified, RAW function value gets returned\n * @param {MultiToken} [token] The token from linkify.tokenize\n * @returns {Opts[K] | any}\n */\n get(key, operator, token) {\n const isCallable = operator != null;\n let option = this.o[key];\n if (!option) {\n return option;\n }\n if (typeof option === 'object') {\n option = token.t in option ? option[token.t] : defaults[key];\n if (typeof option === 'function' && isCallable) {\n option = option(operator, token);\n }\n } else if (typeof option === 'function' && isCallable) {\n option = option(operator, token.t, token);\n }\n return option;\n },\n /**\n * @template {keyof Opts} L\n * @param {L} key Name of options object to use\n * @param {string} [operator]\n * @param {MultiToken} [token]\n * @returns {Opts[L] | any}\n */\n getObj(key, operator, token) {\n let obj = this.o[key];\n if (typeof obj === 'function' && operator != null) {\n obj = obj(operator, token.t, token);\n }\n return obj;\n },\n /**\n * Convert the given token to a rendered element that may be added to the\n * calling-interface's DOM\n * @param {MultiToken} token Token to render to an HTML element\n * @returns {any} Render result; e.g., HTML string, DOM element, React\n * Component, etc.\n */\n render(token) {\n const ir = token.render(this); // intermediate representation\n const renderFn = this.get('render', null, token) || this.defaultRender;\n return renderFn(ir, token.t, token);\n }\n};\nfunction noop(val) {\n return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tOptions: Options,\n\tdefaults: defaults\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n this.t = 'token';\n this.v = value;\n this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n isLink: false,\n /**\n * Return the string this token represents.\n * @return {string}\n */\n toString() {\n return this.v;\n },\n /**\n * What should the value for this token be in the `href` HTML attribute?\n * Returns the `.toString` value by default.\n * @param {string} [scheme]\n * @return {string}\n */\n toHref(scheme) {\n return this.toString();\n },\n /**\n * @param {Options} options Formatting options\n * @returns {string}\n */\n toFormattedString(options) {\n const val = this.toString();\n const truncate = options.get('truncate', val, this);\n const formatted = options.get('format', val, this);\n return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n },\n /**\n *\n * @param {Options} options\n * @returns {string}\n */\n toFormattedHref(options) {\n return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n },\n /**\n * The start index of this token in the original input string\n * @returns {number}\n */\n startIndex() {\n return this.tk[0].s;\n },\n /**\n * The end index of this token in the original input string (up to this\n * index but not including it)\n * @returns {number}\n */\n endIndex() {\n return this.tk[this.tk.length - 1].e;\n },\n /**\n \tReturns an object of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {string} [protocol] `'http'` by default\n */\n toObject(protocol = defaults.defaultProtocol) {\n return {\n type: this.t,\n value: this.toString(),\n isLink: this.isLink,\n href: this.toHref(protocol),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n *\n * @param {Options} options Formatting option\n */\n toFormattedObject(options) {\n return {\n type: this.t,\n value: this.toFormattedString(options),\n isLink: this.isLink,\n href: this.toFormattedHref(options),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n * Whether this token should be rendered as a link according to the given options\n * @param {Options} options\n * @returns {boolean}\n */\n validate(options) {\n return options.get('validate', this.toString(), this);\n },\n /**\n * Return an object that represents how this link should be rendered.\n * @param {Options} options Formattinng options\n */\n render(options) {\n const token = this;\n const href = this.toHref(options.get('defaultProtocol'));\n const formattedHref = options.get('formatHref', href, this);\n const tagName = options.get('tagName', href, token);\n const content = this.toFormattedString(options);\n const attributes = {};\n const className = options.get('className', href, token);\n const target = options.get('target', href, token);\n const rel = options.get('rel', href, token);\n const attrs = options.getObj('attributes', href, token);\n const eventListeners = options.getObj('events', href, token);\n attributes.href = formattedHref;\n if (className) {\n attributes.class = className;\n }\n if (target) {\n attributes.target = target;\n }\n if (rel) {\n attributes.rel = rel;\n }\n if (attrs) {\n Object.assign(attributes, attrs);\n }\n return {\n tagName,\n attributes,\n content,\n eventListeners\n };\n }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n class Token extends MultiToken {\n constructor(value, tokens) {\n super(value, tokens);\n this.t = type;\n }\n }\n for (const p in props) {\n Token.prototype[p] = props[p];\n }\n Token.t = type;\n return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n isLink: true,\n toHref() {\n return 'mailto:' + this.toString();\n }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n isLink: true,\n /**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@param {string} [scheme] default scheme (e.g., 'https')\n \t@return {string} the full href\n */\n toHref(scheme = defaults.defaultProtocol) {\n // Check if already has a prefix scheme\n return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n },\n /**\n * Check whether this URL token has a protocol\n * @return {boolean}\n */\n hasProtocol() {\n const tokens = this.tk;\n return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBase: MultiToken,\n\tEmail: Email,\n\tMultiToken: MultiToken,\n\tNl: Nl,\n\tText: Text,\n\tUrl: Url,\n\tcreateTokenClass: createTokenClass\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections<string> }} tokens\n */\nfunction init$1({\n groups\n}) {\n // Types of characters the URL can definitely end in\n const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n // Types of tokens that can follow a URL and be part of the query string\n // but cannot be the very last characters\n // Characters that cannot appear in the URL at all should be excluded\n const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n // For addresses without the mailto prefix\n // Tokens allowed in the localpart of the email\n const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n // The universal starting state.\n /**\n * @type State<Token>\n */\n const Start = makeState();\n const Localpart = tt(Start, TILDE); // Local part of the email address\n ta(Localpart, localpartAccepting, Localpart);\n ta(Localpart, groups.domain, Localpart);\n const Domain = makeState(),\n Scheme = makeState(),\n SlashScheme = makeState();\n ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n ta(Domain, localpartAccepting, Localpart);\n ta(Domain, groups.domain, Domain);\n const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n // Local part of an email address can be e.g. 'http' or 'mailto'\n tt(Scheme, AT, LocalpartAt);\n tt(SlashScheme, AT, LocalpartAt);\n const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n ta(LocalpartDot, localpartAccepting, Localpart);\n ta(LocalpartDot, groups.domain, Localpart);\n const EmailDomain = makeState();\n ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n ta(EmailDomain, groups.domain, EmailDomain);\n const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n ta(EmailDomainDot, groups.domain, EmailDomain);\n const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n ta(EmailDomainDot, groups.tld, Email$1);\n ta(EmailDomainDot, groups.utld, Email$1);\n tt(LocalpartAt, LOCALHOST, Email$1);\n\n // Hyphen can jump back to a domain name\n const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n ta(EmailDomainHyphen, groups.domain, EmailDomain);\n ta(Email$1, groups.domain, EmailDomain);\n tt(Email$1, DOT, EmailDomainDot);\n tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n // Account for dots and hyphens. Hyphens are usually parts of domain names\n // (but not TLDs)\n const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n const DomainDot = tt(Domain, DOT); // domain followed by DOT\n tt(DomainHyphen, HYPHEN, DomainHyphen);\n ta(DomainHyphen, groups.domain, Domain);\n ta(DomainDot, localpartAccepting, Localpart);\n ta(DomainDot, groups.domain, Domain);\n const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n ta(DomainDot, groups.tld, DomainDotTld);\n ta(DomainDot, groups.utld, DomainDotTld);\n ta(DomainDotTld, groups.domain, Domain);\n ta(DomainDotTld, localpartAccepting, Localpart);\n tt(DomainDotTld, DOT, DomainDot);\n tt(DomainDotTld, HYPHEN, DomainHyphen);\n tt(DomainDotTld, AT, LocalpartAt);\n const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n // Long URL with optional port and maybe query string\n const Url$1 = makeState(Url);\n\n // URL with extra symbols at the end, followed by an opening bracket\n const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n // Query strings\n ta(Url$1, qsAccepting, Url$1);\n ta(Url$1, qsNonAccepting, UrlNonaccept);\n ta(UrlNonaccept, qsAccepting, Url$1);\n ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n // Become real URLs after `SLASH` or `COLON NUM SLASH`\n // Here works with or without scheme:// prefix\n tt(DomainDotTld, SLASH, Url$1);\n tt(DomainDotTldColonPort, SLASH, Url$1);\n\n // Note that domains that begin with schemes are treated slighly differently\n const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n // Scheme states can transition to domain states\n ta(Scheme, groups.domain, Domain);\n tt(Scheme, DOT, DomainDot);\n tt(Scheme, HYPHEN, DomainHyphen);\n ta(SlashScheme, groups.domain, Domain);\n tt(SlashScheme, DOT, DomainDot);\n tt(SlashScheme, HYPHEN, DomainHyphen);\n\n // Force URL with scheme prefix followed by anything sane\n ta(SchemeColon, groups.domain, Url$1);\n tt(SchemeColon, SLASH, Url$1);\n tt(SchemeColon, QUERY, Url$1);\n ta(UriPrefix, groups.domain, Url$1);\n ta(UriPrefix, qsAccepting, Url$1);\n tt(UriPrefix, SLASH, Url$1);\n const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n // {}\n [OPENBRACKET, CLOSEBRACKET],\n // []\n [OPENPAREN, CLOSEPAREN],\n // ()\n [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n // <>\n [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n // ()\n [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n // 「」\n [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n // 『』\n [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <>\n ];\n for (let i = 0; i < bracketPairs.length; i++) {\n const [OPEN, CLOSE] = bracketPairs[i];\n const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n // Continue not accepting for open brackets\n tt(UrlNonaccept, OPEN, UrlOpen);\n\n // URL that begins with an opening bracket, followed by a symbols.\n // Note that the final state can still be `UrlOpen` (if the URL has a\n // single opening bracket for some reason).\n const UrlOpenQ = makeState(Url);\n ta(UrlOpen, qsAccepting, UrlOpenQ);\n const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n ta(UrlOpen, qsNonAccepting, UrlOpenSyms);\n\n // Closing bracket component. This character WILL be included in the URL.\n // Must come after qsNonAccepting (which includes all close-bracket tokens)\n // so that CLOSE -> Url wins over CLOSE -> UrlOpenSyms.\n tt(UrlOpen, CLOSE, Url$1);\n\n // URL that begins with an opening bracket, followed by some symbols\n ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n // Close brace/bracket to become regular URL\n tt(UrlOpenQ, CLOSE, Url$1);\n tt(UrlOpenSyms, CLOSE, Url$1);\n }\n tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n tt(Start, NL, Nl); // single new line\n\n return {\n start: Start,\n tokens: tk\n };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State<MultiToken>} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n let len = tokens.length;\n let cursor = 0;\n let multis = [];\n let textTokens = [];\n while (cursor < len) {\n let state = start;\n let secondState = null;\n let nextState = null;\n let multiLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n // Starting tokens with nowhere to jump to.\n // Consider these to be just plain text\n textTokens.push(tokens[cursor++]);\n }\n while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n // Get the next state\n secondState = null;\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts++;\n }\n cursor++;\n multiLength++;\n }\n if (sinceAccepts < 0) {\n // No accepting state was found, part of a regular text token add\n // the first text token to the text tokens array and try again from\n // the next\n cursor -= multiLength;\n if (cursor < len) {\n textTokens.push(tokens[cursor]);\n cursor++;\n }\n } else {\n // Accepting state!\n // First close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n textTokens = [];\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n multiLength -= sinceAccepts;\n\n // Create a new multitoken\n const Multi = latestAccepting.t;\n const subtokens = tokens.slice(cursor - multiLength, cursor);\n multis.push(initMultiToken(Multi, input, subtokens));\n }\n }\n\n // Finally close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n }\n return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n const startIdx = tokens[0].s;\n const endIdx = tokens[tokens.length - 1].e;\n const value = input.slice(startIdx, endIdx);\n return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n scanner: null,\n parser: null,\n tokenQueue: [],\n pluginQueue: [],\n customSchemes: [],\n initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State<string>,\n * \ttokens: { groups: Collections<string> } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State<MultiToken>,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n State.groups = {};\n INIT.scanner = null;\n INIT.parser = null;\n INIT.tokenQueue = [];\n INIT.pluginQueue = [];\n INIT.customSchemes = [];\n INIT.initialized = false;\n return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n if (name === INIT.tokenQueue[i][0]) {\n warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n INIT.tokenQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.tokenQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n if (name === INIT.pluginQueue[i][0]) {\n warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n INIT.pluginQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.pluginQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n }\n if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n }\n INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n // Initialize scanner state machine and plugins\n INIT.scanner = init$2(INIT.customSchemes);\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n INIT.tokenQueue[i][1]({\n scanner: INIT.scanner\n });\n }\n\n // Initialize parser state machine and plugins\n INIT.parser = init$1(INIT.scanner.tokens);\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n INIT.pluginQueue[i][1]({\n scanner: INIT.scanner,\n parser: INIT.parser\n });\n }\n INIT.initialized = true;\n return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n if (!INIT.initialized) {\n init();\n }\n return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n if (type && typeof type === 'object') {\n if (opts) {\n throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n }\n opts = type;\n type = null;\n }\n const options = new Options(opts);\n const tokens = tokenize(str);\n const filtered = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.isLink && (!type || token.t === type) && options.check(token)) {\n filtered.push(token.toFormattedObject(options));\n }\n }\n return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n * linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n const tokens = tokenize(str);\n return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n","// src/link.ts\nimport { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { find as find2, registerCustomProtocol, reset } from \"linkifyjs\";\n\n// src/helpers/autolink.ts\nimport { combineTransactionSteps, findChildrenInRange, getChangedRanges, getMarksBetween } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { tokenize } from \"linkifyjs\";\n\n// src/helpers/whitespace.ts\nvar UNICODE_WHITESPACE_PATTERN = \"[\\0- \\xA0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]\";\nvar UNICODE_WHITESPACE_REGEX = new RegExp(UNICODE_WHITESPACE_PATTERN);\nvar UNICODE_WHITESPACE_REGEX_END = new RegExp(`${UNICODE_WHITESPACE_PATTERN}$`);\nvar UNICODE_WHITESPACE_REGEX_GLOBAL = new RegExp(UNICODE_WHITESPACE_PATTERN, \"g\");\n\n// src/helpers/autolink.ts\nfunction isValidLinkStructure(tokens) {\n if (tokens.length === 1) {\n return tokens[0].isLink;\n }\n if (tokens.length === 3 && tokens[1].isLink) {\n return [\"()\", \"[]\"].includes(tokens[0].value + tokens[2].value);\n }\n return false;\n}\nfunction autolink(options) {\n return new Plugin({\n key: new PluginKey(\"autolink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n const preventAutolink = transactions.some((transaction) => transaction.getMeta(\"preventAutolink\"));\n if (!docChanges || preventAutolink) {\n return;\n }\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [...transactions]);\n const changes = getChangedRanges(transform);\n changes.forEach(({ newRange }) => {\n const nodesInChangedRanges = findChildrenInRange(newState.doc, newRange, (node) => node.isTextblock);\n let textBlock;\n let textBeforeWhitespace;\n if (nodesInChangedRanges.length > 1) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n void 0,\n \" \"\n );\n } else if (nodesInChangedRanges.length) {\n const endText = newState.doc.textBetween(newRange.from, newRange.to, \" \", \" \");\n if (!UNICODE_WHITESPACE_REGEX_END.test(endText)) {\n return;\n }\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, newRange.to, void 0, \" \");\n }\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace.split(UNICODE_WHITESPACE_REGEX).filter(Boolean);\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n const lastWordBeforeSpace = wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset = textBlock.pos + textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n if (!lastWordBeforeSpace) {\n return false;\n }\n const linksBeforeSpace = tokenize(lastWordBeforeSpace).map((t) => t.toObject(options.defaultProtocol));\n if (!isValidLinkStructure(linksBeforeSpace)) {\n return false;\n }\n linksBeforeSpace.filter((link) => link.isLink).map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1\n })).filter((link) => {\n if (!newState.schema.marks.code) {\n return true;\n }\n return !newState.doc.rangeHasMark(link.from, link.to, newState.schema.marks.code);\n }).filter((link) => options.validate(link.value)).filter((link) => options.shouldAutoLink(link.value)).forEach((link) => {\n if (getMarksBetween(link.from, link.to, newState.doc).some((item) => item.mark.type === options.type)) {\n return;\n }\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href\n })\n );\n });\n }\n });\n if (!tr.steps.length) {\n return;\n }\n return tr;\n }\n });\n}\n\n// src/helpers/clickHandler.ts\nimport { getAttributes } from \"@tiptap/core\";\nimport { Plugin as Plugin2, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nfunction clickHandler(options) {\n return new Plugin2({\n key: new PluginKey2(\"handleClickLink\"),\n props: {\n handleClick: (view, pos, event) => {\n var _a, _b;\n if (event.button !== 0) {\n return false;\n }\n if (!view.editable) {\n return false;\n }\n let link = null;\n if (event.target instanceof HTMLAnchorElement) {\n link = event.target;\n } else {\n const target = event.target;\n if (!target) {\n return false;\n }\n const root = options.editor.view.dom;\n link = target.closest(\"a\");\n if (link && !root.contains(link)) {\n link = null;\n }\n }\n if (!link) {\n return false;\n }\n let handled = false;\n if (options.enableClickSelection) {\n const commandResult = options.editor.commands.extendMarkRange(options.type.name);\n handled = commandResult;\n }\n if (options.openOnClick) {\n const attrs = getAttributes(view.state, options.type.name);\n const href = (_a = link.href) != null ? _a : attrs.href;\n const target = (_b = link.target) != null ? _b : attrs.target;\n if (href) {\n window.open(href, target);\n handled = true;\n }\n }\n return handled;\n }\n }\n });\n}\n\n// src/helpers/pasteHandler.ts\nimport { Plugin as Plugin3, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\nfunction pasteHandler(options) {\n return new Plugin3({\n key: new PluginKey3(\"handlePasteLink\"),\n props: {\n handlePaste: (view, _event, slice) => {\n const { shouldAutoLink } = options;\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n if (empty) {\n return false;\n }\n let textContent = \"\";\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n const link = find(textContent, { defaultProtocol: options.defaultProtocol }).find(\n (item) => item.isLink && item.value === textContent\n );\n if (!textContent || !link || shouldAutoLink !== void 0 && !shouldAutoLink(link.value)) {\n return false;\n }\n return options.editor.commands.setMark(options.type, {\n href: link.href\n });\n }\n }\n });\n}\n\n// src/link.ts\nvar pasteRegex = /https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z]{2,}\\b(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)/gi;\nfunction isAllowedUri(uri, protocols) {\n const allowedProtocols = [\"http\", \"https\", \"ftp\", \"ftps\", \"mailto\", \"tel\", \"callto\", \"sms\", \"cid\", \"xmpp\"];\n if (protocols) {\n protocols.forEach((protocol) => {\n const nextProtocol = typeof protocol === \"string\" ? protocol : protocol.scheme;\n if (nextProtocol) {\n allowedProtocols.push(nextProtocol);\n }\n });\n }\n return !uri || uri.replace(UNICODE_WHITESPACE_REGEX_GLOBAL, \"\").match(\n new RegExp(\n // eslint-disable-next-line no-useless-escape\n `^(?:(?:${allowedProtocols.join(\"|\")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,\n \"i\"\n )\n );\n}\nvar Link = Mark.create({\n name: \"link\",\n priority: 1e3,\n keepOnSplit: false,\n exitable: true,\n onCreate() {\n if (this.options.validate && !this.options.shouldAutoLink) {\n this.options.shouldAutoLink = this.options.validate;\n console.warn(\"The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.\");\n }\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n onDestroy() {\n reset();\n },\n inclusive() {\n return this.options.autolink;\n },\n addOptions() {\n return {\n openOnClick: true,\n enableClickSelection: false,\n linkOnPaste: true,\n autolink: true,\n protocols: [],\n defaultProtocol: \"http\",\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null\n },\n isAllowedUri: (url, ctx) => !!isAllowedUri(url, ctx.protocols),\n validate: (url) => !!url,\n shouldAutoLink: (url) => {\n const hasProtocol = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(url);\n const hasMaybeProtocol = /^[a-z][a-z0-9+.-]*:/i.test(url);\n if (hasProtocol || hasMaybeProtocol && !url.includes(\"@\")) {\n return true;\n }\n const urlWithoutUserinfo = url.includes(\"@\") ? url.split(\"@\").pop() : url;\n const hostname = urlWithoutUserinfo.split(/[/?#:]/)[0];\n if (/^\\d{1,3}(\\.\\d{1,3}){3}$/.test(hostname)) {\n return false;\n }\n if (!/\\./.test(hostname)) {\n return false;\n }\n return true;\n }\n };\n },\n addAttributes() {\n return {\n href: {\n default: null,\n parseHTML(element) {\n return element.getAttribute(\"href\");\n }\n },\n target: {\n default: this.options.HTMLAttributes.target\n },\n rel: {\n default: this.options.HTMLAttributes.rel\n },\n class: {\n default: this.options.HTMLAttributes.class\n },\n title: {\n default: null\n }\n };\n },\n parseHTML() {\n return [\n {\n tag: \"a[href]\",\n getAttrs: (dom) => {\n const href = dom.getAttribute(\"href\");\n if (!href || !this.options.isAllowedUri(href, {\n defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return false;\n }\n return null;\n }\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n if (!this.options.isAllowedUri(HTMLAttributes.href, {\n defaultValidate: (href) => !!isAllowedUri(href, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: \"\" }), 0];\n }\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n markdownTokenName: \"link\",\n parseMarkdown: (token, helpers) => {\n return helpers.applyMark(\"link\", helpers.parseInline(token.tokens || []), {\n href: token.href,\n title: token.title || null\n });\n },\n renderMarkdown: (node, h) => {\n var _a, _b, _c, _d;\n const href = (_b = (_a = node.attrs) == null ? void 0 : _a.href) != null ? _b : \"\";\n const title = (_d = (_c = node.attrs) == null ? void 0 : _c.title) != null ? _d : \"\";\n const text = h.renderChildren(node);\n return title ? `[${text}](${href} \"${title}\")` : `[${text}](${href})`;\n },\n addCommands() {\n return {\n setLink: (attributes) => ({ chain }) => {\n const { href } = attributes;\n if (!this.options.isAllowedUri(href, {\n defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return false;\n }\n return chain().setMark(this.name, attributes).setMeta(\"preventAutolink\", true).run();\n },\n toggleLink: (attributes) => ({ chain }) => {\n const { href } = attributes || {};\n if (href && !this.options.isAllowedUri(href, {\n defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return false;\n }\n return chain().toggleMark(this.name, attributes, { extendEmptyMarkRange: true }).setMeta(\"preventAutolink\", true).run();\n },\n unsetLink: () => ({ chain }) => {\n return chain().unsetMark(this.name, { extendEmptyMarkRange: true }).setMeta(\"preventAutolink\", true).run();\n }\n };\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) => {\n const foundLinks = [];\n if (text) {\n const { protocols, defaultProtocol } = this.options;\n const links = find2(text).filter(\n (item) => item.isLink && this.options.isAllowedUri(item.value, {\n defaultValidate: (href) => !!isAllowedUri(href, protocols),\n protocols,\n defaultProtocol\n })\n );\n if (links.length) {\n links.forEach((link) => {\n if (!this.options.shouldAutoLink(link.value)) {\n return;\n }\n foundLinks.push({\n text: link.value,\n data: {\n href: link.href\n },\n index: link.start\n });\n });\n }\n }\n return foundLinks;\n },\n type: this.type,\n getAttributes: (match) => {\n var _a;\n return {\n href: (_a = match.data) == null ? void 0 : _a.href\n };\n }\n })\n ];\n },\n addProseMirrorPlugins() {\n const plugins = [];\n const { protocols, defaultProtocol } = this.options;\n if (this.options.autolink) {\n plugins.push(\n autolink({\n type: this.type,\n defaultProtocol: this.options.defaultProtocol,\n validate: (url) => this.options.isAllowedUri(url, {\n defaultValidate: (href) => !!isAllowedUri(href, protocols),\n protocols,\n defaultProtocol\n }),\n shouldAutoLink: this.options.shouldAutoLink\n })\n );\n }\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n openOnClick: this.options.openOnClick === \"whenNotEditable\" ? true : this.options.openOnClick,\n enableClickSelection: this.options.enableClickSelection\n })\n );\n if (this.options.linkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n defaultProtocol: this.options.defaultProtocol,\n type: this.type,\n shouldAutoLink: this.options.shouldAutoLink\n })\n );\n }\n return plugins;\n }\n});\n\n// src/index.ts\nvar index_default = Link;\nexport {\n Link,\n index_default as default,\n isAllowedUri,\n pasteRegex\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/bullet-list/bullet-list.ts\nimport { mergeAttributes, Node, wrappingInputRule } from \"@tiptap/core\";\nvar ListItemName = \"listItem\";\nvar TextStyleName = \"textStyle\";\nvar bulletListInputRegex = /^\\s*([-+*])\\s$/;\nvar BulletList = Node.create({\n name: \"bulletList\",\n addOptions() {\n return {\n itemTypeName: \"listItem\",\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false\n };\n },\n group: \"block list\",\n content() {\n return `${this.options.itemTypeName}+`;\n },\n parseHTML() {\n return [{ tag: \"ul\" }];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"ul\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n markdownTokenName: \"list\",\n parseMarkdown: (token, helpers) => {\n if (token.type !== \"list\" || token.ordered) {\n return [];\n }\n return {\n type: \"bulletList\",\n content: token.items ? helpers.parseChildren(token.items) : []\n };\n },\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return \"\";\n }\n return h.renderChildren(node.content, \"\\n\");\n },\n markdownOptions: {\n indentsContent: true\n },\n addCommands() {\n return {\n toggleBulletList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName, this.editor.getAttributes(TextStyleName)).run();\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Shift-8\": () => this.editor.commands.toggleBulletList()\n };\n },\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: bulletListInputRegex,\n type: this.type\n });\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: bulletListInputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: () => {\n return this.editor.getAttributes(TextStyleName);\n },\n editor: this.editor\n });\n }\n return [inputRule];\n }\n});\n\n// src/item/list-item.ts\nimport { mergeAttributes as mergeAttributes2, Node as Node2, renderNestedMarkdownContent } from \"@tiptap/core\";\nfunction isSameLineOrderedListToken(token) {\n var _a, _b;\n const nestedToken = (_a = token.tokens) == null ? void 0 : _a[0];\n return Boolean(\n token.text && ((_b = token.tokens) == null ? void 0 : _b.length) === 1 && (nestedToken == null ? void 0 : nestedToken.type) === \"list\" && nestedToken.ordered && nestedToken.raw === token.text\n );\n}\nfunction parseSameLineOrderedListText(text, helpers) {\n if (helpers.tokenizeInline) {\n return helpers.parseInline(helpers.tokenizeInline(text));\n }\n return helpers.parseInline([\n {\n type: \"text\",\n raw: text,\n text\n }\n ]);\n}\nvar ListItem = Node2.create({\n name: \"listItem\",\n addOptions() {\n return {\n HTMLAttributes: {},\n bulletListTypeName: \"bulletList\",\n orderedListTypeName: \"orderedList\"\n };\n },\n content: \"paragraph block*\",\n defining: true,\n parseHTML() {\n return [\n {\n tag: \"li\"\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"li\", mergeAttributes2(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n markdownTokenName: \"list_item\",\n parseMarkdown: (token, helpers) => {\n var _a;\n if (token.type !== \"list_item\") {\n return [];\n }\n const parseBlockChildren = (_a = helpers.parseBlockChildren) != null ? _a : helpers.parseChildren;\n let content = [];\n if (token.tokens && token.tokens.length > 0) {\n if (isSameLineOrderedListToken(token)) {\n return {\n type: \"listItem\",\n content: [\n {\n type: \"paragraph\",\n content: parseSameLineOrderedListText(token.text || \"\", helpers)\n }\n ]\n };\n }\n const hasParagraphTokens = token.tokens.some((t) => t.type === \"paragraph\");\n if (hasParagraphTokens) {\n content = parseBlockChildren(token.tokens);\n } else {\n const firstToken = token.tokens[0];\n if (firstToken && firstToken.type === \"text\" && firstToken.tokens && firstToken.tokens.length > 0) {\n const inlineContent = helpers.parseInline(firstToken.tokens);\n content = [\n {\n type: \"paragraph\",\n content: inlineContent\n }\n ];\n if (token.tokens.length > 1) {\n const remainingTokens = token.tokens.slice(1);\n const additionalContent = parseBlockChildren(remainingTokens);\n content.push(...additionalContent);\n }\n } else {\n content = parseBlockChildren(token.tokens);\n }\n }\n }\n if (content.length === 0) {\n content = [\n {\n type: \"paragraph\",\n content: []\n }\n ];\n }\n return {\n type: \"listItem\",\n content\n };\n },\n renderMarkdown: (node, h, ctx) => {\n return renderNestedMarkdownContent(\n node,\n h,\n (context) => {\n var _a, _b;\n if (context.parentType === \"bulletList\") {\n return \"- \";\n }\n if (context.parentType === \"orderedList\") {\n const start = ((_b = (_a = context.meta) == null ? void 0 : _a.parentAttrs) == null ? void 0 : _b.start) || 1;\n return `${start + context.index}. `;\n }\n return \"- \";\n },\n ctx\n );\n },\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n \"Shift-Tab\": () => this.editor.commands.liftListItem(this.name)\n };\n }\n});\n\n// src/keymap/list-keymap.ts\nimport { Extension } from \"@tiptap/core\";\n\n// src/keymap/listHelpers/index.ts\nvar listHelpers_exports = {};\n__export(listHelpers_exports, {\n findListItemPos: () => findListItemPos,\n getNextListDepth: () => getNextListDepth,\n handleBackspace: () => handleBackspace,\n handleDelete: () => handleDelete,\n hasListBefore: () => hasListBefore,\n hasListItemAfter: () => hasListItemAfter,\n hasListItemBefore: () => hasListItemBefore,\n listItemHasSubList: () => listItemHasSubList,\n nextListIsDeeper: () => nextListIsDeeper,\n nextListIsHigher: () => nextListIsHigher\n});\n\n// src/keymap/listHelpers/findListItemPos.ts\nimport { getNodeType } from \"@tiptap/core\";\nvar findListItemPos = (typeOrName, state) => {\n const { $from } = state.selection;\n const nodeType = getNodeType(typeOrName, state.schema);\n let currentNode = null;\n let currentDepth = $from.depth;\n let currentPos = $from.pos;\n let targetDepth = null;\n while (currentDepth > 0 && targetDepth === null) {\n currentNode = $from.node(currentDepth);\n if (currentNode.type === nodeType) {\n targetDepth = currentDepth;\n } else {\n currentDepth -= 1;\n currentPos -= 1;\n }\n }\n if (targetDepth === null) {\n return null;\n }\n return { $pos: state.doc.resolve(currentPos), depth: targetDepth };\n};\n\n// src/keymap/listHelpers/getNextListDepth.ts\nimport { getNodeAtPosition } from \"@tiptap/core\";\nvar getNextListDepth = (typeOrName, state) => {\n const listItemPos = findListItemPos(typeOrName, state);\n if (!listItemPos) {\n return false;\n }\n const [, depth] = getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4);\n return depth;\n};\n\n// src/keymap/listHelpers/handleBackspace.ts\nimport { isAtStartOfNode, isNodeActive } from \"@tiptap/core\";\n\n// src/keymap/listHelpers/hasListBefore.ts\nvar hasListBefore = (editorState, name, parentListTypes) => {\n const { $anchor } = editorState.selection;\n const previousNodePos = Math.max(0, $anchor.pos - 2);\n const previousNode = editorState.doc.resolve(previousNodePos).node();\n if (!previousNode || !parentListTypes.includes(previousNode.type.name)) {\n return false;\n }\n return true;\n};\n\n// src/keymap/listHelpers/hasListItemBefore.ts\nvar hasListItemBefore = (typeOrName, state) => {\n var _a;\n const { $anchor } = state.selection;\n const $targetPos = state.doc.resolve($anchor.pos - 2);\n if ($targetPos.index() === 0) {\n return false;\n }\n if (((_a = $targetPos.nodeBefore) == null ? void 0 : _a.type.name) !== typeOrName) {\n return false;\n }\n return true;\n};\n\n// src/keymap/listHelpers/listItemHasSubList.ts\nimport { getNodeType as getNodeType2 } from \"@tiptap/core\";\nvar listItemHasSubList = (typeOrName, state, node) => {\n if (!node) {\n return false;\n }\n const nodeType = getNodeType2(typeOrName, state.schema);\n let hasSubList = false;\n node.descendants((child) => {\n if (child.type === nodeType) {\n hasSubList = true;\n }\n });\n return hasSubList;\n};\n\n// src/keymap/listHelpers/handleBackspace.ts\nvar handleBackspace = (editor, name, parentListTypes) => {\n if (editor.commands.undoInputRule()) {\n return true;\n }\n if (editor.state.selection.from !== editor.state.selection.to) {\n return false;\n }\n if (!isNodeActive(editor.state, name) && hasListBefore(editor.state, name, parentListTypes)) {\n const { $anchor } = editor.state.selection;\n const $listPos = editor.state.doc.resolve($anchor.before() - 1);\n const listDescendants = [];\n $listPos.node().descendants((node, pos) => {\n if (node.type.name === name) {\n listDescendants.push({ node, pos });\n }\n });\n const lastItem = listDescendants.at(-1);\n if (!lastItem) {\n return false;\n }\n const $lastItemPos = editor.state.doc.resolve($listPos.start() + lastItem.pos + 1);\n return editor.chain().cut({ from: $anchor.start() - 1, to: $anchor.end() + 1 }, $lastItemPos.end()).joinForward().run();\n }\n if (!isNodeActive(editor.state, name)) {\n return false;\n }\n if (!isAtStartOfNode(editor.state)) {\n return false;\n }\n const listItemPos = findListItemPos(name, editor.state);\n if (!listItemPos) {\n return false;\n }\n const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2);\n const prevNode = $prev.node(listItemPos.depth);\n const previousListItemHasSubList = listItemHasSubList(name, editor.state, prevNode);\n if (hasListItemBefore(name, editor.state) && !previousListItemHasSubList) {\n return editor.commands.joinItemBackward();\n }\n return editor.chain().liftListItem(name).run();\n};\n\n// src/keymap/listHelpers/handleDelete.ts\nimport { isAtEndOfNode, isNodeActive as isNodeActive2 } from \"@tiptap/core\";\n\n// src/keymap/listHelpers/nextListIsDeeper.ts\nvar nextListIsDeeper = (typeOrName, state) => {\n const listDepth = getNextListDepth(typeOrName, state);\n const listItemPos = findListItemPos(typeOrName, state);\n if (!listItemPos || !listDepth) {\n return false;\n }\n if (listDepth > listItemPos.depth) {\n return true;\n }\n return false;\n};\n\n// src/keymap/listHelpers/nextListIsHigher.ts\nvar nextListIsHigher = (typeOrName, state) => {\n const listDepth = getNextListDepth(typeOrName, state);\n const listItemPos = findListItemPos(typeOrName, state);\n if (!listItemPos || !listDepth) {\n return false;\n }\n if (listDepth < listItemPos.depth) {\n return true;\n }\n return false;\n};\n\n// src/keymap/listHelpers/handleDelete.ts\nvar handleDelete = (editor, name) => {\n if (!isNodeActive2(editor.state, name)) {\n return false;\n }\n if (!isAtEndOfNode(editor.state, name)) {\n return false;\n }\n const { selection } = editor.state;\n const { $from, $to } = selection;\n if (!selection.empty && $from.sameParent($to)) {\n return false;\n }\n if (nextListIsDeeper(name, editor.state)) {\n return editor.chain().focus(editor.state.selection.from + 4).lift(name).joinBackward().run();\n }\n if (nextListIsHigher(name, editor.state)) {\n return editor.chain().joinForward().joinBackward().run();\n }\n return editor.commands.joinItemForward();\n};\n\n// src/keymap/listHelpers/hasListItemAfter.ts\nvar hasListItemAfter = (typeOrName, state) => {\n var _a;\n const { $anchor } = state.selection;\n const $targetPos = state.doc.resolve($anchor.pos - $anchor.parentOffset - 2);\n if ($targetPos.index() === $targetPos.parent.childCount - 1) {\n return false;\n }\n if (((_a = $targetPos.nodeAfter) == null ? void 0 : _a.type.name) !== typeOrName) {\n return false;\n }\n return true;\n};\n\n// src/keymap/list-keymap.ts\nvar ListKeymap = Extension.create({\n name: \"listKeymap\",\n addOptions() {\n return {\n listTypes: [\n {\n itemName: \"listItem\",\n wrapperNames: [\"bulletList\", \"orderedList\"]\n },\n {\n itemName: \"taskItem\",\n wrapperNames: [\"taskList\"]\n }\n ]\n };\n },\n addKeyboardShortcuts() {\n return {\n Delete: ({ editor }) => {\n let handled = false;\n this.options.listTypes.forEach(({ itemName }) => {\n if (editor.state.schema.nodes[itemName] === void 0) {\n return;\n }\n if (handleDelete(editor, itemName)) {\n handled = true;\n }\n });\n return handled;\n },\n \"Mod-Delete\": ({ editor }) => {\n let handled = false;\n this.options.listTypes.forEach(({ itemName }) => {\n if (editor.state.schema.nodes[itemName] === void 0) {\n return;\n }\n if (handleDelete(editor, itemName)) {\n handled = true;\n }\n });\n return handled;\n },\n Backspace: ({ editor }) => {\n let handled = false;\n this.options.listTypes.forEach(({ itemName, wrapperNames }) => {\n if (editor.state.schema.nodes[itemName] === void 0) {\n return;\n }\n if (handleBackspace(editor, itemName, wrapperNames)) {\n handled = true;\n }\n });\n return handled;\n },\n \"Mod-Backspace\": ({ editor }) => {\n let handled = false;\n this.options.listTypes.forEach(({ itemName, wrapperNames }) => {\n if (editor.state.schema.nodes[itemName] === void 0) {\n return;\n }\n if (handleBackspace(editor, itemName, wrapperNames)) {\n handled = true;\n }\n });\n return handled;\n }\n };\n }\n});\n\n// src/kit/index.ts\nimport { Extension as Extension2 } from \"@tiptap/core\";\n\n// src/ordered-list/ordered-list.ts\nimport { mergeAttributes as mergeAttributes3, Node as Node3, wrappingInputRule as wrappingInputRule2 } from \"@tiptap/core\";\n\n// src/ordered-list/utils.ts\nvar ORDERED_LIST_ITEM_REGEX = /^(\\s*)(\\d+)\\.\\s+(.*)$/;\nvar INDENTED_LINE_REGEX = /^\\s/;\nfunction isBlockContentLine(line) {\n const trimmedLine = line.trimStart();\n return /^[-+*]\\s+/.test(trimmedLine) || /^\\d+\\.\\s+/.test(trimmedLine) || /^>\\s?/.test(trimmedLine) || /^```/.test(trimmedLine) || /^~~~/.test(trimmedLine);\n}\nfunction splitItemContent(contentLines) {\n const paragraphLines = [];\n const blockLines = [];\n let reachedBlockBoundary = false;\n contentLines.forEach((line) => {\n if (reachedBlockBoundary) {\n blockLines.push(line);\n return;\n }\n if (line.trim() === \"\") {\n reachedBlockBoundary = true;\n blockLines.push(line);\n return;\n }\n if (paragraphLines.length > 0 && isBlockContentLine(line)) {\n reachedBlockBoundary = true;\n blockLines.push(line);\n return;\n }\n paragraphLines.push(line);\n });\n return {\n paragraphLines,\n blockLines\n };\n}\nfunction collectOrderedListItems(lines) {\n const listItems = [];\n let currentLineIndex = 0;\n let consumed = 0;\n while (currentLineIndex < lines.length) {\n const line = lines[currentLineIndex];\n const match = line.match(ORDERED_LIST_ITEM_REGEX);\n if (!match) {\n break;\n }\n const [, indent, number, content] = match;\n const indentLevel = indent.length;\n const itemContentLines = [content];\n let nextLineIndex = currentLineIndex + 1;\n const itemLines = [line];\n let sawBlankLine = false;\n while (nextLineIndex < lines.length) {\n const nextLine = lines[nextLineIndex];\n const nextMatch = nextLine.match(ORDERED_LIST_ITEM_REGEX);\n if (nextMatch) {\n break;\n }\n if (nextLine.trim() === \"\") {\n itemLines.push(nextLine);\n itemContentLines.push(\"\");\n sawBlankLine = true;\n nextLineIndex += 1;\n } else if (nextLine.match(INDENTED_LINE_REGEX)) {\n itemLines.push(nextLine);\n itemContentLines.push(nextLine.slice(indentLevel + 2));\n nextLineIndex += 1;\n } else {\n if (sawBlankLine) {\n break;\n }\n itemLines.push(nextLine);\n itemContentLines.push(nextLine);\n nextLineIndex += 1;\n }\n }\n listItems.push({\n indent: indentLevel,\n number: parseInt(number, 10),\n content: itemContentLines.join(\"\\n\").trim(),\n contentLines: itemContentLines,\n raw: itemLines.join(\"\\n\")\n });\n consumed = nextLineIndex;\n currentLineIndex = nextLineIndex;\n }\n return [listItems, consumed];\n}\nfunction buildNestedStructure(items, baseIndent, lexer) {\n const result = [];\n let currentIndex = 0;\n while (currentIndex < items.length) {\n const item = items[currentIndex];\n if (item.indent === baseIndent) {\n const { paragraphLines, blockLines } = splitItemContent(item.contentLines);\n const mainText = paragraphLines.join(\"\\n\").trim();\n const tokens = [];\n if (mainText) {\n tokens.push({\n type: \"paragraph\",\n raw: mainText,\n tokens: lexer.inlineTokens(mainText)\n });\n }\n const additionalContent = blockLines.join(\"\\n\").trim();\n if (additionalContent) {\n const blockTokens = lexer.blockTokens(additionalContent);\n tokens.push(...blockTokens);\n }\n let lookAheadIndex = currentIndex + 1;\n const nestedItems = [];\n while (lookAheadIndex < items.length && items[lookAheadIndex].indent > baseIndent) {\n nestedItems.push(items[lookAheadIndex]);\n lookAheadIndex += 1;\n }\n if (nestedItems.length > 0) {\n const nextIndent = Math.min(...nestedItems.map((nestedItem) => nestedItem.indent));\n const nestedListItems = buildNestedStructure(nestedItems, nextIndent, lexer);\n tokens.push({\n type: \"list\",\n ordered: true,\n start: nestedItems[0].number,\n items: nestedListItems,\n raw: nestedItems.map((nestedItem) => nestedItem.raw).join(\"\\n\")\n });\n }\n result.push({\n type: \"list_item\",\n raw: item.raw,\n tokens\n });\n currentIndex = lookAheadIndex;\n } else {\n currentIndex += 1;\n }\n }\n return result;\n}\nfunction parseListItems(items, helpers) {\n return items.map((item) => {\n if (item.type !== \"list_item\") {\n return helpers.parseChildren([item])[0];\n }\n const content = [];\n if (item.tokens && item.tokens.length > 0) {\n item.tokens.forEach((itemToken) => {\n if (itemToken.type === \"paragraph\" || itemToken.type === \"list\" || itemToken.type === \"blockquote\" || itemToken.type === \"code\") {\n content.push(...helpers.parseChildren([itemToken]));\n } else if (itemToken.type === \"text\" && itemToken.tokens) {\n const inlineContent = helpers.parseChildren([itemToken]);\n content.push({\n type: \"paragraph\",\n content: inlineContent\n });\n } else {\n const parsed = helpers.parseChildren([itemToken]);\n if (parsed.length > 0) {\n content.push(...parsed);\n }\n }\n });\n }\n return {\n type: \"listItem\",\n content\n };\n });\n}\n\n// src/ordered-list/ordered-list.ts\nvar ListItemName2 = \"listItem\";\nvar TextStyleName2 = \"textStyle\";\nvar orderedListInputRegex = /^(\\d+)\\.\\s$/;\nvar OrderedList = Node3.create({\n name: \"orderedList\",\n addOptions() {\n return {\n itemTypeName: \"listItem\",\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false\n };\n },\n group: \"block list\",\n content() {\n return `${this.options.itemTypeName}+`;\n },\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: (element) => {\n return element.hasAttribute(\"start\") ? parseInt(element.getAttribute(\"start\") || \"\", 10) : 1;\n }\n },\n type: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"type\")\n }\n };\n },\n parseHTML() {\n return [\n {\n tag: \"ol\"\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes;\n return start === 1 ? [\"ol\", mergeAttributes3(this.options.HTMLAttributes, attributesWithoutStart), 0] : [\"ol\", mergeAttributes3(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n markdownTokenName: \"list\",\n parseMarkdown: (token, helpers) => {\n if (token.type !== \"list\" || !token.ordered) {\n return [];\n }\n const startValue = token.start || 1;\n const content = token.items ? parseListItems(token.items, helpers) : [];\n if (startValue !== 1) {\n return {\n type: \"orderedList\",\n attrs: { start: startValue },\n content\n };\n }\n return {\n type: \"orderedList\",\n content\n };\n },\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return \"\";\n }\n return h.renderChildren(node.content, \"\\n\");\n },\n markdownTokenizer: {\n name: \"orderedList\",\n level: \"block\",\n start: (src) => {\n const match = src.match(/^(\\s*)(\\d+)\\.\\s+/);\n const index = match == null ? void 0 : match.index;\n return index !== void 0 ? index : -1;\n },\n tokenize: (src, _tokens, lexer) => {\n var _a;\n const lines = src.split(\"\\n\");\n const [listItems, consumed] = collectOrderedListItems(lines);\n if (listItems.length === 0) {\n return void 0;\n }\n const items = buildNestedStructure(listItems, 0, lexer);\n if (items.length === 0) {\n return void 0;\n }\n const startValue = ((_a = listItems[0]) == null ? void 0 : _a.number) || 1;\n return {\n type: \"list\",\n ordered: true,\n start: startValue,\n items,\n raw: lines.slice(0, consumed).join(\"\\n\")\n };\n }\n },\n markdownOptions: {\n indentsContent: true\n },\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName2, this.editor.getAttributes(TextStyleName2)).run();\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Shift-7\": () => this.editor.commands.toggleOrderedList()\n };\n },\n addInputRules() {\n let inputRule = wrappingInputRule2({\n find: orderedListInputRegex,\n type: this.type,\n getAttributes: (match) => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1]\n });\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule2({\n find: orderedListInputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: (match) => ({ start: +match[1], ...this.editor.getAttributes(TextStyleName2) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor\n });\n }\n return [inputRule];\n }\n});\n\n// src/task-item/task-item.ts\nimport {\n getRenderedAttributes,\n mergeAttributes as mergeAttributes4,\n Node as Node4,\n renderNestedMarkdownContent as renderNestedMarkdownContent2,\n wrappingInputRule as wrappingInputRule3\n} from \"@tiptap/core\";\nvar inputRegex = /^\\s*(\\[([( |x])?\\])\\s$/;\nvar TaskItem = Node4.create({\n name: \"taskItem\",\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n taskListTypeName: \"taskList\",\n a11y: void 0\n };\n },\n content() {\n return this.options.nested ? \"paragraph block*\" : \"paragraph+\";\n },\n defining: true,\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: (element) => {\n const dataChecked = element.getAttribute(\"data-checked\");\n return dataChecked === \"\" || dataChecked === \"true\";\n },\n renderHTML: (attributes) => ({\n \"data-checked\": attributes.checked\n })\n }\n };\n },\n parseHTML() {\n return [\n {\n tag: `li[data-type=\"${this.name}\"]`,\n priority: 51\n }\n ];\n },\n renderHTML({ node, HTMLAttributes }) {\n return [\n \"li\",\n mergeAttributes4(this.options.HTMLAttributes, HTMLAttributes, {\n \"data-type\": this.name\n }),\n [\n \"label\",\n [\n \"input\",\n {\n type: \"checkbox\",\n checked: node.attrs.checked ? \"checked\" : null\n }\n ],\n [\"span\"]\n ],\n [\"div\", 0]\n ];\n },\n parseMarkdown: (token, h) => {\n const content = [];\n if (token.tokens && token.tokens.length > 0) {\n content.push(h.createNode(\"paragraph\", {}, h.parseInline(token.tokens)));\n } else if (token.text) {\n content.push(h.createNode(\"paragraph\", {}, [h.createNode(\"text\", { text: token.text })]));\n } else {\n content.push(h.createNode(\"paragraph\", {}, []));\n }\n if (token.nestedTokens && token.nestedTokens.length > 0) {\n const nestedContent = h.parseChildren(token.nestedTokens);\n content.push(...nestedContent);\n }\n return h.createNode(\"taskItem\", { checked: token.checked || false }, content);\n },\n renderMarkdown: (node, h) => {\n var _a;\n const checkedChar = ((_a = node.attrs) == null ? void 0 : _a.checked) ? \"x\" : \" \";\n const prefix = `- [${checkedChar}] `;\n return renderNestedMarkdownContent2(node, h, prefix);\n },\n addKeyboardShortcuts() {\n const shortcuts = {\n Enter: () => this.editor.commands.splitListItem(this.name),\n \"Shift-Tab\": () => this.editor.commands.liftListItem(this.name)\n };\n if (!this.options.nested) {\n return shortcuts;\n }\n return {\n ...shortcuts,\n Tab: () => this.editor.commands.sinkListItem(this.name)\n };\n },\n addNodeView() {\n return ({ node, HTMLAttributes, getPos, editor }) => {\n const listItem = document.createElement(\"li\");\n const checkboxWrapper = document.createElement(\"label\");\n const checkboxStyler = document.createElement(\"span\");\n const checkbox = document.createElement(\"input\");\n const content = document.createElement(\"div\");\n const updateA11Y = (currentNode) => {\n var _a, _b;\n checkbox.ariaLabel = ((_b = (_a = this.options.a11y) == null ? void 0 : _a.checkboxLabel) == null ? void 0 : _b.call(_a, currentNode, checkbox.checked)) || `Task item checkbox for ${currentNode.textContent || \"empty task item\"}`;\n };\n updateA11Y(node);\n checkboxWrapper.contentEditable = \"false\";\n checkbox.type = \"checkbox\";\n checkbox.addEventListener(\"mousedown\", (event) => event.preventDefault());\n checkbox.addEventListener(\"change\", (event) => {\n if (!editor.isEditable && !this.options.onReadOnlyChecked) {\n checkbox.checked = !checkbox.checked;\n return;\n }\n const { checked } = event.target;\n if (editor.isEditable && typeof getPos === \"function\") {\n editor.chain().focus(void 0, { scrollIntoView: false }).command(({ tr }) => {\n const position = getPos();\n if (typeof position !== \"number\") {\n return false;\n }\n const currentNode = tr.doc.nodeAt(position);\n tr.setNodeMarkup(position, void 0, {\n ...currentNode == null ? void 0 : currentNode.attrs,\n checked\n });\n return true;\n }).run();\n }\n if (!editor.isEditable && this.options.onReadOnlyChecked) {\n if (!this.options.onReadOnlyChecked(node, checked)) {\n checkbox.checked = !checkbox.checked;\n }\n }\n });\n Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value);\n });\n listItem.dataset.checked = node.attrs.checked;\n checkbox.checked = node.attrs.checked;\n checkboxWrapper.append(checkbox, checkboxStyler);\n listItem.append(checkboxWrapper, content);\n Object.entries(HTMLAttributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value);\n });\n let prevRenderedAttributeKeys = new Set(Object.keys(HTMLAttributes));\n return {\n dom: listItem,\n contentDOM: content,\n update: (updatedNode) => {\n if (updatedNode.type !== this.type) {\n return false;\n }\n listItem.dataset.checked = updatedNode.attrs.checked;\n checkbox.checked = updatedNode.attrs.checked;\n updateA11Y(updatedNode);\n const extensionAttributes = editor.extensionManager.attributes;\n const newHTMLAttributes = getRenderedAttributes(updatedNode, extensionAttributes);\n const newKeys = new Set(Object.keys(newHTMLAttributes));\n const staticAttrs = this.options.HTMLAttributes;\n prevRenderedAttributeKeys.forEach((key) => {\n if (!newKeys.has(key)) {\n if (key in staticAttrs) {\n listItem.setAttribute(key, staticAttrs[key]);\n } else {\n listItem.removeAttribute(key);\n }\n }\n });\n Object.entries(newHTMLAttributes).forEach(([key, value]) => {\n if (value === null || value === void 0) {\n if (key in staticAttrs) {\n listItem.setAttribute(key, staticAttrs[key]);\n } else {\n listItem.removeAttribute(key);\n }\n } else {\n listItem.setAttribute(key, value);\n }\n });\n prevRenderedAttributeKeys = newKeys;\n return true;\n }\n };\n };\n },\n addInputRules() {\n return [\n wrappingInputRule3({\n find: inputRegex,\n type: this.type,\n getAttributes: (match) => ({\n checked: match[match.length - 1] === \"x\"\n })\n })\n ];\n }\n});\n\n// src/task-list/task-list.ts\nimport { mergeAttributes as mergeAttributes5, Node as Node5, parseIndentedBlocks } from \"@tiptap/core\";\nvar TaskList = Node5.create({\n name: \"taskList\",\n addOptions() {\n return {\n itemTypeName: \"taskItem\",\n HTMLAttributes: {}\n };\n },\n group: \"block list\",\n content() {\n return `${this.options.itemTypeName}+`;\n },\n parseHTML() {\n return [\n {\n tag: `ul[data-type=\"${this.name}\"]`,\n priority: 51\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"ul\", mergeAttributes5(this.options.HTMLAttributes, HTMLAttributes, { \"data-type\": this.name }), 0];\n },\n parseMarkdown: (token, h) => {\n return h.createNode(\"taskList\", {}, h.parseChildren(token.items || []));\n },\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return \"\";\n }\n return h.renderChildren(node.content, \"\\n\");\n },\n markdownTokenizer: {\n name: \"taskList\",\n level: \"block\",\n start(src) {\n var _a;\n const index = (_a = src.match(/^\\s*[-+*]\\s+\\[([ xX])\\]\\s+/)) == null ? void 0 : _a.index;\n return index !== void 0 ? index : -1;\n },\n tokenize(src, tokens, lexer) {\n const parseTaskListContent = (content) => {\n const nestedResult = parseIndentedBlocks(\n content,\n {\n itemPattern: /^(\\s*)([-+*])\\s+\\[([ xX])\\]\\s+(.*)$/,\n extractItemData: (match) => ({\n indentLevel: match[1].length,\n mainContent: match[4],\n checked: match[3].toLowerCase() === \"x\"\n }),\n createToken: (data, nestedTokens) => ({\n type: \"taskItem\",\n raw: \"\",\n mainContent: data.mainContent,\n indentLevel: data.indentLevel,\n checked: data.checked,\n text: data.mainContent,\n tokens: lexer.inlineTokens(data.mainContent),\n nestedTokens\n }),\n // Allow recursive nesting\n customNestedParser: parseTaskListContent\n },\n lexer\n );\n if (nestedResult) {\n return [\n {\n type: \"taskList\",\n raw: nestedResult.raw,\n items: nestedResult.items\n }\n ];\n }\n return lexer.blockTokens(content);\n };\n const result = parseIndentedBlocks(\n src,\n {\n itemPattern: /^(\\s*)([-+*])\\s+\\[([ xX])\\]\\s+(.*)$/,\n extractItemData: (match) => ({\n indentLevel: match[1].length,\n mainContent: match[4],\n checked: match[3].toLowerCase() === \"x\"\n }),\n createToken: (data, nestedTokens) => ({\n type: \"taskItem\",\n raw: \"\",\n mainContent: data.mainContent,\n indentLevel: data.indentLevel,\n checked: data.checked,\n text: data.mainContent,\n tokens: lexer.inlineTokens(data.mainContent),\n nestedTokens\n }),\n // Use the recursive parser for nested content\n customNestedParser: parseTaskListContent\n },\n lexer\n );\n if (!result) {\n return void 0;\n }\n return {\n type: \"taskList\",\n raw: result.raw,\n items: result.items\n };\n }\n },\n markdownOptions: {\n indentsContent: true\n },\n addCommands() {\n return {\n toggleTaskList: () => ({ commands }) => {\n return commands.toggleList(this.name, this.options.itemTypeName);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Shift-9\": () => this.editor.commands.toggleTaskList()\n };\n }\n});\n\n// src/kit/index.ts\nvar ListKit = Extension2.create({\n name: \"listKit\",\n addExtensions() {\n const extensions = [];\n if (this.options.bulletList !== false) {\n extensions.push(BulletList.configure(this.options.bulletList));\n }\n if (this.options.listItem !== false) {\n extensions.push(ListItem.configure(this.options.listItem));\n }\n if (this.options.listKeymap !== false) {\n extensions.push(ListKeymap.configure(this.options.listKeymap));\n }\n if (this.options.orderedList !== false) {\n extensions.push(OrderedList.configure(this.options.orderedList));\n }\n if (this.options.taskItem !== false) {\n extensions.push(TaskItem.configure(this.options.taskItem));\n }\n if (this.options.taskList !== false) {\n extensions.push(TaskList.configure(this.options.taskList));\n }\n return extensions;\n }\n});\nexport {\n BulletList,\n ListItem,\n ListKeymap,\n ListKit,\n OrderedList,\n TaskItem,\n TaskList,\n bulletListInputRegex,\n inputRegex,\n listHelpers_exports as listHelpers,\n orderedListInputRegex\n};\n//# sourceMappingURL=index.js.map","// src/paragraph.ts\nimport { mergeAttributes, Node } from \"@tiptap/core\";\nvar EMPTY_PARAGRAPH_MARKDOWN = \"&nbsp;\";\nvar NBSP_CHAR = \"\\xA0\";\nvar Paragraph = Node.create({\n name: \"paragraph\",\n priority: 1e3,\n addOptions() {\n return {\n HTMLAttributes: {}\n };\n },\n group: \"block\",\n content: \"inline*\",\n parseHTML() {\n return [{ tag: \"p\" }];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"p\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n parseMarkdown: (token, helpers) => {\n const tokens = token.tokens || [];\n if (tokens.length === 1 && tokens[0].type === \"image\") {\n return helpers.parseChildren([tokens[0]]);\n }\n const content = helpers.parseInline(tokens);\n const hasExplicitEmptyParagraphMarker = tokens.length === 1 && tokens[0].type === \"text\" && (tokens[0].raw === EMPTY_PARAGRAPH_MARKDOWN || tokens[0].text === EMPTY_PARAGRAPH_MARKDOWN || tokens[0].raw === NBSP_CHAR || tokens[0].text === NBSP_CHAR);\n if (hasExplicitEmptyParagraphMarker && content.length === 1 && content[0].type === \"text\" && (content[0].text === EMPTY_PARAGRAPH_MARKDOWN || content[0].text === NBSP_CHAR)) {\n return helpers.createNode(\"paragraph\", void 0, []);\n }\n return helpers.createNode(\"paragraph\", void 0, content);\n },\n renderMarkdown: (node, h, ctx) => {\n var _a, _b;\n if (!node) {\n return \"\";\n }\n const content = Array.isArray(node.content) ? node.content : [];\n if (content.length === 0) {\n const previousContent = Array.isArray((_a = ctx == null ? void 0 : ctx.previousNode) == null ? void 0 : _a.content) ? ctx.previousNode.content : [];\n const previousNodeIsEmptyParagraph = ((_b = ctx == null ? void 0 : ctx.previousNode) == null ? void 0 : _b.type) === \"paragraph\" && previousContent.length === 0;\n return previousNodeIsEmptyParagraph ? EMPTY_PARAGRAPH_MARKDOWN : \"\";\n }\n return h.renderChildren(content);\n },\n addCommands() {\n return {\n setParagraph: () => ({ commands }) => {\n return commands.setNode(this.name);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Alt-0\": () => this.editor.commands.setParagraph()\n };\n }\n});\n\n// src/index.ts\nvar index_default = Paragraph;\nexport {\n Paragraph,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/strike.ts\nimport { Mark, markInputRule, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nvar inputRegex = /(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))$/;\nvar pasteRegex = /(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))/g;\nvar Strike = Mark.create({\n name: \"strike\",\n addOptions() {\n return {\n HTMLAttributes: {}\n };\n },\n parseHTML() {\n return [\n {\n tag: \"s\"\n },\n {\n tag: \"del\"\n },\n {\n tag: \"strike\"\n },\n {\n style: \"text-decoration\",\n consuming: false,\n getAttrs: (style) => style.includes(\"line-through\") ? {} : false\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"s\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n markdownTokenName: \"del\",\n parseMarkdown: (token, helpers) => {\n return helpers.applyMark(\"strike\", helpers.parseInline(token.tokens || []));\n },\n renderMarkdown: (node, h) => {\n return `~~${h.renderChildren(node)}~~`;\n },\n addCommands() {\n return {\n setStrike: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleStrike: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetStrike: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Shift-s\": () => this.editor.commands.toggleStrike()\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: inputRegex,\n type: this.type\n })\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: pasteRegex,\n type: this.type\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = Strike;\nexport {\n Strike,\n index_default as default,\n inputRegex,\n pasteRegex\n};\n//# sourceMappingURL=index.js.map","// src/text.ts\nimport { Node } from \"@tiptap/core\";\nvar Text = Node.create({\n name: \"text\",\n group: \"inline\",\n parseMarkdown: (token) => {\n return {\n type: \"text\",\n text: token.text || \"\"\n };\n },\n renderMarkdown: (node) => node.text || \"\"\n});\n\n// src/index.ts\nvar index_default = Text;\nexport {\n Text,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/underline.ts\nimport { Mark, mergeAttributes } from \"@tiptap/core\";\nvar Underline = Mark.create({\n name: \"underline\",\n addOptions() {\n return {\n HTMLAttributes: {}\n };\n },\n parseHTML() {\n return [\n {\n tag: \"u\"\n },\n {\n style: \"text-decoration\",\n consuming: false,\n getAttrs: (style) => style.includes(\"underline\") ? {} : false\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\"u\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n parseMarkdown(token, helpers) {\n return helpers.applyMark(this.name || \"underline\", helpers.parseInline(token.tokens || []));\n },\n renderMarkdown(node, helpers) {\n return `++${helpers.renderChildren(node)}++`;\n },\n markdownTokenizer: {\n name: \"underline\",\n level: \"inline\",\n start(src) {\n return src.indexOf(\"++\");\n },\n tokenize(src, _tokens, lexer) {\n const rule = /^(\\+\\+)([\\s\\S]+?)(\\+\\+)/;\n const match = rule.exec(src);\n if (!match) {\n return void 0;\n }\n const innerContent = match[2].trim();\n return {\n type: \"underline\",\n raw: match[0],\n text: innerContent,\n tokens: lexer.inlineTokens(innerContent)\n };\n }\n },\n addCommands() {\n return {\n setUnderline: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleUnderline: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetUnderline: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-u\": () => this.editor.commands.toggleUnderline(),\n \"Mod-U\": () => this.editor.commands.toggleUnderline()\n };\n }\n});\n\n// src/index.ts\nvar index_default = Underline;\nexport {\n Underline,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/character-count/character-count.ts\nimport { Extension } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nvar CharacterCount = Extension.create({\n name: \"characterCount\",\n addOptions() {\n return {\n limit: null,\n autoTrim: true,\n mode: \"textSize\",\n textCounter: (text) => text.length,\n wordCounter: (text) => text.split(\" \").filter((word) => word !== \"\").length\n };\n },\n addStorage() {\n return {\n characters: () => 0,\n words: () => 0\n };\n },\n onBeforeCreate() {\n this.storage.characters = (options) => {\n const node = (options == null ? void 0 : options.node) || this.editor.state.doc;\n const mode = (options == null ? void 0 : options.mode) || this.options.mode;\n if (mode === \"textSize\") {\n const text = node.textBetween(0, node.content.size, void 0, \" \");\n return this.options.textCounter(text);\n }\n return node.nodeSize;\n };\n this.storage.words = (options) => {\n const node = (options == null ? void 0 : options.node) || this.editor.state.doc;\n const text = node.textBetween(0, node.content.size, \" \", \" \");\n return this.options.wordCounter(text);\n };\n },\n addProseMirrorPlugins() {\n let initialEvaluationDone = false;\n return [\n new Plugin({\n key: new PluginKey(\"characterCount\"),\n appendTransaction: (transactions, oldState, newState) => {\n if (initialEvaluationDone) {\n return;\n }\n const limit = this.options.limit;\n const autoTrim = this.options.autoTrim;\n if (limit === null || limit === void 0 || limit === 0 || autoTrim === false) {\n initialEvaluationDone = true;\n return;\n }\n const initialContentSize = this.storage.characters({ node: newState.doc });\n if (initialContentSize > limit) {\n const over = initialContentSize - limit;\n const from = 0;\n const to = over;\n console.warn(\n `[CharacterCount] Initial content exceeded limit of ${limit} characters. Content was automatically trimmed.`\n );\n const tr = newState.tr.deleteRange(from, to);\n initialEvaluationDone = true;\n return tr;\n }\n initialEvaluationDone = true;\n },\n filterTransaction: (transaction, state) => {\n const limit = this.options.limit;\n if (!transaction.docChanged || limit === 0 || limit === null || limit === void 0) {\n return true;\n }\n const oldSize = this.storage.characters({ node: state.doc });\n const newSize = this.storage.characters({ node: transaction.doc });\n if (newSize <= limit) {\n return true;\n }\n if (oldSize > limit && newSize > limit && newSize <= oldSize) {\n return true;\n }\n if (oldSize > limit && newSize > limit && newSize > oldSize) {\n return false;\n }\n const isPaste = transaction.getMeta(\"paste\");\n if (!isPaste) {\n return false;\n }\n const pos = transaction.selection.$head.pos;\n const over = newSize - limit;\n const from = pos - over;\n const to = pos;\n transaction.deleteRange(from, to);\n const updatedSize = this.storage.characters({ node: transaction.doc });\n if (updatedSize > limit) {\n return false;\n }\n return true;\n }\n })\n ];\n }\n});\n\n// src/drop-cursor/drop-cursor.ts\nimport { Extension as Extension2 } from \"@tiptap/core\";\nimport { dropCursor } from \"@tiptap/pm/dropcursor\";\nvar Dropcursor = Extension2.create({\n name: \"dropCursor\",\n addOptions() {\n return {\n color: \"currentColor\",\n width: 1,\n class: void 0\n };\n },\n addProseMirrorPlugins() {\n return [dropCursor(this.options)];\n }\n});\n\n// src/focus/focus.ts\nimport { Extension as Extension3 } from \"@tiptap/core\";\nimport { Plugin as Plugin2, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nvar Focus = Extension3.create({\n name: \"focus\",\n addOptions() {\n return {\n className: \"has-focus\",\n mode: \"all\"\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin2({\n key: new PluginKey2(\"focus\"),\n props: {\n decorations: ({ doc, selection }) => {\n const { isEditable, isFocused } = this.editor;\n const { anchor } = selection;\n const decorations = [];\n if (!isEditable || !isFocused) {\n return DecorationSet.create(doc, []);\n }\n let maxLevels = 0;\n if (this.options.mode === \"deepest\") {\n doc.descendants((node, pos) => {\n if (node.isText) {\n return;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n maxLevels += 1;\n });\n }\n let currentLevel = 0;\n doc.descendants((node, pos) => {\n if (node.isText) {\n return false;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n currentLevel += 1;\n const outOfScope = this.options.mode === \"deepest\" && maxLevels - currentLevel > 0 || this.options.mode === \"shallowest\" && currentLevel > 1;\n if (outOfScope) {\n return this.options.mode === \"deepest\";\n }\n decorations.push(\n Decoration.node(pos, pos + node.nodeSize, {\n class: this.options.className\n })\n );\n });\n return DecorationSet.create(doc, decorations);\n }\n }\n })\n ];\n }\n});\n\n// src/gap-cursor/gap-cursor.ts\nimport { callOrReturn, Extension as Extension4, getExtensionField } from \"@tiptap/core\";\nimport { gapCursor } from \"@tiptap/pm/gapcursor\";\nvar Gapcursor = Extension4.create({\n name: \"gapCursor\",\n addProseMirrorPlugins() {\n return [gapCursor()];\n },\n extendNodeSchema(extension) {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n return {\n allowGapCursor: (_a = callOrReturn(getExtensionField(extension, \"allowGapCursor\", context))) != null ? _a : null\n };\n }\n});\n\n// src/placeholder/placeholder.ts\nimport { Extension as Extension5, isNodeEmpty } from \"@tiptap/core\";\nimport { Plugin as Plugin3, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nimport { Decoration as Decoration2, DecorationSet as DecorationSet2 } from \"@tiptap/pm/view\";\nvar DEFAULT_DATA_ATTRIBUTE = \"placeholder\";\nfunction preparePlaceholderAttribute(attr) {\n return attr.replace(/\\s+/g, \"-\").replace(/[^a-zA-Z0-9-]/g, \"\").replace(/^[0-9-]+/, \"\").replace(/^-+/, \"\").toLowerCase();\n}\nvar Placeholder = Extension5.create({\n name: \"placeholder\",\n addOptions() {\n return {\n emptyEditorClass: \"is-editor-empty\",\n emptyNodeClass: \"is-empty\",\n dataAttribute: DEFAULT_DATA_ATTRIBUTE,\n placeholder: \"Write something \\u2026\",\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n includeChildren: false\n };\n },\n addProseMirrorPlugins() {\n const dataAttribute = this.options.dataAttribute ? `data-${preparePlaceholderAttribute(this.options.dataAttribute)}` : `data-${DEFAULT_DATA_ATTRIBUTE}`;\n return [\n new Plugin3({\n key: new PluginKey3(\"placeholder\"),\n props: {\n decorations: ({ doc, selection }) => {\n const active = this.editor.isEditable || !this.options.showOnlyWhenEditable;\n const { anchor } = selection;\n const decorations = [];\n if (!active) {\n return null;\n }\n const isEmptyDoc = this.editor.isEmpty;\n doc.descendants((node, pos) => {\n const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;\n const isEmpty = !node.isLeaf && isNodeEmpty(node);\n if (!node.type.isTextblock) {\n return this.options.includeChildren;\n }\n if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty) {\n const classes = [this.options.emptyNodeClass];\n if (isEmptyDoc) {\n classes.push(this.options.emptyEditorClass);\n }\n const decoration = Decoration2.node(pos, pos + node.nodeSize, {\n class: classes.join(\" \"),\n [dataAttribute]: typeof this.options.placeholder === \"function\" ? this.options.placeholder({\n editor: this.editor,\n node,\n pos,\n hasAnchor\n }) : this.options.placeholder\n });\n decorations.push(decoration);\n }\n return this.options.includeChildren;\n });\n return DecorationSet2.create(doc, decorations);\n }\n }\n })\n ];\n }\n});\n\n// src/selection/selection.ts\nimport { Extension as Extension6, isNodeSelection } from \"@tiptap/core\";\nimport { Plugin as Plugin4, PluginKey as PluginKey4 } from \"@tiptap/pm/state\";\nimport { Decoration as Decoration3, DecorationSet as DecorationSet3 } from \"@tiptap/pm/view\";\nvar Selection = Extension6.create({\n name: \"selection\",\n addOptions() {\n return {\n className: \"selection\"\n };\n },\n addProseMirrorPlugins() {\n const { editor, options } = this;\n return [\n new Plugin4({\n key: new PluginKey4(\"selection\"),\n props: {\n decorations(state) {\n if (state.selection.empty || editor.isFocused || !editor.isEditable || isNodeSelection(state.selection) || editor.view.dragging) {\n return null;\n }\n return DecorationSet3.create(state.doc, [\n Decoration3.inline(state.selection.from, state.selection.to, {\n class: options.className\n })\n ]);\n }\n }\n })\n ];\n }\n});\n\n// src/trailing-node/trailing-node.ts\nimport { Extension as Extension7 } from \"@tiptap/core\";\nimport { Plugin as Plugin5, PluginKey as PluginKey5 } from \"@tiptap/pm/state\";\nvar skipTrailingNodeMeta = \"skipTrailingNode\";\nfunction nodeEqualsType({ types, node }) {\n return node && Array.isArray(types) && types.includes(node.type) || (node == null ? void 0 : node.type) === types;\n}\nvar TrailingNode = Extension7.create({\n name: \"trailingNode\",\n addOptions() {\n return {\n node: void 0,\n notAfter: []\n };\n },\n addProseMirrorPlugins() {\n var _a;\n const plugin = new PluginKey5(this.name);\n const defaultNode = this.options.node || ((_a = this.editor.schema.topNodeType.contentMatch.defaultType) == null ? void 0 : _a.name) || \"paragraph\";\n const disabledNodes = Object.entries(this.editor.schema.nodes).map(([, value]) => value).filter((node) => (this.options.notAfter || []).concat(defaultNode).includes(node.name));\n return [\n new Plugin5({\n key: plugin,\n appendTransaction: (transactions, __, state) => {\n const { doc, tr, schema } = state;\n const shouldInsertNodeAtEnd = plugin.getState(state);\n const endPosition = doc.content.size;\n const type = schema.nodes[defaultNode];\n if (transactions.some((transaction) => transaction.getMeta(skipTrailingNodeMeta))) {\n return;\n }\n if (!shouldInsertNodeAtEnd) {\n return;\n }\n return tr.insert(endPosition, type.create());\n },\n state: {\n init: (_, state) => {\n const lastNode = state.tr.doc.lastChild;\n return !nodeEqualsType({ node: lastNode, types: disabledNodes });\n },\n apply: (tr, value) => {\n if (!tr.docChanged) {\n return value;\n }\n if (tr.getMeta(\"__uniqueIDTransaction\")) {\n return value;\n }\n const lastNode = tr.doc.lastChild;\n return !nodeEqualsType({ node: lastNode, types: disabledNodes });\n }\n }\n })\n ];\n }\n});\n\n// src/undo-redo/undo-redo.ts\nimport { Extension as Extension8 } from \"@tiptap/core\";\nimport { history, redo, undo } from \"@tiptap/pm/history\";\nvar UndoRedo = Extension8.create({\n name: \"undoRedo\",\n addOptions() {\n return {\n depth: 100,\n newGroupDelay: 500\n };\n },\n addCommands() {\n return {\n undo: () => ({ state, dispatch }) => {\n return undo(state, dispatch);\n },\n redo: () => ({ state, dispatch }) => {\n return redo(state, dispatch);\n }\n };\n },\n addProseMirrorPlugins() {\n return [history(this.options)];\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-z\": () => this.editor.commands.undo(),\n \"Shift-Mod-z\": () => this.editor.commands.redo(),\n \"Mod-y\": () => this.editor.commands.redo(),\n // Russian keyboard layouts\n \"Mod-\\u044F\": () => this.editor.commands.undo(),\n \"Shift-Mod-\\u044F\": () => this.editor.commands.redo()\n };\n }\n});\nexport {\n CharacterCount,\n Dropcursor,\n Focus,\n Gapcursor,\n Placeholder,\n Selection,\n TrailingNode,\n UndoRedo,\n preparePlaceholderAttribute,\n skipTrailingNodeMeta\n};\n//# sourceMappingURL=index.js.map","// src/starter-kit.ts\nimport { Extension } from \"@tiptap/core\";\nimport { Blockquote } from \"@tiptap/extension-blockquote\";\nimport { Bold } from \"@tiptap/extension-bold\";\nimport { Code } from \"@tiptap/extension-code\";\nimport { CodeBlock } from \"@tiptap/extension-code-block\";\nimport { Document } from \"@tiptap/extension-document\";\nimport { HardBreak } from \"@tiptap/extension-hard-break\";\nimport { Heading } from \"@tiptap/extension-heading\";\nimport { HorizontalRule } from \"@tiptap/extension-horizontal-rule\";\nimport { Italic } from \"@tiptap/extension-italic\";\nimport { Link } from \"@tiptap/extension-link\";\nimport { BulletList, ListItem, ListKeymap, OrderedList } from \"@tiptap/extension-list\";\nimport { Paragraph } from \"@tiptap/extension-paragraph\";\nimport { Strike } from \"@tiptap/extension-strike\";\nimport { Text } from \"@tiptap/extension-text\";\nimport { Underline } from \"@tiptap/extension-underline\";\nimport { Dropcursor, Gapcursor, TrailingNode, UndoRedo } from \"@tiptap/extensions\";\nvar StarterKit = Extension.create({\n name: \"starterKit\",\n addExtensions() {\n var _a, _b, _c, _d;\n const extensions = [];\n if (this.options.bold !== false) {\n extensions.push(Bold.configure(this.options.bold));\n }\n if (this.options.blockquote !== false) {\n extensions.push(Blockquote.configure(this.options.blockquote));\n }\n if (this.options.bulletList !== false) {\n extensions.push(BulletList.configure(this.options.bulletList));\n }\n if (this.options.code !== false) {\n extensions.push(Code.configure(this.options.code));\n }\n if (this.options.codeBlock !== false) {\n extensions.push(CodeBlock.configure(this.options.codeBlock));\n }\n if (this.options.document !== false) {\n extensions.push(Document.configure(this.options.document));\n }\n if (this.options.dropcursor !== false) {\n extensions.push(Dropcursor.configure(this.options.dropcursor));\n }\n if (this.options.gapcursor !== false) {\n extensions.push(Gapcursor.configure(this.options.gapcursor));\n }\n if (this.options.hardBreak !== false) {\n extensions.push(HardBreak.configure(this.options.hardBreak));\n }\n if (this.options.heading !== false) {\n extensions.push(Heading.configure(this.options.heading));\n }\n if (this.options.undoRedo !== false) {\n extensions.push(UndoRedo.configure(this.options.undoRedo));\n }\n if (this.options.horizontalRule !== false) {\n extensions.push(HorizontalRule.configure(this.options.horizontalRule));\n }\n if (this.options.italic !== false) {\n extensions.push(Italic.configure(this.options.italic));\n }\n if (this.options.listItem !== false) {\n extensions.push(ListItem.configure(this.options.listItem));\n }\n if (this.options.listKeymap !== false) {\n extensions.push(ListKeymap.configure((_a = this.options) == null ? void 0 : _a.listKeymap));\n }\n if (this.options.link !== false) {\n extensions.push(Link.configure((_b = this.options) == null ? void 0 : _b.link));\n }\n if (this.options.orderedList !== false) {\n extensions.push(OrderedList.configure(this.options.orderedList));\n }\n if (this.options.paragraph !== false) {\n extensions.push(Paragraph.configure(this.options.paragraph));\n }\n if (this.options.strike !== false) {\n extensions.push(Strike.configure(this.options.strike));\n }\n if (this.options.text !== false) {\n extensions.push(Text.configure(this.options.text));\n }\n if (this.options.underline !== false) {\n extensions.push(Underline.configure((_c = this.options) == null ? void 0 : _c.underline));\n }\n if (this.options.trailingNode !== false) {\n extensions.push(TrailingNode.configure((_d = this.options) == null ? void 0 : _d.trailingNode));\n }\n return extensions;\n }\n});\n\n// src/index.ts\nvar index_default = StarterKit;\nexport {\n StarterKit,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/link.ts\nimport { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { find as find2, registerCustomProtocol, reset } from \"linkifyjs\";\n\n// src/helpers/autolink.ts\nimport { combineTransactionSteps, findChildrenInRange, getChangedRanges, getMarksBetween } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { tokenize } from \"linkifyjs\";\n\n// src/helpers/whitespace.ts\nvar UNICODE_WHITESPACE_PATTERN = \"[\\0- \\xA0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]\";\nvar UNICODE_WHITESPACE_REGEX = new RegExp(UNICODE_WHITESPACE_PATTERN);\nvar UNICODE_WHITESPACE_REGEX_END = new RegExp(`${UNICODE_WHITESPACE_PATTERN}$`);\nvar UNICODE_WHITESPACE_REGEX_GLOBAL = new RegExp(UNICODE_WHITESPACE_PATTERN, \"g\");\n\n// src/helpers/autolink.ts\nfunction isValidLinkStructure(tokens) {\n if (tokens.length === 1) {\n return tokens[0].isLink;\n }\n if (tokens.length === 3 && tokens[1].isLink) {\n return [\"()\", \"[]\"].includes(tokens[0].value + tokens[2].value);\n }\n return false;\n}\nfunction autolink(options) {\n return new Plugin({\n key: new PluginKey(\"autolink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n const preventAutolink = transactions.some((transaction) => transaction.getMeta(\"preventAutolink\"));\n if (!docChanges || preventAutolink) {\n return;\n }\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [...transactions]);\n const changes = getChangedRanges(transform);\n changes.forEach(({ newRange }) => {\n const nodesInChangedRanges = findChildrenInRange(newState.doc, newRange, (node) => node.isTextblock);\n let textBlock;\n let textBeforeWhitespace;\n if (nodesInChangedRanges.length > 1) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n void 0,\n \" \"\n );\n } else if (nodesInChangedRanges.length) {\n const endText = newState.doc.textBetween(newRange.from, newRange.to, \" \", \" \");\n if (!UNICODE_WHITESPACE_REGEX_END.test(endText)) {\n return;\n }\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, newRange.to, void 0, \" \");\n }\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace.split(UNICODE_WHITESPACE_REGEX).filter(Boolean);\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n const lastWordBeforeSpace = wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset = textBlock.pos + textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n if (!lastWordBeforeSpace) {\n return false;\n }\n const linksBeforeSpace = tokenize(lastWordBeforeSpace).map((t) => t.toObject(options.defaultProtocol));\n if (!isValidLinkStructure(linksBeforeSpace)) {\n return false;\n }\n linksBeforeSpace.filter((link) => link.isLink).map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1\n })).filter((link) => {\n if (!newState.schema.marks.code) {\n return true;\n }\n return !newState.doc.rangeHasMark(link.from, link.to, newState.schema.marks.code);\n }).filter((link) => options.validate(link.value)).filter((link) => options.shouldAutoLink(link.value)).forEach((link) => {\n if (getMarksBetween(link.from, link.to, newState.doc).some((item) => item.mark.type === options.type)) {\n return;\n }\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href\n })\n );\n });\n }\n });\n if (!tr.steps.length) {\n return;\n }\n return tr;\n }\n });\n}\n\n// src/helpers/clickHandler.ts\nimport { getAttributes } from \"@tiptap/core\";\nimport { Plugin as Plugin2, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nfunction clickHandler(options) {\n return new Plugin2({\n key: new PluginKey2(\"handleClickLink\"),\n props: {\n handleClick: (view, pos, event) => {\n var _a, _b;\n if (event.button !== 0) {\n return false;\n }\n if (!view.editable) {\n return false;\n }\n let link = null;\n if (event.target instanceof HTMLAnchorElement) {\n link = event.target;\n } else {\n const target = event.target;\n if (!target) {\n return false;\n }\n const root = options.editor.view.dom;\n link = target.closest(\"a\");\n if (link && !root.contains(link)) {\n link = null;\n }\n }\n if (!link) {\n return false;\n }\n let handled = false;\n if (options.enableClickSelection) {\n const commandResult = options.editor.commands.extendMarkRange(options.type.name);\n handled = commandResult;\n }\n if (options.openOnClick) {\n const attrs = getAttributes(view.state, options.type.name);\n const href = (_a = link.href) != null ? _a : attrs.href;\n const target = (_b = link.target) != null ? _b : attrs.target;\n if (href) {\n window.open(href, target);\n handled = true;\n }\n }\n return handled;\n }\n }\n });\n}\n\n// src/helpers/pasteHandler.ts\nimport { Plugin as Plugin3, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\nfunction pasteHandler(options) {\n return new Plugin3({\n key: new PluginKey3(\"handlePasteLink\"),\n props: {\n handlePaste: (view, _event, slice) => {\n const { shouldAutoLink } = options;\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n if (empty) {\n return false;\n }\n let textContent = \"\";\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n const link = find(textContent, { defaultProtocol: options.defaultProtocol }).find(\n (item) => item.isLink && item.value === textContent\n );\n if (!textContent || !link || shouldAutoLink !== void 0 && !shouldAutoLink(link.value)) {\n return false;\n }\n return options.editor.commands.setMark(options.type, {\n href: link.href\n });\n }\n }\n });\n}\n\n// src/link.ts\nvar pasteRegex = /https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z]{2,}\\b(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)/gi;\nfunction isAllowedUri(uri, protocols) {\n const allowedProtocols = [\"http\", \"https\", \"ftp\", \"ftps\", \"mailto\", \"tel\", \"callto\", \"sms\", \"cid\", \"xmpp\"];\n if (protocols) {\n protocols.forEach((protocol) => {\n const nextProtocol = typeof protocol === \"string\" ? protocol : protocol.scheme;\n if (nextProtocol) {\n allowedProtocols.push(nextProtocol);\n }\n });\n }\n return !uri || uri.replace(UNICODE_WHITESPACE_REGEX_GLOBAL, \"\").match(\n new RegExp(\n // eslint-disable-next-line no-useless-escape\n `^(?:(?:${allowedProtocols.join(\"|\")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,\n \"i\"\n )\n );\n}\nvar Link = Mark.create({\n name: \"link\",\n priority: 1e3,\n keepOnSplit: false,\n exitable: true,\n onCreate() {\n if (this.options.validate && !this.options.shouldAutoLink) {\n this.options.shouldAutoLink = this.options.validate;\n console.warn(\"The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.\");\n }\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n onDestroy() {\n reset();\n },\n inclusive() {\n return this.options.autolink;\n },\n addOptions() {\n return {\n openOnClick: true,\n enableClickSelection: false,\n linkOnPaste: true,\n autolink: true,\n protocols: [],\n defaultProtocol: \"http\",\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null\n },\n isAllowedUri: (url, ctx) => !!isAllowedUri(url, ctx.protocols),\n validate: (url) => !!url,\n shouldAutoLink: (url) => {\n const hasProtocol = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(url);\n const hasMaybeProtocol = /^[a-z][a-z0-9+.-]*:/i.test(url);\n if (hasProtocol || hasMaybeProtocol && !url.includes(\"@\")) {\n return true;\n }\n const urlWithoutUserinfo = url.includes(\"@\") ? url.split(\"@\").pop() : url;\n const hostname = urlWithoutUserinfo.split(/[/?#:]/)[0];\n if (/^\\d{1,3}(\\.\\d{1,3}){3}$/.test(hostname)) {\n return false;\n }\n if (!/\\./.test(hostname)) {\n return false;\n }\n return true;\n }\n };\n },\n addAttributes() {\n return {\n href: {\n default: null,\n parseHTML(element) {\n return element.getAttribute(\"href\");\n }\n },\n target: {\n default: this.options.HTMLAttributes.target\n },\n rel: {\n default: this.options.HTMLAttributes.rel\n },\n class: {\n default: this.options.HTMLAttributes.class\n },\n title: {\n default: null\n }\n };\n },\n parseHTML() {\n return [\n {\n tag: \"a[href]\",\n getAttrs: (dom) => {\n const href = dom.getAttribute(\"href\");\n if (!href || !this.options.isAllowedUri(href, {\n defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return false;\n }\n return null;\n }\n }\n ];\n },\n renderHTML({ HTMLAttributes }) {\n if (!this.options.isAllowedUri(HTMLAttributes.href, {\n defaultValidate: (href) => !!isAllowedUri(href, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: \"\" }), 0];\n }\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n markdownTokenName: \"link\",\n parseMarkdown: (token, helpers) => {\n return helpers.applyMark(\"link\", helpers.parseInline(token.tokens || []), {\n href: token.href,\n title: token.title || null\n });\n },\n renderMarkdown: (node, h) => {\n var _a, _b, _c, _d;\n const href = (_b = (_a = node.attrs) == null ? void 0 : _a.href) != null ? _b : \"\";\n const title = (_d = (_c = node.attrs) == null ? void 0 : _c.title) != null ? _d : \"\";\n const text = h.renderChildren(node);\n return title ? `[${text}](${href} \"${title}\")` : `[${text}](${href})`;\n },\n addCommands() {\n return {\n setLink: (attributes) => ({ chain }) => {\n const { href } = attributes;\n if (!this.options.isAllowedUri(href, {\n defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return false;\n }\n return chain().setMark(this.name, attributes).setMeta(\"preventAutolink\", true).run();\n },\n toggleLink: (attributes) => ({ chain }) => {\n const { href } = attributes || {};\n if (href && !this.options.isAllowedUri(href, {\n defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n protocols: this.options.protocols,\n defaultProtocol: this.options.defaultProtocol\n })) {\n return false;\n }\n return chain().toggleMark(this.name, attributes, { extendEmptyMarkRange: true }).setMeta(\"preventAutolink\", true).run();\n },\n unsetLink: () => ({ chain }) => {\n return chain().unsetMark(this.name, { extendEmptyMarkRange: true }).setMeta(\"preventAutolink\", true).run();\n }\n };\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) => {\n const foundLinks = [];\n if (text) {\n const { protocols, defaultProtocol } = this.options;\n const links = find2(text).filter(\n (item) => item.isLink && this.options.isAllowedUri(item.value, {\n defaultValidate: (href) => !!isAllowedUri(href, protocols),\n protocols,\n defaultProtocol\n })\n );\n if (links.length) {\n links.forEach((link) => {\n if (!this.options.shouldAutoLink(link.value)) {\n return;\n }\n foundLinks.push({\n text: link.value,\n data: {\n href: link.href\n },\n index: link.start\n });\n });\n }\n }\n return foundLinks;\n },\n type: this.type,\n getAttributes: (match) => {\n var _a;\n return {\n href: (_a = match.data) == null ? void 0 : _a.href\n };\n }\n })\n ];\n },\n addProseMirrorPlugins() {\n const plugins = [];\n const { protocols, defaultProtocol } = this.options;\n if (this.options.autolink) {\n plugins.push(\n autolink({\n type: this.type,\n defaultProtocol: this.options.defaultProtocol,\n validate: (url) => this.options.isAllowedUri(url, {\n defaultValidate: (href) => !!isAllowedUri(href, protocols),\n protocols,\n defaultProtocol\n }),\n shouldAutoLink: this.options.shouldAutoLink\n })\n );\n }\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n openOnClick: this.options.openOnClick === \"whenNotEditable\" ? true : this.options.openOnClick,\n enableClickSelection: this.options.enableClickSelection\n })\n );\n if (this.options.linkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n defaultProtocol: this.options.defaultProtocol,\n type: this.type,\n shouldAutoLink: this.options.shouldAutoLink\n })\n );\n }\n return plugins;\n }\n});\n\n// src/index.ts\nvar index_default = Link;\nexport {\n Link,\n index_default as default,\n isAllowedUri,\n pasteRegex\n};\n//# sourceMappingURL=index.js.map","// src/character-count/character-count.ts\nimport { Extension } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nvar CharacterCount = Extension.create({\n name: \"characterCount\",\n addOptions() {\n return {\n limit: null,\n autoTrim: true,\n mode: \"textSize\",\n textCounter: (text) => text.length,\n wordCounter: (text) => text.split(\" \").filter((word) => word !== \"\").length\n };\n },\n addStorage() {\n return {\n characters: () => 0,\n words: () => 0\n };\n },\n onBeforeCreate() {\n this.storage.characters = (options) => {\n const node = (options == null ? void 0 : options.node) || this.editor.state.doc;\n const mode = (options == null ? void 0 : options.mode) || this.options.mode;\n if (mode === \"textSize\") {\n const text = node.textBetween(0, node.content.size, void 0, \" \");\n return this.options.textCounter(text);\n }\n return node.nodeSize;\n };\n this.storage.words = (options) => {\n const node = (options == null ? void 0 : options.node) || this.editor.state.doc;\n const text = node.textBetween(0, node.content.size, \" \", \" \");\n return this.options.wordCounter(text);\n };\n },\n addProseMirrorPlugins() {\n let initialEvaluationDone = false;\n return [\n new Plugin({\n key: new PluginKey(\"characterCount\"),\n appendTransaction: (transactions, oldState, newState) => {\n if (initialEvaluationDone) {\n return;\n }\n const limit = this.options.limit;\n const autoTrim = this.options.autoTrim;\n if (limit === null || limit === void 0 || limit === 0 || autoTrim === false) {\n initialEvaluationDone = true;\n return;\n }\n const initialContentSize = this.storage.characters({ node: newState.doc });\n if (initialContentSize > limit) {\n const over = initialContentSize - limit;\n const from = 0;\n const to = over;\n console.warn(\n `[CharacterCount] Initial content exceeded limit of ${limit} characters. Content was automatically trimmed.`\n );\n const tr = newState.tr.deleteRange(from, to);\n initialEvaluationDone = true;\n return tr;\n }\n initialEvaluationDone = true;\n },\n filterTransaction: (transaction, state) => {\n const limit = this.options.limit;\n if (!transaction.docChanged || limit === 0 || limit === null || limit === void 0) {\n return true;\n }\n const oldSize = this.storage.characters({ node: state.doc });\n const newSize = this.storage.characters({ node: transaction.doc });\n if (newSize <= limit) {\n return true;\n }\n if (oldSize > limit && newSize > limit && newSize <= oldSize) {\n return true;\n }\n if (oldSize > limit && newSize > limit && newSize > oldSize) {\n return false;\n }\n const isPaste = transaction.getMeta(\"paste\");\n if (!isPaste) {\n return false;\n }\n const pos = transaction.selection.$head.pos;\n const over = newSize - limit;\n const from = pos - over;\n const to = pos;\n transaction.deleteRange(from, to);\n const updatedSize = this.storage.characters({ node: transaction.doc });\n if (updatedSize > limit) {\n return false;\n }\n return true;\n }\n })\n ];\n }\n});\n\n// src/drop-cursor/drop-cursor.ts\nimport { Extension as Extension2 } from \"@tiptap/core\";\nimport { dropCursor } from \"@tiptap/pm/dropcursor\";\nvar Dropcursor = Extension2.create({\n name: \"dropCursor\",\n addOptions() {\n return {\n color: \"currentColor\",\n width: 1,\n class: void 0\n };\n },\n addProseMirrorPlugins() {\n return [dropCursor(this.options)];\n }\n});\n\n// src/focus/focus.ts\nimport { Extension as Extension3 } from \"@tiptap/core\";\nimport { Plugin as Plugin2, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nvar Focus = Extension3.create({\n name: \"focus\",\n addOptions() {\n return {\n className: \"has-focus\",\n mode: \"all\"\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin2({\n key: new PluginKey2(\"focus\"),\n props: {\n decorations: ({ doc, selection }) => {\n const { isEditable, isFocused } = this.editor;\n const { anchor } = selection;\n const decorations = [];\n if (!isEditable || !isFocused) {\n return DecorationSet.create(doc, []);\n }\n let maxLevels = 0;\n if (this.options.mode === \"deepest\") {\n doc.descendants((node, pos) => {\n if (node.isText) {\n return;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n maxLevels += 1;\n });\n }\n let currentLevel = 0;\n doc.descendants((node, pos) => {\n if (node.isText) {\n return false;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n currentLevel += 1;\n const outOfScope = this.options.mode === \"deepest\" && maxLevels - currentLevel > 0 || this.options.mode === \"shallowest\" && currentLevel > 1;\n if (outOfScope) {\n return this.options.mode === \"deepest\";\n }\n decorations.push(\n Decoration.node(pos, pos + node.nodeSize, {\n class: this.options.className\n })\n );\n });\n return DecorationSet.create(doc, decorations);\n }\n }\n })\n ];\n }\n});\n\n// src/gap-cursor/gap-cursor.ts\nimport { callOrReturn, Extension as Extension4, getExtensionField } from \"@tiptap/core\";\nimport { gapCursor } from \"@tiptap/pm/gapcursor\";\nvar Gapcursor = Extension4.create({\n name: \"gapCursor\",\n addProseMirrorPlugins() {\n return [gapCursor()];\n },\n extendNodeSchema(extension) {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage\n };\n return {\n allowGapCursor: (_a = callOrReturn(getExtensionField(extension, \"allowGapCursor\", context))) != null ? _a : null\n };\n }\n});\n\n// src/placeholder/placeholder.ts\nimport { Extension as Extension5, isNodeEmpty } from \"@tiptap/core\";\nimport { Plugin as Plugin3, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nimport { Decoration as Decoration2, DecorationSet as DecorationSet2 } from \"@tiptap/pm/view\";\nvar DEFAULT_DATA_ATTRIBUTE = \"placeholder\";\nfunction preparePlaceholderAttribute(attr) {\n return attr.replace(/\\s+/g, \"-\").replace(/[^a-zA-Z0-9-]/g, \"\").replace(/^[0-9-]+/, \"\").replace(/^-+/, \"\").toLowerCase();\n}\nvar Placeholder = Extension5.create({\n name: \"placeholder\",\n addOptions() {\n return {\n emptyEditorClass: \"is-editor-empty\",\n emptyNodeClass: \"is-empty\",\n dataAttribute: DEFAULT_DATA_ATTRIBUTE,\n placeholder: \"Write something \\u2026\",\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n includeChildren: false\n };\n },\n addProseMirrorPlugins() {\n const dataAttribute = this.options.dataAttribute ? `data-${preparePlaceholderAttribute(this.options.dataAttribute)}` : `data-${DEFAULT_DATA_ATTRIBUTE}`;\n return [\n new Plugin3({\n key: new PluginKey3(\"placeholder\"),\n props: {\n decorations: ({ doc, selection }) => {\n const active = this.editor.isEditable || !this.options.showOnlyWhenEditable;\n const { anchor } = selection;\n const decorations = [];\n if (!active) {\n return null;\n }\n const isEmptyDoc = this.editor.isEmpty;\n doc.descendants((node, pos) => {\n const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;\n const isEmpty = !node.isLeaf && isNodeEmpty(node);\n if (!node.type.isTextblock) {\n return this.options.includeChildren;\n }\n if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty) {\n const classes = [this.options.emptyNodeClass];\n if (isEmptyDoc) {\n classes.push(this.options.emptyEditorClass);\n }\n const decoration = Decoration2.node(pos, pos + node.nodeSize, {\n class: classes.join(\" \"),\n [dataAttribute]: typeof this.options.placeholder === \"function\" ? this.options.placeholder({\n editor: this.editor,\n node,\n pos,\n hasAnchor\n }) : this.options.placeholder\n });\n decorations.push(decoration);\n }\n return this.options.includeChildren;\n });\n return DecorationSet2.create(doc, decorations);\n }\n }\n })\n ];\n }\n});\n\n// src/selection/selection.ts\nimport { Extension as Extension6, isNodeSelection } from \"@tiptap/core\";\nimport { Plugin as Plugin4, PluginKey as PluginKey4 } from \"@tiptap/pm/state\";\nimport { Decoration as Decoration3, DecorationSet as DecorationSet3 } from \"@tiptap/pm/view\";\nvar Selection = Extension6.create({\n name: \"selection\",\n addOptions() {\n return {\n className: \"selection\"\n };\n },\n addProseMirrorPlugins() {\n const { editor, options } = this;\n return [\n new Plugin4({\n key: new PluginKey4(\"selection\"),\n props: {\n decorations(state) {\n if (state.selection.empty || editor.isFocused || !editor.isEditable || isNodeSelection(state.selection) || editor.view.dragging) {\n return null;\n }\n return DecorationSet3.create(state.doc, [\n Decoration3.inline(state.selection.from, state.selection.to, {\n class: options.className\n })\n ]);\n }\n }\n })\n ];\n }\n});\n\n// src/trailing-node/trailing-node.ts\nimport { Extension as Extension7 } from \"@tiptap/core\";\nimport { Plugin as Plugin5, PluginKey as PluginKey5 } from \"@tiptap/pm/state\";\nvar skipTrailingNodeMeta = \"skipTrailingNode\";\nfunction nodeEqualsType({ types, node }) {\n return node && Array.isArray(types) && types.includes(node.type) || (node == null ? void 0 : node.type) === types;\n}\nvar TrailingNode = Extension7.create({\n name: \"trailingNode\",\n addOptions() {\n return {\n node: void 0,\n notAfter: []\n };\n },\n addProseMirrorPlugins() {\n var _a;\n const plugin = new PluginKey5(this.name);\n const defaultNode = this.options.node || ((_a = this.editor.schema.topNodeType.contentMatch.defaultType) == null ? void 0 : _a.name) || \"paragraph\";\n const disabledNodes = Object.entries(this.editor.schema.nodes).map(([, value]) => value).filter((node) => (this.options.notAfter || []).concat(defaultNode).includes(node.name));\n return [\n new Plugin5({\n key: plugin,\n appendTransaction: (transactions, __, state) => {\n const { doc, tr, schema } = state;\n const shouldInsertNodeAtEnd = plugin.getState(state);\n const endPosition = doc.content.size;\n const type = schema.nodes[defaultNode];\n if (transactions.some((transaction) => transaction.getMeta(skipTrailingNodeMeta))) {\n return;\n }\n if (!shouldInsertNodeAtEnd) {\n return;\n }\n return tr.insert(endPosition, type.create());\n },\n state: {\n init: (_, state) => {\n const lastNode = state.tr.doc.lastChild;\n return !nodeEqualsType({ node: lastNode, types: disabledNodes });\n },\n apply: (tr, value) => {\n if (!tr.docChanged) {\n return value;\n }\n if (tr.getMeta(\"__uniqueIDTransaction\")) {\n return value;\n }\n const lastNode = tr.doc.lastChild;\n return !nodeEqualsType({ node: lastNode, types: disabledNodes });\n }\n }\n })\n ];\n }\n});\n\n// src/undo-redo/undo-redo.ts\nimport { Extension as Extension8 } from \"@tiptap/core\";\nimport { history, redo, undo } from \"@tiptap/pm/history\";\nvar UndoRedo = Extension8.create({\n name: \"undoRedo\",\n addOptions() {\n return {\n depth: 100,\n newGroupDelay: 500\n };\n },\n addCommands() {\n return {\n undo: () => ({ state, dispatch }) => {\n return undo(state, dispatch);\n },\n redo: () => ({ state, dispatch }) => {\n return redo(state, dispatch);\n }\n };\n },\n addProseMirrorPlugins() {\n return [history(this.options)];\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-z\": () => this.editor.commands.undo(),\n \"Shift-Mod-z\": () => this.editor.commands.redo(),\n \"Mod-y\": () => this.editor.commands.redo(),\n // Russian keyboard layouts\n \"Mod-\\u044F\": () => this.editor.commands.undo(),\n \"Shift-Mod-\\u044F\": () => this.editor.commands.redo()\n };\n }\n});\nexport {\n CharacterCount,\n Dropcursor,\n Focus,\n Gapcursor,\n Placeholder,\n Selection,\n TrailingNode,\n UndoRedo,\n preparePlaceholderAttribute,\n skipTrailingNodeMeta\n};\n//# sourceMappingURL=index.js.map","// src/index.ts\nimport { Placeholder } from \"@tiptap/extensions\";\nimport { Placeholder as Placeholder2 } from \"@tiptap/extensions\";\nvar index_default = Placeholder;\nexport {\n Placeholder2 as Placeholder,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/code-block.ts\nimport { mergeAttributes, Node, textblockTypeInputRule } from \"@tiptap/core\";\nimport { Plugin, PluginKey, Selection, TextSelection } from \"@tiptap/pm/state\";\nvar DEFAULT_TAB_SIZE = 4;\nvar backtickInputRegex = /^```([a-z]+)?[\\s\\n]$/;\nvar tildeInputRegex = /^~~~([a-z]+)?[\\s\\n]$/;\nvar CodeBlock = Node.create({\n name: \"codeBlock\",\n addOptions() {\n return {\n languageClassPrefix: \"language-\",\n exitOnTripleEnter: true,\n exitOnArrowDown: true,\n defaultLanguage: null,\n enableTabIndentation: false,\n tabSize: DEFAULT_TAB_SIZE,\n HTMLAttributes: {}\n };\n },\n content: \"text*\",\n marks: \"\",\n group: \"block\",\n code: true,\n defining: true,\n addAttributes() {\n return {\n language: {\n default: this.options.defaultLanguage,\n parseHTML: (element) => {\n var _a;\n const { languageClassPrefix } = this.options;\n if (!languageClassPrefix) {\n return null;\n }\n const classNames = [...((_a = element.firstElementChild) == null ? void 0 : _a.classList) || []];\n const languages = classNames.filter((className) => className.startsWith(languageClassPrefix)).map((className) => className.replace(languageClassPrefix, \"\"));\n const language = languages[0];\n if (!language) {\n return null;\n }\n return language;\n },\n rendered: false\n }\n };\n },\n parseHTML() {\n return [\n {\n tag: \"pre\",\n preserveWhitespace: \"full\"\n }\n ];\n },\n renderHTML({ node, HTMLAttributes }) {\n return [\n \"pre\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n [\n \"code\",\n {\n class: node.attrs.language ? this.options.languageClassPrefix + node.attrs.language : null\n },\n 0\n ]\n ];\n },\n markdownTokenName: \"code\",\n parseMarkdown: (token, helpers) => {\n var _a, _b;\n if (((_a = token.raw) == null ? void 0 : _a.startsWith(\"```\")) === false && ((_b = token.raw) == null ? void 0 : _b.startsWith(\"~~~\")) === false && token.codeBlockStyle !== \"indented\") {\n return [];\n }\n return helpers.createNode(\n \"codeBlock\",\n { language: token.lang || null },\n token.text ? [helpers.createTextNode(token.text)] : []\n );\n },\n renderMarkdown: (node, h) => {\n var _a;\n let output = \"\";\n const language = ((_a = node.attrs) == null ? void 0 : _a.language) || \"\";\n if (!node.content) {\n output = `\\`\\`\\`${language}\n\n\\`\\`\\``;\n } else {\n const lines = [`\\`\\`\\`${language}`, h.renderChildren(node.content), \"```\"];\n output = lines.join(\"\\n\");\n }\n return output;\n },\n addCommands() {\n return {\n setCodeBlock: (attributes) => ({ commands }) => {\n return commands.setNode(this.name, attributes);\n },\n toggleCodeBlock: (attributes) => ({ commands }) => {\n return commands.toggleNode(this.name, \"paragraph\", attributes);\n }\n };\n },\n addKeyboardShortcuts() {\n return {\n \"Mod-Alt-c\": () => this.editor.commands.toggleCodeBlock(),\n // remove code block when at start of document or code block is empty\n Backspace: () => {\n const { empty, $anchor } = this.editor.state.selection;\n const isAtStart = $anchor.pos === 1;\n if (!empty || $anchor.parent.type.name !== this.name) {\n return false;\n }\n if (isAtStart || !$anchor.parent.textContent.length) {\n return this.editor.commands.clearNodes();\n }\n return false;\n },\n // handle tab indentation\n Tab: ({ editor }) => {\n var _a;\n if (!this.options.enableTabIndentation) {\n return false;\n }\n const tabSize = (_a = this.options.tabSize) != null ? _a : DEFAULT_TAB_SIZE;\n const { state } = editor;\n const { selection } = state;\n const { $from, empty } = selection;\n if ($from.parent.type !== this.type) {\n return false;\n }\n const indent = \" \".repeat(tabSize);\n if (empty) {\n return editor.commands.insertContent(indent);\n }\n return editor.commands.command(({ tr }) => {\n const { from, to } = selection;\n const text = state.doc.textBetween(from, to, \"\\n\", \"\\n\");\n const lines = text.split(\"\\n\");\n const indentedText = lines.map((line) => indent + line).join(\"\\n\");\n tr.replaceWith(from, to, state.schema.text(indentedText));\n return true;\n });\n },\n // handle shift+tab reverse indentation\n \"Shift-Tab\": ({ editor }) => {\n var _a;\n if (!this.options.enableTabIndentation) {\n return false;\n }\n const tabSize = (_a = this.options.tabSize) != null ? _a : DEFAULT_TAB_SIZE;\n const { state } = editor;\n const { selection } = state;\n const { $from, empty } = selection;\n if ($from.parent.type !== this.type) {\n return false;\n }\n if (empty) {\n return editor.commands.command(({ tr }) => {\n var _a2;\n const { pos } = $from;\n const codeBlockStart = $from.start();\n const codeBlockEnd = $from.end();\n const allText = state.doc.textBetween(codeBlockStart, codeBlockEnd, \"\\n\", \"\\n\");\n const lines = allText.split(\"\\n\");\n let currentLineIndex = 0;\n let charCount = 0;\n const relativeCursorPos = pos - codeBlockStart;\n for (let i = 0; i < lines.length; i += 1) {\n if (charCount + lines[i].length >= relativeCursorPos) {\n currentLineIndex = i;\n break;\n }\n charCount += lines[i].length + 1;\n }\n const currentLine = lines[currentLineIndex];\n const leadingSpaces = ((_a2 = currentLine.match(/^ */)) == null ? void 0 : _a2[0]) || \"\";\n const spacesToRemove = Math.min(leadingSpaces.length, tabSize);\n if (spacesToRemove === 0) {\n return true;\n }\n let lineStartPos = codeBlockStart;\n for (let i = 0; i < currentLineIndex; i += 1) {\n lineStartPos += lines[i].length + 1;\n }\n tr.delete(lineStartPos, lineStartPos + spacesToRemove);\n const cursorPosInLine = pos - lineStartPos;\n if (cursorPosInLine <= spacesToRemove) {\n tr.setSelection(TextSelection.create(tr.doc, lineStartPos));\n }\n return true;\n });\n }\n return editor.commands.command(({ tr }) => {\n const { from, to } = selection;\n const text = state.doc.textBetween(from, to, \"\\n\", \"\\n\");\n const lines = text.split(\"\\n\");\n const reverseIndentText = lines.map((line) => {\n var _a2;\n const leadingSpaces = ((_a2 = line.match(/^ */)) == null ? void 0 : _a2[0]) || \"\";\n const spacesToRemove = Math.min(leadingSpaces.length, tabSize);\n return line.slice(spacesToRemove);\n }).join(\"\\n\");\n tr.replaceWith(from, to, state.schema.text(reverseIndentText));\n return true;\n });\n },\n // exit node on triple enter\n Enter: ({ editor }) => {\n if (!this.options.exitOnTripleEnter) {\n return false;\n }\n const { state } = editor;\n const { selection } = state;\n const { $from, empty } = selection;\n if (!empty || $from.parent.type !== this.type) {\n return false;\n }\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n const endsWithDoubleNewline = $from.parent.textContent.endsWith(\"\\n\\n\");\n if (!isAtEnd || !endsWithDoubleNewline) {\n return false;\n }\n return editor.chain().command(({ tr }) => {\n tr.delete($from.pos - 2, $from.pos);\n return true;\n }).exitCode().run();\n },\n // exit node on arrow down\n ArrowDown: ({ editor }) => {\n if (!this.options.exitOnArrowDown) {\n return false;\n }\n const { state } = editor;\n const { selection, doc } = state;\n const { $from, empty } = selection;\n if (!empty || $from.parent.type !== this.type) {\n return false;\n }\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n if (!isAtEnd) {\n return false;\n }\n const after = $from.after();\n if (after === void 0) {\n return false;\n }\n const nodeAfter = doc.nodeAt(after);\n if (nodeAfter) {\n return editor.commands.command(({ tr }) => {\n tr.setSelection(Selection.near(doc.resolve(after)));\n return true;\n });\n }\n return editor.commands.exitCode();\n }\n };\n },\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => ({\n language: match[1]\n })\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => ({\n language: match[1]\n })\n })\n ];\n },\n addProseMirrorPlugins() {\n return [\n // this plugin creates a code block for pasted content from VS Code\n // we can also detect the copied code language\n new Plugin({\n key: new PluginKey(\"codeBlockVSCodeHandler\"),\n props: {\n handlePaste: (view, event) => {\n if (!event.clipboardData) {\n return false;\n }\n if (this.editor.isActive(this.type.name)) {\n return false;\n }\n const text = event.clipboardData.getData(\"text/plain\");\n const vscode = event.clipboardData.getData(\"vscode-editor-data\");\n const vscodeData = vscode ? JSON.parse(vscode) : void 0;\n const language = vscodeData == null ? void 0 : vscodeData.mode;\n if (!text || !language) {\n return false;\n }\n const { tr, schema } = view.state;\n const textNode = schema.text(text.replace(/\\r\\n?/g, \"\\n\"));\n tr.replaceSelectionWith(this.type.create({ language }, textNode));\n if (tr.selection.$from.parent.type !== this.type) {\n tr.setSelection(TextSelection.near(tr.doc.resolve(Math.max(0, tr.selection.from - 2))));\n }\n tr.setMeta(\"paste\", true);\n view.dispatch(tr);\n return true;\n }\n }\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = CodeBlock;\nexport {\n CodeBlock,\n backtickInputRegex,\n index_default as default,\n tildeInputRegex\n};\n//# sourceMappingURL=index.js.map","// src/code-block-lowlight.ts\nimport { CodeBlock } from \"@tiptap/extension-code-block\";\n\n// src/lowlight-plugin.ts\nimport { findChildren } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nimport highlight from \"highlight.js/lib/core\";\nfunction parseNodes(nodes, className = []) {\n return nodes.flatMap((node) => {\n const classes = [...className, ...node.properties ? node.properties.className : []];\n if (node.children) {\n return parseNodes(node.children, classes);\n }\n return {\n text: node.value,\n classes\n };\n });\n}\nfunction getHighlightNodes(result) {\n return result.value || result.children || [];\n}\nfunction registered(aliasOrLanguage) {\n return Boolean(highlight.getLanguage(aliasOrLanguage));\n}\nfunction getDecorations({\n doc,\n name,\n lowlight,\n defaultLanguage\n}) {\n const decorations = [];\n findChildren(doc, (node) => node.type.name === name).forEach((block) => {\n var _a;\n let from = block.pos + 1;\n const language = block.node.attrs.language || defaultLanguage;\n const languages = lowlight.listLanguages();\n const nodes = language && (languages.includes(language) || registered(language) || ((_a = lowlight.registered) == null ? void 0 : _a.call(lowlight, language))) ? getHighlightNodes(lowlight.highlight(language, block.node.textContent)) : getHighlightNodes(lowlight.highlightAuto(block.node.textContent));\n parseNodes(nodes).forEach((node) => {\n const to = from + node.text.length;\n if (node.classes.length) {\n const decoration = Decoration.inline(from, to, {\n class: node.classes.join(\" \")\n });\n decorations.push(decoration);\n }\n from = to;\n });\n });\n return DecorationSet.create(doc, decorations);\n}\nfunction isFunction(param) {\n return typeof param === \"function\";\n}\nfunction LowlightPlugin({\n name,\n lowlight,\n defaultLanguage\n}) {\n if (![\"highlight\", \"highlightAuto\", \"listLanguages\"].every((api) => isFunction(lowlight[api]))) {\n throw Error(\"You should provide an instance of lowlight to use the code-block-lowlight extension\");\n }\n const lowlightPlugin = new Plugin({\n key: new PluginKey(\"lowlight\"),\n state: {\n init: (_, { doc }) => getDecorations({\n doc,\n name,\n lowlight,\n defaultLanguage\n }),\n apply: (transaction, decorationSet, oldState, newState) => {\n const oldNodeName = oldState.selection.$head.parent.type.name;\n const newNodeName = newState.selection.$head.parent.type.name;\n const oldNodes = findChildren(oldState.doc, (node) => node.type.name === name);\n const newNodes = findChildren(newState.doc, (node) => node.type.name === name);\n if (transaction.docChanged && // Apply decorations if:\n // selection includes named node,\n ([oldNodeName, newNodeName].includes(name) || // OR transaction adds/removes named node,\n newNodes.length !== oldNodes.length || // OR transaction has changes that completely encapsulte a node\n // (for example, a transaction that affects the entire document).\n // Such transactions can happen during collab syncing via y-prosemirror, for example.\n transaction.steps.some((step) => {\n return (\n // @ts-ignore\n step.from !== void 0 && // @ts-ignore\n step.to !== void 0 && oldNodes.some((node) => {\n return (\n // @ts-ignore\n node.pos >= step.from && // @ts-ignore\n node.pos + node.node.nodeSize <= step.to\n );\n })\n );\n }))) {\n return getDecorations({\n doc: transaction.doc,\n name,\n lowlight,\n defaultLanguage\n });\n }\n return decorationSet.map(transaction.mapping, transaction.doc);\n }\n },\n props: {\n decorations(state) {\n return lowlightPlugin.getState(state);\n }\n }\n });\n return lowlightPlugin;\n}\n\n// src/code-block-lowlight.ts\nvar CodeBlockLowlight = CodeBlock.extend({\n addOptions() {\n var _a;\n return {\n ...(_a = this.parent) == null ? void 0 : _a.call(this),\n lowlight: {},\n languageClassPrefix: \"language-\",\n exitOnTripleEnter: true,\n exitOnArrowDown: true,\n defaultLanguage: null,\n enableTabIndentation: false,\n tabSize: 4,\n HTMLAttributes: {}\n };\n },\n addProseMirrorPlugins() {\n var _a;\n return [\n ...((_a = this.parent) == null ? void 0 : _a.call(this)) || [],\n LowlightPlugin({\n name: this.name,\n lowlight: this.options.lowlight,\n defaultLanguage: this.options.defaultLanguage\n })\n ];\n }\n});\n\n// src/index.ts\nvar index_default = CodeBlockLowlight;\nexport {\n CodeBlockLowlight,\n index_default as default\n};\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],"mappings":";;;AAAA,IAAIA,KAAY,OAAO,gBACnBC,MAAY,GAAQ,MAAQ;CAC9B,KAAK,IAAI,KAAQ,GACf,GAAU,GAAQ,GAAM;EAAE,KAAK,EAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AAGA,SAASC,GAAqB,GAAQ;CACpC,IAAM,EAAE,UAAO,mBAAgB,GAC3B,EAAE,iBAAc,GAChB,EAAE,WAAQ,GACV,EAAE,mBAAgB;CACtB,OAAO;EACL,GAAG;EACH,OAAO,EAAM,MAAM,KAAK,CAAK;EAC7B,kBAAkB,EAAM,iBAAiB,KAAK,CAAK;EACnD,SAAS,EAAM;EACf,QAAQ,EAAM;EACd,aAAa,EAAM,YAAY,KAAK,CAAK;EACzC,QAAQ,EAAM,OAAO,KAAK,CAAK;EAC/B,IAAI,cAAc;GAChB,OAAO;EACT;EACA,IAAI,YAAY;GACd,OAAO;EACT;EACA,IAAI,MAAM;GACR,OAAO;EACT;EACA,IAAI,KAAK;GAIP,OAHA,IAAY,EAAY,WACxB,IAAM,EAAY,KAClB,IAAc,EAAY,aACnB;EACT;CACF;AACF;AAGA,IAAIC,KAAiB,MAAM;CACzB,YAAY,GAAO;EAGjB,AAFA,KAAK,SAAS,EAAM,QACpB,KAAK,cAAc,KAAK,OAAO,iBAAiB,UAChD,KAAK,cAAc,EAAM;CAC3B;CACA,IAAI,iBAAiB;EACnB,OAAO,CAAC,CAAC,KAAK;CAChB;CACA,IAAI,QAAQ;EACV,OAAO,KAAK,eAAe,KAAK,OAAO;CACzC;CACA,IAAI,WAAW;EACb,IAAM,EAAE,gBAAa,WAAQ,aAAU,MACjC,EAAE,YAAS,GACX,EAAE,UAAO,GACT,IAAQ,KAAK,WAAW,CAAE;EAChC,OAAO,OAAO,YACZ,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAQ/B,CAAC,IAPQ,GAAG,MAAS;GAC1B,IAAM,IAAW,EAAS,GAAG,CAAI,EAAE,CAAK;GAIxC,OAHI,CAAC,EAAG,QAAQ,iBAAiB,KAAK,CAAC,KAAK,kBAC1C,EAAK,SAAS,CAAE,GAEX;EACT,CACoB,CACrB,CACH;CACF;CACA,IAAI,QAAQ;EACV,aAAa,KAAK,YAAY;CAChC;CACA,IAAI,MAAM;EACR,aAAa,KAAK,UAAU;CAC9B;CACA,YAAY,GAAS,IAAiB,IAAM;EAC1C,IAAM,EAAE,gBAAa,WAAQ,aAAU,MACjC,EAAE,YAAS,GACX,IAAY,CAAC,GACb,IAAsB,CAAC,CAAC,GACxB,IAAK,KAAW,EAAM,IACtB,WACA,CAAC,KAAuB,KAAkB,CAAC,EAAG,QAAQ,iBAAiB,KAAK,CAAC,KAAK,kBACpF,EAAK,SAAS,CAAE,GAEX,EAAU,OAAO,MAAa,MAAa,EAAI,IAElD,IAAQ;GACZ,GAAG,OAAO,YACR,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAO/B,CAAC,IANgB,GAAG,MAAS;IAClC,IAAM,IAAQ,KAAK,WAAW,GAAI,CAAc,GAC1C,IAAW,EAAS,GAAG,CAAI,EAAE,CAAK;IAExC,OADA,EAAU,KAAK,CAAQ,GAChB;GACT,CAC4B,CAC7B,CACH;GACA,KAAK;EACP;EACA,OAAO;CACT;CACA,UAAU,GAAS;EACjB,IAAM,EAAE,gBAAa,aAAU,MAEzB,IAAK,KAAW,EAAM,IACtB,IAAQ,KAAK,WAAW,GAAI,EAAQ;EAM1C,OAAO;GACL,GANwB,OAAO,YAC/B,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAC/B,CAAC,IAAO,GAAG,MAAS,EAAS,GAAG,CAAI,EAAE;IAAE,GAAG;IAAO,UAAU,KAAK;GAAE,CAAC,CAAC,CAC7E,CAGkB;GACnB,aAAa,KAAK,YAAY,GAAI,EAAQ;EAC5C;CACF;CACA,WAAW,GAAI,IAAiB,IAAM;EACpC,IAAM,EAAE,gBAAa,WAAQ,aAAU,MACjC,EAAE,YAAS,GACX,IAAQ;GACZ;GACA;GACA;GACA,OAAOD,GAAqB;IAC1B;IACA,aAAa;GACf,CAAC;GACD,UAAU,UAAuB,KAAK,IAAI,KAAK;GAC/C,aAAa,KAAK,YAAY,GAAI,CAAc;GAChD,WAAW,KAAK,UAAU,CAAE;GAC5B,IAAI,WAAW;IACb,OAAO,OAAO,YACZ,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAC/B,CAAC,IAAO,GAAG,MAAS,EAAS,GAAG,CAAI,EAAE,CAAK,CAAC,CACpD,CACH;GACF;EACF;EACA,OAAO;CACT;AACF,GAGIE,KAAmB,CAAC;AACxBH,GAASG,IAAkB;CACzB,YAAYC;CACZ,oBAAoBC;CACpB,kBAAkBC;CAClB,eAAeC;CACf,2BAA2BC;CAC3B,WAAWC;CACX,yBAAyBC;CACzB,kBAAkBC;CAClB,mBAAmBC;CACnB,uBAAuBC;CACvB,aAAaC;CACb,gBAAgBC;CAChB,uBAAuBC;CACvB,aAAaC;CACb,aAAaC;CACb,eAAeC;CACf,qBAAqBC;CACrB,uBAAuBC;CACvB,oBAAoBC;CACpB,gBAAgBC;CAChB,mBAAmBC;CACnB,wBAAwBC;CACxB,uBAAuBC;CACvB,6BAA6BC;CAC7B,4BAA4BC;CAC5B,cAAcC;CACd,wBAAwBC;CACxB,YAAYC;CACZ,sBAAsBC;CACtB,oBAAoBC;CACpB,qBAAqBC;CACrB,uBAAuBC;CACvB,sBAAsBC;CACtB,iBAAiBC;CACjB,0BAA0BC;CAC1B,yBAAyBC;CACzB,wBAAwBC;CACxB,0BAA0BC;CAC1B,4BAA4BC;CAC5B,kBAAkBC;CAClB,eAAeC;CACf,eAAeC;CACf,eAAeC;CACf,wBAAwBC;CACxB,wBAAwBC;CACxB,wBAAwBC;CACxB,oBAAoBC;CACpB,kBAAkBC;CAClB,qBAAqBC;CACrB,kBAAkBC;CAClB,kBAAkBC;CAClB,kBAAkBC;CAClB,kBAAkBC;CAClB,qBAAqBC;CACrB,qBAAqBC;CACrB,iBAAiBC;CACjB,0BAA0BC;CAC1B,wBAAwBC;CACxB,cAAcC;CACd,kBAAkBC;AACpB,CAAC;AAGD,IAAI3D,YAAc,EAAE,WAAQ,eAC1B,4BAA4B;CAC1B,IAAI;CACJ,AAAK,EAAO,gBAEV,EAAK,IAAI,KAAK,IACb,IAAK,UAAU,OAAO,KAAK,IAAI,OAAO,aAAa,MAAM,QAAgB,EAAG,gBAAgB;AAEjG,CAAC,GACM,KAILC,MAAgB,IAAa,QAAU,EAAE,kBACpC,EAAS,WAAW,IAAI,EAAE,cAAW,CAAC,GAK3CC,YAAoB,EAAE,UAAO,OAAI,kBAAe;CAClD,IAAM,EAAE,iBAAc,GAChB,EAAE,cAAW;CA0BnB,OAzBK,KAGL,EAAO,SAAS,EAAE,UAAO,aAAU;EACjC,EAAM,IAAI,aAAa,EAAM,KAAK,EAAI,MAAM,GAAM,MAAQ;GACxD,IAAI,EAAK,KAAK,QACZ;GAEF,IAAM,EAAE,QAAK,eAAY,GACnB,IAAc,EAAI,QAAQ,EAAQ,IAAI,CAAG,CAAC,GAC1C,IAAY,EAAI,QAAQ,EAAQ,IAAI,IAAM,EAAK,QAAQ,CAAC,GACxD,IAAY,EAAY,WAAW,CAAS;GAClD,IAAI,CAAC,GACH;GAEF,IAAM,IAAkB,GAAW,CAAS;GAC5C,IAAI,EAAK,KAAK,aAAa;IACzB,IAAM,EAAE,mBAAgB,EAAY,OAAO,eAAe,EAAY,MAAM,CAAC;IAC7E,EAAG,cAAc,EAAU,OAAO,CAAW;GAC/C;GACA,CAAI,KAAmB,MAAoB,MACzC,EAAG,KAAK,GAAW,CAAe;EAEtC,CAAC;CACH,CAAC,GAvBQ;AAyBX,GAGIC,MAAW,OAAQ,MACd,EAAG,CAAK,GAKbC,YAA6B,EAAE,UAAO,kBACjCwD,GAA4B,GAAO,CAAQ,GAKhDvD,MAAO,GAAa,OAAe,EAAE,WAAQ,YAAS;CACxD,IAAM,EAAE,aAAU,GACZ,IAAe,EAAM,IAAI,MAAM,EAAY,MAAM,EAAY,EAAE;CACrE,EAAG,YAAY,EAAY,MAAM,EAAY,EAAE;CAC/C,IAAM,IAAS,EAAG,QAAQ,IAAI,CAAS;CAGvC,OAFA,EAAG,OAAO,GAAQ,EAAa,OAAO,GACtC,EAAG,aAAa,IAAI,EAAc,EAAG,IAAI,QAAQ,KAAK,IAAI,IAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GACnE;AACT,GAGIC,YAA2B,EAAE,OAAI,kBAAe;CAClD,IAAM,EAAE,iBAAc,GAChB,IAAc,EAAU,QAAQ,KAAK;CAC3C,IAAI,EAAY,QAAQ,OAAO,GAC7B,OAAO;CAET,IAAM,IAAO,EAAG,UAAU;CAC1B,KAAK,IAAI,IAAQ,EAAK,OAAO,IAAQ,GAAG,KAEtC,IADa,EAAK,KAAK,CAChB,EAAE,SAAS,EAAY,MAAM;EAClC,IAAI,GAAU;GACZ,IAAM,IAAO,EAAK,OAAO,CAAK,GACxB,IAAK,EAAK,MAAM,CAAK;GAC3B,EAAG,OAAO,GAAM,CAAE,EAAE,eAAe;EACrC;EACA,OAAO;CACT;CAEF,OAAO;AACT;AAGA,SAASuD,EAAY,GAAY,GAAQ;CACvC,IAAI,OAAO,KAAe,UAAU;EAClC,IAAI,CAAC,EAAO,MAAM,IAChB,MAAM,MAAM,gCAAgC,EAAW,0CAA0C;EAEnG,OAAO,EAAO,MAAM;CACtB;CACA,OAAO;AACT;AAGA,IAAItD,MAAc,OAAgB,EAAE,OAAI,UAAO,kBAAe;CAC5D,IAAM,IAAOsD,EAAY,GAAY,EAAM,MAAM,GAC3C,IAAO,EAAG,UAAU;CAC1B,KAAK,IAAI,IAAQ,EAAK,OAAO,IAAQ,GAAG,KAEtC,IADa,EAAK,KAAK,CAChB,EAAE,SAAS,GAAM;EACtB,IAAI,GAAU;GACZ,IAAM,IAAO,EAAK,OAAO,CAAK,GACxB,IAAK,EAAK,MAAM,CAAK;GAC3B,EAAG,OAAO,GAAM,CAAE,EAAE,eAAe;EACrC;EACA,OAAO;CACT;CAEF,OAAO;AACT,GAGIrD,MAAe,OAAW,EAAE,OAAI,kBAAe;CACjD,IAAM,EAAE,SAAM,UAAO;CAIrB,OAHI,KACF,EAAG,OAAO,GAAM,CAAE,GAEb;AACT,GAIIC,YAAyB,EAAE,UAAO,kBAC7BqD,GAAwB,GAAO,CAAQ,GAI5CpD,YAAe,EAAE,kBACZ,EAAS,iBAAiB,OAAO,GAKtCC,YAAkB,EAAE,UAAO,kBACtBoD,GAAiB,GAAO,CAAQ;AAOzC,SAASC,GAAS,GAAO;CACvB,OAAO,OAAO,UAAU,SAAS,KAAK,CAAK,MAAM;AACnD;AAGA,SAASC,GAAe,GAAS,GAAS,IAAU,EAAE,QAAQ,GAAK,GAAG;CACpE,IAAM,IAAO,OAAO,KAAK,CAAO;CAIhC,OAHK,EAAK,SAGH,EAAK,OAAO,MACb,EAAQ,SACH,EAAQ,OAAS,EAAQ,KAE9BD,GAAS,EAAQ,EAAI,IAChB,EAAQ,GAAK,KAAK,EAAQ,EAAI,IAEhC,EAAQ,OAAS,EAAQ,EACjC,IAVQ;AAWX;AAGA,SAASE,GAAc,GAAO,GAAM,IAAa,CAAC,GAAG;CACnD,OAAO,EAAM,MAAM,MACV,EAAK,SAAS,KAAQD,GAE3B,OAAO,YAAY,OAAO,KAAK,CAAU,EAAE,KAAK,MAAM,CAAC,GAAG,EAAK,MAAM,EAAE,CAAC,CAAC,GACzE,CACF,CACD;AACH;AACA,SAASE,GAAY,GAAO,GAAM,IAAa,CAAC,GAAG;CACjD,OAAO,CAAC,CAACD,GAAc,GAAO,GAAM,CAAU;AAChD;AACA,SAASE,GAAa,GAAM,GAAM,GAAY;CAC5C,IAAI,CAAC,KAAQ,CAAC,GACZ;CAEF,IAAI,IAAQ,EAAK,OAAO,WAAW,EAAK,YAAY;CAIpD,KAHI,CAAC,EAAM,QAAQ,CAAC,EAAM,KAAK,MAAM,MAAM,MAAU,EAAM,SAAS,CAAI,OACtE,IAAQ,EAAK,OAAO,YAAY,EAAK,YAAY,IAE/C,CAAC,EAAM,QAAQ,CAAC,EAAM,KAAK,MAAM,MAAM,MAAU,EAAM,SAAS,CAAI,GACtE;CAEF,IAAI,CAAC,GAAY;EACf,IAAM,IAAY,EAAM,KAAK,MAAM,MAAM,MAAU,EAAM,SAAS,CAAI;EACtE,AAAI,MACF,IAAa,EAAU;CAE3B;CAEA,IAAI,CADSF,GAAc,CAAC,GAAG,EAAM,KAAK,KAAK,GAAG,GAAM,CAChD,GACN;CAEF,IAAI,IAAa,EAAM,OACnB,IAAW,EAAK,MAAM,IAAI,EAAM,QAChC,IAAW,IAAa,GACxB,IAAS,IAAW,EAAM,KAAK;CACnC,OAAO,IAAa,KAAKC,GAAY,CAAC,GAAG,EAAK,OAAO,MAAM,IAAa,CAAC,EAAE,KAAK,GAAG,GAAM,CAAU,IAEjG,AADA,KACA,KAAY,EAAK,OAAO,MAAM,CAAU,EAAE;CAE5C,OAAO,IAAW,EAAK,OAAO,cAAcA,GAAY,CAAC,GAAG,EAAK,OAAO,MAAM,CAAQ,EAAE,KAAK,GAAG,GAAM,CAAU,IAE9G,AADA,KAAU,EAAK,OAAO,MAAM,CAAQ,EAAE,UACtC,KAAY;CAEd,OAAO;EACL,MAAM;EACN,IAAI;CACN;AACF;AAGA,SAASE,EAAY,GAAY,GAAQ;CACvC,IAAI,OAAO,KAAe,UAAU;EAClC,IAAI,CAAC,EAAO,MAAM,IAChB,MAAM,MAAM,gCAAgC,EAAW,0CAA0C;EAEnG,OAAO,EAAO,MAAM;CACtB;CACA,OAAO;AACT;AAGA,IAAIzD,MAAmB,GAAY,OAAgB,EAAE,OAAI,UAAO,kBAAe;CAC7E,IAAM,IAAOyD,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,QAAK,iBAAc,GACrB,EAAE,UAAO,SAAM,UAAO;CAC5B,IAAI,GAAU;EACZ,IAAM,IAAQD,GAAa,GAAO,GAAM,CAAU;EAClD,IAAI,KAAS,EAAM,QAAQ,KAAQ,EAAM,MAAM,GAAI;GACjD,IAAM,IAAeE,EAAe,OAAO,GAAK,EAAM,MAAM,EAAM,EAAE;GACpE,EAAG,aAAa,CAAY;EAC9B;CACF;CACA,OAAO;AACT,GAGIzD,MAAS,OAAc,MAAU;CACnC,IAAM,IAAQ,OAAO,KAAa,aAAa,EAAS,CAAK,IAAI;CACjE,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,KAAK,GACrC,IAAI,EAAM,GAAG,CAAK,GAChB,OAAO;CAGX,OAAO;AACT;AAIA,SAAS0D,GAAgB,GAAO;CAC9B,OAAO,aAAiBC;AAC1B;AAMA,SAASC,GAAO,IAAQ,GAAG,IAAM,GAAG,IAAM,GAAG;CAC3C,OAAO,KAAK,IAAI,KAAK,IAAI,GAAO,CAAG,GAAG,CAAG;AAC3C;AAGA,SAASC,GAAqB,GAAK,IAAW,MAAM;CAClD,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAmBC,EAAU,QAAQ,CAAG,GACxC,IAAiBA,EAAU,MAAM,CAAG;CAC1C,IAAI,MAAa,WAAW,MAAa,IACvC,OAAO;CAET,IAAI,MAAa,OACf,OAAO;CAET,IAAM,IAAS,EAAiB,MAC1B,IAAS,EAAe;CAI9B,OAHI,MAAa,QACRC,EAAe,OAAO,GAAKH,GAAO,GAAG,GAAQ,CAAM,GAAGA,GAAO,EAAI,QAAQ,MAAM,GAAQ,CAAM,CAAC,IAEhGG,EAAe,OAAO,GAAKH,GAAO,GAAU,GAAQ,CAAM,GAAGA,GAAO,GAAU,GAAQ,CAAM,CAAC;AACtG;AAGA,SAASI,KAAY;CACnB,OAAO,UAAU,aAAa,aAAa,WAAW,KAAK,UAAU,SAAS;AAChF;AAGA,SAASC,KAAQ;CACf,OAAO;EAAC;EAAkB;EAAoB;EAAkB;EAAQ;EAAU;CAAM,EAAE,SAAS,UAAU,QAAQ,KACrH,UAAU,UAAU,SAAS,KAAK,KAAK,gBAAgB;AACzD;AAGA,SAASC,KAAW;CAClB,OAAO,OAAO,YAAc,MAAc,iCAAiC,KAAK,UAAU,SAAS,IAAI;AACzG;AAGA,IAAIjE,MAAS,IAAW,MAAM,IAAU,CAAC,OAAO,EAAE,WAAQ,SAAM,OAAI,kBAAe;CACjF,IAAU;EACR,gBAAgB;EAChB,GAAG;CACL;CACA,IAAM,UAAqB;EASzB,CARIgE,GAAM,KAAKD,GAAU,MAEvB,EAAK,IAAI,MAAM,GAEbE,GAAS,KAAK,CAACD,GAAM,KAAK,CAACD,GAAU,KAEvC,EAAK,IAAI,MAAM,EAAE,eAAe,GAAK,CAAC,GAExC,4BAA4B;GAC1B,AAAK,EAAO,gBACV,EAAK,MAAM,GACP,GAAmC,kBACrC,EAAO,SAAS,eAAe;EAGrC,CAAC;CACH;CACA,IAAI;EACF,IAAI,EAAK,SAAS,KAAK,MAAa,QAAQ,MAAa,IACvD,OAAO;CAEX,QAAQ;EACN,OAAO;CACT;CACA,IAAI,KAAY,MAAa,QAAQ,CAACN,GAAgB,EAAO,MAAM,SAAS,GAE1E,OADA,EAAa,GACN;CAET,IAAM,IAAYG,GAAqB,EAAG,KAAK,CAAQ,KAAK,EAAO,MAAM,WACnE,IAAkB,EAAO,MAAM,UAAU,GAAG,CAAS;CAU3D,OATI,MACG,KACH,EAAG,aAAa,CAAS,GAEvB,KAAmB,EAAG,eACxB,EAAG,eAAe,EAAG,WAAW,GAElC,EAAa,IAER;AACT,GAGI3D,MAAW,GAAO,OAAQ,MACrB,EAAM,OAAO,GAAM,MAAU,EAAG,GAAM;CAAE,GAAG;CAAO;AAAM,CAAC,CAAC,GAI/DC,MAAiB,GAAO,OAAa,EAAE,OAAI,kBACtC,EAAS,gBAAgB;CAAE,MAAM,EAAG,UAAU;CAAM,IAAI,EAAG,UAAU;AAAG,GAAG,GAAO,CAAO,GAU9FgE,MAAqB,MAAS;CAChC,IAAM,IAAW,EAAK;CACtB,KAAK,IAAI,IAAI,EAAS,SAAS,GAAG,KAAK,GAAG,KAAQ;EAChD,IAAM,IAAQ,EAAS;EACvB,AAAI,EAAM,aAAa,KAAK,EAAM,aAAa,gBAAgB,KAAK,EAAM,SAAS,IACjF,EAAK,YAAY,CAAK,IACb,EAAM,aAAa,KAC5B,GAAkB,CAAK;CAE3B;CACA,OAAO;AACT;AACA,SAASC,GAAkB,GAAO;CAChC,IAAI,OAAO,SAAW,KACpB,MAAU,MAAM,sFAAsF;CAExG,IAAM,IAAe,SAAS,EAAM,UAC9B,IAAO,IAAI,OAAO,UAAU,EAAE,gBAAgB,GAAc,WAAW,EAAE;CAC/E,OAAOD,GAAkB,CAAI;AAC/B;AAGA,SAASE,GAAsB,GAAS,GAAQ,GAAS;CACvD,IAAI,aAAmBC,KAAmB,aAAmB,GAC3D,OAAO;CAET,IAAU;EACR,OAAO;EACP,cAAc,CAAC;EACf,GAAG;CACL;CACA,IAAM,IAAgB,OAAO,KAAY,cAAY,GAC/C,IAAgB,OAAO,KAAY;CACzC,IAAI,GACF,IAAI;EAEF,IADuB,MAAM,QAAQ,CAAO,KAAK,EAAQ,SAAS,GAEhE,OAAO,EAAS,UAAU,EAAQ,KAAK,MAAS,EAAO,aAAa,CAAI,CAAC,CAAC;EAE5E,IAAM,IAAO,EAAO,aAAa,CAAO;EAIxC,OAHI,EAAQ,yBACV,EAAK,MAAM,GAEN;CACT,SAAS,GAAO;EACd,IAAI,EAAQ,uBACV,MAAU,MAAM,wCAAwC,EAAE,OAAO,EAAM,CAAC;EAG1E,OADA,QAAQ,KAAK,mCAAmC,iBAAiB,GAAS,UAAU,CAAK,GAClFD,GAAsB,IAAI,GAAQ,CAAO;CAClD;CAEF,IAAI,GAAe;EACjB,IAAI,EAAQ,uBAAuB;GACjC,IAAI,IAAoB,IACpB,IAAiB,IACf,IAAqB,IAAI,EAAO;IACpC,SAAS,EAAO,KAAK;IACrB,OAAO,EAAO,KAAK;IAGnB,OAAO,EAAO,KAAK,MAAM,OAAO,EAC9B,8CAA8C;KAC5C,SAAS;KACT,OAAO;KACP,UAAU,CACR;MACE,KAAK;MACL,WAAW,OACT,IAAoB,IACpB,IAAiB,OAAO,KAAM,WAAW,IAAI,EAAE,WACxC;KAEX,CACF;IACF,EACF,CAAC;GACH,CAAC;GAMD,IALI,EAAQ,QACV,EAAU,WAAW,CAAkB,EAAE,WAAWD,GAAkB,CAAO,GAAG,EAAQ,YAAY,IAEpG,EAAU,WAAW,CAAkB,EAAE,MAAMA,GAAkB,CAAO,GAAG,EAAQ,YAAY,GAE7F,EAAQ,yBAAyB,GACnC,MAAU,MAAM,wCAAwC,EACtD,OAAO,gBAAI,MAAM,0BAA0B,GAAgB,EAC7D,CAAC;EAEL;EACA,IAAM,IAAS,EAAU,WAAW,CAAM;EAI1C,OAHI,EAAQ,QACH,EAAO,WAAWA,GAAkB,CAAO,GAAG,EAAQ,YAAY,EAAE,UAEtE,EAAO,MAAMA,GAAkB,CAAO,GAAG,EAAQ,YAAY;CACtE;CACA,OAAOC,GAAsB,IAAI,GAAQ,CAAO;AAClD;AAKA,SAASE,GAAwB,GAAI,GAAU,GAAM;CACnD,IAAM,IAAO,EAAG,MAAM,SAAS;CAC/B,IAAI,IAAO,GACT;CAEF,IAAM,IAAO,EAAG,MAAM;CACtB,IAAI,EAAE,aAAgB,KAAe,aAAgB,IACnD;CAEF,IAAM,IAAM,EAAG,QAAQ,KAAK,IACxB,IAAM;CAMV,AALA,EAAI,SAAS,GAAO,GAAK,GAAU,MAAU;EAC3C,AAAI,MAAQ,MACV,IAAM;CAEV,CAAC,GACD,EAAG,aAAaC,EAAW,KAAK,EAAG,IAAI,QAAQ,CAAG,GAAG,CAAI,CAAC;AAC5D;AAGA,IAAIC,MAAc,MACT,EAAE,UAAU,IAEjBrE,MAAmB,GAAU,GAAO,OAAa,EAAE,OAAI,aAAU,gBAAa;CAEhF,IAAI,GAAU;EACZ,IAAU;GACR,cAAc,EAAO,QAAQ;GAC7B,iBAAiB;GACjB,iBAAiB;GACjB,iBAAiB;GACjB,GAAG;EACL;EACA,IAAI,GACE,KAAoB,MAAU;GAClC,EAAO,KAAK,gBAAgB;IAC1B;IACA;IACA,4BAA4B;KAC1B,AAAI,mBAAmB,EAAO,WAAW,OAAO,EAAO,QAAQ,iBAAkB,YAAY,EAAO,QAAQ,kBAE1G,EAAO,QAAQ,cAAc,aAAa;IAE9C;GACF,CAAC;EACH,GACM,IAAe;GACnB,oBAAoB;GACpB,GAAG,EAAQ;EACb;EACA,IAAI,CAAC,EAAQ,yBAAyB,CAAC,EAAO,QAAQ,sBAAsB,EAAO,QAAQ,kBACzF,IAAI;GACF,GAAsB,GAAO,EAAO,QAAQ;IAC1C;IACA,uBAAuB;GACzB,CAAC;EACH,SAAS,GAAG;GACV,EAAiB,CAAC;EACpB;EAEF,IAAI;GACF,IAAUiE,GAAsB,GAAO,EAAO,QAAQ;IACpD;IACA,uBAA6B,EAAQ,yBAAsC,EAAO,QAAQ;GAC5F,CAAC;EACH,SAAS,GAAG;GAEV,OADA,EAAiB,CAAC,GACX;EACT;EACA,IAAI,EAAE,SAAM,UAAO,OAAO,KAAa,WAAW;GAAE,MAAM;GAAU,IAAI;EAAS,IAAI;GAAE,MAAM,EAAS;GAAM,IAAI,EAAS;EAAG,GACxH,IAAoB,IACpB,IAAqB;EAOzB,KANcI,GAAW,CAAO,IAAI,IAAU,CAAC,CAAO,GAChD,SAAS,MAAS;GAGtB,AAFA,EAAK,MAAM,GACX,IAAoB,IAAoB,EAAK,UAAU,EAAK,MAAM,WAAW,IAAI,IACjF,IAAqB,IAAqB,EAAK,UAAU;EAC3D,CAAC,GACG,MAAS,KAAM,GAAoB;GACrC,IAAM,EAAE,cAAW,EAAG,IAAI,QAAQ,CAAI;GAEtC,AADyB,EAAO,eAAe,CAAC,EAAO,KAAK,KAAK,QAAQ,CAAC,EAAO,eAE/E,KACA,KAAM;EAEV;EACA,IAAI;EACJ,IAAI,GAAmB;GACrB,IAAI,MAAM,QAAQ,CAAK,GACrB,IAAa,EAAM,KAAK,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE;QAC9C,IAAI,aAAiBC,GAAW;IACrC,IAAI,IAAO;IAMX,AALA,EAAM,SAAS,MAAS;KACtB,AAAI,EAAK,SACP,KAAQ,EAAK;IAEjB,CAAC,GACD,IAAa;GACf,OAAO,AAGL,IAHS,OAAO,KAAU,YAAc,KAAW,EAAM,OAC5C,EAAM,OAEN;GAEf,EAAG,WAAW,GAAY,GAAM,CAAE;EACpC,OAAO;GACL,IAAa;GACb,IAAM,IAAQ,EAAG,IAAI,QAAQ,CAAI,GAC3B,IAAY,EAAM,KAAK,GACvB,IAAuB,EAAM,iBAAiB,GAC9C,IAAmB,EAAU,UAAU,EAAU,aACjD,IAAa,EAAU,QAAQ,OAAO;GAI5C,AAHI,KAAwB,KAAoB,KAAc,MAC5D,IAAO,KAAK,IAAI,GAAG,IAAO,CAAC,IAE7B,EAAG,YAAY,GAAM,GAAI,CAAU;EACrC;EAOA,AANI,EAAQ,mBACV,GAAwB,GAAI,EAAG,MAAM,SAAS,GAAG,EAAE,GAEjD,EAAQ,mBACV,EAAG,QAAQ,mBAAmB;GAAE;GAAM,MAAM;EAAW,CAAC,GAEtD,EAAQ,mBACV,EAAG,QAAQ,mBAAmB;GAAE;GAAM,MAAM;EAAW,CAAC;CAE5D;CACA,OAAO;AACT,GASI9D,YAAgB,EAAE,UAAO,kBACpB+D,GAAe,GAAO,CAAQ,GAEnCrE,YAAkB,EAAE,UAAO,kBACtBsE,GAAiB,GAAO,CAAQ,GAErCvE,YAAsB,EAAE,UAAO,kBAC1BwE,GAAqB,GAAO,CAAQ,GAEzCtE,YAAqB,EAAE,UAAO,kBACzBuE,GAAoB,GAAO,CAAQ,GAKxCtE,YAA0B,EAAE,UAAO,aAAU,YAAS;CACxD,IAAI;EACF,IAAM,IAAQ,EAAU,EAAM,KAAK,EAAM,UAAU,MAAM,KAAK,EAAE;EAQhE,OAPI,KAAU,OACL,MAET,EAAG,KAAK,GAAO,CAAC,GACZ,KACF,EAAS,CAAE,GAEN;CACT,QAAQ;EACN,OAAO;CACT;AACF,GAIIC,YAAyB,EAAE,UAAO,aAAU,YAAS;CACvD,IAAI;EACF,IAAM,IAAQsE,EAAW,EAAM,KAAK,EAAM,UAAU,MAAM,KAAK,CAAC;EAQhE,OAPI,KAAU,OACL,MAET,EAAG,KAAK,GAAO,CAAC,GACZ,KACF,EAAS,CAAE,GAEN;CACT,QAAQ;EACN,OAAO;CACT;AACF,GAIIrE,YAA+B,EAAE,UAAO,kBACnCsE,GAAgB,GAAO,CAAQ,GAKpCrE,YAA8B,EAAE,UAAO,kBAClCsE,GAAiB,GAAO,CAAQ;AAIzC,SAASC,KAAU;CACjB,OAAO,OAAO,YAAc,MAAc,MAAM,KAAK,UAAU,QAAQ,IAAI;AAC7E;AAGA,SAASC,GAAiB,GAAM;CAC9B,IAAM,IAAQ,EAAK,MAAM,QAAQ,GAC7B,IAAS,EAAM,EAAM,SAAS;CAClC,AAAI,MAAW,YACb,IAAS;CAEX,IAAI,GACA,GACA,GACA;CACJ,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,SAAS,GAAG,KAAK,GAAG;EAC5C,IAAM,IAAM,EAAM;EAClB,IAAI,kBAAkB,KAAK,CAAG,GAC5B,IAAO;OACF,IAAI,YAAY,KAAK,CAAG,GAC7B,IAAM;OACD,IAAI,sBAAsB,KAAK,CAAG,GACvC,IAAO;OACF,IAAI,cAAc,KAAK,CAAG,GAC/B,IAAQ;OACH,IAAI,SAAS,KAAK,CAAG,GAC1B,AAAIlB,GAAM,KAAKiB,GAAQ,IACrB,IAAO,KAEP,IAAO;OAGT,MAAU,MAAM,+BAA+B,GAAK;CAExD;CAaA,OAZI,MACF,IAAS,OAAO,MAEd,MACF,IAAS,QAAQ,MAEf,MACF,IAAS,QAAQ,MAEf,MACF,IAAS,SAAS,MAEb;AACT;AACA,IAAIrE,MAAoB,OAAU,EAAE,WAAQ,SAAM,OAAI,kBAAe;CACnE,IAAM,IAAOsE,GAAiB,CAAI,EAAE,MAAM,QAAQ,GAC5C,IAAM,EAAK,MAAM,MAAS,CAAC;EAAC;EAAO;EAAQ;EAAQ;CAAO,EAAE,SAAS,CAAI,CAAC,GAC1E,IAAQ,IAAI,cAAc,WAAW;EACzC,KAAK,MAAQ,UAAU,MAAM;EAC7B,QAAQ,EAAK,SAAS,KAAK;EAC3B,SAAS,EAAK,SAAS,MAAM;EAC7B,SAAS,EAAK,SAAS,MAAM;EAC7B,UAAU,EAAK,SAAS,OAAO;EAC/B,SAAS;EACT,YAAY;CACd,CAAC;CAUD,OANA,EAHmC,yBAAyB;EAC1D,EAAK,SAAS,kBAAkB,MAAM,EAAE,GAAM,CAAK,CAAC;CACtD,CACkB,GAAyC,MAAM,SAAS,MAAS;EACjF,IAAM,IAAU,EAAK,IAAI,EAAG,OAAO;EACnC,AAAI,KAAW,KACb,EAAG,UAAU,CAAO;CAExB,CAAC,GACM;AACT;AAMA,SAASC,GAAa,GAAO,GAAY,IAAa,CAAC,GAAG;CACxD,IAAM,EAAE,SAAM,OAAI,aAAU,EAAM,WAC5B,IAAO,IAAapC,EAAY,GAAY,EAAM,MAAM,IAAI,MAC5D,IAAa,CAAC;CACpB,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EAC9C,IAAI,EAAK,QACP;EAEF,IAAM,IAAe,KAAK,IAAI,GAAM,CAAG,GACjC,IAAa,KAAK,IAAI,GAAI,IAAM,EAAK,QAAQ;EACnD,EAAW,KAAK;GACd;GACA,MAAM;GACN,IAAI;EACN,CAAC;CACH,CAAC;CACD,IAAM,IAAiB,IAAK,GACtB,IAAoB,EAAW,QAAQ,MACtC,IAGE,EAAK,SAAS,EAAU,KAAK,KAAK,OAFhC,EAGV,EAAE,QAAQ,MAAcI,GAAe,EAAU,KAAK,OAAO,GAAY,EAAE,QAAQ,GAAM,CAAC,CAAC;CAK5F,OAJI,IACK,CAAC,CAAC,EAAkB,SAEf,EAAkB,QAAQ,GAAK,MAAc,IAAM,EAAU,KAAK,EAAU,MAAM,CACrF,KAAK;AAClB;AAGA,IAAItC,MAAQ,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAElCsE,GAAa,GADlBpC,EAAY,GAAY,EAAM,MACF,GAAG,CAC/B,IAGNqC,EAAa,GAAO,CAAQ,IAF1B,IAOPtE,YAAwB,EAAE,UAAO,kBAC5BuE,EAAuB,GAAO,CAAQ,GAK3CtE,MAAgB,OAAgB,EAAE,UAAO,kBAEpCuE,GADMvC,EAAY,GAAY,EAAM,MACZ,CAAC,EAAE,GAAO,CAAQ,GAK/C/B,YAAuB,EAAE,UAAO,kBAC3BuE,GAAsB,GAAO,CAAQ;AAI9C,SAASC,GAAwB,GAAM,GAAQ;CAO7C,OANI,EAAO,MAAM,KACR,SAEL,EAAO,MAAM,KACR,SAEF;AACT;AAGA,SAASC,GAAY,GAAK,GAAa;CACrC,IAAM,IAAQ,OAAO,KAAgB,WAAW,CAAC,CAAW,IAAI;CAChE,OAAO,OAAO,KAAK,CAAG,EAAE,QAAQ,GAAQ,OACjC,EAAM,SAAS,CAAI,MACtB,EAAO,KAAQ,EAAI,KAEd,IACN,CAAC,CAAC;AACP;AAGA,IAAIxE,MAAmB,GAAY,OAAgB,EAAE,OAAI,UAAO,kBAAe;CAC7E,IAAI,IAAW,MACX,IAAW,MACT,IAAauE,GACjB,OAAO,KAAe,WAAW,IAAa,EAAW,MACzD,EAAM,MACR;CACA,IAAI,CAAC,GACH,OAAO;CAKT,AAHI,MAAe,WACjB,IAAWzC,EAAY,GAAY,EAAM,MAAM,IAE7C,MAAe,WACjB,IAAWQ,EAAY,GAAY,EAAM,MAAM;CAEjD,IAAI,IAAW;CAqBf,OApBA,EAAG,UAAU,OAAO,SAAS,MAAU;EACrC,EAAM,IAAI,aAAa,EAAM,MAAM,KAAK,EAAM,IAAI,MAAM,GAAM,MAAQ;GAOpE,AANI,KAAY,MAAa,EAAK,SAChC,IAAW,IACP,KACF,EAAG,cAAc,GAAK,KAAK,GAAGkC,GAAY,EAAK,OAAO,CAAU,CAAC,IAGjE,KAAY,EAAK,MAAM,UACzB,EAAK,MAAM,SAAS,MAAS;IAC3B,AAAI,MAAa,EAAK,SACpB,IAAW,IACP,KACF,EAAG,QAAQ,GAAK,IAAM,EAAK,UAAU,EAAS,OAAOA,GAAY,EAAK,OAAO,CAAU,CAAC,CAAC;GAG/F,CAAC;EAEL,CAAC;CACH,CAAC,GACM;AACT,GAGIvE,YAAwB,EAAE,OAAI,mBAC5B,KACF,EAAG,eAAe,GAEb,KAKLC,YAAmB,EAAE,OAAI,kBAAe;CAC1C,IAAI,GAAU;EACZ,IAAM,IAAY,IAAI,EAAa,EAAG,GAAG;EACzC,EAAG,aAAa,CAAS;CAC3B;CACA,OAAO;AACT,GAIIC,YAA4B,EAAE,UAAO,kBAChCsE,EAA2B,GAAO,CAAQ,GAK/CrE,YAA2B,EAAE,UAAO,kBAC/BsE,EAA0B,GAAO,CAAQ,GAK9CrE,YAA0B,EAAE,UAAO,kBAC9BsE,EAAyB,GAAO,CAAQ,GAK7CrE,YAA4B,EAAE,UAAO,kBAChCsE,EAA2B,GAAO,CAAQ,GAK/CrE,YAA8B,EAAE,UAAO,kBAClCsE,GAA6B,GAAO,CAAQ;AAIrD,SAASC,GAAe,GAAS,GAAQ,IAAe,CAAC,GAAG,IAAU,CAAC,GAAG;CACxE,OAAO3B,GAAsB,GAAS,GAAQ;EAC5C,OAAO;EACP;EACA,uBAAuB,EAAQ;CACjC,CAAC;AACH;AAGA,IAAI3C,MAAc,GAAS,EAAE,0BAAuB,gBAAa,IAAM,kBAAe,CAAC,MAAM,CAAC,OAAO,EAAE,WAAQ,OAAI,aAAU,kBAAe;CAC1I,IAAM,EAAE,WAAQ;CAChB,IAAI,EAAa,uBAAuB,QAAQ;EAC9C,IAAM,IAAYsE,GAAe,GAAS,EAAO,QAAQ,GAAc,EACrE,uBAAuB,KAAwD,EAAO,QAAQ,mBAChG,CAAC;EAID,OAHI,KACF,EAAG,YAAY,GAAG,EAAI,QAAQ,MAAM,CAAS,EAAE,QAAQ,iBAAiB,CAAC,CAAU,GAE9E;CACT;CAIA,OAHI,KACF,EAAG,QAAQ,iBAAiB,CAAC,CAAU,GAElC,EAAS,gBAAgB;EAAE,MAAM;EAAG,IAAI,EAAI,QAAQ;CAAK,GAAG,GAAS;EAC1E;EACA,uBAAuB,KAAwD,EAAO,QAAQ;CAChG,CAAC;AACH;AAGA,SAASC,GAAkB,GAAO,GAAY;CAC5C,IAAM,IAAOzC,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,SAAM,OAAI,aAAU,EAAM,WAC5B,IAAQ,CAAC;CACf,AAAI,KACE,EAAM,eACR,EAAM,KAAK,GAAG,EAAM,WAAW,GAEjC,EAAM,KAAK,GAAG,EAAM,UAAU,MAAM,MAAM,CAAC,KAE3C,EAAM,IAAI,aAAa,GAAM,IAAK,MAAS;EACzC,EAAM,KAAK,GAAG,EAAK,KAAK;CAC1B,CAAC;CAEH,IAAM,IAAO,EAAM,MAAM,MAAa,EAAS,KAAK,SAAS,EAAK,IAAI;CAItE,OAHK,IAGE,EAAE,GAAG,EAAK,MAAM,IAFd,CAAC;AAGZ;AAIA,SAAS0C,GAAwB,GAAQ,GAAc;CACrD,IAAM,IAAY,IAAI,EAAU,CAAM;CAMtC,OALA,EAAa,SAAS,MAAgB;EACpC,EAAY,MAAM,SAAS,MAAS;GAClC,EAAU,KAAK,CAAI;EACrB,CAAC;CACH,CAAC,GACM;AACT;AAGA,SAASC,GAAe,GAAO;CAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,WAAW,KAAK,GAAG;EAC3C,IAAM,EAAE,YAAS,EAAM,KAAK,CAAC;EAC7B,IAAI,EAAK,eAAe,CAAC,EAAK,iBAAiB,GAC7C,OAAO;CAEX;CACA,OAAO;AACT;AAGA,SAAS,GAAa,GAAM,GAAW;CACrC,IAAM,IAAe,CAAC;CAStB,OARA,EAAK,aAAa,GAAO,MAAQ;EAC/B,AAAI,EAAU,CAAK,KACjB,EAAa,KAAK;GAChB,MAAM;GACN;EACF,CAAC;CAEL,CAAC,GACM;AACT;AAGA,SAASC,GAAoB,GAAM,GAAO,GAAW;CACnD,IAAM,IAAe,CAAC;CAStB,OARA,EAAK,aAAa,EAAM,MAAM,EAAM,KAAK,GAAO,MAAQ;EACtD,AAAI,EAAU,CAAK,KACjB,EAAa,KAAK;GAChB,MAAM;GACN;EACF,CAAC;CAEL,CAAC,GACM;AACT;AAGA,SAASC,GAA2B,GAAM,GAAW;CACnD,KAAK,IAAI,IAAI,EAAK,OAAO,IAAI,GAAG,KAAQ;EACtC,IAAM,IAAO,EAAK,KAAK,CAAC;EACxB,IAAI,EAAU,CAAI,GAChB,OAAO;GACL,KAAK,IAAI,IAAI,EAAK,OAAO,CAAC,IAAI;GAC9B,OAAO,EAAK,MAAM,CAAC;GACnB,OAAO;GACP;EACF;CAEJ;AACF;AAGA,SAASC,GAAe,GAAW;CACjC,QAAQ,MAAcD,GAA2B,EAAU,OAAO,CAAS;AAC7E;AAGA,SAASE,EAAkB,GAAW,GAAO,GAAS;CAWpD,OAVI,EAAU,OAAO,OAAW,KAAK,KAAK,EAAU,SAC3CA,EAAkB,EAAU,QAAQ,GAAO,CAAO,IAEvD,OAAO,EAAU,OAAO,MAAW,aACvB,EAAU,OAAO,GAAO,KAAK;EACzC,GAAG;EACH,QAAQ,EAAU,SAASA,EAAkB,EAAU,QAAQ,GAAO,CAAO,IAAI;CACnF,CACW,IAEN,EAAU,OAAO;AAC1B;AAGA,SAASC,GAAkB,GAAY;CACrC,OAAO,EAAW,KAAK,MAAc;EAMnC,IAAM,IAAgBD,EAAkB,GAAW,iBAAiB;GAJlE,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;EAEqD,CAAC;EAI3E,OAHI,IACK,CAAC,GAAW,GAAGC,GAAkB,EAAc,CAAC,CAAC,IAEnD;CACT,CAAC,EAAE,KAAK,EAAE;AACZ;AAOA,SAASC,GAAoB,GAAU,GAAQ;CAC7C,IAAM,IAAmB,GAAc,WAAW,CAAM,EAAE,kBAAkB,CAAQ,GAE9E,IADoB,SAAS,eAAe,mBAChB,EAAE,cAAc,KAAK;CAEvD,OADA,EAAU,YAAY,CAAgB,GAC/B,EAAU;AACnB;AAMA,SAASC,GAAW,GAAO;CACzB,OAAO,OAAO,KAAU;AAC1B;AAGA,SAASC,EAAa,GAAO,IAAU,KAAK,GAAG,GAAG,GAAO;CAOvD,OANID,GAAW,CAAK,IACd,IACK,EAAM,KAAK,CAAO,EAAE,GAAG,CAAK,IAE9B,EAAM,GAAG,CAAK,IAEhB;AACT;AAGA,SAASE,GAAc,IAAQ,CAAC,GAAG;CACjC,OAAO,OAAO,KAAK,CAAK,EAAE,WAAW,KAAK,EAAM,gBAAgB;AAClE;AAGA,SAASC,GAAgB,GAAY;CAInC,OAAO;EACL,gBAJqB,EAAW,QAAQ,MAAc,EAAU,SAAS,WAI5D;EACb,gBAJqB,EAAW,QAAQ,MAAc,EAAU,SAAS,MAI5D;EACb,gBAJqB,EAAW,QAAQ,MAAc,EAAU,SAAS,MAI5D;CACf;AACF;AAGA,SAASC,GAA4B,GAAY;CAC/C,IAAM,IAAsB,CAAC,GACvB,EAAE,mBAAgB,sBAAmBD,GAAgB,CAAU,GAC/D,IAAwB,CAAC,GAAG,GAAgB,GAAG,CAAc,GAC7D,IAAmB;EACvB,SAAS;EACT,UAAU,KAAK;EACf,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,YAAY;CACd,GACM,IAAqB,EAAe,QAAQ,MAAQ,EAAI,SAAS,MAAM,EAAE,KAAK,MAAQ,EAAI,IAAI,GAC9F,IAAqB,EAAe,KAAK,MAAQ,EAAI,IAAI,GACzD,IAAoB,CAAC,GAAG,GAAoB,GAAG,CAAkB;CA6EvE,OA5EA,EAAW,SAAS,MAAc;EAOhC,IAAM,IAAsBN,EAC1B,GACA,uBACA;GARA,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;GACnB,YAAY;EAKN,CACR;EACK,KAIL,EAAe,EAAE,SAAS,MAAoB;GAC5C,IAAI;GAYJ,AAXA,AASE,IATE,MAAM,QAAQ,EAAgB,KAAK,IACrB,EAAgB,QACvB,EAAgB,UAAU,MACnB,IACP,EAAgB,UAAU,UACnB,IACP,EAAgB,UAAU,UACnB,IAEA,CAAC,GAEnB,EAAc,SAAS,MAAS;IAC9B,OAAO,QAAQ,EAAgB,UAAU,EAAE,SAAS,CAAC,GAAM,OAAe;KACxE,EAAoB,KAAK;MACvB;MACA;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;KACF,CAAC;IACH,CAAC;GACH,CAAC;EACH,CAAC;CACH,CAAC,GACD,EAAsB,SAAS,MAAc;EAM3C,IAAM,IAAgBA,EACpB,GACA,iBACA;GAPA,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;EAKb,CACR;EACA,IAAI,CAAC,GACH;EAEF,IAAM,IAAa,EAAc;EACjC,OAAO,QAAQ,CAAU,EAAE,SAAS,CAAC,GAAM,OAAe;GACxD,IAAM,IAAa;IACjB,GAAG;IACH,GAAG;GACL;GAOA,AANI,OAAQ,GAAyC,WAAa,eAChE,EAAW,UAAU,EAAW,QAAQ,IAErC,GAAyC,cAAgB,GAAyC,YAAa,KAAK,KACvH,OAAO,EAAW,SAEpB,EAAoB,KAAK;IACvB,MAAM,EAAU;IAChB;IACA,WAAW;GACb,CAAC;EACH,CAAC;CACH,CAAC,GACM;AACT;AAGA,SAASQ,GAAuB,GAAQ;CACtC,IAAM,IAAS,CAAC,GACZ,IAAU,IACV,IAAgB,IAChB,IAAgB,IAChB,IAAa,GACX,IAAS,EAAO;CACtB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAQ,KAAK,GAAG;EAClC,IAAM,IAAO,EAAO;EACpB,IAAI,MAAS,OAAO,CAAC,GAAe;GAElC,AADA,IAAgB,CAAC,GACjB,KAAW;GACX;EACF;EACA,IAAI,MAAS,QAAO,CAAC,GAAe;GAElC,AADA,IAAgB,CAAC,GACjB,KAAW;GACX;EACF;EACA,IAAI,CAAC,KAAiB,CAAC,GAAe;GACpC,IAAI,MAAS,KAAK;IAEhB,AADA,KAAc,GACd,KAAW;IACX;GACF;GACA,IAAI,MAAS,OAAO,IAAa,GAAG;IAElC,AADA,KACA,KAAW;IACX;GACF;GACA,IAAI,MAAS,OAAO,MAAe,GAAG;IAEpC,AADA,EAAO,KAAK,CAAO,GACnB,IAAU;IACV;GACF;EACF;EACA,KAAW;CACb;CAIA,OAHI,KACF,EAAO,KAAK,CAAO,GAEd;AACT;AACA,SAASC,GAAkB,GAAQ;CACjC,IAAM,IAAQ,CAAC,GACT,IAAeD,GAAuB,KAAU,EAAE,GAClD,IAAkB,EAAa;CACrC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAiB,KAAK,GAAG;EAC3C,IAAM,IAAc,EAAa,IAC3B,IAAkB,EAAY,QAAQ,GAAG;EAC/C,IAAI,MAAoB,IACtB;EAEF,IAAM,IAAW,EAAY,MAAM,GAAG,CAAe,EAAE,KAAK,GACtD,IAAQ,EAAY,MAAM,IAAkB,CAAC,EAAE,KAAK;EAC1D,AAAI,KAAY,KACd,EAAM,KAAK,CAAC,GAAU,CAAK,CAAC;CAEhC;CACA,OAAO;AACT;AACA,SAASE,GAAgB,GAAG,GAAS;CACnC,OAAO,EAAQ,QAAQ,MAAS,CAAC,CAAC,CAAI,EAAE,QAAQ,GAAO,MAAS;EAC9D,IAAM,IAAmB,EAAE,GAAG,EAAM;EAmBpC,OAlBA,OAAO,QAAQ,CAAI,EAAE,SAAS,CAAC,GAAK,OAAW;GAE7C,IAAI,CADW,EAAiB,IACnB;IACX,EAAiB,KAAO;IACxB;GACF;GACA,IAAI,MAAQ,SAAS;IACnB,IAAM,IAAe,IAAQ,OAAO,CAAK,EAAE,MAAM,GAAG,IAAI,CAAC,GACnD,IAAkB,EAAiB,KAAO,EAAiB,GAAK,MAAM,GAAG,IAAI,CAAC,GAC9E,IAAgB,EAAa,QAAQ,MAAe,CAAC,EAAgB,SAAS,CAAU,CAAC;IAC/F,EAAiB,KAAO,CAAC,GAAG,GAAiB,GAAG,CAAa,EAAE,KAAK,GAAG;GACzE,OAAO,IAAI,MAAQ,SAAS;IAC1B,IAAM,IAAW,IAAI,IAAI,CAAC,GAAGD,GAAkB,EAAiB,EAAI,GAAG,GAAGA,GAAkB,CAAK,CAAC,CAAC;IACnG,EAAiB,KAAO,MAAM,KAAK,EAAS,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAU,OAAS,GAAG,EAAS,IAAI,GAAK,EAAE,KAAK,IAAI;GAClH,OACE,EAAiB,KAAO;EAE5B,CAAC,GACM;CACT,GAAG,CAAC,CAAC;AACP;AAGA,SAASE,GAAsB,GAAY,GAAqB;CAC9D,OAAO,EAAoB,QAAQ,MAAc,EAAU,SAAS,EAAW,KAAK,IAAI,EAAE,QAAQ,MAAS,EAAK,UAAU,QAAQ,EAAE,KAAK,MAClI,EAAK,UAAU,aAKb,EAAK,UAAU,WAAW,EAAW,KAAK,KAAK,CAAC,IAJ9C,GACJ,EAAK,OAAO,EAAW,MAAM,EAAK,MACrC,CAGH,EAAE,QAAQ,GAAY,MAAcD,GAAgB,GAAY,CAAS,GAAG,CAAC,CAAC;AACjF;AAGA,SAASE,GAAW,GAAO;CAazB,OAZI,OAAO,KAAU,WAGjB,EAAM,MAAM,sBAAsB,IAC7B,OAAO,CAAK,IAEjB,MAAU,SACL,KAEL,MAAU,UACL,KAEF,IAXE;AAYX;AAGA,SAASC,GAAqC,GAAW,GAAqB;CAI5E,OAHI,WAAW,IACN,IAEF;EACL,GAAG;EACH,WAAW,MAAS;GAClB,IAAM,IAAgB,EAAU,WAAW,EAAU,SAAS,CAAI,IAAI,EAAU;GAChF,IAAI,MAAkB,IACpB,OAAO;GAET,IAAM,IAAgB,EAAoB,QAAQ,GAAO,MAAS;IAChE,IAAM,IAAQ,EAAK,UAAU,YAAY,EAAK,UAAU,UAAU,CAAI,IAAID,GAAW,EAAK,aAAa,EAAK,IAAI,CAAC;IAIjH,OAHI,KAAU,OACL,IAEF;KACL,GAAG;MACF,EAAK,OAAO;IACf;GACF,GAAG,CAAC,CAAC;GACL,OAAO;IAAE,GAAG;IAAe,GAAG;GAAc;EAC9C;CACF;AACF;AAGA,SAASE,GAAkB,GAAM;CAC/B,OAAO,OAAO,YAEZ,OAAO,QAAQ,CAAI,EAAE,QAAQ,CAAC,GAAK,OAC7B,MAAQ,WAAWT,GAAc,CAAK,IACjC,KAEF,KAAU,IAClB,CACH;AACF;AACA,SAASU,GAAmB,GAAoB;CAE9C,IAAM,IAAO,CAAC;CAOd,OANI,CAAQ,GAAyD,WAAiC,cAAe,cAAe,GAAyD,aAAc,CAAC,OAC1M,EAAK,UAAU,EAAmB,UAAU,UAEnC,GAAyD,WAAiC,aAAc,KAAK,MACtH,EAAK,WAAW,EAAmB,UAAU,WAExC,CAAC,EAAmB,MAAM,CAAI;AACvC;AACA,SAASC,GAA8B,GAAY,GAAQ;CAEzD,IAAM,IAAgBT,GAA4B,CAAU,GACtD,EAAE,mBAAgB,sBAAmBD,GAAgB,CAAU;CAiGrE,OAAO,IAAIW,EAAQ;EACjB,SAjGoB,EAAe,MAAM,MAAcjB,EAAkB,GAAW,SAAS,CAAC,GAAyB;EAkGvH,OAjGY,OAAO,YACnB,EAAe,KAAK,MAAc;GAChC,IAAM,IAAsB,EAAc,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAC3F,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,EAAU;IACnB;GACF,GAQM,IAASc,GAAkB;IAC/B,GARsB,EAAW,QAAQ,GAAQ,MAAM;KACvD,IAAM,IAAmBd,EAAkB,GAAG,oBAAoB,CAAO;KACzE,OAAO;MACL,GAAG;MACH,GAAG,IAAmB,EAAiB,CAAS,IAAI,CAAC;KACvD;IACF,GAAG,CAAC,CAEe;IACjB,SAASI,EAAaJ,EAAkB,GAAW,WAAW,CAAO,CAAC;IACtE,OAAOI,EAAaJ,EAAkB,GAAW,SAAS,CAAO,CAAC;IAClE,OAAOI,EAAaJ,EAAkB,GAAW,SAAS,CAAO,CAAC;IAClE,QAAQI,EAAaJ,EAAkB,GAAW,UAAU,CAAO,CAAC;IACpE,MAAMI,EAAaJ,EAAkB,GAAW,QAAQ,CAAO,CAAC;IAChE,YAAYI,EAAaJ,EAAkB,GAAW,cAAc,CAAO,CAAC;IAC5E,WAAWI,EAAaJ,EAAkB,GAAW,aAAa,CAAO,CAAC;IAC1E,MAAMI,EAAaJ,EAAkB,GAAW,QAAQ,CAAO,CAAC;IAChE,YAAYI,EAAaJ,EAAkB,GAAW,cAAc,CAAO,CAAC;IAC5E,sBAAsBI,EACpBJ,EAAkB,GAAW,wBAAwB,CAAO,CAC9D;IACA,UAAUI,EAAaJ,EAAkB,GAAW,YAAY,CAAO,CAAC;IACxE,WAAWI,EAAaJ,EAAkB,GAAW,aAAa,CAAO,CAAC;IAC1E,OAAO,OAAO,YAAY,EAAoB,IAAIe,EAAkB,CAAC;GACvE,CAAC,GACK,IAAYX,EAAaJ,EAAkB,GAAW,aAAa,CAAO,CAAC;GACjF,AAAI,MACF,EAAO,WAAW,EAAU,KACzB,MAAca,GAAqC,GAAW,CAAmB,CACpF;GAEF,IAAM,IAAab,EAAkB,GAAW,cAAc,CAAO;GACrE,AAAI,MACF,EAAO,SAAS,MAAS,EAAW;IAClC;IACA,gBAAgBW,GAAsB,GAAM,CAAmB;GACjE,CAAC;GAEH,IAAM,IAAaX,EAAkB,GAAW,cAAc,CAAO;GAIrE,OAHI,MACF,EAAO,SAAS,IAEX,CAAC,EAAU,MAAM,CAAM;EAChC,CAAC,CA6CG;EACJ,OA5CY,OAAO,YACnB,EAAe,KAAK,MAAc;GAChC,IAAM,IAAsB,EAAc,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAC3F,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,EAAU;IACnB;GACF,GAQM,IAASc,GAAkB;IAC/B,GARsB,EAAW,QAAQ,GAAQ,MAAM;KACvD,IAAM,IAAmBd,EAAkB,GAAG,oBAAoB,CAAO;KACzE,OAAO;MACL,GAAG;MACH,GAAG,IAAmB,EAAiB,CAAS,IAAI,CAAC;KACvD;IACF,GAAG,CAAC,CAEe;IACjB,WAAWI,EAAaJ,EAAkB,GAAW,aAAa,CAAO,CAAC;IAC1E,UAAUI,EAAaJ,EAAkB,GAAW,YAAY,CAAO,CAAC;IACxE,OAAOI,EAAaJ,EAAkB,GAAW,SAAS,CAAO,CAAC;IAClE,UAAUI,EAAaJ,EAAkB,GAAW,YAAY,CAAO,CAAC;IACxE,MAAMI,EAAaJ,EAAkB,GAAW,QAAQ,CAAO,CAAC;IAChE,OAAO,OAAO,YAAY,EAAoB,IAAIe,EAAkB,CAAC;GACvE,CAAC,GACK,IAAYX,EAAaJ,EAAkB,GAAW,aAAa,CAAO,CAAC;GACjF,AAAI,MACF,EAAO,WAAW,EAAU,KACzB,MAAca,GAAqC,GAAW,CAAmB,CACpF;GAEF,IAAM,IAAab,EAAkB,GAAW,cAAc,CAAO;GAOrE,OANI,MACF,EAAO,SAAS,MAAS,EAAW;IAClC;IACA,gBAAgBW,GAAsB,GAAM,CAAmB;GACjE,CAAC,IAEI,CAAC,EAAU,MAAM,CAAM;EAChC,CAAC,CAKG;CACN,CAAC;AACH;AAGA,SAASO,GAAe,GAAO;CAC7B,IAAM,IAAW,EAAM,QAAQ,GAAI,MAAU,EAAM,QAAQ,CAAE,MAAM,CAAK;CACxE,OAAO,MAAM,KAAK,IAAI,IAAI,CAAQ,CAAC;AACrC;AAGA,SAASC,GAAe,GAAY;CAElC,OAAO,EAAW,MAAM,GAAG,MAAM;EAC/B,IAAM,IAAYnB,EAAkB,GAAG,UAAU,KAAK,KAChD,IAAYA,EAAkB,GAAG,UAAU,KAAK;EAOtD,OANI,IAAY,IACP,KAET,EAAI,IAAY;CAIlB,CAAC;AACH;AAGA,SAASoB,GAAkB,GAAY;CACrC,IAAM,IAAqBD,GAAelB,GAAkB,CAAU,CAAC,GACjE,IAAkBiB,GAAe,EAAmB,KAAK,MAAc,EAAU,IAAI,CAAC;CAM5F,OALI,EAAgB,UAClB,QAAQ,KACN,oDAAoD,EAAgB,KAAK,MAAS,IAAI,EAAK,EAAE,EAAE,KAAK,IAAI,EAAE,4BAC5G,GAEK;AACT;AA2BA,SAASG,GAAe,GAAW,GAAO,GAAS;CACjD,IAAM,EAAE,SAAM,UAAO,GACf,EAAE,oBAAiB,QAAQ,qBAAkB,CAAC,MAAM,KAAW,CAAC,GAClE,IAAO;CAuBX,OAtBA,EAAU,aAAa,GAAM,IAAK,GAAM,GAAK,GAAQ,MAAU;EAE7D,AAAI,EAAK,WAAW,IAAM,MACxB,KAAQ;EAEV,IAAM,IAAiB,IAAmD,EAAK,KAAK;EACpF,IAAI,GAUF,OATI,MACF,KAAQ,EAAe;GACrB;GACA;GACA;GACA;GACA;EACF,CAAC,IAEI;EAET,AAAI,EAAK,WACP,MAAc,GAA6B,OAA4B,MAAM,KAAK,IAAI,GAAM,CAAG,IAAI,GAAK,IAAK,CAAG;CAEpH,CAAC,GACM;AACT;AAGA,SAAS,GAAQ,GAAM,GAAS;CAK9B,OAAOA,GAAe,GAAM;EAH1B,MAAM;EACN,IAAI,EAAK,QAAQ;CAEa,GAAG,CAAO;AAC5C;AAGA,SAASC,GAA6B,GAAQ;CAC5C,OAAO,OAAO,YACZ,OAAO,QAAQ,EAAO,KAAK,EAAE,QAAQ,GAAG,OAAU,EAAK,KAAK,MAAM,EAAE,KAAK,CAAC,GAAM,OAAU,CAAC,GAAM,EAAK,KAAK,MAAM,CAAC,CACpH;AACF;AAiBA,SAASC,GAAkB,GAAO,GAAY;CAC5C,IAAM,IAAO9E,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,SAAM,UAAO,EAAM,WACrB,IAAQ,CAAC;CACf,EAAM,IAAI,aAAa,GAAM,IAAK,MAAU;EAC1C,EAAM,KAAK,CAAK;CAClB,CAAC;CACD,IAAM,IAAO,EAAM,QAAQ,EAAE,MAAM,MAAa,EAAS,KAAK,SAAS,EAAK,IAAI;CAIhF,OAHK,IAGE,EAAE,GAAG,EAAK,MAAM,IAFd,CAAC;AAGZ;AAGA,SAAS+E,GAAc,GAAO,GAAY;CACxC,IAAM,IAAatC,GACjB,OAAO,KAAe,WAAW,IAAa,EAAW,MACzD,EAAM,MACR;CAOA,OANI,MAAe,SACVqC,GAAkB,GAAO,CAAU,IAExC,MAAe,SACV7B,GAAkB,GAAO,CAAU,IAErC,CAAC;AACV;AAGA,SAAS+B,GAAiB,GAAO,IAAK,KAAK,WAAW;CACpD,IAAM,IAAO,CAAC;CACd,OAAO,EAAM,QAAQ,MAAS;EAC5B,IAAM,IAAM,EAAG,CAAI;EACnB,OAAO,OAAO,UAAU,eAAe,KAAK,GAAM,CAAG,IAAI,KAAQ,EAAK,KAAO;CAC/E,CAAC;AACH;AAGA,SAASC,GAAsB,GAAS;CACtC,IAAM,IAAgBD,GAAiB,CAAO;CAC9C,OAAO,EAAc,WAAW,IAAI,IAAgB,EAAc,QAAQ,GAAQ,MAEzE,CADM,EAAc,QAAQ,GAAG,MAAM,MAAM,CACvC,EAAE,MAAM,MACV,EAAO,SAAS,QAAQ,EAAY,SAAS,QAAQ,EAAO,SAAS,MAAM,EAAY,SAAS,MAAM,EAAO,SAAS,QAAQ,EAAY,SAAS,QAAQ,EAAO,SAAS,MAAM,EAAY,SAAS,EAC9M,CACF;AACH;AACA,SAASE,GAAiB,GAAW;CACnC,IAAM,EAAE,YAAS,aAAU,GACrB,IAAU,CAAC;CA+BjB,OA9BA,EAAQ,KAAK,SAAS,GAAS,MAAU;EACvC,IAAM,IAAS,CAAC;EAChB,IAAK,EAAQ,OAAO,QAOlB,EAAQ,SAAS,GAAM,MAAO;GAC5B,EAAO,KAAK;IAAE;IAAM;GAAG,CAAC;EAC1B,CAAC;OATyB;GAC1B,IAAM,EAAE,SAAM,UAAO,EAAM;GAC3B,IAAI,MAAS,KAAK,KAAK,MAAO,KAAK,GACjC;GAEF,EAAO,KAAK;IAAE;IAAM;GAAG,CAAC;EAC1B;EAKA,EAAO,SAAS,EAAE,SAAM,YAAS;GAC/B,IAAM,IAAW,EAAQ,MAAM,CAAK,EAAE,IAAI,GAAM,EAAE,GAC5C,IAAS,EAAQ,MAAM,CAAK,EAAE,IAAI,CAAE,GACpC,IAAW,EAAQ,OAAO,EAAE,IAAI,GAAU,EAAE,GAC5C,IAAS,EAAQ,OAAO,EAAE,IAAI,CAAM;GAC1C,EAAQ,KAAK;IACX,UAAU;KACR,MAAM;KACN,IAAI;IACN;IACA,UAAU;KACR,MAAM;KACN,IAAI;IACN;GACF,CAAC;EACH,CAAC;CACH,CAAC,GACMD,GAAsB,CAAO;AACtC;AA2CA,SAASE,GAAgB,GAAM,GAAI,GAAK;CACtC,IAAM,IAAQ,CAAC;CA2Bf,OA1BI,MAAS,IACX,EAAI,QAAQ,CAAI,EAAE,MAAM,EAAE,SAAS,MAAS;EAE1C,IAAM,IAAQ5E,GADD,EAAI,QAAQ,CACK,GAAG,EAAK,IAAI;EACrC,KAGL,EAAM,KAAK;GACT;GACA,GAAG;EACL,CAAC;CACH,CAAC,IAED,EAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EACpC,CAAC,KAAS,GAA6B,aAAc,KAAK,KAG9D,EAAM,KACJ,GAAG,EAAK,MAAM,KAAK,OAAU;GAC3B,MAAM;GACN,IAAI,IAAM,EAAK;GACf;EACF,EAAE,CACJ;CACF,CAAC,GAEI;AACT;AAmBA,SAAS6E,GAAoB,GAAM,GAAQ;CACzC,OAAO,EAAO,MAAM,MAAS,EAAO,MAAM,MAAS;AACrD;AAGA,SAASC,GAAsB,GAAqB,GAAU,GAAY;CACxE,OAAO,OAAO,YACZ,OAAO,QAAQ,CAAU,EAAE,QAAQ,CAAC,OAAU;EAC5C,IAAM,IAAqB,EAAoB,MAAM,MAC5C,EAAK,SAAS,KAAY,EAAK,SAAS,CAChD;EAID,OAHK,IAGE,EAAmB,UAAU,cAF3B;CAGX,CAAC,CACH;AACF;AAGA,IAAIC,MAA2B,GAAO,IAAW,QAAQ;CACvD,IAAI,IAAa,IACX,IAAc,EAAM;CAW1B,OAVA,EAAM,OAAO,aAAa,KAAK,IAAI,GAAG,IAAc,CAAQ,GAAG,IAAc,GAAM,GAAK,GAAQ,MAAU;EACxG,IAAI;EACJ,IAAM,KAAgB,IAAK,EAAK,KAAK,MAAM,QAA8B,KAAK,GAAI;GAChF;GACA;GACA;GACA;EACF,CAAC,KAAM,EAAK,eAAe;EAC3B,KAAc,EAAK,UAAU,CAAC,EAAK,SAAS,IAAQ,EAAM,MAAM,GAAG,KAAK,IAAI,GAAG,IAAc,CAAG,CAAC;CACnG,CAAC,GACM;AACT;AAGA,SAASC,GAAa,GAAO,GAAY,IAAa,CAAC,GAAG;CACxD,IAAM,EAAE,UAAO,cAAW,EAAM,WAC1B,IAAO,IAAa/E,EAAY,GAAY,EAAM,MAAM,IAAI;CAClE,IAAI,GACF,OAAO,CAAC,EAAE,EAAM,eAAe,EAAM,UAAU,MAAM,MAAM,GAAG,QAAQ,MAC/D,IAGE,EAAK,SAAS,EAAK,KAAK,OAFtB,EAGV,EAAE,MAAM,MAASJ,GAAe,EAAK,OAAO,GAAY,EAAE,QAAQ,GAAM,CAAC,CAAC;CAE7E,IAAI,IAAiB,GACf,IAAa,CAAC;CAwBpB,IAvBA,EAAO,SAAS,EAAE,UAAO,aAAU;EACjC,IAAM,IAAO,EAAM,KACb,IAAK,EAAI;EACf,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAC9C,IAAI,KAAQ,EAAK,iBAAiB,CAAC,EAAK,KAAK,eAAe,CAAI,GAC9D,OAAO;GAET,IAAI,CAAC,EAAK,UAAU,CAAC,EAAK,MAAM,QAC9B;GAEF,IAAM,IAAe,KAAK,IAAI,GAAM,CAAG,GACjC,IAAa,KAAK,IAAI,GAAI,IAAM,EAAK,QAAQ,GAC7C,IAAS,IAAa;GAE5B,AADA,KAAkB,GAClB,EAAW,KACT,GAAG,EAAK,MAAM,KAAK,OAAU;IAC3B;IACA,MAAM;IACN,IAAI;GACN,EAAE,CACJ;EACF,CAAC;CACH,CAAC,GACG,MAAmB,GACrB,OAAO;CAET,IAAM,IAAe,EAAW,QAAQ,MACjC,IAGE,EAAK,SAAS,EAAU,KAAK,KAAK,OAFhC,EAGV,EAAE,QAAQ,MAAcA,GAAe,EAAU,KAAK,OAAO,GAAY,EAAE,QAAQ,GAAM,CAAC,CAAC,EAAE,QAAQ,GAAK,MAAc,IAAM,EAAU,KAAK,EAAU,MAAM,CAAC,GACzJ,IAAgB,EAAW,QAAQ,MAClC,IAGE,EAAU,KAAK,SAAS,KAAQ,EAAU,KAAK,KAAK,SAAS,CAAI,IAF/D,EAGV,EAAE,QAAQ,GAAK,MAAc,IAAM,EAAU,KAAK,EAAU,MAAM,CAAC;CAEpE,QADc,IAAe,IAAI,IAAe,IAAgB,MAChD;AAClB;AAGA,SAAS,GAAS,GAAO,GAAM,IAAa,CAAC,GAAG;CAC9C,IAAI,CAAC,GACH,OAAOgC,GAAa,GAAO,MAAM,CAAU,KAAKmD,GAAa,GAAO,MAAM,CAAU;CAEtF,IAAM,IAAa9C,GAAwB,GAAM,EAAM,MAAM;CAO7D,OANI,MAAe,SACVL,GAAa,GAAO,GAAM,CAAU,IAEzC,MAAe,SACVmD,GAAa,GAAO,GAAM,CAAU,IAEtC;AACT;AAgCA,SAASC,GAAwB,GAAW,GAAS;CAOnD,OANI,MAAM,QAAQ,CAAO,IAChB,EAAQ,MAAM,OACN,OAAO,KAAqB,WAAW,IAAmB,EAAiB,UACxE,EAAU,IAC3B,IAEI;AACT;AAGA,SAASC,GAAO,GAAM,GAAY;CAChC,IAAM,EAAE,sBAAmB5B,GAAgB,CAAU,GAC/C,IAAY,EAAe,MAAM,MAAS,EAAK,SAAS,CAAI;CAClE,IAAI,CAAC,GACH,OAAO;CAOT,IAAM,IAAQF,EAAaJ,EAAkB,GAAW,SAAS;EAJ/D,MAAM,EAAU;EAChB,SAAS,EAAU;EACnB,SAAS,EAAU;CAEkD,CAAC,CAAC;CAIzE,OAHI,OAAO,KAAU,WAGd,EAAM,MAAM,GAAG,EAAE,SAAS,MAAM,IAF9B;AAGX;AAGA,SAASmC,GAAY,GAAM,EACzB,mBAAgB,IAChB,sBAAmB,OACjB,CAAC,GAAG;CAEN,IAAI,GAAkB;EACpB,IAAI,EAAK,KAAK,SAAS,aACrB,OAAO;EAET,IAAI,EAAK,QACP,OAAO,CAAC,KAAK,KAAW,EAAK,QAAqB,EAAE;CAExD;CACA,IAAI,EAAK,QACP,OAAO,CAAC,EAAK;CAEf,IAAI,EAAK,UAAU,EAAK,QACtB,OAAO;CAET,IAAI,EAAK,QAAQ,eAAe,GAC9B,OAAO;CAET,IAAI,GAAe;EACjB,IAAI,IAAiB;EASrB,OARA,EAAK,QAAQ,SAAS,MAAc;GAC9B,MAAmB,OAGlBA,GAAY,GAAW;IAAE;IAAkB;GAAc,CAAC,MAC7D,IAAiB;EAErB,CAAC,GACM;CACT;CACA,OAAO;AACT;AAIA,SAASC,GAAgB,GAAO;CAC9B,OAAO,aAAiB;AAC1B;AAoBA,IAAI,KAAmB,MAAM,EAAkB;CAC7C,YAAY,GAAU;EACpB,KAAK,WAAW;CAClB;CAIA,OAAO,SAAS,GAAM;EACpB,OAAO,IAAI,EAAkB,EAAK,QAAQ;CAC5C;CAIA,SAAS;EACP,OAAO,EACL,UAAU,KAAK,SACjB;CACF;AACF;AACA,SAAS,GAAmB,GAAU,GAAa;CACjD,IAAM,IAAY,EAAY,QAAQ,UAAU,EAAS,QAAQ;CACjE,OAAO;EACL,UAAU,IAAI,GAAiB,EAAU,GAAG;EAC5C;CACF;AACF;AACA,SAAS,GAAuB,GAAU;CACxC,OAAO,IAAI,GAAiB,CAAQ;AACtC;AA+FA,SAASC,GAAW,GAAO,GAAI,GAAa;CAE1C,IAAM,EAAE,iBAAc,GAClB,IAAS;CAIb,IAHIlF,GAAgB,CAAS,MAC3B,IAAS,EAAU,UAEjB,GAAQ;EACV,IAAM,IAAqB,EAAM,eAA4B,EAAO,MAAM;EAE1E,OAD6B,EAAO,OAAO,KAAK,eAAe,CACrC,MAAM,CAAC,CAAC,EAAY,QAAQ,CAAY,KAAK,CAAC,EAAa,MAAM,MAAS,EAAK,KAAK,SAAS,CAAW,CAAC;CACrI;CACA,IAAM,EAAE,cAAW;CACnB,OAAO,EAAO,MAAM,EAAE,UAAO,aAAU;EACrC,IAAI,IAAuB,EAAM,UAAU,IAAI,EAAM,IAAI,iBAAiB,EAAM,IAAI,KAAK,eAAe,CAAW,IAAI;EAYvH,OAXA,EAAM,IAAI,aAAa,EAAM,KAAK,EAAI,MAAM,GAAM,GAAM,MAAW;GACjE,IAAI,GACF,OAAO;GAET,IAAI,EAAK,UAAU;IACjB,IAAM,IAAuB,CAAC,KAAU,EAAO,KAAK,eAAe,CAAW,GACxE,IAA4B,CAAC,CAAC,EAAY,QAAQ,EAAK,KAAK,KAAK,CAAC,EAAK,MAAM,MAAM,MAAc,EAAU,KAAK,SAAS,CAAW,CAAC;IAC3I,IAAuB,KAAwB;GACjD;GACA,OAAO,CAAC;EACV,CAAC,GACM;CACT,CAAC;AACH;AACA,IAAI/B,MAAW,GAAY,IAAa,CAAC,OAAO,EAAE,OAAI,UAAO,kBAAe;CAC1E,IAAM,EAAE,iBAAc,GAChB,EAAE,UAAO,cAAW,GACpB,IAAO6B,EAAY,GAAY,EAAM,MAAM;CACjD,IAAI,GACF,IAAI,GAAO;EACT,IAAM,IAAgByC,GAAkB,GAAO,CAAI;EACnD,EAAG,cACD,EAAK,OAAO;GACV,GAAG;GACH,GAAG;EACL,CAAC,CACH;CACF,OACE,EAAO,SAAS,MAAU;EACxB,IAAM,IAAO,EAAM,MAAM,KACnB,IAAK,EAAM,IAAI;EACrB,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAC9C,IAAM,IAAc,KAAK,IAAI,GAAK,CAAI,GAChC,IAAY,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE;GAElD,AADoB,EAAK,MAAM,MAAM,MAAS,EAAK,SAAS,CAC9C,IACZ,EAAK,MAAM,SAAS,MAAS;IAC3B,AAAI,MAAS,EAAK,QAChB,EAAG,QACD,GACA,GACA,EAAK,OAAO;KACV,GAAG,EAAK;KACR,GAAG;IACL,CAAC,CACH;GAEJ,CAAC,IAED,EAAG,QAAQ,GAAa,GAAW,EAAK,OAAO,CAAU,CAAC;EAE9D,CAAC;CACH,CAAC;CAGL,OAAO2C,GAAW,GAAO,GAAI,CAAI;AACnC,GAGIhH,MAAW,GAAK,OAAW,EAAE,aAC/B,EAAG,QAAQ,GAAK,CAAK,GACd,KAKLC,MAAW,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,aAAU,eAAY;CAC7E,IAAM,IAAOmB,EAAY,GAAY,EAAM,MAAM,GAC7C;CAQJ,OAPI,EAAM,UAAU,QAAQ,WAAW,EAAM,UAAU,KAAK,MAC1D,IAAmB,EAAM,UAAU,QAAQ,OAAO,QAE/C,EAAK,cAIH,EAAM,EAAE,SAAS,EAAE,kBACJ,EAAa,GAAM;EAAE,GAAG;EAAkB,GAAG;CAAW,CAAC,EAAE,CACjE,IACL,KAEF,EAAS,WAAW,CAC5B,EAAE,SAAS,EAAE,OAAO,QACZ,EAAa,GAAM;EAAE,GAAG;EAAkB,GAAG;CAAW,CAAC,EAAE,GAAc,CAAQ,CACzF,EAAE,IAAI,KAXL,QAAQ,KAAK,wEAAsE,GAC5E;AAWX,GAIIlB,MAAoB,OAAc,EAAE,OAAI,kBAAe;CACzD,IAAI,GAAU;EACZ,IAAM,EAAE,WAAQ,GACV,IAAO8B,GAAO,GAAU,GAAG,EAAI,QAAQ,IAAI,GAC3C,IAAYiF,EAAe,OAAO,GAAK,CAAI;EACjD,EAAG,aAAa,CAAS;CAC3B;CACA,OAAO;AACT,GAGI9G,MAAoB,GAAW,OAAc,EAAE,OAAI,UAAO,kBAAe;CAC3E,IAAM,EAAE,iBAAc,GAClB,GACA;CAsBJ,OArBI,OAAO,KAAa,YACtB,IAAO,GACP,IAAK,KACI,KAAY,UAAU,KAAY,QAAQ,KACnD,IAAO,EAAS,MAChB,IAAK,EAAS,OAEd,IAAO,EAAU,MACjB,IAAK,EAAU,KAEb,KACF,EAAG,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EACvC,EAAK,UAGT,EAAG,cAAc,GAAK,KAAK,GAAG;GAC5B,GAAG,EAAK;GACR,KAAK;EACP,CAAC;CACH,CAAC,GAEI;AACT,GAIIC,MAAoB,OAAc,EAAE,OAAI,kBAAe;CACzD,IAAI,GAAU;EACZ,IAAM,EAAE,WAAQ,GACV,EAAE,SAAM,UAAO,OAAO,KAAa,WAAW;GAAE,MAAM;GAAU,IAAI;EAAS,IAAI,GACjF,IAAS8G,EAAe,QAAQ,CAAG,EAAE,MACrC,IAASA,EAAe,MAAM,CAAG,EAAE,IACnC,IAAelF,GAAO,GAAM,GAAQ,CAAM,GAC1C,IAAcA,GAAO,GAAI,GAAQ,CAAM,GACvC,IAAYkF,EAAe,OAAO,GAAK,GAAc,CAAW;EACtE,EAAG,aAAa,CAAS;CAC3B;CACA,OAAO;AACT,GAII7G,MAAgB,OAAgB,EAAE,UAAO,kBAEpC8G,GADM/F,EAAY,GAAY,EAAM,MACZ,CAAC,EAAE,GAAO,CAAQ;AAMnD,SAASgG,GAAY,GAAO,GAAiB;CAC3C,IAAM,IAAQ,EAAM,eAAe,EAAM,UAAU,IAAI,gBAAgB,EAAM,UAAU,MAAM,MAAM;CACnG,IAAI,GAAO;EACT,IAAM,IAAgB,EAAM,QAAQ,MAAS,GAAmD,SAAS,EAAK,KAAK,IAAI,CAAC;EACxH,EAAM,GAAG,YAAY,CAAa;CACpC;AACF;AACA,IAAI9G,MAAc,EAAE,eAAY,OAAS,CAAC,OAAO,EAAE,OAAI,UAAO,aAAU,gBAAa;CACnF,IAAM,EAAE,cAAW,WAAQ,GACrB,EAAE,UAAO,WAAQ,GACjB,IAAsB,EAAO,iBAAiB,YAC9C,IAAgBmG,GAAsB,GAAqB,EAAM,KAAK,EAAE,KAAK,MAAM,EAAM,KAAK,EAAE,KAAK;CAC3G,IAAI,aAAqBY,KAAkB,EAAU,KAAK,SAUxD,OATI,CAAC,EAAM,gBAAgB,CAAC,EAAS,GAAK,EAAM,GAAG,IAC1C,MAEL,MACE,KACF,GAAY,GAAO,EAAO,iBAAiB,eAAe,GAE5D,EAAG,MAAM,EAAM,GAAG,EAAE,eAAe,IAE9B;CAET,IAAI,CAAC,EAAM,OAAO,SAChB,OAAO;CAET,IAAM,IAAQ,EAAI,iBAAiB,EAAI,OAAO,QAAQ,MAChD,IAAQ,EAAM,UAAU,IAAI,KAAK,IAAI9C,GAAe,EAAM,KAAK,EAAE,EAAE,eAAe,EAAM,WAAW,EAAE,CAAC,CAAC,GACzG,IAAQ,KAAS,IAAQ,CAC3B;EACE,MAAM;EACN,OAAO;CACT,CACF,IAAI,KAAK,GACL,IAAM,EAAS,EAAG,KAAK,EAAG,QAAQ,IAAI,EAAM,GAAG,GAAG,GAAG,CAAK;CAU9D,IATI,CAAC,KAAS,CAAC,KAAO,EAAS,EAAG,KAAK,EAAG,QAAQ,IAAI,EAAM,GAAG,GAAG,GAAG,IAAQ,CAAC,EAAE,MAAM,EAAM,CAAC,IAAI,KAAK,CAAC,MACrG,IAAM,IACN,IAAQ,IAAQ,CACd;EACE,MAAM;EACN,OAAO;CACT,CACF,IAAI,KAAK,IAEP,GAAU;EACZ,IAAI,MACE,aAAqB+C,KACvB,EAAG,gBAAgB,GAErB,EAAG,MAAM,EAAG,QAAQ,IAAI,EAAM,GAAG,GAAG,GAAG,CAAK,GACxC,KAAS,CAAC,KAAS,CAAC,EAAM,gBAAgB,EAAM,OAAO,SAAS,IAAO;GACzE,IAAM,IAAS,EAAG,QAAQ,IAAI,EAAM,OAAO,CAAC,GACtC,IAAS,EAAG,IAAI,QAAQ,CAAM;GACpC,AAAI,EAAM,KAAK,EAAE,EAAE,eAAe,EAAO,MAAM,GAAG,EAAO,MAAM,IAAI,GAAG,CAAK,KACzE,EAAG,cAAc,EAAG,QAAQ,IAAI,EAAM,OAAO,CAAC,GAAG,CAAK;EAE1D;EAKF,AAHI,KACF,GAAY,GAAO,EAAO,iBAAiB,eAAe,GAE5D,EAAG,eAAe;CACpB;CACA,OAAO;AACT,GAMI/G,MAAiB,GAAY,IAAgB,CAAC,OAAO,EAAE,OAAI,UAAO,aAAU,gBAAa;CAE3F,IAAM,IAAOa,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,UAAO,WAAQ,EAAM,WACvB,IAAO,EAAM,UAAU;CAC7B,IAAI,KAAQ,EAAK,WAAW,EAAM,QAAQ,KAAK,CAAC,EAAM,WAAW,CAAG,GAClE,OAAO;CAET,IAAM,IAAc,EAAM,KAAK,EAAE;CACjC,IAAI,EAAY,SAAS,GACvB,OAAO;CAET,IAAM,IAAsB,EAAO,iBAAiB;CACpD,IAAI,EAAM,OAAO,QAAQ,SAAS,KAAK,EAAM,KAAK,EAAE,EAAE,eAAe,EAAM,WAAW,EAAE,GAAG;EACzF,IAAI,EAAM,UAAU,KAAK,EAAM,KAAK,EAAE,EAAE,SAAS,KAAQ,EAAM,MAAM,EAAE,MAAM,EAAM,KAAK,EAAE,EAAE,aAAa,GACvG,OAAO;EAET,IAAI,GAAU;GACZ,IAAI,IAAOmG,EAAU,OACf,IAAc,EAAM,MAAM,EAAE,IAAI,IAAI,EAAM,MAAM,EAAE,IAAI,IAAI;GAChE,KAAK,IAAI,IAAI,EAAM,QAAQ,GAAa,KAAK,EAAM,QAAQ,GAAG,KAC5D,IAAOA,EAAU,KAAK,EAAM,KAAK,CAAC,EAAE,KAAK,CAAI,CAAC;GAEhD,IAAM,IAEJ,EAAM,WAAW,EAAE,IAAI,EAAM,KAAK,EAAE,EAAE,aAAa,IAAI,EAAM,WAAW,EAAE,IAAI,EAAM,KAAK,EAAE,EAAE,aAAa,IAAI,GAE1G,IAAyB;IAC7B,GAAGd,GAAsB,GAAqB,EAAM,KAAK,EAAE,KAAK,MAAM,EAAM,KAAK,EAAE,KAAK;IACxF,GAAG;GACL,GACM,IAAmB,EAAK,aAAa,aAAmC,cAAc,CAAsB,KAAM,KAAK;GAC7H,IAAO,EAAK,OAAOc,EAAU,KAAK,EAAK,cAAc,MAAM,CAAS,KAAK,KAAK,CAAC,CAAC;GAChF,IAAM,IAAQ,EAAM,OAAO,EAAM,SAAS,IAAc,EAAE;GAC1D,EAAG,QAAQ,GAAO,EAAM,MAAM,CAAC,CAAU,GAAG,IAAI,EAAM,GAAM,IAAI,GAAa,CAAC,CAAC;GAC/E,IAAI,IAAM;GAYV,AAXA,EAAG,IAAI,aAAa,GAAO,EAAG,IAAI,QAAQ,OAAO,GAAG,MAAQ;IAC1D,IAAI,IAAM,IACR,OAAO;IAET,AAAI,EAAE,eAAe,EAAE,QAAQ,SAAS,MACtC,IAAM,IAAM;GAEhB,CAAC,GACG,IAAM,MACR,EAAG,aAAaC,EAAe,KAAK,EAAG,IAAI,QAAQ,CAAG,CAAC,CAAC,GAE1D,EAAG,eAAe;EACpB;EACA,OAAO;CACT;CACA,IAAM,IAAW,EAAI,QAAQ,EAAM,IAAI,IAAI,EAAY,eAAe,CAAC,EAAE,cAAc,MACjF,IAAoB;EACxB,GAAGf,GAAsB,GAAqB,EAAY,KAAK,MAAM,EAAY,KAAK;EACtF,GAAG;CACL,GACM,IAAwB;EAC5B,GAAGA,GAAsB,GAAqB,EAAM,KAAK,EAAE,KAAK,MAAM,EAAM,KAAK,EAAE,KAAK;EACxF,GAAG;CACL;CACA,EAAG,OAAO,EAAM,KAAK,EAAI,GAAG;CAC5B,IAAM,IAAQ,IAAW,CACvB;EAAE;EAAM,OAAO;CAAkB,GACjC;EAAE,MAAM;EAAU,OAAO;CAAsB,CACjD,IAAI,CAAC;EAAE;EAAM,OAAO;CAAkB,CAAC;CACvC,IAAI,CAACgB,EAAU,EAAG,KAAK,EAAM,KAAK,CAAC,GACjC,OAAO;CAET,IAAI,GAAU;EACZ,IAAM,EAAE,cAAW,mBAAgB,GAC7B,EAAE,uBAAoB,EAAO,kBAC7B,IAAQ,KAAe,EAAU,IAAI,gBAAgB,EAAU,MAAM,MAAM;EAEjF,IADA,EAAG,MAAM,EAAM,KAAK,GAAG,CAAK,EAAE,eAAe,GACzC,CAAC,KAAS,CAAC,GACb,OAAO;EAET,IAAM,IAAgB,EAAM,QAAQ,MAAS,EAAgB,SAAS,EAAK,KAAK,IAAI,CAAC;EACrF,EAAG,YAAY,CAAa;CAC9B;CACA,OAAO;AACT,GAKIC,MAAqB,GAAI,MAAa;CACxC,IAAM,IAAOhD,IAAgB,MAAS,EAAK,SAAS,CAAQ,EAAE,EAAG,SAAS;CAC1E,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAS,EAAG,IAAI,QAAQ,KAAK,IAAI,GAAG,EAAK,MAAM,CAAC,CAAC,EAAE,OAAO,EAAK,KAAK;CAC1E,IAAI,MAAW,KAAK,GAClB,OAAO;CAET,IAAM,IAAa,EAAG,IAAI,OAAO,CAAM;CAMvC,OALyB,EAAK,KAAK,SAAU,GAAyC,QAAS,EAAQ,EAAG,KAAK,EAAK,GAAG,KAIvH,EAAG,KAAK,EAAK,GAAG,GAFP;AAIX,GACIiD,MAAoB,GAAI,MAAa;CACvC,IAAM,IAAOjD,IAAgB,MAAS,EAAK,SAAS,CAAQ,EAAE,EAAG,SAAS;CAC1E,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAQ,EAAG,IAAI,QAAQ,EAAK,KAAK,EAAE,MAAM,EAAK,KAAK;CACzD,IAAI,MAAU,KAAK,GACjB,OAAO;CAET,IAAM,IAAY,EAAG,IAAI,OAAO,CAAK;CAMrC,OALwB,EAAK,KAAK,SAAU,GAAuC,QAAS,EAAQ,EAAG,KAAK,CAAK,KAIjH,EAAG,KAAK,CAAK,GAFJ;AAIX;AACA,SAASkD,GAAoC,GAAI;CAC/C,IAAM,IAAM,EAAG,KACT,IAAO,EAAI;CACjB,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAS,EAAI,QAAQ,CAAC,GACtB,IAAO,EAAI,QAAQ,EAAK,WAAW,CAAC;CAC1C,OAAOC,EAAe,QAAQ,GAAQ,CAAI;AAC5C;AACA,IAAIrH,MAAc,GAAgB,GAAgB,GAAW,IAAa,CAAC,OAAO,EAAE,WAAQ,OAAI,UAAO,aAAU,UAAO,aAAU,aAAU;CAC1I,IAAM,EAAE,eAAY,uBAAoB,EAAO,kBACzC,IAAWY,EAAY,GAAgB,EAAM,MAAM,GACnD,IAAWA,EAAY,GAAgB,EAAM,MAAM,GACnD,EAAE,cAAW,mBAAgB,GAC7B,EAAE,UAAO,WAAQ,GACjB,IAAQ,EAAM,WAAW,CAAG,GAC5B,IAAQ,KAAe,EAAU,IAAI,gBAAgB,EAAU,MAAM,MAAM;CACjF,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAasD,IAAgB,MAASmC,GAAO,EAAK,KAAK,MAAM,CAAU,CAAC,EAAE,CAAS,GACnF,IAAiB,EAAU,SAAS,KAAK,EAAU,OAAO,EAAM,IAAI,QAAQ,MAC5E,IAAgB,EAAM,IAAI,QAAQ,SAClC,IAAmB,EAAc,WAAW,IAAI,EAAc,KAAK,MACnE,KAAmB,KAAkB,KAAoBA,GAAO,EAAiB,KAAK,MAAM,CAAU,IAAI;EAC9G,MAAM;EACN,KAAK;EACL,OAAO;CACT,IAAI,MACE,IAAc,KAAkC,IAChD,KAAuB,CAAC,CAAC,KAAc,EAAM,SAAS,KAAK,EAAM,QAAQ,EAAW,SAAS,GAC7F,KAA0B,CAAC,CAAC;CAClC,KAAK,MAAwB,OAA4B,GAAa;EACpE,IAAI,EAAY,KAAK,SAAS,GAc5B,OAbI,KAAkB,KACb,EAAM,EAAE,SAAS,EAAE,IAAI,GAAK,UAAU,QAAW;GACtD,IAAM,IAAgBe,GAAoC,CAAG;GAQ7D,OAPK,KAGL,EAAI,aAAa,CAAa,GAC1B,KACF,EAAK,CAAG,GAEH,MANE;EAOX,CAAC,EAAE,aAAa,CAAQ,EAAE,IAAI,IAEzB,EAAS,aAAa,CAAQ;EAEvC,IAAIf,GAAO,EAAY,KAAK,KAAK,MAAM,CAAU,KAAK,EAAS,aAAa,EAAY,KAAK,OAAO,GAClG,OAAO,EAAM,EAAE,eACb,EAAG,cAAc,EAAY,KAAK,CAAQ,GACnC,GACR,EAAE,cAAca,GAAkB,GAAI,CAAQ,CAAC,EAAE,cAAcC,GAAiB,GAAI,CAAQ,CAAC,EAAE,IAAI;CAExG;CAUA,OATI,CAAC,KAAa,CAAC,KAAS,CAAC,IACpB,EAAM,EAAE,cACS,EAAI,EAAE,WAAW,GAAU,CACjC,IACP,KAEF,EAAS,WAAW,CAC5B,EAAE,WAAW,GAAU,CAAU,EAAE,cAAcD,GAAkB,GAAI,CAAQ,CAAC,EAAE,cAAcC,GAAiB,GAAI,CAAQ,CAAC,EAAE,IAAI,IAEhI,EAAM,EAAE,cAAc;EAC3B,IAAM,IAAgB,EAAI,EAAE,WAAW,GAAU,CAAU,GACrD,IAAgB,EAAM,QAAQ,MAAS,EAAgB,SAAS,EAAK,KAAK,IAAI,CAAC;EAKrF,OAJA,EAAG,YAAY,CAAa,GACxB,IACK,KAEF,EAAS,WAAW;CAC7B,CAAC,EAAE,WAAW,GAAU,CAAU,EAAE,cAAcD,GAAkB,GAAI,CAAQ,CAAC,EAAE,cAAcC,GAAiB,GAAI,CAAQ,CAAC,EAAE,IAAI;AACvI,GAGIlH,MAAc,GAAY,IAAa,CAAC,GAAG,IAAU,CAAC,OAAO,EAAE,UAAO,kBAAe;CACvF,IAAM,EAAE,0BAAuB,OAAU,GACnC,IAAOmB,EAAY,GAAY,EAAM,MAAM;CAKjD,OAJkB+E,GAAa,GAAO,GAAM,CAChC,IACH,EAAS,UAAU,GAAM,EAAE,wBAAqB,CAAC,IAEnD,EAAS,QAAQ,GAAM,CAAU;AAC1C,GAGIjG,MAAc,GAAY,GAAkB,IAAa,CAAC,OAAO,EAAE,UAAO,kBAAe;CAC3F,IAAM,IAAOU,EAAY,GAAY,EAAM,MAAM,GAC3C,IAAaA,EAAY,GAAkB,EAAM,MAAM,GACvD,IAAYoC,GAAa,GAAO,GAAM,CAAU,GAClD;CAOJ,OANI,EAAM,UAAU,QAAQ,WAAW,EAAM,UAAU,KAAK,MAC1D,IAAmB,EAAM,UAAU,QAAQ,OAAO,QAEhD,IACK,EAAS,QAAQ,GAAY,CAAgB,IAE/C,EAAS,QAAQ,GAAM;EAAE,GAAG;EAAkB,GAAG;CAAW,CAAC;AACtE,GAGI7C,MAAc,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAAe;CACzE,IAAM,IAAOS,EAAY,GAAY,EAAM,MAAM;CAKjD,OAJkBoC,GAAa,GAAO,GAAM,CAChC,IACH,EAAS,KAAK,CAAI,IAEpB,EAAS,OAAO,GAAM,CAAU;AACzC,GAGI5C,YAAuB,EAAE,UAAO,kBAAe;CACjD,IAAM,IAAU,EAAM;CACtB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,QAAQ,KAAK,GAAG;EAC1C,IAAM,IAAS,EAAQ,IACnB;EACJ,IAAI,EAAO,KAAK,iBAAiB,IAAW,EAAO,SAAS,CAAK,IAAI;GACnE,IAAI,GAAU;IACZ,IAAM,IAAK,EAAM,IACX,IAAS,EAAS;IACxB,KAAK,IAAI,IAAI,EAAO,MAAM,SAAS,GAAG,KAAK,GAAG,KAC5C,EAAG,KAAK,EAAO,MAAM,GAAG,OAAO,EAAO,KAAK,EAAE,CAAC;IAEhD,IAAI,EAAS,MAAM;KACjB,IAAM,IAAQ,EAAG,IAAI,QAAQ,EAAS,IAAI,EAAE,MAAM;KAClD,EAAG,YAAY,EAAS,MAAM,EAAS,IAAI,EAAM,OAAO,KAAK,EAAS,MAAM,CAAK,CAAC;IACpF,OACE,EAAG,OAAO,EAAS,MAAM,EAAS,EAAE;GAExC;GACA,OAAO;EACT;CACF;CACA,OAAO;AACT,GAGIC,YAAuB,EAAE,OAAI,kBAAe;CAC9C,IAAM,EAAE,iBAAc,GAChB,EAAE,UAAO,cAAW;CAS1B,OARI,KAGA,KACF,EAAO,SAAS,MAAU;EACxB,EAAG,WAAW,EAAM,MAAM,KAAK,EAAM,IAAI,GAAG;CAC9C,CAAC,GALM;AAQX,GAGIC,MAAa,GAAY,IAAU,CAAC,OAAO,EAAE,OAAI,UAAO,kBAAe;CAEzE,IAAM,EAAE,0BAAuB,OAAU,GACnC,EAAE,iBAAc,GAChB,IAAOc,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,UAAO,UAAO,cAAW;CACjC,IAAI,CAAC,GACH,OAAO;CAET,IAAI,KAAS,GAAsB;EACjC,IAAI,EAAE,SAAM,UAAO,GAEb,IAAQD,GAAa,GAAO,GADd,EAAM,MAAM,EAAE,MAAM,MAAS,EAAK,SAAS,CAAI,GAAyB,KAC/C;EAK7C,AAJI,MACF,IAAO,EAAM,MACb,IAAK,EAAM,KAEb,EAAG,WAAW,GAAM,GAAI,CAAI;CAC9B,OACE,EAAO,SAAS,MAAU;EACxB,EAAG,WAAW,EAAM,MAAM,KAAK,EAAM,IAAI,KAAK,CAAI;CACpD,CAAC;CAGH,OADA,EAAG,iBAAiB,CAAI,GACjB;AACT,GAGIZ,MAAsB,OAAc,EAAE,OAAI,UAAO,kBAAe;CAClE,IAAM,EAAE,iBAAc,GAClB,GACA;CAqBJ,OApBI,OAAO,KAAa,YACtB,IAAO,GACP,IAAK,KACI,KAAY,UAAU,KAAY,QAAQ,KACnD,IAAO,EAAS,MAChB,IAAK,EAAS,OAEd,IAAO,EAAU,MACjB,IAAK,EAAU,KAEb,KACF,EAAG,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EAC3C,IAAI,EAAK,QACP;EAEF,IAAM,IAAW,EAAE,GAAG,EAAK,MAAM;EAEjC,AADA,OAAO,EAAS,KAChB,EAAG,cAAc,GAAK,KAAK,GAAG,CAAQ;CACxC,CAAC,GAEI;AACT,GAGIC,MAAoB,GAAY,IAAa,CAAC,OAAO,EAAE,OAAI,UAAO,kBAAe;CACnF,IAAI,IAAW,MACX,IAAW,MACT,IAAa6C,GACjB,OAAO,KAAe,WAAW,IAAa,EAAW,MACzD,EAAM,MACR;CACA,IAAI,CAAC,GACH,OAAO;CAKT,AAHI,MAAe,WACjB,IAAWzC,EAAY,GAAY,EAAM,MAAM,IAE7C,MAAe,WACjB,IAAWQ,EAAY,GAAY,EAAM,MAAM;CAEjD,IAAI,IAAY;CAkFhB,OAjFA,EAAG,UAAU,OAAO,SAAS,MAAU;EACrC,IAAM,IAAO,EAAM,MAAM,KACnB,IAAK,EAAM,IAAI,KACjB,GACA,GACA,GACA;EAoDJ,AAnDI,EAAG,UAAU,QACf,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAC9C,AAAI,KAAY,MAAa,EAAK,SAChC,IAAY,IACZ,IAAc,KAAK,IAAI,GAAK,CAAI,GAChC,IAAY,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE,GAC5C,IAAU,GACV,IAAW;EAEf,CAAC,IAED,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAQ9C,AAPI,IAAM,KAAQ,KAAY,MAAa,EAAK,SAC9C,IAAY,IACZ,IAAc,KAAK,IAAI,GAAK,CAAI,GAChC,IAAY,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE,GAC5C,IAAU,GACV,IAAW,IAET,KAAO,KAAQ,KAAO,MACpB,KAAY,MAAa,EAAK,SAChC,IAAY,IACR,KACF,EAAG,cAAc,GAAK,KAAK,GAAG;IAC5B,GAAG,EAAK;IACR,GAAG;GACL,CAAC,IAGD,KAAY,EAAK,MAAM,UACzB,EAAK,MAAM,SAAS,MAAS;IAC3B,IAAI,MAAa,EAAK,SACpB,IAAY,IACR,IAAU;KACZ,IAAM,IAAe,KAAK,IAAI,GAAK,CAAI,GACjC,IAAa,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE;KACnD,EAAG,QACD,GACA,GACA,EAAS,OAAO;MACd,GAAG,EAAK;MACR,GAAG;KACL,CAAC,CACH;IACF;GAEJ,CAAC;EAGP,CAAC,GAEC,MACE,MAAY,KAAK,KAAK,KACxB,EAAG,cAAc,GAAS,KAAK,GAAG;GAChC,GAAG,EAAS;GACZ,GAAG;EACL,CAAC,GAEC,KAAY,EAAS,MAAM,UAC7B,EAAS,MAAM,SAAS,MAAS;GAC/B,AAAI,MAAa,EAAK,QAAQ,KAC5B,EAAG,QACD,GACA,GACA,EAAS,OAAO;IACd,GAAG,EAAK;IACR,GAAG;GACL,CAAC,CACH;EAEJ,CAAC;CAGP,CAAC,GACM;AACT,GAIIX,MAAU,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAE/C6G,GADM1G,EAAY,GAAY,EAAM,MAClB,GAAG,CAAU,EAAE,GAAO,CAAQ,GAKrDF,MAAc,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAEnD6G,GADM3G,EAAY,GAAY,EAAM,MACd,GAAG,CAAU,EAAE,GAAO,CAAQ,GAQzD,KAAe,MAAM;CACvB,cAAc;EACZ,KAAK,YAAY,CAAC;CACpB;CACA,GAAG,GAAO,GAAI;EAKZ,OAJK,KAAK,UAAU,OAClB,KAAK,UAAU,KAAS,CAAC,IAE3B,KAAK,UAAU,GAAO,KAAK,CAAE,GACtB;CACT;CACA,KAAK,GAAO,GAAG,GAAM;EACnB,IAAM,IAAY,KAAK,UAAU;EAIjC,OAHI,KACF,EAAU,SAAS,MAAa,EAAS,MAAM,MAAM,CAAI,CAAC,GAErD;CACT;CACA,IAAI,GAAO,GAAI;EACb,IAAM,IAAY,KAAK,UAAU;EAQjC,OAPI,MACE,IACF,KAAK,UAAU,KAAS,EAAU,QAAQ,MAAa,MAAa,CAAE,IAEtE,OAAO,KAAK,UAAU,KAGnB;CACT;CACA,KAAK,GAAO,GAAI;EACd,IAAM,KAAU,GAAG,MAAS;GAE1B,AADA,KAAK,IAAI,GAAO,CAAM,GACtB,EAAG,MAAM,MAAM,CAAI;EACrB;EACA,OAAO,KAAK,GAAG,GAAO,CAAM;CAC9B;CACA,qBAAqB;EACnB,KAAK,YAAY,CAAC;CACpB;AACF,GAQI4G,KAAY,MAAM;CACpB,YAAY,GAAQ;EAIlB,AAFA,KAAK,OAAO,EAAO,MACnB,KAAK,UAAU,EAAO,SACtB,KAAK,WAAiB,EAAO,YAAyB;CACxD;AACF,GACIC,MAA2B,GAAM,MAAS;CAC5C,IAAI1G,GAAS,CAAI,GACf,OAAO,EAAK,KAAK,CAAI;CAEvB,IAAM,IAAiB,EAAK,CAAI;CAChC,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAS,CAAC,EAAe,IAAI;CAUnC,OATA,EAAO,QAAQ,EAAe,OAC9B,EAAO,QAAQ,GACf,EAAO,OAAO,EAAe,MACzB,EAAe,gBACZ,EAAe,KAAK,SAAS,EAAe,WAAW,KAC1D,QAAQ,KAAK,wFAAoF,GAEnG,EAAO,KAAK,EAAe,WAAW,IAEjC;AACT;AACA,SAAS2G,GAAI,GAAQ;CAEnB,IAAM,EAAE,WAAQ,SAAM,OAAI,SAAM,UAAO,cAAW,GAC5C,EAAE,YAAS;CACjB,IAAI,EAAK,WACP,OAAO;CAET,IAAM,IAAQ,EAAK,MAAM,IAAI,QAAQ,CAAI;CACzC,IAEE,EAAM,OAAO,KAAK,KAAK,SACd,EAAM,cAAc,EAAM,YAAiC,MAAM,MAAM,MAAS,EAAK,KAAK,KAAK,IAAI,GAE5G,OAAO;CAET,IAAI,IAAU,IACR,IAAaxB,GAAwB,CAAK,IAAI;CA4CpD,OA3CA,EAAM,SAAS,MAAS;EACtB,IAAI,GACF;EAEF,IAAM,IAAQuB,GAAwB,GAAY,EAAK,IAAI;EAC3D,IAAI,CAAC,GACH;EAEF,IAAM,IAAK,EAAK,MAAM,IAChB,IAAQ7K,GAAqB;GACjC,OAAO,EAAK;GACZ,aAAa;EACf,CAAC,GACK,IAAQ;GACZ,MAAM,KAAQ,EAAM,GAAG,SAAS,EAAK;GACrC;EACF,GACM,EAAE,aAAU,UAAO,WAAQ,IAAIC,GAAe;GAClD;GACA;EACF,CAAC;EACe,EAAK,QAAQ;GAC3B;GACA;GACA;GACA;GACA;GACA;EACF,CACU,MAAM,QAAQ,CAAC,EAAG,MAAM,WAG9B,EAAK,YACP,EAAG,QAAQ,GAAQ;GACjB,WAAW;GACX;GACA;GACA;EACF,CAAC,GAEH,EAAK,SAAS,CAAE,GAChB,IAAU;CACZ,CAAC,GACM;AACT;AACA,SAAS8K,GAAiB,GAAO;CAC/B,IAAM,EAAE,WAAQ,aAAU,GACpB,IAAS,IAAI,EAAO;EACxB,OAAO;GACL,OAAO;IACL,OAAO;GACT;GACA,MAAM,GAAI,GAAM,GAAO;IACrB,IAAM,IAAS,EAAG,QAAQ,CAAM;IAChC,IAAI,GACF,OAAO;IAET,IAAM,IAAqB,EAAG,QAAQ,iBAAiB;IAsBvD,OArB2B,KAEzB,iBAAiB;KACf,IAAI,EAAE,YAAS;KACf,AAGE,IAHE,OAAO,KAAS,WACX,IAEAtD,GAAoBuD,EAAU,KAAK,CAAI,GAAG,EAAM,MAAM;KAE/D,IAAM,EAAE,YAAS;KAEjB,GAAI;MACF;MACA;MACA,IAJS,IAAO,EAAK;MAKrB;MACA;MACA;KACF,CAAC;IACH,CAAC,GAEI,EAAG,gBAAgB,EAAG,aAAa,OAAO;GACnD;EACF;EACA,OAAO;GACL,gBAAgB,GAAM,GAAM,GAAI,GAAM;IACpC,OAAOF,GAAI;KACT;KACA;KACA;KACA;KACA;KACA;IACF,CAAC;GACH;GACA,iBAAiB,EACf,iBAAiB,OACf,iBAAiB;IACf,IAAM,EAAE,eAAY,EAAK,MAAM;IAC/B,AAAI,KACF,GAAI;KACF;KACA,MAAM,EAAQ;KACd,IAAI,EAAQ;KACZ,MAAM;KACN;KACA;IACF,CAAC;GAEL,CAAC,GACM,IAEX;GAGA,cAAc,GAAM,GAAO;IACzB,IAAI,EAAM,QAAQ,SAChB,OAAO;IAET,IAAM,EAAE,eAAY,EAAK,MAAM;IAW/B,OAVI,IACKA,GAAI;KACT;KACA,MAAM,EAAQ;KACd,IAAI,EAAQ;KACZ,MAAM;KACN;KACA;IACF,CAAC,IAEI;GACT;EACF;EAEA,cAAc;CAChB,CAAC;CACD,OAAO;AACT;AAGA,SAASG,GAAQ,GAAO;CACtB,OAAO,OAAO,UAAU,SAAS,KAAK,CAAK,EAAE,MAAM,GAAG,EAAE;AAC1D;AACA,SAASC,GAAc,GAAO;CAI5B,OAHID,GAAQ,CAAK,MAAM,WAGhB,EAAM,gBAAgB,UAAU,OAAO,eAAe,CAAK,MAAM,OAAO,YAFtE;AAGX;AAGA,SAASE,GAAU,GAAQ,GAAQ;CACjC,IAAM,IAAS,EAAE,GAAG,EAAO;CAU3B,OATID,GAAc,CAAM,KAAKA,GAAc,CAAM,KAC/C,OAAO,KAAK,CAAM,EAAE,SAAS,MAAQ;EACnC,AAAIA,GAAc,EAAO,EAAI,KAAKA,GAAc,EAAO,EAAI,IACzD,EAAO,KAAOC,GAAU,EAAO,IAAM,EAAO,EAAI,IAEhD,EAAO,KAAO,EAAO;CAEzB,CAAC,GAEI;AACT;AAGA,IAAIC,KAAa,MAAM;CACrB,YAAY,IAAS,CAAC,GAAG;EAYvB,AAXA,KAAK,OAAO,cACZ,KAAK,SAAS,MACd,KAAK,QAAQ,MACb,KAAK,OAAO,IACZ,KAAK,SAAS,EACZ,MAAM,KAAK,KACb,GACA,KAAK,SAAS;GACZ,GAAG,KAAK;GACR,GAAG;EACL,GACA,KAAK,OAAO,KAAK,OAAO;CAC1B;CACA,IAAI,UAAU;EACZ,OAAO,EACL,GAAGzD,EACDJ,EAAkB,MAAM,cAAc,EACpC,MAAM,KAAK,KACb,CAAC,CACH,KAAK,CAAC,EACR;CACF;CACA,IAAI,UAAU;EACZ,OAAO,EACL,GAAGI,EACDJ,EAAkB,MAAM,cAAc;GACpC,MAAM,KAAK;GACX,SAAS,KAAK;EAChB,CAAC,CACH,KAAK,CAAC,EACR;CACF;CACA,UAAU,IAAU,CAAC,GAAG;EACtB,IAAM,IAAY,KAAK,OAAO;GAC5B,GAAG,KAAK;GACR,kBACS4D,GAAU,KAAK,SAAS,CAAO;EAE1C,CAAC;EAID,OAHA,EAAU,OAAO,KAAK,MACtB,EAAU,SAAS,KAAK,QACxB,KAAK,QAAQ,MACN;CACT;CACA,OAAO,IAAiB,CAAC,GAAG;EAC1B,IAAM,IAAY,IAAI,KAAK,YAAY;GAAE,GAAG,KAAK;GAAQ,GAAG;EAAe,CAAC;EAI5E,OAHA,EAAU,SAAS,MACnB,KAAK,QAAQ,GACb,EAAU,OAAO,UAAU,IAAiB,EAAe,OAAO,EAAU,OAAO,MAC5E;CACT;AACF,GAGIE,KAAO,MAAM,UAAcD,GAAW;CACxC,cAAc;EAEZ,AADA,MAAM,GAAG,SAAS,GAClB,KAAK,OAAO;CACd;CAKA,OAAO,OAAO,IAAS,CAAC,GAAG;EAEzB,OAAO,IAAI,EADY,OAAO,KAAW,aAAa,EAAO,IAAI,CAClC;CACjC;CACA,OAAO,WAAW,EAAE,WAAQ,WAAQ;EAClC,IAAM,EAAE,UAAO,EAAO,OAChB,IAAa,EAAO,MAAM,UAAU;EAE1C,IADgB,EAAW,QAAQ,EAAW,IAAI,GACrC;GACX,IAAM,IAAe,EAAW,MAAM;GAEtC,IAAI,CADe,EAAa,MAAM,MAAO,GAAuB,KAAK,SAAU,EAAK,IAAI,GAE1F,OAAO;GAET,IAAM,IAAa,EAAa,MAAM,MAAO,GAAuB,KAAK,SAAU,EAAK,IAAI;GAM5F,OALI,KACF,EAAG,iBAAiB,CAAU,GAEhC,EAAG,WAAW,KAAK,EAAW,GAAG,GACjC,EAAO,KAAK,SAAS,CAAE,GAChB;EACT;EACA,OAAO;CACT;CACA,UAAU,GAAS;EACjB,OAAO,MAAM,UAAU,CAAO;CAChC;CACA,OAAO,GAAgB;EACrB,IAAM,IAAiB,OAAO,KAAmB,aAAa,EAAe,IAAI;EACjF,OAAO,MAAM,OAAO,CAAc;CACpC;AACF;AAOA,SAASE,GAAS,GAAO;CACvB,OAAO,OAAO,KAAU;AAC1B;AAGA,IAAIC,KAAY,MAAM;CACpB,YAAY,GAAQ;EAElB,AADA,KAAK,OAAO,EAAO,MACnB,KAAK,UAAU,EAAO;CACxB;AACF,GACIC,MAA2B,GAAM,GAAM,MAAU;CACnD,IAAIrH,GAAS,CAAI,GACf,OAAO,CAAC,GAAG,EAAK,SAAS,CAAI,CAAC;CAEhC,IAAM,IAAU,EAAK,GAAM,CAAK;CAIhC,OAHK,IAGE,EAAQ,KAAK,MAAmB;EACrC,IAAM,IAAS,CAAC,EAAe,IAAI;EAUnC,OATA,EAAO,QAAQ,EAAe,OAC9B,EAAO,QAAQ,GACf,EAAO,OAAO,EAAe,MACzB,EAAe,gBACZ,EAAe,KAAK,SAAS,EAAe,WAAW,KAC1D,QAAQ,KAAK,wFAAoF,GAEnG,EAAO,KAAK,EAAe,WAAW,IAEjC;CACT,CAAC,IAdQ,CAAC;AAeZ;AACA,SAASsH,GAAK,GAAQ;CACpB,IAAM,EAAE,WAAQ,UAAO,SAAM,OAAI,SAAM,eAAY,iBAAc,GAC3D,EAAE,aAAU,UAAO,WAAQ,IAAIxL,GAAe;EAClD;EACA;CACF,CAAC,GACK,IAAW,CAAC;CAsClB,OArCA,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EAE9C,IAAiB,EAAK,MAA4B,MAA4B,QAAS,EAAE,EAAK,UAAU,EAAK,eAAe,EAAK,WAC/H;EAEF,IAAM,IAAgC,EAAK,SAA+B,QAAqB,EAAK,YAAyB,GACvH,IAAe,KAAK,IAAI,GAAM,CAAG,GACjC,IAAa,KAAK,IAAI,GAAI,IAAM,CAAW;EAC7C,KAAgB,KAKpB,GAFoB,EAAK,SAAS,EAAK,QAAQ,KAAK,EAAK,YAAY,IAAe,GAAK,IAAa,GAAK,KAAK,GAAG,GAAQ,GACtE,EAAK,MAAM,CAC1D,EAAE,SAAS,MAAU;GACzB,IAAI,EAAM,UAAU,KAAK,GACvB;GAEF,IAAM,IAAQ,IAAe,EAAM,QAAQ,GACrC,IAAM,IAAQ,EAAM,GAAG,QACvB,IAAQ;IACZ,MAAM,EAAM,GAAG,QAAQ,IAAI,CAAK;IAChC,IAAI,EAAM,GAAG,QAAQ,IAAI,CAAG;GAC9B,GACM,IAAU,EAAK,QAAQ;IAC3B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF,CAAC;GACD,EAAS,KAAK,CAAO;EACvB,CAAC;CACH,CAAC,GACe,EAAS,OAAO,MAAY,MAAY,IAC3C;AACf;AACA,IAAIyL,KAA4B,MAC5BC,MAA6B,MAAS;CACxC,IAAI;CACJ,IAAM,IAAQ,IAAI,eAAe,SAAS,EACxC,eAAe,IAAI,aAAa,EAClC,CAAC;CAED,QADC,IAAK,EAAM,kBAAkB,QAAgB,EAAG,QAAQ,aAAa,CAAI,GACnE;AACT;AACA,SAASC,GAAiB,GAAO;CAC/B,IAAM,EAAE,WAAQ,aAAU,GACtB,IAAoB,MACpB,IAA0B,IAC1B,IAA2B,IAC3B,IAAa,OAAO,iBAAmB,MAAc,IAAI,eAAe,OAAO,IAAI,MACnF;CACJ,IAAI;EACF,IAAY,OAAO,YAAc,MAAc,IAAI,UAAU,MAAM,IAAI;CACzE,QAAQ;EACN,IAAY;CACd;CACA,IAAM,KAAgB,EACpB,UACA,SACA,OACA,SACA,kBACI;EACJ,IAAM,IAAK,EAAM;EAcb,OATYH,GAAK;GACnB;GACA,OANqBzL,GAAqB;IAC1C;IACA,aAAa;GACf,CAGsB;GACpB,MAAM,KAAK,IAAI,IAAO,GAAG,CAAC;GAC1B,IAAI,EAAG,IAAI;GACX;GACA,YAAY;GACZ;EACF,CACW,KAAK,CAAC,EAAG,MAAM,SAG1B;OAAI;IACF,IAAY,OAAO,YAAc,MAAc,IAAI,UAAU,MAAM,IAAI;GACzE,QAAQ;IACN,IAAY;GACd;GAEA,OADA,IAAa,OAAO,iBAAmB,MAAc,IAAI,eAAe,OAAO,IAAI,MAC5E;EAFP;CAGF;CA+FA,OA9FgB,EAAM,KAAK,MAClB,IAAI6L,EAAQ;EAEjB,KAAK,GAAM;GACT,IAAM,KAAmB,MAAU;IAGjC,AADA,IAA2B,EAAK,IAAI,eAAqC,SAAS,EAAM,MAAM,IAAK,EAAK,IAAI,gBAAgB,MACxH,MACF,KAA4B;GAEhC,GACM,UAAsB;IAC1B,AACE,OAA4B;GAEhC;GAGA,OAFA,OAAO,iBAAiB,aAAa,CAAe,GACpD,OAAO,iBAAiB,WAAW,CAAa,GACzC,EACL,UAAU;IAER,AADA,OAAO,oBAAoB,aAAa,CAAe,GACvD,OAAO,oBAAoB,WAAW,CAAa;GACrD,EACF;EACF;EACA,OAAO,EACL,iBAAiB;GACf,OAAO,GAAM,MAAU;IAGrB,IAFA,IAA2B,MAAsB,EAAK,IAAI,eAC1D,IAAY,GACR,CAAC,GAA0B;KAC7B,IAAM,IAAsBH;KAC5B,AAAI,GAA2D,cAC7D,iBAAiB;MACf,IAAM,IAAY,EAAoB,MAAM;MAC5C,AAAI,KACF,EAAoB,SAAS,YAAY;OAAE,MAAM,EAAU;OAAM,IAAI,EAAU;MAAG,CAAC;KAEvF,GAAG,EAAE;IAET;IACA,OAAO;GACT;GACA,QAAQ,GAAO,MAAU;IAEvB,IAAM,IAAa,EAAM,eAAqC,QAAQ,WAAW;IAGjF,OAFA,IAAa,GACb,IAA0B,CAAC,CAAE,GAA6B,SAAS,eAAe,GAC3E;GACT;EACF,EACF;EACA,oBAAoB,GAAc,GAAU,MAAU;GACpD,IAAM,IAAc,EAAa,IAC3B,IAAU,EAAY,QAAQ,SAAS,MAAM,WAAW,CAAC,GACzD,IAAS,EAAY,QAAQ,SAAS,MAAM,UAAU,CAAC,GACvD,IAAqB,EAAY,QAAQ,iBAAiB,GAC1D,IAAmB,CAAC,CAAC;GAC3B,IAAI,CAAC,KAAW,CAAC,KAAU,CAAC,GAC1B;GAEF,IAAI,GAAkB;IACpB,IAAI,EAAE,YAAS;IACf,AAGE,IAHE,OAAO,KAAS,WACX,IAEAjE,GAAoBqE,EAAU,KAAK,CAAI,GAAG,EAAM,MAAM;IAE/D,IAAM,EAAE,MAAM,MAAU,GAClB,IAAM,IAAQ,EAAK,QACnB,IAAWH,GAA0B,CAAI;IAC/C,OAAO,EAAa;KAClB;KACA;KACA,MAAM;KACN,IAAI,EAAE,GAAG,EAAI;KACb;IACF,CAAC;GACH;GACA,IAAM,IAAO,EAAS,IAAI,QAAQ,cAAc,EAAM,IAAI,OAAO,GAC3D,IAAK,EAAS,IAAI,QAAQ,YAAY,EAAM,IAAI,OAAO;GACzD,OAACL,GAAS,CAAI,KAAK,CAAC,KAAM,MAAS,EAAG,IAG1C,OAAO,EAAa;IAClB;IACA;IACA;IACA;IACA,UAAU;GACZ,CAAC;EACH;CACF,CAAC,CAEU;AACf;AAGA,IAAIS,KAAmB,MAAM;CAC3B,YAAY,GAAY,GAAQ;EAM9B,AALA,KAAK,kBAAkB,CAAC,GACxB,KAAK,SAAS,GACd,KAAK,iBAAiB,GACtB,KAAK,aAAapD,GAAkB,CAAU,GAC9C,KAAK,SAASJ,GAA8B,KAAK,YAAY,CAAM,GACnE,KAAK,gBAAgB;CACvB;CAKA,IAAI,WAAW;EACb,OAAO,KAAK,WAAW,QAAQ,GAAU,MAAc;GAQrD,IAAM,IAAchB,EAAkB,GAAW,eAAe;IAN9D,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD,QAAQ,KAAK;IACb,MAAM6B,GAAoB,EAAU,MAAM,KAAK,MAAM;GAEe,CAAC;GAIvE,OAHK,IAGE;IACL,GAAG;IACH,GAAG,EAAY;GACjB,IALS;EAMX,GAAG,CAAC,CAAC;CACP;CAKA,IAAI,UAAU;EACZ,IAAM,EAAE,cAAW;EA6DnB,OA5DmBV,GAAe,CAAC,GAAG,KAAK,UAAU,EAAE,QAAQ,CACnC,EAAE,SAAS,MAAc;GACnD,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAMU,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD,GACM,IAAU,CAAC,GACX,IAAuB7B,EAC3B,GACA,wBACA,CACF,GACI,IAAkB,CAAC;GAIvB,IAHI,EAAU,SAAS,UAAUA,EAAkB,GAAW,YAAY,CAAO,MAC/E,EAAgB,mBAAmB8D,GAAK,WAAW;IAAE;IAAQ,MAAM;GAAU,CAAC,IAE5E,GAAsB;IACxB,IAAM,IAAW,OAAO,YACtB,OAAO,QAAQ,EAAqB,CAAC,EAAE,KAAK,CAAC,GAAU,OAC9C,CAAC,SAAgB,EAAO,EAAE,UAAO,CAAC,CAAC,CAC3C,CACH;IACA,IAAkB;KAAE,GAAG;KAAiB,GAAG;IAAS;GACtD;GACA,IAAM,IAAe,GAAO,CAAe;GAC3C,EAAQ,KAAK,CAAY;GACzB,IAAM,IAAgB9D,EAAkB,GAAW,iBAAiB,CAAO;GAC3E,IAAIiC,GAAwB,GAAW,EAAO,QAAQ,gBAAgB,KAAK,GAAe;IACxF,IAAM,IAAQ,EAAc;IAC5B,IAAI,KAAS,EAAM,QAAQ;KACzB,IAAM,IAAcuB,GAAiB;MACnC;MACA;KACF,CAAC,GACK,IAAe,MAAM,QAAQ,CAAW,IAAI,IAAc,CAAC,CAAW;KAC5E,EAAQ,KAAK,GAAG,CAAY;IAC9B;GACF;GACA,IAAM,IAAgBxD,EAAkB,GAAW,iBAAiB,CAAO;GAC3E,IAAIiC,GAAwB,GAAW,EAAO,QAAQ,gBAAgB,KAAK,GAAe;IACxF,IAAM,IAAQ,EAAc;IAC5B,IAAI,KAAS,EAAM,QAAQ;KACzB,IAAM,IAAaoC,GAAiB;MAAE;MAAQ;KAAM,CAAC;KACrD,EAAQ,KAAK,GAAG,CAAU;IAC5B;GACF;GACA,IAAM,IAAwBrE,EAC5B,GACA,yBACA,CACF;GACA,IAAI,GAAuB;IACzB,IAAM,IAAqB,EAAsB;IACjD,EAAQ,KAAK,GAAG,CAAkB;GACpC;GACA,OAAO;EACT,CACgB;CAClB;CAKA,IAAI,aAAa;EACf,OAAOO,GAA4B,KAAK,UAAU;CACpD;CAKA,IAAI,YAAY;EACd,IAAM,EAAE,cAAW,MACb,EAAE,sBAAmBD,GAAgB,KAAK,UAAU;EAC1D,OAAO,OAAO,YACZ,EAAe,QAAQ,MAAc,CAAC,CAACN,EAAkB,GAAW,aAAa,CAAC,EAAE,KAAK,MAAc;GACrG,IAAM,IAAsB,KAAK,WAAW,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAQ7F,IAAcA,EAAkB,GAAW,eAAe;IAN9D,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAMvD,EAAY,EAAU,MAAM,KAAK,MAAM;GAEuB,CAAC;GACvE,IAAI,CAAC,GACH,OAAO,CAAC;GAEV,IAAM,IAAiB,EAAY;GAmBnC,OAlBK,IAkBE,CAAC,EAAU,OAfA,GAAM,GAAM,GAAQ,GAAa,MAE1C,EAAe;IAEpB;IACA;IACA;IACA;IACA;IAEA;IACA;IACA,gBAXqBkE,GAAsB,GAAM,CAWpC;GACf,CAAC,CAE6B,IAjBvB,CAAC;EAkBZ,CAAC,CACH;CACF;CAMA,oBAAoB,GAAc;EAChC,IAAM,EAAE,cAAW;EAEnB,OADmBQ,GAAe,CAAC,GAAG,KAAK,UAAU,EAAE,QAAQ,CAC/C,EAAE,aAAa,GAAM,MAAc;GACjD,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAMU,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD,GACM,IAAsB7B,EAC1B,GACA,uBACA,CACF;GAIA,OAHK,KAGG,MAAgB;IACtB,EAAoB,KAAK,GAAS;KAAE;KAAa;IAAK,CAAC;GACzD,IAJS;EAKX,GAAG,CAAY;CACjB;CAMA,oBAAoB,GAAe;EACjC,IAAM,EAAE,cAAW;EAEnB,OADmBmB,GAAe,CAAC,GAAG,KAAK,UAAU,CACrC,EAAE,QACf,GAAW,MAAc;GACxB,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAMU,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD,GACM,IAAqB7B,EACzB,GACA,uBACA,CACF;GAIA,OAHK,KAGG,GAAM,MAAS;IACrB,IAAM,IAAkB,EAAU,GAAM,CAAI;IAC5C,OAAO,EAAmB,KAAK,GAAS,CAAe;GACzD,IALS;EAMX,GACA,OAAmB,MAAS,EAC9B;CACF;CACA,IAAI,YAAY;EACd,IAAM,EAAE,cAAW,MACb,EAAE,sBAAmBM,GAAgB,KAAK,UAAU;EAC1D,OAAO,OAAO,YACZ,EAAe,QAAQ,MAAc,CAAC,CAACN,EAAkB,GAAW,aAAa,CAAC,EAAE,KAAK,MAAc;GACrG,IAAM,IAAsB,KAAK,WAAW,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAQ7F,IAAcA,EAAkB,GAAW,eAAe;IAN9D,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAM/C,EAAY,EAAU,MAAM,KAAK,MAAM;GAEuB,CAAC;GAoBvE,OAnBK,IAmBE,CAAC,EAAU,OAhBA,GAAM,GAAM,MAAW;IACvC,IAAM,IAAiB0D,GAAsB,GAAM,CAAmB;IACtE,OAAO,EAAY,EAAE;KAEnB;KACA;KACA;KAEA;KACA;KACA;KACA,mBAAmB,MAAU;MAC3B,GAAyB,GAAM,GAAQ,CAAK;KAC9C;IACF,CAAC;GACH,CACgC,IAlBvB,CAAC;EAmBZ,CAAC,CACH;CACF;CAeA,UAAU;EAcR,AAbA,KAAK,WAAW,SAAS,MAAc;GACrC,IAAI,IAAU;GACd,OAAO,EAAQ,SAAQ;IACrB,IAAM,IAAS,EAAQ;IAIvB,AAHI,EAAO,UAAU,MACnB,EAAO,QAAQ,OAEjB,IAAU;GACZ;EACF,CAAC,GACD,KAAK,aAAa,CAAC,GACnB,KAAK,iBAAiB,CAAC,GACvB,KAAK,SAAS,MACd,KAAK,SAAS;CAChB;CAKA,kBAAkB;EAChB,IAAM,IAAa,KAAK;EAIxB,AAHA,KAAK,OAAO,mBAAmB,OAAO,YACpC,EAAW,KAAK,MAAc,CAAC,EAAU,MAAM,EAAU,OAAO,CAAC,CACnE,GACA,EAAW,SAAS,MAAc;GAEhC,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD,QAAQ,KAAK;IACb,MAAMkB,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD;GACA,AAAI,EAAU,SAAS,WACKzB,EAAaJ,EAAkB,GAAW,eAAe,CAAO,CAAC,KAAkB,OAE3G,KAAK,gBAAgB,KAAK,EAAU,IAAI;GAG5C,IAAM,IAAiBA,EAAkB,GAAW,kBAAkB,CAAO,GACvE,IAAWA,EAAkB,GAAW,YAAY,CAAO,GAC3D,IAAWA,EAAkB,GAAW,YAAY,CAAO,GAC3D,IAAoBA,EACxB,GACA,qBACA,CACF,GACM,IAAgBA,EAAkB,GAAW,iBAAiB,CAAO,GACrE,IAAUA,EAAkB,GAAW,WAAW,CAAO,GACzD,IAASA,EAAkB,GAAW,UAAU,CAAO,GACvD,IAAYA,EAAkB,GAAW,aAAa,CAAO;GAsBnE,AArBI,KACF,KAAK,OAAO,GAAG,gBAAgB,CAAc,GAE3C,KACF,KAAK,OAAO,GAAG,UAAU,CAAQ,GAE/B,KACF,KAAK,OAAO,GAAG,UAAU,CAAQ,GAE/B,KACF,KAAK,OAAO,GAAG,mBAAmB,CAAiB,GAEjD,KACF,KAAK,OAAO,GAAG,eAAe,CAAa,GAEzC,KACF,KAAK,OAAO,GAAG,SAAS,CAAO,GAE7B,KACF,KAAK,OAAO,GAAG,QAAQ,CAAM,GAE3B,KACF,KAAK,OAAO,GAAG,WAAW,CAAS;EAEvC,CAAC;CACH;AACF;AACA,GAAiB,UAAUoB,IAC3B,GAAiB,OAAOD,IACxB,GAAiB,UAAUlB,IAI3BzH,GAASiM,CAAAA,GAAoB;CAC3B,+BAA+BC;CAC/B,gBAAgBC;CAChB,cAAcC;CACd,YAAYC;CACZ,gBAAgBC;CAChB,mBAAmBC;CACnB,cAAcC;CACd,aAAaC;CACb,gBAAgBC;CAChB,qBAAqBC;CACrB,4BAA4BC;AAC9B,CAAC;AAMD,IAAIC,IAAY,MAAM,UAAmBxB,GAAW;CAClD,cAAc;EAEZ,AADA,MAAM,GAAG,SAAS,GAClB,KAAK,OAAO;CACd;CAKA,OAAO,OAAO,IAAS,CAAC,GAAG;EAEzB,OAAO,IAAI,EADY,OAAO,KAAW,aAAa,EAAO,IAAI,CAC7B;CACtC;CACA,UAAU,GAAS;EACjB,OAAO,MAAM,UAAU,CAAO;CAChC;CACA,OAAO,GAAgB;EACrB,IAAM,IAAiB,OAAO,KAAmB,aAAa,EAAe,IAAI;EACjF,OAAO,MAAM,OAAO,CAAc;CACpC;AACF,GAGIa,KAA0BW,EAAU,OAAO;CAC7C,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,KAAK,EACvB;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAI,EAAU,yBAAyB;GAC5C,OAAO,EACL,+BAA+B;IAC7B,IAAM,EAAE,cAAW,MACb,EAAE,UAAO,cAAW,GACpB,EAAE,QAAK,iBAAc,GACrB,EAAE,cAAW,GACb,IAAO,KAAK,IAAI,GAAG,EAAO,KAAK,MAAW,EAAO,MAAM,GAAG,CAAC,GAC3D,IAAK,KAAK,IAAI,GAAG,EAAO,KAAK,MAAW,EAAO,IAAI,GAAG,CAAC,GACvD,IAAkBhE,GAA6B,CAAM;IAE3D,OAAOD,GAAe,GAAK;KADX;KAAM;IACS,GAAG;KAChC,GAAG,KAAK,QAAQ,mBAAmB,KAAK,IAAsD,CAAC,IAAnD,EAAE,gBAAgB,KAAK,QAAQ,eAAe;KAC1F;IACF,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAGGsD,KAAWU,EAAU,OAAO;CAC9B,MAAM;CACN,cAAc;EACZ,OAAO,EACL,GAAG1M,GACL;CACF;AACF,CAAC,GAIGiM,KAASS,EAAU,OAAO;CAC5B,MAAM;CACN,SAAS,EAAE,gBAAa,2BAAwB;EAE9C,IAAM,UAAiB;GACrB,IAAS;GACT,MAAkB,IAAa,KAAK,OAAO,QAAQ,sBAA6C,SAA+B,oBAA0C,KAAK,GAAK,CAAW,KAAkB,EAAY,QAAQ,SAAS,GAC3O;GAEF,IAAM,IAAkB1F,GAAwB,EAAY,QAAQ,CAAC,GAAa,GAAG,CAAoB,CAAC;GAE1G,GADiC,CAC3B,EAAE,SAAS,MAAW;IAC1B,AAAI,EAAgB,QAAQ,UAAU,EAAO,SAAS,IAAI,EAAE,gBAAgB,EAAgB,QAAQ,UAAU,EAAO,SAAS,EAAE,EAAE,iBAChI,EAAgB,OAAO,aAAa,EAAO,SAAS,MAAM,EAAO,SAAS,KAAK,GAAM,MAAS;KAC5F,IAAM,IAAK,IAAO,EAAK,WAAW,GAC5B,IAAqB,EAAO,SAAS,QAAQ,KAAQ,KAAM,EAAO,SAAS;KACjF,KAAK,OAAO,KAAK,UAAU;MACzB,MAAM;MACN;MACA;MACA;MACA,SAAS,EAAgB,QAAQ,IAAI,CAAI;MACzC,OAAO,EAAgB,QAAQ,IAAI,CAAE;MACrC,cAAc,EAAO;MACrB,UAAU,EAAO;MACjB,SAAS,CAAC;MACV,QAAQ,KAAK;MACb;MACA,mBAAmB;KACrB,CAAC;IACH,CAAC;GAEL,CAAC;GACD,IAAM,IAAU,EAAgB;GAChC,EAAgB,MAAM,SAAS,GAAM,MAAU;IAE7C,IAAI,aAAgB,IAAgB;KAClC,IAAM,IAAW,EAAQ,MAAM,CAAK,EAAE,IAAI,EAAK,MAAM,EAAE,GACjD,IAAS,EAAQ,MAAM,CAAK,EAAE,IAAI,EAAK,EAAE,GACzC,IAAW,EAAQ,OAAO,EAAE,IAAI,GAAU,EAAE,GAC5C,IAAS,EAAQ,OAAO,EAAE,IAAI,CAAM,GACpC,IAAkB,IAAW,IAAW,EAAgB,IAAI,OAAO,IAAW,CAAC,GAA0B,MAAM,MAAM,MAAS,EAAK,GAAG,EAAK,IAAI,CAAC,IAAI,IACpJ,IAAwB,EAAgB,IAAI,OAAO,CAAM,GAA0B,MAAM,MAAM,MAAS,EAAK,GAAG,EAAK,IAAI,CAAC;KAChI,KAAK,OAAO,KAAK,UAAU;MACzB,MAAM;MACN,MAAM,EAAK;MACX,MAAM,EAAK;MACX,IAAI,EAAK;MACT,cAAc;OACZ,MAAM;OACN,IAAI;MACN;MACA,UAAU;OACR,MAAM;OACN,IAAI;MACN;MACA,SAAS,GAAQ,KAAkB;MACnC,QAAQ,KAAK;MACb;MACA,mBAAmB;KACrB,CAAC;IACH;GACF,CAAC;EACH;EACA,AAAsB,KAAK,OAAO,QAAQ,sBAA4C,QAA8B,SAAsB,KACxI,WAAW,GAAU,CAAC,IAEtB,EAAS;CAEb;AACF,CAAC,GAIGkF,KAAOQ,EAAU,OAAO;CAC1B,MAAM;CACN,wBAAwB;EACtB,OAAO,CACL,IAAIE,EAAQ;GACV,KAAK,IAAIC,EAAW,YAAY;GAChC,OAAO,EACL,aAAa,GAAG,GAAG,GAAO,MAAU;IAClC,KAAK,OAAO,KAAK,QAAQ;KACvB,QAAQ,KAAK;KACb,OAAO;KACP;KACA;IACF,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIGV,KAAWO,EAAU,OAAO;CAC9B,MAAM;CACN,wBAAwB;EACtB,OAAO,CACL,IAAII,EAAQ;GACV,KAAK,IAAIC,EAAW,UAAU;GAC9B,OAAO,EACL,gBAAgB,KAAK,OAAO,QAAQ,SACtC;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIGN,KAAuB,IAAIO,EAAW,aAAa,GACnDZ,KAAcM,EAAU,OAAO;CACjC,MAAM;CACN,wBAAwB;EACtB,IAAM,EAAE,cAAW;EACnB,OAAO,CACL,IAAIO,EAAQ;GACV,KAAKR;GACL,OAAO,EACL,iBAAiB;IACf,QAAQ,GAAM,MAAU;KACtB,EAAO,YAAY;KACnB,IAAM,IAAc,EAAO,MAAM,GAAG,QAAQ,SAAS,EAAE,SAAM,CAAC,EAAE,QAAQ,gBAAgB,EAAK;KAE7F,OADA,EAAK,SAAS,CAAW,GAClB;IACT;IACA,OAAO,GAAM,MAAU;KACrB,EAAO,YAAY;KACnB,IAAM,IAAc,EAAO,MAAM,GAAG,QAAQ,QAAQ,EAAE,SAAM,CAAC,EAAE,QAAQ,gBAAgB,EAAK;KAE5F,OADA,EAAK,SAAS,CAAW,GAClB;IACT;GACF,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIGJ,KAASK,EAAU,OAAO;CAC5B,MAAM;CACN,uBAAuB;EACrB,IAAM,UAAwB,KAAK,OAAO,SAAS,OAAO,EAAE,kBAAe;SACnE,EAAS,cAAc;SAEvB,EAAS,SAAS,EAAE,YAAS;IACjC,IAAM,EAAE,cAAW,WAAQ,GACrB,EAAE,UAAO,eAAY,GACrB,EAAE,QAAK,cAAW,GAClB,IAAa,EAAQ,OAAO,eAAe,IAAM,IAAI,EAAG,IAAI,QAAQ,IAAM,CAAC,IAAI,GAC/E,IAAoB,EAAW,OAAO,KAAK,KAAK,WAChD,IAAY,EAAQ,MAAM,EAAQ,cAClC,IAAY,KAAqB,EAAW,OAAO,eAAe,IAAI,MAAc,EAAQ,MAAMQ,EAAW,QAAQ,CAAG,EAAE,SAAS;IAIzI,OAHI,CAAC,KAAS,CAAC,EAAO,KAAK,eAAe,EAAO,YAAY,UAAU,CAAC,KAAa,KAAa,EAAQ,OAAO,KAAK,SAAS,cACtH,KAEF,EAAS,WAAW;GAC7B,CAAC;SACK,EAAS,gBAAgB;SACzB,EAAS,aAAa;SACtB,EAAS,mBAAmB;EACpC,CAAC,GACK,UAAqB,KAAK,OAAO,SAAS,OAAO,EAAE,kBAAe;SAChE,EAAS,gBAAgB;SACzB,EAAS,kBAAkB;SAC3B,EAAS,YAAY;SACrB,EAAS,kBAAkB;EACnC,CAAC,GAOK,IAAa;GACjB,aAPwB,KAAK,OAAO,SAAS,OAAO,EAAE,kBAAe;UAC/D,EAAS,cAAc;UACvB,EAAS,oBAAoB;UAC7B,EAAS,eAAe;UACxB,EAAS,WAAW;GAC5B,CAAC;GAGC,mBAAmB,KAAK,OAAO,SAAS,SAAS;GACjD,WAAW;GACX,iBAAiB;GACjB,mBAAmB;GACnB,QAAQ;GACR,cAAc;GACd,eAAe,KAAK,OAAO,SAAS,UAAU;EAChD,GACM,IAAW,EACf,GAAG,EACL,GACM,IAAY;GAChB,GAAG;GACH,UAAU;GACV,iBAAiB;GACjB,UAAU;GACV,sBAAsB;GACtB,cAAc;GACd,SAAS;GACT,gBAAgB,KAAK,OAAO,SAAS,qBAAqB;GAC1D,gBAAgB,KAAK,OAAO,SAAS,mBAAmB;EAC1D;EAIA,OAHInI,GAAM,KAAKiB,GAAQ,IACd,IAEF;CACT;CACA,wBAAwB;EACtB,OAAO,CAML,IAAImH,EAAQ;GACV,KAAK,IAAIC,EAAW,eAAe;GACnC,oBAAoB,GAAc,GAAU,MAAa;IACvD,IAAI,EAAa,MAAM,MAAQ,EAAI,QAAQ,aAAa,CAAC,GACvD;IAEF,IAAM,IAAa,EAAa,MAAM,MAAgB,EAAY,UAAU,KAAK,CAAC,EAAS,IAAI,GAAG,EAAS,GAAG,GACxG,IAAW,EAAa,MAAM,MAAgB,EAAY,QAAQ,sBAAsB,CAAC;IAC/F,IAAI,CAAC,KAAc,GACjB;IAEF,IAAM,EAAE,UAAO,SAAM,UAAO,EAAS,WAC/B,IAAUF,EAAW,QAAQ,EAAS,GAAG,EAAE,MAC3C,IAASA,EAAW,MAAM,EAAS,GAAG,EAAE;IAM9C,IAJI,KAAS,EADU,MAAS,KAAW,MAAO,MAK9C,CADY1D,GAAY,EAAS,GAC1B,GACT;IAEF,IAAM,IAAK,EAAS,IACd,IAAQ1J,GAAqB;KACjC,OAAO;KACP,aAAa;IACf,CAAC,GACK,EAAE,gBAAa,IAAIC,GAAe;KACtC,QAAQ,KAAK;KACb;IACF,CAAC;IACD,MAAS,WAAW,GACf,EAAG,MAAM,QAGd,OAAO;GACT;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIGuM,KAAQI,EAAU,OAAO;CAC3B,MAAM;CACN,wBAAwB;EACtB,OAAO,CACL,IAAIW,EAAQ;GACV,KAAK,IAAIC,EAAW,aAAa;GACjC,OAAO,EACL,cAAc,GAAO,GAAG,MAAU;IAChC,KAAK,OAAO,KAAK,SAAS;KACxB,QAAQ,KAAK;KACb,OAAO;KACP;IACF,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIGf,KAAWG,EAAU,OAAO;CAC9B,MAAM;CACN,aAAa;EACX,OAAO,EACL,OAAO,KAAK,EACd;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAIa,EAAQ;GACV,KAAK,IAAIC,EAAW,UAAU;GAC9B,OAAO,EACL,kBAEM,CAAC,KAAK,OAAO,cAAc,KAAK,QAAQ,UAAU,KAAK,IAClD,CAAC,IAEH,EAAE,UAAgB,KAAK,QAAQ,SAAsB,IAAI,EAEpE;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIGhB,KAAgBE,EAAU,OAAO;CACnC,MAAM;CACN,aAAa;EACX,OAAO,EACL,WAAW,KAAK,EAClB;CACF;CACA,sBAAsB;EACpB,IAAI,CAAC,KAAK,QAAQ,WAChB,OAAO,CAAC;EAEV,IAAM,EAAE,sBAAmB/E,GAAgB,KAAK,UAAU;EAC1D,OAAO,CACL;GACE,OAAO,EAAe,QAAQ,MAAc,EAAU,SAAS,MAAM,EAAE,KAAK,MAAc,EAAU,IAAI;GACxG,YAAY,EACV,KAAK;IACH,SAAS,KAAK,QAAQ;IACtB,YAAY,MAAY;KACtB,IAAM,IAAM,EAAQ,aAAa,KAAK;KAItC,OAHI,MAAQ,MAAQ,SAAS,MAAQ,SAAS,MAAQ,UAC7C,IAEF,KAAK,QAAQ;IACtB;IACA,aAAa,MACN,EAAW,MAGT,EACL,KAAK,EAAW,IAClB,IAJS,CAAC;GAMd,EACF;EACF,CACF;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAI8F,EAAS;GACX,KAAK,IAAIC,EAAW,eAAe;GACnC,OAAO,EACL,kBAAkB;IAChB,IAAM,IAAY,KAAK,QAAQ;IAI/B,OAHK,IAGE,EACL,KAAK,EACP,IAJS,CAAC;GAKZ,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAGG,KAAU,MAAM,EAAS;CAC3B,YAAY,GAAK,GAAQ,IAAU,IAAO,IAAO,MAAM;EAMrD,AALA,KAAK,cAAc,MACnB,KAAK,cAAc,MACnB,KAAK,UAAU,GACf,KAAK,cAAc,GACnB,KAAK,SAAS,GACd,KAAK,cAAc;CACrB;CACA,IAAI,OAAO;EACT,OAAO,KAAK,KAAK,KAAK;CACxB;CACA,IAAI,OAAO;EACT,OAAO,KAAK,eAAe,KAAK,YAAY,KAAK;CACnD;CACA,IAAI,UAAU;EACZ,OAAO,KAAK,OAAO,KAAK,SAAS,KAAK,GAAG,EAAE;CAC7C;CACA,IAAI,QAAQ;EAEV,OAAa,KAAK,eAA4B,KAAK,YAAY;CACjE;CACA,IAAI,MAAM;EACR,OAAO,KAAK,YAAY;CAC1B;CACA,IAAI,UAAU;EACZ,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,QAAQ,GAAS;EACnB,IAAI,IAAO,KAAK,MACZ,IAAK,KAAK;EACd,IAAI,KAAK,SAAS;GAChB,IAAI,KAAK,QAAQ,SAAS,GAAG;IAC3B,QAAQ,MAAM,uEAAuE,KAAK,KAAK,MAAM,KAAK,KAAK;IAC/G;GACF;GAEA,AADA,IAAO,KAAK,OAAO,GACnB,IAAK,KAAK,KAAK;EACjB;EACA,KAAK,OAAO,SAAS,gBAAgB;GAAE;GAAM;EAAG,GAAG,CAAO;CAC5D;CACA,IAAI,aAAa;EACf,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,cAAc;EAChB,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,OAAO;EACT,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,OAAO;EAIT,OAHI,KAAK,UACA,KAAK,MAEP,KAAK,YAAY,MAAM,KAAK,YAAY,KAAK;CACtD;CACA,IAAI,QAAQ;EACV,OAAO;GACL,MAAM,KAAK;GACX,IAAI,KAAK;EACX;CACF;CACA,IAAI,KAAK;EAIP,OAHI,KAAK,UACA,KAAK,MAAM,KAAK,OAElB,KAAK,YAAY,IAAI,KAAK,YAAY,KAAK,IAAK,OAAK,KAAK;CACnE;CACA,IAAI,SAAS;EACX,IAAI,KAAK,UAAU,GACjB,OAAO;EAET,IAAM,IAAY,KAAK,YAAY,MAAM,KAAK,YAAY,QAAQ,CAAC;EAEnE,OAAO,IAAI,EADE,KAAK,YAAY,IAAI,QAAQ,CACnB,GAAG,KAAK,MAAM;CACvC;CACA,IAAI,SAAS;EACX,IAAI,IAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,QAAQ,KAAK,UAAU,IAAI,EAAE;EAI1E,OAHI,EAAK,UAAU,KAAK,UACtB,IAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,OAAO,CAAC,IAE5C,IAAI,EAAS,GAAM,KAAK,MAAM;CACvC;CACA,IAAI,QAAQ;EACV,IAAI,IAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,MAAM,KAAK,UAAU,IAAI,EAAE;EAIxE,OAHI,EAAK,UAAU,KAAK,UACtB,IAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,KAAK,CAAC,IAE1C,IAAI,EAAS,GAAM,KAAK,MAAM;CACvC;CACA,IAAI,WAAW;EACb,IAAM,IAAW,CAAC;EAmBlB,OAlBA,KAAK,KAAK,QAAQ,SAAS,GAAM,MAAW;GAC1C,IAAM,IAAU,EAAK,WAAW,CAAC,EAAK,aAChC,IAAgB,EAAK,UAAU,CAAC,EAAK,QACrC,IAAW,EAAK,UAChB,IAAY,KAAK,MAAM,IAAU;GACvC,IAAI,IAAY,KAAK,IAAY,KAAK,YAAY,IAAI,WAAW,GAC/D;GAEF,IAAM,IAAO,KAAK,YAAY,IAAI,QAAQ,CAAS;GACnD,IAAI,CAAC,KAAW,CAAC,KAAY,EAAK,SAAS,KAAK,OAC9C;GAEF,IAAM,IAAe,IAAI,EAAS,GAAM,KAAK,QAAQ,GAAS,KAAW,IAAW,IAAO,IAAI;GAI/F,AAHI,MACF,EAAa,cAAc,KAAK,QAAQ,IAE1C,EAAS,KAAK,CAAY;EAC5B,CAAC,GACM;CACT;CACA,IAAI,aAAa;EACf,OAAO,KAAK,SAAS,MAAM;CAC7B;CACA,IAAI,YAAY;EACd,IAAM,IAAW,KAAK;EACtB,OAAO,EAAS,EAAS,SAAS,MAAM;CAC1C;CACA,QAAQ,GAAU,IAAa,CAAC,GAAG;EACjC,IAAI,IAAO,MACP,IAAc,KAAK;EACvB,OAAO,KAAe,CAAC,IAAM;GAC3B,IAAI,EAAY,KAAK,KAAK,SAAS,GACjC,IAAI,OAAO,KAAK,CAAU,EAAE,SAAS,GAAG;IACtC,IAAM,IAAiB,EAAY,KAAK,OAClC,IAAW,OAAO,KAAK,CAAU;IACvC,KAAK,IAAI,IAAQ,GAAG,IAAQ,EAAS,QAAQ,KAAS,GAAG;KACvD,IAAM,IAAM,EAAS;KACrB,IAAI,EAAe,OAAS,EAAW,IACrC;IAEJ;GACF,OACE,IAAO;GAGX,IAAc,EAAY;EAC5B;EACA,OAAO;CACT;CACA,cAAc,GAAU,IAAa,CAAC,GAAG;EACvC,OAAO,KAAK,iBAAiB,GAAU,GAAY,EAAI,EAAE,MAAM;CACjE;CACA,iBAAiB,GAAU,IAAa,CAAC,GAAG,IAAgB,IAAO;EACjE,IAAI,IAAQ,CAAC;EACb,IAAI,CAAC,KAAK,YAAY,KAAK,SAAS,WAAW,GAC7C,OAAO;EAET,IAAM,IAAW,OAAO,KAAK,CAAU;EAgBvC,OAfA,KAAK,SAAS,SAAS,MAAa;GAC9B,KAAiB,EAAM,SAAS,MAGhC,EAAS,KAAK,KAAK,SAAS,KACC,EAAS,OAAO,MAAQ,EAAW,OAAS,EAAS,KAAK,MAAM,EACtE,KACvB,EAAM,KAAK,CAAQ,GAGnB,OAAiB,EAAM,SAAS,OAGpC,IAAQ,EAAM,OAAO,EAAS,iBAAiB,GAAU,GAAY,CAAa,CAAC;EACrF,CAAC,GACM;CACT;CACA,aAAa,GAAY;EACvB,IAAM,EAAE,UAAO,KAAK,OAAO;EAK3B,AAJA,EAAG,cAAc,KAAK,MAAM,KAAK,GAAG;GAClC,GAAG,KAAK,KAAK;GACb,GAAG;EACL,CAAC,GACD,KAAK,OAAO,KAAK,SAAS,CAAE;CAC9B;AACF,GAGI,KAAQ;AAyEZ,SAAS,GAAe,GAAQ,GAAO,GAAQ;CAC7C,IAAM,IAAiB,SAAS,cAAc,0BAA0B,IAAS,IAAI,MAAW,GAAG,EAAE;CACrG,IAAI,MAAmB,MACrB,OAAO;CAET,IAAM,IAAY,SAAS,cAAc,OAAO;CAOhD,OANI,KACF,EAAU,aAAa,SAAS,CAAK,GAEvC,EAAU,aAAa,oBAAoB,IAAS,IAAI,MAAW,MAAM,EAAE,GAC3E,EAAU,YAAY,GACtB,SAAS,qBAAqB,MAAM,EAAE,GAAG,YAAY,CAAS,GACvD;AACT;AAGA,IAAI,KAAS,cAAc,GAAa;CACtC,YAAY,IAAU,CAAC,GAAG;EA8ExB,AA7EA,MAAM,GACN,KAAK,MAAM,MACX,KAAK,YAAY,UACjB,KAAK,aAAa,MAClB,KAAK,YAAY,IACjB,KAAK,YAAY,IAIjB,KAAK,gBAAgB,IACrB,KAAK,mBAAmB,CAAC,GAIzB,KAAK,aAAa,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,GACvD,KAAK,UAAU;GACb,SAAS,OAAO,WAAa,MAAc,SAAS,cAAc,KAAK,IAAI;GAC3E,SAAS;GACT,WAAW;GACX,aAAa,KAAK;GAClB,YAAY,CAAC;GACb,WAAW;GACX,UAAU;GACV,eAAe,KAAK;GACpB,aAAa,CAAC;GACd,cAAc,CAAC;GACf,sBAAsB,CAAC;GACvB,kBAAkB;GAClB,kBAAkB;GAClB,sBAAsB;GACtB,oBAAoB;GACpB,kBAAkB;GAClB,sBAAsB;GACtB,gBAAgB;GAChB,eAAe;GACf,iBAAiB;GACjB,gBAAgB;GAChB,yBAAyB;GACzB,qBAAqB;GACrB,eAAe;GACf,cAAc;GACd,iBAAiB;GACjB,iBAAiB,EAAE,eAAY;IAC7B,MAAM;GACR;GACA,eAAe;GACf,cAAc;GACd,gBAAgB;GAChB,oCAAoC;EACtC,GACA,KAAK,yBAAyB,IAC9B,KAAK,sBAAsB,MAI3B,KAAK,QAAQ;GACX;GACA;EACF,GACA,KAAK,WAAW,CAAO,GACvB,KAAK,uBAAuB,GAC5B,KAAK,qBAAqB,GAC1B,KAAK,aAAa,GAClB,KAAK,GAAG,gBAAgB,KAAK,QAAQ,cAAc,GACnD,KAAK,KAAK,gBAAgB,EAAE,QAAQ,KAAK,CAAC,GAC1C,KAAK,GAAG,SAAS,KAAK,QAAQ,OAAO,GACrC,KAAK,GAAG,WAAW,KAAK,QAAQ,SAAS,GACzC,KAAK,GAAG,gBAAgB,KAAK,QAAQ,cAAc,GACnD,KAAK,GAAG,UAAU,KAAK,QAAQ,QAAQ,GACvC,KAAK,GAAG,UAAU,KAAK,QAAQ,QAAQ,GACvC,KAAK,GAAG,mBAAmB,KAAK,QAAQ,iBAAiB,GACzD,KAAK,GAAG,eAAe,KAAK,QAAQ,aAAa,GACjD,KAAK,GAAG,SAAS,KAAK,QAAQ,OAAO,GACrC,KAAK,GAAG,QAAQ,KAAK,QAAQ,MAAM,GACnC,KAAK,GAAG,WAAW,KAAK,QAAQ,SAAS,GACzC,KAAK,GAAG,SAAS,EAAE,UAAO,UAAO,eAAY,KAAK,QAAQ,OAAO,GAAO,GAAO,CAAK,CAAC,GACrF,KAAK,GAAG,UAAU,EAAE,UAAO,eAAY,KAAK,QAAQ,QAAQ,GAAO,CAAK,CAAC,GACzE,KAAK,GAAG,UAAU,KAAK,QAAQ,QAAQ;EACvC,IAAM,IAAa,KAAK,UAAU,GAC5B,IAAY/I,GAAqB,GAAY,KAAK,QAAQ,SAAS;EAMzE,AALA,KAAK,cAAc,EAAY,OAAO;GACpC,KAAK;GACL,QAAQ,KAAK;GACb,WAAW,KAAa,KAAK;EAC/B,CAAC,GACG,KAAK,QAAQ,WACf,KAAK,MAAM,KAAK,QAAQ,OAAO;CAEnC;CAIA,MAAM,GAAI;EACR,IAAI,OAAO,WAAa,KACtB,MAAU,MACR,0GACF;EAOF,AALA,KAAK,WAAW,CAAE,GAClB,KAAK,KAAK,SAAS,EAAE,QAAQ,KAAK,CAAC,GAC/B,KAAK,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,GAAG,KAC9C,SAAS,KAAK,YAAY,KAAK,GAAG,GAEpC,OAAO,iBAAiB;GAClB,KAAK,gBAGL,KAAK,QAAQ,cAAc,MAAS,KAAK,QAAQ,cAAc,QACjE,KAAK,SAAS,MAAM,KAAK,QAAQ,SAAS,GAE5C,KAAK,KAAK,UAAU,EAAE,QAAQ,KAAK,CAAC,GACpC,KAAK,gBAAgB;EACvB,GAAG,CAAC;CACN;CAIA,UAAU;EACR,IAAI,KAAK,YAAY;GACnB,IAAM,IAAM,KAAK,WAAW;GAI5B,AAHI,GAA2B,UAC7B,OAAO,EAAI,QAEb,KAAK,WAAW,QAAQ;EAC1B;EAGA,IAFA,KAAK,aAAa,MAClB,KAAK,gBAAgB,IACjB,KAAK,OAAO,CAAC,SAAS,iBAAiB,IAAI,KAAK,WAAW,EAAE,QAC/D,IAAI;GACF,AAAI,OAAO,KAAK,IAAI,UAAW,aAC7B,KAAK,IAAI,OAAO,IACP,KAAK,IAAI,cAClB,KAAK,IAAI,WAAW,YAAY,KAAK,GAAG;EAE5C,SAAS,GAAO;GACd,QAAQ,KAAK,iCAAiC,CAAK;EACrD;EAGF,AADA,KAAK,MAAM,MACX,KAAK,KAAK,WAAW,EAAE,QAAQ,KAAK,CAAC;CACvC;CAIA,IAAI,UAAU;EACZ,OAAO,KAAK;CACd;CAIA,IAAI,WAAW;EACb,OAAO,KAAK,eAAe;CAC7B;CAIA,QAAQ;EACN,OAAO,KAAK,eAAe,MAAM;CACnC;CAIA,MAAM;EACJ,OAAO,KAAK,eAAe,IAAI;CACjC;CAIA,YAAY;EACV,AAAI,KAAK,QAAQ,aAAa,OAAO,WAAa,QAChD,KAAK,MAAM,GAAe,IAAO,KAAK,QAAQ,WAAW;CAE7D;CAMA,WAAW,IAAU,CAAC,GAAG;EACvB,KAAK,UAAU;GACb,GAAG,KAAK;GACR,GAAG;EACL,GACI,GAAC,KAAK,cAAc,CAAC,KAAK,SAAS,KAAK,iBAGxC,KAAK,QAAQ,eACf,KAAK,KAAK,SAAS,KAAK,QAAQ,WAAW,GAE7C,KAAK,KAAK,YAAY,KAAK,KAAK;CAClC;CAIA,YAAY,GAAU,IAAa,IAAM;EAEvC,AADA,KAAK,WAAW,EAAE,YAAS,CAAC,GACxB,KACF,KAAK,KAAK,UAAU;GAAE,QAAQ;GAAM,aAAa,KAAK,MAAM;GAAI,sBAAsB,CAAC;EAAE,CAAC;CAE9F;CAIA,IAAI,aAAa;EACf,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ,KAAK,KAAK;CACzD;CAIA,IAAI,OAAO;EAIT,OAHI,KAAK,aACA,KAAK,aAEP,IAAI,MACT;GACE,OAAO,KAAK;GACZ,cAAc,MAAU;IACtB,KAAK,cAAc;GACrB;GACA,WAAW,MAAO;IAChB,KAAK,oBAAoB,CAAE;GAC7B;GAEA,WAAW;GACX,UAAU;GACV,UAAU;GACV,aAAa;EACf,GACA,EACE,MAAM,GAAK,MAAQ;GACjB,IAAI,KAAK,YACP,OAAO,KAAK,WAAW;GAEzB,IAAI,MAAQ,SACV,OAAO,KAAK;GAEd,IAAI,KAAO,GACT,OAAO,QAAQ,IAAI,GAAK,CAAG;GAE7B,MAAU,MACR,yEAAyE,EAAI,uCAC/E;EACF,EACF,CACF;CACF;CAIA,IAAI,QAAQ;EAIV,OAHI,KAAK,eACP,KAAK,cAAc,KAAK,KAAK,QAExB,KAAK;CACd;CAQA,eAAe,GAAQ,GAAe;EACpC,IAAM,IAAU6C,GAAW,CAAa,IAAI,EAAc,GAAQ,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,SAAS,CAAM,GACrH,IAAQ,KAAK,MAAM,YAAY,EAAE,WAAQ,CAAC;EAEhD,OADA,KAAK,KAAK,YAAY,CAAK,GACpB;CACT;CAOA,iBAAiB,GAAyB;EACxC,IAAI,KAAK,aACP;EAEF,IAAM,IAAc,KAAK,MAAM,SAC3B,IAAU;EAKd,IAJA,CAAC,EAAE,OAAO,CAAuB,EAAE,SAAS,MAAoB;GAC9D,IAAM,IAAO,OAAO,KAAoB,WAAW,GAAG,EAAgB,KAAK,EAAgB;GAC3F,IAAU,EAAQ,QAAQ,MAAW,CAAC,EAAO,IAAI,WAAW,CAAI,CAAC;EACnE,CAAC,GACG,EAAY,WAAW,EAAQ,QACjC;EAEF,IAAM,IAAQ,KAAK,MAAM,YAAY,EACnC,WACF,CAAC;EAED,OADA,KAAK,KAAK,YAAY,CAAK,GACpB;CACT;CAIA,yBAAyB;EAyBvB,IAAM,IAAgB,CAAC,GAvBA,KAAK,QAAQ,uBAAuB;GACzD2E;GACAJ,GAAwB,UAAU,EAChC,gBAA4B,KAAK,QAAQ,sBAA4C,yBAA+C,eACtI,CAAC;GACDC;GACAI;GACAC;GACAE,GAAS,UAAU,EACjB,OAAmB,KAAK,QAAQ,sBAA4C,UAAgC,MAC9G,CAAC;GACDL;GACAI;GACAL;GACAO,GAAc,UAAU,EACtB,WAAW,KAAK,QAAQ,cAC1B,CAAC;EACH,EAAE,QAAQ,MACJ,OAAO,KAAK,QAAQ,wBAAyB,WACxC,KAAK,QAAQ,qBAAqB,EAAI,UAAU,KAElD,EACR,IAAI,CAAC,GACoC,GAAG,KAAK,QAAQ,UAAU,EAAE,QAAQ,MACrE;GAAC;GAAa;GAAQ;EAAM,EAAE,SAAS,GAAuC,IAAI,CAC1F;EACD,KAAK,mBAAmB,IAAIX,GAAiB,GAAe,IAAI;CAClE;CAIA,uBAAuB;EACrB,KAAK,iBAAiB,IAAI9L,GAAe,EACvC,QAAQ,KACV,CAAC;CACH;CAIA,eAAe;EACb,KAAK,SAAS,KAAK,iBAAiB;CACtC;CAIA,YAAY;EACV,IAAI;EACJ,IAAI;GACF,IAAM+G,GAAe,KAAK,QAAQ,SAAS,KAAK,QAAQ,KAAK,QAAQ,cAAc,EACjF,uBAAuB,KAAK,QAAQ,mBACtC,CAAC;EACH,SAAS,GAAG;GACV,IAAI,EAAE,aAAa,UAAU,CAAC,CAAC,wCAAwC,sCAAsC,EAAE,SAAS,EAAE,OAAO,GAC/H,MAAM;GAcR,AAZA,KAAK,KAAK,gBAAgB;IACxB,QAAQ;IACR,OAAO;IACP,4BAA4B;KAM1B,AALI,mBAAmB,KAAK,WAAW,OAAO,KAAK,QAAQ,iBAAkB,YAAY,KAAK,QAAQ,kBAEpG,KAAK,QAAQ,cAAc,aAAa,KAE1C,KAAK,QAAQ,aAAa,KAAK,QAAQ,WAAW,QAAQ,MAAc,EAAU,SAAS,eAAe,GAC1G,KAAK,uBAAuB;IAC9B;GACF,CAAC,GACD,IAAMA,GAAe,KAAK,QAAQ,SAAS,KAAK,QAAQ,KAAK,QAAQ,cAAc,EACjF,uBAAuB,GACzB,CAAC;EACH;EACA,OAAO;CACT;CAIA,WAAW,GAAS;EAClB,IAAM,EAAE,gBAAa,0CAAuC,KAAK,SAC3D,IAAe,EAAY,uBAAuB,KAAK,oBAAoB,KAAK,IAAI,GACpF,IAAW,IAAqC,KAAK,iBAAiB,oBAAoB,CAAY,IAAI,GAC1G,IAA0B,EAAY,qBACtC,IAAsB,KAAK,iBAAiB,oBAAoB,CAAuB;EAC7F,KAAK,aAAa,IAAI,GAAW,GAAS;GACxC,GAAG;GACH,YAAY;IAEV,MAAM;IACN,GAAG,GAA2C;GAChD;GACA,qBAAqB;GACrB;GACA,OAAO,KAAK;GACZ,WAAW,KAAK,iBAAiB;GACjC,WAAW,KAAK,iBAAiB;EACnC,CAAC;EACD,IAAM,IAAW,KAAK,MAAM,YAAY,EACtC,SAAS,KAAK,iBAAiB,QACjC,CAAC;EAGD,AAFA,KAAK,KAAK,YAAY,CAAQ,GAC9B,KAAK,aAAa,GAClB,KAAK,UAAU;EACf,IAAM,IAAM,KAAK,KAAK;EACtB,EAAI,SAAS;CACf;CAIA,kBAAkB;EACZ,KAAK,KAAK,eAGd,KAAK,KAAK,SAAS;GACjB,WAAW,KAAK,iBAAiB;GACjC,WAAW,KAAK,iBAAiB;EACnC,CAAC;CACH;CAIA,eAAe;EACb,KAAK,KAAK,IAAI,YAAY,GAAG,KAAK,UAAU,GAAG,KAAK,KAAK,IAAI;CAC/D;CACA,mBAAmB,GAAI;EAGrB,AAFA,KAAK,yBAAyB,IAC9B,EAAG,GACH,KAAK,yBAAyB;EAC9B,IAAM,IAAK,KAAK;EAEhB,OADA,KAAK,sBAAsB,MACpB;CACT;CAMA,oBAAoB,GAAa;EAC/B,IAAI,KAAK,KAAK,aACZ;EAEF,IAAI,KAAK,wBAAwB;GAC/B,IAAI,CAAC,KAAK,qBAAqB;IAC7B,KAAK,sBAAsB;IAC3B;GACF;GACA,EAAY,MAAM,SAAS,MAEZ,KAAK,qBAA2C,KAAK,CAAI,CACvE;GACD;EACF;EACA,IAAM,EAAE,UAAO,oBAAiB,KAAK,MAAM,iBAAiB,CAAW,GACjE,IAAsB,CAAC,KAAK,MAAM,UAAU,GAAG,EAAM,SAAS,GAC9D,IAAmB,EAAa,SAAS,CAAW,GACpD,IAAY,KAAK;EAMvB,IALA,KAAK,KAAK,qBAAqB;GAC7B,QAAQ;GACR;GACA,WAAW;EACb,CAAC,GACG,CAAC,GACH;EAQF,AANA,KAAK,KAAK,YAAY,CAAK,GAC3B,KAAK,KAAK,eAAe;GACvB,QAAQ;GACR;GACA,sBAAsB,EAAa,MAAM,CAAC;EAC5C,CAAC,GACG,KACF,KAAK,KAAK,mBAAmB;GAC3B,QAAQ;GACR;EACF,CAAC;EAEH,IAAM,IAAoB,EAAa,UAAU,MAAO,EAAG,QAAQ,OAAO,KAAK,EAAG,QAAQ,MAAM,CAAC,GAC3F,IAAS,GAAuD,QAAQ,OAAO,GAC/E,IAAQ,GAAuD,QAAQ,MAAM;EACnF,AAAI,KACF,KAAK,KAAK,SAAS;GACjB,QAAQ;GACR,OAAO,EAAO;GAEd,aAAa;EACf,CAAC,GAEC,KACF,KAAK,KAAK,QAAQ;GAChB,QAAQ;GACR,OAAO,EAAM;GAEb,aAAa;EACf,CAAC,GAEC,IAAY,QAAQ,eAAe,KAAK,CAAC,EAAa,MAAM,MAAO,EAAG,UAAU,KAAK,EAAU,IAAI,GAAG,EAAM,GAAG,MAGnH,KAAK,KAAK,UAAU;GAClB,QAAQ;GACR;GACA,sBAAsB,EAAa,MAAM,CAAC;EAC5C,CAAC;CACH;CAIA,cAAc,GAAY;EACxB,OAAO+B,GAAc,KAAK,OAAO,CAAU;CAC7C;CACA,SAAS,GAAkB,GAAuB;EAChD,IAAM,IAAO,OAAO,KAAqB,WAAW,IAAmB,MACjE,IAAa,OAAO,KAAqB,WAAW,IAAwB;EAClF,OAAO,GAAS,KAAK,OAAO,GAAM,CAAU;CAC9C;CAIA,UAAU;EACR,OAAO,KAAK,MAAM,IAAI,OAAO;CAC/B;CAIA,UAAU;EACR,OAAOtB,GAAoB,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM;CAChE;CAIA,QAAQ,GAAS;EACf,IAAM,EAAE,oBAAiB,QAAQ,qBAAkB,CAAC,MAAM,KAAW,CAAC;EACtE,OAAO,GAAQ,KAAK,MAAM,KAAK;GAC7B;GACA,iBAAiB;IACf,GAAGoB,GAA6B,KAAK,MAAM;IAC3C,GAAG;GACL;EACF,CAAC;CACH;CAIA,IAAI,UAAU;EACZ,OAAOa,GAAY,KAAK,MAAM,GAAG;CACnC;CAIA,UAAU;EACJ,KAAK,cAGT,KAAK,YAAY,IACjB,KAAK,KAAK,SAAS,GACnB,KAAK,QAAQ,GACb,KAAK,mBAAmB,GACxB,KAAK,iBAAiB,QAAQ,GAC9B,KAAK,mBAAmB,MACxB,KAAK,SAAS,MACd,KAAK,iBAAiB,MACtB,KAAK,mBAAmB,CAAC;CAC3B;CAIA,IAAI,cAAc;EAEhB,OAAmB,KAAK,YAAkC,eAA4B;CACxF;CACA,MAAM,GAAU,GAAY;EAE1B,OAAc,KAAK,MAA4B,cAAc,GAAU,CAAU,KAAM;CACzF;CACA,OAAO,GAAU,GAAY;EAE3B,OAAc,KAAK,MAA4B,iBAAiB,GAAU,CAAU,KAAM;CAC5F;CACA,KAAK,GAAK;EAER,OAAO,IAAI,GADE,KAAK,MAAM,IAAI,QAAQ,CACd,GAAG,IAAI;CAC/B;CACA,IAAI,OAAO;EACT,OAAO,KAAK,KAAK,CAAC;CACpB;AACF;AAwEA,SAASmE,GAAuB,GAAQ;CACtC,OAAO,IAAIjD,GAAU;EACnB,MAAM,EAAO;EACb,UAAU,EAAE,UAAO,UAAO,eAAY;GACpC,IAAM,IAAS,EAAM,IAAI,QAAQ,EAAM,IAAI,GACrC,IAAajD,EAAa,EAAO,eAAe,KAAK,GAAG,CAAK,KAAK,CAAC;GACzE,IAAI,CAAC,EAAO,KAAK,EAAE,EAAE,eAAe,EAAO,MAAM,EAAE,GAAG,EAAO,WAAW,EAAE,GAAG,EAAO,IAAI,GACtF,OAAO;GAET,EAAM,GAAG,OAAO,EAAM,MAAM,EAAM,EAAE,EAAE,aAAa,EAAM,MAAM,EAAM,MAAM,EAAO,MAAM,CAAU;EACpG;EACA,UAAU,EAAO;CACnB,CAAC;AACH;AAytBA5H,GAAS+N,CAAAA,GAAkB;CACzB,mCAAmCC;CACnC,+BAA+BC;CAC/B,gCAAgCC;CAChC,uBAAuBC;CACvB,2BAA2BC;CAC3B,mCAAmCC;CACnC,2BAA2BC;AAC7B,CAAC;AAGD,SAASH,GAAgB,GAAY;CACnC,IAAI,CAAE,GAAyC,KAAK,GAClD,OAAO,CAAC;CAEV,IAAM,IAAa,CAAC,GACd,IAAgB,CAAC,GACjB,IAAa,EAAW,QAAQ,sBAAsB,OAC1D,EAAc,KAAK,CAAK,GACjB,YAAY,EAAc,SAAS,EAAE,IAC7C,GACK,IAAe,EAAW,MAAM,6BAA6B;CACnE,AAAI,MAEF,EAAW,QADK,EAAa,KAAK,MAAU,EAAM,KAAK,EAAE,MAAM,CAAC,CACvC,EAAE,KAAK,GAAG;CAErC,IAAM,IAAU,EAAW,MAAM,2BAA2B;CAM5D,AALI,MACF,EAAW,KAAK,EAAQ,KAI1B,MADwB,KAAK,EAAW,SAAS,0CAAO,CAChD,EAAE,SAAS,GAAG,GAAK,OAAe;EAGxC,IAAM,IAAc,EADA,SAAgB,EAAU,MAAM,kBAAkB,IAAyB,MAAO,KAAK,EAC/D;EAC5C,AAAI,MACF,EAAW,KAAO,EAAY,MAAM,GAAG,EAAE;CAE7C,CAAC;CACD,IAAM,IAAc,EAAW,QAAQ,+BAA+B,EAAE,EAAE,QAAQ,8BAA8B,EAAE,EAAE,QAAQ,0CAA0C,EAAE,EAAE,KAAK;CAS/K,OARI,KAEF,EADiC,MAAM,KAAK,EAAE,OAAO,OAC1C,EAAE,SAAS,MAAS;EAC7B,AAAI,EAAK,MAAM,kBAAkB,MAC/B,EAAW,KAAQ;CAEvB,CAAC,GAEI;AACT;AACA,SAASG,GAAoB,GAAY;CACvC,IAAI,CAAC,KAAc,OAAO,KAAK,CAAU,EAAE,WAAW,GACpD,OAAO;CAET,IAAM,IAAQ,CAAC;CAkBf,OAjBI,EAAW,SAEb,OADuB,EAAW,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OACvD,EAAE,SAAS,MAAQ,EAAM,KAAK,IAAI,GAAK,CAAC,GAE5C,EAAW,MACb,EAAM,KAAK,IAAI,EAAW,IAAI,GAEhC,OAAO,QAAQ,CAAU,EAAE,SAAS,CAAC,GAAK,OAAW;EAC/C,MAAQ,WAAW,MAAQ,SAG3B,MAAU,KACZ,EAAM,KAAK,CAAG,IACL,MAAU,MAAS,KAAS,QACrC,EAAM,KAAK,GAAG,EAAI,IAAI,OAAO,CAAK,EAAE,EAAE;CAE1C,CAAC,GACM,EAAM,KAAK,GAAG;AACvB;AAGA,SAASN,GAA4B,GAAS;CAC5C,IAAM,EACJ,aACA,MAAM,GACN,iBAAiB,IAAmBG,IACpC,qBAAqB,IAAuBG,IAC5C,uBAAoB,CAAC,GACrB,wBAAqB,CAAC,GACtB,yBACE,GACE,IAAY,KAAgB,GAC5B,KAAoB,MAAU;EAClC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAW,CAAC;EAMlB,OALA,EAAkB,SAAS,MAAQ;GACjC,AAAI,KAAO,MACT,EAAS,KAAO,EAAM;EAE1B,CAAC,GACM;CACT;CACA,OAAO;EACL,gBAAgB,GAAO,MAAO;GAC5B,IAAM,IAAQ;IAAE,GAAG;IAAmB,GAAG,EAAM;GAAW;GAC1D,OAAO,EAAG,WAAW,GAAU,GAAO,CAAC,CAAC;EAC1C;EACA,mBAAmB;GACjB,MAAM;GACN,OAAO;GACP,MAAM,GAAK;IAET,IAAM,IAAY,OAAO,OAAO,EAAU,YAAY,GAAG,GACnD,IAAc,EAAI,MAAM,CAAK,GAAyB;IAC5D,OAAO,MAAU,KAAK,IAAY,KAAR;GAC5B;GACA,SAAS,GAAK,GAAS,GAAQ;IAC7B,IAAM,IAAY,OAAO,OAAO,EAAU,uCAAuC,GAC3E,IAAQ,EAAI,MAAM,CAAK;IAC7B,IAAI,CAAC,GACH;IAGF,IAAM,IAAa,EADA,EAAM,MAAM,EACe;IACtB,OAAmB,MAAM,MAAa,EAAE,KAAY,EAC1D,GAGlB,OAAO;KACL,MAAM;KACN,KAAK,EAAM;KACX;IACF;GACF;EACF;EACA,iBAAiB,MAAS;GAExB,IAAM,IAAQ,EADQ,EAAiB,EAAK,SAAS,CAAC,CACP,CAAC;GAEhD,OAAO,MAAM,IADM,IAAQ,KAAK,EAAM,KAAK,GACP;EACtC;CACF;AACF;AAGA,SAASL,GAAwB,GAAS;CACxC,IAAM,EACJ,aACA,MAAM,GACN,eACA,iBAAiB,IAAmBE,IACpC,qBAAqB,IAAuBG,IAC5C,uBAAoB,CAAC,GACrB,aAAU,SACV,yBACE,GACE,IAAY,KAAgB,GAC5B,KAAoB,MAAU;EAClC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAW,CAAC;EAMlB,OALA,EAAkB,SAAS,MAAQ;GACjC,AAAI,KAAO,MACT,EAAS,KAAO,EAAM;EAE1B,CAAC,GACM;CACT;CACA,OAAO;EACL,gBAAgB,GAAO,MAAO;GAC5B,IAAI;GACJ,IAAI,GAAY;IACd,IAAM,IAAgB,EAAW,CAAK;IACtC,IAAc,OAAO,KAAkB,WAAW,CAAC;KAAE,MAAM;KAAQ,MAAM;IAAc,CAAC,IAAI;GAC9F,OAAO,AAGL,IAHS,MAAY,UACP,EAAG,cAAc,EAAM,UAAU,CAAC,CAAC,IAEnC,EAAG,YAAY,EAAM,UAAU,CAAC,CAAC;GAEjD,IAAM,IAAQ;IAAE,GAAG;IAAmB,GAAG,EAAM;GAAW;GAC1D,OAAO,EAAG,WAAW,GAAU,GAAO,CAAW;EACnD;EACA,mBAAmB;GACjB,MAAM;GACN,OAAO;GACP,MAAM,GAAK;IAET,IAAM,IAAY,OAAO,OAAO,KAAa,GAAG,GAC1C,IAAc,EAAI,MAAM,CAAK,GAAyB;IAC5D,OAAO,MAAU,KAAK,IAAY,KAAR;GAC5B;GACA,SAAS,GAAK,GAAS,GAAO;IAE5B,IAAM,IAAmB,OAAO,OAAO,EAAU,8BAA8B,GACzE,IAAe,EAAI,MAAM,CAAY;IAC3C,IAAI,CAAC,GACH;IAEF,IAAM,CAAC,GAAY,IAAa,MAAM,GAChC,IAAa,EAAiB,CAAU,GAC1C,IAAQ,GACN,IAAW,EAAW,QACxB,IAAiB,IACf,IAAe,yBACf,IAAY,EAAI,MAAM,CAAQ;IAEpC,KADA,EAAa,YAAY,KACd;KACT,IAAM,IAAQ,EAAa,KAAK,CAAS;KACzC,IAAI,MAAU,MACZ;KAEF,IAAM,IAAW,EAAM,OACjB,IAAY,EAAM;KACe,KAA7B,EAAM,IAA0B,SAAS,KAAK,GAGxD;UAAI,GACF,KAAS;WAGT,IADA,KACI,MAAU,GAAG;OACf,IAAM,IAAa,EAAU,MAAM,GAAG,CAAQ;OAC9C,IAAiB,EAAW,KAAK;OACjC,IAAM,IAAY,EAAI,MAAM,GAAG,IAAW,IAAW,EAAM,GAAG,MAAM,GAChE,IAAgB,CAAC;OACrB,IAAI,GACF,IAAI,MAAY,SAOd,KANA,IAAgB,EAAM,YAAY,CAAU,GAC5C,EAAc,SAAS,MAAU;QAC/B,AAAI,EAAM,SAAS,CAAC,EAAM,UAAU,EAAM,OAAO,WAAW,OAC1D,EAAM,SAAS,EAAM,aAAa,EAAM,IAAI;OAEhD,CAAC,GACM,EAAc,SAAS,IAAG;QAC/B,IAAM,IAAY,EAAc,EAAc,SAAS;QACvD,IAAI,EAAU,SAAS,gBAAgB,CAAC,EAAU,QAAQ,EAAU,KAAK,KAAK,MAAM,KAClF,EAAc,IAAI;aAElB;OAEJ;YAEA,IAAgB,EAAM,aAAa,CAAc;OAGrD,OAAO;QACL,MAAM;QACN,KAAK;QACL;QACA,SAAS;QACT,QAAQ;OACV;MACF;KACF;IACF;GAEF;EACF;EACA,iBAAiB,GAAM,MAAO;GAE5B,IAAM,IAAQ,EADQ,EAAiB,EAAK,SAAS,CAAC,CACP,CAAC;GAGhD,OAAO,MAAM,IAFM,IAAQ,KAAK,EAAM,KAAK,GAEP;;EADZ,EAAG,eAAe,EAAK,WAAW,CAAC,GAAG,MAGpD,EAAE;;;EAGd;CACF;AACF;AAGA,SAASC,GAAyB,GAAY;CAC5C,IAAI,CAAC,EAAW,KAAK,GACnB,OAAO,CAAC;CAEV,IAAM,IAAa,CAAC,GACd,IAAQ,kCACV,IAAQ,EAAM,KAAK,CAAU;CACjC,OAAO,MAAU,OAAM;EACrB,IAAM,GAAG,GAAK,GAAc,KAAgB;EAE5C,AADA,EAAW,KAAO,KAAgB,GAClC,IAAQ,EAAM,KAAK,CAAU;CAC/B;CACA,OAAO;AACT;AACA,SAASC,GAA6B,GAAO;CAC3C,OAAO,OAAO,QAAQ,CAAK,EAAE,QAAQ,GAAG,OAAW,KAA8B,IAAI,EAAE,KAAK,CAAC,GAAK,OAAW,GAAG,EAAI,IAAI,EAAM,EAAE,EAAE,KAAK,GAAG;AAC5I;AACA,SAASN,GAAyB,GAAS;CACzC,IAAM,EACJ,aACA,MAAM,GACN,eACA,iBAAiB,IAAmBK,IACpC,qBAAqB,IAAuBC,IAC5C,uBAAoB,CAAC,GACrB,iBAAc,IACd,yBACE,GACE,IAAY,KAAiB,GAC7B,KAAoB,MAAU;EAClC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAW,CAAC;EAYlB,OAXA,EAAkB,SAAS,MAAS;GAClC,IAAM,IAAW,OAAO,KAAS,WAAW,IAAO,EAAK,MAClD,IAAgB,OAAO,KAAS,WAAW,KAAK,IAAI,EAAK;GAC/D,IAAI,KAAY,GAAO;IACrB,IAAM,IAAQ,EAAM;IACpB,IAAI,MAAkB,KAAK,KAAK,MAAU,GACxC;IAEF,EAAS,KAAY;GACvB;EACF,CAAC,GACM;CACT,GACM,IAAmB,EAAU,QAAQ,uBAAuB,MAAM;CACxE,OAAO;EACL,gBAAgB,GAAO,MAAO;GAC5B,IAAM,IAAQ;IAAE,GAAG;IAAmB,GAAG,EAAM;GAAW;GAC1D,IAAI,GACF,OAAO,EAAG,WAAW,GAAU,CAAK;GAEtC,IAAM,IAAU,IAAa,EAAW,CAAK,IAAI,EAAM,WAAW;GAIlE,OAHI,IACK,EAAG,WAAW,GAAU,GAAO,CAAC,EAAG,eAAe,CAAO,CAAC,CAAC,IAE7D,EAAG,WAAW,GAAU,GAAO,CAAC,CAAC;EAC1C;EACA,mBAAmB;GACjB,MAAM;GACN,OAAO;GACP,MAAM,GAAK;IACT,IAAM,IAAiC,OAAlB,IAAyB,MAAM,EAAiB,kBAA8B,MAAM,EAAiB,gCAAgC,EAAiB,IAAI,GAEzK,IADQ,EAAI,MAAM,CACV,GAA+B;IAC7C,OAAO,MAAU,KAAK,IAAY,KAAR;GAC5B;GACA,SAAS,GAAK,GAAS,GAAQ;IAC7B,IAAM,IAAiC,OAAlB,IAAyB,OAAO,EAAiB,oBAAgC,OAAO,EAAiB,oCAAoC,EAAiB,IAAI,GACjL,IAAQ,EAAI,MAAM,CAAY;IACpC,IAAI,CAAC,GACH;IAEF,IAAI,IAAU,IACV,IAAa;IACjB,IAAI,GAAa;KACf,IAAM,GAAG,KAAS;KAClB,IAAa;IACf,OAAO;KACL,IAAM,GAAG,GAAO,KAAgB;KAEhC,AADA,IAAa,GACb,IAAU,KAAgB;IAC5B;IACA,IAAM,IAAa,EAAiB,EAAW,KAAK,CAAC;IACrD,OAAO;KACL,MAAM;KACN,KAAK,EAAM;KACX,SAAS,EAAQ,KAAK;KACtB;IACF;GACF;EACF;EACA,iBAAiB,MAAS;GACxB,IAAI,IAAU;GACd,AAAI,IACF,IAAU,EAAW,CAAI,IAChB,EAAK,WAAW,EAAK,QAAQ,SAAS,MAC/C,IAAU,EAAK,QAAQ,QAAQ,MAAU,EAAM,SAAS,MAAM,EAAE,KAAK,MAAU,EAAM,IAAI,EAAE,KAAK,EAAE;GAGpG,IAAM,IAAQ,EADQ,EAAiB,EAAK,SAAS,CAAC,CACP,CAAC,GAC1C,IAAa,IAAQ,IAAI,MAAU;GAIzC,OAHI,IACK,IAAI,IAAY,EAAW,KAE7B,IAAI,IAAY,EAAW,GAAG,EAAQ,IAAI,EAAU;EAC7D;CACF;AACF;AAGA,SAASJ,GAAoB,GAAK,GAAQ,GAAO;CAE/C,IAAM,IAAQ,EAAI,MAAM,IAAI,GACtB,IAAQ,CAAC,GACX,IAAW,IACX,IAAI,GACF,IAAiB,EAAO,kBAAkB;CAChD,OAAO,IAAI,EAAM,SAAQ;EACvB,IAAM,IAAc,EAAM,IACpB,IAAY,EAAY,MAAM,EAAO,WAAW;EACtD,IAAI,CAAC,GACH;OAAI,EAAM,SAAS,GACjB;GACK,IAAI,EAAY,KAAK,MAAM,IAAI;IAEpC,AADA,KAAK,GACL,IAAW,GAAG,IAAW,EAAY;;IAErC;GACF,OACE;EAAA;EAGJ,IAAM,IAAW,EAAO,gBAAgB,CAAS,GAC3C,EAAE,gBAAa,mBAAgB;EACrC,IAAW,GAAG,IAAW,EAAY;;EAErC,IAAM,IAAc,CAAC,CAAW;EAEhC,KADA,KAAK,GACE,IAAI,EAAM,SAAQ;GACvB,IAAM,IAAW,EAAM;GACvB,IAAI,EAAS,KAAK,MAAM,IAAI;IAC1B,IAAM,IAAoB,EAAM,MAAM,IAAI,CAAC,EAAE,WAAW,MAAM,EAAE,KAAK,MAAM,EAAE;IAC7E,IAAI,MAAsB,IACxB;IAIF,KAFqB,EAAM,IAAI,IAAI,GACW,MAAM,QAAQ,IAAyB,IAA0B,UAAW,KACxG,GAAa;KAI7B,AAHA,EAAY,KAAK,CAAQ,GACzB,IAAW,GAAG,IAAW,EAAS;GAElC,KAAK;KACL;IACF,OACE;GAEJ;GAEA,KADgC,EAAS,MAAM,QAAQ,IAAyB,IAA0B,UAAW,KACpG,GAIf,AAHA,EAAY,KAAK,CAAQ,GACzB,IAAW,GAAG,IAAW,EAAS;GAElC,KAAK;QAEL;EAEJ;EACA,IAAI,GACE,IAAgB,EAAY,MAAM,CAAC;EACzC,IAAI,EAAc,SAAS,GAAG;GAC5B,IAAM,IAAiB,EAAc,KAAK,MAAe,EAAW,MAAM,IAAc,CAAc,CAAC,EAAE,KAAK,IAAI;GAClH,AAAI,EAAe,KAAK,MACtB,AAGE,IAHE,EAAO,qBACM,EAAO,mBAAmB,CAAc,IAExC,EAAM,YAAY,CAAc;EAGrD;EACA,IAAM,IAAQ,EAAO,YAAY,GAAU,CAAY;EACvD,EAAM,KAAK,CAAK;CAClB;CACI,MAAM,WAAW,GAGrB,OAAO;EACL;EACA,KAAK;CACP;AACF;AAGA,SAASC,GAA4B,GAAM,GAAI,GAAmB,GAAK;CACrE,IAAI,CAAC,KAAQ,CAAC,MAAM,QAAQ,EAAK,OAAO,GACtC,OAAO;CAET,IAAM,IAAS,OAAO,KAAsB,aAAa,EAAkB,CAAG,IAAI,GAC5E,CAAC,GAAS,GAAG,KAAY,EAAK,SAEhC,IAAS,GAAG,IADI,EAAG,eAAe,CAAC,CAAO,CACX;CAcnC,OAbI,KAAY,EAAS,SAAS,KAChC,EAAS,SAAS,GAAO,MAAU;EAEjC,IAAM,IAA2B,EAAG,aAAmC,KAAK,GAAI,GAAO,IAAQ,CAAC,KAAkB,EAAG,eAAe,CAAC,CAAK,CAAC;EAC3I,IAAI,KAA4C,MAAM;GACpD,IAAM,IAAgB,EAAa,MAAM,IAAI,EAAE,KAAK,MAAS,IAAO,EAAG,OAAO,CAAI,IAAI,EAAG,OAAO,EAAE,CAAC,EAAE,KAAK,IAAI;GAC9G,KAAU,EAAM,SAAS,cAAc;;EAE7C,MAAkB;EAClB;EACI;CACF,CAAC,GAEI;AACT;AA0CA,SAASI,GAAyB,GAAW,GAAQ,IAAQ,CAAC,GAAG;CAC/D,IAAM,EAAE,aAAU,GACZ,EAAE,QAAK,UAAO,GACd,IAAW;CA6BjB,AA5BA,EAAI,aAAa,GAAM,MAAQ;EAC7B,IAAM,IAAO,EAAG,QAAQ,IAAI,CAAG,GACzB,IAAK,EAAG,QAAQ,IAAI,CAAG,IAAI,EAAK,UAClC,IAAY;EAOhB,IANA,EAAK,MAAM,SAAS,MAAS;GAC3B,IAAI,MAAS,GACX,OAAO;GAET,IAAY;EACd,CAAC,GACG,CAAC,GACH;EAEF,IAAI,IAAc;EAMlB,IALA,OAAO,KAAK,CAAK,EAAE,SAAS,MAAM;GAChC,AAAI,EAAM,OAAO,EAAU,MAAM,OAC/B,IAAc;EAElB,CAAC,GACG,GAAa;GACf,IAAM,IAAc,EAAU,KAAK,OAAO;IACxC,GAAG,EAAU;IACb,GAAG;GACL,CAAC;GAED,AADA,EAAG,WAAW,GAAM,GAAI,EAAU,IAAI,GACtC,EAAG,QAAQ,GAAM,GAAI,CAAW;EAClC;CACF,CAAC,GACG,EAAG,cACL,EAAO,KAAK,SAAS,CAAE;AAE3B;AAiDA,IAAIC,KAAQ,MAAM,UAAcrD,GAAW;CACzC,cAAc;EAEZ,AADA,MAAM,GAAG,SAAS,GAClB,KAAK,OAAO;CACd;CAKA,OAAO,OAAO,IAAS,CAAC,GAAG;EAEzB,OAAO,IAAI,EADY,OAAO,KAAW,aAAa,EAAO,IAAI,CAClC;CACjC;CACA,UAAU,GAAS;EACjB,OAAO,MAAM,UAAU,CAAO;CAChC;CACA,OAAO,GAAgB;EACrB,IAAM,IAAiB,OAAO,KAAmB,aAAa,EAAe,IAAI;EACjF,OAAO,MAAM,OAAO,CAAc;CACpC;AACF;AAyNA,SAASsD,GAAc,GAAQ;CAC7B,OAAO,IAAInD,GAAU;EACnB,MAAM,EAAO;EACb,UAAU,EAAE,UAAO,UAAO,UAAO,oBAAiB;GAChD,IAAM,IAAa5D,EAAa,EAAO,eAAe,KAAK,GAAG,GAAO,CAAU;GAC/E,IAAI,MAAe,MAAS,MAAe,MACzC,OAAO;GAET,IAAM,EAAE,UAAO,GACT,IAAe,EAAM,EAAM,SAAS,IACpC,IAAY,EAAM,IACpB,IAAU,EAAM;GACpB,IAAI,GAAc;IAChB,IAAM,IAAc,EAAU,OAAO,IAAI,GACnC,IAAY,EAAM,OAAO,EAAU,QAAQ,CAAY,GACvD,IAAU,IAAY,EAAa;IAKzC,IAJsBwB,GAAgB,EAAM,MAAM,EAAM,IAAI,EAAM,GAAG,EAAE,QAAQ,MAC5D,EAAK,KAAK,KAAK,SAChB,MAAM,MAAS,MAAS,EAAO,QAAQ,MAAS,EAAK,KAAK,IAAI,CAC/E,EAAE,QAAQ,MAAS,EAAK,KAAK,CACd,EAAE,QAChB,OAAO;IAWT,AATI,IAAU,EAAM,MAClB,EAAG,OAAO,GAAS,EAAM,EAAE,GAEzB,IAAY,EAAM,QACpB,EAAG,OAAO,EAAM,OAAO,GAAa,CAAS,GAE/C,IAAU,EAAM,OAAO,IAAc,EAAa,QAClD,EAAG,QAAQ,EAAM,OAAO,GAAa,GAAS,EAAO,KAAK,OAAO,KAAc,CAAC,CAAC,CAAC,GACvD,EAAM,UAAU,KAAK,KAAK,EAAM,UAAU,KAAK,KAAK,EAAM,QAAQ,EAAM,GAAG,UAAU,EAAM,MAAM,UAE1H,EAAG,iBAAiB,EAAO,IAAI;GAEnC;EACF;CACF,CAAC;AACH;;;AC10NA,IAAIwF,KAAY,OAAO,gBACnBC,MAAY,GAAQ,MAAQ;CAC9B,KAAK,IAAI,KAAQ,GACf,GAAU,GAAQ,GAAM;EAAE,KAAK,EAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AAGA,SAAS,GAAqB,GAAQ;CACpC,IAAM,EAAE,UAAO,mBAAgB,GAC3B,EAAE,iBAAc,GAChB,EAAE,WAAQ,GACV,EAAE,mBAAgB;CACtB,OAAO;EACL,GAAG;EACH,OAAO,EAAM,MAAM,KAAK,CAAK;EAC7B,kBAAkB,EAAM,iBAAiB,KAAK,CAAK;EACnD,SAAS,EAAM;EACf,QAAQ,EAAM;EACd,aAAa,EAAM,YAAY,KAAK,CAAK;EACzC,QAAQ,EAAM,OAAO,KAAK,CAAK;EAC/B,IAAI,cAAc;GAChB,OAAO;EACT;EACA,IAAI,YAAY;GACd,OAAO;EACT;EACA,IAAI,MAAM;GACR,OAAO;EACT;EACA,IAAI,KAAK;GAIP,OAHA,IAAY,EAAY,WACxB,IAAM,EAAY,KAClB,IAAc,EAAY,aACnB;EACT;CACF;AACF;AAGA,IAAI,KAAiB,MAAM;CACzB,YAAY,GAAO;EAGjB,AAFA,KAAK,SAAS,EAAM,QACpB,KAAK,cAAc,KAAK,OAAO,iBAAiB,UAChD,KAAK,cAAc,EAAM;CAC3B;CACA,IAAI,iBAAiB;EACnB,OAAO,CAAC,CAAC,KAAK;CAChB;CACA,IAAI,QAAQ;EACV,OAAO,KAAK,eAAe,KAAK,OAAO;CACzC;CACA,IAAI,WAAW;EACb,IAAM,EAAE,gBAAa,WAAQ,aAAU,MACjC,EAAE,YAAS,GACX,EAAE,UAAO,GACT,IAAQ,KAAK,WAAW,CAAE;EAChC,OAAO,OAAO,YACZ,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAQ/B,CAAC,IAPQ,GAAG,MAAS;GAC1B,IAAM,IAAW,EAAS,GAAG,CAAI,EAAE,CAAK;GAIxC,OAHI,CAAC,EAAG,QAAQ,iBAAiB,KAAK,CAAC,KAAK,kBAC1C,EAAK,SAAS,CAAE,GAEX;EACT,CACoB,CACrB,CACH;CACF;CACA,IAAI,QAAQ;EACV,aAAa,KAAK,YAAY;CAChC;CACA,IAAI,MAAM;EACR,aAAa,KAAK,UAAU;CAC9B;CACA,YAAY,GAAS,IAAiB,IAAM;EAC1C,IAAM,EAAE,gBAAa,WAAQ,aAAU,MACjC,EAAE,YAAS,GACX,IAAY,CAAC,GACb,IAAsB,CAAC,CAAC,GACxB,IAAK,KAAW,EAAM,IACtB,WACA,CAAC,KAAuB,KAAkB,CAAC,EAAG,QAAQ,iBAAiB,KAAK,CAAC,KAAK,kBACpF,EAAK,SAAS,CAAE,GAEX,EAAU,OAAO,MAAa,MAAa,EAAI,IAElD,IAAQ;GACZ,GAAG,OAAO,YACR,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAO/B,CAAC,IANgB,GAAG,MAAS;IAClC,IAAM,IAAQ,KAAK,WAAW,GAAI,CAAc,GAC1C,IAAW,EAAS,GAAG,CAAI,EAAE,CAAK;IAExC,OADA,EAAU,KAAK,CAAQ,GAChB;GACT,CAC4B,CAC7B,CACH;GACA,KAAK;EACP;EACA,OAAO;CACT;CACA,UAAU,GAAS;EACjB,IAAM,EAAE,gBAAa,aAAU,MAEzB,IAAK,KAAW,EAAM,IACtB,IAAQ,KAAK,WAAW,GAAI,EAAQ;EAM1C,OAAO;GACL,GANwB,OAAO,YAC/B,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAC/B,CAAC,IAAO,GAAG,MAAS,EAAS,GAAG,CAAI,EAAE;IAAE,GAAG;IAAO,UAAU,KAAK;GAAE,CAAC,CAAC,CAC7E,CAGkB;GACnB,aAAa,KAAK,YAAY,GAAI,EAAQ;EAC5C;CACF;CACA,WAAW,GAAI,IAAiB,IAAM;EACpC,IAAM,EAAE,gBAAa,WAAQ,aAAU,MACjC,EAAE,YAAS,GACX,IAAQ;GACZ;GACA;GACA;GACA,OAAO,GAAqB;IAC1B;IACA,aAAa;GACf,CAAC;GACD,UAAU,UAAuB,KAAK,IAAI,KAAK;GAC/C,aAAa,KAAK,YAAY,GAAI,CAAc;GAChD,WAAW,KAAK,UAAU,CAAE;GAC5B,IAAI,WAAW;IACb,OAAO,OAAO,YACZ,OAAO,QAAQ,CAAW,EAAE,KAAK,CAAC,GAAM,OAC/B,CAAC,IAAO,GAAG,MAAS,EAAS,GAAG,CAAI,EAAE,CAAK,CAAC,CACpD,CACH;GACF;EACF;EACA,OAAO;CACT;AACF,GAGI,KAAmB,CAAC;AACxBA,GAAS,IAAkB;CACzB,YAAY;CACZ,oBAAoB;CACpB,kBAAkB;CAClB,eAAe;CACf,2BAA2B;CAC3B,WAAW;CACX,yBAAyB;CACzB,kBAAkB;CAClB,mBAAmB;CACnB,uBAAuB;CACvB,aAAa;CACb,gBAAgB;CAChB,uBAAuB;CACvB,aAAa;CACb,aAAa;CACb,eAAe;CACf,qBAAqB;CACrB,uBAAuB;CACvB,oBAAoB;CACpB,gBAAgB;CAChB,mBAAmB;CACnB,wBAAwB;CACxB,uBAAuB;CACvB,6BAA6B;CAC7B,4BAA4B;CAC5B,cAAc;CACd,wBAAwB;CACxB,YAAY;CACZ,sBAAsB;CACtB,oBAAoB;CACpB,qBAAqB;CACrB,uBAAuB;CACvB,sBAAsB;CACtB,iBAAiB;CACjB,0BAA0B;CAC1B,yBAAyB;CACzB,wBAAwB;CACxB,0BAA0B;CAC1B,4BAA4B;CAC5B,kBAAkB;CAClB,eAAe;CACf,eAAe;CACf,eAAe;CACf,wBAAwB;CACxB,wBAAwB;CACxB,wBAAwB;CACxB,oBAAoB;CACpB,kBAAkB;CAClB,qBAAqB;CACrB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,qBAAqB;CACrB,qBAAqB;CACrB,iBAAiB;CACjB,0BAA0B;CAC1B,wBAAwB;CACxB,cAAc;CACd,kBAAkB;AACpB,CAAC;AAGD,IAAI,YAAc,EAAE,WAAQ,eAC1B,4BAA4B;CAC1B,IAAI;CACJ,AAAK,EAAO,gBAEV,EAAK,IAAI,KAAK,IACb,IAAK,UAAU,OAAO,KAAK,IAAI,OAAO,aAAa,MAAM,QAAgB,EAAG,gBAAgB;AAEjG,CAAC,GACM,KAIL,MAAgB,IAAa,QAAU,EAAE,kBACpC,EAAS,WAAW,IAAI,EAAE,cAAW,CAAC,GAK3C,YAAoB,EAAE,UAAO,OAAI,kBAAe;CAClD,IAAM,EAAE,iBAAc,GAChB,EAAE,cAAW;CA0BnB,OAzBK,KAGL,EAAO,SAAS,EAAE,UAAO,aAAU;EACjC,EAAM,IAAI,aAAa,EAAM,KAAK,EAAI,MAAM,GAAM,MAAQ;GACxD,IAAI,EAAK,KAAK,QACZ;GAEF,IAAM,EAAE,QAAK,eAAY,GACnB,IAAc,EAAI,QAAQ,EAAQ,IAAI,CAAG,CAAC,GAC1C,IAAY,EAAI,QAAQ,EAAQ,IAAI,IAAM,EAAK,QAAQ,CAAC,GACxD,IAAY,EAAY,WAAW,CAAS;GAClD,IAAI,CAAC,GACH;GAEF,IAAM,IAAkB,GAAW,CAAS;GAC5C,IAAI,EAAK,KAAK,aAAa;IACzB,IAAM,EAAE,mBAAgB,EAAY,OAAO,eAAe,EAAY,MAAM,CAAC;IAC7E,EAAG,cAAc,EAAU,OAAO,CAAW;GAC/C;GACA,CAAI,KAAmB,MAAoB,MACzC,EAAG,KAAK,GAAW,CAAe;EAEtC,CAAC;CACH,CAAC,GAvBQ;AAyBX,GAGI,MAAW,OAAQ,MACd,EAAG,CAAK,GAKb,YAA6B,EAAE,UAAO,kBACjCC,GAA4B,GAAO,CAAQ,GAKhD,MAAO,GAAa,OAAe,EAAE,WAAQ,YAAS;CACxD,IAAM,EAAE,aAAU,GACZ,IAAe,EAAM,IAAI,MAAM,EAAY,MAAM,EAAY,EAAE;CACrE,EAAG,YAAY,EAAY,MAAM,EAAY,EAAE;CAC/C,IAAM,IAAS,EAAG,QAAQ,IAAI,CAAS;CAGvC,OAFA,EAAG,OAAO,GAAQ,EAAa,OAAO,GACtC,EAAG,aAAa,IAAI,EAAc,EAAG,IAAI,QAAQ,KAAK,IAAI,IAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GACnE;AACT,GAGI,YAA2B,EAAE,OAAI,kBAAe;CAClD,IAAM,EAAE,iBAAc,GAChB,IAAc,EAAU,QAAQ,KAAK;CAC3C,IAAI,EAAY,QAAQ,OAAO,GAC7B,OAAO;CAET,IAAM,IAAO,EAAG,UAAU;CAC1B,KAAK,IAAI,IAAQ,EAAK,OAAO,IAAQ,GAAG,KAEtC,IADa,EAAK,KAAK,CAChB,EAAE,SAAS,EAAY,MAAM;EAClC,IAAI,GAAU;GACZ,IAAM,IAAO,EAAK,OAAO,CAAK,GACxB,IAAK,EAAK,MAAM,CAAK;GAC3B,EAAG,OAAO,GAAM,CAAE,EAAE,eAAe;EACrC;EACA,OAAO;CACT;CAEF,OAAO;AACT;AAGA,SAAS,EAAY,GAAY,GAAQ;CACvC,IAAI,OAAO,KAAe,UAAU;EAClC,IAAI,CAAC,EAAO,MAAM,IAChB,MAAM,MAAM,gCAAgC,EAAW,0CAA0C;EAEnG,OAAO,EAAO,MAAM;CACtB;CACA,OAAO;AACT;AAGA,IAAI,MAAc,OAAgB,EAAE,OAAI,UAAO,kBAAe;CAC5D,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM,GAC3C,IAAO,EAAG,UAAU;CAC1B,KAAK,IAAI,IAAQ,EAAK,OAAO,IAAQ,GAAG,KAEtC,IADa,EAAK,KAAK,CAChB,EAAE,SAAS,GAAM;EACtB,IAAI,GAAU;GACZ,IAAM,IAAO,EAAK,OAAO,CAAK,GACxB,IAAK,EAAK,MAAM,CAAK;GAC3B,EAAG,OAAO,GAAM,CAAE,EAAE,eAAe;EACrC;EACA,OAAO;CACT;CAEF,OAAO;AACT,GAGI,MAAe,OAAW,EAAE,OAAI,kBAAe;CACjD,IAAM,EAAE,SAAM,UAAO;CAIrB,OAHI,KACF,EAAG,OAAO,GAAM,CAAE,GAEb;AACT,GAII,YAAyB,EAAE,UAAO,kBAC7BC,GAAwB,GAAO,CAAQ,GAI5C,YAAe,EAAE,kBACZ,EAAS,iBAAiB,OAAO,GAKtC,YAAkB,EAAE,UAAO,kBACtBC,GAAiB,GAAO,CAAQ;AAOzC,SAAS,GAAS,GAAO;CACvB,OAAO,OAAO,UAAU,SAAS,KAAK,CAAK,MAAM;AACnD;AAGA,SAAS,GAAe,GAAS,GAAS,IAAU,EAAE,QAAQ,GAAK,GAAG;CACpE,IAAM,IAAO,OAAO,KAAK,CAAO;CAIhC,OAHK,EAAK,SAGH,EAAK,OAAO,MACb,EAAQ,SACH,EAAQ,OAAS,EAAQ,KAE9B,GAAS,EAAQ,EAAI,IAChB,EAAQ,GAAK,KAAK,EAAQ,EAAI,IAEhC,EAAQ,OAAS,EAAQ,EACjC,IAVQ;AAWX;AAGA,SAAS,GAAc,GAAO,GAAM,IAAa,CAAC,GAAG;CACnD,OAAO,EAAM,MAAM,MACV,EAAK,SAAS,KAAQ,GAE3B,OAAO,YAAY,OAAO,KAAK,CAAU,EAAE,KAAK,MAAM,CAAC,GAAG,EAAK,MAAM,EAAE,CAAC,CAAC,GACzE,CACF,CACD;AACH;AACA,SAAS,GAAY,GAAO,GAAM,IAAa,CAAC,GAAG;CACjD,OAAO,CAAC,CAAC,GAAc,GAAO,GAAM,CAAU;AAChD;AACA,SAAS,GAAa,GAAM,GAAM,GAAY;CAC5C,IAAI,CAAC,KAAQ,CAAC,GACZ;CAEF,IAAI,IAAQ,EAAK,OAAO,WAAW,EAAK,YAAY;CAIpD,KAHI,CAAC,EAAM,QAAQ,CAAC,EAAM,KAAK,MAAM,MAAM,MAAU,EAAM,SAAS,CAAI,OACtE,IAAQ,EAAK,OAAO,YAAY,EAAK,YAAY,IAE/C,CAAC,EAAM,QAAQ,CAAC,EAAM,KAAK,MAAM,MAAM,MAAU,EAAM,SAAS,CAAI,GACtE;CAEF,IAAI,CAAC,GAAY;EACf,IAAM,IAAY,EAAM,KAAK,MAAM,MAAM,MAAU,EAAM,SAAS,CAAI;EACtE,AAAI,MACF,IAAa,EAAU;CAE3B;CAEA,IAAI,CADS,GAAc,CAAC,GAAG,EAAM,KAAK,KAAK,GAAG,GAAM,CAChD,GACN;CAEF,IAAI,IAAa,EAAM,OACnB,IAAW,EAAK,MAAM,IAAI,EAAM,QAChC,IAAW,IAAa,GACxB,IAAS,IAAW,EAAM,KAAK;CACnC,OAAO,IAAa,KAAK,GAAY,CAAC,GAAG,EAAK,OAAO,MAAM,IAAa,CAAC,EAAE,KAAK,GAAG,GAAM,CAAU,IAEjG,AADA,KACA,KAAY,EAAK,OAAO,MAAM,CAAU,EAAE;CAE5C,OAAO,IAAW,EAAK,OAAO,cAAc,GAAY,CAAC,GAAG,EAAK,OAAO,MAAM,CAAQ,EAAE,KAAK,GAAG,GAAM,CAAU,IAE9G,AADA,KAAU,EAAK,OAAO,MAAM,CAAQ,EAAE,UACtC,KAAY;CAEd,OAAO;EACL,MAAM;EACN,IAAI;CACN;AACF;AAGA,SAAS,EAAY,GAAY,GAAQ;CACvC,IAAI,OAAO,KAAe,UAAU;EAClC,IAAI,CAAC,EAAO,MAAM,IAChB,MAAM,MAAM,gCAAgC,EAAW,0CAA0C;EAEnG,OAAO,EAAO,MAAM;CACtB;CACA,OAAO;AACT;AAGA,IAAI,MAAmB,GAAY,OAAgB,EAAE,OAAI,UAAO,kBAAe;CAC7E,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,QAAK,iBAAc,GACrB,EAAE,UAAO,SAAM,UAAO;CAC5B,IAAI,GAAU;EACZ,IAAM,IAAQ,GAAa,GAAO,GAAM,CAAU;EAClD,IAAI,KAAS,EAAM,QAAQ,KAAQ,EAAM,MAAM,GAAI;GACjD,IAAM,IAAeC,EAAe,OAAO,GAAK,EAAM,MAAM,EAAM,EAAE;GACpE,EAAG,aAAa,CAAY;EAC9B;CACF;CACA,OAAO;AACT,GAGI,MAAS,OAAc,MAAU;CACnC,IAAM,IAAQ,OAAO,KAAa,aAAa,EAAS,CAAK,IAAI;CACjE,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,KAAK,GACrC,IAAI,EAAM,GAAG,CAAK,GAChB,OAAO;CAGX,OAAO;AACT;AAIA,SAAS,GAAgB,GAAO;CAC9B,OAAO,aAAiBC;AAC1B;AAMA,SAAS,GAAO,IAAQ,GAAG,IAAM,GAAG,IAAM,GAAG;CAC3C,OAAO,KAAK,IAAI,KAAK,IAAI,GAAO,CAAG,GAAG,CAAG;AAC3C;AAGA,SAAS,GAAqB,GAAK,IAAW,MAAM;CAClD,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAmBC,EAAU,QAAQ,CAAG,GACxC,IAAiBA,EAAU,MAAM,CAAG;CAC1C,IAAI,MAAa,WAAW,MAAa,IACvC,OAAO;CAET,IAAI,MAAa,OACf,OAAO;CAET,IAAM,IAAS,EAAiB,MAC1B,IAAS,EAAe;CAI9B,OAHI,MAAa,QACRC,EAAe,OAAO,GAAK,GAAO,GAAG,GAAQ,CAAM,GAAG,GAAO,EAAI,QAAQ,MAAM,GAAQ,CAAM,CAAC,IAEhGA,EAAe,OAAO,GAAK,GAAO,GAAU,GAAQ,CAAM,GAAG,GAAO,GAAU,GAAQ,CAAM,CAAC;AACtG;AAGA,SAAS,KAAY;CACnB,OAAO,UAAU,aAAa,aAAa,WAAW,KAAK,UAAU,SAAS;AAChF;AAGA,SAAS,KAAQ;CACf,OAAO;EAAC;EAAkB;EAAoB;EAAkB;EAAQ;EAAU;CAAM,EAAE,SAAS,UAAU,QAAQ,KACrH,UAAU,UAAU,SAAS,KAAK,KAAK,gBAAgB;AACzD;AAGA,SAAS,KAAW;CAClB,OAAO,OAAO,YAAc,MAAc,iCAAiC,KAAK,UAAU,SAAS,IAAI;AACzG;AAGA,IAAI,MAAS,IAAW,MAAM,IAAU,CAAC,OAAO,EAAE,WAAQ,SAAM,OAAI,kBAAe;CACjF,IAAU;EACR,gBAAgB;EAChB,GAAG;CACL;CACA,IAAM,UAAqB;EASzB,CARI,GAAM,KAAK,GAAU,MAEvB,EAAK,IAAI,MAAM,GAEb,GAAS,KAAK,CAAC,GAAM,KAAK,CAAC,GAAU,KAEvC,EAAK,IAAI,MAAM,EAAE,eAAe,GAAK,CAAC,GAExC,4BAA4B;GAC1B,AAAK,EAAO,gBACV,EAAK,MAAM,GACP,GAAmC,kBACrC,EAAO,SAAS,eAAe;EAGrC,CAAC;CACH;CACA,IAAI;EACF,IAAI,EAAK,SAAS,KAAK,MAAa,QAAQ,MAAa,IACvD,OAAO;CAEX,QAAQ;EACN,OAAO;CACT;CACA,IAAI,KAAY,MAAa,QAAQ,CAAC,GAAgB,EAAO,MAAM,SAAS,GAE1E,OADA,EAAa,GACN;CAET,IAAM,IAAY,GAAqB,EAAG,KAAK,CAAQ,KAAK,EAAO,MAAM,WACnE,IAAkB,EAAO,MAAM,UAAU,GAAG,CAAS;CAU3D,OATI,MACG,KACH,EAAG,aAAa,CAAS,GAEvB,KAAmB,EAAG,eACxB,EAAG,eAAe,EAAG,WAAW,GAElC,EAAa,IAER;AACT,GAGI,MAAW,GAAO,OAAQ,MACrB,EAAM,OAAO,GAAM,MAAU,EAAG,GAAM;CAAE,GAAG;CAAO;AAAM,CAAC,CAAC,GAI/D,MAAiB,GAAO,OAAa,EAAE,OAAI,kBACtC,EAAS,gBAAgB;CAAE,MAAM,EAAG,UAAU;CAAM,IAAI,EAAG,UAAU;AAAG,GAAG,GAAO,CAAO,GAU9F,MAAqB,MAAS;CAChC,IAAM,IAAW,EAAK;CACtB,KAAK,IAAI,IAAI,EAAS,SAAS,GAAG,KAAK,GAAG,KAAQ;EAChD,IAAM,IAAQ,EAAS;EACvB,AAAI,EAAM,aAAa,KAAK,EAAM,aAAa,gBAAgB,KAAK,EAAM,SAAS,IACjF,EAAK,YAAY,CAAK,IACb,EAAM,aAAa,KAC5B,GAAkB,CAAK;CAE3B;CACA,OAAO;AACT;AACA,SAAS,GAAkB,GAAO;CAChC,IAAI,OAAO,SAAW,KACpB,MAAU,MAAM,sFAAsF;CAExG,IAAM,IAAe,SAAS,EAAM,UAC9B,IAAO,IAAI,OAAO,UAAU,EAAE,gBAAgB,GAAc,WAAW,EAAE;CAC/E,OAAO,GAAkB,CAAI;AAC/B;AAGA,SAAS,GAAsB,GAAS,GAAQ,GAAS;CACvD,IAAI,aAAmBC,KAAmB,aAAmB,GAC3D,OAAO;CAET,IAAU;EACR,OAAO;EACP,cAAc,CAAC;EACf,GAAG;CACL;CACA,IAAM,IAAgB,OAAO,KAAY,cAAY,GAC/C,IAAgB,OAAO,KAAY;CACzC,IAAI,GACF,IAAI;EAEF,IADuB,MAAM,QAAQ,CAAO,KAAK,EAAQ,SAAS,GAEhE,OAAO,EAAS,UAAU,EAAQ,KAAK,MAAS,EAAO,aAAa,CAAI,CAAC,CAAC;EAE5E,IAAM,IAAO,EAAO,aAAa,CAAO;EAIxC,OAHI,EAAQ,yBACV,EAAK,MAAM,GAEN;CACT,SAAS,GAAO;EACd,IAAI,EAAQ,uBACV,MAAU,MAAM,wCAAwC,EAAE,OAAO,EAAM,CAAC;EAG1E,OADA,QAAQ,KAAK,mCAAmC,iBAAiB,GAAS,UAAU,CAAK,GAClF,GAAsB,IAAI,GAAQ,CAAO;CAClD;CAEF,IAAI,GAAe;EACjB,IAAI,EAAQ,uBAAuB;GACjC,IAAI,IAAoB,IACpB,IAAiB,IACf,IAAqB,IAAI,EAAO;IACpC,SAAS,EAAO,KAAK;IACrB,OAAO,EAAO,KAAK;IAGnB,OAAO,EAAO,KAAK,MAAM,OAAO,EAC9B,8CAA8C;KAC5C,SAAS;KACT,OAAO;KACP,UAAU,CACR;MACE,KAAK;MACL,WAAW,OACT,IAAoB,IACpB,IAAiB,OAAO,KAAM,WAAW,IAAI,EAAE,WACxC;KAEX,CACF;IACF,EACF,CAAC;GACH,CAAC;GAMD,IALI,EAAQ,QACV,EAAU,WAAW,CAAkB,EAAE,WAAW,GAAkB,CAAO,GAAG,EAAQ,YAAY,IAEpG,EAAU,WAAW,CAAkB,EAAE,MAAM,GAAkB,CAAO,GAAG,EAAQ,YAAY,GAE7F,EAAQ,yBAAyB,GACnC,MAAU,MAAM,wCAAwC,EACtD,OAAO,gBAAI,MAAM,0BAA0B,GAAgB,EAC7D,CAAC;EAEL;EACA,IAAM,IAAS,EAAU,WAAW,CAAM;EAI1C,OAHI,EAAQ,QACH,EAAO,WAAW,GAAkB,CAAO,GAAG,EAAQ,YAAY,EAAE,UAEtE,EAAO,MAAM,GAAkB,CAAO,GAAG,EAAQ,YAAY;CACtE;CACA,OAAO,GAAsB,IAAI,GAAQ,CAAO;AAClD;AAKA,SAAS,GAAwB,GAAI,GAAU,GAAM;CACnD,IAAM,IAAO,EAAG,MAAM,SAAS;CAC/B,IAAI,IAAO,GACT;CAEF,IAAM,IAAO,EAAG,MAAM;CACtB,IAAI,EAAE,aAAgB,KAAe,aAAgB,IACnD;CAEF,IAAM,IAAM,EAAG,QAAQ,KAAK,IACxB,IAAM;CAMV,AALA,EAAI,SAAS,GAAO,GAAK,GAAU,MAAU;EAC3C,AAAI,MAAQ,MACV,IAAM;CAEV,CAAC,GACD,EAAG,aAAaC,EAAW,KAAK,EAAG,IAAI,QAAQ,CAAG,GAAG,CAAI,CAAC;AAC5D;AAGA,IAAI,MAAc,MACT,EAAE,UAAU,IAEjB,MAAmB,GAAU,GAAO,OAAa,EAAE,OAAI,aAAU,gBAAa;CAEhF,IAAI,GAAU;EACZ,IAAU;GACR,cAAc,EAAO,QAAQ;GAC7B,iBAAiB;GACjB,iBAAiB;GACjB,iBAAiB;GACjB,GAAG;EACL;EACA,IAAI,GACE,KAAoB,MAAU;GAClC,EAAO,KAAK,gBAAgB;IAC1B;IACA;IACA,4BAA4B;KAC1B,AAAI,mBAAmB,EAAO,WAAW,OAAO,EAAO,QAAQ,iBAAkB,YAAY,EAAO,QAAQ,kBAE1G,EAAO,QAAQ,cAAc,aAAa;IAE9C;GACF,CAAC;EACH,GACM,IAAe;GACnB,oBAAoB;GACpB,GAAG,EAAQ;EACb;EACA,IAAI,CAAC,EAAQ,yBAAyB,CAAC,EAAO,QAAQ,sBAAsB,EAAO,QAAQ,kBACzF,IAAI;GACF,GAAsB,GAAO,EAAO,QAAQ;IAC1C;IACA,uBAAuB;GACzB,CAAC;EACH,SAAS,GAAG;GACV,EAAiB,CAAC;EACpB;EAEF,IAAI;GACF,IAAU,GAAsB,GAAO,EAAO,QAAQ;IACpD;IACA,uBAA6B,EAAQ,yBAAsC,EAAO,QAAQ;GAC5F,CAAC;EACH,SAAS,GAAG;GAEV,OADA,EAAiB,CAAC,GACX;EACT;EACA,IAAI,EAAE,SAAM,UAAO,OAAO,KAAa,WAAW;GAAE,MAAM;GAAU,IAAI;EAAS,IAAI;GAAE,MAAM,EAAS;GAAM,IAAI,EAAS;EAAG,GACxH,IAAoB,IACpB,IAAqB;EAOzB,KANc,GAAW,CAAO,IAAI,IAAU,CAAC,CAAO,GAChD,SAAS,MAAS;GAGtB,AAFA,EAAK,MAAM,GACX,IAAoB,IAAoB,EAAK,UAAU,EAAK,MAAM,WAAW,IAAI,IACjF,IAAqB,IAAqB,EAAK,UAAU;EAC3D,CAAC,GACG,MAAS,KAAM,GAAoB;GACrC,IAAM,EAAE,cAAW,EAAG,IAAI,QAAQ,CAAI;GAEtC,AADyB,EAAO,eAAe,CAAC,EAAO,KAAK,KAAK,QAAQ,CAAC,EAAO,eAE/E,KACA,KAAM;EAEV;EACA,IAAI;EACJ,IAAI,GAAmB;GACrB,IAAI,MAAM,QAAQ,CAAK,GACrB,IAAa,EAAM,KAAK,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE;QAC9C,IAAI,aAAiBC,GAAW;IACrC,IAAI,IAAO;IAMX,AALA,EAAM,SAAS,MAAS;KACtB,AAAI,EAAK,SACP,KAAQ,EAAK;IAEjB,CAAC,GACD,IAAa;GACf,OAAO,AAGL,IAHS,OAAO,KAAU,YAAc,KAAW,EAAM,OAC5C,EAAM,OAEN;GAEf,EAAG,WAAW,GAAY,GAAM,CAAE;EACpC,OAAO;GACL,IAAa;GACb,IAAM,IAAQ,EAAG,IAAI,QAAQ,CAAI,GAC3B,IAAY,EAAM,KAAK,GACvB,IAAuB,EAAM,iBAAiB,GAC9C,IAAmB,EAAU,UAAU,EAAU,aACjD,IAAa,EAAU,QAAQ,OAAO;GAI5C,AAHI,KAAwB,KAAoB,KAAc,MAC5D,IAAO,KAAK,IAAI,GAAG,IAAO,CAAC,IAE7B,EAAG,YAAY,GAAM,GAAI,CAAU;EACrC;EAOA,AANI,EAAQ,mBACV,GAAwB,GAAI,EAAG,MAAM,SAAS,GAAG,EAAE,GAEjD,EAAQ,mBACV,EAAG,QAAQ,mBAAmB;GAAE;GAAM,MAAM;EAAW,CAAC,GAEtD,EAAQ,mBACV,EAAG,QAAQ,mBAAmB;GAAE;GAAM,MAAM;EAAW,CAAC;CAE5D;CACA,OAAO;AACT,GASI,YAAgB,EAAE,UAAO,kBACpBC,GAAe,GAAO,CAAQ,GAEnC,YAAkB,EAAE,UAAO,kBACtBC,GAAiB,GAAO,CAAQ,GAErC,YAAsB,EAAE,UAAO,kBAC1BC,GAAqB,GAAO,CAAQ,GAEzC,YAAqB,EAAE,UAAO,kBACzBC,GAAoB,GAAO,CAAQ,GAKxC,YAA0B,EAAE,UAAO,aAAU,YAAS;CACxD,IAAI;EACF,IAAM,IAAQ,EAAU,EAAM,KAAK,EAAM,UAAU,MAAM,KAAK,EAAE;EAQhE,OAPI,KAAU,OACL,MAET,EAAG,KAAK,GAAO,CAAC,GACZ,KACF,EAAS,CAAE,GAEN;CACT,QAAQ;EACN,OAAO;CACT;AACF,GAII,YAAyB,EAAE,UAAO,aAAU,YAAS;CACvD,IAAI;EACF,IAAM,IAAQC,EAAW,EAAM,KAAK,EAAM,UAAU,MAAM,KAAK,CAAC;EAQhE,OAPI,KAAU,OACL,MAET,EAAG,KAAK,GAAO,CAAC,GACZ,KACF,EAAS,CAAE,GAEN;CACT,QAAQ;EACN,OAAO;CACT;AACF,GAII,YAA+B,EAAE,UAAO,kBACnCC,GAAgB,GAAO,CAAQ,GAKpC,YAA8B,EAAE,UAAO,kBAClCC,GAAiB,GAAO,CAAQ;AAIzC,SAAS,KAAU;CACjB,OAAO,OAAO,YAAc,MAAc,MAAM,KAAK,UAAU,QAAQ,IAAI;AAC7E;AAGA,SAAS,GAAiB,GAAM;CAC9B,IAAM,IAAQ,EAAK,MAAM,QAAQ,GAC7B,IAAS,EAAM,EAAM,SAAS;CAClC,AAAI,MAAW,YACb,IAAS;CAEX,IAAI,GACA,GACA,GACA;CACJ,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,SAAS,GAAG,KAAK,GAAG;EAC5C,IAAM,IAAM,EAAM;EAClB,IAAI,kBAAkB,KAAK,CAAG,GAC5B,IAAO;OACF,IAAI,YAAY,KAAK,CAAG,GAC7B,IAAM;OACD,IAAI,sBAAsB,KAAK,CAAG,GACvC,IAAO;OACF,IAAI,cAAc,KAAK,CAAG,GAC/B,IAAQ;OACH,IAAI,SAAS,KAAK,CAAG,GAC1B,AAAI,GAAM,KAAK,GAAQ,IACrB,IAAO,KAEP,IAAO;OAGT,MAAU,MAAM,+BAA+B,GAAK;CAExD;CAaA,OAZI,MACF,IAAS,OAAO,MAEd,MACF,IAAS,QAAQ,MAEf,MACF,IAAS,QAAQ,MAEf,MACF,IAAS,SAAS,MAEb;AACT;AACA,IAAI,MAAoB,OAAU,EAAE,WAAQ,SAAM,OAAI,kBAAe;CACnE,IAAM,IAAO,GAAiB,CAAI,EAAE,MAAM,QAAQ,GAC5C,IAAM,EAAK,MAAM,MAAS,CAAC;EAAC;EAAO;EAAQ;EAAQ;CAAO,EAAE,SAAS,CAAI,CAAC,GAC1E,IAAQ,IAAI,cAAc,WAAW;EACzC,KAAK,MAAQ,UAAU,MAAM;EAC7B,QAAQ,EAAK,SAAS,KAAK;EAC3B,SAAS,EAAK,SAAS,MAAM;EAC7B,SAAS,EAAK,SAAS,MAAM;EAC7B,UAAU,EAAK,SAAS,OAAO;EAC/B,SAAS;EACT,YAAY;CACd,CAAC;CAUD,OANA,EAHmC,yBAAyB;EAC1D,EAAK,SAAS,kBAAkB,MAAM,EAAE,GAAM,CAAK,CAAC;CACtD,CACkB,GAAyC,MAAM,SAAS,MAAS;EACjF,IAAM,IAAU,EAAK,IAAI,EAAG,OAAO;EACnC,AAAI,KAAW,KACb,EAAG,UAAU,CAAO;CAExB,CAAC,GACM;AACT;AAMA,SAAS,GAAa,GAAO,GAAY,IAAa,CAAC,GAAG;CACxD,IAAM,EAAE,SAAM,OAAI,aAAU,EAAM,WAC5B,IAAO,IAAa,EAAY,GAAY,EAAM,MAAM,IAAI,MAC5D,IAAa,CAAC;CACpB,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EAC9C,IAAI,EAAK,QACP;EAEF,IAAM,IAAe,KAAK,IAAI,GAAM,CAAG,GACjC,IAAa,KAAK,IAAI,GAAI,IAAM,EAAK,QAAQ;EACnD,EAAW,KAAK;GACd;GACA,MAAM;GACN,IAAI;EACN,CAAC;CACH,CAAC;CACD,IAAM,IAAiB,IAAK,GACtB,IAAoB,EAAW,QAAQ,MACtC,IAGE,EAAK,SAAS,EAAU,KAAK,KAAK,OAFhC,EAGV,EAAE,QAAQ,MAAc,GAAe,EAAU,KAAK,OAAO,GAAY,EAAE,QAAQ,GAAM,CAAC,CAAC;CAK5F,OAJI,IACK,CAAC,CAAC,EAAkB,SAEf,EAAkB,QAAQ,GAAK,MAAc,IAAM,EAAU,KAAK,EAAU,MAAM,CACrF,KAAK;AAClB;AAGA,IAAI,MAAQ,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAElC,GAAa,GADlB,EAAY,GAAY,EAAM,MACF,GAAG,CAC/B,IAGNC,EAAa,GAAO,CAAQ,IAF1B,IAOP,YAAwB,EAAE,UAAO,kBAC5BC,EAAuB,GAAO,CAAQ,GAK3C,MAAgB,OAAgB,EAAE,UAAO,kBAEpCC,GADM,EAAY,GAAY,EAAM,MACZ,CAAC,EAAE,GAAO,CAAQ,GAK/C,YAAuB,EAAE,UAAO,kBAC3BC,GAAsB,GAAO,CAAQ;AAI9C,SAAS,GAAwB,GAAM,GAAQ;CAO7C,OANI,EAAO,MAAM,KACR,SAEL,EAAO,MAAM,KACR,SAEF;AACT;AAGA,SAAS,GAAY,GAAK,GAAa;CACrC,IAAM,IAAQ,OAAO,KAAgB,WAAW,CAAC,CAAW,IAAI;CAChE,OAAO,OAAO,KAAK,CAAG,EAAE,QAAQ,GAAQ,OACjC,EAAM,SAAS,CAAI,MACtB,EAAO,KAAQ,EAAI,KAEd,IACN,CAAC,CAAC;AACP;AAGA,IAAI,MAAmB,GAAY,OAAgB,EAAE,OAAI,UAAO,kBAAe;CAC7E,IAAI,IAAW,MACX,IAAW,MACT,IAAa,GACjB,OAAO,KAAe,WAAW,IAAa,EAAW,MACzD,EAAM,MACR;CACA,IAAI,CAAC,GACH,OAAO;CAKT,AAHI,MAAe,WACjB,IAAW,EAAY,GAAY,EAAM,MAAM,IAE7C,MAAe,WACjB,IAAW,EAAY,GAAY,EAAM,MAAM;CAEjD,IAAI,IAAW;CAqBf,OApBA,EAAG,UAAU,OAAO,SAAS,MAAU;EACrC,EAAM,IAAI,aAAa,EAAM,MAAM,KAAK,EAAM,IAAI,MAAM,GAAM,MAAQ;GAOpE,AANI,KAAY,MAAa,EAAK,SAChC,IAAW,IACP,KACF,EAAG,cAAc,GAAK,KAAK,GAAG,GAAY,EAAK,OAAO,CAAU,CAAC,IAGjE,KAAY,EAAK,MAAM,UACzB,EAAK,MAAM,SAAS,MAAS;IAC3B,AAAI,MAAa,EAAK,SACpB,IAAW,IACP,KACF,EAAG,QAAQ,GAAK,IAAM,EAAK,UAAU,EAAS,OAAO,GAAY,EAAK,OAAO,CAAU,CAAC,CAAC;GAG/F,CAAC;EAEL,CAAC;CACH,CAAC,GACM;AACT,GAGI,YAAwB,EAAE,OAAI,mBAC5B,KACF,EAAG,eAAe,GAEb,KAKL,YAAmB,EAAE,OAAI,kBAAe;CAC1C,IAAI,GAAU;EACZ,IAAM,IAAY,IAAI,EAAa,EAAG,GAAG;EACzC,EAAG,aAAa,CAAS;CAC3B;CACA,OAAO;AACT,GAII,YAA4B,EAAE,UAAO,kBAChCC,EAA2B,GAAO,CAAQ,GAK/C,YAA2B,EAAE,UAAO,kBAC/BC,EAA0B,GAAO,CAAQ,GAK9C,YAA0B,EAAE,UAAO,kBAC9BC,EAAyB,GAAO,CAAQ,GAK7C,YAA4B,EAAE,UAAO,kBAChCC,EAA2B,GAAO,CAAQ,GAK/C,YAA8B,EAAE,UAAO,kBAClCC,GAA6B,GAAO,CAAQ;AAIrD,SAAS,GAAe,GAAS,GAAQ,IAAe,CAAC,GAAG,IAAU,CAAC,GAAG;CACxE,OAAO,GAAsB,GAAS,GAAQ;EAC5C,OAAO;EACP;EACA,uBAAuB,EAAQ;CACjC,CAAC;AACH;AAGA,IAAI,MAAc,GAAS,EAAE,0BAAuB,gBAAa,IAAM,kBAAe,CAAC,MAAM,CAAC,OAAO,EAAE,WAAQ,OAAI,aAAU,kBAAe;CAC1I,IAAM,EAAE,WAAQ;CAChB,IAAI,EAAa,uBAAuB,QAAQ;EAC9C,IAAM,IAAY,GAAe,GAAS,EAAO,QAAQ,GAAc,EACrE,uBAAuB,KAAwD,EAAO,QAAQ,mBAChG,CAAC;EAID,OAHI,KACF,EAAG,YAAY,GAAG,EAAI,QAAQ,MAAM,CAAS,EAAE,QAAQ,iBAAiB,CAAC,CAAU,GAE9E;CACT;CAIA,OAHI,KACF,EAAG,QAAQ,iBAAiB,CAAC,CAAU,GAElC,EAAS,gBAAgB;EAAE,MAAM;EAAG,IAAI,EAAI,QAAQ;CAAK,GAAG,GAAS;EAC1E;EACA,uBAAuB,KAAwD,EAAO,QAAQ;CAChG,CAAC;AACH;AAGA,SAAS,GAAkB,GAAO,GAAY;CAC5C,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,SAAM,OAAI,aAAU,EAAM,WAC5B,IAAQ,CAAC;CACf,AAAI,KACE,EAAM,eACR,EAAM,KAAK,GAAG,EAAM,WAAW,GAEjC,EAAM,KAAK,GAAG,EAAM,UAAU,MAAM,MAAM,CAAC,KAE3C,EAAM,IAAI,aAAa,GAAM,IAAK,MAAS;EACzC,EAAM,KAAK,GAAG,EAAK,KAAK;CAC1B,CAAC;CAEH,IAAM,IAAO,EAAM,MAAM,MAAa,EAAS,KAAK,SAAS,EAAK,IAAI;CAItE,OAHK,IAGE,EAAE,GAAG,EAAK,MAAM,IAFd,CAAC;AAGZ;AAIA,SAAS,GAAwB,GAAQ,GAAc;CACrD,IAAM,IAAY,IAAI,EAAU,CAAM;CAMtC,OALA,EAAa,SAAS,MAAgB;EACpC,EAAY,MAAM,SAAS,MAAS;GAClC,EAAU,KAAK,CAAI;EACrB,CAAC;CACH,CAAC,GACM;AACT;AAGA,SAAS,GAAe,GAAO;CAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,WAAW,KAAK,GAAG;EAC3C,IAAM,EAAE,YAAS,EAAM,KAAK,CAAC;EAC7B,IAAI,EAAK,eAAe,CAAC,EAAK,iBAAiB,GAC7C,OAAO;CAEX;CACA,OAAO;AACT;AAiBA,SAAS,GAAoB,GAAM,GAAO,GAAW;CACnD,IAAM,IAAe,CAAC;CAStB,OARA,EAAK,aAAa,EAAM,MAAM,EAAM,KAAK,GAAO,MAAQ;EACtD,AAAI,EAAU,CAAK,KACjB,EAAa,KAAK;GAChB,MAAM;GACN;EACF,CAAC;CAEL,CAAC,GACM;AACT;AAGA,SAAS,GAA2B,GAAM,GAAW;CACnD,KAAK,IAAI,IAAI,EAAK,OAAO,IAAI,GAAG,KAAQ;EACtC,IAAM,IAAO,EAAK,KAAK,CAAC;EACxB,IAAI,EAAU,CAAI,GAChB,OAAO;GACL,KAAK,IAAI,IAAI,EAAK,OAAO,CAAC,IAAI;GAC9B,OAAO,EAAK,MAAM,CAAC;GACnB,OAAO;GACP;EACF;CAEJ;AACF;AAGA,SAAS,GAAe,GAAW;CACjC,QAAQ,MAAc,GAA2B,EAAU,OAAO,CAAS;AAC7E;AAGA,SAAS,EAAkB,GAAW,GAAO,GAAS;CAWpD,OAVI,EAAU,OAAO,OAAW,KAAK,KAAK,EAAU,SAC3C,EAAkB,EAAU,QAAQ,GAAO,CAAO,IAEvD,OAAO,EAAU,OAAO,MAAW,aACvB,EAAU,OAAO,GAAO,KAAK;EACzC,GAAG;EACH,QAAQ,EAAU,SAAS,EAAkB,EAAU,QAAQ,GAAO,CAAO,IAAI;CACnF,CACW,IAEN,EAAU,OAAO;AAC1B;AAGA,SAAS,GAAkB,GAAY;CACrC,OAAO,EAAW,KAAK,MAAc;EAMnC,IAAM,IAAgB,EAAkB,GAAW,iBAAiB;GAJlE,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;EAEqD,CAAC;EAI3E,OAHI,IACK,CAAC,GAAW,GAAG,GAAkB,EAAc,CAAC,CAAC,IAEnD;CACT,CAAC,EAAE,KAAK,EAAE;AACZ;AAOA,SAAS,GAAoB,GAAU,GAAQ;CAC7C,IAAM,IAAmB,GAAc,WAAW,CAAM,EAAE,kBAAkB,CAAQ,GAE9E,IADoB,SAAS,eAAe,mBAChB,EAAE,cAAc,KAAK;CAEvD,OADA,EAAU,YAAY,CAAgB,GAC/B,EAAU;AACnB;AAMA,SAASC,GAAW,GAAO;CACzB,OAAO,OAAO,KAAU;AAC1B;AAGA,SAAS,EAAa,GAAO,IAAU,KAAK,GAAG,GAAG,GAAO;CAOvD,OANIA,GAAW,CAAK,IACd,IACK,EAAM,KAAK,CAAO,EAAE,GAAG,CAAK,IAE9B,EAAM,GAAG,CAAK,IAEhB;AACT;AAGA,SAAS,GAAc,IAAQ,CAAC,GAAG;CACjC,OAAO,OAAO,KAAK,CAAK,EAAE,WAAW,KAAK,EAAM,gBAAgB;AAClE;AAGA,SAAS,GAAgB,GAAY;CAInC,OAAO;EACL,gBAJqB,EAAW,QAAQ,MAAc,EAAU,SAAS,WAI5D;EACb,gBAJqB,EAAW,QAAQ,MAAc,EAAU,SAAS,MAI5D;EACb,gBAJqB,EAAW,QAAQ,MAAc,EAAU,SAAS,MAI5D;CACf;AACF;AAGA,SAAS,GAA4B,GAAY;CAC/C,IAAM,IAAsB,CAAC,GACvB,EAAE,mBAAgB,sBAAmB,GAAgB,CAAU,GAC/D,IAAwB,CAAC,GAAG,GAAgB,GAAG,CAAc,GAC7D,IAAmB;EACvB,SAAS;EACT,UAAU,KAAK;EACf,UAAU;EACV,YAAY;EACZ,WAAW;EACX,aAAa;EACb,YAAY;CACd,GACM,IAAqB,EAAe,QAAQ,MAAQ,EAAI,SAAS,MAAM,EAAE,KAAK,MAAQ,EAAI,IAAI,GAC9F,IAAqB,EAAe,KAAK,MAAQ,EAAI,IAAI,GACzD,IAAoB,CAAC,GAAG,GAAoB,GAAG,CAAkB;CA6EvE,OA5EA,EAAW,SAAS,MAAc;EAOhC,IAAM,IAAsB,EAC1B,GACA,uBACA;GARA,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;GACnB,YAAY;EAKN,CACR;EACK,KAIL,EAAe,EAAE,SAAS,MAAoB;GAC5C,IAAI;GAYJ,AAXA,AASE,IATE,MAAM,QAAQ,EAAgB,KAAK,IACrB,EAAgB,QACvB,EAAgB,UAAU,MACnB,IACP,EAAgB,UAAU,UACnB,IACP,EAAgB,UAAU,UACnB,IAEA,CAAC,GAEnB,EAAc,SAAS,MAAS;IAC9B,OAAO,QAAQ,EAAgB,UAAU,EAAE,SAAS,CAAC,GAAM,OAAe;KACxE,EAAoB,KAAK;MACvB;MACA;MACA,WAAW;OACT,GAAG;OACH,GAAG;MACL;KACF,CAAC;IACH,CAAC;GACH,CAAC;EACH,CAAC;CACH,CAAC,GACD,EAAsB,SAAS,MAAc;EAM3C,IAAM,IAAgB,EACpB,GACA,iBACA;GAPA,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;EAKb,CACR;EACA,IAAI,CAAC,GACH;EAEF,IAAM,IAAa,EAAc;EACjC,OAAO,QAAQ,CAAU,EAAE,SAAS,CAAC,GAAM,OAAe;GACxD,IAAM,IAAa;IACjB,GAAG;IACH,GAAG;GACL;GAOA,AANI,OAAQ,GAAyC,WAAa,eAChE,EAAW,UAAU,EAAW,QAAQ,IAErC,GAAyC,cAAgB,GAAyC,YAAa,KAAK,KACvH,OAAO,EAAW,SAEpB,EAAoB,KAAK;IACvB,MAAM,EAAU;IAChB;IACA,WAAW;GACb,CAAC;EACH,CAAC;CACH,CAAC,GACM;AACT;AAGA,SAAS,GAAuB,GAAQ;CACtC,IAAM,IAAS,CAAC,GACZ,IAAU,IACV,IAAgB,IAChB,IAAgB,IAChB,IAAa,GACX,IAAS,EAAO;CACtB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAQ,KAAK,GAAG;EAClC,IAAM,IAAO,EAAO;EACpB,IAAI,MAAS,OAAO,CAAC,GAAe;GAElC,AADA,IAAgB,CAAC,GACjB,KAAW;GACX;EACF;EACA,IAAI,MAAS,QAAO,CAAC,GAAe;GAElC,AADA,IAAgB,CAAC,GACjB,KAAW;GACX;EACF;EACA,IAAI,CAAC,KAAiB,CAAC,GAAe;GACpC,IAAI,MAAS,KAAK;IAEhB,AADA,KAAc,GACd,KAAW;IACX;GACF;GACA,IAAI,MAAS,OAAO,IAAa,GAAG;IAElC,AADA,KACA,KAAW;IACX;GACF;GACA,IAAI,MAAS,OAAO,MAAe,GAAG;IAEpC,AADA,EAAO,KAAK,CAAO,GACnB,IAAU;IACV;GACF;EACF;EACA,KAAW;CACb;CAIA,OAHI,KACF,EAAO,KAAK,CAAO,GAEd;AACT;AACA,SAAS,GAAkB,GAAQ;CACjC,IAAM,IAAQ,CAAC,GACT,IAAe,GAAuB,KAAU,EAAE,GAClD,IAAkB,EAAa;CACrC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAiB,KAAK,GAAG;EAC3C,IAAM,IAAc,EAAa,IAC3B,IAAkB,EAAY,QAAQ,GAAG;EAC/C,IAAI,MAAoB,IACtB;EAEF,IAAM,IAAW,EAAY,MAAM,GAAG,CAAe,EAAE,KAAK,GACtD,IAAQ,EAAY,MAAM,IAAkB,CAAC,EAAE,KAAK;EAC1D,AAAI,KAAY,KACd,EAAM,KAAK,CAAC,GAAU,CAAK,CAAC;CAEhC;CACA,OAAO;AACT;AACA,SAAS,EAAgB,GAAG,GAAS;CACnC,OAAO,EAAQ,QAAQ,MAAS,CAAC,CAAC,CAAI,EAAE,QAAQ,GAAO,MAAS;EAC9D,IAAM,IAAmB,EAAE,GAAG,EAAM;EAmBpC,OAlBA,OAAO,QAAQ,CAAI,EAAE,SAAS,CAAC,GAAK,OAAW;GAE7C,IAAI,CADW,EAAiB,IACnB;IACX,EAAiB,KAAO;IACxB;GACF;GACA,IAAI,MAAQ,SAAS;IACnB,IAAM,IAAe,IAAQ,OAAO,CAAK,EAAE,MAAM,GAAG,IAAI,CAAC,GACnD,IAAkB,EAAiB,KAAO,EAAiB,GAAK,MAAM,GAAG,IAAI,CAAC,GAC9E,IAAgB,EAAa,QAAQ,MAAe,CAAC,EAAgB,SAAS,CAAU,CAAC;IAC/F,EAAiB,KAAO,CAAC,GAAG,GAAiB,GAAG,CAAa,EAAE,KAAK,GAAG;GACzE,OAAO,IAAI,MAAQ,SAAS;IAC1B,IAAM,IAAW,IAAI,IAAI,CAAC,GAAG,GAAkB,EAAiB,EAAI,GAAG,GAAG,GAAkB,CAAK,CAAC,CAAC;IACnG,EAAiB,KAAO,MAAM,KAAK,EAAS,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAU,OAAS,GAAG,EAAS,IAAI,GAAK,EAAE,KAAK,IAAI;GAClH,OACE,EAAiB,KAAO;EAE5B,CAAC,GACM;CACT,GAAG,CAAC,CAAC;AACP;AAGA,SAAS,GAAsB,GAAY,GAAqB;CAC9D,OAAO,EAAoB,QAAQ,MAAc,EAAU,SAAS,EAAW,KAAK,IAAI,EAAE,QAAQ,MAAS,EAAK,UAAU,QAAQ,EAAE,KAAK,MAClI,EAAK,UAAU,aAKb,EAAK,UAAU,WAAW,EAAW,KAAK,KAAK,CAAC,IAJ9C,GACJ,EAAK,OAAO,EAAW,MAAM,EAAK,MACrC,CAGH,EAAE,QAAQ,GAAY,MAAc,EAAgB,GAAY,CAAS,GAAG,CAAC,CAAC;AACjF;AAGA,SAAS,GAAW,GAAO;CAazB,OAZI,OAAO,KAAU,WAGjB,EAAM,MAAM,sBAAsB,IAC7B,OAAO,CAAK,IAEjB,MAAU,SACL,KAEL,MAAU,UACL,KAEF,IAXE;AAYX;AAGA,SAAS,GAAqC,GAAW,GAAqB;CAI5E,OAHI,WAAW,IACN,IAEF;EACL,GAAG;EACH,WAAW,MAAS;GAClB,IAAM,IAAgB,EAAU,WAAW,EAAU,SAAS,CAAI,IAAI,EAAU;GAChF,IAAI,MAAkB,IACpB,OAAO;GAET,IAAM,IAAgB,EAAoB,QAAQ,GAAO,MAAS;IAChE,IAAM,IAAQ,EAAK,UAAU,YAAY,EAAK,UAAU,UAAU,CAAI,IAAI,GAAW,EAAK,aAAa,EAAK,IAAI,CAAC;IAIjH,OAHI,KAAU,OACL,IAEF;KACL,GAAG;MACF,EAAK,OAAO;IACf;GACF,GAAG,CAAC,CAAC;GACL,OAAO;IAAE,GAAG;IAAe,GAAG;GAAc;EAC9C;CACF;AACF;AAGA,SAAS,GAAkB,GAAM;CAC/B,OAAO,OAAO,YAEZ,OAAO,QAAQ,CAAI,EAAE,QAAQ,CAAC,GAAK,OAC7B,MAAQ,WAAW,GAAc,CAAK,IACjC,KAEF,KAAU,IAClB,CACH;AACF;AACA,SAAS,GAAmB,GAAoB;CAE9C,IAAM,IAAO,CAAC;CAOd,OANI,CAAQ,GAAyD,WAAiC,cAAe,cAAe,GAAyD,aAAc,CAAC,OAC1M,EAAK,UAAU,EAAmB,UAAU,UAEnC,GAAyD,WAAiC,aAAc,KAAK,MACtH,EAAK,WAAW,EAAmB,UAAU,WAExC,CAAC,EAAmB,MAAM,CAAI;AACvC;AACA,SAAS,GAA8B,GAAY,GAAQ;CAEzD,IAAM,IAAgB,GAA4B,CAAU,GACtD,EAAE,mBAAgB,sBAAmB,GAAgB,CAAU;CAiGrE,OAAO,IAAIC,EAAQ;EACjB,SAjGoB,EAAe,MAAM,MAAc,EAAkB,GAAW,SAAS,CAAC,GAAyB;EAkGvH,OAjGY,OAAO,YACnB,EAAe,KAAK,MAAc;GAChC,IAAM,IAAsB,EAAc,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAC3F,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,EAAU;IACnB;GACF,GAQM,IAAS,GAAkB;IAC/B,GARsB,EAAW,QAAQ,GAAQ,MAAM;KACvD,IAAM,IAAmB,EAAkB,GAAG,oBAAoB,CAAO;KACzE,OAAO;MACL,GAAG;MACH,GAAG,IAAmB,EAAiB,CAAS,IAAI,CAAC;KACvD;IACF,GAAG,CAAC,CAEe;IACjB,SAAS,EAAa,EAAkB,GAAW,WAAW,CAAO,CAAC;IACtE,OAAO,EAAa,EAAkB,GAAW,SAAS,CAAO,CAAC;IAClE,OAAO,EAAa,EAAkB,GAAW,SAAS,CAAO,CAAC;IAClE,QAAQ,EAAa,EAAkB,GAAW,UAAU,CAAO,CAAC;IACpE,MAAM,EAAa,EAAkB,GAAW,QAAQ,CAAO,CAAC;IAChE,YAAY,EAAa,EAAkB,GAAW,cAAc,CAAO,CAAC;IAC5E,WAAW,EAAa,EAAkB,GAAW,aAAa,CAAO,CAAC;IAC1E,MAAM,EAAa,EAAkB,GAAW,QAAQ,CAAO,CAAC;IAChE,YAAY,EAAa,EAAkB,GAAW,cAAc,CAAO,CAAC;IAC5E,sBAAsB,EACpB,EAAkB,GAAW,wBAAwB,CAAO,CAC9D;IACA,UAAU,EAAa,EAAkB,GAAW,YAAY,CAAO,CAAC;IACxE,WAAW,EAAa,EAAkB,GAAW,aAAa,CAAO,CAAC;IAC1E,OAAO,OAAO,YAAY,EAAoB,IAAI,EAAkB,CAAC;GACvE,CAAC,GACK,IAAY,EAAa,EAAkB,GAAW,aAAa,CAAO,CAAC;GACjF,AAAI,MACF,EAAO,WAAW,EAAU,KACzB,MAAc,GAAqC,GAAW,CAAmB,CACpF;GAEF,IAAM,IAAa,EAAkB,GAAW,cAAc,CAAO;GACrE,AAAI,MACF,EAAO,SAAS,MAAS,EAAW;IAClC;IACA,gBAAgB,GAAsB,GAAM,CAAmB;GACjE,CAAC;GAEH,IAAM,IAAa,EAAkB,GAAW,cAAc,CAAO;GAIrE,OAHI,MACF,EAAO,SAAS,IAEX,CAAC,EAAU,MAAM,CAAM;EAChC,CAAC,CA6CG;EACJ,OA5CY,OAAO,YACnB,EAAe,KAAK,MAAc;GAChC,IAAM,IAAsB,EAAc,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAC3F,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,EAAU;IACnB;GACF,GAQM,IAAS,GAAkB;IAC/B,GARsB,EAAW,QAAQ,GAAQ,MAAM;KACvD,IAAM,IAAmB,EAAkB,GAAG,oBAAoB,CAAO;KACzE,OAAO;MACL,GAAG;MACH,GAAG,IAAmB,EAAiB,CAAS,IAAI,CAAC;KACvD;IACF,GAAG,CAAC,CAEe;IACjB,WAAW,EAAa,EAAkB,GAAW,aAAa,CAAO,CAAC;IAC1E,UAAU,EAAa,EAAkB,GAAW,YAAY,CAAO,CAAC;IACxE,OAAO,EAAa,EAAkB,GAAW,SAAS,CAAO,CAAC;IAClE,UAAU,EAAa,EAAkB,GAAW,YAAY,CAAO,CAAC;IACxE,MAAM,EAAa,EAAkB,GAAW,QAAQ,CAAO,CAAC;IAChE,OAAO,OAAO,YAAY,EAAoB,IAAI,EAAkB,CAAC;GACvE,CAAC,GACK,IAAY,EAAa,EAAkB,GAAW,aAAa,CAAO,CAAC;GACjF,AAAI,MACF,EAAO,WAAW,EAAU,KACzB,MAAc,GAAqC,GAAW,CAAmB,CACpF;GAEF,IAAM,IAAa,EAAkB,GAAW,cAAc,CAAO;GAOrE,OANI,MACF,EAAO,SAAS,MAAS,EAAW;IAClC;IACA,gBAAgB,GAAsB,GAAM,CAAmB;GACjE,CAAC,IAEI,CAAC,EAAU,MAAM,CAAM;EAChC,CAAC,CAKG;CACN,CAAC;AACH;AAGA,SAAS,GAAe,GAAO;CAC7B,IAAM,IAAW,EAAM,QAAQ,GAAI,MAAU,EAAM,QAAQ,CAAE,MAAM,CAAK;CACxE,OAAO,MAAM,KAAK,IAAI,IAAI,CAAQ,CAAC;AACrC;AAGA,SAAS,GAAe,GAAY;CAElC,OAAO,EAAW,MAAM,GAAG,MAAM;EAC/B,IAAM,IAAY,EAAkB,GAAG,UAAU,KAAK,KAChD,IAAY,EAAkB,GAAG,UAAU,KAAK;EAOtD,OANI,IAAY,IACP,KAET,EAAI,IAAY;CAIlB,CAAC;AACH;AAGA,SAAS,GAAkB,GAAY;CACrC,IAAM,IAAqB,GAAe,GAAkB,CAAU,CAAC,GACjE,IAAkB,GAAe,EAAmB,KAAK,MAAc,EAAU,IAAI,CAAC;CAM5F,OALI,EAAgB,UAClB,QAAQ,KACN,oDAAoD,EAAgB,KAAK,MAAS,IAAI,EAAK,EAAE,EAAE,KAAK,IAAI,EAAE,4BAC5G,GAEK;AACT;AA2BA,SAAS,GAAe,GAAW,GAAO,GAAS;CACjD,IAAM,EAAE,SAAM,UAAO,GACf,EAAE,oBAAiB,QAAQ,qBAAkB,CAAC,MAAM,KAAW,CAAC,GAClE,IAAO;CAuBX,OAtBA,EAAU,aAAa,GAAM,IAAK,GAAM,GAAK,GAAQ,MAAU;EAE7D,AAAI,EAAK,WAAW,IAAM,MACxB,KAAQ;EAEV,IAAM,IAAiB,IAAmD,EAAK,KAAK;EACpF,IAAI,GAUF,OATI,MACF,KAAQ,EAAe;GACrB;GACA;GACA;GACA;GACA;EACF,CAAC,IAEI;EAET,AAAI,EAAK,WACP,MAAc,GAA6B,OAA4B,MAAM,KAAK,IAAI,GAAM,CAAG,IAAI,GAAK,IAAK,CAAG;CAEpH,CAAC,GACM;AACT;AAYA,SAAS,GAA6B,GAAQ;CAC5C,OAAO,OAAO,YACZ,OAAO,QAAQ,EAAO,KAAK,EAAE,QAAQ,GAAG,OAAU,EAAK,KAAK,MAAM,EAAE,KAAK,CAAC,GAAM,OAAU,CAAC,GAAM,EAAK,KAAK,MAAM,CAAC,CACpH;AACF;AAiBA,SAAS,GAAkB,GAAO,GAAY;CAC5C,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,SAAM,UAAO,EAAM,WACrB,IAAQ,CAAC;CACf,EAAM,IAAI,aAAa,GAAM,IAAK,MAAU;EAC1C,EAAM,KAAK,CAAK;CAClB,CAAC;CACD,IAAM,IAAO,EAAM,QAAQ,EAAE,MAAM,MAAa,EAAS,KAAK,SAAS,EAAK,IAAI;CAIhF,OAHK,IAGE,EAAE,GAAG,EAAK,MAAM,IAFd,CAAC;AAGZ;AAGA,SAAS,GAAc,GAAO,GAAY;CACxC,IAAM,IAAa,GACjB,OAAO,KAAe,WAAW,IAAa,EAAW,MACzD,EAAM,MACR;CAOA,OANI,MAAe,SACV,GAAkB,GAAO,CAAU,IAExC,MAAe,SACV,GAAkB,GAAO,CAAU,IAErC,CAAC;AACV;AAGA,SAAS,GAAiB,GAAO,IAAK,KAAK,WAAW;CACpD,IAAM,IAAO,CAAC;CACd,OAAO,EAAM,QAAQ,MAAS;EAC5B,IAAM,IAAM,EAAG,CAAI;EACnB,OAAO,OAAO,UAAU,eAAe,KAAK,GAAM,CAAG,IAAI,KAAQ,EAAK,KAAO;CAC/E,CAAC;AACH;AAGA,SAAS,GAAsB,GAAS;CACtC,IAAM,IAAgB,GAAiB,CAAO;CAC9C,OAAO,EAAc,WAAW,IAAI,IAAgB,EAAc,QAAQ,GAAQ,MAEzE,CADM,EAAc,QAAQ,GAAG,MAAM,MAAM,CACvC,EAAE,MAAM,MACV,EAAO,SAAS,QAAQ,EAAY,SAAS,QAAQ,EAAO,SAAS,MAAM,EAAY,SAAS,MAAM,EAAO,SAAS,QAAQ,EAAY,SAAS,QAAQ,EAAO,SAAS,MAAM,EAAY,SAAS,EAC9M,CACF;AACH;AACA,SAAS,GAAiB,GAAW;CACnC,IAAM,EAAE,YAAS,aAAU,GACrB,IAAU,CAAC;CA+BjB,OA9BA,EAAQ,KAAK,SAAS,GAAS,MAAU;EACvC,IAAM,IAAS,CAAC;EAChB,IAAK,EAAQ,OAAO,QAOlB,EAAQ,SAAS,GAAM,MAAO;GAC5B,EAAO,KAAK;IAAE;IAAM;GAAG,CAAC;EAC1B,CAAC;OATyB;GAC1B,IAAM,EAAE,SAAM,UAAO,EAAM;GAC3B,IAAI,MAAS,KAAK,KAAK,MAAO,KAAK,GACjC;GAEF,EAAO,KAAK;IAAE;IAAM;GAAG,CAAC;EAC1B;EAKA,EAAO,SAAS,EAAE,SAAM,YAAS;GAC/B,IAAM,IAAW,EAAQ,MAAM,CAAK,EAAE,IAAI,GAAM,EAAE,GAC5C,IAAS,EAAQ,MAAM,CAAK,EAAE,IAAI,CAAE,GACpC,IAAW,EAAQ,OAAO,EAAE,IAAI,GAAU,EAAE,GAC5C,IAAS,EAAQ,OAAO,EAAE,IAAI,CAAM;GAC1C,EAAQ,KAAK;IACX,UAAU;KACR,MAAM;KACN,IAAI;IACN;IACA,UAAU;KACR,MAAM;KACN,IAAI;IACN;GACF,CAAC;EACH,CAAC;CACH,CAAC,GACM,GAAsB,CAAO;AACtC;AA2CA,SAAS,GAAgB,GAAM,GAAI,GAAK;CACtC,IAAM,IAAQ,CAAC;CA2Bf,OA1BI,MAAS,IACX,EAAI,QAAQ,CAAI,EAAE,MAAM,EAAE,SAAS,MAAS;EAE1C,IAAM,IAAQ,GADD,EAAI,QAAQ,CACK,GAAG,EAAK,IAAI;EACrC,KAGL,EAAM,KAAK;GACT;GACA,GAAG;EACL,CAAC;CACH,CAAC,IAED,EAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EACpC,CAAC,KAAS,GAA6B,aAAc,KAAK,KAG9D,EAAM,KACJ,GAAG,EAAK,MAAM,KAAK,OAAU;GAC3B,MAAM;GACN,IAAI,IAAM,EAAK;GACf;EACF,EAAE,CACJ;CACF,CAAC,GAEI;AACT;AAGA,IAAI,MAAqB,GAAO,GAAY,GAAK,IAAW,OAAO;CACjE,IAAM,IAAO,EAAM,IAAI,QAAQ,CAAG,GAC9B,IAAe,GACf,IAAO;CACX,OAAO,IAAe,KAAK,MAAS,OAAM;EACxC,IAAM,IAAc,EAAK,KAAK,CAAY;EAC1C,AAAK,GAA2C,KAAK,SAAU,IAC7D,IAAO,IAEP;CAEJ;CACA,OAAO,CAAC,GAAM,CAAY;AAC5B;AAGA,SAAS,GAAoB,GAAM,GAAQ;CACzC,OAAO,EAAO,MAAM,MAAS,EAAO,MAAM,MAAS;AACrD;AAGA,SAAS,GAAsB,GAAqB,GAAU,GAAY;CACxE,OAAO,OAAO,YACZ,OAAO,QAAQ,CAAU,EAAE,QAAQ,CAAC,OAAU;EAC5C,IAAM,IAAqB,EAAoB,MAAM,MAC5C,EAAK,SAAS,KAAY,EAAK,SAAS,CAChD;EAID,OAHK,IAGE,EAAmB,UAAU,cAF3B;CAGX,CAAC,CACH;AACF;AAGA,IAAI,MAA2B,GAAO,IAAW,QAAQ;CACvD,IAAI,IAAa,IACX,IAAc,EAAM;CAW1B,OAVA,EAAM,OAAO,aAAa,KAAK,IAAI,GAAG,IAAc,CAAQ,GAAG,IAAc,GAAM,GAAK,GAAQ,MAAU;EACxG,IAAI;EACJ,IAAM,KAAgB,IAAK,EAAK,KAAK,MAAM,QAA8B,KAAK,GAAI;GAChF;GACA;GACA;GACA;EACF,CAAC,KAAM,EAAK,eAAe;EAC3B,KAAc,EAAK,UAAU,CAAC,EAAK,SAAS,IAAQ,EAAM,MAAM,GAAG,KAAK,IAAI,GAAG,IAAc,CAAG,CAAC;CACnG,CAAC,GACM;AACT;AAGA,SAAS,GAAa,GAAO,GAAY,IAAa,CAAC,GAAG;CACxD,IAAM,EAAE,UAAO,cAAW,EAAM,WAC1B,IAAO,IAAa,EAAY,GAAY,EAAM,MAAM,IAAI;CAClE,IAAI,GACF,OAAO,CAAC,EAAE,EAAM,eAAe,EAAM,UAAU,MAAM,MAAM,GAAG,QAAQ,MAC/D,IAGE,EAAK,SAAS,EAAK,KAAK,OAFtB,EAGV,EAAE,MAAM,MAAS,GAAe,EAAK,OAAO,GAAY,EAAE,QAAQ,GAAM,CAAC,CAAC;CAE7E,IAAI,IAAiB,GACf,IAAa,CAAC;CAwBpB,IAvBA,EAAO,SAAS,EAAE,UAAO,aAAU;EACjC,IAAM,IAAO,EAAM,KACb,IAAK,EAAI;EACf,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAC9C,IAAI,KAAQ,EAAK,iBAAiB,CAAC,EAAK,KAAK,eAAe,CAAI,GAC9D,OAAO;GAET,IAAI,CAAC,EAAK,UAAU,CAAC,EAAK,MAAM,QAC9B;GAEF,IAAM,IAAe,KAAK,IAAI,GAAM,CAAG,GACjC,IAAa,KAAK,IAAI,GAAI,IAAM,EAAK,QAAQ,GAC7C,IAAS,IAAa;GAE5B,AADA,KAAkB,GAClB,EAAW,KACT,GAAG,EAAK,MAAM,KAAK,OAAU;IAC3B;IACA,MAAM;IACN,IAAI;GACN,EAAE,CACJ;EACF,CAAC;CACH,CAAC,GACG,MAAmB,GACrB,OAAO;CAET,IAAM,IAAe,EAAW,QAAQ,MACjC,IAGE,EAAK,SAAS,EAAU,KAAK,KAAK,OAFhC,EAGV,EAAE,QAAQ,MAAc,GAAe,EAAU,KAAK,OAAO,GAAY,EAAE,QAAQ,GAAM,CAAC,CAAC,EAAE,QAAQ,GAAK,MAAc,IAAM,EAAU,KAAK,EAAU,MAAM,CAAC,GACzJ,IAAgB,EAAW,QAAQ,MAClC,IAGE,EAAU,KAAK,SAAS,KAAQ,EAAU,KAAK,KAAK,SAAS,CAAI,IAF/D,EAGV,EAAE,QAAQ,GAAK,MAAc,IAAM,EAAU,KAAK,EAAU,MAAM,CAAC;CAEpE,QADc,IAAe,IAAI,IAAe,IAAgB,MAChD;AAClB;AAkBA,IAAI,MAAiB,GAAO,MAAa;CACvC,IAAM,EAAE,UAAO,QAAK,eAAY,EAAM;CACtC,IAAI,GAAU;EACZ,IAAM,IAAa,IAAgB,MAAS,EAAK,KAAK,SAAS,CAAQ,EAAE,EAAM,SAAS;EACxF,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAa,EAAM,IAAI,QAAQ,EAAW,MAAM,CAAC;EAIvD,OAHI,EAAQ,MAAM,MAAM,EAAW,IAAI;CAIzC;CAIA,OAHA,EAAI,EAAI,eAAe,EAAI,OAAO,WAAW,KAAK,EAAM,QAAQ,EAAI;AAItE,GAGI,MAAmB,MAAU;CAC/B,IAAM,EAAE,UAAO,WAAQ,EAAM;CAI7B,OAHA,EAAI,EAAM,eAAe,KAAK,EAAM,QAAQ,EAAI;AAIlD;AAGA,SAAS,GAAwB,GAAW,GAAS;CAOnD,OANI,MAAM,QAAQ,CAAO,IAChB,EAAQ,MAAM,OACN,OAAO,KAAqB,WAAW,IAAmB,EAAiB,UACxE,EAAU,IAC3B,IAEI;AACT;AAGA,SAAS,GAAO,GAAM,GAAY;CAChC,IAAM,EAAE,sBAAmB,GAAgB,CAAU,GAC/C,IAAY,EAAe,MAAM,MAAS,EAAK,SAAS,CAAI;CAClE,IAAI,CAAC,GACH,OAAO;CAOT,IAAM,IAAQ,EAAa,EAAkB,GAAW,SAAS;EAJ/D,MAAM,EAAU;EAChB,SAAS,EAAU;EACnB,SAAS,EAAU;CAEkD,CAAC,CAAC;CAIzE,OAHI,OAAO,KAAU,WAGd,EAAM,MAAM,GAAG,EAAE,SAAS,MAAM,IAF9B;AAGX;AAGA,SAAS,GAAY,GAAM,EACzB,mBAAgB,IAChB,sBAAmB,OACjB,CAAC,GAAG;CAEN,IAAI,GAAkB;EACpB,IAAI,EAAK,KAAK,SAAS,aACrB,OAAO;EAET,IAAI,EAAK,QACP,OAAO,CAAC,KAAK,KAAW,EAAK,QAAqB,EAAE;CAExD;CACA,IAAI,EAAK,QACP,OAAO,CAAC,EAAK;CAEf,IAAI,EAAK,UAAU,EAAK,QACtB,OAAO;CAET,IAAI,EAAK,QAAQ,eAAe,GAC9B,OAAO;CAET,IAAI,GAAe;EACjB,IAAI,IAAiB;EASrB,OARA,EAAK,QAAQ,SAAS,MAAc;GAC9B,MAAmB,OAGlB,GAAY,GAAW;IAAE;IAAkB;GAAc,CAAC,MAC7D,IAAiB;EAErB,CAAC,GACM;CACT;CACA,OAAO;AACT;AAIA,SAAS,GAAgB,GAAO;CAC9B,OAAO,aAAiB;AAC1B;AA+IA,SAAS,GAAW,GAAO,GAAI,GAAa;CAE1C,IAAM,EAAE,iBAAc,GAClB,IAAS;CAIb,IAHI,GAAgB,CAAS,MAC3B,IAAS,EAAU,UAEjB,GAAQ;EACV,IAAM,IAAqB,EAAM,eAA4B,EAAO,MAAM;EAE1E,OAD6B,EAAO,OAAO,KAAK,eAAe,CACrC,MAAM,CAAC,CAAC,EAAY,QAAQ,CAAY,KAAK,CAAC,EAAa,MAAM,MAAS,EAAK,KAAK,SAAS,CAAW,CAAC;CACrI;CACA,IAAM,EAAE,cAAW;CACnB,OAAO,EAAO,MAAM,EAAE,UAAO,aAAU;EACrC,IAAI,IAAuB,EAAM,UAAU,IAAI,EAAM,IAAI,iBAAiB,EAAM,IAAI,KAAK,eAAe,CAAW,IAAI;EAYvH,OAXA,EAAM,IAAI,aAAa,EAAM,KAAK,EAAI,MAAM,GAAM,GAAM,MAAW;GACjE,IAAI,GACF,OAAO;GAET,IAAI,EAAK,UAAU;IACjB,IAAM,IAAuB,CAAC,KAAU,EAAO,KAAK,eAAe,CAAW,GACxE,IAA4B,CAAC,CAAC,EAAY,QAAQ,EAAK,KAAK,KAAK,CAAC,EAAK,MAAM,MAAM,MAAc,EAAU,KAAK,SAAS,CAAW,CAAC;IAC3I,IAAuB,KAAwB;GACjD;GACA,OAAO,CAAC;EACV,CAAC,GACM;CACT,CAAC;AACH;AACA,IAAI,MAAW,GAAY,IAAa,CAAC,OAAO,EAAE,OAAI,UAAO,kBAAe;CAC1E,IAAM,EAAE,iBAAc,GAChB,EAAE,UAAO,cAAW,GACpB,IAAO,EAAY,GAAY,EAAM,MAAM;CACjD,IAAI,GACF,IAAI,GAAO;EACT,IAAM,IAAgB,GAAkB,GAAO,CAAI;EACnD,EAAG,cACD,EAAK,OAAO;GACV,GAAG;GACH,GAAG;EACL,CAAC,CACH;CACF,OACE,EAAO,SAAS,MAAU;EACxB,IAAM,IAAO,EAAM,MAAM,KACnB,IAAK,EAAM,IAAI;EACrB,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAC9C,IAAM,IAAc,KAAK,IAAI,GAAK,CAAI,GAChC,IAAY,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE;GAElD,AADoB,EAAK,MAAM,MAAM,MAAS,EAAK,SAAS,CAC9C,IACZ,EAAK,MAAM,SAAS,MAAS;IAC3B,AAAI,MAAS,EAAK,QAChB,EAAG,QACD,GACA,GACA,EAAK,OAAO;KACV,GAAG,EAAK;KACR,GAAG;IACL,CAAC,CACH;GAEJ,CAAC,IAED,EAAG,QAAQ,GAAa,GAAW,EAAK,OAAO,CAAU,CAAC;EAE9D,CAAC;CACH,CAAC;CAGL,OAAO,GAAW,GAAO,GAAI,CAAI;AACnC,GAGI,MAAW,GAAK,OAAW,EAAE,aAC/B,EAAG,QAAQ,GAAK,CAAK,GACd,KAKL,MAAW,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,aAAU,eAAY;CAC7E,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM,GAC7C;CAQJ,OAPI,EAAM,UAAU,QAAQ,WAAW,EAAM,UAAU,KAAK,MAC1D,IAAmB,EAAM,UAAU,QAAQ,OAAO,QAE/C,EAAK,cAIH,EAAM,EAAE,SAAS,EAAE,kBACJ,EAAa,GAAM;EAAE,GAAG;EAAkB,GAAG;CAAW,CAAC,EAAE,CACjE,IACL,KAEF,EAAS,WAAW,CAC5B,EAAE,SAAS,EAAE,OAAO,QACZ,EAAa,GAAM;EAAE,GAAG;EAAkB,GAAG;CAAW,CAAC,EAAE,GAAc,CAAQ,CACzF,EAAE,IAAI,KAXL,QAAQ,KAAK,wEAAsE,GAC5E;AAWX,GAII,MAAoB,OAAc,EAAE,OAAI,kBAAe;CACzD,IAAI,GAAU;EACZ,IAAM,EAAE,WAAQ,GACV,IAAO,GAAO,GAAU,GAAG,EAAI,QAAQ,IAAI,GAC3C,IAAYC,EAAe,OAAO,GAAK,CAAI;EACjD,EAAG,aAAa,CAAS;CAC3B;CACA,OAAO;AACT,GAGI,MAAoB,GAAW,OAAc,EAAE,OAAI,UAAO,kBAAe;CAC3E,IAAM,EAAE,iBAAc,GAClB,GACA;CAsBJ,OArBI,OAAO,KAAa,YACtB,IAAO,GACP,IAAK,KACI,KAAY,UAAU,KAAY,QAAQ,KACnD,IAAO,EAAS,MAChB,IAAK,EAAS,OAEd,IAAO,EAAU,MACjB,IAAK,EAAU,KAEb,KACF,EAAG,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EACvC,EAAK,UAGT,EAAG,cAAc,GAAK,KAAK,GAAG;GAC5B,GAAG,EAAK;GACR,KAAK;EACP,CAAC;CACH,CAAC,GAEI;AACT,GAII,MAAoB,OAAc,EAAE,OAAI,kBAAe;CACzD,IAAI,GAAU;EACZ,IAAM,EAAE,WAAQ,GACV,EAAE,SAAM,UAAO,OAAO,KAAa,WAAW;GAAE,MAAM;GAAU,IAAI;EAAS,IAAI,GACjF,IAASC,EAAe,QAAQ,CAAG,EAAE,MACrC,IAASA,EAAe,MAAM,CAAG,EAAE,IACnC,IAAe,GAAO,GAAM,GAAQ,CAAM,GAC1C,IAAc,GAAO,GAAI,GAAQ,CAAM,GACvC,IAAYA,EAAe,OAAO,GAAK,GAAc,CAAW;EACtE,EAAG,aAAa,CAAS;CAC3B;CACA,OAAO;AACT,GAII,MAAgB,OAAgB,EAAE,UAAO,kBAEpCC,GADM,EAAY,GAAY,EAAM,MACZ,CAAC,EAAE,GAAO,CAAQ;AAMnD,SAAS,GAAY,GAAO,GAAiB;CAC3C,IAAM,IAAQ,EAAM,eAAe,EAAM,UAAU,IAAI,gBAAgB,EAAM,UAAU,MAAM,MAAM;CACnG,IAAI,GAAO;EACT,IAAM,IAAgB,EAAM,QAAQ,MAAS,GAAmD,SAAS,EAAK,KAAK,IAAI,CAAC;EACxH,EAAM,GAAG,YAAY,CAAa;CACpC;AACF;AACA,IAAI,MAAc,EAAE,eAAY,OAAS,CAAC,OAAO,EAAE,OAAI,UAAO,aAAU,gBAAa;CACnF,IAAM,EAAE,cAAW,WAAQ,GACrB,EAAE,UAAO,WAAQ,GACjB,IAAsB,EAAO,iBAAiB,YAC9C,IAAgB,GAAsB,GAAqB,EAAM,KAAK,EAAE,KAAK,MAAM,EAAM,KAAK,EAAE,KAAK;CAC3G,IAAI,aAAqBC,KAAkB,EAAU,KAAK,SAUxD,OATI,CAAC,EAAM,gBAAgB,CAAC,EAAS,GAAK,EAAM,GAAG,IAC1C,MAEL,MACE,KACF,GAAY,GAAO,EAAO,iBAAiB,eAAe,GAE5D,EAAG,MAAM,EAAM,GAAG,EAAE,eAAe,IAE9B;CAET,IAAI,CAAC,EAAM,OAAO,SAChB,OAAO;CAET,IAAM,IAAQ,EAAI,iBAAiB,EAAI,OAAO,QAAQ,MAChD,IAAQ,EAAM,UAAU,IAAI,KAAK,IAAI,GAAe,EAAM,KAAK,EAAE,EAAE,eAAe,EAAM,WAAW,EAAE,CAAC,CAAC,GACzG,IAAQ,KAAS,IAAQ,CAC3B;EACE,MAAM;EACN,OAAO;CACT,CACF,IAAI,KAAK,GACL,IAAM,EAAS,EAAG,KAAK,EAAG,QAAQ,IAAI,EAAM,GAAG,GAAG,GAAG,CAAK;CAU9D,IATI,CAAC,KAAS,CAAC,KAAO,EAAS,EAAG,KAAK,EAAG,QAAQ,IAAI,EAAM,GAAG,GAAG,GAAG,IAAQ,CAAC,EAAE,MAAM,EAAM,CAAC,IAAI,KAAK,CAAC,MACrG,IAAM,IACN,IAAQ,IAAQ,CACd;EACE,MAAM;EACN,OAAO;CACT,CACF,IAAI,KAAK,IAEP,GAAU;EACZ,IAAI,MACE,aAAqBC,KACvB,EAAG,gBAAgB,GAErB,EAAG,MAAM,EAAG,QAAQ,IAAI,EAAM,GAAG,GAAG,GAAG,CAAK,GACxC,KAAS,CAAC,KAAS,CAAC,EAAM,gBAAgB,EAAM,OAAO,SAAS,IAAO;GACzE,IAAM,IAAS,EAAG,QAAQ,IAAI,EAAM,OAAO,CAAC,GACtC,IAAS,EAAG,IAAI,QAAQ,CAAM;GACpC,AAAI,EAAM,KAAK,EAAE,EAAE,eAAe,EAAO,MAAM,GAAG,EAAO,MAAM,IAAI,GAAG,CAAK,KACzE,EAAG,cAAc,EAAG,QAAQ,IAAI,EAAM,OAAO,CAAC,GAAG,CAAK;EAE1D;EAKF,AAHI,KACF,GAAY,GAAO,EAAO,iBAAiB,eAAe,GAE5D,EAAG,eAAe;CACpB;CACA,OAAO;AACT,GAMI,MAAiB,GAAY,IAAgB,CAAC,OAAO,EAAE,OAAI,UAAO,aAAU,gBAAa;CAE3F,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,UAAO,WAAQ,EAAM,WACvB,IAAO,EAAM,UAAU;CAC7B,IAAI,KAAQ,EAAK,WAAW,EAAM,QAAQ,KAAK,CAAC,EAAM,WAAW,CAAG,GAClE,OAAO;CAET,IAAM,IAAc,EAAM,KAAK,EAAE;CACjC,IAAI,EAAY,SAAS,GACvB,OAAO;CAET,IAAM,IAAsB,EAAO,iBAAiB;CACpD,IAAI,EAAM,OAAO,QAAQ,SAAS,KAAK,EAAM,KAAK,EAAE,EAAE,eAAe,EAAM,WAAW,EAAE,GAAG;EACzF,IAAI,EAAM,UAAU,KAAK,EAAM,KAAK,EAAE,EAAE,SAAS,KAAQ,EAAM,MAAM,EAAE,MAAM,EAAM,KAAK,EAAE,EAAE,aAAa,GACvG,OAAO;EAET,IAAI,GAAU;GACZ,IAAI,IAAOC,EAAU,OACf,IAAc,EAAM,MAAM,EAAE,IAAI,IAAI,EAAM,MAAM,EAAE,IAAI,IAAI;GAChE,KAAK,IAAI,IAAI,EAAM,QAAQ,GAAa,KAAK,EAAM,QAAQ,GAAG,KAC5D,IAAOA,EAAU,KAAK,EAAM,KAAK,CAAC,EAAE,KAAK,CAAI,CAAC;GAEhD,IAAM,IAEJ,EAAM,WAAW,EAAE,IAAI,EAAM,KAAK,EAAE,EAAE,aAAa,IAAI,EAAM,WAAW,EAAE,IAAI,EAAM,KAAK,EAAE,EAAE,aAAa,IAAI,GAE1G,IAAyB;IAC7B,GAAG,GAAsB,GAAqB,EAAM,KAAK,EAAE,KAAK,MAAM,EAAM,KAAK,EAAE,KAAK;IACxF,GAAG;GACL,GACM,IAAmB,EAAK,aAAa,aAAmC,cAAc,CAAsB,KAAM,KAAK;GAC7H,IAAO,EAAK,OAAOA,EAAU,KAAK,EAAK,cAAc,MAAM,CAAS,KAAK,KAAK,CAAC,CAAC;GAChF,IAAM,IAAQ,EAAM,OAAO,EAAM,SAAS,IAAc,EAAE;GAC1D,EAAG,QAAQ,GAAO,EAAM,MAAM,CAAC,CAAU,GAAG,IAAI,EAAM,GAAM,IAAI,GAAa,CAAC,CAAC;GAC/E,IAAI,IAAM;GAYV,AAXA,EAAG,IAAI,aAAa,GAAO,EAAG,IAAI,QAAQ,OAAO,GAAG,MAAQ;IAC1D,IAAI,IAAM,IACR,OAAO;IAET,AAAI,EAAE,eAAe,EAAE,QAAQ,SAAS,MACtC,IAAM,IAAM;GAEhB,CAAC,GACG,IAAM,MACR,EAAG,aAAaC,EAAe,KAAK,EAAG,IAAI,QAAQ,CAAG,CAAC,CAAC,GAE1D,EAAG,eAAe;EACpB;EACA,OAAO;CACT;CACA,IAAM,IAAW,EAAI,QAAQ,EAAM,IAAI,IAAI,EAAY,eAAe,CAAC,EAAE,cAAc,MACjF,IAAoB;EACxB,GAAG,GAAsB,GAAqB,EAAY,KAAK,MAAM,EAAY,KAAK;EACtF,GAAG;CACL,GACM,IAAwB;EAC5B,GAAG,GAAsB,GAAqB,EAAM,KAAK,EAAE,KAAK,MAAM,EAAM,KAAK,EAAE,KAAK;EACxF,GAAG;CACL;CACA,EAAG,OAAO,EAAM,KAAK,EAAI,GAAG;CAC5B,IAAM,IAAQ,IAAW,CACvB;EAAE;EAAM,OAAO;CAAkB,GACjC;EAAE,MAAM;EAAU,OAAO;CAAsB,CACjD,IAAI,CAAC;EAAE;EAAM,OAAO;CAAkB,CAAC;CACvC,IAAI,CAACC,EAAU,EAAG,KAAK,EAAM,KAAK,CAAC,GACjC,OAAO;CAET,IAAI,GAAU;EACZ,IAAM,EAAE,cAAW,mBAAgB,GAC7B,EAAE,uBAAoB,EAAO,kBAC7B,IAAQ,KAAe,EAAU,IAAI,gBAAgB,EAAU,MAAM,MAAM;EAEjF,IADA,EAAG,MAAM,EAAM,KAAK,GAAG,CAAK,EAAE,eAAe,GACzC,CAAC,KAAS,CAAC,GACb,OAAO;EAET,IAAM,IAAgB,EAAM,QAAQ,MAAS,EAAgB,SAAS,EAAK,KAAK,IAAI,CAAC;EACrF,EAAG,YAAY,CAAa;CAC9B;CACA,OAAO;AACT,GAKI,MAAqB,GAAI,MAAa;CACxC,IAAM,IAAO,IAAgB,MAAS,EAAK,SAAS,CAAQ,EAAE,EAAG,SAAS;CAC1E,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAS,EAAG,IAAI,QAAQ,KAAK,IAAI,GAAG,EAAK,MAAM,CAAC,CAAC,EAAE,OAAO,EAAK,KAAK;CAC1E,IAAI,MAAW,KAAK,GAClB,OAAO;CAET,IAAM,IAAa,EAAG,IAAI,OAAO,CAAM;CAMvC,OALyB,EAAK,KAAK,SAAU,GAAyC,QAAS,EAAQ,EAAG,KAAK,EAAK,GAAG,KAIvH,EAAG,KAAK,EAAK,GAAG,GAFP;AAIX,GACI,MAAoB,GAAI,MAAa;CACvC,IAAM,IAAO,IAAgB,MAAS,EAAK,SAAS,CAAQ,EAAE,EAAG,SAAS;CAC1E,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAQ,EAAG,IAAI,QAAQ,EAAK,KAAK,EAAE,MAAM,EAAK,KAAK;CACzD,IAAI,MAAU,KAAK,GACjB,OAAO;CAET,IAAM,IAAY,EAAG,IAAI,OAAO,CAAK;CAMrC,OALwB,EAAK,KAAK,SAAU,GAAuC,QAAS,EAAQ,EAAG,KAAK,CAAK,KAIjH,EAAG,KAAK,CAAK,GAFJ;AAIX;AACA,SAAS,GAAoC,GAAI;CAC/C,IAAM,IAAM,EAAG,KACT,IAAO,EAAI;CACjB,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAS,EAAI,QAAQ,CAAC,GACtB,IAAO,EAAI,QAAQ,EAAK,WAAW,CAAC;CAC1C,OAAOC,EAAe,QAAQ,GAAQ,CAAI;AAC5C;AACA,IAAI,MAAc,GAAgB,GAAgB,GAAW,IAAa,CAAC,OAAO,EAAE,WAAQ,OAAI,UAAO,aAAU,UAAO,aAAU,aAAU;CAC1I,IAAM,EAAE,eAAY,uBAAoB,EAAO,kBACzC,IAAW,EAAY,GAAgB,EAAM,MAAM,GACnD,IAAW,EAAY,GAAgB,EAAM,MAAM,GACnD,EAAE,cAAW,mBAAgB,GAC7B,EAAE,UAAO,WAAQ,GACjB,IAAQ,EAAM,WAAW,CAAG,GAC5B,IAAQ,KAAe,EAAU,IAAI,gBAAgB,EAAU,MAAM,MAAM;CACjF,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAa,IAAgB,MAAS,GAAO,EAAK,KAAK,MAAM,CAAU,CAAC,EAAE,CAAS,GACnF,IAAiB,EAAU,SAAS,KAAK,EAAU,OAAO,EAAM,IAAI,QAAQ,MAC5E,IAAgB,EAAM,IAAI,QAAQ,SAClC,IAAmB,EAAc,WAAW,IAAI,EAAc,KAAK,MACnE,KAAmB,KAAkB,KAAoB,GAAO,EAAiB,KAAK,MAAM,CAAU,IAAI;EAC9G,MAAM;EACN,KAAK;EACL,OAAO;CACT,IAAI,MACE,IAAc,KAAkC,IAChD,KAAuB,CAAC,CAAC,KAAc,EAAM,SAAS,KAAK,EAAM,QAAQ,EAAW,SAAS,GAC7F,KAA0B,CAAC,CAAC;CAClC,KAAK,MAAwB,OAA4B,GAAa;EACpE,IAAI,EAAY,KAAK,SAAS,GAc5B,OAbI,KAAkB,KACb,EAAM,EAAE,SAAS,EAAE,IAAI,GAAK,UAAU,QAAW;GACtD,IAAM,IAAgB,GAAoC,CAAG;GAQ7D,OAPK,KAGL,EAAI,aAAa,CAAa,GAC1B,KACF,EAAK,CAAG,GAEH,MANE;EAOX,CAAC,EAAE,aAAa,CAAQ,EAAE,IAAI,IAEzB,EAAS,aAAa,CAAQ;EAEvC,IAAI,GAAO,EAAY,KAAK,KAAK,MAAM,CAAU,KAAK,EAAS,aAAa,EAAY,KAAK,OAAO,GAClG,OAAO,EAAM,EAAE,eACb,EAAG,cAAc,EAAY,KAAK,CAAQ,GACnC,GACR,EAAE,cAAc,GAAkB,GAAI,CAAQ,CAAC,EAAE,cAAc,GAAiB,GAAI,CAAQ,CAAC,EAAE,IAAI;CAExG;CAUA,OATI,CAAC,KAAa,CAAC,KAAS,CAAC,IACpB,EAAM,EAAE,cACS,EAAI,EAAE,WAAW,GAAU,CACjC,IACP,KAEF,EAAS,WAAW,CAC5B,EAAE,WAAW,GAAU,CAAU,EAAE,cAAc,GAAkB,GAAI,CAAQ,CAAC,EAAE,cAAc,GAAiB,GAAI,CAAQ,CAAC,EAAE,IAAI,IAEhI,EAAM,EAAE,cAAc;EAC3B,IAAM,IAAgB,EAAI,EAAE,WAAW,GAAU,CAAU,GACrD,IAAgB,EAAM,QAAQ,MAAS,EAAgB,SAAS,EAAK,KAAK,IAAI,CAAC;EAKrF,OAJA,EAAG,YAAY,CAAa,GACxB,IACK,KAEF,EAAS,WAAW;CAC7B,CAAC,EAAE,WAAW,GAAU,CAAU,EAAE,cAAc,GAAkB,GAAI,CAAQ,CAAC,EAAE,cAAc,GAAiB,GAAI,CAAQ,CAAC,EAAE,IAAI;AACvI,GAGI,MAAc,GAAY,IAAa,CAAC,GAAG,IAAU,CAAC,OAAO,EAAE,UAAO,kBAAe;CACvF,IAAM,EAAE,0BAAuB,OAAU,GACnC,IAAO,EAAY,GAAY,EAAM,MAAM;CAKjD,OAJkB,GAAa,GAAO,GAAM,CAChC,IACH,EAAS,UAAU,GAAM,EAAE,wBAAqB,CAAC,IAEnD,EAAS,QAAQ,GAAM,CAAU;AAC1C,GAGI,MAAc,GAAY,GAAkB,IAAa,CAAC,OAAO,EAAE,UAAO,kBAAe;CAC3F,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM,GAC3C,IAAa,EAAY,GAAkB,EAAM,MAAM,GACvD,IAAY,GAAa,GAAO,GAAM,CAAU,GAClD;CAOJ,OANI,EAAM,UAAU,QAAQ,WAAW,EAAM,UAAU,KAAK,MAC1D,IAAmB,EAAM,UAAU,QAAQ,OAAO,QAEhD,IACK,EAAS,QAAQ,GAAY,CAAgB,IAE/C,EAAS,QAAQ,GAAM;EAAE,GAAG;EAAkB,GAAG;CAAW,CAAC;AACtE,GAGI,MAAc,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAAe;CACzE,IAAM,IAAO,EAAY,GAAY,EAAM,MAAM;CAKjD,OAJkB,GAAa,GAAO,GAAM,CAChC,IACH,EAAS,KAAK,CAAI,IAEpB,EAAS,OAAO,GAAM,CAAU;AACzC,GAGI,YAAuB,EAAE,UAAO,kBAAe;CACjD,IAAM,IAAU,EAAM;CACtB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,QAAQ,KAAK,GAAG;EAC1C,IAAM,IAAS,EAAQ,IACnB;EACJ,IAAI,EAAO,KAAK,iBAAiB,IAAW,EAAO,SAAS,CAAK,IAAI;GACnE,IAAI,GAAU;IACZ,IAAM,IAAK,EAAM,IACX,IAAS,EAAS;IACxB,KAAK,IAAI,IAAI,EAAO,MAAM,SAAS,GAAG,KAAK,GAAG,KAC5C,EAAG,KAAK,EAAO,MAAM,GAAG,OAAO,EAAO,KAAK,EAAE,CAAC;IAEhD,IAAI,EAAS,MAAM;KACjB,IAAM,IAAQ,EAAG,IAAI,QAAQ,EAAS,IAAI,EAAE,MAAM;KAClD,EAAG,YAAY,EAAS,MAAM,EAAS,IAAI,EAAM,OAAO,KAAK,EAAS,MAAM,CAAK,CAAC;IACpF,OACE,EAAG,OAAO,EAAS,MAAM,EAAS,EAAE;GAExC;GACA,OAAO;EACT;CACF;CACA,OAAO;AACT,GAGI,YAAuB,EAAE,OAAI,kBAAe;CAC9C,IAAM,EAAE,iBAAc,GAChB,EAAE,UAAO,cAAW;CAS1B,OARI,KAGA,KACF,EAAO,SAAS,MAAU;EACxB,EAAG,WAAW,EAAM,MAAM,KAAK,EAAM,IAAI,GAAG;CAC9C,CAAC,GALM;AAQX,GAGI,MAAa,GAAY,IAAU,CAAC,OAAO,EAAE,OAAI,UAAO,kBAAe;CAEzE,IAAM,EAAE,0BAAuB,OAAU,GACnC,EAAE,iBAAc,GAChB,IAAO,EAAY,GAAY,EAAM,MAAM,GAC3C,EAAE,UAAO,UAAO,cAAW;CACjC,IAAI,CAAC,GACH,OAAO;CAET,IAAI,KAAS,GAAsB;EACjC,IAAI,EAAE,SAAM,UAAO,GAEb,IAAQ,GAAa,GAAO,GADd,EAAM,MAAM,EAAE,MAAM,MAAS,EAAK,SAAS,CAAI,GAAyB,KAC/C;EAK7C,AAJI,MACF,IAAO,EAAM,MACb,IAAK,EAAM,KAEb,EAAG,WAAW,GAAM,GAAI,CAAI;CAC9B,OACE,EAAO,SAAS,MAAU;EACxB,EAAG,WAAW,EAAM,MAAM,KAAK,EAAM,IAAI,KAAK,CAAI;CACpD,CAAC;CAGH,OADA,EAAG,iBAAiB,CAAI,GACjB;AACT,GAGI,MAAsB,OAAc,EAAE,OAAI,UAAO,kBAAe;CAClE,IAAM,EAAE,iBAAc,GAClB,GACA;CAqBJ,OApBI,OAAO,KAAa,YACtB,IAAO,GACP,IAAK,KACI,KAAY,UAAU,KAAY,QAAQ,KACnD,IAAO,EAAS,MAChB,IAAK,EAAS,OAEd,IAAO,EAAU,MACjB,IAAK,EAAU,KAEb,KACF,EAAG,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EAC3C,IAAI,EAAK,QACP;EAEF,IAAM,IAAW,EAAE,GAAG,EAAK,MAAM;EAEjC,AADA,OAAO,EAAS,KAChB,EAAG,cAAc,GAAK,KAAK,GAAG,CAAQ;CACxC,CAAC,GAEI;AACT,GAGI,MAAoB,GAAY,IAAa,CAAC,OAAO,EAAE,OAAI,UAAO,kBAAe;CACnF,IAAI,IAAW,MACX,IAAW,MACT,IAAa,GACjB,OAAO,KAAe,WAAW,IAAa,EAAW,MACzD,EAAM,MACR;CACA,IAAI,CAAC,GACH,OAAO;CAKT,AAHI,MAAe,WACjB,IAAW,EAAY,GAAY,EAAM,MAAM,IAE7C,MAAe,WACjB,IAAW,EAAY,GAAY,EAAM,MAAM;CAEjD,IAAI,IAAY;CAkFhB,OAjFA,EAAG,UAAU,OAAO,SAAS,MAAU;EACrC,IAAM,IAAO,EAAM,MAAM,KACnB,IAAK,EAAM,IAAI,KACjB,GACA,GACA,GACA;EAoDJ,AAnDI,EAAG,UAAU,QACf,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAC9C,AAAI,KAAY,MAAa,EAAK,SAChC,IAAY,IACZ,IAAc,KAAK,IAAI,GAAK,CAAI,GAChC,IAAY,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE,GAC5C,IAAU,GACV,IAAW;EAEf,CAAC,IAED,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;GAQ9C,AAPI,IAAM,KAAQ,KAAY,MAAa,EAAK,SAC9C,IAAY,IACZ,IAAc,KAAK,IAAI,GAAK,CAAI,GAChC,IAAY,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE,GAC5C,IAAU,GACV,IAAW,IAET,KAAO,KAAQ,KAAO,MACpB,KAAY,MAAa,EAAK,SAChC,IAAY,IACR,KACF,EAAG,cAAc,GAAK,KAAK,GAAG;IAC5B,GAAG,EAAK;IACR,GAAG;GACL,CAAC,IAGD,KAAY,EAAK,MAAM,UACzB,EAAK,MAAM,SAAS,MAAS;IAC3B,IAAI,MAAa,EAAK,SACpB,IAAY,IACR,IAAU;KACZ,IAAM,IAAe,KAAK,IAAI,GAAK,CAAI,GACjC,IAAa,KAAK,IAAI,IAAM,EAAK,UAAU,CAAE;KACnD,EAAG,QACD,GACA,GACA,EAAS,OAAO;MACd,GAAG,EAAK;MACR,GAAG;KACL,CAAC,CACH;IACF;GAEJ,CAAC;EAGP,CAAC,GAEC,MACE,MAAY,KAAK,KAAK,KACxB,EAAG,cAAc,GAAS,KAAK,GAAG;GAChC,GAAG,EAAS;GACZ,GAAG;EACL,CAAC,GAEC,KAAY,EAAS,MAAM,UAC7B,EAAS,MAAM,SAAS,MAAS;GAC/B,AAAI,MAAa,EAAK,QAAQ,KAC5B,EAAG,QACD,GACA,GACA,EAAS,OAAO;IACd,GAAG,EAAK;IACR,GAAG;GACL,CAAC,CACH;EAEJ,CAAC;CAGP,CAAC,GACM;AACT,GAII,MAAU,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAE/CC,GADM,EAAY,GAAY,EAAM,MAClB,GAAG,CAAU,EAAE,GAAO,CAAQ,GAKrD,MAAc,GAAY,IAAa,CAAC,OAAO,EAAE,UAAO,kBAEnDC,GADM,EAAY,GAAY,EAAM,MACd,GAAG,CAAU,EAAE,GAAO,CAAQ,GAuDzD,KAAY,MAAM;CACpB,YAAY,GAAQ;EAIlB,AAFA,KAAK,OAAO,EAAO,MACnB,KAAK,UAAU,EAAO,SACtB,KAAK,WAAiB,EAAO,YAAyB;CACxD;AACF,GACI,MAA2B,GAAM,MAAS;CAC5C,IAAI,GAAS,CAAI,GACf,OAAO,EAAK,KAAK,CAAI;CAEvB,IAAM,IAAiB,EAAK,CAAI;CAChC,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAS,CAAC,EAAe,IAAI;CAUnC,OATA,EAAO,QAAQ,EAAe,OAC9B,EAAO,QAAQ,GACf,EAAO,OAAO,EAAe,MACzB,EAAe,gBACZ,EAAe,KAAK,SAAS,EAAe,WAAW,KAC1D,QAAQ,KAAK,wFAAoF,GAEnG,EAAO,KAAK,EAAe,WAAW,IAEjC;AACT;AACA,SAASC,GAAI,GAAQ;CAEnB,IAAM,EAAE,WAAQ,SAAM,OAAI,SAAM,UAAO,cAAW,GAC5C,EAAE,YAAS;CACjB,IAAI,EAAK,WACP,OAAO;CAET,IAAM,IAAQ,EAAK,MAAM,IAAI,QAAQ,CAAI;CACzC,IAEE,EAAM,OAAO,KAAK,KAAK,SACd,EAAM,cAAc,EAAM,YAAiC,MAAM,MAAM,MAAS,EAAK,KAAK,KAAK,IAAI,GAE5G,OAAO;CAET,IAAI,IAAU,IACR,IAAa,GAAwB,CAAK,IAAI;CA4CpD,OA3CA,EAAM,SAAS,MAAS;EACtB,IAAI,GACF;EAEF,IAAM,IAAQ,GAAwB,GAAY,EAAK,IAAI;EAC3D,IAAI,CAAC,GACH;EAEF,IAAM,IAAK,EAAK,MAAM,IAChB,IAAQ,GAAqB;GACjC,OAAO,EAAK;GACZ,aAAa;EACf,CAAC,GACK,IAAQ;GACZ,MAAM,KAAQ,EAAM,GAAG,SAAS,EAAK;GACrC;EACF,GACM,EAAE,aAAU,UAAO,WAAQ,IAAI,GAAe;GAClD;GACA;EACF,CAAC;EACe,EAAK,QAAQ;GAC3B;GACA;GACA;GACA;GACA;GACA;EACF,CACU,MAAM,QAAQ,CAAC,EAAG,MAAM,WAG9B,EAAK,YACP,EAAG,QAAQ,GAAQ;GACjB,WAAW;GACX;GACA;GACA;EACF,CAAC,GAEH,EAAK,SAAS,CAAE,GAChB,IAAU;CACZ,CAAC,GACM;AACT;AACA,SAAS,GAAiB,GAAO;CAC/B,IAAM,EAAE,WAAQ,aAAU,GACpB,IAAS,IAAI,EAAO;EACxB,OAAO;GACL,OAAO;IACL,OAAO;GACT;GACA,MAAM,GAAI,GAAM,GAAO;IACrB,IAAM,IAAS,EAAG,QAAQ,CAAM;IAChC,IAAI,GACF,OAAO;IAET,IAAM,IAAqB,EAAG,QAAQ,iBAAiB;IAsBvD,OArB2B,KAEzB,iBAAiB;KACf,IAAI,EAAE,YAAS;KACf,AAGE,IAHE,OAAO,KAAS,WACX,IAEA,GAAoBC,EAAU,KAAK,CAAI,GAAG,EAAM,MAAM;KAE/D,IAAM,EAAE,YAAS;KAEjB,GAAI;MACF;MACA;MACA,IAJS,IAAO,EAAK;MAKrB;MACA;MACA;KACF,CAAC;IACH,CAAC,GAEI,EAAG,gBAAgB,EAAG,aAAa,OAAO;GACnD;EACF;EACA,OAAO;GACL,gBAAgB,GAAM,GAAM,GAAI,GAAM;IACpC,OAAOD,GAAI;KACT;KACA;KACA;KACA;KACA;KACA;IACF,CAAC;GACH;GACA,iBAAiB,EACf,iBAAiB,OACf,iBAAiB;IACf,IAAM,EAAE,eAAY,EAAK,MAAM;IAC/B,AAAI,KACF,GAAI;KACF;KACA,MAAM,EAAQ;KACd,IAAI,EAAQ;KACZ,MAAM;KACN;KACA;IACF,CAAC;GAEL,CAAC,GACM,IAEX;GAGA,cAAc,GAAM,GAAO;IACzB,IAAI,EAAM,QAAQ,SAChB,OAAO;IAET,IAAM,EAAE,eAAY,EAAK,MAAM;IAW/B,OAVI,IACKA,GAAI;KACT;KACA,MAAM,EAAQ;KACd,IAAI,EAAQ;KACZ,MAAM;KACN;KACA;IACF,CAAC,IAEI;GACT;EACF;EAEA,cAAc;CAChB,CAAC;CACD,OAAO;AACT;AAGA,SAAS,GAAQ,GAAO;CACtB,OAAO,OAAO,UAAU,SAAS,KAAK,CAAK,EAAE,MAAM,GAAG,EAAE;AAC1D;AACA,SAAS,GAAc,GAAO;CAI5B,OAHI,GAAQ,CAAK,MAAM,WAGhB,EAAM,gBAAgB,UAAU,OAAO,eAAe,CAAK,MAAM,OAAO,YAFtE;AAGX;AAGA,SAAS,GAAU,GAAQ,GAAQ;CACjC,IAAM,IAAS,EAAE,GAAG,EAAO;CAU3B,OATI,GAAc,CAAM,KAAK,GAAc,CAAM,KAC/C,OAAO,KAAK,CAAM,EAAE,SAAS,MAAQ;EACnC,AAAI,GAAc,EAAO,EAAI,KAAK,GAAc,EAAO,EAAI,IACzD,EAAO,KAAO,GAAU,EAAO,IAAM,EAAO,EAAI,IAEhD,EAAO,KAAO,EAAO;CAEzB,CAAC,GAEI;AACT;AAGA,IAAI,KAAa,MAAM;CACrB,YAAY,IAAS,CAAC,GAAG;EAYvB,AAXA,KAAK,OAAO,cACZ,KAAK,SAAS,MACd,KAAK,QAAQ,MACb,KAAK,OAAO,IACZ,KAAK,SAAS,EACZ,MAAM,KAAK,KACb,GACA,KAAK,SAAS;GACZ,GAAG,KAAK;GACR,GAAG;EACL,GACA,KAAK,OAAO,KAAK,OAAO;CAC1B;CACA,IAAI,UAAU;EACZ,OAAO,EACL,GAAG,EACD,EAAkB,MAAM,cAAc,EACpC,MAAM,KAAK,KACb,CAAC,CACH,KAAK,CAAC,EACR;CACF;CACA,IAAI,UAAU;EACZ,OAAO,EACL,GAAG,EACD,EAAkB,MAAM,cAAc;GACpC,MAAM,KAAK;GACX,SAAS,KAAK;EAChB,CAAC,CACH,KAAK,CAAC,EACR;CACF;CACA,UAAU,IAAU,CAAC,GAAG;EACtB,IAAM,IAAY,KAAK,OAAO;GAC5B,GAAG,KAAK;GACR,kBACS,GAAU,KAAK,SAAS,CAAO;EAE1C,CAAC;EAID,OAHA,EAAU,OAAO,KAAK,MACtB,EAAU,SAAS,KAAK,QACxB,KAAK,QAAQ,MACN;CACT;CACA,OAAO,IAAiB,CAAC,GAAG;EAC1B,IAAM,IAAY,IAAI,KAAK,YAAY;GAAE,GAAG,KAAK;GAAQ,GAAG;EAAe,CAAC;EAI5E,OAHA,EAAU,SAAS,MACnB,KAAK,QAAQ,GACb,EAAU,OAAO,UAAU,IAAiB,EAAe,OAAO,EAAU,OAAO,MAC5E;CACT;AACF,GAGI,KAAO,MAAM,UAAc,GAAW;CACxC,cAAc;EAEZ,AADA,MAAM,GAAG,SAAS,GAClB,KAAK,OAAO;CACd;CAKA,OAAO,OAAO,IAAS,CAAC,GAAG;EAEzB,OAAO,IAAI,EADY,OAAO,KAAW,aAAa,EAAO,IAAI,CAClC;CACjC;CACA,OAAO,WAAW,EAAE,WAAQ,WAAQ;EAClC,IAAM,EAAE,UAAO,EAAO,OAChB,IAAa,EAAO,MAAM,UAAU;EAE1C,IADgB,EAAW,QAAQ,EAAW,IAAI,GACrC;GACX,IAAM,IAAe,EAAW,MAAM;GAEtC,IAAI,CADe,EAAa,MAAM,MAAO,GAAuB,KAAK,SAAU,EAAK,IAAI,GAE1F,OAAO;GAET,IAAM,IAAa,EAAa,MAAM,MAAO,GAAuB,KAAK,SAAU,EAAK,IAAI;GAM5F,OALI,KACF,EAAG,iBAAiB,CAAU,GAEhC,EAAG,WAAW,KAAK,EAAW,GAAG,GACjC,EAAO,KAAK,SAAS,CAAE,GAChB;EACT;EACA,OAAO;CACT;CACA,UAAU,GAAS;EACjB,OAAO,MAAM,UAAU,CAAO;CAChC;CACA,OAAO,GAAgB;EACrB,IAAM,IAAiB,OAAO,KAAmB,aAAa,EAAe,IAAI;EACjF,OAAO,MAAM,OAAO,CAAc;CACpC;AACF;AAOA,SAAS,GAAS,GAAO;CACvB,OAAO,OAAO,KAAU;AAC1B;AAGA,IAAI,KAAY,MAAM;CACpB,YAAY,GAAQ;EAElB,AADA,KAAK,OAAO,EAAO,MACnB,KAAK,UAAU,EAAO;CACxB;AACF,GACI,MAA2B,GAAM,GAAM,MAAU;CACnD,IAAI,GAAS,CAAI,GACf,OAAO,CAAC,GAAG,EAAK,SAAS,CAAI,CAAC;CAEhC,IAAM,IAAU,EAAK,GAAM,CAAK;CAIhC,OAHK,IAGE,EAAQ,KAAK,MAAmB;EACrC,IAAM,IAAS,CAAC,EAAe,IAAI;EAUnC,OATA,EAAO,QAAQ,EAAe,OAC9B,EAAO,QAAQ,GACf,EAAO,OAAO,EAAe,MACzB,EAAe,gBACZ,EAAe,KAAK,SAAS,EAAe,WAAW,KAC1D,QAAQ,KAAK,wFAAoF,GAEnG,EAAO,KAAK,EAAe,WAAW,IAEjC;CACT,CAAC,IAdQ,CAAC;AAeZ;AACA,SAAS,GAAK,GAAQ;CACpB,IAAM,EAAE,WAAQ,UAAO,SAAM,OAAI,SAAM,eAAY,iBAAc,GAC3D,EAAE,aAAU,UAAO,WAAQ,IAAI,GAAe;EAClD;EACA;CACF,CAAC,GACK,IAAW,CAAC;CAsClB,OArCA,EAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;EAE9C,IAAiB,EAAK,MAA4B,MAA4B,QAAS,EAAE,EAAK,UAAU,EAAK,eAAe,EAAK,WAC/H;EAEF,IAAM,IAAgC,EAAK,SAA+B,QAAqB,EAAK,YAAyB,GACvH,IAAe,KAAK,IAAI,GAAM,CAAG,GACjC,IAAa,KAAK,IAAI,GAAI,IAAM,CAAW;EAC7C,KAAgB,KAKpB,GAFoB,EAAK,SAAS,EAAK,QAAQ,KAAK,EAAK,YAAY,IAAe,GAAK,IAAa,GAAK,KAAK,GAAG,GAAQ,GACtE,EAAK,MAAM,CAC1D,EAAE,SAAS,MAAU;GACzB,IAAI,EAAM,UAAU,KAAK,GACvB;GAEF,IAAM,IAAQ,IAAe,EAAM,QAAQ,GACrC,IAAM,IAAQ,EAAM,GAAG,QACvB,IAAQ;IACZ,MAAM,EAAM,GAAG,QAAQ,IAAI,CAAK;IAChC,IAAI,EAAM,GAAG,QAAQ,IAAI,CAAG;GAC9B,GACM,IAAU,EAAK,QAAQ;IAC3B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF,CAAC;GACD,EAAS,KAAK,CAAO;EACvB,CAAC;CACH,CAAC,GACe,EAAS,OAAO,MAAY,MAAY,IAC3C;AACf;AACA,IAAI,KAA4B,MAC5B,MAA6B,MAAS;CACxC,IAAI;CACJ,IAAM,IAAQ,IAAI,eAAe,SAAS,EACxC,eAAe,IAAI,aAAa,EAClC,CAAC;CAED,QADC,IAAK,EAAM,kBAAkB,QAAgB,EAAG,QAAQ,aAAa,CAAI,GACnE;AACT;AACA,SAAS,GAAiB,GAAO;CAC/B,IAAM,EAAE,WAAQ,aAAU,GACtB,IAAoB,MACpB,IAA0B,IAC1B,IAA2B,IAC3B,IAAa,OAAO,iBAAmB,MAAc,IAAI,eAAe,OAAO,IAAI,MACnF;CACJ,IAAI;EACF,IAAY,OAAO,YAAc,MAAc,IAAI,UAAU,MAAM,IAAI;CACzE,QAAQ;EACN,IAAY;CACd;CACA,IAAM,KAAgB,EACpB,UACA,SACA,OACA,SACA,kBACI;EACJ,IAAM,IAAK,EAAM;EAcb,OATY,GAAK;GACnB;GACA,OANqB,GAAqB;IAC1C;IACA,aAAa;GACf,CAGsB;GACpB,MAAM,KAAK,IAAI,IAAO,GAAG,CAAC;GAC1B,IAAI,EAAG,IAAI;GACX;GACA,YAAY;GACZ;EACF,CACW,KAAK,CAAC,EAAG,MAAM,SAG1B;OAAI;IACF,IAAY,OAAO,YAAc,MAAc,IAAI,UAAU,MAAM,IAAI;GACzE,QAAQ;IACN,IAAY;GACd;GAEA,OADA,IAAa,OAAO,iBAAmB,MAAc,IAAI,eAAe,OAAO,IAAI,MAC5E;EAFP;CAGF;CA+FA,OA9FgB,EAAM,KAAK,MAClB,IAAIE,EAAQ;EAEjB,KAAK,GAAM;GACT,IAAM,KAAmB,MAAU;IAGjC,AADA,IAA2B,EAAK,IAAI,eAAqC,SAAS,EAAM,MAAM,IAAK,EAAK,IAAI,gBAAgB,MACxH,MACF,KAA4B;GAEhC,GACM,UAAsB;IAC1B,AACE,OAA4B;GAEhC;GAGA,OAFA,OAAO,iBAAiB,aAAa,CAAe,GACpD,OAAO,iBAAiB,WAAW,CAAa,GACzC,EACL,UAAU;IAER,AADA,OAAO,oBAAoB,aAAa,CAAe,GACvD,OAAO,oBAAoB,WAAW,CAAa;GACrD,EACF;EACF;EACA,OAAO,EACL,iBAAiB;GACf,OAAO,GAAM,MAAU;IAGrB,IAFA,IAA2B,MAAsB,EAAK,IAAI,eAC1D,IAAY,GACR,CAAC,GAA0B;KAC7B,IAAM,IAAsB;KAC5B,AAAI,GAA2D,cAC7D,iBAAiB;MACf,IAAM,IAAY,EAAoB,MAAM;MAC5C,AAAI,KACF,EAAoB,SAAS,YAAY;OAAE,MAAM,EAAU;OAAM,IAAI,EAAU;MAAG,CAAC;KAEvF,GAAG,EAAE;IAET;IACA,OAAO;GACT;GACA,QAAQ,GAAO,MAAU;IAEvB,IAAM,IAAa,EAAM,eAAqC,QAAQ,WAAW;IAGjF,OAFA,IAAa,GACb,IAA0B,CAAC,CAAE,GAA6B,SAAS,eAAe,GAC3E;GACT;EACF,EACF;EACA,oBAAoB,GAAc,GAAU,MAAU;GACpD,IAAM,IAAc,EAAa,IAC3B,IAAU,EAAY,QAAQ,SAAS,MAAM,WAAW,CAAC,GACzD,IAAS,EAAY,QAAQ,SAAS,MAAM,UAAU,CAAC,GACvD,IAAqB,EAAY,QAAQ,iBAAiB,GAC1D,IAAmB,CAAC,CAAC;GAC3B,IAAI,CAAC,KAAW,CAAC,KAAU,CAAC,GAC1B;GAEF,IAAI,GAAkB;IACpB,IAAI,EAAE,YAAS;IACf,AAGE,IAHE,OAAO,KAAS,WACX,IAEA,GAAoBC,EAAU,KAAK,CAAI,GAAG,EAAM,MAAM;IAE/D,IAAM,EAAE,MAAM,MAAU,GAClB,IAAM,IAAQ,EAAK,QACnB,IAAW,GAA0B,CAAI;IAC/C,OAAO,EAAa;KAClB;KACA;KACA,MAAM;KACN,IAAI,EAAE,GAAG,EAAI;KACb;IACF,CAAC;GACH;GACA,IAAM,IAAO,EAAS,IAAI,QAAQ,cAAc,EAAM,IAAI,OAAO,GAC3D,IAAK,EAAS,IAAI,QAAQ,YAAY,EAAM,IAAI,OAAO;GACzD,OAAC,GAAS,CAAI,KAAK,CAAC,KAAM,MAAS,EAAG,IAG1C,OAAO,EAAa;IAClB;IACA;IACA;IACA;IACA,UAAU;GACZ,CAAC;EACH;CACF,CAAC,CAEU;AACf;AAGA,IAAI,KAAmB,MAAM;CAC3B,YAAY,GAAY,GAAQ;EAM9B,AALA,KAAK,kBAAkB,CAAC,GACxB,KAAK,SAAS,GACd,KAAK,iBAAiB,GACtB,KAAK,aAAa,GAAkB,CAAU,GAC9C,KAAK,SAAS,GAA8B,KAAK,YAAY,CAAM,GACnE,KAAK,gBAAgB;CACvB;CAKA,IAAI,WAAW;EACb,OAAO,KAAK,WAAW,QAAQ,GAAU,MAAc;GAQrD,IAAM,IAAc,EAAkB,GAAW,eAAe;IAN9D,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD,QAAQ,KAAK;IACb,MAAM,GAAoB,EAAU,MAAM,KAAK,MAAM;GAEe,CAAC;GAIvE,OAHK,IAGE;IACL,GAAG;IACH,GAAG,EAAY;GACjB,IALS;EAMX,GAAG,CAAC,CAAC;CACP;CAKA,IAAI,UAAU;EACZ,IAAM,EAAE,cAAW;EA6DnB,OA5DmB,GAAe,CAAC,GAAG,KAAK,UAAU,EAAE,QAAQ,CACnC,EAAE,SAAS,MAAc;GACnD,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAM,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD,GACM,IAAU,CAAC,GACX,IAAuB,EAC3B,GACA,wBACA,CACF,GACI,IAAkB,CAAC;GAIvB,IAHI,EAAU,SAAS,UAAU,EAAkB,GAAW,YAAY,CAAO,MAC/E,EAAgB,mBAAmB,GAAK,WAAW;IAAE;IAAQ,MAAM;GAAU,CAAC,IAE5E,GAAsB;IACxB,IAAM,IAAW,OAAO,YACtB,OAAO,QAAQ,EAAqB,CAAC,EAAE,KAAK,CAAC,GAAU,OAC9C,CAAC,SAAgB,EAAO,EAAE,UAAO,CAAC,CAAC,CAC3C,CACH;IACA,IAAkB;KAAE,GAAG;KAAiB,GAAG;IAAS;GACtD;GACA,IAAM,IAAe,GAAO,CAAe;GAC3C,EAAQ,KAAK,CAAY;GACzB,IAAM,IAAgB,EAAkB,GAAW,iBAAiB,CAAO;GAC3E,IAAI,GAAwB,GAAW,EAAO,QAAQ,gBAAgB,KAAK,GAAe;IACxF,IAAM,IAAQ,EAAc;IAC5B,IAAI,KAAS,EAAM,QAAQ;KACzB,IAAM,IAAc,GAAiB;MACnC;MACA;KACF,CAAC,GACK,IAAe,MAAM,QAAQ,CAAW,IAAI,IAAc,CAAC,CAAW;KAC5E,EAAQ,KAAK,GAAG,CAAY;IAC9B;GACF;GACA,IAAM,IAAgB,EAAkB,GAAW,iBAAiB,CAAO;GAC3E,IAAI,GAAwB,GAAW,EAAO,QAAQ,gBAAgB,KAAK,GAAe;IACxF,IAAM,IAAQ,EAAc;IAC5B,IAAI,KAAS,EAAM,QAAQ;KACzB,IAAM,IAAa,GAAiB;MAAE;MAAQ;KAAM,CAAC;KACrD,EAAQ,KAAK,GAAG,CAAU;IAC5B;GACF;GACA,IAAM,IAAwB,EAC5B,GACA,yBACA,CACF;GACA,IAAI,GAAuB;IACzB,IAAM,IAAqB,EAAsB;IACjD,EAAQ,KAAK,GAAG,CAAkB;GACpC;GACA,OAAO;EACT,CACgB;CAClB;CAKA,IAAI,aAAa;EACf,OAAO,GAA4B,KAAK,UAAU;CACpD;CAKA,IAAI,YAAY;EACd,IAAM,EAAE,cAAW,MACb,EAAE,sBAAmB,GAAgB,KAAK,UAAU;EAC1D,OAAO,OAAO,YACZ,EAAe,QAAQ,MAAc,CAAC,CAAC,EAAkB,GAAW,aAAa,CAAC,EAAE,KAAK,MAAc;GACrG,IAAM,IAAsB,KAAK,WAAW,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAQ7F,IAAc,EAAkB,GAAW,eAAe;IAN9D,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAM,EAAY,EAAU,MAAM,KAAK,MAAM;GAEuB,CAAC;GACvE,IAAI,CAAC,GACH,OAAO,CAAC;GAEV,IAAM,IAAiB,EAAY;GAmBnC,OAlBK,IAkBE,CAAC,EAAU,OAfA,GAAM,GAAM,GAAQ,GAAa,MAE1C,EAAe;IAEpB;IACA;IACA;IACA;IACA;IAEA;IACA;IACA,gBAXqB,GAAsB,GAAM,CAWpC;GACf,CAAC,CAE6B,IAjBvB,CAAC;EAkBZ,CAAC,CACH;CACF;CAMA,oBAAoB,GAAc;EAChC,IAAM,EAAE,cAAW;EAEnB,OADmB,GAAe,CAAC,GAAG,KAAK,UAAU,EAAE,QAAQ,CAC/C,EAAE,aAAa,GAAM,MAAc;GACjD,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAM,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD,GACM,IAAsB,EAC1B,GACA,uBACA,CACF;GAIA,OAHK,KAGG,MAAgB;IACtB,EAAoB,KAAK,GAAS;KAAE;KAAa;IAAK,CAAC;GACzD,IAJS;EAKX,GAAG,CAAY;CACjB;CAMA,oBAAoB,GAAe;EACjC,IAAM,EAAE,cAAW;EAEnB,OADmB,GAAe,CAAC,GAAG,KAAK,UAAU,CACrC,EAAE,QACf,GAAW,MAAc;GACxB,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAM,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD,GACM,IAAqB,EACzB,GACA,uBACA,CACF;GAIA,OAHK,KAGG,GAAM,MAAS;IACrB,IAAM,IAAkB,EAAU,GAAM,CAAI;IAC5C,OAAO,EAAmB,KAAK,GAAS,CAAe;GACzD,IALS;EAMX,GACA,OAAmB,MAAS,EAC9B;CACF;CACA,IAAI,YAAY;EACd,IAAM,EAAE,cAAW,MACb,EAAE,sBAAmB,GAAgB,KAAK,UAAU;EAC1D,OAAO,OAAO,YACZ,EAAe,QAAQ,MAAc,CAAC,CAAC,EAAkB,GAAW,aAAa,CAAC,EAAE,KAAK,MAAc;GACrG,IAAM,IAAsB,KAAK,WAAW,QAAQ,MAAc,EAAU,SAAS,EAAU,IAAI,GAQ7F,IAAc,EAAkB,GAAW,eAAe;IAN9D,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD;IACA,MAAM,EAAY,EAAU,MAAM,KAAK,MAAM;GAEuB,CAAC;GAoBvE,OAnBK,IAmBE,CAAC,EAAU,OAhBA,GAAM,GAAM,MAAW;IACvC,IAAM,IAAiB,GAAsB,GAAM,CAAmB;IACtE,OAAO,EAAY,EAAE;KAEnB;KACA;KACA;KAEA;KACA;KACA;KACA,mBAAmB,MAAU;MAC3B,GAAyB,GAAM,GAAQ,CAAK;KAC9C;IACF,CAAC;GACH,CACgC,IAlBvB,CAAC;EAmBZ,CAAC,CACH;CACF;CAeA,UAAU;EAcR,AAbA,KAAK,WAAW,SAAS,MAAc;GACrC,IAAI,IAAU;GACd,OAAO,EAAQ,SAAQ;IACrB,IAAM,IAAS,EAAQ;IAIvB,AAHI,EAAO,UAAU,MACnB,EAAO,QAAQ,OAEjB,IAAU;GACZ;EACF,CAAC,GACD,KAAK,aAAa,CAAC,GACnB,KAAK,iBAAiB,CAAC,GACvB,KAAK,SAAS,MACd,KAAK,SAAS;CAChB;CAKA,kBAAkB;EAChB,IAAM,IAAa,KAAK;EAIxB,AAHA,KAAK,OAAO,mBAAmB,OAAO,YACpC,EAAW,KAAK,MAAc,CAAC,EAAU,MAAM,EAAU,OAAO,CAAC,CACnE,GACA,EAAW,SAAS,MAAc;GAEhC,IAAM,IAAU;IACd,MAAM,EAAU;IAChB,SAAS,EAAU;IACnB,SAAS,KAAK,OAAO,iBAAiB,EAAU;IAChD,QAAQ,KAAK;IACb,MAAM,GAAoB,EAAU,MAAM,KAAK,MAAM;GACvD;GACA,AAAI,EAAU,SAAS,WACK,EAAa,EAAkB,GAAW,eAAe,CAAO,CAAC,KAAkB,OAE3G,KAAK,gBAAgB,KAAK,EAAU,IAAI;GAG5C,IAAM,IAAiB,EAAkB,GAAW,kBAAkB,CAAO,GACvE,IAAW,EAAkB,GAAW,YAAY,CAAO,GAC3D,IAAW,EAAkB,GAAW,YAAY,CAAO,GAC3D,IAAoB,EACxB,GACA,qBACA,CACF,GACM,IAAgB,EAAkB,GAAW,iBAAiB,CAAO,GACrE,IAAU,EAAkB,GAAW,WAAW,CAAO,GACzD,IAAS,EAAkB,GAAW,UAAU,CAAO,GACvD,IAAY,EAAkB,GAAW,aAAa,CAAO;GAsBnE,AArBI,KACF,KAAK,OAAO,GAAG,gBAAgB,CAAc,GAE3C,KACF,KAAK,OAAO,GAAG,UAAU,CAAQ,GAE/B,KACF,KAAK,OAAO,GAAG,UAAU,CAAQ,GAE/B,KACF,KAAK,OAAO,GAAG,mBAAmB,CAAiB,GAEjD,KACF,KAAK,OAAO,GAAG,eAAe,CAAa,GAEzC,KACF,KAAK,OAAO,GAAG,SAAS,CAAO,GAE7B,KACF,KAAK,OAAO,GAAG,QAAQ,CAAM,GAE3B,KACF,KAAK,OAAO,GAAG,WAAW,CAAS;EAEvC,CAAC;CACH;AACF;AACA,GAAiB,UAAU,IAC3B,GAAiB,OAAO,IACxB,GAAiB,UAAU,IAI3B3C,GAAS,CAAA,GAAoB;CAC3B,+BAA+B;CAC/B,gBAAgB;CAChB,cAAc;CACd,YAAY;CACZ,gBAAgB;CAChB,mBAAmB;CACnB,cAAc;CACd,aAAa;CACb,gBAAgB;CAChB,qBAAqB;CACrB,4BAA4B;AAC9B,CAAC;AAMD,IAAI,IAAY,MAAM,UAAmB,GAAW;CAClD,cAAc;EAEZ,AADA,MAAM,GAAG,SAAS,GAClB,KAAK,OAAO;CACd;CAKA,OAAO,OAAO,IAAS,CAAC,GAAG;EAEzB,OAAO,IAAI,EADY,OAAO,KAAW,aAAa,EAAO,IAAI,CAC7B;CACtC;CACA,UAAU,GAAS;EACjB,OAAO,MAAM,UAAU,CAAO;CAChC;CACA,OAAO,GAAgB;EACrB,IAAM,IAAiB,OAAO,KAAmB,aAAa,EAAe,IAAI;EACjF,OAAO,MAAM,OAAO,CAAc;CACpC;AACF,GAGI,KAA0B,EAAU,OAAO;CAC7C,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,KAAK,EACvB;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAI4C,EAAQ;GACV,KAAK,IAAI,EAAU,yBAAyB;GAC5C,OAAO,EACL,+BAA+B;IAC7B,IAAM,EAAE,cAAW,MACb,EAAE,UAAO,cAAW,GACpB,EAAE,QAAK,iBAAc,GACrB,EAAE,cAAW,GACb,IAAO,KAAK,IAAI,GAAG,EAAO,KAAK,MAAW,EAAO,MAAM,GAAG,CAAC,GAC3D,IAAK,KAAK,IAAI,GAAG,EAAO,KAAK,MAAW,EAAO,IAAI,GAAG,CAAC,GACvD,IAAkB,GAA6B,CAAM;IAE3D,OAAO,GAAe,GAAK;KADX;KAAM;IACS,GAAG;KAChC,GAAG,KAAK,QAAQ,mBAAmB,KAAK,IAAsD,CAAC,IAAnD,EAAE,gBAAgB,KAAK,QAAQ,eAAe;KAC1F;IACF,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAGG,KAAW,EAAU,OAAO;CAC9B,MAAM;CACN,cAAc;EACZ,OAAO,EACL,GAAG,GACL;CACF;AACF,CAAC,GAIG,KAAS,EAAU,OAAO;CAC5B,MAAM;CACN,SAAS,EAAE,gBAAa,2BAAwB;EAE9C,IAAM,UAAiB;GACrB,IAAS;GACT,MAAkB,IAAa,KAAK,OAAO,QAAQ,sBAA6C,SAA+B,oBAA0C,KAAK,GAAK,CAAW,KAAkB,EAAY,QAAQ,SAAS,GAC3O;GAEF,IAAM,IAAkB,GAAwB,EAAY,QAAQ,CAAC,GAAa,GAAG,CAAoB,CAAC;GAE1G,GADiC,CAC3B,EAAE,SAAS,MAAW;IAC1B,AAAI,EAAgB,QAAQ,UAAU,EAAO,SAAS,IAAI,EAAE,gBAAgB,EAAgB,QAAQ,UAAU,EAAO,SAAS,EAAE,EAAE,iBAChI,EAAgB,OAAO,aAAa,EAAO,SAAS,MAAM,EAAO,SAAS,KAAK,GAAM,MAAS;KAC5F,IAAM,IAAK,IAAO,EAAK,WAAW,GAC5B,IAAqB,EAAO,SAAS,QAAQ,KAAQ,KAAM,EAAO,SAAS;KACjF,KAAK,OAAO,KAAK,UAAU;MACzB,MAAM;MACN;MACA;MACA;MACA,SAAS,EAAgB,QAAQ,IAAI,CAAI;MACzC,OAAO,EAAgB,QAAQ,IAAI,CAAE;MACrC,cAAc,EAAO;MACrB,UAAU,EAAO;MACjB,SAAS,CAAC;MACV,QAAQ,KAAK;MACb;MACA,mBAAmB;KACrB,CAAC;IACH,CAAC;GAEL,CAAC;GACD,IAAM,IAAU,EAAgB;GAChC,EAAgB,MAAM,SAAS,GAAM,MAAU;IAE7C,IAAI,aAAgB,IAAgB;KAClC,IAAM,IAAW,EAAQ,MAAM,CAAK,EAAE,IAAI,EAAK,MAAM,EAAE,GACjD,IAAS,EAAQ,MAAM,CAAK,EAAE,IAAI,EAAK,EAAE,GACzC,IAAW,EAAQ,OAAO,EAAE,IAAI,GAAU,EAAE,GAC5C,IAAS,EAAQ,OAAO,EAAE,IAAI,CAAM,GACpC,IAAkB,IAAW,IAAW,EAAgB,IAAI,OAAO,IAAW,CAAC,GAA0B,MAAM,MAAM,MAAS,EAAK,GAAG,EAAK,IAAI,CAAC,IAAI,IACpJ,IAAwB,EAAgB,IAAI,OAAO,CAAM,GAA0B,MAAM,MAAM,MAAS,EAAK,GAAG,EAAK,IAAI,CAAC;KAChI,KAAK,OAAO,KAAK,UAAU;MACzB,MAAM;MACN,MAAM,EAAK;MACX,MAAM,EAAK;MACX,IAAI,EAAK;MACT,cAAc;OACZ,MAAM;OACN,IAAI;MACN;MACA,UAAU;OACR,MAAM;OACN,IAAI;MACN;MACA,SAAS,GAAQ,KAAkB;MACnC,QAAQ,KAAK;MACb;MACA,mBAAmB;KACrB,CAAC;IACH;GACF,CAAC;EACH;EACA,AAAsB,KAAK,OAAO,QAAQ,sBAA4C,QAA8B,SAAsB,KACxI,WAAW,GAAU,CAAC,IAEtB,EAAS;CAEb;AACF,CAAC,GAIG,KAAO,EAAU,OAAO;CAC1B,MAAM;CACN,wBAAwB;EACtB,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,YAAY;GAChC,OAAO,EACL,aAAa,GAAG,GAAG,GAAO,MAAU;IAClC,KAAK,OAAO,KAAK,QAAQ;KACvB,QAAQ,KAAK;KACb,OAAO;KACP;KACA;IACF,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIG,KAAW,EAAU,OAAO;CAC9B,MAAM;CACN,wBAAwB;EACtB,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,UAAU;GAC9B,OAAO,EACL,gBAAgB,KAAK,OAAO,QAAQ,SACtC;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIG,KAAuB,IAAIC,EAAW,aAAa,GACnD,KAAc,EAAU,OAAO;CACjC,MAAM;CACN,wBAAwB;EACtB,IAAM,EAAE,cAAW;EACnB,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK;GACL,OAAO,EACL,iBAAiB;IACf,QAAQ,GAAM,MAAU;KACtB,EAAO,YAAY;KACnB,IAAM,IAAc,EAAO,MAAM,GAAG,QAAQ,SAAS,EAAE,SAAM,CAAC,EAAE,QAAQ,gBAAgB,EAAK;KAE7F,OADA,EAAK,SAAS,CAAW,GAClB;IACT;IACA,OAAO,GAAM,MAAU;KACrB,EAAO,YAAY;KACnB,IAAM,IAAc,EAAO,MAAM,GAAG,QAAQ,QAAQ,EAAE,SAAM,CAAC,EAAE,QAAQ,gBAAgB,EAAK;KAE5F,OADA,EAAK,SAAS,CAAW,GAClB;IACT;GACF,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIG,KAAS,EAAU,OAAO;CAC5B,MAAM;CACN,uBAAuB;EACrB,IAAM,UAAwB,KAAK,OAAO,SAAS,OAAO,EAAE,kBAAe;SACnE,EAAS,cAAc;SAEvB,EAAS,SAAS,EAAE,YAAS;IACjC,IAAM,EAAE,cAAW,WAAQ,GACrB,EAAE,UAAO,eAAY,GACrB,EAAE,QAAK,cAAW,GAClB,IAAa,EAAQ,OAAO,eAAe,IAAM,IAAI,EAAG,IAAI,QAAQ,IAAM,CAAC,IAAI,GAC/E,IAAoB,EAAW,OAAO,KAAK,KAAK,WAChD,IAAY,EAAQ,MAAM,EAAQ,cAClC,IAAY,KAAqB,EAAW,OAAO,eAAe,IAAI,MAAc,EAAQ,MAAMC,EAAW,QAAQ,CAAG,EAAE,SAAS;IAIzI,OAHI,CAAC,KAAS,CAAC,EAAO,KAAK,eAAe,EAAO,YAAY,UAAU,CAAC,KAAa,KAAa,EAAQ,OAAO,KAAK,SAAS,cACtH,KAEF,EAAS,WAAW;GAC7B,CAAC;SACK,EAAS,gBAAgB;SACzB,EAAS,aAAa;SACtB,EAAS,mBAAmB;EACpC,CAAC,GACK,UAAqB,KAAK,OAAO,SAAS,OAAO,EAAE,kBAAe;SAChE,EAAS,gBAAgB;SACzB,EAAS,kBAAkB;SAC3B,EAAS,YAAY;SACrB,EAAS,kBAAkB;EACnC,CAAC,GAOK,IAAa;GACjB,aAPwB,KAAK,OAAO,SAAS,OAAO,EAAE,kBAAe;UAC/D,EAAS,cAAc;UACvB,EAAS,oBAAoB;UAC7B,EAAS,eAAe;UACxB,EAAS,WAAW;GAC5B,CAAC;GAGC,mBAAmB,KAAK,OAAO,SAAS,SAAS;GACjD,WAAW;GACX,iBAAiB;GACjB,mBAAmB;GACnB,QAAQ;GACR,cAAc;GACd,eAAe,KAAK,OAAO,SAAS,UAAU;EAChD,GACM,IAAW,EACf,GAAG,EACL,GACM,IAAY;GAChB,GAAG;GACH,UAAU;GACV,iBAAiB;GACjB,UAAU;GACV,sBAAsB;GACtB,cAAc;GACd,SAAS;GACT,gBAAgB,KAAK,OAAO,SAAS,qBAAqB;GAC1D,gBAAgB,KAAK,OAAO,SAAS,mBAAmB;EAC1D;EAIA,OAHI,GAAM,KAAK,GAAQ,IACd,IAEF;CACT;CACA,wBAAwB;EACtB,OAAO,CAML,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,eAAe;GACnC,oBAAoB,GAAc,GAAU,MAAa;IACvD,IAAI,EAAa,MAAM,MAAQ,EAAI,QAAQ,aAAa,CAAC,GACvD;IAEF,IAAM,IAAa,EAAa,MAAM,MAAgB,EAAY,UAAU,KAAK,CAAC,EAAS,IAAI,GAAG,EAAS,GAAG,GACxG,IAAW,EAAa,MAAM,MAAgB,EAAY,QAAQ,sBAAsB,CAAC;IAC/F,IAAI,CAAC,KAAc,GACjB;IAEF,IAAM,EAAE,UAAO,SAAM,UAAO,EAAS,WAC/B,IAAUF,EAAW,QAAQ,EAAS,GAAG,EAAE,MAC3C,IAASA,EAAW,MAAM,EAAS,GAAG,EAAE;IAM9C,IAJI,KAAS,EADU,MAAS,KAAW,MAAO,MAK9C,CADY,GAAY,EAAS,GAC1B,GACT;IAEF,IAAM,IAAK,EAAS,IACd,IAAQ,GAAqB;KACjC,OAAO;KACP,aAAa;IACf,CAAC,GACK,EAAE,gBAAa,IAAI,GAAe;KACtC,QAAQ,KAAK;KACb;IACF,CAAC;IACD,MAAS,WAAW,GACf,EAAG,MAAM,QAGd,OAAO;GACT;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIG,KAAQ,EAAU,OAAO;CAC3B,MAAM;CACN,wBAAwB;EACtB,OAAO,CACL,IAAIG,EAAQ;GACV,KAAK,IAAIC,EAAW,aAAa;GACjC,OAAO,EACL,cAAc,GAAO,GAAG,MAAU;IAChC,KAAK,OAAO,KAAK,SAAS;KACxB,QAAQ,KAAK;KACb,OAAO;KACP;IACF,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIG,KAAW,EAAU,OAAO;CAC9B,MAAM;CACN,aAAa;EACX,OAAO,EACL,OAAO,KAAK,EACd;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,UAAU;GAC9B,OAAO,EACL,kBAEM,CAAC,KAAK,OAAO,cAAc,KAAK,QAAQ,UAAU,KAAK,IAClD,CAAC,IAEH,EAAE,UAAgB,KAAK,QAAQ,SAAsB,IAAI,EAEpE;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIG,KAAgB,EAAU,OAAO;CACnC,MAAM;CACN,aAAa;EACX,OAAO,EACL,WAAW,KAAK,EAClB;CACF;CACA,sBAAsB;EACpB,IAAI,CAAC,KAAK,QAAQ,WAChB,OAAO,CAAC;EAEV,IAAM,EAAE,sBAAmB,GAAgB,KAAK,UAAU;EAC1D,OAAO,CACL;GACE,OAAO,EAAe,QAAQ,MAAc,EAAU,SAAS,MAAM,EAAE,KAAK,MAAc,EAAU,IAAI;GACxG,YAAY,EACV,KAAK;IACH,SAAS,KAAK,QAAQ;IACtB,YAAY,MAAY;KACtB,IAAM,IAAM,EAAQ,aAAa,KAAK;KAItC,OAHI,MAAQ,MAAQ,SAAS,MAAQ,SAAS,MAAQ,UAC7C,IAEF,KAAK,QAAQ;IACtB;IACA,aAAa,MACN,EAAW,MAGT,EACL,KAAK,EAAW,IAClB,IAJS,CAAC;GAMd,EACF;EACF,CACF;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAIC,EAAS;GACX,KAAK,IAAIC,EAAW,eAAe;GACnC,OAAO,EACL,kBAAkB;IAChB,IAAM,IAAY,KAAK,QAAQ;IAI/B,OAHK,IAGE,EACL,KAAK,EACP,IAJS,CAAC;GAKZ,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC;AAw1BD,SAAS,GAAc,GAAQ;CAC7B,OAAO,IAAI,GAAU;EACnB,MAAM,EAAO;EACb,UAAU,EAAE,UAAO,UAAO,eAAY;GACpC,IAAM,IAAa,EAAa,EAAO,eAAe,KAAK,GAAG,CAAK;GACnE,IAAI,MAAe,MAAS,MAAe,MACzC,OAAO;GAET,IAAM,EAAE,UAAO,GACT,IAAe,EAAM,EAAM,SAAS,IACpC,IAAY,EAAM;GACxB,IAAI,GAAc;IAChB,IAAM,IAAc,EAAU,OAAO,IAAI,GACnC,IAAY,EAAM,OAAO,EAAU,QAAQ,CAAY,GACvD,IAAU,IAAY,EAAa;IAKzC,IAJsB,GAAgB,EAAM,MAAM,EAAM,IAAI,EAAM,GAAG,EAAE,QAAQ,MAC5D,EAAK,KAAK,KAAK,SAChB,MAAM,MAAS,MAAS,EAAO,QAAQ,MAAS,EAAK,KAAK,IAAI,CAC/E,EAAE,QAAQ,MAAS,EAAK,KAAK,CACd,EAAE,QAChB,OAAO;IAKT,AAHI,IAAU,EAAM,MAClB,EAAG,OAAO,GAAS,EAAM,EAAE,GAEzB,IAAY,EAAM,QACpB,EAAG,OAAO,EAAM,OAAO,GAAa,CAAS;IAE/C,IAAM,IAAU,EAAM,OAAO,IAAc,EAAa;IAExD,AADA,EAAG,QAAQ,EAAM,OAAO,GAAa,GAAS,EAAO,KAAK,OAAO,KAAc,CAAC,CAAC,CAAC,GAClF,EAAG,iBAAiB,EAAO,IAAI;GACjC;EACF;EACA,UAAU,EAAO;CACnB,CAAC;AACH;AAGA,SAAS,GAAc,GAAQ;CAC7B,OAAO,IAAI,GAAU;EACnB,MAAM,EAAO;EACb,UAAU,EAAE,UAAO,UAAO,eAAY;GACpC,IAAM,IAAa,EAAa,EAAO,eAAe,KAAK,GAAG,CAAK,KAAK,CAAC,GACnE,EAAE,UAAO,GACT,IAAQ,EAAM,MAChB,IAAM,EAAM,IACV,IAAU,EAAO,KAAK,OAAO,CAAU;GAC7C,IAAI,EAAM,IAAI;IAEZ,IAAI,IAAa,IADF,EAAM,GAAG,YAAY,EAAM,EACZ;IAC9B,AAAI,IAAa,IACf,IAAa,IAEb,IAAM,IAAa,EAAM,GAAG;IAE9B,IAAM,IAAW,EAAM,GAAG,EAAM,GAAG,SAAS;IAE5C,AADA,EAAG,WAAW,GAAU,IAAQ,EAAM,GAAG,SAAS,CAAC,GACnD,EAAG,YAAY,GAAY,GAAK,CAAO;GACzC,OAAO,IAAI,EAAM,IAAI;IACnB,IAAM,IAAiB,EAAO,KAAK,WAAW,IAAQ,IAAQ;IAC9D,EAAG,OAAO,GAAgB,EAAO,KAAK,OAAO,CAAU,CAAC,EAAE,OAAO,EAAG,QAAQ,IAAI,CAAK,GAAG,EAAG,QAAQ,IAAI,CAAG,CAAC;GAC7G;GACA,EAAG,eAAe;EACpB;EACA,UAAU,EAAO;CACnB,CAAC;AACH;AAGA,SAAS,GAAuB,GAAQ;CACtC,OAAO,IAAI,GAAU;EACnB,MAAM,EAAO;EACb,UAAU,EAAE,UAAO,UAAO,eAAY;GACpC,IAAM,IAAS,EAAM,IAAI,QAAQ,EAAM,IAAI,GACrC,IAAa,EAAa,EAAO,eAAe,KAAK,GAAG,CAAK,KAAK,CAAC;GACzE,IAAI,CAAC,EAAO,KAAK,EAAE,EAAE,eAAe,EAAO,MAAM,EAAE,GAAG,EAAO,WAAW,EAAE,GAAG,EAAO,IAAI,GACtF,OAAO;GAET,EAAM,GAAG,OAAO,EAAM,MAAM,EAAM,EAAE,EAAE,aAAa,EAAM,MAAM,EAAM,MAAM,EAAO,MAAM,CAAU;EACpG;EACA,UAAU,EAAO;CACnB,CAAC;AACH;AA4BA,SAAS,GAAkB,GAAQ;CACjC,OAAO,IAAI,GAAU;EACnB,MAAM,EAAO;EACb,UAAU,EAAE,UAAO,UAAO,UAAO,eAAY;GAC3C,IAAM,IAAa,EAAa,EAAO,eAAe,KAAK,GAAG,CAAK,KAAK,CAAC,GACnE,IAAK,EAAM,GAAG,OAAO,EAAM,MAAM,EAAM,EAAE,GAEzC,IADS,EAAG,IAAI,QAAQ,EAAM,IACZ,EAAE,WAAW,GAC/B,IAAW,KAAc,EAAa,GAAY,EAAO,MAAM,CAAU;GAC/E,IAAI,CAAC,GACH,OAAO;GAGT,IADA,EAAG,KAAK,GAAY,CAAQ,GACxB,EAAO,aAAa,EAAO,QAAQ;IACrC,IAAM,EAAE,cAAW,mBAAgB,GAC7B,EAAE,uBAAoB,EAAO,OAAO,kBACpC,IAAQ,KAAe,EAAU,IAAI,gBAAgB,EAAU,MAAM,MAAM;IACjF,IAAI,GAAO;KACT,IAAM,IAAgB,EAAM,QAAQ,MAAS,EAAgB,SAAS,EAAK,KAAK,IAAI,CAAC;KACrF,EAAG,YAAY,CAAa;IAC9B;GACF;GACA,IAAI,EAAO,gBAAgB;IACzB,IAAM,IAAW,EAAO,KAAK,SAAS,gBAAgB,EAAO,KAAK,SAAS,gBAAgB,aAAa;IACxG,EAAM,EAAE,iBAAiB,GAAU,CAAU,EAAE,IAAI;GACrD;GACA,IAAM,IAAS,EAAG,IAAI,QAAQ,EAAM,OAAO,CAAC,EAAE;GAC9C,AAAI,KAAU,EAAO,SAAS,EAAO,QAAQC,EAAS,EAAG,KAAK,EAAM,OAAO,CAAC,MAAM,CAAC,EAAO,iBAAiB,EAAO,cAAc,GAAO,CAAM,MAC3I,EAAG,KAAK,EAAM,OAAO,CAAC;EAE1B;EACA,UAAU,EAAO;CACnB,CAAC;AACH;AAwlBA,SAAS,GAAc,GAAO,GAAU;CACtC,IAAM,EAAE,iBAAc,GAChB,EAAE,aAAU;CAClB,IAAI,aAAqBC,GAAgB;EACvC,IAAM,IAAQ,EAAM,MAAM;EAE1B,OADe,EAAM,OACP,eAAe,GAAO,IAAQ,GAAG,CAAQ;CACzD;CACA,IAAI,IAAQ,EAAM;CAClB,OAAO,KAAS,IAAG;EACjB,IAAM,IAAQ,EAAM,MAAM,CAAK;EAG/B,IAFe,EAAM,KAAK,CACP,EAAE,eAAe,CAC5B,EAAE,UAAU,CAAQ,GAC1B,OAAO;EAET;CACF;CACA,OAAO;AACT;AAiDA7D,GAAS,CAAA,GAAkB;CACzB,mCAAmC;CACnC,+BAA+B;CAC/B,gCAAgC;CAChC,uBAAuB;CACvB,2BAA2B;CAC3B,mCAAmC;CACnC,2BAA2B;AAC7B,CAAC;AAGD,SAAS,GAAgB,GAAY;CACnC,IAAI,CAAE,GAAyC,KAAK,GAClD,OAAO,CAAC;CAEV,IAAM,IAAa,CAAC,GACd,IAAgB,CAAC,GACjB,IAAa,EAAW,QAAQ,sBAAsB,OAC1D,EAAc,KAAK,CAAK,GACjB,YAAY,EAAc,SAAS,EAAE,IAC7C,GACK,IAAe,EAAW,MAAM,6BAA6B;CACnE,AAAI,MAEF,EAAW,QADK,EAAa,KAAK,MAAU,EAAM,KAAK,EAAE,MAAM,CAAC,CACvC,EAAE,KAAK,GAAG;CAErC,IAAM,IAAU,EAAW,MAAM,2BAA2B;CAM5D,AALI,MACF,EAAW,KAAK,EAAQ,KAI1B,MADwB,KAAK,EAAW,SAAS,0CAAO,CAChD,EAAE,SAAS,GAAG,GAAK,OAAe;EAGxC,IAAM,IAAc,EADA,SAAgB,EAAU,MAAM,kBAAkB,IAAyB,MAAO,KAAK,EAC/D;EAC5C,AAAI,MACF,EAAW,KAAO,EAAY,MAAM,GAAG,EAAE;CAE7C,CAAC;CACD,IAAM,IAAc,EAAW,QAAQ,+BAA+B,EAAE,EAAE,QAAQ,8BAA8B,EAAE,EAAE,QAAQ,0CAA0C,EAAE,EAAE,KAAK;CAS/K,OARI,KAEF,EADiC,MAAM,KAAK,EAAE,OAAO,OAC1C,EAAE,SAAS,MAAS;EAC7B,AAAI,EAAK,MAAM,kBAAkB,MAC/B,EAAW,KAAQ;CAEvB,CAAC,GAEI;AACT;AACA,SAAS,GAAoB,GAAY;CACvC,IAAI,CAAC,KAAc,OAAO,KAAK,CAAU,EAAE,WAAW,GACpD,OAAO;CAET,IAAM,IAAQ,CAAC;CAkBf,OAjBI,EAAW,SAEb,OADuB,EAAW,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OACvD,EAAE,SAAS,MAAQ,EAAM,KAAK,IAAI,GAAK,CAAC,GAE5C,EAAW,MACb,EAAM,KAAK,IAAI,EAAW,IAAI,GAEhC,OAAO,QAAQ,CAAU,EAAE,SAAS,CAAC,GAAK,OAAW;EAC/C,MAAQ,WAAW,MAAQ,SAG3B,MAAU,KACZ,EAAM,KAAK,CAAG,IACL,MAAU,MAAS,KAAS,QACrC,EAAM,KAAK,GAAG,EAAI,IAAI,OAAO,CAAK,EAAE,EAAE;CAE1C,CAAC,GACM,EAAM,KAAK,GAAG;AACvB;AAGA,SAAS,GAA4B,GAAS;CAC5C,IAAM,EACJ,aACA,MAAM,GACN,iBAAiB,IAAmB,IACpC,qBAAqB,IAAuB,IAC5C,uBAAoB,CAAC,GACrB,wBAAqB,CAAC,GACtB,yBACE,GACE,IAAY,KAAgB,GAC5B,KAAoB,MAAU;EAClC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAW,CAAC;EAMlB,OALA,EAAkB,SAAS,MAAQ;GACjC,AAAI,KAAO,MACT,EAAS,KAAO,EAAM;EAE1B,CAAC,GACM;CACT;CACA,OAAO;EACL,gBAAgB,GAAO,MAAO;GAC5B,IAAM,IAAQ;IAAE,GAAG;IAAmB,GAAG,EAAM;GAAW;GAC1D,OAAO,EAAG,WAAW,GAAU,GAAO,CAAC,CAAC;EAC1C;EACA,mBAAmB;GACjB,MAAM;GACN,OAAO;GACP,MAAM,GAAK;IAET,IAAM,IAAY,OAAO,OAAO,EAAU,YAAY,GAAG,GACnD,IAAc,EAAI,MAAM,CAAK,GAAyB;IAC5D,OAAO,MAAU,KAAK,IAAY,KAAR;GAC5B;GACA,SAAS,GAAK,GAAS,GAAQ;IAC7B,IAAM,IAAY,OAAO,OAAO,EAAU,uCAAuC,GAC3E,IAAQ,EAAI,MAAM,CAAK;IAC7B,IAAI,CAAC,GACH;IAGF,IAAM,IAAa,EADA,EAAM,MAAM,EACe;IACtB,OAAmB,MAAM,MAAa,EAAE,KAAY,EAC1D,GAGlB,OAAO;KACL,MAAM;KACN,KAAK,EAAM;KACX;IACF;GACF;EACF;EACA,iBAAiB,MAAS;GAExB,IAAM,IAAQ,EADQ,EAAiB,EAAK,SAAS,CAAC,CACP,CAAC;GAEhD,OAAO,MAAM,IADM,IAAQ,KAAK,EAAM,KAAK,GACP;EACtC;CACF;AACF;AAGA,SAAS,GAAwB,GAAS;CACxC,IAAM,EACJ,aACA,MAAM,GACN,eACA,iBAAiB,IAAmB,IACpC,qBAAqB,IAAuB,IAC5C,uBAAoB,CAAC,GACrB,aAAU,SACV,yBACE,GACE,IAAY,KAAgB,GAC5B,KAAoB,MAAU;EAClC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAW,CAAC;EAMlB,OALA,EAAkB,SAAS,MAAQ;GACjC,AAAI,KAAO,MACT,EAAS,KAAO,EAAM;EAE1B,CAAC,GACM;CACT;CACA,OAAO;EACL,gBAAgB,GAAO,MAAO;GAC5B,IAAI;GACJ,IAAI,GAAY;IACd,IAAM,IAAgB,EAAW,CAAK;IACtC,IAAc,OAAO,KAAkB,WAAW,CAAC;KAAE,MAAM;KAAQ,MAAM;IAAc,CAAC,IAAI;GAC9F,OAAO,AAGL,IAHS,MAAY,UACP,EAAG,cAAc,EAAM,UAAU,CAAC,CAAC,IAEnC,EAAG,YAAY,EAAM,UAAU,CAAC,CAAC;GAEjD,IAAM,IAAQ;IAAE,GAAG;IAAmB,GAAG,EAAM;GAAW;GAC1D,OAAO,EAAG,WAAW,GAAU,GAAO,CAAW;EACnD;EACA,mBAAmB;GACjB,MAAM;GACN,OAAO;GACP,MAAM,GAAK;IAET,IAAM,IAAY,OAAO,OAAO,KAAa,GAAG,GAC1C,IAAc,EAAI,MAAM,CAAK,GAAyB;IAC5D,OAAO,MAAU,KAAK,IAAY,KAAR;GAC5B;GACA,SAAS,GAAK,GAAS,GAAO;IAE5B,IAAM,IAAmB,OAAO,OAAO,EAAU,8BAA8B,GACzE,IAAe,EAAI,MAAM,CAAY;IAC3C,IAAI,CAAC,GACH;IAEF,IAAM,CAAC,GAAY,IAAa,MAAM,GAChC,IAAa,EAAiB,CAAU,GAC1C,IAAQ,GACN,IAAW,EAAW,QACxB,IAAiB,IACf,IAAe,yBACf,IAAY,EAAI,MAAM,CAAQ;IAEpC,KADA,EAAa,YAAY,KACd;KACT,IAAM,IAAQ,EAAa,KAAK,CAAS;KACzC,IAAI,MAAU,MACZ;KAEF,IAAM,IAAW,EAAM,OACjB,IAAY,EAAM;KACe,KAA7B,EAAM,IAA0B,SAAS,KAAK,GAGxD;UAAI,GACF,KAAS;WAGT,IADA,KACI,MAAU,GAAG;OACf,IAAM,IAAa,EAAU,MAAM,GAAG,CAAQ;OAC9C,IAAiB,EAAW,KAAK;OACjC,IAAM,IAAY,EAAI,MAAM,GAAG,IAAW,IAAW,EAAM,GAAG,MAAM,GAChE,IAAgB,CAAC;OACrB,IAAI,GACF,IAAI,MAAY,SAOd,KANA,IAAgB,EAAM,YAAY,CAAU,GAC5C,EAAc,SAAS,MAAU;QAC/B,AAAI,EAAM,SAAS,CAAC,EAAM,UAAU,EAAM,OAAO,WAAW,OAC1D,EAAM,SAAS,EAAM,aAAa,EAAM,IAAI;OAEhD,CAAC,GACM,EAAc,SAAS,IAAG;QAC/B,IAAM,IAAY,EAAc,EAAc,SAAS;QACvD,IAAI,EAAU,SAAS,gBAAgB,CAAC,EAAU,QAAQ,EAAU,KAAK,KAAK,MAAM,KAClF,EAAc,IAAI;aAElB;OAEJ;YAEA,IAAgB,EAAM,aAAa,CAAc;OAGrD,OAAO;QACL,MAAM;QACN,KAAK;QACL;QACA,SAAS;QACT,QAAQ;OACV;MACF;KACF;IACF;GAEF;EACF;EACA,iBAAiB,GAAM,MAAO;GAE5B,IAAM,IAAQ,EADQ,EAAiB,EAAK,SAAS,CAAC,CACP,CAAC;GAGhD,OAAO,MAAM,IAFM,IAAQ,KAAK,EAAM,KAAK,GAEP;;EADZ,EAAG,eAAe,EAAK,WAAW,CAAC,GAAG,MAGpD,EAAE;;;EAGd;CACF;AACF;AAGA,SAAS,GAAyB,GAAY;CAC5C,IAAI,CAAC,EAAW,KAAK,GACnB,OAAO,CAAC;CAEV,IAAM,IAAa,CAAC,GACd,IAAQ,kCACV,IAAQ,EAAM,KAAK,CAAU;CACjC,OAAO,MAAU,OAAM;EACrB,IAAM,GAAG,GAAK,GAAc,KAAgB;EAE5C,AADA,EAAW,KAAO,KAAgB,GAClC,IAAQ,EAAM,KAAK,CAAU;CAC/B;CACA,OAAO;AACT;AACA,SAAS,GAA6B,GAAO;CAC3C,OAAO,OAAO,QAAQ,CAAK,EAAE,QAAQ,GAAG,OAAW,KAA8B,IAAI,EAAE,KAAK,CAAC,GAAK,OAAW,GAAG,EAAI,IAAI,EAAM,EAAE,EAAE,KAAK,GAAG;AAC5I;AACA,SAAS,GAAyB,GAAS;CACzC,IAAM,EACJ,aACA,MAAM,GACN,eACA,iBAAiB,IAAmB,IACpC,qBAAqB,IAAuB,IAC5C,uBAAoB,CAAC,GACrB,iBAAc,IACd,yBACE,GACE,IAAY,KAAiB,GAC7B,KAAoB,MAAU;EAClC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAW,CAAC;EAYlB,OAXA,EAAkB,SAAS,MAAS;GAClC,IAAM,IAAW,OAAO,KAAS,WAAW,IAAO,EAAK,MAClD,IAAgB,OAAO,KAAS,WAAW,KAAK,IAAI,EAAK;GAC/D,IAAI,KAAY,GAAO;IACrB,IAAM,IAAQ,EAAM;IACpB,IAAI,MAAkB,KAAK,KAAK,MAAU,GACxC;IAEF,EAAS,KAAY;GACvB;EACF,CAAC,GACM;CACT,GACM,IAAmB,EAAU,QAAQ,uBAAuB,MAAM;CACxE,OAAO;EACL,gBAAgB,GAAO,MAAO;GAC5B,IAAM,IAAQ;IAAE,GAAG;IAAmB,GAAG,EAAM;GAAW;GAC1D,IAAI,GACF,OAAO,EAAG,WAAW,GAAU,CAAK;GAEtC,IAAM,IAAU,IAAa,EAAW,CAAK,IAAI,EAAM,WAAW;GAIlE,OAHI,IACK,EAAG,WAAW,GAAU,GAAO,CAAC,EAAG,eAAe,CAAO,CAAC,CAAC,IAE7D,EAAG,WAAW,GAAU,GAAO,CAAC,CAAC;EAC1C;EACA,mBAAmB;GACjB,MAAM;GACN,OAAO;GACP,MAAM,GAAK;IACT,IAAM,IAAiC,OAAlB,IAAyB,MAAM,EAAiB,kBAA8B,MAAM,EAAiB,gCAAgC,EAAiB,IAAI,GAEzK,IADQ,EAAI,MAAM,CACV,GAA+B;IAC7C,OAAO,MAAU,KAAK,IAAY,KAAR;GAC5B;GACA,SAAS,GAAK,GAAS,GAAQ;IAC7B,IAAM,IAAiC,OAAlB,IAAyB,OAAO,EAAiB,oBAAgC,OAAO,EAAiB,oCAAoC,EAAiB,IAAI,GACjL,IAAQ,EAAI,MAAM,CAAY;IACpC,IAAI,CAAC,GACH;IAEF,IAAI,IAAU,IACV,IAAa;IACjB,IAAI,GAAa;KACf,IAAM,GAAG,KAAS;KAClB,IAAa;IACf,OAAO;KACL,IAAM,GAAG,GAAO,KAAgB;KAEhC,AADA,IAAa,GACb,IAAU,KAAgB;IAC5B;IACA,IAAM,IAAa,EAAiB,EAAW,KAAK,CAAC;IACrD,OAAO;KACL,MAAM;KACN,KAAK,EAAM;KACX,SAAS,EAAQ,KAAK;KACtB;IACF;GACF;EACF;EACA,iBAAiB,MAAS;GACxB,IAAI,IAAU;GACd,AAAI,IACF,IAAU,EAAW,CAAI,IAChB,EAAK,WAAW,EAAK,QAAQ,SAAS,MAC/C,IAAU,EAAK,QAAQ,QAAQ,MAAU,EAAM,SAAS,MAAM,EAAE,KAAK,MAAU,EAAM,IAAI,EAAE,KAAK,EAAE;GAGpG,IAAM,IAAQ,EADQ,EAAiB,EAAK,SAAS,CAAC,CACP,CAAC,GAC1C,IAAa,IAAQ,IAAI,MAAU;GAIzC,OAHI,IACK,IAAI,IAAY,EAAW,KAE7B,IAAI,IAAY,EAAW,GAAG,EAAQ,IAAI,EAAU;EAC7D;CACF;AACF;AAGA,SAAS,GAAoB,GAAK,GAAQ,GAAO;CAE/C,IAAM,IAAQ,EAAI,MAAM,IAAI,GACtB,IAAQ,CAAC,GACX,IAAW,IACX,IAAI,GACF,IAAiB,EAAO,kBAAkB;CAChD,OAAO,IAAI,EAAM,SAAQ;EACvB,IAAM,IAAc,EAAM,IACpB,IAAY,EAAY,MAAM,EAAO,WAAW;EACtD,IAAI,CAAC,GACH;OAAI,EAAM,SAAS,GACjB;GACK,IAAI,EAAY,KAAK,MAAM,IAAI;IAEpC,AADA,KAAK,GACL,IAAW,GAAG,IAAW,EAAY;;IAErC;GACF,OACE;EAAA;EAGJ,IAAM,IAAW,EAAO,gBAAgB,CAAS,GAC3C,EAAE,gBAAa,mBAAgB;EACrC,IAAW,GAAG,IAAW,EAAY;;EAErC,IAAM,IAAc,CAAC,CAAW;EAEhC,KADA,KAAK,GACE,IAAI,EAAM,SAAQ;GACvB,IAAM,IAAW,EAAM;GACvB,IAAI,EAAS,KAAK,MAAM,IAAI;IAC1B,IAAM,IAAoB,EAAM,MAAM,IAAI,CAAC,EAAE,WAAW,MAAM,EAAE,KAAK,MAAM,EAAE;IAC7E,IAAI,MAAsB,IACxB;IAIF,KAFqB,EAAM,IAAI,IAAI,GACW,MAAM,QAAQ,IAAyB,IAA0B,UAAW,KACxG,GAAa;KAI7B,AAHA,EAAY,KAAK,CAAQ,GACzB,IAAW,GAAG,IAAW,EAAS;GAElC,KAAK;KACL;IACF,OACE;GAEJ;GAEA,KADgC,EAAS,MAAM,QAAQ,IAAyB,IAA0B,UAAW,KACpG,GAIf,AAHA,EAAY,KAAK,CAAQ,GACzB,IAAW,GAAG,IAAW,EAAS;GAElC,KAAK;QAEL;EAEJ;EACA,IAAI,GACE,IAAgB,EAAY,MAAM,CAAC;EACzC,IAAI,EAAc,SAAS,GAAG;GAC5B,IAAM,IAAiB,EAAc,KAAK,MAAe,EAAW,MAAM,IAAc,CAAc,CAAC,EAAE,KAAK,IAAI;GAClH,AAAI,EAAe,KAAK,MACtB,AAGE,IAHE,EAAO,qBACM,EAAO,mBAAmB,CAAc,IAExC,EAAM,YAAY,CAAc;EAGrD;EACA,IAAM,IAAQ,EAAO,YAAY,GAAU,CAAY;EACvD,EAAM,KAAK,CAAK;CAClB;CACI,MAAM,WAAW,GAGrB,OAAO;EACL;EACA,KAAK;CACP;AACF;AAGA,SAAS,GAA4B,GAAM,GAAI,GAAmB,GAAK;CACrE,IAAI,CAAC,KAAQ,CAAC,MAAM,QAAQ,EAAK,OAAO,GACtC,OAAO;CAET,IAAM,IAAS,OAAO,KAAsB,aAAa,EAAkB,CAAG,IAAI,GAC5E,CAAC,GAAS,GAAG,KAAY,EAAK,SAEhC,IAAS,GAAG,IADI,EAAG,eAAe,CAAC,CAAO,CACX;CAcnC,OAbI,KAAY,EAAS,SAAS,KAChC,EAAS,SAAS,GAAO,MAAU;EAEjC,IAAM,IAA2B,EAAG,aAAmC,KAAK,GAAI,GAAO,IAAQ,CAAC,KAAkB,EAAG,eAAe,CAAC,CAAK,CAAC;EAC3I,IAAI,KAA4C,MAAM;GACpD,IAAM,IAAgB,EAAa,MAAM,IAAI,EAAE,KAAK,MAAS,IAAO,EAAG,OAAO,CAAI,IAAI,EAAG,OAAO,EAAE,CAAC,EAAE,KAAK,IAAI;GAC9G,KAAU,EAAM,SAAS,cAAc;;EAE7C,MAAkB;EAClB;EACI;CACF,CAAC,GAEI;AACT;AA0CA,SAAS,GAAyB,GAAW,GAAQ,IAAQ,CAAC,GAAG;CAC/D,IAAM,EAAE,aAAU,GACZ,EAAE,QAAK,UAAO,GACd,IAAW;CA6BjB,AA5BA,EAAI,aAAa,GAAM,MAAQ;EAC7B,IAAM,IAAO,EAAG,QAAQ,IAAI,CAAG,GACzB,IAAK,EAAG,QAAQ,IAAI,CAAG,IAAI,EAAK,UAClC,IAAY;EAOhB,IANA,EAAK,MAAM,SAAS,MAAS;GAC3B,IAAI,MAAS,GACX,OAAO;GAET,IAAY;EACd,CAAC,GACG,CAAC,GACH;EAEF,IAAI,IAAc;EAMlB,IALA,OAAO,KAAK,CAAK,EAAE,SAAS,MAAM;GAChC,AAAI,EAAM,OAAO,EAAU,MAAM,OAC/B,IAAc;EAElB,CAAC,GACG,GAAa;GACf,IAAM,IAAc,EAAU,KAAK,OAAO;IACxC,GAAG,EAAU;IACb,GAAG;GACL,CAAC;GAED,AADA,EAAG,WAAW,GAAM,GAAI,EAAU,IAAI,GACtC,EAAG,QAAQ,GAAM,GAAI,CAAW;EAClC;CACF,CAAC,GACG,EAAG,cACL,EAAO,KAAK,SAAS,CAAE;AAE3B;AAiDA,IAAI,IAAQ,MAAM,UAAc,GAAW;CACzC,cAAc;EAEZ,AADA,MAAM,GAAG,SAAS,GAClB,KAAK,OAAO;CACd;CAKA,OAAO,OAAO,IAAS,CAAC,GAAG;EAEzB,OAAO,IAAI,EADY,OAAO,KAAW,aAAa,EAAO,IAAI,CAClC;CACjC;CACA,UAAU,GAAS;EACjB,OAAO,MAAM,UAAU,CAAO;CAChC;CACA,OAAO,GAAgB;EACrB,IAAM,IAAiB,OAAO,KAAmB,aAAa,EAAe,IAAI;EACjF,OAAO,MAAM,OAAO,CAAc;CACpC;AACF;AAyNA,SAAS,GAAc,GAAQ;CAC7B,OAAO,IAAI,GAAU;EACnB,MAAM,EAAO;EACb,UAAU,EAAE,UAAO,UAAO,UAAO,oBAAiB;GAChD,IAAM,IAAa,EAAa,EAAO,eAAe,KAAK,GAAG,GAAO,CAAU;GAC/E,IAAI,MAAe,MAAS,MAAe,MACzC,OAAO;GAET,IAAM,EAAE,UAAO,GACT,IAAe,EAAM,EAAM,SAAS,IACpC,IAAY,EAAM,IACpB,IAAU,EAAM;GACpB,IAAI,GAAc;IAChB,IAAM,IAAc,EAAU,OAAO,IAAI,GACnC,IAAY,EAAM,OAAO,EAAU,QAAQ,CAAY,GACvD,IAAU,IAAY,EAAa;IAKzC,IAJsB,GAAgB,EAAM,MAAM,EAAM,IAAI,EAAM,GAAG,EAAE,QAAQ,MAC5D,EAAK,KAAK,KAAK,SAChB,MAAM,MAAS,MAAS,EAAO,QAAQ,MAAS,EAAK,KAAK,IAAI,CAC/E,EAAE,QAAQ,MAAS,EAAK,KAAK,CACd,EAAE,QAChB,OAAO;IAWT,AATI,IAAU,EAAM,MAClB,EAAG,OAAO,GAAS,EAAM,EAAE,GAEzB,IAAY,EAAM,QACpB,EAAG,OAAO,EAAM,OAAO,GAAa,CAAS,GAE/C,IAAU,EAAM,OAAO,IAAc,EAAa,QAClD,EAAG,QAAQ,EAAM,OAAO,GAAa,GAAS,EAAO,KAAK,OAAO,KAAc,CAAC,CAAC,CAAC,GACvD,EAAM,UAAU,KAAK,KAAK,EAAM,UAAU,KAAK,KAAK,EAAM,QAAQ,EAAM,GAAG,UAAU,EAAM,MAAM,UAE1H,EAAG,iBAAiB,EAAO,IAAI;GAEnC;EACF;CACF,CAAC;AACH;;;ACt0NA,IAAI,MAAK,GAAK,MAAe;CAC3B,IAAI,MAAQ,QACV,OAAO;CAET,IAAI,aAAe,UACjB,OAAO,EAAI,CAAU;CAEvB,IAAM,EAAE,aAAU,GAAG,MAAS,KAAkC,CAAC;CACjE,IAAI,MAAQ,OACV,MAAU,MAAM,gFAAgF;CAElG,OAAO;EAAC;EAAK;EAAM;CAAQ;AAC7B,GCbI8D,KAAa,YACb,KAAaC,EAAK,OAAO;CAC3B,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CACA,SAAS;CACT,OAAO;CACP,UAAU;CACV,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,aAAa,CAAC;CAC/B;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAuB,mBAAI,cAAc;GAAE,GAAG,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG,UAA0B,mBAAI,QAAQ,CAAC,CAAC;EAAE,CAAC;CACzJ;CACA,gBAAgB,GAAO,MAAY;EAEjC,IAAM,IAA2B,EAAQ,sBAAmC,EAAQ;EACpF,OAAO,EAAQ,WAAW,cAAc,KAAK,GAAG,EAAmB,EAAM,UAAU,CAAC,CAAC,CAAC;CACxF;CACA,iBAAiB,GAAM,MAAM;EAC3B,IAAI,CAAC,EAAK,SACR,OAAO;EAET,IACM,IAAS,CAAC;EAahB,OAZA,EAAK,QAAQ,SAAS,GAAO,MAAU;GAIrC,IAAM,KAF2B,EAAE,aAAmC,KAAK,GAAG,GAAO,CAAK,KAAkB,EAAE,eAAe,CAAC,CAAK,CAAC,GACzG,MAAM,IACL,EAAE,KAAK,MAC7B,EAAK,KAAK,MAAM,KACX,MAEF,KAAa,GACrB;GACD,EAAO,KAAK,EAAgB,KAAK,IAAI,CAAC;EACxC,CAAC,GACM,EAAO,KAAK,OAEtB;CACC;CACA,cAAc;EACZ,OAAO;GACL,sBAAsB,EAAE,kBACf,EAAS,OAAO,KAAK,IAAI;GAElC,yBAAyB,EAAE,kBAClB,EAAS,WAAW,KAAK,IAAI;GAEtC,wBAAwB,EAAE,kBACjB,EAAS,KAAK,KAAK,IAAI;EAElC;CACF;CACA,uBAAuB;EACrB,OAAO,EACL,qBAAqB,KAAK,OAAO,SAAS,iBAAiB,EAC7D;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAkB;GAChB,MAAMD;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC,GCtEGE,KAAiB,wDACjBC,KAAiB,wDACjBC,KAAuB,gDACvBC,KAAuB,gDACvB,KAAO,GAAK,OAAO;CACrB,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CACA,YAAY;EACV,OAAO;GACL,EACE,KAAK,SACP;GACA;IACE,KAAK;IACL,WAAW,MAAS,EAAK,MAAM,eAAe,YAAY;GAC5D;GACA;IACE,OAAO;IACP,YAAY,MAAS,EAAK,KAAK,SAAS,KAAK;GAC/C;GACA;IACE,OAAO;IACP,WAAW,MAAU,4BAA4B,KAAK,CAAK,KAAK;GAClE;EACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAuB,mBAAI,UAAU;GAAE,GAAG,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG,UAA0B,mBAAI,QAAQ,CAAC,CAAC;EAAE,CAAC;CACrJ;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACd,EAAQ,UAAU,QAAQ,EAAQ,YAAY,EAAM,UAAU,CAAC,CAAC,CAAC;CAE1E,iBAAiB,EACf,YAAY;EACV,MAAM;EACN,OAAO;CACT,EACF;CACA,iBAAiB,GAAM,MACd,KAAK,EAAE,eAAe,CAAI,EAAE;CAErC,cAAc;EACZ,OAAO;GACL,gBAAgB,EAAE,kBACT,EAAS,QAAQ,KAAK,IAAI;GAEnC,mBAAmB,EAAE,kBACZ,EAAS,WAAW,KAAK,IAAI;GAEtC,kBAAkB,EAAE,kBACX,EAAS,UAAU,KAAK,IAAI;EAEvC;CACF;CACA,uBAAuB;EACrB,OAAO;GACL,eAAe,KAAK,OAAO,SAAS,WAAW;GAC/C,eAAe,KAAK,OAAO,SAAS,WAAW;EACjD;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAMH;GACN,MAAM,KAAK;EACb,CAAC,GACD,GAAc;GACZ,MAAME;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAMD;GACN,MAAM,KAAK;EACb,CAAC,GACD,GAAc;GACZ,MAAME;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC,GC1FGC,KAAa,2BACbC,KAAa,2BACb,KAAO,GAAK,OAAO;CACrB,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CACA,UAAU;CACV,MAAM;CACN,UAAU;CACV,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC;CACzB;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAQ,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CACjF;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACd,EAAQ,UAAU,QAAQ,CAAC;EAAE,MAAM;EAAQ,MAAM,EAAM,QAAQ;CAAG,CAAC,CAAC;CAE7E,iBAAiB,GAAM,MAChB,EAAK,UAGH,KAAK,EAAE,eAAe,EAAK,OAAO,EAAE,MAFlC;CAIX,cAAc;EACZ,OAAO;GACL,gBAAgB,EAAE,kBACT,EAAS,QAAQ,KAAK,IAAI;GAEnC,mBAAmB,EAAE,kBACZ,EAAS,WAAW,KAAK,IAAI;GAEtC,kBAAkB,EAAE,kBACX,EAAS,UAAU,KAAK,IAAI;EAEvC;CACF;CACA,uBAAuB;EACrB,OAAO,EACL,eAAe,KAAK,OAAO,SAAS,WAAW,EACjD;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAMD;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAMC;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC,GC7DGC,KAAmB,GACnBC,KAAqB,wBACrBC,KAAkB,wBAClBC,KAAYC,EAAK,OAAO;CAC1B,MAAM;CACN,aAAa;EACX,OAAO;GACL,qBAAqB;GACrB,mBAAmB;GACnB,iBAAiB;GACjB,iBAAiB;GACjB,sBAAsB;GACtB,SAASJ;GACT,gBAAgB,CAAC;EACnB;CACF;CACA,SAAS;CACT,OAAO;CACP,OAAO;CACP,MAAM;CACN,UAAU;CACV,gBAAgB;EACd,OAAO,EACL,UAAU;GACR,SAAS,KAAK,QAAQ;GACtB,YAAY,MAAY;IAEtB,IAAM,EAAE,2BAAwB,KAAK;IAUrC,OATK,KAIa,CADE,GAAU,EAAQ,mBAAyC,aAAc,CAAC,CACnE,EAAE,QAAQ,MAAc,EAAU,WAAW,CAAmB,CAAC,EAAE,KAAK,MAAc,EAAU,QAAQ,GAAqB,EAAE,CACjI,EAAE,MAJlB;GASX;GACA,UAAU;EACZ,EACF;CACF;CACA,YAAY;EACV,OAAO,CACL;GACE,KAAK;GACL,oBAAoB;EACtB,CACF;CACF;CACA,WAAW,EAAE,SAAM,qBAAkB;EACnC,OAAO;GACL;GACA,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAC3D;IACE;IACA,EACE,OAAO,EAAK,MAAM,WAAW,KAAK,QAAQ,sBAAsB,EAAK,MAAM,WAAW,KACxF;IACA;GACF;EACF;CACF;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MAEV,EAAM,KAA2B,WAAW,KAAK,MAAO,MAAgB,EAAM,KAA2B,WAAW,KAAK,MAAO,MAAS,EAAM,mBAAmB,aACpK,CAAC,IAEH,EAAQ,WACb,aACA,EAAE,UAAU,EAAM,QAAQ,KAAK,GAC/B,EAAM,OAAO,CAAC,EAAQ,eAAe,EAAM,IAAI,CAAC,IAAI,CAAC,CACvD;CAEF,iBAAiB,GAAM,MAAM;EAE3B,IAAI,IAAS,IACP,IAAkB,EAAK,OAA6B,YAAa;EASvE,OARA,AACE,IADG,EAAK,UAMC;GADM,SAAS;GAAY,EAAE,eAAe,EAAK,OAAO;GAAG;EACvD,EAAE,KAAK,IAAI,IALf,SAAS,EAAS;;SAOtB;CACT;CACA,cAAc;EACZ,OAAO;GACL,eAAe,OAAgB,EAAE,kBACxB,EAAS,QAAQ,KAAK,MAAM,CAAU;GAE/C,kBAAkB,OAAgB,EAAE,kBAC3B,EAAS,WAAW,KAAK,MAAM,aAAa,CAAU;EAEjE;CACF;CACA,uBAAuB;EACrB,OAAO;GACL,mBAAmB,KAAK,OAAO,SAAS,gBAAgB;GAExD,iBAAiB;IACf,IAAM,EAAE,UAAO,eAAY,KAAK,OAAO,MAAM,WACvC,IAAY,EAAQ,QAAQ;IAOlC,OANI,CAAC,KAAS,EAAQ,OAAO,KAAK,SAAS,KAAK,OACvC,KAEL,KAAa,CAAC,EAAQ,OAAO,YAAY,SACpC,KAAK,OAAO,SAAS,WAAW,IAElC;GACT;GAEA,MAAM,EAAE,gBAAa;IAEnB,IAAI,CAAC,KAAK,QAAQ,sBAChB,OAAO;IAET,IAAM,IAAgB,KAAK,QAAQ,WAAwBA,IACrD,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,UAAO,aAAU;IACzB,IAAI,EAAM,OAAO,SAAS,KAAK,MAC7B,OAAO;IAET,IAAM,IAAS,IAAI,OAAO,CAAO;IAIjC,OAHI,IACK,EAAO,SAAS,cAAc,CAAM,IAEtC,EAAO,SAAS,SAAS,EAAE,YAAS;KACzC,IAAM,EAAE,SAAM,UAAO,GAGf,IAFO,EAAM,IAAI,YAAY,GAAM,GAAI,MAAM,IAClC,EAAE,MAAM,IACA,EAAE,KAAK,MAAS,IAAS,CAAI,EAAE,KAAK,IAAI;KAEjE,OADA,EAAG,YAAY,GAAM,GAAI,EAAM,OAAO,KAAK,CAAY,CAAC,GACjD;IACT,CAAC;GACH;GAEA,cAAc,EAAE,gBAAa;IAE3B,IAAI,CAAC,KAAK,QAAQ,sBAChB,OAAO;IAET,IAAM,IAAgB,KAAK,QAAQ,WAAwBA,IACrD,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,UAAO,aAAU;IAwCzB,OAvCI,EAAM,OAAO,SAAS,KAAK,OAG3B,IACK,EAAO,SAAS,SAAS,EAAE,YAAS;KAEzC,IAAM,EAAE,WAAQ,GACV,IAAiB,EAAM,MAAM,GAC7B,IAAe,EAAM,IAAI,GAEzB,IADU,EAAM,IAAI,YAAY,GAAgB,GAAc,MAAM,IACtD,EAAE,MAAM,IAAI,GAC5B,IAAmB,GACnB,IAAY,GACV,IAAoB,IAAM;KAChC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,KAAK,GAAG;MACxC,IAAI,IAAY,EAAM,GAAG,UAAU,GAAmB;OACpD,IAAmB;OACnB;MACF;MACA,KAAa,EAAM,GAAG,SAAS;KACjC;KAEA,IAAM,IADc,EAAM,GACgB,MAAM,KAAK,IAA0B,MAAO,IAChF,IAAiB,KAAK,IAAI,EAAc,QAAQ,CAAO;KAC7D,IAAI,MAAmB,GACrB,OAAO;KAET,IAAI,IAAe;KACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAkB,KAAK,GACzC,KAAgB,EAAM,GAAG,SAAS;KAOpC,OALA,EAAG,OAAO,GAAc,IAAe,CAAc,GAC7B,IAAM,KACP,KACrB,EAAG,aAAa,EAAc,OAAO,EAAG,KAAK,CAAY,CAAC,GAErD;IACT,CAAC,IAEI,EAAO,SAAS,SAAS,EAAE,YAAS;KACzC,IAAM,EAAE,SAAM,UAAO,GAGf,IAFO,EAAM,IAAI,YAAY,GAAM,GAAI,MAAM,IAClC,EAAE,MAAM,IACK,EAAE,KAAK,MAAS;MAE5C,IAAM,IAAwB,EAAK,MAAM,KAAK,IAA0B,MAAO,IACzE,IAAiB,KAAK,IAAI,EAAc,QAAQ,CAAO;MAC7D,OAAO,EAAK,MAAM,CAAc;KAClC,CAAC,EAAE,KAAK,IAAI;KAEZ,OADA,EAAG,YAAY,GAAM,GAAI,EAAM,OAAO,KAAK,CAAiB,CAAC,GACtD;IACT,CAAC,IAlDQ;GAmDX;GAEA,QAAQ,EAAE,gBAAa;IACrB,IAAI,CAAC,KAAK,QAAQ,mBAChB,OAAO;IAET,IAAM,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,UAAO,aAAU;IACzB,IAAI,CAAC,KAAS,EAAM,OAAO,SAAS,KAAK,MACvC,OAAO;IAET,IAAM,IAAU,EAAM,iBAAiB,EAAM,OAAO,WAAW,GACzD,IAAwB,EAAM,OAAO,YAAY,SAAS,MAAM;IAItE,OAHI,CAAC,KAAW,CAAC,IACR,KAEF,EAAO,MAAM,EAAE,SAAS,EAAE,aAC/B,EAAG,OAAO,EAAM,MAAM,GAAG,EAAM,GAAG,GAC3B,GACR,EAAE,SAAS,EAAE,IAAI;GACpB;GAEA,YAAY,EAAE,gBAAa;IACzB,IAAI,CAAC,KAAK,QAAQ,iBAChB,OAAO;IAET,IAAM,EAAE,aAAU,GACZ,EAAE,cAAW,WAAQ,GACrB,EAAE,UAAO,aAAU;IAKzB,IAJI,CAAC,KAAS,EAAM,OAAO,SAAS,KAAK,QAGzB,EAAM,iBAAiB,EAAM,OAAO,WAAW,GAE7D,OAAO;IAET,IAAM,IAAQ,EAAM,MAAM;IAW1B,OAVI,MAAU,KAAK,IACV,KAES,EAAI,OAAO,CACjB,IACH,EAAO,SAAS,SAAS,EAAE,aAChC,EAAG,aAAaK,EAAU,KAAK,EAAI,QAAQ,CAAK,CAAC,CAAC,GAC3C,GACR,IAEI,EAAO,SAAS,SAAS;GAClC;EACF;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAuB;GACrB,MAAMJ;GACN,MAAM,KAAK;GACX,gBAAgB,OAAW,EACzB,UAAU,EAAM,GAClB;EACF,CAAC,GACD,GAAuB;GACrB,MAAMC;GACN,MAAM,KAAK;GACX,gBAAgB,OAAW,EACzB,UAAU,EAAM,GAClB;EACF,CAAC,CACH;CACF;CACA,wBAAwB;EACtB,OAAO,CAGL,IAAI,EAAO;GACT,KAAK,IAAI,EAAU,wBAAwB;GAC3C,OAAO,EACL,cAAc,GAAM,MAAU;IAI5B,IAHI,CAAC,EAAM,iBAGP,KAAK,OAAO,SAAS,KAAK,KAAK,IAAI,GACrC,OAAO;IAET,IAAM,IAAO,EAAM,cAAc,QAAQ,YAAY,GAC/C,IAAS,EAAM,cAAc,QAAQ,oBAAoB,GAEzD,KADa,IAAS,KAAK,MAAM,CAAM,IAAI,KAAK,IACI;IAC1D,IAAI,CAAC,KAAQ,CAAC,GACZ,OAAO;IAET,IAAM,EAAE,OAAI,cAAW,EAAK,OACtB,IAAW,EAAO,KAAK,EAAK,QAAQ,UAAU,IAAI,CAAC;IAOzD,OANA,EAAG,qBAAqB,KAAK,KAAK,OAAO,EAAE,YAAS,GAAG,CAAQ,CAAC,GAC5D,EAAG,UAAU,MAAM,OAAO,SAAS,KAAK,QAC1C,EAAG,aAAa,EAAc,KAAK,EAAG,IAAI,QAAQ,KAAK,IAAI,GAAG,EAAG,UAAU,OAAO,CAAC,CAAC,CAAC,CAAC,GAExF,EAAG,QAAQ,SAAS,EAAI,GACxB,EAAK,SAAS,CAAE,GACT;GACT,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GCrTG,KAAWI,EAAK,OAAO;CACzB,MAAM;CACN,SAAS;CACT,SAAS;CACT,iBAAiB,GAAM,MAChB,EAAK,UAGH,EAAE,eAAe,EAAK,SAAS,MAAM,IAFnC;AAIb,CAAC,GCVG,KAAYC,EAAK,OAAO;CAC1B,MAAM;CACN,mBAAmB;CACnB,aAAa;EACX,OAAO;GACL,WAAW;GACX,gBAAgB,CAAC;EACnB;CACF;CACA,QAAQ;CACR,OAAO;CACP,YAAY;CACZ,sBAAsB;CACtB,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC;CACvB;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO,CAAC,MAAM,EAAgB,KAAK,QAAQ,gBAAgB,CAAc,CAAC;CAC5E;CACA,aAAa;EACX,OAAO;CACT;CACA,sBAAsB;CAEtB,sBACS,EACL,MAAM,YACR;CAEF,cAAc;EACZ,OAAO,EACL,qBAAqB,EAAE,aAAU,UAAO,UAAO,gBACtC,EAAS,MAAM,OACd,EAAS,SAAS,SAClB,EAAS,cAAc;GAC3B,IAAM,EAAE,cAAW,mBAAgB;GACnC,IAAI,EAAU,MAAM,OAAO,KAAK,KAAK,WACnC,OAAO;GAET,IAAM,EAAE,iBAAc,KAAK,SACrB,EAAE,uBAAoB,EAAO,kBAC7B,IAAQ,KAAe,EAAU,IAAI,gBAAgB,EAAU,MAAM,MAAM;GACjF,OAAO,EAAM,EAAE,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC,EAAE,SAAS,EAAE,OAAI,kBAAe;IAC9E,IAAI,KAAY,KAAS,GAAW;KAClC,IAAM,IAAgB,EAAM,QAAQ,MAAS,EAAgB,SAAS,EAAK,KAAK,IAAI,CAAC;KACrF,EAAG,YAAY,CAAa;IAC9B;IACA,OAAO;GACT,CAAC,EAAE,IAAI;EACT,CAAC,CACH,CAAC,EAEL;CACF;CACA,uBAAuB;EACrB,OAAO;GACL,mBAAmB,KAAK,OAAO,SAAS,aAAa;GACrD,qBAAqB,KAAK,OAAO,SAAS,aAAa;EACzD;CACF;AACF,CAAC,GC5DG,KAAUC,EAAK,OAAO;CACxB,MAAM;CACN,aAAa;EACX,OAAO;GACL,QAAQ;IAAC;IAAG;IAAG;IAAG;IAAG;IAAG;GAAC;GACzB,gBAAgB,CAAC;EACnB;CACF;CACA,SAAS;CACT,OAAO;CACP,UAAU;CACV,gBAAgB;EACd,OAAO,EACL,OAAO;GACL,SAAS;GACT,UAAU;EACZ,EACF;CACF;CACA,YAAY;EACV,OAAO,KAAK,QAAQ,OAAO,KAAK,OAAW;GACzC,KAAK,IAAI;GACT,OAAO,EAAE,SAAM;EACjB,EAAE;CACJ;CACA,WAAW,EAAE,SAAM,qBAAkB;EAGnC,OAAO;GAAC,IAFS,KAAK,QAAQ,OAAO,SAAS,EAAK,MAAM,KACpC,IAAI,EAAK,MAAM,QAAQ,KAAK,QAAQ,OAAO;GAC3C,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CACtF;CACA,gBAAgB,GAAO,MACd,EAAQ,WAAW,WAAW,EAAE,OAAO,EAAM,SAAS,EAAE,GAAG,EAAQ,YAAY,EAAM,UAAU,CAAC,CAAC,CAAC;CAE3G,iBAAiB,GAAM,MAAM;EAE3B,IAAM,IAAe,EAAK,OAA6B,QAAS,SAAS,EAAK,MAAM,OAAO,EAAE,IAAI,GAC3F,IAAe,IAAI,OAAO,CAAK;EAIrC,OAHK,EAAK,UAGH,GAAG,EAAa,GAAG,EAAE,eAAe,EAAK,OAAO,MAF9C;CAGX;CACA,cAAc;EACZ,OAAO;GACL,aAAa,OAAgB,EAAE,kBACxB,KAAK,QAAQ,OAAO,SAAS,EAAW,KAAK,IAG3C,EAAS,QAAQ,KAAK,MAAM,CAAU,IAFpC;GAIX,gBAAgB,OAAgB,EAAE,kBAC3B,KAAK,QAAQ,OAAO,SAAS,EAAW,KAAK,IAG3C,EAAS,WAAW,KAAK,MAAM,aAAa,CAAU,IAFpD;EAIb;CACF;CACA,uBAAuB;EACrB,OAAO,KAAK,QAAQ,OAAO,QACxB,GAAO,OAAW;GACjB,GAAG;IAEA,WAAW,YAAgB,KAAK,OAAO,SAAS,cAAc,EAAE,SAAM,CAAC;EAE5E,IACA,CAAC,CACH;CACF;CACA,gBAAgB;EACd,OAAO,KAAK,QAAQ,OAAO,KAAK,MACvB,GAAuB;GAC5B,MAAU,OAAO,OAAO,KAAK,IAAI,GAAG,KAAK,QAAQ,MAAM,EAAE,GAAG,EAAM,OAAO;GACzE,MAAM,KAAK;GACX,eAAe,EACb,SACF;EACF,CAAC,CACF;CACH;AACF,CAAC,GC/EG,KAAiBC,EAAK,OAAO;CAC/B,MAAM;CACN,aAAa;EACX,OAAO;GACL,gBAAgB,CAAC;GACjB,cAAc;EAChB;CACF;CACA,OAAO;CACP,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC;CACvB;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO,CAAC,MAAM,EAAgB,KAAK,QAAQ,gBAAgB,CAAc,CAAC;CAC5E;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACd,EAAQ,WAAW,gBAAgB;CAE5C,sBACS;CAET,cAAc;EACZ,OAAO,EACL,0BAA0B,EAAE,UAAO,eAAY;GAC7C,IAAI,CAAC,GAAc,GAAO,EAAM,OAAO,MAAM,KAAK,KAAK,GACrD,OAAO;GAET,IAAM,EAAE,iBAAc,GAChB,EAAE,KAAK,MAAc,GACrB,IAAe,EAAM;GAQ3B,OAPI,GAAgB,CAAS,IAC3B,EAAa,gBAAgB,EAAU,KAAK,EAC1C,MAAM,KAAK,KACb,CAAC,IAED,EAAa,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC,GAEzC,EAAa,SAAS,EAAE,OAAO,GAAY,OAAI,kBAAe;IACnE,IAAI,GAAU;KACZ,IAAM,EAAE,WAAQ,EAAG,WACb,IAAW,EAAI,IAAI;KACzB,IAAI,EAAI,WACN,AAAI,EAAI,UAAU,cAChB,EAAG,aAAa,EAAc,OAAO,EAAG,KAAK,EAAI,MAAM,CAAC,CAAC,IAChD,EAAI,UAAU,UACvB,EAAG,aAAa,EAAc,OAAO,EAAG,KAAK,EAAI,GAAG,CAAC,IAErD,EAAG,aAAa,EAAc,OAAO,EAAG,KAAK,EAAI,GAAG,CAAC;UAElD;MACL,IACM,KADW,EAAW,OAAO,MAAM,KAAK,QAAQ,iBAAiB,EAAI,OAAO,KAAK,aAAa,cAClD,OAAO;MACzD,AAAI,MACF,EAAG,OAAO,GAAU,CAAI,GACxB,EAAG,aAAa,EAAc,OAAO,EAAG,KAAK,IAAW,CAAC,CAAC;KAE9D;KACA,EAAG,eAAe;IACpB;IACA,OAAO;GACT,CAAC,EAAE,IAAI;EACT,EACF;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAM;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC,GC1EG,KAAiB,gDACjB,KAAiB,gDACjB,KAAuB,4CACvB,KAAuB,4CACvB,KAAS,GAAK,OAAO;CACvB,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CACA,YAAY;EACV,OAAO;GACL,EACE,KAAK,KACP;GACA;IACE,KAAK;IACL,WAAW,MAAS,EAAK,MAAM,cAAc,YAAY;GAC3D;GACA;IACE,OAAO;IACP,YAAY,MAAS,EAAK,KAAK,SAAS,KAAK;GAC/C;GACA,EACE,OAAO,oBACT;EACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAM,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CAC/E;CACA,cAAc;EACZ,OAAO;GACL,kBAAkB,EAAE,kBACX,EAAS,QAAQ,KAAK,IAAI;GAEnC,qBAAqB,EAAE,kBACd,EAAS,WAAW,KAAK,IAAI;GAEtC,oBAAoB,EAAE,kBACb,EAAS,UAAU,KAAK,IAAI;EAEvC;CACF;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACd,EAAQ,UAAU,UAAU,EAAQ,YAAY,EAAM,UAAU,CAAC,CAAC,CAAC;CAE5E,iBAAiB,EACf,YAAY;EACV,MAAM;EACN,OAAO;CACT,EACF;CACA,iBAAiB,GAAM,MACd,IAAI,EAAE,eAAe,CAAI,EAAE;CAEpC,uBAAuB;EACrB,OAAO;GACL,eAAe,KAAK,OAAO,SAAS,aAAa;GACjD,eAAe,KAAK,OAAO,SAAS,aAAa;EACnD;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAM;GACN,MAAM,KAAK;EACb,CAAC,GACD,GAAc;GACZ,MAAM;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAM;GACN,MAAM,KAAK;EACb,CAAC,GACD,GAAc;GACZ,MAAM;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC,GCvFK,KAAc,8vJAEd,KAAe,qmBAgBf,KAAU,WACV,KAAQ,SACR,KAAQ,SACR,KAAe,gBACf,KAAe,gBACf,KAAS,UACT,KAAQ,SACR,KAAS,UACT,KAAc,eACd,KAAa;AAQnB,SAAS,GAAc,GAAM,GAAQ;CAInC,OAHM,KAAQ,MACZ,EAAO,KAAQ,CAAC,IAEX,EAAO;AAChB;AAQA,SAAS,GAAY,GAAG,GAAO,GAAQ;CAkBrC,AAjBI,EAAM,QACR,EAAM,MAAgB,IACtB,EAAM,MAAgB,KAEpB,EAAM,QACR,EAAM,MAAgB,IACtB,EAAM,MAAS,KAEb,EAAM,QACR,EAAM,MAAgB,KAEpB,EAAM,QACR,EAAM,MAAgB,KAEpB,EAAM,QACR,EAAM,MAAU,KAEd,EAAM,QACR,EAAM,MAAU;CAElB,KAAK,IAAM,KAAK,GAAO;EACrB,IAAM,IAAQ,GAAc,GAAG,CAAM;EACrC,AAAI,EAAM,QAAQ,CAAC,IAAI,KACrB,EAAM,KAAK,CAAC;CAEhB;AACF;AAQA,SAAS,GAAc,GAAG,GAAQ;CAChC,IAAM,IAAS,CAAC;CAChB,KAAK,IAAM,KAAK,GACd,AAAI,EAAO,GAAG,QAAQ,CAAC,KAAK,MAC1B,EAAO,KAAK;CAGhB,OAAO;AACT;AAoBA,SAAS,EAAM,IAAQ,MAAM;CAU3B,AAPA,KAAK,IAAI,CAAC,GAGV,KAAK,KAAK,CAAC,GAEX,KAAK,KAAK,MAEV,KAAK,IAAI;AACX;AAMA,EAAM,SAAS,CAAC,GAChB,EAAM,YAAY;CAChB,UAAU;EACR,OAAO,CAAC,CAAC,KAAK;CAChB;CAOA,GAAG,GAAO;EACR,IAAM,IAAQ,MACR,IAAY,EAAM,EAAE;EAC1B,IAAI,GACF,OAAO;EAET,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,GAAG,QAAQ,KAAK;GACxC,IAAM,IAAQ,EAAM,GAAG,GAAG,IACpB,IAAY,EAAM,GAAG,GAAG;GAC9B,IAAI,KAAa,EAAM,KAAK,CAAK,GAC/B,OAAO;EAEX;EAEA,OAAO,EAAM;CACf;CAQA,IAAI,GAAO,IAAY,IAAO;EAC5B,OAAO,IAAY,KAAS,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAK;CACtD;CASA,GAAG,GAAQ,GAAM,GAAO,GAAQ;EAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KACjC,KAAK,GAAG,EAAO,IAAI,GAAM,GAAO,CAAM;CAE1C;CAUA,GAAG,GAAQ,GAAM,GAAO,GAAQ;EAC9B,MAAmB,EAAM;EACzB,IAAI;EAWJ,OAVI,KAAQ,EAAK,IACf,IAAY,KAGZ,IAAY,IAAI,EAAM,CAAI,GACtB,KAAS,KACX,GAAY,GAAM,GAAO,CAAM,IAGnC,KAAK,GAAG,KAAK,CAAC,GAAQ,CAAS,CAAC,GACzB;CACT;CAWA,GAAG,GAAO,GAAM,GAAO,GAAQ;EAC7B,IAAI,IAAQ,MACN,IAAM,EAAM;EAClB,IAAI,CAAC,GACH,OAAO;EAET,KAAK,IAAI,IAAI,GAAG,IAAI,IAAM,GAAG,KAC3B,IAAQ,EAAM,GAAG,EAAM,EAAE;EAE3B,OAAO,EAAM,GAAG,EAAM,IAAM,IAAI,GAAM,GAAO,CAAM;CACrD;CA2BA,GAAG,GAAO,GAAM,GAAO,GAAQ;EAC7B,MAAmB,EAAM;EACzB,IAAM,IAAQ;EAGd,IAAI,KAAQ,EAAK,GAEf,OADA,EAAM,EAAE,KAAS,GACV;EAET,IAAM,IAAI,GAIN,GACF,IAAgB,EAAM,GAAG,CAAK;EAuBhC,OAtBI,KACF,IAAY,IAAI,EAAM,GACtB,OAAO,OAAO,EAAU,GAAG,EAAc,CAAC,GAC1C,EAAU,GAAG,KAAK,MAAM,EAAU,IAAI,EAAc,EAAE,GACtD,EAAU,KAAK,EAAc,IAC7B,EAAU,IAAI,EAAc,KAE5B,IAAY,IAAI,EAAM,GAEpB,MAEE,MACE,EAAU,KAAK,OAAO,EAAU,KAAM,WAExC,GAAY,GADK,OAAO,OAAO,GAAc,EAAU,GAAG,CAAM,GAAG,CAC7C,GAAG,CAAM,IACtB,KACT,GAAY,GAAG,GAAO,CAAM,IAGhC,EAAU,IAAI,IAEhB,EAAM,EAAE,KAAS,GACV;CACT;AACF;AAWA,IAAM,KAAM,GAAO,GAAO,GAAM,GAAO,MAAW,EAAM,GAAG,GAAO,GAAM,GAAO,CAAM,GAU/E,KAAM,GAAO,GAAQ,GAAM,GAAO,MAAW,EAAM,GAAG,GAAQ,GAAM,GAAO,CAAM,GAUjF,MAAM,GAAO,GAAO,GAAM,GAAO,MAAW,EAAM,GAAG,GAAO,GAAM,GAAO,CAAM,GAU/E,KAAM,GAAO,GAAO,GAAM,GAAO,MAAW,EAAM,GAAG,GAAO,GAAM,GAAO,CAAM,GAQ/E,IAAO,QACP,KAAQ,SACR,KAAiB,kBACjB,KAAiB,kBAGjB,KAAY,aAGZ,KAAM,OAGN,KAAO,QAKP,KAAS,UAKT,KAAe,gBAGf,KAAM,OAGN,KAAK,MAGL,KAAK,MAKL,KAAY,aACZ,KAAa,cACb,KAAc,eACd,KAAe,gBACf,KAAY,aACZ,KAAa,cACb,KAAmB,oBACnB,KAAoB,qBACpB,KAAqB,sBACrB,KAAsB,uBACtB,KAAoB,qBACpB,KAAqB,sBACrB,KAAyB,0BACzB,KAA0B,2BAC1B,KAAoB,qBACpB,KAAuB,wBAGvB,KAAY,aACZ,KAAa,cACb,KAAW,YACX,IAAK,MACL,KAAY,aACZ,KAAW,YACX,KAAQ,SACR,IAAQ,SACR,KAAQ,SACR,KAAS,UACT,IAAM,OACN,KAAS,UACT,KAAc,eACd,IAAS,UACT,KAAU,WACV,KAAO,QACP,KAAO,QACP,KAAQ,SACR,KAAQ,SACR,KAAQ,SACR,KAAqB,sBAErB,KAAO,QACP,IAAQ,SACR,KAAQ,SACR,KAAa,cAGb,KAAU,SAGV,KAAM,OAER,KAAkB,uBAAO,OAAO;CACnC,WAAW;CACK;CACL;CACC;CACI;CACN;CACN;CACO;CACD;CACH;CACY;CACP;CACE;CACF;CACL;CACA;CACC;CACH;CACL,OAAO;CACC;CACK;CACS;CACF;CACD;CACC;CACC;CACb;CACW;CACK;CACb;CACP;CACC;CACa;CACP;CACE;CACF;CACF;CACH;CACA;CACC;CACA;CACA;CACa;CACK;CACjB;CACF;CACC;CACO;CACT;CACE;CACF;CACO;CACN;CACC;CACD;CACF;AACL,CAAC,GAGK,IAAe,SACf,KAAS,UACT,KAAQ,cAER,IAAQ,MACR,KAAQ,MAiBR,KAAK,MACL,KAAK,MACL,KAAkB,KAClB,KAAe,KACf,KAAqB,KAEvB,KAAO,MACT,KAAQ;AAuBV,SAAS,GAAO,IAAgB,CAAC,GAAG;CAGlC,IAAM,IAAS,CAAC;CAChB,EAAM,SAAS;CAEf,IAAM,IAAQ,IAAI,EAAM;CAiDxB,AAhDA,AACE,OAAO,GAAW,EAAW,GAE/B,AACE,OAAQ,GAAW,EAAY,GAIjC,EAAG,GAAO,KAAK,EAAU,GACzB,EAAG,GAAO,KAAK,EAAS,GACxB,EAAG,GAAO,KAAK,EAAU,GACzB,EAAG,GAAO,KAAK,EAAW,GAC1B,EAAG,GAAO,KAAK,EAAY,GAC3B,EAAG,GAAO,KAAK,EAAS,GACxB,EAAG,GAAO,KAAK,EAAU,GACzB,EAAG,GAAO,KAAK,EAAgB,GAC/B,EAAG,GAAO,KAAK,EAAiB,GAChC,EAAG,GAAO,KAAK,EAAkB,GACjC,EAAG,GAAO,KAAK,EAAmB,GAClC,EAAG,GAAO,KAAK,EAAiB,GAChC,EAAG,GAAO,KAAK,EAAkB,GACjC,EAAG,GAAO,KAAK,EAAsB,GACrC,EAAG,GAAO,KAAK,EAAuB,GACtC,EAAG,GAAO,KAAK,EAAiB,GAChC,EAAG,GAAO,KAAK,EAAoB,GACnC,EAAG,GAAO,KAAK,EAAS,GACxB,EAAG,GAAO,KAAK,EAAQ,GACvB,EAAG,GAAO,KAAK,CAAE,GACjB,EAAG,GAAO,KAAK,EAAQ,GACvB,EAAG,GAAO,KAAK,EAAK,GACpB,EAAG,GAAO,KAAK,CAAK,GACpB,EAAG,GAAO,KAAK,EAAK,GACpB,EAAG,GAAO,KAAK,EAAM,GACrB,EAAG,GAAO,KAAK,CAAG,GAClB,EAAG,GAAO,KAAK,EAAM,GACrB,EAAG,GAAO,KAAK,EAAW,GAC1B,EAAG,GAAO,KAAK,CAAM,GACrB,EAAG,GAAO,KAAK,EAAO,GACtB,EAAG,GAAO,KAAK,EAAI,GACnB,EAAG,GAAO,KAAK,EAAI,GACnB,EAAG,GAAO,KAAK,EAAK,GACpB,EAAG,GAAO,KAAK,EAAK,GACpB,EAAG,GAAO,MAAK,EAAK,GACpB,EAAG,GAAO,KAAK,CAAK,GACpB,EAAG,GAAO,KAAK,EAAI,GACnB,EAAG,GAAO,KAAK,EAAK,GACpB,EAAG,GAAO,KAAK,EAAU,GACzB,EAAG,GAAO,MAAM,EAAS,GACzB,EAAG,GAAO,KAAK,EAAkB;CACjC,IAAM,IAAM,EAAG,GAAO,GAAO,IAAK,GAC/B,KAAU,GACb,CAAC;CACD,EAAG,GAAK,GAAO,CAAG;CAClB,IAAM,IAAe,EAAG,GAAK,GAAc,IAAgB,GACxD,KAAe,GAClB,CAAC,GACK,IAAe,EAAG,GAAK,IAAQ,IAAgB,GAClD,KAAe,GAClB,CAAC,GAGK,IAAO,EAAG,GAAO,GAAc,GAAM,GACxC,KAAQ,GACX,CAAC;CAID,AAHA,EAAG,GAAM,GAAO,CAAY,GAC5B,EAAG,GAAM,GAAc,CAAI,GAC3B,EAAG,GAAc,GAAO,CAAY,GACpC,EAAG,GAAc,GAAc,CAAY;CAG3C,IAAM,IAAQ,EAAG,GAAO,IAAQ,IAAO,GACpC,KAAQ,GACX,CAAC;CAMD,AALA,EAAG,GAAO,CAAY,GACtB,EAAG,GAAO,GAAO,CAAY,GAC7B,EAAG,GAAO,IAAQ,CAAK,GACvB,EAAG,GAAc,GAAO,CAAY,GACpC,EAAG,GAAc,CAAY,GAC7B,EAAG,GAAc,IAAQ,CAAY;CAKrC,IAAM,IAAK,EAAG,GAAO,IAAI,IAAI,GAC1B,KAAa,GAChB,CAAC,GACK,IAAK,EAAG,GAAO,IAAI,IAAI,GAC1B,KAAa,GAChB,CAAC,GACK,IAAK,EAAG,GAAO,IAAO,IAAI,GAC7B,KAAa,GAChB,CAAC;CAQD,AAPA,EAAG,GAAO,IAAoB,CAAE,GAChC,EAAG,GAAI,IAAI,CAAE,GACb,EAAG,GAAI,IAAoB,CAAE,GAC7B,EAAG,GAAI,IAAO,CAAE,GAChB,EAAG,GAAI,EAAE,GACT,EAAG,GAAI,EAAE,GACT,EAAG,GAAI,IAAO,CAAE,GAChB,EAAG,GAAI,IAAoB,CAAE;CAI7B,IAAM,IAAQ,EAAG,GAAO,IAAO,IAAS,GACrC,KAAQ,GACX,CAAC;CAGD,AAFA,EAAG,GAAO,GAAG,GACb,EAAG,GAAO,IAAO,CAAK,GACtB,EAAG,GAAO,IAAiB,CAAK;CAGhC,IAAM,IAAc,EAAG,GAAO,EAAY;CAE1C,AADA,EAAG,GAAa,GAAG,GACnB,EAAG,GAAa,IAAO,CAAK;CAK5B,IAAM,IAAS,CAAC,CAAC,GAAc,CAAI,GAAG,CAAC,GAAO,CAAY,CAAC,GACrD,IAAU;EAAC,CAAC,GAAc,IAAI;EAAG,CAAC,IAAQ,CAAK;EAAG,CAAC,GAAO,CAAY;CAAC;CAC7E,KAAK,IAAI,IAAI,GAAG,IAAI,GAAK,QAAQ,KAC/B,EAAO,GAAO,GAAK,IAAI,IAAK,GAAM,CAAM;CAE1C,KAAK,IAAI,IAAI,GAAG,IAAI,GAAM,QAAQ,KAChC,EAAO,GAAO,GAAM,IAAI,IAAM,IAAO,CAAO;CA8B9C,AA5BA,GAAY,IAAK;EACf,KAAK;EACL,OAAO;CACT,GAAG,CAAM,GACT,GAAY,IAAM;EAChB,MAAM;EACN,OAAO;CACT,GAAG,CAAM,GAKT,EAAO,GAAO,QAAQ,IAAQ,GAAM,CAAM,GAC1C,EAAO,GAAO,UAAU,IAAQ,GAAM,CAAM,GAC5C,EAAO,GAAO,QAAQ,IAAc,GAAM,CAAM,GAChD,EAAO,GAAO,SAAS,IAAc,GAAM,CAAM,GACjD,EAAO,GAAO,OAAO,IAAc,GAAM,CAAM,GAC/C,EAAO,GAAO,QAAQ,IAAc,GAAM,CAAM,GAChD,GAAY,IAAQ;EAClB,QAAQ;EACR,OAAO;CACT,GAAG,CAAM,GACT,GAAY,IAAc;EACxB,aAAa;EACb,OAAO;CACT,GAAG,CAAM,GAGT,IAAgB,EAAc,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;CACjE,KAAK,IAAI,IAAI,GAAG,IAAI,EAAc,QAAQ,KAAK;EAC7C,IAAM,IAAM,EAAc,GAAG,IAEvB,IADqB,EAAc,GAAG,KACT,GAChC,KAAS,GACZ,IAAI,GACD,KAAc,GACjB;EAUA,AATI,EAAI,QAAQ,GAAG,KAAK,IACtB,EAAM,MAAU,KACN,EAAa,KAAK,CAAG,IAEtB,EAAM,KAAK,CAAG,IACvB,EAAM,MAAgB,KAEtB,EAAM,MAAS,KAJf,EAAM,MAAW,IAMnB,GAAG,GAAO,GAAK,GAAK,CAAK;CAC3B;CASA,OANA,GAAG,GAAO,aAAa,IAAW,EAChC,OAAO,GACT,CAAC,GAGD,EAAM,KAAK,IAAI,EAAM,EAAG,GACjB;EACL,OAAO;EACP,QAAQ,OAAO,OAAO,EACpB,UACF,GAAG,EAAE;CACP;AACF;AAWA,SAAS,GAAM,GAAO,GAAK;CAKzB,IAAM,IAAW,GAAc,EAAI,QAAQ,WAAU,MAAK,EAAE,YAAY,CAAC,CAAC,GACpE,IAAY,EAAS,QACrB,IAAS,CAAC,GAIZ,IAAS,GAGT,IAAa;CAGjB,OAAO,IAAa,IAAW;EAC7B,IAAI,IAAQ,GACR,IAAY,MACZ,IAAc,GACd,IAAkB,MAClB,IAAe,IACf,IAAoB;EACxB,OAAO,IAAa,MAAc,IAAY,EAAM,GAAG,EAAS,EAAW,KAczE,AAbA,IAAQ,GAGJ,EAAM,QAAQ,KAChB,IAAe,GACf,IAAoB,GACpB,IAAkB,KACT,KAAgB,MACzB,KAAgB,EAAS,GAAY,QACrC,MAEF,KAAe,EAAS,GAAY,QACpC,KAAU,EAAS,GAAY,QAC/B;EASF,AALA,KAAU,GACV,KAAc,GACd,KAAe,GAGf,EAAO,KAAK;GACV,GAAG,EAAgB;GAEnB,GAAG,EAAI,MAAM,IAAS,GAAa,CAAM;GAEzC,GAAG,IAAS;GAEZ,GAAG;EACL,CAAC;CACH;CACA,OAAO;AACT;AAaA,SAAS,GAAc,GAAK;CAC1B,IAAM,IAAS,CAAC,GACV,IAAM,EAAI,QACZ,IAAQ;CACZ,OAAO,IAAQ,IAAK;EAClB,IAAI,IAAQ,EAAI,WAAW,CAAK,GAC5B,GACA,IAAO,IAAQ,SAAU,IAAQ,SAAU,IAAQ,MAAM,MAAQ,IAAS,EAAI,WAAW,IAAQ,CAAC,KAAK,SAAU,IAAS,QAAS,EAAI,KACzI,EAAI,MAAM,GAAO,IAAQ,CAAC;EAE5B,AADA,EAAO,KAAK,CAAI,GAChB,KAAS,EAAK;CAChB;CACA,OAAO;AACT;AAWA,SAAS,EAAO,GAAO,GAAO,GAAG,GAAU,GAAI;CAC7C,IAAI,GACE,IAAM,EAAM;CAClB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAM,GAAG,KAAK;EAChC,IAAM,IAAO,EAAM;EAQnB,AAPI,EAAM,EAAE,KACV,IAAO,EAAM,EAAE,MAEf,IAAO,IAAI,EAAM,CAAQ,GACzB,EAAK,KAAK,EAAG,MAAM,GACnB,EAAM,EAAE,KAAQ,IAElB,IAAQ;CACV;CAIA,OAHA,IAAO,IAAI,EAAM,CAAC,GAClB,EAAK,KAAK,EAAG,MAAM,GACnB,EAAM,EAAE,EAAM,IAAM,MAAM,GACnB;AACT;AAQA,SAAS,GAAW,GAAS;CAC3B,IAAM,IAAQ,CAAC,GACT,IAAQ,CAAC,GACX,IAAI;CAER,OAAO,IAAI,EAAQ,SAAQ;EACzB,IAAI,IAAgB;EACpB,OAAO,aAAO,QAAQ,EAAQ,IAAI,EAAc,KAAK,IACnD;EAEF,IAAI,IAAgB,GAAG;GACrB,EAAM,KAAK,EAAM,KAAK,EAAE,CAAC;GACzB,KAAK,IAAI,IAAW,SAAS,EAAQ,UAAU,GAAG,IAAI,CAAa,GAAG,EAAE,GAAG,IAAW,GAAG,KACvF,EAAM,IAAI;GAEZ,KAAK;EACP,OAEE,AADA,EAAM,KAAK,EAAQ,EAAE,GACrB;CAEJ;CACA,OAAO;AACT;AAmFA,IAAM,KAAW;CACf,iBAAiB;CACjB,QAAQ;CACR,QAAQ;CACR,YAAY;CACZ,OAAO;CACP,SAAS;CACT,QAAQ;CACR,KAAK;CACL,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,YAAY,CAAC;CACb,QAAQ;AACV;AAYA,SAAS,GAAQ,GAAM,IAAgB,MAAM;CAC3C,IAAI,IAAI,OAAO,OAAO,CAAC,GAAG,EAAQ;CAClC,AAAI,MACF,IAAI,OAAO,OAAO,GAAG,aAAgB,KAAU,EAAK,IAAI,CAAI;CAI9D,IAAM,IAAc,EAAE,YAChB,IAAuB,CAAC;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAY,QAAQ,KACtC,EAAqB,KAAK,EAAY,GAAG,YAAY,CAAC;CAOxD,AAJA,KAAK,IAAI,GACL,MACF,KAAK,gBAAgB,IAEvB,KAAK,aAAa;AACpB;AACA,GAAQ,YAAY;CAClB,GAAG;CAIH,YAAY,CAAC;CAKb,cAAc,GAAI;EAChB,OAAO;CACT;CAOA,MAAM,GAAO;EACX,OAAO,KAAK,IAAI,YAAY,EAAM,SAAS,GAAG,CAAK;CACrD;CAcA,IAAI,GAAK,GAAU,GAAO;EACxB,IAAM,IAAa,KAAY,MAC3B,IAAS,KAAK,EAAE;EAYpB,OAXK,MAGD,OAAO,KAAW,YACpB,IAAS,EAAM,KAAK,IAAS,EAAO,EAAM,KAAK,GAAS,IACpD,OAAO,KAAW,cAAc,MAClC,IAAS,EAAO,GAAU,CAAK,MAExB,OAAO,KAAW,cAAc,MACzC,IAAS,EAAO,GAAU,EAAM,GAAG,CAAK,IAEnC;CACT;CAQA,OAAO,GAAK,GAAU,GAAO;EAC3B,IAAI,IAAM,KAAK,EAAE;EAIjB,OAHI,OAAO,KAAQ,cAAc,KAAY,SAC3C,IAAM,EAAI,GAAU,EAAM,GAAG,CAAK,IAE7B;CACT;CAQA,OAAO,GAAO;EACZ,IAAM,IAAK,EAAM,OAAO,IAAI;EAE5B,QADiB,KAAK,IAAI,UAAU,MAAM,CAAK,KAAK,KAAK,eACzC,GAAI,EAAM,GAAG,CAAK;CACpC;AACF;AACA,SAAS,GAAK,GAAK;CACjB,OAAO;AACT;AAiBA,SAAS,GAAW,GAAO,GAAQ;CAGjC,AAFA,KAAK,IAAI,SACT,KAAK,IAAI,GACT,KAAK,KAAK;AACZ;AAeA,GAAW,YAAY;CACrB,QAAQ;CAKR,WAAW;EACT,OAAO,KAAK;CACd;CAOA,OAAO,GAAQ;EACb,OAAO,KAAK,SAAS;CACvB;CAKA,kBAAkB,GAAS;EACzB,IAAM,IAAM,KAAK,SAAS,GACpB,IAAW,EAAQ,IAAI,YAAY,GAAK,IAAI,GAC5C,IAAY,EAAQ,IAAI,UAAU,GAAK,IAAI;EACjD,OAAO,KAAY,EAAU,SAAS,IAAW,EAAU,UAAU,GAAG,CAAQ,IAAI,MAAM;CAC5F;CAMA,gBAAgB,GAAS;EACvB,OAAO,EAAQ,IAAI,cAAc,KAAK,OAAO,EAAQ,IAAI,iBAAiB,CAAC,GAAG,IAAI;CACpF;CAKA,aAAa;EACX,OAAO,KAAK,GAAG,GAAG;CACpB;CAMA,WAAW;EACT,OAAO,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG;CACrC;CAUA,SAAS,IAAW,GAAS,iBAAiB;EAC5C,OAAO;GACL,MAAM,KAAK;GACX,OAAO,KAAK,SAAS;GACrB,QAAQ,KAAK;GACb,MAAM,KAAK,OAAO,CAAQ;GAC1B,OAAO,KAAK,WAAW;GACvB,KAAK,KAAK,SAAS;EACrB;CACF;CAKA,kBAAkB,GAAS;EACzB,OAAO;GACL,MAAM,KAAK;GACX,OAAO,KAAK,kBAAkB,CAAO;GACrC,QAAQ,KAAK;GACb,MAAM,KAAK,gBAAgB,CAAO;GAClC,OAAO,KAAK,WAAW;GACvB,KAAK,KAAK,SAAS;EACrB;CACF;CAMA,SAAS,GAAS;EAChB,OAAO,EAAQ,IAAI,YAAY,KAAK,SAAS,GAAG,IAAI;CACtD;CAKA,OAAO,GAAS;EACd,IAAM,IAAQ,MACR,IAAO,KAAK,OAAO,EAAQ,IAAI,iBAAiB,CAAC,GACjD,IAAgB,EAAQ,IAAI,cAAc,GAAM,IAAI,GACpD,IAAU,EAAQ,IAAI,WAAW,GAAM,CAAK,GAC5C,IAAU,KAAK,kBAAkB,CAAO,GACxC,IAAa,CAAC,GACd,IAAY,EAAQ,IAAI,aAAa,GAAM,CAAK,GAChD,IAAS,EAAQ,IAAI,UAAU,GAAM,CAAK,GAC1C,IAAM,EAAQ,IAAI,OAAO,GAAM,CAAK,GACpC,IAAQ,EAAQ,OAAO,cAAc,GAAM,CAAK,GAChD,IAAiB,EAAQ,OAAO,UAAU,GAAM,CAAK;EAc3D,OAbA,EAAW,OAAO,GACd,MACF,EAAW,QAAQ,IAEjB,MACF,EAAW,SAAS,IAElB,MACF,EAAW,MAAM,IAEf,KACF,OAAO,OAAO,GAAY,CAAK,GAE1B;GACL;GACA;GACA;GACA;EACF;CACF;AACF;AAQA,SAAS,GAAiB,GAAM,GAAO;CACrC,MAAM,UAAc,GAAW;EAC7B,YAAY,GAAO,GAAQ;GAEzB,AADA,MAAM,GAAO,CAAM,GACnB,KAAK,IAAI;EACX;CACF;CACA,KAAK,IAAM,KAAK,GACd,EAAM,UAAU,KAAK,EAAM;CAG7B,OADA,EAAM,IAAI,GACH;AACT;AAKA,IAAM,KAAQ,GAAiB,SAAS;CACtC,QAAQ;CACR,SAAS;EACP,OAAO,YAAY,KAAK,SAAS;CACnC;AACF,CAAC,GAKKC,KAAO,GAAiB,MAAM,GAM9B,KAAK,GAAiB,IAAI,GAM1B,KAAM,GAAiB,OAAO;CAClC,QAAQ;CAQR,OAAO,IAAS,GAAS,iBAAiB;EAExC,OAAO,KAAK,YAAY,IAAI,KAAK,IAAI,GAAG,EAAO,KAAK,KAAK;CAC3D;CAKA,cAAc;EACZ,IAAM,IAAS,KAAK;EACpB,OAAO,EAAO,UAAU,KAAK,EAAO,GAAG,MAAM,MAAa,EAAO,GAAG,MAAM;CAC5E;AACF,CAAC,GA4BK,KAAY,MAAO,IAAI,EAAM,CAAG;AAMtC,SAAS,GAAO,EACd,aACC;CAED,IAAM,IAAc,EAAO,OAAO,OAAO;EAAC;EAAW;EAAU;EAAI;EAAW;EAAU;EAAO;EAAQ;EAAQ;EAAQ;EAAK;EAAS;EAAM;EAAM;EAAO;EAAO;EAAK;EAAO;CAAU,CAAC,GAKhL,IAAiB;EAAC;EAAY;EAAO;EAAO;EAAK;EAAa;EAAS;EAAO;EAAO;EAAM;EAAkB;EAAmB;EAAW;EAAY;EAAc;EAAa;EAAW;EAAY;EAAoB;EAAqB;EAAmB;EAAoB;EAAwB;EAAyB;EAAmB;CAAoB,GAIjX,IAAqB;EAAC;EAAW;EAAY;EAAU;EAAW;EAAU;EAAO;EAAQ;EAAQ;EAAQ;EAAW;EAAY;EAAS;EAAM;EAAM;EAAO;EAAO;EAAO;EAAK;EAAO;CAAU,GAMlM,IAAQ,EAAU,GAClB,IAAY,EAAG,GAAO,EAAK;CAEjC,AADA,EAAG,GAAW,GAAoB,CAAS,GAC3C,EAAG,GAAW,EAAO,QAAQ,CAAS;CACtC,IAAM,IAAS,EAAU,GACvB,IAAS,EAAU,GACnB,IAAc,EAAU;CAM1B,AALA,EAAG,GAAO,EAAO,QAAQ,CAAM,GAC/B,EAAG,GAAO,EAAO,QAAQ,CAAM,GAC/B,EAAG,GAAO,EAAO,aAAa,CAAW,GAEzC,EAAG,GAAQ,GAAoB,CAAS,GACxC,EAAG,GAAQ,EAAO,QAAQ,CAAM;CAChC,IAAM,IAAc,EAAG,GAAQ,CAAE;CAMjC,AAJA,EAAG,GAAW,GAAI,CAAW,GAG7B,EAAG,GAAQ,GAAI,CAAW,GAC1B,EAAG,GAAa,GAAI,CAAW;CAC/B,IAAM,IAAe,EAAG,GAAW,CAAG;CAEtC,AADA,EAAG,GAAc,GAAoB,CAAS,GAC9C,EAAG,GAAc,EAAO,QAAQ,CAAS;CACzC,IAAM,IAAc,EAAU;CAE9B,AADA,EAAG,GAAa,EAAO,QAAQ,CAAW,GAC1C,EAAG,GAAa,EAAO,QAAQ,CAAW;CAC1C,IAAM,IAAiB,EAAG,GAAa,CAAG;CAC1C,EAAG,GAAgB,EAAO,QAAQ,CAAW;CAC7C,IAAM,IAAU,EAAU,EAAK;CAG/B,AAFA,EAAG,GAAgB,EAAO,KAAK,CAAO,GACtC,EAAG,GAAgB,EAAO,MAAM,CAAO,GACvC,EAAG,GAAa,IAAW,CAAO;CAGlC,IAAM,IAAoB,EAAG,GAAa,CAAM;CAKhD,AAJA,EAAG,GAAmB,GAAQ,CAAiB,GAC/C,EAAG,GAAmB,EAAO,QAAQ,CAAW,GAChD,EAAG,GAAS,EAAO,QAAQ,CAAW,GACtC,EAAG,GAAS,GAAK,CAAc,GAC/B,EAAG,GAAS,GAAQ,CAAiB;CAIrC,IAAM,IAAe,EAAG,GAAQ,CAAM,GAChC,IAAY,EAAG,GAAQ,CAAG;CAIhC,AAHA,EAAG,GAAc,GAAQ,CAAY,GACrC,EAAG,GAAc,EAAO,QAAQ,CAAM,GACtC,EAAG,GAAW,GAAoB,CAAS,GAC3C,EAAG,GAAW,EAAO,QAAQ,CAAM;CACnC,IAAM,IAAe,EAAU,EAAG;CAOlC,AANA,EAAG,GAAW,EAAO,KAAK,CAAY,GACtC,EAAG,GAAW,EAAO,MAAM,CAAY,GACvC,EAAG,GAAc,EAAO,QAAQ,CAAM,GACtC,EAAG,GAAc,GAAoB,CAAS,GAC9C,EAAG,GAAc,GAAK,CAAS,GAC/B,EAAG,GAAc,GAAQ,CAAY,GACrC,EAAG,GAAc,GAAI,CAAW;CAChC,IAAM,IAAoB,EAAG,GAAc,CAAK,GAC1C,IAAwB,EAAU,EAAG;CAC3C,EAAG,GAAmB,EAAO,SAAS,CAAqB;CAG3D,IAAM,IAAQ,EAAU,EAAG,GAGrB,IAAe,EAAU;CAW/B,AARA,EAAG,GAAO,GAAa,CAAK,GAC5B,EAAG,GAAO,GAAgB,CAAY,GACtC,EAAG,GAAc,GAAa,CAAK,GACnC,EAAG,GAAc,GAAgB,CAAY,GAI7C,EAAG,GAAc,GAAO,CAAK,GAC7B,EAAG,GAAuB,GAAO,CAAK;CAGtC,IAAM,IAAc,EAAG,GAAQ,CAAK,GAI9B,IAAY,EAFY,EADL,EAAG,GAAa,CACO,GAAG,CAEV,GAAG,CAAK;CAgBjD,AAbA,EAAG,GAAQ,EAAO,QAAQ,CAAM,GAChC,EAAG,GAAQ,GAAK,CAAS,GACzB,EAAG,GAAQ,GAAQ,CAAY,GAC/B,EAAG,GAAa,EAAO,QAAQ,CAAM,GACrC,EAAG,GAAa,GAAK,CAAS,GAC9B,EAAG,GAAa,GAAQ,CAAY,GAGpC,EAAG,GAAa,EAAO,QAAQ,CAAK,GACpC,EAAG,GAAa,GAAO,CAAK,GAC5B,EAAG,GAAa,IAAO,CAAK,GAC5B,EAAG,GAAW,EAAO,QAAQ,CAAK,GAClC,EAAG,GAAW,GAAa,CAAK,GAChC,EAAG,GAAW,GAAO,CAAK;CAC1B,IAAM,IAAe;EAAC,CAAC,IAAW,EAAU;EAE5C,CAAC,IAAa,EAAY;EAE1B,CAAC,IAAW,EAAU;EAEtB,CAAC,IAAkB,EAAiB;EAEpC,CAAC,IAAoB,EAAmB;EAExC,CAAC,IAAmB,EAAkB;EAEtC,CAAC,IAAwB,EAAuB;EAEhD,CAAC,IAAmB,EAAoB;CACxC;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,EAAa,QAAQ,KAAK;EAC5C,IAAM,CAAC,GAAM,KAAS,EAAa,IAC7B,IAAU,EAAG,GAAO,CAAI;EAG9B,EAAG,GAAc,GAAM,CAAO;EAK9B,IAAM,IAAW,EAAU,EAAG;EAC9B,EAAG,GAAS,GAAa,CAAQ;EACjC,IAAM,IAAc,EAAU;EAgB9B,AAfA,EAAG,GAAS,GAAgB,CAAW,GAKvC,EAAG,GAAS,GAAO,CAAK,GAGxB,EAAG,GAAU,GAAa,CAAQ,GAClC,EAAG,GAAU,GAAgB,CAAW,GACxC,EAAG,GAAa,GAAa,CAAQ,GACrC,EAAG,GAAa,GAAgB,CAAW,GAG3C,EAAG,GAAU,GAAO,CAAK,GACzB,EAAG,GAAa,GAAO,CAAK;CAC9B;CAIA,OAHA,EAAG,GAAO,IAAW,CAAY,GACjC,EAAG,GAAO,IAAI,EAAE,GAET;EACL,OAAO;EACP,QAAQ;CACV;AACF;AAYA,SAAS,GAAI,GAAO,GAAO,GAAQ;CACjC,IAAI,IAAM,EAAO,QACb,IAAS,GACT,IAAS,CAAC,GACV,IAAa,CAAC;CAClB,OAAO,IAAS,IAAK;EACnB,IAAI,IAAQ,GACR,IAAc,MACd,IAAY,MACZ,IAAc,GACd,IAAkB,MAClB,IAAe;EACnB,OAAO,IAAS,KAAO,EAAE,IAAc,EAAM,GAAG,EAAO,GAAQ,CAAC,KAG9D,EAAW,KAAK,EAAO,IAAS;EAElC,OAAO,IAAS,MAAQ,IAAY,KAAe,EAAM,GAAG,EAAO,GAAQ,CAAC,KAa1E,AAXA,IAAc,MACd,IAAQ,GAGJ,EAAM,QAAQ,KAChB,IAAe,GACf,IAAkB,KACT,KAAgB,KACzB,KAEF,KACA;EAEF,IAAI,IAAe,GAKjB,AADA,KAAU,GACN,IAAS,MACX,EAAW,KAAK,EAAO,EAAO,GAC9B;OAEG;GAUL,AAPI,EAAW,SAAS,MACtB,EAAO,KAAK,GAAeA,IAAM,GAAO,CAAU,CAAC,GACnD,IAAa,CAAC,IAIhB,KAAU,GACV,KAAe;GAGf,IAAM,IAAQ,EAAgB,GACxB,IAAY,EAAO,MAAM,IAAS,GAAa,CAAM;GAC3D,EAAO,KAAK,GAAe,GAAO,GAAO,CAAS,CAAC;EACrD;CACF;CAMA,OAHI,EAAW,SAAS,KACtB,EAAO,KAAK,GAAeA,IAAM,GAAO,CAAU,CAAC,GAE9C;AACT;AAUA,SAAS,GAAe,GAAO,GAAO,GAAQ;CAC5C,IAAM,IAAW,EAAO,GAAG,GACrB,IAAS,EAAO,EAAO,SAAS,GAAG;CAEzC,OAAO,IAAI,EADG,EAAM,MAAM,GAAU,CACf,GAAG,CAAM;AAChC;AAEA,IAAM,KAAO,OAAO,UAAY,OAAe,WAAW,QAAQ,eAAe,CAAC,IAC5E,KAAa,iHAGb,IAAO;CACX,SAAS;CACT,QAAQ;CACR,YAAY,CAAC;CACb,aAAa,CAAC;CACd,eAAe,CAAC;CAChB,aAAa;AACf;AA6BA,SAAS,KAAQ;CAQf,OAPA,EAAM,SAAS,CAAC,GAChB,EAAK,UAAU,MACf,EAAK,SAAS,MACd,EAAK,aAAa,CAAC,GACnB,EAAK,cAAc,CAAC,GACpB,EAAK,gBAAgB,CAAC,GACtB,EAAK,cAAc,IACZ;AACT;AAyDA,SAAS,GAAuB,GAAQ,IAAqB,IAAO;CAIlE,IAHI,EAAK,eACP,GAAK,qEAAqE,EAAO,IAAI,IAAY,GAE/F,CAAC,2BAA2B,KAAK,CAAM,GACzC,MAAU,MAAM,+JAGC;CAEnB,EAAK,cAAc,KAAK,CAAC,GAAQ,CAAkB,CAAC;AACtD;AAMA,SAAS,KAAO;CAEd,EAAK,UAAU,GAAO,EAAK,aAAa;CACxC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,WAAW,QAAQ,KAC1C,EAAK,WAAW,GAAG,GAAG,EACpB,SAAS,EAAK,QAChB,CAAC;CAIH,EAAK,SAAS,GAAO,EAAK,QAAQ,MAAM;CACxC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,YAAY,QAAQ,KAC3C,EAAK,YAAY,GAAG,GAAG;EACrB,SAAS,EAAK;EACd,QAAQ,EAAK;CACf,CAAC;CAGH,OADA,EAAK,cAAc,IACZ;AACT;AAOA,SAAS,GAAS,GAAK;CAIrB,OAHK,EAAK,eACR,GAAK,GAEA,GAAI,EAAK,OAAO,OAAO,GAAK,GAAM,EAAK,QAAQ,OAAO,CAAG,CAAC;AACnE;AACA,GAAS,OAAO;AAUhB,SAAS,GAAK,GAAK,IAAO,MAAM,IAAO,MAAM;CAC3C,IAAI,KAAQ,OAAO,KAAS,UAAU;EACpC,IAAI,GACF,MAAM,MAAM,gCAAgC,EAAK,mBAAmB;EAGtE,AADA,IAAO,GACP,IAAO;CACT;CACA,IAAM,IAAU,IAAI,GAAQ,CAAI,GAC1B,IAAS,GAAS,CAAG,GACrB,IAAW,CAAC;CAClB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KAAK;EACtC,IAAM,IAAQ,EAAO;EACrB,AAAI,EAAM,WAAW,CAAC,KAAQ,EAAM,MAAM,MAAS,EAAQ,MAAM,CAAK,KACpE,EAAS,KAAK,EAAM,kBAAkB,CAAO,CAAC;CAElD;CACA,OAAO;AACT;;;AC1wDA,IAAIC,KAA6B,0BAC7BC,KAA2B,IAAI,OAAOD,EAA0B,GAChEE,KAAmC,OAAO,GAAGF,GAA2B,EAAE,GAC1EG,KAAkC,IAAI,OAAOH,IAA4B,GAAG;AAGhF,SAASI,GAAqB,GAAQ;CAOpC,OANI,EAAO,WAAW,IACb,EAAO,GAAG,SAEf,EAAO,WAAW,KAAK,EAAO,GAAG,SAC5B,CAAC,MAAM,IAAI,EAAE,SAAS,EAAO,GAAG,QAAQ,EAAO,GAAG,KAAK,IAEzD;AACT;AACA,SAASC,GAAS,GAAS;CACzB,OAAO,IAAI,EAAO;EAChB,KAAK,IAAI,EAAU,UAAU;EAC7B,oBAAoB,GAAc,GAAU,MAAa;GACvD,IAAM,IAAa,EAAa,MAAM,MAAgB,EAAY,UAAU,KAAK,CAAC,EAAS,IAAI,GAAG,EAAS,GAAG,GACxG,IAAkB,EAAa,MAAM,MAAgB,EAAY,QAAQ,iBAAiB,CAAC;GACjG,IAAI,CAAC,KAAc,GACjB;GAEF,IAAM,EAAE,UAAO;GAGf,OAFkB,GAAwB,EAAS,KAAK,CAAC,GAAG,CAAY,CAC/B,CACnC,EAAE,SAAS,EAAE,kBAAe;IAChC,IAAM,IAAuB,GAAoB,EAAS,KAAK,IAAW,MAAS,EAAK,WAAW,GAC/F,GACA;IACJ,IAAI,EAAqB,SAAS,GAEhC,AADA,IAAY,EAAqB,IACjC,IAAuB,EAAS,IAAI,YAClC,EAAU,KACV,EAAU,MAAM,EAAU,KAAK,UAC/B,KAAK,GACL,GACF;SACK,IAAI,EAAqB,QAAQ;KACtC,IAAM,IAAU,EAAS,IAAI,YAAY,EAAS,MAAM,EAAS,IAAI,KAAK,GAAG;KAC7E,IAAI,CAACH,GAA6B,KAAK,CAAO,GAC5C;KAGF,AADA,IAAY,EAAqB,IACjC,IAAuB,EAAS,IAAI,YAAY,EAAU,KAAK,EAAS,IAAI,KAAK,GAAG,GAAG;IACzF;IACA,IAAI,KAAa,GAAsB;KACrC,IAAM,IAAwB,EAAqB,MAAMD,EAAwB,EAAE,OAAO,OAAO;KACjG,IAAI,EAAsB,UAAU,GAClC,OAAO;KAET,IAAM,IAAsB,EAAsB,EAAsB,SAAS,IAC3E,IAAyB,EAAU,MAAM,EAAqB,YAAY,CAAmB;KACnG,IAAI,CAAC,GACH,OAAO;KAET,IAAM,IAAmB,GAAS,CAAmB,EAAE,KAAK,MAAM,EAAE,SAAS,EAAQ,eAAe,CAAC;KACrG,IAAI,CAACG,GAAqB,CAAgB,GACxC,OAAO;KAET,EAAiB,QAAQ,MAAS,EAAK,MAAM,EAAE,KAAK,OAAU;MAC5D,GAAG;MACH,MAAM,IAAyB,EAAK,QAAQ;MAC5C,IAAI,IAAyB,EAAK,MAAM;KAC1C,EAAE,EAAE,QAAQ,MACL,EAAS,OAAO,MAAM,OAGpB,CAAC,EAAS,IAAI,aAAa,EAAK,MAAM,EAAK,IAAI,EAAS,OAAO,MAAM,IAAI,IAFvE,EAGV,EAAE,QAAQ,MAAS,EAAQ,SAAS,EAAK,KAAK,CAAC,EAAE,QAAQ,MAAS,EAAQ,eAAe,EAAK,KAAK,CAAC,EAAE,SAAS,MAAS;MACnH,GAAgB,EAAK,MAAM,EAAK,IAAI,EAAS,GAAG,EAAE,MAAM,MAAS,EAAK,KAAK,SAAS,EAAQ,IAAI,KAGpG,EAAG,QACD,EAAK,MACL,EAAK,IACL,EAAQ,KAAK,OAAO,EAClB,MAAM,EAAK,KACb,CAAC,CACH;KACF,CAAC;IACH;GACF,CAAC,GACI,EAAG,MAAM,QAGd,OAAO;EACT;CACF,CAAC;AACH;AAKA,SAASE,GAAa,GAAS;CAC7B,OAAO,IAAIC,EAAQ;EACjB,KAAK,IAAIC,EAAW,iBAAiB;EACrC,OAAO,EACL,cAAc,GAAM,GAAK,MAAU;GAKjC,IAHI,EAAM,WAAW,KAGjB,CAAC,EAAK,UACR,OAAO;GAET,IAAI,IAAO;GACX,IAAI,EAAM,kBAAkB,mBAC1B,IAAO,EAAM;QACR;IACL,IAAM,IAAS,EAAM;IACrB,IAAI,CAAC,GACH,OAAO;IAET,IAAM,IAAO,EAAQ,OAAO,KAAK;IAEjC,AADA,IAAO,EAAO,QAAQ,GAAG,GACrB,KAAQ,CAAC,EAAK,SAAS,CAAI,MAC7B,IAAO;GAEX;GACA,IAAI,CAAC,GACH,OAAO;GAET,IAAI,IAAU;GAKd,IAJI,EAAQ,yBAEV,IADsB,EAAQ,OAAO,SAAS,gBAAgB,EAAQ,KAAK,IACrD,IAEpB,EAAQ,aAAa;IACvB,IAAM,IAAQ,GAAc,EAAK,OAAO,EAAQ,KAAK,IAAI,GACnD,IAAa,EAAK,QAAqB,EAAM,MAC7C,IAAe,EAAK,UAAuB,EAAM;IACvD,AAAI,MACF,OAAO,KAAK,GAAM,CAAM,GACxB,IAAU;GAEd;GACA,OAAO;EACT,EACF;CACF,CAAC;AACH;AAKA,SAASC,GAAa,GAAS;CAC7B,OAAO,IAAIC,EAAQ;EACjB,KAAK,IAAIC,EAAW,iBAAiB;EACrC,OAAO,EACL,cAAc,GAAM,GAAQ,MAAU;GACpC,IAAM,EAAE,sBAAmB,GACrB,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,aAAU;GAClB,IAAI,GACF,OAAO;GAET,IAAI,IAAc;GAClB,EAAM,QAAQ,SAAS,MAAS;IAC9B,KAAe,EAAK;GACtB,CAAC;GACD,IAAM,IAAO,GAAK,GAAa,EAAE,iBAAiB,EAAQ,gBAAgB,CAAC,EAAE,MAC1E,MAAS,EAAK,UAAU,EAAK,UAAU,CAC1C;GAIA,OAHI,CAAC,KAAe,CAAC,KAAQ,MAAmB,KAAK,KAAK,CAAC,EAAe,EAAK,KAAK,IAC3E,KAEF,EAAQ,OAAO,SAAS,QAAQ,EAAQ,MAAM,EACnD,MAAM,EAAK,KACb,CAAC;EACH,EACF;CACF,CAAC;AACH;AAIA,SAASC,GAAa,GAAK,GAAW;CACpC,IAAM,IAAmB;EAAC;EAAQ;EAAS;EAAO;EAAQ;EAAU;EAAO;EAAU;EAAO;EAAO;CAAM;CASzG,OARI,KACF,EAAU,SAAS,MAAa;EAC9B,IAAM,IAAe,OAAO,KAAa,WAAW,IAAW,EAAS;EACxE,AAAI,KACF,EAAiB,KAAK,CAAY;CAEtC,CAAC,GAEI,CAAC,KAAO,EAAI,QAAQT,IAAiC,EAAE,EAAE,MAC1D,OAEF,UAAU,EAAiB,KAAK,GAAG,EAAE,0CACrC,GACF,CACF;AACF;AACA,IAAIU,KAAO,GAAK,OAAO;CACrB,MAAM;CACN,UAAU;CACV,aAAa;CACb,UAAU;CACV,WAAW;EAKT,AAJI,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ,mBACzC,KAAK,QAAQ,iBAAiB,KAAK,QAAQ,UAC3C,QAAQ,KAAK,qFAAqF,IAEpG,KAAK,QAAQ,UAAU,SAAS,MAAa;GAC3C,IAAI,OAAO,KAAa,UAAU;IAChC,GAAuB,CAAQ;IAC/B;GACF;GACA,GAAuB,EAAS,QAAQ,EAAS,eAAe;EAClE,CAAC;CACH;CACA,YAAY;EACV,GAAM;CACR;CACA,YAAY;EACV,OAAO,KAAK,QAAQ;CACtB;CACA,aAAa;EACX,OAAO;GACL,aAAa;GACb,sBAAsB;GACtB,aAAa;GACb,UAAU;GACV,WAAW,CAAC;GACZ,iBAAiB;GACjB,gBAAgB;IACd,QAAQ;IACR,KAAK;IACL,OAAO;GACT;GACA,eAAe,GAAK,MAAQ,CAAC,CAACD,GAAa,GAAK,EAAI,SAAS;GAC7D,WAAW,MAAQ,CAAC,CAAC;GACrB,iBAAiB,MAAQ;IACvB,IAAM,IAAc,2BAA2B,KAAK,CAAG,GACjD,IAAmB,uBAAuB,KAAK,CAAG;IACxD,IAAI,KAAe,KAAoB,CAAC,EAAI,SAAS,GAAG,GACtD,OAAO;IAGT,IAAM,KADqB,EAAI,SAAS,GAAG,IAAI,EAAI,MAAM,GAAG,EAAE,IAAI,IAAI,GAClC,MAAM,QAAQ,EAAE;IAOpD,OAHA,EAHI,0BAA0B,KAAK,CAAQ,KAGvC,CAAC,KAAK,KAAK,CAAQ;GAIzB;EACF;CACF;CACA,gBAAgB;EACd,OAAO;GACL,MAAM;IACJ,SAAS;IACT,UAAU,GAAS;KACjB,OAAO,EAAQ,aAAa,MAAM;IACpC;GACF;GACA,QAAQ,EACN,SAAS,KAAK,QAAQ,eAAe,OACvC;GACA,KAAK,EACH,SAAS,KAAK,QAAQ,eAAe,IACvC;GACA,OAAO,EACL,SAAS,KAAK,QAAQ,eAAe,MACvC;GACA,OAAO,EACL,SAAS,KACX;EACF;CACF;CACA,YAAY;EACV,OAAO,CACL;GACE,KAAK;GACL,WAAW,MAAQ;IACjB,IAAM,IAAO,EAAI,aAAa,MAAM;IAQpC,OAPI,CAAC,KAAQ,CAAC,KAAK,QAAQ,aAAa,GAAM;KAC5C,kBAAkB,MAAQ,CAAC,CAACA,GAAa,GAAK,KAAK,QAAQ,SAAS;KACpE,WAAW,KAAK,QAAQ;KACxB,iBAAiB,KAAK,QAAQ;IAChC,CAAC,IACQ,KAEF;GACT;EACF,CACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAQ7B,OAPK,KAAK,QAAQ,aAAa,EAAe,MAAM;GAClD,kBAAkB,MAAS,CAAC,CAACA,GAAa,GAAM,KAAK,QAAQ,SAAS;GACtE,WAAW,KAAK,QAAQ;GACxB,iBAAiB,KAAK,QAAQ;EAChC,CAAC,IAGM;GAAC;GAAK,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC,IAFnE;GAAC;GAAK,EAAgB,KAAK,QAAQ,gBAAgB;IAAE,GAAG;IAAgB,MAAM;GAAG,CAAC;GAAG;EAAC;CAGjG;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACd,EAAQ,UAAU,QAAQ,EAAQ,YAAY,EAAM,UAAU,CAAC,CAAC,GAAG;EACxE,MAAM,EAAM;EACZ,OAAO,EAAM,SAAS;CACxB,CAAC;CAEH,iBAAiB,GAAM,MAAM;EAE3B,IAAM,IAAmB,EAAK,OAA6B,QAAqB,IAC1E,IAAoB,EAAK,OAA6B,SAAsB,IAC5E,IAAO,EAAE,eAAe,CAAI;EAClC,OAAO,IAAQ,IAAI,EAAK,IAAI,EAAK,IAAI,EAAM,MAAM,IAAI,EAAK,IAAI,EAAK;CACrE;CACA,cAAc;EACZ,OAAO;GACL,UAAU,OAAgB,EAAE,eAAY;IACtC,IAAM,EAAE,YAAS;IAQjB,OAPK,KAAK,QAAQ,aAAa,GAAM;KACnC,kBAAkB,MAAQ,CAAC,CAACA,GAAa,GAAK,KAAK,QAAQ,SAAS;KACpE,WAAW,KAAK,QAAQ;KACxB,iBAAiB,KAAK,QAAQ;IAChC,CAAC,IAGM,EAAM,EAAE,QAAQ,KAAK,MAAM,CAAU,EAAE,QAAQ,mBAAmB,EAAI,EAAE,IAAI,IAF1E;GAGX;GACA,aAAa,OAAgB,EAAE,eAAY;IACzC,IAAM,EAAE,YAAS,KAAc,CAAC;IAQhC,OAPI,KAAQ,CAAC,KAAK,QAAQ,aAAa,GAAM;KAC3C,kBAAkB,MAAQ,CAAC,CAACA,GAAa,GAAK,KAAK,QAAQ,SAAS;KACpE,WAAW,KAAK,QAAQ;KACxB,iBAAiB,KAAK,QAAQ;IAChC,CAAC,IACQ,KAEF,EAAM,EAAE,WAAW,KAAK,MAAM,GAAY,EAAE,sBAAsB,GAAK,CAAC,EAAE,QAAQ,mBAAmB,EAAI,EAAE,IAAI;GACxH;GACA,kBAAkB,EAAE,eACX,EAAM,EAAE,UAAU,KAAK,MAAM,EAAE,sBAAsB,GAAK,CAAC,EAAE,QAAQ,mBAAmB,EAAI,EAAE,IAAI;EAE7G;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,OAAO,MAAS;IACd,IAAM,IAAa,CAAC;IACpB,IAAI,GAAM;KACR,IAAM,EAAE,cAAW,uBAAoB,KAAK,SACtC,IAAQE,GAAM,CAAI,EAAE,QACvB,MAAS,EAAK,UAAU,KAAK,QAAQ,aAAa,EAAK,OAAO;MAC7D,kBAAkB,MAAS,CAAC,CAACF,GAAa,GAAM,CAAS;MACzD;MACA;KACF,CAAC,CACH;KACA,AAAI,EAAM,UACR,EAAM,SAAS,MAAS;MACjB,KAAK,QAAQ,eAAe,EAAK,KAAK,KAG3C,EAAW,KAAK;OACd,MAAM,EAAK;OACX,MAAM,EACJ,MAAM,EAAK,KACb;OACA,OAAO,EAAK;MACd,CAAC;KACH,CAAC;IAEL;IACA,OAAO;GACT;GACA,MAAM,KAAK;GACX,gBAAgB,OAEP,EACL,MAAY,EAAM,MAA4B,KAChD;EAEJ,CAAC,CACH;CACF;CACA,wBAAwB;EACtB,IAAM,IAAU,CAAC,GACX,EAAE,cAAW,uBAAoB,KAAK;EAiC5C,OAhCI,KAAK,QAAQ,YACf,EAAQ,KACNP,GAAS;GACP,MAAM,KAAK;GACX,iBAAiB,KAAK,QAAQ;GAC9B,WAAW,MAAQ,KAAK,QAAQ,aAAa,GAAK;IAChD,kBAAkB,MAAS,CAAC,CAACO,GAAa,GAAM,CAAS;IACzD;IACA;GACF,CAAC;GACD,gBAAgB,KAAK,QAAQ;EAC/B,CAAC,CACH,GAEF,EAAQ,KACNN,GAAa;GACX,MAAM,KAAK;GACX,QAAQ,KAAK;GACb,aAAa,KAAK,QAAQ,gBAAgB,oBAAoB,KAAO,KAAK,QAAQ;GAClF,sBAAsB,KAAK,QAAQ;EACrC,CAAC,CACH,GACI,KAAK,QAAQ,eACf,EAAQ,KACNG,GAAa;GACX,QAAQ,KAAK;GACb,iBAAiB,KAAK,QAAQ;GAC9B,MAAM,KAAK;GACX,gBAAgB,KAAK,QAAQ;EAC/B,CAAC,CACH,GAEK;CACT;AACF,CAAC,GCnbG,KAAY,OAAO,gBACnB,MAAY,GAAQ,MAAQ;CAC9B,KAAK,IAAI,KAAQ,GACf,GAAU,GAAQ,GAAM;EAAE,KAAK,EAAI;EAAO,YAAY;CAAK,CAAC;AAChE,GAII,KAAe,YACf,KAAgB,aAChB,KAAuB,kBACvB,KAAaM,EAAK,OAAO;CAC3B,MAAM;CACN,aAAa;EACX,OAAO;GACL,cAAc;GACd,gBAAgB,CAAC;GACjB,WAAW;GACX,gBAAgB;EAClB;CACF;CACA,OAAO;CACP,UAAU;EACR,OAAO,GAAG,KAAK,QAAQ,aAAa;CACtC;CACA,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC;CACvB;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAM,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CAC/E;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACjB,EAAM,SAAS,UAAU,EAAM,UAC1B,CAAC,IAEH;EACL,MAAM;EACN,SAAS,EAAM,QAAQ,EAAQ,cAAc,EAAM,KAAK,IAAI,CAAC;CAC/D;CAEF,iBAAiB,GAAM,MAChB,EAAK,UAGH,EAAE,eAAe,EAAK,SAAS,IAAI,IAFjC;CAIX,iBAAiB,EACf,gBAAgB,GAClB;CACA,cAAc;EACZ,OAAO,EACL,yBAAyB,EAAE,aAAU,eAC/B,KAAK,QAAQ,iBACR,EAAM,EAAE,WAAW,KAAK,MAAM,KAAK,QAAQ,cAAc,KAAK,QAAQ,SAAS,EAAE,iBAAiB,IAAc,KAAK,OAAO,cAAc,EAAa,CAAC,EAAE,IAAI,IAEhK,EAAS,WAAW,KAAK,MAAM,KAAK,QAAQ,cAAc,KAAK,QAAQ,SAAS,EAE3F;CACF;CACA,uBAAuB;EACrB,OAAO,EACL,qBAAqB,KAAK,OAAO,SAAS,iBAAiB,EAC7D;CACF;CACA,gBAAgB;EACd,IAAI,IAAY,GAAkB;GAChC,MAAM;GACN,MAAM,KAAK;EACb,CAAC;EAaD,QAZI,KAAK,QAAQ,aAAa,KAAK,QAAQ,oBACzC,IAAY,GAAkB;GAC5B,MAAM;GACN,MAAM,KAAK;GACX,WAAW,KAAK,QAAQ;GACxB,gBAAgB,KAAK,QAAQ;GAC7B,qBACS,KAAK,OAAO,cAAc,EAAa;GAEhD,QAAQ,KAAK;EACf,CAAC,IAEI,CAAC,CAAS;CACnB;AACF,CAAC;AAID,SAAS,GAA2B,GAAO;CAEzC,IAAM,IAAoB,EAAM,SAA8B;CAC9D,OAAO,GACL,EAAM,QAAe,EAAM,QAA8B,WAAY,KAAM,GAA2C,SAAU,UAAU,EAAY,WAAW,EAAY,QAAQ,EAAM;AAE/L;AACA,SAAS,GAA6B,GAAM,GAAS;CAInD,OAHI,EAAQ,iBACH,EAAQ,YAAY,EAAQ,eAAe,CAAI,CAAC,IAElD,EAAQ,YAAY,CACzB;EACE,MAAM;EACN,KAAK;EACL;CACF,CACF,CAAC;AACH;AACA,IAAI,KAAWC,EAAM,OAAO;CAC1B,MAAM;CACN,aAAa;EACX,OAAO;GACL,gBAAgB,CAAC;GACjB,oBAAoB;GACpB,qBAAqB;EACvB;CACF;CACA,SAAS;CACT,UAAU;CACV,YAAY;EACV,OAAO,CACL,EACE,KAAK,KACP,CACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAMC,EAAiB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CAChF;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MAAY;EAEjC,IAAI,EAAM,SAAS,aACjB,OAAO,CAAC;EAEV,IAAM,IAA2B,EAAQ,sBAAmC,EAAQ,eAChF,IAAU,CAAC;EACf,IAAI,EAAM,UAAU,EAAM,OAAO,SAAS,GAAG;GAC3C,IAAI,GAA2B,CAAK,GAClC,OAAO;IACL,MAAM;IACN,SAAS,CACP;KACE,MAAM;KACN,SAAS,GAA6B,EAAM,QAAQ,IAAI,CAAO;IACjE,CACF;GACF;GAGF,IAD2B,EAAM,OAAO,MAAM,MAAM,EAAE,SAAS,WAC1C,GACnB,IAAU,EAAmB,EAAM,MAAM;QACpC;IACL,IAAM,IAAa,EAAM,OAAO;IAChC,IAAI,KAAc,EAAW,SAAS,UAAU,EAAW,UAAU,EAAW,OAAO,SAAS,GAQ9F;SANA,IAAU,CACR;MACE,MAAM;MACN,SAJkB,EAAQ,YAAY,EAAW,MAI5B;KACvB,CACF,GACI,EAAM,OAAO,SAAS,GAAG;MAE3B,IAAM,IAAoB,EADF,EAAM,OAAO,MAAM,CACgB,CAAC;MAC5D,EAAQ,KAAK,GAAG,CAAiB;KACnC;WAEA,IAAU,EAAmB,EAAM,MAAM;GAE7C;EACF;EASA,OARI,EAAQ,WAAW,MACrB,IAAU,CACR;GACE,MAAM;GACN,SAAS,CAAC;EACZ,CACF,IAEK;GACL,MAAM;GACN;EACF;CACF;CACA,iBAAiB,GAAM,GAAG,MACjB,GACL,GACA,IACC,MAEK,EAAQ,eAAe,eAClB,OAEL,EAAQ,eAAe,gBAElB,IADoB,EAAQ,MAA4B,aAAmC,SAAU,KAC1F,EAAQ,MAAM,MAE3B,MAET,CACF;CAEF,uBAAuB;EACrB,OAAO;GACL,aAAa,KAAK,OAAO,SAAS,cAAc,KAAK,IAAI;GACzD,WAAW,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI;GACtD,mBAAmB,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI;EAChE;CACF;AACF,CAAC;AAOD,GAAS,CAAA,GAAqB;CAC5B,uBAAuB;CACvB,wBAAwB;CACxB,uBAAuB;CACvB,oBAAoB;CACpB,qBAAqB;CACrB,wBAAwB;CACxB,yBAAyB;CACzB,0BAA0B;CAC1B,wBAAwB;CACxB,wBAAwB;AAC1B,CAAC;AAID,IAAI,MAAmB,GAAY,MAAU;CAC3C,IAAM,EAAE,aAAU,EAAM,WAClB,IAAW,EAAY,GAAY,EAAM,MAAM,GACjD,IAAc,MACd,IAAe,EAAM,OACrB,IAAa,EAAM,KACnB,IAAc;CAClB,OAAO,IAAe,KAAK,MAAgB,OAEzC,AADA,IAAc,EAAM,KAAK,CAAY,GACjC,EAAY,SAAS,IACvB,IAAc,KAEd,KACA;CAMJ,OAHI,MAAgB,OACX,OAEF;EAAE,MAAM,EAAM,IAAI,QAAQ,CAAU;EAAG,OAAO;CAAY;AACnE,GAII,MAAoB,GAAY,MAAU;CAC5C,IAAM,IAAc,GAAgB,GAAY,CAAK;CACrD,IAAI,CAAC,GACH,OAAO;CAET,IAAM,GAAG,KAAS,GAAkB,GAAO,GAAY,EAAY,KAAK,MAAM,CAAC;CAC/E,OAAO;AACT,GAMI,MAAiB,GAAa,GAAM,MAAoB;CAC1D,IAAM,EAAE,eAAY,EAAY,WAC1B,IAAkB,KAAK,IAAI,GAAG,EAAQ,MAAM,CAAC,GAC7C,IAAe,EAAY,IAAI,QAAQ,CAAe,EAAE,KAAK;CAInE,OAHA,EAAI,CAAC,KAAgB,CAAC,EAAgB,SAAS,EAAa,KAAK,IAAI;AAIvE,GAGI,MAAqB,GAAY,MAAU;CAE7C,IAAM,EAAE,eAAY,EAAM,WACpB,IAAa,EAAM,IAAI,QAAQ,EAAQ,MAAM,CAAC;CAOpD,OAHA,EAHI,EAAW,MAAM,MAAM,KAGhB,EAAW,YAAkC,KAAK,SAAU;AAIzE,GAII,MAAsB,GAAY,GAAO,MAAS;CACpD,IAAI,CAAC,GACH,OAAO;CAET,IAAM,IAAWC,EAAa,GAAY,EAAM,MAAM,GAClD,IAAa;CAMjB,OALA,EAAK,aAAa,MAAU;EAC1B,AAAI,EAAM,SAAS,MACjB,IAAa;CAEjB,CAAC,GACM;AACT,GAGI,MAAmB,GAAQ,GAAM,MAAoB;CACvD,IAAI,EAAO,SAAS,cAAc,GAChC,OAAO;CAET,IAAI,EAAO,MAAM,UAAU,SAAS,EAAO,MAAM,UAAU,IACzD,OAAO;CAET,IAAI,CAAC,GAAa,EAAO,OAAO,CAAI,KAAK,GAAc,EAAO,OAAO,GAAM,CAAe,GAAG;EAC3F,IAAM,EAAE,eAAY,EAAO,MAAM,WAC3B,IAAW,EAAO,MAAM,IAAI,QAAQ,EAAQ,OAAO,IAAI,CAAC,GACxD,IAAkB,CAAC;EACzB,EAAS,KAAK,EAAE,aAAa,GAAM,MAAQ;GACzC,AAAI,EAAK,KAAK,SAAS,KACrB,EAAgB,KAAK;IAAE;IAAM;GAAI,CAAC;EAEtC,CAAC;EACD,IAAM,IAAW,EAAgB,GAAG,EAAE;EACtC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAe,EAAO,MAAM,IAAI,QAAQ,EAAS,MAAM,IAAI,EAAS,MAAM,CAAC;EACjF,OAAO,EAAO,MAAM,EAAE,IAAI;GAAE,MAAM,EAAQ,MAAM,IAAI;GAAG,IAAI,EAAQ,IAAI,IAAI;EAAE,GAAG,EAAa,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI;CACxH;CAIA,IAHI,CAAC,GAAa,EAAO,OAAO,CAAI,KAGhC,CAAC,GAAgB,EAAO,KAAK,GAC/B,OAAO;CAET,IAAM,IAAc,GAAgB,GAAM,EAAO,KAAK;CACtD,IAAI,CAAC,GACH,OAAO;CAGT,IAAM,IADQ,EAAO,MAAM,IAAI,QAAQ,EAAY,KAAK,MAAM,CACzC,EAAE,KAAK,EAAY,KAAK,GACvC,IAA6B,GAAmB,GAAM,EAAO,OAAO,CAAQ;CAIlF,OAHI,GAAkB,GAAM,EAAO,KAAK,KAAK,CAAC,IACrC,EAAO,SAAS,iBAAiB,IAEnC,EAAO,MAAM,EAAE,aAAa,CAAI,EAAE,IAAI;AAC/C,GAMI,MAAoB,GAAY,MAAU;CAC5C,IAAM,IAAY,GAAiB,GAAY,CAAK,GAC9C,IAAc,GAAgB,GAAY,CAAK;CAOrD,OANI,CAAC,KAAe,CAAC,IACZ,KAEL,IAAY,EAAY;AAI9B,GAGI,MAAoB,GAAY,MAAU;CAC5C,IAAM,IAAY,GAAiB,GAAY,CAAK,GAC9C,IAAc,GAAgB,GAAY,CAAK;CAOrD,OANI,CAAC,KAAe,CAAC,IACZ,KAEL,IAAY,EAAY;AAI9B,GAGI,MAAgB,GAAQ,MAAS;CAInC,IAHI,CAACC,GAAc,EAAO,OAAO,CAAI,KAGjC,CAAC,GAAc,EAAO,OAAO,CAAI,GACnC,OAAO;CAET,IAAM,EAAE,iBAAc,EAAO,OACvB,EAAE,UAAO,WAAQ;CAUvB,OATI,CAAC,EAAU,SAAS,EAAM,WAAW,CAAG,IACnC,KAEL,GAAiB,GAAM,EAAO,KAAK,IAC9B,EAAO,MAAM,EAAE,MAAM,EAAO,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,CAAI,EAAE,aAAa,EAAE,IAAI,IAEzF,GAAiB,GAAM,EAAO,KAAK,IAC9B,EAAO,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,IAElD,EAAO,SAAS,gBAAgB;AACzC,GAGI,MAAoB,GAAY,MAAU;CAE5C,IAAM,EAAE,eAAY,EAAM,WACpB,IAAa,EAAM,IAAI,QAAQ,EAAQ,MAAM,EAAQ,eAAe,CAAC;CAO3E,OAHA,EAHI,EAAW,MAAM,MAAM,EAAW,OAAO,aAAa,KAG/C,EAAW,WAAiC,KAAK,SAAU;AAIxE,GAGI,KAAa,EAAU,OAAO;CAChC,MAAM;CACN,aAAa;EACX,OAAO,EACL,WAAW,CACT;GACE,UAAU;GACV,cAAc,CAAC,cAAc,aAAa;EAC5C,GACA;GACE,UAAU;GACV,cAAc,CAAC,UAAU;EAC3B,CACF,EACF;CACF;CACA,uBAAuB;EACrB,OAAO;GACL,SAAS,EAAE,gBAAa;IACtB,IAAI,IAAU;IASd,OARA,KAAK,QAAQ,UAAU,SAAS,EAAE,kBAAe;KAC3C,EAAO,MAAM,OAAO,MAAM,OAAc,KAAK,KAG7C,GAAa,GAAQ,CAAQ,MAC/B,IAAU;IAEd,CAAC,GACM;GACT;GACA,eAAe,EAAE,gBAAa;IAC5B,IAAI,IAAU;IASd,OARA,KAAK,QAAQ,UAAU,SAAS,EAAE,kBAAe;KAC3C,EAAO,MAAM,OAAO,MAAM,OAAc,KAAK,KAG7C,GAAa,GAAQ,CAAQ,MAC/B,IAAU;IAEd,CAAC,GACM;GACT;GACA,YAAY,EAAE,gBAAa;IACzB,IAAI,IAAU;IASd,OARA,KAAK,QAAQ,UAAU,SAAS,EAAE,aAAU,sBAAmB;KACzD,EAAO,MAAM,OAAO,MAAM,OAAc,KAAK,KAG7C,GAAgB,GAAQ,GAAU,CAAY,MAChD,IAAU;IAEd,CAAC,GACM;GACT;GACA,kBAAkB,EAAE,gBAAa;IAC/B,IAAI,IAAU;IASd,OARA,KAAK,QAAQ,UAAU,SAAS,EAAE,aAAU,sBAAmB;KACzD,EAAO,MAAM,OAAO,MAAM,OAAc,KAAK,KAG7C,GAAgB,GAAQ,GAAU,CAAY,MAChD,IAAU;IAEd,CAAC,GACM;GACT;EACF;CACF;AACF,CAAC,GASG,KAA0B,yBAC1B,KAAsB;AAC1B,SAAS,GAAmB,GAAM;CAChC,IAAM,IAAc,EAAK,UAAU;CACnC,OAAO,YAAY,KAAK,CAAW,KAAK,YAAY,KAAK,CAAW,KAAK,QAAQ,KAAK,CAAW,KAAK,OAAO,KAAK,CAAW,KAAK,OAAO,KAAK,CAAW;AAC3J;AACA,SAAS,GAAiB,GAAc;CACtC,IAAM,IAAiB,CAAC,GAClB,IAAa,CAAC,GAChB,IAAuB;CAkB3B,OAjBA,EAAa,SAAS,MAAS;EAC7B,IAAI,GAAsB;GACxB,EAAW,KAAK,CAAI;GACpB;EACF;EACA,IAAI,EAAK,KAAK,MAAM,IAAI;GAEtB,AADA,IAAuB,IACvB,EAAW,KAAK,CAAI;GACpB;EACF;EACA,IAAI,EAAe,SAAS,KAAK,GAAmB,CAAI,GAAG;GAEzD,AADA,IAAuB,IACvB,EAAW,KAAK,CAAI;GACpB;EACF;EACA,EAAe,KAAK,CAAI;CAC1B,CAAC,GACM;EACL;EACA;CACF;AACF;AACA,SAAS,GAAwB,GAAO;CACtC,IAAM,IAAY,CAAC,GACf,IAAmB,GACnB,IAAW;CACf,OAAO,IAAmB,EAAM,SAAQ;EACtC,IAAM,IAAO,EAAM,IACb,IAAQ,EAAK,MAAM,EAAuB;EAChD,IAAI,CAAC,GACH;EAEF,IAAM,GAAG,GAAQ,GAAQ,KAAW,GAC9B,IAAc,EAAO,QACrB,IAAmB,CAAC,CAAO,GAC7B,IAAgB,IAAmB,GACjC,IAAY,CAAC,CAAI,GACnB,IAAe;EACnB,OAAO,IAAgB,EAAM,SAAQ;GACnC,IAAM,IAAW,EAAM;GAEvB,IADkB,EAAS,MAAM,EACrB,GACV;GAEF,IAAI,EAAS,KAAK,MAAM,IAItB,AAHA,EAAU,KAAK,CAAQ,GACvB,EAAiB,KAAK,EAAE,GACxB,IAAe,IACf,KAAiB;QACZ,IAAI,EAAS,MAAM,EAAmB,GAG3C,AAFA,EAAU,KAAK,CAAQ,GACvB,EAAiB,KAAK,EAAS,MAAM,IAAc,CAAC,CAAC,GACrD,KAAiB;QACZ;IACL,IAAI,GACF;IAIF,AAFA,EAAU,KAAK,CAAQ,GACvB,EAAiB,KAAK,CAAQ,GAC9B,KAAiB;GACnB;EACF;EASA,AARA,EAAU,KAAK;GACb,QAAQ;GACR,QAAQ,SAAS,GAAQ,EAAE;GAC3B,SAAS,EAAiB,KAAK,IAAI,EAAE,KAAK;GAC1C,cAAc;GACd,KAAK,EAAU,KAAK,IAAI;EAC1B,CAAC,GACD,IAAW,GACX,IAAmB;CACrB;CACA,OAAO,CAAC,GAAW,CAAQ;AAC7B;AACA,SAAS,GAAqB,GAAO,GAAY,GAAO;CACtD,IAAM,IAAS,CAAC,GACZ,IAAe;CACnB,OAAO,IAAe,EAAM,SAAQ;EAClC,IAAM,IAAO,EAAM;EACnB,IAAI,EAAK,WAAW,GAAY;GAC9B,IAAM,EAAE,mBAAgB,kBAAe,GAAiB,EAAK,YAAY,GACnE,IAAW,EAAe,KAAK,IAAI,EAAE,KAAK,GAC1C,IAAS,CAAC;GAChB,AAAI,KACF,EAAO,KAAK;IACV,MAAM;IACN,KAAK;IACL,QAAQ,EAAM,aAAa,CAAQ;GACrC,CAAC;GAEH,IAAM,IAAoB,EAAW,KAAK,IAAI,EAAE,KAAK;GACrD,IAAI,GAAmB;IACrB,IAAM,IAAc,EAAM,YAAY,CAAiB;IACvD,EAAO,KAAK,GAAG,CAAW;GAC5B;GACA,IAAI,IAAiB,IAAe,GAC9B,IAAc,CAAC;GACrB,OAAO,IAAiB,EAAM,UAAU,EAAM,GAAgB,SAAS,IAErE,AADA,EAAY,KAAK,EAAM,EAAe,GACtC,KAAkB;GAEpB,IAAI,EAAY,SAAS,GAAG;IAE1B,IAAM,IAAkB,GAAqB,GAD1B,KAAK,IAAI,GAAG,EAAY,KAAK,MAAe,EAAW,MAAM,CACb,GAAG,CAAK;IAC3E,EAAO,KAAK;KACV,MAAM;KACN,SAAS;KACT,OAAO,EAAY,GAAG;KACtB,OAAO;KACP,KAAK,EAAY,KAAK,MAAe,EAAW,GAAG,EAAE,KAAK,IAAI;IAChE,CAAC;GACH;GAMA,AALA,EAAO,KAAK;IACV,MAAM;IACN,KAAK,EAAK;IACV;GACF,CAAC,GACD,IAAe;EACjB,OACE,KAAgB;CAEpB;CACA,OAAO;AACT;AACA,SAAS,GAAe,GAAO,GAAS;CACtC,OAAO,EAAM,KAAK,MAAS;EACzB,IAAI,EAAK,SAAS,aAChB,OAAO,EAAQ,cAAc,CAAC,CAAI,CAAC,EAAE;EAEvC,IAAM,IAAU,CAAC;EAmBjB,OAlBI,EAAK,UAAU,EAAK,OAAO,SAAS,KACtC,EAAK,OAAO,SAAS,MAAc;GACjC,IAAI,EAAU,SAAS,eAAe,EAAU,SAAS,UAAU,EAAU,SAAS,gBAAgB,EAAU,SAAS,QACvH,EAAQ,KAAK,GAAG,EAAQ,cAAc,CAAC,CAAS,CAAC,CAAC;QAC7C,IAAI,EAAU,SAAS,UAAU,EAAU,QAAQ;IACxD,IAAM,IAAgB,EAAQ,cAAc,CAAC,CAAS,CAAC;IACvD,EAAQ,KAAK;KACX,MAAM;KACN,SAAS;IACX,CAAC;GACH,OAAO;IACL,IAAM,IAAS,EAAQ,cAAc,CAAC,CAAS,CAAC;IAChD,AAAI,EAAO,SAAS,KAClB,EAAQ,KAAK,GAAG,CAAM;GAE1B;EACF,CAAC,GAEI;GACL,MAAM;GACN;EACF;CACF,CAAC;AACH;AAGA,IAAI,KAAgB,YAChB,KAAiB,aACjB,KAAwB,eACxB,KAAc,EAAM,OAAO;CAC7B,MAAM;CACN,aAAa;EACX,OAAO;GACL,cAAc;GACd,gBAAgB,CAAC;GACjB,WAAW;GACX,gBAAgB;EAClB;CACF;CACA,OAAO;CACP,UAAU;EACR,OAAO,GAAG,KAAK,QAAQ,aAAa;CACtC;CACA,gBAAgB;EACd,OAAO;GACL,OAAO;IACL,SAAS;IACT,YAAY,MACH,EAAQ,aAAa,OAAO,IAAI,SAAS,EAAQ,aAAa,OAAO,KAAK,IAAI,EAAE,IAAI;GAE/F;GACA,MAAM;IACJ,SAAS;IACT,YAAY,MAAY,EAAQ,aAAa,MAAM;GACrD;EACF;CACF;CACA,YAAY;EACV,OAAO,CACL,EACE,KAAK,KACP,CACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAC7B,IAAM,EAAE,UAAO,GAAG,MAA2B;EAC7C,OAAO,MAAU,IAAI;GAAC;GAAMC,EAAiB,KAAK,QAAQ,gBAAgB,CAAsB;GAAG;EAAC,IAAI;GAAC;GAAMA,EAAiB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CACjL;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MAAY;EACjC,IAAI,EAAM,SAAS,UAAU,CAAC,EAAM,SAClC,OAAO,CAAC;EAEV,IAAM,IAAa,EAAM,SAAS,GAC5B,IAAU,EAAM,QAAQ,GAAe,EAAM,OAAO,CAAO,IAAI,CAAC;EAQtE,OAPI,MAAe,IAOZ;GACL,MAAM;GACN;EACF,IATS;GACL,MAAM;GACN,OAAO,EAAE,OAAO,EAAW;GAC3B;EACF;CAMJ;CACA,iBAAiB,GAAM,MAChB,EAAK,UAGH,EAAE,eAAe,EAAK,SAAS,IAAI,IAFjC;CAIX,mBAAmB;EACjB,MAAM;EACN,OAAO;EACP,QAAQ,MAAQ;GACd,IACM,IADQ,EAAI,MAAM,kBACV,GAA+B;GAC7C,OAAO,MAAU,KAAK,IAAY,KAAR;EAC5B;EACA,WAAW,GAAK,GAAS,MAAU;GAEjC,IAAM,IAAQ,EAAI,MAAM,IAAI,GACtB,CAAC,GAAW,KAAY,GAAwB,CAAK;GAC3D,IAAI,EAAU,WAAW,GACvB;GAEF,IAAM,IAAQ,GAAqB,GAAW,GAAG,CAAK;GAClD,MAAM,WAAW,GAIrB,OAAO;IACL,MAAM;IACN,SAAS;IACT,OAJwB,EAAU,IAA0B,UAAW;IAKvE;IACA,KAAK,EAAM,MAAM,GAAG,CAAQ,EAAE,KAAK,IAAI;GACzC;EACF;CACF;CACA,iBAAiB,EACf,gBAAgB,GAClB;CACA,cAAc;EACZ,OAAO,EACL,0BAA0B,EAAE,aAAU,eAChC,KAAK,QAAQ,iBACR,EAAM,EAAE,WAAW,KAAK,MAAM,KAAK,QAAQ,cAAc,KAAK,QAAQ,SAAS,EAAE,iBAAiB,IAAe,KAAK,OAAO,cAAc,EAAc,CAAC,EAAE,IAAI,IAElK,EAAS,WAAW,KAAK,MAAM,KAAK,QAAQ,cAAc,KAAK,QAAQ,SAAS,EAE3F;CACF;CACA,uBAAuB;EACrB,OAAO,EACL,qBAAqB,KAAK,OAAO,SAAS,kBAAkB,EAC9D;CACF;CACA,gBAAgB;EACd,IAAI,IAAYC,GAAmB;GACjC,MAAM;GACN,MAAM,KAAK;GACX,gBAAgB,OAAW,EAAE,OAAO,CAAC,EAAM,GAAG;GAC9C,gBAAgB,GAAO,MAAS,EAAK,aAAa,EAAK,MAAM,UAAU,CAAC,EAAM;EAChF,CAAC;EAYD,QAXI,KAAK,QAAQ,aAAa,KAAK,QAAQ,oBACzC,IAAYA,GAAmB;GAC7B,MAAM;GACN,MAAM,KAAK;GACX,WAAW,KAAK,QAAQ;GACxB,gBAAgB,KAAK,QAAQ;GAC7B,gBAAgB,OAAW;IAAE,OAAO,CAAC,EAAM;IAAI,GAAG,KAAK,OAAO,cAAc,EAAc;GAAE;GAC5F,gBAAgB,GAAO,MAAS,EAAK,aAAa,EAAK,MAAM,UAAU,CAAC,EAAM;GAC9E,QAAQ,KAAK;EACf,CAAC,IAEI,CAAC,CAAS;CACnB;AACF,CAAC,GAUGC,KAAa,0BACb,KAAWC,EAAM,OAAO;CAC1B,MAAM;CACN,aAAa;EACX,OAAO;GACL,QAAQ;GACR,gBAAgB,CAAC;GACjB,kBAAkB;GAClB,MAAM,KAAK;EACb;CACF;CACA,UAAU;EACR,OAAO,KAAK,QAAQ,SAAS,qBAAqB;CACpD;CACA,UAAU;CACV,gBAAgB;EACd,OAAO,EACL,SAAS;GACP,SAAS;GACT,aAAa;GACb,YAAY,MAAY;IACtB,IAAM,IAAc,EAAQ,aAAa,cAAc;IACvD,OAAO,MAAgB,MAAM,MAAgB;GAC/C;GACA,aAAa,OAAgB,EAC3B,gBAAgB,EAAW,QAC7B;EACF,EACF;CACF;CACA,YAAY;EACV,OAAO,CACL;GACE,KAAK,iBAAiB,KAAK,KAAK;GAChC,UAAU;EACZ,CACF;CACF;CACA,WAAW,EAAE,SAAM,qBAAkB;EACnC,OAAO;GACL;GACAC,EAAiB,KAAK,QAAQ,gBAAgB,GAAgB,EAC5D,aAAa,KAAK,KACpB,CAAC;GACD;IACE;IACA,CACE,SACA;KACE,MAAM;KACN,SAAS,EAAK,MAAM,UAAU,YAAY;IAC5C,CACF;IACA,CAAC,MAAM;GACT;GACA,CAAC,OAAO,CAAC;EACX;CACF;CACA,gBAAgB,GAAO,MAAM;EAC3B,IAAM,IAAU,CAAC;EAQjB,IAPI,EAAM,UAAU,EAAM,OAAO,SAAS,IACxC,EAAQ,KAAK,EAAE,WAAW,aAAa,CAAC,GAAG,EAAE,YAAY,EAAM,MAAM,CAAC,CAAC,IAC9D,EAAM,OACf,EAAQ,KAAK,EAAE,WAAW,aAAa,CAAC,GAAG,CAAC,EAAE,WAAW,QAAQ,EAAE,MAAM,EAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAExF,EAAQ,KAAK,EAAE,WAAW,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAE5C,EAAM,gBAAgB,EAAM,aAAa,SAAS,GAAG;GACvD,IAAM,IAAgB,EAAE,cAAc,EAAM,YAAY;GACxD,EAAQ,KAAK,GAAG,CAAa;EAC/B;EACA,OAAO,EAAE,WAAW,YAAY,EAAE,SAAS,EAAM,WAAW,GAAM,GAAG,CAAO;CAC9E;CACA,iBAAiB,GAAM,MAIdC,GAA6B,GAAM,GAAG,MAFlB,EAAK,OAA6B,UAAW,MAAM,IAC7C,GACkB;CAErD,uBAAuB;EACrB,IAAM,IAAY;GAChB,aAAa,KAAK,OAAO,SAAS,cAAc,KAAK,IAAI;GACzD,mBAAmB,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI;EAChE;EAIA,OAHK,KAAK,QAAQ,SAGX;GACL,GAAG;GACH,WAAW,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI;EACxD,IALS;CAMX;CACA,cAAc;EACZ,QAAQ,EAAE,SAAM,mBAAgB,WAAQ,gBAAa;GACnD,IAAM,IAAW,SAAS,cAAc,IAAI,GACtC,IAAkB,SAAS,cAAc,OAAO,GAChD,IAAiB,SAAS,cAAc,MAAM,GAC9C,IAAW,SAAS,cAAc,OAAO,GACzC,IAAU,SAAS,cAAc,KAAK,GACtC,KAAc,MAAgB;IAClC,IAAI;IACJ,EAAS,cAAoB,IAAK,KAAK,QAAQ,OAA4B,gBAAqC,KAAK,GAAI,GAAa,EAAS,OAAO,KAAM,0BAA0B,EAAY,eAAe;GACnN;GAsCA,AArCA,EAAW,CAAI,GACf,EAAgB,kBAAkB,SAClC,EAAS,OAAO,YAChB,EAAS,iBAAiB,cAAc,MAAU,EAAM,eAAe,CAAC,GACxE,EAAS,iBAAiB,WAAW,MAAU;IAC7C,IAAI,CAAC,EAAO,cAAc,CAAC,KAAK,QAAQ,mBAAmB;KACzD,EAAS,UAAU,CAAC,EAAS;KAC7B;IACF;IACA,IAAM,EAAE,eAAY,EAAM;IAe1B,AAdI,EAAO,cAAc,OAAO,KAAW,cACzC,EAAO,MAAM,EAAE,MAAM,KAAK,GAAG,EAAE,gBAAgB,GAAM,CAAC,EAAE,SAAS,EAAE,YAAS;KAC1E,IAAM,IAAW,EAAO;KACxB,IAAI,OAAO,KAAa,UACtB,OAAO;KAET,IAAM,IAAc,EAAG,IAAI,OAAO,CAAQ;KAK1C,OAJA,EAAG,cAAc,GAAU,KAAK,GAAG;MACjC,GAAG,GAA2C;MAC9C;KACF,CAAC,GACM;IACT,CAAC,EAAE,IAAI,GAEL,CAAC,EAAO,cAAc,KAAK,QAAQ,sBAChC,KAAK,QAAQ,kBAAkB,GAAM,CAAO,MAC/C,EAAS,UAAU,CAAC,EAAS;GAGnC,CAAC,GACD,OAAO,QAAQ,KAAK,QAAQ,cAAc,EAAE,SAAS,CAAC,GAAK,OAAW;IACpE,EAAS,aAAa,GAAK,CAAK;GAClC,CAAC,GACD,EAAS,QAAQ,UAAU,EAAK,MAAM,SACtC,EAAS,UAAU,EAAK,MAAM,SAC9B,EAAgB,OAAO,GAAU,CAAc,GAC/C,EAAS,OAAO,GAAiB,CAAO,GACxC,OAAO,QAAQ,CAAc,EAAE,SAAS,CAAC,GAAK,OAAW;IACvD,EAAS,aAAa,GAAK,CAAK;GAClC,CAAC;GACD,IAAI,IAA4B,IAAI,IAAI,OAAO,KAAK,CAAc,CAAC;GACnE,OAAO;IACL,KAAK;IACL,YAAY;IACZ,SAAS,MAAgB;KACvB,IAAI,EAAY,SAAS,KAAK,MAC5B,OAAO;KAIT,AAFA,EAAS,QAAQ,UAAU,EAAY,MAAM,SAC7C,EAAS,UAAU,EAAY,MAAM,SACrC,EAAW,CAAW;KACtB,IAAM,IAAsB,EAAO,iBAAiB,YAC9C,IAAoB,GAAsB,GAAa,CAAmB,GAC1E,IAAU,IAAI,IAAI,OAAO,KAAK,CAAiB,CAAC,GAChD,IAAc,KAAK,QAAQ;KAsBjC,OArBA,EAA0B,SAAS,MAAQ;MACzC,AAAK,EAAQ,IAAI,CAAG,MACd,KAAO,IACT,EAAS,aAAa,GAAK,EAAY,EAAI,IAE3C,EAAS,gBAAgB,CAAG;KAGlC,CAAC,GACD,OAAO,QAAQ,CAAiB,EAAE,SAAS,CAAC,GAAK,OAAW;MAC1D,AAAI,KAAU,OACR,KAAO,IACT,EAAS,aAAa,GAAK,EAAY,EAAI,IAE3C,EAAS,gBAAgB,CAAG,IAG9B,EAAS,aAAa,GAAK,CAAK;KAEpC,CAAC,GACD,IAA4B,GACrB;IACT;GACF;EACF;CACF;CACA,gBAAgB;EACd,OAAO,CACLC,GAAmB;GACjB,MAAMJ;GACN,MAAM,KAAK;GACX,gBAAgB,OAAW,EACzB,SAAS,EAAM,EAAM,SAAS,OAAO,IACvC;EACF,CAAC,CACH;CACF;AACF,CAAC,GAIG,KAAWK,EAAM,OAAO;CAC1B,MAAM;CACN,aAAa;EACX,OAAO;GACL,cAAc;GACd,gBAAgB,CAAC;EACnB;CACF;CACA,OAAO;CACP,UAAU;EACR,OAAO,GAAG,KAAK,QAAQ,aAAa;CACtC;CACA,YAAY;EACV,OAAO,CACL;GACE,KAAK,iBAAiB,KAAK,KAAK;GAChC,UAAU;EACZ,CACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAMC,EAAiB,KAAK,QAAQ,gBAAgB,GAAgB,EAAE,aAAa,KAAK,KAAK,CAAC;GAAG;EAAC;CAC5G;CACA,gBAAgB,GAAO,MACd,EAAE,WAAW,YAAY,CAAC,GAAG,EAAE,cAAc,EAAM,SAAS,CAAC,CAAC,CAAC;CAExE,iBAAiB,GAAM,MAChB,EAAK,UAGH,EAAE,eAAe,EAAK,SAAS,IAAI,IAFjC;CAIX,mBAAmB;EACjB,MAAM;EACN,OAAO;EACP,MAAM,GAAK;GAET,IAAM,IAAc,EAAI,MAAM,4BAA4B,GAAyB;GACnF,OAAO,MAAU,KAAK,IAAY,KAAR;EAC5B;EACA,SAAS,GAAK,GAAQ,GAAO;GAC3B,IAAM,KAAwB,MAAY;IACxC,IAAM,IAAe,GACnB,GACA;KACE,aAAa;KACb,kBAAkB,OAAW;MAC3B,aAAa,EAAM,GAAG;MACtB,aAAa,EAAM;MACnB,SAAS,EAAM,GAAG,YAAY,MAAM;KACtC;KACA,cAAc,GAAM,OAAkB;MACpC,MAAM;MACN,KAAK;MACL,aAAa,EAAK;MAClB,aAAa,EAAK;MAClB,SAAS,EAAK;MACd,MAAM,EAAK;MACX,QAAQ,EAAM,aAAa,EAAK,WAAW;MAC3C;KACF;KAEA,oBAAoB;IACtB,GACA,CACF;IAUA,OATI,IACK,CACL;KACE,MAAM;KACN,KAAK,EAAa;KAClB,OAAO,EAAa;IACtB,CACF,IAEK,EAAM,YAAY,CAAO;GAClC,GACM,IAAS,GACb,GACA;IACE,aAAa;IACb,kBAAkB,OAAW;KAC3B,aAAa,EAAM,GAAG;KACtB,aAAa,EAAM;KACnB,SAAS,EAAM,GAAG,YAAY,MAAM;IACtC;IACA,cAAc,GAAM,OAAkB;KACpC,MAAM;KACN,KAAK;KACL,aAAa,EAAK;KAClB,aAAa,EAAK;KAClB,SAAS,EAAK;KACd,MAAM,EAAK;KACX,QAAQ,EAAM,aAAa,EAAK,WAAW;KAC3C;IACF;IAEA,oBAAoB;GACtB,GACA,CACF;GACK,OAGL,OAAO;IACL,MAAM;IACN,KAAK,EAAO;IACZ,OAAO,EAAO;GAChB;EACF;CACF;CACA,iBAAiB,EACf,gBAAgB,GAClB;CACA,cAAc;EACZ,OAAO,EACL,uBAAuB,EAAE,kBAChB,EAAS,WAAW,KAAK,MAAM,KAAK,QAAQ,YAAY,EAEnE;CACF;CACA,uBAAuB;EACrB,OAAO,EACL,qBAAqB,KAAK,OAAO,SAAS,eAAe,EAC3D;CACF;AACF,CAAC;AAGaC,EAAW,OAAO;CAC9B,MAAM;CACN,gBAAgB;EACd,IAAM,IAAa,CAAC;EAmBpB,OAlBI,KAAK,QAAQ,eAAe,MAC9B,EAAW,KAAK,GAAW,UAAU,KAAK,QAAQ,UAAU,CAAC,GAE3D,KAAK,QAAQ,aAAa,MAC5B,EAAW,KAAK,GAAS,UAAU,KAAK,QAAQ,QAAQ,CAAC,GAEvD,KAAK,QAAQ,eAAe,MAC9B,EAAW,KAAK,GAAW,UAAU,KAAK,QAAQ,UAAU,CAAC,GAE3D,KAAK,QAAQ,gBAAgB,MAC/B,EAAW,KAAK,GAAY,UAAU,KAAK,QAAQ,WAAW,CAAC,GAE7D,KAAK,QAAQ,aAAa,MAC5B,EAAW,KAAK,GAAS,UAAU,KAAK,QAAQ,QAAQ,CAAC,GAEvD,KAAK,QAAQ,aAAa,MAC5B,EAAW,KAAK,GAAS,UAAU,KAAK,QAAQ,QAAQ,CAAC,GAEpD;CACT;AACF,CAAC;;;ACloCD,IAAI,KAA2B,UAC3B,KAAY,QACZ,KAAYC,EAAK,OAAO;CAC1B,MAAM;CACN,UAAU;CACV,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CACA,OAAO;CACP,SAAS;CACT,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;CACtB;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAK,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CAC9E;CACA,gBAAgB,GAAO,MAAY;EACjC,IAAM,IAAS,EAAM,UAAU,CAAC;EAChC,IAAI,EAAO,WAAW,KAAK,EAAO,GAAG,SAAS,SAC5C,OAAO,EAAQ,cAAc,CAAC,EAAO,EAAE,CAAC;EAE1C,IAAM,IAAU,EAAQ,YAAY,CAAM;EAK1C,OAJwC,EAAO,WAAW,KAAK,EAAO,GAAG,SAAS,WAAW,EAAO,GAAG,QAAQ,MAA4B,EAAO,GAAG,SAAS,MAA4B,EAAO,GAAG,QAAQ,MAAa,EAAO,GAAG,SAAS,OACrM,EAAQ,WAAW,KAAK,EAAQ,GAAG,SAAS,WAAW,EAAQ,GAAG,SAAS,MAA4B,EAAQ,GAAG,SAAS,MACzJ,EAAQ,WAAW,aAAa,KAAK,GAAG,CAAC,CAAC,IAE5C,EAAQ,WAAW,aAAa,KAAK,GAAG,CAAO;CACxD;CACA,iBAAiB,GAAM,GAAG,MAAQ;EAEhC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAU,MAAM,QAAQ,EAAK,OAAO,IAAI,EAAK,UAAU,CAAC;EAC9D,IAAI,EAAQ,WAAW,GAAG;GACxB,IAAM,IAAkB,MAAM,QAAc,GAA2B,cAAoC,OAAO,IAAI,EAAI,aAAa,UAAU,CAAC;GAElJ,OAD4C,GAA2B,cAAoC,SAAU,eAAe,EAAgB,WAAW,IACzH,KAA2B;EACnE;EACA,OAAO,EAAE,eAAe,CAAO;CACjC;CACA,cAAc;EACZ,OAAO,EACL,qBAAqB,EAAE,kBACd,EAAS,QAAQ,KAAK,IAAI,EAErC;CACF;CACA,uBAAuB;EACrB,OAAO,EACL,mBAAmB,KAAK,OAAO,SAAS,aAAa,EACvD;CACF;AACF,CAAC,GCvDG,KAAa,gDACb,KAAa,gDACb,KAAS,GAAK,OAAO;CACvB,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CACA,YAAY;EACV,OAAO;GACL,EACE,KAAK,IACP;GACA,EACE,KAAK,MACP;GACA,EACE,KAAK,SACP;GACA;IACE,OAAO;IACP,WAAW;IACX,WAAW,MAAU,EAAM,SAAS,cAAc,IAAI,CAAC,IAAI;GAC7D;EACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAK,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CAC9E;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACd,EAAQ,UAAU,UAAU,EAAQ,YAAY,EAAM,UAAU,CAAC,CAAC,CAAC;CAE5E,iBAAiB,GAAM,MACd,KAAK,EAAE,eAAe,CAAI,EAAE;CAErC,cAAc;EACZ,OAAO;GACL,kBAAkB,EAAE,kBACX,EAAS,QAAQ,KAAK,IAAI;GAEnC,qBAAqB,EAAE,kBACd,EAAS,WAAW,KAAK,IAAI;GAEtC,oBAAoB,EAAE,kBACb,EAAS,UAAU,KAAK,IAAI;EAEvC;CACF;CACA,uBAAuB;EACrB,OAAO,EACL,qBAAqB,KAAK,OAAO,SAAS,aAAa,EACzD;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAM;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;CACA,gBAAgB;EACd,OAAO,CACL,GAAc;GACZ,MAAM;GACN,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC,GCvEG,KAAOC,EAAK,OAAO;CACrB,MAAM;CACN,OAAO;CACP,gBAAgB,OACP;EACL,MAAM;EACN,MAAM,EAAM,QAAQ;CACtB;CAEF,iBAAiB,MAAS,EAAK,QAAQ;AACzC,CAAC,GCVG,KAAY,GAAK,OAAO;CAC1B,MAAM;CACN,aAAa;EACX,OAAO,EACL,gBAAgB,CAAC,EACnB;CACF;CACA,YAAY;EACV,OAAO,CACL,EACE,KAAK,IACP,GACA;GACE,OAAO;GACP,WAAW;GACX,WAAW,MAAU,EAAM,SAAS,WAAW,IAAI,CAAC,IAAI;EAC1D,CACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAK,EAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC;CAC9E;CACA,cAAc,GAAO,GAAS;EAC5B,OAAO,EAAQ,UAAU,KAAK,QAAQ,aAAa,EAAQ,YAAY,EAAM,UAAU,CAAC,CAAC,CAAC;CAC5F;CACA,eAAe,GAAM,GAAS;EAC5B,OAAO,KAAK,EAAQ,eAAe,CAAI,EAAE;CAC3C;CACA,mBAAmB;EACjB,MAAM;EACN,OAAO;EACP,MAAM,GAAK;GACT,OAAO,EAAI,QAAQ,IAAI;EACzB;EACA,SAAS,GAAK,GAAS,GAAO;GAE5B,IAAM,IAAQ,0BAAK,KAAK,CAAG;GAC3B,IAAI,CAAC,GACH;GAEF,IAAM,IAAe,EAAM,GAAG,KAAK;GACnC,OAAO;IACL,MAAM;IACN,KAAK,EAAM;IACX,MAAM;IACN,QAAQ,EAAM,aAAa,CAAY;GACzC;EACF;CACF;CACA,cAAc;EACZ,OAAO;GACL,qBAAqB,EAAE,kBACd,EAAS,QAAQ,KAAK,IAAI;GAEnC,wBAAwB,EAAE,kBACjB,EAAS,WAAW,KAAK,IAAI;GAEtC,uBAAuB,EAAE,kBAChB,EAAS,UAAU,KAAK,IAAI;EAEvC;CACF;CACA,uBAAuB;EACrB,OAAO;GACL,eAAe,KAAK,OAAO,SAAS,gBAAgB;GACpD,eAAe,KAAK,OAAO,SAAS,gBAAgB;EACtD;CACF;AACF,CAAC;ACnEoB,EAAU,OAAO;CACpC,MAAM;CACN,aAAa;EACX,OAAO;GACL,OAAO;GACP,UAAU;GACV,MAAM;GACN,cAAc,MAAS,EAAK;GAC5B,cAAc,MAAS,EAAK,MAAM,GAAG,EAAE,QAAQ,MAAS,MAAS,EAAE,EAAE;EACvE;CACF;CACA,aAAa;EACX,OAAO;GACL,kBAAkB;GAClB,aAAa;EACf;CACF;CACA,iBAAiB;EAUf,AATA,KAAK,QAAQ,cAAc,MAAY;GACrC,IAAM,IAAQ,GAAmC,QAAS,KAAK,OAAO,MAAM;GAE5E,KADc,GAAmC,QAAS,KAAK,QAAQ,UAC1D,YAAY;IACvB,IAAM,IAAO,EAAK,YAAY,GAAG,EAAK,QAAQ,MAAM,KAAK,GAAG,GAAG;IAC/D,OAAO,KAAK,QAAQ,YAAY,CAAI;GACtC;GACA,OAAO,EAAK;EACd,GACA,KAAK,QAAQ,SAAS,MAAY;GAChC,IAAM,IAAQ,GAAmC,QAAS,KAAK,OAAO,MAAM,KACtE,IAAO,EAAK,YAAY,GAAG,EAAK,QAAQ,MAAM,KAAK,GAAG;GAC5D,OAAO,KAAK,QAAQ,YAAY,CAAI;EACtC;CACF;CACA,wBAAwB;EACtB,IAAI,IAAwB;EAC5B,OAAO,CACL,IAAI,EAAO;GACT,KAAK,IAAI,EAAU,gBAAgB;GACnC,oBAAoB,GAAc,GAAU,MAAa;IACvD,IAAI,GACF;IAEF,IAAM,IAAQ,KAAK,QAAQ,OACrB,IAAW,KAAK,QAAQ;IAC9B,IAAI,KAAU,QAA4B,MAAU,KAAK,MAAa,IAAO;KAC3E,IAAwB;KACxB;IACF;IACA,IAAM,IAAqB,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAS,IAAI,CAAC;IACzE,IAAI,IAAqB,GAAO;KAC9B,IAEM,IAFO,IAAqB;KAGlC,QAAQ,KACN,sDAAsD,EAAM,gDAC9D;KACA,IAAM,IAAK,EAAS,GAAG,YAAY,GAAM,CAAE;KAE3C,OADA,IAAwB,IACjB;IACT;IACA,IAAwB;GAC1B;GACA,oBAAoB,GAAa,MAAU;IACzC,IAAM,IAAQ,KAAK,QAAQ;IAC3B,IAAI,CAAC,EAAY,cAAc,MAAU,KAAK,KAAU,MACtD,OAAO;IAET,IAAM,IAAU,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAM,IAAI,CAAC,GACrD,IAAU,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAY,IAAI,CAAC;IAIjE,IAHI,KAAW,KAGX,IAAU,KAAS,IAAU,KAAS,KAAW,GACnD,OAAO;IAMT,IAJI,IAAU,KAAS,IAAU,KAAS,IAAU,KAIhD,CADY,EAAY,QAAQ,OACzB,GACT,OAAO;IAET,IAAM,IAAM,EAAY,UAAU,MAAM,KAElC,IAAO,KADA,IAAU,IAEjB,IAAK;IAMX,OALA,EAAY,YAAY,GAAM,CAAE,GAEhC,EADoB,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAY,IAAI,CACtD,IAAI;GAIpB;EACF,CAAC,CACH;CACF;AACF,CAAC;AAKD,IAAIE,KAAaC,EAAW,OAAO;CACjC,MAAM;CACN,aAAa;EACX,OAAO;GACL,OAAO;GACP,OAAO;GACP,OAAO,KAAK;EACd;CACF;CACA,wBAAwB;EACtB,OAAO,CAAC,GAAW,KAAK,OAAO,CAAC;CAClC;AACF,CAAC;AAMWE,EAAW,OAAO;CAC5B,MAAM;CACN,aAAa;EACX,OAAO;GACL,WAAW;GACX,MAAM;EACR;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,OAAO;GAC3B,OAAO,EACL,cAAc,EAAE,QAAK,mBAAgB;IACnC,IAAM,EAAE,eAAY,iBAAc,KAAK,QACjC,EAAE,cAAW,GACb,IAAc,CAAC;IACrB,IAAI,CAAC,KAAc,CAAC,GAClB,OAAO,EAAc,OAAO,GAAK,CAAC,CAAC;IAErC,IAAI,IAAY;IAChB,AAAI,KAAK,QAAQ,SAAS,aACxB,EAAI,aAAa,GAAM,MAAQ;KACzB,OAAK,QAIT;UAAI,EADc,KAAU,KAAO,KAAU,IAAM,EAAK,WAAW,IAEjE,OAAO;MAET,KAAa;KAFJ;IAGX,CAAC;IAEH,IAAI,IAAe;IAoBnB,OAnBA,EAAI,aAAa,GAAM,MAAQ;KAK7B,IAJI,EAAK,UAIL,EADc,KAAU,KAAO,KAAU,IAAM,EAAK,WAAW,IAEjE,OAAO;KAIT,IAFA,KAAgB,GACG,KAAK,QAAQ,SAAS,aAAa,IAAY,IAAe,KAAK,KAAK,QAAQ,SAAS,gBAAgB,IAAe,GAEzI,OAAO,KAAK,QAAQ,SAAS;KAE/B,EAAY,KACV,GAAW,KAAK,GAAK,IAAM,EAAK,UAAU,EACxC,OAAO,KAAK,QAAQ,UACtB,CAAC,CACH;IACF,CAAC,GACM,EAAc,OAAO,GAAK,CAAW;GAC9C,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC;AAKD,IAAIC,KAAYC,EAAW,OAAO;CAChC,MAAM;CACN,wBAAwB;EACtB,OAAO,CAAC,GAAU,CAAC;CACrB;CACA,iBAAiB,GAAW;EAO1B,OAAO,EACL,gBAAsB,EAAa,EAAkB,GAAW,kBAAkB;GALlF,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;EAGqE,CAAC,CAAC,KAAkB,KAC9G;CACF;AACF,CAAC,GAMGC,KAAyB;AAC7B,SAASC,GAA4B,GAAM;CACzC,OAAO,EAAK,QAAQ,QAAQ,GAAG,EAAE,QAAQ,kBAAkB,EAAE,EAAE,QAAQ,YAAY,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,YAAY;AACxH;AACkBE,EAAW,OAAO;CAClC,MAAM;CACN,aAAa;EACX,OAAO;GACL,kBAAkB;GAClB,gBAAgB;GAChB,eAAeH;GACf,aAAa;GACb,sBAAsB;GACtB,iBAAiB;GACjB,iBAAiB;EACnB;CACF;CACA,wBAAwB;EACtB,IAAM,IAAgB,KAAK,QAAQ,gBAAgB,QAAQC,GAA4B,KAAK,QAAQ,aAAa,MAAM,QAAQD;EAC/H,OAAO,CACL,IAAII,EAAQ;GACV,KAAK,IAAIC,EAAW,aAAa;GACjC,OAAO,EACL,cAAc,EAAE,QAAK,mBAAgB;IACnC,IAAM,IAAS,KAAK,OAAO,cAAc,CAAC,KAAK,QAAQ,sBACjD,EAAE,cAAW,GACb,IAAc,CAAC;IACrB,IAAI,CAAC,GACH,OAAO;IAET,IAAM,IAAa,KAAK,OAAO;IAyB/B,OAxBA,EAAI,aAAa,GAAM,MAAQ;KAC7B,IAAM,IAAY,KAAU,KAAO,KAAU,IAAM,EAAK,UAClD,IAAU,CAAC,EAAK,UAAU,GAAY,CAAI;KAChD,IAAI,CAAC,EAAK,KAAK,aACb,OAAO,KAAK,QAAQ;KAEtB,KAAK,KAAa,CAAC,KAAK,QAAQ,oBAAoB,GAAS;MAC3D,IAAM,IAAU,CAAC,KAAK,QAAQ,cAAc;MAC5C,AAAI,KACF,EAAQ,KAAK,KAAK,QAAQ,gBAAgB;MAE5C,IAAM,IAAaC,GAAY,KAAK,GAAK,IAAM,EAAK,UAAU;OAC5D,OAAO,EAAQ,KAAK,GAAG;QACtB,IAAgB,OAAO,KAAK,QAAQ,eAAgB,aAAa,KAAK,QAAQ,YAAY;QACzF,QAAQ,KAAK;QACb;QACA;QACA;OACF,CAAC,IAAI,KAAK,QAAQ;MACpB,CAAC;MACD,EAAY,KAAK,CAAU;KAC7B;KACA,OAAO,KAAK,QAAQ;IACtB,CAAC,GACMC,EAAe,OAAO,GAAK,CAAW;GAC/C,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAMeE,EAAW,OAAO;CAChC,MAAM;CACN,aAAa;EACX,OAAO,EACL,WAAW,YACb;CACF;CACA,wBAAwB;EACtB,IAAM,EAAE,WAAQ,eAAY;EAC5B,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,WAAW;GAC/B,OAAO,EACL,YAAY,GAAO;IAIjB,OAHI,EAAM,UAAU,SAAS,EAAO,aAAa,CAAC,EAAO,cAAc,GAAgB,EAAM,SAAS,KAAK,EAAO,KAAK,WAC9G,OAEFC,EAAe,OAAO,EAAM,KAAK,CACtCC,GAAY,OAAO,EAAM,UAAU,MAAM,EAAM,UAAU,IAAI,EAC3D,OAAO,EAAQ,UACjB,CAAC,CACH,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC;AAMD,SAASE,GAAe,EAAE,UAAO,WAAQ;CACvC,OAAO,KAAQ,MAAM,QAAQ,CAAK,KAAK,EAAM,SAAS,EAAK,IAAI,KAAM,GAA6B,SAAU;AAC9G;AACA,IAAIC,KAAeC,EAAW,OAAO;CACnC,MAAM;CACN,aAAa;EACX,OAAO;GACL,MAAM,KAAK;GACX,UAAU,CAAC;EACb;CACF;CACA,wBAAwB;EAEtB,IAAM,IAAS,IAAIC,EAAW,KAAK,IAAI,GACjC,IAAc,KAAK,QAAQ,QAAe,KAAK,OAAO,OAAO,YAAY,aAAa,aAAmC,QAAS,aAClI,IAAgB,OAAO,QAAQ,KAAK,OAAO,OAAO,KAAK,EAAE,KAAK,GAAG,OAAW,CAAK,EAAE,QAAQ,OAAU,KAAK,QAAQ,YAAY,CAAC,GAAG,OAAO,CAAW,EAAE,SAAS,EAAK,IAAI,CAAC;EAC/K,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK;GACL,oBAAoB,GAAc,GAAI,MAAU;IAC9C,IAAM,EAAE,QAAK,OAAI,cAAW,GACtB,IAAwB,EAAO,SAAS,CAAK,GAC7C,IAAc,EAAI,QAAQ,MAC1B,IAAO,EAAO,MAAM;IACtB,OAAa,MAAM,MAAgB,EAAY,QAAA,kBAA4B,CAAC,KAG3E,GAGL,OAAO,EAAG,OAAO,GAAa,EAAK,OAAO,CAAC;GAC7C;GACA,OAAO;IACL,OAAO,GAAG,MAAU;KAClB,IAAM,IAAW,EAAM,GAAG,IAAI;KAC9B,OAAO,CAACJ,GAAe;MAAE,MAAM;MAAU,OAAO;KAAc,CAAC;IACjE;IACA,QAAQ,GAAI,MAAU;KAIpB,IAHI,CAAC,EAAG,cAGJ,EAAG,QAAQ,uBAAuB,GACpC,OAAO;KAET,IAAM,IAAW,EAAG,IAAI;KACxB,OAAO,CAACA,GAAe;MAAE,MAAM;MAAU,OAAO;KAAc,CAAC;IACjE;GACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAKGK,KAAWC,EAAW,OAAO;CAC/B,MAAM;CACN,aAAa;EACX,OAAO;GACL,OAAO;GACP,eAAe;EACjB;CACF;CACA,cAAc;EACZ,OAAO;GACL,aAAa,EAAE,UAAO,kBACb,GAAK,GAAO,CAAQ;GAE7B,aAAa,EAAE,UAAO,kBACb,GAAK,GAAO,CAAQ;EAE/B;CACF;CACA,wBAAwB;EACtB,OAAO,CAAC,GAAQ,KAAK,OAAO,CAAC;CAC/B;CACA,uBAAuB;EACrB,OAAO;GACL,eAAe,KAAK,OAAO,SAAS,KAAK;GACzC,qBAAqB,KAAK,OAAO,SAAS,KAAK;GAC/C,eAAe,KAAK,OAAO,SAAS,KAAK;GAEzC,eAAoB,KAAK,OAAO,SAAS,KAAK;GAC9C,qBAA0B,KAAK,OAAO,SAAS,KAAK;EACtD;CACF;AACF,CAAC,GC7SGO,KA5Ea,EAAU,OAAO;CAChC,MAAM;CACN,gBAAgB;EAEd,IAAM,IAAa,CAAC;EAmEpB,OAlEI,KAAK,QAAQ,SAAS,MACxB,EAAW,KAAK,GAAK,UAAU,KAAK,QAAQ,IAAI,CAAC,GAE/C,KAAK,QAAQ,eAAe,MAC9B,EAAW,KAAK,GAAW,UAAU,KAAK,QAAQ,UAAU,CAAC,GAE3D,KAAK,QAAQ,eAAe,MAC9B,EAAW,KAAK,GAAW,UAAU,KAAK,QAAQ,UAAU,CAAC,GAE3D,KAAK,QAAQ,SAAS,MACxB,EAAW,KAAK,GAAK,UAAU,KAAK,QAAQ,IAAI,CAAC,GAE/C,KAAK,QAAQ,cAAc,MAC7B,EAAW,KAAKN,GAAU,UAAU,KAAK,QAAQ,SAAS,CAAC,GAEzD,KAAK,QAAQ,aAAa,MAC5B,EAAW,KAAK,GAAS,UAAU,KAAK,QAAQ,QAAQ,CAAC,GAEvD,KAAK,QAAQ,eAAe,MAC9B,EAAW,KAAKC,GAAW,UAAU,KAAK,QAAQ,UAAU,CAAC,GAE3D,KAAK,QAAQ,cAAc,MAC7B,EAAW,KAAKC,GAAU,UAAU,KAAK,QAAQ,SAAS,CAAC,GAEzD,KAAK,QAAQ,cAAc,MAC7B,EAAW,KAAK,GAAU,UAAU,KAAK,QAAQ,SAAS,CAAC,GAEzD,KAAK,QAAQ,YAAY,MAC3B,EAAW,KAAK,GAAQ,UAAU,KAAK,QAAQ,OAAO,CAAC,GAErD,KAAK,QAAQ,aAAa,MAC5B,EAAW,KAAKC,GAAS,UAAU,KAAK,QAAQ,QAAQ,CAAC,GAEvD,KAAK,QAAQ,mBAAmB,MAClC,EAAW,KAAK,GAAe,UAAU,KAAK,QAAQ,cAAc,CAAC,GAEnE,KAAK,QAAQ,WAAW,MAC1B,EAAW,KAAK,GAAO,UAAU,KAAK,QAAQ,MAAM,CAAC,GAEnD,KAAK,QAAQ,aAAa,MAC5B,EAAW,KAAK,GAAS,UAAU,KAAK,QAAQ,QAAQ,CAAC,GAEvD,KAAK,QAAQ,eAAe,MAC9B,EAAW,KAAK,GAAW,UAAgB,KAAK,SAA+B,UAAU,CAAC,GAExF,KAAK,QAAQ,SAAS,MACxB,EAAW,KAAKC,GAAK,UAAgB,KAAK,SAA+B,IAAI,CAAC,GAE5E,KAAK,QAAQ,gBAAgB,MAC/B,EAAW,KAAK,GAAY,UAAU,KAAK,QAAQ,WAAW,CAAC,GAE7D,KAAK,QAAQ,cAAc,MAC7B,EAAW,KAAK,GAAU,UAAU,KAAK,QAAQ,SAAS,CAAC,GAEzD,KAAK,QAAQ,WAAW,MAC1B,EAAW,KAAK,GAAO,UAAU,KAAK,QAAQ,MAAM,CAAC,GAEnD,KAAK,QAAQ,SAAS,MACxB,EAAW,KAAK,GAAK,UAAU,KAAK,QAAQ,IAAI,CAAC,GAE/C,KAAK,QAAQ,cAAc,MAC7B,EAAW,KAAK,GAAU,UAAgB,KAAK,SAA+B,SAAS,CAAC,GAEtF,KAAK,QAAQ,iBAAiB,MAChC,EAAW,KAAKC,GAAa,UAAgB,KAAK,SAA+B,YAAY,CAAC,GAEzF;CACT;AACF,CAGoB,GCpFhB,KAA6B,0BAC7B,KAA2B,IAAI,OAAO,EAA0B,GAChE,KAAmC,OAAO,GAAG,GAA2B,EAAE,GAC1E,KAAkC,IAAI,OAAO,IAA4B,GAAG;AAGhF,SAAS,GAAqB,GAAQ;CAOpC,OANI,EAAO,WAAW,IACb,EAAO,GAAG,SAEf,EAAO,WAAW,KAAK,EAAO,GAAG,SAC5B,CAAC,MAAM,IAAI,EAAE,SAAS,EAAO,GAAG,QAAQ,EAAO,GAAG,KAAK,IAEzD;AACT;AACA,SAAS,GAAS,GAAS;CACzB,OAAO,IAAI,EAAO;EAChB,KAAK,IAAI,EAAU,UAAU;EAC7B,oBAAoB,GAAc,GAAU,MAAa;GACvD,IAAM,IAAa,EAAa,MAAM,MAAgB,EAAY,UAAU,KAAK,CAAC,EAAS,IAAI,GAAG,EAAS,GAAG,GACxG,IAAkB,EAAa,MAAM,MAAgB,EAAY,QAAQ,iBAAiB,CAAC;GACjG,IAAI,CAAC,KAAc,GACjB;GAEF,IAAM,EAAE,UAAO;GAGf,OAFkBG,GAAwB,EAAS,KAAK,CAAC,GAAG,CAAY,CAC/B,CACnC,EAAE,SAAS,EAAE,kBAAe;IAChC,IAAM,IAAuBC,GAAoB,EAAS,KAAK,IAAW,MAAS,EAAK,WAAW,GAC/F,GACA;IACJ,IAAI,EAAqB,SAAS,GAEhC,AADA,IAAY,EAAqB,IACjC,IAAuB,EAAS,IAAI,YAClC,EAAU,KACV,EAAU,MAAM,EAAU,KAAK,UAC/B,KAAK,GACL,GACF;SACK,IAAI,EAAqB,QAAQ;KACtC,IAAM,IAAU,EAAS,IAAI,YAAY,EAAS,MAAM,EAAS,IAAI,KAAK,GAAG;KAC7E,IAAI,CAAC,GAA6B,KAAK,CAAO,GAC5C;KAGF,AADA,IAAY,EAAqB,IACjC,IAAuB,EAAS,IAAI,YAAY,EAAU,KAAK,EAAS,IAAI,KAAK,GAAG,GAAG;IACzF;IACA,IAAI,KAAa,GAAsB;KACrC,IAAM,IAAwB,EAAqB,MAAM,EAAwB,EAAE,OAAO,OAAO;KACjG,IAAI,EAAsB,UAAU,GAClC,OAAO;KAET,IAAM,IAAsB,EAAsB,EAAsB,SAAS,IAC3E,IAAyB,EAAU,MAAM,EAAqB,YAAY,CAAmB;KACnG,IAAI,CAAC,GACH,OAAO;KAET,IAAM,IAAmB,GAAS,CAAmB,EAAE,KAAK,MAAM,EAAE,SAAS,EAAQ,eAAe,CAAC;KACrG,IAAI,CAAC,GAAqB,CAAgB,GACxC,OAAO;KAET,EAAiB,QAAQ,MAAS,EAAK,MAAM,EAAE,KAAK,OAAU;MAC5D,GAAG;MACH,MAAM,IAAyB,EAAK,QAAQ;MAC5C,IAAI,IAAyB,EAAK,MAAM;KAC1C,EAAE,EAAE,QAAQ,MACL,EAAS,OAAO,MAAM,OAGpB,CAAC,EAAS,IAAI,aAAa,EAAK,MAAM,EAAK,IAAI,EAAS,OAAO,MAAM,IAAI,IAFvE,EAGV,EAAE,QAAQ,MAAS,EAAQ,SAAS,EAAK,KAAK,CAAC,EAAE,QAAQ,MAAS,EAAQ,eAAe,EAAK,KAAK,CAAC,EAAE,SAAS,MAAS;MACnHC,GAAgB,EAAK,MAAM,EAAK,IAAI,EAAS,GAAG,EAAE,MAAM,MAAS,EAAK,KAAK,SAAS,EAAQ,IAAI,KAGpG,EAAG,QACD,EAAK,MACL,EAAK,IACL,EAAQ,KAAK,OAAO,EAClB,MAAM,EAAK,KACb,CAAC,CACH;KACF,CAAC;IACH;GACF,CAAC,GACI,EAAG,MAAM,QAGd,OAAO;EACT;CACF,CAAC;AACH;AAKA,SAAS,GAAa,GAAS;CAC7B,OAAO,IAAIC,EAAQ;EACjB,KAAK,IAAIC,EAAW,iBAAiB;EACrC,OAAO,EACL,cAAc,GAAM,GAAK,MAAU;GAKjC,IAHI,EAAM,WAAW,KAGjB,CAAC,EAAK,UACR,OAAO;GAET,IAAI,IAAO;GACX,IAAI,EAAM,kBAAkB,mBAC1B,IAAO,EAAM;QACR;IACL,IAAM,IAAS,EAAM;IACrB,IAAI,CAAC,GACH,OAAO;IAET,IAAM,IAAO,EAAQ,OAAO,KAAK;IAEjC,AADA,IAAO,EAAO,QAAQ,GAAG,GACrB,KAAQ,CAAC,EAAK,SAAS,CAAI,MAC7B,IAAO;GAEX;GACA,IAAI,CAAC,GACH,OAAO;GAET,IAAI,IAAU;GAKd,IAJI,EAAQ,yBAEV,IADsB,EAAQ,OAAO,SAAS,gBAAgB,EAAQ,KAAK,IACrD,IAEpB,EAAQ,aAAa;IACvB,IAAM,IAAQC,GAAc,EAAK,OAAO,EAAQ,KAAK,IAAI,GACnD,IAAa,EAAK,QAAqB,EAAM,MAC7C,IAAe,EAAK,UAAuB,EAAM;IACvD,AAAI,MACF,OAAO,KAAK,GAAM,CAAM,GACxB,IAAU;GAEd;GACA,OAAO;EACT,EACF;CACF,CAAC;AACH;AAKA,SAAS,GAAa,GAAS;CAC7B,OAAO,IAAIC,EAAQ;EACjB,KAAK,IAAIC,EAAW,iBAAiB;EACrC,OAAO,EACL,cAAc,GAAM,GAAQ,MAAU;GACpC,IAAM,EAAE,sBAAmB,GACrB,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,aAAU;GAClB,IAAI,GACF,OAAO;GAET,IAAI,IAAc;GAClB,EAAM,QAAQ,SAAS,MAAS;IAC9B,KAAe,EAAK;GACtB,CAAC;GACD,IAAM,IAAO,GAAK,GAAa,EAAE,iBAAiB,EAAQ,gBAAgB,CAAC,EAAE,MAC1E,MAAS,EAAK,UAAU,EAAK,UAAU,CAC1C;GAIA,OAHI,CAAC,KAAe,CAAC,KAAQ,MAAmB,KAAK,KAAK,CAAC,EAAe,EAAK,KAAK,IAC3E,KAEF,EAAQ,OAAO,SAAS,QAAQ,EAAQ,MAAM,EACnD,MAAM,EAAK,KACb,CAAC;EACH,EACF;CACF,CAAC;AACH;AAIA,SAAS,GAAa,GAAK,GAAW;CACpC,IAAM,IAAmB;EAAC;EAAQ;EAAS;EAAO;EAAQ;EAAU;EAAO;EAAU;EAAO;EAAO;CAAM;CASzG,OARI,KACF,EAAU,SAAS,MAAa;EAC9B,IAAM,IAAe,OAAO,KAAa,WAAW,IAAW,EAAS;EACxE,AAAI,KACF,EAAiB,KAAK,CAAY;CAEtC,CAAC,GAEI,CAAC,KAAO,EAAI,QAAQ,IAAiC,EAAE,EAAE,MAC1D,OAEF,UAAU,EAAiB,KAAK,GAAG,EAAE,0CACrC,GACF,CACF;AACF;AAwOA,IAAIK,KAvOOJ,GAAK,OAAO;CACrB,MAAM;CACN,UAAU;CACV,aAAa;CACb,UAAU;CACV,WAAW;EAKT,AAJI,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ,mBACzC,KAAK,QAAQ,iBAAiB,KAAK,QAAQ,UAC3C,QAAQ,KAAK,qFAAqF,IAEpG,KAAK,QAAQ,UAAU,SAAS,MAAa;GAC3C,IAAI,OAAO,KAAa,UAAU;IAChC,GAAuB,CAAQ;IAC/B;GACF;GACA,GAAuB,EAAS,QAAQ,EAAS,eAAe;EAClE,CAAC;CACH;CACA,YAAY;EACV,GAAM;CACR;CACA,YAAY;EACV,OAAO,KAAK,QAAQ;CACtB;CACA,aAAa;EACX,OAAO;GACL,aAAa;GACb,sBAAsB;GACtB,aAAa;GACb,UAAU;GACV,WAAW,CAAC;GACZ,iBAAiB;GACjB,gBAAgB;IACd,QAAQ;IACR,KAAK;IACL,OAAO;GACT;GACA,eAAe,GAAK,MAAQ,CAAC,CAAC,GAAa,GAAK,EAAI,SAAS;GAC7D,WAAW,MAAQ,CAAC,CAAC;GACrB,iBAAiB,MAAQ;IACvB,IAAM,IAAc,2BAA2B,KAAK,CAAG,GACjD,IAAmB,uBAAuB,KAAK,CAAG;IACxD,IAAI,KAAe,KAAoB,CAAC,EAAI,SAAS,GAAG,GACtD,OAAO;IAGT,IAAM,KADqB,EAAI,SAAS,GAAG,IAAI,EAAI,MAAM,GAAG,EAAE,IAAI,IAAI,GAClC,MAAM,QAAQ,EAAE;IAOpD,OAHA,EAHI,0BAA0B,KAAK,CAAQ,KAGvC,CAAC,KAAK,KAAK,CAAQ;GAIzB;EACF;CACF;CACA,gBAAgB;EACd,OAAO;GACL,MAAM;IACJ,SAAS;IACT,UAAU,GAAS;KACjB,OAAO,EAAQ,aAAa,MAAM;IACpC;GACF;GACA,QAAQ,EACN,SAAS,KAAK,QAAQ,eAAe,OACvC;GACA,KAAK,EACH,SAAS,KAAK,QAAQ,eAAe,IACvC;GACA,OAAO,EACL,SAAS,KAAK,QAAQ,eAAe,MACvC;GACA,OAAO,EACL,SAAS,KACX;EACF;CACF;CACA,YAAY;EACV,OAAO,CACL;GACE,KAAK;GACL,WAAW,MAAQ;IACjB,IAAM,IAAO,EAAI,aAAa,MAAM;IAQpC,OAPI,CAAC,KAAQ,CAAC,KAAK,QAAQ,aAAa,GAAM;KAC5C,kBAAkB,MAAQ,CAAC,CAAC,GAAa,GAAK,KAAK,QAAQ,SAAS;KACpE,WAAW,KAAK,QAAQ;KACxB,iBAAiB,KAAK,QAAQ;IAChC,CAAC,IACQ,KAEF;GACT;EACF,CACF;CACF;CACA,WAAW,EAAE,qBAAkB;EAQ7B,OAPK,KAAK,QAAQ,aAAa,EAAe,MAAM;GAClD,kBAAkB,MAAS,CAAC,CAAC,GAAa,GAAM,KAAK,QAAQ,SAAS;GACtE,WAAW,KAAK,QAAQ;GACxB,iBAAiB,KAAK,QAAQ;EAChC,CAAC,IAGM;GAAC;GAAKC,GAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAAG;EAAC,IAFnE;GAAC;GAAKA,GAAgB,KAAK,QAAQ,gBAAgB;IAAE,GAAG;IAAgB,MAAM;GAAG,CAAC;GAAG;EAAC;CAGjG;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MACd,EAAQ,UAAU,QAAQ,EAAQ,YAAY,EAAM,UAAU,CAAC,CAAC,GAAG;EACxE,MAAM,EAAM;EACZ,OAAO,EAAM,SAAS;CACxB,CAAC;CAEH,iBAAiB,GAAM,MAAM;EAE3B,IAAM,IAAmB,EAAK,OAA6B,QAAqB,IAC1E,IAAoB,EAAK,OAA6B,SAAsB,IAC5E,IAAO,EAAE,eAAe,CAAI;EAClC,OAAO,IAAQ,IAAI,EAAK,IAAI,EAAK,IAAI,EAAM,MAAM,IAAI,EAAK,IAAI,EAAK;CACrE;CACA,cAAc;EACZ,OAAO;GACL,UAAU,OAAgB,EAAE,eAAY;IACtC,IAAM,EAAE,YAAS;IAQjB,OAPK,KAAK,QAAQ,aAAa,GAAM;KACnC,kBAAkB,MAAQ,CAAC,CAAC,GAAa,GAAK,KAAK,QAAQ,SAAS;KACpE,WAAW,KAAK,QAAQ;KACxB,iBAAiB,KAAK,QAAQ;IAChC,CAAC,IAGM,EAAM,EAAE,QAAQ,KAAK,MAAM,CAAU,EAAE,QAAQ,mBAAmB,EAAI,EAAE,IAAI,IAF1E;GAGX;GACA,aAAa,OAAgB,EAAE,eAAY;IACzC,IAAM,EAAE,YAAS,KAAc,CAAC;IAQhC,OAPI,KAAQ,CAAC,KAAK,QAAQ,aAAa,GAAM;KAC3C,kBAAkB,MAAQ,CAAC,CAAC,GAAa,GAAK,KAAK,QAAQ,SAAS;KACpE,WAAW,KAAK,QAAQ;KACxB,iBAAiB,KAAK,QAAQ;IAChC,CAAC,IACQ,KAEF,EAAM,EAAE,WAAW,KAAK,MAAM,GAAY,EAAE,sBAAsB,GAAK,CAAC,EAAE,QAAQ,mBAAmB,EAAI,EAAE,IAAI;GACxH;GACA,kBAAkB,EAAE,eACX,EAAM,EAAE,UAAU,KAAK,MAAM,EAAE,sBAAsB,GAAK,CAAC,EAAE,QAAQ,mBAAmB,EAAI,EAAE,IAAI;EAE7G;CACF;CACA,gBAAgB;EACd,OAAO,CACLC,GAAc;GACZ,OAAO,MAAS;IACd,IAAM,IAAa,CAAC;IACpB,IAAI,GAAM;KACR,IAAM,EAAE,cAAW,uBAAoB,KAAK,SACtC,IAAQC,GAAM,CAAI,EAAE,QACvB,MAAS,EAAK,UAAU,KAAK,QAAQ,aAAa,EAAK,OAAO;MAC7D,kBAAkB,MAAS,CAAC,CAAC,GAAa,GAAM,CAAS;MACzD;MACA;KACF,CAAC,CACH;KACA,AAAI,EAAM,UACR,EAAM,SAAS,MAAS;MACjB,KAAK,QAAQ,eAAe,EAAK,KAAK,KAG3C,EAAW,KAAK;OACd,MAAM,EAAK;OACX,MAAM,EACJ,MAAM,EAAK,KACb;OACA,OAAO,EAAK;MACd,CAAC;KACH,CAAC;IAEL;IACA,OAAO;GACT;GACA,MAAM,KAAK;GACX,gBAAgB,OAEP,EACL,MAAY,EAAM,MAA4B,KAChD;EAEJ,CAAC,CACH;CACF;CACA,wBAAwB;EACtB,IAAM,IAAU,CAAC,GACX,EAAE,cAAW,uBAAoB,KAAK;EAiC5C,OAhCI,KAAK,QAAQ,YACf,EAAQ,KACN,GAAS;GACP,MAAM,KAAK;GACX,iBAAiB,KAAK,QAAQ;GAC9B,WAAW,MAAQ,KAAK,QAAQ,aAAa,GAAK;IAChD,kBAAkB,MAAS,CAAC,CAAC,GAAa,GAAM,CAAS;IACzD;IACA;GACF,CAAC;GACD,gBAAgB,KAAK,QAAQ;EAC/B,CAAC,CACH,GAEF,EAAQ,KACN,GAAa;GACX,MAAM,KAAK;GACX,QAAQ,KAAK;GACb,aAAa,KAAK,QAAQ,gBAAgB,oBAAoB,KAAO,KAAK,QAAQ;GAClF,sBAAsB,KAAK,QAAQ;EACrC,CAAC,CACH,GACI,KAAK,QAAQ,eACf,EAAQ,KACN,GAAa;GACX,QAAQ,KAAK;GACb,iBAAiB,KAAK,QAAQ;GAC9B,MAAM,KAAK;GACX,gBAAgB,KAAK,QAAQ;EAC/B,CAAC,CACH,GAEK;CACT;AACF,CAGoB;ACnbCE,EAAU,OAAO;CACpC,MAAM;CACN,aAAa;EACX,OAAO;GACL,OAAO;GACP,UAAU;GACV,MAAM;GACN,cAAc,MAAS,EAAK;GAC5B,cAAc,MAAS,EAAK,MAAM,GAAG,EAAE,QAAQ,MAAS,MAAS,EAAE,EAAE;EACvE;CACF;CACA,aAAa;EACX,OAAO;GACL,kBAAkB;GAClB,aAAa;EACf;CACF;CACA,iBAAiB;EAUf,AATA,KAAK,QAAQ,cAAc,MAAY;GACrC,IAAM,IAAQ,GAAmC,QAAS,KAAK,OAAO,MAAM;GAE5E,KADc,GAAmC,QAAS,KAAK,QAAQ,UAC1D,YAAY;IACvB,IAAM,IAAO,EAAK,YAAY,GAAG,EAAK,QAAQ,MAAM,KAAK,GAAG,GAAG;IAC/D,OAAO,KAAK,QAAQ,YAAY,CAAI;GACtC;GACA,OAAO,EAAK;EACd,GACA,KAAK,QAAQ,SAAS,MAAY;GAChC,IAAM,IAAQ,GAAmC,QAAS,KAAK,OAAO,MAAM,KACtE,IAAO,EAAK,YAAY,GAAG,EAAK,QAAQ,MAAM,KAAK,GAAG;GAC5D,OAAO,KAAK,QAAQ,YAAY,CAAI;EACtC;CACF;CACA,wBAAwB;EACtB,IAAI,IAAwB;EAC5B,OAAO,CACL,IAAI,EAAO;GACT,KAAK,IAAI,EAAU,gBAAgB;GACnC,oBAAoB,GAAc,GAAU,MAAa;IACvD,IAAI,GACF;IAEF,IAAM,IAAQ,KAAK,QAAQ,OACrB,IAAW,KAAK,QAAQ;IAC9B,IAAI,KAAU,QAA4B,MAAU,KAAK,MAAa,IAAO;KAC3E,IAAwB;KACxB;IACF;IACA,IAAM,IAAqB,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAS,IAAI,CAAC;IACzE,IAAI,IAAqB,GAAO;KAC9B,IAEM,IAFO,IAAqB;KAGlC,QAAQ,KACN,sDAAsD,EAAM,gDAC9D;KACA,IAAM,IAAK,EAAS,GAAG,YAAY,GAAM,CAAE;KAE3C,OADA,IAAwB,IACjB;IACT;IACA,IAAwB;GAC1B;GACA,oBAAoB,GAAa,MAAU;IACzC,IAAM,IAAQ,KAAK,QAAQ;IAC3B,IAAI,CAAC,EAAY,cAAc,MAAU,KAAK,KAAU,MACtD,OAAO;IAET,IAAM,IAAU,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAM,IAAI,CAAC,GACrD,IAAU,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAY,IAAI,CAAC;IAIjE,IAHI,KAAW,KAGX,IAAU,KAAS,IAAU,KAAS,KAAW,GACnD,OAAO;IAMT,IAJI,IAAU,KAAS,IAAU,KAAS,IAAU,KAIhD,CADY,EAAY,QAAQ,OACzB,GACT,OAAO;IAET,IAAM,IAAM,EAAY,UAAU,MAAM,KAElC,IAAO,KADA,IAAU,IAEjB,IAAK;IAMX,OALA,EAAY,YAAY,GAAM,CAAE,GAEhC,EADoB,KAAK,QAAQ,WAAW,EAAE,MAAM,EAAY,IAAI,CACtD,IAAI;GAIpB;EACF,CAAC,CACH;CACF;AACF,CAAC,GAKgBC,EAAW,OAAO;CACjC,MAAM;CACN,aAAa;EACX,OAAO;GACL,OAAO;GACP,OAAO;GACP,OAAO,KAAK;EACd;CACF;CACA,wBAAwB;EACtB,OAAO,CAAC,GAAW,KAAK,OAAO,CAAC;CAClC;AACF,CAAC,GAMWC,EAAW,OAAO;CAC5B,MAAM;CACN,aAAa;EACX,OAAO;GACL,WAAW;GACX,MAAM;EACR;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,OAAO;GAC3B,OAAO,EACL,cAAc,EAAE,QAAK,mBAAgB;IACnC,IAAM,EAAE,eAAY,iBAAc,KAAK,QACjC,EAAE,cAAW,GACb,IAAc,CAAC;IACrB,IAAI,CAAC,KAAc,CAAC,GAClB,OAAO,EAAc,OAAO,GAAK,CAAC,CAAC;IAErC,IAAI,IAAY;IAChB,AAAI,KAAK,QAAQ,SAAS,aACxB,EAAI,aAAa,GAAM,MAAQ;KACzB,OAAK,QAIT;UAAI,EADc,KAAU,KAAO,KAAU,IAAM,EAAK,WAAW,IAEjE,OAAO;MAET,KAAa;KAFJ;IAGX,CAAC;IAEH,IAAI,IAAe;IAoBnB,OAnBA,EAAI,aAAa,GAAM,MAAQ;KAK7B,IAJI,EAAK,UAIL,EADc,KAAU,KAAO,KAAU,IAAM,EAAK,WAAW,IAEjE,OAAO;KAIT,IAFA,KAAgB,GACG,KAAK,QAAQ,SAAS,aAAa,IAAY,IAAe,KAAK,KAAK,QAAQ,SAAS,gBAAgB,IAAe,GAEzI,OAAO,KAAK,QAAQ,SAAS;KAE/B,EAAY,KACV,GAAW,KAAK,GAAK,IAAM,EAAK,UAAU,EACxC,OAAO,KAAK,QAAQ,UACtB,CAAC,CACH;IACF,CAAC,GACM,EAAc,OAAO,GAAK,CAAW;GAC9C,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAKeC,EAAW,OAAO;CAChC,MAAM;CACN,wBAAwB;EACtB,OAAO,CAAC,GAAU,CAAC;CACrB;CACA,iBAAiB,GAAW;EAO1B,OAAO,EACL,gBAAsBC,EAAaC,EAAkB,GAAW,kBAAkB;GALlF,MAAM,EAAU;GAChB,SAAS,EAAU;GACnB,SAAS,EAAU;EAGqE,CAAC,CAAC,KAAkB,KAC9G;CACF;AACF,CAAC;AAMD,IAAI,KAAyB;AAC7B,SAAS,GAA4B,GAAM;CACzC,OAAO,EAAK,QAAQ,QAAQ,GAAG,EAAE,QAAQ,kBAAkB,EAAE,EAAE,QAAQ,YAAY,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,YAAY;AACxH;AACA,IAAI,KAAcC,EAAW,OAAO;CAClC,MAAM;CACN,aAAa;EACX,OAAO;GACL,kBAAkB;GAClB,gBAAgB;GAChB,eAAe;GACf,aAAa;GACb,sBAAsB;GACtB,iBAAiB;GACjB,iBAAiB;EACnB;CACF;CACA,wBAAwB;EACtB,IAAM,IAAgB,KAAK,QAAQ,gBAAgB,QAAQ,GAA4B,KAAK,QAAQ,aAAa,MAAM,QAAQ;EAC/H,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,aAAa;GACjC,OAAO,EACL,cAAc,EAAE,QAAK,mBAAgB;IACnC,IAAM,IAAS,KAAK,OAAO,cAAc,CAAC,KAAK,QAAQ,sBACjD,EAAE,cAAW,GACb,IAAc,CAAC;IACrB,IAAI,CAAC,GACH,OAAO;IAET,IAAM,IAAa,KAAK,OAAO;IAyB/B,OAxBA,EAAI,aAAa,GAAM,MAAQ;KAC7B,IAAM,IAAY,KAAU,KAAO,KAAU,IAAM,EAAK,UAClD,IAAU,CAAC,EAAK,UAAUC,GAAY,CAAI;KAChD,IAAI,CAAC,EAAK,KAAK,aACb,OAAO,KAAK,QAAQ;KAEtB,KAAK,KAAa,CAAC,KAAK,QAAQ,oBAAoB,GAAS;MAC3D,IAAM,IAAU,CAAC,KAAK,QAAQ,cAAc;MAC5C,AAAI,KACF,EAAQ,KAAK,KAAK,QAAQ,gBAAgB;MAE5C,IAAM,IAAaC,GAAY,KAAK,GAAK,IAAM,EAAK,UAAU;OAC5D,OAAO,EAAQ,KAAK,GAAG;QACtB,IAAgB,OAAO,KAAK,QAAQ,eAAgB,aAAa,KAAK,QAAQ,YAAY;QACzF,QAAQ,KAAK;QACb;QACA;QACA;OACF,CAAC,IAAI,KAAK,QAAQ;MACpB,CAAC;MACD,EAAY,KAAK,CAAU;KAC7B;KACA,OAAO,KAAK,QAAQ;IACtB,CAAC,GACMC,EAAe,OAAO,GAAK,CAAW;GAC/C,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC;AAMeC,EAAW,OAAO;CAChC,MAAM;CACN,aAAa;EACX,OAAO,EACL,WAAW,YACb;CACF;CACA,wBAAwB;EACtB,IAAM,EAAE,WAAQ,eAAY;EAC5B,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK,IAAIC,EAAW,WAAW;GAC/B,OAAO,EACL,YAAY,GAAO;IAIjB,OAHI,EAAM,UAAU,SAAS,EAAO,aAAa,CAAC,EAAO,cAAcC,GAAgB,EAAM,SAAS,KAAK,EAAO,KAAK,WAC9G,OAEFC,EAAe,OAAO,EAAM,KAAK,CACtCC,GAAY,OAAO,EAAM,UAAU,MAAM,EAAM,UAAU,IAAI,EAC3D,OAAO,EAAQ,UACjB,CAAC,CACH,CAAC;GACH,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC;AAMD,SAAS,GAAe,EAAE,UAAO,WAAQ;CACvC,OAAO,KAAQ,MAAM,QAAQ,CAAK,KAAK,EAAM,SAAS,EAAK,IAAI,KAAM,GAA6B,SAAU;AAC9G;AACmBC,EAAW,OAAO;CACnC,MAAM;CACN,aAAa;EACX,OAAO;GACL,MAAM,KAAK;GACX,UAAU,CAAC;EACb;CACF;CACA,wBAAwB;EAEtB,IAAM,IAAS,IAAIC,EAAW,KAAK,IAAI,GACjC,IAAc,KAAK,QAAQ,QAAe,KAAK,OAAO,OAAO,YAAY,aAAa,aAAmC,QAAS,aAClI,IAAgB,OAAO,QAAQ,KAAK,OAAO,OAAO,KAAK,EAAE,KAAK,GAAG,OAAW,CAAK,EAAE,QAAQ,OAAU,KAAK,QAAQ,YAAY,CAAC,GAAG,OAAO,CAAW,EAAE,SAAS,EAAK,IAAI,CAAC;EAC/K,OAAO,CACL,IAAIC,EAAQ;GACV,KAAK;GACL,oBAAoB,GAAc,GAAI,MAAU;IAC9C,IAAM,EAAE,QAAK,OAAI,cAAW,GACtB,IAAwB,EAAO,SAAS,CAAK,GAC7C,IAAc,EAAI,QAAQ,MAC1B,IAAO,EAAO,MAAM;IACtB,OAAa,MAAM,MAAgB,EAAY,QAAA,kBAA4B,CAAC,KAG3E,GAGL,OAAO,EAAG,OAAO,GAAa,EAAK,OAAO,CAAC;GAC7C;GACA,OAAO;IACL,OAAO,GAAG,MAAU;KAClB,IAAM,IAAW,EAAM,GAAG,IAAI;KAC9B,OAAO,CAAC,GAAe;MAAE,MAAM;MAAU,OAAO;KAAc,CAAC;IACjE;IACA,QAAQ,GAAI,MAAU;KAIpB,IAHI,CAAC,EAAG,cAGJ,EAAG,QAAQ,uBAAuB,GACpC,OAAO;KAET,IAAM,IAAW,EAAG,IAAI;KACxB,OAAO,CAAC,GAAe;MAAE,MAAM;MAAU,OAAO;KAAc,CAAC;IACjE;GACF;EACF,CAAC,CACH;CACF;AACF,CAAC,GAKcC,EAAW,OAAO;CAC/B,MAAM;CACN,aAAa;EACX,OAAO;GACL,OAAO;GACP,eAAe;EACjB;CACF;CACA,cAAc;EACZ,OAAO;GACL,aAAa,EAAE,UAAO,kBACb,GAAK,GAAO,CAAQ;GAE7B,aAAa,EAAE,UAAO,kBACb,GAAK,GAAO,CAAQ;EAE/B;CACF;CACA,wBAAwB;EACtB,OAAO,CAAC,GAAQ,KAAK,OAAO,CAAC;CAC/B;CACA,uBAAuB;EACrB,OAAO;GACL,eAAe,KAAK,OAAO,SAAS,KAAK;GACzC,qBAAqB,KAAK,OAAO,SAAS,KAAK;GAC/C,eAAe,KAAK,OAAO,SAAS,KAAK;GAEzC,eAAoB,KAAK,OAAO,SAAS,KAAK;GAC9C,qBAA0B,KAAK,OAAO,SAAS,KAAK;EACtD;CACF;AACF,CAAC;;;ACxYD,IAAI,KAAgB,ICAhB,KAAmB,GACnB,KAAqB,wBACrB,KAAkB,wBAClB,KAAYC,GAAK,OAAO;CAC1B,MAAM;CACN,aAAa;EACX,OAAO;GACL,qBAAqB;GACrB,mBAAmB;GACnB,iBAAiB;GACjB,iBAAiB;GACjB,sBAAsB;GACtB,SAAS;GACT,gBAAgB,CAAC;EACnB;CACF;CACA,SAAS;CACT,OAAO;CACP,OAAO;CACP,MAAM;CACN,UAAU;CACV,gBAAgB;EACd,OAAO,EACL,UAAU;GACR,SAAS,KAAK,QAAQ;GACtB,YAAY,MAAY;IAEtB,IAAM,EAAE,2BAAwB,KAAK;IAUrC,OATK,KAIa,CADE,GAAU,EAAQ,mBAAyC,aAAc,CAAC,CACnE,EAAE,QAAQ,MAAc,EAAU,WAAW,CAAmB,CAAC,EAAE,KAAK,MAAc,EAAU,QAAQ,GAAqB,EAAE,CACjI,EAAE,MAJlB;GASX;GACA,UAAU;EACZ,EACF;CACF;CACA,YAAY;EACV,OAAO,CACL;GACE,KAAK;GACL,oBAAoB;EACtB,CACF;CACF;CACA,WAAW,EAAE,SAAM,qBAAkB;EACnC,OAAO;GACL;GACAC,GAAgB,KAAK,QAAQ,gBAAgB,CAAc;GAC3D;IACE;IACA,EACE,OAAO,EAAK,MAAM,WAAW,KAAK,QAAQ,sBAAsB,EAAK,MAAM,WAAW,KACxF;IACA;GACF;EACF;CACF;CACA,mBAAmB;CACnB,gBAAgB,GAAO,MAEV,EAAM,KAA2B,WAAW,KAAK,MAAO,MAAgB,EAAM,KAA2B,WAAW,KAAK,MAAO,MAAS,EAAM,mBAAmB,aACpK,CAAC,IAEH,EAAQ,WACb,aACA,EAAE,UAAU,EAAM,QAAQ,KAAK,GAC/B,EAAM,OAAO,CAAC,EAAQ,eAAe,EAAM,IAAI,CAAC,IAAI,CAAC,CACvD;CAEF,iBAAiB,GAAM,MAAM;EAE3B,IAAI,IAAS,IACP,IAAkB,EAAK,OAA6B,YAAa;EASvE,OARA,AACE,IADG,EAAK,UAMC;GADM,SAAS;GAAY,EAAE,eAAe,EAAK,OAAO;GAAG;EACvD,EAAE,KAAK,IAAI,IALf,SAAS,EAAS;;SAOtB;CACT;CACA,cAAc;EACZ,OAAO;GACL,eAAe,OAAgB,EAAE,kBACxB,EAAS,QAAQ,KAAK,MAAM,CAAU;GAE/C,kBAAkB,OAAgB,EAAE,kBAC3B,EAAS,WAAW,KAAK,MAAM,aAAa,CAAU;EAEjE;CACF;CACA,uBAAuB;EACrB,OAAO;GACL,mBAAmB,KAAK,OAAO,SAAS,gBAAgB;GAExD,iBAAiB;IACf,IAAM,EAAE,UAAO,eAAY,KAAK,OAAO,MAAM,WACvC,IAAY,EAAQ,QAAQ;IAOlC,OANI,CAAC,KAAS,EAAQ,OAAO,KAAK,SAAS,KAAK,OACvC,KAEL,KAAa,CAAC,EAAQ,OAAO,YAAY,SACpC,KAAK,OAAO,SAAS,WAAW,IAElC;GACT;GAEA,MAAM,EAAE,gBAAa;IAEnB,IAAI,CAAC,KAAK,QAAQ,sBAChB,OAAO;IAET,IAAM,IAAgB,KAAK,QAAQ,WAAwB,IACrD,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,UAAO,aAAU;IACzB,IAAI,EAAM,OAAO,SAAS,KAAK,MAC7B,OAAO;IAET,IAAM,IAAS,IAAI,OAAO,CAAO;IAIjC,OAHI,IACK,EAAO,SAAS,cAAc,CAAM,IAEtC,EAAO,SAAS,SAAS,EAAE,YAAS;KACzC,IAAM,EAAE,SAAM,UAAO,GAGf,IAFO,EAAM,IAAI,YAAY,GAAM,GAAI,MAAM,IAClC,EAAE,MAAM,IACA,EAAE,KAAK,MAAS,IAAS,CAAI,EAAE,KAAK,IAAI;KAEjE,OADA,EAAG,YAAY,GAAM,GAAI,EAAM,OAAO,KAAK,CAAY,CAAC,GACjD;IACT,CAAC;GACH;GAEA,cAAc,EAAE,gBAAa;IAE3B,IAAI,CAAC,KAAK,QAAQ,sBAChB,OAAO;IAET,IAAM,IAAgB,KAAK,QAAQ,WAAwB,IACrD,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,UAAO,aAAU;IAwCzB,OAvCI,EAAM,OAAO,SAAS,KAAK,OAG3B,IACK,EAAO,SAAS,SAAS,EAAE,YAAS;KAEzC,IAAM,EAAE,WAAQ,GACV,IAAiB,EAAM,MAAM,GAC7B,IAAe,EAAM,IAAI,GAEzB,IADU,EAAM,IAAI,YAAY,GAAgB,GAAc,MAAM,IACtD,EAAE,MAAM,IAAI,GAC5B,IAAmB,GACnB,IAAY,GACV,IAAoB,IAAM;KAChC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,KAAK,GAAG;MACxC,IAAI,IAAY,EAAM,GAAG,UAAU,GAAmB;OACpD,IAAmB;OACnB;MACF;MACA,KAAa,EAAM,GAAG,SAAS;KACjC;KAEA,IAAM,IADc,EAAM,GACgB,MAAM,KAAK,IAA0B,MAAO,IAChF,IAAiB,KAAK,IAAI,EAAc,QAAQ,CAAO;KAC7D,IAAI,MAAmB,GACrB,OAAO;KAET,IAAI,IAAe;KACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAkB,KAAK,GACzC,KAAgB,EAAM,GAAG,SAAS;KAOpC,OALA,EAAG,OAAO,GAAc,IAAe,CAAc,GAC7B,IAAM,KACP,KACrB,EAAG,aAAa,EAAc,OAAO,EAAG,KAAK,CAAY,CAAC,GAErD;IACT,CAAC,IAEI,EAAO,SAAS,SAAS,EAAE,YAAS;KACzC,IAAM,EAAE,SAAM,UAAO,GAGf,IAFO,EAAM,IAAI,YAAY,GAAM,GAAI,MAAM,IAClC,EAAE,MAAM,IACK,EAAE,KAAK,MAAS;MAE5C,IAAM,IAAwB,EAAK,MAAM,KAAK,IAA0B,MAAO,IACzE,IAAiB,KAAK,IAAI,EAAc,QAAQ,CAAO;MAC7D,OAAO,EAAK,MAAM,CAAc;KAClC,CAAC,EAAE,KAAK,IAAI;KAEZ,OADA,EAAG,YAAY,GAAM,GAAI,EAAM,OAAO,KAAK,CAAiB,CAAC,GACtD;IACT,CAAC,IAlDQ;GAmDX;GAEA,QAAQ,EAAE,gBAAa;IACrB,IAAI,CAAC,KAAK,QAAQ,mBAChB,OAAO;IAET,IAAM,EAAE,aAAU,GACZ,EAAE,iBAAc,GAChB,EAAE,UAAO,aAAU;IACzB,IAAI,CAAC,KAAS,EAAM,OAAO,SAAS,KAAK,MACvC,OAAO;IAET,IAAM,IAAU,EAAM,iBAAiB,EAAM,OAAO,WAAW,GACzD,IAAwB,EAAM,OAAO,YAAY,SAAS,MAAM;IAItE,OAHI,CAAC,KAAW,CAAC,IACR,KAEF,EAAO,MAAM,EAAE,SAAS,EAAE,aAC/B,EAAG,OAAO,EAAM,MAAM,GAAG,EAAM,GAAG,GAC3B,GACR,EAAE,SAAS,EAAE,IAAI;GACpB;GAEA,YAAY,EAAE,gBAAa;IACzB,IAAI,CAAC,KAAK,QAAQ,iBAChB,OAAO;IAET,IAAM,EAAE,aAAU,GACZ,EAAE,cAAW,WAAQ,GACrB,EAAE,UAAO,aAAU;IAKzB,IAJI,CAAC,KAAS,EAAM,OAAO,SAAS,KAAK,QAGzB,EAAM,iBAAiB,EAAM,OAAO,WAAW,GAE7D,OAAO;IAET,IAAM,IAAQ,EAAM,MAAM;IAW1B,OAVI,MAAU,KAAK,IACV,KAES,EAAI,OAAO,CACjB,IACH,EAAO,SAAS,SAAS,EAAE,aAChC,EAAG,aAAaC,EAAU,KAAK,EAAI,QAAQ,CAAK,CAAC,CAAC,GAC3C,GACR,IAEI,EAAO,SAAS,SAAS;GAClC;EACF;CACF;CACA,gBAAgB;EACd,OAAO,CACLC,GAAuB;GACrB,MAAM;GACN,MAAM,KAAK;GACX,gBAAgB,OAAW,EACzB,UAAU,EAAM,GAClB;EACF,CAAC,GACDA,GAAuB;GACrB,MAAM;GACN,MAAM,KAAK;GACX,gBAAgB,OAAW,EACzB,UAAU,EAAM,GAClB;EACF,CAAC,CACH;CACF;CACA,wBAAwB;EACtB,OAAO,CAGL,IAAI,EAAO;GACT,KAAK,IAAI,EAAU,wBAAwB;GAC3C,OAAO,EACL,cAAc,GAAM,MAAU;IAI5B,IAHI,CAAC,EAAM,iBAGP,KAAK,OAAO,SAAS,KAAK,KAAK,IAAI,GACrC,OAAO;IAET,IAAM,IAAO,EAAM,cAAc,QAAQ,YAAY,GAC/C,IAAS,EAAM,cAAc,QAAQ,oBAAoB,GAEzD,KADa,IAAS,KAAK,MAAM,CAAM,IAAI,KAAK,IACI;IAC1D,IAAI,CAAC,KAAQ,CAAC,GACZ,OAAO;IAET,IAAM,EAAE,OAAI,cAAW,EAAK,OACtB,IAAW,EAAO,KAAK,EAAK,QAAQ,UAAU,IAAI,CAAC;IAOzD,OANA,EAAG,qBAAqB,KAAK,KAAK,OAAO,EAAE,YAAS,GAAG,CAAQ,CAAC,GAC5D,EAAG,UAAU,MAAM,OAAO,SAAS,KAAK,QAC1C,EAAG,aAAa,EAAc,KAAK,EAAG,IAAI,QAAQ,KAAK,IAAI,GAAG,EAAG,UAAU,OAAO,CAAC,CAAC,CAAC,CAAC,GAExF,EAAG,QAAQ,SAAS,EAAI,GACxB,EAAK,SAAS,CAAE,GACT;GACT,EACF;EACF,CAAC,CACH;CACF;AACF,CAAC;;;AC/SD,SAAS,GAAW,GAAO,IAAY,CAAC,GAAG;CACzC,OAAO,EAAM,SAAS,MAAS;EAC7B,IAAM,IAAU,CAAC,GAAG,GAAW,GAAG,EAAK,aAAa,EAAK,WAAW,YAAY,CAAC,CAAC;EAIlF,OAHI,EAAK,WACA,GAAW,EAAK,UAAU,CAAO,IAEnC;GACL,MAAM,EAAK;GACX;EACF;CACF,CAAC;AACH;AACA,SAAS,GAAkB,GAAQ;CACjC,OAAO,EAAO,SAAS,EAAO,YAAY,CAAC;AAC7C;AACA,SAAS,GAAW,GAAiB;CACnC,OAAO,EAAQC,GAAU,YAAY,CAAe;AACtD;AACA,SAAS,GAAe,EACtB,QACA,SACA,aACA,sBACC;CACD,IAAM,IAAc,CAAC;CAkBrB,OAjBA,GAAa,IAAM,MAAS,EAAK,KAAK,SAAS,CAAI,EAAE,SAAS,MAAU;EAEtE,IAAI,IAAO,EAAM,MAAM,GACjB,IAAW,EAAM,KAAK,MAAM,YAAY,GACxC,IAAY,EAAS,cAAc;EAEzC,GADc,MAAa,EAAU,SAAS,CAAQ,KAAK,GAAW,CAAQ,KAAY,EAAS,YAAkC,KAAK,GAAU,CAAQ,KAAM,GAAkB,EAAS,UAAU,GAAU,EAAM,KAAK,WAAW,CAAC,IAAI,GAAkB,EAAS,cAAc,EAAM,KAAK,WAAW,CAAC,CAC5R,EAAE,SAAS,MAAS;GAClC,IAAM,IAAK,IAAO,EAAK,KAAK;GAC5B,IAAI,EAAK,QAAQ,QAAQ;IACvB,IAAM,IAAa,GAAW,OAAO,GAAM,GAAI,EAC7C,OAAO,EAAK,QAAQ,KAAK,GAAG,EAC9B,CAAC;IACD,EAAY,KAAK,CAAU;GAC7B;GACA,IAAO;EACT,CAAC;CACH,CAAC,GACM,EAAc,OAAO,GAAK,CAAW;AAC9C;AACA,SAAS,GAAW,GAAO;CACzB,OAAO,OAAO,KAAU;AAC1B;AACA,SAAS,GAAe,EACtB,SACA,aACA,sBACC;CACD,IAAI,CAAC;EAAC;EAAa;EAAiB;CAAe,EAAE,OAAO,MAAQ,GAAW,EAAS,EAAI,CAAC,GAC3F,MAAM,MAAM,qFAAqF;CAEnG,IAAM,IAAiB,IAAI,EAAO;EAChC,KAAK,IAAI,EAAU,UAAU;EAC7B,OAAO;GACL,OAAO,GAAG,EAAE,aAAU,GAAe;IACnC;IACA;IACA;IACA;GACF,CAAC;GACD,QAAQ,GAAa,GAAe,GAAU,MAAa;IACzD,IAAM,IAAc,EAAS,UAAU,MAAM,OAAO,KAAK,MACnD,IAAc,EAAS,UAAU,MAAM,OAAO,KAAK,MACnD,IAAW,GAAa,EAAS,MAAM,MAAS,EAAK,KAAK,SAAS,CAAI,GACvE,IAAW,GAAa,EAAS,MAAM,MAAS,EAAK,KAAK,SAAS,CAAI;IA2B7E,OA1BI,EAAY,eAEf,CAAC,GAAa,CAAW,EAAE,SAAS,CAAI,KACzC,EAAS,WAAW,EAAS,UAG7B,EAAY,MAAM,MAAM,MAGpB,EAAK,SAAS,KAAK,KACnB,EAAK,OAAO,KAAK,KAAK,EAAS,MAAM,MAGjC,EAAK,OAAO,EAAK,QACjB,EAAK,MAAM,EAAK,KAAK,YAAY,EAAK,EAEzC,CAEJ,KACQ,GAAe;KACpB,KAAK,EAAY;KACjB;KACA;KACA;IACF,CAAC,IAEI,EAAc,IAAI,EAAY,SAAS,EAAY,GAAG;GAC/D;EACF;EACA,OAAO,EACL,YAAY,GAAO;GACjB,OAAO,EAAe,SAAS,CAAK;EACtC,EACF;CACF,CAAC;CACD,OAAO;AACT;AAGA,IAAI,KAAoB,GAAU,OAAO;CACvC,aAAa;EAEX,OAAO;GACL,GAAS,KAAK,QAA8B,KAAK,IAAI;GACrD,UAAU,CAAC;GACX,qBAAqB;GACrB,mBAAmB;GACnB,iBAAiB;GACjB,iBAAiB;GACjB,sBAAsB;GACtB,SAAS;GACT,gBAAgB,CAAC;EACnB;CACF;CACA,wBAAwB;EAEtB,OAAO,CACL,GAAU,KAAK,QAA8B,KAAK,IAAI,KAAM,CAAC,GAC7D,GAAe;GACb,MAAM,KAAK;GACX,UAAU,KAAK,QAAQ;GACvB,iBAAiB,KAAK,QAAQ;EAChC,CAAC,CACH;CACF;AACF,CAAC"}