@plumile/ui 0.1.83 → 0.1.84
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.
- package/lib/esm/BackofficeJsonViewerAsync-B_YPyubK.js +10 -0
- package/lib/esm/{BackofficeJsonViewerAsync-Czd9VhUz.js.map → BackofficeJsonViewerAsync-B_YPyubK.js.map} +1 -1
- package/lib/esm/{MarkdownCodeBlock-B3PblX3D.js → MarkdownCodeBlock-B__tyIcc.js} +2 -2
- package/lib/esm/{MarkdownCodeBlock-B3PblX3D.js.map → MarkdownCodeBlock-B__tyIcc.js.map} +1 -1
- package/lib/esm/{MarkdownRenderer-RgELUK6t.js → MarkdownRenderer-w1EzXVlv.js} +2 -2
- package/lib/esm/{MarkdownRenderer-RgELUK6t.js.map → MarkdownRenderer-w1EzXVlv.js.map} +1 -1
- package/lib/esm/{architectureDiagram-2XIMDMQ5-BUhb7PkG.js → architectureDiagram-2XIMDMQ5-D9W3hi1n.js} +5 -5
- package/lib/esm/{architectureDiagram-2XIMDMQ5-BUhb7PkG.js.map → architectureDiagram-2XIMDMQ5-D9W3hi1n.js.map} +1 -1
- package/lib/esm/{blockDiagram-WCTKOSBZ-C8Ohzdg3.js → blockDiagram-WCTKOSBZ-0tOAzLGT.js} +7 -7
- package/lib/esm/{blockDiagram-WCTKOSBZ-C8Ohzdg3.js.map → blockDiagram-WCTKOSBZ-0tOAzLGT.js.map} +1 -1
- package/lib/esm/{c4Diagram-IC4MRINW-CQUp6kiC.js → c4Diagram-IC4MRINW-BfvUsZKR.js} +4 -4
- package/lib/esm/{c4Diagram-IC4MRINW-CQUp6kiC.js.map → c4Diagram-IC4MRINW-BfvUsZKR.js.map} +1 -1
- package/lib/esm/{channel-BBzlf3l-.js → channel-BevqKLlC.js} +2 -2
- package/lib/esm/{channel-BBzlf3l-.js.map → channel-BevqKLlC.js.map} +1 -1
- package/lib/esm/{chunk-7R4GIKGN-Cg9-qmu5.js → chunk-7R4GIKGN-tSw2Wb9z.js} +2 -2
- package/lib/esm/{chunk-7R4GIKGN-Cg9-qmu5.js.map → chunk-7R4GIKGN-tSw2Wb9z.js.map} +1 -1
- package/lib/esm/{chunk-GEFDOKGD-Dkux3ZgH.js → chunk-GEFDOKGD-CWu-rFVf.js} +2 -2
- package/lib/esm/{chunk-GEFDOKGD-Dkux3ZgH.js.map → chunk-GEFDOKGD-CWu-rFVf.js.map} +1 -1
- package/lib/esm/{chunk-GLR3WWYH-BBakjhtu.js → chunk-GLR3WWYH-Dy7JAiPZ.js} +6 -6
- package/lib/esm/{chunk-GLR3WWYH-BBakjhtu.js.map → chunk-GLR3WWYH-Dy7JAiPZ.js.map} +1 -1
- package/lib/esm/{chunk-HHEYEP7N-BRntQHI9.js → chunk-HHEYEP7N-CwMxvvqW.js} +2 -2
- package/lib/esm/{chunk-HHEYEP7N-BRntQHI9.js.map → chunk-HHEYEP7N-CwMxvvqW.js.map} +1 -1
- package/lib/esm/{chunk-JSJVCQXG-DuVavFA7.js → chunk-JSJVCQXG-BhZagW93.js} +2 -2
- package/lib/esm/{chunk-JSJVCQXG-DuVavFA7.js.map → chunk-JSJVCQXG-BhZagW93.js.map} +1 -1
- package/lib/esm/{chunk-KX2RTZJC-BEZu4ePM.js → chunk-KX2RTZJC-BfnFx2cA.js} +2 -2
- package/lib/esm/{chunk-KX2RTZJC-BEZu4ePM.js.map → chunk-KX2RTZJC-BfnFx2cA.js.map} +1 -1
- package/lib/esm/{chunk-KYZI473N-DeJhj0TI.js → chunk-KYZI473N-BwYBBC73.js} +6 -6
- package/lib/esm/{chunk-KYZI473N-DeJhj0TI.js.map → chunk-KYZI473N-BwYBBC73.js.map} +1 -1
- package/lib/esm/{chunk-NQ4KR5QH-pcyIZSOf.js → chunk-NQ4KR5QH-CtcoAyde.js} +5 -5
- package/lib/esm/{chunk-NQ4KR5QH-pcyIZSOf.js.map → chunk-NQ4KR5QH-CtcoAyde.js.map} +1 -1
- package/lib/esm/{chunk-O4XLMI2P-B49RDRA_.js → chunk-O4XLMI2P-DxPipWrP.js} +8 -8
- package/lib/esm/{chunk-O4XLMI2P-B49RDRA_.js.map → chunk-O4XLMI2P-DxPipWrP.js.map} +1 -1
- package/lib/esm/{chunk-PQ6SQG4A-BJO_yF6z.js → chunk-PQ6SQG4A-DlekIw0F.js} +2 -2
- package/lib/esm/{chunk-PQ6SQG4A-BJO_yF6z.js.map → chunk-PQ6SQG4A-DlekIw0F.js.map} +1 -1
- package/lib/esm/{chunk-PU5JKC2W-BzaL_NH3.js → chunk-PU5JKC2W-nnfoXdoB.js} +3 -3
- package/lib/esm/{chunk-PU5JKC2W-BzaL_NH3.js.map → chunk-PU5JKC2W-nnfoXdoB.js.map} +1 -1
- package/lib/esm/{chunk-WL4C6EOR-CtRNKYmt.js → chunk-WL4C6EOR-CepZqrvG.js} +6 -6
- package/lib/esm/{chunk-WL4C6EOR-CtRNKYmt.js.map → chunk-WL4C6EOR-CepZqrvG.js.map} +1 -1
- package/lib/esm/{chunk-YBOYWFTD-BL_YEnkQ.js → chunk-YBOYWFTD-DQeJ-Crn.js} +3 -3
- package/lib/esm/{chunk-YBOYWFTD-BL_YEnkQ.js.map → chunk-YBOYWFTD-DQeJ-Crn.js.map} +1 -1
- package/lib/esm/{classDiagram-VBA2DB6C-BT1J_4pK.js → classDiagram-VBA2DB6C-Cz661asi.js} +12 -12
- package/lib/esm/{classDiagram-VBA2DB6C-BT1J_4pK.js.map → classDiagram-VBA2DB6C-Cz661asi.js.map} +1 -1
- package/lib/esm/{classDiagram-v2-RAHNMMFH-CKSbfgdS.js → classDiagram-v2-RAHNMMFH-gl-L4tD0.js} +12 -12
- package/lib/esm/{classDiagram-v2-RAHNMMFH-CKSbfgdS.js.map → classDiagram-v2-RAHNMMFH-gl-L4tD0.js.map} +1 -1
- package/lib/esm/{dagre-D6grMmmr.js → dagre-CUvGkXru.js} +2 -2
- package/lib/esm/{dagre-D6grMmmr.js.map → dagre-CUvGkXru.js.map} +1 -1
- package/lib/esm/{dagre-KLK3FWXG-CT3GGyXF.js → dagre-KLK3FWXG-CfNc9pEH.js} +9 -9
- package/lib/esm/{dagre-KLK3FWXG-CT3GGyXF.js.map → dagre-KLK3FWXG-CfNc9pEH.js.map} +1 -1
- package/lib/esm/{diagram-E7M64L7V-RIQNonUo.js → diagram-E7M64L7V-owGUX1SK.js} +6 -6
- package/lib/esm/{diagram-E7M64L7V-RIQNonUo.js.map → diagram-E7M64L7V-owGUX1SK.js.map} +1 -1
- package/lib/esm/{diagram-IFDJBPK2-D1Vwi5RU.js → diagram-IFDJBPK2-BNNr6py0.js} +4 -4
- package/lib/esm/{diagram-IFDJBPK2-D1Vwi5RU.js.map → diagram-IFDJBPK2-BNNr6py0.js.map} +1 -1
- package/lib/esm/{diagram-P4PSJMXO-B84-dlrB.js → diagram-P4PSJMXO-DYqpdLub.js} +4 -4
- package/lib/esm/{diagram-P4PSJMXO-B84-dlrB.js.map → diagram-P4PSJMXO-DYqpdLub.js.map} +1 -1
- package/lib/esm/{erDiagram-INFDFZHY-DMLpjzc4.js → erDiagram-INFDFZHY-Bg0Cs5pu.js} +11 -11
- package/lib/esm/{erDiagram-INFDFZHY-DMLpjzc4.js.map → erDiagram-INFDFZHY-Bg0Cs5pu.js.map} +1 -1
- package/lib/esm/{flowDiagram-PKNHOUZH-Ce1-VA32.js → flowDiagram-PKNHOUZH-TkU27ZFV.js} +12 -12
- package/lib/esm/{flowDiagram-PKNHOUZH-Ce1-VA32.js.map → flowDiagram-PKNHOUZH-TkU27ZFV.js.map} +1 -1
- package/lib/esm/{ganttDiagram-A5KZAMGK-BAmfVCUC.js → ganttDiagram-A5KZAMGK-C3eQMnaD.js} +3 -3
- package/lib/esm/{ganttDiagram-A5KZAMGK-BAmfVCUC.js.map → ganttDiagram-A5KZAMGK-C3eQMnaD.js.map} +1 -1
- package/lib/esm/{gitGraphDiagram-K3NZZRJ6-CR62Izxa.js → gitGraphDiagram-K3NZZRJ6-CeYQZRvp.js} +3 -3
- package/lib/esm/{gitGraphDiagram-K3NZZRJ6-CR62Izxa.js.map → gitGraphDiagram-K3NZZRJ6-CeYQZRvp.js.map} +1 -1
- package/lib/esm/{infoDiagram-LFFYTUFH-CEaM6i7D.js → infoDiagram-LFFYTUFH-rYfR0LAG.js} +3 -3
- package/lib/esm/{infoDiagram-LFFYTUFH-CEaM6i7D.js.map → infoDiagram-LFFYTUFH-rYfR0LAG.js.map} +1 -1
- package/lib/esm/{ishikawaDiagram-PHBUUO56-DPmaeRZg.js → ishikawaDiagram-PHBUUO56-Cv42PfHQ.js} +4 -4
- package/lib/esm/{ishikawaDiagram-PHBUUO56-DPmaeRZg.js.map → ishikawaDiagram-PHBUUO56-Cv42PfHQ.js.map} +1 -1
- package/lib/esm/{journeyDiagram-4ABVD52K-CIkELGB9.js → journeyDiagram-4ABVD52K-TAtGE2GU.js} +3 -3
- package/lib/esm/{journeyDiagram-4ABVD52K-CIkELGB9.js.map → journeyDiagram-4ABVD52K-TAtGE2GU.js.map} +1 -1
- package/lib/esm/{kanban-definition-K7BYSVSG-CzRVcKjg.js → kanban-definition-K7BYSVSG-iey_6CC1.js} +8 -8
- package/lib/esm/{kanban-definition-K7BYSVSG-CzRVcKjg.js.map → kanban-definition-K7BYSVSG-iey_6CC1.js.map} +1 -1
- package/lib/esm/{katex-C5br0dxW.js → katex-W0_-X3Wb.js} +4 -4
- package/lib/esm/katex-W0_-X3Wb.js.map +1 -0
- package/lib/esm/{line-CNKkQ82B.js → line-AZ-MMAnt.js} +2 -2
- package/lib/esm/{line-CNKkQ82B.js.map → line-AZ-MMAnt.js.map} +1 -1
- package/lib/esm/{mermaid.core-CgCa7Y6s.js → mermaid.core-Ckiof3bn.js} +39 -39
- package/lib/esm/{mermaid.core-CgCa7Y6s.js.map → mermaid.core-Ckiof3bn.js.map} +1 -1
- package/lib/esm/{mindmap-definition-YRQLILUH-B7c3ueCh.js → mindmap-definition-YRQLILUH-DttP-UXP.js} +10 -10
- package/lib/esm/{mindmap-definition-YRQLILUH-B7c3ueCh.js.map → mindmap-definition-YRQLILUH-DttP-UXP.js.map} +1 -1
- package/lib/esm/{pieDiagram-SKSYHLDU-BKf7D_uz.js → pieDiagram-SKSYHLDU-BuVky6TE.js} +4 -4
- package/lib/esm/{pieDiagram-SKSYHLDU-BKf7D_uz.js.map → pieDiagram-SKSYHLDU-BuVky6TE.js.map} +1 -1
- package/lib/esm/{quadrantDiagram-337W2JSQ-CZMVpQuF.js → quadrantDiagram-337W2JSQ-COnmLuk_.js} +2 -2
- package/lib/esm/{quadrantDiagram-337W2JSQ-CZMVpQuF.js.map → quadrantDiagram-337W2JSQ-COnmLuk_.js.map} +1 -1
- package/lib/esm/{requirementDiagram-Z7DCOOCP-CXxLUHMG.js → requirementDiagram-Z7DCOOCP-ChSklNBb.js} +10 -10
- package/lib/esm/{requirementDiagram-Z7DCOOCP-CXxLUHMG.js.map → requirementDiagram-Z7DCOOCP-ChSklNBb.js.map} +1 -1
- package/lib/esm/{sankeyDiagram-WA2Y5GQK-BauuH8-1.js → sankeyDiagram-WA2Y5GQK-tI6Eo-LD.js} +2 -2
- package/lib/esm/{sankeyDiagram-WA2Y5GQK-BauuH8-1.js.map → sankeyDiagram-WA2Y5GQK-tI6Eo-LD.js.map} +1 -1
- package/lib/esm/{sequenceDiagram-2WXFIKYE-AWPjBivx.js → sequenceDiagram-2WXFIKYE-C7KV1rxZ.js} +4 -4
- package/lib/esm/{sequenceDiagram-2WXFIKYE-AWPjBivx.js.map → sequenceDiagram-2WXFIKYE-C7KV1rxZ.js.map} +1 -1
- package/lib/esm/{src-D6nEpsqe.js → src-5_DIXRl3.js} +747 -583
- package/lib/esm/src-5_DIXRl3.js.map +1 -0
- package/lib/esm/{stateDiagram-RAJIS63D-CXgEabgV.js → stateDiagram-RAJIS63D-BFn7Uwqt.js} +13 -13
- package/lib/esm/{stateDiagram-RAJIS63D-CXgEabgV.js.map → stateDiagram-RAJIS63D-BFn7Uwqt.js.map} +1 -1
- package/lib/esm/{stateDiagram-v2-FVOUBMTO-CahcZ8-y.js → stateDiagram-v2-FVOUBMTO-DDke9x6W.js} +11 -11
- package/lib/esm/{stateDiagram-v2-FVOUBMTO-CahcZ8-y.js.map → stateDiagram-v2-FVOUBMTO-DDke9x6W.js.map} +1 -1
- package/lib/esm/{timeline-definition-YZTLITO2-Dk8ByuG8.js → timeline-definition-YZTLITO2-BxLV7tzr.js} +2 -2
- package/lib/esm/{timeline-definition-YZTLITO2-Dk8ByuG8.js.map → timeline-definition-YZTLITO2-BxLV7tzr.js.map} +1 -1
- package/lib/esm/ui.js +5 -5
- package/lib/esm/{vennDiagram-LZ73GAT5-BcIblXz3.js → vennDiagram-LZ73GAT5-BciD5X0b.js} +4 -4
- package/lib/esm/{vennDiagram-LZ73GAT5-BcIblXz3.js.map → vennDiagram-LZ73GAT5-BciD5X0b.js.map} +1 -1
- package/lib/esm/{xychartDiagram-JWTSCODW-Csn18jU4.js → xychartDiagram-JWTSCODW-yIaPAmwy.js} +6 -6
- package/lib/esm/{xychartDiagram-JWTSCODW-Csn18jU4.js.map → xychartDiagram-JWTSCODW-yIaPAmwy.js.map} +1 -1
- package/lib/types/components/charts/MetricHistoryChart.d.ts +22 -0
- package/lib/types/components/charts/MetricHistoryChart.d.ts.map +1 -0
- package/lib/types/components/charts/metricHistoryChart.css.d.ts +8 -0
- package/lib/types/components/charts/metricHistoryChart.css.d.ts.map +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/lib/esm/BackofficeJsonViewerAsync-Czd9VhUz.js +0 -10
- package/lib/esm/katex-C5br0dxW.js.map +0 -1
- package/lib/esm/src-D6nEpsqe.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-KYZI473N-DeJhj0TI.js","names":["select","select2","rough","rough2","rough3","rough4","rough5","rough6","rough7","rough8","rough9","rough10","rough11","rough12","rough13","rough14","rough15","rough16","rough17","rough18","rough19","rough20","rough21","rough22","rough23","rough24","rough25","rough26","rough27","rough28","rough29","rough30","rough31","rough32","rough33","rough34","rough35","rough36","rough37","select3","rough38","rough39","rough40","rough41","rough42","rough43","rough44","rough45","rough46","rough47","rough48","rough49","rough50","rough51","rough52","rough53","rough54","select4","sanitizeText2","select5","rough55","select6","rough56","select7","rough57","rough58","rough59"],"sources":["../../../../node_modules/mermaid/dist/chunks/mermaid.core/chunk-KYZI473N.mjs"],"sourcesContent":["import {\n configureLabelImages,\n getSubGraphTitleMargins\n} from \"./chunk-YBOYWFTD.mjs\";\nimport {\n compileStyles,\n solidStateFill,\n styles2String,\n userNodeOverrides\n} from \"./chunk-PQ6SQG4A.mjs\";\nimport {\n createText,\n getIconSVG\n} from \"./chunk-PU5JKC2W.mjs\";\nimport {\n calculateTextWidth,\n decodeEntities,\n handleUndefinedAttr\n} from \"./chunk-GEFDOKGD.mjs\";\nimport {\n evaluate,\n getConfig,\n getConfig2,\n getEffectiveHtmlLabels,\n hasKatex,\n parseGenericTypes,\n sanitizeText,\n sanitizeText2\n} from \"./chunk-7R4GIKGN.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/shapes/util.ts\nimport { select } from \"d3\";\nvar labelHelper = /* @__PURE__ */ __name(async (parent, node, _classes) => {\n let cssClasses;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig2()?.htmlLabels);\n if (!_classes) {\n cssClasses = \"node default\";\n } else {\n cssClasses = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", handleUndefinedAttr(node.labelStyle));\n let label;\n if (node.label === void 0) {\n label = \"\";\n } else {\n label = typeof node.label === \"string\" ? node.label : node.label[0];\n }\n const addBackground = !!node.icon || !!node.img;\n const isMarkdown = node.labelType === \"markdown\";\n const text2 = await createText(\n labelEl,\n sanitizeText(decodeEntities(label), getConfig2()),\n {\n useHtmlLabels,\n width: node.width || getConfig2().flowchart?.wrappingWidth,\n // @ts-expect-error -- This is currently not used. Should this be `classes` instead?\n cssClasses: isMarkdown ? \"markdown-node-label\" : void 0,\n style: node.labelStyle,\n addSvgBackground: addBackground,\n markdown: isMarkdown\n },\n getConfig2()\n );\n let bbox = text2.getBBox();\n const halfPadding = (node?.padding ?? 0) / 2;\n if (useHtmlLabels) {\n const div = text2.children[0];\n const dv = select(text2);\n await configureLabelImages(div, label);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label: labelEl };\n}, \"labelHelper\");\nvar insertLabel = /* @__PURE__ */ __name(async (parent, label, options) => {\n const useHtmlLabels = options.useHtmlLabels ?? getEffectiveHtmlLabels(getConfig2());\n const labelEl = parent.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", options.labelStyle || \"\");\n const text2 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), {\n useHtmlLabels,\n width: options.width || getConfig2()?.flowchart?.wrappingWidth,\n style: options.labelStyle,\n addSvgBackground: !!options.icon || !!options.img\n });\n let bbox = text2.getBBox();\n const halfPadding = options.padding / 2;\n if (getEffectiveHtmlLabels(getConfig2())) {\n const div = text2.children[0];\n const dv = select(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (options.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg: parent, bbox, halfPadding, label: labelEl };\n}, \"insertLabel\");\nvar updateNodeBounds = /* @__PURE__ */ __name((node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n}, \"updateNodeBounds\");\nvar getNodeClasses = /* @__PURE__ */ __name((node, extra) => (node.look === \"handDrawn\" ? \"rough-node\" : \"node\") + \" \" + node.cssClasses + \" \" + (extra || \"\"), \"getNodeClasses\");\nfunction createPathFromPoints(points) {\n const pointStrings = points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${p.x},${p.y}`);\n pointStrings.push(\"Z\");\n return pointStrings.join(\" \");\n}\n__name(createPathFromPoints, \"createPathFromPoints\");\nfunction generateFullSineWavePoints(x1, y1, x2, y2, amplitude, numCycles) {\n const points = [];\n const steps = 50;\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n const cycleLength = deltaX / numCycles;\n const frequency = 2 * Math.PI / cycleLength;\n const midY = y1 + deltaY / 2;\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const x = x1 + t * deltaX;\n const y = midY + amplitude * Math.sin(frequency * (x - x1));\n points.push({ x, y });\n }\n return points;\n}\n__name(generateFullSineWavePoints, \"generateFullSineWavePoints\");\nfunction generateCirclePoints(centerX, centerY, radius, numPoints, startAngle, endAngle) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints, \"generateCirclePoints\");\n\n// src/rendering-util/rendering-elements/clusters.js\nimport { select as select2 } from \"d3\";\nimport rough from \"roughjs\";\n\n// src/rendering-util/rendering-elements/intersect/intersect-rect.js\nvar intersectRect = /* @__PURE__ */ __name((node, point) => {\n var x = node.x;\n var y = node.y;\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n}, \"intersectRect\");\nvar intersect_rect_default = intersectRect;\n\n// src/rendering-util/rendering-elements/createLabel.js\nvar createLabel = /* @__PURE__ */ __name(async (element, _vertexText, style, isTitle = false, isNode = false) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n const config = getConfig2();\n const useHtmlLabels = getEffectiveHtmlLabels(config);\n return await createText(\n element,\n vertexText,\n {\n style,\n isTitle,\n useHtmlLabels,\n markdown: false,\n isNode,\n width: Number.POSITIVE_INFINITY\n },\n config\n );\n}, \"createLabel\");\nvar createLabel_default = createLabel;\n\n// src/rendering-util/rendering-elements/shapes/roundedRectPath.ts\nvar createRoundedRectPathD = /* @__PURE__ */ __name((x, y, totalWidth, totalHeight, radius) => [\n \"M\",\n x + radius,\n y,\n // Move to the first point\n \"H\",\n x + totalWidth - radius,\n // Draw horizontal line to the beginning of the right corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius,\n // Draw arc to the right top corner\n \"V\",\n y + totalHeight - radius,\n // Draw vertical line down to the beginning of the right bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight,\n // Draw arc to the right bottom corner\n \"H\",\n x + radius,\n // Draw horizontal line to the beginning of the left bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + totalHeight - radius,\n // Draw arc to the left bottom corner\n \"V\",\n y + radius,\n // Draw vertical line up to the beginning of the left top corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + radius,\n y,\n // Draw arc to the left top corner\n \"Z\"\n // Close the path\n].join(\" \"), \"createRoundedRectPathD\");\n\n// src/rendering-util/rendering-elements/clusters.js\nvar rect = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = getEffectiveHtmlLabels(siteConfig);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n let text2;\n if (node.labelType === \"markdown\") {\n text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width\n });\n } else {\n text2 = await createLabel_default(labelEl, node.label, node.labelStyle || \"\", false, true);\n }\n let bbox = text2.getBBox();\n if (getEffectiveHtmlLabels(siteConfig)) {\n const div = text2.children[0];\n const dv = select2(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 3,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, 0), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"rect\");\nvar noteGroup = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };\n}, \"noteGroup\");\nvar roundedWithTitle = /* @__PURE__ */ __name(async (parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n let innerRect = shapeSvg.append(\"rect\");\n const text2 = await createLabel_default(label, node.label, node.labelStyle, void 0, true);\n let bbox = text2.getBBox();\n if (getEffectiveHtmlLabels(siteConfig)) {\n const div = text2.children[0];\n const dv = select2(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = (node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width) + padding;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height + padding;\n const innerHeight = node.height + padding - bbox.height - 6;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n const innerY = node.y - node.height / 2 - halfPadding + bbox.height + 2;\n let rect2;\n if (node.look === \"handDrawn\") {\n const isAlt = node.cssClasses.includes(\"statediagram-cluster-alt\");\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = node.rx || node.ry ? rc.path(createRoundedRectPathD(x, y, width, height, 10), {\n roughness: 0.7,\n fill: compositeTitleBackground,\n fillStyle: \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n }) : rc.rectangle(x, y, width, height, { seed: handDrawnSeed });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n const roughInnerNode = rc.rectangle(x, innerY, width, innerHeight, {\n fill: isAlt ? altBackground : compositeBackground,\n fillStyle: isAlt ? \"hachure\" : \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n innerRect = shapeSvg.insert(() => roughInnerNode);\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"outer\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", x).attr(\"y\", innerY).attr(\"width\", width).attr(\"height\", innerHeight);\n }\n label.attr(\n \"transform\",\n `translate(${node.x - bbox.width / 2}, ${y + 1 - (getEffectiveHtmlLabels(siteConfig) ? 0 : 3)})`\n );\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = bbox.height - node.padding / 2;\n node.labelBBox = bbox;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"roundedWithTitle\");\nvar kanbanSection = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = getEffectiveHtmlLabels(siteConfig);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n const text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width\n });\n let bbox = text2.getBBox();\n if (getEffectiveHtmlLabels(siteConfig)) {\n const div = text2.children[0];\n const dv = select2(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 4,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, node.rx), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"kanbanSection\");\nvar divider = /* @__PURE__ */ __name((parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const padding = 0 * node.padding;\n const width = node.width + padding;\n node.diff = -node.padding;\n const height = node.height + padding;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = rc.rectangle(x, y, width, height, {\n fill: \"lightgrey\",\n roughness: 0.5,\n strokeLineDash: [5],\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"divider\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n }\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = 0;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: {} };\n}, \"divider\");\nvar squareRect = rect;\nvar shapes = {\n rect,\n squareRect,\n roundedWithTitle,\n noteGroup,\n divider,\n kanbanSection\n};\nvar clusterElems = /* @__PURE__ */ new Map();\nvar insertCluster = /* @__PURE__ */ __name(async (elem, node) => {\n const shape = node.shape || \"rect\";\n const cluster = await shapes[shape](elem, node);\n clusterElems.set(node.id, cluster);\n return cluster;\n}, \"insertCluster\");\nvar clear = /* @__PURE__ */ __name(() => {\n clusterElems = /* @__PURE__ */ new Map();\n}, \"clear\");\n\n// src/rendering-util/rendering-elements/intersect/intersect-node.js\nfunction intersectNode(node, point) {\n return node.intersect(point);\n}\n__name(intersectNode, \"intersectNode\");\nvar intersect_node_default = intersectNode;\n\n// src/rendering-util/rendering-elements/intersect/intersect-ellipse.js\nfunction intersectEllipse(node, rx, ry, point) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point.x;\n var py = cy - point.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\n__name(intersectEllipse, \"intersectEllipse\");\nvar intersect_ellipse_default = intersectEllipse;\n\n// src/rendering-util/rendering-elements/intersect/intersect-circle.js\nfunction intersectCircle(node, rx, point) {\n return intersect_ellipse_default(node, rx, rx, point);\n}\n__name(intersectCircle, \"intersectCircle\");\nvar intersect_circle_default = intersectCircle;\n\n// src/rendering-util/rendering-elements/intersect/intersect-line.js\nfunction intersectLine(p1, p2, q1, q2) {\n {\n const a1 = p2.y - p1.y;\n const b1 = p1.x - p2.x;\n const c1 = p2.x * p1.y - p1.x * p2.y;\n const r3 = a1 * q1.x + b1 * q1.y + c1;\n const r4 = a1 * q2.x + b1 * q2.y + c1;\n const epsilon = 1e-6;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n const a2 = q2.y - q1.y;\n const b2 = q1.x - q2.x;\n const c2 = q2.x * q1.y - q1.x * q2.y;\n const r1 = a2 * p1.x + b2 * p1.y + c2;\n const r2 = a2 * p2.x + b2 * p2.y + c2;\n if (Math.abs(r1) < epsilon && Math.abs(r2) < epsilon && sameSign(r1, r2)) {\n return;\n }\n const denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n const offset = Math.abs(denom / 2);\n let num = b1 * c2 - b2 * c1;\n const x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n const y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n }\n}\n__name(intersectLine, \"intersectLine\");\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n__name(sameSign, \"sameSign\");\nvar intersect_line_default = intersectLine;\n\n// src/rendering-util/rendering-elements/intersect/intersect-polygon.js\nfunction intersectPolygon(node, polyPoints, point) {\n let x1 = node.x;\n let y1 = node.y;\n let intersections = [];\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n let left = x1 - node.width / 2 - minX;\n let top = y1 - node.height / 2 - minY;\n for (let i = 0; i < polyPoints.length; i++) {\n let p1 = polyPoints[i];\n let p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n let intersect = intersect_line_default(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n let pdx = p.x - point.x;\n let pdy = p.y - point.y;\n let distp = Math.sqrt(pdx * pdx + pdy * pdy);\n let qdx = q.x - point.x;\n let qdy = q.y - point.y;\n let distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n__name(intersectPolygon, \"intersectPolygon\");\nvar intersect_polygon_default = intersectPolygon;\n\n// src/rendering-util/rendering-elements/intersect/index.js\nvar intersect_default = {\n node: intersect_node_default,\n circle: intersect_circle_default,\n ellipse: intersect_ellipse_default,\n polygon: intersect_polygon_default,\n rect: intersect_rect_default\n};\n\n// src/rendering-util/rendering-elements/shapes/anchor.ts\nimport rough2 from \"roughjs\";\nfunction anchor(parent, node) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const classes = getNodeClasses(node);\n let cssClasses = classes;\n if (!classes) {\n cssClasses = \"anchor\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const radius = 1;\n const { cssStyles } = node;\n const rc = rough2.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"black\", stroke: \"none\", fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const roughNode = rc.circle(0, 0, radius * 2, options);\n const circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"anchor\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, circleElem);\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(anchor, \"anchor\");\n\n// src/rendering-util/rendering-elements/shapes/bowTieRect.ts\nimport rough3 from \"roughjs\";\nfunction generateArcPoints(x1, y1, x2, y2, rx, ry, clockwise) {\n const numPoints = 20;\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n if (distance > 1) {\n throw new Error(\"The given radii are too small to create an arc between the points.\");\n }\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle2 = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle2);\n const y = centerY + ry * Math.sin(angle2);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateArcPoints, \"generateArcPoints\");\nasync function bowTieRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding + 20;\n const h = bbox.height + node.padding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const { cssStyles } = node;\n const points = [\n { x: w / 2, y: -h / 2 },\n { x: -w / 2, y: -h / 2 },\n ...generateArcPoints(-w / 2, -h / 2, -w / 2, h / 2, rx, ry, false),\n { x: w / 2, y: h / 2 },\n ...generateArcPoints(w / 2, h / 2, w / 2, -h / 2, rx, ry, true)\n ];\n const rc = rough3.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const bowTieRectPath = createPathFromPoints(points);\n const bowTieRectShapePath = rc.path(bowTieRectPath, options);\n const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, \":first-child\");\n bowTieRectShape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n bowTieRectShape.attr(\"transform\", `translate(${rx / 2}, 0)`);\n updateNodeBounds(node, bowTieRectShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(bowTieRect, \"bowTieRect\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nimport rough4 from \"roughjs\";\n\n// src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\n__name(insertPolygonShape, \"insertPolygonShape\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nasync function card(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const padding = 12;\n const w = bbox.width + node.padding + padding;\n const left = 0;\n const right = w;\n const top = -h;\n const bottom = 0;\n const points = [\n { x: left + padding, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n { x: left, y: top + padding },\n { x: left + padding, y: top }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough4.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(card, \"card\");\n\n// src/rendering-util/rendering-elements/shapes/choice.ts\nimport rough5 from \"roughjs\";\nfunction choice(parent, node) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const s = Math.max(28, node.width ?? 0);\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const rc = rough5.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const choicePath = createPathFromPoints(points);\n const roughNode = rc.path(choicePath, options);\n const choiceShape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = 28;\n node.height = 28;\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(choice, \"choice\");\n\n// src/rendering-util/rendering-elements/shapes/circle.ts\nimport rough6 from \"roughjs\";\nasync function circle(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const padding = options?.padding ?? halfPadding;\n const radius = bbox.width / 2 + padding;\n let circleElem;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough6.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rc.circle(0, 0, radius * 2, options2);\n circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n circleElem = shapeSvg.insert(\"circle\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"r\", radius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleElem);\n node.calcIntersect = function(bounds, point) {\n const radius2 = bounds.width / 2;\n return intersect_default.circle(bounds, radius2, point);\n };\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(circle, \"circle\");\n\n// src/rendering-util/rendering-elements/shapes/crossedCircle.ts\nimport rough7 from \"roughjs\";\nfunction createLine(r) {\n const xAxis45 = Math.cos(Math.PI / 4);\n const yAxis45 = Math.sin(Math.PI / 4);\n const lineLength = r * 2;\n const pointQ1 = { x: lineLength / 2 * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 };\n const pointQ4 = { x: lineLength / 2 * xAxis45, y: -(lineLength / 2) * yAxis45 };\n return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y}\n M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`;\n}\n__name(createLine, \"createLine\");\nfunction crossedCircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = Math.max(30, node?.width ?? 0);\n const { cssStyles } = node;\n const rc = rough7.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const linePath = createLine(radius);\n const lineNode = rc.path(linePath, options);\n const crossedCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n crossedCircle2.insert(() => lineNode);\n if (cssStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, crossedCircle2);\n node.intersect = function(point) {\n log.info(\"crossedCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(crossedCircle, \"crossedCircle\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts\nimport rough8 from \"roughjs\";\nfunction generateCirclePoints2(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints2, \"generateCirclePoints\");\nasync function curlyBraceLeft(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints2(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints2(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints2(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints2(w / 2 + w * 0.1, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + w * 0.1, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2, y: h / 2 + radius }\n ];\n const rc = rough8.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceLeftPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceLeftPath.replace(\"Z\", \"\");\n const curlyBraceLeftNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceLeftShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceLeftShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceLeftShape.insert(() => curlyBraceLeftNode, \":first-child\");\n curlyBraceLeftShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceLeftShape.attr(\"transform\", `translate(${radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + radius - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceLeftShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceLeft, \"curlyBraceLeft\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts\nimport rough9 from \"roughjs\";\nfunction generateCirclePoints3(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateCirclePoints3, \"generateCirclePoints\");\nasync function curlyBraceRight(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: -w / 2, y: -h / 2 - radius },\n { x: w / 2, y: -h / 2 - radius },\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90),\n { x: w / 2, y: h / 2 + radius },\n { x: -w / 2, y: h / 2 + radius }\n ];\n const rc = rough9.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceRightPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceRightPath.replace(\"Z\", \"\");\n const curlyBraceRightNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceRightShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceRightShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceRightShape.insert(() => curlyBraceRightNode, \":first-child\");\n curlyBraceRightShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceRightShape.attr(\"transform\", `translate(${-radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceRightShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceRight, \"curlyBraceRight\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraces.ts\nimport rough10 from \"roughjs\";\nfunction generateCirclePoints4(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints4, \"generateCirclePoints\");\nasync function curlyBraces(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const leftCurlyBracePoints = [\n ...generateCirclePoints4(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rightCurlyBracePoints = [\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints4(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2 - radius - radius / 2, y: h / 2 + radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rc = rough10.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints);\n const newLeftCurlyBracePath = leftCurlyBracePath.replace(\"Z\", \"\");\n const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options);\n const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints);\n const newRightCurlyBracePath = rightCurlyBracePath.replace(\"Z\", \"\");\n const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBracesShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBracesShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBracesShape.insert(() => leftCurlyBraceNode, \":first-child\");\n curlyBracesShape.insert(() => rightCurlyBraceNode, \":first-child\");\n curlyBracesShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBracesShape.attr(\"transform\", `translate(${radius - radius / 4}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBracesShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraces, \"curlyBraces\");\n\n// src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts\nimport rough11 from \"roughjs\";\nasync function curvedTrapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 80, minHeight = 20;\n const w = Math.max(minWidth, (bbox.width + (node.padding ?? 0) * 2) * 1.25, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough11.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const totalWidth = w, totalHeight = h;\n const rw = totalWidth - radius;\n const tw = totalHeight / 4;\n const points = [\n { x: rw, y: 0 },\n { x: tw, y: 0 },\n { x: 0, y: totalHeight / 2 },\n { x: tw, y: totalHeight },\n { x: rw, y: totalHeight },\n ...generateCirclePoints(-rw, -totalHeight / 2, radius, 50, 270, 90)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curvedTrapezoid, \"curvedTrapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/cylinder.ts\nimport rough12 from \"roughjs\";\nvar createCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function cylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + node.padding, node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + node.padding, node.height ?? 0);\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough12.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(cylinder, \"cylinder\");\n\n// src/rendering-util/rendering-elements/shapes/dividedRect.ts\nimport rough13 from \"roughjs\";\nasync function dividedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const rectOffset = h * 0.2;\n const x = -w / 2;\n const y = -h / 2 - rectOffset / 2;\n const { cssStyles } = node;\n const rc = rough13.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pts = [\n { x, y: y + rectOffset },\n { x: -x, y: y + rectOffset },\n { x: -x, y: -y },\n { x, y: -y },\n { x, y },\n { x: -x, y },\n { x: -x, y: y + rectOffset }\n ];\n const poly = rc.polygon(\n pts.map((p) => [p.x, p.y]),\n options\n );\n const polygon = shapeSvg.insert(() => poly, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${x + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y + rectOffset + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(dividedRectangle, \"dividedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/doubleCircle.ts\nimport rough14 from \"roughjs\";\nasync function doublecircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const gap = 5;\n const outerRadius = bbox.width / 2 + halfPadding + gap;\n const innerRadius = bbox.width / 2 + halfPadding;\n let circleGroup;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough14.svg(shapeSvg);\n const outerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 2.5 });\n const innerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 1.5 });\n const outerRoughNode = rc.circle(0, 0, outerRadius * 2, outerOptions);\n const innerRoughNode = rc.circle(0, 0, innerRadius * 2, innerOptions);\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n circleGroup.attr(\"class\", handleUndefinedAttr(node.cssClasses)).attr(\"style\", handleUndefinedAttr(cssStyles));\n circleGroup.node()?.appendChild(outerRoughNode);\n circleGroup.node()?.appendChild(innerRoughNode);\n } else {\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\", \":first-child\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n outerCircle.attr(\"class\", \"outer-circle\").attr(\"style\", nodeStyles).attr(\"r\", outerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n innerCircle.attr(\"class\", \"inner-circle\").attr(\"style\", nodeStyles).attr(\"r\", innerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleGroup);\n node.intersect = function(point) {\n log.info(\"DoubleCircle intersect\", node, outerRadius, point);\n return intersect_default.circle(node, outerRadius, point);\n };\n return shapeSvg;\n}\n__name(doublecircle, \"doublecircle\");\n\n// src/rendering-util/rendering-elements/shapes/filledCircle.ts\nimport rough15 from \"roughjs\";\nfunction filledCircle(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = 7;\n const { cssStyles } = node;\n const rc = rough15.svg(shapeSvg);\n const { nodeBorder } = themeVariables;\n const options = userNodeOverrides(node, { fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const filledCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n filledCircle2.selectAll(\"path\").attr(\"style\", `fill: ${nodeBorder} !important;`);\n if (cssStyles && cssStyles.length > 0 && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, filledCircle2);\n node.intersect = function(point) {\n log.info(\"filledCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(filledCircle, \"filledCircle\");\n\n// src/rendering-util/rendering-elements/shapes/flippedTriangle.ts\nimport rough16 from \"roughjs\";\nasync function flippedTriangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: -h },\n { x: tw, y: -h },\n { x: tw / 2, y: 0 }\n ];\n const { cssStyles } = node;\n const rc = rough16.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const flippedTriangle2 = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, flippedTriangle2);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(flippedTriangle, \"flippedTriangle\");\n\n// src/rendering-util/rendering-elements/shapes/forkJoin.ts\nimport rough17 from \"roughjs\";\nfunction forkJoin(parent, node, { dir, config: { state: state2, themeVariables } }) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n let width = Math.max(70, node?.width ?? 0);\n let height = Math.max(10, node?.height ?? 0);\n if (dir === \"LR\") {\n width = Math.max(10, node?.width ?? 0);\n height = Math.max(70, node?.height ?? 0);\n }\n const x = -1 * width / 2;\n const y = -1 * height / 2;\n const rc = rough17.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n stroke: themeVariables.lineColor,\n fill: themeVariables.lineColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.rectangle(x, y, width, height, options);\n const shape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, shape);\n const padding = state2?.padding ?? 0;\n if (node.width && node.height) {\n node.width += padding / 2 || 0;\n node.height += padding / 2 || 0;\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(forkJoin, \"forkJoin\");\n\n// src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts\nimport rough18 from \"roughjs\";\nasync function halfRoundedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const minWidth = 80, minHeight = 50;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough18.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n { x: -w / 2, y: h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { radius, point });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(halfRoundedRectangle, \"halfRoundedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/hexagon.ts\nimport rough19 from \"roughjs\";\nvar createHexagonPathD = /* @__PURE__ */ __name((x, y, width, height, m) => {\n return [\n `M${x + m},${y}`,\n `L${x + width - m},${y}`,\n `L${x + width},${y - height / 2}`,\n `L${x + width - m},${y - height}`,\n `L${x + m},${y - height}`,\n `L${x},${y - height / 2}`,\n \"Z\"\n ].join(\" \");\n}, \"createHexagonPathD\");\nasync function hexagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough19.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createHexagonPathD(0, 0, w, h, m);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(hexagon, \"hexagon\");\n\n// src/rendering-util/rendering-elements/shapes/hourglass.ts\nimport rough20 from \"roughjs\";\nasync function hourglass(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(30, node?.width ?? 0);\n const h = Math.max(30, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough20.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: 0, y: h },\n { x: w, y: h }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { points });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(hourglass, \"hourglass\");\n\n// src/rendering-util/rendering-elements/shapes/icon.ts\nimport rough21 from \"roughjs\";\nasync function icon(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const topLabel = node.pos === \"t\";\n const height = iconSize;\n const width = iconSize;\n const { nodeBorder } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough21.svg(shapeSvg);\n const options = userNodeOverrides(node, { stroke: \"none\", fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const iconNode = rc.rectangle(x, y, width, height, options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(icon, \"icon\");\n\n// src/rendering-util/rendering-elements/shapes/iconCircle.ts\nimport rough22 from \"roughjs\";\nasync function iconCircle(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const padding = 20;\n const labelPadding = node.label ? 8 : 0;\n const topLabel = node.pos === \"t\";\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const rc = rough22.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconElem = shapeSvg.append(\"g\");\n if (node.icon) {\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n }\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;\n const iconNode = rc.circle(0, 0, diameter, options);\n const outerWidth = Math.max(diameter, bbox.width);\n const outerHeight = diameter + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconCircle, \"iconCircle\");\n\n// src/rendering-util/rendering-elements/shapes/iconRounded.ts\nimport rough23 from \"roughjs\";\nasync function iconRounded(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough23.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\").attr(\"class\", \"icon-shape2\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconRounded, \"iconRounded\");\n\n// src/rendering-util/rendering-elements/shapes/iconSquare.ts\nimport rough24 from \"roughjs\";\nasync function iconSquare(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough24.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconSquare, \"iconSquare\");\n\n// src/rendering-util/rendering-elements/shapes/imageSquare.ts\nimport rough25 from \"roughjs\";\nasync function imageSquare(parent, node, { config: { flowchart } }) {\n const img = new Image();\n img.src = node?.img ?? \"\";\n await img.decode();\n const imageNaturalWidth = Number(img.naturalWidth.toString().replace(\"px\", \"\"));\n const imageNaturalHeight = Number(img.naturalHeight.toString().replace(\"px\", \"\"));\n node.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const defaultWidth = flowchart?.wrappingWidth;\n node.defaultWidth = flowchart?.wrappingWidth;\n const imageRawWidth = Math.max(\n node.label ? defaultWidth ?? 0 : 0,\n node?.assetWidth ?? imageNaturalWidth\n );\n const imageWidth = node.constraint === \"on\" ? node?.assetHeight ? node.assetHeight * node.imageAspectRatio : imageRawWidth : imageRawWidth;\n const imageHeight = node.constraint === \"on\" ? imageWidth / node.imageAspectRatio : node?.assetHeight ?? imageNaturalHeight;\n node.width = Math.max(imageWidth, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"image-shape default\");\n const topLabel = node.pos === \"t\";\n const x = -imageWidth / 2;\n const y = -imageHeight / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough25.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options);\n const outerWidth = Math.max(imageWidth, bbox.width);\n const outerHeight = imageHeight + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"none\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => imageNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.img) {\n const image = shapeSvg.append(\"image\");\n image.attr(\"href\", node.img);\n image.attr(\"width\", imageWidth);\n image.attr(\"height\", imageHeight);\n image.attr(\"preserveAspectRatio\", \"none\");\n image.attr(\n \"transform\",\n `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`\n );\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2 : imageHeight / 2 - bbox.height / 2 + labelPadding / 2})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(imageSquare, \"imageSquare\");\n\n// src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts\nimport rough26 from \"roughjs\";\nasync function inv_trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: -3 * h / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough26.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(inv_trapezoid, \"inv_trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/drawRect.ts\nimport rough27 from \"roughjs\";\nasync function drawRect(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + options.labelPaddingX * 2, node?.width || 0);\n const totalHeight = Math.max(bbox.height + options.labelPaddingY * 2, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n let rect2;\n let { rx, ry } = node;\n const { cssStyles } = node;\n if (options?.rx && options.ry) {\n rx = options.rx;\n ry = options.ry;\n }\n if (node.look === \"handDrawn\") {\n const rc = rough27.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"rx\", handleUndefinedAttr(rx)).attr(\"ry\", handleUndefinedAttr(ry)).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n }\n updateNodeBounds(node, rect2);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(drawRect, \"drawRect\");\n\n// src/rendering-util/rendering-elements/shapes/labelRect.ts\nasync function labelRect(parent, node) {\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"label\");\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0.1;\n const totalHeight = 0.1;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(labelRect, \"labelRect\");\n\n// src/rendering-util/rendering-elements/shapes/leanLeft.ts\nimport rough28 from \"roughjs\";\nasync function lean_left(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: -(3 * h) / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough28.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_left, \"lean_left\");\n\n// src/rendering-util/rendering-elements/shapes/leanRight.ts\nimport rough29 from \"roughjs\";\nasync function lean_right(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough29.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_right, \"lean_right\");\n\n// src/rendering-util/rendering-elements/shapes/lightningBolt.ts\nimport rough30 from \"roughjs\";\nfunction lightningBolt(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const width = Math.max(35, node?.width ?? 0);\n const height = Math.max(35, node?.height ?? 0);\n const gap = 7;\n const points = [\n { x: width, y: 0 },\n { x: 0, y: height + gap / 2 },\n { x: width - 2 * gap, y: height + gap / 2 },\n { x: 0, y: 2 * height },\n { x: width, y: height - gap / 2 },\n { x: 2 * gap, y: height - gap / 2 }\n ];\n const rc = rough30.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const linePath = createPathFromPoints(points);\n const lineNode = rc.path(linePath, options);\n const lightningBolt2 = shapeSvg.insert(() => lineNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n lightningBolt2.attr(\"transform\", `translate(-${width / 2},${-height})`);\n updateNodeBounds(node, lightningBolt2);\n node.intersect = function(point) {\n log.info(\"lightningBolt intersect\", node, point);\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(lightningBolt, \"lightningBolt\");\n\n// src/rendering-util/rendering-elements/shapes/linedCylinder.ts\nimport rough31 from \"roughjs\";\nvar createCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function linedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + (node.padding ?? 0), node.height ?? 0);\n const outerOffset = h * 0.1;\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough31.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n const innerPathData = createInnerCylinderPathD2(0, ry, w, h, rx, ry);\n const options = userNodeOverrides(node, {});\n const outerNode = rc.path(outerPathData, options);\n const innerLine = rc.path(innerPathData, options);\n const innerLineEl = shapeSvg.insert(() => innerLine, \":first-child\");\n innerLineEl.attr(\"class\", \"line\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(linedCylinder, \"linedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts\nimport rough32 from \"roughjs\";\nasync function linedWaveEdgedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough32.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2, y: -finalH / 2 },\n { x: -w / 2, y: finalH / 2 * 1.1 },\n { x: -w / 2, y: -finalH / 2 }\n ];\n const poly = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const waveEdgeRect = shapeSvg.insert(() => poly, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) + w / 2 * 0.1 / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(linedWaveEdgedRect, \"linedWaveEdgedRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiRect.ts\nimport rough33 from \"roughjs\";\nasync function multiRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough33.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y },\n { x, y }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, { ...options, fill: \"none\" });\n const multiRect2 = shapeSvg.insert(() => innerNode, \":first-child\");\n multiRect2.insert(() => outerNode, \":first-child\");\n multiRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, multiRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiRect, \"multiRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts\nimport rough34 from \"roughjs\";\nasync function multiWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const x = -w / 2;\n const y = -finalH / 2;\n const rectOffset = 5;\n const { cssStyles } = node;\n const wavePoints = generateFullSineWavePoints(\n x - rectOffset,\n y + finalH + rectOffset,\n x + w - rectOffset,\n y + finalH + rectOffset,\n waveAmplitude,\n 0.8\n );\n const lastWavePoint = wavePoints?.[wavePoints.length - 1];\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + finalH + rectOffset },\n ...wavePoints,\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y },\n { x, y }\n ];\n const rc = rough34.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, options);\n const shape = shapeSvg.insert(() => outerNode, \":first-child\");\n shape.insert(() => innerNode);\n shape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n shape.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, shape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiWaveEdgedRectangle, \"multiWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/note.ts\nimport rough35 from \"roughjs\";\nasync function note(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const useHtmlLabels = node.useHtmlLabels || getEffectiveHtmlLabels(getConfig());\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const { cssStyles } = node;\n const rc = rough35.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n fill: themeVariables.noteBkgColor,\n stroke: themeVariables.noteBorderColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const noteShapeNode = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => noteShapeNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(note, \"note\");\n\n// src/rendering-util/rendering-elements/shapes/question.ts\nimport rough36 from \"roughjs\";\nvar createDecisionBoxPathD = /* @__PURE__ */ __name((x, y, size) => {\n return [\n `M${x + size / 2},${y}`,\n `L${x + size},${y - size / 2}`,\n `L${x + size / 2},${y - size}`,\n `L${x},${y - size / 2}`,\n \"Z\"\n ].join(\" \");\n}, \"createDecisionBoxPathD\");\nasync function question(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const adjustment = 0.5;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough36.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createDecisionBoxPathD(0, 0, s);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, s, s, points);\n polygon.attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.calcIntersect = function(bounds, point) {\n const s2 = bounds.width;\n const points2 = [\n { x: s2 / 2, y: 0 },\n { x: s2, y: -s2 / 2 },\n { x: s2 / 2, y: -s2 },\n { x: 0, y: -s2 / 2 }\n ];\n const res = intersect_default.polygon(bounds, points2, point);\n return { x: res.x - 0.5, y: res.y - 0.5 };\n };\n node.intersect = function(point) {\n return this.calcIntersect(node, point);\n };\n return shapeSvg;\n}\n__name(question, \"question\");\n\n// src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts\nimport rough37 from \"roughjs\";\nasync function rect_left_inv_arrow(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const notch = y / 2;\n const points = [\n { x: x + notch, y },\n { x, y: 0 },\n { x: x + notch, y: -y },\n { x: -x, y: -y },\n { x: -x, y }\n ];\n const { cssStyles } = node;\n const rc = rough37.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-notch / 2},0)`);\n label.attr(\n \"transform\",\n `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(rect_left_inv_arrow, \"rect_left_inv_arrow\");\n\n// src/rendering-util/rendering-elements/shapes/rectWithTitle.ts\nimport { select as select3 } from \"d3\";\nimport rough38 from \"roughjs\";\nasync function rectWithTitle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n let classes;\n if (!node.cssClasses) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.cssClasses;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const g = shapeSvg.insert(\"g\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", nodeStyles);\n const description = node.description;\n const title = node.label;\n const text2 = await createLabel_default(label, title, node.labelStyle, true, true);\n let bbox = { width: 0, height: 0 };\n if (getEffectiveHtmlLabels(getConfig2())) {\n const div2 = text2.children[0];\n const dv2 = select3(text2);\n bbox = div2.getBoundingClientRect();\n dv2.attr(\"width\", bbox.width);\n dv2.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", description);\n const textRows = description || [];\n const titleBox = text2.getBBox();\n const descr = await createLabel_default(\n label,\n Array.isArray(textRows) ? textRows.join(\"<br/>\") : textRows,\n node.labelStyle,\n true,\n true\n );\n const div = descr.children[0];\n const dv = select3(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n const halfPadding = (node.padding || 0) / 2;\n select3(descr).attr(\n \"transform\",\n \"translate( \" + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select3(text2).attr(\n \"transform\",\n \"translate( \" + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n const totalWidth = bbox.width + (node.padding || 0);\n const totalHeight = bbox.height + (node.padding || 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n let rect2;\n let innerLine;\n if (node.look === \"handDrawn\") {\n const rc = rough38.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(\n createRoundedRectPathD(x, y, totalWidth, totalHeight, node.rx || 0),\n options\n );\n const roughLine = rc.line(\n -bbox.width / 2 - halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n bbox.width / 2 + halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n options\n );\n innerLine = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughLine;\n }, \":first-child\");\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n } else {\n rect2 = g.insert(\"rect\", \":first-child\");\n innerLine = g.insert(\"line\");\n rect2.attr(\"class\", \"outer title-state\").attr(\"style\", nodeStyles).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + (node.padding || 0)).attr(\"height\", bbox.height + (node.padding || 0));\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(rectWithTitle, \"rectWithTitle\");\n\n// src/rendering-util/rendering-elements/shapes/roundedRect.ts\nasync function roundedRect(parent, node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: \"\",\n labelPaddingX: (node?.padding || 0) * 1,\n labelPaddingY: (node?.padding || 0) * 1\n };\n return drawRect(parent, node, options);\n}\n__name(roundedRect, \"roundedRect\");\n\n// src/rendering-util/rendering-elements/shapes/shadedProcess.ts\nimport rough39 from \"roughjs\";\nasync function shadedProcess(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = node?.padding ?? 0;\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const { cssStyles } = node;\n const rc = rough39.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x: x + w + 8, y },\n { x: x + w + 8, y: y + h },\n { x: x - 8, y: y + h },\n { x: x - 8, y },\n { x, y },\n { x, y: y + h }\n ];\n const roughNode = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-w / 2 + 4 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(shadedProcess, \"shadedProcess\");\n\n// src/rendering-util/rendering-elements/shapes/slopedRect.ts\nimport rough40 from \"roughjs\";\nasync function slopedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough40.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(0, ${h / 4})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(slopedRect, \"slopedRect\");\n\n// src/rendering-util/rendering-elements/shapes/squareRect.ts\nasync function squareRect2(parent, node) {\n const options = {\n rx: 0,\n ry: 0,\n classes: \"\",\n labelPaddingX: node.labelPaddingX ?? (node?.padding || 0) * 2,\n labelPaddingY: (node?.padding || 0) * 1\n };\n return drawRect(parent, node, options);\n}\n__name(squareRect2, \"squareRect\");\n\n// src/rendering-util/rendering-elements/shapes/stadium.ts\nimport rough41 from \"roughjs\";\nasync function stadium(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough41.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 + radius, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(w / 2 - radius, 0, radius, 50, 270, 450)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container outer-path\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(stadium, \"stadium\");\n\n// src/rendering-util/rendering-elements/shapes/state.ts\nasync function state(parent, node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: \"flowchart-node\"\n };\n return drawRect(parent, node, options);\n}\n__name(state, \"state\");\n\n// src/rendering-util/rendering-elements/shapes/stateEnd.ts\nimport rough42 from \"roughjs\";\nfunction stateEnd(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { cssStyles } = node;\n const { lineColor, stateBorder, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const rc = rough42.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.circle(0, 0, 14, {\n ...options,\n stroke: lineColor,\n strokeWidth: 2\n });\n const innerFill = stateBorder ?? nodeBorder;\n const roughInnerNode = rc.circle(0, 0, 5, {\n ...options,\n fill: innerFill,\n stroke: innerFill,\n strokeWidth: 2,\n fillStyle: \"solid\"\n });\n const circle2 = shapeSvg.insert(() => roughNode, \":first-child\");\n circle2.insert(() => roughInnerNode);\n if (cssStyles) {\n circle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n circle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateEnd, \"stateEnd\");\n\n// src/rendering-util/rendering-elements/shapes/stateStart.ts\nimport rough43 from \"roughjs\";\nfunction stateStart(parent, node, { config: { themeVariables } }) {\n const { lineColor } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let circle2;\n if (node.look === \"handDrawn\") {\n const rc = rough43.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor));\n circle2 = shapeSvg.insert(() => roughNode);\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n } else {\n circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateStart, \"stateStart\");\n\n// src/rendering-util/rendering-elements/shapes/subroutine.ts\nimport rough44 from \"roughjs\";\nasync function subroutine(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = (node?.padding || 0) / 2;\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n if (node.look === \"handDrawn\") {\n const rc = rough44.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.rectangle(x - 8, y, w + 16, h, options);\n const l1 = rc.line(x, y, x, y + h, options);\n const l2 = rc.line(x + w, y, x + w, y + h, options);\n shapeSvg.insert(() => l1, \":first-child\");\n shapeSvg.insert(() => l2, \":first-child\");\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n const { cssStyles } = node;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, rect2);\n } else {\n const el = insertPolygonShape(shapeSvg, w, h, points);\n if (nodeStyles) {\n el.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, el);\n }\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(subroutine, \"subroutine\");\n\n// src/rendering-util/rendering-elements/shapes/taggedRect.ts\nimport rough45 from \"roughjs\";\nasync function taggedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const tagWidth = 0.2 * h;\n const tagHeight = 0.2 * h;\n const { cssStyles } = node;\n const rc = rough45.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const rectPoints = [\n { x: x - tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x - tagWidth / 2, y: y + h }\n ];\n const tagPoints = [\n { x: x + w - tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h - tagHeight }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const rectPath = createPathFromPoints(rectPoints);\n const rectNode = rc.path(rectPath, options);\n const tagPath = createPathFromPoints(tagPoints);\n const tagNode = rc.path(tagPath, { ...options, fillStyle: \"solid\" });\n const taggedRect2 = shapeSvg.insert(() => tagNode, \":first-child\");\n taggedRect2.insert(() => rectNode, \":first-child\");\n taggedRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, taggedRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedRect, \"taggedRect\");\n\n// src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts\nimport rough46 from \"roughjs\";\nasync function taggedWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const tagWidth = 0.2 * w;\n const tagHeight = 0.2 * h;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough46.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 }\n ];\n const x = -w / 2 + w / 2 * 0.1;\n const y = -finalH / 2 - tagHeight * 0.4;\n const tagPoints = [\n { x: x + w - tagWidth, y: (y + h) * 1.4 },\n { x: x + w, y: y + h - tagHeight },\n { x: x + w, y: (y + h) * 0.9 },\n ...generateFullSineWavePoints(\n x + w,\n (y + h) * 1.3,\n x + w - tagWidth,\n (y + h) * 1.5,\n -h * 0.03,\n 0.5\n )\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);\n const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {\n ...options,\n fillStyle: \"solid\"\n });\n const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, \":first-child\");\n waveEdgeRect.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedWaveEdgedRectangle, \"taggedWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/text.ts\nasync function text(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + node.padding, node?.width || 0);\n const totalHeight = Math.max(bbox.height + node.padding, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"text\").attr(\"style\", nodeStyles).attr(\"rx\", 0).attr(\"ry\", 0).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(text, \"text\");\n\n// src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts\nimport rough47 from \"roughjs\";\nvar createCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return `M${x},${y}\n a${rx},${ry} 0,0,1 ${0},${-height}\n l${width},${0}\n a${rx},${ry} 0,0,1 ${0},${height}\n M${width},${-height}\n a${rx},${ry} 0,0,0 ${0},${height}\n l${-width},${0}`;\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y}`,\n `M${x + width},${y}`,\n `a${rx},${ry} 0,0,0 ${0},${-height}`,\n `l${-width},0`,\n `a${rx},${ry} 0,0,0 ${0},${height}`,\n `l${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x + width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 0,${height}`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function tiltedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label, halfPadding } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const labelPadding = node.look === \"neo\" ? halfPadding * 2 : halfPadding;\n const h = bbox.height + labelPadding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const w = bbox.width + rx + labelPadding;\n const { cssStyles } = node;\n let cylinder2;\n if (node.look === \"handDrawn\") {\n const rc = rough47.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD3(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD3(0, 0, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD3(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n }\n cylinder2.attr(\"label-offset-x\", rx);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${h / 2} )`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rx - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, cylinder2);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const y = pos.y - (node.y ?? 0);\n if (ry != 0 && (Math.abs(y) < (node.height ?? 0) / 2 || Math.abs(y) == (node.height ?? 0) / 2 && Math.abs(pos.x - (node.x ?? 0)) > (node.width ?? 0) / 2 - rx)) {\n let x = rx * rx * (1 - y * y / (ry * ry));\n if (x != 0) {\n x = Math.sqrt(Math.abs(x));\n }\n x = rx - x;\n if (point.x - (node.x ?? 0) > 0) {\n x = -x;\n }\n pos.x += x;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(tiltedCylinder, \"tiltedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoid.ts\nimport rough48 from \"roughjs\";\nasync function trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough48.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(trapezoid, \"trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts\nimport rough49 from \"roughjs\";\nasync function trapezoidalPentagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 60, minHeight = 20;\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough49.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 * 0.8, y: -h / 2 },\n { x: w / 2 * 0.8, y: -h / 2 },\n { x: w / 2, y: -h / 2 * 0.6 },\n { x: w / 2, y: h / 2 },\n { x: -w / 2, y: h / 2 },\n { x: -w / 2, y: -h / 2 * 0.6 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(trapezoidalPentagon, \"trapezoidalPentagon\");\n\n// src/rendering-util/rendering-elements/shapes/triangle.ts\nimport rough50 from \"roughjs\";\nasync function triangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const useHtmlLabels = node.useHtmlLabels || getEffectiveHtmlLabels(getConfig2());\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: 0 },\n { x: tw, y: 0 },\n { x: tw / 2, y: -h }\n ];\n const { cssStyles } = node;\n const rc = rough50.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(triangle, \"triangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts\nimport rough51 from \"roughjs\";\nasync function waveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 8;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const minWidth = 70;\n const widthDif = minWidth - w;\n const extraW = widthDif > 0 ? widthDif / 2 : 0;\n const rc = rough51.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - extraW, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - extraW,\n finalH / 2,\n w / 2 + extraW,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + extraW, y: -finalH / 2 },\n { x: -w / 2 - extraW, y: -finalH / 2 }\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveEdgedRectangle, \"waveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveRectangle.ts\nimport rough52 from \"roughjs\";\nasync function waveRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 100;\n const minHeight = 50;\n const baseWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const baseHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const aspectRatio = baseWidth / baseHeight;\n let w = baseWidth;\n let h = baseHeight;\n if (w > h * aspectRatio) {\n h = w / aspectRatio;\n } else {\n w = h * aspectRatio;\n }\n w = Math.max(w, minWidth);\n h = Math.max(h, minHeight);\n const waveAmplitude = Math.min(h * 0.2, h / 4);\n const finalH = h + waveAmplitude * 2;\n const { cssStyles } = node;\n const rc = rough52.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: finalH / 2 },\n ...generateFullSineWavePoints(-w / 2, finalH / 2, w / 2, finalH / 2, waveAmplitude, 1),\n { x: w / 2, y: -finalH / 2 },\n ...generateFullSineWavePoints(w / 2, -finalH / 2, -w / 2, -finalH / 2, waveAmplitude, -1)\n ];\n const waveRectPath = createPathFromPoints(points);\n const waveRectNode = rc.path(waveRectPath, options);\n const waveRect = shapeSvg.insert(() => waveRectNode, \":first-child\");\n waveRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, waveRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveRectangle, \"waveRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/windowPane.ts\nimport rough53 from \"roughjs\";\nasync function windowPane(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough53.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y - rectOffset },\n { x: x - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - rectOffset }\n ];\n const path = `M${x - rectOffset},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y - rectOffset}\n M${x - rectOffset},${y} L${x + w},${y}\n M${x},${y - rectOffset} L${x},${y + h}`;\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const no = rc.path(path, options);\n const windowPane2 = shapeSvg.insert(() => no, \":first-child\");\n windowPane2.attr(\"transform\", `translate(${rectOffset / 2}, ${rectOffset / 2})`);\n windowPane2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) + rectOffset / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, windowPane2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(windowPane, \"windowPane\");\n\n// src/rendering-util/rendering-elements/shapes/erBox.ts\nimport rough54 from \"roughjs\";\nimport { select as select4 } from \"d3\";\nasync function erBox(parent, node) {\n const entityNode = node;\n if (entityNode.alias) {\n node.label = entityNode.alias;\n }\n if (node.look === \"handDrawn\") {\n const { themeVariables: themeVariables2 } = getConfig();\n const { background } = themeVariables2;\n const backgroundNode = {\n ...node,\n id: node.id + \"-background\",\n look: \"default\",\n cssStyles: [\"stroke: none\", `fill: ${background}`]\n };\n await erBox(parent, backgroundNode);\n }\n const config = getConfig();\n node.useHtmlLabels = config.htmlLabels;\n let PADDING = config.er?.diagramPadding ?? 10;\n let TEXT_PADDING = config.er?.entityPadding ?? 6;\n const { cssStyles } = node;\n const { labelStyles, nodeStyles } = styles2String(node);\n if (entityNode.attributes.length === 0 && node.label) {\n const options2 = {\n rx: 0,\n ry: 0,\n labelPaddingX: PADDING,\n labelPaddingY: PADDING * 1.5,\n classes: \"\"\n };\n if (calculateTextWidth(node.label, config) + options2.labelPaddingX * 2 < config.er.minEntityWidth) {\n node.width = config.er.minEntityWidth;\n }\n const shapeSvg2 = await drawRect(parent, node, options2);\n if (!evaluate(config.htmlLabels)) {\n const textElement = shapeSvg2.select(\"text\");\n const bbox = textElement.node()?.getBBox();\n textElement.attr(\"transform\", `translate(${-bbox.width / 2}, 0)`);\n }\n return shapeSvg2;\n }\n if (!config.htmlLabels) {\n PADDING *= 1.25;\n TEXT_PADDING *= 1.25;\n }\n let cssClasses = getNodeClasses(node);\n if (!cssClasses) {\n cssClasses = \"node default\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const nameBBox = await addText(shapeSvg, node.label ?? \"\", config, 0, 0, [\"name\"], labelStyles);\n nameBBox.height += TEXT_PADDING;\n let yOffset = 0;\n const yOffsets = [];\n const rows = [];\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeysWidth = 0;\n let maxCommentWidth = 0;\n let keysPresent = true;\n let commentPresent = true;\n for (const attribute of entityNode.attributes) {\n const typeBBox = await addText(\n shapeSvg,\n attribute.type,\n config,\n 0,\n yOffset,\n [\"attribute-type\"],\n labelStyles\n );\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width + PADDING);\n const nameBBox2 = await addText(\n shapeSvg,\n attribute.name,\n config,\n 0,\n yOffset,\n [\"attribute-name\"],\n labelStyles\n );\n maxNameWidth = Math.max(maxNameWidth, nameBBox2.width + PADDING);\n const keysBBox = await addText(\n shapeSvg,\n attribute.keys.join(),\n config,\n 0,\n yOffset,\n [\"attribute-keys\"],\n labelStyles\n );\n maxKeysWidth = Math.max(maxKeysWidth, keysBBox.width + PADDING);\n const commentBBox = await addText(\n shapeSvg,\n attribute.comment,\n config,\n 0,\n yOffset,\n [\"attribute-comment\"],\n labelStyles\n );\n maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING);\n const rowHeight = Math.max(typeBBox.height, nameBBox2.height, keysBBox.height, commentBBox.height) + TEXT_PADDING;\n rows.push({ yOffset, rowHeight });\n yOffset += rowHeight;\n }\n let totalWidthSections = 4;\n if (maxKeysWidth <= PADDING) {\n keysPresent = false;\n maxKeysWidth = 0;\n totalWidthSections--;\n }\n if (maxCommentWidth <= PADDING) {\n commentPresent = false;\n maxCommentWidth = 0;\n totalWidthSections--;\n }\n const shapeBBox = shapeSvg.node().getBBox();\n if (nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth) > 0) {\n const difference = nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth);\n maxTypeWidth += difference / totalWidthSections;\n maxNameWidth += difference / totalWidthSections;\n if (maxKeysWidth > 0) {\n maxKeysWidth += difference / totalWidthSections;\n }\n if (maxCommentWidth > 0) {\n maxCommentWidth += difference / totalWidthSections;\n }\n }\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth;\n const rc = rough54.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n let totalShapeBBoxHeight = 0;\n if (rows.length > 0) {\n totalShapeBBoxHeight = rows.reduce((sum, row) => sum + (row?.rowHeight ?? 0), 0);\n }\n const w = Math.max(shapeBBox.width + PADDING * 2, node?.width || 0, maxWidth);\n const h = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node?.height || 0);\n const x = -w / 2;\n const y = -h / 2;\n shapeSvg.selectAll(\"g:not(:first-child)\").each((_, i, nodes) => {\n const text2 = select4(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n if (text2.attr(\"class\").includes(\"attribute-name\")) {\n translateX += maxTypeWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-keys\")) {\n translateX += maxTypeWidth + maxNameWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-comment\")) {\n translateX += maxTypeWidth + maxNameWidth + maxKeysWidth;\n }\n }\n }\n text2.attr(\n \"transform\",\n `translate(${x + PADDING / 2 + translateX}, ${translateY + y + nameBBox.height + TEXT_PADDING / 2})`\n );\n });\n shapeSvg.select(\".name\").attr(\"transform\", \"translate(\" + -nameBBox.width / 2 + \", \" + (y + TEXT_PADDING / 2) + \")\");\n const roughRect = rc.rectangle(x, y, w, h, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\").attr(\"style\", cssStyles.join(\"\"));\n const { themeVariables } = getConfig();\n const { rowEven, rowOdd, nodeBorder } = themeVariables;\n yOffsets.push(0);\n for (const [i, row] of rows.entries()) {\n const contentRowIndex = i + 1;\n const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0;\n const roughRect2 = rc.rectangle(x, nameBBox.height + y + row?.yOffset, w, row?.rowHeight, {\n ...options,\n fill: isEven ? rowEven : rowOdd,\n stroke: nodeBorder\n });\n shapeSvg.insert(() => roughRect2, \"g.label\").attr(\"style\", cssStyles.join(\"\")).attr(\"class\", `row-rect-${isEven ? \"even\" : \"odd\"}`);\n }\n let roughLine = rc.line(x, nameBBox.height + y, w + x, nameBBox.height + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n roughLine = rc.line(maxTypeWidth + x, nameBBox.height + y, maxTypeWidth + x, h + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n if (keysPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n if (commentPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n for (const yOffset2 of yOffsets) {\n roughLine = rc.line(\n x,\n nameBBox.height + y + yOffset2,\n w + x,\n nameBBox.height + y + yOffset2,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n updateNodeBounds(node, rect2);\n if (nodeStyles && node.look !== \"handDrawn\") {\n const allStyle = nodeStyles.split(\";\");\n const strokeStyles = allStyle?.filter((e) => {\n return e.includes(\"stroke\");\n })?.map((s) => `${s}`).join(\"; \");\n shapeSvg.selectAll(\"path\").attr(\"style\", strokeStyles ?? \"\");\n shapeSvg.selectAll(\".row-rect-even path\").attr(\"style\", nodeStyles);\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(erBox, \"erBox\");\nasync function addText(shapeSvg, labelText, config, translateX = 0, translateY = 0, classes = [], style = \"\") {\n const label = shapeSvg.insert(\"g\").attr(\"class\", `label ${classes.join(\" \")}`).attr(\"transform\", `translate(${translateX}, ${translateY})`).attr(\"style\", style);\n if (labelText !== parseGenericTypes(labelText)) {\n labelText = parseGenericTypes(labelText);\n labelText = labelText.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n const text2 = label.node().appendChild(\n await createText(\n label,\n labelText,\n {\n width: calculateTextWidth(labelText, config) + 100,\n style,\n useHtmlLabels: config.htmlLabels\n },\n config\n )\n );\n if (labelText.includes(\"<\") || labelText.includes(\">\")) {\n let child = text2.children[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n while (child.childNodes[0]) {\n child = child.childNodes[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n }\n let bbox = text2.getBBox();\n if (evaluate(config.htmlLabels)) {\n const div = text2.children[0];\n div.style.textAlign = \"start\";\n const dv = select4(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n return bbox;\n}\n__name(addText, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nimport { select as select6 } from \"d3\";\nimport rough55 from \"roughjs\";\n\n// src/diagrams/class/shapeUtil.ts\nimport { select as select5 } from \"d3\";\nasync function textHelper(parent, node, config, useHtmlLabels, GAP = config.class.padding ?? 12) {\n const TEXT_PADDING = !useHtmlLabels ? 3 : 0;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId || node.id);\n let annotationGroup = null;\n let labelGroup = null;\n let membersGroup = null;\n let methodsGroup = null;\n let annotationGroupHeight = 0;\n let labelGroupHeight = 0;\n let membersGroupHeight = 0;\n annotationGroup = shapeSvg.insert(\"g\").attr(\"class\", \"annotation-group text\");\n if (node.annotations.length > 0) {\n const annotation = node.annotations[0];\n await addText2(annotationGroup, { text: `\\xAB${annotation}\\xBB` }, 0);\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroupHeight = annotationGroupBBox.height;\n }\n labelGroup = shapeSvg.insert(\"g\").attr(\"class\", \"label-group text\");\n await addText2(labelGroup, node, 0, [\"font-weight: bolder\"]);\n const labelGroupBBox = labelGroup.node().getBBox();\n labelGroupHeight = labelGroupBBox.height;\n membersGroup = shapeSvg.insert(\"g\").attr(\"class\", \"members-group text\");\n let yOffset = 0;\n for (const member of node.members) {\n const height = await addText2(membersGroup, member, yOffset, [member.parseClassifier()]);\n yOffset += height + TEXT_PADDING;\n }\n membersGroupHeight = membersGroup.node().getBBox().height;\n if (membersGroupHeight <= 0) {\n membersGroupHeight = GAP / 2;\n }\n methodsGroup = shapeSvg.insert(\"g\").attr(\"class\", \"methods-group text\");\n let methodsYOffset = 0;\n for (const method of node.methods) {\n const height = await addText2(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);\n methodsYOffset += height + TEXT_PADDING;\n }\n let bbox = shapeSvg.node().getBBox();\n if (annotationGroup !== null) {\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroup.attr(\"transform\", `translate(${-annotationGroupBBox.width / 2})`);\n }\n labelGroup.attr(\"transform\", `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);\n bbox = shapeSvg.node().getBBox();\n membersGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + GAP * 2})`\n );\n bbox = shapeSvg.node().getBBox();\n methodsGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 4 : GAP * 2)})`\n );\n bbox = shapeSvg.node().getBBox();\n return { shapeSvg, bbox };\n}\n__name(textHelper, \"textHelper\");\nasync function addText2(parentGroup, node, yOffset, styles = []) {\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", styles.join(\"; \"));\n const config = getConfig();\n let useHtmlLabels = \"useHtmlLabels\" in node ? node.useHtmlLabels : evaluate(config.htmlLabels) ?? true;\n let textContent = \"\";\n if (\"text\" in node) {\n textContent = node.text;\n } else {\n textContent = node.label;\n }\n if (!useHtmlLabels && textContent.startsWith(\"\\\\\")) {\n textContent = textContent.substring(1);\n }\n if (hasKatex(textContent)) {\n useHtmlLabels = true;\n }\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(textContent)),\n {\n width: calculateTextWidth(textContent, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels\n },\n config\n );\n let bbox;\n let numberOfLines = 1;\n if (!useHtmlLabels) {\n if (styles.includes(\"font-weight: bolder\")) {\n select5(text2).selectAll(\"tspan\").attr(\"font-weight\", \"\");\n }\n numberOfLines = text2.children.length;\n const textChild = text2.children[0];\n if (text2.textContent === \"\" || text2.textContent.includes(\">\")) {\n textChild.textContent = textContent[0] + textContent.substring(1).replaceAll(\">\", \">\").replaceAll(\"<\", \"<\").trim();\n const preserveSpace = textContent[1] === \" \";\n if (preserveSpace) {\n textChild.textContent = textChild.textContent[0] + \" \" + textChild.textContent.substring(1);\n }\n }\n if (textChild.textContent === \"undefined\") {\n textChild.textContent = \"\";\n }\n bbox = text2.getBBox();\n } else {\n const div = text2.children[0];\n const dv = select5(text2);\n numberOfLines = div.innerHTML.split(\"<br>\").length;\n if (div.innerHTML.includes(\"</math>\")) {\n numberOfLines += div.innerHTML.split(\"<mrow>\").length - 1;\n }\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = textContent.replace(/<img[^>]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = config.fontSize?.toString() ?? window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", \"translate(0,\" + (-bbox.height / (2 * numberOfLines) + yOffset) + \")\");\n return bbox.height;\n}\n__name(addText2, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nasync function classBox(parent, node) {\n const config = getConfig2();\n const PADDING = config.class.padding ?? 12;\n const GAP = PADDING;\n const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true;\n const classNode = node;\n classNode.annotations = classNode.annotations ?? [];\n classNode.members = classNode.members ?? [];\n classNode.methods = classNode.methods ?? [];\n const { shapeSvg, bbox } = await textHelper(parent, node, config, useHtmlLabels, GAP);\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.cssStyles = classNode.styles || \"\";\n const styles = classNode.styles?.join(\";\") || nodeStyles || \"\";\n if (!node.cssStyles) {\n node.cssStyles = styles.replaceAll(\"!important\", \"\").split(\";\");\n }\n const renderExtraBox = classNode.members.length === 0 && classNode.methods.length === 0 && !config.class?.hideEmptyMembersBox;\n const rc = rough55.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const w = bbox.width;\n let h = bbox.height;\n if (classNode.members.length === 0 && classNode.methods.length === 0) {\n h += GAP;\n } else if (classNode.members.length > 0 && classNode.methods.length === 0) {\n h += GAP * 2;\n }\n const x = -w / 2;\n const y = -h / 2;\n const roughRect = rc.rectangle(\n x - PADDING,\n y - PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0),\n w + 2 * PADDING,\n h + 2 * PADDING + (renderExtraBox ? PADDING * 2 : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING : 0),\n options\n );\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n const rectBBox = rect2.node().getBBox();\n shapeSvg.selectAll(\".text\").each((_, i, nodes) => {\n const text2 = select6(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateY = parseFloat(translate[2]);\n }\n }\n let newTranslateY = translateY + y + PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0);\n if (!useHtmlLabels) {\n newTranslateY -= 4;\n }\n let newTranslateX = x;\n if (text2.attr(\"class\").includes(\"label-group\") || text2.attr(\"class\").includes(\"annotation-group\")) {\n newTranslateX = -text2.node()?.getBBox().width / 2 || 0;\n shapeSvg.selectAll(\"text\").each(function(_2, i2, nodes2) {\n if (window.getComputedStyle(nodes2[i2]).textAnchor === \"middle\") {\n newTranslateX = 0;\n }\n });\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY})`);\n });\n const annotationGroupHeight = shapeSvg.select(\".annotation-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const labelGroupHeight = shapeSvg.select(\".label-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const membersGroupHeight = shapeSvg.select(\".members-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + PADDING + GAP * 2,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (classNode.look !== \"handDrawn\") {\n shapeSvg.selectAll(\"path\").attr(\"style\", styles);\n }\n rect2.select(\":nth-child(2)\").attr(\"style\", styles);\n shapeSvg.selectAll(\".divider\").select(\"path\").attr(\"style\", styles);\n if (node.labelStyle) {\n shapeSvg.selectAll(\"span\").attr(\"style\", node.labelStyle);\n } else {\n shapeSvg.selectAll(\"span\").attr(\"style\", styles);\n }\n if (!useHtmlLabels) {\n const colorRegex = RegExp(/color\\s*:\\s*([^;]*)/);\n const match = colorRegex.exec(styles);\n if (match) {\n const colorStyle = match[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n } else if (labelStyles) {\n const match2 = colorRegex.exec(labelStyles);\n if (match2) {\n const colorStyle = match2[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n }\n }\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(classBox, \"classBox\");\n\n// src/rendering-util/rendering-elements/shapes/requirementBox.ts\nimport rough56 from \"roughjs\";\nimport { select as select7 } from \"d3\";\nasync function requirementBox(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const requirementNode = node;\n const elementNode = node;\n const padding = 20;\n const gap = 20;\n const isRequirementNode = \"verifyMethod\" in node;\n const classes = getNodeClasses(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId ?? node.id);\n let typeHeight;\n if (isRequirementNode) {\n typeHeight = await addText3(\n shapeSvg,\n `<<${requirementNode.type}>>`,\n 0,\n node.labelStyle\n );\n } else {\n typeHeight = await addText3(shapeSvg, \"<<Element>>\", 0, node.labelStyle);\n }\n let accumulativeHeight = typeHeight;\n const nameHeight = await addText3(\n shapeSvg,\n requirementNode.name,\n accumulativeHeight,\n node.labelStyle + \"; font-weight: bold;\"\n );\n accumulativeHeight += nameHeight + gap;\n if (isRequirementNode) {\n const idHeight = await addText3(\n shapeSvg,\n `${requirementNode.requirementId ? `ID: ${requirementNode.requirementId}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += idHeight;\n const textHeight = await addText3(\n shapeSvg,\n `${requirementNode.text ? `Text: ${requirementNode.text}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += textHeight;\n const riskHeight = await addText3(\n shapeSvg,\n `${requirementNode.risk ? `Risk: ${requirementNode.risk}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += riskHeight;\n await addText3(\n shapeSvg,\n `${requirementNode.verifyMethod ? `Verification: ${requirementNode.verifyMethod}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n } else {\n const typeHeight2 = await addText3(\n shapeSvg,\n `${elementNode.type ? `Type: ${elementNode.type}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += typeHeight2;\n await addText3(\n shapeSvg,\n `${elementNode.docRef ? `Doc Ref: ${elementNode.docRef}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n }\n const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding;\n const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rc = rough56.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughRect = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n shapeSvg.selectAll(\".label\").each((_, i, nodes) => {\n const text2 = select7(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n }\n }\n const newTranslateY = translateY - totalHeight / 2;\n let newTranslateX = x + padding / 2;\n if (i === 0 || i === 1) {\n newTranslateX = translateX;\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY + padding})`);\n });\n if (accumulativeHeight > typeHeight + nameHeight + gap) {\n const roughLine = rc.line(\n x,\n y + typeHeight + nameHeight + gap,\n x + totalWidth,\n y + typeHeight + nameHeight + gap,\n options\n );\n const dividerLine = shapeSvg.insert(() => roughLine);\n dividerLine.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(requirementBox, \"requirementBox\");\nasync function addText3(parentGroup, inputText, yOffset, style = \"\") {\n if (inputText === \"\") {\n return 0;\n }\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", style);\n const config = getConfig2();\n const useHtmlLabels = config.htmlLabels ?? true;\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(inputText)),\n {\n width: calculateTextWidth(inputText, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels,\n style\n },\n config\n );\n let bbox;\n if (!useHtmlLabels) {\n const textChild = text2.children[0];\n for (const child of textChild.children) {\n child.textContent = child.textContent.replaceAll(\">\", \">\").replaceAll(\"<\", \"<\");\n if (style) {\n child.setAttribute(\"style\", style);\n }\n }\n bbox = text2.getBBox();\n bbox.height += 6;\n } else {\n const div = text2.children[0];\n const dv = select7(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", `translate(${-bbox.width / 2},${-bbox.height / 2 + yOffset})`);\n return bbox.height;\n}\n__name(addText3, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/kanbanItem.ts\nimport rough57 from \"roughjs\";\nvar colorFromPriority = /* @__PURE__ */ __name((priority) => {\n switch (priority) {\n case \"Very High\":\n return \"red\";\n case \"High\":\n return \"orange\";\n case \"Medium\":\n return null;\n // no stroke\n case \"Low\":\n return \"blue\";\n case \"Very Low\":\n return \"lightblue\";\n }\n}, \"colorFromPriority\");\nasync function kanbanItem(parent, kanbanNode, { config }) {\n const { labelStyles, nodeStyles } = styles2String(kanbanNode);\n kanbanNode.labelStyle = labelStyles || \"\";\n const labelPaddingX = 10;\n const orgWidth = kanbanNode.width;\n kanbanNode.width = (kanbanNode.width ?? 200) - 10;\n const {\n shapeSvg,\n bbox,\n label: labelElTitle\n } = await labelHelper(parent, kanbanNode, getNodeClasses(kanbanNode));\n const padding = kanbanNode.padding || 10;\n let ticketUrl = \"\";\n let link;\n if (\"ticket\" in kanbanNode && kanbanNode.ticket && config?.kanban?.ticketBaseUrl) {\n ticketUrl = config?.kanban?.ticketBaseUrl.replace(\"#TICKET#\", kanbanNode.ticket);\n link = shapeSvg.insert(\"svg:a\", \":first-child\").attr(\"class\", \"kanban-ticket-link\").attr(\"xlink:href\", ticketUrl).attr(\"target\", \"_blank\");\n }\n const options = {\n useHtmlLabels: kanbanNode.useHtmlLabels,\n labelStyle: kanbanNode.labelStyle || \"\",\n width: kanbanNode.width,\n img: kanbanNode.img,\n padding: kanbanNode.padding || 8,\n centerLabel: false\n };\n let labelEl, bbox2;\n if (link) {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n link,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n } else {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n shapeSvg,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n }\n const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel(\n shapeSvg,\n \"assigned\" in kanbanNode && kanbanNode.assigned || \"\",\n options\n );\n kanbanNode.width = orgWidth;\n const labelPaddingY = 10;\n const totalWidth = kanbanNode?.width || 0;\n const heightAdj = Math.max(bbox2.height, bboxAssigned.height) / 2;\n const totalHeight = Math.max(bbox.height + labelPaddingY * 2, kanbanNode?.height || 0) + heightAdj;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n labelElTitle.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj - bbox.height / 2) + \")\"\n );\n labelEl.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n labelElAssigned.attr(\n \"transform\",\n \"translate(\" + (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n let rect2;\n const { rx, ry } = kanbanNode;\n const { cssStyles } = kanbanNode;\n if (kanbanNode.look === \"handDrawn\") {\n const rc = rough57.svg(shapeSvg);\n const options2 = userNodeOverrides(kanbanNode, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", cssStyles ? cssStyles : null);\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container __APA__\").attr(\"style\", nodeStyles).attr(\"rx\", rx ?? 5).attr(\"ry\", ry ?? 5).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n const priority = \"priority\" in kanbanNode && kanbanNode.priority;\n if (priority) {\n const line = shapeSvg.append(\"line\");\n const lineX = x + 2;\n const y1 = y + Math.floor((rx ?? 0) / 2);\n const y2 = y + totalHeight - Math.floor((rx ?? 0) / 2);\n line.attr(\"x1\", lineX).attr(\"y1\", y1).attr(\"x2\", lineX).attr(\"y2\", y2).attr(\"stroke-width\", \"4\").attr(\"stroke\", colorFromPriority(priority));\n }\n }\n updateNodeBounds(kanbanNode, rect2);\n kanbanNode.height = totalHeight;\n kanbanNode.intersect = function(point) {\n return intersect_default.rect(kanbanNode, point);\n };\n return shapeSvg;\n}\n__name(kanbanItem, \"kanbanItem\");\n\n// src/rendering-util/rendering-elements/shapes/bang.ts\nimport rough58 from \"roughjs\";\nasync function bang(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 10 * halfPadding;\n const h = bbox.height + 8 * halfPadding;\n const r = 0.15 * w;\n const { cssStyles } = node;\n const minWidth = bbox.width + 20;\n const minHeight = bbox.height + 20;\n const effectiveWidth = Math.max(w, minWidth);\n const effectiveHeight = Math.max(h, minHeight);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n let bangElem;\n const path = `M0 0 \n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${-1 * effectiveHeight * 0.1}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${effectiveHeight * 0.1}\n\n a${r},${r} 1 0,0 ${effectiveWidth * 0.15},${effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.15},${effectiveHeight * 0.33}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${effectiveHeight * 0.15}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${-1 * effectiveHeight * 0.15}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${-1 * effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough58.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n bangElem = shapeSvg.insert(() => roughNode, \":first-child\");\n bangElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n bangElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n bangElem.attr(\"transform\", `translate(${-effectiveWidth / 2}, ${-effectiveHeight / 2})`);\n updateNodeBounds(node, bangElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Bang intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(bang, \"bang\");\n\n// src/rendering-util/rendering-elements/shapes/cloud.ts\nimport rough59 from \"roughjs\";\nasync function cloud(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 2 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const r1 = 0.15 * w;\n const r2 = 0.25 * w;\n const r3 = 0.35 * w;\n const r4 = 0.2 * w;\n const { cssStyles } = node;\n let cloudElem;\n const path = `M0 0 \n a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1}\n a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1}\n a${r2},${r2} 1 0,1 ${w * 0.35},${w * 0.2}\n\n a${r1},${r1} 1 0,1 ${w * 0.15},${h * 0.35}\n a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${h * 0.65}\n\n a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15}\n a${r3},${r3} 1 0,1 ${-1 * w * 0.5},0\n a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15}\n\n a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35}\n a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough59.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n cloudElem = shapeSvg.insert(() => roughNode, \":first-child\");\n cloudElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n cloudElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n cloudElem.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, cloudElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Cloud intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(cloud, \"cloud\");\n\n// src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts\nasync function defaultMindmapNode(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 8 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const rd = 5;\n const rectPath = `\n M${-w / 2} ${h / 2 - rd}\n v${-h + 2 * rd}\n q0,-${rd} ${rd},-${rd}\n h${w - 2 * rd}\n q${rd},0 ${rd},${rd}\n v${h - 2 * rd}\n q0,${rd} -${rd},${rd}\n h${-w + 2 * rd}\n q-${rd},0 -${rd},-${rd}\n Z\n `;\n const bg = shapeSvg.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + node.type).attr(\"style\", nodeStyles).attr(\"d\", rectPath);\n shapeSvg.append(\"line\").attr(\"class\", \"node-line-\").attr(\"x1\", -w / 2).attr(\"y1\", h / 2).attr(\"x2\", w / 2).attr(\"y2\", h / 2);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n shapeSvg.append(() => label.node());\n updateNodeBounds(node, bg);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(defaultMindmapNode, \"defaultMindmapNode\");\n\n// src/rendering-util/rendering-elements/shapes/mindmapCircle.ts\nasync function mindmapCircle(parent, node) {\n const options = {\n padding: node.padding ?? 0\n };\n return circle(parent, node, options);\n}\n__name(mindmapCircle, \"mindmapCircle\");\n\n// src/rendering-util/rendering-elements/shapes.ts\nvar shapesDefs = [\n {\n semanticName: \"Process\",\n name: \"Rectangle\",\n shortName: \"rect\",\n description: \"Standard process shape\",\n aliases: [\"proc\", \"process\", \"rectangle\"],\n internalAliases: [\"squareRect\"],\n handler: squareRect2\n },\n {\n semanticName: \"Event\",\n name: \"Rounded Rectangle\",\n shortName: \"rounded\",\n description: \"Represents an event\",\n aliases: [\"event\"],\n internalAliases: [\"roundedRect\"],\n handler: roundedRect\n },\n {\n semanticName: \"Terminal Point\",\n name: \"Stadium\",\n shortName: \"stadium\",\n description: \"Terminal point\",\n aliases: [\"terminal\", \"pill\"],\n handler: stadium\n },\n {\n semanticName: \"Subprocess\",\n name: \"Framed Rectangle\",\n shortName: \"fr-rect\",\n description: \"Subprocess\",\n aliases: [\"subprocess\", \"subproc\", \"framed-rectangle\", \"subroutine\"],\n handler: subroutine\n },\n {\n semanticName: \"Database\",\n name: \"Cylinder\",\n shortName: \"cyl\",\n description: \"Database storage\",\n aliases: [\"db\", \"database\", \"cylinder\"],\n handler: cylinder\n },\n {\n semanticName: \"Start\",\n name: \"Circle\",\n shortName: \"circle\",\n description: \"Starting point\",\n aliases: [\"circ\"],\n handler: circle\n },\n {\n semanticName: \"Bang\",\n name: \"Bang\",\n shortName: \"bang\",\n description: \"Bang\",\n aliases: [\"bang\"],\n handler: bang\n },\n {\n semanticName: \"Cloud\",\n name: \"Cloud\",\n shortName: \"cloud\",\n description: \"cloud\",\n aliases: [\"cloud\"],\n handler: cloud\n },\n {\n semanticName: \"Decision\",\n name: \"Diamond\",\n shortName: \"diam\",\n description: \"Decision-making step\",\n aliases: [\"decision\", \"diamond\", \"question\"],\n handler: question\n },\n {\n semanticName: \"Prepare Conditional\",\n name: \"Hexagon\",\n shortName: \"hex\",\n description: \"Preparation or condition step\",\n aliases: [\"hexagon\", \"prepare\"],\n handler: hexagon\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Right\",\n shortName: \"lean-r\",\n description: \"Represents input or output\",\n aliases: [\"lean-right\", \"in-out\"],\n internalAliases: [\"lean_right\"],\n handler: lean_right\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Left\",\n shortName: \"lean-l\",\n description: \"Represents output or input\",\n aliases: [\"lean-left\", \"out-in\"],\n internalAliases: [\"lean_left\"],\n handler: lean_left\n },\n {\n semanticName: \"Priority Action\",\n name: \"Trapezoid Base Bottom\",\n shortName: \"trap-b\",\n description: \"Priority action\",\n aliases: [\"priority\", \"trapezoid-bottom\", \"trapezoid\"],\n handler: trapezoid\n },\n {\n semanticName: \"Manual Operation\",\n name: \"Trapezoid Base Top\",\n shortName: \"trap-t\",\n description: \"Represents a manual task\",\n aliases: [\"manual\", \"trapezoid-top\", \"inv-trapezoid\"],\n internalAliases: [\"inv_trapezoid\"],\n handler: inv_trapezoid\n },\n {\n semanticName: \"Stop\",\n name: \"Double Circle\",\n shortName: \"dbl-circ\",\n description: \"Represents a stop point\",\n aliases: [\"double-circle\"],\n internalAliases: [\"doublecircle\"],\n handler: doublecircle\n },\n {\n semanticName: \"Text Block\",\n name: \"Text Block\",\n shortName: \"text\",\n description: \"Text block\",\n handler: text\n },\n {\n semanticName: \"Card\",\n name: \"Notched Rectangle\",\n shortName: \"notch-rect\",\n description: \"Represents a card\",\n aliases: [\"card\", \"notched-rectangle\"],\n handler: card\n },\n {\n semanticName: \"Lined/Shaded Process\",\n name: \"Lined Rectangle\",\n shortName: \"lin-rect\",\n description: \"Lined process shape\",\n aliases: [\"lined-rectangle\", \"lined-process\", \"lin-proc\", \"shaded-process\"],\n handler: shadedProcess\n },\n {\n semanticName: \"Start\",\n name: \"Small Circle\",\n shortName: \"sm-circ\",\n description: \"Small starting point\",\n aliases: [\"start\", \"small-circle\"],\n internalAliases: [\"stateStart\"],\n handler: stateStart\n },\n {\n semanticName: \"Stop\",\n name: \"Framed Circle\",\n shortName: \"fr-circ\",\n description: \"Stop point\",\n aliases: [\"stop\", \"framed-circle\"],\n internalAliases: [\"stateEnd\"],\n handler: stateEnd\n },\n {\n semanticName: \"Fork/Join\",\n name: \"Filled Rectangle\",\n shortName: \"fork\",\n description: \"Fork or join in process flow\",\n aliases: [\"join\"],\n internalAliases: [\"forkJoin\"],\n handler: forkJoin\n },\n {\n semanticName: \"Collate\",\n name: \"Hourglass\",\n shortName: \"hourglass\",\n description: \"Represents a collate operation\",\n aliases: [\"hourglass\", \"collate\"],\n handler: hourglass\n },\n {\n semanticName: \"Comment\",\n name: \"Curly Brace\",\n shortName: \"brace\",\n description: \"Adds a comment\",\n aliases: [\"comment\", \"brace-l\"],\n handler: curlyBraceLeft\n },\n {\n semanticName: \"Comment Right\",\n name: \"Curly Brace\",\n shortName: \"brace-r\",\n description: \"Adds a comment\",\n handler: curlyBraceRight\n },\n {\n semanticName: \"Comment with braces on both sides\",\n name: \"Curly Braces\",\n shortName: \"braces\",\n description: \"Adds a comment\",\n handler: curlyBraces\n },\n {\n semanticName: \"Com Link\",\n name: \"Lightning Bolt\",\n shortName: \"bolt\",\n description: \"Communication link\",\n aliases: [\"com-link\", \"lightning-bolt\"],\n handler: lightningBolt\n },\n {\n semanticName: \"Document\",\n name: \"Document\",\n shortName: \"doc\",\n description: \"Represents a document\",\n aliases: [\"doc\", \"document\"],\n handler: waveEdgedRectangle\n },\n {\n semanticName: \"Delay\",\n name: \"Half-Rounded Rectangle\",\n shortName: \"delay\",\n description: \"Represents a delay\",\n aliases: [\"half-rounded-rectangle\"],\n handler: halfRoundedRectangle\n },\n {\n semanticName: \"Direct Access Storage\",\n name: \"Horizontal Cylinder\",\n shortName: \"h-cyl\",\n description: \"Direct access storage\",\n aliases: [\"das\", \"horizontal-cylinder\"],\n handler: tiltedCylinder\n },\n {\n semanticName: \"Disk Storage\",\n name: \"Lined Cylinder\",\n shortName: \"lin-cyl\",\n description: \"Disk storage\",\n aliases: [\"disk\", \"lined-cylinder\"],\n handler: linedCylinder\n },\n {\n semanticName: \"Display\",\n name: \"Curved Trapezoid\",\n shortName: \"curv-trap\",\n description: \"Represents a display\",\n aliases: [\"curved-trapezoid\", \"display\"],\n handler: curvedTrapezoid\n },\n {\n semanticName: \"Divided Process\",\n name: \"Divided Rectangle\",\n shortName: \"div-rect\",\n description: \"Divided process shape\",\n aliases: [\"div-proc\", \"divided-rectangle\", \"divided-process\"],\n handler: dividedRectangle\n },\n {\n semanticName: \"Extract\",\n name: \"Triangle\",\n shortName: \"tri\",\n description: \"Extraction process\",\n aliases: [\"extract\", \"triangle\"],\n handler: triangle\n },\n {\n semanticName: \"Internal Storage\",\n name: \"Window Pane\",\n shortName: \"win-pane\",\n description: \"Internal storage\",\n aliases: [\"internal-storage\", \"window-pane\"],\n handler: windowPane\n },\n {\n semanticName: \"Junction\",\n name: \"Filled Circle\",\n shortName: \"f-circ\",\n description: \"Junction point\",\n aliases: [\"junction\", \"filled-circle\"],\n handler: filledCircle\n },\n {\n semanticName: \"Loop Limit\",\n name: \"Trapezoidal Pentagon\",\n shortName: \"notch-pent\",\n description: \"Loop limit step\",\n aliases: [\"loop-limit\", \"notched-pentagon\"],\n handler: trapezoidalPentagon\n },\n {\n semanticName: \"Manual File\",\n name: \"Flipped Triangle\",\n shortName: \"flip-tri\",\n description: \"Manual file operation\",\n aliases: [\"manual-file\", \"flipped-triangle\"],\n handler: flippedTriangle\n },\n {\n semanticName: \"Manual Input\",\n name: \"Sloped Rectangle\",\n shortName: \"sl-rect\",\n description: \"Manual input step\",\n aliases: [\"manual-input\", \"sloped-rectangle\"],\n handler: slopedRect\n },\n {\n semanticName: \"Multi-Document\",\n name: \"Stacked Document\",\n shortName: \"docs\",\n description: \"Multiple documents\",\n aliases: [\"documents\", \"st-doc\", \"stacked-document\"],\n handler: multiWaveEdgedRectangle\n },\n {\n semanticName: \"Multi-Process\",\n name: \"Stacked Rectangle\",\n shortName: \"st-rect\",\n description: \"Multiple processes\",\n aliases: [\"procs\", \"processes\", \"stacked-rectangle\"],\n handler: multiRect\n },\n {\n semanticName: \"Stored Data\",\n name: \"Bow Tie Rectangle\",\n shortName: \"bow-rect\",\n description: \"Stored data\",\n aliases: [\"stored-data\", \"bow-tie-rectangle\"],\n handler: bowTieRect\n },\n {\n semanticName: \"Summary\",\n name: \"Crossed Circle\",\n shortName: \"cross-circ\",\n description: \"Summary\",\n aliases: [\"summary\", \"crossed-circle\"],\n handler: crossedCircle\n },\n {\n semanticName: \"Tagged Document\",\n name: \"Tagged Document\",\n shortName: \"tag-doc\",\n description: \"Tagged document\",\n aliases: [\"tag-doc\", \"tagged-document\"],\n handler: taggedWaveEdgedRectangle\n },\n {\n semanticName: \"Tagged Process\",\n name: \"Tagged Rectangle\",\n shortName: \"tag-rect\",\n description: \"Tagged process\",\n aliases: [\"tagged-rectangle\", \"tag-proc\", \"tagged-process\"],\n handler: taggedRect\n },\n {\n semanticName: \"Paper Tape\",\n name: \"Flag\",\n shortName: \"flag\",\n description: \"Paper tape\",\n aliases: [\"paper-tape\"],\n handler: waveRectangle\n },\n {\n semanticName: \"Odd\",\n name: \"Odd\",\n shortName: \"odd\",\n description: \"Odd shape\",\n internalAliases: [\"rect_left_inv_arrow\"],\n handler: rect_left_inv_arrow\n },\n {\n semanticName: \"Lined Document\",\n name: \"Lined Document\",\n shortName: \"lin-doc\",\n description: \"Lined document\",\n aliases: [\"lined-document\"],\n handler: linedWaveEdgedRect\n }\n];\nvar generateShapeMap = /* @__PURE__ */ __name(() => {\n const undocumentedShapes = {\n // States\n state,\n choice,\n note,\n // Rectangles\n rectWithTitle,\n labelRect,\n // Icons\n iconSquare,\n iconCircle,\n icon,\n iconRounded,\n imageSquare,\n anchor,\n // Kanban diagram\n kanbanItem,\n //Mindmap diagram\n mindmapCircle,\n defaultMindmapNode,\n // class diagram\n classBox,\n // er diagram\n erBox,\n // Requirement diagram\n requirementBox\n };\n const entries = [\n ...Object.entries(undocumentedShapes),\n ...shapesDefs.flatMap((shape) => {\n const aliases = [\n shape.shortName,\n ...\"aliases\" in shape ? shape.aliases : [],\n ...\"internalAliases\" in shape ? shape.internalAliases : []\n ];\n return aliases.map((alias) => [alias, shape.handler]);\n })\n ];\n return Object.fromEntries(entries);\n}, \"generateShapeMap\");\nvar shapes2 = generateShapeMap();\nfunction isValidShape(shape) {\n return shape in shapes2;\n}\n__name(isValidShape, \"isValidShape\");\n\n// src/rendering-util/rendering-elements/nodes.ts\nvar nodeElems = /* @__PURE__ */ new Map();\nasync function insertNode(elem, node, renderOptions) {\n let newEl;\n let el;\n if (node.shape === \"rect\") {\n if (node.rx && node.ry) {\n node.shape = \"roundedRect\";\n } else {\n node.shape = \"squareRect\";\n }\n }\n const shapeHandler = node.shape ? shapes2[node.shape] : void 0;\n if (!shapeHandler) {\n throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n }\n if (node.link) {\n let target;\n if (renderOptions.config.securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target ?? null);\n el = await shapeHandler(newEl, node, renderOptions);\n } else {\n el = await shapeHandler(elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n nodeElems.set(node.id, newEl);\n if (node.haveCallback) {\n newEl.attr(\"class\", newEl.attr(\"class\") + \" clickable\");\n }\n return newEl;\n}\n__name(insertNode, \"insertNode\");\nvar setNodeElem = /* @__PURE__ */ __name((elem, node) => {\n nodeElems.set(node.id, elem);\n}, \"setNodeElem\");\nvar clear2 = /* @__PURE__ */ __name(() => {\n nodeElems.clear();\n}, \"clear\");\nvar positionNode = /* @__PURE__ */ __name((node) => {\n const el = nodeElems.get(node.id);\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n}, \"positionNode\");\n\nexport {\n labelHelper,\n updateNodeBounds,\n createLabel_default,\n isValidShape,\n insertCluster,\n clear,\n insertNode,\n setNodeElem,\n clear2,\n positionNode\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chunk-KYZI473N-BwYBBC73.js","names":["select","select2","rough","rough2","rough3","rough4","rough5","rough6","rough7","rough8","rough9","rough10","rough11","rough12","rough13","rough14","rough15","rough16","rough17","rough18","rough19","rough20","rough21","rough22","rough23","rough24","rough25","rough26","rough27","rough28","rough29","rough30","rough31","rough32","rough33","rough34","rough35","rough36","rough37","select3","rough38","rough39","rough40","rough41","rough42","rough43","rough44","rough45","rough46","rough47","rough48","rough49","rough50","rough51","rough52","rough53","rough54","select4","sanitizeText2","select5","rough55","select6","rough56","select7","rough57","rough58","rough59"],"sources":["../../../../node_modules/mermaid/dist/chunks/mermaid.core/chunk-KYZI473N.mjs"],"sourcesContent":["import {\n configureLabelImages,\n getSubGraphTitleMargins\n} from \"./chunk-YBOYWFTD.mjs\";\nimport {\n compileStyles,\n solidStateFill,\n styles2String,\n userNodeOverrides\n} from \"./chunk-PQ6SQG4A.mjs\";\nimport {\n createText,\n getIconSVG\n} from \"./chunk-PU5JKC2W.mjs\";\nimport {\n calculateTextWidth,\n decodeEntities,\n handleUndefinedAttr\n} from \"./chunk-GEFDOKGD.mjs\";\nimport {\n evaluate,\n getConfig,\n getConfig2,\n getEffectiveHtmlLabels,\n hasKatex,\n parseGenericTypes,\n sanitizeText,\n sanitizeText2\n} from \"./chunk-7R4GIKGN.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/rendering-elements/shapes/util.ts\nimport { select } from \"d3\";\nvar labelHelper = /* @__PURE__ */ __name(async (parent, node, _classes) => {\n let cssClasses;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig2()?.htmlLabels);\n if (!_classes) {\n cssClasses = \"node default\";\n } else {\n cssClasses = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", handleUndefinedAttr(node.labelStyle));\n let label;\n if (node.label === void 0) {\n label = \"\";\n } else {\n label = typeof node.label === \"string\" ? node.label : node.label[0];\n }\n const addBackground = !!node.icon || !!node.img;\n const isMarkdown = node.labelType === \"markdown\";\n const text2 = await createText(\n labelEl,\n sanitizeText(decodeEntities(label), getConfig2()),\n {\n useHtmlLabels,\n width: node.width || getConfig2().flowchart?.wrappingWidth,\n // @ts-expect-error -- This is currently not used. Should this be `classes` instead?\n cssClasses: isMarkdown ? \"markdown-node-label\" : void 0,\n style: node.labelStyle,\n addSvgBackground: addBackground,\n markdown: isMarkdown\n },\n getConfig2()\n );\n let bbox = text2.getBBox();\n const halfPadding = (node?.padding ?? 0) / 2;\n if (useHtmlLabels) {\n const div = text2.children[0];\n const dv = select(text2);\n await configureLabelImages(div, label);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label: labelEl };\n}, \"labelHelper\");\nvar insertLabel = /* @__PURE__ */ __name(async (parent, label, options) => {\n const useHtmlLabels = options.useHtmlLabels ?? getEffectiveHtmlLabels(getConfig2());\n const labelEl = parent.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", options.labelStyle || \"\");\n const text2 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), {\n useHtmlLabels,\n width: options.width || getConfig2()?.flowchart?.wrappingWidth,\n style: options.labelStyle,\n addSvgBackground: !!options.icon || !!options.img\n });\n let bbox = text2.getBBox();\n const halfPadding = options.padding / 2;\n if (getEffectiveHtmlLabels(getConfig2())) {\n const div = text2.children[0];\n const dv = select(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n labelEl.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (options.centerLabel) {\n labelEl.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n labelEl.insert(\"rect\", \":first-child\");\n return { shapeSvg: parent, bbox, halfPadding, label: labelEl };\n}, \"insertLabel\");\nvar updateNodeBounds = /* @__PURE__ */ __name((node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n}, \"updateNodeBounds\");\nvar getNodeClasses = /* @__PURE__ */ __name((node, extra) => (node.look === \"handDrawn\" ? \"rough-node\" : \"node\") + \" \" + node.cssClasses + \" \" + (extra || \"\"), \"getNodeClasses\");\nfunction createPathFromPoints(points) {\n const pointStrings = points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${p.x},${p.y}`);\n pointStrings.push(\"Z\");\n return pointStrings.join(\" \");\n}\n__name(createPathFromPoints, \"createPathFromPoints\");\nfunction generateFullSineWavePoints(x1, y1, x2, y2, amplitude, numCycles) {\n const points = [];\n const steps = 50;\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n const cycleLength = deltaX / numCycles;\n const frequency = 2 * Math.PI / cycleLength;\n const midY = y1 + deltaY / 2;\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const x = x1 + t * deltaX;\n const y = midY + amplitude * Math.sin(frequency * (x - x1));\n points.push({ x, y });\n }\n return points;\n}\n__name(generateFullSineWavePoints, \"generateFullSineWavePoints\");\nfunction generateCirclePoints(centerX, centerY, radius, numPoints, startAngle, endAngle) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints, \"generateCirclePoints\");\n\n// src/rendering-util/rendering-elements/clusters.js\nimport { select as select2 } from \"d3\";\nimport rough from \"roughjs\";\n\n// src/rendering-util/rendering-elements/intersect/intersect-rect.js\nvar intersectRect = /* @__PURE__ */ __name((node, point) => {\n var x = node.x;\n var y = node.y;\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n}, \"intersectRect\");\nvar intersect_rect_default = intersectRect;\n\n// src/rendering-util/rendering-elements/createLabel.js\nvar createLabel = /* @__PURE__ */ __name(async (element, _vertexText, style, isTitle = false, isNode = false) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n const config = getConfig2();\n const useHtmlLabels = getEffectiveHtmlLabels(config);\n return await createText(\n element,\n vertexText,\n {\n style,\n isTitle,\n useHtmlLabels,\n markdown: false,\n isNode,\n width: Number.POSITIVE_INFINITY\n },\n config\n );\n}, \"createLabel\");\nvar createLabel_default = createLabel;\n\n// src/rendering-util/rendering-elements/shapes/roundedRectPath.ts\nvar createRoundedRectPathD = /* @__PURE__ */ __name((x, y, totalWidth, totalHeight, radius) => [\n \"M\",\n x + radius,\n y,\n // Move to the first point\n \"H\",\n x + totalWidth - radius,\n // Draw horizontal line to the beginning of the right corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius,\n // Draw arc to the right top corner\n \"V\",\n y + totalHeight - radius,\n // Draw vertical line down to the beginning of the right bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight,\n // Draw arc to the right bottom corner\n \"H\",\n x + radius,\n // Draw horizontal line to the beginning of the left bottom corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + totalHeight - radius,\n // Draw arc to the left bottom corner\n \"V\",\n y + radius,\n // Draw vertical line up to the beginning of the left top corner\n \"A\",\n radius,\n radius,\n 0,\n 0,\n 1,\n x + radius,\n y,\n // Draw arc to the left top corner\n \"Z\"\n // Close the path\n].join(\" \"), \"createRoundedRectPathD\");\n\n// src/rendering-util/rendering-elements/clusters.js\nvar rect = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = getEffectiveHtmlLabels(siteConfig);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n let text2;\n if (node.labelType === \"markdown\") {\n text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width\n });\n } else {\n text2 = await createLabel_default(labelEl, node.label, node.labelStyle || \"\", false, true);\n }\n let bbox = text2.getBBox();\n if (getEffectiveHtmlLabels(siteConfig)) {\n const div = text2.children[0];\n const dv = select2(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 3,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, 0), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"rect\");\nvar noteGroup = /* @__PURE__ */ __name((parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };\n}, \"noteGroup\");\nvar roundedWithTitle = /* @__PURE__ */ __name(async (parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n let innerRect = shapeSvg.append(\"rect\");\n const text2 = await createLabel_default(label, node.label, node.labelStyle, void 0, true);\n let bbox = text2.getBBox();\n if (getEffectiveHtmlLabels(siteConfig)) {\n const div = text2.children[0];\n const dv = select2(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = (node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width) + padding;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height + padding;\n const innerHeight = node.height + padding - bbox.height - 6;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n const innerY = node.y - node.height / 2 - halfPadding + bbox.height + 2;\n let rect2;\n if (node.look === \"handDrawn\") {\n const isAlt = node.cssClasses.includes(\"statediagram-cluster-alt\");\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = node.rx || node.ry ? rc.path(createRoundedRectPathD(x, y, width, height, 10), {\n roughness: 0.7,\n fill: compositeTitleBackground,\n fillStyle: \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n }) : rc.rectangle(x, y, width, height, { seed: handDrawnSeed });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n const roughInnerNode = rc.rectangle(x, innerY, width, innerHeight, {\n fill: isAlt ? altBackground : compositeBackground,\n fillStyle: isAlt ? \"hachure\" : \"solid\",\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n innerRect = shapeSvg.insert(() => roughInnerNode);\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"outer\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", x).attr(\"y\", innerY).attr(\"width\", width).attr(\"height\", innerHeight);\n }\n label.attr(\n \"transform\",\n `translate(${node.x - bbox.width / 2}, ${y + 1 - (getEffectiveHtmlLabels(siteConfig) ? 0 : 3)})`\n );\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = bbox.height - node.padding / 2;\n node.labelBBox = bbox;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"roundedWithTitle\");\nvar kanbanSection = /* @__PURE__ */ __name(async (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster \" + node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const useHtmlLabels = getEffectiveHtmlLabels(siteConfig);\n const labelEl = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label \");\n const text2 = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width\n });\n let bbox = text2.getBBox();\n if (getEffectiveHtmlLabels(siteConfig)) {\n const div = text2.children[0];\n const dv = select2(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n log.trace(\"Data \", node, JSON.stringify(node));\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 4,\n seed: handDrawnSeed\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, node.rx), options);\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n rect2.select(\"path:nth-child(2)\").attr(\"style\", borderStyles.join(\";\"));\n rect2.select(\"path\").attr(\"style\", backgroundStyles.join(\";\").replace(\"fill\", \"stroke\"));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"style\", nodeStyles).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n if (labelStyles) {\n const span = labelEl.select(\"span\");\n if (span) {\n span.attr(\"style\", labelStyles);\n }\n }\n const rectBox = rect2.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.offsetY = bbox.height - node.padding / 2;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: bbox };\n}, \"kanbanSection\");\nvar divider = /* @__PURE__ */ __name((parent, node) => {\n const siteConfig = getConfig2();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.cssClasses).attr(\"id\", node.id).attr(\"data-look\", node.look);\n const outerRectG = shapeSvg.insert(\"g\", \":first-child\");\n const padding = 0 * node.padding;\n const width = node.width + padding;\n node.diff = -node.padding;\n const height = node.height + padding;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n let rect2;\n if (node.look === \"handDrawn\") {\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = rc.rectangle(x, y, width, height, {\n fill: \"lightgrey\",\n roughness: 0.5,\n strokeLineDash: [5],\n stroke: nodeBorder,\n seed: handDrawnSeed\n });\n rect2 = shapeSvg.insert(() => roughOuterNode, \":first-child\");\n } else {\n rect2 = outerRectG.insert(\"rect\", \":first-child\");\n const outerRectClass = \"divider\";\n rect2.attr(\"class\", outerRectClass).attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height).attr(\"data-look\", node.look);\n }\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n node.offsetY = 0;\n node.intersect = function(point) {\n return intersect_rect_default(node, point);\n };\n return { cluster: shapeSvg, labelBBox: {} };\n}, \"divider\");\nvar squareRect = rect;\nvar shapes = {\n rect,\n squareRect,\n roundedWithTitle,\n noteGroup,\n divider,\n kanbanSection\n};\nvar clusterElems = /* @__PURE__ */ new Map();\nvar insertCluster = /* @__PURE__ */ __name(async (elem, node) => {\n const shape = node.shape || \"rect\";\n const cluster = await shapes[shape](elem, node);\n clusterElems.set(node.id, cluster);\n return cluster;\n}, \"insertCluster\");\nvar clear = /* @__PURE__ */ __name(() => {\n clusterElems = /* @__PURE__ */ new Map();\n}, \"clear\");\n\n// src/rendering-util/rendering-elements/intersect/intersect-node.js\nfunction intersectNode(node, point) {\n return node.intersect(point);\n}\n__name(intersectNode, \"intersectNode\");\nvar intersect_node_default = intersectNode;\n\n// src/rendering-util/rendering-elements/intersect/intersect-ellipse.js\nfunction intersectEllipse(node, rx, ry, point) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point.x;\n var py = cy - point.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\n__name(intersectEllipse, \"intersectEllipse\");\nvar intersect_ellipse_default = intersectEllipse;\n\n// src/rendering-util/rendering-elements/intersect/intersect-circle.js\nfunction intersectCircle(node, rx, point) {\n return intersect_ellipse_default(node, rx, rx, point);\n}\n__name(intersectCircle, \"intersectCircle\");\nvar intersect_circle_default = intersectCircle;\n\n// src/rendering-util/rendering-elements/intersect/intersect-line.js\nfunction intersectLine(p1, p2, q1, q2) {\n {\n const a1 = p2.y - p1.y;\n const b1 = p1.x - p2.x;\n const c1 = p2.x * p1.y - p1.x * p2.y;\n const r3 = a1 * q1.x + b1 * q1.y + c1;\n const r4 = a1 * q2.x + b1 * q2.y + c1;\n const epsilon = 1e-6;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n const a2 = q2.y - q1.y;\n const b2 = q1.x - q2.x;\n const c2 = q2.x * q1.y - q1.x * q2.y;\n const r1 = a2 * p1.x + b2 * p1.y + c2;\n const r2 = a2 * p2.x + b2 * p2.y + c2;\n if (Math.abs(r1) < epsilon && Math.abs(r2) < epsilon && sameSign(r1, r2)) {\n return;\n }\n const denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n const offset = Math.abs(denom / 2);\n let num = b1 * c2 - b2 * c1;\n const x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n const y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n }\n}\n__name(intersectLine, \"intersectLine\");\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n__name(sameSign, \"sameSign\");\nvar intersect_line_default = intersectLine;\n\n// src/rendering-util/rendering-elements/intersect/intersect-polygon.js\nfunction intersectPolygon(node, polyPoints, point) {\n let x1 = node.x;\n let y1 = node.y;\n let intersections = [];\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n let left = x1 - node.width / 2 - minX;\n let top = y1 - node.height / 2 - minY;\n for (let i = 0; i < polyPoints.length; i++) {\n let p1 = polyPoints[i];\n let p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n let intersect = intersect_line_default(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n let pdx = p.x - point.x;\n let pdy = p.y - point.y;\n let distp = Math.sqrt(pdx * pdx + pdy * pdy);\n let qdx = q.x - point.x;\n let qdy = q.y - point.y;\n let distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n__name(intersectPolygon, \"intersectPolygon\");\nvar intersect_polygon_default = intersectPolygon;\n\n// src/rendering-util/rendering-elements/intersect/index.js\nvar intersect_default = {\n node: intersect_node_default,\n circle: intersect_circle_default,\n ellipse: intersect_ellipse_default,\n polygon: intersect_polygon_default,\n rect: intersect_rect_default\n};\n\n// src/rendering-util/rendering-elements/shapes/anchor.ts\nimport rough2 from \"roughjs\";\nfunction anchor(parent, node) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const classes = getNodeClasses(node);\n let cssClasses = classes;\n if (!classes) {\n cssClasses = \"anchor\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const radius = 1;\n const { cssStyles } = node;\n const rc = rough2.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"black\", stroke: \"none\", fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const roughNode = rc.circle(0, 0, radius * 2, options);\n const circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"anchor\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, circleElem);\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(anchor, \"anchor\");\n\n// src/rendering-util/rendering-elements/shapes/bowTieRect.ts\nimport rough3 from \"roughjs\";\nfunction generateArcPoints(x1, y1, x2, y2, rx, ry, clockwise) {\n const numPoints = 20;\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n if (distance > 1) {\n throw new Error(\"The given radii are too small to create an arc between the points.\");\n }\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle2 = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle2);\n const y = centerY + ry * Math.sin(angle2);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateArcPoints, \"generateArcPoints\");\nasync function bowTieRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding + 20;\n const h = bbox.height + node.padding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const { cssStyles } = node;\n const points = [\n { x: w / 2, y: -h / 2 },\n { x: -w / 2, y: -h / 2 },\n ...generateArcPoints(-w / 2, -h / 2, -w / 2, h / 2, rx, ry, false),\n { x: w / 2, y: h / 2 },\n ...generateArcPoints(w / 2, h / 2, w / 2, -h / 2, rx, ry, true)\n ];\n const rc = rough3.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const bowTieRectPath = createPathFromPoints(points);\n const bowTieRectShapePath = rc.path(bowTieRectPath, options);\n const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, \":first-child\");\n bowTieRectShape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n bowTieRectShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n bowTieRectShape.attr(\"transform\", `translate(${rx / 2}, 0)`);\n updateNodeBounds(node, bowTieRectShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(bowTieRect, \"bowTieRect\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nimport rough4 from \"roughjs\";\n\n// src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\n__name(insertPolygonShape, \"insertPolygonShape\");\n\n// src/rendering-util/rendering-elements/shapes/card.ts\nasync function card(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const padding = 12;\n const w = bbox.width + node.padding + padding;\n const left = 0;\n const right = w;\n const top = -h;\n const bottom = 0;\n const points = [\n { x: left + padding, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n { x: left, y: top + padding },\n { x: left + padding, y: top }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough4.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(card, \"card\");\n\n// src/rendering-util/rendering-elements/shapes/choice.ts\nimport rough5 from \"roughjs\";\nfunction choice(parent, node) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const s = Math.max(28, node.width ?? 0);\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const rc = rough5.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const choicePath = createPathFromPoints(points);\n const roughNode = rc.path(choicePath, options);\n const choiceShape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n choiceShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = 28;\n node.height = 28;\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(choice, \"choice\");\n\n// src/rendering-util/rendering-elements/shapes/circle.ts\nimport rough6 from \"roughjs\";\nasync function circle(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const padding = options?.padding ?? halfPadding;\n const radius = bbox.width / 2 + padding;\n let circleElem;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough6.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rc.circle(0, 0, radius * 2, options2);\n circleElem = shapeSvg.insert(() => roughNode, \":first-child\");\n circleElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n circleElem = shapeSvg.insert(\"circle\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"r\", radius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleElem);\n node.calcIntersect = function(bounds, point) {\n const radius2 = bounds.width / 2;\n return intersect_default.circle(bounds, radius2, point);\n };\n node.intersect = function(point) {\n log.info(\"Circle intersect\", node, radius, point);\n return intersect_default.circle(node, radius, point);\n };\n return shapeSvg;\n}\n__name(circle, \"circle\");\n\n// src/rendering-util/rendering-elements/shapes/crossedCircle.ts\nimport rough7 from \"roughjs\";\nfunction createLine(r) {\n const xAxis45 = Math.cos(Math.PI / 4);\n const yAxis45 = Math.sin(Math.PI / 4);\n const lineLength = r * 2;\n const pointQ1 = { x: lineLength / 2 * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: lineLength / 2 * yAxis45 };\n const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 };\n const pointQ4 = { x: lineLength / 2 * xAxis45, y: -(lineLength / 2) * yAxis45 };\n return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y}\n M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`;\n}\n__name(createLine, \"createLine\");\nfunction crossedCircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = Math.max(30, node?.width ?? 0);\n const { cssStyles } = node;\n const rc = rough7.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const linePath = createLine(radius);\n const lineNode = rc.path(linePath, options);\n const crossedCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n crossedCircle2.insert(() => lineNode);\n if (cssStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n crossedCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, crossedCircle2);\n node.intersect = function(point) {\n log.info(\"crossedCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(crossedCircle, \"crossedCircle\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts\nimport rough8 from \"roughjs\";\nfunction generateCirclePoints2(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints2, \"generateCirclePoints\");\nasync function curlyBraceLeft(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints2(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints2(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints2(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints2(w / 2 + w * 0.1, -radius, radius, 20, -180, -270),\n ...generateCirclePoints2(w / 2 + w * 0.1, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints2(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2, y: h / 2 + radius }\n ];\n const rc = rough8.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceLeftPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceLeftPath.replace(\"Z\", \"\");\n const curlyBraceLeftNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceLeftShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceLeftShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceLeftShape.insert(() => curlyBraceLeftNode, \":first-child\");\n curlyBraceLeftShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceLeftShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceLeftShape.attr(\"transform\", `translate(${radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + radius - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceLeftShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceLeft, \"curlyBraceLeft\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts\nimport rough9 from \"roughjs\";\nfunction generateCirclePoints3(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x, y });\n }\n return points;\n}\n__name(generateCirclePoints3, \"generateCirclePoints\");\nasync function curlyBraceRight(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const points = [\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rectPoints = [\n { x: -w / 2, y: -h / 2 - radius },\n { x: w / 2, y: -h / 2 - radius },\n ...generateCirclePoints3(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints3(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints3(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints3(w / 2, h / 2, radius, 20, 0, 90),\n { x: w / 2, y: h / 2 + radius },\n { x: -w / 2, y: h / 2 + radius }\n ];\n const rc = rough9.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const curlyBraceRightPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceRightPath.replace(\"Z\", \"\");\n const curlyBraceRightNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceRightShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBraceRightShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBraceRightShape.insert(() => curlyBraceRightNode, \":first-child\");\n curlyBraceRightShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBraceRightShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBraceRightShape.attr(\"transform\", `translate(${-radius}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBraceRightShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraceRight, \"curlyBraceRight\");\n\n// src/rendering-util/rendering-elements/shapes/curlyBraces.ts\nimport rough10 from \"roughjs\";\nfunction generateCirclePoints4(centerX, centerY, radius, numPoints = 100, startAngle = 0, endAngle = 180) {\n const points = [];\n const startAngleRad = startAngle * Math.PI / 180;\n const endAngleRad = endAngle * Math.PI / 180;\n const angleRange = endAngleRad - startAngleRad;\n const angleStep = angleRange / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n return points;\n}\n__name(generateCirclePoints4, \"generateCirclePoints\");\nasync function curlyBraces(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n const { cssStyles } = node;\n const leftCurlyBracePoints = [\n ...generateCirclePoints4(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90)\n ];\n const rightCurlyBracePoints = [\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints4(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints4(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints4(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints4(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2 - radius - radius / 2, y: h / 2 + radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints4(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints4(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints4(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270)\n ];\n const rc = rough10.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints);\n const newLeftCurlyBracePath = leftCurlyBracePath.replace(\"Z\", \"\");\n const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options);\n const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints);\n const newRightCurlyBracePath = rightCurlyBracePath.replace(\"Z\", \"\");\n const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBracesShape = shapeSvg.insert(\"g\", \":first-child\");\n curlyBracesShape.insert(() => rectShape, \":first-child\").attr(\"stroke-opacity\", 0);\n curlyBracesShape.insert(() => leftCurlyBraceNode, \":first-child\");\n curlyBracesShape.insert(() => rightCurlyBraceNode, \":first-child\");\n curlyBracesShape.attr(\"class\", \"text\");\n if (cssStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n curlyBracesShape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n curlyBracesShape.attr(\"transform\", `translate(${radius - radius / 4}, 0)`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, curlyBracesShape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curlyBraces, \"curlyBraces\");\n\n// src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts\nimport rough11 from \"roughjs\";\nasync function curvedTrapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 80, minHeight = 20;\n const w = Math.max(minWidth, (bbox.width + (node.padding ?? 0) * 2) * 1.25, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough11.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const totalWidth = w, totalHeight = h;\n const rw = totalWidth - radius;\n const tw = totalHeight / 4;\n const points = [\n { x: rw, y: 0 },\n { x: tw, y: 0 },\n { x: 0, y: totalHeight / 2 },\n { x: tw, y: totalHeight },\n { x: rw, y: totalHeight },\n ...generateCirclePoints(-rw, -totalHeight / 2, radius, 50, 270, 90)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(curvedTrapezoid, \"curvedTrapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/cylinder.ts\nimport rough12 from \"roughjs\";\nvar createCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function cylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + node.padding, node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + node.padding, node.height ?? 0);\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough12.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(cylinder, \"cylinder\");\n\n// src/rendering-util/rendering-elements/shapes/dividedRect.ts\nimport rough13 from \"roughjs\";\nasync function dividedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const rectOffset = h * 0.2;\n const x = -w / 2;\n const y = -h / 2 - rectOffset / 2;\n const { cssStyles } = node;\n const rc = rough13.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pts = [\n { x, y: y + rectOffset },\n { x: -x, y: y + rectOffset },\n { x: -x, y: -y },\n { x, y: -y },\n { x, y },\n { x: -x, y },\n { x: -x, y: y + rectOffset }\n ];\n const poly = rc.polygon(\n pts.map((p) => [p.x, p.y]),\n options\n );\n const polygon = shapeSvg.insert(() => poly, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${x + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y + rectOffset + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(dividedRectangle, \"dividedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/doubleCircle.ts\nimport rough14 from \"roughjs\";\nasync function doublecircle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const gap = 5;\n const outerRadius = bbox.width / 2 + halfPadding + gap;\n const innerRadius = bbox.width / 2 + halfPadding;\n let circleGroup;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough14.svg(shapeSvg);\n const outerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 2.5 });\n const innerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 1.5 });\n const outerRoughNode = rc.circle(0, 0, outerRadius * 2, outerOptions);\n const innerRoughNode = rc.circle(0, 0, innerRadius * 2, innerOptions);\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n circleGroup.attr(\"class\", handleUndefinedAttr(node.cssClasses)).attr(\"style\", handleUndefinedAttr(cssStyles));\n circleGroup.node()?.appendChild(outerRoughNode);\n circleGroup.node()?.appendChild(innerRoughNode);\n } else {\n circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\", \":first-child\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n outerCircle.attr(\"class\", \"outer-circle\").attr(\"style\", nodeStyles).attr(\"r\", outerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n innerCircle.attr(\"class\", \"inner-circle\").attr(\"style\", nodeStyles).attr(\"r\", innerRadius).attr(\"cx\", 0).attr(\"cy\", 0);\n }\n updateNodeBounds(node, circleGroup);\n node.intersect = function(point) {\n log.info(\"DoubleCircle intersect\", node, outerRadius, point);\n return intersect_default.circle(node, outerRadius, point);\n };\n return shapeSvg;\n}\n__name(doublecircle, \"doublecircle\");\n\n// src/rendering-util/rendering-elements/shapes/filledCircle.ts\nimport rough15 from \"roughjs\";\nfunction filledCircle(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const radius = 7;\n const { cssStyles } = node;\n const rc = rough15.svg(shapeSvg);\n const { nodeBorder } = themeVariables;\n const options = userNodeOverrides(node, { fillStyle: \"solid\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n }\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const filledCircle2 = shapeSvg.insert(() => circleNode, \":first-child\");\n filledCircle2.selectAll(\"path\").attr(\"style\", `fill: ${nodeBorder} !important;`);\n if (cssStyles && cssStyles.length > 0 && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n filledCircle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, filledCircle2);\n node.intersect = function(point) {\n log.info(\"filledCircle intersect\", node, { radius, point });\n const pos = intersect_default.circle(node, radius, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(filledCircle, \"filledCircle\");\n\n// src/rendering-util/rendering-elements/shapes/flippedTriangle.ts\nimport rough16 from \"roughjs\";\nasync function flippedTriangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: -h },\n { x: tw, y: -h },\n { x: tw / 2, y: 0 }\n ];\n const { cssStyles } = node;\n const rc = rough16.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const flippedTriangle2 = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n flippedTriangle2.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, flippedTriangle2);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(flippedTriangle, \"flippedTriangle\");\n\n// src/rendering-util/rendering-elements/shapes/forkJoin.ts\nimport rough17 from \"roughjs\";\nfunction forkJoin(parent, node, { dir, config: { state: state2, themeVariables } }) {\n const { nodeStyles } = styles2String(node);\n node.label = \"\";\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n let width = Math.max(70, node?.width ?? 0);\n let height = Math.max(10, node?.height ?? 0);\n if (dir === \"LR\") {\n width = Math.max(10, node?.width ?? 0);\n height = Math.max(70, node?.height ?? 0);\n }\n const x = -1 * width / 2;\n const y = -1 * height / 2;\n const rc = rough17.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n stroke: themeVariables.lineColor,\n fill: themeVariables.lineColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.rectangle(x, y, width, height, options);\n const shape = shapeSvg.insert(() => roughNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, shape);\n const padding = state2?.padding ?? 0;\n if (node.width && node.height) {\n node.width += padding / 2 || 0;\n node.height += padding / 2 || 0;\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(forkJoin, \"forkJoin\");\n\n// src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts\nimport rough18 from \"roughjs\";\nasync function halfRoundedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const minWidth = 80, minHeight = 50;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough18.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n { x: -w / 2, y: h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { radius, point });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(halfRoundedRectangle, \"halfRoundedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/hexagon.ts\nimport rough19 from \"roughjs\";\nvar createHexagonPathD = /* @__PURE__ */ __name((x, y, width, height, m) => {\n return [\n `M${x + m},${y}`,\n `L${x + width - m},${y}`,\n `L${x + width},${y - height / 2}`,\n `L${x + width - m},${y - height}`,\n `L${x + m},${y - height}`,\n `L${x},${y - height / 2}`,\n \"Z\"\n ].join(\" \");\n}, \"createHexagonPathD\");\nasync function hexagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough19.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createHexagonPathD(0, 0, w, h, m);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(hexagon, \"hexagon\");\n\n// src/rendering-util/rendering-elements/shapes/hourglass.ts\nimport rough20 from \"roughjs\";\nasync function hourglass(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(30, node?.width ?? 0);\n const h = Math.max(30, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough20.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: 0, y: h },\n { x: w, y: h }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n log.info(\"Pill intersect\", node, { points });\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(hourglass, \"hourglass\");\n\n// src/rendering-util/rendering-elements/shapes/icon.ts\nimport rough21 from \"roughjs\";\nasync function icon(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const topLabel = node.pos === \"t\";\n const height = iconSize;\n const width = iconSize;\n const { nodeBorder } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough21.svg(shapeSvg);\n const options = userNodeOverrides(node, { stroke: \"none\", fill: \"none\" });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const iconNode = rc.rectangle(x, y, width, height, options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(icon, \"icon\");\n\n// src/rendering-util/rendering-elements/shapes/iconCircle.ts\nimport rough22 from \"roughjs\";\nasync function iconCircle(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"icon-shape default\");\n const padding = 20;\n const labelPadding = node.label ? 8 : 0;\n const topLabel = node.pos === \"t\";\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const rc = rough22.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconElem = shapeSvg.append(\"g\");\n if (node.icon) {\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n }\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;\n const iconNode = rc.circle(0, 0, diameter, options);\n const outerWidth = Math.max(diameter, bbox.width);\n const outerHeight = diameter + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n const pos = intersect_default.rect(node, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconCircle, \"iconCircle\");\n\n// src/rendering-util/rendering-elements/shapes/iconRounded.ts\nimport rough23 from \"roughjs\";\nasync function iconRounded(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough23.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\").attr(\"class\", \"icon-shape2\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconRounded, \"iconRounded\");\n\n// src/rendering-util/rendering-elements/shapes/iconSquare.ts\nimport rough24 from \"roughjs\";\nasync function iconSquare(parent, node, { config: { themeVariables, flowchart } }) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n \"icon-shape default\"\n );\n const topLabel = node.pos === \"t\";\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n const x = -width / 2;\n const y = -height / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough24.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const fill = stylesMap.get(\"fill\");\n options.stroke = fill ?? mainBkg;\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options);\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"transparent\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => iconNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.icon) {\n const iconElem = shapeSvg.append(\"g\");\n iconElem.html(\n `<g>${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: \"\"\n })}</g>`\n );\n const iconBBox = iconElem.node().getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n \"transform\",\n `translate(${-iconWidth / 2 - iconX},${topLabel ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY})`\n );\n iconElem.attr(\"style\", `color: ${stylesMap.get(\"stroke\") ?? nodeBorder};`);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(iconSquare, \"iconSquare\");\n\n// src/rendering-util/rendering-elements/shapes/imageSquare.ts\nimport rough25 from \"roughjs\";\nasync function imageSquare(parent, node, { config: { flowchart } }) {\n const img = new Image();\n img.src = node?.img ?? \"\";\n await img.decode();\n const imageNaturalWidth = Number(img.naturalWidth.toString().replace(\"px\", \"\"));\n const imageNaturalHeight = Number(img.naturalHeight.toString().replace(\"px\", \"\"));\n node.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const defaultWidth = flowchart?.wrappingWidth;\n node.defaultWidth = flowchart?.wrappingWidth;\n const imageRawWidth = Math.max(\n node.label ? defaultWidth ?? 0 : 0,\n node?.assetWidth ?? imageNaturalWidth\n );\n const imageWidth = node.constraint === \"on\" ? node?.assetHeight ? node.assetHeight * node.imageAspectRatio : imageRawWidth : imageRawWidth;\n const imageHeight = node.constraint === \"on\" ? imageWidth / node.imageAspectRatio : node?.assetHeight ?? imageNaturalHeight;\n node.width = Math.max(imageWidth, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"image-shape default\");\n const topLabel = node.pos === \"t\";\n const x = -imageWidth / 2;\n const y = -imageHeight / 2;\n const labelPadding = node.label ? 8 : 0;\n const rc = rough25.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options);\n const outerWidth = Math.max(imageWidth, bbox.width);\n const outerHeight = imageHeight + bbox.height + labelPadding;\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: \"none\",\n stroke: \"none\"\n });\n const iconShape = shapeSvg.insert(() => imageNode, \":first-child\");\n const outerShape = shapeSvg.insert(() => outerNode);\n if (node.img) {\n const image = shapeSvg.append(\"image\");\n image.attr(\"href\", node.img);\n image.attr(\"width\", imageWidth);\n image.attr(\"height\", imageHeight);\n image.attr(\"preserveAspectRatio\", \"none\");\n image.attr(\n \"transform\",\n `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`\n );\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${topLabel ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2 : imageHeight / 2 - bbox.height / 2 + labelPadding / 2})`\n );\n iconShape.attr(\n \"transform\",\n `translate(${0},${topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2})`\n );\n updateNodeBounds(node, outerShape);\n node.intersect = function(point) {\n log.info(\"iconSquare intersect\", node, point);\n if (!node.label) {\n return intersect_default.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding }\n ];\n } else {\n points = [\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight }\n ];\n }\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(imageSquare, \"imageSquare\");\n\n// src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts\nimport rough26 from \"roughjs\";\nasync function inv_trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: -3 * h / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough26.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(inv_trapezoid, \"inv_trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/drawRect.ts\nimport rough27 from \"roughjs\";\nasync function drawRect(parent, node, options) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + options.labelPaddingX * 2, node?.width || 0);\n const totalHeight = Math.max(bbox.height + options.labelPaddingY * 2, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n let rect2;\n let { rx, ry } = node;\n const { cssStyles } = node;\n if (options?.rx && options.ry) {\n rx = options.rx;\n ry = options.ry;\n }\n if (node.look === \"handDrawn\") {\n const rc = rough27.svg(shapeSvg);\n const options2 = userNodeOverrides(node, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"rx\", handleUndefinedAttr(rx)).attr(\"ry\", handleUndefinedAttr(ry)).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n }\n updateNodeBounds(node, rect2);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(drawRect, \"drawRect\");\n\n// src/rendering-util/rendering-elements/shapes/labelRect.ts\nasync function labelRect(parent, node) {\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, \"label\");\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0.1;\n const totalHeight = 0.1;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(labelRect, \"labelRect\");\n\n// src/rendering-util/rendering-elements/shapes/leanLeft.ts\nimport rough28 from \"roughjs\";\nasync function lean_left(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: -(3 * h) / 6, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough28.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_left, \"lean_left\");\n\n// src/rendering-util/rendering-elements/shapes/leanRight.ts\nimport rough29 from \"roughjs\";\nasync function lean_right(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w, y: 0 },\n { x: w + 3 * h / 6, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough29.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(lean_right, \"lean_right\");\n\n// src/rendering-util/rendering-elements/shapes/lightningBolt.ts\nimport rough30 from \"roughjs\";\nfunction lightningBolt(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = \"\";\n node.labelStyle = labelStyles;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId ?? node.id);\n const { cssStyles } = node;\n const width = Math.max(35, node?.width ?? 0);\n const height = Math.max(35, node?.height ?? 0);\n const gap = 7;\n const points = [\n { x: width, y: 0 },\n { x: 0, y: height + gap / 2 },\n { x: width - 2 * gap, y: height + gap / 2 },\n { x: 0, y: 2 * height },\n { x: width, y: height - gap / 2 },\n { x: 2 * gap, y: height - gap / 2 }\n ];\n const rc = rough30.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const linePath = createPathFromPoints(points);\n const lineNode = rc.path(linePath, options);\n const lightningBolt2 = shapeSvg.insert(() => lineNode, \":first-child\");\n if (cssStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n lightningBolt2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n lightningBolt2.attr(\"transform\", `translate(-${width / 2},${-height})`);\n updateNodeBounds(node, lightningBolt2);\n node.intersect = function(point) {\n log.info(\"lightningBolt intersect\", node, point);\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(lightningBolt, \"lightningBolt\");\n\n// src/rendering-util/rendering-elements/shapes/linedCylinder.ts\nimport rough31 from \"roughjs\";\nvar createCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry, outerOffset) => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD2 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function linedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + (node.padding ?? 0), node.height ?? 0);\n const outerOffset = h * 0.1;\n let cylinder2;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough31.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n const innerPathData = createInnerCylinderPathD2(0, ry, w, h, rx, ry);\n const options = userNodeOverrides(node, {});\n const outerNode = rc.path(outerPathData, options);\n const innerLine = rc.path(innerPathData, options);\n const innerLineEl = shapeSvg.insert(() => innerLine, \":first-child\");\n innerLineEl.attr(\"class\", \"line\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD2(0, 0, w, h, rx, ry, outerOffset);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n }\n cylinder2.attr(\"label-offset-y\", ry);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n updateNodeBounds(node, cylinder2);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`\n );\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n if (rx != 0 && (Math.abs(x) < (node.width ?? 0) / 2 || Math.abs(x) == (node.width ?? 0) / 2 && Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(linedCylinder, \"linedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts\nimport rough32 from \"roughjs\";\nasync function linedWaveEdgedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough32.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2, y: -finalH / 2 },\n { x: -w / 2, y: finalH / 2 * 1.1 },\n { x: -w / 2, y: -finalH / 2 }\n ];\n const poly = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const waveEdgeRect = shapeSvg.insert(() => poly, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) + w / 2 * 0.1 / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(linedWaveEdgedRect, \"linedWaveEdgedRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiRect.ts\nimport rough33 from \"roughjs\";\nasync function multiRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough33.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y },\n { x, y }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, { ...options, fill: \"none\" });\n const multiRect2 = shapeSvg.insert(() => innerNode, \":first-child\");\n multiRect2.insert(() => outerNode, \":first-child\");\n multiRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n multiRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, multiRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiRect, \"multiRect\");\n\n// src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts\nimport rough34 from \"roughjs\";\nasync function multiWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const x = -w / 2;\n const y = -finalH / 2;\n const rectOffset = 5;\n const { cssStyles } = node;\n const wavePoints = generateFullSineWavePoints(\n x - rectOffset,\n y + finalH + rectOffset,\n x + w - rectOffset,\n y + finalH + rectOffset,\n waveAmplitude,\n 0.8\n );\n const lastWavePoint = wavePoints?.[wavePoints.length - 1];\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + finalH + rectOffset },\n ...wavePoints,\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y },\n { x, y },\n { x, y: y + rectOffset }\n ];\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y },\n { x, y }\n ];\n const rc = rough34.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, options);\n const shape = shapeSvg.insert(() => outerNode, \":first-child\");\n shape.insert(() => innerNode);\n shape.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n shape.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n shape.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, shape);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(multiWaveEdgedRectangle, \"multiWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/note.ts\nimport rough35 from \"roughjs\";\nasync function note(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const useHtmlLabels = node.useHtmlLabels || getEffectiveHtmlLabels(getConfig());\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const { cssStyles } = node;\n const rc = rough35.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n fill: themeVariables.noteBkgColor,\n stroke: themeVariables.noteBorderColor\n });\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const noteShapeNode = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => noteShapeNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(note, \"note\");\n\n// src/rendering-util/rendering-elements/shapes/question.ts\nimport rough36 from \"roughjs\";\nvar createDecisionBoxPathD = /* @__PURE__ */ __name((x, y, size) => {\n return [\n `M${x + size / 2},${y}`,\n `L${x + size},${y - size / 2}`,\n `L${x + size / 2},${y - size}`,\n `L${x},${y - size / 2}`,\n \"Z\"\n ].join(\" \");\n}, \"createDecisionBoxPathD\");\nasync function question(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const adjustment = 0.5;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough36.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createDecisionBoxPathD(0, 0, s);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, s, s, points);\n polygon.attr(\"transform\", `translate(${-s / 2 + adjustment}, ${s / 2})`);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.calcIntersect = function(bounds, point) {\n const s2 = bounds.width;\n const points2 = [\n { x: s2 / 2, y: 0 },\n { x: s2, y: -s2 / 2 },\n { x: s2 / 2, y: -s2 },\n { x: 0, y: -s2 / 2 }\n ];\n const res = intersect_default.polygon(bounds, points2, point);\n return { x: res.x - 0.5, y: res.y - 0.5 };\n };\n node.intersect = function(point) {\n return this.calcIntersect(node, point);\n };\n return shapeSvg;\n}\n__name(question, \"question\");\n\n// src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts\nimport rough37 from \"roughjs\";\nasync function rect_left_inv_arrow(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const notch = y / 2;\n const points = [\n { x: x + notch, y },\n { x, y: 0 },\n { x: x + notch, y: -y },\n { x: -x, y: -y },\n { x: -x, y }\n ];\n const { cssStyles } = node;\n const rc = rough37.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(${-notch / 2},0)`);\n label.attr(\n \"transform\",\n `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(rect_left_inv_arrow, \"rect_left_inv_arrow\");\n\n// src/rendering-util/rendering-elements/shapes/rectWithTitle.ts\nimport { select as select3 } from \"d3\";\nimport rough38 from \"roughjs\";\nasync function rectWithTitle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n let classes;\n if (!node.cssClasses) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.cssClasses;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const g = shapeSvg.insert(\"g\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", nodeStyles);\n const description = node.description;\n const title = node.label;\n const text2 = await createLabel_default(label, title, node.labelStyle, true, true);\n let bbox = { width: 0, height: 0 };\n if (getEffectiveHtmlLabels(getConfig2())) {\n const div2 = text2.children[0];\n const dv2 = select3(text2);\n bbox = div2.getBoundingClientRect();\n dv2.attr(\"width\", bbox.width);\n dv2.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", description);\n const textRows = description || [];\n const titleBox = text2.getBBox();\n const descr = await createLabel_default(\n label,\n Array.isArray(textRows) ? textRows.join(\"<br/>\") : textRows,\n node.labelStyle,\n true,\n true\n );\n const div = descr.children[0];\n const dv = select3(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n const halfPadding = (node.padding || 0) / 2;\n select3(descr).attr(\n \"transform\",\n \"translate( \" + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select3(text2).attr(\n \"transform\",\n \"translate( \" + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n const totalWidth = bbox.width + (node.padding || 0);\n const totalHeight = bbox.height + (node.padding || 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n let rect2;\n let innerLine;\n if (node.look === \"handDrawn\") {\n const rc = rough38.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(\n createRoundedRectPathD(x, y, totalWidth, totalHeight, node.rx || 0),\n options\n );\n const roughLine = rc.line(\n -bbox.width / 2 - halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n bbox.width / 2 + halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n options\n );\n innerLine = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughLine;\n }, \":first-child\");\n rect2 = shapeSvg.insert(() => {\n log.debug(\"Rough node insert CXC\", roughNode);\n return roughNode;\n }, \":first-child\");\n } else {\n rect2 = g.insert(\"rect\", \":first-child\");\n innerLine = g.insert(\"line\");\n rect2.attr(\"class\", \"outer title-state\").attr(\"style\", nodeStyles).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + (node.padding || 0)).attr(\"height\", bbox.height + (node.padding || 0));\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(rectWithTitle, \"rectWithTitle\");\n\n// src/rendering-util/rendering-elements/shapes/roundedRect.ts\nasync function roundedRect(parent, node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: \"\",\n labelPaddingX: (node?.padding || 0) * 1,\n labelPaddingY: (node?.padding || 0) * 1\n };\n return drawRect(parent, node, options);\n}\n__name(roundedRect, \"roundedRect\");\n\n// src/rendering-util/rendering-elements/shapes/shadedProcess.ts\nimport rough39 from \"roughjs\";\nasync function shadedProcess(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = node?.padding ?? 0;\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const { cssStyles } = node;\n const rc = rough39.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x: x + w + 8, y },\n { x: x + w + 8, y: y + h },\n { x: x - 8, y: y + h },\n { x: x - 8, y },\n { x, y },\n { x, y: y + h }\n ];\n const roughNode = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n if (nodeStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n if (cssStyles && node.look !== \"handDrawn\") {\n rect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-w / 2 + 4 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(shadedProcess, \"shadedProcess\");\n\n// src/rendering-util/rendering-elements/shapes/slopedRect.ts\nimport rough40 from \"roughjs\";\nasync function slopedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough40.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x, y },\n { x, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - h / 2 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n polygon.attr(\"transform\", `translate(0, ${h / 4})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(slopedRect, \"slopedRect\");\n\n// src/rendering-util/rendering-elements/shapes/squareRect.ts\nasync function squareRect2(parent, node) {\n const options = {\n rx: 0,\n ry: 0,\n classes: \"\",\n labelPaddingX: node.labelPaddingX ?? (node?.padding || 0) * 2,\n labelPaddingY: (node?.padding || 0) * 1\n };\n return drawRect(parent, node, options);\n}\n__name(squareRect2, \"squareRect\");\n\n// src/rendering-util/rendering-elements/shapes/stadium.ts\nimport rough41 from \"roughjs\";\nasync function stadium(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const radius = h / 2;\n const { cssStyles } = node;\n const rc = rough41.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 + radius, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(w / 2 - radius, 0, radius, 50, 270, 450)\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container outer-path\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(stadium, \"stadium\");\n\n// src/rendering-util/rendering-elements/shapes/state.ts\nasync function state(parent, node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: \"flowchart-node\"\n };\n return drawRect(parent, node, options);\n}\n__name(state, \"state\");\n\n// src/rendering-util/rendering-elements/shapes/stateEnd.ts\nimport rough42 from \"roughjs\";\nfunction stateEnd(parent, node, { config: { themeVariables } }) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { cssStyles } = node;\n const { lineColor, stateBorder, nodeBorder } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const rc = rough42.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughNode = rc.circle(0, 0, 14, {\n ...options,\n stroke: lineColor,\n strokeWidth: 2\n });\n const innerFill = stateBorder ?? nodeBorder;\n const roughInnerNode = rc.circle(0, 0, 5, {\n ...options,\n fill: innerFill,\n stroke: innerFill,\n strokeWidth: 2,\n fillStyle: \"solid\"\n });\n const circle2 = shapeSvg.insert(() => roughNode, \":first-child\");\n circle2.insert(() => roughInnerNode);\n if (cssStyles) {\n circle2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n circle2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateEnd, \"stateEnd\");\n\n// src/rendering-util/rendering-elements/shapes/stateStart.ts\nimport rough43 from \"roughjs\";\nfunction stateStart(parent, node, { config: { themeVariables } }) {\n const { lineColor } = themeVariables;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let circle2;\n if (node.look === \"handDrawn\") {\n const rc = rough43.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor));\n circle2 = shapeSvg.insert(() => roughNode);\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n } else {\n circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n }\n updateNodeBounds(node, circle2);\n node.intersect = function(point) {\n return intersect_default.circle(node, 7, point);\n };\n return shapeSvg;\n}\n__name(stateStart, \"stateStart\");\n\n// src/rendering-util/rendering-elements/shapes/subroutine.ts\nimport rough44 from \"roughjs\";\nasync function subroutine(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = (node?.padding || 0) / 2;\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n if (node.look === \"handDrawn\") {\n const rc = rough44.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.rectangle(x - 8, y, w + 16, h, options);\n const l1 = rc.line(x, y, x, y + h, options);\n const l2 = rc.line(x + w, y, x + w, y + h, options);\n shapeSvg.insert(() => l1, \":first-child\");\n shapeSvg.insert(() => l2, \":first-child\");\n const rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n const { cssStyles } = node;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, rect2);\n } else {\n const el = insertPolygonShape(shapeSvg, w, h, points);\n if (nodeStyles) {\n el.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, el);\n }\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(subroutine, \"subroutine\");\n\n// src/rendering-util/rendering-elements/shapes/taggedRect.ts\nimport rough45 from \"roughjs\";\nasync function taggedRect(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const tagWidth = 0.2 * h;\n const tagHeight = 0.2 * h;\n const { cssStyles } = node;\n const rc = rough45.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const rectPoints = [\n { x: x - tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x - tagWidth / 2, y: y + h }\n ];\n const tagPoints = [\n { x: x + w - tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h - tagHeight }\n ];\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const rectPath = createPathFromPoints(rectPoints);\n const rectNode = rc.path(rectPath, options);\n const tagPath = createPathFromPoints(tagPoints);\n const tagNode = rc.path(tagPath, { ...options, fillStyle: \"solid\" });\n const taggedRect2 = shapeSvg.insert(() => tagNode, \":first-child\");\n taggedRect2.insert(() => rectNode, \":first-child\");\n taggedRect2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n taggedRect2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, taggedRect2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, rectPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedRect, \"taggedRect\");\n\n// src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts\nimport rough46 from \"roughjs\";\nasync function taggedWaveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const tagWidth = 0.2 * w;\n const tagHeight = 0.2 * h;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const rc = rough46.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - w / 2 * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - w / 2 * 0.1,\n finalH / 2,\n w / 2 + w / 2 * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + w / 2 * 0.1, y: -finalH / 2 },\n { x: -w / 2 - w / 2 * 0.1, y: -finalH / 2 }\n ];\n const x = -w / 2 + w / 2 * 0.1;\n const y = -finalH / 2 - tagHeight * 0.4;\n const tagPoints = [\n { x: x + w - tagWidth, y: (y + h) * 1.4 },\n { x: x + w, y: y + h - tagHeight },\n { x: x + w, y: (y + h) * 0.9 },\n ...generateFullSineWavePoints(\n x + w,\n (y + h) * 1.3,\n x + w - tagWidth,\n (y + h) * 1.5,\n -h * 0.03,\n 0.5\n )\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);\n const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {\n ...options,\n fillStyle: \"solid\"\n });\n const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, \":first-child\");\n waveEdgeRect.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(taggedWaveEdgedRectangle, \"taggedWaveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/text.ts\nasync function text(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + node.padding, node?.width || 0);\n const totalHeight = Math.max(bbox.height + node.padding, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"text\").attr(\"style\", nodeStyles).attr(\"rx\", 0).attr(\"ry\", 0).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(text, \"text\");\n\n// src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts\nimport rough47 from \"roughjs\";\nvar createCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return `M${x},${y}\n a${rx},${ry} 0,0,1 ${0},${-height}\n l${width},${0}\n a${rx},${ry} 0,0,1 ${0},${height}\n M${width},${-height}\n a${rx},${ry} 0,0,0 ${0},${height}\n l${-width},${0}`;\n}, \"createCylinderPathD\");\nvar createOuterCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [\n `M${x},${y}`,\n `M${x + width},${y}`,\n `a${rx},${ry} 0,0,0 ${0},${-height}`,\n `l${-width},0`,\n `a${rx},${ry} 0,0,0 ${0},${height}`,\n `l${width},0`\n ].join(\" \");\n}, \"createOuterCylinderPathD\");\nvar createInnerCylinderPathD3 = /* @__PURE__ */ __name((x, y, width, height, rx, ry) => {\n return [`M${x + width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 0,${height}`].join(\" \");\n}, \"createInnerCylinderPathD\");\nasync function tiltedCylinder(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label, halfPadding } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const labelPadding = node.look === \"neo\" ? halfPadding * 2 : halfPadding;\n const h = bbox.height + labelPadding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const w = bbox.width + rx + labelPadding;\n const { cssStyles } = node;\n let cylinder2;\n if (node.look === \"handDrawn\") {\n const rc = rough47.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD3(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD3(0, 0, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: \"none\" }));\n cylinder2 = shapeSvg.insert(() => innerLine, \":first-child\");\n cylinder2 = shapeSvg.insert(() => outerNode, \":first-child\");\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.attr(\"style\", cssStyles);\n }\n } else {\n const pathData = createCylinderPathD3(0, 0, w, h, rx, ry);\n cylinder2 = shapeSvg.insert(\"path\", \":first-child\").attr(\"d\", pathData).attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles)).attr(\"style\", nodeStyles);\n cylinder2.attr(\"class\", \"basic label-container\");\n if (cssStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles) {\n cylinder2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n }\n cylinder2.attr(\"label-offset-x\", rx);\n cylinder2.attr(\"transform\", `translate(${-w / 2}, ${h / 2} )`);\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) - rx - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, cylinder2);\n node.intersect = function(point) {\n const pos = intersect_default.rect(node, point);\n const y = pos.y - (node.y ?? 0);\n if (ry != 0 && (Math.abs(y) < (node.height ?? 0) / 2 || Math.abs(y) == (node.height ?? 0) / 2 && Math.abs(pos.x - (node.x ?? 0)) > (node.width ?? 0) / 2 - rx)) {\n let x = rx * rx * (1 - y * y / (ry * ry));\n if (x != 0) {\n x = Math.sqrt(Math.abs(x));\n }\n x = rx - x;\n if (point.x - (node.x ?? 0) > 0) {\n x = -x;\n }\n pos.x += x;\n }\n return pos;\n };\n return shapeSvg;\n}\n__name(tiltedCylinder, \"tiltedCylinder\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoid.ts\nimport rough48 from \"roughjs\";\nasync function trapezoid(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -3 * h / 6, y: 0 },\n { x: w + 3 * h / 6, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h }\n ];\n let polygon;\n const { cssStyles } = node;\n if (node.look === \"handDrawn\") {\n const rc = rough48.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr(\"style\", cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n if (nodeStyles) {\n polygon.attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(trapezoid, \"trapezoid\");\n\n// src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts\nimport rough49 from \"roughjs\";\nasync function trapezoidalPentagon(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 60, minHeight = 20;\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const { cssStyles } = node;\n const rc = rough49.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 * 0.8, y: -h / 2 },\n { x: w / 2 * 0.8, y: -h / 2 },\n { x: w / 2, y: -h / 2 * 0.6 },\n { x: w / 2, y: h / 2 },\n { x: -w / 2, y: h / 2 },\n { x: -w / 2, y: -h / 2 * 0.6 }\n ];\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, \":first-child\");\n polygon.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, polygon);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(trapezoidalPentagon, \"trapezoidalPentagon\");\n\n// src/rendering-util/rendering-elements/shapes/triangle.ts\nimport rough50 from \"roughjs\";\nasync function triangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const useHtmlLabels = node.useHtmlLabels || getEffectiveHtmlLabels(getConfig2());\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: 0 },\n { x: tw, y: 0 },\n { x: tw / 2, y: -h }\n ];\n const { cssStyles } = node;\n const rc = rough50.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => roughNode, \":first-child\").attr(\"transform\", `translate(${-h / 2}, ${h / 2})`);\n if (cssStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n polygon.selectChildren(\"path\").attr(\"style\", nodeStyles);\n }\n node.width = w;\n node.height = h;\n updateNodeBounds(node, polygon);\n label.attr(\n \"transform\",\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`\n );\n node.intersect = function(point) {\n log.info(\"Triangle intersect\", node, points, point);\n return intersect_default.polygon(node, points, point);\n };\n return shapeSvg;\n}\n__name(triangle, \"triangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts\nimport rough51 from \"roughjs\";\nasync function waveEdgedRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 8;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n const minWidth = 70;\n const widthDif = minWidth - w;\n const extraW = widthDif > 0 ? widthDif / 2 : 0;\n const rc = rough51.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2 - extraW, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - extraW,\n finalH / 2,\n w / 2 + extraW,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + extraW, y: -finalH / 2 },\n { x: -w / 2 - extraW, y: -finalH / 2 }\n ];\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, \":first-child\");\n waveEdgeRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveEdgeRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n waveEdgeRect.attr(\"transform\", `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n \"transform\",\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveEdgedRectangle, \"waveEdgedRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/waveRectangle.ts\nimport rough52 from \"roughjs\";\nasync function waveRectangle(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 100;\n const minHeight = 50;\n const baseWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const baseHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const aspectRatio = baseWidth / baseHeight;\n let w = baseWidth;\n let h = baseHeight;\n if (w > h * aspectRatio) {\n h = w / aspectRatio;\n } else {\n w = h * aspectRatio;\n }\n w = Math.max(w, minWidth);\n h = Math.max(h, minHeight);\n const waveAmplitude = Math.min(h * 0.2, h / 4);\n const finalH = h + waveAmplitude * 2;\n const { cssStyles } = node;\n const rc = rough52.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const points = [\n { x: -w / 2, y: finalH / 2 },\n ...generateFullSineWavePoints(-w / 2, finalH / 2, w / 2, finalH / 2, waveAmplitude, 1),\n { x: w / 2, y: -finalH / 2 },\n ...generateFullSineWavePoints(w / 2, -finalH / 2, -w / 2, -finalH / 2, waveAmplitude, -1)\n ];\n const waveRectPath = createPathFromPoints(points);\n const waveRectNode = rc.path(waveRectPath, options);\n const waveRect = shapeSvg.insert(() => waveRectNode, \":first-child\");\n waveRect.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n waveRect.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, waveRect);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(waveRectangle, \"waveRectangle\");\n\n// src/rendering-util/rendering-elements/shapes/windowPane.ts\nimport rough53 from \"roughjs\";\nasync function windowPane(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n const rc = rough53.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const outerPathPoints = [\n { x: x - rectOffset, y: y - rectOffset },\n { x: x - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - rectOffset }\n ];\n const path = `M${x - rectOffset},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y - rectOffset}\n M${x - rectOffset},${y} L${x + w},${y}\n M${x},${y - rectOffset} L${x},${y + h}`;\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const no = rc.path(path, options);\n const windowPane2 = shapeSvg.insert(() => no, \":first-child\");\n windowPane2.attr(\"transform\", `translate(${rectOffset / 2}, ${rectOffset / 2})`);\n windowPane2.attr(\"class\", \"basic label-container\");\n if (cssStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", cssStyles);\n }\n if (nodeStyles && node.look !== \"handDrawn\") {\n windowPane2.selectAll(\"path\").attr(\"style\", nodeStyles);\n }\n label.attr(\n \"transform\",\n `translate(${-(bbox.width / 2) + rectOffset / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, windowPane2);\n node.intersect = function(point) {\n const pos = intersect_default.polygon(node, outerPathPoints, point);\n return pos;\n };\n return shapeSvg;\n}\n__name(windowPane, \"windowPane\");\n\n// src/rendering-util/rendering-elements/shapes/erBox.ts\nimport rough54 from \"roughjs\";\nimport { select as select4 } from \"d3\";\nasync function erBox(parent, node) {\n const entityNode = node;\n if (entityNode.alias) {\n node.label = entityNode.alias;\n }\n if (node.look === \"handDrawn\") {\n const { themeVariables: themeVariables2 } = getConfig();\n const { background } = themeVariables2;\n const backgroundNode = {\n ...node,\n id: node.id + \"-background\",\n look: \"default\",\n cssStyles: [\"stroke: none\", `fill: ${background}`]\n };\n await erBox(parent, backgroundNode);\n }\n const config = getConfig();\n node.useHtmlLabels = config.htmlLabels;\n let PADDING = config.er?.diagramPadding ?? 10;\n let TEXT_PADDING = config.er?.entityPadding ?? 6;\n const { cssStyles } = node;\n const { labelStyles, nodeStyles } = styles2String(node);\n if (entityNode.attributes.length === 0 && node.label) {\n const options2 = {\n rx: 0,\n ry: 0,\n labelPaddingX: PADDING,\n labelPaddingY: PADDING * 1.5,\n classes: \"\"\n };\n if (calculateTextWidth(node.label, config) + options2.labelPaddingX * 2 < config.er.minEntityWidth) {\n node.width = config.er.minEntityWidth;\n }\n const shapeSvg2 = await drawRect(parent, node, options2);\n if (!evaluate(config.htmlLabels)) {\n const textElement = shapeSvg2.select(\"text\");\n const bbox = textElement.node()?.getBBox();\n textElement.attr(\"transform\", `translate(${-bbox.width / 2}, 0)`);\n }\n return shapeSvg2;\n }\n if (!config.htmlLabels) {\n PADDING *= 1.25;\n TEXT_PADDING *= 1.25;\n }\n let cssClasses = getNodeClasses(node);\n if (!cssClasses) {\n cssClasses = \"node default\";\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", cssClasses).attr(\"id\", node.domId || node.id);\n const nameBBox = await addText(shapeSvg, node.label ?? \"\", config, 0, 0, [\"name\"], labelStyles);\n nameBBox.height += TEXT_PADDING;\n let yOffset = 0;\n const yOffsets = [];\n const rows = [];\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeysWidth = 0;\n let maxCommentWidth = 0;\n let keysPresent = true;\n let commentPresent = true;\n for (const attribute of entityNode.attributes) {\n const typeBBox = await addText(\n shapeSvg,\n attribute.type,\n config,\n 0,\n yOffset,\n [\"attribute-type\"],\n labelStyles\n );\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width + PADDING);\n const nameBBox2 = await addText(\n shapeSvg,\n attribute.name,\n config,\n 0,\n yOffset,\n [\"attribute-name\"],\n labelStyles\n );\n maxNameWidth = Math.max(maxNameWidth, nameBBox2.width + PADDING);\n const keysBBox = await addText(\n shapeSvg,\n attribute.keys.join(),\n config,\n 0,\n yOffset,\n [\"attribute-keys\"],\n labelStyles\n );\n maxKeysWidth = Math.max(maxKeysWidth, keysBBox.width + PADDING);\n const commentBBox = await addText(\n shapeSvg,\n attribute.comment,\n config,\n 0,\n yOffset,\n [\"attribute-comment\"],\n labelStyles\n );\n maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING);\n const rowHeight = Math.max(typeBBox.height, nameBBox2.height, keysBBox.height, commentBBox.height) + TEXT_PADDING;\n rows.push({ yOffset, rowHeight });\n yOffset += rowHeight;\n }\n let totalWidthSections = 4;\n if (maxKeysWidth <= PADDING) {\n keysPresent = false;\n maxKeysWidth = 0;\n totalWidthSections--;\n }\n if (maxCommentWidth <= PADDING) {\n commentPresent = false;\n maxCommentWidth = 0;\n totalWidthSections--;\n }\n const shapeBBox = shapeSvg.node().getBBox();\n if (nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth) > 0) {\n const difference = nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth);\n maxTypeWidth += difference / totalWidthSections;\n maxNameWidth += difference / totalWidthSections;\n if (maxKeysWidth > 0) {\n maxKeysWidth += difference / totalWidthSections;\n }\n if (maxCommentWidth > 0) {\n maxCommentWidth += difference / totalWidthSections;\n }\n }\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth;\n const rc = rough54.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n let totalShapeBBoxHeight = 0;\n if (rows.length > 0) {\n totalShapeBBoxHeight = rows.reduce((sum, row) => sum + (row?.rowHeight ?? 0), 0);\n }\n const w = Math.max(shapeBBox.width + PADDING * 2, node?.width || 0, maxWidth);\n const h = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node?.height || 0);\n const x = -w / 2;\n const y = -h / 2;\n shapeSvg.selectAll(\"g:not(:first-child)\").each((_, i, nodes) => {\n const text2 = select4(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n if (text2.attr(\"class\").includes(\"attribute-name\")) {\n translateX += maxTypeWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-keys\")) {\n translateX += maxTypeWidth + maxNameWidth;\n } else if (text2.attr(\"class\").includes(\"attribute-comment\")) {\n translateX += maxTypeWidth + maxNameWidth + maxKeysWidth;\n }\n }\n }\n text2.attr(\n \"transform\",\n `translate(${x + PADDING / 2 + translateX}, ${translateY + y + nameBBox.height + TEXT_PADDING / 2})`\n );\n });\n shapeSvg.select(\".name\").attr(\"transform\", \"translate(\" + -nameBBox.width / 2 + \", \" + (y + TEXT_PADDING / 2) + \")\");\n const roughRect = rc.rectangle(x, y, w, h, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\").attr(\"style\", cssStyles.join(\"\"));\n const { themeVariables } = getConfig();\n const { rowEven, rowOdd, nodeBorder } = themeVariables;\n yOffsets.push(0);\n for (const [i, row] of rows.entries()) {\n const contentRowIndex = i + 1;\n const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0;\n const roughRect2 = rc.rectangle(x, nameBBox.height + y + row?.yOffset, w, row?.rowHeight, {\n ...options,\n fill: isEven ? rowEven : rowOdd,\n stroke: nodeBorder\n });\n shapeSvg.insert(() => roughRect2, \"g.label\").attr(\"style\", cssStyles.join(\"\")).attr(\"class\", `row-rect-${isEven ? \"even\" : \"odd\"}`);\n }\n let roughLine = rc.line(x, nameBBox.height + y, w + x, nameBBox.height + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n roughLine = rc.line(maxTypeWidth + x, nameBBox.height + y, maxTypeWidth + x, h + y, options);\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n if (keysPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n if (commentPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n for (const yOffset2 of yOffsets) {\n roughLine = rc.line(\n x,\n nameBBox.height + y + yOffset2,\n w + x,\n nameBBox.height + y + yOffset2,\n options\n );\n shapeSvg.insert(() => roughLine).attr(\"class\", \"divider\");\n }\n updateNodeBounds(node, rect2);\n if (nodeStyles && node.look !== \"handDrawn\") {\n const allStyle = nodeStyles.split(\";\");\n const strokeStyles = allStyle?.filter((e) => {\n return e.includes(\"stroke\");\n })?.map((s) => `${s}`).join(\"; \");\n shapeSvg.selectAll(\"path\").attr(\"style\", strokeStyles ?? \"\");\n shapeSvg.selectAll(\".row-rect-even path\").attr(\"style\", nodeStyles);\n }\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(erBox, \"erBox\");\nasync function addText(shapeSvg, labelText, config, translateX = 0, translateY = 0, classes = [], style = \"\") {\n const label = shapeSvg.insert(\"g\").attr(\"class\", `label ${classes.join(\" \")}`).attr(\"transform\", `translate(${translateX}, ${translateY})`).attr(\"style\", style);\n if (labelText !== parseGenericTypes(labelText)) {\n labelText = parseGenericTypes(labelText);\n labelText = labelText.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n const text2 = label.node().appendChild(\n await createText(\n label,\n labelText,\n {\n width: calculateTextWidth(labelText, config) + 100,\n style,\n useHtmlLabels: config.htmlLabels\n },\n config\n )\n );\n if (labelText.includes(\"<\") || labelText.includes(\">\")) {\n let child = text2.children[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n while (child.childNodes[0]) {\n child = child.childNodes[0];\n child.textContent = child.textContent.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n }\n }\n let bbox = text2.getBBox();\n if (evaluate(config.htmlLabels)) {\n const div = text2.children[0];\n div.style.textAlign = \"start\";\n const dv = select4(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n return bbox;\n}\n__name(addText, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nimport { select as select6 } from \"d3\";\nimport rough55 from \"roughjs\";\n\n// src/diagrams/class/shapeUtil.ts\nimport { select as select5 } from \"d3\";\nasync function textHelper(parent, node, config, useHtmlLabels, GAP = config.class.padding ?? 12) {\n const TEXT_PADDING = !useHtmlLabels ? 3 : 0;\n const shapeSvg = parent.insert(\"g\").attr(\"class\", getNodeClasses(node)).attr(\"id\", node.domId || node.id);\n let annotationGroup = null;\n let labelGroup = null;\n let membersGroup = null;\n let methodsGroup = null;\n let annotationGroupHeight = 0;\n let labelGroupHeight = 0;\n let membersGroupHeight = 0;\n annotationGroup = shapeSvg.insert(\"g\").attr(\"class\", \"annotation-group text\");\n if (node.annotations.length > 0) {\n const annotation = node.annotations[0];\n await addText2(annotationGroup, { text: `\\xAB${annotation}\\xBB` }, 0);\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroupHeight = annotationGroupBBox.height;\n }\n labelGroup = shapeSvg.insert(\"g\").attr(\"class\", \"label-group text\");\n await addText2(labelGroup, node, 0, [\"font-weight: bolder\"]);\n const labelGroupBBox = labelGroup.node().getBBox();\n labelGroupHeight = labelGroupBBox.height;\n membersGroup = shapeSvg.insert(\"g\").attr(\"class\", \"members-group text\");\n let yOffset = 0;\n for (const member of node.members) {\n const height = await addText2(membersGroup, member, yOffset, [member.parseClassifier()]);\n yOffset += height + TEXT_PADDING;\n }\n membersGroupHeight = membersGroup.node().getBBox().height;\n if (membersGroupHeight <= 0) {\n membersGroupHeight = GAP / 2;\n }\n methodsGroup = shapeSvg.insert(\"g\").attr(\"class\", \"methods-group text\");\n let methodsYOffset = 0;\n for (const method of node.methods) {\n const height = await addText2(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);\n methodsYOffset += height + TEXT_PADDING;\n }\n let bbox = shapeSvg.node().getBBox();\n if (annotationGroup !== null) {\n const annotationGroupBBox = annotationGroup.node().getBBox();\n annotationGroup.attr(\"transform\", `translate(${-annotationGroupBBox.width / 2})`);\n }\n labelGroup.attr(\"transform\", `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);\n bbox = shapeSvg.node().getBBox();\n membersGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + GAP * 2})`\n );\n bbox = shapeSvg.node().getBBox();\n methodsGroup.attr(\n \"transform\",\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 4 : GAP * 2)})`\n );\n bbox = shapeSvg.node().getBBox();\n return { shapeSvg, bbox };\n}\n__name(textHelper, \"textHelper\");\nasync function addText2(parentGroup, node, yOffset, styles = []) {\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", styles.join(\"; \"));\n const config = getConfig();\n let useHtmlLabels = \"useHtmlLabels\" in node ? node.useHtmlLabels : evaluate(config.htmlLabels) ?? true;\n let textContent = \"\";\n if (\"text\" in node) {\n textContent = node.text;\n } else {\n textContent = node.label;\n }\n if (!useHtmlLabels && textContent.startsWith(\"\\\\\")) {\n textContent = textContent.substring(1);\n }\n if (hasKatex(textContent)) {\n useHtmlLabels = true;\n }\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(textContent)),\n {\n width: calculateTextWidth(textContent, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels\n },\n config\n );\n let bbox;\n let numberOfLines = 1;\n if (!useHtmlLabels) {\n if (styles.includes(\"font-weight: bolder\")) {\n select5(text2).selectAll(\"tspan\").attr(\"font-weight\", \"\");\n }\n numberOfLines = text2.children.length;\n const textChild = text2.children[0];\n if (text2.textContent === \"\" || text2.textContent.includes(\">\")) {\n textChild.textContent = textContent[0] + textContent.substring(1).replaceAll(\">\", \">\").replaceAll(\"<\", \"<\").trim();\n const preserveSpace = textContent[1] === \" \";\n if (preserveSpace) {\n textChild.textContent = textChild.textContent[0] + \" \" + textChild.textContent.substring(1);\n }\n }\n if (textChild.textContent === \"undefined\") {\n textChild.textContent = \"\";\n }\n bbox = text2.getBBox();\n } else {\n const div = text2.children[0];\n const dv = select5(text2);\n numberOfLines = div.innerHTML.split(\"<br>\").length;\n if (div.innerHTML.includes(\"</math>\")) {\n numberOfLines += div.innerHTML.split(\"<mrow>\").length - 1;\n }\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = textContent.replace(/<img[^>]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = config.fontSize?.toString() ?? window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n __name(setupImage, \"setupImage\");\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", \"translate(0,\" + (-bbox.height / (2 * numberOfLines) + yOffset) + \")\");\n return bbox.height;\n}\n__name(addText2, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/classBox.ts\nasync function classBox(parent, node) {\n const config = getConfig2();\n const PADDING = config.class.padding ?? 12;\n const GAP = PADDING;\n const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true;\n const classNode = node;\n classNode.annotations = classNode.annotations ?? [];\n classNode.members = classNode.members ?? [];\n classNode.methods = classNode.methods ?? [];\n const { shapeSvg, bbox } = await textHelper(parent, node, config, useHtmlLabels, GAP);\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.cssStyles = classNode.styles || \"\";\n const styles = classNode.styles?.join(\";\") || nodeStyles || \"\";\n if (!node.cssStyles) {\n node.cssStyles = styles.replaceAll(\"!important\", \"\").split(\";\");\n }\n const renderExtraBox = classNode.members.length === 0 && classNode.methods.length === 0 && !config.class?.hideEmptyMembersBox;\n const rc = rough55.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const w = bbox.width;\n let h = bbox.height;\n if (classNode.members.length === 0 && classNode.methods.length === 0) {\n h += GAP;\n } else if (classNode.members.length > 0 && classNode.methods.length === 0) {\n h += GAP * 2;\n }\n const x = -w / 2;\n const y = -h / 2;\n const roughRect = rc.rectangle(\n x - PADDING,\n y - PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0),\n w + 2 * PADDING,\n h + 2 * PADDING + (renderExtraBox ? PADDING * 2 : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING : 0),\n options\n );\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\");\n const rectBBox = rect2.node().getBBox();\n shapeSvg.selectAll(\".text\").each((_, i, nodes) => {\n const text2 = select6(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateY = parseFloat(translate[2]);\n }\n }\n let newTranslateY = translateY + y + PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0);\n if (!useHtmlLabels) {\n newTranslateY -= 4;\n }\n let newTranslateX = x;\n if (text2.attr(\"class\").includes(\"label-group\") || text2.attr(\"class\").includes(\"annotation-group\")) {\n newTranslateX = -text2.node()?.getBBox().width / 2 || 0;\n shapeSvg.selectAll(\"text\").each(function(_2, i2, nodes2) {\n if (window.getComputedStyle(nodes2[i2]).textAnchor === \"middle\") {\n newTranslateX = 0;\n }\n });\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY})`);\n });\n const annotationGroupHeight = shapeSvg.select(\".annotation-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const labelGroupHeight = shapeSvg.select(\".label-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n const membersGroupHeight = shapeSvg.select(\".members-group\").node().getBBox().height - (renderExtraBox ? PADDING / 2 : 0) || 0;\n if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + PADDING + GAP * 2,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr(\"class\", \"divider\").attr(\"style\", styles);\n }\n if (classNode.look !== \"handDrawn\") {\n shapeSvg.selectAll(\"path\").attr(\"style\", styles);\n }\n rect2.select(\":nth-child(2)\").attr(\"style\", styles);\n shapeSvg.selectAll(\".divider\").select(\"path\").attr(\"style\", styles);\n if (node.labelStyle) {\n shapeSvg.selectAll(\"span\").attr(\"style\", node.labelStyle);\n } else {\n shapeSvg.selectAll(\"span\").attr(\"style\", styles);\n }\n if (!useHtmlLabels) {\n const colorRegex = RegExp(/color\\s*:\\s*([^;]*)/);\n const match = colorRegex.exec(styles);\n if (match) {\n const colorStyle = match[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n } else if (labelStyles) {\n const match2 = colorRegex.exec(labelStyles);\n if (match2) {\n const colorStyle = match2[0].replace(\"color\", \"fill\");\n shapeSvg.selectAll(\"tspan\").attr(\"style\", colorStyle);\n }\n }\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(classBox, \"classBox\");\n\n// src/rendering-util/rendering-elements/shapes/requirementBox.ts\nimport rough56 from \"roughjs\";\nimport { select as select7 } from \"d3\";\nasync function requirementBox(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const requirementNode = node;\n const elementNode = node;\n const padding = 20;\n const gap = 20;\n const isRequirementNode = \"verifyMethod\" in node;\n const classes = getNodeClasses(node);\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId ?? node.id);\n let typeHeight;\n if (isRequirementNode) {\n typeHeight = await addText3(\n shapeSvg,\n `<<${requirementNode.type}>>`,\n 0,\n node.labelStyle\n );\n } else {\n typeHeight = await addText3(shapeSvg, \"<<Element>>\", 0, node.labelStyle);\n }\n let accumulativeHeight = typeHeight;\n const nameHeight = await addText3(\n shapeSvg,\n requirementNode.name,\n accumulativeHeight,\n node.labelStyle + \"; font-weight: bold;\"\n );\n accumulativeHeight += nameHeight + gap;\n if (isRequirementNode) {\n const idHeight = await addText3(\n shapeSvg,\n `${requirementNode.requirementId ? `ID: ${requirementNode.requirementId}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += idHeight;\n const textHeight = await addText3(\n shapeSvg,\n `${requirementNode.text ? `Text: ${requirementNode.text}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += textHeight;\n const riskHeight = await addText3(\n shapeSvg,\n `${requirementNode.risk ? `Risk: ${requirementNode.risk}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += riskHeight;\n await addText3(\n shapeSvg,\n `${requirementNode.verifyMethod ? `Verification: ${requirementNode.verifyMethod}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n } else {\n const typeHeight2 = await addText3(\n shapeSvg,\n `${elementNode.type ? `Type: ${elementNode.type}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += typeHeight2;\n await addText3(\n shapeSvg,\n `${elementNode.docRef ? `Doc Ref: ${elementNode.docRef}` : \"\"}`,\n accumulativeHeight,\n node.labelStyle\n );\n }\n const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding;\n const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const rc = rough56.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== \"handDrawn\") {\n options.roughness = 0;\n options.fillStyle = \"solid\";\n }\n const roughRect = rc.rectangle(x, y, totalWidth, totalHeight, options);\n const rect2 = shapeSvg.insert(() => roughRect, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles);\n shapeSvg.selectAll(\".label\").each((_, i, nodes) => {\n const text2 = select7(nodes[i]);\n const transform = text2.attr(\"transform\");\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n }\n }\n const newTranslateY = translateY - totalHeight / 2;\n let newTranslateX = x + padding / 2;\n if (i === 0 || i === 1) {\n newTranslateX = translateX;\n }\n text2.attr(\"transform\", `translate(${newTranslateX}, ${newTranslateY + padding})`);\n });\n if (accumulativeHeight > typeHeight + nameHeight + gap) {\n const roughLine = rc.line(\n x,\n y + typeHeight + nameHeight + gap,\n x + totalWidth,\n y + typeHeight + nameHeight + gap,\n options\n );\n const dividerLine = shapeSvg.insert(() => roughLine);\n dividerLine.attr(\"style\", nodeStyles);\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(requirementBox, \"requirementBox\");\nasync function addText3(parentGroup, inputText, yOffset, style = \"\") {\n if (inputText === \"\") {\n return 0;\n }\n const textEl = parentGroup.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", style);\n const config = getConfig2();\n const useHtmlLabels = config.htmlLabels ?? true;\n const text2 = await createText(\n textEl,\n sanitizeText2(decodeEntities(inputText)),\n {\n width: calculateTextWidth(inputText, config) + 50,\n // Add room for error when splitting text into multiple lines\n classes: \"markdown-node-label\",\n useHtmlLabels,\n style\n },\n config\n );\n let bbox;\n if (!useHtmlLabels) {\n const textChild = text2.children[0];\n for (const child of textChild.children) {\n child.textContent = child.textContent.replaceAll(\">\", \">\").replaceAll(\"<\", \"<\");\n if (style) {\n child.setAttribute(\"style\", style);\n }\n }\n bbox = text2.getBBox();\n bbox.height += 6;\n } else {\n const div = text2.children[0];\n const dv = select7(text2);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n textEl.attr(\"transform\", `translate(${-bbox.width / 2},${-bbox.height / 2 + yOffset})`);\n return bbox.height;\n}\n__name(addText3, \"addText\");\n\n// src/rendering-util/rendering-elements/shapes/kanbanItem.ts\nimport rough57 from \"roughjs\";\nvar colorFromPriority = /* @__PURE__ */ __name((priority) => {\n switch (priority) {\n case \"Very High\":\n return \"red\";\n case \"High\":\n return \"orange\";\n case \"Medium\":\n return null;\n // no stroke\n case \"Low\":\n return \"blue\";\n case \"Very Low\":\n return \"lightblue\";\n }\n}, \"colorFromPriority\");\nasync function kanbanItem(parent, kanbanNode, { config }) {\n const { labelStyles, nodeStyles } = styles2String(kanbanNode);\n kanbanNode.labelStyle = labelStyles || \"\";\n const labelPaddingX = 10;\n const orgWidth = kanbanNode.width;\n kanbanNode.width = (kanbanNode.width ?? 200) - 10;\n const {\n shapeSvg,\n bbox,\n label: labelElTitle\n } = await labelHelper(parent, kanbanNode, getNodeClasses(kanbanNode));\n const padding = kanbanNode.padding || 10;\n let ticketUrl = \"\";\n let link;\n if (\"ticket\" in kanbanNode && kanbanNode.ticket && config?.kanban?.ticketBaseUrl) {\n ticketUrl = config?.kanban?.ticketBaseUrl.replace(\"#TICKET#\", kanbanNode.ticket);\n link = shapeSvg.insert(\"svg:a\", \":first-child\").attr(\"class\", \"kanban-ticket-link\").attr(\"xlink:href\", ticketUrl).attr(\"target\", \"_blank\");\n }\n const options = {\n useHtmlLabels: kanbanNode.useHtmlLabels,\n labelStyle: kanbanNode.labelStyle || \"\",\n width: kanbanNode.width,\n img: kanbanNode.img,\n padding: kanbanNode.padding || 8,\n centerLabel: false\n };\n let labelEl, bbox2;\n if (link) {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n link,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n } else {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n shapeSvg,\n \"ticket\" in kanbanNode && kanbanNode.ticket || \"\",\n options\n ));\n }\n const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel(\n shapeSvg,\n \"assigned\" in kanbanNode && kanbanNode.assigned || \"\",\n options\n );\n kanbanNode.width = orgWidth;\n const labelPaddingY = 10;\n const totalWidth = kanbanNode?.width || 0;\n const heightAdj = Math.max(bbox2.height, bboxAssigned.height) / 2;\n const totalHeight = Math.max(bbox.height + labelPaddingY * 2, kanbanNode?.height || 0) + heightAdj;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n labelElTitle.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj - bbox.height / 2) + \")\"\n );\n labelEl.attr(\n \"transform\",\n \"translate(\" + (padding - totalWidth / 2) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n labelElAssigned.attr(\n \"transform\",\n \"translate(\" + (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) + \", \" + (-heightAdj + bbox.height / 2) + \")\"\n );\n let rect2;\n const { rx, ry } = kanbanNode;\n const { cssStyles } = kanbanNode;\n if (kanbanNode.look === \"handDrawn\") {\n const rc = rough57.svg(shapeSvg);\n const options2 = userNodeOverrides(kanbanNode, {});\n const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options2) : rc.rectangle(x, y, totalWidth, totalHeight, options2);\n rect2 = shapeSvg.insert(() => roughNode, \":first-child\");\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", cssStyles ? cssStyles : null);\n } else {\n rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"class\", \"basic label-container __APA__\").attr(\"style\", nodeStyles).attr(\"rx\", rx ?? 5).attr(\"ry\", ry ?? 5).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n const priority = \"priority\" in kanbanNode && kanbanNode.priority;\n if (priority) {\n const line = shapeSvg.append(\"line\");\n const lineX = x + 2;\n const y1 = y + Math.floor((rx ?? 0) / 2);\n const y2 = y + totalHeight - Math.floor((rx ?? 0) / 2);\n line.attr(\"x1\", lineX).attr(\"y1\", y1).attr(\"x2\", lineX).attr(\"y2\", y2).attr(\"stroke-width\", \"4\").attr(\"stroke\", colorFromPriority(priority));\n }\n }\n updateNodeBounds(kanbanNode, rect2);\n kanbanNode.height = totalHeight;\n kanbanNode.intersect = function(point) {\n return intersect_default.rect(kanbanNode, point);\n };\n return shapeSvg;\n}\n__name(kanbanItem, \"kanbanItem\");\n\n// src/rendering-util/rendering-elements/shapes/bang.ts\nimport rough58 from \"roughjs\";\nasync function bang(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 10 * halfPadding;\n const h = bbox.height + 8 * halfPadding;\n const r = 0.15 * w;\n const { cssStyles } = node;\n const minWidth = bbox.width + 20;\n const minHeight = bbox.height + 20;\n const effectiveWidth = Math.max(w, minWidth);\n const effectiveHeight = Math.max(h, minHeight);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n let bangElem;\n const path = `M0 0 \n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${-1 * effectiveHeight * 0.1}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${effectiveHeight * 0.1}\n\n a${r},${r} 1 0,0 ${effectiveWidth * 0.15},${effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.15},${effectiveHeight * 0.33}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${effectiveHeight * 0.15}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${-1 * effectiveHeight * 0.15}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${-1 * effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough58.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n bangElem = shapeSvg.insert(() => roughNode, \":first-child\");\n bangElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n bangElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n bangElem.attr(\"transform\", `translate(${-effectiveWidth / 2}, ${-effectiveHeight / 2})`);\n updateNodeBounds(node, bangElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Bang intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(bang, \"bang\");\n\n// src/rendering-util/rendering-elements/shapes/cloud.ts\nimport rough59 from \"roughjs\";\nasync function cloud(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 2 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const r1 = 0.15 * w;\n const r2 = 0.25 * w;\n const r3 = 0.35 * w;\n const r4 = 0.2 * w;\n const { cssStyles } = node;\n let cloudElem;\n const path = `M0 0 \n a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1}\n a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1}\n a${r2},${r2} 1 0,1 ${w * 0.35},${w * 0.2}\n\n a${r1},${r1} 1 0,1 ${w * 0.15},${h * 0.35}\n a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${h * 0.65}\n\n a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15}\n a${r3},${r3} 1 0,1 ${-1 * w * 0.5},0\n a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15}\n\n a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35}\n a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65}\n H0 V0 Z`;\n if (node.look === \"handDrawn\") {\n const rc = rough59.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n cloudElem = shapeSvg.insert(() => roughNode, \":first-child\");\n cloudElem.attr(\"class\", \"basic label-container\").attr(\"style\", handleUndefinedAttr(cssStyles));\n } else {\n cloudElem = shapeSvg.insert(\"path\", \":first-child\").attr(\"class\", \"basic label-container\").attr(\"style\", nodeStyles).attr(\"d\", path);\n }\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n cloudElem.attr(\"transform\", `translate(${-w / 2}, ${-h / 2})`);\n updateNodeBounds(node, cloudElem);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n log.info(\"Cloud intersect\", node, point);\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(cloud, \"cloud\");\n\n// src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts\nasync function defaultMindmapNode(parent, node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const w = bbox.width + 8 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const rd = 5;\n const rectPath = `\n M${-w / 2} ${h / 2 - rd}\n v${-h + 2 * rd}\n q0,-${rd} ${rd},-${rd}\n h${w - 2 * rd}\n q${rd},0 ${rd},${rd}\n v${h - 2 * rd}\n q0,${rd} -${rd},${rd}\n h${-w + 2 * rd}\n q-${rd},0 -${rd},-${rd}\n Z\n `;\n const bg = shapeSvg.append(\"path\").attr(\"id\", \"node-\" + node.id).attr(\"class\", \"node-bkg node-\" + node.type).attr(\"style\", nodeStyles).attr(\"d\", rectPath);\n shapeSvg.append(\"line\").attr(\"class\", \"node-line-\").attr(\"x1\", -w / 2).attr(\"y1\", h / 2).attr(\"x2\", w / 2).attr(\"y2\", h / 2);\n label.attr(\"transform\", `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n shapeSvg.append(() => label.node());\n updateNodeBounds(node, bg);\n node.calcIntersect = function(bounds, point) {\n return intersect_default.rect(bounds, point);\n };\n node.intersect = function(point) {\n return intersect_default.rect(node, point);\n };\n return shapeSvg;\n}\n__name(defaultMindmapNode, \"defaultMindmapNode\");\n\n// src/rendering-util/rendering-elements/shapes/mindmapCircle.ts\nasync function mindmapCircle(parent, node) {\n const options = {\n padding: node.padding ?? 0\n };\n return circle(parent, node, options);\n}\n__name(mindmapCircle, \"mindmapCircle\");\n\n// src/rendering-util/rendering-elements/shapes.ts\nvar shapesDefs = [\n {\n semanticName: \"Process\",\n name: \"Rectangle\",\n shortName: \"rect\",\n description: \"Standard process shape\",\n aliases: [\"proc\", \"process\", \"rectangle\"],\n internalAliases: [\"squareRect\"],\n handler: squareRect2\n },\n {\n semanticName: \"Event\",\n name: \"Rounded Rectangle\",\n shortName: \"rounded\",\n description: \"Represents an event\",\n aliases: [\"event\"],\n internalAliases: [\"roundedRect\"],\n handler: roundedRect\n },\n {\n semanticName: \"Terminal Point\",\n name: \"Stadium\",\n shortName: \"stadium\",\n description: \"Terminal point\",\n aliases: [\"terminal\", \"pill\"],\n handler: stadium\n },\n {\n semanticName: \"Subprocess\",\n name: \"Framed Rectangle\",\n shortName: \"fr-rect\",\n description: \"Subprocess\",\n aliases: [\"subprocess\", \"subproc\", \"framed-rectangle\", \"subroutine\"],\n handler: subroutine\n },\n {\n semanticName: \"Database\",\n name: \"Cylinder\",\n shortName: \"cyl\",\n description: \"Database storage\",\n aliases: [\"db\", \"database\", \"cylinder\"],\n handler: cylinder\n },\n {\n semanticName: \"Start\",\n name: \"Circle\",\n shortName: \"circle\",\n description: \"Starting point\",\n aliases: [\"circ\"],\n handler: circle\n },\n {\n semanticName: \"Bang\",\n name: \"Bang\",\n shortName: \"bang\",\n description: \"Bang\",\n aliases: [\"bang\"],\n handler: bang\n },\n {\n semanticName: \"Cloud\",\n name: \"Cloud\",\n shortName: \"cloud\",\n description: \"cloud\",\n aliases: [\"cloud\"],\n handler: cloud\n },\n {\n semanticName: \"Decision\",\n name: \"Diamond\",\n shortName: \"diam\",\n description: \"Decision-making step\",\n aliases: [\"decision\", \"diamond\", \"question\"],\n handler: question\n },\n {\n semanticName: \"Prepare Conditional\",\n name: \"Hexagon\",\n shortName: \"hex\",\n description: \"Preparation or condition step\",\n aliases: [\"hexagon\", \"prepare\"],\n handler: hexagon\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Right\",\n shortName: \"lean-r\",\n description: \"Represents input or output\",\n aliases: [\"lean-right\", \"in-out\"],\n internalAliases: [\"lean_right\"],\n handler: lean_right\n },\n {\n semanticName: \"Data Input/Output\",\n name: \"Lean Left\",\n shortName: \"lean-l\",\n description: \"Represents output or input\",\n aliases: [\"lean-left\", \"out-in\"],\n internalAliases: [\"lean_left\"],\n handler: lean_left\n },\n {\n semanticName: \"Priority Action\",\n name: \"Trapezoid Base Bottom\",\n shortName: \"trap-b\",\n description: \"Priority action\",\n aliases: [\"priority\", \"trapezoid-bottom\", \"trapezoid\"],\n handler: trapezoid\n },\n {\n semanticName: \"Manual Operation\",\n name: \"Trapezoid Base Top\",\n shortName: \"trap-t\",\n description: \"Represents a manual task\",\n aliases: [\"manual\", \"trapezoid-top\", \"inv-trapezoid\"],\n internalAliases: [\"inv_trapezoid\"],\n handler: inv_trapezoid\n },\n {\n semanticName: \"Stop\",\n name: \"Double Circle\",\n shortName: \"dbl-circ\",\n description: \"Represents a stop point\",\n aliases: [\"double-circle\"],\n internalAliases: [\"doublecircle\"],\n handler: doublecircle\n },\n {\n semanticName: \"Text Block\",\n name: \"Text Block\",\n shortName: \"text\",\n description: \"Text block\",\n handler: text\n },\n {\n semanticName: \"Card\",\n name: \"Notched Rectangle\",\n shortName: \"notch-rect\",\n description: \"Represents a card\",\n aliases: [\"card\", \"notched-rectangle\"],\n handler: card\n },\n {\n semanticName: \"Lined/Shaded Process\",\n name: \"Lined Rectangle\",\n shortName: \"lin-rect\",\n description: \"Lined process shape\",\n aliases: [\"lined-rectangle\", \"lined-process\", \"lin-proc\", \"shaded-process\"],\n handler: shadedProcess\n },\n {\n semanticName: \"Start\",\n name: \"Small Circle\",\n shortName: \"sm-circ\",\n description: \"Small starting point\",\n aliases: [\"start\", \"small-circle\"],\n internalAliases: [\"stateStart\"],\n handler: stateStart\n },\n {\n semanticName: \"Stop\",\n name: \"Framed Circle\",\n shortName: \"fr-circ\",\n description: \"Stop point\",\n aliases: [\"stop\", \"framed-circle\"],\n internalAliases: [\"stateEnd\"],\n handler: stateEnd\n },\n {\n semanticName: \"Fork/Join\",\n name: \"Filled Rectangle\",\n shortName: \"fork\",\n description: \"Fork or join in process flow\",\n aliases: [\"join\"],\n internalAliases: [\"forkJoin\"],\n handler: forkJoin\n },\n {\n semanticName: \"Collate\",\n name: \"Hourglass\",\n shortName: \"hourglass\",\n description: \"Represents a collate operation\",\n aliases: [\"hourglass\", \"collate\"],\n handler: hourglass\n },\n {\n semanticName: \"Comment\",\n name: \"Curly Brace\",\n shortName: \"brace\",\n description: \"Adds a comment\",\n aliases: [\"comment\", \"brace-l\"],\n handler: curlyBraceLeft\n },\n {\n semanticName: \"Comment Right\",\n name: \"Curly Brace\",\n shortName: \"brace-r\",\n description: \"Adds a comment\",\n handler: curlyBraceRight\n },\n {\n semanticName: \"Comment with braces on both sides\",\n name: \"Curly Braces\",\n shortName: \"braces\",\n description: \"Adds a comment\",\n handler: curlyBraces\n },\n {\n semanticName: \"Com Link\",\n name: \"Lightning Bolt\",\n shortName: \"bolt\",\n description: \"Communication link\",\n aliases: [\"com-link\", \"lightning-bolt\"],\n handler: lightningBolt\n },\n {\n semanticName: \"Document\",\n name: \"Document\",\n shortName: \"doc\",\n description: \"Represents a document\",\n aliases: [\"doc\", \"document\"],\n handler: waveEdgedRectangle\n },\n {\n semanticName: \"Delay\",\n name: \"Half-Rounded Rectangle\",\n shortName: \"delay\",\n description: \"Represents a delay\",\n aliases: [\"half-rounded-rectangle\"],\n handler: halfRoundedRectangle\n },\n {\n semanticName: \"Direct Access Storage\",\n name: \"Horizontal Cylinder\",\n shortName: \"h-cyl\",\n description: \"Direct access storage\",\n aliases: [\"das\", \"horizontal-cylinder\"],\n handler: tiltedCylinder\n },\n {\n semanticName: \"Disk Storage\",\n name: \"Lined Cylinder\",\n shortName: \"lin-cyl\",\n description: \"Disk storage\",\n aliases: [\"disk\", \"lined-cylinder\"],\n handler: linedCylinder\n },\n {\n semanticName: \"Display\",\n name: \"Curved Trapezoid\",\n shortName: \"curv-trap\",\n description: \"Represents a display\",\n aliases: [\"curved-trapezoid\", \"display\"],\n handler: curvedTrapezoid\n },\n {\n semanticName: \"Divided Process\",\n name: \"Divided Rectangle\",\n shortName: \"div-rect\",\n description: \"Divided process shape\",\n aliases: [\"div-proc\", \"divided-rectangle\", \"divided-process\"],\n handler: dividedRectangle\n },\n {\n semanticName: \"Extract\",\n name: \"Triangle\",\n shortName: \"tri\",\n description: \"Extraction process\",\n aliases: [\"extract\", \"triangle\"],\n handler: triangle\n },\n {\n semanticName: \"Internal Storage\",\n name: \"Window Pane\",\n shortName: \"win-pane\",\n description: \"Internal storage\",\n aliases: [\"internal-storage\", \"window-pane\"],\n handler: windowPane\n },\n {\n semanticName: \"Junction\",\n name: \"Filled Circle\",\n shortName: \"f-circ\",\n description: \"Junction point\",\n aliases: [\"junction\", \"filled-circle\"],\n handler: filledCircle\n },\n {\n semanticName: \"Loop Limit\",\n name: \"Trapezoidal Pentagon\",\n shortName: \"notch-pent\",\n description: \"Loop limit step\",\n aliases: [\"loop-limit\", \"notched-pentagon\"],\n handler: trapezoidalPentagon\n },\n {\n semanticName: \"Manual File\",\n name: \"Flipped Triangle\",\n shortName: \"flip-tri\",\n description: \"Manual file operation\",\n aliases: [\"manual-file\", \"flipped-triangle\"],\n handler: flippedTriangle\n },\n {\n semanticName: \"Manual Input\",\n name: \"Sloped Rectangle\",\n shortName: \"sl-rect\",\n description: \"Manual input step\",\n aliases: [\"manual-input\", \"sloped-rectangle\"],\n handler: slopedRect\n },\n {\n semanticName: \"Multi-Document\",\n name: \"Stacked Document\",\n shortName: \"docs\",\n description: \"Multiple documents\",\n aliases: [\"documents\", \"st-doc\", \"stacked-document\"],\n handler: multiWaveEdgedRectangle\n },\n {\n semanticName: \"Multi-Process\",\n name: \"Stacked Rectangle\",\n shortName: \"st-rect\",\n description: \"Multiple processes\",\n aliases: [\"procs\", \"processes\", \"stacked-rectangle\"],\n handler: multiRect\n },\n {\n semanticName: \"Stored Data\",\n name: \"Bow Tie Rectangle\",\n shortName: \"bow-rect\",\n description: \"Stored data\",\n aliases: [\"stored-data\", \"bow-tie-rectangle\"],\n handler: bowTieRect\n },\n {\n semanticName: \"Summary\",\n name: \"Crossed Circle\",\n shortName: \"cross-circ\",\n description: \"Summary\",\n aliases: [\"summary\", \"crossed-circle\"],\n handler: crossedCircle\n },\n {\n semanticName: \"Tagged Document\",\n name: \"Tagged Document\",\n shortName: \"tag-doc\",\n description: \"Tagged document\",\n aliases: [\"tag-doc\", \"tagged-document\"],\n handler: taggedWaveEdgedRectangle\n },\n {\n semanticName: \"Tagged Process\",\n name: \"Tagged Rectangle\",\n shortName: \"tag-rect\",\n description: \"Tagged process\",\n aliases: [\"tagged-rectangle\", \"tag-proc\", \"tagged-process\"],\n handler: taggedRect\n },\n {\n semanticName: \"Paper Tape\",\n name: \"Flag\",\n shortName: \"flag\",\n description: \"Paper tape\",\n aliases: [\"paper-tape\"],\n handler: waveRectangle\n },\n {\n semanticName: \"Odd\",\n name: \"Odd\",\n shortName: \"odd\",\n description: \"Odd shape\",\n internalAliases: [\"rect_left_inv_arrow\"],\n handler: rect_left_inv_arrow\n },\n {\n semanticName: \"Lined Document\",\n name: \"Lined Document\",\n shortName: \"lin-doc\",\n description: \"Lined document\",\n aliases: [\"lined-document\"],\n handler: linedWaveEdgedRect\n }\n];\nvar generateShapeMap = /* @__PURE__ */ __name(() => {\n const undocumentedShapes = {\n // States\n state,\n choice,\n note,\n // Rectangles\n rectWithTitle,\n labelRect,\n // Icons\n iconSquare,\n iconCircle,\n icon,\n iconRounded,\n imageSquare,\n anchor,\n // Kanban diagram\n kanbanItem,\n //Mindmap diagram\n mindmapCircle,\n defaultMindmapNode,\n // class diagram\n classBox,\n // er diagram\n erBox,\n // Requirement diagram\n requirementBox\n };\n const entries = [\n ...Object.entries(undocumentedShapes),\n ...shapesDefs.flatMap((shape) => {\n const aliases = [\n shape.shortName,\n ...\"aliases\" in shape ? shape.aliases : [],\n ...\"internalAliases\" in shape ? shape.internalAliases : []\n ];\n return aliases.map((alias) => [alias, shape.handler]);\n })\n ];\n return Object.fromEntries(entries);\n}, \"generateShapeMap\");\nvar shapes2 = generateShapeMap();\nfunction isValidShape(shape) {\n return shape in shapes2;\n}\n__name(isValidShape, \"isValidShape\");\n\n// src/rendering-util/rendering-elements/nodes.ts\nvar nodeElems = /* @__PURE__ */ new Map();\nasync function insertNode(elem, node, renderOptions) {\n let newEl;\n let el;\n if (node.shape === \"rect\") {\n if (node.rx && node.ry) {\n node.shape = \"roundedRect\";\n } else {\n node.shape = \"squareRect\";\n }\n }\n const shapeHandler = node.shape ? shapes2[node.shape] : void 0;\n if (!shapeHandler) {\n throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n }\n if (node.link) {\n let target;\n if (renderOptions.config.securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target ?? null);\n el = await shapeHandler(newEl, node, renderOptions);\n } else {\n el = await shapeHandler(elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n nodeElems.set(node.id, newEl);\n if (node.haveCallback) {\n newEl.attr(\"class\", newEl.attr(\"class\") + \" clickable\");\n }\n return newEl;\n}\n__name(insertNode, \"insertNode\");\nvar setNodeElem = /* @__PURE__ */ __name((elem, node) => {\n nodeElems.set(node.id, elem);\n}, \"setNodeElem\");\nvar clear2 = /* @__PURE__ */ __name(() => {\n nodeElems.clear();\n}, \"clear\");\nvar positionNode = /* @__PURE__ */ __name((node) => {\n const el = nodeElems.get(node.id);\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n}, \"positionNode\");\n\nexport {\n labelHelper,\n updateNodeBounds,\n createLabel_default,\n isValidShape,\n insertCluster,\n clear,\n insertNode,\n setNodeElem,\n clear2,\n positionNode\n};\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;AAoCA,IAAI,IAA8B,kBAAO,OAAO,GAAQ,GAAM,MAAa;CACzE,IAAI,GACE,IAAgB,EAAK,iBAAiB,EAAS,GAAY,EAAE,WAAW;AAC9E,CACE,IADG,KACU;CAIf,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACzF,IAAU,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,QAAQ,CAAC,KAAK,SAAS,EAAoB,EAAK,WAAW,CAAC,EAC3G;AACJ,CAGE,IAHE,EAAK,UAAU,KAAK,IACd,KAEA,OAAO,EAAK,SAAU,WAAW,EAAK,QAAQ,EAAK,MAAM;CAEnE,IAAM,IAAgB,CAAC,CAAC,EAAK,QAAQ,CAAC,CAAC,EAAK,KACtC,IAAa,EAAK,cAAc,YAChC,IAAQ,MAAM,EAClB,GACA,EAAa,EAAe,EAAM,EAAE,GAAY,CAAC,EACjD;EACE;EACA,OAAO,EAAK,SAAS,GAAY,CAAC,WAAW;EAE7C,YAAY,IAAa,wBAAwB,KAAK;EACtD,OAAO,EAAK;EACZ,kBAAkB;EAClB,UAAU;EACX,EACD,GAAY,CACb,EACG,IAAO,EAAM,SAAS,EACpB,KAAe,GAAM,WAAW,KAAK;AAC3C,KAAI,GAAe;EACjB,IAAM,IAAM,EAAM,SAAS,IACrB,IAAKA,EAAO,EAAM;AAIxB,EAHA,MAAM,EAAqB,GAAK,EAAM,EACtC,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;;AAWhC,QATI,IACF,EAAQ,KAAK,aAAa,eAAe,CAAC,EAAK,QAAQ,IAAI,OAAO,CAAC,EAAK,SAAS,IAAI,IAAI,GAEzF,EAAQ,KAAK,aAAa,kBAAkB,CAAC,EAAK,SAAS,IAAI,IAAI,EAEjE,EAAK,eACP,EAAQ,KAAK,aAAa,eAAe,CAAC,EAAK,QAAQ,IAAI,OAAO,CAAC,EAAK,SAAS,IAAI,IAAI,EAE3F,EAAQ,OAAO,QAAQ,eAAe,EAC/B;EAAE;EAAU;EAAM;EAAa,OAAO;EAAS;GACrD,cAAc,EACb,IAA8B,kBAAO,OAAO,GAAQ,GAAO,MAAY;CACzE,IAAM,IAAgB,EAAQ,iBAAiB,EAAuB,GAAY,CAAC,EAC7E,IAAU,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,QAAQ,CAAC,KAAK,SAAS,EAAQ,cAAc,GAAG,EAC3F,IAAQ,MAAM,EAAW,GAAS,EAAa,EAAe,EAAM,EAAE,GAAY,CAAC,EAAE;EACzF;EACA,OAAO,EAAQ,SAAS,GAAY,EAAE,WAAW;EACjD,OAAO,EAAQ;EACf,kBAAkB,CAAC,CAAC,EAAQ,QAAQ,CAAC,CAAC,EAAQ;EAC/C,CAAC,EACE,IAAO,EAAM,SAAS,EACpB,IAAc,EAAQ,UAAU;AACtC,KAAI,EAAuB,GAAY,CAAC,EAAE;EACxC,IAAM,IAAM,EAAM,SAAS,IACrB,IAAKA,EAAO,EAAM;AAGxB,EAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;;AAWhC,QATI,IACF,EAAQ,KAAK,aAAa,eAAe,CAAC,EAAK,QAAQ,IAAI,OAAO,CAAC,EAAK,SAAS,IAAI,IAAI,GAEzF,EAAQ,KAAK,aAAa,kBAAkB,CAAC,EAAK,SAAS,IAAI,IAAI,EAEjE,EAAQ,eACV,EAAQ,KAAK,aAAa,eAAe,CAAC,EAAK,QAAQ,IAAI,OAAO,CAAC,EAAK,SAAS,IAAI,IAAI,EAE3F,EAAQ,OAAO,QAAQ,eAAe,EAC/B;EAAE,UAAU;EAAQ;EAAM;EAAa,OAAO;EAAS;GAC7D,cAAc,EACb,IAAmC,mBAAQ,GAAM,MAAY;CAC/D,IAAM,IAAO,EAAQ,MAAM,CAAC,SAAS;AAErC,CADA,EAAK,QAAQ,EAAK,OAClB,EAAK,SAAS,EAAK;GAClB,mBAAmB,EAClB,IAAiC,mBAAQ,GAAM,OAAW,EAAK,SAAS,cAAc,eAAe,UAAU,MAAM,EAAK,aAAa,OAAO,KAAS,KAAK,iBAAiB;AACjL,SAAS,EAAqB,GAAQ;CACpC,IAAM,IAAe,EAAO,KAAK,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI;AAEhF,QADA,EAAa,KAAK,IAAI,EACf,EAAa,KAAK,IAAI;;AAE/B,EAAO,GAAsB,uBAAuB;AACpD,SAAS,EAA2B,GAAI,GAAI,GAAI,GAAI,GAAW,GAAW;CACxE,IAAM,IAAS,EAAE,EAEX,IAAS,IAAK,GACd,IAAS,IAAK,GACd,IAAc,IAAS,GACvB,IAAY,IAAI,KAAK,KAAK,GAC1B,IAAO,IAAK,IAAS;AAC3B,MAAK,IAAI,IAAI,GAAG,KAAK,IAAO,KAAK;EAE/B,IAAM,IAAI,IADA,IAAI,KACK,GACb,IAAI,IAAO,IAAY,KAAK,IAAI,KAAa,IAAI,GAAI;AAC3D,IAAO,KAAK;GAAE;GAAG;GAAG,CAAC;;AAEvB,QAAO;;AAET,EAAO,GAA4B,6BAA6B;AAChE,SAAS,EAAqB,GAAS,GAAS,GAAQ,GAAW,GAAY,GAAU;CACvF,IAAM,IAAS,EAAE,EACX,IAAgB,IAAa,KAAK,KAAK,KAGvC,KAFc,IAAW,KAAK,KAAK,MACR,MACD,IAAY;AAC5C,MAAK,IAAI,IAAI,GAAG,IAAI,GAAW,KAAK;EAClC,IAAM,IAAQ,IAAgB,IAAI,GAC5B,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM,EACtC,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM;AAC5C,IAAO,KAAK;GAAE,GAAG,CAAC;GAAG,GAAG,CAAC;GAAG,CAAC;;AAE/B,QAAO;;AAET,EAAO,GAAsB,uBAAuB;AA8BpD,IAAI,IAvBgC,mBAAQ,GAAM,MAAU;CAC1D,IAAI,IAAI,EAAK,GACT,IAAI,EAAK,GACT,IAAK,EAAM,IAAI,GACf,IAAK,EAAM,IAAI,GACf,IAAI,EAAK,QAAQ,GACjB,IAAI,EAAK,SAAS,GAClB,GAAI;AAcR,QAbI,KAAK,IAAI,EAAG,GAAG,IAAI,KAAK,IAAI,EAAG,GAAG,KAChC,IAAK,MACP,IAAI,CAAC,IAEP,IAAK,MAAO,IAAI,IAAI,IAAI,IAAK,GAC7B,IAAK,MAED,IAAK,MACP,IAAI,CAAC,IAEP,IAAK,GACL,IAAK,MAAO,IAAI,IAAI,IAAI,IAAK,IAExB;EAAE,GAAG,IAAI;EAAI,GAAG,IAAI;EAAI;GAC9B,gBAAgB,EAyBf,IArB8B,kBAAO,OAAO,GAAS,GAAa,GAAO,IAAU,IAAO,IAAS,OAAU;CAC/G,IAAI,IAAa,KAAe;AAChC,CAAI,OAAO,KAAe,aACxB,IAAa,EAAW;CAE1B,IAAM,IAAS,GAAY,EACrB,IAAgB,EAAuB,EAAO;AACpD,QAAO,MAAM,EACX,GACA,GACA;EACE;EACA;EACA;EACA,UAAU;EACV;EACA,OAAO;EACR,EACD,EACD;GACA,cAAc,EAIb,IAAyC,mBAAQ,GAAG,GAAG,GAAY,GAAa,MAAW;CAC7F;CACA,IAAI;CACJ;CAEA;CACA,IAAI,IAAa;CAEjB;CACA;CACA;CACA;CACA;CACA;CACA,IAAI;CACJ,IAAI;CAEJ;CACA,IAAI,IAAc;CAElB;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,IAAa;CACjB,IAAI;CAEJ;CACA,IAAI;CAEJ;CACA;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,IAAc;CAElB;CACA,IAAI;CAEJ;CACA;CACA;CACA;CACA;CACA;CACA,IAAI;CACJ;CAEA;CAED,CAAC,KAAK,IAAI,EAAE,yBAAyB,EAGlC,IAAuB,kBAAO,OAAO,GAAQ,MAAS;AACxD,GAAI,KAAK,+BAA+B,EAAK,IAAI,EAAK;CACtD,IAAM,IAAa,GAAY,EACzB,EAAE,mBAAgB,qBAAkB,GACpC,EAAE,eAAY,qBAAkB,GAChC,EAAE,gBAAa,eAAY,iBAAc,wBAAqB,EAAc,EAAK,EACjF,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,aAAa,EAAK,WAAW,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,aAAa,EAAK,KAAK,EAC1H,IAAgB,EAAuB,EAAW,EAClD,IAAU,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,iBAAiB,EAChE;AACJ,CAQE,IARE,EAAK,cAAc,aACb,MAAM,EAAW,GAAS,EAAK,OAAO;EAC5C,OAAO,EAAK;EACZ;EACA,QAAQ;EACR,OAAO,EAAK;EACb,CAAC,GAEM,MAAM,EAAoB,GAAS,EAAK,OAAO,EAAK,cAAc,IAAI,IAAO,GAAK;CAE5F,IAAI,IAAO,EAAM,SAAS;AAC1B,KAAI,EAAuB,EAAW,EAAE;EACtC,IAAM,IAAM,EAAM,SAAS,IACrB,IAAKC,EAAQ,EAAM;AAGzB,EAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;;CAEhC,IAAM,IAAQ,EAAK,SAAS,EAAK,QAAQ,EAAK,UAAU,EAAK,QAAQ,EAAK,UAAU,EAAK;AACzF,CAAI,EAAK,SAAS,EAAK,QAAQ,EAAK,UAClC,EAAK,QAAQ,IAAQ,EAAK,SAAS,IAAI,EAAK,UAE5C,EAAK,OAAO,CAAC,EAAK;CAEpB,IAAM,IAAS,EAAK,QACd,IAAI,EAAK,IAAI,IAAQ,GACrB,IAAI,EAAK,IAAI,IAAS;AAC5B,GAAI,MAAM,SAAS,GAAM,KAAK,UAAU,EAAK,CAAC;CAC9C,IAAI;AACJ,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAM,IAAI,EAAS,EACxB,IAAU,EAAkB,GAAM;GACtC,WAAW;GACX,MAAM;GAEN,QAAQ;GACR,YAAY;GACZ,MAAM;GACP,CAAC,EACI,IAAY,EAAG,KAAK,EAAuB,GAAG,GAAG,GAAO,GAAQ,EAAE,EAAE,EAAQ;AAMlF,EALA,IAAQ,EAAS,cACf,EAAI,MAAM,yBAAyB,EAAU,EACtC,IACN,eAAe,EAClB,EAAM,OAAO,oBAAoB,CAAC,KAAK,SAAS,EAAa,KAAK,IAAI,CAAC,EACvE,EAAM,OAAO,OAAO,CAAC,KAAK,SAAS,EAAiB,KAAK,IAAI,CAAC,QAAQ,QAAQ,SAAS,CAAC;OAGxF,CADA,IAAQ,EAAS,OAAO,QAAQ,eAAe,EAC/C,EAAM,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,EAAM,CAAC,KAAK,UAAU,EAAO;CAE/I,IAAM,EAAE,8BAA2B,EAAwB,EAAW;AAMtE,KALA,EAAQ,KACN,aAEA,aAAa,EAAK,IAAI,EAAK,QAAQ,EAAE,IAAI,EAAK,IAAI,EAAK,SAAS,IAAI,EAAuB,GAC5F,EACG,GAAa;EACf,IAAM,IAAO,EAAQ,OAAO,OAAO;AACnC,EAAI,KACF,EAAK,KAAK,SAAS,EAAY;;CAGnC,IAAM,IAAU,EAAM,MAAM,CAAC,SAAS;AAQtC,QAPA,EAAK,UAAU,GACf,EAAK,QAAQ,EAAQ,OACrB,EAAK,SAAS,EAAQ,QACtB,EAAK,UAAU,EAAK,SAAS,EAAK,UAAU,GAC5C,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAuB,GAAM,EAAM;IAErC;EAAE,SAAS;EAAU,WAAW;EAAM;GAC5C,OAAO,EA0MN,IAAS;CACX;CACA,YAHe;CAIf,kBA9LqC,kBAAO,OAAO,GAAQ,MAAS;EACpE,IAAM,IAAa,GAAY,EACzB,EAAE,mBAAgB,qBAAkB,GACpC,EAAE,kBAAe,wBAAqB,6BAA0B,kBAAe,GAC/E,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAK,WAAW,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,WAAW,EAAK,GAAG,CAAC,KAAK,aAAa,EAAK,KAAK,EACtI,IAAa,EAAS,OAAO,KAAK,eAAe,EACjD,IAAQ,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,gBAAgB,EAC7D,IAAY,EAAS,OAAO,OAAO,EACjC,IAAQ,MAAM,EAAoB,GAAO,EAAK,OAAO,EAAK,YAAY,KAAK,GAAG,GAAK,EACrF,IAAO,EAAM,SAAS;AAC1B,MAAI,EAAuB,EAAW,EAAE;GACtC,IAAM,IAAM,EAAM,SAAS,IACrB,IAAKD,EAAQ,EAAM;AAGzB,GAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;;EAEhC,IAAM,IAAU,IAAI,EAAK,SACnB,IAAc,IAAU,GACxB,KAAS,EAAK,SAAS,EAAK,QAAQ,EAAK,UAAU,EAAK,QAAQ,EAAK,UAAU,EAAK,SAAS;AACnG,EAAI,EAAK,SAAS,EAAK,QAAQ,EAAK,UAClC,EAAK,QAAQ,IAAQ,EAAK,SAAS,IAAI,EAAK,UAE5C,EAAK,OAAO,CAAC,EAAK;EAEpB,IAAM,IAAS,EAAK,SAAS,GACvB,IAAc,EAAK,SAAS,IAAU,EAAK,SAAS,GACpD,IAAI,EAAK,IAAI,IAAQ,GACrB,IAAI,EAAK,IAAI,IAAS;AAC5B,IAAK,QAAQ;EACb,IAAM,IAAS,EAAK,IAAI,EAAK,SAAS,IAAI,IAAc,EAAK,SAAS,GAClE;AACJ,MAAI,EAAK,SAAS,aAAa;GAC7B,IAAM,IAAQ,EAAK,WAAW,SAAS,2BAA2B,EAC5D,IAAKC,EAAM,IAAI,EAAS,EACxB,IAAiB,EAAK,MAAM,EAAK,KAAK,EAAG,KAAK,EAAuB,GAAG,GAAG,GAAO,GAAQ,GAAG,EAAE;IACnG,WAAW;IACX,MAAM;IACN,WAAW;IACX,QAAQ;IACR,MAAM;IACP,CAAC,GAAG,EAAG,UAAU,GAAG,GAAG,GAAO,GAAQ,EAAE,MAAM,GAAe,CAAC;AAC/D,OAAQ,EAAS,aAAa,GAAgB,eAAe;GAC7D,IAAM,IAAiB,EAAG,UAAU,GAAG,GAAQ,GAAO,GAAa;IACjE,MAAM,IAAQ,IAAgB;IAC9B,WAAW,IAAQ,YAAY;IAC/B,QAAQ;IACR,MAAM;IACP,CAAC;AAEF,GADA,IAAQ,EAAS,aAAa,GAAgB,eAAe,EAC7D,IAAY,EAAS,aAAa,EAAe;QAKjD,CAHA,IAAQ,EAAW,OAAO,QAAQ,eAAe,EAEjD,EAAM,KAAK,SADY,QACY,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,EAAM,CAAC,KAAK,UAAU,EAAO,CAAC,KAAK,aAAa,EAAK,KAAK,EACtI,EAAU,KAAK,SAAS,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAO,CAAC,KAAK,SAAS,EAAM,CAAC,KAAK,UAAU,EAAY;AAclH,SAZA,EAAM,KACJ,aACA,aAAa,EAAK,IAAI,EAAK,QAAQ,EAAE,IAAI,IAAI,KAAK,EAAuB,EAAW,GAAG,IAAI,GAAG,GAC/F,EAED,EAAK,SADW,EAAM,MAAM,CAAC,SAAS,CAChB,QACtB,EAAK,UAAU,GACf,EAAK,UAAU,EAAK,SAAS,EAAK,UAAU,GAC5C,EAAK,YAAY,GACjB,EAAK,YAAY,SAAS,GAAO;AAC/B,UAAO,EAAuB,GAAM,EAAM;KAErC;GAAE,SAAS;GAAU,WAAW;GAAM;IAC5C,mBAAmB;CAyHpB,WA7M8B,mBAAQ,GAAQ,MAAS;EACvD,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,eAAe,CAAC,KAAK,MAAM,EAAK,GAAG,EAC/E,IAAQ,EAAS,OAAO,QAAQ,eAAe,EAC/C,IAAU,IAAI,EAAK,SACnB,IAAc,IAAU;AAC9B,IAAM,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,KAAK,EAAK,IAAI,EAAK,QAAQ,IAAI,EAAY,CAAC,KAAK,KAAK,EAAK,IAAI,EAAK,SAAS,IAAI,EAAY,CAAC,KAAK,SAAS,EAAK,QAAQ,EAAQ,CAAC,KAAK,UAAU,EAAK,SAAS,EAAQ,CAAC,KAAK,QAAQ,OAAO;EAC/O,IAAM,IAAU,EAAM,MAAM,CAAC,SAAS;AAMtC,SALA,EAAK,QAAQ,EAAQ,OACrB,EAAK,SAAS,EAAQ,QACtB,EAAK,YAAY,SAAS,GAAO;AAC/B,UAAO,EAAuB,GAAM,EAAM;KAErC;GAAE,SAAS;GAAU,WAAW;IAAE,OAAO;IAAG,QAAQ;IAAG;GAAE;IAC/D,YAAY;CAiMb,SA5C4B,mBAAQ,GAAQ,MAAS;EAErD,IAAM,EAAE,mBAAgB,qBADL,GAAY,EAEzB,EAAE,kBAAe,GACjB,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAK,WAAW,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,aAAa,EAAK,KAAK,EAC7G,IAAa,EAAS,OAAO,KAAK,eAAe,EACjD,IAAU,IAAI,EAAK,SACnB,IAAQ,EAAK,QAAQ;AAC3B,IAAK,OAAO,CAAC,EAAK;EAClB,IAAM,IAAS,EAAK,SAAS,GACvB,IAAI,EAAK,IAAI,IAAQ,GACrB,IAAI,EAAK,IAAI,IAAS;AAC5B,IAAK,QAAQ;EACb,IAAI;AACJ,MAAI,EAAK,SAAS,aAAa;GAE7B,IAAM,IADKA,EAAM,IAAI,EAAS,CACJ,UAAU,GAAG,GAAG,GAAO,GAAQ;IACvD,MAAM;IACN,WAAW;IACX,gBAAgB,CAAC,EAAE;IACnB,QAAQ;IACR,MAAM;IACP,CAAC;AACF,OAAQ,EAAS,aAAa,GAAgB,eAAe;QAI7D,CAFA,IAAQ,EAAW,OAAO,QAAQ,eAAe,EAEjD,EAAM,KAAK,SADY,UACY,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,EAAM,CAAC,KAAK,UAAU,EAAO,CAAC,KAAK,aAAa,EAAK,KAAK;AASxI,SANA,EAAK,SADW,EAAM,MAAM,CAAC,SAAS,CAChB,QACtB,EAAK,UAAU,GACf,EAAK,UAAU,GACf,EAAK,YAAY,SAAS,GAAO;AAC/B,UAAO,EAAuB,GAAM,EAAM;KAErC;GAAE,SAAS;GAAU,WAAW,EAAE;GAAE;IAC1C,UAAU;CAQX,eA1HkC,kBAAO,OAAO,GAAQ,MAAS;AACjE,IAAI,KAAK,+BAA+B,EAAK,IAAI,EAAK;EACtD,IAAM,IAAa,GAAY,EACzB,EAAE,mBAAgB,qBAAkB,GACpC,EAAE,eAAY,qBAAkB,GAChC,EAAE,gBAAa,eAAY,iBAAc,wBAAqB,EAAc,EAAK,EACjF,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,aAAa,EAAK,WAAW,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,aAAa,EAAK,KAAK,EAC1H,IAAgB,EAAuB,EAAW,EAClD,IAAU,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,iBAAiB,EAC9D,IAAQ,MAAM,EAAW,GAAS,EAAK,OAAO;GAClD,OAAO,EAAK;GACZ;GACA,QAAQ;GACR,OAAO,EAAK;GACb,CAAC,EACE,IAAO,EAAM,SAAS;AAC1B,MAAI,EAAuB,EAAW,EAAE;GACtC,IAAM,IAAM,EAAM,SAAS,IACrB,IAAKD,EAAQ,EAAM;AAGzB,GAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;;EAEhC,IAAM,IAAQ,EAAK,SAAS,EAAK,QAAQ,EAAK,UAAU,EAAK,QAAQ,EAAK,UAAU,EAAK;AACzF,EAAI,EAAK,SAAS,EAAK,QAAQ,EAAK,UAClC,EAAK,QAAQ,IAAQ,EAAK,SAAS,IAAI,EAAK,UAE5C,EAAK,OAAO,CAAC,EAAK;EAEpB,IAAM,IAAS,EAAK,QACd,IAAI,EAAK,IAAI,IAAQ,GACrB,IAAI,EAAK,IAAI,IAAS;AAC5B,IAAI,MAAM,SAAS,GAAM,KAAK,UAAU,EAAK,CAAC;EAC9C,IAAI;AACJ,MAAI,EAAK,SAAS,aAAa;GAC7B,IAAM,IAAKC,EAAM,IAAI,EAAS,EACxB,IAAU,EAAkB,GAAM;IACtC,WAAW;IACX,MAAM;IAEN,QAAQ;IACR,YAAY;IACZ,MAAM;IACP,CAAC,EACI,IAAY,EAAG,KAAK,EAAuB,GAAG,GAAG,GAAO,GAAQ,EAAK,GAAG,EAAE,EAAQ;AAMxF,GALA,IAAQ,EAAS,cACf,EAAI,MAAM,yBAAyB,EAAU,EACtC,IACN,eAAe,EAClB,EAAM,OAAO,oBAAoB,CAAC,KAAK,SAAS,EAAa,KAAK,IAAI,CAAC,EACvE,EAAM,OAAO,OAAO,CAAC,KAAK,SAAS,EAAiB,KAAK,IAAI,CAAC,QAAQ,QAAQ,SAAS,CAAC;QAGxF,CADA,IAAQ,EAAS,OAAO,QAAQ,eAAe,EAC/C,EAAM,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,MAAM,EAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,EAAM,CAAC,KAAK,UAAU,EAAO;EAE/I,IAAM,EAAE,8BAA2B,EAAwB,EAAW;AAMtE,MALA,EAAQ,KACN,aAEA,aAAa,EAAK,IAAI,EAAK,QAAQ,EAAE,IAAI,EAAK,IAAI,EAAK,SAAS,IAAI,EAAuB,GAC5F,EACG,GAAa;GACf,IAAM,IAAO,EAAQ,OAAO,OAAO;AACnC,GAAI,KACF,EAAK,KAAK,SAAS,EAAY;;EAGnC,IAAM,IAAU,EAAM,MAAM,CAAC,SAAS;AAQtC,SAPA,EAAK,UAAU,GACf,EAAK,QAAQ,EAAQ,OACrB,EAAK,SAAS,EAAQ,QACtB,EAAK,UAAU,EAAK,SAAS,EAAK,UAAU,GAC5C,EAAK,YAAY,SAAS,GAAO;AAC/B,UAAO,EAAuB,GAAM,EAAM;KAErC;GAAE,SAAS;GAAU,WAAW;GAAM;IAC5C,gBAAgB;CA+ClB,EACG,oBAA+B,IAAI,KAAK,EACxC,IAAgC,kBAAO,OAAO,GAAM,MAAS;CAE/D,IAAM,IAAU,MAAM,EADR,EAAK,SAAS,QACQ,GAAM,EAAK;AAE/C,QADA,EAAa,IAAI,EAAK,IAAI,EAAQ,EAC3B;GACN,gBAAgB,EACf,IAAwB,wBAAa;AACvC,qBAA+B,IAAI,KAAK;GACvC,QAAQ;AAGX,SAAS,EAAc,GAAM,GAAO;AAClC,QAAO,EAAK,UAAU,EAAM;;AAE9B,EAAO,GAAe,gBAAgB;AACtC,IAAI,IAAyB;AAG7B,SAAS,EAAiB,GAAM,GAAI,GAAI,GAAO;CAC7C,IAAI,IAAK,EAAK,GACV,IAAK,EAAK,GACV,IAAK,IAAK,EAAM,GAChB,IAAK,IAAK,EAAM,GAChB,IAAM,KAAK,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EACtD,IAAK,KAAK,IAAI,IAAK,IAAK,IAAK,EAAI;AACrC,CAAI,EAAM,IAAI,MACZ,IAAK,CAAC;CAER,IAAI,IAAK,KAAK,IAAI,IAAK,IAAK,IAAK,EAAI;AAIrC,QAHI,EAAM,IAAI,MACZ,IAAK,CAAC,IAED;EAAE,GAAG,IAAK;EAAI,GAAG,IAAK;EAAI;;AAEnC,EAAO,GAAkB,mBAAmB;AAC5C,IAAI,IAA4B;AAGhC,SAAS,GAAgB,GAAM,GAAI,GAAO;AACxC,QAAO,EAA0B,GAAM,GAAI,GAAI,EAAM;;AAEvD,EAAO,IAAiB,kBAAkB;AAC1C,IAAI,KAA2B;AAG/B,SAAS,GAAc,GAAI,GAAI,GAAI,GAAI;CACrC;EACE,IAAM,IAAK,EAAG,IAAI,EAAG,GACf,IAAK,EAAG,IAAI,EAAG,GACf,IAAK,EAAG,IAAI,EAAG,IAAI,EAAG,IAAI,EAAG,GAC7B,IAAK,IAAK,EAAG,IAAI,IAAK,EAAG,IAAI,GAC7B,IAAK,IAAK,EAAG,IAAI,IAAK,EAAG,IAAI,GAC7B,IAAU;AAChB,MAAI,MAAO,KAAK,MAAO,KAAK,EAAS,GAAI,EAAG,CAC1C;EAEF,IAAM,IAAK,EAAG,IAAI,EAAG,GACf,IAAK,EAAG,IAAI,EAAG,GACf,IAAK,EAAG,IAAI,EAAG,IAAI,EAAG,IAAI,EAAG,GAC7B,IAAK,IAAK,EAAG,IAAI,IAAK,EAAG,IAAI,GAC7B,IAAK,IAAK,EAAG,IAAI,IAAK,EAAG,IAAI;AACnC,MAAI,KAAK,IAAI,EAAG,GAAG,KAAW,KAAK,IAAI,EAAG,GAAG,KAAW,EAAS,GAAI,EAAG,CACtE;EAEF,IAAM,IAAQ,IAAK,IAAK,IAAK;AAC7B,MAAI,MAAU,EACZ;EAEF,IAAM,IAAS,KAAK,IAAI,IAAQ,EAAE,EAC9B,IAAM,IAAK,IAAK,IAAK,GACnB,IAAI,IAAM,KAAK,IAAM,KAAU,KAAS,IAAM,KAAU;AAG9D,SAFA,IAAM,IAAK,IAAK,IAAK,GAEd;GAAE;GAAG,GADF,IAAM,KAAK,IAAM,KAAU,KAAS,IAAM,KAAU;GAC/C;;;AAGnB,EAAO,IAAe,gBAAgB;AACtC,SAAS,EAAS,GAAI,GAAI;AACxB,QAAO,IAAK,IAAK;;AAEnB,EAAO,GAAU,WAAW;AAC5B,IAAI,IAAyB;AAG7B,SAAS,GAAiB,GAAM,GAAY,GAAO;CACjD,IAAI,IAAK,EAAK,GACV,IAAK,EAAK,GACV,IAAgB,EAAE,EAClB,IAAO,UACP,IAAO;AACX,CAAI,OAAO,EAAW,WAAY,aAChC,EAAW,QAAQ,SAAS,GAAO;AAEjC,EADA,IAAO,KAAK,IAAI,GAAM,EAAM,EAAE,EAC9B,IAAO,KAAK,IAAI,GAAM,EAAM,EAAE;GAC9B,IAEF,IAAO,KAAK,IAAI,GAAM,EAAW,EAAE,EACnC,IAAO,KAAK,IAAI,GAAM,EAAW,EAAE;CAErC,IAAI,IAAO,IAAK,EAAK,QAAQ,IAAI,GAC7B,IAAM,IAAK,EAAK,SAAS,IAAI;AACjC,MAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;EAC1C,IAAI,IAAK,EAAW,IAChB,IAAK,EAAW,IAAI,EAAW,SAAS,IAAI,IAAI,IAAI,IACpD,IAAY,EACd,GACA,GACA;GAAE,GAAG,IAAO,EAAG;GAAG,GAAG,IAAM,EAAG;GAAG,EACjC;GAAE,GAAG,IAAO,EAAG;GAAG,GAAG,IAAM,EAAG;GAAG,CAClC;AACD,EAAI,KACF,EAAc,KAAK,EAAU;;AAiBjC,QAdK,EAAc,UAGf,EAAc,SAAS,KACzB,EAAc,KAAK,SAAS,GAAG,GAAG;EAChC,IAAI,IAAM,EAAE,IAAI,EAAM,GAClB,IAAM,EAAE,IAAI,EAAM,GAClB,IAAQ,KAAK,KAAK,IAAM,IAAM,IAAM,EAAI,EACxC,IAAM,EAAE,IAAI,EAAM,GAClB,IAAM,EAAE,IAAI,EAAM,GAClB,IAAQ,KAAK,KAAK,IAAM,IAAM,IAAM,EAAI;AAC5C,SAAO,IAAQ,IAAQ,KAAK,MAAU,IAAQ,IAAI;GAClD,EAEG,EAAc,MAbZ;;AAeX,EAAO,IAAkB,mBAAmB;AAI5C,IAAI,IAAoB;CACtB,MAAM;CACN,QAAQ;CACR,SAAS;CACT,SAP8B;CAQ9B,MAAM;CACP;AAID,SAAS,GAAO,GAAQ,GAAM;CAC5B,IAAM,EAAE,mBAAgB,EAAc,EAAK;AAC3C,GAAK,aAAa;CAClB,IAAM,IAAU,EAAe,EAAK,EAChC,IAAa;AACjB,CAAK,MACH,IAAa;CAEf,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EAEzF,EAAE,iBAAc,GAChB,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAU,EAAkB,GAAM;EAAE,MAAM;EAAS,QAAQ;EAAQ,WAAW;EAAS,CAAC;AAC9F,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY;CAEtB,IAAM,IAAY,EAAG,OAAO,GAAG,GAAG,GAAY,EAAQ,EAChD,IAAa,EAAS,aAAa,GAAW,eAAe;AAOnE,QANA,EAAW,KAAK,SAAS,SAAS,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC,EAChF,EAAiB,GAAM,EAAW,EAClC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADA,EAAI,KAAK,oBAAoB,GAAM,GAAQ,EAAM,EAC1C,EAAkB,OAAO,GAAM,GAAQ,EAAM;IAE/C;;AAET,EAAO,IAAQ,SAAS;AAIxB,SAAS,GAAkB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAW;CAC5D,IACM,KAAQ,IAAK,KAAM,GACnB,KAAQ,IAAK,KAAM,GACnB,IAAQ,KAAK,MAAM,IAAK,GAAI,IAAK,EAAG,EACpC,KAAM,IAAK,KAAM,GACjB,KAAM,IAAK,KAAM,GACjB,IAAe,IAAK,GACpB,IAAe,IAAK,GACpB,IAAW,KAAK,KAAK,KAAgB,IAAI,KAAgB,EAAE;AACjE,KAAI,IAAW,EACb,OAAU,MAAM,qEAAqE;CAEvF,IAAM,IAAuB,KAAK,KAAK,IAAI,KAAY,EAAE,EACnD,IAAU,IAAO,IAAuB,IAAK,KAAK,IAAI,EAAM,IAAI,IAAY,KAAK,IACjF,IAAU,IAAO,IAAuB,IAAK,KAAK,IAAI,EAAM,IAAI,IAAY,KAAK,IACjF,IAAa,KAAK,OAAO,IAAK,KAAW,IAAK,IAAK,KAAW,EAAG,EAEnE,IADa,KAAK,OAAO,IAAK,KAAW,IAAK,IAAK,KAAW,EAAG,GACzC;AAI5B,CAHI,KAAa,IAAa,MAC5B,KAAc,IAAI,KAAK,KAErB,CAAC,KAAa,IAAa,MAC7B,KAAc,IAAI,KAAK;CAEzB,IAAM,IAAS,EAAE;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAW,KAAK;EAElC,IAAM,IAAS,IADL,IAAK,KACiB,GAC1B,IAAI,IAAU,IAAK,KAAK,IAAI,EAAO,EACnC,IAAI,IAAU,IAAK,KAAK,IAAI,EAAO;AACzC,IAAO,KAAK;GAAE;GAAG;GAAG,CAAC;;AAEvB,QAAO;;AAET,EAAO,IAAmB,oBAAoB;AAC9C,eAAe,GAAW,GAAQ,GAAM;CACtC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,EAAK,QAAQ,EAAK,UAAU,IAChC,IAAI,EAAK,SAAS,EAAK,SACvB,IAAK,IAAI,GACT,IAAK,KAAM,MAAM,IAAI,KACrB,EAAE,iBAAc,GAChB,IAAS;EACb;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC,IAAI;GAAG;EACvB;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAI;GAAG;EACxB,GAAG,GAAkB,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,GAAI,GAAI,GAAM;EAClE;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG;EACtB,GAAG,GAAkB,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,GAAI,GAAI,GAAK;EAChE,EACK,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAiB,EAAqB,EAAO,EAC7C,IAAsB,EAAG,KAAK,GAAgB,EAAQ,EACtD,IAAkB,EAAS,aAAa,GAAqB,eAAe;AAclF,QAbA,EAAgB,KAAK,SAAS,wBAAwB,EAClD,KAAa,EAAK,SAAS,eAC7B,EAAgB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAExD,KAAc,EAAK,SAAS,eAC9B,EAAgB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE7D,EAAgB,KAAK,aAAa,aAAa,IAAK,EAAE,MAAM,EAC5D,EAAiB,GAAM,EAAgB,EACvC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAY,aAAa;AAMhC,SAAS,EAAmB,GAAQ,GAAG,GAAG,GAAQ;AAChD,QAAO,EAAO,OAAO,WAAW,eAAe,CAAC,KAC9C,UACA,EAAO,IAAI,SAAS,GAAG;AACrB,SAAO,EAAE,IAAI,MAAM,EAAE;GACrB,CAAC,KAAK,IAAI,CACb,CAAC,KAAK,SAAS,kBAAkB,CAAC,KAAK,aAAa,eAAe,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI;;AAEjG,EAAO,GAAoB,qBAAqB;AAGhD,eAAe,GAAK,GAAQ,GAAM;CAChC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,EAAK,SAAS,EAAK,SAEvB,IAAI,EAAK,QAAQ,EAAK,UAAU,IAEhC,IAAQ,GACR,IAAM,CAAC,GAEP,IAAS;EACb;GAAE,GAAG;GAAgB,GAAG;GAAK;EAC7B;GAAE,GAAG;GAAO,GAAG;GAAK;EACpB;GAAE,GAAG;GAAO,GAAG;GAAQ;EACvB;GAAE,GAAG;GAAM,GAAG;GAAQ;EACtB;GAAE,GAAG;GAAM,GAAG,IAAM;GAAS;EAC7B;GAAE,GAAG;GAAgB,GAAG;GAAK;EAC9B,EACG,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ;AAE5C,EADA,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAC1G,KACF,EAAQ,KAAK,SAAS,EAAU;OAGlC,KAAU,EAAmB,GAAU,GAAG,GAAG,EAAO;AAStD,QAPI,KACF,EAAQ,KAAK,SAAS,EAAW,EAEnC,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAM,OAAO;AAIpB,SAAS,GAAO,GAAQ,GAAM;CAC5B,IAAM,EAAE,kBAAe,EAAc,EAAK;AAC1C,GAAK,QAAQ;CACb,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAe,EAAK,CAAC,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACnG,EAAE,iBAAc,GAChB,IAAI,KAAK,IAAI,IAAI,EAAK,SAAS,EAAE,EACjC,IAAS;EACb;GAAE,GAAG;GAAG,GAAG,IAAI;GAAG;EAClB;GAAE,GAAG,IAAI;GAAG,GAAG;GAAG;EAClB;GAAE,GAAG;GAAG,GAAG,CAAC,IAAI;GAAG;EACnB;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG;GAAG;EACpB,EACK,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAa,EAAqB,EAAO,EACzC,IAAY,EAAG,KAAK,GAAY,EAAQ,EACxC,IAAc,EAAS,aAAa,GAAW,eAAe;AAYpE,QAXI,KAAa,EAAK,SAAS,eAC7B,EAAY,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEpD,KAAc,EAAK,SAAS,eAC9B,EAAY,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEzD,EAAK,QAAQ,IACb,EAAK,SAAS,IACd,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAQ,SAAS;AAIxB,eAAe,GAAO,GAAQ,GAAM,GAAS;CAC3C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,mBAAgB,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACvF,IAAU,GAAS,WAAW,GAC9B,IAAS,EAAK,QAAQ,IAAI,GAC5B,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAW,EAAkB,GAAM,EAAE,CAAC,EACtC,IAAY,EAAG,OAAO,GAAG,GAAG,IAAS,GAAG,EAAS;AAEvD,EADA,IAAa,EAAS,aAAa,GAAW,eAAe,EAC7D,EAAW,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC;OAE/F,KAAa,EAAS,OAAO,UAAU,eAAe,CAAC,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,KAAK,EAAO,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE;AAWvK,QATA,EAAiB,GAAM,EAAW,EAClC,EAAK,gBAAgB,SAAS,GAAQ,GAAO;EAC3C,IAAM,IAAU,EAAO,QAAQ;AAC/B,SAAO,EAAkB,OAAO,GAAQ,GAAS,EAAM;IAEzD,EAAK,YAAY,SAAS,GAAO;AAE/B,SADA,EAAI,KAAK,oBAAoB,GAAM,GAAQ,EAAM,EAC1C,EAAkB,OAAO,GAAM,GAAQ,EAAM;IAE/C;;AAET,EAAO,IAAQ,SAAS;AAIxB,SAAS,GAAW,GAAG;CACrB,IAAM,IAAU,KAAK,IAAI,KAAK,KAAK,EAAE,EAC/B,IAAU,KAAK,IAAI,KAAK,KAAK,EAAE,EAC/B,IAAa,IAAI,GACjB,IAAU;EAAE,GAAG,IAAa,IAAI;EAAS,GAAG,IAAa,IAAI;EAAS,EACtE,IAAU;EAAE,GAAG,EAAE,IAAa,KAAK;EAAS,GAAG,IAAa,IAAI;EAAS,EACzE,IAAU;EAAE,GAAG,EAAE,IAAa,KAAK;EAAS,GAAG,EAAE,IAAa,KAAK;EAAS,EAC5E,IAAU;EAAE,GAAG,IAAa,IAAI;EAAS,GAAG,EAAE,IAAa,KAAK;EAAS;AAC/E,QAAO,KAAK,EAAQ,EAAE,GAAG,EAAQ,EAAE,KAAK,EAAQ,EAAE,GAAG,EAAQ,EAAE;uBAC1C,EAAQ,EAAE,GAAG,EAAQ,EAAE,KAAK,EAAQ,EAAE,GAAG,EAAQ;;AAExE,EAAO,IAAY,aAAa;AAChC,SAAS,GAAc,GAAQ,GAAM;CACnC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AAEvD,CADA,EAAK,aAAa,GAClB,EAAK,QAAQ;CACb,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAe,EAAK,CAAC,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACnG,IAAS,KAAK,IAAI,IAAI,GAAM,SAAS,EAAE,EACvC,EAAE,iBAAc,GAChB,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAa,EAAG,OAAO,GAAG,GAAG,IAAS,GAAG,EAAQ,EACjD,IAAW,GAAW,EAAO,EAC7B,IAAW,EAAG,KAAK,GAAU,EAAQ,EACrC,IAAiB,EAAS,aAAa,GAAY,eAAe;AAcxE,QAbA,EAAe,aAAa,EAAS,EACjC,KAAa,EAAK,SAAS,eAC7B,EAAe,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEvD,KAAc,EAAK,SAAS,eAC9B,EAAe,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE5D,EAAiB,GAAM,EAAe,EACtC,EAAK,YAAY,SAAS,GAAO;AAG/B,SAFA,EAAI,KAAK,2BAA2B,GAAM;GAAE;GAAQ;GAAO,CAAC,EAChD,EAAkB,OAAO,GAAM,GAAQ,EAAM;IAGpD;;AAET,EAAO,IAAe,gBAAgB;AAItC,SAAS,EAAsB,GAAS,GAAS,GAAQ,IAAY,KAAK,IAAa,GAAG,IAAW,KAAK;CACxG,IAAM,IAAS,EAAE,EACX,IAAgB,IAAa,KAAK,KAAK,KAGvC,KAFc,IAAW,KAAK,KAAK,MACR,MACD,IAAY;AAC5C,MAAK,IAAI,IAAI,GAAG,IAAI,GAAW,KAAK;EAClC,IAAM,IAAQ,IAAgB,IAAI,GAC5B,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM,EACtC,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM;AAC5C,IAAO,KAAK;GAAE,GAAG,CAAC;GAAG,GAAG,CAAC;GAAG,CAAC;;AAE/B,QAAO;;AAET,EAAO,GAAuB,uBAAuB;AACrD,eAAe,GAAe,GAAQ,GAAM;CAC1C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,EAAK,SAAS,EAAK,WAAW,IAClC,IAAI,EAAK,UAAU,EAAK,WAAW,IACnC,IAAS,KAAK,IAAI,GAAG,IAAI,GAAI,EAC7B,EAAE,iBAAc,GAChB,IAAS;EACb,GAAG,EAAsB,IAAI,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,EAAE;EAC3D;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG;GAAQ;EACjC,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,CAAC,GAAQ,GAAQ,IAAI,MAAM,KAAK;EAC7E,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,GAAQ,GAAQ,IAAI,KAAK,KAAK;EAC3E;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,CAAC,IAAI;GAAG;EACjC,GAAG,EAAsB,IAAI,GAAG,IAAI,GAAG,GAAQ,IAAI,GAAG,GAAG;EAC1D,EACK,IAAa;EACjB;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAQ;EAChC;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAQ;EACjC,GAAG,EAAsB,IAAI,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,EAAE;EAC3D;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,CAAC;GAAQ;EAClC,GAAG,EAAsB,IAAI,IAAI,IAAI,IAAK,CAAC,GAAQ,GAAQ,IAAI,MAAM,KAAK;EAC1E,GAAG,EAAsB,IAAI,IAAI,IAAI,IAAK,GAAQ,GAAQ,IAAI,KAAK,KAAK;EACxE;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,IAAI;GAAG;EAChC,GAAG,EAAsB,IAAI,GAAG,IAAI,GAAG,GAAQ,IAAI,GAAG,GAAG;EACzD;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,IAAI,IAAI;GAAQ;EAChC;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI,IAAI;GAAQ;EAChC,EACK,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAU,EAAkB,GAAM,EAAE,MAAM,QAAQ,CAAC;AACzD,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAGtB,IAAM,IADqB,EAAqB,EAAO,CACV,QAAQ,KAAK,GAAG,EACvD,IAAqB,EAAG,KAAK,GAAmB,EAAQ,EACxD,IAAW,EAAqB,EAAW,EAC3C,IAAY,EAAG,KAAK,GAAU,EAAE,GAAG,GAAS,CAAC,EAC7C,IAAsB,EAAS,OAAO,KAAK,eAAe;AAoBhE,QAnBA,EAAoB,aAAa,GAAW,eAAe,CAAC,KAAK,kBAAkB,EAAE,EACrF,EAAoB,aAAa,GAAoB,eAAe,EACpE,EAAoB,KAAK,SAAS,OAAO,EACrC,KAAa,EAAK,SAAS,eAC7B,EAAoB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAE5D,KAAc,EAAK,SAAS,eAC9B,EAAoB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEjE,EAAoB,KAAK,aAAa,aAAa,EAAO,MAAM,EAChE,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,IAAI,KAAU,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAC7H,EACD,EAAiB,GAAM,EAAoB,EAC3C,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAY,EAAM;IAGzD;;AAET,EAAO,IAAgB,iBAAiB;AAIxC,SAAS,EAAsB,GAAS,GAAS,GAAQ,IAAY,KAAK,IAAa,GAAG,IAAW,KAAK;CACxG,IAAM,IAAS,EAAE,EACX,IAAgB,IAAa,KAAK,KAAK,KAGvC,KAFc,IAAW,KAAK,KAAK,MACR,MACD,IAAY;AAC5C,MAAK,IAAI,IAAI,GAAG,IAAI,GAAW,KAAK;EAClC,IAAM,IAAQ,IAAgB,IAAI,GAC5B,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM,EACtC,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM;AAC5C,IAAO,KAAK;GAAE;GAAG;GAAG,CAAC;;AAEvB,QAAO;;AAET,EAAO,GAAuB,uBAAuB;AACrD,eAAe,GAAgB,GAAQ,GAAM;CAC3C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,EAAK,SAAS,EAAK,WAAW,IAClC,IAAI,EAAK,UAAU,EAAK,WAAW,IACnC,IAAS,KAAK,IAAI,GAAG,IAAI,GAAI,EAC7B,EAAE,iBAAc,GAChB,IAAS;EACb,GAAG,EAAsB,IAAI,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,EAAE;EAC3D;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,CAAC;GAAQ;EACjC,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,CAAC,GAAQ,GAAQ,IAAI,MAAM,KAAK;EAC7E,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,GAAQ,GAAQ,IAAI,KAAK,KAAK;EAC3E;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,IAAI;GAAG;EAC/B,GAAG,EAAsB,IAAI,GAAG,IAAI,GAAG,GAAQ,IAAI,GAAG,GAAG;EAC1D,EACK,IAAa;EACjB;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAQ;EACjC;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAQ;EAChC,GAAG,EAAsB,IAAI,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,EAAE;EAC3D;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,CAAC;GAAQ;EACjC,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,CAAC,GAAQ,GAAQ,IAAI,MAAM,KAAK;EAC7E,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,GAAQ,GAAQ,IAAI,KAAK,KAAK;EAC3E;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,IAAI;GAAG;EAC/B,GAAG,EAAsB,IAAI,GAAG,IAAI,GAAG,GAAQ,IAAI,GAAG,GAAG;EACzD;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI,IAAI;GAAQ;EAC/B;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,IAAI,IAAI;GAAQ;EACjC,EACK,IAAKC,EAAO,IAAI,EAAS,EACzB,IAAU,EAAkB,GAAM,EAAE,MAAM,QAAQ,CAAC;AACzD,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAGtB,IAAM,IADsB,EAAqB,EAAO,CACV,QAAQ,KAAK,GAAG,EACxD,IAAsB,EAAG,KAAK,GAAmB,EAAQ,EACzD,IAAW,EAAqB,EAAW,EAC3C,IAAY,EAAG,KAAK,GAAU,EAAE,GAAG,GAAS,CAAC,EAC7C,IAAuB,EAAS,OAAO,KAAK,eAAe;AAoBjE,QAnBA,EAAqB,aAAa,GAAW,eAAe,CAAC,KAAK,kBAAkB,EAAE,EACtF,EAAqB,aAAa,GAAqB,eAAe,EACtE,EAAqB,KAAK,SAAS,OAAO,EACtC,KAAa,EAAK,SAAS,eAC7B,EAAqB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAE7D,KAAc,EAAK,SAAS,eAC9B,EAAqB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAElE,EAAqB,KAAK,aAAa,aAAa,CAAC,EAAO,MAAM,EAClE,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAC9I,EACD,EAAiB,GAAM,EAAqB,EAC5C,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAY,EAAM;IAGzD;;AAET,EAAO,IAAiB,kBAAkB;AAI1C,SAAS,EAAsB,GAAS,GAAS,GAAQ,IAAY,KAAK,IAAa,GAAG,IAAW,KAAK;CACxG,IAAM,IAAS,EAAE,EACX,IAAgB,IAAa,KAAK,KAAK,KAGvC,KAFc,IAAW,KAAK,KAAK,MACR,MACD,IAAY;AAC5C,MAAK,IAAI,IAAI,GAAG,IAAI,GAAW,KAAK;EAClC,IAAM,IAAQ,IAAgB,IAAI,GAC5B,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM,EACtC,IAAI,IAAU,IAAS,KAAK,IAAI,EAAM;AAC5C,IAAO,KAAK;GAAE,GAAG,CAAC;GAAG,GAAG,CAAC;GAAG,CAAC;;AAE/B,QAAO;;AAET,EAAO,GAAuB,uBAAuB;AACrD,eAAe,GAAY,GAAQ,GAAM;CACvC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,EAAK,SAAS,EAAK,WAAW,IAClC,IAAI,EAAK,UAAU,EAAK,WAAW,IACnC,IAAS,KAAK,IAAI,GAAG,IAAI,GAAI,EAC7B,EAAE,iBAAc,GAChB,IAAuB;EAC3B,GAAG,EAAsB,IAAI,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,EAAE;EAC3D;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG;GAAQ;EACjC,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,CAAC,GAAQ,GAAQ,IAAI,MAAM,KAAK;EAC7E,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,GAAQ,GAAQ,IAAI,KAAK,KAAK;EAC3E;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,CAAC,IAAI;GAAG;EACjC,GAAG,EAAsB,IAAI,GAAG,IAAI,GAAG,GAAQ,IAAI,GAAG,GAAG;EAC1D,EACK,IAAwB;EAC5B,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,IAAS,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,KAAK;EACrF;GAAE,GAAG,IAAI,IAAI,IAAS;GAAG,GAAG;GAAQ;EACpC,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,GAAG,CAAC,GAAQ,GAAQ,IAAI,GAAG,GAAG;EACzE,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,GAAG,GAAQ,GAAQ,IAAI,KAAK,EAAE;EACzE;GAAE,GAAG,IAAI,IAAI,IAAS;GAAG,GAAG,CAAC;GAAQ;EACrC,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,IAAS,GAAG,IAAI,GAAG,GAAQ,IAAI,MAAM,KAAK;EACtF,EACK,IAAa;EACjB;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAQ;EAChC;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAQ;EACjC,GAAG,EAAsB,IAAI,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,EAAE;EAC3D;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,CAAC;GAAQ;EAClC,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,CAAC,GAAQ,GAAQ,IAAI,MAAM,KAAK;EAC7E,GAAG,EAAsB,IAAI,IAAI,IAAS,GAAG,GAAQ,GAAQ,IAAI,KAAK,KAAK;EAC3E;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,IAAI;GAAG;EAChC,GAAG,EAAsB,IAAI,GAAG,IAAI,GAAG,GAAQ,IAAI,GAAG,GAAG;EACzD;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,IAAI,IAAI;GAAQ;EAChC;GAAE,GAAG,IAAI,IAAI,IAAS,IAAS;GAAG,GAAG,IAAI,IAAI;GAAQ;EACrD,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,IAAS,GAAG,CAAC,IAAI,GAAG,GAAQ,IAAI,KAAK,KAAK;EACrF;GAAE,GAAG,IAAI,IAAI,IAAS;GAAG,GAAG;GAAQ;EACpC,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,GAAG,CAAC,GAAQ,GAAQ,IAAI,GAAG,GAAG;EACzE,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,GAAG,GAAQ,GAAQ,IAAI,KAAK,EAAE;EACzE;GAAE,GAAG,IAAI,IAAI,IAAS;GAAG,GAAG,CAAC;GAAQ;EACrC,GAAG,EAAsB,CAAC,IAAI,IAAI,IAAS,IAAS,GAAG,IAAI,GAAG,GAAQ,IAAI,MAAM,KAAK;EACtF,EACK,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,MAAM,QAAQ,CAAC;AACzD,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAGtB,IAAM,IADqB,EAAqB,EAAqB,CACpB,QAAQ,KAAK,GAAG,EAC3D,IAAqB,EAAG,KAAK,GAAuB,EAAQ,EAE5D,IADsB,EAAqB,EAAsB,CACpB,QAAQ,KAAK,GAAG,EAC7D,IAAsB,EAAG,KAAK,GAAwB,EAAQ,EAC9D,IAAW,EAAqB,EAAW,EAC3C,IAAY,EAAG,KAAK,GAAU,EAAE,GAAG,GAAS,CAAC,EAC7C,IAAmB,EAAS,OAAO,KAAK,eAAe;AAqB7D,QApBA,EAAiB,aAAa,GAAW,eAAe,CAAC,KAAK,kBAAkB,EAAE,EAClF,EAAiB,aAAa,GAAoB,eAAe,EACjE,EAAiB,aAAa,GAAqB,eAAe,EAClE,EAAiB,KAAK,SAAS,OAAO,EAClC,KAAa,EAAK,SAAS,eAC7B,EAAiB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEzD,KAAc,EAAK,SAAS,eAC9B,EAAiB,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE9D,EAAiB,KAAK,aAAa,aAAa,IAAS,IAAS,EAAE,MAAM,EAC1E,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAC9I,EACD,EAAiB,GAAM,EAAiB,EACxC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAY,EAAM;IAGzD;;AAET,EAAO,IAAa,cAAc;AAIlC,eAAe,GAAgB,GAAQ,GAAM;CAC3C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAE1E,IAAI,KAAK,IAAI,KAAW,EAAK,SAAS,EAAK,WAAW,KAAK,KAAK,MAAM,GAAM,SAAS,EAAE,EACvF,IAAI,KAAK,IAAI,IAAW,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACjF,IAAS,IAAI,GACb,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAa,GAAG,IAAc,GAC9B,IAAK,IAAa,GAClB,IAAK,IAAc,GACnB,IAAS;EACb;GAAE,GAAG;GAAI,GAAG;GAAG;EACf;GAAE,GAAG;GAAI,GAAG;GAAG;EACf;GAAE,GAAG;GAAG,GAAG,IAAc;GAAG;EAC5B;GAAE,GAAG;GAAI,GAAG;GAAa;EACzB;GAAE,GAAG;GAAI,GAAG;GAAa;EACzB,GAAG,EAAqB,CAAC,GAAI,CAAC,IAAc,GAAG,GAAQ,IAAI,KAAK,GAAG;EACpE,EACK,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe;AAchE,QAbA,EAAQ,KAAK,SAAS,wBAAwB,EAC1C,KAAa,EAAK,SAAS,eAC7B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAQ,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAC5D,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAiB,kBAAkB;AAI1C,IAAI,KAAsC,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,MAClE;CACL,IAAI,EAAE,GAAG,IAAI;CACb,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC5B,IAAI,EAAG,GAAG,EAAG,SAAS,CAAC,EAAM;CAC7B,MAAM;CACN,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC5B,MAAM,CAAC;CACR,CAAC,KAAK,IAAI,EACV,sBAAsB,EACrB,KAA2C,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,MACvE;CACL,IAAI,EAAE,GAAG,IAAI;CACb,IAAI,IAAI,EAAM,GAAG,IAAI;CACrB,IAAI,EAAG,GAAG,EAAG,SAAS,CAAC,EAAM;CAC7B,MAAM;CACN,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC5B,MAAM,CAAC;CACR,CAAC,KAAK,IAAI,EACV,2BAA2B,EAC1B,KAA2C,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,MACvE,CAAC,IAAI,IAAI,IAAQ,EAAE,GAAG,CAAC,IAAS,KAAK,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM,IAAI,CAAC,KAAK,IAAI,EACrF,2BAA2B;AAC9B,eAAe,GAAS,GAAQ,GAAM;CACpC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,QAAQ,EAAK,SAAS,EAAK,SAAS,EAAE,EACxD,IAAK,IAAI,GACT,IAAK,KAAM,MAAM,IAAI,KACrB,IAAI,KAAK,IAAI,EAAK,SAAS,IAAK,EAAK,SAAS,EAAK,UAAU,EAAE,EACjE,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAgB,GAAyB,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAC5D,IAAgB,GAAyB,GAAG,GAAI,GAAG,GAAG,GAAI,EAAG,EAC7D,IAAY,EAAG,KAAK,GAAe,EAAkB,GAAM,EAAE,CAAC,CAAC,EAC/D,IAAY,EAAG,KAAK,GAAe,EAAkB,GAAM,EAAE,MAAM,QAAQ,CAAC,CAAC;AAInF,EAHA,IAAY,EAAS,aAAa,GAAW,eAAe,EAC5D,IAAY,EAAS,aAAa,GAAW,eAAe,EAC5D,EAAU,KAAK,SAAS,wBAAwB,EAC5C,KACF,EAAU,KAAK,SAAS,EAAU;QAE/B;EACL,IAAM,IAAW,GAAoB,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG;AACxD,MAAY,EAAS,OAAO,QAAQ,eAAe,CAAC,KAAK,KAAK,EAAS,CAAC,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC,CAAC,KAAK,SAAS,EAAW;;AAyBxL,QAvBA,EAAU,KAAK,kBAAkB,EAAG,EACpC,EAAU,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,GAAI,GAAG,EACrE,EAAiB,GAAM,EAAU,EACjC,EAAM,KACJ,aACA,aAAa,EAAE,EAAK,QAAQ,MAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,MAAM,EAAK,WAAW,KAAK,OAAO,EAAK,KAAK,EAAK,OAAO,IAAI,GAC9I,EACD,EAAK,YAAY,SAAS,GAAO;EAC/B,IAAM,IAAM,EAAkB,KAAK,GAAM,EAAM,EACzC,IAAI,EAAI,KAAK,EAAK,KAAK;AAC7B,MAAI,KAAM,MAAM,KAAK,IAAI,EAAE,IAAI,EAAK,SAAS,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,EAAK,SAAS,KAAK,KAAK,KAAK,IAAI,EAAI,KAAK,EAAK,KAAK,GAAG,IAAI,EAAK,UAAU,KAAK,IAAI,IAAK;GAC7J,IAAI,IAAI,IAAK,KAAM,IAAI,IAAI,KAAK,IAAK;AAQrC,GAPI,IAAI,MACN,IAAI,KAAK,KAAK,EAAE,GAElB,IAAI,IAAK,GACL,EAAM,KAAK,EAAK,KAAK,KAAK,MAC5B,IAAI,CAAC,IAEP,EAAI,KAAK;;AAEX,SAAO;IAEF;;AAET,EAAO,IAAU,WAAW;AAI5B,eAAe,GAAiB,GAAQ,GAAM;CAC5C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,EAAK,QAAQ,EAAK,SACtB,IAAI,EAAK,SAAS,EAAK,SACvB,IAAa,IAAI,IACjB,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI,IAAI,IAAa,GAC1B,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAM;EACV;GAAE;GAAG,GAAG,IAAI;GAAY;EACxB;GAAE,GAAG,CAAC;GAAG,GAAG,IAAI;GAAY;EAC5B;GAAE,GAAG,CAAC;GAAG,GAAG,CAAC;GAAG;EAChB;GAAE;GAAG,GAAG,CAAC;GAAG;EACZ;GAAE;GAAG;GAAG;EACR;GAAE,GAAG,CAAC;GAAG;GAAG;EACZ;GAAE,GAAG,CAAC;GAAG,GAAG,IAAI;GAAY;EAC7B,EACK,IAAO,EAAG,QACd,EAAI,KAAK,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAC1B,EACD,EACK,IAAU,EAAS,aAAa,GAAM,eAAe;AAiB3D,QAhBA,EAAQ,KAAK,SAAS,wBAAwB,EAC1C,KAAa,EAAK,SAAS,eAC7B,EAAQ,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEhD,KAAc,EAAK,SAAS,eAC9B,EAAQ,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAErD,EAAM,KACJ,aACA,aAAa,KAAK,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,IAAI,KAAc,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAClJ,EACD,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,KAAK,GAAM,EAAM;IAG1C;;AAET,EAAO,IAAkB,mBAAmB;AAI5C,eAAe,GAAa,GAAQ,GAAM;CACxC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,mBAAgB,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAEvF,IAAc,EAAK,QAAQ,IAAI,IADzB,GAEN,IAAc,EAAK,QAAQ,IAAI,GACjC,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAe,EAAkB,GAAM;GAAE,WAAW;GAAK,aAAa;GAAK,CAAC,EAC5E,IAAe,EAAkB,GAAM;GAAE,WAAW;GAAK,aAAa;GAAK,CAAC,EAC5E,IAAiB,EAAG,OAAO,GAAG,GAAG,IAAc,GAAG,EAAa,EAC/D,IAAiB,EAAG,OAAO,GAAG,GAAG,IAAc,GAAG,EAAa;AAIrE,EAHA,IAAc,EAAS,OAAO,KAAK,eAAe,EAClD,EAAY,KAAK,SAAS,EAAoB,EAAK,WAAW,CAAC,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC,EAC7G,EAAY,MAAM,EAAE,YAAY,EAAe,EAC/C,EAAY,MAAM,EAAE,YAAY,EAAe;QAC1C;AACL,MAAc,EAAS,OAAO,KAAK,eAAe;EAClD,IAAM,IAAc,EAAY,OAAO,UAAU,eAAe,EAC1D,IAAc,EAAY,OAAO,SAAS;AAGhD,EAFA,EAAY,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAW,EAC5E,EAAY,KAAK,SAAS,eAAe,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,KAAK,EAAY,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,EACtH,EAAY,KAAK,SAAS,eAAe,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,KAAK,EAAY,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE;;AAOxH,QALA,EAAiB,GAAM,EAAY,EACnC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADA,EAAI,KAAK,0BAA0B,GAAM,GAAa,EAAM,EACrD,EAAkB,OAAO,GAAM,GAAa,EAAM;IAEpD;;AAET,EAAO,IAAc,eAAe;AAIpC,SAAS,GAAa,GAAQ,GAAM,EAAE,QAAQ,EAAE,uBAAoB;CAClE,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AAEvD,CADA,EAAK,QAAQ,IACb,EAAK,aAAa;CAClB,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAe,EAAK,CAAC,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EAEnG,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,EAAE,kBAAe,GACjB,IAAU,EAAkB,GAAM,EAAE,WAAW,SAAS,CAAC;AAC/D,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY;CAEtB,IAAM,IAAa,EAAG,OAAO,GAAG,GAAG,IAAY,EAAQ,EACjD,IAAgB,EAAS,aAAa,GAAY,eAAe;AAcvE,QAbA,EAAc,UAAU,OAAO,CAAC,KAAK,SAAS,SAAS,EAAW,cAAc,EAC5E,KAAa,EAAU,SAAS,KAAK,EAAK,SAAS,eACrD,EAAc,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEtD,KAAc,EAAK,SAAS,eAC9B,EAAc,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE3D,EAAiB,GAAM,EAAc,EACrC,EAAK,YAAY,SAAS,GAAO;AAG/B,SAFA,EAAI,KAAK,0BAA0B,GAAM;GAAE;GAAQ;GAAO,CAAC,EAC/C,EAAkB,OAAO,GAAM,GAAQ,EAAM;IAGpD;;AAET,EAAO,IAAc,eAAe;AAIpC,eAAe,GAAgB,GAAQ,GAAM;CAC3C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,EAAK,SAAS,EAAK,WAAW,IAClC,IAAI,IAAI,EAAK,QACb,IAAK,IAAI,EAAK,QACd,IAAS;EACb;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EACf;GAAE,GAAG;GAAI,GAAG,CAAC;GAAG;EAChB;GAAE,GAAG,IAAK;GAAG,GAAG;GAAG;EACpB,EACK,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAmB,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG;AAkB7H,QAjBI,KAAa,EAAK,SAAS,eAC7B,EAAiB,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAE9D,KAAc,EAAK,SAAS,eAC9B,EAAiB,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAEnE,EAAK,QAAQ,GACb,EAAK,SAAS,GACd,EAAiB,GAAM,EAAiB,EACxC,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAC9H,EACD,EAAK,YAAY,SAAS,GAAO;AAE/B,SADA,EAAI,KAAK,sBAAsB,GAAM,GAAQ,EAAM,EAC5C,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAiB,kBAAkB;AAI1C,SAAS,GAAS,GAAQ,GAAM,EAAE,QAAK,QAAQ,EAAE,OAAO,GAAQ,uBAAoB;CAClF,IAAM,EAAE,kBAAe,EAAc,EAAK;AAC1C,GAAK,QAAQ;CACb,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAe,EAAK,CAAC,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACnG,EAAE,iBAAc,GAClB,IAAQ,KAAK,IAAI,IAAI,GAAM,SAAS,EAAE,EACtC,IAAS,KAAK,IAAI,IAAI,GAAM,UAAU,EAAE;AAC5C,CAAI,MAAQ,SACV,IAAQ,KAAK,IAAI,IAAI,GAAM,SAAS,EAAE,EACtC,IAAS,KAAK,IAAI,IAAI,GAAM,UAAU,EAAE;CAE1C,IAAM,IAAI,KAAK,IAAQ,GACjB,IAAI,KAAK,IAAS,GAClB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM;EACtC,QAAQ,EAAe;EACvB,MAAM,EAAe;EACtB,CAAC;AACF,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAY,EAAG,UAAU,GAAG,GAAG,GAAO,GAAQ,EAAQ,EACtD,IAAQ,EAAS,aAAa,GAAW,eAAe;AAO9D,CANI,KAAa,EAAK,SAAS,eAC7B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAE9C,KAAc,EAAK,SAAS,eAC9B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEnD,EAAiB,GAAM,EAAM;CAC7B,IAAM,IAAU,GAAQ,WAAW;AAQnC,QAPI,EAAK,SAAS,EAAK,WACrB,EAAK,SAAS,IAAU,KAAK,GAC7B,EAAK,UAAU,IAAU,KAAK,IAEhC,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAU,WAAW;AAI5B,eAAe,GAAqB,GAAQ,GAAM;CAChD,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IACM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,KAAK,IAAI,IAAU,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EAC9E,IAAI,KAAK,IAAI,IAAW,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACjF,IAAS,IAAI,GACb,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAI;GAAG;EACxB;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,CAAC,IAAI;GAAG;EAChC,GAAG,EAAqB,CAAC,IAAI,IAAI,GAAQ,GAAG,GAAQ,IAAI,IAAI,IAAI;EAChE;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,IAAI;GAAG;EAC/B;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,IAAI;GAAG;EACxB,EACK,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe;AAchE,QAbA,EAAQ,KAAK,SAAS,wBAAwB,EAC1C,KAAa,EAAK,SAAS,eAC7B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAG/B,SAFA,EAAI,KAAK,kBAAkB,GAAM;GAAE;GAAQ;GAAO,CAAC,EACvC,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAsB,uBAAuB;AAIpD,IAAI,KAAqC,mBAAQ,GAAG,GAAG,GAAO,GAAQ,MAC7D;CACL,IAAI,IAAI,EAAE,GAAG;CACb,IAAI,IAAI,IAAQ,EAAE,GAAG;CACrB,IAAI,IAAI,EAAM,GAAG,IAAI,IAAS;CAC9B,IAAI,IAAI,IAAQ,EAAE,GAAG,IAAI;CACzB,IAAI,IAAI,EAAE,GAAG,IAAI;CACjB,IAAI,EAAE,GAAG,IAAI,IAAS;CACtB;CACD,CAAC,KAAK,IAAI,EACV,qBAAqB;AACxB,eAAe,GAAQ,GAAQ,GAAM;CACnC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAE1E,IAAI,EAAK,SAAS,EAAK,SACvB,IAAI,IAAI,GACR,IAAI,EAAK,QAAQ,IAAI,IAAI,EAAK,SAC9B,IAAS;EACb;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG,IAAI;GAAG,GAAG;GAAG;EAClB;GAAE,GAAG;GAAG,GAAG,CAAC,IAAI;GAAG;EACnB;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC;GAAG;EACnB;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EACf;GAAE,GAAG;GAAG,GAAG,CAAC,IAAI;GAAG;EACpB,EACG,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAW,GAAmB,GAAG,GAAG,GAAG,GAAG,EAAE,EAC5C,IAAY,EAAG,KAAK,GAAU,EAAQ;AAE5C,EADA,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAC1G,KACF,EAAQ,KAAK,SAAS,EAAU;OAGlC,KAAU,EAAmB,GAAU,GAAG,GAAG,EAAO;AAWtD,QATI,KACF,EAAQ,KAAK,SAAS,EAAW,EAEnC,EAAK,QAAQ,GACb,EAAK,SAAS,GACd,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAS,UAAU;AAI1B,eAAe,GAAU,GAAQ,GAAM;CACrC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AAEvD,CADA,EAAK,QAAQ,IACb,EAAK,aAAa;CAClB,IAAM,EAAE,gBAAa,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACpE,IAAI,KAAK,IAAI,IAAI,GAAM,SAAS,EAAE,EAClC,IAAI,KAAK,IAAI,IAAI,GAAM,UAAU,EAAE,EACnC,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAG,GAAG;GAAG;EACf,EACK,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe;AAehE,QAdA,EAAQ,KAAK,SAAS,wBAAwB,EAC1C,KAAa,EAAK,SAAS,eAC7B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAQ,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAC5D,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAG/B,SAFA,EAAI,KAAK,kBAAkB,GAAM,EAAE,WAAQ,CAAC,EAChC,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAW,YAAY;AAI9B,eAAe,GAAK,GAAQ,GAAM,EAAE,QAAQ,EAAE,mBAAgB,kBAAe;CAC3E,IAAM,EAAE,mBAAgB,EAAc,EAAK;AAC3C,GAAK,aAAa;CAClB,IAAM,IAAc,EAAK,eAAe,IAClC,IAAa,EAAK,cAAc,IAChC,IAAW,KAAK,IAAI,GAAa,EAAW,EAC5C,IAAe,GAAW;AAChC,GAAK,QAAQ,KAAK,IAAI,GAAU,KAAgB,EAAE;CAClD,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,qBAAqB,EACjF,IAAW,EAAK,QAAQ,KACxB,IAAS,GACT,IAAQ,GACR,EAAE,kBAAe,GACjB,EAAE,iBAAc,EAAc,EAAK,EACnC,IAAI,CAAC,IAAQ,GACb,IAAI,CAAC,IAAS,GACd,IAAe,EAAK,QAAQ,IAAI,GAChC,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM;EAAE,QAAQ;EAAQ,MAAM;EAAQ,CAAC;AACzE,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAW,EAAG,UAAU,GAAG,GAAG,GAAO,GAAQ,EAAQ,EACrD,IAAa,KAAK,IAAI,GAAO,EAAK,MAAM,EACxC,IAAc,IAAS,EAAK,SAAS,GACrC,IAAY,EAAG,UAAU,CAAC,IAAa,GAAG,CAAC,IAAc,GAAG,GAAY,GAAa;EACzF,GAAG;EACH,MAAM;EACN,QAAQ;EACT,CAAC,EACI,IAAY,EAAS,aAAa,GAAU,eAAe,EAC3D,IAAa,EAAS,aAAa,EAAU;AACnD,KAAI,EAAK,MAAM;EACb,IAAM,IAAW,EAAS,OAAO,IAAI;AACrC,IAAS,KACP,MAAM,MAAM,EAAW,EAAK,MAAM;GAChC,QAAQ;GACR,OAAO;GACP,gBAAgB;GACjB,CAAC,CAAC,MACJ;EACD,IAAM,IAAW,EAAS,MAAM,CAAC,SAAS,EACpC,IAAY,EAAS,OACrB,IAAa,EAAS,QACtB,IAAQ,EAAS,GACjB,IAAQ,EAAS;AAKvB,EAJA,EAAS,KACP,aACA,aAAa,CAAC,IAAY,IAAI,EAAM,GAAG,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,IAAQ,CAAC,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,EAAM,GAC9K,EACD,EAAS,KAAK,SAAS,UAAU,EAAU,IAAI,SAAS,IAAI,EAAW,GAAG;;AA8C5E,QA5CA,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,IAAW,CAAC,IAAc,IAAI,IAAc,IAAI,EAAK,OAAO,GAC3H,EACD,EAAU,KACR,aACA,eAAkB,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,CAAC,EAAK,SAAS,IAAI,IAAe,EAAE,GACvG,EACD,EAAiB,GAAM,EAAW,EAClC,EAAK,YAAY,SAAS,GAAO;AAE/B,MADA,EAAI,KAAK,wBAAwB,GAAM,EAAM,EACzC,CAAC,EAAK,MACR,QAAO,EAAkB,KAAK,GAAM,EAAM;EAE5C,IAAM,IAAK,EAAK,KAAK,GACf,IAAK,EAAK,KAAK,GACf,IAAa,EAAK,UAAU,GAC9B,IAAS,EAAE;AAyBf,SAxBA,AAYE,IAZE,IACO;GACP;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC/E;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC1E;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC1E;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAChF,GAEQ;GACP;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GACtD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GAC3D;IAAE,GAAG,IAAK,EAAK,QAAQ,IAAI;IAAG,GAAG,IAAK,IAAa;IAAG;GACtD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GAC3D;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GACvD,EAES,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAM,OAAO;AAIpB,eAAe,GAAW,GAAQ,GAAM,EAAE,QAAQ,EAAE,mBAAgB,kBAAe;CACjF,IAAM,EAAE,mBAAgB,EAAc,EAAK;AAC3C,GAAK,aAAa;CAClB,IAAM,IAAc,EAAK,eAAe,IAClC,IAAa,EAAK,cAAc,IAChC,IAAW,KAAK,IAAI,GAAa,EAAW,EAC5C,IAAe,GAAW;AAChC,GAAK,QAAQ,KAAK,IAAI,GAAU,KAAgB,EAAE;CAClD,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,qBAAqB,EAEjF,IAAe,EAAK,QAAQ,IAAI,GAChC,IAAW,EAAK,QAAQ,KACxB,EAAE,eAAY,eAAY,GAC1B,EAAE,iBAAc,EAAc,EAAK,EACnC,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAM3C,CALI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY,UAGtB,EAAQ,SADK,EAAU,IAAI,OAAO,IACT;CACzB,IAAM,IAAW,EAAS,OAAO,IAAI;AACrC,CAAI,EAAK,QACP,EAAS,KACP,MAAM,MAAM,EAAW,EAAK,MAAM;EAChC,QAAQ;EACR,OAAO;EACP,gBAAgB;EACjB,CAAC,CAAC,MACJ;CAEH,IAAM,IAAW,EAAS,MAAM,CAAC,SAAS,EACpC,IAAY,EAAS,OACrB,IAAa,EAAS,QACtB,IAAQ,EAAS,GACjB,IAAQ,EAAS,GACjB,IAAW,KAAK,IAAI,GAAW,EAAW,GAAG,KAAK,QAAQ,IAC1D,IAAW,EAAG,OAAO,GAAG,GAAG,GAAU,EAAQ,EAC7C,IAAa,KAAK,IAAI,GAAU,EAAK,MAAM,EAC3C,IAAc,IAAW,EAAK,SAAS,GACvC,IAAY,EAAG,UAAU,CAAC,IAAa,GAAG,CAAC,IAAc,GAAG,GAAY,GAAa;EACzF,GAAG;EACH,MAAM;EACN,QAAQ;EACT,CAAC,EACI,IAAY,EAAS,aAAa,GAAU,eAAe,EAC3D,IAAa,EAAS,aAAa,EAAU;AAoBnD,QAnBA,EAAS,KACP,aACA,aAAa,CAAC,IAAY,IAAI,EAAM,GAAG,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,IAAQ,CAAC,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,EAAM,GAC9K,EACD,EAAS,KAAK,SAAS,UAAU,EAAU,IAAI,SAAS,IAAI,EAAW,GAAG,EAC1E,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,IAAW,CAAC,IAAc,IAAI,IAAc,IAAI,EAAK,OAAO,GAC3H,EACD,EAAU,KACR,aACA,eAAkB,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,CAAC,EAAK,SAAS,IAAI,IAAe,EAAE,GACvG,EACD,EAAiB,GAAM,EAAW,EAClC,EAAK,YAAY,SAAS,GAAO;AAG/B,SAFA,EAAI,KAAK,wBAAwB,GAAM,EAAM,EACjC,EAAkB,KAAK,GAAM,EAAM;IAG1C;;AAET,EAAO,IAAY,aAAa;AAIhC,eAAe,GAAY,GAAQ,GAAM,EAAE,QAAQ,EAAE,mBAAgB,kBAAe;CAClF,IAAM,EAAE,mBAAgB,EAAc,EAAK;AAC3C,GAAK,aAAa;CAClB,IAAM,IAAc,EAAK,eAAe,IAClC,IAAa,EAAK,cAAc,IAChC,IAAW,KAAK,IAAI,GAAa,EAAW,EAC5C,IAAe,GAAW;AAChC,GAAK,QAAQ,KAAK,IAAI,GAAU,KAAgB,EAAE;CAClD,IAAM,EAAE,aAAU,SAAM,gBAAa,aAAU,MAAM,EACnD,GACA,GACA,qBACD,EACK,IAAW,EAAK,QAAQ,KACxB,IAAS,IAAW,IAAc,GAClC,IAAQ,IAAW,IAAc,GACjC,EAAE,eAAY,eAAY,GAC1B,EAAE,iBAAc,EAAc,EAAK,EACnC,IAAI,CAAC,IAAQ,GACb,IAAI,CAAC,IAAS,GACd,IAAe,EAAK,QAAQ,IAAI,GAChC,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAM3C,CALI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY,UAGtB,EAAQ,SADK,EAAU,IAAI,OAAO,IACT;CACzB,IAAM,IAAW,EAAG,KAAK,EAAuB,GAAG,GAAG,GAAO,GAAQ,EAAE,EAAE,EAAQ,EAC3E,IAAa,KAAK,IAAI,GAAO,EAAK,MAAM,EACxC,IAAc,IAAS,EAAK,SAAS,GACrC,IAAY,EAAG,UAAU,CAAC,IAAa,GAAG,CAAC,IAAc,GAAG,GAAY,GAAa;EACzF,GAAG;EACH,MAAM;EACN,QAAQ;EACT,CAAC,EACI,IAAY,EAAS,aAAa,GAAU,eAAe,CAAC,KAAK,SAAS,cAAc,EACxF,IAAa,EAAS,aAAa,EAAU;AACnD,KAAI,EAAK,MAAM;EACb,IAAM,IAAW,EAAS,OAAO,IAAI;AACrC,IAAS,KACP,MAAM,MAAM,EAAW,EAAK,MAAM;GAChC,QAAQ;GACR,OAAO;GACP,gBAAgB;GACjB,CAAC,CAAC,MACJ;EACD,IAAM,IAAW,EAAS,MAAM,CAAC,SAAS,EACpC,IAAY,EAAS,OACrB,IAAa,EAAS,QACtB,IAAQ,EAAS,GACjB,IAAQ,EAAS;AAKvB,EAJA,EAAS,KACP,aACA,aAAa,CAAC,IAAY,IAAI,EAAM,GAAG,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,IAAQ,CAAC,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,EAAM,GAC9K,EACD,EAAS,KAAK,SAAS,UAAU,EAAU,IAAI,SAAS,IAAI,EAAW,GAAG;;AA8C5E,QA5CA,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,IAAW,CAAC,IAAc,IAAI,IAAc,IAAI,EAAK,OAAO,GAC3H,EACD,EAAU,KACR,aACA,eAAkB,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,CAAC,EAAK,SAAS,IAAI,IAAe,EAAE,GACvG,EACD,EAAiB,GAAM,EAAW,EAClC,EAAK,YAAY,SAAS,GAAO;AAE/B,MADA,EAAI,KAAK,wBAAwB,GAAM,EAAM,EACzC,CAAC,EAAK,MACR,QAAO,EAAkB,KAAK,GAAM,EAAM;EAE5C,IAAM,IAAK,EAAK,KAAK,GACf,IAAK,EAAK,KAAK,GACf,IAAa,EAAK,UAAU,GAC9B,IAAS,EAAE;AAyBf,SAxBA,AAYE,IAZE,IACO;GACP;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC/E;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC1E;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC1E;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAChF,GAEQ;GACP;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GACtD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GAC3D;IAAE,GAAG,IAAK,EAAK,QAAQ,IAAI;IAAG,GAAG,IAAK,IAAa;IAAG;GACtD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GAC3D;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GACvD,EAES,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAa,cAAc;AAIlC,eAAe,GAAW,GAAQ,GAAM,EAAE,QAAQ,EAAE,mBAAgB,kBAAe;CACjF,IAAM,EAAE,mBAAgB,EAAc,EAAK;AAC3C,GAAK,aAAa;CAClB,IAAM,IAAc,EAAK,eAAe,IAClC,IAAa,EAAK,cAAc,IAChC,IAAW,KAAK,IAAI,GAAa,EAAW,EAC5C,IAAe,GAAW;AAChC,GAAK,QAAQ,KAAK,IAAI,GAAU,KAAgB,EAAE;CAClD,IAAM,EAAE,aAAU,SAAM,gBAAa,aAAU,MAAM,EACnD,GACA,GACA,qBACD,EACK,IAAW,EAAK,QAAQ,KACxB,IAAS,IAAW,IAAc,GAClC,IAAQ,IAAW,IAAc,GACjC,EAAE,eAAY,eAAY,GAC1B,EAAE,iBAAc,EAAc,EAAK,EACnC,IAAI,CAAC,IAAQ,GACb,IAAI,CAAC,IAAS,GACd,IAAe,EAAK,QAAQ,IAAI,GAChC,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAM3C,CALI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY,UAGtB,EAAQ,SADK,EAAU,IAAI,OAAO,IACT;CACzB,IAAM,IAAW,EAAG,KAAK,EAAuB,GAAG,GAAG,GAAO,GAAQ,GAAI,EAAE,EAAQ,EAC7E,IAAa,KAAK,IAAI,GAAO,EAAK,MAAM,EACxC,IAAc,IAAS,EAAK,SAAS,GACrC,IAAY,EAAG,UAAU,CAAC,IAAa,GAAG,CAAC,IAAc,GAAG,GAAY,GAAa;EACzF,GAAG;EACH,MAAM;EACN,QAAQ;EACT,CAAC,EACI,IAAY,EAAS,aAAa,GAAU,eAAe,EAC3D,IAAa,EAAS,aAAa,EAAU;AACnD,KAAI,EAAK,MAAM;EACb,IAAM,IAAW,EAAS,OAAO,IAAI;AACrC,IAAS,KACP,MAAM,MAAM,EAAW,EAAK,MAAM;GAChC,QAAQ;GACR,OAAO;GACP,gBAAgB;GACjB,CAAC,CAAC,MACJ;EACD,IAAM,IAAW,EAAS,MAAM,CAAC,SAAS,EACpC,IAAY,EAAS,OACrB,IAAa,EAAS,QACtB,IAAQ,EAAS,GACjB,IAAQ,EAAS;AAKvB,EAJA,EAAS,KACP,aACA,aAAa,CAAC,IAAY,IAAI,EAAM,GAAG,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,IAAQ,CAAC,EAAK,SAAS,IAAI,IAAe,IAAI,IAAa,IAAI,EAAM,GAC9K,EACD,EAAS,KAAK,SAAS,UAAU,EAAU,IAAI,SAAS,IAAI,EAAW,GAAG;;AA8C5E,QA5CA,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,IAAW,CAAC,IAAc,IAAI,IAAc,IAAI,EAAK,OAAO,GAC3H,EACD,EAAU,KACR,aACA,eAAkB,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,CAAC,EAAK,SAAS,IAAI,IAAe,EAAE,GACvG,EACD,EAAiB,GAAM,EAAW,EAClC,EAAK,YAAY,SAAS,GAAO;AAE/B,MADA,EAAI,KAAK,wBAAwB,GAAM,EAAM,EACzC,CAAC,EAAK,MACR,QAAO,EAAkB,KAAK,GAAM,EAAM;EAE5C,IAAM,IAAK,EAAK,KAAK,GACf,IAAK,EAAK,KAAK,GACf,IAAa,EAAK,UAAU,GAC9B,IAAS,EAAE;AAyBf,SAxBA,AAYE,IAZE,IACO;GACP;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC/E;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC1E;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC1E;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAChF,GAEQ;GACP;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAC7C;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GACtD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GAC3D;IAAE,GAAG,IAAK,EAAK,QAAQ,IAAI;IAAG,GAAG,IAAK,IAAa;IAAG;GACtD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GAC3D;IAAE,GAAG,IAAK,IAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAQ;GACvD,EAES,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAY,aAAa;AAIhC,eAAe,GAAY,GAAQ,GAAM,EAAE,QAAQ,EAAE,kBAAe;CAClE,IAAM,IAAM,IAAI,OAAO;AAEvB,CADA,EAAI,MAAM,GAAM,OAAO,IACvB,MAAM,EAAI,QAAQ;CAClB,IAAM,IAAoB,OAAO,EAAI,aAAa,UAAU,CAAC,QAAQ,MAAM,GAAG,CAAC,EACzE,IAAqB,OAAO,EAAI,cAAc,UAAU,CAAC,QAAQ,MAAM,GAAG,CAAC;AACjF,GAAK,mBAAmB,IAAoB;CAC5C,IAAM,EAAE,mBAAgB,EAAc,EAAK;AAC3C,GAAK,aAAa;CAClB,IAAM,IAAe,GAAW;AAChC,GAAK,eAAe,GAAW;CAC/B,IAAM,IAAgB,KAAK,IACzB,EAAK,QAAQ,KAAgB,IAAI,GACjC,GAAM,cAAc,EACrB,EACK,IAAa,EAAK,eAAe,QAAO,GAAM,cAAc,EAAK,cAAc,EAAK,mBAAmB,GACvG,IAAc,EAAK,eAAe,OAAO,IAAa,EAAK,mBAAmB,GAAM,eAAe;AACzG,GAAK,QAAQ,KAAK,IAAI,GAAY,KAAgB,EAAE;CACpD,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,sBAAsB,EAClF,IAAW,EAAK,QAAQ,KACxB,IAAI,CAAC,IAAa,GAClB,IAAI,CAAC,IAAc,GACnB,IAAe,EAAK,QAAQ,IAAI,GAChC,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAY,EAAG,UAAU,GAAG,GAAG,GAAY,GAAa,EAAQ,EAChE,IAAa,KAAK,IAAI,GAAY,EAAK,MAAM,EAC7C,IAAc,IAAc,EAAK,SAAS,GAC1C,IAAY,EAAG,UAAU,CAAC,IAAa,GAAG,CAAC,IAAc,GAAG,GAAY,GAAa;EACzF,GAAG;EACH,MAAM;EACN,QAAQ;EACT,CAAC,EACI,IAAY,EAAS,aAAa,GAAW,eAAe,EAC5D,IAAa,EAAS,aAAa,EAAU;AACnD,KAAI,EAAK,KAAK;EACZ,IAAM,IAAQ,EAAS,OAAO,QAAQ;AAKtC,EAJA,EAAM,KAAK,QAAQ,EAAK,IAAI,EAC5B,EAAM,KAAK,SAAS,EAAW,EAC/B,EAAM,KAAK,UAAU,EAAY,EACjC,EAAM,KAAK,uBAAuB,OAAO,EACzC,EAAM,KACJ,aACA,aAAa,CAAC,IAAa,EAAE,GAAG,IAAW,IAAc,IAAI,IAAc,CAAC,IAAc,EAAE,GAC7F;;AA8CH,QA5CA,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,IAAW,CAAC,IAAc,IAAI,EAAK,SAAS,IAAI,IAAe,IAAI,IAAc,IAAI,EAAK,SAAS,IAAI,IAAe,EAAE,GACvL,EACD,EAAU,KACR,aACA,eAAkB,IAAW,EAAK,SAAS,IAAI,IAAe,IAAI,CAAC,EAAK,SAAS,IAAI,IAAe,EAAE,GACvG,EACD,EAAiB,GAAM,EAAW,EAClC,EAAK,YAAY,SAAS,GAAO;AAE/B,MADA,EAAI,KAAK,wBAAwB,GAAM,EAAM,EACzC,CAAC,EAAK,MACR,QAAO,EAAkB,KAAK,GAAM,EAAM;EAE5C,IAAM,IAAK,EAAK,KAAK,GACf,IAAK,EAAK,KAAK,GACf,IAAa,EAAK,UAAU,GAC9B,IAAS,EAAE;AAyBf,SAxBA,AAYE,IAZE,IACO;GACP;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC/E;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC/E;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAC/E;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI,EAAK,SAAS;IAAc;GAChF,GAEQ;GACP;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa,IAAI;IAAa;GAChE;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAa;GAChE;IAAE,GAAG,IAAK,EAAK,QAAQ,IAAI;IAAG,GAAG,IAAK,IAAa;IAAG;GACtD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa;IAAG;GAClD;IAAE,GAAG,IAAK,EAAK,QAAQ;IAAG,GAAG,IAAK,IAAa,IAAI;IAAa;GAChE;IAAE,GAAG,IAAK,IAAa;IAAG,GAAG,IAAK,IAAa,IAAI;IAAa;GACjE,EAES,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAa,cAAc;AAIlC,eAAe,GAAc,GAAQ,GAAM;CACzC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAS;EACb;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG,IAAI,IAAI,IAAI;GAAG,GAAG,CAAC;GAAG;EAC3B;GAAE,GAAG,KAAK,IAAI;GAAG,GAAG,CAAC;GAAG;EACzB,EACG,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ;AAE5C,EADA,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAC1G,KACF,EAAQ,KAAK,SAAS,EAAU;OAGlC,KAAU,EAAmB,GAAU,GAAG,GAAG,EAAO;AAWtD,QATI,KACF,EAAQ,KAAK,SAAS,EAAW,EAEnC,EAAK,QAAQ,GACb,EAAK,SAAS,GACd,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAe,gBAAgB;AAItC,eAAe,EAAS,GAAQ,GAAM,GAAS;CAC7C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAa,KAAK,IAAI,EAAK,QAAQ,EAAQ,gBAAgB,GAAG,GAAM,SAAS,EAAE,EAC/E,IAAc,KAAK,IAAI,EAAK,SAAS,EAAQ,gBAAgB,GAAG,GAAM,UAAU,EAAE,EAClF,IAAI,CAAC,IAAa,GAClB,IAAI,CAAC,IAAc,GACrB,GACA,EAAE,OAAI,UAAO,GACX,EAAE,iBAAc;AAKtB,KAJI,GAAS,MAAM,EAAQ,OACzB,IAAK,EAAQ,IACb,IAAK,EAAQ,KAEX,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAW,EAAkB,GAAM,EAAE,CAAC,EACtC,IAAY,KAAM,IAAK,EAAG,KAAK,EAAuB,GAAG,GAAG,GAAY,GAAa,KAAM,EAAE,EAAE,EAAS,GAAG,EAAG,UAAU,GAAG,GAAG,GAAY,GAAa,EAAS;AAEtK,EADA,IAAQ,EAAS,aAAa,GAAW,eAAe,EACxD,EAAM,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC;OAG1F,CADA,IAAQ,EAAS,OAAO,QAAQ,eAAe,EAC/C,EAAM,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,EAAoB,EAAG,CAAC,CAAC,KAAK,MAAM,EAAoB,EAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,UAAU,EAAY;AAShO,QAPA,EAAiB,GAAM,EAAM,EAC7B,EAAK,gBAAgB,SAAS,GAAQ,GAAO;AAC3C,SAAO,EAAkB,KAAK,GAAQ,EAAM;IAE9C,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,GAAU,WAAW;AAG5B,eAAe,GAAU,GAAQ,GAAM;CACrC,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,QAAQ,EACpE,IAAQ,EAAS,OAAO,QAAQ,eAAe;AAarD,QAVA,EAAM,KAAK,SAFQ,GAEY,CAAC,KAAK,UADjB,GACuC,EAC3D,EAAS,KAAK,SAAS,kBAAkB,EACzC,EAAM,KACJ,aACA,aAAa,EAAE,EAAK,QAAQ,MAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,MAAM,EAAK,KAAK,EAAK,OAAO,IAAI,GAClH,EACD,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAW,YAAY;AAI9B,eAAe,GAAU,GAAQ,GAAM;CACrC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,IAAI,GAAM,SAAS,EAAE,EAChE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,IAAI,GAAM,UAAU,EAAE,EAClE,IAAS;EACb;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG,IAAI,IAAI,IAAI;GAAG,GAAG;GAAG;EAC1B;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EACf;GAAE,GAAG,EAAE,IAAI,KAAK;GAAG,GAAG,CAAC;GAAG;EAC3B,EACG,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ;AAE5C,EADA,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAC1G,KACF,EAAQ,KAAK,SAAS,EAAU;OAGlC,KAAU,EAAmB,GAAU,GAAG,GAAG,EAAO;AAWtD,QATI,KACF,EAAQ,KAAK,SAAS,EAAW,EAEnC,EAAK,QAAQ,GACb,EAAK,SAAS,GACd,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAW,YAAY;AAI9B,eAAe,GAAW,GAAQ,GAAM;CACtC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,IAAI,GAAM,SAAS,EAAE,EAChE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,IAAI,GAAM,UAAU,EAAE,EAClE,IAAS;EACb;GAAE,GAAG,KAAK,IAAI;GAAG,GAAG;GAAG;EACvB;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG,IAAI,IAAI,IAAI;GAAG,GAAG,CAAC;GAAG;EAC3B;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EAChB,EACG,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ;AAE5C,EADA,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAC1G,KACF,EAAQ,KAAK,SAAS,EAAU;OAGlC,KAAU,EAAmB,GAAU,GAAG,GAAG,EAAO;AAWtD,QATI,KACF,EAAQ,KAAK,SAAS,EAAW,EAEnC,EAAK,QAAQ,GACb,EAAK,SAAS,GACd,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAY,aAAa;AAIhC,SAAS,GAAc,GAAQ,GAAM;CACnC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AAEvD,CADA,EAAK,QAAQ,IACb,EAAK,aAAa;CAClB,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAe,EAAK,CAAC,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACnG,EAAE,iBAAc,GAChB,IAAQ,KAAK,IAAI,IAAI,GAAM,SAAS,EAAE,EACtC,IAAS,KAAK,IAAI,IAAI,GAAM,UAAU,EAAE,EAExC,IAAS;EACb;GAAE,GAAG;GAAO,GAAG;GAAG;EAClB;GAAE,GAAG;GAAG,GAAG,IAAS,IAAM;GAAG;EAC7B;GAAE,GAAG,IAAQ;GAAS,GAAG,IAAS,IAAM;GAAG;EAC3C;GAAE,GAAG;GAAG,GAAG,IAAI;GAAQ;EACvB;GAAE,GAAG;GAAO,GAAG,IAAS,IAAM;GAAG;EACjC;GAAE,GAAG;GAAS,GAAG,IAAS,IAAM;GAAG;EACpC,EACK,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAW,EAAqB,EAAO,EACvC,IAAW,EAAG,KAAK,GAAU,EAAQ,EACrC,IAAiB,EAAS,aAAa,GAAU,eAAe;AActE,QAbI,KAAa,EAAK,SAAS,eAC7B,EAAe,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEvD,KAAc,EAAK,SAAS,eAC9B,EAAe,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE5D,EAAe,KAAK,aAAa,cAAc,IAAQ,EAAE,GAAG,CAAC,EAAO,GAAG,EACvE,EAAiB,GAAM,EAAe,EACtC,EAAK,YAAY,SAAS,GAAO;AAG/B,SAFA,EAAI,KAAK,2BAA2B,GAAM,EAAM,EACpC,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAe,gBAAgB;AAItC,IAAI,KAAuC,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,GAAI,MACvE;CACL,IAAI,EAAE,GAAG,IAAI;CACb,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC5B,IAAI,EAAG,GAAG,EAAG,SAAS,CAAC,EAAM;CAC7B,MAAM;CACN,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC5B,MAAM,CAAC;CACP,IAAI,EAAE,GAAG,IAAI,IAAK;CAClB,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC7B,CAAC,KAAK,IAAI,EACV,sBAAsB,EACrB,KAA4C,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,GAAI,MAC5E;CACL,IAAI,EAAE,GAAG,IAAI;CACb,IAAI,IAAI,EAAM,GAAG,IAAI;CACrB,IAAI,EAAG,GAAG,EAAG,SAAS,CAAC,EAAM;CAC7B,MAAM;CACN,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC5B,MAAM,CAAC;CACP,IAAI,EAAE,GAAG,IAAI,IAAK;CAClB,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM;CAC7B,CAAC,KAAK,IAAI,EACV,2BAA2B,EAC1B,KAA4C,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,MACxE,CAAC,IAAI,IAAI,IAAQ,EAAE,GAAG,CAAC,IAAS,KAAK,IAAI,EAAG,GAAG,EAAG,SAAS,EAAM,IAAI,CAAC,KAAK,IAAI,EACrF,2BAA2B;AAC9B,eAAe,GAAc,GAAQ,GAAM;CACzC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,IAAI,EAAK,SAAS,EAAE,EAC/D,IAAK,IAAI,GACT,IAAK,KAAM,MAAM,IAAI,KACrB,IAAI,KAAK,IAAI,EAAK,SAAS,KAAM,EAAK,WAAW,IAAI,EAAK,UAAU,EAAE,EACtE,IAAc,IAAI,IACpB,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAgB,GAA0B,GAAG,GAAG,GAAG,GAAG,GAAI,GAAI,EAAY,EAC1E,IAAgB,GAA0B,GAAG,GAAI,GAAG,GAAG,GAAI,EAAG,EAC9D,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAY,EAAG,KAAK,GAAe,EAAQ,EAC3C,IAAY,EAAG,KAAK,GAAe,EAAQ;AAKjD,EAJoB,EAAS,aAAa,GAAW,eAAe,CACxD,KAAK,SAAS,OAAO,EACjC,IAAY,EAAS,aAAa,GAAW,eAAe,EAC5D,EAAU,KAAK,SAAS,wBAAwB,EAC5C,KACF,EAAU,KAAK,SAAS,EAAU;QAE/B;EACL,IAAM,IAAW,GAAqB,GAAG,GAAG,GAAG,GAAG,GAAI,GAAI,EAAY;AACtE,MAAY,EAAS,OAAO,QAAQ,eAAe,CAAC,KAAK,KAAK,EAAS,CAAC,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC,CAAC,KAAK,SAAS,EAAW;;AAyBxL,QAvBA,EAAU,KAAK,kBAAkB,EAAG,EACpC,EAAU,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,GAAI,GAAG,EACrE,EAAiB,GAAM,EAAU,EACjC,EAAM,KACJ,aACA,aAAa,EAAE,EAAK,QAAQ,MAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,KAAK,KAAM,EAAK,KAAK,EAAK,OAAO,IAAI,GACvH,EACD,EAAK,YAAY,SAAS,GAAO;EAC/B,IAAM,IAAM,EAAkB,KAAK,GAAM,EAAM,EACzC,IAAI,EAAI,KAAK,EAAK,KAAK;AAC7B,MAAI,KAAM,MAAM,KAAK,IAAI,EAAE,IAAI,EAAK,SAAS,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,EAAK,SAAS,KAAK,KAAK,KAAK,IAAI,EAAI,KAAK,EAAK,KAAK,GAAG,IAAI,EAAK,UAAU,KAAK,IAAI,IAAK;GAC7J,IAAI,IAAI,IAAK,KAAM,IAAI,IAAI,KAAK,IAAK;AAQrC,GAPI,IAAI,MACN,IAAI,KAAK,KAAK,EAAE,GAElB,IAAI,IAAK,GACL,EAAM,KAAK,EAAK,KAAK,KAAK,MAC5B,IAAI,CAAC,IAEP,EAAI,KAAK;;AAEX,SAAO;IAEF;;AAET,EAAO,IAAe,gBAAgB;AAItC,eAAe,GAAmB,GAAQ,GAAM;CAC9C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAgB,IAAI,GACpB,IAAS,IAAI,GACb,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI;GAAK,GAAG,CAAC,IAAS;GAAG;EAC3C;GAAE,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI;GAAK,GAAG,IAAS;GAAG;EAC1C,GAAG,EACD,CAAC,IAAI,IAAI,IAAI,IAAI,IACjB,IAAS,GACT,IAAI,IAAI,IAAI,IAAI,IAChB,IAAS,GACT,GACA,GACD;EACD;GAAE,GAAG,IAAI,IAAI,IAAI,IAAI;GAAK,GAAG,CAAC,IAAS;GAAG;EAC1C;GAAE,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI;GAAK,GAAG,CAAC,IAAS;GAAG;EAC3C;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAS;GAAG;EAC7B;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,IAAS,IAAI;GAAK;EAClC;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAS;GAAG;EAC9B,EACK,IAAO,EAAG,QACd,EAAO,KAAK,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAC7B,EACD,EACK,IAAe,EAAS,aAAa,GAAM,eAAe;AAkBhE,QAjBA,EAAa,KAAK,SAAS,wBAAwB,EAC/C,KAAa,EAAK,SAAS,eAC7B,EAAa,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAa,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAa,KAAK,aAAa,eAAe,CAAC,IAAgB,EAAE,GAAG,EACpE,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,IAAI,IAAI,KAAM,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,IAAgB,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAC5K,EACD,EAAiB,GAAM,EAAa,EACpC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAoB,qBAAqB;AAIhD,eAAe,GAAU,GAAQ,GAAM;CACrC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EAEtE,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI,GACT,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAkB;EACtB;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI;GAAY;EACxC;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI,IAAI;GAAY;EAC5C;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI,IAAI;GAAY;EAChD;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI;GAAG;EACnC;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG;EACtB;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI,IAAI;GAAY;EACnC;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI,IAAI;GAAY;EAChD;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI;GAAY;EAC5C;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI;GAAY;EACxC;GAAE,GAAG,IAAI;GAAY;GAAG;EACxB;GAAE;GAAG;GAAG;EACR;GAAE;GAAG,GAAG,IAAI;GAAY;EACzB,EACK,IAAkB;EACtB;GAAE;GAAG,GAAG,IAAI;GAAY;EACxB;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI;GAAY;EAC5C;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI;GAAG;EACnC;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG;EACtB;GAAE,GAAG,IAAI;GAAG;GAAG;EACf;GAAE;GAAG;GAAG;EACT;AACD,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAY,EAAqB,EAAgB,EACjD,IAAY,EAAG,KAAK,GAAW,EAAQ,EACvC,IAAY,EAAqB,EAAgB,EACjD,IAAY,EAAG,KAAK,GAAW;EAAE,GAAG;EAAS,MAAM;EAAQ,CAAC,EAC5D,IAAa,EAAS,aAAa,GAAW,eAAe;AAkBnE,QAjBA,EAAW,aAAa,GAAW,eAAe,EAClD,EAAW,KAAK,SAAS,wBAAwB,EAC7C,KAAa,EAAK,SAAS,eAC7B,EAAW,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEnD,KAAc,EAAK,SAAS,eAC9B,EAAW,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAExD,EAAM,KACJ,aACA,aAAa,EAAE,EAAK,QAAQ,KAAK,KAAc,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,KAAK,KAAc,EAAK,KAAK,EAAK,OAAO,IAAI,GAC5I,EACD,EAAiB,GAAM,EAAW,EAClC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAiB,EAAM;IAG9D;;AAET,EAAO,IAAW,YAAY;AAI9B,eAAe,GAAwB,GAAQ,GAAM;CACnD,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAgB,IAAI,GACpB,IAAS,IAAI,GACb,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAS,GAEd,EAAE,iBAAc,GAChB,IAAa,EACjB,IAAI,GACJ,IAAI,IAAS,GACb,IAAI,IAAI,GACR,IAAI,IAAS,GACb,GACA,GACD,EACK,IAAgB,IAAa,EAAW,SAAS,IACjD,IAAkB;EACtB;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI;GAAY;EACxC;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI,IAAS;GAAY;EACjD,GAAG;EACH;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,EAAc,IAAI;GAAY;EAC1D;GAAE,GAAG,IAAI;GAAG,GAAG,EAAc,IAAI;GAAY;EAC7C;GAAE,GAAG,IAAI;GAAG,GAAG,EAAc,IAAI;GAAgB;EACjD;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,EAAc,IAAI;GAAgB;EAC9D;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI;GAAY;EAC5C;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI;GAAY;EACxC;GAAE,GAAG,IAAI;GAAY;GAAG;EACxB;GAAE;GAAG;GAAG;EACR;GAAE;GAAG,GAAG,IAAI;GAAY;EACzB,EACK,IAAkB;EACtB;GAAE;GAAG,GAAG,IAAI;GAAY;EACxB;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,IAAI;GAAY;EAC5C;GAAE,GAAG,IAAI,IAAI;GAAY,GAAG,EAAc,IAAI;GAAY;EAC1D;GAAE,GAAG,IAAI;GAAG,GAAG,EAAc,IAAI;GAAY;EAC7C;GAAE,GAAG,IAAI;GAAG;GAAG;EACf;GAAE;GAAG;GAAG;EACT,EACK,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAY,EAAqB,EAAgB,EACjD,IAAY,EAAG,KAAK,GAAW,EAAQ,EACvC,IAAY,EAAqB,EAAgB,EACjD,IAAY,EAAG,KAAK,GAAW,EAAQ,EACvC,IAAQ,EAAS,aAAa,GAAW,eAAe;AAmB9D,QAlBA,EAAM,aAAa,EAAU,EAC7B,EAAM,KAAK,SAAS,wBAAwB,EACxC,KAAa,EAAK,SAAS,eAC7B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAE9C,KAAc,EAAK,SAAS,eAC9B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEnD,EAAM,KAAK,aAAa,eAAe,CAAC,IAAgB,EAAE,GAAG,EAC7D,EAAM,KACJ,aACA,aAAa,EAAE,EAAK,QAAQ,KAAK,KAAc,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,KAAK,IAAa,IAAgB,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAChK,EACD,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAiB,EAAM;IAG9D;;AAET,EAAO,IAAyB,0BAA0B;AAI1D,eAAe,GAAK,GAAQ,GAAM,EAAE,QAAQ,EAAE,uBAAoB;CAChE,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AAGvD,CAFA,EAAK,aAAa,GACI,EAAK,iBAAiB,EAAuB,GAAW,CAAC,KAE7E,EAAK,cAAc;CAErB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAa,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EAC7E,IAAc,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EAChF,IAAI,CAAC,IAAa,GAClB,IAAI,CAAC,IAAc,GACnB,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM;EACtC,MAAM,EAAe;EACrB,QAAQ,EAAe;EACxB,CAAC;AACF,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAgB,EAAG,UAAU,GAAG,GAAG,GAAY,GAAa,EAAQ,EACpE,IAAQ,EAAS,aAAa,GAAe,eAAe;AAgBlE,QAfA,EAAM,KAAK,SAAS,wBAAwB,EACxC,KAAa,EAAK,SAAS,eAC7B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAE9C,KAAc,EAAK,SAAS,eAC9B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEnD,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,MAAM,EAAK,KAAK,EAAK,OAAO,IAAI,GAChH,EACD,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAM,OAAO;AAIpB,IAAI,KAAyC,mBAAQ,GAAG,GAAG,MAClD;CACL,IAAI,IAAI,IAAO,EAAE,GAAG;CACpB,IAAI,IAAI,EAAK,GAAG,IAAI,IAAO;CAC3B,IAAI,IAAI,IAAO,EAAE,GAAG,IAAI;CACxB,IAAI,EAAE,GAAG,IAAI,IAAO;CACpB;CACD,CAAC,KAAK,IAAI,EACV,yBAAyB;AAC5B,eAAe,GAAS,GAAQ,GAAM;CACpC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAG1E,IAFI,EAAK,QAAQ,EAAK,WAClB,EAAK,SAAS,EAAK,UAEvB,IAAa,IACb,IAAS;EACb;GAAE,GAAG,IAAI;GAAG,GAAG;GAAG;EAClB;GAAE,GAAG;GAAG,GAAG,CAAC,IAAI;GAAG;EACnB;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC;GAAG;EACnB;GAAE,GAAG;GAAG,GAAG,CAAC,IAAI;GAAG;EACpB,EACG,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAW,GAAuB,GAAG,GAAG,EAAE,EAC1C,IAAY,EAAG,KAAK,GAAU,EAAQ;AAE5C,EADA,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,IAAI,EAAW,IAAI,IAAI,EAAE,GAAG,EACvH,KACF,EAAQ,KAAK,SAAS,EAAU;OAIlC,CADA,IAAU,EAAmB,GAAU,GAAG,GAAG,EAAO,EACpD,EAAQ,KAAK,aAAa,aAAa,CAAC,IAAI,IAAI,EAAW,IAAI,IAAI,EAAE,GAAG;AAoB1E,QAlBI,KACF,EAAQ,KAAK,SAAS,EAAW,EAEnC,EAAiB,GAAM,EAAQ,EAC/B,EAAK,gBAAgB,SAAS,GAAQ,GAAO;EAC3C,IAAM,IAAK,EAAO,OACZ,IAAU;GACd;IAAE,GAAG,IAAK;IAAG,GAAG;IAAG;GACnB;IAAE,GAAG;IAAI,GAAG,CAAC,IAAK;IAAG;GACrB;IAAE,GAAG,IAAK;IAAG,GAAG,CAAC;IAAI;GACrB;IAAE,GAAG;IAAG,GAAG,CAAC,IAAK;IAAG;GACrB,EACK,IAAM,EAAkB,QAAQ,GAAQ,GAAS,EAAM;AAC7D,SAAO;GAAE,GAAG,EAAI,IAAI;GAAK,GAAG,EAAI,IAAI;GAAK;IAE3C,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,KAAK,cAAc,GAAM,EAAM;IAEjC;;AAET,EAAO,IAAU,WAAW;AAI5B,eAAe,GAAoB,GAAQ,GAAM;CAC/C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,IAAI,GAAM,SAAS,EAAE,EAChE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,IAAI,GAAM,UAAU,EAAE,EAClE,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI,GACT,IAAQ,IAAI,GACZ,IAAS;EACb;GAAE,GAAG,IAAI;GAAO;GAAG;EACnB;GAAE;GAAG,GAAG;GAAG;EACX;GAAE,GAAG,IAAI;GAAO,GAAG,CAAC;GAAG;EACvB;GAAE,GAAG,CAAC;GAAG,GAAG,CAAC;GAAG;EAChB;GAAE,GAAG,CAAC;GAAG;GAAG;EACb,EACK,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe;AAiBhE,QAhBA,EAAQ,KAAK,SAAS,wBAAwB,EAC1C,KAAa,EAAK,SAAS,eAC7B,EAAQ,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEhD,KAAc,EAAK,SAAS,eAC9B,EAAQ,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAErD,EAAQ,KAAK,aAAa,aAAa,CAAC,IAAQ,EAAE,KAAK,EACvD,EAAM,KACJ,aACA,aAAa,CAAC,IAAQ,IAAI,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,MAAM,EAAK,KAAK,EAAK,OAAO,IAAI,GAC5H,EACD,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAqB,sBAAsB;AAKlD,eAAe,GAAc,GAAQ,GAAM;CACzC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAI;AACJ,CACE,IADG,EAAK,aAGE,UAAU,EAAK,aAFf;CAIZ,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAQ,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACtF,IAAI,EAAS,OAAO,IAAI,EACxB,IAAQ,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,QAAQ,CAAC,KAAK,SAAS,EAAW,EAC7E,IAAc,EAAK,aACnB,IAAQ,EAAK,OACb,IAAQ,MAAM,EAAoB,GAAO,GAAO,EAAK,YAAY,IAAM,GAAK,EAC9E,IAAO;EAAE,OAAO;EAAG,QAAQ;EAAG;AAClC,KAAI,EAAuB,GAAY,CAAC,EAAE;EACxC,IAAM,IAAO,EAAM,SAAS,IACtB,IAAMC,EAAQ,EAAM;AAG1B,EAFA,IAAO,EAAK,uBAAuB,EACnC,EAAI,KAAK,SAAS,EAAK,MAAM,EAC7B,EAAI,KAAK,UAAU,EAAK,OAAO;;AAEjC,GAAI,KAAK,UAAU,EAAY;CAC/B,IAAM,IAAW,KAAe,EAAE,EAC5B,IAAW,EAAM,SAAS,EAC1B,IAAQ,MAAM,EAClB,GACA,MAAM,QAAQ,EAAS,GAAG,EAAS,KAAK,QAAQ,GAAG,GACnD,EAAK,YACL,IACA,GACD,EACK,IAAM,EAAM,SAAS,IACrB,IAAKA,EAAQ,EAAM;AAGzB,CAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;CAC9B,IAAM,KAAe,EAAK,WAAW,KAAK;AAU1C,CATA,EAAQ,EAAM,CAAC,KACb,aACA,iBAAiB,EAAK,QAAQ,EAAS,QAAQ,KAAK,EAAS,QAAQ,EAAK,SAAS,KAAK,QAAQ,EAAS,SAAS,IAAc,KAAK,IACtI,EACD,EAAQ,EAAM,CAAC,KACb,aACA,iBAAiB,EAAK,QAAQ,EAAS,QAAQ,IAAI,EAAE,EAAS,QAAQ,EAAK,SAAS,KAAK,OAC1F,EACD,IAAO,EAAM,MAAM,CAAC,SAAS,EAC7B,EAAM,KACJ,aACA,eAAe,CAAC,EAAK,QAAQ,IAAI,QAAQ,CAAC,EAAK,SAAS,IAAI,IAAc,KAAK,IAChF;CACD,IAAM,IAAa,EAAK,SAAS,EAAK,WAAW,IAC3C,IAAc,EAAK,UAAU,EAAK,WAAW,IAC7C,IAAI,CAAC,EAAK,QAAQ,IAAI,GACtB,IAAI,CAAC,EAAK,SAAS,IAAI,GACzB,GACA;AACJ,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAY,EAAG,KACnB,EAAuB,GAAG,GAAG,GAAY,GAAa,EAAK,MAAM,EAAE,EACnE,EACD,EACK,IAAY,EAAG,KACnB,CAAC,EAAK,QAAQ,IAAI,GAClB,CAAC,EAAK,SAAS,IAAI,IAAc,EAAS,SAAS,GACnD,EAAK,QAAQ,IAAI,GACjB,CAAC,EAAK,SAAS,IAAI,IAAc,EAAS,SAAS,GACnD,EACD;AAKD,EAJA,IAAY,EAAS,cACnB,EAAI,MAAM,yBAAyB,EAAU,EACtC,IACN,eAAe,EAClB,IAAQ,EAAS,cACf,EAAI,MAAM,yBAAyB,EAAU,EACtC,IACN,eAAe;OAKlB,CAHA,IAAQ,EAAE,OAAO,QAAQ,eAAe,EACxC,IAAY,EAAE,OAAO,OAAO,EAC5B,EAAM,KAAK,SAAS,oBAAoB,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,KAAK,CAAC,EAAK,QAAQ,IAAI,EAAY,CAAC,KAAK,KAAK,CAAC,EAAK,SAAS,IAAI,EAAY,CAAC,KAAK,SAAS,EAAK,SAAS,EAAK,WAAW,GAAG,CAAC,KAAK,UAAU,EAAK,UAAU,EAAK,WAAW,GAAG,EACvP,EAAU,KAAK,SAAS,UAAU,CAAC,KAAK,MAAM,CAAC,EAAK,QAAQ,IAAI,EAAY,CAAC,KAAK,MAAM,EAAK,QAAQ,IAAI,EAAY,CAAC,KAAK,MAAM,CAAC,EAAK,SAAS,IAAI,IAAc,EAAS,SAAS,EAAY,CAAC,KAAK,MAAM,CAAC,EAAK,SAAS,IAAI,IAAc,EAAS,SAAS,EAAY;AAM7Q,QAJA,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAe,gBAAgB;AAGtC,eAAe,GAAY,GAAQ,GAAM;AAQvC,QAAO,EAAS,GAAQ,GAPR;EACd,IAAI;EACJ,IAAI;EACJ,SAAS;EACT,gBAAgB,GAAM,WAAW,KAAK;EACtC,gBAAgB,GAAM,WAAW,KAAK;EACvC,CACqC;;AAExC,EAAO,IAAa,cAAc;AAIlC,eAAe,GAAc,GAAQ,GAAM;CACzC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAc,GAAM,WAAW,GAC/B,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAI,CAAC,EAAK,QAAQ,IAAI,GACtB,IAAI,CAAC,EAAK,SAAS,IAAI,GACvB,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE;GAAG;GAAG;EACR;GAAE,GAAG,IAAI,IAAI;GAAG;GAAG;EACnB;GAAE,GAAG,IAAI,IAAI;GAAG,GAAG,IAAI;GAAG;EAC1B;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG;EACtB;GAAE,GAAG,IAAI;GAAG;GAAG;EACf;GAAE;GAAG;GAAG;EACR;GAAE;GAAG,GAAG,IAAI;GAAG;EAChB,EACK,IAAY,EAAG,QACnB,EAAO,KAAK,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAC7B,EACD,EACK,IAAQ,EAAS,aAAa,GAAW,eAAe;AAgB9D,QAfA,EAAM,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC,EACtF,KAAc,EAAK,SAAS,eAC9B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE/C,KAAa,EAAK,SAAS,eAC7B,EAAM,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEnD,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,IAAI,KAAK,EAAK,WAAW,MAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAK,WAAW,MAAM,EAAK,KAAK,EAAK,OAAO,IAAI,GAC1I,EACD,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAe,gBAAgB;AAItC,eAAe,GAAW,GAAQ,GAAM;CACtC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI,GACT,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE;GAAG;GAAG;EACR;GAAE;GAAG,GAAG,IAAI;GAAG;EACf;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG;EACtB;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI,IAAI;GAAG;EAC3B,EACK,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe;AAkBhE,QAjBA,EAAQ,KAAK,SAAS,wBAAwB,EAC1C,KAAa,EAAK,SAAS,eAC7B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAQ,KAAK,aAAa,gBAAgB,IAAI,EAAE,GAAG,EACnD,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,KAAK,EAAK,WAAW,MAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,EAAK,WAAW,MAAM,EAAK,KAAK,EAAK,OAAO,IAAI,GACvI,EACD,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAY,aAAa;AAGhC,eAAe,GAAY,GAAQ,GAAM;AAQvC,QAAO,EAAS,GAAQ,GAPR;EACd,IAAI;EACJ,IAAI;EACJ,SAAS;EACT,eAAe,EAAK,kBAAkB,GAAM,WAAW,KAAK;EAC5D,gBAAgB,GAAM,WAAW,KAAK;EACvC,CACqC;;AAExC,EAAO,IAAa,aAAa;AAIjC,eAAe,GAAQ,GAAQ,GAAM;CACnC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,EAAK,SAAS,EAAK,SACvB,IAAI,EAAK,QAAQ,IAAI,IAAI,EAAK,SAC9B,IAAS,IAAI,GACb,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,CAAC,IAAI;GAAG;EACjC;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,CAAC,IAAI;GAAG;EAChC,GAAG,EAAqB,CAAC,IAAI,IAAI,GAAQ,GAAG,GAAQ,IAAI,IAAI,IAAI;EAChE;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,IAAI;GAAG;EAC/B,GAAG,EAAqB,IAAI,IAAI,GAAQ,GAAG,GAAQ,IAAI,KAAK,IAAI;EACjE,EACK,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe;AAahE,QAZA,EAAQ,KAAK,SAAS,mCAAmC,EACrD,KAAa,EAAK,SAAS,eAC7B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAS,UAAU;AAG1B,eAAe,GAAM,GAAQ,GAAM;AAMjC,QAAO,EAAS,GAAQ,GALR;EACd,IAAI;EACJ,IAAI;EACJ,SAAS;EACV,CACqC;;AAExC,EAAO,IAAO,QAAQ;AAItB,SAAS,GAAS,GAAQ,GAAM,EAAE,QAAQ,EAAE,uBAAoB;CAC9D,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,iBAAc,GAChB,EAAE,cAAW,gBAAa,kBAAe,GACzC,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,eAAe,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EAC7F,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAY,EAAG,OAAO,GAAG,GAAG,IAAI;EACpC,GAAG;EACH,QAAQ;EACR,aAAa;EACd,CAAC,EACI,IAAY,KAAe,GAC3B,IAAiB,EAAG,OAAO,GAAG,GAAG,GAAG;EACxC,GAAG;EACH,MAAM;EACN,QAAQ;EACR,aAAa;EACb,WAAW;EACZ,CAAC,EACI,IAAU,EAAS,aAAa,GAAW,eAAe;AAYhE,QAXA,EAAQ,aAAa,EAAe,EAChC,KACF,EAAQ,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEhD,KACF,EAAQ,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAErD,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,OAAO,GAAM,GAAG,EAAM;IAE1C;;AAET,EAAO,IAAU,WAAW;AAI5B,SAAS,GAAW,GAAQ,GAAM,EAAE,QAAQ,EAAE,uBAAoB;CAChE,IAAM,EAAE,iBAAc,GAChB,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,eAAe,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EAC/F;AACJ,KAAI,EAAK,SAAS,aAAa;EAE7B,IAAM,IADKC,EAAQ,IAAI,EAAS,CACX,OAAO,GAAG,GAAG,IAAI,EAAe,EAAU,CAAC;AAEhE,EADA,IAAU,EAAS,aAAa,EAAU,EAC1C,EAAQ,KAAK,SAAS,cAAc,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,KAAK,UAAU,GAAG;OAGtF,CADA,IAAU,EAAS,OAAO,UAAU,eAAe,EACnD,EAAQ,KAAK,SAAS,cAAc,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,KAAK,UAAU,GAAG;AAMxF,QAJA,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,OAAO,GAAM,GAAG,EAAM;IAE1C;;AAET,EAAO,IAAY,aAAa;AAIhC,eAAe,GAAW,GAAQ,GAAM;CACtC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,KAAe,GAAM,WAAW,KAAK,GACrC,IAAI,EAAK,QAAQ,EAAK,SACtB,IAAI,EAAK,SAAS,EAAK,SACvB,IAAI,CAAC,EAAK,QAAQ,IAAI,GACtB,IAAI,CAAC,EAAK,SAAS,IAAI,GACvB,IAAS;EACb;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EACf;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EACf;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAI,GAAG;GAAG;EACf;GAAE,GAAG,IAAI;GAAG,GAAG;GAAG;EAClB;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC;GAAG;EACnB;GAAE,GAAG;GAAI,GAAG,CAAC;GAAG;EAChB;GAAE,GAAG;GAAI,GAAG;GAAG;EAChB;AACD,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAY,EAAG,UAAU,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAQ,EACtD,IAAK,EAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,EAAQ,EACrC,IAAK,EAAG,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAQ;AAEnD,EADA,EAAS,aAAa,GAAI,eAAe,EACzC,EAAS,aAAa,GAAI,eAAe;EACzC,IAAM,IAAQ,EAAS,aAAa,GAAW,eAAe,EACxD,EAAE,iBAAc;AAEtB,EADA,EAAM,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC,EAC1F,EAAiB,GAAM,EAAM;QACxB;EACL,IAAM,IAAK,EAAmB,GAAU,GAAG,GAAG,EAAO;AAIrD,EAHI,KACF,EAAG,KAAK,SAAS,EAAW,EAE9B,EAAiB,GAAM,EAAG;;AAK5B,QAHA,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAY,aAAa;AAIhC,eAAe,GAAW,GAAQ,GAAM;CACtC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI,GACT,IAAW,KAAM,GACjB,IAAY,KAAM,GAClB,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAa;EACjB;GAAE,GAAG,IAAI,IAAW;GAAG;GAAG;EAC1B;GAAE,GAAG,IAAI,IAAI,IAAW;GAAG;GAAG;EAC9B;GAAE,GAAG,IAAI,IAAI,IAAW;GAAG,GAAG,IAAI;GAAG;EACrC;GAAE,GAAG,IAAI,IAAW;GAAG,GAAG,IAAI;GAAG;EAClC,EACK,IAAY;EAChB;GAAE,GAAG,IAAI,IAAI,IAAW;GAAG,GAAG,IAAI;GAAG;EACrC;GAAE,GAAG,IAAI,IAAI,IAAW;GAAG,GAAG,IAAI;GAAG;EACrC;GAAE,GAAG,IAAI,IAAI,IAAW;GAAG,GAAG,IAAI,IAAI;GAAW;EAClD;AACD,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAW,EAAqB,EAAW,EAC3C,IAAW,EAAG,KAAK,GAAU,EAAQ,EACrC,IAAU,EAAqB,EAAU,EACzC,IAAU,EAAG,KAAK,GAAS;EAAE,GAAG;EAAS,WAAW;EAAS,CAAC,EAC9D,IAAc,EAAS,aAAa,GAAS,eAAe;AAclE,QAbA,EAAY,aAAa,GAAU,eAAe,EAClD,EAAY,KAAK,SAAS,wBAAwB,EAC9C,KAAa,EAAK,SAAS,eAC7B,EAAY,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEpD,KAAc,EAAK,SAAS,eAC9B,EAAY,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEzD,EAAiB,GAAM,EAAY,EACnC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAY,EAAM;IAGzD;;AAET,EAAO,IAAY,aAAa;AAIhC,eAAe,GAAyB,GAAQ,GAAM;CACpD,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAgB,IAAI,GACpB,IAAW,KAAM,GACjB,IAAY,KAAM,GAClB,IAAS,IAAI,GACb,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI;GAAK,GAAG,IAAS;GAAG;EAC1C,GAAG,EACD,CAAC,IAAI,IAAI,IAAI,IAAI,IACjB,IAAS,GACT,IAAI,IAAI,IAAI,IAAI,IAChB,IAAS,GACT,GACA,GACD;EACD;GAAE,GAAG,IAAI,IAAI,IAAI,IAAI;GAAK,GAAG,CAAC,IAAS;GAAG;EAC1C;GAAE,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI;GAAK,GAAG,CAAC,IAAS;GAAG;EAC5C,EACK,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IACrB,IAAI,CAAC,IAAS,IAAI,IAAY,IAC9B,IAAY;EAChB;GAAE,GAAG,IAAI,IAAI;GAAU,IAAI,IAAI,KAAK;GAAK;EACzC;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI,IAAI;GAAW;EAClC;GAAE,GAAG,IAAI;GAAG,IAAI,IAAI,KAAK;GAAK;EAC9B,GAAG,EACD,IAAI,IACH,IAAI,KAAK,KACV,IAAI,IAAI,IACP,IAAI,KAAK,KACV,CAAC,IAAI,KACL,GACD;EACF,EACK,IAAmB,EAAqB,EAAO,EAC/C,IAAmB,EAAG,KAAK,GAAkB,EAAQ,EACrD,IAAyB,EAAqB,EAAU,EACxD,IAAyB,EAAG,KAAK,GAAwB;EAC7D,GAAG;EACH,WAAW;EACZ,CAAC,EACI,IAAe,EAAS,aAAa,GAAwB,eAAe;AAmBlF,QAlBA,EAAa,aAAa,GAAkB,eAAe,EAC3D,EAAa,KAAK,SAAS,wBAAwB,EAC/C,KAAa,EAAK,SAAS,eAC7B,EAAa,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAa,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAa,KAAK,aAAa,eAAe,CAAC,IAAgB,EAAE,GAAG,EACpE,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,KAAK,EAAK,WAAW,MAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,IAAgB,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GAC1J,EACD,EAAiB,GAAM,EAAa,EACpC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAA0B,2BAA2B;AAG5D,eAAe,GAAK,GAAQ,GAAM;CAChC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAa,KAAK,IAAI,EAAK,QAAQ,EAAK,SAAS,GAAM,SAAS,EAAE,EAClE,IAAc,KAAK,IAAI,EAAK,SAAS,EAAK,SAAS,GAAM,UAAU,EAAE,EACrE,IAAI,CAAC,IAAa,GAClB,IAAI,CAAC,IAAc,GACnB,IAAQ,EAAS,OAAO,QAAQ,eAAe;AAMrD,QALA,EAAM,KAAK,SAAS,OAAO,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,UAAU,EAAY,EACjK,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAM,OAAO;AAIpB,IAAI,KAAuC,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,MACnE,IAAI,EAAE,GAAG,EAAE;OACb,EAAG,GAAG,EAAG,WAAc,CAAC,EAAO;OAC/B,EAAM;OACN,EAAG,GAAG,EAAG,WAAc,EAAO;OAC9B,EAAM,GAAG,CAAC,EAAO;OACjB,EAAG,GAAG,EAAG,WAAc,EAAO;OAC9B,CAAC,EAAM,KACX,sBAAsB,EACrB,KAA4C,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,MACxE;CACL,IAAI,EAAE,GAAG;CACT,IAAI,IAAI,EAAM,GAAG;CACjB,IAAI,EAAG,GAAG,EAAG,WAAc,CAAC;CAC5B,IAAI,CAAC,EAAM;CACX,IAAI,EAAG,GAAG,EAAG,WAAc;CAC3B,IAAI,EAAM;CACX,CAAC,KAAK,IAAI,EACV,2BAA2B,EAC1B,KAA4C,mBAAQ,GAAG,GAAG,GAAO,GAAQ,GAAI,MACxE,CAAC,IAAI,IAAI,IAAQ,EAAE,GAAG,CAAC,IAAS,KAAK,IAAI,EAAG,GAAG,EAAG,WAAW,IAAS,CAAC,KAAK,IAAI,EACtF,2BAA2B;AAC9B,eAAe,GAAe,GAAQ,GAAM;CAC1C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,UAAO,mBAAgB,MAAM,EACnD,GACA,GACA,EAAe,EAAK,CACrB,EACK,IAAe,EAAK,SAAS,QAAQ,IAAc,IAAI,GACvD,IAAI,EAAK,SAAS,GAClB,IAAK,IAAI,GACT,IAAK,KAAM,MAAM,IAAI,KACrB,IAAI,EAAK,QAAQ,IAAK,GACtB,EAAE,iBAAc,GAClB;AACJ,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAgB,GAA0B,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAC7D,IAAgB,GAA0B,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAC7D,IAAY,EAAG,KAAK,GAAe,EAAkB,GAAM,EAAE,CAAC,CAAC,EAC/D,IAAY,EAAG,KAAK,GAAe,EAAkB,GAAM,EAAE,MAAM,QAAQ,CAAC,CAAC;AAInF,EAHA,IAAY,EAAS,aAAa,GAAW,eAAe,EAC5D,IAAY,EAAS,aAAa,GAAW,eAAe,EAC5D,EAAU,KAAK,SAAS,wBAAwB,EAC5C,KACF,EAAU,KAAK,SAAS,EAAU;QAE/B;EACL,IAAM,IAAW,GAAqB,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG;AAMzD,EALA,IAAY,EAAS,OAAO,QAAQ,eAAe,CAAC,KAAK,KAAK,EAAS,CAAC,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC,CAAC,KAAK,SAAS,EAAW,EACtL,EAAU,KAAK,SAAS,wBAAwB,EAC5C,KACF,EAAU,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAElD,KACF,EAAU,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW;;AA0BzD,QAvBA,EAAU,KAAK,kBAAkB,EAAG,EACpC,EAAU,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,EAC9D,EAAM,KACJ,aACA,aAAa,EAAE,EAAK,QAAQ,KAAK,KAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,MAAM,EAAK,KAAK,EAAK,OAAO,IAAI,GACvH,EACD,EAAiB,GAAM,EAAU,EACjC,EAAK,YAAY,SAAS,GAAO;EAC/B,IAAM,IAAM,EAAkB,KAAK,GAAM,EAAM,EACzC,IAAI,EAAI,KAAK,EAAK,KAAK;AAC7B,MAAI,KAAM,MAAM,KAAK,IAAI,EAAE,IAAI,EAAK,UAAU,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,EAAK,UAAU,KAAK,KAAK,KAAK,IAAI,EAAI,KAAK,EAAK,KAAK,GAAG,IAAI,EAAK,SAAS,KAAK,IAAI,IAAK;GAC9J,IAAI,IAAI,IAAK,KAAM,IAAI,IAAI,KAAK,IAAK;AAQrC,GAPI,KAAK,MACP,IAAI,KAAK,KAAK,KAAK,IAAI,EAAE,CAAC,GAE5B,IAAI,IAAK,GACL,EAAM,KAAK,EAAK,KAAK,KAAK,MAC5B,IAAI,CAAC,IAEP,EAAI,KAAK;;AAEX,SAAO;IAEF;;AAET,EAAO,IAAgB,iBAAiB;AAIxC,eAAe,GAAU,GAAQ,GAAM;CACrC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAC1E,IAAI,EAAK,QAAQ,EAAK,SACtB,IAAI,EAAK,SAAS,EAAK,SACvB,IAAS;EACb;GAAE,GAAG,KAAK,IAAI;GAAG,GAAG;GAAG;EACvB;GAAE,GAAG,IAAI,IAAI,IAAI;GAAG,GAAG;GAAG;EAC1B;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EACf;GAAE,GAAG;GAAG,GAAG,CAAC;GAAG;EAChB,EACG,GACE,EAAE,iBAAc;AACtB,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ;AAE5C,EADA,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAC1G,KACF,EAAQ,KAAK,SAAS,EAAU;OAGlC,KAAU,EAAmB,GAAU,GAAG,GAAG,EAAO;AAWtD,QATI,KACF,EAAQ,KAAK,SAAS,EAAW,EAEnC,EAAK,QAAQ,GACb,EAAK,SAAS,GACd,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAW,YAAY;AAI9B,eAAe,GAAoB,GAAQ,GAAM;CAC/C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAE1E,IAAI,KAAK,IAAI,IAAU,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EAC9E,IAAI,KAAK,IAAI,IAAW,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACjF,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG,CAAC,IAAI,IAAI;GAAK,GAAG,CAAC,IAAI;GAAG;EAC9B;GAAE,GAAG,IAAI,IAAI;GAAK,GAAG,CAAC,IAAI;GAAG;EAC7B;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAK;EAC7B;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG;EACtB;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,IAAI;GAAG;EACvB;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,CAAC,IAAI,IAAI;GAAK;EAC/B,EACK,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe;AAahE,QAZA,EAAQ,KAAK,SAAS,wBAAwB,EAC1C,KAAa,EAAK,SAAS,eAC7B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAiB,GAAM,EAAQ,EAC/B,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAqB,sBAAsB;AAIlD,eAAe,GAAS,GAAQ,GAAM;CACpC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAgB,EAAK,iBAAiB,EAAuB,GAAY,CAAC,EAC1E,IAAI,EAAK,SAAS,EAAK,WAAW,IAClC,IAAI,IAAI,EAAK,QACb,IAAK,IAAI,EAAK,QACd,IAAS;EACb;GAAE,GAAG;GAAG,GAAG;GAAG;EACd;GAAE,GAAG;GAAI,GAAG;GAAG;EACf;GAAE,GAAG,IAAK;GAAG,GAAG,CAAC;GAAG;EACrB,EACK,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAW,EAAqB,EAAO,EACvC,IAAY,EAAG,KAAK,GAAU,EAAQ,EACtC,IAAU,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG;AAkBpH,QAjBI,KAAa,EAAK,SAAS,eAC7B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAQ,eAAe,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAK,QAAQ,GACb,EAAK,SAAS,GACd,EAAiB,GAAM,EAAQ,EAC/B,EAAM,KACJ,aACA,aAAa,CAAC,EAAK,QAAQ,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,IAAI,KAAK,EAAK,UAAU,EAAK,WAAW,MAAM,IAAgB,IAAI,MAAM,EAAK,KAAK,EAAK,OAAO,KAAK,GACnK,EACD,EAAK,YAAY,SAAS,GAAO;AAE/B,SADA,EAAI,KAAK,sBAAsB,GAAM,GAAQ,EAAM,EAC5C,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAEhD;;AAET,EAAO,IAAU,WAAW;AAI5B,eAAe,GAAmB,GAAQ,GAAM;CAC9C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EACtE,IAAgB,IAAI,GACpB,IAAS,IAAI,GACb,EAAE,iBAAc,GAEhB,IADW,KACW,GACtB,IAAS,IAAW,IAAI,IAAW,IAAI,GACvC,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,IAAS;GAAG;EACrC,GAAG,EACD,CAAC,IAAI,IAAI,GACT,IAAS,GACT,IAAI,IAAI,GACR,IAAS,GACT,GACA,GACD;EACD;GAAE,GAAG,IAAI,IAAI;GAAQ,GAAG,CAAC,IAAS;GAAG;EACrC;GAAE,GAAG,CAAC,IAAI,IAAI;GAAQ,GAAG,CAAC,IAAS;GAAG;EACvC,EACK,IAAmB,EAAqB,EAAO,EAC/C,IAAmB,EAAG,KAAK,GAAkB,EAAQ,EACrD,IAAe,EAAS,aAAa,GAAkB,eAAe;AAkB5E,QAjBA,EAAa,KAAK,SAAS,wBAAwB,EAC/C,KAAa,EAAK,SAAS,eAC7B,EAAa,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAErD,KAAc,EAAK,SAAS,eAC9B,EAAa,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAE1D,EAAa,KAAK,aAAa,eAAe,CAAC,IAAgB,EAAE,GAAG,EACpE,EAAM,KACJ,aACA,aAAa,CAAC,IAAI,KAAK,EAAK,WAAW,MAAM,EAAK,KAAK,EAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAK,WAAW,KAAK,KAAiB,EAAK,KAAK,EAAK,OAAO,IAAI,GACtJ,EACD,EAAiB,GAAM,EAAa,EACpC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAoB,qBAAqB;AAIhD,eAAe,GAAc,GAAQ,GAAM;CACzC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,YAAS,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EAG1E,IAAY,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EAC5E,IAAa,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EAC/E,IAAc,IAAY,GAC5B,IAAI,GACJ,IAAI;AAOR,CANI,IAAI,IAAI,IACV,IAAI,IAAI,IAER,IAAI,IAAI,GAEV,IAAI,KAAK,IAAI,GAAG,IAAS,EACzB,IAAI,KAAK,IAAI,GAAG,GAAU;CAC1B,IAAM,IAAgB,KAAK,IAAI,IAAI,IAAK,IAAI,EAAE,EACxC,IAAS,IAAI,IAAgB,GAC7B,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAS;EACb;GAAE,GAAG,CAAC,IAAI;GAAG,GAAG,IAAS;GAAG;EAC5B,GAAG,EAA2B,CAAC,IAAI,GAAG,IAAS,GAAG,IAAI,GAAG,IAAS,GAAG,GAAe,EAAE;EACtF;GAAE,GAAG,IAAI;GAAG,GAAG,CAAC,IAAS;GAAG;EAC5B,GAAG,EAA2B,IAAI,GAAG,CAAC,IAAS,GAAG,CAAC,IAAI,GAAG,CAAC,IAAS,GAAG,GAAe,GAAG;EAC1F,EACK,IAAe,EAAqB,EAAO,EAC3C,IAAe,EAAG,KAAK,GAAc,EAAQ,EAC7C,IAAW,EAAS,aAAa,GAAc,eAAe;AAapE,QAZA,EAAS,KAAK,SAAS,wBAAwB,EAC3C,KAAa,EAAK,SAAS,eAC7B,EAAS,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEjD,KAAc,EAAK,SAAS,eAC9B,EAAS,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEtD,EAAiB,GAAM,EAAS,EAChC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAQ,EAAM;IAGrD;;AAET,EAAO,IAAe,gBAAgB;AAItC,eAAe,GAAW,GAAQ,GAAM;CACtC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,aAAU,MAAM,EAAY,GAAQ,GAAM,EAAe,EAAK,CAAC,EACjF,IAAI,KAAK,IAAI,EAAK,SAAS,EAAK,WAAW,KAAK,GAAG,GAAM,SAAS,EAAE,EACpE,IAAI,KAAK,IAAI,EAAK,UAAU,EAAK,WAAW,KAAK,GAAG,GAAM,UAAU,EAAE,EAEtE,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI,GACT,EAAE,iBAAc,GAChB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAkB;EACtB;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI;GAAY;EACxC;GAAE,GAAG,IAAI;GAAY,GAAG,IAAI;GAAG;EAC/B;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG;EACtB;GAAE,GAAG,IAAI;GAAG,GAAG,IAAI;GAAY;EAChC,EACK,IAAO,IAAI,IAAI,EAAW,GAAG,IAAI,EAAW,IAAI,IAAI,EAAE,GAAG,IAAI,EAAW,IAAI,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,IAAI,EAAW,GAAG,IAAI,EAAE,IAAI,IAAI,EAAW,GAAG,IAAI,EAAW;mBACjJ,IAAI,EAAW,GAAG,EAAE,IAAI,IAAI,EAAE,GAAG,EAAE;mBACnC,EAAE,GAAG,IAAI,EAAW,IAAI,EAAE,GAAG,IAAI;AAClD,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAK,EAAG,KAAK,GAAM,EAAQ,EAC3B,IAAc,EAAS,aAAa,GAAI,eAAe;AAkB7D,QAjBA,EAAY,KAAK,aAAa,aAAa,IAAa,EAAE,IAAI,IAAa,EAAE,GAAG,EAChF,EAAY,KAAK,SAAS,wBAAwB,EAC9C,KAAa,EAAK,SAAS,eAC7B,EAAY,UAAU,OAAO,CAAC,KAAK,SAAS,EAAU,EAEpD,KAAc,EAAK,SAAS,eAC9B,EAAY,UAAU,OAAO,CAAC,KAAK,SAAS,EAAW,EAEzD,EAAM,KACJ,aACA,aAAa,EAAE,EAAK,QAAQ,KAAK,IAAa,KAAK,EAAK,KAAK,EAAK,QAAQ,IAAI,IAAI,EAAE,EAAK,SAAS,KAAK,IAAa,KAAK,EAAK,KAAK,EAAK,OAAO,IAAI,GACpJ,EACD,EAAiB,GAAM,EAAY,EACnC,EAAK,YAAY,SAAS,GAAO;AAE/B,SADY,EAAkB,QAAQ,GAAM,GAAiB,EAAM;IAG9D;;AAET,EAAO,IAAY,aAAa;AAKhC,eAAe,GAAM,GAAQ,GAAM;CACjC,IAAM,IAAa;AAInB,KAHI,EAAW,UACb,EAAK,QAAQ,EAAW,QAEtB,EAAK,SAAS,aAAa;EAC7B,IAAM,EAAE,gBAAgB,MAAoB,GAAW,EACjD,EAAE,kBAAe;AAOvB,QAAM,GAAM,GANW;GACrB,GAAG;GACH,IAAI,EAAK,KAAK;GACd,MAAM;GACN,WAAW,CAAC,gBAAgB,SAAS,IAAa;GACnD,CACkC;;CAErC,IAAM,IAAS,GAAW;AAC1B,GAAK,gBAAgB,EAAO;CAC5B,IAAI,IAAU,EAAO,IAAI,kBAAkB,IACvC,IAAe,EAAO,IAAI,iBAAiB,GACzC,EAAE,iBAAc,GAChB,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,KAAI,EAAW,WAAW,WAAW,KAAK,EAAK,OAAO;EACpD,IAAM,IAAW;GACf,IAAI;GACJ,IAAI;GACJ,eAAe;GACf,eAAe,IAAU;GACzB,SAAS;GACV;AACD,EAAI,EAAmB,EAAK,OAAO,EAAO,GAAG,EAAS,gBAAgB,IAAI,EAAO,GAAG,mBAClF,EAAK,QAAQ,EAAO,GAAG;EAEzB,IAAM,IAAY,MAAM,EAAS,GAAQ,GAAM,EAAS;AACxD,MAAI,CAAC,EAAS,EAAO,WAAW,EAAE;GAChC,IAAM,IAAc,EAAU,OAAO,OAAO,EACtC,IAAO,EAAY,MAAM,EAAE,SAAS;AAC1C,KAAY,KAAK,aAAa,aAAa,CAAC,EAAK,QAAQ,EAAE,MAAM;;AAEnE,SAAO;;AAET,CAAK,EAAO,eACV,KAAW,MACX,KAAgB;CAElB,IAAI,IAAa,EAAe,EAAK;AACrC,CACE,MAAa;CAEf,IAAM,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACzF,IAAW,MAAM,EAAQ,GAAU,EAAK,SAAS,IAAI,GAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,EAAY;AAC/F,GAAS,UAAU;CACnB,IAAI,IAAU,GACR,IAAW,EAAE,EACb,IAAO,EAAE,EACX,IAAe,GACf,IAAe,GACf,IAAe,GACf,IAAkB,GAClB,IAAc,IACd,IAAiB;AACrB,MAAK,IAAM,KAAa,EAAW,YAAY;EAC7C,IAAM,IAAW,MAAM,EACrB,GACA,EAAU,MACV,GACA,GACA,GACA,CAAC,iBAAiB,EAClB,EACD;AACD,MAAe,KAAK,IAAI,GAAc,EAAS,QAAQ,EAAQ;EAC/D,IAAM,IAAY,MAAM,EACtB,GACA,EAAU,MACV,GACA,GACA,GACA,CAAC,iBAAiB,EAClB,EACD;AACD,MAAe,KAAK,IAAI,GAAc,EAAU,QAAQ,EAAQ;EAChE,IAAM,IAAW,MAAM,EACrB,GACA,EAAU,KAAK,MAAM,EACrB,GACA,GACA,GACA,CAAC,iBAAiB,EAClB,EACD;AACD,MAAe,KAAK,IAAI,GAAc,EAAS,QAAQ,EAAQ;EAC/D,IAAM,IAAc,MAAM,EACxB,GACA,EAAU,SACV,GACA,GACA,GACA,CAAC,oBAAoB,EACrB,EACD;AACD,MAAkB,KAAK,IAAI,GAAiB,EAAY,QAAQ,EAAQ;EACxE,IAAM,IAAY,KAAK,IAAI,EAAS,QAAQ,EAAU,QAAQ,EAAS,QAAQ,EAAY,OAAO,GAAG;AAErG,EADA,EAAK,KAAK;GAAE;GAAS;GAAW,CAAC,EACjC,KAAW;;CAEb,IAAI,IAAqB;AAMzB,CALI,KAAgB,MAClB,IAAc,IACd,IAAe,GACf,MAEE,KAAmB,MACrB,IAAiB,IACjB,IAAkB,GAClB;CAEF,IAAM,IAAY,EAAS,MAAM,CAAC,SAAS;AAC3C,KAAI,EAAS,QAAQ,IAAU,KAAK,IAAe,IAAe,IAAe,KAAmB,GAAG;EACrG,IAAM,IAAa,EAAS,QAAQ,IAAU,KAAK,IAAe,IAAe,IAAe;AAMhG,EALA,KAAgB,IAAa,GAC7B,KAAgB,IAAa,GACzB,IAAe,MACjB,KAAgB,IAAa,IAE3B,IAAkB,MACpB,KAAmB,IAAa;;CAGpC,IAAM,IAAW,IAAe,IAAe,IAAe,GACxD,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAI,IAAuB;AAC3B,CAAI,EAAK,SAAS,MAChB,IAAuB,EAAK,QAAQ,GAAK,MAAQ,KAAO,GAAK,aAAa,IAAI,EAAE;CAElF,IAAM,IAAI,KAAK,IAAI,EAAU,QAAQ,IAAU,GAAG,GAAM,SAAS,GAAG,EAAS,EACvE,IAAI,KAAK,KAAK,KAAwB,KAAK,EAAS,QAAQ,GAAM,UAAU,EAAE,EAC9E,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI;AA0Bf,CAzBA,EAAS,UAAU,sBAAsB,CAAC,MAAM,GAAG,GAAG,MAAU;EAC9D,IAAM,IAAQC,EAAQ,EAAM,GAAG,EACzB,IAAY,EAAM,KAAK,YAAY,EACrC,IAAa,GACb,IAAa;AACjB,MAAI,GAAW;GAEb,IAAM,IADQ,OAAO,+BAA+B,CAC5B,KAAK,EAAU;AACvC,GAAI,MACF,IAAa,WAAW,EAAU,GAAG,EACrC,IAAa,WAAW,EAAU,GAAG,EACjC,EAAM,KAAK,QAAQ,CAAC,SAAS,iBAAiB,GAChD,KAAc,IACL,EAAM,KAAK,QAAQ,CAAC,SAAS,iBAAiB,GACvD,KAAc,IAAe,IACpB,EAAM,KAAK,QAAQ,CAAC,SAAS,oBAAoB,KAC1D,KAAc,IAAe,IAAe;;AAIlD,IAAM,KACJ,aACA,aAAa,IAAI,IAAU,IAAI,EAAW,IAAI,IAAa,IAAI,EAAS,SAAS,IAAe,EAAE,GACnG;GACD,EACF,EAAS,OAAO,QAAQ,CAAC,KAAK,aAAa,eAAe,CAAC,EAAS,QAAQ,IAAI,QAAQ,IAAI,IAAe,KAAK,IAAI;CACpH,IAAM,IAAY,EAAG,UAAU,GAAG,GAAG,GAAG,GAAG,EAAQ,EAC7C,IAAQ,EAAS,aAAa,GAAW,eAAe,CAAC,KAAK,SAAS,EAAU,KAAK,GAAG,CAAC,EAC1F,EAAE,uBAAmB,GAAW,EAChC,EAAE,aAAS,YAAQ,kBAAe;AACxC,GAAS,KAAK,EAAE;AAChB,MAAK,IAAM,CAAC,GAAG,MAAQ,EAAK,SAAS,EAAE;EAErC,IAAM,KADkB,IAAI,KACK,KAAM,KAAK,EAAI,YAAY,GACtD,IAAa,EAAG,UAAU,GAAG,EAAS,SAAS,IAAI,GAAK,SAAS,GAAG,GAAK,WAAW;GACxF,GAAG;GACH,MAAM,IAAS,KAAU;GACzB,QAAQ;GACT,CAAC;AACF,IAAS,aAAa,GAAY,UAAU,CAAC,KAAK,SAAS,EAAU,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS,YAAY,IAAS,SAAS,QAAQ;;CAErI,IAAI,IAAY,EAAG,KAAK,GAAG,EAAS,SAAS,GAAG,IAAI,GAAG,EAAS,SAAS,GAAG,EAAQ;AAcpF,CAbA,EAAS,aAAa,EAAU,CAAC,KAAK,SAAS,UAAU,EACzD,IAAY,EAAG,KAAK,IAAe,GAAG,EAAS,SAAS,GAAG,IAAe,GAAG,IAAI,GAAG,EAAQ,EAC5F,EAAS,aAAa,EAAU,CAAC,KAAK,SAAS,UAAU,EACrD,MACF,IAAY,EAAG,KACb,IAAe,IAAe,GAC9B,EAAS,SAAS,GAClB,IAAe,IAAe,GAC9B,IAAI,GACJ,EACD,EACD,EAAS,aAAa,EAAU,CAAC,KAAK,SAAS,UAAU,GAEvD,MACF,IAAY,EAAG,KACb,IAAe,IAAe,IAAe,GAC7C,EAAS,SAAS,GAClB,IAAe,IAAe,IAAe,GAC7C,IAAI,GACJ,EACD,EACD,EAAS,aAAa,EAAU,CAAC,KAAK,SAAS,UAAU;AAE3D,MAAK,IAAM,KAAY,EAQrB,CAPA,IAAY,EAAG,KACb,GACA,EAAS,SAAS,IAAI,GACtB,IAAI,GACJ,EAAS,SAAS,IAAI,GACtB,EACD,EACD,EAAS,aAAa,EAAU,CAAC,KAAK,SAAS,UAAU;AAG3D,KADA,EAAiB,GAAM,EAAM,EACzB,KAAc,EAAK,SAAS,aAAa;EAE3C,IAAM,IADW,EAAW,MAAM,IAAI,EACP,QAAQ,MAC9B,EAAE,SAAS,SAAS,CAC3B,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK;AAEjC,EADA,EAAS,UAAU,OAAO,CAAC,KAAK,SAAS,KAAgB,GAAG,EAC5D,EAAS,UAAU,sBAAsB,CAAC,KAAK,SAAS,EAAW;;AAKrE,QAHA,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAO,QAAQ;AACtB,eAAe,EAAQ,GAAU,GAAW,GAAQ,IAAa,GAAG,IAAa,GAAG,IAAU,EAAE,EAAE,IAAQ,IAAI;CAC5G,IAAM,IAAQ,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,SAAS,EAAQ,KAAK,IAAI,GAAG,CAAC,KAAK,aAAa,aAAa,EAAW,IAAI,EAAW,GAAG,CAAC,KAAK,SAAS,EAAM;AAChK,CAAI,MAAc,EAAkB,EAAU,KAC5C,IAAY,EAAkB,EAAU,EACxC,IAAY,EAAU,WAAW,KAAK,OAAO,CAAC,WAAW,KAAK,OAAO;CAEvE,IAAM,IAAQ,EAAM,MAAM,CAAC,YACzB,MAAM,EACJ,GACA,GACA;EACE,OAAO,EAAmB,GAAW,EAAO,GAAG;EAC/C;EACA,eAAe,EAAO;EACvB,EACD,EACD,CACF;AACD,KAAI,EAAU,SAAS,OAAO,IAAI,EAAU,SAAS,OAAO,EAAE;EAC5D,IAAI,IAAQ,EAAM,SAAS;AAE3B,OADA,EAAM,cAAc,EAAM,YAAY,WAAW,QAAQ,IAAI,CAAC,WAAW,QAAQ,IAAI,EAC9E,EAAM,WAAW,IAEtB,CADA,IAAQ,EAAM,WAAW,IACzB,EAAM,cAAc,EAAM,YAAY,WAAW,QAAQ,IAAI,CAAC,WAAW,QAAQ,IAAI;;CAGzF,IAAI,IAAO,EAAM,SAAS;AAC1B,KAAI,EAAS,EAAO,WAAW,EAAE;EAC/B,IAAM,IAAM,EAAM,SAAS;AAC3B,IAAI,MAAM,YAAY;EACtB,IAAM,IAAKA,EAAQ,EAAM;AAGzB,EAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;;AAEhC,QAAO;;AAET,EAAO,GAAS,UAAU;AAQ1B,eAAe,GAAW,GAAQ,GAAM,GAAQ,GAAe,IAAM,EAAO,MAAM,WAAW,IAAI;CAC/F,IAAM,IAAgB,IAAoB,IAAJ,GAChC,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAe,EAAK,CAAC,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACrG,IAAkB,MAClB,IAAa,MACb,IAAe,MACf,IAAe,MACf,IAAwB,GACxB,IAAmB,GACnB,IAAqB;AAEzB,KADA,IAAkB,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,wBAAwB,EACzE,EAAK,YAAY,SAAS,GAAG;EAC/B,IAAM,IAAa,EAAK,YAAY;AAGpC,EAFA,MAAM,EAAS,GAAiB,EAAE,MAAM,OAAO,EAAW,OAAO,EAAE,EAAE,EAErE,IAD4B,EAAgB,MAAM,CAAC,SAAS,CAChB;;AAG9C,CADA,IAAa,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,mBAAmB,EACnE,MAAM,EAAS,GAAY,GAAM,GAAG,CAAC,sBAAsB,CAAC;CAC5D,IAAM,IAAiB,EAAW,MAAM,CAAC,SAAS;AAElD,CADA,IAAmB,EAAe,QAClC,IAAe,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,qBAAqB;CACvE,IAAI,IAAU;AACd,MAAK,IAAM,KAAU,EAAK,SAAS;EACjC,IAAM,IAAS,MAAM,EAAS,GAAc,GAAQ,GAAS,CAAC,EAAO,iBAAiB,CAAC,CAAC;AACxF,OAAW,IAAS;;AAMtB,CAJA,IAAqB,EAAa,MAAM,CAAC,SAAS,CAAC,QAC/C,KAAsB,MACxB,IAAqB,IAAM,IAE7B,IAAe,EAAS,OAAO,IAAI,CAAC,KAAK,SAAS,qBAAqB;CACvE,IAAI,IAAiB;AACrB,MAAK,IAAM,KAAU,EAAK,SAAS;EACjC,IAAM,IAAS,MAAM,EAAS,GAAc,GAAQ,GAAgB,CAAC,EAAO,iBAAiB,CAAC,CAAC;AAC/F,OAAkB,IAAS;;CAE7B,IAAI,IAAO,EAAS,MAAM,CAAC,SAAS;AACpC,KAAI,MAAoB,MAAM;EAC5B,IAAM,IAAsB,EAAgB,MAAM,CAAC,SAAS;AAC5D,IAAgB,KAAK,aAAa,aAAa,CAAC,EAAoB,QAAQ,EAAE,GAAG;;AAcnF,QAZA,EAAW,KAAK,aAAa,aAAa,CAAC,EAAe,QAAQ,EAAE,IAAI,EAAsB,GAAG,EACjG,IAAO,EAAS,MAAM,CAAC,SAAS,EAChC,EAAa,KACX,aACA,gBAAmB,IAAwB,IAAmB,IAAM,EAAE,GACvE,EACD,IAAO,EAAS,MAAM,CAAC,SAAS,EAChC,EAAa,KACX,aACA,gBAAmB,IAAwB,KAAoB,IAAqB,IAAqB,IAAM,IAAI,IAAM,GAAG,GAC7H,EACD,IAAO,EAAS,MAAM,CAAC,SAAS,EACzB;EAAE;EAAU;EAAM;;AAE3B,EAAO,IAAY,aAAa;AAChC,eAAe,EAAS,GAAa,GAAM,GAAS,IAAS,EAAE,EAAE;CAC/D,IAAM,IAAS,EAAY,OAAO,IAAI,CAAC,KAAK,SAAS,QAAQ,CAAC,KAAK,SAAS,EAAO,KAAK,KAAK,CAAC,EACxF,IAAS,GAAW,EACtB,IAAgB,mBAAmB,IAAO,EAAK,gBAAgB,EAAS,EAAO,WAAW,IAAI,IAC9F,IAAc;AASlB,CARA,AAGE,IAHE,UAAU,IACE,EAAK,OAEL,EAAK,OAEjB,CAAC,KAAiB,EAAY,WAAW,KAAK,KAChD,IAAc,EAAY,UAAU,EAAE,GAEpC,EAAS,EAAY,KACvB,IAAgB;CAElB,IAAM,IAAQ,MAAM,EAClB,GACAC,EAAc,EAAe,EAAY,CAAC,EAC1C;EACE,OAAO,EAAmB,GAAa,EAAO,GAAG;EAEjD,SAAS;EACT;EACD,EACD,EACD,EACG,GACA,IAAgB;AACpB,KAAK,GAiBE;EACL,IAAM,IAAM,EAAM,SAAS,IACrB,IAAKC,EAAQ,EAAM;AAEzB,EADA,IAAgB,EAAI,UAAU,MAAM,OAAO,CAAC,QACxC,EAAI,UAAU,SAAS,UAAU,KACnC,KAAiB,EAAI,UAAU,MAAM,SAAS,CAAC,SAAS;EAE1D,IAAM,IAAS,EAAI,qBAAqB,MAAM;AAC9C,MAAI,GAAQ;GACV,IAAM,IAAY,EAAY,QAAQ,eAAe,GAAG,CAAC,MAAM,KAAK;AACpE,SAAM,QAAQ,IACZ,CAAC,GAAG,EAAO,CAAC,KACT,MAAQ,IAAI,SAAS,MAAQ;IAC5B,SAAS,IAAa;AAGpB,SAFA,EAAI,MAAM,UAAU,QACpB,EAAI,MAAM,gBAAgB,UACtB,GAAW;MACb,IAAM,IAAe,EAAO,UAAU,UAAU,IAAI,OAAO,iBAAiB,SAAS,KAAK,CAAC,UAErF,IAAQ,SAAS,GAAc,GAAG,GADhB,IACqC;AAE7D,MADA,EAAI,MAAM,WAAW,GACrB,EAAI,MAAM,WAAW;WAErB,GAAI,MAAM,QAAQ;AAEpB,OAAI,EAAI;;AASV,IAPA,EAAO,GAAY,aAAa,EAChC,iBAAiB;AACf,KAAI,EAAI,YACN,GAAY;MAEd,EACF,EAAI,iBAAiB,SAAS,EAAW,EACzC,EAAI,iBAAiB,QAAQ,EAAW;KACxC,CACH,CACF;;AAIH,EAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;QA1DZ;AAIlB,EAHI,EAAO,SAAS,sBAAsB,IACxC,EAAQ,EAAM,CAAC,UAAU,QAAQ,CAAC,KAAK,eAAe,GAAG,EAE3D,IAAgB,EAAM,SAAS;EAC/B,IAAM,IAAY,EAAM,SAAS;AAWjC,GAVI,EAAM,gBAAgB,MAAM,EAAM,YAAY,SAAS,MAAM,MAC/D,EAAU,cAAc,EAAY,KAAK,EAAY,UAAU,EAAE,CAAC,WAAW,QAAQ,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,MAAM,EAClG,EAAY,OAAO,QAEvC,EAAU,cAAc,EAAU,YAAY,KAAK,MAAM,EAAU,YAAY,UAAU,EAAE,IAG3F,EAAU,gBAAgB,gBAC5B,EAAU,cAAc,KAE1B,IAAO,EAAM,SAAS;;AA6CxB,QADA,EAAO,KAAK,aAAa,kBAAkB,CAAC,EAAK,UAAU,IAAI,KAAiB,KAAW,IAAI,EACxF,EAAK;;AAEd,EAAO,GAAU,UAAU;AAG3B,eAAe,GAAS,GAAQ,GAAM;CACpC,IAAM,IAAS,GAAY,EACrB,IAAU,EAAO,MAAM,WAAW,IAClC,IAAM,GACN,IAAgB,EAAK,iBAAiB,EAAS,EAAO,WAAW,IAAI,IACrE,IAAY;AAGlB,CAFA,EAAU,cAAc,EAAU,eAAe,EAAE,EACnD,EAAU,UAAU,EAAU,WAAW,EAAE,EAC3C,EAAU,UAAU,EAAU,WAAW,EAAE;CAC3C,IAAM,EAAE,aAAU,YAAS,MAAM,GAAW,GAAQ,GAAM,GAAQ,GAAe,EAAI,EAC/E,EAAE,gBAAa,kBAAe,EAAc,EAAK;AAEvD,CADA,EAAK,aAAa,GAClB,EAAK,YAAY,EAAU,UAAU;CACrC,IAAM,IAAS,EAAU,QAAQ,KAAK,IAAI,IAAI,KAAc;AAC5D,CACE,EAAK,cAAY,EAAO,WAAW,cAAc,GAAG,CAAC,MAAM,IAAI;CAEjE,IAAM,IAAiB,EAAU,QAAQ,WAAW,KAAK,EAAU,QAAQ,WAAW,KAAK,CAAC,EAAO,OAAO,qBACpG,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAI,EAAK,OACX,IAAI,EAAK;AACb,CAAI,EAAU,QAAQ,WAAW,KAAK,EAAU,QAAQ,WAAW,IACjE,KAAK,IACI,EAAU,QAAQ,SAAS,KAAK,EAAU,QAAQ,WAAW,MACtE,KAAK,IAAM;CAEb,IAAM,IAAI,CAAC,IAAI,GACT,IAAI,CAAC,IAAI,GACT,IAAY,EAAG,UACnB,IAAI,GACJ,IAAI,KAAW,IAAiB,IAAU,EAAU,QAAQ,WAAW,KAAK,EAAU,QAAQ,WAAW,IAAI,CAAC,IAAU,IAAI,IAC5H,IAAI,IAAI,GACR,IAAI,IAAI,KAAW,IAAiB,IAAU,IAAI,EAAU,QAAQ,WAAW,KAAK,EAAU,QAAQ,WAAW,IAAI,CAAC,IAAU,IAChI,EACD,EACK,IAAQ,EAAS,aAAa,GAAW,eAAe;AAC9D,GAAM,KAAK,SAAS,wBAAwB;CAC5C,IAAM,IAAW,EAAM,MAAM,CAAC,SAAS;AACvC,GAAS,UAAU,QAAQ,CAAC,MAAM,GAAG,GAAG,MAAU;EAChD,IAAM,IAAQC,EAAQ,EAAM,GAAG,EACzB,IAAY,EAAM,KAAK,YAAY,EACrC,IAAa;AACjB,MAAI,GAAW;GAEb,IAAM,IADQ,OAAO,+BAA+B,CAC5B,KAAK,EAAU;AACvC,GAAI,MACF,IAAa,WAAW,EAAU,GAAG;;EAGzC,IAAI,IAAgB,IAAa,IAAI,KAAW,IAAiB,IAAU,EAAU,QAAQ,WAAW,KAAK,EAAU,QAAQ,WAAW,IAAI,CAAC,IAAU,IAAI;AAC7J,EAAK,MACH,KAAiB;EAEnB,IAAI,IAAgB;AASpB,GARI,EAAM,KAAK,QAAQ,CAAC,SAAS,cAAc,IAAI,EAAM,KAAK,QAAQ,CAAC,SAAS,mBAAmB,MACjG,IAAgB,CAAC,EAAM,MAAM,EAAE,SAAS,CAAC,QAAQ,KAAK,GACtD,EAAS,UAAU,OAAO,CAAC,KAAK,SAAS,GAAI,GAAI,GAAQ;AACvD,GAAI,OAAO,iBAAiB,EAAO,GAAI,CAAC,eAAe,aACrD,IAAgB;IAElB,GAEJ,EAAM,KAAK,aAAa,aAAa,EAAc,IAAI,EAAc,GAAG;GACxE;CACF,IAAM,IAAwB,EAAS,OAAO,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,IAAiB,IAAU,IAAI,MAAM,GAC7H,IAAmB,EAAS,OAAO,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,IAAiB,IAAU,IAAI,MAAM,GACnH,IAAqB,EAAS,OAAO,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,IAAiB,IAAU,IAAI,MAAM;AAC7H,KAAI,EAAU,QAAQ,SAAS,KAAK,EAAU,QAAQ,SAAS,KAAK,GAAgB;EAClF,IAAM,IAAY,EAAG,KACnB,EAAS,GACT,IAAwB,IAAmB,IAAI,GAC/C,EAAS,IAAI,EAAS,OACtB,IAAwB,IAAmB,IAAI,GAC/C,EACD;AACY,IAAS,aAAa,EAAU,CACxC,KAAK,SAAS,UAAU,CAAC,KAAK,SAAS,EAAO;;AAErD,KAAI,KAAkB,EAAU,QAAQ,SAAS,KAAK,EAAU,QAAQ,SAAS,GAAG;EAClF,IAAM,IAAY,EAAG,KACnB,EAAS,GACT,IAAwB,IAAmB,IAAqB,IAAI,IAAM,IAAI,GAC9E,EAAS,IAAI,EAAS,OACtB,IAAwB,IAAmB,IAAqB,IAAI,IAAU,IAAM,GACpF,EACD;AACY,IAAS,aAAa,EAAU,CACxC,KAAK,SAAS,UAAU,CAAC,KAAK,SAAS,EAAO;;AAYrD,KAVI,EAAU,SAAS,eACrB,EAAS,UAAU,OAAO,CAAC,KAAK,SAAS,EAAO,EAElD,EAAM,OAAO,gBAAgB,CAAC,KAAK,SAAS,EAAO,EACnD,EAAS,UAAU,WAAW,CAAC,OAAO,OAAO,CAAC,KAAK,SAAS,EAAO,EAC/D,EAAK,aACP,EAAS,UAAU,OAAO,CAAC,KAAK,SAAS,EAAK,WAAW,GAEzD,EAAS,UAAU,OAAO,CAAC,KAAK,SAAS,EAAO,EAE9C,CAAC,GAAe;EAClB,IAAM,IAAa,OAAO,sBAAsB,EAC1C,IAAQ,EAAW,KAAK,EAAO;AACrC,MAAI,GAAO;GACT,IAAM,IAAa,EAAM,GAAG,QAAQ,SAAS,OAAO;AACpD,KAAS,UAAU,QAAQ,CAAC,KAAK,SAAS,EAAW;aAC5C,GAAa;GACtB,IAAM,IAAS,EAAW,KAAK,EAAY;AAC3C,OAAI,GAAQ;IACV,IAAM,IAAa,EAAO,GAAG,QAAQ,SAAS,OAAO;AACrD,MAAS,UAAU,QAAQ,CAAC,KAAK,SAAS,EAAW;;;;AAQ3D,QAJA,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAU,WAAW;AAK5B,eAAe,GAAe,GAAQ,GAAM;CAC1C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,IAAkB,GAClB,IAAc,GAGd,IAAoB,kBAAkB,GACtC,IAAU,EAAe,EAAK,EAC9B,IAAW,EAAO,OAAO,IAAI,CAAC,KAAK,SAAS,EAAQ,CAAC,KAAK,MAAM,EAAK,SAAS,EAAK,GAAG,EACxF;AACJ,CAQE,IARE,IACW,MAAM,EACjB,GACA,WAAW,EAAgB,KAAK,WAChC,GACA,EAAK,WACN,GAEY,MAAM,EAAS,GAAU,2BAA2B,GAAG,EAAK,WAAW;CAEtF,IAAI,IAAqB,GACnB,IAAa,MAAM,EACvB,GACA,EAAgB,MAChB,GACA,EAAK,aAAa,uBACnB;AAED,KADA,KAAsB,IAAa,IAC/B,GAAmB;EACrB,IAAM,IAAW,MAAM,EACrB,GACA,GAAG,EAAgB,gBAAgB,OAAO,EAAgB,kBAAkB,MAC5E,GACA,EAAK,WACN;AACD,OAAsB;EACtB,IAAM,IAAa,MAAM,EACvB,GACA,GAAG,EAAgB,OAAO,SAAS,EAAgB,SAAS,MAC5D,GACA,EAAK,WACN;AACD,OAAsB;EACtB,IAAM,IAAa,MAAM,EACvB,GACA,GAAG,EAAgB,OAAO,SAAS,EAAgB,SAAS,MAC5D,GACA,EAAK,WACN;AAED,EADA,KAAsB,GACtB,MAAM,EACJ,GACA,GAAG,EAAgB,eAAe,iBAAiB,EAAgB,iBAAiB,MACpF,GACA,EAAK,WACN;QACI;EACL,IAAM,IAAc,MAAM,EACxB,GACA,GAAG,EAAY,OAAO,SAAS,EAAY,SAAS,MACpD,GACA,EAAK,WACN;AAED,EADA,KAAsB,GACtB,MAAM,EACJ,GACA,GAAG,EAAY,SAAS,YAAY,EAAY,WAAW,MAC3D,GACA,EAAK,WACN;;CAEH,IAAM,KAAc,EAAS,MAAM,EAAE,SAAS,CAAC,SAAS,OAAO,IACzD,KAAe,EAAS,MAAM,EAAE,SAAS,CAAC,UAAU,OAAO,IAC3D,IAAI,CAAC,IAAa,GAClB,IAAI,CAAC,IAAc,GACnB,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC;AAC3C,CAAI,EAAK,SAAS,gBAChB,EAAQ,YAAY,GACpB,EAAQ,YAAY;CAEtB,IAAM,IAAY,EAAG,UAAU,GAAG,GAAG,GAAY,GAAa,EAAQ,EAChE,IAAQ,EAAS,aAAa,GAAW,eAAe;AAsB9D,KArBA,EAAM,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAW,EACtE,EAAS,UAAU,SAAS,CAAC,MAAM,GAAG,GAAG,MAAU;EACjD,IAAM,IAAQC,EAAQ,EAAM,GAAG,EACzB,IAAY,EAAM,KAAK,YAAY,EACrC,IAAa,GACb,IAAa;AACjB,MAAI,GAAW;GAEb,IAAM,IADQ,OAAO,+BAA+B,CAC5B,KAAK,EAAU;AACvC,GAAI,MACF,IAAa,WAAW,EAAU,GAAG,EACrC,IAAa,WAAW,EAAU,GAAG;;EAGzC,IAAM,IAAgB,IAAa,IAAc,GAC7C,IAAgB,IAAI,KAAU;AAIlC,GAHI,MAAM,KAAK,MAAM,OACnB,IAAgB,IAElB,EAAM,KAAK,aAAa,aAAa,EAAc,IAAI,IAAgB,GAAQ,GAAG;GAClF,EACE,IAAqB,IAAa,IAAa,IAAK;EACtD,IAAM,IAAY,EAAG,KACnB,GACA,IAAI,IAAa,IAAa,IAC9B,IAAI,GACJ,IAAI,IAAa,IAAa,IAC9B,EACD;AACmB,IAAS,aAAa,EAAU,CACxC,KAAK,SAAS,EAAW;;AAMvC,QAJA,EAAiB,GAAM,EAAM,EAC7B,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAgB,iBAAiB;AACxC,eAAe,EAAS,GAAa,GAAW,GAAS,IAAQ,IAAI;AACnE,KAAI,MAAc,GAChB,QAAO;CAET,IAAM,IAAS,EAAY,OAAO,IAAI,CAAC,KAAK,SAAS,QAAQ,CAAC,KAAK,SAAS,EAAM,EAC5E,IAAS,GAAY,EACrB,IAAgB,EAAO,cAAc,IACrC,IAAQ,MAAM,EAClB,GACAL,EAAc,EAAe,EAAU,CAAC,EACxC;EACE,OAAO,EAAmB,GAAW,EAAO,GAAG;EAE/C,SAAS;EACT;EACA;EACD,EACD,EACD,EACG;AACJ,KAAK,GAUE;EACL,IAAM,IAAM,EAAM,SAAS,IACrB,IAAKK,EAAQ,EAAM;AAGzB,EAFA,IAAO,EAAI,uBAAuB,EAClC,EAAG,KAAK,SAAS,EAAK,MAAM,EAC5B,EAAG,KAAK,UAAU,EAAK,OAAO;QAfZ;EAClB,IAAM,IAAY,EAAM,SAAS;AACjC,OAAK,IAAM,KAAS,EAAU,SAE5B,CADA,EAAM,cAAc,EAAM,YAAY,WAAW,QAAQ,IAAI,CAAC,WAAW,QAAQ,IAAI,EACjF,KACF,EAAM,aAAa,SAAS,EAAM;AAItC,EADA,IAAO,EAAM,SAAS,EACtB,EAAK,UAAU;;AASjB,QADA,EAAO,KAAK,aAAa,aAAa,CAAC,EAAK,QAAQ,EAAE,GAAG,CAAC,EAAK,SAAS,IAAI,EAAQ,GAAG,EAChF,EAAK;;AAEd,EAAO,GAAU,UAAU;AAI3B,IAAI,KAAoC,mBAAQ,MAAa;AAC3D,SAAQ,GAAR;EACE,KAAK,YACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EAET,KAAK,MACH,QAAO;EACT,KAAK,WACH,QAAO;;GAEV,oBAAoB;AACvB,eAAe,GAAW,GAAQ,GAAY,EAAE,aAAU;CACxD,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAW;AAC7D,GAAW,aAAa,KAAe;CACvC,IACM,IAAW,EAAW;AAC5B,GAAW,SAAS,EAAW,SAAS,OAAO;CAC/C,IAAM,EACJ,aACA,SACA,OAAO,MACL,MAAM,EAAY,GAAQ,GAAY,EAAe,EAAW,CAAC,EAC/D,IAAU,EAAW,WAAW,IAClC,IAAY,IACZ;AACJ,CAAI,YAAY,KAAc,EAAW,UAAU,GAAQ,QAAQ,kBACjE,IAAY,GAAQ,QAAQ,cAAc,QAAQ,YAAY,EAAW,OAAO,EAChF,IAAO,EAAS,OAAO,SAAS,eAAe,CAAC,KAAK,SAAS,qBAAqB,CAAC,KAAK,cAAc,EAAU,CAAC,KAAK,UAAU,SAAS;CAE5I,IAAM,IAAU;EACd,eAAe,EAAW;EAC1B,YAAY,EAAW,cAAc;EACrC,OAAO,EAAW;EAClB,KAAK,EAAW;EAChB,SAAS,EAAW,WAAW;EAC/B,aAAa;EACd,EACG,GAAS;AACb,CAAI,IACD,CAAE,OAAO,GAAS,MAAM,KAAU,MAAM,EACvC,GACA,YAAY,KAAc,EAAW,UAAU,IAC/C,EACD,GAEA,CAAE,OAAO,GAAS,MAAM,KAAU,MAAM,EACvC,GACA,YAAY,KAAc,EAAW,UAAU,IAC/C,EACD;CAEH,IAAM,EAAE,OAAO,GAAiB,MAAM,MAAiB,MAAM,EAC3D,GACA,cAAc,KAAc,EAAW,YAAY,IACnD,EACD;AACD,GAAW,QAAQ;CACnB,IACM,IAAa,GAAY,SAAS,GAClC,IAAY,KAAK,IAAI,EAAM,QAAQ,EAAa,OAAO,GAAG,GAC1D,IAAc,KAAK,IAAI,EAAK,SAAS,IAAmB,GAAY,UAAU,EAAE,GAAG,GACnF,IAAI,CAAC,IAAa,GAClB,IAAI,CAAC,IAAc;AASzB,CARA,EAAa,KACX,aACA,gBAAgB,IAAU,IAAa,KAAK,QAAQ,CAAC,IAAY,EAAK,SAAS,KAAK,IACrF,EACD,EAAQ,KACN,aACA,gBAAgB,IAAU,IAAa,KAAK,QAAQ,CAAC,IAAY,EAAK,SAAS,KAAK,IACrF,EACD,EAAgB,KACd,aACA,gBAAgB,IAAU,IAAa,IAAI,EAAa,QAAQ,MAAqB,QAAQ,CAAC,IAAY,EAAK,SAAS,KAAK,IAC9H;CACD,IAAI,GACE,EAAE,OAAI,UAAO,GACb,EAAE,iBAAc;AACtB,KAAI,EAAW,SAAS,aAAa;EACnC,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAW,EAAkB,GAAY,EAAE,CAAC,EAC5C,IAAY,KAAM,IAAK,EAAG,KAAK,EAAuB,GAAG,GAAG,GAAY,GAAa,KAAM,EAAE,EAAE,EAAS,GAAG,EAAG,UAAU,GAAG,GAAG,GAAY,GAAa,EAAS;AAEtK,EADA,IAAQ,EAAS,aAAa,GAAW,eAAe,EACxD,EAAM,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,KAAwB,KAAK;QACnF;AAEL,EADA,IAAQ,EAAS,OAAO,QAAQ,eAAe,EAC/C,EAAM,KAAK,SAAS,gCAAgC,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,MAAM,KAAM,EAAE,CAAC,KAAK,MAAM,KAAM,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,UAAU,EAAY;EACtM,IAAM,IAAW,cAAc,KAAc,EAAW;AACxD,MAAI,GAAU;GACZ,IAAM,IAAO,EAAS,OAAO,OAAO,EAC9B,IAAQ,IAAI,GACZ,IAAK,IAAI,KAAK,OAAO,KAAM,KAAK,EAAE,EAClC,IAAK,IAAI,IAAc,KAAK,OAAO,KAAM,KAAK,EAAE;AACtD,KAAK,KAAK,MAAM,EAAM,CAAC,KAAK,MAAM,EAAG,CAAC,KAAK,MAAM,EAAM,CAAC,KAAK,MAAM,EAAG,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK,UAAU,GAAkB,EAAS,CAAC;;;AAQhJ,QALA,EAAiB,GAAY,EAAM,EACnC,EAAW,SAAS,GACpB,EAAW,YAAY,SAAS,GAAO;AACrC,SAAO,EAAkB,KAAK,GAAY,EAAM;IAE3C;;AAET,EAAO,IAAY,aAAa;AAIhC,eAAe,GAAK,GAAQ,GAAM;CAChC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,gBAAa,aAAU,MAAM,EACnD,GACA,GACA,EAAe,EAAK,CACrB,EACK,IAAI,EAAK,QAAQ,KAAK,GACtB,IAAI,EAAK,SAAS,IAAI,GACtB,IAAI,MAAO,GACX,EAAE,iBAAc,GAChB,IAAW,EAAK,QAAQ,IACxB,IAAY,EAAK,SAAS,IAC1B,IAAiB,KAAK,IAAI,GAAG,EAAS,EACtC,IAAkB,KAAK,IAAI,GAAG,EAAU;AAC9C,GAAM,KAAK,aAAa,aAAa,CAAC,EAAK,QAAQ,EAAE,IAAI,CAAC,EAAK,SAAS,EAAE,GAAG;CAC7E,IAAI,GACE,IAAO;OACR,EAAE,GAAG,EAAE,SAAS,IAAiB,IAAK,GAAG,KAAK,IAAkB,GAAI;OACpE,EAAE,GAAG,EAAE,SAAS,IAAiB,IAAK;OACtC,EAAE,GAAG,EAAE,SAAS,IAAiB,IAAK;OACtC,EAAE,GAAG,EAAE,SAAS,IAAiB,IAAK,GAAG,IAAkB,GAAI;;OAE/D,EAAE,GAAG,EAAE,SAAS,IAAiB,IAAK,GAAG,IAAkB,IAAK;OAChE,IAAI,GAAI,GAAG,IAAI,GAAI,WAAW,IAAkB,IAAK;OACrD,EAAE,GAAG,EAAE,SAAS,KAAK,IAAiB,IAAK,GAAG,IAAkB,IAAK;;OAErE,EAAE,GAAG,EAAE,SAAS,KAAK,IAAiB,IAAK,GAAG,IAAkB,IAAK;OACrE,EAAE,GAAG,EAAE,SAAS,KAAK,IAAiB,IAAK;OAC3C,EAAE,GAAG,EAAE,SAAS,KAAK,IAAiB,IAAK;OAC3C,EAAE,GAAG,EAAE,SAAS,KAAK,IAAiB,IAAK,GAAG,KAAK,IAAkB,IAAK;;OAE1E,EAAE,GAAG,EAAE,SAAS,KAAK,IAAiB,GAAI,GAAG,KAAK,IAAkB,IAAK;OACzE,IAAI,GAAI,GAAG,IAAI,GAAI,WAAW,KAAK,IAAkB,IAAK;OAC1D,EAAE,GAAG,EAAE,SAAS,IAAiB,GAAI,GAAG,KAAK,IAAkB,IAAK;;AAEzE,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAY,EAAG,KAAK,GAAM,EAAQ;AAExC,EADA,IAAW,EAAS,aAAa,GAAW,eAAe,EAC3D,EAAS,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC;OAE7F,KAAW,EAAS,OAAO,QAAQ,eAAe,CAAC,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,KAAK,EAAK;AAWrI,QATA,EAAS,KAAK,aAAa,aAAa,CAAC,IAAiB,EAAE,IAAI,CAAC,IAAkB,EAAE,GAAG,EACxF,EAAiB,GAAM,EAAS,EAChC,EAAK,gBAAgB,SAAS,GAAQ,GAAO;AAC3C,SAAO,EAAkB,KAAK,GAAQ,EAAM;IAE9C,EAAK,YAAY,SAAS,GAAO;AAE/B,SADA,EAAI,KAAK,kBAAkB,GAAM,EAAM,EAChC,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAM,OAAO;AAIpB,eAAe,GAAM,GAAQ,GAAM;CACjC,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,gBAAa,aAAU,MAAM,EACnD,GACA,GACA,EAAe,EAAK,CACrB,EACK,IAAI,EAAK,QAAQ,IAAI,GACrB,IAAI,EAAK,SAAS,IAAI,GACtB,IAAK,MAAO,GACZ,IAAK,MAAO,GACZ,IAAK,MAAO,GACZ,IAAK,KAAM,GACX,EAAE,iBAAc,GAClB,GACE,IAAO;OACR,EAAG,GAAG,EAAG,SAAS,IAAI,IAAK,GAAG,KAAK,IAAI,GAAI;OAC3C,EAAG,GAAG,EAAG,SAAS,IAAI,GAAI,GAAG,KAAK,IAAI,GAAI;OAC1C,EAAG,GAAG,EAAG,SAAS,IAAI,IAAK,GAAG,IAAI,GAAI;;OAEtC,EAAG,GAAG,EAAG,SAAS,IAAI,IAAK,GAAG,IAAI,IAAK;OACvC,EAAG,GAAG,EAAG,SAAS,KAAK,IAAI,IAAK,GAAG,IAAI,IAAK;;OAE5C,EAAG,GAAG,EAAG,SAAS,KAAK,IAAI,IAAK,GAAG,IAAI,IAAK;OAC5C,EAAG,GAAG,EAAG,SAAS,KAAK,IAAI,GAAI;OAC/B,EAAG,GAAG,EAAG,SAAS,KAAK,IAAI,IAAK,GAAG,KAAK,IAAI,IAAK;;OAEjD,EAAG,GAAG,EAAG,SAAS,KAAK,IAAI,GAAI,GAAG,KAAK,IAAI,IAAK;OAChD,EAAG,GAAG,EAAG,SAAS,IAAI,GAAI,GAAG,KAAK,IAAI,IAAK;;AAEhD,KAAI,EAAK,SAAS,aAAa;EAC7B,IAAM,IAAKC,EAAQ,IAAI,EAAS,EAC1B,IAAU,EAAkB,GAAM,EAAE,CAAC,EACrC,IAAY,EAAG,KAAK,GAAM,EAAQ;AAExC,EADA,IAAY,EAAS,aAAa,GAAW,eAAe,EAC5D,EAAU,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAoB,EAAU,CAAC;OAE9F,KAAY,EAAS,OAAO,QAAQ,eAAe,CAAC,KAAK,SAAS,wBAAwB,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,KAAK,EAAK;AAYtI,QAVA,EAAM,KAAK,aAAa,aAAa,CAAC,EAAK,QAAQ,EAAE,IAAI,CAAC,EAAK,SAAS,EAAE,GAAG,EAC7E,EAAU,KAAK,aAAa,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAC9D,EAAiB,GAAM,EAAU,EACjC,EAAK,gBAAgB,SAAS,GAAQ,GAAO;AAC3C,SAAO,EAAkB,KAAK,GAAQ,EAAM;IAE9C,EAAK,YAAY,SAAS,GAAO;AAE/B,SADA,EAAI,KAAK,mBAAmB,GAAM,EAAM,EACjC,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAO,QAAQ;AAGtB,eAAe,GAAmB,GAAQ,GAAM;CAC9C,IAAM,EAAE,gBAAa,kBAAe,EAAc,EAAK;AACvD,GAAK,aAAa;CAClB,IAAM,EAAE,aAAU,SAAM,gBAAa,aAAU,MAAM,EACnD,GACA,GACA,EAAe,EAAK,CACrB,EACK,IAAI,EAAK,QAAQ,IAAI,GACrB,IAAI,EAAK,SAAS,IAAI,GAEtB,IAAW;OACZ,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAG;OACrB,CAAC,IAAI,GAAO;;OAEZ,IAAI,GAAO;;OAEX,IAAI,GAAO;;OAEX,CAAC,IAAI,GAAO;;;KAIX,IAAK,EAAS,OAAO,OAAO,CAAC,KAAK,MAAM,UAAU,EAAK,GAAG,CAAC,KAAK,SAAS,mBAAmB,EAAK,KAAK,CAAC,KAAK,SAAS,EAAW,CAAC,KAAK,KAAK,EAAS;AAW1J,QAVA,EAAS,OAAO,OAAO,CAAC,KAAK,SAAS,aAAa,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,MAAM,IAAI,EAAE,EAC5H,EAAM,KAAK,aAAa,aAAa,CAAC,EAAK,QAAQ,EAAE,IAAI,CAAC,EAAK,SAAS,EAAE,GAAG,EAC7E,EAAS,aAAa,EAAM,MAAM,CAAC,EACnC,EAAiB,GAAM,EAAG,EAC1B,EAAK,gBAAgB,SAAS,GAAQ,GAAO;AAC3C,SAAO,EAAkB,KAAK,GAAQ,EAAM;IAE9C,EAAK,YAAY,SAAS,GAAO;AAC/B,SAAO,EAAkB,KAAK,GAAM,EAAM;IAErC;;AAET,EAAO,IAAoB,qBAAqB;AAGhD,eAAe,GAAc,GAAQ,GAAM;AAIzC,QAAO,GAAO,GAAQ,GAHN,EACd,SAAS,EAAK,WAAW,GAC1B,CACmC;;AAEtC,EAAO,IAAe,gBAAgB;AAGtC,IAAI,KAAa;CACf;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAQ;GAAW;GAAY;EACzC,iBAAiB,CAAC,aAAa;EAC/B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,QAAQ;EAClB,iBAAiB,CAAC,cAAc;EAChC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,YAAY,OAAO;EAC7B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAc;GAAW;GAAoB;GAAa;EACpE,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAM;GAAY;GAAW;EACvC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,QAAQ;EAClB,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAY;GAAW;GAAW;EAC5C,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,WAAW,UAAU;EAC/B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,cAAc,SAAS;EACjC,iBAAiB,CAAC,aAAa;EAC/B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,aAAa,SAAS;EAChC,iBAAiB,CAAC,YAAY;EAC9B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAY;GAAoB;GAAY;EACtD,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAU;GAAiB;GAAgB;EACrD,iBAAiB,CAAC,gBAAgB;EAClC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,gBAAgB;EAC1B,iBAAiB,CAAC,eAAe;EACjC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,QAAQ,oBAAoB;EACtC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAmB;GAAiB;GAAY;GAAiB;EAC3E,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,SAAS,eAAe;EAClC,iBAAiB,CAAC,aAAa;EAC/B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,QAAQ,gBAAgB;EAClC,iBAAiB,CAAC,WAAW;EAC7B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,iBAAiB,CAAC,WAAW;EAC7B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,aAAa,UAAU;EACjC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,WAAW,UAAU;EAC/B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,YAAY,iBAAiB;EACvC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,OAAO,WAAW;EAC5B,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,yBAAyB;EACnC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,OAAO,sBAAsB;EACvC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,QAAQ,iBAAiB;EACnC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,oBAAoB,UAAU;EACxC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAY;GAAqB;GAAkB;EAC7D,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,WAAW,WAAW;EAChC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,oBAAoB,cAAc;EAC5C,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,YAAY,gBAAgB;EACtC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,cAAc,mBAAmB;EAC3C,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,eAAe,mBAAmB;EAC5C,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,gBAAgB,mBAAmB;EAC7C,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAa;GAAU;GAAmB;EACpD,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAS;GAAa;GAAoB;EACpD,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,eAAe,oBAAoB;EAC7C,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,WAAW,iBAAiB;EACtC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,WAAW,kBAAkB;EACvC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GAAC;GAAoB;GAAY;GAAiB;EAC3D,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,aAAa;EACvB,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,iBAAiB,CAAC,sBAAsB;EACxC,SAAS;EACV;CACD;EACE,cAAc;EACd,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS,CAAC,iBAAiB;EAC3B,SAAS;EACV;CACF,EA0CG,MAzCmC,wBAAa;CAClD,IAAM,IAAqB;EAEzB;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EAEA;EAEA;EAEA;EACD,EACK,IAAU,CACd,GAAG,OAAO,QAAQ,EAAmB,EACrC,GAAG,GAAW,SAAS,MACL;EACd,EAAM;EACN,GAAG,aAAa,IAAQ,EAAM,UAAU,EAAE;EAC1C,GAAG,qBAAqB,IAAQ,EAAM,kBAAkB,EAAE;EAC3D,CACc,KAAK,MAAU,CAAC,GAAO,EAAM,QAAQ,CAAC,CACrD,CACH;AACD,QAAO,OAAO,YAAY,EAAQ;GACjC,mBAAmB,GACU;AAChC,SAAS,GAAa,GAAO;AAC3B,QAAO,KAAS;;AAElB,EAAO,IAAc,eAAe;AAGpC,IAAI,oBAA4B,IAAI,KAAK;AACzC,eAAe,GAAW,GAAM,GAAM,GAAe;CACnD,IAAI,GACA;AACJ,CAAI,EAAK,UAAU,WACb,EAAK,MAAM,EAAK,KAClB,EAAK,QAAQ,gBAEb,EAAK,QAAQ;CAGjB,IAAM,IAAe,EAAK,QAAQ,GAAQ,EAAK,SAAS,KAAK;AAC7D,KAAI,CAAC,EACH,OAAU,MAAM,kBAAkB,EAAK,MAAM,6BAA6B;AAE5E,KAAI,EAAK,MAAM;EACb,IAAI;AAOJ,EANI,EAAc,OAAO,kBAAkB,YACzC,IAAS,SACA,EAAK,eACd,IAAS,EAAK,cAAc,WAE9B,IAAQ,EAAK,OAAO,QAAQ,CAAC,KAAK,cAAc,EAAK,KAAK,CAAC,KAAK,UAAU,KAAU,KAAK,EACzF,IAAK,MAAM,EAAa,GAAO,GAAM,EAAc;OAGnD,CADA,IAAK,MAAM,EAAa,GAAM,GAAM,EAAc,EAClD,IAAQ;AASV,QAPI,EAAK,WACP,EAAG,KAAK,SAAS,EAAK,QAAQ,EAEhC,EAAU,IAAI,EAAK,IAAI,EAAM,EACzB,EAAK,gBACP,EAAM,KAAK,SAAS,EAAM,KAAK,QAAQ,GAAG,aAAa,EAElD;;AAET,EAAO,IAAY,aAAa;AAChC,IAAI,KAA8B,mBAAQ,GAAM,MAAS;AACvD,GAAU,IAAI,EAAK,IAAI,EAAK;GAC3B,cAAc,EACb,KAAyB,wBAAa;AACxC,GAAU,OAAO;GAChB,QAAQ,EACP,KAA+B,mBAAQ,MAAS;CAClD,IAAM,IAAK,EAAU,IAAI,EAAK,GAAG;AACjC,GAAI,MACF,qBACA,EAAK,MACL,GACA,gBAAgB,EAAK,IAAI,EAAK,QAAQ,IAAI,KAAK,OAAO,EAAK,QAAQ,IAAI,IACxE;CACD,IACM,IAAO,EAAK,QAAQ;AAS1B,QARI,EAAK,cACP,EAAG,KACD,aACA,gBAAgB,EAAK,IAAI,IAAO,EAAK,QAAQ,KAAK,QAAQ,EAAK,IAAI,EAAK,SAAS,IAAI,KAAW,IACjG,GAED,EAAG,KAAK,aAAa,eAAe,EAAK,IAAI,OAAO,EAAK,IAAI,IAAI,EAE5D;GACN,eAAe"}
|