package.dist.chunks.mermaid.esm.min.chunk-A7EQIZZO.mjs.map Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mermaid Show documentation
Show all versions of mermaid Show documentation
Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.
The newest version!
{
"version": 3,
"sources": ["../../../src/rendering-util/rendering-elements/shapes/util.ts", "../../../../../node_modules/.pnpm/[email protected]_patch_hash=vxb6t6fqvzyhwhtjiliqr25jyq/node_modules/roughjs/bundled/rough.esm.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-rect.js", "../../../src/rendering-util/rendering-elements/createLabel.js", "../../../src/rendering-util/rendering-elements/shapes/roundedRectPath.ts", "../../../src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts", "../../../src/rendering-util/rendering-elements/clusters.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-node.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-ellipse.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-circle.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-line.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-polygon.js", "../../../src/rendering-util/rendering-elements/intersect/index.js", "../../../src/rendering-util/rendering-elements/shapes/anchor.ts", "../../../src/rendering-util/rendering-elements/shapes/bowTieRect.ts", "../../../src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts", "../../../src/rendering-util/rendering-elements/shapes/card.ts", "../../../src/rendering-util/rendering-elements/shapes/choice.ts", "../../../src/rendering-util/rendering-elements/shapes/circle.ts", "../../../src/rendering-util/rendering-elements/shapes/crossedCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts", "../../../src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts", "../../../src/rendering-util/rendering-elements/shapes/curlyBraces.ts", "../../../src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/cylinder.ts", "../../../src/rendering-util/rendering-elements/shapes/dividedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/doubleCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/filledCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/flippedTriangle.ts", "../../../src/rendering-util/rendering-elements/shapes/forkJoin.ts", "../../../src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/hexagon.ts", "../../../src/rendering-util/rendering-elements/shapes/hourglass.ts", "../../../src/rendering-util/rendering-elements/shapes/icon.ts", "../../../src/rendering-util/rendering-elements/shapes/iconCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/iconRounded.ts", "../../../src/rendering-util/rendering-elements/shapes/iconSquare.ts", "../../../src/rendering-util/rendering-elements/shapes/imageSquare.ts", "../../../src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/drawRect.ts", "../../../src/rendering-util/rendering-elements/shapes/labelRect.ts", "../../../src/rendering-util/rendering-elements/shapes/leanLeft.ts", "../../../src/rendering-util/rendering-elements/shapes/leanRight.ts", "../../../src/rendering-util/rendering-elements/shapes/lightningBolt.ts", "../../../src/rendering-util/rendering-elements/shapes/linedCylinder.ts", "../../../src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/multiRect.ts", "../../../src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/note.ts", "../../../src/rendering-util/rendering-elements/shapes/question.ts", "../../../src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts", "../../../src/rendering-util/rendering-elements/shapes/rectWithTitle.ts", "../../../src/rendering-util/rendering-elements/shapes/roundedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/shadedProcess.ts", "../../../src/rendering-util/rendering-elements/shapes/slopedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/squareRect.ts", "../../../src/rendering-util/rendering-elements/shapes/stadium.ts", "../../../src/rendering-util/rendering-elements/shapes/state.ts", "../../../src/rendering-util/rendering-elements/shapes/stateEnd.ts", "../../../src/rendering-util/rendering-elements/shapes/stateStart.ts", "../../../src/rendering-util/rendering-elements/shapes/subroutine.ts", "../../../src/rendering-util/rendering-elements/shapes/taggedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/text.ts", "../../../src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts", "../../../src/rendering-util/rendering-elements/shapes/trapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts", "../../../src/rendering-util/rendering-elements/shapes/triangle.ts", "../../../src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/waveRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/windowPane.ts", "../../../src/diagrams/class/shapeUtil.ts", "../../../src/rendering-util/rendering-elements/shapes/classBox.ts", "../../../src/rendering-util/rendering-elements/shapes/kanbanItem.ts", "../../../src/rendering-util/rendering-elements/shapes.ts", "../../../src/rendering-util/rendering-elements/nodes.ts"],
"sourcesContent": ["import { createText } from '../../createText.js';\nimport type { Node } from '../../types.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport defaultConfig from '../../../defaultConfig.js';\nimport { evaluate, sanitizeText } from '../../../diagrams/common/common.js';\nimport { decodeEntities, handleUndefinedAttr, parseFontSize } from '../../../utils.js';\nimport type { D3Selection, Point } from '../../../types.js';\n\nexport const labelHelper = async (\n parent: D3Selection,\n node: Node,\n _classes?: string\n) => {\n let cssClasses;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig()?.htmlLabels);\n if (!_classes) {\n cssClasses = 'node default';\n } else {\n cssClasses = _classes;\n }\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', cssClasses)\n .attr('id', node.domId || node.id);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg\n .insert('g')\n .attr('class', 'label')\n .attr('style', handleUndefinedAttr(node.labelStyle));\n\n // Replace label with default value if undefined\n let label;\n if (node.label === undefined) {\n label = '';\n } else {\n label = typeof node.label === 'string' ? node.label : node.label[0];\n }\n\n const text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), {\n useHtmlLabels,\n width: node.width || getConfig().flowchart?.wrappingWidth,\n // @ts-expect-error -- This is currently not used. Should this be `classes` instead?\n cssClasses: 'markdown-node-label',\n style: node.labelStyle,\n addSvgBackground: !!node.icon || !!node.img,\n });\n // Get the size of the label\n let bbox = text.getBBox();\n const halfPadding = (node?.padding ?? 0) / 2;\n\n if (useHtmlLabels) {\n const div = text.children[0];\n const dv = select(text);\n\n // if there are images, need to wait for them to load before getting the bounding box\n const images = div.getElementsByTagName('img');\n if (images) {\n const noImgText = label.replace(/]*>/g, '').trim() === '';\n\n await Promise.all(\n [...images].map(\n (img) =>\n new Promise((res) => {\n /**\n *\n */\n function setupImage() {\n img.style.display = 'flex';\n img.style.flexDirection = 'column';\n\n if (noImgText) {\n // default size if no text\n const bodyFontSize = getConfig().fontSize\n ? getConfig().fontSize\n : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const [parsedBodyFontSize = defaultConfig.fontSize] = parseFontSize(bodyFontSize);\n const width = parsedBodyFontSize * 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 setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener('error', setupImage);\n img.addEventListener('load', setupImage);\n })\n )\n );\n }\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center the label\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};\nexport const insertLabel = async (\n parent: D3Selection,\n label: string,\n options: {\n labelStyle?: string | undefined;\n icon?: boolean | undefined;\n img?: string | undefined;\n useHtmlLabels?: boolean | undefined;\n padding: number;\n width?: number | undefined;\n centerLabel?: boolean | undefined;\n addSvgBackground?: boolean | undefined;\n }\n) => {\n const useHtmlLabels = options.useHtmlLabels || evaluate(getConfig()?.flowchart?.htmlLabels);\n\n // Create the label and insert it after the rect\n const labelEl = parent\n .insert('g')\n .attr('class', 'label')\n .attr('style', options.labelStyle || '');\n\n const text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), {\n useHtmlLabels,\n width: options.width || getConfig()?.flowchart?.wrappingWidth,\n style: options.labelStyle,\n addSvgBackground: !!options.icon || !!options.img,\n });\n // Get the size of the label\n let bbox = text.getBBox();\n const halfPadding = options.padding / 2;\n\n if (evaluate(getConfig()?.flowchart?.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center the label\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};\nexport const updateNodeBounds = (\n node: Node,\n // D3Selection is for the roughjs case, D3Selection is for the non-roughjs case\n element: D3Selection | D3Selection\n) => {\n const bbox = element.node()!.getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\n\n/**\n * @param parent - Parent element to append the polygon to\n * @param w - Width of the polygon\n * @param h - Height of the polygon\n * @param points - Array of points to create the polygon\n */\nexport function insertPolygonShape(\n parent: D3Selection,\n w: number,\n h: number,\n points: Point[]\n) {\n return parent\n .insert('polygon', ':first-child')\n .attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n )\n .attr('class', 'label-container')\n .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n\nexport const getNodeClasses = (node: Node, extra?: string) =>\n (node.look === 'handDrawn' ? 'rough-node' : 'node') + ' ' + node.cssClasses + ' ' + (extra || '');\n\nexport function createPathFromPoints(points: Point[]) {\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\nexport function generateFullSineWavePoints(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n amplitude: number,\n numCycles: number\n) {\n const points = [];\n const steps = 50; // Number of segments to create a smooth curve\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n const cycleLength = deltaX / numCycles;\n\n // Calculate frequency and phase shift\n const frequency = (2 * Math.PI) / cycleLength;\n const midY = y1 + deltaY / 2;\n\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\n points.push({ x, y });\n }\n\n return points;\n}\n\n/**\n * @param centerX - x-coordinate of center of circle\n * @param centerY - y-coordinate of center of circle\n * @param radius - radius of circle\n * @param numPoints - total points required\n * @param startAngle - angle where arc will start\n * @param endAngle - angle where arc will end\n */\nexport function generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints: number,\n startAngle: number,\n endAngle: number\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\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\n return points;\n}\n", "function t(t,e,s){if(t&&t.length){const[n,o]=e,a=Math.PI/180*s,h=Math.cos(a),r=Math.sin(a);for(const e of t){const[t,s]=e;e[0]=(t-n)*h-(s-o)*r+n,e[1]=(t-n)*r+(s-o)*h+o}}}function e(t,e){return t[0]===e[0]&&t[1]===e[1]}function s(s,n,o,a=1){const h=o,r=Math.max(n,.1),i=s[0]&&s[0][0]&&\"number\"==typeof s[0][0]?[s]:s,c=[0,0];if(h)for(const e of i)t(e,c,h);const l=function(t,s,n){const o=[];for(const s of t){const t=[...s];e(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&o.push(t)}const a=[];s=Math.max(s,.1);const h=[];for(const t of o)for(let e=0;et.ymine.ymin?1:t.xe.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax))),!h.length)return a;let r=[],i=h[0].ymin,c=0;for(;r.length||h.length;){if(h.length){let t=-1;for(let e=0;ei);e++)t=e;h.splice(0,t+1).forEach((t=>{r.push({s:i,edge:t})}))}if(r=r.filter((t=>!(t.edge.ymax<=i))),r.sort(((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x))),(1!==n||c%s==0)&&r.length>1)for(let t=0;t=r.length)break;const s=r[t].edge,n=r[e].edge;a.push([[Math.round(s.x),i],[Math.round(n.x),i]])}i+=n,r.forEach((t=>{t.edge.x=t.edge.x+n*t.edge.islope})),c++}return a}(i,r,a);if(h){for(const e of i)t(e,c,-h);!function(e,s,n){const o=[];e.forEach((t=>o.push(...t))),t(o,s,n)}(l,c,-h)}return l}function n(t,e){var n;const o=e.hachureAngle+90;let a=e.hachureGap;a<0&&(a=4*e.strokeWidth),a=Math.round(Math.max(a,.1));let h=1;return e.roughness>=1&&((null===(n=e.randomizer)||void 0===n?void 0:n.next())||Math.random())>.7&&(h=a),s(t,a,o,h||1)}class o{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const s=n(t,e);return{type:\"fillSketch\",ops:this.renderLines(s,e)}}renderLines(t,e){const s=[];for(const n of t)s.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return s}}function a(t){const e=t[0],s=t[1];return Math.sqrt(Math.pow(e[0]-s[0],2)+Math.pow(e[1]-s[1],2))}class h extends o{fillPolygons(t,e){let s=e.hachureGap;s<0&&(s=4*e.strokeWidth),s=Math.max(s,.1);const o=n(t,Object.assign({},e,{hachureGap:s})),h=Math.PI/180*e.hachureAngle,r=[],i=.5*s*Math.cos(h),c=.5*s*Math.sin(h);for(const[t,e]of o)a([t,e])&&r.push([[t[0]-i,t[1]+c],[...e]],[[t[0]+i,t[1]-c],[...e]]);return{type:\"fillSketch\",ops:this.renderLines(r,e)}}}class r extends o{fillPolygons(t,e){const s=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),o=this._fillPolygons(t,n);return s.ops=s.ops.concat(o.ops),s}}class i{constructor(t){this.helper=t}fillPolygons(t,e){const s=n(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(s,e)}dotsOnLines(t,e){const s=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let o=e.fillWeight;o<0&&(o=e.strokeWidth/2);const h=n/4;for(const r of t){const t=a(r),i=t/n,c=Math.ceil(i)-1,l=t-c*n,u=(r[0][0]+r[1][0])/2-n/4,p=Math.min(r[0][1],r[1][1]);for(let t=0;t{const h=a(t),r=Math.floor(h/(s+n)),i=(h+n-r*(s+n))/2;let c=t[0],l=t[1];c[0]>l[0]&&(c=t[1],l=t[0]);const u=Math.atan((l[1]-c[1])/(l[0]-c[0]));for(let t=0;t{const o=a(t),h=Math.round(o/(2*e));let r=t[0],i=t[1];r[0]>i[0]&&(r=t[1],i=t[0]);const c=Math.atan((i[1]-r[1])/(i[0]-r[0]));for(let t=0;tn%2?t+s:t+e));a.push({key:\"C\",data:t}),e=t[4],s=t[5];break}case\"Q\":a.push({key:\"Q\",data:[...r]}),e=r[2],s=r[3];break;case\"q\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"Q\",data:t}),e=t[2],s=t[3];break}case\"A\":a.push({key:\"A\",data:[...r]}),e=r[5],s=r[6];break;case\"a\":e+=r[5],s+=r[6],a.push({key:\"A\",data:[r[0],r[1],r[2],r[3],r[4],e,s]});break;case\"H\":a.push({key:\"H\",data:[...r]}),e=r[0];break;case\"h\":e+=r[0],a.push({key:\"H\",data:[e]});break;case\"V\":a.push({key:\"V\",data:[...r]}),s=r[0];break;case\"v\":s+=r[0],a.push({key:\"V\",data:[s]});break;case\"S\":a.push({key:\"S\",data:[...r]}),e=r[2],s=r[3];break;case\"s\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"S\",data:t}),e=t[2],s=t[3];break}case\"T\":a.push({key:\"T\",data:[...r]}),e=r[0],s=r[1];break;case\"t\":e+=r[0],s+=r[1],a.push({key:\"T\",data:[e,s]});break;case\"Z\":case\"z\":a.push({key:\"Z\",data:[]}),e=n,s=o}return a}function m(t){const e=[];let s=\"\",n=0,o=0,a=0,h=0,r=0,i=0;for(const{key:c,data:l}of t){switch(c){case\"M\":e.push({key:\"M\",data:[...l]}),[n,o]=l,[a,h]=l;break;case\"C\":e.push({key:\"C\",data:[...l]}),n=l[4],o=l[5],r=l[2],i=l[3];break;case\"L\":e.push({key:\"L\",data:[...l]}),[n,o]=l;break;case\"H\":n=l[0],e.push({key:\"L\",data:[n,o]});break;case\"V\":o=l[0],e.push({key:\"L\",data:[n,o]});break;case\"S\":{let t=0,a=0;\"C\"===s||\"S\"===s?(t=n+(n-r),a=o+(o-i)):(t=n,a=o),e.push({key:\"C\",data:[t,a,...l]}),r=l[0],i=l[1],n=l[2],o=l[3];break}case\"T\":{const[t,a]=l;let h=0,c=0;\"Q\"===s||\"T\"===s?(h=n+(n-r),c=o+(o-i)):(h=n,c=o);const u=n+2*(h-n)/3,p=o+2*(c-o)/3,f=t+2*(h-t)/3,d=a+2*(c-a)/3;e.push({key:\"C\",data:[u,p,f,d,t,a]}),r=h,i=c,n=t,o=a;break}case\"Q\":{const[t,s,a,h]=l,c=n+2*(t-n)/3,u=o+2*(s-o)/3,p=a+2*(t-a)/3,f=h+2*(s-h)/3;e.push({key:\"C\",data:[c,u,p,f,a,h]}),r=t,i=s,n=a,o=h;break}case\"A\":{const t=Math.abs(l[0]),s=Math.abs(l[1]),a=l[2],h=l[3],r=l[4],i=l[5],c=l[6];if(0===t||0===s)e.push({key:\"C\",data:[n,o,i,c,i,c]}),n=i,o=c;else if(n!==i||o!==c){x(n,o,i,c,t,s,a,h,r).forEach((function(t){e.push({key:\"C\",data:t})})),n=i,o=c}break}case\"Z\":e.push({key:\"Z\",data:[]}),n=a,o=h}s=c}return e}function w(t,e,s){return[t*Math.cos(s)-e*Math.sin(s),t*Math.sin(s)+e*Math.cos(s)]}function x(t,e,s,n,o,a,h,r,i,c){const l=(u=h,Math.PI*u/180);var u;let p=[],f=0,d=0,g=0,M=0;if(c)[f,d,g,M]=c;else{[t,e]=w(t,e,-l),[s,n]=w(s,n,-l);const h=(t-s)/2,c=(e-n)/2;let u=h*h/(o*o)+c*c/(a*a);u>1&&(u=Math.sqrt(u),o*=u,a*=u);const p=o*o,k=a*a,b=p*k-p*c*c-k*h*h,y=p*c*c+k*h*h,m=(r===i?-1:1)*Math.sqrt(Math.abs(b/y));g=m*o*c/a+(t+s)/2,M=m*-a*h/o+(e+n)/2,f=Math.asin(parseFloat(((e-M)/a).toFixed(9))),d=Math.asin(parseFloat(((n-M)/a).toFixed(9))),td&&(f-=2*Math.PI),!i&&d>f&&(d-=2*Math.PI)}let k=d-f;if(Math.abs(k)>120*Math.PI/180){const t=d,e=s,r=n;d=i&&d>f?f+120*Math.PI/180*1:f+120*Math.PI/180*-1,p=x(s=g+o*Math.cos(d),n=M+a*Math.sin(d),e,r,o,a,h,0,i,[d,t,g,M])}k=d-f;const b=Math.cos(f),y=Math.sin(f),m=Math.cos(d),P=Math.sin(d),v=Math.tan(k/4),S=4/3*o*v,O=4/3*a*v,L=[t,e],T=[t+S*y,e-O*b],D=[s+S*P,n-O*m],A=[s,n];if(T[0]=2*L[0]-T[0],T[1]=2*L[1]-T[1],c)return[T,D,A].concat(p);{p=[T,D,A].concat(p);const t=[];for(let e=0;e2){const o=[];for(let e=0;e2*Math.PI&&(f=0,d=2*Math.PI);const g=2*Math.PI/i.curveStepCount,M=Math.min(g/2,(d-f)/2),k=V(M,c,l,u,p,f,d,1,i);if(!i.disableMultiStroke){const t=V(M,c,l,u,p,f,d,1.5,i);k.push(...t)}return h&&(r?k.push(...$(c,l,c+u*Math.cos(f),l+p*Math.sin(f),i),...$(c,l,c+u*Math.cos(d),l+p*Math.sin(d),i)):k.push({op:\"lineTo\",data:[c,l]},{op:\"lineTo\",data:[c+u*Math.cos(f),l+p*Math.sin(f)]})),{type:\"path\",ops:k}}function _(t,e){const s=m(y(b(t))),n=[];let o=[0,0],a=[0,0];for(const{key:t,data:h}of s)switch(t){case\"M\":a=[h[0],h[1]],o=[h[0],h[1]];break;case\"L\":n.push(...$(a[0],a[1],h[0],h[1],e)),a=[h[0],h[1]];break;case\"C\":{const[t,s,o,r,i,c]=h;n.push(...Z(t,s,o,r,i,c,a,e)),a=[i,c];break}case\"Z\":n.push(...$(a[0],a[1],o[0],o[1],e)),a=[o[0],o[1]]}return{type:\"path\",ops:n}}function I(t,e){const s=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,o=n.length;if(o>2){s.push({op:\"move\",data:[n[0][0]+G(t,e),n[0][1]+G(t,e)]});for(let a=1;a500?.4:-.0016668*i+1.233334;let l=o.maxRandomnessOffset||0;l*l*100>r&&(l=i/10);const u=l/2,p=.2+.2*W(o);let f=o.bowing*o.maxRandomnessOffset*(n-e)/200,d=o.bowing*o.maxRandomnessOffset*(t-s)/200;f=G(f,o,c),d=G(d,o,c);const g=[],M=()=>G(u,o,c),k=()=>G(l,o,c),b=o.preserveVertices;return a&&(h?g.push({op:\"move\",data:[t+(b?0:M()),e+(b?0:M())]}):g.push({op:\"move\",data:[t+(b?0:G(l,o,c)),e+(b?0:G(l,o,c))]})),h?g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+M(),d+e+(n-e)*p+M(),f+t+2*(s-t)*p+M(),d+e+2*(n-e)*p+M(),s+(b?0:M()),n+(b?0:M())]}):g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+k(),d+e+(n-e)*p+k(),f+t+2*(s-t)*p+k(),d+e+2*(n-e)*p+k(),s+(b?0:k()),n+(b?0:k())]}),g}function j(t,e,s){if(!t.length)return[];const n=[];n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]),n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]);for(let o=1;o3){const a=[],h=1-s.curveTightness;o.push({op:\"move\",data:[t[1][0],t[1][1]]});for(let e=1;e+21&&o.push(s)}else o.push(s);o.push(t[e+3])}else{const n=.5,a=t[e+0],h=t[e+1],r=t[e+2],i=t[e+3],c=J(a,h,n),l=J(h,r,n),u=J(r,i,n),p=J(c,l,n),f=J(l,u,n),d=J(p,f,n);K([a,c,p,d],0,s,o),K([d,f,u,i],0,s,o)}var a,h;return o}function U(t,e){return X(t,0,t.length,e)}function X(t,e,s,n,o){const a=o||[],h=t[e],r=t[s-1];let i=0,c=1;for(let n=e+1;ni&&(i=e,c=n)}return Math.sqrt(i)>n?(X(t,e,c+1,n,a),X(t,c,s,n,a)):(a.length||a.push(h),a.push(r)),a}function Y(t,e=.15,s){const n=[],o=(t.length-1)/3;for(let s=0;s0?X(n,0,n.length,s):n}const tt=\"none\";class et{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:\"#000\",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:\"hachure\",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,s){return{shape:t,sets:e||[],options:s||this.defaultOptions}}line(t,e,s,n,o){const a=this._o(o);return this._d(\"line\",[v(t,e,s,n,a)],a)}rectangle(t,e,s,n,o){const a=this._o(o),h=[],r=O(t,e,s,n,a);if(a.fill){const o=[[t,e],[t+s,e],[t+s,e+n],[t,e+n]];\"solid\"===a.fillStyle?h.push(I([o],a)):h.push(C([o],a))}return a.stroke!==tt&&h.push(r),this._d(\"rectangle\",h,a)}ellipse(t,e,s,n,o){const a=this._o(o),h=[],r=T(s,n,a),i=D(t,e,a,r);if(a.fill)if(\"solid\"===a.fillStyle){const s=D(t,e,a,r).opset;s.type=\"fillPath\",h.push(s)}else h.push(C([i.estimatedPoints],a));return a.stroke!==tt&&h.push(i.opset),this._d(\"ellipse\",h,a)}circle(t,e,s,n){const o=this.ellipse(t,e,s,s,n);return o.shape=\"circle\",o}linearPath(t,e){const s=this._o(e);return this._d(\"linearPath\",[S(t,!1,s)],s)}arc(t,e,s,n,o,a,h=!1,r){const i=this._o(r),c=[],l=A(t,e,s,n,o,a,h,!0,i);if(h&&i.fill)if(\"solid\"===i.fillStyle){const h=Object.assign({},i);h.disableMultiStroke=!0;const r=A(t,e,s,n,o,a,!0,!1,h);r.type=\"fillPath\",c.push(r)}else c.push(function(t,e,s,n,o,a,h){const r=t,i=e;let c=Math.abs(s/2),l=Math.abs(n/2);c+=G(.01*c,h),l+=G(.01*l,h);let u=o,p=a;for(;u<0;)u+=2*Math.PI,p+=2*Math.PI;p-u>2*Math.PI&&(u=0,p=2*Math.PI);const f=(p-u)/h.curveStepCount,d=[];for(let t=u;t<=p;t+=f)d.push([r+c*Math.cos(t),i+l*Math.sin(t)]);return d.push([r+c*Math.cos(p),i+l*Math.sin(p)]),d.push([r,i]),C([d],h)}(t,e,s,n,o,a,i));return i.stroke!==tt&&c.push(l),this._d(\"arc\",c,i)}curve(t,e){const s=this._o(e),n=[],o=L(t,s);if(s.fill&&s.fill!==tt)if(\"solid\"===s.fillStyle){const e=L(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else{const e=[],o=t;if(o.length){const t=\"number\"==typeof o[0][0]?[o]:o;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Y(H([n[0],n[0],n[1],n[2]]),10,(1+s.roughness)/2)):e.push(...Y(H(n),10,(1+s.roughness)/2))}e.length&&n.push(C([e],s))}return s.stroke!==tt&&n.push(o),this._d(\"curve\",n,s)}polygon(t,e){const s=this._o(e),n=[],o=S(t,!0,s);return s.fill&&(\"solid\"===s.fillStyle?n.push(I([t],s)):n.push(C([t],s))),s.stroke!==tt&&n.push(o),this._d(\"polygon\",n,s)}path(t,e){const s=this._o(e),n=[];if(!t)return this._d(\"path\",n,s);t=(t||\"\").replace(/\\n/g,\" \").replace(/(-\\s)/g,\"-\").replace(\"/(ss)/g\",\" \");const o=s.fill&&\"transparent\"!==s.fill&&s.fill!==tt,a=s.stroke!==tt,h=!!(s.simplification&&s.simplification<1),r=function(t,e,s){const n=m(y(b(t))),o=[];let a=[],h=[0,0],r=[];const i=()=>{r.length>=4&&a.push(...Y(r,e)),r=[]},c=()=>{i(),a.length&&(o.push(a),a=[])};for(const{key:t,data:e}of n)switch(t){case\"M\":c(),h=[e[0],e[1]],a.push(h);break;case\"L\":i(),a.push([e[0],e[1]]);break;case\"C\":if(!r.length){const t=a.length?a[a.length-1]:h;r.push([t[0],t[1]])}r.push([e[0],e[1]]),r.push([e[2],e[3]]),r.push([e[4],e[5]]);break;case\"Z\":i(),a.push([h[0],h[1]])}if(c(),!s)return o;const l=[];for(const t of o){const e=U(t,s);e.length&&l.push(e)}return l}(t,1,h?4-4*(s.simplification||1):(1+s.roughness)/2),i=_(t,s);if(o)if(\"solid\"===s.fillStyle)if(1===r.length){const e=_(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else n.push(I(r,s));else n.push(C(r,s));return a&&(h?r.forEach((t=>{n.push(S(t,!1,s))})):n.push(i)),this._d(\"path\",n,s)}opsToPath(t,e){let s=\"\";for(const n of t.ops){const t=\"number\"==typeof e&&e>=0?n.data.map((t=>+t.toFixed(e))):n.data;switch(n.op){case\"move\":s+=`M${t[0]} ${t[1]} `;break;case\"bcurveTo\":s+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case\"lineTo\":s+=`L${t[0]} ${t[1]} `}}return s.trim()}toPaths(t){const e=t.sets||[],s=t.options||this.defaultOptions,n=[];for(const t of e){let e=null;switch(t.type){case\"path\":e={d:this.opsToPath(t),stroke:s.stroke,strokeWidth:s.strokeWidth,fill:tt};break;case\"fillPath\":e={d:this.opsToPath(t),stroke:tt,strokeWidth:0,fill:s.fill||tt};break;case\"fillSketch\":e=this.fillSketch(t,s)}e&&n.push(e)}return n}fillSketch(t,e){let s=e.fillWeight;return s<0&&(s=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||tt,strokeWidth:s,fill:tt}}_mergedShape(t){return t.filter(((t,e)=>0===e||\"move\"!==t.op))}}class st{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext(\"2d\"),this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.ctx,o=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case\"path\":n.save(),n.strokeStyle=\"none\"===s.stroke?\"transparent\":s.stroke,n.lineWidth=s.strokeWidth,s.strokeLineDash&&n.setLineDash(s.strokeLineDash),s.strokeLineDashOffset&&(n.lineDashOffset=s.strokeLineDashOffset),this._drawToContext(n,a,o),n.restore();break;case\"fillPath\":{n.save(),n.fillStyle=s.fill||\"\";const e=\"curve\"===t.shape||\"polygon\"===t.shape||\"path\"===t.shape?\"evenodd\":\"nonzero\";this._drawToContext(n,a,o,e),n.restore();break}case\"fillSketch\":this.fillSketch(n,a,s)}}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2),t.save(),s.fillLineDash&&t.setLineDash(s.fillLineDash),s.fillLineDashOffset&&(t.lineDashOffset=s.fillLineDashOffset),t.strokeStyle=s.fill||\"\",t.lineWidth=n,this._drawToContext(t,e,s.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,s,n=\"nonzero\"){t.beginPath();for(const n of e.ops){const e=\"number\"==typeof s&&s>=0?n.data.map((t=>+t.toFixed(s))):n.data;switch(n.op){case\"move\":t.moveTo(e[0],e[1]);break;case\"bcurveTo\":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case\"lineTo\":t.lineTo(e[0],e[1])}}\"fillPath\"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a),a}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a),a}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a),a}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o),o}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s),s}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s),s}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i),i}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s),s}path(t,e){const s=this.gen.path(t,e);return this.draw(s),s}}const nt=\"http://www.w3.org/2000/svg\";class ot{constructor(t,e){this.svg=t,this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,o=n.createElementNS(nt,\"g\"),a=t.options.fixedDecimalPlaceDigits;for(const h of e){let e=null;switch(h.type){case\"path\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",s.stroke),e.setAttribute(\"stroke-width\",s.strokeWidth+\"\"),e.setAttribute(\"fill\",\"none\"),s.strokeLineDash&&e.setAttribute(\"stroke-dasharray\",s.strokeLineDash.join(\" \").trim()),s.strokeLineDashOffset&&e.setAttribute(\"stroke-dashoffset\",`${s.strokeLineDashOffset}`);break;case\"fillPath\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",\"none\"),e.setAttribute(\"stroke-width\",\"0\"),e.setAttribute(\"fill\",s.fill||\"\"),\"curve\"!==t.shape&&\"polygon\"!==t.shape||e.setAttribute(\"fill-rule\",\"evenodd\");break;case\"fillSketch\":e=this.fillSketch(n,h,s)}e&&o.appendChild(e)}return o}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2);const o=t.createElementNS(nt,\"path\");return o.setAttribute(\"d\",this.opsToPath(e,s.fixedDecimalPlaceDigits)),o.setAttribute(\"stroke\",s.fill||\"\"),o.setAttribute(\"stroke-width\",n+\"\"),o.setAttribute(\"fill\",\"none\"),s.fillLineDash&&o.setAttribute(\"stroke-dasharray\",s.fillLineDash.join(\" \").trim()),s.fillLineDashOffset&&o.setAttribute(\"stroke-dashoffset\",`${s.fillLineDashOffset}`),o}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a)}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a)}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a)}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o)}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s)}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s)}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i)}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s)}path(t,e){const s=this.gen.path(t,e);return this.draw(s)}}var at={canvas:(t,e)=>new st(t,e),svg:(t,e)=>new ot(t,e),generator:t=>new et(t),newSeed:()=>et.newSeed()};export{at as default};\n", "const intersectRect = (node, point) => {\n var x = node.x;\n var y = node.y;\n\n // Rectangle intersection algorithm from:\n // https://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\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\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n};\n\nexport default intersectRect;\n", "import { select } from 'd3';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport common, { evaluate, renderKatex, hasKatex } from '../../diagrams/common/common.js';\nimport { decodeEntities } from '../../utils.js';\n\n/**\n * @param dom\n * @param styleFn\n */\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn);\n }\n}\n\n/**\n * @param {any} node\n * @returns {Promise} Node\n */\nasync function addHtmlLabel(node) {\n const fo = select(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'));\n const div = fo.append('xhtml:div');\n\n let label = node.label;\n if (node.label && hasKatex(node.label)) {\n label = await renderKatex(node.label.replace(common.lineBreakRegex, '\\n'), getConfig());\n }\n const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel';\n div.html(\n '' +\n label +\n ''\n );\n\n applyStyle(div, node.labelStyle);\n div.style('display', 'inline-block');\n div.style('padding-right', '1px');\n // Fix for firefox\n div.style('white-space', 'nowrap');\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n return fo.node();\n}\n/**\n * @param _vertexText\n * @param style\n * @param isTitle\n * @param isNode\n * @deprecated svg-util/createText instead\n */\nconst createLabel = async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || '';\n if (typeof vertexText === 'object') {\n vertexText = vertexText[0];\n }\n\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n vertexText = vertexText.replace(/\\\\n|\\n/g, '
');\n log.info('vertexText' + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style ? style.replace('fill:', 'color:') : style,\n };\n let vertexNode = await addHtmlLabel(node);\n // vertexNode.parentNode.removeChild(vertexNode);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n svgLabel.setAttribute('style', style.replace('color:', 'fill:'));\n let rows = [];\n if (typeof vertexText === 'string') {\n rows = vertexText.split(/\\\\n|\\n|
/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n\n for (const row of rows) {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n tspan.setAttribute('dy', '1em');\n tspan.setAttribute('x', '0');\n if (isTitle) {\n tspan.setAttribute('class', 'title-row');\n } else {\n tspan.setAttribute('class', 'row');\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\n\nexport default createLabel;\n", "export const createRoundedRectPathD = (\n x: number,\n y: number,\n totalWidth: number,\n totalHeight: number,\n radius: number\n) =>\n [\n 'M',\n x + radius,\n y, // Move to the first point\n 'H',\n x + totalWidth - radius, // 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, // Draw arc to the right top corner\n 'V',\n y + totalHeight - radius, // 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, // Draw arc to the right bottom corner\n 'H',\n x + radius, // 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, // Draw arc to the left bottom corner\n 'V',\n y + radius, // 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, // Draw arc to the left top corner\n 'Z', // Close the path\n ].join(' ');\n", "import { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport type { Node } from '../../types.js';\n\n// Striped fill like start or fork nodes in state diagrams\nexport const solidStateFill = (color: string) => {\n const { handDrawnSeed } = getConfig();\n return {\n fill: color,\n hachureAngle: 120, // angle of hachure,\n hachureGap: 4,\n fillWeight: 2,\n roughness: 0.7,\n stroke: color,\n seed: handDrawnSeed,\n };\n};\n\nexport const compileStyles = (node: Node) => {\n // node.cssCompiledStyles is an array of strings in the form of 'key: value' where jey is the css property and value is the value\n // the array is the styles of node node from the classes it is using\n // node.cssStyles is an array of styles directly set on the node\n // concat the arrays and remove duplicates such that the values from node.cssStyles are used if there are duplicates\n const stylesMap = styles2Map([...(node.cssCompiledStyles || []), ...(node.cssStyles || [])]);\n return { stylesMap, stylesArray: [...stylesMap] };\n};\n\nexport const styles2Map = (styles: string[]) => {\n const styleMap = new Map();\n styles.forEach((style) => {\n const [key, value] = style.split(':');\n styleMap.set(key.trim(), value?.trim());\n });\n return styleMap;\n};\n\nexport const styles2String = (node: Node) => {\n const { stylesArray } = compileStyles(node);\n const labelStyles: string[] = [];\n const nodeStyles: string[] = [];\n const borderStyles: string[] = [];\n const backgroundStyles: string[] = [];\n\n stylesArray.forEach((style) => {\n const key = style[0];\n if (\n key === 'color' ||\n key === 'font-size' ||\n key === 'font-family' ||\n key === 'font-weight' ||\n key === 'font-style' ||\n key === 'text-decoration' ||\n key === 'text-align' ||\n key === 'text-transform' ||\n key === 'line-height' ||\n key === 'letter-spacing' ||\n key === 'word-spacing' ||\n key === 'text-shadow' ||\n key === 'text-overflow' ||\n key === 'white-space' ||\n key === 'word-wrap' ||\n key === 'word-break' ||\n key === 'overflow-wrap' ||\n key === 'hyphens'\n ) {\n labelStyles.push(style.join(':') + ' !important');\n } else {\n nodeStyles.push(style.join(':') + ' !important');\n if (key.includes('stroke')) {\n borderStyles.push(style.join(':') + ' !important');\n }\n if (key === 'fill') {\n backgroundStyles.push(style.join(':') + ' !important');\n }\n }\n });\n\n return {\n labelStyles: labelStyles.join(';'),\n nodeStyles: nodeStyles.join(';'),\n stylesArray,\n borderStyles,\n backgroundStyles,\n };\n};\n\n// Striped fill like start or fork nodes in state diagrams\n// TODO remove any\nexport const userNodeOverrides = (node: Node, options: any) => {\n const { themeVariables, handDrawnSeed } = getConfig();\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n // index the style array to a map object\n const result = Object.assign(\n {\n roughness: 0.7,\n fill: stylesMap.get('fill') || mainBkg,\n fillStyle: 'hachure', // solid fill\n fillWeight: 4,\n hachureGap: 5.2,\n stroke: stylesMap.get('stroke') || nodeBorder,\n seed: handDrawnSeed,\n strokeWidth: stylesMap.get('stroke-width')?.replace('px', '') || 1.3,\n fillLineDash: [0, 0],\n },\n options\n );\n return result;\n};\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { evaluate } from '../../diagrams/common/common.js';\nimport { log } from '../../logger.js';\nimport { getSubGraphTitleMargins } from '../../utils/subGraphTitleMargins.js';\nimport { select } from 'd3';\nimport rough from 'roughjs';\nimport { createText } from '../createText.ts';\nimport intersectRect from '../rendering-elements/intersect/intersect-rect.js';\nimport createLabel from './createLabel.js';\nimport { createRoundedRectPathD } from './shapes/roundedRectPath.ts';\nimport { styles2String, userNodeOverrides } from './shapes/handDrawnShapeStyles.js';\n\nconst rect = async (parent, node) => {\n log.info('Creating subgraph rect for ', node.id, node);\n const siteConfig = getConfig();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'cluster ' + node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg.insert('g').attr('class', 'cluster-label ');\n\n const text = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n });\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\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\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n\n log.trace('Data ', node, JSON.stringify(node));\n let rect;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\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 rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n // Should we affect the options instead of doing this?\n rect.select('path:nth-child(2)').attr('style', borderStyles.join(';'));\n rect.select('path').attr('style', backgroundStyles.join(';').replace('fill', 'stroke'));\n } else {\n // add the rect\n rect = shapeSvg.insert('rect', ':first-child');\n // center the rect around its coordinate\n rect\n .attr('style', nodeStyles)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .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\n if (labelStyles) {\n const span = labelEl.select('span');\n if (span) {\n span.attr('style', labelStyles);\n }\n }\n // Center the label\n\n const rectBox = rect.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\n\n/**\n * Non visible cluster where the note is group with its\n *\n * @param {any} parent\n * @param {any} node\n * @returns {any} ShapeSvg\n */\nconst noteGroup = (parent, node) => {\n // Add outer g element\n const shapeSvg = parent.insert('g').attr('class', 'note-cluster').attr('id', node.id);\n\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n\n // center the rect around its coordinate\n rect\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', node.x - node.width / 2 - halfPadding)\n .attr('y', node.y - node.height / 2 - halfPadding)\n .attr('width', node.width + padding)\n .attr('height', node.height + padding)\n .attr('fill', 'none');\n\n const rectBox = rect.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };\n};\n\nconst roundedWithTitle = async (parent, node) => {\n const siteConfig = getConfig();\n\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } =\n themeVariables;\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', node.cssClasses)\n .attr('id', node.id)\n .attr('data-id', node.id)\n .attr('data-look', node.look);\n\n // add the rect\n const outerRectG = shapeSvg.insert('g', ':first-child');\n\n // Create the label and insert it after the rect\n const label = shapeSvg.insert('g').attr('class', 'cluster-label');\n let innerRect = shapeSvg.append('rect');\n\n const text = label\n .node()\n .appendChild(await createLabel(node.label, node.labelStyle, undefined, true));\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Rounded With Title\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n\n const width =\n (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\n const height = node.height + padding;\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\n // add the rect\n let rect;\n if (node.look === 'handDrawn') {\n const isAlt = node.cssClasses.includes('statediagram-cluster-alt');\n const rc = rough.svg(shapeSvg);\n const roughOuterNode =\n node.rx || node.ry\n ? 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 })\n : rc.rectangle(x, y, width, height, { seed: handDrawnSeed });\n\n rect = 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\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n innerRect = shapeSvg.insert(() => roughInnerNode);\n } else {\n rect = outerRectG.insert('rect', ':first-child');\n const outerRectClass = 'outer';\n\n // center the rect around its coordinate\n rect\n .attr('class', outerRectClass)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('data-look', node.look);\n innerRect\n .attr('class', 'inner')\n .attr('x', x)\n .attr('y', innerY)\n .attr('width', width)\n .attr('height', innerHeight);\n }\n\n label.attr(\n 'transform',\n `translate(${node.x - bbox.width / 2}, ${y + 1 - (evaluate(siteConfig.flowchart.htmlLabels) ? 0 : 3)})`\n );\n\n const rectBox = rect.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n node.labelBBox = bbox;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\nconst kanbanSection = async (parent, node) => {\n log.info('Creating subgraph rect for ', node.id, node);\n const siteConfig = getConfig();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'cluster ' + node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg.insert('g').attr('class', 'cluster-label ');\n\n const text = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width,\n });\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\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\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n\n log.trace('Data ', node, JSON.stringify(node));\n let rect;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\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 rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n // Should we affect the options instead of doing this?\n rect.select('path:nth-child(2)').attr('style', borderStyles.join(';'));\n rect.select('path').attr('style', backgroundStyles.join(';').replace('fill', 'stroke'));\n } else {\n // add the rect\n rect = shapeSvg.insert('rect', ':first-child');\n // center the rect around its coordinate\n rect\n .attr('style', nodeStyles)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .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\n if (labelStyles) {\n const span = labelEl.select('span');\n if (span) {\n span.attr('style', labelStyles);\n }\n }\n // Center the label\n\n const rectBox = rect.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\nconst divider = (parent, node) => {\n const siteConfig = getConfig();\n\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { nodeBorder } = themeVariables;\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n // add the rect\n const outerRectG = shapeSvg.insert('g', ':first-child');\n\n const padding = 0 * node.padding;\n\n const width = node.width + padding;\n\n node.diff = -node.padding;\n\n const height = node.height + 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\n // add the rect\n let rect;\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\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n } else {\n rect = outerRectG.insert('rect', ':first-child');\n const outerRectClass = 'divider';\n\n // center the rect around its coordinate\n rect\n .attr('class', outerRectClass)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('data-look', node.look);\n }\n\n const rectBox = rect.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n // Used by layout engine to position subgraph in parent\n node.offsetY = 0;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: {} };\n};\n\nconst squareRect = rect;\nconst shapes = {\n rect,\n squareRect,\n roundedWithTitle,\n noteGroup,\n divider,\n kanbanSection,\n};\n\nlet clusterElems = new Map();\n\n/**\n * @typedef {keyof typeof shapes} ClusterShapeID\n */\n\n/**\n * @param {import('../types.js').ClusterNode} node - Shape defaults to 'rect'\n */\nexport const insertCluster = 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};\n\nexport const getClusterTitleWidth = (elem, node) => {\n const label = createLabel(node.label, node.labelStyle, undefined, true);\n elem.node().appendChild(label);\n const width = label.getBBox().width;\n elem.node().removeChild(label);\n return width;\n};\n\nexport const clear = () => {\n clusterElems = new Map();\n};\n\nexport const positionCluster = (node) => {\n log.info(\n 'Position cluster (' +\n node.id +\n ', ' +\n node.x +\n ', ' +\n node.y +\n ') (' +\n node?.width +\n ', ' +\n node?.height +\n ')',\n clusterElems.get(node.id)\n );\n const el = clusterElems.get(node.id);\n el.cluster.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n};\n", "function intersectNode(node, point) {\n return node.intersect(point);\n}\n\nexport default intersectNode;\n", "function intersectEllipse(node, rx, ry, point) {\n // Formulae from: https://mathworld.wolfram.com/Ellipse-LineIntersection.html\n\n var cx = node.x;\n var cy = node.y;\n\n var px = cx - point.x;\n var py = cy - point.y;\n\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n\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\n return { x: cx + dx, y: cy + dy };\n}\n\nexport default intersectEllipse;\n", "import intersectEllipse from './intersect-ellipse.js';\n\nfunction intersectCircle(node, rx, point) {\n return intersectEllipse(node, rx, rx, point);\n}\n\nexport default intersectCircle;\n", "/**\n * Returns the point at which two lines, p and q, intersect or returns undefined if they do not intersect.\n */\nfunction intersectLine(p1, p2, q1, q2) {\n // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,\n // p7 and p473.\n\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n\n // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +\n // b1 y + c1 = 0.\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n\n // Compute r3 and r4.\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n\n // Check signs of r3 and r4. If both point 3 and point 4 lie on\n // same side of line 1, the line segments do not intersect.\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n\n // Compute r1 and r2\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n\n // Check signs of r1 and r2. If both point 1 and point 2 lie\n // on same side of second line segment, the line segments do\n // not intersect.\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Line segments intersect: compute intersection point.\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return /*COLLINEAR*/;\n }\n\n offset = Math.abs(denom / 2);\n\n // The denom/2 is to get rounding instead of truncating. It\n // is added or subtracted to the numerator, depending upon the\n // sign of the numerator.\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n return { x: x, y: y };\n}\n\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n\nexport default intersectLine;\n", "import intersectLine from './intersect-line.js';\n\n/**\n * Returns the point ({x, y}) at which the point argument intersects with the node argument assuming\n * that it has the shape specified by polygon.\n */\nfunction intersectPolygon(node, polyPoints, point) {\n let x1 = node.x;\n let y1 = node.y;\n\n let intersections = [];\n\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\n let left = x1 - node.width / 2 - minX;\n let top = y1 - node.height / 2 - minY;\n\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 = intersectLine(\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\n if (!intersections.length) {\n return node;\n }\n\n if (intersections.length > 1) {\n // More intersections, find the one nearest to edge end point\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\n let qdx = q.x - point.x;\n let qdy = q.y - point.y;\n let distq = Math.sqrt(qdx * qdx + qdy * qdy);\n\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n\nexport default intersectPolygon;\n", "/*\n * Borrowed with love from from dagre-d3. Many thanks to cpettitt!\n */\n\nimport node from './intersect-node.js';\nimport circle from './intersect-circle.js';\nimport ellipse from './intersect-ellipse.js';\nimport polygon from './intersect-polygon.js';\nimport rect from './intersect-rect.js';\n\nexport default {\n node,\n circle,\n ellipse,\n polygon,\n rect,\n};\n", "import { log } from '../../../logger.js';\nimport { updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function anchor(parent: D3Selection, node: 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\n .insert('g')\n .attr('class', cssClasses)\n .attr('id', node.domId || node.id);\n\n const radius = 1;\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'black', stroke: 'none', fillStyle: 'solid' });\n\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\n updateNodeBounds(node, circleElem);\n\n node.intersect = function (point) {\n log.info('Circle intersect', node, radius, point);\n return intersect.circle(node, radius, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateArcPoints(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n rx: number,\n ry: number,\n clockwise: boolean\n) {\n const numPoints = 20;\n // Calculate midpoint\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n\n // Calculate the angle of the line connecting the points\n const angle = Math.atan2(y2 - y1, x2 - x1);\n\n // Calculate transformed coordinates for the ellipse\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n\n // Scale to unit circle\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n\n // Calculate the distance between points on the unit circle\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n\n // Check if the ellipse can be drawn with the given radii\n if (distance > 1) {\n throw new Error('The given radii are too small to create an arc between the points.');\n }\n\n // Calculate the distance from the midpoint to the center of the ellipse\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n\n // Calculate the center of the ellipse\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\n // Calculate the start and end angles on the ellipse\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n\n // Adjust angles for clockwise/counterclockwise\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\n // Generate points\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle);\n const y = centerY + ry * Math.sin(angle);\n points.push({ x, y });\n }\n\n return points;\n}\n\nexport async function bowTieRect(parent: D3Selection, node: 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\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n\n // let shape: d3.Selection;\n const { cssStyles } = node;\n\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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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\n bowTieRectShape.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n bowTieRectShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n bowTieRectShape.selectAll('path').attr('style', nodeStyles);\n }\n\n bowTieRectShape.attr('transform', `translate(${rx / 2}, 0)`);\n\n updateNodeBounds(node, bowTieRectShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import type { D3Selection } from '../../../types.js';\n\nexport function insertPolygonShape(\n parent: D3Selection,\n w: number,\n h: number,\n points: { x: number; y: number }[]\n) {\n return parent\n .insert('polygon', ':first-child')\n .attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n )\n .attr('class', 'label-container')\n .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\n// const createPathFromPoints = (points: { x: number; y: number }[]): string => {\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\nexport async function card(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\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\n let polygon: D3Selection | Awaited>;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { createPathFromPoints, getNodeClasses } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function choice(parent: D3Selection, node: Node) {\n const { nodeStyles } = styles2String(node);\n node.label = '';\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n const { cssStyles } = node;\n\n const s = Math.max(28, node.width ?? 0);\n\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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const choicePath = createPathFromPoints(points);\n const roughNode = rc.path(choicePath, options);\n const choiceShape = shapeSvg.insert(() => roughNode, ':first-child');\n\n if (cssStyles && node.look !== 'handDrawn') {\n choiceShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n choiceShape.selectAll('path').attr('style', nodeStyles);\n }\n\n node.width = 28;\n node.height = 28;\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport async function circle(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n\n const radius = bbox.width / 2 + halfPadding;\n let circleElem;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.circle(0, 0, radius * 2, options);\n\n circleElem = shapeSvg.insert(() => roughNode, ':first-child');\n circleElem.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n } else {\n circleElem = shapeSvg\n .insert('circle', ':first-child')\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('r', radius)\n .attr('cx', 0)\n .attr('cy', 0);\n }\n\n updateNodeBounds(node, circleElem);\n\n node.intersect = function (point) {\n log.info('Circle intersect', node, radius, point);\n return intersect.circle(node, radius, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nfunction createLine(r: number) {\n const xAxis45 = Math.cos(Math.PI / 4); // cosine of 45 degrees\n const yAxis45 = Math.sin(Math.PI / 4); // sine of 45 degrees\n const lineLength = r * 2;\n\n const pointQ1 = { x: (lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant I\n const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant II\n const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant III\n const pointQ4 = { x: (lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant IV\n\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\nexport function crossedCircle(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.label = '';\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n const radius = Math.max(30, node?.width ?? 0);\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const linePath = createLine(radius);\n const lineNode = rc.path(linePath, options);\n\n const crossedCircle = shapeSvg.insert(() => circleNode, ':first-child');\n crossedCircle.insert(() => lineNode);\n\n if (cssStyles && node.look !== 'handDrawn') {\n crossedCircle.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n crossedCircle.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, crossedCircle);\n\n node.intersect = function (point) {\n log.info('crossedCircle intersect', node, { radius, point });\n const pos = intersect.circle(node, radius, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints = 100,\n startAngle = 0,\n endAngle = 180\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\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\n return points;\n}\n\nexport async function curlyBraceLeft(\n parent: D3Selection,\n node: Node\n) {\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\n const { cssStyles } = node;\n\n const points = [\n ...generateCirclePoints(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n ];\n\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints(w / 2 + w * 0.1, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + w * 0.1, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'none' });\n\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\n if (cssStyles && node.look !== 'handDrawn') {\n curlyBraceLeftShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n curlyBraceLeftShape.selectAll('path').attr('style', nodeStyles);\n }\n\n curlyBraceLeftShape.attr('transform', `translate(${radius}, 0)`);\n\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\n updateNodeBounds(node, curlyBraceLeftShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints = 100,\n startAngle = 0,\n endAngle = 180\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\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\n return points;\n}\n\nexport async function curlyBraceRight(\n parent: D3Selection,\n node: Node\n) {\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\n const { cssStyles } = node;\n\n const points = [\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n ];\n\n const rectPoints = [\n { x: -w / 2, y: -h / 2 - radius },\n { x: w / 2, y: -h / 2 - radius },\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints(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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'none' });\n\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\n if (cssStyles && node.look !== 'handDrawn') {\n curlyBraceRightShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n curlyBraceRightShape.selectAll('path').attr('style', nodeStyles);\n }\n\n curlyBraceRightShape.attr('transform', `translate(${-radius}, 0)`);\n\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\n updateNodeBounds(node, curlyBraceRightShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints = 100,\n startAngle = 0,\n endAngle = 180\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\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\n return points;\n}\n\nexport async function curlyBraces(\n parent: D3Selection,\n node: Node\n) {\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\n const { cssStyles } = node;\n\n const leftCurlyBracePoints = [\n ...generateCirclePoints(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n ];\n\n const rightCurlyBracePoints = [\n ...generateCirclePoints(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270),\n ];\n\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(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 ...generateCirclePoints(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270),\n ];\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'none' });\n\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\n if (cssStyles && node.look !== 'handDrawn') {\n curlyBracesShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n curlyBracesShape.selectAll('path').attr('style', nodeStyles);\n }\n\n curlyBracesShape.attr('transform', `translate(${radius - radius / 4}, 0)`);\n\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\n updateNodeBounds(node, curlyBracesShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateCirclePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function curvedTrapezoid(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 80,\n 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\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const totalWidth = w,\n totalHeight = h;\n const rw = totalWidth - radius;\n const tw = totalHeight / 4;\n\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\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n polygon.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\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};\nexport const createOuterCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\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};\nexport const createInnerCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(' ');\n};\nexport async function cylinder(parent: D3Selection, node: 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\n let cylinder: D3Selection | D3Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.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\n cylinder = shapeSvg.insert(() => innerLine, ':first-child');\n cylinder = shapeSvg.insert(() => outerNode, ':first-child');\n cylinder.attr('class', 'basic label-container');\n if (cssStyles) {\n cylinder.attr('style', cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder = shapeSvg\n .insert('path', ':first-child')\n .attr('d', pathData)\n .attr('class', 'basic label-container')\n .attr('style', handleUndefinedAttr(cssStyles))\n .attr('style', nodeStyles);\n }\n\n cylinder.attr('label-offset-y', ry);\n cylinder.attr('transform', `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n\n updateNodeBounds(node, cylinder);\n\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\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n\n if (\n rx != 0 &&\n (Math.abs(x) < (node.width ?? 0) / 2 ||\n (Math.abs(x) == (node.width ?? 0) / 2 &&\n Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry))\n ) {\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\n pos.y += y;\n }\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function dividedRectangle(\n parent: D3Selection,\n node: Node\n) {\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\n const x = -w / 2;\n const y = -h / 2 - rectOffset / 2;\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const poly = rc.polygon(\n pts.map((p) => [p.x, p.y]),\n options\n );\n\n const polygon = shapeSvg.insert(() => poly, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectAll('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport async function doublecircle(\n parent: D3Selection,\n node: Node\n) {\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\n let circleGroup;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const outerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 2.5 });\n\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\n circleGroup = shapeSvg.insert('g', ':first-child');\n // circleGroup = circleGroup.insert(() => outerRoughNode, ':first-child');\n circleGroup\n .attr('class', handleUndefinedAttr(node.cssClasses))\n .attr('style', handleUndefinedAttr(cssStyles));\n\n circleGroup.node()?.appendChild(outerRoughNode);\n circleGroup.node()?.appendChild(innerRoughNode);\n } else {\n circleGroup = shapeSvg.insert('g', ':first-child');\n\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\n outerCircle\n .attr('class', 'outer-circle')\n .attr('style', nodeStyles)\n .attr('r', outerRadius)\n .attr('cx', 0)\n .attr('cy', 0);\n\n innerCircle\n .attr('class', 'inner-circle')\n .attr('style', nodeStyles)\n .attr('r', innerRadius)\n .attr('cx', 0)\n .attr('cy', 0);\n }\n\n updateNodeBounds(node, circleGroup);\n\n node.intersect = function (point) {\n log.info('DoubleCircle intersect', node, outerRadius, point);\n return intersect.circle(node, outerRadius, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function filledCircle(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = '';\n node.labelStyle = labelStyles;\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n const radius = 7;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const { nodeBorder } = themeVariables;\n const options = userNodeOverrides(node, { fillStyle: 'solid' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n }\n\n const circleNode = rc.circle(0, 0, radius * 2, options);\n\n const filledCircle = shapeSvg.insert(() => circleNode, ':first-child');\n\n filledCircle.selectAll('path').attr('style', `fill: ${nodeBorder} !important;`);\n\n if (cssStyles && cssStyles.length > 0 && node.look !== 'handDrawn') {\n filledCircle.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n filledCircle.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, filledCircle);\n\n node.intersect = function (point) {\n log.info('filledCircle intersect', node, { radius, point });\n const pos = intersect.circle(node, radius, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function flippedTriangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n\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\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.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\n const flippedTriangle = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-h / 2}, ${h / 2})`);\n\n if (cssStyles && node.look !== 'handDrawn') {\n flippedTriangle.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n flippedTriangle.selectChildren('path').attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, flippedTriangle);\n\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\n node.intersect = function (point) {\n log.info('Triangle intersect', node, points, point);\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function forkJoin(\n parent: D3Selection,\n node: Node,\n { dir, config: { state, themeVariables } }: ShapeRenderOptions\n) {\n const { nodeStyles } = styles2String(node);\n node.label = '';\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n\n const { cssStyles } = node;\n let width = Math.max(70, node?.width ?? 0);\n let height = Math.max(10, node?.height ?? 0);\n\n if (dir === 'LR') {\n width = Math.max(10, node?.width ?? 0);\n height = Math.max(70, node?.height ?? 0);\n }\n\n const x = (-1 * width) / 2;\n const y = (-1 * height) / 2;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n stroke: themeVariables.lineColor,\n fill: themeVariables.lineColor,\n });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const roughNode = rc.rectangle(x, y, width, height, options);\n\n const shape = shapeSvg.insert(() => roughNode, ':first-child');\n\n if (cssStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, shape);\n const padding = state?.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.rect(node, point);\n };\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateCirclePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function halfRoundedRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const minWidth = 80,\n 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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\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\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n // label.attr(\n // 'transform',\n // `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n // );\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n log.info('Pill intersect', node, { radius, point });\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport const createHexagonPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n m: number\n): string => {\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};\n\nexport async function hexagon(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\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\n let polygon: D3Selection | Awaited>;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createHexagonPathD(0, 0, w, h, m);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function hourglass(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = '';\n node.labelStyle = labelStyles;\n const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = Math.max(30, node?.width ?? 0);\n const h = Math.max(30, node?.height ?? 0);\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\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\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n polygon.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n updateNodeBounds(node, polygon);\n\n // label.attr('transform', `translate(${-bbox.width / 2}, ${(h/2)})`); // To transform text below hourglass shape\n\n node.intersect = function (point) {\n log.info('Pill intersect', node, { points });\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function icon(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\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\n const topLabel = node.pos === 't';\n\n const height = iconSize;\n const width = iconSize;\n const { nodeBorder } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n const x = -width / 2;\n const y = -height / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { stroke: 'none', fill: 'none' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const iconNode = rc.rectangle(x, y, width, height, options);\n\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.icon) {\n const iconElem = shapeSvg.append('g');\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\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 iconElem.attr(\n 'transform',\n `translate(${-iconWidth / 2 - iconX},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\n );\n iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.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\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconCircle(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\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\n const padding = 20;\n const labelPadding = node.label ? 8 : 0;\n\n const topLabel = node.pos === 't';\n\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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\n const iconElem = shapeSvg.append('g');\n if (node.icon) {\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\n })} `\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\n const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;\n const iconNode = rc.circle(0, 0, diameter, options);\n\n const outerWidth = Math.max(diameter, bbox.width);\n const outerHeight = diameter + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\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},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\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))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n const pos = intersect.rect(node, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconRounded(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\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\n const topLabel = node.pos === 't';\n\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n const x = -width / 2;\n const y = -height / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options);\n\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => iconNode, ':first-child').attr('class', 'icon-shape2');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.icon) {\n const iconElem = shapeSvg.append('g');\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\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 iconElem.attr(\n 'transform',\n `translate(${-iconWidth / 2 - iconX},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\n );\n iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.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\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconSquare(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\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\n const topLabel = node.pos === 't';\n\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n const x = -width / 2;\n const y = -height / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options);\n\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.icon) {\n const iconElem = shapeSvg.append('g');\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\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 iconElem.attr(\n 'transform',\n `translate(${-iconWidth / 2 - iconX},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\n );\n iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.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\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function imageSquare(\n parent: D3Selection,\n node: Node,\n { config: { flowchart } }: ShapeRenderOptions\n) {\n const img = new Image();\n img.src = node?.img ?? '';\n await img.decode();\n\n const imageNaturalWidth = Number(img.naturalWidth.toString().replace('px', ''));\n const imageNaturalHeight = Number(img.naturalHeight.toString().replace('px', ''));\n node.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;\n\n const { labelStyles } = styles2String(node);\n\n node.labelStyle = labelStyles;\n\n const defaultWidth = flowchart?.wrappingWidth;\n node.defaultWidth = flowchart?.wrappingWidth;\n\n const imageRawWidth = Math.max(\n node.label ? (defaultWidth ?? 0) : 0,\n node?.assetWidth ?? imageNaturalWidth\n );\n\n const imageWidth =\n node.constraint === 'on'\n ? node?.assetHeight\n ? node.assetHeight * node.imageAspectRatio\n : imageRawWidth\n : imageRawWidth;\n\n const imageHeight =\n node.constraint === 'on'\n ? imageWidth / node.imageAspectRatio\n : (node?.assetHeight ?? imageNaturalHeight);\n node.width = Math.max(imageWidth, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'image-shape default');\n\n const topLabel = node.pos === 't';\n\n const x = -imageWidth / 2;\n const y = -imageHeight / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options);\n\n const outerWidth = Math.max(imageWidth, bbox.width);\n const outerHeight = imageHeight + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'none',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => imageNode, ':first-child');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.img) {\n const image = shapeSvg.append('image');\n\n // Set the image attributes\n image.attr('href', node.img);\n image.attr('width', imageWidth);\n image.attr('height', imageHeight);\n image.attr('preserveAspectRatio', 'none');\n\n image.attr(\n 'transform',\n `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`\n );\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel\n ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2\n : imageHeight / 2 - bbox.height / 2 + labelPadding / 2\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.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\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\n// export const createInvertedTrapezoidPathD = (\n// x: number,\n// y: number,\n// width: number,\n// height: number\n// ): string => {\n// return [\n// `M${x + height / 6},${y}`,\n// `L${x + width - height / 6},${y}`,\n// `L${x + width + (2 * height) / 6},${y - height}`,\n// `L${x - (2 * height) / 6},${y - height}`,\n// 'Z',\n// ].join(' ');\n// };\n\nexport async function inv_trapezoid(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\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\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\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n // const pathData = createInvertedTrapezoidPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node, RectOptions } from '../../types.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport async function drawRect(\n parent: D3Selection,\n node: Node,\n options: RectOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n // console.log('IPI labelStyles:', labelStyles);\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\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\n // log.info('IPI node = ', node);\n\n let rect;\n let { rx, ry } = node;\n const { cssStyles } = node;\n\n //use options rx, ry overrides if present\n if (options?.rx && options.ry) {\n rx = options.rx;\n ry = options.ry;\n }\n\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const roughNode =\n rx || ry\n ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options)\n : rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('rx', handleUndefinedAttr(rx))\n .attr('ry', handleUndefinedAttr(ry))\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport { drawRect } from './drawRect.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function roundedRect(\n parent: D3Selection,\n node: Node\n) {\n const options = {\n rx: 5,\n ry: 5,\n classes: '',\n labelPaddingX: (node?.padding || 0) * 1,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n\n return drawRect(parent, node, options);\n}\n\nexport async function labelRect(parent: D3Selection, node: Node) {\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'label');\n\n // log.trace('Classes = ', node.class);\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // Hide the rect we are only after the label\n const totalWidth = 0.1;\n const totalHeight = 0.1;\n rect.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\n // if (node.props) {\n // const propKeys = new Set(Object.keys(node.props));\n // if (node.props.borders) {\n // applyNodePropertyBorders(rect, node.borders, totalWidth, totalHeight);\n // propKeys.delete('borders');\n // }\n // propKeys.forEach((propKey) => {\n // log.warn(`Unknown node property ${propKey}`);\n // });\n // }\n\n updateNodeBounds(node, rect);\n // node.width = 1;\n // node.height = 1;\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function lean_left(parent: D3Selection, node: 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\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n // const pathData = createLeanLeftPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function lean_right(parent: D3Selection, node: 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\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function lightningBolt(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = '';\n node.labelStyle = labelStyles;\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .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\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\n // @ts-expect-error shapeSvg d3 class is incorrect?\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const linePath = createPathFromPoints(points);\n const lineNode = rc.path(linePath, options);\n\n const lightningBolt = shapeSvg.insert(() => lineNode, ':first-child');\n\n if (cssStyles && node.look !== 'handDrawn') {\n lightningBolt.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n lightningBolt.selectAll('path').attr('style', nodeStyles);\n }\n\n lightningBolt.attr('transform', `translate(-${width / 2},${-height})`);\n\n updateNodeBounds(node, lightningBolt);\n\n node.intersect = function (point) {\n log.info('lightningBolt intersect', node, point);\n const pos = intersect.polygon(node, points, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number,\n outerOffset: number\n): string => {\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};\nexport const createOuterCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number,\n outerOffset: number\n): string => {\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};\nexport const createInnerCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(' ');\n};\nexport async function linedCylinder(\n parent: D3Selection,\n node: Node\n) {\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; // 10% of height\n\n let cylinder: typeof shapeSvg | D3Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry, outerOffset);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const options = userNodeOverrides(node, {});\n\n const outerNode = rc.path(outerPathData, options);\n const innerLine = rc.path(innerPathData, options);\n\n const innerLineEl = shapeSvg.insert(() => innerLine, ':first-child');\n innerLineEl.attr('class', 'line');\n cylinder = shapeSvg.insert(() => outerNode, ':first-child');\n cylinder.attr('class', 'basic label-container');\n if (cssStyles) {\n cylinder.attr('style', cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry, outerOffset);\n cylinder = shapeSvg\n .insert('path', ':first-child')\n .attr('d', pathData)\n .attr('class', 'basic label-container')\n .attr('style', handleUndefinedAttr(cssStyles))\n .attr('style', nodeStyles);\n }\n\n // find label and move it down\n cylinder.attr('label-offset-y', ry);\n cylinder.attr('transform', `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n\n updateNodeBounds(node, cylinder);\n\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\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n\n if (\n rx != 0 &&\n (Math.abs(x) < (node.width ?? 0) / 2 ||\n (Math.abs(x) == (node.width ?? 0) / 2 &&\n Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry))\n ) {\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\n pos.y += y;\n }\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function linedWaveEdgedRect(\n parent: D3Selection,\n node: Node\n) {\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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const poly = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n\n const waveEdgeRect = shapeSvg.insert(() => poly, ':first-child');\n\n waveEdgeRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds, createPathFromPoints } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function multiRect(parent: D3Selection, node: 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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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: y },\n { x, y },\n { x, y: y + rectOffset },\n ];\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\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const multiRect = shapeSvg.insert(() => innerNode, ':first-child');\n multiRect.insert(() => outerNode, ':first-child');\n\n multiRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n multiRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n multiRect.selectAll('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, multiRect);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, outerPathPoints, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function multiWaveEdgedRectangle(\n parent: D3Selection,\n node: Node\n) {\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\n const { cssStyles } = node;\n\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\n const lastWavePoint = wavePoints?.[wavePoints.length - 1];\n\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: y },\n { x, y },\n { x, y: y + rectOffset },\n ];\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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const shape = shapeSvg.insert(() => outerNode, ':first-child');\n shape.insert(() => innerNode);\n\n shape.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', nodeStyles);\n }\n\n shape.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n\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\n updateNodeBounds(node, shape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, outerPathPoints, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\nimport { getConfig } from '../../../config.js';\n\nexport async function note(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart?.htmlLabels !== false;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox } = 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\n // add the rect\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n fill: themeVariables.noteBkgColor,\n stroke: themeVariables.noteBorderColor,\n });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const noteShapeNode = rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n const rect = shapeSvg.insert(() => noteShapeNode, ':first-child');\n rect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport const createDecisionBoxPathD = (x: number, y: number, size: number): string => {\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};\n\nexport async function question(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n\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\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createDecisionBoxPathD(0, 0, s);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-s / 2}, ${s / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, s, s, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n log.debug(\n 'APA12 Intersect called SPLIT\\npoint:',\n point,\n '\\nnode:\\n',\n node,\n '\\nres:',\n intersect.polygon(node, points, point)\n );\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function rect_left_inv_arrow(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\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\n const x = -w / 2;\n const y = -h / 2;\n const notch = y / 2;\n\n const points = [\n { x: x + notch, y },\n { x: x, y: 0 },\n { x: x + notch, y: -y },\n { x: -x, y: -y },\n { x: -x, y },\n ];\n\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => roughNode, ':first-child');\n\n polygon.attr('class', 'basic label-container');\n\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\n polygon.attr('transform', `translate(${-notch / 2},0)`);\n\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\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import type { Node } from '../../types.js';\nimport { select } from 'd3';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport { updateNodeBounds } from './util.js';\nimport createLabel from '../createLabel.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { log } from '../../../logger.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function rectWithTitle(\n parent: D3Selection,\n node: Node\n) {\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\n // Add outer g element\n const shapeSvg = parent\n // @ts-ignore - d3 typings are not correct\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the title label and insert it after the rect\n const g = shapeSvg.insert('g');\n\n const label = shapeSvg.insert('g').attr('class', 'label').attr('style', nodeStyles);\n\n const description = node.description;\n\n const title = node.label;\n\n const text = label.node()!.appendChild(await createLabel(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig()?.flowchart?.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n log.info('Text 2', description);\n const textRows = description || [];\n const titleBox = text.getBBox();\n const descr = label\n .node()!\n .appendChild(\n await createLabel(\n textRows.join ? textRows.join('
') : textRows,\n node.labelStyle,\n true,\n true\n )\n );\n\n //if (evaluate(getConfig()?.flowchart?.htmlLabels)) {\n const div = descr.children[0];\n const dv = select(descr);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n // }\n\n const halfPadding = (node.padding || 0) / 2;\n select(descr).attr(\n 'transform',\n 'translate( ' +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) +\n ', ' +\n (titleBox.height + halfPadding + 5) +\n ')'\n );\n select(text).attr(\n 'transform',\n 'translate( ' +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) +\n ', ' +\n 0 +\n ')'\n );\n // Get the size of the label\n\n // Bounding box for title and text\n bbox = label.node()!.getBBox();\n\n // Center the label\n label.attr(\n 'transform',\n 'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')'\n );\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 rect;\n let innerLine;\n if (node.look === 'handDrawn') {\n // @ts-ignore No typings for rough\n const rc = rough.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\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\n innerLine = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughLine;\n }, ':first-child');\n rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n } else {\n rect = g.insert('rect', ':first-child');\n innerLine = g.insert('line');\n rect\n .attr('class', 'outer title-state')\n .attr('style', nodeStyles)\n .attr('x', -bbox.width / 2 - halfPadding)\n .attr('y', -bbox.height / 2 - halfPadding)\n .attr('width', bbox.width + (node.padding || 0))\n .attr('height', bbox.height + (node.padding || 0));\n\n innerLine\n .attr('class', 'divider')\n .attr('x1', -bbox.width / 2 - halfPadding)\n .attr('x2', bbox.width / 2 + halfPadding)\n .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding)\n .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n }\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function roundedRect(\n parent: D3Selection,\n node: Node\n) {\n const options = {\n rx: 5,\n ry: 5,\n classes: '',\n labelPaddingX: (node?.padding || 0) * 1,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n\n return drawRect(parent, node, options);\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport async function shadedProcess(\n parent: D3Selection,\n node: Node\n) {\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\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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: y },\n { x, y },\n { x, y: y + h },\n ];\n\n const roughNode = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n\n const rect = shapeSvg.insert(() => roughNode, ':first-child');\n\n rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n\n if (nodeStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', nodeStyles);\n }\n\n if (cssStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function slopedRect(parent: D3Selection, node: 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\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function squareRect(parent: D3Selection, node: Node) {\n const options = {\n rx: 0,\n ry: 0,\n classes: '',\n labelPaddingX: (node?.padding || 0) * 2,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n return drawRect(parent, node, options);\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createStadiumPathD = (\n x: number,\n y: number,\n totalWidth: number,\n totalHeight: number\n) => {\n const radius = totalHeight / 2;\n return [\n 'M',\n x + radius,\n y, // Move to the start of the top-left arc\n 'H',\n x + totalWidth - radius, // Draw horizontal line to the start of the top-right arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius, // Draw top-right arc\n 'H',\n x, // Draw horizontal line to the start of the bottom-right arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight, // Draw bottom-right arc\n 'H',\n x + radius, // Draw horizontal line to the start of the bottom-left arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + radius, // Draw bottom-left arc\n 'Z', // Close the path\n ].join(' ');\n};\n\nexport async function stadium(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n\n let rect;\n const { cssStyles } = node;\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const pathData = createRoundedRectPathD(-w / 2, -h / 2, w, h, h / 2);\n const roughNode = rc.path(pathData, options);\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('rx', h / 2)\n .attr('ry', h / 2)\n .attr('x', -w / 2)\n .attr('y', -h / 2)\n .attr('width', w)\n .attr('height', h);\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function state(parent: D3Selection, node: Node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: 'flowchart-node',\n } as RectOptions;\n return drawRect(parent, node, options);\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function stateEnd(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { cssStyles } = node;\n const { lineColor, stateBorder, nodeBorder } = themeVariables;\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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 circle = shapeSvg.insert(() => roughNode, ':first-child');\n circle.insert(() => roughInnerNode);\n\n if (cssStyles) {\n circle.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles) {\n circle.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { solidStateFill } from './handDrawnShapeStyles.js';\nimport { updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function stateStart(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { lineColor } = themeVariables;\n\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n let circle: D3Selection | D3Selection;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor));\n circle = shapeSvg.insert(() => roughNode);\n // center the circle around its coordinate\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n } else {\n circle = shapeSvg.insert('circle', ':first-child');\n // center the circle around its coordinate\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n }\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createSubroutinePathD = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n const offset = 8;\n return [\n `M${x - offset},${y}`,\n `H${x + width + offset}`,\n `V${y + height}`,\n `H${x - offset}`,\n `V${y}`,\n 'M',\n x,\n y,\n 'H',\n x + width,\n 'V',\n y + height,\n 'H',\n x,\n 'Z',\n ].join(' ');\n};\n\nexport async function subroutine(parent: D3Selection, node: 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\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\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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\n shapeSvg.insert(() => l1, ':first-child');\n shapeSvg.insert(() => l2, ':first-child');\n const rect = shapeSvg.insert(() => roughNode, ':first-child');\n const { cssStyles } = node;\n rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, rect);\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\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds, createPathFromPoints } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function taggedRect(parent: D3Selection, node: 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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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\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\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const rectPath = createPathFromPoints(rectPoints);\n const rectNode = rc.path(rectPath, options);\n\n const tagPath = createPathFromPoints(tagPoints);\n const tagNode = rc.path(tagPath, { ...options, fillStyle: 'solid' });\n\n const taggedRect = shapeSvg.insert(() => tagNode, ':first-child');\n taggedRect.insert(() => rectNode, ':first-child');\n\n taggedRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n taggedRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n taggedRect.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, taggedRect);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n generateFullSineWavePoints,\n createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function taggedWaveEdgedRectangle(\n parent: D3Selection,\n node: Node\n) {\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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n { x: w / 2 + (w / 2) * 0.1, y: -finalH / 2 },\n { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 },\n ];\n\n const x = -w / 2 + (w / 2) * 0.1;\n const y = -finalH / 2 - tagHeight * 0.4;\n\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\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n\n const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);\n const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {\n ...options,\n fillStyle: 'solid',\n });\n\n const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, ':first-child');\n waveEdgeRect.insert(() => waveEdgeRectNode, ':first-child');\n\n waveEdgeRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function text(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\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\n const rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'text')\n .attr('style', nodeStyles)\n .attr('rx', 0)\n .attr('ry', 0)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\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};\n\nexport const createOuterCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\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};\nexport const createInnerCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [`M${x + width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 0,${height}`].join(' ');\n};\n\nexport async function tiltedCylinder(\n parent: D3Selection,\n node: Node\n) {\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\n let cylinder: D3Selection | D3Selection;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(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 cylinder = shapeSvg.insert(() => innerLine, ':first-child');\n cylinder = shapeSvg.insert(() => outerNode, ':first-child');\n cylinder.attr('class', 'basic label-container');\n if (cssStyles) {\n cylinder.attr('style', cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder = shapeSvg\n .insert('path', ':first-child')\n .attr('d', pathData)\n .attr('class', 'basic label-container')\n .attr('style', handleUndefinedAttr(cssStyles))\n .attr('style', nodeStyles);\n cylinder.attr('class', 'basic label-container');\n\n if (cssStyles) {\n cylinder.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles) {\n cylinder.selectAll('path').attr('style', nodeStyles);\n }\n }\n\n cylinder.attr('label-offset-x', rx);\n cylinder.attr('transform', `translate(${-w / 2}, ${h / 2} )`);\n\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\n updateNodeBounds(node, cylinder);\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const y = pos.y - (node.y ?? 0);\n\n if (\n ry != 0 &&\n (Math.abs(y) < (node.height ?? 0) / 2 ||\n (Math.abs(y) == (node.height ?? 0) / 2 &&\n Math.abs(pos.x - (node.x ?? 0)) > (node.width ?? 0) / 2 - rx))\n ) {\n let x = rx * rx * (1 - (y * y) / (ry * ry));\n if (x != 0) {\n x = Math.sqrt(x);\n }\n x = rx - x;\n if (point.x - (node.x ?? 0) > 0) {\n x = -x;\n }\n\n pos.x += x;\n }\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\n// export const createTrapezoidPathD = (\n// x: number,\n// y: number,\n// width: number,\n// height: number\n// ): string => {\n// return [\n// `M${x - (2 * height) / 6},${y}`,\n// `L${x + width + (2 * height) / 6},${y}`,\n// `L${x + width - height / 6},${y - height}`,\n// `L${x + height / 6},${y - height}`,\n// 'Z',\n// ].join(' ');\n// };\n\nexport async function trapezoid(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\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\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function trapezoidalPentagon(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 60,\n 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\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createPathFromPoints } from './util.js';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function triangle(parent: D3Selection, node: 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 = evaluate(getConfig().flowchart?.htmlLabels);\n\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n\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\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.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\n const polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-h / 2}, ${h / 2})`);\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\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\n node.intersect = function (point) {\n log.info('Triangle intersect', node, points, point);\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n generateFullSineWavePoints,\n createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function waveEdgedRectangle(\n parent: D3Selection,\n node: Node\n) {\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\n // To maintain minimum width\n const minWidth = 70;\n const widthDif = minWidth - w;\n const extraW = widthDif > 0 ? widthDif / 2 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n\n const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, ':first-child');\n\n waveEdgeRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function waveRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const minWidth = 100; // Minimum width\n const minHeight = 50; // Minimum height\n\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\n const aspectRatio = baseWidth / baseHeight;\n\n let w = baseWidth;\n let h = baseHeight;\n\n if (w > h * aspectRatio) {\n h = w / aspectRatio;\n } else {\n w = h * aspectRatio;\n }\n\n w = Math.max(w, minWidth);\n h = Math.max(h, minHeight);\n\n const waveAmplitude = Math.min(h * 0.2, h / 4);\n const finalH = h + waveAmplitude * 2;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n const waveRectPath = createPathFromPoints(points);\n const waveRectNode = rc.path(waveRectPath, options);\n\n const waveRect = shapeSvg.insert(() => waveRectNode, ':first-child');\n\n waveRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveRect.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, waveRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function windowPane(parent: D3Selection, node: 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\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\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\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\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const no = rc.path(path, options);\n\n const windowPane = shapeSvg.insert(() => no, ':first-child');\n windowPane.attr('transform', `translate(${rectOffset / 2}, ${rectOffset / 2})`);\n\n windowPane.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n windowPane.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n windowPane.selectAll('path').attr('style', nodeStyles);\n }\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\n updateNodeBounds(node, windowPane);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, outerPathPoints, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { select } from 'd3';\nimport { getConfig } from '../../config.js';\nimport { getNodeClasses } from '../../rendering-util/rendering-elements/shapes/util.js';\nimport { calculateTextWidth, decodeEntities } from '../../utils.js';\nimport type { ClassMember, ClassNode } from './classTypes.js';\nimport { sanitizeText } from '../../diagram-api/diagramAPI.js';\nimport { createText } from '../../rendering-util/createText.js';\nimport { evaluate, hasKatex } from '../common/common.js';\nimport type { Node } from '../../rendering-util/types.js';\nimport type { MermaidConfig } from '../../config.type.js';\nimport type { D3Selection } from '../../types.js';\n\n// Creates the shapeSvg and inserts text\nexport async function textHelper(\n parent: D3Selection,\n node: any,\n config: MermaidConfig,\n useHtmlLabels: boolean,\n GAP = config.class!.padding ?? 12\n) {\n const TEXT_PADDING = !useHtmlLabels ? 3 : 0;\n const shapeSvg = parent\n // @ts-ignore: Ignore error for using .insert on SVGAElement\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId || node.id);\n\n let annotationGroup = null;\n let labelGroup = null;\n let membersGroup = null;\n let methodsGroup = null;\n\n let annotationGroupHeight = 0;\n let labelGroupHeight = 0;\n let membersGroupHeight = 0;\n\n annotationGroup = shapeSvg.insert('g').attr('class', 'annotation-group text');\n if (node.annotations.length > 0) {\n const annotation = node.annotations[0];\n await addText(annotationGroup, { text: `\u00AB${annotation}\u00BB` } as unknown as ClassMember, 0);\n\n const annotationGroupBBox = annotationGroup.node()!.getBBox();\n annotationGroupHeight = annotationGroupBBox.height;\n }\n\n labelGroup = shapeSvg.insert('g').attr('class', 'label-group text');\n await addText(labelGroup, node, 0, ['font-weight: bolder']);\n const labelGroupBBox = labelGroup.node()!.getBBox();\n labelGroupHeight = labelGroupBBox.height;\n\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 addText(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\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 addText(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);\n methodsYOffset += height + TEXT_PADDING;\n }\n\n let bbox = shapeSvg.node()!.getBBox();\n\n // Center annotation\n if (annotationGroup !== null) {\n const annotationGroupBBox = annotationGroup.node()!.getBBox();\n annotationGroup.attr('transform', `translate(${-annotationGroupBBox.width / 2})`);\n }\n\n // Adjust label\n labelGroup.attr('transform', `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);\n\n bbox = shapeSvg.node()!.getBBox();\n\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\n bbox = shapeSvg.node()!.getBBox();\n\n return { shapeSvg, bbox };\n}\n\n// Modified version of labelHelper() to help create and place text for classes\nasync function addText(\n parentGroup: D3Selection,\n node: Node | ClassNode | ClassMember,\n yOffset: number,\n styles: string[] = []\n) {\n const textEl = parentGroup.insert('g').attr('class', 'label').attr('style', styles.join('; '));\n const config = getConfig();\n let useHtmlLabels =\n 'useHtmlLabels' in node ? node.useHtmlLabels : (evaluate(config.htmlLabels) ?? true);\n\n let textContent = '';\n // Support regular node type (.label) and classNodes (.text)\n if ('text' in node) {\n textContent = node.text;\n } else {\n textContent = node.label!;\n }\n\n // createText() will cause unwanted behavior because of classDiagram syntax so workarounds are needed\n\n if (!useHtmlLabels && textContent.startsWith('\\\\')) {\n textContent = textContent.substring(1);\n }\n\n if (hasKatex(textContent)) {\n useHtmlLabels = true;\n }\n\n const text = await createText(\n textEl,\n sanitizeText(decodeEntities(textContent)),\n {\n width: calculateTextWidth(textContent, config) + 50, // 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\n if (!useHtmlLabels) {\n // Undo font-weight normal\n if (styles.includes('font-weight: bolder')) {\n select(text).selectAll('tspan').attr('font-weight', '');\n }\n\n numberOfLines = text.children.length;\n\n const textChild = text.children[0];\n if (text.textContent === '' || text.textContent.includes('>')) {\n textChild.textContent =\n textContent[0] +\n textContent.substring(1).replaceAll('>', '>').replaceAll('<', '<').trim();\n\n // Text was improperly removed due to spaces (preserve one space if present)\n const preserveSpace = textContent[1] === ' ';\n if (preserveSpace) {\n textChild.textContent = textChild.textContent[0] + ' ' + textChild.textContent.substring(1);\n }\n }\n\n // To support empty boxes\n if (textChild.textContent === 'undefined') {\n textChild.textContent = '';\n }\n\n // Get the bounding box after the text update\n bbox = text.getBBox();\n } else {\n const div = text.children[0];\n const dv = select(text);\n\n numberOfLines = div.innerHTML.split('
').length;\n // Katex math support\n if (div.innerHTML.includes('')) {\n numberOfLines += div.innerHTML.split('').length - 1;\n }\n\n // Support images\n const images = div.getElementsByTagName('img');\n if (images) {\n const noImgText = textContent.replace(/]*>/g, '').trim() === '';\n await Promise.all(\n [...images].map(\n (img) =>\n new Promise((res) => {\n function setupImage() {\n img.style.display = 'flex';\n img.style.flexDirection = 'column';\n\n if (noImgText) {\n // default size if no text\n const bodyFontSize =\n 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 setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener('error', setupImage);\n img.addEventListener('load', setupImage);\n })\n )\n );\n }\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center text and offset by yOffset\n textEl.attr('transform', 'translate(0,' + (-bbox.height / (2 * numberOfLines) + yOffset) + ')');\n return bbox.height;\n}\n", "import { updateNodeBounds } from './util.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport type { Node } from '../../types.js';\nimport type { ClassNode } from '../../../diagrams/class/classTypes.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport intersect from '../intersect/index.js';\nimport { textHelper } from '../../../diagrams/class/shapeUtil.js';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function classBox(parent: D3Selection, node: Node) {\n const config = getConfig();\n const PADDING = config.class!.padding ?? 12;\n const GAP = PADDING;\n const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true;\n // Treat node as classNode\n const classNode = node as unknown as ClassNode;\n classNode.annotations = classNode.annotations ?? [];\n classNode.members = classNode.members ?? [];\n classNode.methods = classNode.methods ?? [];\n\n const { shapeSvg, bbox } = await textHelper(parent, node, config, useHtmlLabels, GAP);\n\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n\n node.cssStyles = classNode.styles || '';\n\n const styles = classNode.styles?.join(';') || nodeStyles || '';\n\n if (!node.cssStyles) {\n node.cssStyles = styles.replaceAll('!important', '').split(';');\n }\n\n const renderExtraBox =\n classNode.members.length === 0 &&\n classNode.methods.length === 0 &&\n !config.class?.hideEmptyMembersBox;\n\n // Setup roughjs\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\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\n // Create and center rectangle\n const roughRect = rc.rectangle(\n x - PADDING,\n y -\n PADDING -\n (renderExtraBox\n ? PADDING\n : classNode.members.length === 0 && classNode.methods.length === 0\n ? -PADDING / 2\n : 0),\n w + 2 * PADDING,\n h +\n 2 * PADDING +\n (renderExtraBox\n ? PADDING * 2\n : classNode.members.length === 0 && classNode.methods.length === 0\n ? -PADDING\n : 0),\n options\n );\n\n const rect = shapeSvg.insert(() => roughRect, ':first-child');\n rect.attr('class', 'basic label-container');\n const rectBBox = rect.node()!.getBBox();\n\n // Rect is centered so now adjust labels.\n // TODO: Fix types\n shapeSvg.selectAll('.text').each((_: any, i: number, nodes: any) => {\n const text = select(nodes[i]);\n // Get the current transform attribute\n const transform = text.attr('transform');\n // Initialize variables for the translation values\n let translateY = 0;\n // Check if the transform attribute exists\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 // Add to the y value\n let newTranslateY =\n translateY +\n y +\n PADDING -\n (renderExtraBox\n ? PADDING\n : classNode.members.length === 0 && classNode.methods.length === 0\n ? -PADDING / 2\n : 0);\n if (!useHtmlLabels) {\n // Fix so non html labels are better centered.\n // BBox of text seems to be slightly different when calculated so we offset\n newTranslateY -= 4;\n }\n let newTranslateX = x;\n if (\n text.attr('class').includes('label-group') ||\n text.attr('class').includes('annotation-group')\n ) {\n newTranslateX = -text.node()?.getBBox().width / 2 || 0;\n shapeSvg.selectAll('text').each(function (_: any, i: number, nodes: any) {\n if (window.getComputedStyle(nodes[i]).textAnchor === 'middle') {\n newTranslateX = 0;\n }\n });\n }\n // Set the updated transform attribute\n text.attr('transform', `translate(${newTranslateX}, ${newTranslateY})`);\n });\n\n // Render divider lines.\n const annotationGroupHeight =\n (shapeSvg.select('.annotation-group').node() as SVGGraphicsElement).getBBox().height -\n (renderExtraBox ? PADDING / 2 : 0) || 0;\n const labelGroupHeight =\n (shapeSvg.select('.label-group').node() as SVGGraphicsElement).getBBox().height -\n (renderExtraBox ? PADDING / 2 : 0) || 0;\n const membersGroupHeight =\n (shapeSvg.select('.members-group').node() as SVGGraphicsElement).getBBox().height -\n (renderExtraBox ? PADDING / 2 : 0) || 0;\n // First line (under label)\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\n // Second line (under members)\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\n /// Apply styles ///\n if (classNode.look !== 'handDrawn') {\n shapeSvg.selectAll('path').attr('style', styles);\n }\n // Apply other styles like stroke-width and stroke-dasharray to border (not background of shape)\n rect.select(':nth-child(2)').attr('style', styles);\n // Divider lines\n shapeSvg.selectAll('.divider').select('path').attr('style', styles);\n // Text elements\n if (node.labelStyle) {\n shapeSvg.selectAll('span').attr('style', node.labelStyle);\n } else {\n shapeSvg.selectAll('span').attr('style', styles);\n }\n // SVG text uses fill not color\n if (!useHtmlLabels) {\n // We just want to apply color to the text\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 match = colorRegex.exec(labelStyles);\n if (match) {\n const colorStyle = match[0].replace('color', 'fill');\n shapeSvg.selectAll('tspan').attr('style', colorStyle);\n }\n }\n }\n\n updateNodeBounds(node, rect);\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, insertLabel, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node, KanbanNode, ShapeRenderOptions } from '../../types.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nconst colorFromPriority = (priority: NonNullable) => {\n switch (priority) {\n case 'Very High':\n return 'red';\n case 'High':\n return 'orange';\n case 'Medium':\n return null; // no stroke\n case 'Low':\n return 'blue';\n case 'Very Low':\n return 'lightblue';\n }\n};\nexport async function kanbanItem(\n parent: D3Selection,\n // Omit the 'shape' prop since otherwise, it causes a TypeScript circular dependency error\n kanbanNode: Omit | Omit,\n { config }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(kanbanNode);\n kanbanNode.labelStyle = labelStyles || '';\n\n const labelPaddingX = 10;\n const orgWidth = kanbanNode.width;\n kanbanNode.width = (kanbanNode.width ?? 200) - 10;\n\n const {\n shapeSvg,\n bbox,\n label: labelElTitle,\n } = await labelHelper(parent, kanbanNode, getNodeClasses(kanbanNode));\n const padding = kanbanNode.padding || 10;\n\n let ticketUrl = '';\n let link;\n\n if ('ticket' in kanbanNode && kanbanNode.ticket && config?.kanban?.ticketBaseUrl) {\n ticketUrl = config?.kanban?.ticketBaseUrl.replace('#TICKET#', kanbanNode.ticket);\n link = shapeSvg\n .insert('svg:a', ':first-child')\n .attr('class', 'kanban-ticket-link')\n .attr('xlink:href', ticketUrl)\n .attr('target', '_blank');\n }\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 =\n 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(' +\n (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) +\n ', ' +\n (-heightAdj + bbox.height / 2) +\n ')'\n );\n\n let rect;\n\n const { rx, ry } = kanbanNode;\n const { cssStyles } = kanbanNode;\n\n if (kanbanNode.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(kanbanNode, {});\n\n const roughNode =\n rx || ry\n ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options)\n : rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', cssStyles ? cssStyles : null);\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'basic label-container __APA__')\n .attr('style', nodeStyles)\n .attr('rx', rx ?? 5)\n .attr('ry', ry ?? 5)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n const priority = 'priority' in kanbanNode && kanbanNode.priority;\n if (priority) {\n const line = shapeSvg.append('line');\n const lineX = x + 2;\n\n const y1 = y + Math.floor((rx ?? 0) / 2);\n const y2 = y + totalHeight - Math.floor((rx ?? 0) / 2);\n line\n .attr('x1', lineX)\n .attr('y1', y1)\n .attr('x2', lineX)\n .attr('y2', y2)\n\n .attr('stroke-width', '4')\n .attr('stroke', colorFromPriority(priority));\n }\n }\n\n updateNodeBounds(kanbanNode, rect);\n kanbanNode.height = totalHeight;\n\n kanbanNode.intersect = function (point) {\n return intersect.rect(kanbanNode, point);\n };\n\n return shapeSvg;\n}\n", "import type { Entries } from 'type-fest';\nimport type { D3Selection, MaybePromise } from '../../types.js';\nimport type { Node, ShapeRenderOptions } from '../types.js';\nimport { anchor } from './shapes/anchor.js';\nimport { bowTieRect } from './shapes/bowTieRect.js';\nimport { card } from './shapes/card.js';\nimport { choice } from './shapes/choice.js';\nimport { circle } from './shapes/circle.js';\nimport { crossedCircle } from './shapes/crossedCircle.js';\nimport { curlyBraceLeft } from './shapes/curlyBraceLeft.js';\nimport { curlyBraceRight } from './shapes/curlyBraceRight.js';\nimport { curlyBraces } from './shapes/curlyBraces.js';\nimport { curvedTrapezoid } from './shapes/curvedTrapezoid.js';\nimport { cylinder } from './shapes/cylinder.js';\nimport { dividedRectangle } from './shapes/dividedRect.js';\nimport { doublecircle } from './shapes/doubleCircle.js';\nimport { filledCircle } from './shapes/filledCircle.js';\nimport { flippedTriangle } from './shapes/flippedTriangle.js';\nimport { forkJoin } from './shapes/forkJoin.js';\nimport { halfRoundedRectangle } from './shapes/halfRoundedRectangle.js';\nimport { hexagon } from './shapes/hexagon.js';\nimport { hourglass } from './shapes/hourglass.js';\nimport { icon } from './shapes/icon.js';\nimport { iconCircle } from './shapes/iconCircle.js';\nimport { iconRounded } from './shapes/iconRounded.js';\nimport { iconSquare } from './shapes/iconSquare.js';\nimport { imageSquare } from './shapes/imageSquare.js';\nimport { inv_trapezoid } from './shapes/invertedTrapezoid.js';\nimport { labelRect } from './shapes/labelRect.js';\nimport { lean_left } from './shapes/leanLeft.js';\nimport { lean_right } from './shapes/leanRight.js';\nimport { lightningBolt } from './shapes/lightningBolt.js';\nimport { linedCylinder } from './shapes/linedCylinder.js';\nimport { linedWaveEdgedRect } from './shapes/linedWaveEdgedRect.js';\nimport { multiRect } from './shapes/multiRect.js';\nimport { multiWaveEdgedRectangle } from './shapes/multiWaveEdgedRectangle.js';\nimport { note } from './shapes/note.js';\nimport { question } from './shapes/question.js';\nimport { rect_left_inv_arrow } from './shapes/rectLeftInvArrow.js';\nimport { rectWithTitle } from './shapes/rectWithTitle.js';\nimport { roundedRect } from './shapes/roundedRect.js';\nimport { shadedProcess } from './shapes/shadedProcess.js';\nimport { slopedRect } from './shapes/slopedRect.js';\nimport { squareRect } from './shapes/squareRect.js';\nimport { stadium } from './shapes/stadium.js';\nimport { state } from './shapes/state.js';\nimport { stateEnd } from './shapes/stateEnd.js';\nimport { stateStart } from './shapes/stateStart.js';\nimport { subroutine } from './shapes/subroutine.js';\nimport { taggedRect } from './shapes/taggedRect.js';\nimport { taggedWaveEdgedRectangle } from './shapes/taggedWaveEdgedRectangle.js';\nimport { text } from './shapes/text.js';\nimport { tiltedCylinder } from './shapes/tiltedCylinder.js';\nimport { trapezoid } from './shapes/trapezoid.js';\nimport { trapezoidalPentagon } from './shapes/trapezoidalPentagon.js';\nimport { triangle } from './shapes/triangle.js';\nimport { waveEdgedRectangle } from './shapes/waveEdgedRectangle.js';\nimport { waveRectangle } from './shapes/waveRectangle.js';\nimport { windowPane } from './shapes/windowPane.js';\nimport { classBox } from './shapes/classBox.js';\nimport { kanbanItem } from './shapes/kanbanItem.js';\n\ntype ShapeHandler = (\n parent: D3Selection,\n node: Node,\n options: ShapeRenderOptions\n) => MaybePromise>;\n\nexport interface ShapeDefinition {\n semanticName: string;\n name: string;\n shortName: string;\n description: string;\n /**\n * Aliases can include descriptive names, other short names, etc.\n */\n aliases?: string[];\n /**\n * These are names used by mermaid before the introduction of new shapes. These will not be in standard formats, and shouldn't be used by the users\n */\n internalAliases?: string[];\n handler: ShapeHandler;\n}\n\nexport const 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: squareRect,\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: '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] as const satisfies ShapeDefinition[];\n\nconst generateShapeMap = () => {\n // These are the shapes that didn't have documentation present\n const undocumentedShapes = {\n // States\n state,\n choice,\n note,\n\n // Rectangles\n rectWithTitle,\n labelRect,\n\n // Icons\n iconSquare,\n iconCircle,\n icon,\n iconRounded,\n imageSquare,\n anchor,\n\n // Kanban diagram\n kanbanItem,\n\n // class diagram\n classBox,\n } as const;\n\n const entries = [\n ...(Object.entries(undocumentedShapes) as Entries),\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] as const);\n }),\n ];\n return Object.fromEntries(entries) as Record<\n (typeof entries)[number][0],\n (typeof entries)[number][1]\n > satisfies Record;\n};\n\nexport const shapes = generateShapeMap();\n\nexport function isValidShape(shape: string): shape is ShapeID {\n return shape in shapes;\n}\n\nexport type ShapeID = keyof typeof shapes;\n", "import { log } from '../../logger.js';\nimport { shapes } from './shapes.js';\nimport type { Node, NonClusterNode, ShapeRenderOptions } from '../types.js';\nimport type { SVGGroup } from '../../mermaid.js';\nimport type { D3Selection } from '../../types.js';\nimport type { graphlib } from 'dagre-d3-es';\n\ntype ShapeHandler = (typeof shapes)[keyof typeof shapes];\ntype NodeElement = D3Selection | Awaited>;\n\nconst nodeElems = new Map();\n\nexport async function insertNode(\n elem: SVGGroup,\n node: NonClusterNode,\n renderOptions: ShapeRenderOptions\n) {\n let newEl: NodeElement | undefined;\n let el;\n\n //special check for rect shape (with or without rounded corners)\n if (node.shape === 'rect') {\n if (node.rx && node.ry) {\n node.shape = 'roundedRect';\n } else {\n node.shape = 'squareRect';\n }\n }\n\n const shapeHandler = node.shape ? shapes[node.shape] : undefined;\n\n if (!shapeHandler) {\n throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n }\n\n if (node.link) {\n // Add link when appropriate\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\n .insert('svg:a')\n .attr('xlink:href', node.link)\n .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\n nodeElems.set(node.id, newEl);\n\n if (node.haveCallback) {\n newEl.attr('class', newEl.attr('class') + ' clickable');\n }\n return newEl;\n}\n\nexport const setNodeElem = (elem: NodeElement, node: Pick) => {\n nodeElems.set(node.id, elem);\n};\n\nexport const clear = () => {\n nodeElems.clear();\n};\n\nexport const positionNode = (node: ReturnType) => {\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(' +\n (node.x + diff - node.width / 2) +\n ', ' +\n (node.y - node.height / 2 - padding) +\n ')'\n );\n } else {\n el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n }\n return diff;\n};\n"],
"mappings": "+VASO,IAAMA,EAAcC,EAAA,MACzBC,EACAC,EACAC,IACG,CACH,IAAIC,EACEC,EAAgBH,EAAK,eAAiBI,EAASC,EAAU,GAAG,UAAU,EACvEJ,EAGHC,EAAaD,EAFbC,EAAa,eAMf,IAAMI,EAAWP,EACd,OAAO,GAAG,EACV,KAAK,QAASG,CAAU,EACxB,KAAK,KAAMF,EAAK,OAASA,EAAK,EAAE,EAG7BO,EAAUD,EACb,OAAO,GAAG,EACV,KAAK,QAAS,OAAO,EACrB,KAAK,QAASE,EAAoBR,EAAK,UAAU,CAAC,EAGjDS,EACAT,EAAK,QAAU,OACjBS,EAAQ,GAERA,EAAQ,OAAOT,EAAK,OAAU,SAAWA,EAAK,MAAQA,EAAK,MAAM,CAAC,EAGpE,IAAMU,EAAO,MAAMC,GAAWJ,EAASK,GAAaC,GAAeJ,CAAK,EAAGJ,EAAU,CAAC,EAAG,CACvF,cAAAF,EACA,MAAOH,EAAK,OAASK,EAAU,EAAE,WAAW,cAE5C,WAAY,sBACZ,MAAOL,EAAK,WACZ,iBAAkB,CAAC,CAACA,EAAK,MAAQ,CAAC,CAACA,EAAK,GAC1C,CAAC,EAEGc,EAAOJ,EAAK,QAAQ,EAClBK,GAAef,GAAM,SAAW,GAAK,EAE3C,GAAIG,EAAe,CACjB,IAAMa,EAAMN,EAAK,SAAS,CAAC,EACrBO,EAAKC,EAAOR,CAAI,EAGhBS,EAASH,EAAI,qBAAqB,KAAK,EAC7C,GAAIG,EAAQ,CACV,IAAMC,EAAYX,EAAM,QAAQ,cAAe,EAAE,EAAE,KAAK,IAAM,GAE9D,MAAM,QAAQ,IACZ,CAAC,GAAGU,CAAM,EAAE,IACTE,GACC,IAAI,QAASC,GAAQ,CAInB,SAASC,GAAa,CAIpB,GAHAF,EAAI,MAAM,QAAU,OACpBA,EAAI,MAAM,cAAgB,SAEtBD,EAAW,CAEb,IAAMI,EAAenB,EAAU,EAAE,SAC7BA,EAAU,EAAE,SACZ,OAAO,iBAAiB,SAAS,IAAI,EAAE,SACrCoB,EAAkB,EAClB,CAACC,EAAqBC,GAAc,QAAQ,EAAIC,GAAcJ,CAAY,EAC1EK,EAAQH,EAAqBD,EAAkB,KACrDJ,EAAI,MAAM,SAAWQ,EACrBR,EAAI,MAAM,SAAWQ,CACvB,MACER,EAAI,MAAM,MAAQ,OAEpBC,EAAID,CAAG,CACT,CAlBSvB,EAAAyB,EAAA,cAmBT,WAAW,IAAM,CACXF,EAAI,UACNE,EAAW,CAEf,CAAC,EACDF,EAAI,iBAAiB,QAASE,CAAU,EACxCF,EAAI,iBAAiB,OAAQE,CAAU,CACzC,CAAC,CACL,CACF,CACF,CAEAT,EAAOE,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASH,EAAK,KAAK,EAC3BG,EAAG,KAAK,SAAUH,EAAK,MAAM,CAC/B,CAGA,OAAIX,EACFI,EAAQ,KAAK,YAAa,aAAe,CAACO,EAAK,MAAQ,EAAI,KAAO,CAACA,EAAK,OAAS,EAAI,GAAG,EAExFP,EAAQ,KAAK,YAAa,gBAA0B,CAACO,EAAK,OAAS,EAAI,GAAG,EAExEd,EAAK,aACPO,EAAQ,KAAK,YAAa,aAAe,CAACO,EAAK,MAAQ,EAAI,KAAO,CAACA,EAAK,OAAS,EAAI,GAAG,EAE1FP,EAAQ,OAAO,OAAQ,cAAc,EAC9B,CAAE,SAAAD,EAAU,KAAAQ,EAAM,YAAAC,EAAa,MAAOR,CAAQ,CACvD,EA5G2B,eA6GduB,GAAchC,EAAA,MACzBC,EACAU,EACAsB,IAUG,CACH,IAAM5B,EAAgB4B,EAAQ,eAAiB3B,EAASC,EAAU,GAAG,WAAW,UAAU,EAGpFE,EAAUR,EACb,OAAO,GAAG,EACV,KAAK,QAAS,OAAO,EACrB,KAAK,QAASgC,EAAQ,YAAc,EAAE,EAEnCrB,EAAO,MAAMC,GAAWJ,EAASK,GAAaC,GAAeJ,CAAK,EAAGJ,EAAU,CAAC,EAAG,CACvF,cAAAF,EACA,MAAO4B,EAAQ,OAAS1B,EAAU,GAAG,WAAW,cAChD,MAAO0B,EAAQ,WACf,iBAAkB,CAAC,CAACA,EAAQ,MAAQ,CAAC,CAACA,EAAQ,GAChD,CAAC,EAEGjB,EAAOJ,EAAK,QAAQ,EAClBK,EAAcgB,EAAQ,QAAU,EAEtC,GAAI3B,EAASC,EAAU,GAAG,WAAW,UAAU,EAAG,CAChD,IAAMW,EAAMN,EAAK,SAAS,CAAC,EACrBO,EAAKC,EAAOR,CAAI,EAEtBI,EAAOE,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASH,EAAK,KAAK,EAC3BG,EAAG,KAAK,SAAUH,EAAK,MAAM,CAC/B,CAGA,OAAIX,EACFI,EAAQ,KAAK,YAAa,aAAe,CAACO,EAAK,MAAQ,EAAI,KAAO,CAACA,EAAK,OAAS,EAAI,GAAG,EAExFP,EAAQ,KAAK,YAAa,gBAA0B,CAACO,EAAK,OAAS,EAAI,GAAG,EAExEiB,EAAQ,aACVxB,EAAQ,KAAK,YAAa,aAAe,CAACO,EAAK,MAAQ,EAAI,KAAO,CAACA,EAAK,OAAS,EAAI,GAAG,EAE1FP,EAAQ,OAAO,OAAQ,cAAc,EAC9B,CAAE,SAAUR,EAAQ,KAAAe,EAAM,YAAAC,EAAa,MAAOR,CAAQ,CAC/D,EApD2B,eAqDdyB,EAAmBlC,EAAA,CAC9BE,EAEAiC,IACG,CACH,IAAMnB,EAAOmB,EAAQ,KAAK,EAAG,QAAQ,EACrCjC,EAAK,MAAQc,EAAK,MAClBd,EAAK,OAASc,EAAK,MACrB,EARgC,oBAoCzB,IAAMoB,EAAiBC,EAAA,CAACC,EAAYC,KACxCD,EAAK,OAAS,YAAc,aAAe,QAAU,IAAMA,EAAK,WAAa,KAAOC,GAAS,IADlE,kBAGvB,SAASC,EAAqBC,EAAiB,CACpD,IAAMC,EAAeD,EAAO,IAAI,CAACE,EAAGC,IAAM,GAAGA,IAAM,EAAI,IAAM,GAAG,GAAGD,EAAE,CAAC,IAAIA,EAAE,CAAC,EAAE,EAC/E,OAAAD,EAAa,KAAK,GAAG,EACdA,EAAa,KAAK,GAAG,CAC9B,CAJgBL,EAAAG,EAAA,wBAMT,SAASK,GACdC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,CACA,IAAMV,EAAS,CAAC,EAEVW,EAASJ,EAAKF,EACdO,EAASJ,EAAKF,EACdO,EAAcF,EAASD,EAGvBI,EAAa,EAAI,KAAK,GAAMD,EAC5BE,EAAOT,EAAKM,EAAS,EAE3B,QAAST,EAAI,EAAGA,GAAK,GAAOA,IAAK,CAC/B,IAAMa,EAAIb,EAAI,GACRc,EAAIZ,EAAKW,EAAIL,EACbO,EAAIH,EAAON,EAAY,KAAK,IAAIK,GAAaG,EAAIZ,EAAG,EAE1DL,EAAO,KAAK,CAAE,EAAAiB,EAAG,EAAAC,CAAE,CAAC,CACtB,CAEA,OAAOlB,CACT,CA3BgBJ,EAAAQ,GAAA,8BAqCT,SAASe,GACdC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,CACA,IAAMzB,EAAS,CAAC,EAGV0B,EAAiBF,EAAa,KAAK,GAAM,IAOzCG,GANeF,EAAW,KAAK,GAAM,IAGVC,IAGDH,EAAY,GAE5C,QAASpB,EAAI,EAAGA,EAAIoB,EAAWpB,IAAK,CAClC,IAAMyB,EAAQF,EAAgBvB,EAAIwB,EAC5BV,EAAIG,EAAUE,EAAS,KAAK,IAAIM,CAAK,EACrCV,EAAIG,EAAUC,EAAS,KAAK,IAAIM,CAAK,EAC3C5B,EAAO,KAAK,CAAE,EAAG,CAACiB,EAAG,EAAG,CAACC,CAAE,CAAC,CAC9B,CAEA,OAAOlB,CACT,CA5BgBJ,EAAAuB,GAAA,wBC7PhB,SAASU,GAAEA,EAAEC,EAAEC,EAAE,CAAC,GAAGF,GAAGA,EAAE,OAAO,CAAC,GAAK,CAACG,EAAEC,CAAC,EAAEH,EAAE,EAAE,KAAK,GAAG,IAAIC,EAAEG,EAAE,KAAK,IAAI,CAAC,EAAEC,EAAE,KAAK,IAAI,CAAC,EAAE,QAAUL,KAAKD,EAAE,CAAC,GAAK,CAACA,EAAEE,CAAC,EAAED,EAAEA,EAAE,CAAC,GAAGD,EAAEG,GAAGE,GAAGH,EAAEE,GAAGE,EAAEH,EAAEF,EAAE,CAAC,GAAGD,EAAEG,GAAGG,GAAGJ,EAAEE,GAAGC,EAAED,CAAC,CAAC,CAAC,CAAhKG,EAAAP,GAAA,KAAiK,SAASC,GAAED,EAAEC,EAAE,CAAC,OAAOD,EAAE,CAAC,IAAIC,EAAE,CAAC,GAAGD,EAAE,CAAC,IAAIC,EAAE,CAAC,CAAC,CAAtCM,EAAAN,GAAA,KAAuC,SAASC,GAAEA,EAAEC,EAAE,EAAEK,EAAE,EAAE,CAAC,IAAMH,EAAE,EAAEC,EAAE,KAAK,IAAIH,EAAE,EAAE,EAAEM,EAAEP,EAAE,CAAC,GAAGA,EAAE,CAAC,EAAE,CAAC,GAAa,OAAOA,EAAE,CAAC,EAAE,CAAC,GAAvB,SAAyB,CAACA,CAAC,EAAEA,EAAEQ,EAAE,CAAC,EAAE,CAAC,EAAE,GAAGL,EAAE,QAAUJ,KAAKQ,EAAET,GAAEC,EAAES,EAAEL,CAAC,EAAE,IAAMM,EAAE,SAASX,EAAEE,EAAEC,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAE,QAAUF,KAAKF,EAAE,CAAC,IAAMA,EAAE,CAAC,GAAGE,CAAC,EAAED,GAAED,EAAE,CAAC,EAAEA,EAAEA,EAAE,OAAO,CAAC,CAAC,GAAGA,EAAE,KAAK,CAACA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAEA,EAAE,OAAO,GAAGI,EAAE,KAAKJ,CAAC,CAAC,CAAC,IAAMQ,EAAE,CAAC,EAAEN,EAAE,KAAK,IAAIA,EAAE,EAAE,EAAE,IAAMG,EAAE,CAAC,EAAE,QAAUL,KAAKI,EAAE,QAAQH,EAAE,EAAEA,EAAED,EAAE,OAAO,EAAEC,IAAI,CAAC,IAAMC,EAAEF,EAAEC,CAAC,EAAEE,EAAEH,EAAEC,EAAE,CAAC,EAAE,GAAGC,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAE,CAAC,IAAMH,EAAE,KAAK,IAAIE,EAAE,CAAC,EAAEC,EAAE,CAAC,CAAC,EAAEE,EAAE,KAAK,CAAC,KAAKL,EAAE,KAAK,KAAK,IAAIE,EAAE,CAAC,EAAEC,EAAE,CAAC,CAAC,EAAE,EAAEH,IAAIE,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,QAAQA,EAAE,CAAC,EAAED,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAED,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAGG,EAAE,KAAM,CAACL,EAAEC,IAAID,EAAE,KAAKC,EAAE,KAAK,GAAGD,EAAE,KAAKC,EAAE,KAAK,EAAED,EAAE,EAAEC,EAAE,EAAE,GAAGD,EAAE,EAAEC,EAAE,EAAE,EAAED,EAAE,OAAOC,EAAE,KAAK,GAAGD,EAAE,KAAKC,EAAE,MAAM,KAAK,IAAID,EAAE,KAAKC,EAAE,IAAI,CAAE,EAAE,CAACI,EAAE,OAAO,OAAOG,EAAE,IAAIF,EAAE,CAAC,EAAEG,EAAEJ,EAAE,CAAC,EAAE,KAAKK,EAAE,EAAE,KAAKJ,EAAE,QAAQD,EAAE,QAAQ,CAAC,GAAGA,EAAE,OAAO,CAAC,IAAIL,EAAE,GAAG,QAAQC,EAAE,EAAEA,EAAEI,EAAE,QAAQ,EAAEA,EAAEJ,CAAC,EAAE,KAAKQ,GAAGR,IAAID,EAAEC,EAAEI,EAAE,OAAO,EAAEL,EAAE,CAAC,EAAE,QAASA,GAAG,CAACM,EAAE,KAAK,CAAC,EAAEG,EAAE,KAAKT,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,GAAGM,EAAEA,EAAE,OAAQN,GAAG,EAAEA,EAAE,KAAK,MAAMS,EAAG,EAAEH,EAAE,KAAM,CAACN,EAAEC,IAAID,EAAE,KAAK,IAAIC,EAAE,KAAK,EAAE,GAAGD,EAAE,KAAK,EAAEC,EAAE,KAAK,GAAG,KAAK,IAAID,EAAE,KAAK,EAAEC,EAAE,KAAK,CAAC,CAAE,GAAOE,IAAJ,GAAOO,EAAER,GAAG,IAAII,EAAE,OAAO,EAAE,QAAQN,EAAE,EAAEA,EAAEM,EAAE,OAAON,GAAG,EAAE,CAAC,IAAMC,EAAED,EAAE,EAAE,GAAGC,GAAGK,EAAE,OAAO,MAAM,IAAMJ,EAAEI,EAAEN,CAAC,EAAE,KAAKG,EAAEG,EAAEL,CAAC,EAAE,KAAKO,EAAE,KAAK,CAAC,CAAC,KAAK,MAAMN,EAAE,CAAC,EAAEO,CAAC,EAAE,CAAC,KAAK,MAAMN,EAAE,CAAC,EAAEM,CAAC,CAAC,CAAC,CAAC,CAACA,GAAGN,EAAEG,EAAE,QAASN,GAAG,CAACA,EAAE,KAAK,EAAEA,EAAE,KAAK,EAAEG,EAAEH,EAAE,KAAK,MAAM,CAAE,EAAEU,GAAG,CAAC,OAAOF,CAAC,EAAEC,EAAEH,EAAEE,CAAC,EAAE,GAAGH,EAAE,CAAC,QAAUJ,KAAKQ,EAAET,GAAEC,EAAES,EAAE,CAACL,CAAC,GAAG,SAASJ,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAEH,EAAE,QAASD,GAAGI,EAAE,KAAK,GAAGJ,CAAC,CAAE,EAAEA,GAAEI,EAAEF,EAAEC,CAAC,CAAC,GAAEQ,EAAED,EAAE,CAACL,CAAC,CAAC,CAAC,OAAOM,CAAC,CAA9yCJ,EAAAL,GAAA,KAA+yC,SAASC,GAAEH,EAAEC,EAAE,CAAC,IAAIE,EAAE,IAAMC,EAAEH,EAAE,aAAa,GAAOO,EAAEP,EAAE,WAAWO,EAAE,IAAIA,EAAE,EAAEP,EAAE,aAAaO,EAAE,KAAK,MAAM,KAAK,IAAIA,EAAE,EAAE,CAAC,EAAE,IAAIH,EAAE,EAAE,OAAOJ,EAAE,WAAW,MAAaE,EAAEF,EAAE,cAAZ,MAAkCE,IAAT,OAAW,OAAOA,EAAE,KAAK,IAAI,KAAK,OAAO,GAAG,KAAKE,EAAEG,GAAGN,GAAEF,EAAEQ,EAAEJ,EAAEC,GAAG,CAAC,CAAC,CAA7OE,EAAAJ,GAAA,KAA8O,IAAMC,GAAN,KAAO,CAAhxD,MAAgxD,CAAAG,EAAA,UAAC,YAAY,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,aAAa,EAAEN,EAAE,CAAC,OAAO,KAAK,cAAc,EAAEA,CAAC,CAAC,CAAC,cAAc,EAAEA,EAAE,CAAC,IAAMC,EAAEC,GAAE,EAAEF,CAAC,EAAE,MAAM,CAAC,KAAK,aAAa,IAAI,KAAK,YAAYC,EAAED,CAAC,CAAC,CAAC,CAAC,YAAY,EAAEA,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAE,QAAUC,KAAK,EAAED,EAAE,KAAK,GAAG,KAAK,OAAO,cAAcC,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEF,CAAC,CAAC,EAAE,OAAOC,CAAC,CAAC,EAAC,SAASM,GAAER,EAAE,CAAC,IAAMC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAE,OAAO,KAAK,KAAK,KAAK,IAAIC,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAID,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAtFK,EAAAC,GAAA,KAAuF,IAAMH,GAAN,cAAgBD,EAAC,CAArqE,MAAqqE,CAAAG,EAAA,UAAC,aAAa,EAAEN,EAAE,CAAC,IAAIC,EAAED,EAAE,WAAWC,EAAE,IAAIA,EAAE,EAAED,EAAE,aAAaC,EAAE,KAAK,IAAIA,EAAE,EAAE,EAAE,IAAME,EAAED,GAAE,EAAE,OAAO,OAAO,CAAC,EAAEF,EAAE,CAAC,WAAWC,CAAC,CAAC,CAAC,EAAEG,EAAE,KAAK,GAAG,IAAIJ,EAAE,aAAaK,EAAE,CAAC,EAAEG,EAAE,GAAGP,EAAE,KAAK,IAAIG,CAAC,EAAEK,EAAE,GAAGR,EAAE,KAAK,IAAIG,CAAC,EAAE,OAAS,CAACL,EAAEC,CAAC,IAAIG,EAAEI,GAAE,CAACR,EAAEC,CAAC,CAAC,GAAGK,EAAE,KAAK,CAAC,CAACN,EAAE,CAAC,EAAES,EAAET,EAAE,CAAC,EAAEU,CAAC,EAAE,CAAC,GAAGT,CAAC,CAAC,EAAE,CAAC,CAACD,EAAE,CAAC,EAAES,EAAET,EAAE,CAAC,EAAEU,CAAC,EAAE,CAAC,GAAGT,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,aAAa,IAAI,KAAK,YAAYK,EAAEL,CAAC,CAAC,CAAC,CAAC,EAAOK,GAAN,cAAgBF,EAAC,CAA1gF,MAA0gF,CAAAG,EAAA,UAAC,aAAa,EAAEN,EAAE,CAAC,IAAMC,EAAE,KAAK,cAAc,EAAED,CAAC,EAAEE,EAAE,OAAO,OAAO,CAAC,EAAEF,EAAE,CAAC,aAAaA,EAAE,aAAa,EAAE,CAAC,EAAEG,EAAE,KAAK,cAAc,EAAED,CAAC,EAAE,OAAOD,EAAE,IAAIA,EAAE,IAAI,OAAOE,EAAE,GAAG,EAAEF,CAAC,CAAC,EAAOO,GAAN,KAAO,CAAzrF,MAAyrF,CAAAF,EAAA,UAAC,YAAY,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,aAAa,EAAEN,EAAE,CAAC,IAAMC,EAAEC,GAAE,EAAEF,EAAE,OAAO,OAAO,CAAC,EAAEA,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,YAAYC,EAAED,CAAC,CAAC,CAAC,YAAY,EAAEA,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAMC,EAAEF,EAAE,WAAWE,EAAE,IAAIA,EAAE,EAAEF,EAAE,aAAaE,EAAE,KAAK,IAAIA,EAAE,EAAE,EAAE,IAAIC,EAAEH,EAAE,WAAWG,EAAE,IAAIA,EAAEH,EAAE,YAAY,GAAG,IAAMI,EAAEF,EAAE,EAAE,QAAUG,KAAK,EAAE,CAAC,IAAMN,EAAEQ,GAAEF,CAAC,EAAE,EAAEN,EAAEG,EAAEO,EAAE,KAAK,KAAK,CAAC,EAAE,EAAEC,EAAEX,EAAEU,EAAEP,EAAES,GAAGN,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,GAAG,EAAEH,EAAE,EAAEU,EAAE,KAAK,IAAIP,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQN,EAAE,EAAEA,EAAEU,EAAEV,IAAI,CAAC,IAAMQ,EAAEK,EAAEF,EAAEX,EAAEG,EAAEG,EAAEM,EAAEP,EAAE,EAAE,KAAK,OAAO,EAAEA,EAAEI,EAAED,EAAEH,EAAE,EAAE,KAAK,OAAO,EAAEA,EAAEK,EAAE,KAAK,OAAO,QAAQJ,EAAEG,EAAEL,EAAEA,EAAEH,CAAC,EAAEC,EAAE,KAAK,GAAGQ,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,aAAa,IAAIR,CAAC,CAAC,CAAC,EAAOQ,GAAN,KAAO,CAA/uG,MAA+uG,CAAAH,EAAA,UAAC,YAAY,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,aAAa,EAAEN,EAAE,CAAC,IAAMC,EAAEC,GAAE,EAAEF,CAAC,EAAE,MAAM,CAAC,KAAK,aAAa,IAAI,KAAK,WAAWC,EAAED,CAAC,CAAC,CAAC,CAAC,WAAW,EAAEA,EAAE,CAAC,IAAMC,EAAED,EAAE,WAAW,EAAEA,EAAE,WAAW,EAAE,EAAEA,EAAE,YAAYA,EAAE,WAAWA,EAAE,WAAWE,EAAEF,EAAE,QAAQ,EAAEA,EAAE,WAAW,EAAE,EAAEA,EAAE,YAAYA,EAAE,WAAWA,EAAE,QAAQG,EAAE,CAAC,EAAE,OAAO,EAAE,QAASJ,GAAG,CAAC,IAAMK,EAAEG,GAAER,CAAC,EAAEM,EAAE,KAAK,MAAMD,GAAGH,EAAEC,EAAE,EAAE,GAAGE,EAAEF,EAAEG,GAAGJ,EAAEC,IAAI,EAAMO,EAAEV,EAAE,CAAC,EAAEW,EAAEX,EAAE,CAAC,EAAEU,EAAE,CAAC,EAAEC,EAAE,CAAC,IAAID,EAAEV,EAAE,CAAC,EAAEW,EAAEX,EAAE,CAAC,GAAG,IAAMY,EAAE,KAAK,MAAMD,EAAE,CAAC,EAAED,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAED,EAAE,CAAC,EAAE,EAAE,QAAQV,EAAE,EAAEA,EAAEM,EAAEN,IAAI,CAAC,IAAMQ,EAAER,GAAGE,EAAEC,GAAGE,EAAEG,EAAEN,EAAEI,EAAE,CAACI,EAAE,CAAC,EAAEF,EAAE,KAAK,IAAII,CAAC,EAAE,EAAE,KAAK,IAAIA,CAAC,EAAEF,EAAE,CAAC,EAAEF,EAAE,KAAK,IAAII,CAAC,EAAE,EAAE,KAAK,IAAIA,CAAC,CAAC,EAAED,EAAE,CAACD,EAAE,CAAC,EAAEL,EAAE,KAAK,IAAIO,CAAC,EAAE,EAAE,KAAK,IAAIA,CAAC,EAAEF,EAAE,CAAC,EAAEL,EAAE,KAAK,IAAIO,CAAC,EAAE,EAAE,KAAK,IAAIA,CAAC,CAAC,EAAER,EAAE,KAAK,GAAG,KAAK,OAAO,cAAcE,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEK,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEV,CAAC,CAAC,CAAC,CAAC,CAAE,EAAEG,CAAC,CAAC,EAAOO,GAAN,KAAO,CAA96H,MAA86H,CAAAJ,EAAA,UAAC,YAAY,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,aAAa,EAAEN,EAAE,CAAC,IAAMC,EAAED,EAAE,WAAW,EAAE,EAAEA,EAAE,YAAYA,EAAE,WAAWG,EAAEH,EAAE,aAAa,EAAEC,EAAED,EAAE,aAAa,EAAEE,GAAE,EAAEF,EAAE,OAAO,OAAO,CAAC,EAAEA,EAAE,CAAC,WAAWC,EAAEE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,aAAa,IAAI,KAAK,YAAY,EAAEA,EAAEH,CAAC,CAAC,CAAC,CAAC,YAAY,EAAEA,EAAEC,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAE,OAAO,EAAE,QAASH,GAAG,CAAC,IAAMI,EAAEI,GAAER,CAAC,EAAEK,EAAE,KAAK,MAAMD,GAAG,EAAEH,EAAE,EAAMK,EAAEN,EAAE,CAAC,EAAE,EAAEA,EAAE,CAAC,EAAEM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAIA,EAAEN,EAAE,CAAC,EAAE,EAAEA,EAAE,CAAC,GAAG,IAAMU,EAAE,KAAK,MAAM,EAAE,CAAC,EAAEJ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,EAAE,QAAQN,EAAE,EAAEA,EAAEK,EAAEL,IAAI,CAAC,IAAMI,EAAE,EAAEJ,EAAEC,EAAEO,EAAE,GAAGR,EAAE,GAAGC,EAAEI,EAAE,KAAK,KAAK,EAAE,KAAK,IAAIJ,EAAE,CAAC,CAAC,EAAEQ,EAAE,CAACH,EAAE,CAAC,EAAEF,EAAE,KAAK,IAAIM,CAAC,EAAEJ,EAAE,CAAC,EAAEF,EAAE,KAAK,IAAIM,CAAC,CAAC,EAAEC,EAAE,CAACL,EAAE,CAAC,EAAEE,EAAE,KAAK,IAAIE,CAAC,EAAEJ,EAAE,CAAC,EAAEE,EAAE,KAAK,IAAIE,CAAC,CAAC,EAAEE,EAAE,CAACH,EAAE,CAAC,EAAEJ,EAAE,KAAK,IAAIK,EAAE,KAAK,GAAG,CAAC,EAAED,EAAE,CAAC,EAAEJ,EAAE,KAAK,IAAIK,EAAE,KAAK,GAAG,CAAC,CAAC,EAAEP,EAAE,KAAK,GAAG,KAAK,OAAO,cAAcM,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEG,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEV,CAAC,EAAE,GAAG,KAAK,OAAO,cAAcU,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAED,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAET,CAAC,CAAC,CAAC,CAAC,CAAE,EAAEC,CAAC,CAAC,EAAOS,GAAE,CAAC,EAAQC,GAAN,KAAO,CAAhrJ,MAAgrJ,CAAAN,EAAA,UAAC,YAAY,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI,IAAI,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,EAAOO,GAAE,EAAEC,GAAE,EAAEC,GAAE,EAAEC,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAASC,GAAElB,EAAEC,EAAE,CAAC,OAAOD,EAAE,OAAOC,CAAC,CAAxBM,EAAAW,GAAA,KAAyB,SAASC,GAAEnB,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAEC,EAAE,SAASF,EAAE,CAAC,IAAM,EAAE,IAAI,MAAM,KAAUA,IAAL,IAAQ,GAAGA,EAAE,MAAM,gBAAgB,EAAEA,EAAEA,EAAE,OAAO,OAAO,GAAG,MAAM,UAAUA,EAAE,MAAM,2BAA2B,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,KAAKc,GAAE,KAAK,OAAO,EAAE,EAAEd,EAAEA,EAAE,OAAO,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAACA,EAAE,MAAM,6DAA6D,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,KAAKe,GAAE,KAAK,GAAG,WAAW,OAAO,EAAE,CAAC,EAAE,EAAEf,EAAEA,EAAE,OAAO,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,KAAKgB,GAAE,KAAK,EAAE,EAAE,CAAC,EAAEhB,CAAC,EAAMG,EAAE,MAAMC,EAAE,EAAE,EAAEF,EAAEE,CAAC,EAAE,KAAK,CAACc,GAAE,EAAEF,EAAC,GAAG,CAAC,IAAIX,EAAE,EAAQC,EAAE,CAAC,EAAE,GAAWH,IAAR,MAAU,CAAC,GAAS,EAAE,OAAR,KAAoB,EAAE,OAAR,IAAa,OAAOgB,GAAE,OAAOnB,CAAC,EAAEI,IAAIC,EAAEY,GAAE,EAAE,IAAI,EAAEd,EAAE,EAAE,IAAI,MAAMe,GAAE,EAAEH,EAAC,EAAEV,EAAEY,GAAEd,CAAC,GAAGC,IAAIC,EAAEY,GAAE,EAAE,IAAI,EAAEd,EAAE,EAAE,MAAM,GAAG,EAAEC,EAAEC,EAAEH,EAAE,QAAQ,MAAM,IAAI,MAAM,uBAAuB,EAAE,QAAQF,EAAEI,EAAEJ,EAAEI,EAAEC,EAAEL,IAAI,CAAC,IAAMC,EAAEC,EAAEF,CAAC,EAAE,GAAG,CAACkB,GAAEjB,EAAEc,EAAC,EAAE,MAAM,IAAI,MAAM,uBAAuBZ,EAAE,IAAIF,EAAE,IAAI,EAAEK,EAAEA,EAAE,MAAM,EAAE,CAACL,EAAE,IAAI,CAAC,GAAa,OAAOgB,GAAEd,CAAC,GAApB,SAAsB,MAAM,IAAI,MAAM,gBAAgBA,CAAC,EAAE,CAAC,IAAMH,EAAE,CAAC,IAAIG,EAAE,KAAKG,CAAC,EAAEL,EAAE,KAAKD,CAAC,EAAEI,GAAGC,EAAE,EAAEH,EAAEE,CAAC,EAAQD,IAAN,MAAUA,EAAE,KAAWA,IAAN,MAAUA,EAAE,IAAI,CAAC,CAAC,OAAOF,CAAC,CAAl8BM,EAAAY,GAAA,KAAm8B,SAASC,GAAEpB,EAAE,CAAC,IAAIC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAQ,EAAE,CAAC,EAAE,OAAS,CAAC,IAAIC,EAAE,KAAKC,CAAC,IAAIN,EAAE,OAAOK,EAAE,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGC,CAAC,CAAC,CAAC,EAAE,CAACL,EAAEC,CAAC,EAAEI,EAAE,CAACH,EAAEC,CAAC,EAAEE,EAAE,MAAM,IAAI,IAAIL,GAAGK,EAAE,CAAC,EAAEJ,GAAGI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACL,EAAEC,CAAC,CAAC,CAAC,EAAEC,EAAEF,EAAEG,EAAEF,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGI,CAAC,CAAC,CAAC,EAAE,CAACL,EAAEC,CAAC,EAAEI,EAAE,MAAM,IAAI,IAAIL,GAAGK,EAAE,CAAC,EAAEJ,GAAGI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACL,EAAEC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGI,CAAC,CAAC,CAAC,EAAEL,EAAEK,EAAE,CAAC,EAAEJ,EAAEI,EAAE,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,IAAMN,EAAEM,EAAE,IAAK,CAACN,EAAEG,IAAIA,EAAE,EAAEH,EAAEE,EAAEF,EAAEC,CAAE,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAKD,CAAC,CAAC,EAAEC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGM,CAAC,CAAC,CAAC,EAAEL,EAAEK,EAAE,CAAC,EAAEJ,EAAEI,EAAE,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,IAAMN,EAAEM,EAAE,IAAK,CAACN,EAAEG,IAAIA,EAAE,EAAEH,EAAEE,EAAEF,EAAEC,CAAE,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAKD,CAAC,CAAC,EAAEC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGM,CAAC,CAAC,CAAC,EAAEL,EAAEK,EAAE,CAAC,EAAEJ,EAAEI,EAAE,CAAC,EAAE,MAAM,IAAI,IAAIL,GAAGK,EAAE,CAAC,EAAEJ,GAAGI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEL,EAAEC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGI,CAAC,CAAC,CAAC,EAAEL,EAAEK,EAAE,CAAC,EAAE,MAAM,IAAI,IAAIL,GAAGK,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACL,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGK,CAAC,CAAC,CAAC,EAAEJ,EAAEI,EAAE,CAAC,EAAE,MAAM,IAAI,IAAIJ,GAAGI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACJ,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGI,CAAC,CAAC,CAAC,EAAEL,EAAEK,EAAE,CAAC,EAAEJ,EAAEI,EAAE,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,IAAMN,EAAEM,EAAE,IAAK,CAACN,EAAEG,IAAIA,EAAE,EAAEH,EAAEE,EAAEF,EAAEC,CAAE,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAKD,CAAC,CAAC,EAAEC,EAAED,EAAE,CAAC,EAAEE,EAAEF,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAGM,CAAC,CAAC,CAAC,EAAEL,EAAEK,EAAE,CAAC,EAAEJ,EAAEI,EAAE,CAAC,EAAE,MAAM,IAAI,IAAIL,GAAGK,EAAE,CAAC,EAAEJ,GAAGI,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACL,EAAEC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAED,EAAEE,EAAED,EAAEE,CAAC,CAAC,OAAO,CAAC,CAAzvCG,EAAAa,GAAA,KAA0vC,SAASC,GAAErB,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAMC,EAAE,GAAGC,EAAE,EAAEC,EAAE,EAAE,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEG,EAAE,EAAE,OAAS,CAAC,IAAIC,EAAE,KAAK,CAAC,IAAIV,EAAE,CAAC,OAAOU,EAAE,CAAC,IAAI,IAAIT,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAACE,EAAEC,CAAC,EAAE,EAAE,CAAC,EAAEC,CAAC,EAAE,EAAE,MAAM,IAAI,IAAIJ,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAEE,EAAE,EAAE,CAAC,EAAEC,EAAE,EAAE,CAAC,EAAEE,EAAE,EAAE,CAAC,EAAEG,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,IAAIR,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAACE,EAAEC,CAAC,EAAE,EAAE,MAAM,IAAI,IAAID,EAAE,EAAE,CAAC,EAAEF,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACE,EAAEC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAIA,EAAE,EAAE,CAAC,EAAEH,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACE,EAAEC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,IAAIJ,EAAE,EAAEQ,EAAE,EAAQN,IAAN,KAAeA,IAAN,KAASF,EAAEG,GAAGA,EAAEG,GAAGE,EAAEJ,GAAGA,EAAEK,KAAKT,EAAEG,EAAEK,EAAEJ,GAAGH,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACD,EAAEQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAEF,EAAE,EAAE,CAAC,EAAEG,EAAE,EAAE,CAAC,EAAEN,EAAE,EAAE,CAAC,EAAEC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAK,CAACJ,EAAEQ,CAAC,EAAE,EAAMH,EAAE,EAAEK,EAAE,EAAQR,IAAN,KAAeA,IAAN,KAASG,EAAEF,GAAGA,EAAEG,GAAGI,EAAEN,GAAGA,EAAEK,KAAKJ,EAAEF,EAAEO,EAAEN,GAAG,IAAMQ,EAAET,EAAE,GAAGE,EAAEF,GAAG,EAAEU,EAAET,EAAE,GAAGM,EAAEN,GAAG,EAAEU,EAAEd,EAAE,GAAGK,EAAEL,GAAG,EAAEe,EAAEP,EAAE,GAAGE,EAAEF,GAAG,EAAEP,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACW,EAAEC,EAAEC,EAAEC,EAAEf,EAAEQ,CAAC,CAAC,CAAC,EAAEF,EAAED,EAAEI,EAAEC,EAAEP,EAAEH,EAAEI,EAAEI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAK,CAACR,EAAEE,EAAEM,EAAEH,CAAC,EAAE,EAAEK,EAAEP,EAAE,GAAGH,EAAEG,GAAG,EAAES,EAAER,EAAE,GAAGF,EAAEE,GAAG,EAAES,EAAEL,EAAE,GAAGR,EAAEQ,GAAG,EAAEM,EAAET,EAAE,GAAGH,EAAEG,GAAG,EAAEJ,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACS,EAAEE,EAAEC,EAAEC,EAAEN,EAAEH,CAAC,CAAC,CAAC,EAAEC,EAAEN,EAAES,EAAEP,EAAEC,EAAEK,EAAEJ,EAAEC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAML,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAEE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAEM,EAAE,EAAE,CAAC,EAAEH,EAAE,EAAE,CAAC,EAAEC,EAAE,EAAE,CAAC,EAAEG,EAAE,EAAE,CAAC,EAAEC,EAAE,EAAE,CAAC,EAASV,IAAJ,GAAWE,IAAJ,GAAMD,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAACE,EAAEC,EAAEK,EAAEC,EAAED,EAAEC,CAAC,CAAC,CAAC,EAAEP,EAAEM,EAAEL,EAAEM,IAAUP,IAAIM,GAAGL,IAAIM,KAAGY,GAAEnB,EAAEC,EAAEK,EAAEC,EAAEV,EAAEE,EAAEM,EAAEH,EAAEC,CAAC,EAAE,QAAS,SAASN,EAAE,CAACC,EAAE,KAAK,CAAC,IAAI,IAAI,KAAKD,CAAC,CAAC,CAAC,CAAE,EAAEG,EAAEM,EAAEL,EAAEM,GAAE,KAAK,CAAC,IAAI,IAAIT,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAEE,EAAE,EAAEC,EAAEC,CAAC,CAACH,EAAEQ,CAAC,CAAC,OAAOT,CAAC,CAAxoCM,EAAAc,GAAA,KAAyoC,SAASE,GAAEvB,EAAEC,EAAEC,EAAE,CAAC,MAAM,CAACF,EAAE,KAAK,IAAIE,CAAC,EAAED,EAAE,KAAK,IAAIC,CAAC,EAAEF,EAAE,KAAK,IAAIE,CAAC,EAAED,EAAE,KAAK,IAAIC,CAAC,CAAC,CAAC,CAAxEK,EAAAgB,GAAA,KAAyE,SAASD,GAAEtB,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAEC,EAAEC,EAAEG,EAAEC,EAAE,CAAC,IAAM,GAAGE,EAAEP,EAAE,KAAK,GAAGO,EAAE,KAAK,IAAIA,EAAE,IAAIC,EAAE,CAAC,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAE,GAAGP,EAAE,CAACI,EAAEC,EAAEC,EAAEC,CAAC,EAAEP,MAAM,CAAC,CAACV,EAAEC,CAAC,EAAEsB,GAAEvB,EAAEC,EAAE,CAAC,CAAC,EAAE,CAACC,EAAEC,CAAC,EAAEoB,GAAErB,EAAEC,EAAE,CAAC,CAAC,EAAE,IAAME,GAAGL,EAAEE,GAAG,EAAEQ,GAAGT,EAAEE,GAAG,EAAMS,EAAEP,EAAEA,GAAGD,EAAEA,GAAGM,EAAEA,GAAG,EAAE,GAAGE,EAAE,IAAIA,EAAE,KAAK,KAAKA,CAAC,EAAER,GAAGQ,EAAE,GAAGA,GAAG,IAAMC,EAAET,EAAEA,EAAEc,EAAE,EAAE,EAAEC,EAAEN,EAAEK,EAAEL,EAAEH,EAAEA,EAAEQ,EAAEb,EAAEA,EAAEe,EAAEP,EAAEH,EAAEA,EAAEQ,EAAEb,EAAEA,EAAEgB,IAAGf,IAAIG,EAAE,GAAG,GAAG,KAAK,KAAK,KAAK,IAAIU,EAAEC,CAAC,CAAC,EAAEJ,EAAEK,GAAEjB,EAAEM,EAAE,GAAGV,EAAEE,GAAG,EAAEe,EAAEI,GAAE,CAAC,EAAEhB,EAAED,GAAGH,EAAEE,GAAG,EAAEW,EAAE,KAAK,KAAK,aAAab,EAAEgB,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAEF,EAAE,KAAK,KAAK,aAAaZ,EAAEc,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAEjB,EAAEgB,IAAIF,EAAE,KAAK,GAAGA,GAAGZ,EAAEc,IAAID,EAAE,KAAK,GAAGA,GAAGD,EAAE,IAAIA,EAAE,EAAE,KAAK,GAAGA,GAAGC,EAAE,IAAIA,EAAE,EAAE,KAAK,GAAGA,GAAGN,GAAGK,EAAEC,IAAID,GAAG,EAAE,KAAK,IAAI,CAACL,GAAGM,EAAED,IAAIC,GAAG,EAAE,KAAK,GAAG,CAAC,IAAIG,EAAEH,EAAED,EAAE,GAAG,KAAK,IAAII,CAAC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,IAAMlB,EAAEe,EAAEd,EAAEC,EAAEI,EAAEH,EAAEY,EAAEN,GAAGM,EAAED,EAAEA,EAAE,IAAI,KAAK,GAAG,IAAI,EAAEA,EAAE,IAAI,KAAK,GAAG,IAAI,GAAGD,EAAES,GAAEpB,EAAEc,EAAEZ,EAAE,KAAK,IAAIW,CAAC,EAAEZ,EAAEc,EAAE,EAAE,KAAK,IAAIF,CAAC,EAAEd,EAAEK,EAAEF,EAAE,EAAEC,EAAE,EAAEI,EAAE,CAACM,EAAEf,EAAEgB,EAAEC,CAAC,CAAC,CAAC,CAACC,EAAEH,EAAED,EAAE,IAAM,EAAE,KAAK,IAAIA,CAAC,EAAEM,EAAE,KAAK,IAAIN,CAAC,EAAEO,EAAE,KAAK,IAAIN,CAAC,EAAES,EAAE,KAAK,IAAIT,CAAC,EAAEU,EAAE,KAAK,IAAIP,EAAE,CAAC,EAAEQ,EAAE,EAAE,EAAEtB,EAAEqB,EAAEE,EAAE,EAAE,EAAE,EAAEF,EAAEG,EAAE,CAAC5B,EAAEC,CAAC,EAAE4B,EAAE,CAAC7B,EAAE0B,EAAEN,EAAEnB,EAAE0B,EAAE,CAAC,EAAEG,EAAE,CAAC5B,EAAEwB,EAAEF,EAAErB,EAAEwB,EAAEN,CAAC,EAAEU,EAAE,CAAC7B,EAAEC,CAAC,EAAE,GAAG0B,EAAE,CAAC,EAAE,EAAED,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,EAAED,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEnB,EAAE,MAAM,CAACmB,EAAEC,EAAEC,CAAC,EAAE,OAAOlB,CAAC,EAAE,CAACA,EAAE,CAACgB,EAAEC,EAAEC,CAAC,EAAE,OAAOlB,CAAC,EAAE,IAAMb,EAAE,CAAC,EAAE,QAAQC,EAAE,EAAEA,EAAEY,EAAE,OAAOZ,GAAG,EAAE,CAAC,IAAMC,EAAEqB,GAAEV,EAAEZ,CAAC,EAAE,CAAC,EAAEY,EAAEZ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEE,EAAEoB,GAAEV,EAAEZ,EAAE,CAAC,EAAE,CAAC,EAAEY,EAAEZ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEG,EAAEmB,GAAEV,EAAEZ,EAAE,CAAC,EAAE,CAAC,EAAEY,EAAEZ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAED,EAAE,KAAK,CAACE,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAOJ,CAAC,CAAC,CAA7nCO,EAAAe,GAAA,KAA8nC,IAAME,GAAE,CAAC,WAAWjB,EAAA,SAASP,EAAEC,EAAE,CAAC,OAAO+B,EAAEhC,EAAEC,CAAC,CAAC,EAA3B,cAA6B,oBAAoBM,EAAA,SAASP,EAAEC,EAAEC,EAAE,CAAC,OAAO+B,GAAEjC,EAAEC,EAAEC,CAAC,CAAC,EAA/B,uBAAiC,QAAQK,EAAA,SAASP,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAM,EAAEyB,GAAE3B,EAAEC,EAAEC,CAAC,EAAE,OAAO0B,GAAE9B,EAAEC,EAAEG,EAAE,CAAC,EAAE,KAAK,EAA5D,WAA8D,cAAcG,EAAA,SAASP,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,OAAO8B,GAAElC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAE,CAAC,EAA1C,gBAA2C,EAAE,SAASqB,GAAEzB,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,MAAM,CAAC,KAAK,OAAO,IAAI8B,GAAElC,EAAEC,EAAEC,EAAEC,EAAEC,CAAC,CAAC,CAAC,CAAjDG,EAAAkB,GAAA,KAAkD,SAASC,GAAE1B,EAAEC,EAAEC,EAAE,CAAC,IAAMC,GAAGH,GAAG,CAAC,GAAG,OAAO,GAAGG,EAAE,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAE,QAAQH,EAAE,EAAEA,EAAEE,EAAE,EAAEF,IAAIG,EAAE,KAAK,GAAG8B,GAAElC,EAAEC,CAAC,EAAE,CAAC,EAAED,EAAEC,CAAC,EAAE,CAAC,EAAED,EAAEC,EAAE,CAAC,EAAE,CAAC,EAAED,EAAEC,EAAE,CAAC,EAAE,CAAC,EAAEC,CAAC,CAAC,EAAE,OAAOD,GAAGG,EAAE,KAAK,GAAG8B,GAAElC,EAAEG,EAAE,CAAC,EAAE,CAAC,EAAEH,EAAEG,EAAE,CAAC,EAAE,CAAC,EAAEH,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,IAAIE,CAAC,CAAC,CAAC,OAAWD,IAAJ,EAAMsB,GAAEzB,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEE,CAAC,EAAE,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAArRK,EAAAmB,GAAA,KAAsR,SAASC,GAAE3B,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,OAAO,SAASJ,EAAEC,EAAE,CAAC,OAAOyB,GAAE1B,EAAE,GAAGC,CAAC,CAAC,EAAE,CAAC,CAACD,EAAEC,CAAC,EAAE,CAACD,EAAEE,EAAED,CAAC,EAAE,CAACD,EAAEE,EAAED,EAAEE,CAAC,EAAE,CAACH,EAAEC,EAAEE,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAxFG,EAAAoB,GAAA,KAAyF,SAASC,GAAE5B,EAAEC,EAAE,CAAC,GAAGD,EAAE,OAAO,CAAC,IAAME,EAAY,OAAOF,EAAE,CAAC,EAAE,CAAC,GAAvB,SAAyB,CAACA,CAAC,EAAEA,EAAEG,EAAEgC,GAAEjC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAGD,EAAE,WAAWA,CAAC,EAAEG,EAAEH,EAAE,mBAAmB,CAAC,EAAEkC,GAAEjC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAID,EAAE,WAAWmC,GAAEnC,CAAC,CAAC,EAAE,QAAQD,EAAE,EAAEA,EAAEE,EAAE,OAAOF,IAAI,CAAC,IAAMQ,EAAEN,EAAEF,CAAC,EAAE,GAAGQ,EAAE,OAAO,CAAC,IAAMR,EAAEmC,GAAE3B,EAAE,GAAG,EAAE,GAAGP,EAAE,WAAWA,CAAC,EAAEC,EAAED,EAAE,mBAAmB,CAAC,EAAEkC,GAAE3B,EAAE,KAAK,EAAE,IAAIP,EAAE,WAAWmC,GAAEnC,CAAC,CAAC,EAAE,QAAUA,KAAKD,EAAWC,EAAE,KAAX,QAAeE,EAAE,KAAKF,CAAC,EAAE,QAAUD,KAAKE,EAAWF,EAAE,KAAX,QAAeI,EAAE,KAAKJ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,IAAIG,EAAE,OAAOC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAApcG,EAAAqB,GAAA,KAAqc,SAASC,GAAE7B,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAE,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,MAAM,KAAK,IAAIH,EAAE,EAAE,CAAC,EAAE,KAAK,IAAIC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAEG,EAAE,KAAK,KAAK,KAAK,IAAIF,EAAE,eAAeA,EAAE,eAAe,KAAK,KAAK,GAAG,EAAEC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,GAAGC,EAAMC,EAAE,KAAK,IAAIL,EAAE,CAAC,EAAEM,EAAE,KAAK,IAAIL,EAAE,CAAC,EAAQQ,EAAE,EAAEP,EAAE,aAAa,OAAOG,GAAG2B,EAAE3B,EAAEI,EAAEP,CAAC,EAAEI,GAAG0B,EAAE1B,EAAEG,EAAEP,CAAC,EAAE,CAAC,UAAU,EAAE,GAAGG,EAAE,GAAGC,CAAC,CAAC,CAAhSC,EAAAsB,GAAA,KAAiS,SAASC,GAAE9B,EAAEC,EAAEC,EAAEC,EAAE,CAAC,GAAK,CAACC,EAAE,CAAC,EAAEiC,GAAElC,EAAE,UAAUH,EAAEC,EAAEE,EAAE,GAAGA,EAAE,GAAG,EAAEA,EAAE,UAAU8B,GAAE,GAAGA,GAAE,GAAG,EAAE/B,CAAC,EAAEA,CAAC,EAAEA,CAAC,EAAMG,EAAEiC,GAAElC,EAAE,KAAKF,CAAC,EAAE,GAAG,CAACA,EAAE,oBAAwBA,EAAE,YAAN,EAAgB,CAAC,GAAK,CAACE,CAAC,EAAEiC,GAAElC,EAAE,UAAUH,EAAEC,EAAEE,EAAE,GAAGA,EAAE,GAAG,IAAI,EAAED,CAAC,EAAEM,EAAE8B,GAAElC,EAAE,KAAKF,CAAC,EAAEG,EAAEA,EAAE,OAAOG,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,OAAO,IAAIH,CAAC,CAAC,CAAC,CAA/QE,EAAAuB,GAAA,KAAgR,SAASC,GAAE/B,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAEC,EAAEC,EAAEG,EAAE,CAAC,IAAMC,EAAEV,EAAE,EAAEC,EAAMW,EAAE,KAAK,IAAIV,EAAE,CAAC,EAAEW,EAAE,KAAK,IAAIV,EAAE,CAAC,EAAES,GAAGoB,EAAE,IAAIpB,EAAEH,CAAC,EAAEI,GAAGmB,EAAE,IAAInB,EAAEJ,CAAC,EAAE,IAAIK,EAAEV,EAAEW,EAAE,EAAE,KAAKD,EAAE,GAAGA,GAAG,EAAE,KAAK,GAAGC,GAAG,EAAE,KAAK,GAAGA,EAAED,EAAE,EAAE,KAAK,KAAKA,EAAE,EAAEC,EAAE,EAAE,KAAK,IAAI,IAAMC,EAAE,EAAE,KAAK,GAAGP,EAAE,eAAeQ,EAAE,KAAK,IAAID,EAAE,GAAGD,EAAED,GAAG,CAAC,EAAEI,EAAEqB,GAAEtB,EAAEP,EAAE,EAAEE,EAAEC,EAAEC,EAAEC,EAAE,EAAEN,CAAC,EAAE,GAAG,CAACA,EAAE,mBAAmB,CAAC,IAAMT,EAAEuC,GAAEtB,EAAEP,EAAE,EAAEE,EAAEC,EAAEC,EAAEC,EAAE,IAAIN,CAAC,EAAES,EAAE,KAAK,GAAGlB,CAAC,CAAC,CAAC,OAAOK,IAAIC,EAAEY,EAAE,KAAK,GAAGgB,GAAExB,EAAE,EAAEA,EAAEE,EAAE,KAAK,IAAIE,CAAC,EAAE,EAAED,EAAE,KAAK,IAAIC,CAAC,EAAEL,CAAC,EAAE,GAAGyB,GAAExB,EAAE,EAAEA,EAAEE,EAAE,KAAK,IAAIG,CAAC,EAAE,EAAEF,EAAE,KAAK,IAAIE,CAAC,EAAEN,CAAC,CAAC,EAAES,EAAE,KAAK,CAAC,GAAG,SAAS,KAAK,CAACR,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,CAACA,EAAEE,EAAE,KAAK,IAAIE,CAAC,EAAE,EAAED,EAAE,KAAK,IAAIC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,IAAII,CAAC,CAAC,CAAniBX,EAAAwB,GAAA,KAAoiB,SAASS,GAAExC,EAAEC,EAAE,CAAC,IAAMC,EAAEmB,GAAED,GAAED,GAAEnB,CAAC,CAAC,CAAC,EAAEG,EAAE,CAAC,EAAMC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAS,CAAC,IAAIJ,EAAE,KAAKK,CAAC,IAAIH,EAAE,OAAOF,EAAE,CAAC,IAAI,IAAI,EAAE,CAACK,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAED,EAAE,CAACC,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,IAAIF,EAAE,KAAK,GAAG+B,GAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE7B,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEJ,CAAC,CAAC,EAAE,EAAE,CAACI,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,GAAK,CAACL,EAAEE,EAAEE,EAAEE,EAAEG,EAAEC,CAAC,EAAEL,EAAEF,EAAE,KAAK,GAAGsC,GAAEzC,EAAEE,EAAEE,EAAEE,EAAEG,EAAEC,EAAE,EAAET,CAAC,CAAC,EAAE,EAAE,CAACQ,EAAEC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAIP,EAAE,KAAK,GAAG+B,GAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE9B,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEH,CAAC,CAAC,EAAE,EAAE,CAACG,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,IAAID,CAAC,CAAC,CAAhWI,EAAAiC,GAAA,KAAiW,SAASE,GAAE1C,EAAEC,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAE,QAAUC,KAAKH,EAAE,GAAGG,EAAE,OAAO,CAAC,IAAMH,EAAEC,EAAE,qBAAqB,EAAEG,EAAED,EAAE,OAAO,GAAGC,EAAE,EAAE,CAACF,EAAE,KAAK,CAAC,GAAG,OAAO,KAAK,CAACC,EAAE,CAAC,EAAE,CAAC,EAAE6B,EAAEhC,EAAEC,CAAC,EAAEE,EAAE,CAAC,EAAE,CAAC,EAAE6B,EAAEhC,EAAEC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQO,EAAE,EAAEA,EAAEJ,EAAEI,IAAIN,EAAE,KAAK,CAAC,GAAG,SAAS,KAAK,CAACC,EAAEK,CAAC,EAAE,CAAC,EAAEwB,EAAEhC,EAAEC,CAAC,EAAEE,EAAEK,CAAC,EAAE,CAAC,EAAEwB,EAAEhC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,WAAW,IAAIC,CAAC,CAAC,CAA1QK,EAAAmC,GAAA,KAA2Q,SAASC,GAAE3C,EAAEC,EAAE,CAAC,OAAO,SAASD,EAAEC,EAAE,CAAC,IAAI,EAAED,EAAE,WAAW,UAAU,GAAG,CAACY,GAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,SAASA,GAAE,CAAC,IAAIA,GAAE,CAAC,EAAE,IAAIP,GAAEJ,CAAC,GAAG,MAAM,IAAI,cAAcW,GAAE,CAAC,IAAIA,GAAE,CAAC,EAAE,IAAIN,GAAEL,CAAC,GAAG,MAAM,IAAI,OAAOW,GAAE,CAAC,IAAIA,GAAE,CAAC,EAAE,IAAIH,GAAER,CAAC,GAAG,MAAM,IAAI,SAASW,GAAE,CAAC,IAAIA,GAAE,CAAC,EAAE,IAAIF,GAAET,CAAC,GAAG,MAAM,IAAI,cAAcW,GAAE,CAAC,IAAIA,GAAE,CAAC,EAAE,IAAID,GAAEV,CAAC,GAAG,MAAM,QAAQ,EAAE,UAAUW,GAAE,CAAC,IAAIA,GAAE,CAAC,EAAE,IAAIR,GAAEH,CAAC,EAAE,CAAC,OAAOW,GAAE,CAAC,CAAC,EAAEX,EAAEuB,EAAC,EAAE,aAAaxB,EAAEC,CAAC,CAAC,CAA9WM,EAAAoC,GAAA,KAA+W,SAASP,GAAEpC,EAAE,CAAC,IAAMC,EAAE,OAAO,OAAO,CAAC,EAAED,CAAC,EAAE,OAAOC,EAAE,WAAW,OAAOD,EAAE,OAAOC,EAAE,KAAKD,EAAE,KAAK,GAAGC,CAAC,CAAvFM,EAAA6B,GAAA,KAAwF,SAASQ,GAAE5C,EAAE,CAAC,OAAOA,EAAE,aAAaA,EAAE,WAAW,IAAIa,GAAEb,EAAE,MAAM,CAAC,GAAGA,EAAE,WAAW,KAAK,CAAC,CAA7EO,EAAAqC,GAAA,KAA8E,SAASX,GAAEjC,EAAEC,EAAEC,EAAEC,EAAE,EAAE,CAAC,OAAOD,EAAE,UAAUC,GAAGyC,GAAE1C,CAAC,GAAGD,EAAED,GAAGA,EAAE,CAAhDO,EAAA0B,GAAA,KAAiD,SAASD,EAAEhC,EAAEC,EAAEC,EAAE,EAAE,CAAC,OAAO+B,GAAE,CAACjC,EAAEA,EAAEC,EAAEC,CAAC,CAAC,CAA7BK,EAAAyB,EAAA,KAA8B,SAASE,GAAElC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAE,GAAG,CAAC,IAAMC,EAAE,EAAED,EAAE,uBAAuBA,EAAE,mBAAmBE,EAAEuC,GAAE7C,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,GAAG,EAAE,EAAE,GAAGC,EAAE,OAAOC,EAAE,IAAMG,EAAEoC,GAAE7C,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,GAAG,EAAE,EAAE,OAAOE,EAAE,OAAOG,CAAC,CAAC,CAA1JF,EAAA2B,GAAA,KAA2J,SAASW,GAAE7C,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAEC,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAIN,EAAEE,EAAE,CAAC,EAAE,KAAK,IAAID,EAAEE,EAAE,CAAC,EAAEM,EAAE,KAAK,KAAKH,CAAC,EAAMI,EAAE,EAAEA,EAAED,EAAE,IAAI,EAAEA,EAAE,IAAI,GAAG,UAAUA,EAAE,SAAS,IAAI,EAAEL,EAAE,qBAAqB,EAAE,EAAE,EAAE,IAAIE,IAAI,EAAEG,EAAE,IAAI,IAAMG,EAAE,EAAE,EAAEC,EAAE,GAAG,GAAG+B,GAAExC,CAAC,EAAMU,EAAEV,EAAE,OAAOA,EAAE,qBAAqBD,EAAEF,GAAG,IAAIc,EAAEX,EAAE,OAAOA,EAAE,qBAAqBJ,EAAEE,GAAG,IAAIY,EAAEkB,EAAElB,EAAEV,EAAEM,CAAC,EAAEK,EAAEiB,EAAEjB,EAAEX,EAAEM,CAAC,EAAE,IAAMM,EAAE,CAAC,EAAEC,EAAEV,EAAA,IAAIyB,EAAEpB,EAAER,EAAEM,CAAC,EAAX,KAAaQ,EAAEX,EAAA,IAAIyB,EAAE,EAAE5B,EAAEM,CAAC,EAAX,KAAa,EAAEN,EAAE,iBAAiB,OAAO,IAAIC,EAAEW,EAAE,KAAK,CAAC,GAAG,OAAO,KAAK,CAAChB,GAAG,EAAE,EAAEiB,EAAE,GAAGhB,GAAG,EAAE,EAAEgB,EAAE,EAAE,CAAC,CAAC,EAAED,EAAE,KAAK,CAAC,GAAG,OAAO,KAAK,CAAChB,GAAG,EAAE,EAAEgC,EAAE,EAAE5B,EAAEM,CAAC,GAAGT,GAAG,EAAE,EAAE+B,EAAE,EAAE5B,EAAEM,CAAC,EAAE,CAAC,CAAC,GAAGL,EAAEW,EAAE,KAAK,CAAC,GAAG,WAAW,KAAK,CAACF,EAAEd,GAAGE,EAAEF,GAAGa,EAAEI,EAAE,EAAEF,EAAEd,GAAGE,EAAEF,GAAGY,EAAEI,EAAE,EAAEH,EAAEd,EAAE,GAAGE,EAAEF,GAAGa,EAAEI,EAAE,EAAEF,EAAEd,EAAE,GAAGE,EAAEF,GAAGY,EAAEI,EAAE,EAAEf,GAAG,EAAE,EAAEe,EAAE,GAAGd,GAAG,EAAE,EAAEc,EAAE,EAAE,CAAC,CAAC,EAAED,EAAE,KAAK,CAAC,GAAG,WAAW,KAAK,CAACF,EAAEd,GAAGE,EAAEF,GAAGa,EAAEK,EAAE,EAAEH,EAAEd,GAAGE,EAAEF,GAAGY,EAAEK,EAAE,EAAEJ,EAAEd,EAAE,GAAGE,EAAEF,GAAGa,EAAEK,EAAE,EAAEH,EAAEd,EAAE,GAAGE,EAAEF,GAAGY,EAAEK,EAAE,EAAEhB,GAAG,EAAE,EAAEgB,EAAE,GAAGf,GAAG,EAAE,EAAEe,EAAE,EAAE,CAAC,CAAC,EAAEF,CAAC,CAAzuBT,EAAAsC,GAAA,KAA0uB,SAASV,GAAEnC,EAAEC,EAAEC,EAAE,CAAC,GAAG,CAACF,EAAE,OAAO,MAAM,CAAC,EAAE,IAAMG,EAAE,CAAC,EAAEA,EAAE,KAAK,CAACH,EAAE,CAAC,EAAE,CAAC,EAAEgC,EAAE/B,EAAEC,CAAC,EAAEF,EAAE,CAAC,EAAE,CAAC,EAAEgC,EAAE/B,EAAEC,CAAC,CAAC,CAAC,EAAEC,EAAE,KAAK,CAACH,EAAE,CAAC,EAAE,CAAC,EAAEgC,EAAE/B,EAAEC,CAAC,EAAEF,EAAE,CAAC,EAAE,CAAC,EAAEgC,EAAE/B,EAAEC,CAAC,CAAC,CAAC,EAAE,QAAQE,EAAE,EAAEA,EAAEJ,EAAE,OAAOI,IAAID,EAAE,KAAK,CAACH,EAAEI,CAAC,EAAE,CAAC,EAAE4B,EAAE/B,EAAEC,CAAC,EAAEF,EAAEI,CAAC,EAAE,CAAC,EAAE4B,EAAE/B,EAAEC,CAAC,CAAC,CAAC,EAAEE,IAAIJ,EAAE,OAAO,GAAGG,EAAE,KAAK,CAACH,EAAEI,CAAC,EAAE,CAAC,EAAE4B,EAAE/B,EAAEC,CAAC,EAAEF,EAAEI,CAAC,EAAE,CAAC,EAAE4B,EAAE/B,EAAEC,CAAC,CAAC,CAAC,EAAE,OAAOoC,GAAEnC,EAAE,KAAKD,CAAC,CAAC,CAAvQK,EAAA4B,GAAA,KAAwQ,SAASG,GAAEtC,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAEH,EAAE,OAAOI,EAAE,CAAC,EAAE,GAAGD,EAAE,EAAE,CAAC,IAAM,EAAE,CAAC,EAAEE,EAAE,EAAEH,EAAE,eAAeE,EAAE,KAAK,CAAC,GAAG,OAAO,KAAK,CAACJ,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAEG,EAAE,IAAI,CAAC,IAAMD,EAAEF,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAACE,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAACA,EAAE,CAAC,GAAGG,EAAEL,EAAE,EAAE,CAAC,EAAE,CAAC,EAAEK,EAAEL,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAEE,EAAE,CAAC,GAAGG,EAAEL,EAAE,EAAE,CAAC,EAAE,CAAC,EAAEK,EAAEL,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAACA,EAAE,EAAE,CAAC,EAAE,CAAC,GAAGK,EAAEL,EAAE,CAAC,EAAE,CAAC,EAAEK,EAAEL,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAEA,EAAE,EAAE,CAAC,EAAE,CAAC,GAAGK,EAAEL,EAAE,CAAC,EAAE,CAAC,EAAEK,EAAEL,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAACA,EAAE,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAEI,EAAE,KAAK,CAAC,GAAG,WAAW,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGH,GAAOA,EAAE,SAAN,EAAa,CAAC,IAAMD,EAAEE,EAAE,oBAAoBE,EAAE,KAAK,CAAC,GAAG,SAAS,KAAK,CAACH,EAAE,CAAC,EAAE+B,EAAEhC,EAAEE,CAAC,EAAED,EAAE,CAAC,EAAE+B,EAAEhC,EAAEE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAUC,IAAJ,GAAOC,EAAE,KAAK,CAAC,GAAG,OAAO,KAAK,CAACJ,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAEI,EAAE,KAAK,CAAC,GAAG,WAAW,KAAK,CAACJ,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAOG,IAAJ,GAAOC,EAAE,KAAK,GAAGyC,GAAE7C,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE,CAAC,EAAEE,EAAE,GAAG,EAAE,CAAC,EAAE,OAAOE,CAAC,CAA7tBG,EAAA+B,GAAA,KAA8tB,SAASD,GAAErC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAEC,EAAEC,EAAE,CAAC,IAAMG,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,GAAOJ,EAAE,YAAN,EAAgB,CAACN,GAAG,EAAEU,EAAE,KAAK,CAACT,EAAEE,EAAE,KAAK,IAAI,CAACH,CAAC,EAAEE,EAAEE,EAAE,KAAK,IAAI,CAACJ,CAAC,CAAC,CAAC,EAAE,QAAQQ,EAAE,EAAEA,GAAG,EAAE,KAAK,GAAGA,GAAGR,EAAE,CAAC,IAAMA,EAAE,CAACC,EAAEE,EAAE,KAAK,IAAIK,CAAC,EAAEN,EAAEE,EAAE,KAAK,IAAII,CAAC,CAAC,EAAEC,EAAE,KAAKT,CAAC,EAAEU,EAAE,KAAKV,CAAC,CAAC,CAACU,EAAE,KAAK,CAACT,EAAEE,EAAE,KAAK,IAAI,CAAC,EAAED,EAAEE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAEM,EAAE,KAAK,CAACT,EAAEE,EAAE,KAAK,IAAIH,CAAC,EAAEE,EAAEE,EAAE,KAAK,IAAIJ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAM,EAAEgC,EAAE,GAAG1B,CAAC,EAAE,KAAK,GAAG,EAAEI,EAAE,KAAK,CAACsB,EAAE,EAAE1B,CAAC,EAAEL,EAAE,GAAGE,EAAE,KAAK,IAAI,EAAEH,CAAC,EAAEgC,EAAE,EAAE1B,CAAC,EAAEJ,EAAE,GAAGE,EAAE,KAAK,IAAI,EAAEJ,CAAC,CAAC,CAAC,EAAE,IAAMY,EAAE,EAAE,KAAK,GAAG,EAAE,IAAI,QAAQP,EAAE,EAAEA,EAAEO,EAAEP,GAAGL,EAAE,CAAC,IAAMA,EAAE,CAACgC,EAAE,EAAE1B,CAAC,EAAEL,EAAEE,EAAE,KAAK,IAAIE,CAAC,EAAE2B,EAAE,EAAE1B,CAAC,EAAEJ,EAAEE,EAAE,KAAK,IAAIC,CAAC,CAAC,EAAEI,EAAE,KAAKT,CAAC,EAAEU,EAAE,KAAKV,CAAC,CAAC,CAACU,EAAE,KAAK,CAACsB,EAAE,EAAE1B,CAAC,EAAEL,EAAEE,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,GAAG,GAAGE,CAAC,EAAE2B,EAAE,EAAE1B,CAAC,EAAEJ,EAAEE,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,GAAG,GAAGC,CAAC,CAAC,CAAC,EAAEK,EAAE,KAAK,CAACsB,EAAE,EAAE1B,CAAC,EAAEL,EAAE,IAAIE,EAAE,KAAK,IAAI,EAAEE,CAAC,EAAE2B,EAAE,EAAE1B,CAAC,EAAEJ,EAAE,IAAIE,EAAE,KAAK,IAAI,EAAEC,CAAC,CAAC,CAAC,EAAEK,EAAE,KAAK,CAACsB,EAAE,EAAE1B,CAAC,EAAEL,EAAE,GAAGE,EAAE,KAAK,IAAI,EAAE,GAAGE,CAAC,EAAE2B,EAAE,EAAE1B,CAAC,EAAEJ,EAAE,GAAGE,EAAE,KAAK,IAAI,EAAE,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAACK,EAAED,CAAC,CAAC,CAAjuBF,EAAA8B,GAAA,KAAkuB,SAASE,GAAEvC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAEC,EAAEC,EAAEG,EAAE,CAAC,IAAMC,EAAE,EAAEsB,EAAE,GAAGvB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,CAACuB,EAAE1B,EAAEG,CAAC,EAAER,EAAE,GAAGE,EAAE,KAAK,IAAIO,EAAEV,CAAC,EAAEgC,EAAE1B,EAAEG,CAAC,EAAEP,EAAE,GAAGE,EAAE,KAAK,IAAIM,EAAEV,CAAC,CAAC,CAAC,EAAE,QAAQQ,EAAEE,EAAEF,GAAGH,EAAEG,GAAGR,EAAE,EAAE,KAAK,CAACgC,EAAE1B,EAAEG,CAAC,EAAER,EAAEE,EAAE,KAAK,IAAIK,CAAC,EAAEwB,EAAE1B,EAAEG,CAAC,EAAEP,EAAEE,EAAE,KAAK,IAAII,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAACP,EAAEE,EAAE,KAAK,IAAIE,CAAC,EAAEH,EAAEE,EAAE,KAAK,IAAIC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAACJ,EAAEE,EAAE,KAAK,IAAIE,CAAC,EAAEH,EAAEE,EAAE,KAAK,IAAIC,CAAC,CAAC,CAAC,EAAEiC,GAAE,EAAE,KAAK7B,CAAC,CAAC,CAAlSF,EAAAgC,GAAA,KAAmS,SAASE,GAAEzC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAEC,EAAEC,EAAE,CAAC,IAAMG,EAAE,CAAC,EAAEC,EAAE,CAACJ,EAAE,qBAAqB,GAAGA,EAAE,qBAAqB,GAAG,EAAE,EAAM,EAAE,CAAC,EAAE,CAAC,EAAQM,EAAEN,EAAE,mBAAmB,EAAE,EAAEO,EAAEP,EAAE,iBAAiB,QAAQQ,EAAE,EAAEA,EAAEF,EAAEE,IAAQA,IAAJ,EAAML,EAAE,KAAK,CAAC,GAAG,OAAO,KAAK,CAACJ,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,EAAEI,EAAE,KAAK,CAAC,GAAG,OAAO,KAAK,CAACJ,EAAE,CAAC,GAAGQ,EAAE,EAAEmB,EAAEtB,EAAE,CAAC,EAAEJ,CAAC,GAAGD,EAAE,CAAC,GAAGQ,EAAE,EAAEmB,EAAEtB,EAAE,CAAC,EAAEJ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAEO,EAAE,CAACT,EAAE,CAAC,EAAE,CAACA,EAAE4B,EAAEtB,EAAEI,CAAC,EAAER,CAAC,EAAE,EAAE0B,EAAEtB,EAAEI,CAAC,EAAER,CAAC,CAAC,EAAEG,EAAE,KAAK,CAAC,GAAG,WAAW,KAAK,CAACT,EAAEgC,EAAEtB,EAAEI,CAAC,EAAER,CAAC,EAAEL,EAAE+B,EAAEtB,EAAEI,CAAC,EAAER,CAAC,EAAEJ,EAAE8B,EAAEtB,EAAEI,CAAC,EAAER,CAAC,EAAEH,EAAE6B,EAAEtB,EAAEI,CAAC,EAAER,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAOG,CAAC,CAApaF,EAAAkC,GAAA,KAAqa,SAASK,GAAE9C,EAAE,CAAC,MAAM,CAAC,GAAGA,CAAC,CAAC,CAAjBO,EAAAuC,GAAA,KAAkB,SAASC,GAAE/C,EAAEC,EAAE,EAAE,CAAC,IAAMC,EAAEF,EAAE,OAAO,GAAGE,EAAE,EAAE,MAAM,IAAI,MAAM,0CAA0C,EAAE,IAAMC,EAAE,CAAC,EAAE,GAAOD,IAAJ,EAAMC,EAAE,KAAK2C,GAAE9C,EAAE,CAAC,CAAC,EAAE8C,GAAE9C,EAAE,CAAC,CAAC,EAAE8C,GAAE9C,EAAE,CAAC,CAAC,EAAE8C,GAAE9C,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAM,EAAE,CAAC,EAAE,EAAE,KAAKA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAEA,EAAE,OAAO,IAAI,EAAE,KAAKA,EAAE,CAAC,CAAC,EAAE,IAAIA,EAAE,OAAO,GAAG,EAAE,KAAKA,EAAE,CAAC,CAAC,EAAE,IAAMI,EAAE,CAAC,EAAEI,EAAE,EAAEP,EAAEE,EAAE,KAAK2C,GAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ9C,EAAE,EAAEA,EAAE,EAAE,EAAE,OAAOA,IAAI,CAAC,IAAMC,EAAE,EAAED,CAAC,EAAEI,EAAE,CAAC,EAAE,CAACH,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAEG,EAAE,CAAC,EAAE,CAACH,EAAE,CAAC,GAAGO,EAAE,EAAER,EAAE,CAAC,EAAE,CAAC,EAAEQ,EAAE,EAAER,EAAE,CAAC,EAAE,CAAC,GAAG,EAAEC,EAAE,CAAC,GAAGO,EAAE,EAAER,EAAE,CAAC,EAAE,CAAC,EAAEQ,EAAE,EAAER,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAEI,EAAE,CAAC,EAAE,CAAC,EAAEJ,EAAE,CAAC,EAAE,CAAC,GAAGQ,EAAE,EAAER,CAAC,EAAE,CAAC,EAAEQ,EAAE,EAAER,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAEA,EAAE,CAAC,EAAE,CAAC,GAAGQ,EAAE,EAAER,CAAC,EAAE,CAAC,EAAEQ,EAAE,EAAER,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAEI,EAAE,CAAC,EAAE,CAAC,EAAEJ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAEA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAEG,EAAE,KAAKC,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAOD,CAAC,CAAhjBI,EAAAwC,GAAA,KAAijB,SAASC,GAAEhD,EAAEC,EAAE,CAAC,OAAO,KAAK,IAAID,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAID,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAzDM,EAAAyC,GAAA,KAA0D,SAASC,GAAEjD,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAE6C,GAAE/C,EAAEC,CAAC,EAAE,GAAOC,IAAJ,EAAM,OAAO6C,GAAEhD,EAAEC,CAAC,EAAE,IAAIG,IAAIJ,EAAE,CAAC,EAAEC,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAED,EAAE,CAAC,IAAID,EAAE,CAAC,EAAEC,EAAE,CAAC,IAAIC,EAAE,CAAC,EAAED,EAAE,CAAC,IAAIE,EAAE,OAAOC,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAEA,CAAC,CAAC,EAAE4C,GAAEhD,EAAEkD,GAAEjD,EAAEC,EAAEE,CAAC,CAAC,CAAC,CAAzJG,EAAA0C,GAAA,KAA0J,SAASC,GAAElD,EAAEC,EAAEC,EAAE,CAAC,MAAM,CAACF,EAAE,CAAC,GAAGC,EAAE,CAAC,EAAED,EAAE,CAAC,GAAGE,EAAEF,EAAE,CAAC,GAAGC,EAAE,CAAC,EAAED,EAAE,CAAC,GAAGE,CAAC,CAAC,CAAtDK,EAAA2C,GAAA,KAAuD,SAASC,GAAEnD,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAED,GAAG,CAAC,EAAE,GAAG,SAASH,EAAEC,EAAE,CAAC,IAAMC,EAAEF,EAAEC,EAAE,CAAC,EAAEE,EAAEH,EAAEC,EAAE,CAAC,EAAEG,EAAEJ,EAAEC,EAAE,CAAC,EAAEO,EAAER,EAAEC,EAAE,CAAC,EAAMI,EAAE,EAAEF,EAAE,CAAC,EAAE,EAAED,EAAE,CAAC,EAAEM,EAAE,CAAC,EAAEH,GAAGA,EAAE,IAAIC,EAAE,EAAEH,EAAE,CAAC,EAAE,EAAED,EAAE,CAAC,EAAEM,EAAE,CAAC,EAAEF,GAAGA,EAAE,IAAIG,EAAE,EAAEL,EAAE,CAAC,EAAE,EAAEI,EAAE,CAAC,EAAEN,EAAE,CAAC,EAAEO,GAAGA,EAAE,IAAIC,EAAE,EAAEN,EAAE,CAAC,EAAE,EAAEI,EAAE,CAAC,EAAEN,EAAE,CAAC,EAAE,OAAOQ,GAAGA,EAAEL,EAAEI,IAAIJ,EAAEI,GAAGH,EAAEI,IAAIJ,EAAEI,GAAGL,EAAEC,CAAC,EAAEN,EAAEC,CAAC,EAAEC,EAAE,CAAC,IAAMA,EAAEF,EAAEC,EAAE,CAAC,EAAKG,EAAE,QAAS,EAAEA,EAAEA,EAAE,OAAO,CAAC,EAAEC,EAAEH,EAAE,KAAK,KAAK8C,GAAE,EAAE3C,CAAC,CAAC,EAAG,GAAGD,EAAE,KAAKF,CAAC,GAAOE,EAAE,KAAKF,CAAC,EAAEE,EAAE,KAAKJ,EAAEC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAWO,EAAER,EAAEC,EAAE,CAAC,EAAEI,EAAEL,EAAEC,EAAE,CAAC,EAAEK,EAAEN,EAAEC,EAAE,CAAC,EAAEQ,EAAET,EAAEC,EAAE,CAAC,EAAES,EAAEwC,GAAE1C,EAAEH,EAAE,EAAC,EAAEM,EAAEuC,GAAE7C,EAAEC,EAAE,EAAC,EAAEM,EAAEsC,GAAE5C,EAAEG,EAAE,EAAC,EAAEI,EAAEqC,GAAExC,EAAEC,EAAE,EAAC,EAAEG,EAAEoC,GAAEvC,EAAEC,EAAE,EAAC,EAAEG,EAAEmC,GAAErC,EAAEC,EAAE,EAAC,EAAEqC,GAAE,CAAC3C,EAAEE,EAAEG,EAAEE,CAAC,EAAE,EAAEb,EAAEE,CAAC,EAAE+C,GAAE,CAACpC,EAAED,EAAEF,EAAEH,CAAC,EAAE,EAAEP,EAAEE,CAAC,CAAC,CAAC,IAAI,EAAEC,EAAE,OAAOD,CAAC,CAAjhBG,EAAA4C,GAAA,KAAkhB,SAASC,GAAEpD,EAAEC,EAAE,CAAC,OAAOoD,GAAErD,EAAE,EAAEA,EAAE,OAAOC,CAAC,CAAC,CAA/BM,EAAA6C,GAAA,KAAgC,SAASC,GAAErD,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAM,EAAEA,GAAG,CAAC,EAAEC,EAAEL,EAAEC,CAAC,EAAEK,EAAEN,EAAEE,EAAE,CAAC,EAAMO,EAAE,EAAEC,EAAE,EAAE,QAAQP,EAAEF,EAAE,EAAEE,EAAED,EAAE,EAAE,EAAEC,EAAE,CAAC,IAAMF,EAAEgD,GAAEjD,EAAEG,CAAC,EAAEE,EAAEC,CAAC,EAAEL,EAAEQ,IAAIA,EAAER,EAAES,EAAEP,EAAE,CAAC,OAAO,KAAK,KAAKM,CAAC,EAAEN,GAAGkD,GAAErD,EAAEC,EAAES,EAAE,EAAEP,EAAE,CAAC,EAAEkD,GAAErD,EAAEU,EAAER,EAAEC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAKE,CAAC,EAAE,EAAE,KAAKC,CAAC,GAAG,CAAC,CAAxMC,EAAA8C,GAAA,KAAyM,SAASC,GAAEtD,EAAEC,EAAE,IAAIC,EAAE,CAAC,IAAMC,EAAE,CAAC,EAAEC,GAAGJ,EAAE,OAAO,GAAG,EAAE,QAAQE,EAAE,EAAEA,EAAEE,EAAEF,IAAKiD,GAAEnD,EAAE,EAAEE,EAAED,EAAEE,CAAC,EAAE,OAAOD,GAAGA,EAAE,EAAEmD,GAAElD,EAAE,EAAEA,EAAE,OAAOD,CAAC,EAAEC,CAAC,CAA5GI,EAAA+C,GAAA,KAA6G,IAAMC,GAAG,OAAaC,GAAN,KAAQ,CAA/kkB,MAA+kkB,CAAAjD,EAAA,WAAC,YAAY,EAAE,CAAC,KAAK,eAAe,CAAC,oBAAoB,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,OAAO,YAAY,EAAE,eAAe,EAAE,aAAa,IAAI,eAAe,EAAE,UAAU,UAAU,WAAW,GAAG,aAAa,IAAI,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,KAAK,EAAE,mBAAmB,GAAG,uBAAuB,GAAG,iBAAiB,GAAG,uBAAuB,EAAE,EAAE,KAAK,OAAO,GAAG,CAAC,EAAE,KAAK,OAAO,UAAU,KAAK,eAAe,KAAK,GAAG,KAAK,OAAO,OAAO,EAAE,CAAC,OAAO,SAAS,CAAC,OAAO,KAAK,MAAM,KAAK,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,eAAe,CAAC,EAAE,KAAK,cAAc,CAAC,GAAG,EAAEN,EAAEC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,KAAKD,GAAG,CAAC,EAAE,QAAQC,GAAG,KAAK,cAAc,CAAC,CAAC,KAAK,EAAED,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,GAAGJ,CAAC,EAAE,OAAO,KAAK,GAAG,OAAO,CAACqB,GAAE,EAAExB,EAAEC,EAAEC,EAAEK,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,UAAU,EAAEP,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,GAAGJ,CAAC,EAAEC,EAAE,CAAC,EAAEC,EAAEqB,GAAE,EAAE1B,EAAEC,EAAEC,EAAEK,CAAC,EAAE,GAAGA,EAAE,KAAK,CAAC,IAAMJ,EAAE,CAAC,CAAC,EAAEH,CAAC,EAAE,CAAC,EAAEC,EAAED,CAAC,EAAE,CAAC,EAAEC,EAAED,EAAEE,CAAC,EAAE,CAAC,EAAEF,EAAEE,CAAC,CAAC,EAAYK,EAAE,YAAZ,QAAsBH,EAAE,KAAKqC,GAAE,CAACtC,CAAC,EAAEI,CAAC,CAAC,EAAEH,EAAE,KAAKsC,GAAE,CAACvC,CAAC,EAAEI,CAAC,CAAC,CAAC,CAAC,OAAOA,EAAE,SAAS+C,IAAIlD,EAAE,KAAKC,CAAC,EAAE,KAAK,GAAG,YAAYD,EAAEG,CAAC,CAAC,CAAC,QAAQ,EAAEP,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,GAAGJ,CAAC,EAAEC,EAAE,CAAC,EAAEC,EAAEuB,GAAE3B,EAAEC,EAAEK,CAAC,EAAE,EAAEsB,GAAE,EAAE7B,EAAEO,EAAEF,CAAC,EAAE,GAAGE,EAAE,KAAK,GAAaA,EAAE,YAAZ,QAAsB,CAAC,IAAMN,EAAE4B,GAAE,EAAE7B,EAAEO,EAAEF,CAAC,EAAE,MAAMJ,EAAE,KAAK,WAAWG,EAAE,KAAKH,CAAC,CAAC,MAAMG,EAAE,KAAKsC,GAAE,CAAC,EAAE,eAAe,EAAEnC,CAAC,CAAC,EAAE,OAAOA,EAAE,SAAS+C,IAAIlD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,UAAUA,EAAEG,CAAC,CAAC,CAAC,OAAO,EAAEP,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAE,KAAK,QAAQ,EAAEH,EAAEC,EAAEA,EAAEC,CAAC,EAAE,OAAOC,EAAE,MAAM,SAASA,CAAC,CAAC,WAAW,EAAEH,EAAE,CAAC,IAAMC,EAAE,KAAK,GAAGD,CAAC,EAAE,OAAO,KAAK,GAAG,aAAa,CAACyB,GAAE,EAAE,GAAGxB,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,IAAI,EAAED,EAAEC,EAAEC,EAAEC,EAAEI,EAAEH,EAAE,GAAGC,EAAE,CAAC,IAAM,EAAE,KAAK,GAAGA,CAAC,EAAEI,EAAE,CAAC,EAAEC,EAAEoB,GAAE,EAAE9B,EAAEC,EAAEC,EAAEC,EAAEI,EAAEH,EAAE,GAAG,CAAC,EAAE,GAAGA,GAAG,EAAE,KAAK,GAAa,EAAE,YAAZ,QAAsB,CAAC,IAAMA,EAAE,OAAO,OAAO,CAAC,EAAE,CAAC,EAAEA,EAAE,mBAAmB,GAAG,IAAMC,EAAEyB,GAAE,EAAE9B,EAAEC,EAAEC,EAAEC,EAAEI,EAAE,GAAG,GAAGH,CAAC,EAAEC,EAAE,KAAK,WAAWI,EAAE,KAAKJ,CAAC,CAAC,MAAMI,EAAE,KAAK,SAASV,EAAEC,EAAEC,EAAEC,EAAEC,EAAEI,EAAEH,EAAE,CAAC,IAAMC,EAAEN,EAAES,EAAER,EAAMS,EAAE,KAAK,IAAIR,EAAE,CAAC,EAAES,EAAE,KAAK,IAAIR,EAAE,CAAC,EAAEO,GAAGsB,EAAE,IAAItB,EAAEL,CAAC,EAAEM,GAAGqB,EAAE,IAAIrB,EAAEN,CAAC,EAAE,IAAIO,EAAER,EAAES,EAAEL,EAAE,KAAKI,EAAE,GAAGA,GAAG,EAAE,KAAK,GAAGC,GAAG,EAAE,KAAK,GAAGA,EAAED,EAAE,EAAE,KAAK,KAAKA,EAAE,EAAEC,EAAE,EAAE,KAAK,IAAI,IAAMC,GAAGD,EAAED,GAAGP,EAAE,eAAeU,EAAE,CAAC,EAAE,QAAQf,EAAEY,EAAEZ,GAAGa,EAAEb,GAAGc,EAAEC,EAAE,KAAK,CAACT,EAAEI,EAAE,KAAK,IAAIV,CAAC,EAAES,EAAEE,EAAE,KAAK,IAAIX,CAAC,CAAC,CAAC,EAAE,OAAOe,EAAE,KAAK,CAACT,EAAEI,EAAE,KAAK,IAAIG,CAAC,EAAEJ,EAAEE,EAAE,KAAK,IAAIE,CAAC,CAAC,CAAC,EAAEE,EAAE,KAAK,CAACT,EAAEG,CAAC,CAAC,EAAEkC,GAAE,CAAC5B,CAAC,EAAEV,CAAC,CAAC,EAAE,EAAEJ,EAAEC,EAAEC,EAAEC,EAAEI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS+C,IAAI7C,EAAE,KAAKC,CAAC,EAAE,KAAK,GAAG,MAAMD,EAAE,CAAC,CAAC,CAAC,MAAM,EAAET,EAAE,CAAC,IAAMC,EAAE,KAAK,GAAGD,CAAC,EAAEE,EAAE,CAAC,EAAEC,EAAEwB,GAAE,EAAE1B,CAAC,EAAE,GAAGA,EAAE,MAAMA,EAAE,OAAOqD,GAAG,GAAarD,EAAE,YAAZ,QAAsB,CAAC,IAAMD,EAAE2B,GAAE,EAAE,OAAO,OAAO,OAAO,OAAO,CAAC,EAAE1B,CAAC,EAAE,CAAC,mBAAmB,GAAG,UAAUA,EAAE,UAAUA,EAAE,UAAUA,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAEC,EAAE,KAAK,CAAC,KAAK,WAAW,IAAI,KAAK,aAAaF,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAMA,EAAE,CAAC,EAAEG,EAAE,EAAE,GAAGA,EAAE,OAAO,CAAC,IAAMJ,EAAY,OAAOI,EAAE,CAAC,EAAE,CAAC,GAAvB,SAAyB,CAACA,CAAC,EAAEA,EAAE,QAAUD,KAAKH,EAAEG,EAAE,OAAO,EAAEF,EAAE,KAAK,GAAGE,CAAC,EAAMA,EAAE,SAAN,EAAaF,EAAE,KAAK,GAAGqD,GAAEP,GAAE,CAAC5C,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAED,EAAE,WAAW,CAAC,CAAC,EAAED,EAAE,KAAK,GAAGqD,GAAEP,GAAE5C,CAAC,EAAE,IAAI,EAAED,EAAE,WAAW,CAAC,CAAC,CAAC,CAACD,EAAE,QAAQE,EAAE,KAAKwC,GAAE,CAAC1C,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,OAAOA,EAAE,SAASqD,IAAIpD,EAAE,KAAKC,CAAC,EAAE,KAAK,GAAG,QAAQD,EAAED,CAAC,CAAC,CAAC,QAAQ,EAAED,EAAE,CAAC,IAAMC,EAAE,KAAK,GAAGD,CAAC,EAAEE,EAAE,CAAC,EAAEC,EAAEsB,GAAE,EAAE,GAAGxB,CAAC,EAAE,OAAOA,EAAE,OAAiBA,EAAE,YAAZ,QAAsBC,EAAE,KAAKuC,GAAE,CAAC,CAAC,EAAExC,CAAC,CAAC,EAAEC,EAAE,KAAKwC,GAAE,CAAC,CAAC,EAAEzC,CAAC,CAAC,GAAGA,EAAE,SAASqD,IAAIpD,EAAE,KAAKC,CAAC,EAAE,KAAK,GAAG,UAAUD,EAAED,CAAC,CAAC,CAAC,KAAK,EAAED,EAAE,CAAC,IAAMC,EAAE,KAAK,GAAGD,CAAC,EAAEE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,GAAG,OAAOA,EAAED,CAAC,EAAE,GAAG,GAAG,IAAI,QAAQ,MAAM,GAAG,EAAE,QAAQ,SAAS,GAAG,EAAE,QAAQ,UAAU,GAAG,EAAE,IAAME,EAAEF,EAAE,MAAsBA,EAAE,OAAlB,eAAwBA,EAAE,OAAOqD,GAAG/C,EAAEN,EAAE,SAASqD,GAAGlD,EAAE,CAAC,EAAEH,EAAE,gBAAgBA,EAAE,eAAe,GAAGI,EAAE,SAASN,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAEkB,GAAED,GAAED,GAAEnB,CAAC,CAAC,CAAC,EAAEI,EAAE,CAAC,EAAMI,EAAE,CAAC,EAAEH,EAAE,CAAC,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAQG,EAAEF,EAAA,IAAI,CAACD,EAAE,QAAQ,GAAGE,EAAE,KAAK,GAAG8C,GAAEhD,EAAEL,CAAC,CAAC,EAAEK,EAAE,CAAC,CAAC,EAAxC,KAA0CI,EAAEH,EAAA,IAAI,CAACE,EAAE,EAAED,EAAE,SAASJ,EAAE,KAAKI,CAAC,EAAEA,EAAE,CAAC,EAAE,EAAnC,KAAqC,OAAS,CAAC,IAAIR,EAAE,KAAKC,CAAC,IAAIE,EAAE,OAAOH,EAAE,CAAC,IAAI,IAAIU,EAAE,EAAEL,EAAE,CAACJ,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAEO,EAAE,KAAKH,CAAC,EAAE,MAAM,IAAI,IAAII,EAAE,EAAED,EAAE,KAAK,CAACP,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,GAAG,CAACK,EAAE,OAAO,CAAC,IAAMN,EAAEQ,EAAE,OAAOA,EAAEA,EAAE,OAAO,CAAC,EAAEH,EAAEC,EAAE,KAAK,CAACN,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,CAACM,EAAE,KAAK,CAACL,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,EAAEK,EAAE,KAAK,CAACL,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,EAAEK,EAAE,KAAK,CAACL,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAIQ,EAAE,EAAED,EAAE,KAAK,CAACH,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGK,EAAE,EAAE,CAACR,EAAE,OAAOE,EAAE,IAAMO,EAAE,CAAC,EAAE,QAAUX,KAAKI,EAAE,CAAC,IAAMH,EAAEmD,GAAEpD,EAAEE,CAAC,EAAED,EAAE,QAAQU,EAAE,KAAKV,CAAC,CAAC,CAAC,OAAOU,CAAC,EAAE,EAAE,EAAEN,EAAE,EAAE,GAAGH,EAAE,gBAAgB,IAAI,EAAEA,EAAE,WAAW,CAAC,EAAE,EAAEsC,GAAE,EAAEtC,CAAC,EAAE,GAAGE,EAAE,GAAaF,EAAE,YAAZ,QAAsB,GAAOI,EAAE,SAAN,EAAa,CAAC,IAAML,EAAEuC,GAAE,EAAE,OAAO,OAAO,OAAO,OAAO,CAAC,EAAEtC,CAAC,EAAE,CAAC,mBAAmB,GAAG,UAAUA,EAAE,UAAUA,EAAE,UAAUA,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAEC,EAAE,KAAK,CAAC,KAAK,WAAW,IAAI,KAAK,aAAaF,EAAE,GAAG,CAAC,CAAC,CAAC,MAAME,EAAE,KAAKuC,GAAEpC,EAAEJ,CAAC,CAAC,OAAOC,EAAE,KAAKwC,GAAErC,EAAEJ,CAAC,CAAC,EAAE,OAAOM,IAAIH,EAAEC,EAAE,QAASN,GAAG,CAACG,EAAE,KAAKuB,GAAE1B,EAAE,GAAGE,CAAC,CAAC,CAAC,CAAE,EAAEC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,OAAOA,EAAED,CAAC,CAAC,CAAC,UAAU,EAAED,EAAE,CAAC,IAAIC,EAAE,GAAG,QAAUC,KAAK,EAAE,IAAI,CAAC,IAAMH,EAAY,OAAOC,GAAjB,UAAoBA,GAAG,EAAEE,EAAE,KAAK,IAAKH,GAAG,CAACA,EAAE,QAAQC,CAAC,CAAE,EAAEE,EAAE,KAAK,OAAOA,EAAE,GAAG,CAAC,IAAI,OAAOD,GAAG,IAAIF,EAAE,CAAC,CAAC,IAAIA,EAAE,CAAC,CAAC,IAAI,MAAM,IAAI,WAAWE,GAAG,IAAIF,EAAE,CAAC,CAAC,IAAIA,EAAE,CAAC,CAAC,KAAKA,EAAE,CAAC,CAAC,IAAIA,EAAE,CAAC,CAAC,KAAKA,EAAE,CAAC,CAAC,IAAIA,EAAE,CAAC,CAAC,IAAI,MAAM,IAAI,SAASE,GAAG,IAAIF,EAAE,CAAC,CAAC,IAAIA,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAOE,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAMD,EAAE,EAAE,MAAM,CAAC,EAAEC,EAAE,EAAE,SAAS,KAAK,eAAeC,EAAE,CAAC,EAAE,QAAUH,KAAKC,EAAE,CAAC,IAAIA,EAAE,KAAK,OAAOD,EAAE,KAAK,CAAC,IAAI,OAAOC,EAAE,CAAC,EAAE,KAAK,UAAUD,CAAC,EAAE,OAAOE,EAAE,OAAO,YAAYA,EAAE,YAAY,KAAKqD,EAAE,EAAE,MAAM,IAAI,WAAWtD,EAAE,CAAC,EAAE,KAAK,UAAUD,CAAC,EAAE,OAAOuD,GAAG,YAAY,EAAE,KAAKrD,EAAE,MAAMqD,EAAE,EAAE,MAAM,IAAI,aAAatD,EAAE,KAAK,WAAWD,EAAEE,CAAC,CAAC,CAACD,GAAGE,EAAE,KAAKF,CAAC,CAAC,CAAC,OAAOE,CAAC,CAAC,WAAW,EAAEF,EAAE,CAAC,IAAIC,EAAED,EAAE,WAAW,OAAOC,EAAE,IAAIA,EAAED,EAAE,YAAY,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,OAAOA,EAAE,MAAMsD,GAAG,YAAYrD,EAAE,KAAKqD,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAQ,CAACvD,EAAEC,IAAQA,IAAJ,GAAgBD,EAAE,KAAX,MAAc,CAAC,CAAC,EAAOyD,GAAN,KAAQ,CAAjztB,MAAiztB,CAAAlD,EAAA,WAAC,YAAY,EAAEN,EAAE,CAAC,KAAK,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,WAAW,IAAI,EAAE,KAAK,IAAI,IAAIuD,GAAGvD,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAMA,EAAE,EAAE,MAAM,CAAC,EAAEC,EAAE,EAAE,SAAS,KAAK,kBAAkB,EAAEC,EAAE,KAAK,IAAIC,EAAE,EAAE,QAAQ,wBAAwB,QAAUI,KAAKP,EAAE,OAAOO,EAAE,KAAK,CAAC,IAAI,OAAOL,EAAE,KAAK,EAAEA,EAAE,YAAqBD,EAAE,SAAX,OAAkB,cAAcA,EAAE,OAAOC,EAAE,UAAUD,EAAE,YAAYA,EAAE,gBAAgBC,EAAE,YAAYD,EAAE,cAAc,EAAEA,EAAE,uBAAuBC,EAAE,eAAeD,EAAE,sBAAsB,KAAK,eAAeC,EAAEK,EAAEJ,CAAC,EAAED,EAAE,QAAQ,EAAE,MAAM,IAAI,WAAW,CAACA,EAAE,KAAK,EAAEA,EAAE,UAAUD,EAAE,MAAM,GAAG,IAAM,EAAY,EAAE,QAAZ,SAA+B,EAAE,QAAd,WAA8B,EAAE,QAAX,OAAiB,UAAU,UAAU,KAAK,eAAeC,EAAEK,EAAEJ,EAAE,CAAC,EAAED,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,aAAa,KAAK,WAAWA,EAAEK,EAAEN,CAAC,CAAC,CAAC,CAAC,WAAW,EAAED,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,WAAWC,EAAE,IAAIA,EAAED,EAAE,YAAY,GAAG,EAAE,KAAK,EAAEA,EAAE,cAAc,EAAE,YAAYA,EAAE,YAAY,EAAEA,EAAE,qBAAqB,EAAE,eAAeA,EAAE,oBAAoB,EAAE,YAAYA,EAAE,MAAM,GAAG,EAAE,UAAUC,EAAE,KAAK,eAAe,EAAEF,EAAEC,EAAE,uBAAuB,EAAE,EAAE,QAAQ,CAAC,CAAC,eAAe,EAAED,EAAEC,EAAEC,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,QAAUA,KAAKF,EAAE,IAAI,CAAC,IAAMA,EAAY,OAAOC,GAAjB,UAAoBA,GAAG,EAAEC,EAAE,KAAK,IAAKH,GAAG,CAACA,EAAE,QAAQE,CAAC,CAAE,EAAEC,EAAE,KAAK,OAAOA,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,OAAOF,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,WAAW,EAAE,cAAcA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,EAAE,OAAOA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,CAAcA,EAAE,OAAf,WAAoB,EAAE,KAAKE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,KAAK,GAAG,CAAC,mBAAmB,CAAC,OAAO,KAAK,IAAI,cAAc,CAAC,KAAK,EAAEF,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,IAAI,KAAK,EAAEP,EAAEC,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKI,CAAC,EAAEA,CAAC,CAAC,UAAU,EAAEP,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,IAAI,UAAU,EAAEP,EAAEC,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKI,CAAC,EAAEA,CAAC,CAAC,QAAQ,EAAEP,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,IAAI,QAAQ,EAAEP,EAAEC,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKI,CAAC,EAAEA,CAAC,CAAC,OAAO,EAAEP,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,OAAO,EAAEH,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,EAAEA,CAAC,CAAC,WAAW,EAAEH,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,WAAW,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,EAAEA,CAAC,CAAC,QAAQ,EAAED,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,QAAQ,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,EAAEA,CAAC,CAAC,IAAI,EAAED,EAAEC,EAAEC,EAAEC,EAAEI,EAAEH,EAAE,GAAGC,EAAE,CAAC,IAAM,EAAE,KAAK,IAAI,IAAI,EAAEL,EAAEC,EAAEC,EAAEC,EAAEI,EAAEH,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAEL,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,MAAM,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,EAAEA,CAAC,CAAC,KAAK,EAAED,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,KAAK,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,EAAEA,CAAC,CAAC,EAAOwD,GAAG,6BAAmCC,GAAN,KAAQ,CAAt2xB,MAAs2xB,CAAApD,EAAA,WAAC,YAAY,EAAEN,EAAE,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,IAAIuD,GAAGvD,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAMA,EAAE,EAAE,MAAM,CAAC,EAAEC,EAAE,EAAE,SAAS,KAAK,kBAAkB,EAAEC,EAAE,KAAK,IAAI,eAAe,OAAO,SAASC,EAAED,EAAE,gBAAgBuD,GAAG,GAAG,EAAElD,EAAE,EAAE,QAAQ,wBAAwB,QAAUH,KAAKJ,EAAE,CAAC,IAAIA,EAAE,KAAK,OAAOI,EAAE,KAAK,CAAC,IAAI,OAAOJ,EAAEE,EAAE,gBAAgBuD,GAAG,MAAM,EAAEzD,EAAE,aAAa,IAAI,KAAK,UAAUI,EAAEG,CAAC,CAAC,EAAEP,EAAE,aAAa,SAASC,EAAE,MAAM,EAAED,EAAE,aAAa,eAAeC,EAAE,YAAY,EAAE,EAAED,EAAE,aAAa,OAAO,MAAM,EAAEC,EAAE,gBAAgBD,EAAE,aAAa,mBAAmBC,EAAE,eAAe,KAAK,GAAG,EAAE,KAAK,CAAC,EAAEA,EAAE,sBAAsBD,EAAE,aAAa,oBAAoB,GAAGC,EAAE,oBAAoB,EAAE,EAAE,MAAM,IAAI,WAAWD,EAAEE,EAAE,gBAAgBuD,GAAG,MAAM,EAAEzD,EAAE,aAAa,IAAI,KAAK,UAAUI,EAAEG,CAAC,CAAC,EAAEP,EAAE,aAAa,SAAS,MAAM,EAAEA,EAAE,aAAa,eAAe,GAAG,EAAEA,EAAE,aAAa,OAAOC,EAAE,MAAM,EAAE,EAAY,EAAE,QAAZ,SAA+B,EAAE,QAAd,WAAqBD,EAAE,aAAa,YAAY,SAAS,EAAE,MAAM,IAAI,aAAaA,EAAE,KAAK,WAAWE,EAAEE,EAAEH,CAAC,CAAC,CAACD,GAAGG,EAAE,YAAYH,CAAC,CAAC,CAAC,OAAOG,CAAC,CAAC,WAAW,EAAEH,EAAEC,EAAE,CAAC,IAAIC,EAAED,EAAE,WAAWC,EAAE,IAAIA,EAAED,EAAE,YAAY,GAAG,IAAME,EAAE,EAAE,gBAAgBsD,GAAG,MAAM,EAAE,OAAOtD,EAAE,aAAa,IAAI,KAAK,UAAUH,EAAEC,EAAE,uBAAuB,CAAC,EAAEE,EAAE,aAAa,SAASF,EAAE,MAAM,EAAE,EAAEE,EAAE,aAAa,eAAeD,EAAE,EAAE,EAAEC,EAAE,aAAa,OAAO,MAAM,EAAEF,EAAE,cAAcE,EAAE,aAAa,mBAAmBF,EAAE,aAAa,KAAK,GAAG,EAAE,KAAK,CAAC,EAAEA,EAAE,oBAAoBE,EAAE,aAAa,oBAAoB,GAAGF,EAAE,kBAAkB,EAAE,EAAEE,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,KAAK,GAAG,CAAC,mBAAmB,CAAC,OAAO,KAAK,IAAI,cAAc,CAAC,UAAU,EAAEH,EAAE,CAAC,OAAO,KAAK,IAAI,UAAU,EAAEA,CAAC,CAAC,CAAC,KAAK,EAAEA,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,IAAI,KAAK,EAAEP,EAAEC,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKI,CAAC,CAAC,CAAC,UAAU,EAAEP,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,IAAI,UAAU,EAAEP,EAAEC,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKI,CAAC,CAAC,CAAC,QAAQ,EAAEP,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAMI,EAAE,KAAK,IAAI,QAAQ,EAAEP,EAAEC,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKI,CAAC,CAAC,CAAC,OAAO,EAAEP,EAAEC,EAAEC,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,OAAO,EAAEH,EAAEC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,CAAC,CAAC,WAAW,EAAEH,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,WAAW,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,CAAC,CAAC,QAAQ,EAAED,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,QAAQ,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,CAAC,CAAC,IAAI,EAAED,EAAEC,EAAEC,EAAEC,EAAEI,EAAEH,EAAE,GAAGC,EAAE,CAAC,IAAM,EAAE,KAAK,IAAI,IAAI,EAAEL,EAAEC,EAAEC,EAAEC,EAAEI,EAAEH,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,EAAEL,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,MAAM,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,CAAC,CAAC,KAAK,EAAED,EAAE,CAAC,IAAMC,EAAE,KAAK,IAAI,KAAK,EAAED,CAAC,EAAE,OAAO,KAAK,KAAKC,CAAC,CAAC,CAAC,EAAK0D,EAAG,CAAC,OAAOrD,EAAA,CAACP,EAAEC,IAAI,IAAIwD,GAAGzD,EAAEC,CAAC,EAAjB,UAAmB,IAAIM,EAAA,CAACP,EAAEC,IAAI,IAAI0D,GAAG3D,EAAEC,CAAC,EAAjB,OAAmB,UAAUM,EAAAP,GAAG,IAAIwD,GAAGxD,CAAC,EAAX,aAAa,QAAQO,EAAA,IAAIiD,GAAG,QAAQ,EAAf,UAAgB,ECA3k2B,IAAMK,GAAgBC,EAAA,CAACC,EAAMC,IAAU,CACrC,IAAIC,EAAIF,EAAK,EACTG,EAAIH,EAAK,EAITI,EAAKH,EAAM,EAAIC,EACfG,EAAKJ,EAAM,EAAIE,EACfG,EAAIN,EAAK,MAAQ,EACjBO,EAAIP,EAAK,OAAS,EAElBQ,EAAIC,EACR,OAAI,KAAK,IAAIJ,CAAE,EAAIC,EAAI,KAAK,IAAIF,CAAE,EAAIG,GAEhCF,EAAK,IACPE,EAAI,CAACA,GAEPC,EAAKH,IAAO,EAAI,EAAKE,EAAIH,EAAMC,EAC/BI,EAAKF,IAGDH,EAAK,IACPE,EAAI,CAACA,GAEPE,EAAKF,EACLG,EAAKL,IAAO,EAAI,EAAKE,EAAID,EAAMD,GAG1B,CAAE,EAAGF,EAAIM,EAAI,EAAGL,EAAIM,CAAG,CAChC,EA7BsB,iBA+BfC,GAAQZ,GCrBf,SAASa,GAAWC,EAAKC,EAAS,CAC5BA,GACFD,EAAI,KAAK,QAASC,CAAO,CAE7B,CAJSC,EAAAH,GAAA,cAUT,eAAeI,GAAaC,EAAM,CAChC,IAAMC,EAAKC,EAAO,SAAS,gBAAgB,6BAA8B,eAAe,CAAC,EACnFC,EAAMF,EAAG,OAAO,WAAW,EAE7BG,EAAQJ,EAAK,MACbA,EAAK,OAASK,GAASL,EAAK,KAAK,IACnCI,EAAQ,MAAME,GAAYN,EAAK,MAAM,QAAQO,GAAO,eAAgB;AAAA,CAAI,EAAGC,EAAU,CAAC,GAExF,IAAMC,EAAaT,EAAK,OAAS,YAAc,YAC/C,OAAAG,EAAI,KACF,gBACEM,EACA,MACCT,EAAK,WAAa,UAAYA,EAAK,WAAa,IAAM,IACvD,IACAI,EACA,SACJ,EAEAT,GAAWQ,EAAKH,EAAK,UAAU,EAC/BG,EAAI,MAAM,UAAW,cAAc,EACnCA,EAAI,MAAM,gBAAiB,KAAK,EAEhCA,EAAI,MAAM,cAAe,QAAQ,EACjCA,EAAI,KAAK,QAAS,8BAA8B,EACzCF,EAAG,KAAK,CACjB,CA1BeH,EAAAC,GAAA,gBAkCf,IAAMW,GAAcZ,EAAA,MAAOa,EAAaC,EAAOC,EAASC,IAAW,CACjE,IAAIC,EAAaJ,GAAe,GAKhC,GAJI,OAAOI,GAAe,WACxBA,EAAaA,EAAW,CAAC,GAGvBC,EAASR,EAAU,EAAE,UAAU,UAAU,EAAG,CAE9CO,EAAaA,EAAW,QAAQ,UAAW,QAAQ,EACnDE,EAAI,KAAK,aAAeF,CAAU,EAClC,IAAMf,EAAO,CACX,OAAAc,EACA,MAAOI,GAAeH,CAAU,EAAE,QAChC,uBACCI,GAAM,aAAaA,EAAE,QAAQ,IAAK,GAAG,CAAC,QACzC,EACA,WAAYP,GAAQA,EAAM,QAAQ,QAAS,QAAQ,CACrD,EAGA,OAFiB,MAAMb,GAAaC,CAAI,CAG1C,KAAO,CACL,IAAMoB,EAAW,SAAS,gBAAgB,6BAA8B,MAAM,EAC9EA,EAAS,aAAa,QAASR,EAAM,QAAQ,SAAU,OAAO,CAAC,EAC/D,IAAIS,EAAO,CAAC,EACR,OAAON,GAAe,SACxBM,EAAON,EAAW,MAAM,qBAAqB,EACpC,MAAM,QAAQA,CAAU,EACjCM,EAAON,EAEPM,EAAO,CAAC,EAGV,QAAWC,KAAOD,EAAM,CACtB,IAAME,EAAQ,SAAS,gBAAgB,6BAA8B,OAAO,EAC5EA,EAAM,eAAe,uCAAwC,YAAa,UAAU,EACpFA,EAAM,aAAa,KAAM,KAAK,EAC9BA,EAAM,aAAa,IAAK,GAAG,EACvBV,EACFU,EAAM,aAAa,QAAS,WAAW,EAEvCA,EAAM,aAAa,QAAS,KAAK,EAEnCA,EAAM,YAAcD,EAAI,KAAK,EAC7BF,EAAS,YAAYG,CAAK,CAC5B,CACA,OAAOH,CACT,CACF,EAhDoB,eAkDbI,GAAQd,GCxGR,IAAMe,EAAyBC,EAAA,CACpCC,EACAC,EACAC,EACAC,EACAC,IAEA,CACE,IACAJ,EAAII,EACJH,EACA,IACAD,EAAIE,EAAaE,EACjB,IACAA,EACAA,EACA,EACA,EACA,EACAJ,EAAIE,EACJD,EAAIG,EACJ,IACAH,EAAIE,EAAcC,EAClB,IACAA,EACAA,EACA,EACA,EACA,EACAJ,EAAIE,EAAaE,EACjBH,EAAIE,EACJ,IACAH,EAAII,EACJ,IACAA,EACAA,EACA,EACA,EACA,EACAJ,EACAC,EAAIE,EAAcC,EAClB,IACAH,EAAIG,EACJ,IACAA,EACAA,EACA,EACA,EACA,EACAJ,EAAII,EACJH,EACA,GACF,EAAE,KAAK,GAAG,EApD0B,0BCI/B,IAAMI,GAAiBC,EAACC,GAAkB,CAC/C,GAAM,CAAE,cAAAC,CAAc,EAAIC,EAAU,EACpC,MAAO,CACL,KAAMF,EACN,aAAc,IACd,WAAY,EACZ,WAAY,EACZ,UAAW,GACX,OAAQA,EACR,KAAMC,CACR,CACF,EAX8B,kBAajBE,GAAgBJ,EAACK,GAAe,CAK3C,IAAMC,EAAYC,GAAW,CAAC,GAAIF,EAAK,mBAAqB,CAAC,EAAI,GAAIA,EAAK,WAAa,CAAC,CAAE,CAAC,EAC3F,MAAO,CAAE,UAAAC,EAAW,YAAa,CAAC,GAAGA,CAAS,CAAE,CAClD,EAP6B,iBAShBC,GAAaP,EAACQ,GAAqB,CAC9C,IAAMC,EAAW,IAAI,IACrB,OAAAD,EAAO,QAASE,GAAU,CACxB,GAAM,CAACC,EAAKC,CAAK,EAAIF,EAAM,MAAM,GAAG,EACpCD,EAAS,IAAIE,EAAI,KAAK,EAAGC,GAAO,KAAK,CAAC,CACxC,CAAC,EACMH,CACT,EAP0B,cASbI,EAAgBb,EAACK,GAAe,CAC3C,GAAM,CAAE,YAAAS,CAAY,EAAIV,GAAcC,CAAI,EACpCU,EAAwB,CAAC,EACzBC,EAAuB,CAAC,EACxBC,EAAyB,CAAC,EAC1BC,EAA6B,CAAC,EAEpC,OAAAJ,EAAY,QAASJ,GAAU,CAC7B,IAAMC,EAAMD,EAAM,CAAC,EAEjBC,IAAQ,SACRA,IAAQ,aACRA,IAAQ,eACRA,IAAQ,eACRA,IAAQ,cACRA,IAAQ,mBACRA,IAAQ,cACRA,IAAQ,kBACRA,IAAQ,eACRA,IAAQ,kBACRA,IAAQ,gBACRA,IAAQ,eACRA,IAAQ,iBACRA,IAAQ,eACRA,IAAQ,aACRA,IAAQ,cACRA,IAAQ,iBACRA,IAAQ,UAERI,EAAY,KAAKL,EAAM,KAAK,GAAG,EAAI,aAAa,GAEhDM,EAAW,KAAKN,EAAM,KAAK,GAAG,EAAI,aAAa,EAC3CC,EAAI,SAAS,QAAQ,GACvBM,EAAa,KAAKP,EAAM,KAAK,GAAG,EAAI,aAAa,EAE/CC,IAAQ,QACVO,EAAiB,KAAKR,EAAM,KAAK,GAAG,EAAI,aAAa,EAG3D,CAAC,EAEM,CACL,YAAaK,EAAY,KAAK,GAAG,EACjC,WAAYC,EAAW,KAAK,GAAG,EAC/B,YAAAF,EACA,aAAAG,EACA,iBAAAC,CACF,CACF,EAhD6B,iBAoDhBC,EAAoBnB,EAAA,CAACK,EAAYe,IAAiB,CAC7D,GAAM,CAAE,eAAAC,EAAgB,cAAAnB,CAAc,EAAIC,EAAU,EAC9C,CAAE,WAAAmB,EAAY,QAAAC,CAAQ,EAAIF,EAC1B,CAAE,UAAAf,CAAU,EAAIF,GAAcC,CAAI,EAiBxC,OAde,OAAO,OACpB,CACE,UAAW,GACX,KAAMC,EAAU,IAAI,MAAM,GAAKiB,EAC/B,UAAW,UACX,WAAY,EACZ,WAAY,IACZ,OAAQjB,EAAU,IAAI,QAAQ,GAAKgB,EACnC,KAAMpB,EACN,YAAaI,EAAU,IAAI,cAAc,GAAG,QAAQ,KAAM,EAAE,GAAK,IACjE,aAAc,CAAC,EAAG,CAAC,CACrB,EACAc,CACF,CAEF,EArBiC,qBC3EjC,IAAMI,GAAOC,EAAA,MAAOC,EAAQC,IAAS,CACnCC,EAAI,KAAK,8BAA+BD,EAAK,GAAIA,CAAI,EACrD,IAAME,EAAaC,EAAU,EACvB,CAAE,eAAAC,EAAgB,cAAAC,CAAc,EAAIH,EACpC,CAAE,WAAAI,EAAY,cAAAC,CAAc,EAAIH,EAEhC,CAAE,YAAAI,EAAa,WAAAC,EAAY,aAAAC,EAAc,iBAAAC,CAAiB,EAAIC,EAAcZ,CAAI,EAGhFa,EAAWd,EACd,OAAO,GAAG,EACV,KAAK,QAAS,WAAaC,EAAK,UAAU,EAC1C,KAAK,KAAMA,EAAK,EAAE,EAClB,KAAK,YAAaA,EAAK,IAAI,EAExBc,EAAgBC,EAASb,EAAW,UAAU,UAAU,EAGxDc,EAAUH,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,gBAAgB,EAE7DI,EAAO,MAAMC,GAAWF,EAAShB,EAAK,MAAO,CACjD,MAAOA,EAAK,WACZ,cAAAc,EACA,OAAQ,EACV,CAAC,EAGGK,EAAOF,EAAK,QAAQ,EAExB,GAAIF,EAASb,EAAW,UAAU,UAAU,EAAG,CAC7C,IAAMkB,EAAMH,EAAK,SAAS,CAAC,EACrBI,EAAKC,EAAOL,CAAI,EACtBE,EAAOC,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC/B,CAEA,IAAMI,EAAQvB,EAAK,OAASmB,EAAK,MAAQnB,EAAK,QAAUmB,EAAK,MAAQnB,EAAK,QAAUA,EAAK,MACrFA,EAAK,OAASmB,EAAK,MAAQnB,EAAK,QAClCA,EAAK,MAAQuB,EAAQvB,EAAK,OAAS,EAAIA,EAAK,QAE5CA,EAAK,KAAO,CAACA,EAAK,QAGpB,IAAMwB,EAASxB,EAAK,OACdyB,EAAIzB,EAAK,EAAIuB,EAAQ,EACrBG,EAAI1B,EAAK,EAAIwB,EAAS,EAE5BvB,EAAI,MAAM,QAASD,EAAM,KAAK,UAAUA,CAAI,CAAC,EAC7C,IAAIH,EACJ,GAAIG,EAAK,OAAS,YAAa,CAE7B,IAAM2B,EAAKC,EAAM,IAAIf,CAAQ,EACvBgB,EAAUC,EAAkB9B,EAAM,CACtC,UAAW,GACX,KAAMM,EAEN,OAAQC,EACR,WAAY,EACZ,KAAMF,CACR,CAAC,EACK0B,EAAYJ,EAAG,KAAKK,EAAuBP,EAAGC,EAAGH,EAAOC,EAAQ,CAAC,EAAGK,CAAO,EACjFhC,EAAOgB,EAAS,OAAO,KACrBZ,EAAI,MAAM,wBAAyB8B,CAAS,EACrCA,GACN,cAAc,EAEjBlC,EAAK,OAAO,mBAAmB,EAAE,KAAK,QAASa,EAAa,KAAK,GAAG,CAAC,EACrEb,EAAK,OAAO,MAAM,EAAE,KAAK,QAASc,EAAiB,KAAK,GAAG,EAAE,QAAQ,OAAQ,QAAQ,CAAC,CACxF,MAEEd,EAAOgB,EAAS,OAAO,OAAQ,cAAc,EAE7ChB,EACG,KAAK,QAASY,CAAU,EACxB,KAAK,KAAMT,EAAK,EAAE,EAClB,KAAK,KAAMA,EAAK,EAAE,EAClB,KAAK,IAAKyB,CAAC,EACX,KAAK,IAAKC,CAAC,EACX,KAAK,QAASH,CAAK,EACnB,KAAK,SAAUC,CAAM,EAE1B,GAAM,CAAE,uBAAAS,CAAuB,EAAIC,GAAwBhC,CAAU,EAOrE,GANAc,EAAQ,KACN,YAEA,aAAahB,EAAK,EAAImB,EAAK,MAAQ,CAAC,KAAKnB,EAAK,EAAIA,EAAK,OAAS,EAAIiC,CAAsB,GAC5F,EAEIzB,EAAa,CACf,IAAM2B,EAAOnB,EAAQ,OAAO,MAAM,EAC9BmB,GACFA,EAAK,KAAK,QAAS3B,CAAW,CAElC,CAGA,IAAM4B,EAAUvC,EAAK,KAAK,EAAE,QAAQ,EACpC,OAAAG,EAAK,QAAU,EACfA,EAAK,MAAQoC,EAAQ,MACrBpC,EAAK,OAASoC,EAAQ,OAEtBpC,EAAK,QAAUmB,EAAK,OAASnB,EAAK,QAAU,EAE5CA,EAAK,UAAY,SAAUqC,EAAO,CAChC,OAAOC,GAActC,EAAMqC,CAAK,CAClC,EAEO,CAAE,QAASxB,EAAU,UAAWM,CAAK,CAC9C,EA7Ga,QAsHPoB,GAAYzC,EAAA,CAACC,EAAQC,IAAS,CAElC,IAAMa,EAAWd,EAAO,OAAO,GAAG,EAAE,KAAK,QAAS,cAAc,EAAE,KAAK,KAAMC,EAAK,EAAE,EAG9EH,EAAOgB,EAAS,OAAO,OAAQ,cAAc,EAE7C2B,EAAU,EAAIxC,EAAK,QACnByC,EAAcD,EAAU,EAG9B3C,EACG,KAAK,KAAMG,EAAK,EAAE,EAClB,KAAK,KAAMA,EAAK,EAAE,EAClB,KAAK,IAAKA,EAAK,EAAIA,EAAK,MAAQ,EAAIyC,CAAW,EAC/C,KAAK,IAAKzC,EAAK,EAAIA,EAAK,OAAS,EAAIyC,CAAW,EAChD,KAAK,QAASzC,EAAK,MAAQwC,CAAO,EAClC,KAAK,SAAUxC,EAAK,OAASwC,CAAO,EACpC,KAAK,OAAQ,MAAM,EAEtB,IAAMJ,EAAUvC,EAAK,KAAK,EAAE,QAAQ,EACpC,OAAAG,EAAK,MAAQoC,EAAQ,MACrBpC,EAAK,OAASoC,EAAQ,OAEtBpC,EAAK,UAAY,SAAUqC,EAAO,CAChC,OAAOC,GAActC,EAAMqC,CAAK,CAClC,EAEO,CAAE,QAASxB,EAAU,UAAW,CAAE,MAAO,EAAG,OAAQ,CAAE,CAAE,CACjE,EA7BkB,aA+BZ6B,GAAmB5C,EAAA,MAAOC,EAAQC,IAAS,CAC/C,IAAME,EAAaC,EAAU,EAEvB,CAAE,eAAAC,EAAgB,cAAAC,CAAc,EAAIH,EACpC,CAAE,cAAAyC,EAAe,oBAAAC,EAAqB,yBAAAC,EAA0B,WAAAC,CAAW,EAC/E1C,EAGIS,EAAWd,EACd,OAAO,GAAG,EACV,KAAK,QAASC,EAAK,UAAU,EAC7B,KAAK,KAAMA,EAAK,EAAE,EAClB,KAAK,UAAWA,EAAK,EAAE,EACvB,KAAK,YAAaA,EAAK,IAAI,EAGxB+C,EAAalC,EAAS,OAAO,IAAK,cAAc,EAGhDmC,EAAQnC,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,eAAe,EAC5DoC,EAAYpC,EAAS,OAAO,MAAM,EAEhCI,EAAO+B,EACV,KAAK,EACL,YAAY,MAAME,GAAYlD,EAAK,MAAOA,EAAK,WAAY,OAAW,EAAI,CAAC,EAG1EmB,EAAOF,EAAK,QAAQ,EAExB,GAAIF,EAASb,EAAW,UAAU,UAAU,EAAG,CAC7C,IAAMkB,EAAMH,EAAK,SAAS,CAAC,EACrBI,EAAKC,EAAOL,CAAI,EACtBE,EAAOC,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC/B,CAGA,IAAMqB,EAAU,EAAIxC,EAAK,QACnByC,EAAcD,EAAU,EAExBjB,GACHvB,EAAK,OAASmB,EAAK,MAAQnB,EAAK,QAAUmB,EAAK,MAAQnB,EAAK,QAAUA,EAAK,OAASwC,EACnFxC,EAAK,OAASmB,EAAK,MAAQnB,EAAK,QAClCA,EAAK,MAAQuB,EAAQvB,EAAK,OAAS,EAAIA,EAAK,QAE5CA,EAAK,KAAO,CAACA,EAAK,QAGpB,IAAMwB,EAASxB,EAAK,OAASwC,EAEvBW,EAAcnD,EAAK,OAASwC,EAAUrB,EAAK,OAAS,EACpDM,EAAIzB,EAAK,EAAIuB,EAAQ,EACrBG,EAAI1B,EAAK,EAAIwB,EAAS,EAC5BxB,EAAK,MAAQuB,EACb,IAAM6B,EAASpD,EAAK,EAAIA,EAAK,OAAS,EAAIyC,EAActB,EAAK,OAAS,EAGlEtB,EACJ,GAAIG,EAAK,OAAS,YAAa,CAC7B,IAAMqD,EAAQrD,EAAK,WAAW,SAAS,0BAA0B,EAC3D2B,EAAKC,EAAM,IAAIf,CAAQ,EACvByC,EACJtD,EAAK,IAAMA,EAAK,GACZ2B,EAAG,KAAKK,EAAuBP,EAAGC,EAAGH,EAAOC,EAAQ,EAAE,EAAG,CACvD,UAAW,GACX,KAAMqB,EACN,UAAW,QACX,OAAQC,EACR,KAAMzC,CACR,CAAC,EACDsB,EAAG,UAAUF,EAAGC,EAAGH,EAAOC,EAAQ,CAAE,KAAMnB,CAAc,CAAC,EAE/DR,EAAOgB,EAAS,OAAO,IAAMyC,EAAgB,cAAc,EAC3D,IAAMC,EAAiB5B,EAAG,UAAUF,EAAG2B,EAAQ7B,EAAO4B,EAAa,CACjE,KAAME,EAAQV,EAAgBC,EAC9B,UAAWS,EAAQ,UAAY,QAC/B,OAAQP,EACR,KAAMzC,CACR,CAAC,EAEDR,EAAOgB,EAAS,OAAO,IAAMyC,EAAgB,cAAc,EAC3DL,EAAYpC,EAAS,OAAO,IAAM0C,CAAc,CAClD,MACE1D,EAAOkD,EAAW,OAAO,OAAQ,cAAc,EAI/ClD,EACG,KAAK,QAJe,OAIQ,EAC5B,KAAK,IAAK4B,CAAC,EACX,KAAK,IAAKC,CAAC,EACX,KAAK,QAASH,CAAK,EACnB,KAAK,SAAUC,CAAM,EACrB,KAAK,YAAaxB,EAAK,IAAI,EAC9BiD,EACG,KAAK,QAAS,OAAO,EACrB,KAAK,IAAKxB,CAAC,EACX,KAAK,IAAK2B,CAAM,EAChB,KAAK,QAAS7B,CAAK,EACnB,KAAK,SAAU4B,CAAW,EAG/BH,EAAM,KACJ,YACA,aAAahD,EAAK,EAAImB,EAAK,MAAQ,CAAC,KAAKO,EAAI,GAAKX,EAASb,EAAW,UAAU,UAAU,EAAI,EAAI,EAAE,GACtG,EAEA,IAAMkC,EAAUvC,EAAK,KAAK,EAAE,QAAQ,EACpC,OAAAG,EAAK,OAASoC,EAAQ,OACtBpC,EAAK,QAAU,EAEfA,EAAK,QAAUmB,EAAK,OAASnB,EAAK,QAAU,EAC5CA,EAAK,UAAYmB,EAEjBnB,EAAK,UAAY,SAAUqC,EAAO,CAChC,OAAOC,GAActC,EAAMqC,CAAK,CAClC,EAEO,CAAE,QAASxB,EAAU,UAAWM,CAAK,CAC9C,EAxHyB,oBAyHnBqC,GAAgB1D,EAAA,MAAOC,EAAQC,IAAS,CAC5CC,EAAI,KAAK,8BAA+BD,EAAK,GAAIA,CAAI,EACrD,IAAME,EAAaC,EAAU,EACvB,CAAE,eAAAC,EAAgB,cAAAC,CAAc,EAAIH,EACpC,CAAE,WAAAI,EAAY,cAAAC,CAAc,EAAIH,EAEhC,CAAE,YAAAI,EAAa,WAAAC,EAAY,aAAAC,EAAc,iBAAAC,CAAiB,EAAIC,EAAcZ,CAAI,EAGhFa,EAAWd,EACd,OAAO,GAAG,EACV,KAAK,QAAS,WAAaC,EAAK,UAAU,EAC1C,KAAK,KAAMA,EAAK,EAAE,EAClB,KAAK,YAAaA,EAAK,IAAI,EAExBc,EAAgBC,EAASb,EAAW,UAAU,UAAU,EAGxDc,EAAUH,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,gBAAgB,EAE7DI,EAAO,MAAMC,GAAWF,EAAShB,EAAK,MAAO,CACjD,MAAOA,EAAK,WACZ,cAAAc,EACA,OAAQ,GACR,MAAOd,EAAK,KACd,CAAC,EAGGmB,EAAOF,EAAK,QAAQ,EAExB,GAAIF,EAASb,EAAW,UAAU,UAAU,EAAG,CAC7C,IAAMkB,EAAMH,EAAK,SAAS,CAAC,EACrBI,EAAKC,EAAOL,CAAI,EACtBE,EAAOC,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASF,EAAK,KAAK,EAC3BE,EAAG,KAAK,SAAUF,EAAK,MAAM,CAC/B,CAEA,IAAMI,EAAQvB,EAAK,OAASmB,EAAK,MAAQnB,EAAK,QAAUmB,EAAK,MAAQnB,EAAK,QAAUA,EAAK,MACrFA,EAAK,OAASmB,EAAK,MAAQnB,EAAK,QAClCA,EAAK,MAAQuB,EAAQvB,EAAK,OAAS,EAAIA,EAAK,QAE5CA,EAAK,KAAO,CAACA,EAAK,QAGpB,IAAMwB,EAASxB,EAAK,OACdyB,EAAIzB,EAAK,EAAIuB,EAAQ,EACrBG,EAAI1B,EAAK,EAAIwB,EAAS,EAE5BvB,EAAI,MAAM,QAASD,EAAM,KAAK,UAAUA,CAAI,CAAC,EAC7C,IAAIH,EACJ,GAAIG,EAAK,OAAS,YAAa,CAE7B,IAAM2B,EAAKC,EAAM,IAAIf,CAAQ,EACvBgB,EAAUC,EAAkB9B,EAAM,CACtC,UAAW,GACX,KAAMM,EAEN,OAAQC,EACR,WAAY,EACZ,KAAMF,CACR,CAAC,EACK0B,EAAYJ,EAAG,KAAKK,EAAuBP,EAAGC,EAAGH,EAAOC,EAAQxB,EAAK,EAAE,EAAG6B,CAAO,EACvFhC,EAAOgB,EAAS,OAAO,KACrBZ,EAAI,MAAM,wBAAyB8B,CAAS,EACrCA,GACN,cAAc,EAEjBlC,EAAK,OAAO,mBAAmB,EAAE,KAAK,QAASa,EAAa,KAAK,GAAG,CAAC,EACrEb,EAAK,OAAO,MAAM,EAAE,KAAK,QAASc,EAAiB,KAAK,GAAG,EAAE,QAAQ,OAAQ,QAAQ,CAAC,CACxF,MAEEd,EAAOgB,EAAS,OAAO,OAAQ,cAAc,EAE7ChB,EACG,KAAK,QAASY,CAAU,EACxB,KAAK,KAAMT,EAAK,EAAE,EAClB,KAAK,KAAMA,EAAK,EAAE,EAClB,KAAK,IAAKyB,CAAC,EACX,KAAK,IAAKC,CAAC,EACX,KAAK,QAASH,CAAK,EACnB,KAAK,SAAUC,CAAM,EAE1B,GAAM,CAAE,uBAAAS,CAAuB,EAAIC,GAAwBhC,CAAU,EAOrE,GANAc,EAAQ,KACN,YAEA,aAAahB,EAAK,EAAImB,EAAK,MAAQ,CAAC,KAAKnB,EAAK,EAAIA,EAAK,OAAS,EAAIiC,CAAsB,GAC5F,EAEIzB,EAAa,CACf,IAAM2B,EAAOnB,EAAQ,OAAO,MAAM,EAC9BmB,GACFA,EAAK,KAAK,QAAS3B,CAAW,CAElC,CAGA,IAAM4B,EAAUvC,EAAK,KAAK,EAAE,QAAQ,EACpC,OAAAG,EAAK,QAAU,EACfA,EAAK,MAAQoC,EAAQ,MACrBpC,EAAK,OAASoC,EAAQ,OAEtBpC,EAAK,QAAUmB,EAAK,OAASnB,EAAK,QAAU,EAE5CA,EAAK,UAAY,SAAUqC,EAAO,CAChC,OAAOC,GAActC,EAAMqC,CAAK,CAClC,EAEO,CAAE,QAASxB,EAAU,UAAWM,CAAK,CAC9C,EA9GsB,iBA+GhBsC,GAAU3D,EAAA,CAACC,EAAQC,IAAS,CAChC,IAAME,EAAaC,EAAU,EAEvB,CAAE,eAAAC,EAAgB,cAAAC,CAAc,EAAIH,EACpC,CAAE,WAAA4C,CAAW,EAAI1C,EAGjBS,EAAWd,EACd,OAAO,GAAG,EACV,KAAK,QAASC,EAAK,UAAU,EAC7B,KAAK,KAAMA,EAAK,EAAE,EAClB,KAAK,YAAaA,EAAK,IAAI,EAGxB+C,EAAalC,EAAS,OAAO,IAAK,cAAc,EAEhD2B,EAAU,EAAIxC,EAAK,QAEnBuB,EAAQvB,EAAK,MAAQwC,EAE3BxC,EAAK,KAAO,CAACA,EAAK,QAElB,IAAMwB,EAASxB,EAAK,OAASwC,EAEvBf,EAAIzB,EAAK,EAAIuB,EAAQ,EACrBG,EAAI1B,EAAK,EAAIwB,EAAS,EAC5BxB,EAAK,MAAQuB,EAGb,IAAI1B,EACJ,GAAIG,EAAK,OAAS,YAAa,CAE7B,IAAMsD,EADK1B,EAAM,IAAIf,CAAQ,EACH,UAAUY,EAAGC,EAAGH,EAAOC,EAAQ,CACvD,KAAM,YACN,UAAW,GACX,eAAgB,CAAC,CAAC,EAClB,OAAQsB,EACR,KAAMzC,CACR,CAAC,EAEDR,EAAOgB,EAAS,OAAO,IAAMyC,EAAgB,cAAc,CAC7D,MACEzD,EAAOkD,EAAW,OAAO,OAAQ,cAAc,EAI/ClD,EACG,KAAK,QAJe,SAIQ,EAC5B,KAAK,IAAK4B,CAAC,EACX,KAAK,IAAKC,CAAC,EACX,KAAK,QAASH,CAAK,EACnB,KAAK,SAAUC,CAAM,EACrB,KAAK,YAAaxB,EAAK,IAAI,EAGhC,IAAMoC,EAAUvC,EAAK,KAAK,EAAE,QAAQ,EACpC,OAAAG,EAAK,OAASoC,EAAQ,OACtBpC,EAAK,QAAU,EAEfA,EAAK,QAAU,EAEfA,EAAK,UAAY,SAAUqC,EAAO,CAChC,OAAOC,GAActC,EAAMqC,CAAK,CAClC,EAEO,CAAE,QAASxB,EAAU,UAAW,CAAC,CAAE,CAC5C,EAlEgB,WAoEV6C,GAAa7D,GACb8D,GAAS,CACb,KAAA9D,GACA,WAAA6D,GACA,iBAAAhB,GACA,UAAAH,GACA,QAAAkB,GACA,cAAAD,EACF,EAEII,GAAe,IAAI,IASVC,GAAgB/D,EAAA,MAAOgE,EAAM9D,IAAS,CACjD,IAAM+D,EAAQ/D,EAAK,OAAS,OACtBgE,EAAU,MAAML,GAAOI,CAAK,EAAED,EAAM9D,CAAI,EAC9C,OAAA4D,GAAa,IAAI5D,EAAK,GAAIgE,CAAO,EAC1BA,CACT,EAL6B,iBAetB,IAAMC,GAAQC,EAAA,IAAM,CACzBC,GAAe,IAAI,GACrB,EAFqB,SC/erB,SAASC,GAAcC,EAAMC,EAAO,CAClC,OAAOD,EAAK,UAAUC,CAAK,CAC7B,CAFSC,EAAAH,GAAA,iBAIT,IAAOI,GAAQJ,GCJf,SAASK,GAAiBC,EAAMC,EAAIC,EAAIC,EAAO,CAG7C,IAAIC,EAAKJ,EAAK,EACVK,EAAKL,EAAK,EAEVM,EAAKF,EAAKD,EAAM,EAChBI,EAAKF,EAAKF,EAAM,EAEhBK,EAAM,KAAK,KAAKP,EAAKA,EAAKM,EAAKA,EAAKL,EAAKA,EAAKI,EAAKA,CAAE,EAErDG,EAAK,KAAK,IAAKR,EAAKC,EAAKI,EAAME,CAAG,EAClCL,EAAM,EAAIC,IACZK,EAAK,CAACA,GAER,IAAIC,EAAK,KAAK,IAAKT,EAAKC,EAAKK,EAAMC,CAAG,EACtC,OAAIL,EAAM,EAAIE,IACZK,EAAK,CAACA,GAGD,CAAE,EAAGN,EAAKK,EAAI,EAAGJ,EAAKK,CAAG,CAClC,CArBSC,EAAAZ,GAAA,oBAuBT,IAAOa,GAAQb,GCrBf,SAASc,GAAgBC,EAAMC,EAAIC,EAAO,CACxC,OAAOC,GAAiBH,EAAMC,EAAIA,EAAIC,CAAK,CAC7C,CAFSE,EAAAL,GAAA,mBAIT,IAAOM,GAAQN,GCHf,SAASO,GAAcC,EAAIC,EAAIC,EAAIC,EAAI,CAIrC,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACpBC,EAAIC,EAAIC,EAAIC,EACZC,EAAOC,EAAQC,EACfC,EAAGC,EAcP,GAVAd,EAAKH,EAAG,EAAID,EAAG,EACfM,EAAKN,EAAG,EAAIC,EAAG,EACfO,EAAKP,EAAG,EAAID,EAAG,EAAIA,EAAG,EAAIC,EAAG,EAG7BW,EAAKR,EAAKF,EAAG,EAAII,EAAKJ,EAAG,EAAIM,EAC7BK,EAAKT,EAAKD,EAAG,EAAIG,EAAKH,EAAG,EAAIK,EAIzB,EAAAI,IAAO,GAAKC,IAAO,GAAKM,GAASP,EAAIC,CAAE,KAK3CR,EAAKF,EAAG,EAAID,EAAG,EACfK,EAAKL,EAAG,EAAIC,EAAG,EACfM,EAAKN,EAAG,EAAID,EAAG,EAAIA,EAAG,EAAIC,EAAG,EAG7BO,EAAKL,EAAKL,EAAG,EAAIO,EAAKP,EAAG,EAAIS,EAC7BE,EAAKN,EAAKJ,EAAG,EAAIM,EAAKN,EAAG,EAAIQ,EAKzB,EAAAC,IAAO,GAAKC,IAAO,GAAKQ,GAAST,EAAIC,CAAE,KAK3CG,EAAQV,EAAKG,EAAKF,EAAKC,EACnBQ,IAAU,IAId,OAAAC,EAAS,KAAK,IAAID,EAAQ,CAAC,EAK3BE,EAAMV,EAAKG,EAAKF,EAAKC,EACrBS,EAAID,EAAM,GAAKA,EAAMD,GAAUD,GAASE,EAAMD,GAAUD,EAExDE,EAAMX,EAAKG,EAAKJ,EAAKK,EACrBS,EAAIF,EAAM,GAAKA,EAAMD,GAAUD,GAASE,EAAMD,GAAUD,EAEjD,CAAE,EAAGG,EAAG,EAAGC,CAAE,CACtB,CA3DSE,EAAArB,GAAA,iBA6DT,SAASoB,GAAST,EAAIC,EAAI,CACxB,OAAOD,EAAKC,EAAK,CACnB,CAFSS,EAAAD,GAAA,YAIT,IAAOE,GAAQtB,GC9Df,SAASuB,GAAiBC,EAAMC,EAAYC,EAAO,CACjD,IAAIC,EAAKH,EAAK,EACVI,EAAKJ,EAAK,EAEVK,EAAgB,CAAC,EAEjBC,EAAO,OAAO,kBACdC,EAAO,OAAO,kBACd,OAAON,EAAW,SAAY,WAChCA,EAAW,QAAQ,SAAUO,EAAO,CAClCF,EAAO,KAAK,IAAIA,EAAME,EAAM,CAAC,EAC7BD,EAAO,KAAK,IAAIA,EAAMC,EAAM,CAAC,CAC/B,CAAC,GAEDF,EAAO,KAAK,IAAIA,EAAML,EAAW,CAAC,EAClCM,EAAO,KAAK,IAAIA,EAAMN,EAAW,CAAC,GAGpC,IAAIQ,EAAON,EAAKH,EAAK,MAAQ,EAAIM,EAC7BI,EAAMN,EAAKJ,EAAK,OAAS,EAAIO,EAEjC,QAASI,EAAI,EAAGA,EAAIV,EAAW,OAAQU,IAAK,CAC1C,IAAIC,EAAKX,EAAWU,CAAC,EACjBE,EAAKZ,EAAWU,EAAIV,EAAW,OAAS,EAAIU,EAAI,EAAI,CAAC,EACrDG,EAAYC,GACdf,EACAE,EACA,CAAE,EAAGO,EAAOG,EAAG,EAAG,EAAGF,EAAME,EAAG,CAAE,EAChC,CAAE,EAAGH,EAAOI,EAAG,EAAG,EAAGH,EAAMG,EAAG,CAAE,CAClC,EACIC,GACFT,EAAc,KAAKS,CAAS,CAEhC,CAEA,OAAKT,EAAc,QAIfA,EAAc,OAAS,GAEzBA,EAAc,KAAK,SAAUW,EAAGC,EAAG,CACjC,IAAIC,EAAMF,EAAE,EAAId,EAAM,EAClBiB,EAAMH,EAAE,EAAId,EAAM,EAClBkB,EAAQ,KAAK,KAAKF,EAAMA,EAAMC,EAAMA,CAAG,EAEvCE,EAAMJ,EAAE,EAAIf,EAAM,EAClBoB,EAAML,EAAE,EAAIf,EAAM,EAClBqB,EAAQ,KAAK,KAAKF,EAAMA,EAAMC,EAAMA,CAAG,EAE3C,OAAOF,EAAQG,EAAQ,GAAKH,IAAUG,EAAQ,EAAI,CACpD,CAAC,EAEIlB,EAAc,CAAC,GAjBbL,CAkBX,CAtDSwB,EAAAzB,GAAA,oBAwDT,IAAO0B,GAAQ1B,GCpDf,IAAO2B,EAAQ,CACb,KAAAC,GACA,OAAAC,GACA,QAAAC,GACA,QAAAC,GACA,KAAAC,EACF,ECPO,SAASC,GAAqCC,EAAwBC,EAAY,CACvF,GAAM,CAAE,YAAAC,CAAY,EAAIC,EAAcF,CAAI,EAC1CA,EAAK,WAAaC,EAClB,IAAME,EAAUC,EAAeJ,CAAI,EAC/BK,EAAaF,EACZA,IACHE,EAAa,UAEf,IAAMC,EAAWP,EACd,OAAO,GAAG,EACV,KAAK,QAASM,CAAU,EACxB,KAAK,KAAML,EAAK,OAASA,EAAK,EAAE,EAE7BO,EAAS,EAET,CAAE,UAAAC,CAAU,EAAIR,EAGhBS,EAAKC,EAAM,IAAIJ,CAAQ,EACvBK,EAAUC,EAAkBZ,EAAM,CAAE,KAAM,QAAS,OAAQ,OAAQ,UAAW,OAAQ,CAAC,EAEzFA,EAAK,OAAS,cAChBW,EAAQ,UAAY,GAEtB,IAAME,EAAYJ,EAAG,OAAO,EAAG,EAAGF,EAAS,EAAGI,CAAO,EAC/CG,EAAaR,EAAS,OAAO,IAAMO,EAAW,cAAc,EAClE,OAAAC,EAAW,KAAK,QAAS,QAAQ,EAAE,KAAK,QAASC,EAAoBP,CAAS,CAAC,EAE/EQ,EAAiBhB,EAAMc,CAAU,EAEjCd,EAAK,UAAY,SAAUiB,EAAO,CAChC,OAAAC,EAAI,KAAK,mBAAoBlB,EAAMO,EAAQU,CAAK,EACzCE,EAAU,OAAOnB,EAAMO,EAAQU,CAAK,CAC7C,EAEOX,CACT,CApCgBc,EAAAtB,GAAA,UCFhB,SAASuB,GACPC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,CAGA,IAAMC,GAAQP,EAAKE,GAAM,EACnBM,GAAQP,EAAKE,GAAM,EAGnBM,EAAQ,KAAK,MAAMN,EAAKF,EAAIC,EAAKF,CAAE,EAGnCU,GAAMR,EAAKF,GAAM,EACjBW,GAAMR,EAAKF,GAAM,EAGjBW,EAAeF,EAAKN,EACpBS,EAAeF,EAAKN,EAGpBS,EAAW,KAAK,KAAKF,GAAgB,EAAIC,GAAgB,CAAC,EAGhE,GAAIC,EAAW,EACb,MAAM,IAAI,MAAM,oEAAoE,EAItF,IAAMC,EAAuB,KAAK,KAAK,EAAID,GAAY,CAAC,EAGlDE,EAAUT,EAAOQ,EAAuBV,EAAK,KAAK,IAAII,CAAK,GAAKH,EAAY,GAAK,GACjFW,EAAUT,EAAOO,EAAuBX,EAAK,KAAK,IAAIK,CAAK,GAAKH,EAAY,GAAK,GAGjFY,EAAa,KAAK,OAAOjB,EAAKgB,GAAWZ,GAAKL,EAAKgB,GAAWZ,CAAE,EAIlEe,EAHa,KAAK,OAAOhB,EAAKc,GAAWZ,GAAKH,EAAKc,GAAWZ,CAAE,EAGxCc,EACxBZ,GAAaa,EAAa,IAC5BA,GAAc,EAAI,KAAK,IAErB,CAACb,GAAaa,EAAa,IAC7BA,GAAc,EAAI,KAAK,IAIzB,IAAMC,EAAS,CAAC,EAChB,QAASC,EAAI,EAAGA,EAAI,GAAWA,IAAK,CAClC,IAAMC,EAAID,EAAK,GACTZ,EAAQS,EAAaI,EAAIH,EACzBI,EAAIP,EAAUZ,EAAK,KAAK,IAAIK,CAAK,EACjCe,EAAIP,EAAUZ,EAAK,KAAK,IAAII,CAAK,EACvCW,EAAO,KAAK,CAAE,EAAAG,EAAG,EAAAC,CAAE,CAAC,CACtB,CAEA,OAAOJ,CACT,CAhESK,EAAA1B,GAAA,qBAkET,eAAsB2B,GAAyCC,EAAwBC,EAAY,CACjG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EACzEQ,EAAIH,EAAK,MAAQL,EAAK,QAAU,GAChCS,EAAIJ,EAAK,OAASL,EAAK,QAEvBvB,EAAKgC,EAAI,EACTjC,EAAKC,GAAM,IAAMgC,EAAI,IAGrB,CAAE,UAAAC,CAAU,EAAIV,EAEhBR,EAAS,CACb,CAAE,EAAGgB,EAAI,EAAG,EAAG,CAACC,EAAI,CAAE,EACtB,CAAE,EAAG,CAACD,EAAI,EAAG,EAAG,CAACC,EAAI,CAAE,EACvB,GAAGtC,GAAkB,CAACqC,EAAI,EAAG,CAACC,EAAI,EAAG,CAACD,EAAI,EAAGC,EAAI,EAAGjC,EAAIC,EAAI,EAAK,EACjE,CAAE,EAAG+B,EAAI,EAAG,EAAGC,EAAI,CAAE,EACrB,GAAGtC,GAAkBqC,EAAI,EAAGC,EAAI,EAAGD,EAAI,EAAG,CAACC,EAAI,EAAGjC,EAAIC,EAAI,EAAI,CAChE,EAGMkC,EAAKC,EAAM,IAAIR,CAAQ,EACvBS,EAAUC,EAAkBd,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBa,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAEtB,IAAME,EAAiBC,EAAqBxB,CAAM,EAC5CyB,EAAsBN,EAAG,KAAKI,EAAgBF,CAAO,EACrDK,EAAkBd,EAAS,OAAO,IAAMa,EAAqB,cAAc,EAEjF,OAAAC,EAAgB,KAAK,QAAS,uBAAuB,EAEjDR,GAAaV,EAAK,OAAS,aAC7BkB,EAAgB,UAAU,MAAM,EAAE,KAAK,QAASR,CAAS,EAGvDR,GAAcF,EAAK,OAAS,aAC9BkB,EAAgB,UAAU,MAAM,EAAE,KAAK,QAAShB,CAAU,EAG5DgB,EAAgB,KAAK,YAAa,aAAa1C,EAAK,CAAC,MAAM,EAE3D2C,EAAiBnB,EAAMkB,CAAe,EAEtClB,EAAK,UAAY,SAAUoB,EAAO,CAEhC,OADYC,EAAU,QAAQrB,EAAMR,EAAQ4B,CAAK,CAEnD,EAEOhB,CACT,CArDsBP,EAAAC,GAAA,cCvEf,SAASwB,EACdC,EACAC,EACAC,EACAC,EACA,CACA,OAAOH,EACJ,OAAO,UAAW,cAAc,EAChC,KACC,SACAG,EACG,IAAI,SAAUC,EAAG,CAChB,OAAOA,EAAE,EAAI,IAAMA,EAAE,CACvB,CAAC,EACA,KAAK,GAAG,CACb,EACC,KAAK,QAAS,iBAAiB,EAC/B,KAAK,YAAa,aAAe,CAACH,EAAI,EAAI,IAAMC,EAAI,EAAI,GAAG,CAChE,CAlBgBG,EAAAN,EAAA,sBCchB,eAAsBO,GAAmCC,EAAwBC,EAAY,CAC3F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAIH,EAAK,OAASL,EAAK,QACvBS,EAAU,GACVC,EAAIL,EAAK,MAAQL,EAAK,QAAUS,EAChCE,EAAO,EACPC,EAAQF,EACRG,EAAM,CAACL,EACPM,EAAS,EACTC,EAAS,CACb,CAAE,EAAGJ,EAAOF,EAAS,EAAGI,CAAI,EAC5B,CAAE,EAAGD,EAAO,EAAGC,CAAI,EACnB,CAAE,EAAGD,EAAO,EAAGE,CAAO,EACtB,CAAE,EAAGH,EAAM,EAAGG,CAAO,EACrB,CAAE,EAAGH,EAAM,EAAGE,EAAMJ,CAAQ,EAC5B,CAAE,EAAGE,EAAOF,EAAS,EAAGI,CAAI,CAC9B,EAEIG,EACE,CAAE,UAAAC,CAAU,EAAIjB,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMkB,EAAKC,EAAM,IAAIf,CAAQ,EACvBgB,EAAUC,EAAkBrB,EAAM,CAAC,CAAC,EACpCsB,EAAWC,EAAqBR,CAAM,EACtCS,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAUZ,EACP,OAAO,IAAMoB,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACd,EAAI,CAAC,KAAKF,EAAI,CAAC,GAAG,EAEjDS,GACFD,EAAQ,KAAK,QAASC,CAAS,CAEnC,MACED,EAAUS,EAAmBrB,EAAUM,EAAGF,EAAGO,CAAM,EAGrD,OAAIb,GACFc,EAAQ,KAAK,QAASd,CAAU,EAGlCwB,EAAiB1B,EAAMgB,CAAO,EAE9BhB,EAAK,UAAY,SAAU2B,EAAO,CAChC,OAAOC,EAAU,QAAQ5B,EAAMe,EAAQY,CAAK,CAC9C,EAEOvB,CACT,CArDsByB,EAAA/B,GAAA,QCTf,SAASgC,GAAqCC,EAAwBC,EAAY,CACvF,GAAM,CAAE,WAAAC,CAAW,EAAIC,EAAcF,CAAI,EACzCA,EAAK,MAAQ,GACb,IAAMG,EAAWJ,EACd,OAAO,GAAG,EACV,KAAK,QAASK,EAAeJ,CAAI,CAAC,EAClC,KAAK,KAAMA,EAAK,OAASA,EAAK,EAAE,EAC7B,CAAE,UAAAK,CAAU,EAAIL,EAEhBM,EAAI,KAAK,IAAI,GAAIN,EAAK,OAAS,CAAC,EAEhCO,EAAS,CACb,CAAE,EAAG,EAAG,EAAGD,EAAI,CAAE,EACjB,CAAE,EAAGA,EAAI,EAAG,EAAG,CAAE,EACjB,CAAE,EAAG,EAAG,EAAG,CAACA,EAAI,CAAE,EAClB,CAAE,EAAG,CAACA,EAAI,EAAG,EAAG,CAAE,CACpB,EAGME,EAAKC,EAAM,IAAIN,CAAQ,EACvBO,EAAUC,EAAkBX,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBU,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAaC,EAAqBN,CAAM,EACxCO,EAAYN,EAAG,KAAKI,EAAYF,CAAO,EACvCK,EAAcZ,EAAS,OAAO,IAAMW,EAAW,cAAc,EAEnE,OAAIT,GAAaL,EAAK,OAAS,aAC7Be,EAAY,UAAU,MAAM,EAAE,KAAK,QAASV,CAAS,EAGnDJ,GAAcD,EAAK,OAAS,aAC9Be,EAAY,UAAU,MAAM,EAAE,KAAK,QAASd,CAAU,EAGxDD,EAAK,MAAQ,GACbA,EAAK,OAAS,GAEdA,EAAK,UAAY,SAAUgB,EAAO,CAChC,OAAOC,EAAU,QAAQjB,EAAMO,EAAQS,CAAK,CAC9C,EAEOb,CACT,CA/CgBe,EAAApB,GAAA,UCEhB,eAAsBqB,GAAqCC,EAAwBC,EAAY,CAC7F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,YAAAC,CAAY,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAEtFS,EAASJ,EAAK,MAAQ,EAAIC,EAC5BI,EACE,CAAE,UAAAC,CAAU,EAAIX,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMY,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAUC,EAAkBf,EAAM,CAAC,CAAC,EACpCgB,EAAYJ,EAAG,OAAO,EAAG,EAAGH,EAAS,EAAGK,CAAO,EAErDJ,EAAaN,EAAS,OAAO,IAAMY,EAAW,cAAc,EAC5DN,EAAW,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAASO,EAAoBN,CAAS,CAAC,CAChG,MACED,EAAaN,EACV,OAAO,SAAU,cAAc,EAC/B,KAAK,QAAS,uBAAuB,EACrC,KAAK,QAASF,CAAU,EACxB,KAAK,IAAKO,CAAM,EAChB,KAAK,KAAM,CAAC,EACZ,KAAK,KAAM,CAAC,EAGjB,OAAAS,EAAiBlB,EAAMU,CAAU,EAEjCV,EAAK,UAAY,SAAUmB,EAAO,CAChC,OAAAC,EAAI,KAAK,mBAAoBpB,EAAMS,EAAQU,CAAK,EACzCE,EAAU,OAAOrB,EAAMS,EAAQU,CAAK,CAC7C,EAEOf,CACT,CAnCsBkB,EAAAxB,GAAA,UCDtB,SAASyB,GAAWC,EAAW,CAC7B,IAAMC,EAAU,KAAK,IAAI,KAAK,GAAK,CAAC,EAC9BC,EAAU,KAAK,IAAI,KAAK,GAAK,CAAC,EAC9BC,EAAaH,EAAI,EAEjBI,EAAU,CAAE,EAAID,EAAa,EAAKF,EAAS,EAAIE,EAAa,EAAKD,CAAQ,EACzEG,EAAU,CAAE,EAAG,EAAEF,EAAa,GAAKF,EAAS,EAAIE,EAAa,EAAKD,CAAQ,EAC1EI,EAAU,CAAE,EAAG,EAAEH,EAAa,GAAKF,EAAS,EAAG,EAAEE,EAAa,GAAKD,CAAQ,EAC3EK,EAAU,CAAE,EAAIJ,EAAa,EAAKF,EAAS,EAAG,EAAEE,EAAa,GAAKD,CAAQ,EAEhF,MAAO,KAAKG,EAAQ,CAAC,IAAIA,EAAQ,CAAC,MAAME,EAAQ,CAAC,IAAIA,EAAQ,CAAC;AAAA,uBACzCH,EAAQ,CAAC,IAAIA,EAAQ,CAAC,MAAME,EAAQ,CAAC,IAAIA,EAAQ,CAAC,EACzE,CAZSE,EAAAT,GAAA,cAcF,SAASU,GAA4CC,EAAwBC,EAAY,CAC9F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClBD,EAAK,MAAQ,GACb,IAAMI,EAAWL,EACd,OAAO,GAAG,EACV,KAAK,QAASM,EAAeL,CAAI,CAAC,EAClC,KAAK,KAAMA,EAAK,OAASA,EAAK,EAAE,EAC7BM,EAAS,KAAK,IAAI,GAAIN,GAAM,OAAS,CAAC,EACtC,CAAE,UAAAO,CAAU,EAAIP,EAGhBQ,EAAKC,EAAM,IAAIL,CAAQ,EACvBM,EAAUC,EAAkBX,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBU,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAaJ,EAAG,OAAO,EAAG,EAAGF,EAAS,EAAGI,CAAO,EAChDG,EAAWzB,GAAWkB,CAAM,EAC5BQ,EAAWN,EAAG,KAAKK,EAAUH,CAAO,EAEpCZ,EAAgBM,EAAS,OAAO,IAAMQ,EAAY,cAAc,EACtE,OAAAd,EAAc,OAAO,IAAMgB,CAAQ,EAE/BP,GAAaP,EAAK,OAAS,aAC7BF,EAAc,UAAU,MAAM,EAAE,KAAK,QAASS,CAAS,EAGrDL,GAAcF,EAAK,OAAS,aAC9BF,EAAc,UAAU,MAAM,EAAE,KAAK,QAASI,CAAU,EAG1Da,EAAiBf,EAAMF,CAAa,EAEpCE,EAAK,UAAY,SAAUgB,EAAO,CAChC,OAAAC,EAAI,KAAK,0BAA2BjB,EAAM,CAAE,OAAAM,EAAQ,MAAAU,CAAM,CAAC,EAC/CE,EAAU,OAAOlB,EAAMM,EAAQU,CAAK,CAElD,EAEOZ,CACT,CA5CgBP,EAAAC,GAAA,iBCfhB,SAASqB,GACPC,EACAC,EACAC,EACAC,EAAY,IACZC,EAAa,EACbC,EAAW,IACX,CACA,IAAMC,EAAS,CAAC,EAGVC,EAAiBH,EAAa,KAAK,GAAM,IAOzCI,GANeH,EAAW,KAAK,GAAM,IAGVE,IAGDJ,EAAY,GAE5C,QAASM,EAAI,EAAGA,EAAIN,EAAWM,IAAK,CAClC,IAAMC,EAAQH,EAAgBE,EAAID,EAC5BG,EAAIX,EAAUE,EAAS,KAAK,IAAIQ,CAAK,EACrCE,EAAIX,EAAUC,EAAS,KAAK,IAAIQ,CAAK,EAC3CJ,EAAO,KAAK,CAAE,EAAG,CAACK,EAAG,EAAG,CAACC,CAAE,CAAC,CAC9B,CAEA,OAAON,CACT,CA5BSO,EAAAd,GAAA,wBA8BT,eAAsBe,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAIJ,EAAK,OAASL,EAAK,SAAW,GAClC,EAAIK,EAAK,QAAUL,EAAK,SAAW,GACnCd,EAAS,KAAK,IAAI,EAAG,EAAI,EAAG,EAE5B,CAAE,UAAAwB,CAAU,EAAIV,EAEhBV,EAAS,CACb,GAAGP,GAAqB0B,EAAI,EAAG,CAAC,EAAI,EAAGvB,EAAQ,GAAI,IAAK,CAAC,EACzD,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAGA,CAAO,EAChC,GAAGH,GAAqB0B,EAAI,EAAIvB,EAAS,EAAG,CAACA,EAAQA,EAAQ,GAAI,KAAM,IAAI,EAC3E,GAAGH,GAAqB0B,EAAI,EAAIvB,EAAS,EAAGA,EAAQA,EAAQ,GAAI,IAAK,IAAI,EACzE,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAG,CAAC,EAAI,CAAE,EAChC,GAAGH,GAAqB0B,EAAI,EAAG,EAAI,EAAGvB,EAAQ,GAAI,EAAG,EAAE,CACzD,EAEMyB,EAAa,CACjB,CAAE,EAAGF,EAAI,EAAG,EAAG,CAAC,EAAI,EAAIvB,CAAO,EAC/B,CAAE,EAAG,CAACuB,EAAI,EAAG,EAAG,CAAC,EAAI,EAAIvB,CAAO,EAChC,GAAGH,GAAqB0B,EAAI,EAAG,CAAC,EAAI,EAAGvB,EAAQ,GAAI,IAAK,CAAC,EACzD,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAG,CAACA,CAAO,EACjC,GAAGH,GAAqB0B,EAAI,EAAIA,EAAI,GAAK,CAACvB,EAAQA,EAAQ,GAAI,KAAM,IAAI,EACxE,GAAGH,GAAqB0B,EAAI,EAAIA,EAAI,GAAKvB,EAAQA,EAAQ,GAAI,IAAK,IAAI,EACtE,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAG,EAAI,CAAE,EAC/B,GAAGH,GAAqB0B,EAAI,EAAG,EAAI,EAAGvB,EAAQ,GAAI,EAAG,EAAE,EACvD,CAAE,EAAG,CAACuB,EAAI,EAAG,EAAG,EAAI,EAAIvB,CAAO,EAC/B,CAAE,EAAGuB,EAAI,EAAG,EAAG,EAAI,EAAIvB,CAAO,CAChC,EAGM0B,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAUC,EAAkBf,EAAM,CAAE,KAAM,MAAO,CAAC,EAEpDA,EAAK,OAAS,cAChBc,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EADqBC,EAAqB3B,CAAM,EACT,QAAQ,IAAK,EAAE,EACtD4B,EAAqBN,EAAG,KAAKI,EAAmBF,CAAO,EACvDK,EAAWF,EAAqBN,CAAU,EAC1CS,EAAYR,EAAG,KAAKO,EAAU,CAAE,GAAGL,CAAQ,CAAC,EAC5CO,EAAsBjB,EAAS,OAAO,IAAK,cAAc,EAC/D,OAAAiB,EAAoB,OAAO,IAAMD,EAAW,cAAc,EAAE,KAAK,iBAAkB,CAAC,EACpFC,EAAoB,OAAO,IAAMH,EAAoB,cAAc,EACnEG,EAAoB,KAAK,QAAS,MAAM,EAEpCX,GAAaV,EAAK,OAAS,aAC7BqB,EAAoB,UAAU,MAAM,EAAE,KAAK,QAASX,CAAS,EAG3DR,GAAcF,EAAK,OAAS,aAC9BqB,EAAoB,UAAU,MAAM,EAAE,KAAK,QAASnB,CAAU,EAGhEmB,EAAoB,KAAK,YAAa,aAAanC,CAAM,MAAM,EAE/DoB,EAAM,KACJ,YACA,aAAa,CAACG,EAAI,EAAIvB,GAAUmB,EAAK,GAAKA,EAAK,MAAQ,GAAG,IAAI,CAAC,EAAI,GAAKL,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC7H,EAEAiB,EAAiBtB,EAAMqB,CAAmB,EAE1CrB,EAAK,UAAY,SAAUuB,EAAO,CAGhC,OAFYC,EAAU,QAAQxB,EAAMW,EAAYY,CAAK,CAGvD,EAEOnB,CACT,CA7EsBP,EAAAC,GAAA,kBC9BtB,SAAS2B,GACPC,EACAC,EACAC,EACAC,EAAY,IACZC,EAAa,EACbC,EAAW,IACX,CACA,IAAMC,EAAS,CAAC,EAGVC,EAAiBH,EAAa,KAAK,GAAM,IAOzCI,GANeH,EAAW,KAAK,GAAM,IAGVE,IAGDJ,EAAY,GAE5C,QAASM,EAAI,EAAGA,EAAIN,EAAWM,IAAK,CAClC,IAAMC,EAAQH,EAAgBE,EAAID,EAC5BG,EAAIX,EAAUE,EAAS,KAAK,IAAIQ,CAAK,EACrCE,EAAIX,EAAUC,EAAS,KAAK,IAAIQ,CAAK,EAC3CJ,EAAO,KAAK,CAAE,EAAAK,EAAG,EAAAC,CAAE,CAAC,CACtB,CAEA,OAAON,CACT,CA5BSO,EAAAd,GAAA,wBA8BT,eAAsBe,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAIJ,EAAK,OAASL,EAAK,SAAW,GAClC,EAAIK,EAAK,QAAUL,EAAK,SAAW,GACnCd,EAAS,KAAK,IAAI,EAAG,EAAI,EAAG,EAE5B,CAAE,UAAAwB,CAAU,EAAIV,EAEhBV,EAAS,CACb,GAAGP,GAAqB0B,EAAI,EAAG,CAAC,EAAI,EAAGvB,EAAQ,GAAI,IAAK,CAAC,EACzD,CAAE,EAAGuB,EAAI,EAAIvB,EAAQ,EAAG,CAACA,CAAO,EAChC,GAAGH,GAAqB0B,EAAI,EAAIvB,EAAS,EAAG,CAACA,EAAQA,EAAQ,GAAI,KAAM,IAAI,EAC3E,GAAGH,GAAqB0B,EAAI,EAAIvB,EAAS,EAAGA,EAAQA,EAAQ,GAAI,IAAK,IAAI,EACzE,CAAE,EAAGuB,EAAI,EAAIvB,EAAQ,EAAG,EAAI,CAAE,EAC9B,GAAGH,GAAqB0B,EAAI,EAAG,EAAI,EAAGvB,EAAQ,GAAI,EAAG,EAAE,CACzD,EAEMyB,EAAa,CACjB,CAAE,EAAG,CAACF,EAAI,EAAG,EAAG,CAAC,EAAI,EAAIvB,CAAO,EAChC,CAAE,EAAGuB,EAAI,EAAG,EAAG,CAAC,EAAI,EAAIvB,CAAO,EAC/B,GAAGH,GAAqB0B,EAAI,EAAG,CAAC,EAAI,EAAGvB,EAAQ,GAAI,IAAK,CAAC,EACzD,CAAE,EAAGuB,EAAI,EAAIvB,EAAQ,EAAG,CAACA,CAAO,EAChC,GAAGH,GAAqB0B,EAAI,EAAIvB,EAAS,EAAG,CAACA,EAAQA,EAAQ,GAAI,KAAM,IAAI,EAC3E,GAAGH,GAAqB0B,EAAI,EAAIvB,EAAS,EAAGA,EAAQA,EAAQ,GAAI,IAAK,IAAI,EACzE,CAAE,EAAGuB,EAAI,EAAIvB,EAAQ,EAAG,EAAI,CAAE,EAC9B,GAAGH,GAAqB0B,EAAI,EAAG,EAAI,EAAGvB,EAAQ,GAAI,EAAG,EAAE,EACvD,CAAE,EAAGuB,EAAI,EAAG,EAAG,EAAI,EAAIvB,CAAO,EAC9B,CAAE,EAAG,CAACuB,EAAI,EAAG,EAAG,EAAI,EAAIvB,CAAO,CACjC,EAGM0B,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAUC,EAAkBf,EAAM,CAAE,KAAM,MAAO,CAAC,EAEpDA,EAAK,OAAS,cAChBc,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EADsBC,EAAqB3B,CAAM,EACT,QAAQ,IAAK,EAAE,EACvD4B,EAAsBN,EAAG,KAAKI,EAAmBF,CAAO,EACxDK,EAAWF,EAAqBN,CAAU,EAC1CS,EAAYR,EAAG,KAAKO,EAAU,CAAE,GAAGL,CAAQ,CAAC,EAC5CO,EAAuBjB,EAAS,OAAO,IAAK,cAAc,EAChE,OAAAiB,EAAqB,OAAO,IAAMD,EAAW,cAAc,EAAE,KAAK,iBAAkB,CAAC,EACrFC,EAAqB,OAAO,IAAMH,EAAqB,cAAc,EACrEG,EAAqB,KAAK,QAAS,MAAM,EAErCX,GAAaV,EAAK,OAAS,aAC7BqB,EAAqB,UAAU,MAAM,EAAE,KAAK,QAASX,CAAS,EAG5DR,GAAcF,EAAK,OAAS,aAC9BqB,EAAqB,UAAU,MAAM,EAAE,KAAK,QAASnB,CAAU,EAGjEmB,EAAqB,KAAK,YAAa,aAAa,CAACnC,CAAM,MAAM,EAEjEoB,EAAM,KACJ,YACA,aAAa,CAACG,EAAI,GAAKT,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,MAAQ,GAAG,IAAI,CAAC,EAAI,GAAKL,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC9I,EAEAiB,EAAiBtB,EAAMqB,CAAoB,EAE3CrB,EAAK,UAAY,SAAUuB,EAAO,CAGhC,OAFYC,EAAU,QAAQxB,EAAMW,EAAYY,CAAK,CAGvD,EAEOnB,CACT,CA7EsBP,EAAAC,GAAA,mBC9BtB,SAAS2B,EACPC,EACAC,EACAC,EACAC,EAAY,IACZC,EAAa,EACbC,EAAW,IACX,CACA,IAAMC,EAAS,CAAC,EAGVC,EAAiBH,EAAa,KAAK,GAAM,IAOzCI,GANeH,EAAW,KAAK,GAAM,IAGVE,IAGDJ,EAAY,GAE5C,QAASM,EAAI,EAAGA,EAAIN,EAAWM,IAAK,CAClC,IAAMC,EAAQH,EAAgBE,EAAID,EAC5BG,EAAIX,EAAUE,EAAS,KAAK,IAAIQ,CAAK,EACrCE,EAAIX,EAAUC,EAAS,KAAK,IAAIQ,CAAK,EAC3CJ,EAAO,KAAK,CAAE,EAAG,CAACK,EAAG,EAAG,CAACC,CAAE,CAAC,CAC9B,CAEA,OAAON,CACT,CA5BSO,EAAAd,EAAA,wBA8BT,eAAsBe,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAIJ,EAAK,OAASL,EAAK,SAAW,GAClC,EAAIK,EAAK,QAAUL,EAAK,SAAW,GACnCd,EAAS,KAAK,IAAI,EAAG,EAAI,EAAG,EAE5B,CAAE,UAAAwB,CAAU,EAAIV,EAEhBW,EAAuB,CAC3B,GAAG5B,EAAqB0B,EAAI,EAAG,CAAC,EAAI,EAAGvB,EAAQ,GAAI,IAAK,CAAC,EACzD,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAGA,CAAO,EAChC,GAAGH,EAAqB0B,EAAI,EAAIvB,EAAS,EAAG,CAACA,EAAQA,EAAQ,GAAI,KAAM,IAAI,EAC3E,GAAGH,EAAqB0B,EAAI,EAAIvB,EAAS,EAAGA,EAAQA,EAAQ,GAAI,IAAK,IAAI,EACzE,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAG,CAAC,EAAI,CAAE,EAChC,GAAGH,EAAqB0B,EAAI,EAAG,EAAI,EAAGvB,EAAQ,GAAI,EAAG,EAAE,CACzD,EAEM0B,EAAwB,CAC5B,GAAG7B,EAAqB,CAAC0B,EAAI,EAAIvB,EAASA,EAAS,EAAG,CAAC,EAAI,EAAGA,EAAQ,GAAI,IAAK,IAAI,EACnF,CAAE,EAAGuB,EAAI,EAAIvB,EAAS,EAAG,EAAGA,CAAO,EACnC,GAAGH,EAAqB,CAAC0B,EAAI,EAAIvB,EAAS,EAAG,CAACA,EAAQA,EAAQ,GAAI,EAAG,EAAE,EACvE,GAAGH,EAAqB,CAAC0B,EAAI,EAAIvB,EAAS,EAAGA,EAAQA,EAAQ,GAAI,IAAK,CAAC,EACvE,CAAE,EAAGuB,EAAI,EAAIvB,EAAS,EAAG,EAAG,CAACA,CAAO,EACpC,GAAGH,EAAqB,CAAC0B,EAAI,EAAIvB,EAASA,EAAS,EAAG,EAAI,EAAGA,EAAQ,GAAI,KAAM,IAAI,CACrF,EAEM2B,EAAa,CACjB,CAAE,EAAGJ,EAAI,EAAG,EAAG,CAAC,EAAI,EAAIvB,CAAO,EAC/B,CAAE,EAAG,CAACuB,EAAI,EAAG,EAAG,CAAC,EAAI,EAAIvB,CAAO,EAChC,GAAGH,EAAqB0B,EAAI,EAAG,CAAC,EAAI,EAAGvB,EAAQ,GAAI,IAAK,CAAC,EACzD,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAG,CAACA,CAAO,EACjC,GAAGH,EAAqB0B,EAAI,EAAIvB,EAAS,EAAG,CAACA,EAAQA,EAAQ,GAAI,KAAM,IAAI,EAC3E,GAAGH,EAAqB0B,EAAI,EAAIvB,EAAS,EAAGA,EAAQA,EAAQ,GAAI,IAAK,IAAI,EACzE,CAAE,EAAG,CAACuB,EAAI,EAAIvB,EAAQ,EAAG,EAAI,CAAE,EAC/B,GAAGH,EAAqB0B,EAAI,EAAG,EAAI,EAAGvB,EAAQ,GAAI,EAAG,EAAE,EACvD,CAAE,EAAG,CAACuB,EAAI,EAAG,EAAG,EAAI,EAAIvB,CAAO,EAC/B,CAAE,EAAGuB,EAAI,EAAIvB,EAASA,EAAS,EAAG,EAAG,EAAI,EAAIA,CAAO,EACpD,GAAGH,EAAqB,CAAC0B,EAAI,EAAIvB,EAASA,EAAS,EAAG,CAAC,EAAI,EAAGA,EAAQ,GAAI,IAAK,IAAI,EACnF,CAAE,EAAGuB,EAAI,EAAIvB,EAAS,EAAG,EAAGA,CAAO,EACnC,GAAGH,EAAqB,CAAC0B,EAAI,EAAIvB,EAAS,EAAG,CAACA,EAAQA,EAAQ,GAAI,EAAG,EAAE,EACvE,GAAGH,EAAqB,CAAC0B,EAAI,EAAIvB,EAAS,EAAGA,EAAQA,EAAQ,GAAI,IAAK,CAAC,EACvE,CAAE,EAAGuB,EAAI,EAAIvB,EAAS,EAAG,EAAG,CAACA,CAAO,EACpC,GAAGH,EAAqB,CAAC0B,EAAI,EAAIvB,EAASA,EAAS,EAAG,EAAI,EAAGA,EAAQ,GAAI,KAAM,IAAI,CACrF,EAGM4B,EAAKC,EAAM,IAAIX,CAAQ,EACvBY,EAAUC,EAAkBjB,EAAM,CAAE,KAAM,MAAO,CAAC,EAEpDA,EAAK,OAAS,cAChBgB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EADqBC,EAAqBR,CAAoB,EACnB,QAAQ,IAAK,EAAE,EAC1DS,EAAqBN,EAAG,KAAKI,EAAuBF,CAAO,EAE3DK,EADsBF,EAAqBP,CAAqB,EACnB,QAAQ,IAAK,EAAE,EAC5DU,EAAsBR,EAAG,KAAKO,EAAwBL,CAAO,EAC7DO,EAAWJ,EAAqBN,CAAU,EAC1CW,EAAYV,EAAG,KAAKS,EAAU,CAAE,GAAGP,CAAQ,CAAC,EAC5CS,EAAmBrB,EAAS,OAAO,IAAK,cAAc,EAC5D,OAAAqB,EAAiB,OAAO,IAAMD,EAAW,cAAc,EAAE,KAAK,iBAAkB,CAAC,EACjFC,EAAiB,OAAO,IAAML,EAAoB,cAAc,EAChEK,EAAiB,OAAO,IAAMH,EAAqB,cAAc,EACjEG,EAAiB,KAAK,QAAS,MAAM,EAEjCf,GAAaV,EAAK,OAAS,aAC7ByB,EAAiB,UAAU,MAAM,EAAE,KAAK,QAASf,CAAS,EAGxDR,GAAcF,EAAK,OAAS,aAC9ByB,EAAiB,UAAU,MAAM,EAAE,KAAK,QAASvB,CAAU,EAG7DuB,EAAiB,KAAK,YAAa,aAAavC,EAASA,EAAS,CAAC,MAAM,EAEzEoB,EAAM,KACJ,YACA,aAAa,CAACG,EAAI,GAAKT,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,MAAQ,GAAG,IAAI,CAAC,EAAI,GAAKL,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC9I,EAEAqB,EAAiB1B,EAAMyB,CAAgB,EAEvCzB,EAAK,UAAY,SAAU2B,EAAO,CAGhC,OAFYC,EAAU,QAAQ5B,EAAMa,EAAYc,CAAK,CAGvD,EAEOvB,CACT,CAhGsBP,EAAAC,GAAA,eCxBtB,eAAsB+B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EACzEQ,EAAW,GACfC,EAAY,GACRC,EAAI,KAAK,IAAIF,GAAWH,EAAK,OAASL,EAAK,SAAW,GAAK,GAAK,KAAMA,GAAM,OAAS,CAAC,EACtFW,EAAI,KAAK,IAAIF,EAAWJ,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EAChFY,EAASD,EAAI,EAEb,CAAE,UAAAE,CAAU,EAAIb,EAEhBc,EAAKC,EAAM,IAAIX,CAAQ,EACvBY,EAAUC,EAAkBjB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBgB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAaR,EACjBS,EAAcR,EACVS,EAAKF,EAAaN,EAClBS,EAAKF,EAAc,EAEnBG,EAAS,CACb,CAAEF,EAAO,EAAG,CAAE,EACd,CAAE,EAAGC,EAAI,EAAG,CAAE,EACd,CAAE,EAAG,EAAG,EAAGF,EAAc,CAAE,EAC3B,CAAE,EAAGE,EAAI,EAAGF,CAAY,EACxB,CAAEC,EAAO,EAAGD,CAAY,EACxB,GAAGI,GAAqB,CAACH,EAAI,CAACD,EAAc,EAAGP,EAAQ,GAAI,IAAK,EAAE,CACpE,EAEMY,EAAWC,EAAqBH,CAAM,EACtCI,EAAYZ,EAAG,KAAKU,EAAUR,CAAO,EAErCW,EAAUvB,EAAS,OAAO,IAAMsB,EAAW,cAAc,EAC/D,OAAAC,EAAQ,KAAK,QAAS,uBAAuB,EAEzCd,GAAab,EAAK,OAAS,aAC7B2B,EAAQ,eAAe,MAAM,EAAE,KAAK,QAASd,CAAS,EAGpDX,GAAcF,EAAK,OAAS,aAC9B2B,EAAQ,eAAe,MAAM,EAAE,KAAK,QAASzB,CAAU,EAGzDyB,EAAQ,KAAK,YAAa,aAAa,CAACjB,EAAI,CAAC,KAAK,CAACC,EAAI,CAAC,GAAG,EAE3DiB,EAAiB5B,EAAM2B,CAAO,EAE9B3B,EAAK,UAAY,SAAU6B,EAAO,CAEhC,OADYC,EAAU,QAAQ9B,EAAMsB,EAAQO,CAAK,CAEnD,EAEOzB,CACT,CA7DsB2B,EAAAjC,GAAA,mBCLf,IAAMkC,GAAsBC,EAAA,CACjCC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CACL,IAAIL,CAAC,IAAIC,EAAII,CAAE,GACf,IAAID,CAAE,IAAIC,CAAE,UAAUH,CAAK,KAC3B,IAAIE,CAAE,IAAIC,CAAE,UAAU,CAACH,CAAK,KAC5B,MAAMC,CAAM,GACZ,IAAIC,CAAE,IAAIC,CAAE,UAAUH,CAAK,KAC3B,MAAM,CAACC,CAAM,EACf,EAAE,KAAK,GAAG,EAfuB,uBAiBtBG,GAA2BP,EAAA,CACtCC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CACL,IAAIL,CAAC,IAAIC,EAAII,CAAE,GACf,IAAIL,EAAIE,CAAK,IAAID,EAAII,CAAE,GACvB,IAAID,CAAE,IAAIC,CAAE,UAAU,CAACH,CAAK,KAC5B,MAAMC,CAAM,GACZ,IAAIC,CAAE,IAAIC,CAAE,UAAUH,CAAK,KAC3B,MAAM,CAACC,CAAM,EACf,EAAE,KAAK,GAAG,EAf4B,4BAiB3BI,GAA2BR,EAAA,CACtCC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CAAC,IAAIL,EAAIE,EAAQ,CAAC,IAAI,CAACC,EAAS,CAAC,GAAI,IAAIC,CAAE,IAAIC,CAAE,UAAUH,CAAK,IAAI,EAAE,KAAK,GAAG,EAR/C,4BAUxC,eAAsBM,GAAuCC,EAAwBC,EAAY,CAC/F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,MAAQL,EAAK,QAASA,EAAK,OAAS,CAAC,EACvDN,EAAKe,EAAI,EACTd,EAAKD,GAAM,IAAMe,EAAI,IACrBC,EAAI,KAAK,IAAIL,EAAK,OAASV,EAAKK,EAAK,QAASA,EAAK,QAAU,CAAC,EAEhEF,EACE,CAAE,UAAAa,CAAU,EAAIX,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMY,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAgBlB,GAAyB,EAAG,EAAGa,EAAGC,EAAGhB,EAAIC,CAAE,EAC3DoB,EAAgBlB,GAAyB,EAAGF,EAAIc,EAAGC,EAAGhB,EAAIC,CAAE,EAC5DqB,EAAYJ,EAAG,KAAKE,EAAeG,EAAkBjB,EAAM,CAAC,CAAC,CAAC,EAC9DkB,EAAYN,EAAG,KAAKG,EAAeE,EAAkBjB,EAAM,CAAE,KAAM,MAAO,CAAC,CAAC,EAElFF,EAAWM,EAAS,OAAO,IAAMc,EAAW,cAAc,EAC1DpB,EAAWM,EAAS,OAAO,IAAMY,EAAW,cAAc,EAC1DlB,EAAS,KAAK,QAAS,uBAAuB,EAC1Ca,GACFb,EAAS,KAAK,QAASa,CAAS,CAEpC,KAAO,CACL,IAAMQ,EAAW/B,GAAoB,EAAG,EAAGqB,EAAGC,EAAGhB,EAAIC,CAAE,EACvDG,EAAWM,EACR,OAAO,OAAQ,cAAc,EAC7B,KAAK,IAAKe,CAAQ,EAClB,KAAK,QAAS,uBAAuB,EACrC,KAAK,QAASC,EAAoBT,CAAS,CAAC,EAC5C,KAAK,QAAST,CAAU,CAC7B,CAEA,OAAAJ,EAAS,KAAK,iBAAkBH,CAAE,EAClCG,EAAS,KAAK,YAAa,aAAa,CAACW,EAAI,CAAC,KAAK,EAAEC,EAAI,EAAIf,EAAG,GAAG,EAEnE0B,EAAiBrB,EAAMF,CAAQ,EAE/BQ,EAAM,KACJ,YACA,aAAa,EAAED,EAAK,MAAQ,IAAMA,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,IAAML,EAAK,SAAW,GAAK,KAAOK,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC9I,EAEAL,EAAK,UAAY,SAAUsB,EAAO,CAChC,IAAMC,EAAMC,EAAU,KAAKxB,EAAMsB,CAAK,EAChChC,EAAIiC,EAAI,GAAKvB,EAAK,GAAK,GAE7B,GACEN,GAAM,IACL,KAAK,IAAIJ,CAAC,GAAKU,EAAK,OAAS,GAAK,GAChC,KAAK,IAAIV,CAAC,IAAMU,EAAK,OAAS,GAAK,GAClC,KAAK,IAAIuB,EAAI,GAAKvB,EAAK,GAAK,EAAE,GAAKA,EAAK,QAAU,GAAK,EAAIL,GAC/D,CACA,IAAIJ,EAAII,EAAKA,GAAM,EAAKL,EAAIA,GAAMI,EAAKA,IACnCH,EAAI,IACNA,EAAI,KAAK,KAAKA,CAAC,GAEjBA,EAAII,EAAKJ,EACL+B,EAAM,GAAKtB,EAAK,GAAK,GAAK,IAC5BT,EAAI,CAACA,GAGPgC,EAAI,GAAKhC,CACX,CAEA,OAAOgC,CACT,EAEOnB,CACT,CAxEsBf,EAAAS,GAAA,YC7CtB,eAAsB2B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAIJ,EAAK,MAAQL,EAAK,QACtB,EAAIK,EAAK,OAASL,EAAK,QACvBU,EAAa,EAAI,GAEjBC,EAAI,CAACF,EAAI,EACTG,EAAI,CAAC,EAAI,EAAIF,EAAa,EAE1B,CAAE,UAAAG,CAAU,EAAIb,EAGhBc,EAAKC,EAAM,IAAIX,CAAQ,EACvBY,EAAUC,EAAkBjB,EAAM,CAAC,CAAC,EACtCA,EAAK,OAAS,cAChBgB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAM,CACV,CAAE,EAAAP,EAAG,EAAGC,EAAIF,CAAW,EACvB,CAAE,EAAG,CAACC,EAAG,EAAGC,EAAIF,CAAW,EAC3B,CAAE,EAAG,CAACC,EAAG,EAAG,CAACC,CAAE,EACf,CAAE,EAAAD,EAAG,EAAG,CAACC,CAAE,EACX,CAAE,EAAAD,EAAG,EAAAC,CAAE,EACP,CAAE,EAAG,CAACD,EAAG,EAAAC,CAAE,EACX,CAAE,EAAG,CAACD,EAAG,EAAGC,EAAIF,CAAW,CAC7B,EAEMS,EAAOL,EAAG,QACdI,EAAI,IAAKE,GAAM,CAACA,EAAE,EAAGA,EAAE,CAAC,CAAC,EACzBJ,CACF,EAEMK,EAAUjB,EAAS,OAAO,IAAMe,EAAM,cAAc,EAC1D,OAAAE,EAAQ,KAAK,QAAS,uBAAuB,EAEzCR,GAAab,EAAK,OAAS,aAC7BqB,EAAQ,UAAU,MAAM,EAAE,KAAK,QAASR,CAAS,EAG/CX,GAAcF,EAAK,OAAS,aAC9BqB,EAAQ,UAAU,MAAM,EAAE,KAAK,QAASnB,CAAU,EAGpDI,EAAM,KACJ,YACA,aAAaK,GAAKX,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAKO,EAAIF,GAAcV,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,KAAO,GAAG,GAClJ,EAEAiB,EAAiBtB,EAAMqB,CAAO,EAE9BrB,EAAK,UAAY,SAAUuB,EAAO,CAEhC,OADYC,EAAU,KAAKxB,EAAMuB,CAAK,CAExC,EAEOnB,CACT,CA/DsBqB,EAAA3B,GAAA,oBCEtB,eAAsB4B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,YAAAC,CAAY,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAEtFS,EAAcJ,EAAK,MAAQ,EAAIC,EADzB,EAENI,EAAcL,EAAK,MAAQ,EAAIC,EAEjCK,EACE,CAAE,UAAAC,CAAU,EAAIZ,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAeC,EAAkBhB,EAAM,CAAE,UAAW,GAAK,YAAa,GAAI,CAAC,EAE3EiB,EAAeD,EAAkBhB,EAAM,CAAE,UAAW,GAAK,YAAa,GAAI,CAAC,EAC3EkB,EAAiBL,EAAG,OAAO,EAAG,EAAGJ,EAAc,EAAGM,CAAY,EAC9DI,EAAiBN,EAAG,OAAO,EAAG,EAAGH,EAAc,EAAGO,CAAY,EAEpEN,EAAcP,EAAS,OAAO,IAAK,cAAc,EAEjDO,EACG,KAAK,QAASS,EAAoBpB,EAAK,UAAU,CAAC,EAClD,KAAK,QAASoB,EAAoBR,CAAS,CAAC,EAE/CD,EAAY,KAAK,GAAG,YAAYO,CAAc,EAC9CP,EAAY,KAAK,GAAG,YAAYQ,CAAc,CAChD,KAAO,CACLR,EAAcP,EAAS,OAAO,IAAK,cAAc,EAEjD,IAAMiB,EAAcV,EAAY,OAAO,SAAU,cAAc,EACzDW,EAAcX,EAAY,OAAO,QAAQ,EAC/CA,EAAY,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAAST,CAAU,EAE3EmB,EACG,KAAK,QAAS,cAAc,EAC5B,KAAK,QAASnB,CAAU,EACxB,KAAK,IAAKO,CAAW,EACrB,KAAK,KAAM,CAAC,EACZ,KAAK,KAAM,CAAC,EAEfa,EACG,KAAK,QAAS,cAAc,EAC5B,KAAK,QAASpB,CAAU,EACxB,KAAK,IAAKQ,CAAW,EACrB,KAAK,KAAM,CAAC,EACZ,KAAK,KAAM,CAAC,CACjB,CAEA,OAAAa,EAAiBvB,EAAMW,CAAW,EAElCX,EAAK,UAAY,SAAUwB,EAAO,CAChC,OAAAC,EAAI,KAAK,yBAA0BzB,EAAMS,EAAae,CAAK,EACpDE,EAAU,OAAO1B,EAAMS,EAAae,CAAK,CAClD,EAEOpB,CACT,CA7DsBuB,EAAA7B,GAAA,gBCDf,SAAS8B,GACdC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,CAAe,CAAE,EAC7B,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcJ,CAAI,EACtDA,EAAK,MAAQ,GACbA,EAAK,WAAaE,EAClB,IAAMG,EAAWN,EACd,OAAO,GAAG,EACV,KAAK,QAASO,EAAeN,CAAI,CAAC,EAClC,KAAK,KAAMA,EAAK,OAASA,EAAK,EAAE,EAC7BO,EAAS,EACT,CAAE,UAAAC,CAAU,EAAIR,EAGhBS,EAAKC,EAAM,IAAIL,CAAQ,EACvB,CAAE,WAAAM,CAAW,EAAIV,EACjBW,EAAUC,EAAkBb,EAAM,CAAE,UAAW,OAAQ,CAAC,EAE1DA,EAAK,OAAS,cAChBY,EAAQ,UAAY,GAGtB,IAAME,EAAaL,EAAG,OAAO,EAAG,EAAGF,EAAS,EAAGK,CAAO,EAEhDd,EAAeO,EAAS,OAAO,IAAMS,EAAY,cAAc,EAErE,OAAAhB,EAAa,UAAU,MAAM,EAAE,KAAK,QAAS,SAASa,CAAU,cAAc,EAE1EH,GAAaA,EAAU,OAAS,GAAKR,EAAK,OAAS,aACrDF,EAAa,UAAU,MAAM,EAAE,KAAK,QAASU,CAAS,EAGpDL,GAAcH,EAAK,OAAS,aAC9BF,EAAa,UAAU,MAAM,EAAE,KAAK,QAASK,CAAU,EAGzDY,EAAiBf,EAAMF,CAAY,EAEnCE,EAAK,UAAY,SAAUgB,EAAO,CAChC,OAAAC,EAAI,KAAK,yBAA0BjB,EAAM,CAAE,OAAAO,EAAQ,MAAAS,CAAM,CAAC,EAC9CE,EAAU,OAAOlB,EAAMO,EAAQS,CAAK,CAElD,EAEOX,CACT,CA/CgBc,EAAArB,GAAA,gBCChB,eAAsBsB,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAEhFS,EAAIJ,EAAK,OAASL,EAAK,SAAW,GAClC,EAAIS,EAAIJ,EAAK,OAEbK,EAAKD,EAAIJ,EAAK,OACdM,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAC,CAAE,EACd,CAAE,EAAGD,EAAI,EAAG,CAAC,CAAE,EACf,CAAE,EAAGA,EAAK,EAAG,EAAG,CAAE,CACpB,EAEM,CAAE,UAAAE,CAAU,EAAIZ,EAGhBa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EACtCA,EAAK,OAAS,cAChBe,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAEtB,IAAME,EAAWC,EAAqBP,CAAM,EACtCQ,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAErCjB,EAAkBM,EACrB,OAAO,IAAMe,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAAC,EAAI,CAAC,KAAK,EAAI,CAAC,GAAG,EAErD,OAAIP,GAAaZ,EAAK,OAAS,aAC7BF,EAAgB,eAAe,MAAM,EAAE,KAAK,QAASc,CAAS,EAG5DV,GAAcF,EAAK,OAAS,aAC9BF,EAAgB,eAAe,MAAM,EAAE,KAAK,QAASI,CAAU,EAGjEF,EAAK,MAAQS,EACbT,EAAK,OAAS,EAEdoB,EAAiBpB,EAAMF,CAAe,EAEtCQ,EAAM,KACJ,YACA,aAAa,CAACD,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,CAAC,EAAI,GAAKL,EAAK,SAAW,GAAK,GAAKK,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC9H,EAEAL,EAAK,UAAY,SAAUqB,EAAO,CAChC,OAAAC,EAAI,KAAK,qBAAsBtB,EAAMW,EAAQU,CAAK,EAC3CE,EAAU,QAAQvB,EAAMW,EAAQU,CAAK,CAC9C,EAEOjB,CACT,CA1DsBoB,EAAA1B,GAAA,mBCFf,SAAS2B,GACdC,EACAC,EACA,CAAE,IAAAC,EAAK,OAAQ,CAAE,MAAAC,EAAO,eAAAC,CAAe,CAAE,EACzC,CACA,GAAM,CAAE,WAAAC,CAAW,EAAIC,EAAcL,CAAI,EACzCA,EAAK,MAAQ,GACb,IAAMM,EAAWP,EACd,OAAO,GAAG,EACV,KAAK,QAASQ,EAAeP,CAAI,CAAC,EAClC,KAAK,KAAMA,EAAK,OAASA,EAAK,EAAE,EAE7B,CAAE,UAAAQ,CAAU,EAAIR,EAClBS,EAAQ,KAAK,IAAI,GAAIT,GAAM,OAAS,CAAC,EACrCU,EAAS,KAAK,IAAI,GAAIV,GAAM,QAAU,CAAC,EAEvCC,IAAQ,OACVQ,EAAQ,KAAK,IAAI,GAAIT,GAAM,OAAS,CAAC,EACrCU,EAAS,KAAK,IAAI,GAAIV,GAAM,QAAU,CAAC,GAGzC,IAAMW,EAAK,GAAKF,EAAS,EACnBG,EAAK,GAAKF,EAAU,EAGpBG,EAAKC,EAAM,IAAIR,CAAQ,EACvBS,EAAUC,EAAkBhB,EAAM,CACtC,OAAQG,EAAe,UACvB,KAAMA,EAAe,SACvB,CAAC,EAEGH,EAAK,OAAS,cAChBe,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAYJ,EAAG,UAAUF,EAAGC,EAAGH,EAAOC,EAAQK,CAAO,EAErDG,EAAQZ,EAAS,OAAO,IAAMW,EAAW,cAAc,EAEzDT,GAAaR,EAAK,OAAS,aAC7BkB,EAAM,UAAU,MAAM,EAAE,KAAK,QAASV,CAAS,EAG7CJ,GAAcJ,EAAK,OAAS,aAC9BkB,EAAM,UAAU,MAAM,EAAE,KAAK,QAASd,CAAU,EAGlDe,EAAiBnB,EAAMkB,CAAK,EAC5B,IAAME,EAAUlB,GAAO,SAAW,EAClC,OAAIF,EAAK,OAASA,EAAK,SACrBA,EAAK,OAASoB,EAAU,GAAK,EAC7BpB,EAAK,QAAUoB,EAAU,GAAK,GAEhCpB,EAAK,UAAY,SAAUqB,EAAO,CAChC,OAAOC,EAAU,KAAKtB,EAAMqB,CAAK,CACnC,EACOf,CACT,CA1DgBiB,EAAAzB,GAAA,YCOhB,eAAsB0B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,IAAMG,EAAW,GACfC,EAAY,GACR,CAAE,SAAAC,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYT,EAAQC,EAAMS,EAAeT,CAAI,CAAC,EACzEU,EAAI,KAAK,IAAIN,EAAUG,EAAK,OAASP,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EAC7EW,EAAI,KAAK,IAAIN,EAAWE,EAAK,QAAUP,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EAChFY,EAASD,EAAI,EACb,CAAE,UAAAE,CAAU,EAAIb,EAGhBc,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAUC,EAAkBjB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBgB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAG,CAACR,EAAI,EAAG,EAAG,CAACC,EAAI,CAAE,EACvB,CAAE,EAAGD,EAAI,EAAIE,EAAQ,EAAG,CAACD,EAAI,CAAE,EAC/B,GAAGQ,GAAqB,CAACT,EAAI,EAAIE,EAAQ,EAAGA,EAAQ,GAAI,GAAI,GAAG,EAC/D,CAAE,EAAGF,EAAI,EAAIE,EAAQ,EAAGD,EAAI,CAAE,EAC9B,CAAE,EAAG,CAACD,EAAI,EAAG,EAAGC,EAAI,CAAE,CACxB,EAEMS,EAAWC,EAAqBH,CAAM,EACtCI,EAAYR,EAAG,KAAKM,EAAUJ,CAAO,EACrCO,EAAUjB,EAAS,OAAO,IAAMgB,EAAW,cAAc,EAC/D,OAAAC,EAAQ,KAAK,QAAS,uBAAuB,EAEzCV,GAAab,EAAK,OAAS,aAC7BuB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAASV,CAAS,EAGpDX,GAAcF,EAAK,OAAS,aAC9BuB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAASrB,CAAU,EAQzDsB,EAAiBxB,EAAMuB,CAAO,EAE9BvB,EAAK,UAAY,SAAUyB,EAAO,CAChC,OAAAC,EAAI,KAAK,iBAAkB1B,EAAM,CAAE,OAAAY,EAAQ,MAAAa,CAAM,CAAC,EACtCE,EAAU,QAAQ3B,EAAMkB,EAAQO,CAAK,CAEnD,EACOnB,CACT,CAzDsBsB,EAAA9B,GAAA,wBCNf,IAAM+B,GAAqBC,EAAA,CAChCC,EACAC,EACAC,EACAC,EACAC,IAEO,CACL,IAAIJ,EAAII,CAAC,IAAIH,CAAC,GACd,IAAID,EAAIE,EAAQE,CAAC,IAAIH,CAAC,GACtB,IAAID,EAAIE,CAAK,IAAID,EAAIE,EAAS,CAAC,GAC/B,IAAIH,EAAIE,EAAQE,CAAC,IAAIH,EAAIE,CAAM,GAC/B,IAAIH,EAAII,CAAC,IAAIH,EAAIE,CAAM,GACvB,IAAIH,CAAC,IAAIC,EAAIE,EAAS,CAAC,GACvB,GACF,EAAE,KAAK,GAAG,EAfsB,sBAkBlC,eAAsBE,GAAsCC,EAAwBC,EAAY,CAC9F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAI,EACJC,EAAIJ,EAAK,OAASL,EAAK,QACvBH,EAAIY,EAAID,EACRE,EAAIL,EAAK,MAAQ,EAAIR,EAAIG,EAAK,QAC9BW,EAAS,CACb,CAAE,EAAGd,EAAG,EAAG,CAAE,EACb,CAAE,EAAGa,EAAIb,EAAG,EAAG,CAAE,EACjB,CAAE,EAAGa,EAAG,EAAG,CAACD,EAAI,CAAE,EAClB,CAAE,EAAGC,EAAIb,EAAG,EAAG,CAACY,CAAE,EAClB,CAAE,EAAGZ,EAAG,EAAG,CAACY,CAAE,EACd,CAAE,EAAG,EAAG,EAAG,CAACA,EAAI,CAAE,CACpB,EAEIG,EACE,CAAE,UAAAC,CAAU,EAAIb,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMc,EAAKC,EAAM,IAAIX,CAAQ,EACvBY,EAAUC,EAAkBjB,EAAM,CAAC,CAAC,EACpCkB,EAAW3B,GAAmB,EAAG,EAAGmB,EAAGD,EAAGZ,CAAC,EAC3CsB,EAAYL,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAUR,EACP,OAAO,IAAMe,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACT,EAAI,CAAC,KAAKD,EAAI,CAAC,GAAG,EAEjDI,GACFD,EAAQ,KAAK,QAASC,CAAS,CAEnC,MACED,EAAUQ,EAAmBhB,EAAUM,EAAGD,EAAGE,CAAM,EAGrD,OAAIT,GACFU,EAAQ,KAAK,QAASV,CAAU,EAGlCF,EAAK,MAAQU,EACbV,EAAK,OAASS,EAEdY,EAAiBrB,EAAMY,CAAO,EAE9BZ,EAAK,UAAY,SAAUsB,EAAO,CAChC,OAAOC,EAAU,QAAQvB,EAAMW,EAAQW,CAAK,CAC9C,EAEOlB,CACT,CArDsBZ,EAAAM,GAAA,WClBtB,eAAsB0B,GAAwCC,EAAwBC,EAAY,CAChG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,MAAQ,GACbA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,CAAS,EAAI,MAAMC,EAAYN,EAAQC,EAAMM,EAAeN,CAAI,CAAC,EAEnEO,EAAI,KAAK,IAAI,GAAIP,GAAM,OAAS,CAAC,EACjCQ,EAAI,KAAK,IAAI,GAAIR,GAAM,QAAU,CAAC,EAElC,CAAE,UAAAS,CAAU,EAAIT,EAGhBU,EAAKC,EAAM,IAAIP,CAAQ,EACvBQ,EAAUC,EAAkBb,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBY,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAGP,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,EAAG,EAAGC,CAAE,EACb,CAAE,EAAGD,EAAG,EAAGC,CAAE,CACf,EAEMO,EAAWC,EAAqBF,CAAM,EACtCG,EAAYP,EAAG,KAAKK,EAAUH,CAAO,EACrCM,EAAUd,EAAS,OAAO,IAAMa,EAAW,cAAc,EAC/D,OAAAC,EAAQ,KAAK,QAAS,uBAAuB,EAEzCT,GAAaT,EAAK,OAAS,aAC7BkB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAAST,CAAS,EAGpDP,GAAcF,EAAK,OAAS,aAC9BkB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAAShB,CAAU,EAGzDgB,EAAQ,KAAK,YAAa,aAAa,CAACX,EAAI,CAAC,KAAK,CAACC,EAAI,CAAC,GAAG,EAE3DW,EAAiBnB,EAAMkB,CAAO,EAI9BlB,EAAK,UAAY,SAAUoB,EAAO,CAChC,OAAAC,EAAI,KAAK,iBAAkBrB,EAAM,CAAE,OAAAc,CAAO,CAAC,EAC/BQ,EAAU,QAAQtB,EAAMc,EAAQM,CAAK,CAEnD,EAEOhB,CACT,CArDsBmB,EAAAzB,GAAA,aCCtB,eAAsB0B,GACpBC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,EAAgB,UAAAC,CAAU,CAAE,EACxC,CACA,GAAM,CAAE,YAAAC,CAAY,EAAIC,EAAcJ,CAAI,EAC1CA,EAAK,WAAaG,EAClB,IAAME,EAAcL,EAAK,aAAe,GAClCM,EAAaN,EAAK,YAAc,GAChCO,EAAW,KAAK,IAAIF,EAAaC,CAAU,EAC3CE,EAAeN,GAAW,cAChCF,EAAK,MAAQ,KAAK,IAAIO,EAAUC,GAAgB,CAAC,EACjD,GAAM,CAAE,SAAAC,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYb,EAAQC,EAAM,oBAAoB,EAEhFa,EAAWb,EAAK,MAAQ,IAExBc,EAASP,EACTQ,EAAQR,EACR,CAAE,WAAAS,CAAW,EAAIf,EACjB,CAAE,UAAAgB,CAAU,EAAIC,GAAclB,CAAI,EAElCmB,EAAI,CAACJ,EAAQ,EACbK,EAAI,CAACN,EAAS,EAEdO,EAAerB,EAAK,MAAQ,EAAI,EAGhCsB,EAAKC,EAAM,IAAId,CAAQ,EACvBe,EAAUC,EAAkBzB,EAAM,CAAE,OAAQ,OAAQ,KAAM,MAAO,CAAC,EAEpEA,EAAK,OAAS,cAChBwB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAWJ,EAAG,UAAUH,EAAGC,EAAGL,EAAOD,EAAQU,CAAO,EAEpDG,EAAa,KAAK,IAAIZ,EAAOL,EAAK,KAAK,EACvCkB,EAAcd,EAASJ,EAAK,OAASW,EAErCQ,EAAYP,EAAG,UAAU,CAACK,EAAa,EAAG,CAACC,EAAc,EAAGD,EAAYC,EAAa,CACzF,GAAGJ,EACH,KAAM,cACN,OAAQ,MACV,CAAC,EAEKM,EAAYrB,EAAS,OAAO,IAAMiB,EAAU,cAAc,EAC1DK,EAAatB,EAAS,OAAO,IAAMoB,CAAS,EAElD,GAAI7B,EAAK,KAAM,CACb,IAAMgC,EAAWvB,EAAS,OAAO,GAAG,EACpCuB,EAAS,KACP,MAAM,MAAMC,GAAWjC,EAAK,KAAM,CAChC,OAAQO,EACR,MAAOA,EACP,eAAgB,EAClB,CAAC,CAAC,MACJ,EACA,IAAM2B,EAAWF,EAAS,KAAK,EAAG,QAAQ,EACpCG,EAAYD,EAAS,MACrBE,EAAaF,EAAS,OACtBG,EAAQH,EAAS,EACjBI,EAAQJ,EAAS,EACvBF,EAAS,KACP,YACA,aAAa,CAACG,EAAY,EAAIE,CAAK,IACjCxB,EACIH,EAAK,OAAS,EAAIW,EAAe,EAAIe,EAAa,EAAIE,EACtD,CAAC5B,EAAK,OAAS,EAAIW,EAAe,EAAIe,EAAa,EAAIE,CAC7D,GACF,EACAN,EAAS,KAAK,QAAS,UAAUf,EAAU,IAAI,QAAQ,GAAKD,CAAU,GAAG,CAC3E,CAEA,OAAAL,EAAM,KACJ,YACA,aAAa,CAACD,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,IACxDG,EAAW,CAACe,EAAc,EAAIA,EAAc,EAAIlB,EAAK,MACvD,GACF,EAEAoB,EAAU,KACR,YACA,eACEjB,EAAWH,EAAK,OAAS,EAAIW,EAAe,EAAI,CAACX,EAAK,OAAS,EAAIW,EAAe,CACpF,GACF,EAEAkB,EAAiBvC,EAAM+B,CAAU,EAEjC/B,EAAK,UAAY,SAAUwC,EAAO,CAEhC,GADAC,EAAI,KAAK,uBAAwBzC,EAAMwC,CAAK,EACxC,CAACxC,EAAK,MACR,OAAO0C,EAAU,KAAK1C,EAAMwC,CAAK,EAEnC,IAAMG,EAAK3C,EAAK,GAAK,EACf4C,EAAK5C,EAAK,GAAK,EACf6C,EAAa7C,EAAK,QAAU,EAC9B8C,EAAS,CAAC,EACd,OAAIjC,EACFiC,EAAS,CACP,CAAE,EAAGH,EAAKjC,EAAK,MAAQ,EAAG,EAAGkC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKjC,EAAK,MAAQ,EAAG,EAAGkC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKjC,EAAK,MAAQ,EAAG,EAAGkC,EAAKC,EAAa,EAAInC,EAAK,OAASW,CAAa,EAC9E,CAAE,EAAGsB,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,EAAInC,EAAK,OAASW,CAAa,EACzE,CAAE,EAAGsB,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,EAAInC,EAAK,OAASW,CAAa,EACzE,CAAE,EAAGsB,EAAKjC,EAAK,MAAQ,EAAG,EAAGkC,EAAKC,EAAa,EAAInC,EAAK,OAASW,CAAa,CAChF,EAEAyB,EAAS,CACP,CAAE,EAAGH,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,EAAI/B,CAAO,EACrD,CAAE,EAAG6B,EAAKjC,EAAK,MAAQ,EAAG,EAAGkC,EAAKC,EAAa,EAAI/B,CAAO,EAC1D,CAAE,EAAG6B,EAAKjC,EAAK,MAAQ,EAAI,EAAG,EAAGkC,EAAKC,EAAa,CAAE,EACrD,CAAE,EAAGF,EAAKjC,EAAK,MAAQ,EAAG,EAAGkC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKjC,EAAK,MAAQ,EAAG,EAAGkC,EAAKC,EAAa,EAAI/B,CAAO,EAC1D,CAAE,EAAG6B,EAAK5B,EAAQ,EAAG,EAAG6B,EAAKC,EAAa,EAAI/B,CAAO,CACvD,EAGU4B,EAAU,QAAQ1C,EAAM8C,EAAQN,CAAK,CAEnD,EAEO/B,CACT,CAhIsBsC,EAAAjD,GAAA,QCAtB,eAAsBkD,GACpBC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,EAAgB,UAAAC,CAAU,CAAE,EACxC,CACA,GAAM,CAAE,YAAAC,CAAY,EAAIC,EAAcJ,CAAI,EAC1CA,EAAK,WAAaG,EAClB,IAAME,EAAcL,EAAK,aAAe,GAClCM,EAAaN,EAAK,YAAc,GAChCO,EAAW,KAAK,IAAIF,EAAaC,CAAU,EAC3CE,EAAeN,GAAW,cAChCF,EAAK,MAAQ,KAAK,IAAIO,EAAUC,GAAgB,CAAC,EACjD,GAAM,CAAE,SAAAC,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYb,EAAQC,EAAM,oBAAoB,EAEhFa,EAAU,GACVC,EAAed,EAAK,MAAQ,EAAI,EAEhCe,EAAWf,EAAK,MAAQ,IAExB,CAAE,WAAAgB,EAAY,QAAAC,CAAQ,EAAIhB,EAC1B,CAAE,UAAAiB,CAAU,EAAIC,GAAcnB,CAAI,EAElCoB,EAAKC,EAAM,IAAIZ,CAAQ,EACvBa,EAAUC,EAAkBvB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBsB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAEtB,IAAME,EAAON,EAAU,IAAI,MAAM,EACjCI,EAAQ,OAASE,GAAQP,EAEzB,IAAMQ,EAAWhB,EAAS,OAAO,GAAG,EAChCT,EAAK,MACPyB,EAAS,KACP,MAAM,MAAMC,GAAW1B,EAAK,KAAM,CAChC,OAAQO,EACR,MAAOA,EACP,eAAgB,EAClB,CAAC,CAAC,MACJ,EAEF,IAAMoB,EAAWF,EAAS,KAAK,EAAG,QAAQ,EACpCG,EAAYD,EAAS,MACrBE,EAAaF,EAAS,OACtBG,EAAQH,EAAS,EACjBI,EAAQJ,EAAS,EAEjBK,EAAW,KAAK,IAAIJ,EAAWC,CAAU,EAAI,KAAK,MAAQhB,EAAU,EACpEoB,EAAWb,EAAG,OAAO,EAAG,EAAGY,EAAUV,CAAO,EAE5CY,EAAa,KAAK,IAAIF,EAAUtB,EAAK,KAAK,EAC1CyB,EAAcH,EAAWtB,EAAK,OAASI,EAEvCsB,EAAYhB,EAAG,UAAU,CAACc,EAAa,EAAG,CAACC,EAAc,EAAGD,EAAYC,EAAa,CACzF,GAAGb,EACH,KAAM,cACN,OAAQ,MACV,CAAC,EAEKe,EAAY5B,EAAS,OAAO,IAAMwB,EAAU,cAAc,EAC1DK,EAAa7B,EAAS,OAAO,IAAM2B,CAAS,EAClD,OAAAX,EAAS,KACP,YACA,aAAa,CAACG,EAAY,EAAIE,CAAK,IACjCf,EACIL,EAAK,OAAS,EAAII,EAAe,EAAIe,EAAa,EAAIE,EACtD,CAACrB,EAAK,OAAS,EAAII,EAAe,EAAIe,EAAa,EAAIE,CAC7D,GACF,EACAN,EAAS,KAAK,QAAS,UAAUP,EAAU,IAAI,QAAQ,GAAKF,CAAU,GAAG,EACzEL,EAAM,KACJ,YACA,aAAa,CAACD,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,IACxDK,EAAW,CAACoB,EAAc,EAAIA,EAAc,EAAIzB,EAAK,MACvD,GACF,EAEA2B,EAAU,KACR,YACA,eACEtB,EAAWL,EAAK,OAAS,EAAII,EAAe,EAAI,CAACJ,EAAK,OAAS,EAAII,EAAe,CACpF,GACF,EAEAyB,EAAiBvC,EAAMsC,CAAU,EAEjCtC,EAAK,UAAY,SAAUwC,EAAO,CAChC,OAAAC,EAAI,KAAK,uBAAwBzC,EAAMwC,CAAK,EAChCE,EAAU,KAAK1C,EAAMwC,CAAK,CAExC,EAEO/B,CACT,CA9FsBkC,EAAA7C,GAAA,cCCtB,eAAsB8C,GACpBC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,EAAgB,UAAAC,CAAU,CAAE,EACxC,CACA,GAAM,CAAE,YAAAC,CAAY,EAAIC,EAAcJ,CAAI,EAC1CA,EAAK,WAAaG,EAClB,IAAME,EAAcL,EAAK,aAAe,GAClCM,EAAaN,EAAK,YAAc,GAChCO,EAAW,KAAK,IAAIF,EAAaC,CAAU,EAC3CE,EAAeN,GAAW,cAChCF,EAAK,MAAQ,KAAK,IAAIO,EAAUC,GAAgB,CAAC,EACjD,GAAM,CAAE,SAAAC,EAAU,KAAAC,EAAM,YAAAC,EAAa,MAAAC,CAAM,EAAI,MAAMC,EACnDd,EACAC,EACA,oBACF,EAEMc,EAAWd,EAAK,MAAQ,IAExBe,EAASR,EAAWI,EAAc,EAClCK,EAAQT,EAAWI,EAAc,EACjC,CAAE,WAAAM,EAAY,QAAAC,CAAQ,EAAIjB,EAC1B,CAAE,UAAAkB,CAAU,EAAIC,GAAcpB,CAAI,EAElCqB,EAAI,CAACL,EAAQ,EACbM,EAAI,CAACP,EAAS,EAEdQ,EAAevB,EAAK,MAAQ,EAAI,EAGhCwB,EAAKC,EAAM,IAAIhB,CAAQ,EACvBiB,EAAUC,EAAkB3B,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChB0B,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAEtB,IAAME,EAAOT,EAAU,IAAI,MAAM,EACjCO,EAAQ,OAASE,GAAQV,EAEzB,IAAMW,EAAWL,EAAG,KAAKM,EAAuBT,EAAGC,EAAGN,EAAOD,EAAQ,CAAC,EAAGW,CAAO,EAE1EK,EAAa,KAAK,IAAIf,EAAON,EAAK,KAAK,EACvCsB,EAAcjB,EAASL,EAAK,OAASa,EAErCU,EAAYT,EAAG,UAAU,CAACO,EAAa,EAAG,CAACC,EAAc,EAAGD,EAAYC,EAAa,CACzF,GAAGN,EACH,KAAM,cACN,OAAQ,MACV,CAAC,EAEKQ,EAAYzB,EAAS,OAAO,IAAMoB,EAAU,cAAc,EAAE,KAAK,QAAS,aAAa,EACvFM,EAAa1B,EAAS,OAAO,IAAMwB,CAAS,EAElD,GAAIjC,EAAK,KAAM,CACb,IAAMoC,EAAW3B,EAAS,OAAO,GAAG,EACpC2B,EAAS,KACP,MAAM,MAAMC,GAAWrC,EAAK,KAAM,CAChC,OAAQO,EACR,MAAOA,EACP,eAAgB,EAClB,CAAC,CAAC,MACJ,EACA,IAAM+B,EAAWF,EAAS,KAAK,EAAG,QAAQ,EACpCG,EAAYD,EAAS,MACrBE,EAAaF,EAAS,OACtBG,EAAQH,EAAS,EACjBI,GAAQJ,EAAS,EACvBF,EAAS,KACP,YACA,aAAa,CAACG,EAAY,EAAIE,CAAK,IACjC3B,EACIJ,EAAK,OAAS,EAAIa,EAAe,EAAIiB,EAAa,EAAIE,GACtD,CAAChC,EAAK,OAAS,EAAIa,EAAe,EAAIiB,EAAa,EAAIE,EAC7D,GACF,EACAN,EAAS,KAAK,QAAS,UAAUjB,EAAU,IAAI,QAAQ,GAAKF,CAAU,GAAG,CAC3E,CAEA,OAAAL,EAAM,KACJ,YACA,aAAa,CAACF,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,IACxDI,EAAW,CAACkB,EAAc,EAAIA,EAAc,EAAItB,EAAK,MACvD,GACF,EAEAwB,EAAU,KACR,YACA,eACEpB,EAAWJ,EAAK,OAAS,EAAIa,EAAe,EAAI,CAACb,EAAK,OAAS,EAAIa,EAAe,CACpF,GACF,EAEAoB,EAAiB3C,EAAMmC,CAAU,EAEjCnC,EAAK,UAAY,SAAU4C,EAAO,CAEhC,GADAC,EAAI,KAAK,uBAAwB7C,EAAM4C,CAAK,EACxC,CAAC5C,EAAK,MACR,OAAO8C,EAAU,KAAK9C,EAAM4C,CAAK,EAEnC,IAAMG,EAAK/C,EAAK,GAAK,EACfgD,EAAKhD,EAAK,GAAK,EACfiD,EAAajD,EAAK,QAAU,EAC9BkD,EAAS,CAAC,EACd,OAAIpC,EACFoC,EAAS,CACP,CAAE,EAAGH,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,EAC9E,CAAE,EAAGwB,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,EACzE,CAAE,EAAGwB,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,EACzE,CAAE,EAAGwB,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,CAChF,EAEA2B,EAAS,CACP,CAAE,EAAGH,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIlC,CAAO,EACrD,CAAE,EAAGgC,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIlC,CAAO,EAC1D,CAAE,EAAGgC,EAAKrC,EAAK,MAAQ,EAAI,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACrD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIlC,CAAO,EAC1D,CAAE,EAAGgC,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIlC,CAAO,CACvD,EAGU+B,EAAU,QAAQ9C,EAAMkD,EAAQN,CAAK,CAEnD,EAEOnC,CACT,CAtIsB0C,EAAArD,GAAA,eCAtB,eAAsBsD,GACpBC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,EAAgB,UAAAC,CAAU,CAAE,EACxC,CACA,GAAM,CAAE,YAAAC,CAAY,EAAIC,EAAcJ,CAAI,EAC1CA,EAAK,WAAaG,EAClB,IAAME,EAAcL,EAAK,aAAe,GAClCM,EAAaN,EAAK,YAAc,GAChCO,EAAW,KAAK,IAAIF,EAAaC,CAAU,EAC3CE,EAAeN,GAAW,cAChCF,EAAK,MAAQ,KAAK,IAAIO,EAAUC,GAAgB,CAAC,EACjD,GAAM,CAAE,SAAAC,EAAU,KAAAC,EAAM,YAAAC,EAAa,MAAAC,CAAM,EAAI,MAAMC,EACnDd,EACAC,EACA,oBACF,EAEMc,EAAWd,EAAK,MAAQ,IAExBe,EAASR,EAAWI,EAAc,EAClCK,EAAQT,EAAWI,EAAc,EACjC,CAAE,WAAAM,EAAY,QAAAC,CAAQ,EAAIjB,EAC1B,CAAE,UAAAkB,CAAU,EAAIC,GAAcpB,CAAI,EAElCqB,EAAI,CAACL,EAAQ,EACbM,EAAI,CAACP,EAAS,EAEdQ,EAAevB,EAAK,MAAQ,EAAI,EAGhCwB,EAAKC,EAAM,IAAIhB,CAAQ,EACvBiB,EAAUC,EAAkB3B,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChB0B,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAEtB,IAAME,EAAOT,EAAU,IAAI,MAAM,EACjCO,EAAQ,OAASE,GAAQV,EAEzB,IAAMW,EAAWL,EAAG,KAAKM,EAAuBT,EAAGC,EAAGN,EAAOD,EAAQ,EAAG,EAAGW,CAAO,EAE5EK,EAAa,KAAK,IAAIf,EAAON,EAAK,KAAK,EACvCsB,EAAcjB,EAASL,EAAK,OAASa,EAErCU,EAAYT,EAAG,UAAU,CAACO,EAAa,EAAG,CAACC,EAAc,EAAGD,EAAYC,EAAa,CACzF,GAAGN,EACH,KAAM,cACN,OAAQ,MACV,CAAC,EAEKQ,EAAYzB,EAAS,OAAO,IAAMoB,EAAU,cAAc,EAC1DM,EAAa1B,EAAS,OAAO,IAAMwB,CAAS,EAElD,GAAIjC,EAAK,KAAM,CACb,IAAMoC,EAAW3B,EAAS,OAAO,GAAG,EACpC2B,EAAS,KACP,MAAM,MAAMC,GAAWrC,EAAK,KAAM,CAChC,OAAQO,EACR,MAAOA,EACP,eAAgB,EAClB,CAAC,CAAC,MACJ,EACA,IAAM+B,EAAWF,EAAS,KAAK,EAAG,QAAQ,EACpCG,EAAYD,EAAS,MACrBE,EAAaF,EAAS,OACtBG,EAAQH,EAAS,EACjBI,GAAQJ,EAAS,EACvBF,EAAS,KACP,YACA,aAAa,CAACG,EAAY,EAAIE,CAAK,IACjC3B,EACIJ,EAAK,OAAS,EAAIa,EAAe,EAAIiB,EAAa,EAAIE,GACtD,CAAChC,EAAK,OAAS,EAAIa,EAAe,EAAIiB,EAAa,EAAIE,EAC7D,GACF,EACAN,EAAS,KAAK,QAAS,UAAUjB,EAAU,IAAI,QAAQ,GAAKF,CAAU,GAAG,CAC3E,CAEA,OAAAL,EAAM,KACJ,YACA,aAAa,CAACF,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,IACxDI,EAAW,CAACkB,EAAc,EAAIA,EAAc,EAAItB,EAAK,MACvD,GACF,EAEAwB,EAAU,KACR,YACA,eACEpB,EAAWJ,EAAK,OAAS,EAAIa,EAAe,EAAI,CAACb,EAAK,OAAS,EAAIa,EAAe,CACpF,GACF,EAEAoB,EAAiB3C,EAAMmC,CAAU,EAEjCnC,EAAK,UAAY,SAAU4C,EAAO,CAEhC,GADAC,EAAI,KAAK,uBAAwB7C,EAAM4C,CAAK,EACxC,CAAC5C,EAAK,MACR,OAAO8C,EAAU,KAAK9C,EAAM4C,CAAK,EAEnC,IAAMG,EAAK/C,EAAK,GAAK,EACfgD,EAAKhD,EAAK,GAAK,EACfiD,EAAajD,EAAK,QAAU,EAC9BkD,EAAS,CAAC,EACd,OAAIpC,EACFoC,EAAS,CACP,CAAE,EAAGH,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,EAC9E,CAAE,EAAGwB,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,EACzE,CAAE,EAAGwB,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,EACzE,CAAE,EAAGwB,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIvC,EAAK,OAASa,CAAa,CAChF,EAEA2B,EAAS,CACP,CAAE,EAAGH,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,CAAE,EAC5C,CAAE,EAAGF,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIlC,CAAO,EACrD,CAAE,EAAGgC,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIlC,CAAO,EAC1D,CAAE,EAAGgC,EAAKrC,EAAK,MAAQ,EAAI,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACrD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKrC,EAAK,MAAQ,EAAG,EAAGsC,EAAKC,EAAa,EAAIlC,CAAO,EAC1D,CAAE,EAAGgC,EAAK/B,EAAQ,EAAG,EAAGgC,EAAKC,EAAa,EAAIlC,CAAO,CACvD,EAGU+B,EAAU,QAAQ9C,EAAMkD,EAAQN,CAAK,CAEnD,EAEOnC,CACT,CAtIsB0C,EAAArD,GAAA,cCFtB,eAAsBsD,GACpBC,EACAC,EACA,CAAE,OAAQ,CAAE,UAAAC,CAAU,CAAE,EACxB,CACA,IAAMC,EAAM,IAAI,MAChBA,EAAI,IAAMF,GAAM,KAAO,GACvB,MAAME,EAAI,OAAO,EAEjB,IAAMC,EAAoB,OAAOD,EAAI,aAAa,SAAS,EAAE,QAAQ,KAAM,EAAE,CAAC,EACxEE,EAAqB,OAAOF,EAAI,cAAc,SAAS,EAAE,QAAQ,KAAM,EAAE,CAAC,EAChFF,EAAK,iBAAmBG,EAAoBC,EAE5C,GAAM,CAAE,YAAAC,CAAY,EAAIC,EAAcN,CAAI,EAE1CA,EAAK,WAAaK,EAElB,IAAME,EAAeN,GAAW,cAChCD,EAAK,aAAeC,GAAW,cAE/B,IAAMO,EAAgB,KAAK,IACzBR,EAAK,MAASO,GAAgB,EAAK,EACnCP,GAAM,YAAcG,CACtB,EAEMM,EACJT,EAAK,aAAe,MAChBA,GAAM,YACJA,EAAK,YAAcA,EAAK,iBAE1BQ,EAEAE,EACJV,EAAK,aAAe,KAChBS,EAAaT,EAAK,iBACjBA,GAAM,aAAeI,EAC5BJ,EAAK,MAAQ,KAAK,IAAIS,EAAYF,GAAgB,CAAC,EACnD,GAAM,CAAE,SAAAI,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYf,EAAQC,EAAM,qBAAqB,EAEjFe,EAAWf,EAAK,MAAQ,IAExBgB,EAAI,CAACP,EAAa,EAClBQ,EAAI,CAACP,EAAc,EAEnBQ,EAAelB,EAAK,MAAQ,EAAI,EAGhCmB,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAUC,EAAkBtB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBqB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAYJ,EAAG,UAAUH,EAAGC,EAAGR,EAAYC,EAAaW,CAAO,EAE/DG,EAAa,KAAK,IAAIf,EAAYG,EAAK,KAAK,EAC5Ca,EAAcf,EAAcE,EAAK,OAASM,EAE1CQ,EAAYP,EAAG,UAAU,CAACK,EAAa,EAAG,CAACC,EAAc,EAAGD,EAAYC,EAAa,CACzF,GAAGJ,EACH,KAAM,OACN,OAAQ,MACV,CAAC,EAEKM,EAAYhB,EAAS,OAAO,IAAMY,EAAW,cAAc,EAC3DK,EAAajB,EAAS,OAAO,IAAMe,CAAS,EAElD,GAAI1B,EAAK,IAAK,CACZ,IAAM6B,EAAQlB,EAAS,OAAO,OAAO,EAGrCkB,EAAM,KAAK,OAAQ7B,EAAK,GAAG,EAC3B6B,EAAM,KAAK,QAASpB,CAAU,EAC9BoB,EAAM,KAAK,SAAUnB,CAAW,EAChCmB,EAAM,KAAK,sBAAuB,MAAM,EAExCA,EAAM,KACJ,YACA,aAAa,CAACpB,EAAa,CAAC,IAAIM,EAAWU,EAAc,EAAIf,EAAc,CAACe,EAAc,CAAC,GAC7F,CACF,CAEA,OAAAZ,EAAM,KACJ,YACA,aAAa,CAACD,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,IACxDG,EACI,CAACL,EAAc,EAAIE,EAAK,OAAS,EAAIM,EAAe,EACpDR,EAAc,EAAIE,EAAK,OAAS,EAAIM,EAAe,CACzD,GACF,EAEAS,EAAU,KACR,YACA,eACEZ,EAAWH,EAAK,OAAS,EAAIM,EAAe,EAAI,CAACN,EAAK,OAAS,EAAIM,EAAe,CACpF,GACF,EAEAY,EAAiB9B,EAAM4B,CAAU,EAEjC5B,EAAK,UAAY,SAAU+B,EAAO,CAEhC,GADAC,EAAI,KAAK,uBAAwBhC,EAAM+B,CAAK,EACxC,CAAC/B,EAAK,MACR,OAAOiC,EAAU,KAAKjC,EAAM+B,CAAK,EAEnC,IAAMG,EAAKlC,EAAK,GAAK,EACfmC,EAAKnC,EAAK,GAAK,EACfoC,EAAapC,EAAK,QAAU,EAC9BqC,EAAS,CAAC,EACd,OAAItB,EACFsB,EAAS,CACP,CAAE,EAAGH,EAAKtB,EAAK,MAAQ,EAAG,EAAGuB,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKtB,EAAK,MAAQ,EAAG,EAAGuB,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKtB,EAAK,MAAQ,EAAG,EAAGuB,EAAKC,EAAa,EAAIxB,EAAK,OAASM,CAAa,EAC9E,CAAE,EAAGgB,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,EAAIxB,EAAK,OAASM,CAAa,EAC9E,CAAE,EAAGgB,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,EAAIxB,EAAK,OAASM,CAAa,EAC9E,CAAE,EAAGgB,EAAKtB,EAAK,MAAQ,EAAG,EAAGuB,EAAKC,EAAa,EAAIxB,EAAK,OAASM,CAAa,CAChF,EAEAmB,EAAS,CACP,CAAE,EAAGH,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,EAAI1B,CAAY,EAC/D,CAAE,EAAGwB,EAAKtB,EAAK,MAAQ,EAAG,EAAGuB,EAAKC,EAAa,EAAI1B,CAAY,EAC/D,CAAE,EAAGwB,EAAKtB,EAAK,MAAQ,EAAI,EAAG,EAAGuB,EAAKC,EAAa,CAAE,EACrD,CAAE,EAAGF,EAAKtB,EAAK,MAAQ,EAAG,EAAGuB,EAAKC,EAAa,CAAE,EACjD,CAAE,EAAGF,EAAKtB,EAAK,MAAQ,EAAG,EAAGuB,EAAKC,EAAa,EAAI1B,CAAY,EAC/D,CAAE,EAAGwB,EAAKzB,EAAa,EAAG,EAAG0B,EAAKC,EAAa,EAAI1B,CAAY,CACjE,EAGUuB,EAAU,QAAQjC,EAAMqC,EAAQN,CAAK,CAEnD,EAEOpB,CACT,CA5IsB2B,EAAAxC,GAAA,eCetB,eAAsByC,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAI,KAAK,IAAIH,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnES,EAAI,KAAK,IAAIJ,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EAErEU,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAGF,EAAG,EAAG,CAAE,EACb,CAAE,EAAGA,EAAK,EAAIC,EAAK,EAAG,EAAG,CAACA,CAAE,EAC5B,CAAE,EAAI,GAAKA,EAAK,EAAG,EAAG,CAACA,CAAE,CAC3B,EAEIE,EACE,CAAE,UAAAC,CAAU,EAAIZ,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EACpCiB,EAAWC,EAAqBR,CAAM,EAEtCS,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAUP,EACP,OAAO,IAAMe,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACX,EAAI,CAAC,KAAKC,EAAI,CAAC,GAAG,EAEjDG,GACFD,EAAQ,KAAK,QAASC,CAAS,CAEnC,MACED,EAAUS,EAAmBhB,EAAUI,EAAGC,EAAGC,CAAM,EAGrD,OAAIR,GACFS,EAAQ,KAAK,QAAST,CAAU,EAGlCF,EAAK,MAAQQ,EACbR,EAAK,OAASS,EAEdY,EAAiBrB,EAAMW,CAAO,EAE9BX,EAAK,UAAY,SAAUsB,EAAO,CAChC,OAAOC,EAAU,QAAQvB,EAAMU,EAAQY,CAAK,CAC9C,EAEOlB,CACT,CAtDsBoB,EAAA1B,GAAA,iBCdtB,eAAsB2B,GACpBC,EACAC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcJ,CAAI,EACtDA,EAAK,WAAaE,EAElB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAEzES,EAAa,KAAK,IAAIH,EAAK,MAAQL,EAAQ,cAAgB,EAAGD,GAAM,OAAS,CAAC,EAC9EU,EAAc,KAAK,IAAIJ,EAAK,OAASL,EAAQ,cAAgB,EAAGD,GAAM,QAAU,CAAC,EACjFW,EAAI,CAACF,EAAa,EAClBG,EAAI,CAACF,EAAc,EAIrBG,EACA,CAAE,GAAAC,EAAI,GAAAC,CAAG,EAAIf,EACX,CAAE,UAAAgB,CAAU,EAAIhB,EAQtB,GALIC,GAAS,IAAMA,EAAQ,KACzBa,EAAKb,EAAQ,GACbc,EAAKd,EAAQ,IAGXD,EAAK,OAAS,YAAa,CAE7B,IAAMiB,EAAKC,EAAM,IAAIb,CAAQ,EACvBJ,EAAUkB,EAAkBnB,EAAM,CAAC,CAAC,EAEpCoB,EACJN,GAAMC,EACFE,EAAG,KAAKI,EAAuBV,EAAGC,EAAGH,EAAYC,EAAaI,GAAM,CAAC,EAAGb,CAAO,EAC/EgB,EAAG,UAAUN,EAAGC,EAAGH,EAAYC,EAAaT,CAAO,EAEzDY,EAAOR,EAAS,OAAO,IAAMe,EAAW,cAAc,EACtDP,EAAK,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAASS,EAAoBN,CAAS,CAAC,CAC1F,MACEH,EAAOR,EAAS,OAAO,OAAQ,cAAc,EAE7CQ,EACG,KAAK,QAAS,uBAAuB,EACrC,KAAK,QAASV,CAAU,EACxB,KAAK,KAAMmB,EAAoBR,CAAE,CAAC,EAClC,KAAK,KAAMQ,EAAoBP,CAAE,CAAC,EAClC,KAAK,IAAKJ,CAAC,EACX,KAAK,IAAKC,CAAC,EACX,KAAK,QAASH,CAAU,EACxB,KAAK,SAAUC,CAAW,EAG/B,OAAAa,EAAiBvB,EAAMa,CAAI,EAE3Bb,EAAK,UAAY,SAAUwB,EAAO,CAChC,OAAOC,EAAU,KAAKzB,EAAMwB,CAAK,CACnC,EAEOnB,CACT,CA5DsBqB,EAAA5B,GAAA,YCYtB,eAAsB6B,GAAwCC,EAAwBC,EAAY,CAChG,GAAM,CAAE,SAAAC,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYL,EAAQC,EAAM,OAAO,EAInEK,EAAOJ,EAAS,OAAO,OAAQ,cAAc,EAKnD,OAAAI,EAAK,KAAK,QAFS,EAEU,EAAE,KAAK,SADhB,EACqC,EACzDJ,EAAS,KAAK,QAAS,iBAAiB,EACxCE,EAAM,KACJ,YACA,aAAa,EAAED,EAAK,MAAQ,IAAMA,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,IAAMA,EAAK,GAAKA,EAAK,KAAO,GAAG,GAClH,EAaAI,EAAiBN,EAAMK,CAAI,EAI3BL,EAAK,UAAY,SAAUO,EAAO,CAChC,OAAOC,EAAU,KAAKR,EAAMO,CAAK,CACnC,EAEON,CACT,CArCsBQ,EAAAX,GAAA,aCbtB,eAAsBY,GAAwCC,EAAwBC,EAAY,CAChG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EACzEQ,EAAI,KAAK,IAAIH,EAAK,OAASL,EAAK,SAAW,GAAIA,GAAM,OAAS,CAAC,EAC/DS,EAAI,KAAK,IAAIJ,EAAK,QAAUL,EAAK,SAAW,GAAIA,GAAM,QAAU,CAAC,EACjEU,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAGF,EAAK,EAAIC,EAAK,EAAG,EAAG,CAAE,EAC3B,CAAE,EAAGD,EAAG,EAAG,CAACC,CAAE,EACd,CAAE,EAAG,EAAE,EAAIA,GAAK,EAAG,EAAG,CAACA,CAAE,CAC3B,EAEIE,EACE,CAAE,UAAAC,CAAU,EAAIZ,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EACpCiB,EAAWC,EAAqBR,CAAM,EAEtCS,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAUP,EACP,OAAO,IAAMe,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACX,EAAI,CAAC,KAAKC,EAAI,CAAC,GAAG,EAEjDG,GACFD,EAAQ,KAAK,QAASC,CAAS,CAEnC,MACED,EAAUS,EAAmBhB,EAAUI,EAAGC,EAAGC,CAAM,EAGrD,OAAIR,GACFS,EAAQ,KAAK,QAAST,CAAU,EAGlCF,EAAK,MAAQQ,EACbR,EAAK,OAASS,EAEdY,EAAiBrB,EAAMW,CAAO,EAE9BX,EAAK,UAAY,SAAUsB,EAAO,CAChC,OAAOC,EAAU,QAAQvB,EAAMU,EAAQY,CAAK,CAC9C,EAEOlB,CACT,CAjDsBoB,EAAA1B,GAAA,aCAtB,eAAsB2B,GAAyCC,EAAwBC,EAAY,CACjG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EACzEQ,EAAI,KAAK,IAAIH,EAAK,OAASL,EAAK,SAAW,GAAIA,GAAM,OAAS,CAAC,EAC/DS,EAAI,KAAK,IAAIJ,EAAK,QAAUL,EAAK,SAAW,GAAIA,GAAM,QAAU,CAAC,EACjEU,EAAS,CACb,CAAE,EAAI,GAAKD,EAAK,EAAG,EAAG,CAAE,EACxB,CAAE,EAAGD,EAAG,EAAG,CAAE,EACb,CAAE,EAAGA,EAAK,EAAIC,EAAK,EAAG,EAAG,CAACA,CAAE,EAC5B,CAAE,EAAG,EAAG,EAAG,CAACA,CAAE,CAChB,EAEIE,EACE,CAAE,UAAAC,CAAU,EAAIZ,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EACpCiB,EAAWC,EAAqBR,CAAM,EACtCS,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAUP,EACP,OAAO,IAAMe,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACX,EAAI,CAAC,KAAKC,EAAI,CAAC,GAAG,EAEjDG,GACFD,EAAQ,KAAK,QAASC,CAAS,CAEnC,MACED,EAAUS,EAAmBhB,EAAUI,EAAGC,EAAGC,CAAM,EAGrD,OAAIR,GACFS,EAAQ,KAAK,QAAST,CAAU,EAGlCF,EAAK,MAAQQ,EACbR,EAAK,OAASS,EAEdY,EAAiBrB,EAAMW,CAAO,EAE9BX,EAAK,UAAY,SAAUsB,EAAO,CAChC,OAAOC,EAAU,QAAQvB,EAAMU,EAAQY,CAAK,CAC9C,EAEOlB,CACT,CAhDsBoB,EAAA1B,GAAA,cCCf,SAAS2B,GAA4CC,EAAwBC,EAAY,CAC9F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,MAAQ,GACbA,EAAK,WAAaC,EAClB,IAAMG,EAAWL,EACd,OAAO,GAAG,EACV,KAAK,QAASM,EAAeL,CAAI,CAAC,EAClC,KAAK,KAAMA,EAAK,OAASA,EAAK,EAAE,EAC7B,CAAE,UAAAM,CAAU,EAAIN,EAChBO,EAAQ,KAAK,IAAI,GAAIP,GAAM,OAAS,CAAC,EACrCQ,EAAS,KAAK,IAAI,GAAIR,GAAM,QAAU,CAAC,EACvCS,EAAM,EAENC,EAAS,CACb,CAAE,EAAGH,EAAO,EAAG,CAAE,EACjB,CAAE,EAAG,EAAG,EAAGC,EAASC,EAAM,CAAE,EAC5B,CAAE,EAAGF,EAAQ,EAAIE,EAAK,EAAGD,EAASC,EAAM,CAAE,EAC1C,CAAE,EAAG,EAAG,EAAG,EAAID,CAAO,EACtB,CAAE,EAAGD,EAAO,EAAGC,EAASC,EAAM,CAAE,EAChC,CAAE,EAAG,EAAIA,EAAK,EAAGD,EAASC,EAAM,CAAE,CACpC,EAGME,EAAKC,EAAM,IAAIR,CAAQ,EACvBS,EAAUC,EAAkBd,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBa,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAWC,EAAqBN,CAAM,EACtCO,EAAWN,EAAG,KAAKI,EAAUF,CAAO,EAEpCf,EAAgBM,EAAS,OAAO,IAAMa,EAAU,cAAc,EAEpE,OAAIX,GAAaN,EAAK,OAAS,aAC7BF,EAAc,UAAU,MAAM,EAAE,KAAK,QAASQ,CAAS,EAGrDJ,GAAcF,EAAK,OAAS,aAC9BF,EAAc,UAAU,MAAM,EAAE,KAAK,QAASI,CAAU,EAG1DJ,EAAc,KAAK,YAAa,cAAcS,EAAQ,CAAC,IAAI,CAACC,CAAM,GAAG,EAErEU,EAAiBlB,EAAMF,CAAa,EAEpCE,EAAK,UAAY,SAAUmB,EAAO,CAChC,OAAAC,EAAI,KAAK,0BAA2BpB,EAAMmB,CAAK,EACnCE,EAAU,QAAQrB,EAAMU,EAAQS,CAAK,CAGnD,EAEOf,CACT,CAxDgBkB,EAAAxB,GAAA,iBCDT,IAAMyB,GAAsBC,EAAA,CACjCC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CACL,IAAIN,CAAC,IAAIC,EAAII,CAAE,GACf,IAAID,CAAE,IAAIC,CAAE,UAAUH,CAAK,KAC3B,IAAIE,CAAE,IAAIC,CAAE,UAAU,CAACH,CAAK,KAC5B,MAAMC,CAAM,GACZ,IAAIC,CAAE,IAAIC,CAAE,UAAUH,CAAK,KAC3B,MAAM,CAACC,CAAM,GACb,IAAIH,CAAC,IAAIC,EAAII,EAAKC,CAAW,GAC7B,IAAIF,CAAE,IAAIC,CAAE,UAAUH,CAAK,IAC7B,EAAE,KAAK,GAAG,EAlBuB,uBAoBtBK,GAA2BR,EAAA,CACtCC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CACL,IAAIN,CAAC,IAAIC,EAAII,CAAE,GACf,IAAIL,EAAIE,CAAK,IAAID,EAAII,CAAE,GACvB,IAAID,CAAE,IAAIC,CAAE,UAAU,CAACH,CAAK,KAC5B,MAAMC,CAAM,GACZ,IAAIC,CAAE,IAAIC,CAAE,UAAUH,CAAK,KAC3B,MAAM,CAACC,CAAM,GACb,IAAIH,CAAC,IAAIC,EAAII,EAAKC,CAAW,GAC7B,IAAIF,CAAE,IAAIC,CAAE,UAAUH,CAAK,IAC7B,EAAE,KAAK,GAAG,EAlB4B,4BAoB3BM,GAA2BT,EAAA,CACtCC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CAAC,IAAIL,EAAIE,EAAQ,CAAC,IAAI,CAACC,EAAS,CAAC,GAAI,IAAIC,CAAE,IAAIC,CAAE,UAAUH,CAAK,IAAI,EAAE,KAAK,GAAG,EAR/C,4BAUxC,eAAsBO,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAIA,EAAK,OAAS,CAAC,EAC9DP,EAAKgB,EAAI,EACTf,EAAKD,GAAM,IAAMgB,EAAI,IACrBC,EAAI,KAAK,IAAIL,EAAK,OAASX,GAAMM,EAAK,SAAW,GAAIA,EAAK,QAAU,CAAC,EACrEL,EAAce,EAAI,GAEpBC,EACE,CAAE,UAAAC,CAAU,EAAIZ,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAgBnB,GAAyB,EAAG,EAAGa,EAAGC,EAAGjB,EAAIC,EAAIC,CAAW,EACxEqB,EAAgBnB,GAAyB,EAAGH,EAAIe,EAAGC,EAAGjB,EAAIC,CAAE,EAC5DuB,EAAUC,EAAkBlB,EAAM,CAAC,CAAC,EAEpCmB,EAAYN,EAAG,KAAKE,EAAeE,CAAO,EAC1CG,EAAYP,EAAG,KAAKG,EAAeC,CAAO,EAE5Bb,EAAS,OAAO,IAAMgB,EAAW,cAAc,EACvD,KAAK,QAAS,MAAM,EAChCT,EAAWP,EAAS,OAAO,IAAMe,EAAW,cAAc,EAC1DR,EAAS,KAAK,QAAS,uBAAuB,EAC1CC,GACFD,EAAS,KAAK,QAASC,CAAS,CAEpC,KAAO,CACL,IAAMS,EAAWlC,GAAoB,EAAG,EAAGsB,EAAGC,EAAGjB,EAAIC,EAAIC,CAAW,EACpEgB,EAAWP,EACR,OAAO,OAAQ,cAAc,EAC7B,KAAK,IAAKiB,CAAQ,EAClB,KAAK,QAAS,uBAAuB,EACrC,KAAK,QAASC,EAAoBV,CAAS,CAAC,EAC5C,KAAK,QAASV,CAAU,CAC7B,CAGA,OAAAS,EAAS,KAAK,iBAAkBjB,CAAE,EAClCiB,EAAS,KAAK,YAAa,aAAa,CAACF,EAAI,CAAC,KAAK,EAAEC,EAAI,EAAIhB,EAAG,GAAG,EAEnE6B,EAAiBvB,EAAMW,CAAQ,EAE/BL,EAAM,KACJ,YACA,aAAa,EAAED,EAAK,MAAQ,IAAMA,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,GAAKX,GAAMW,EAAK,GAAKA,EAAK,KAAO,GAAG,GACvH,EAEAL,EAAK,UAAY,SAAUwB,EAAO,CAChC,IAAMC,EAAMC,EAAU,KAAK1B,EAAMwB,CAAK,EAChC,EAAIC,EAAI,GAAKzB,EAAK,GAAK,GAE7B,GACEP,GAAM,IACL,KAAK,IAAI,CAAC,GAAKO,EAAK,OAAS,GAAK,GAChC,KAAK,IAAI,CAAC,IAAMA,EAAK,OAAS,GAAK,GAClC,KAAK,IAAIyB,EAAI,GAAKzB,EAAK,GAAK,EAAE,GAAKA,EAAK,QAAU,GAAK,EAAIN,GAC/D,CACA,IAAI,EAAIA,EAAKA,GAAM,EAAK,EAAI,GAAMD,EAAKA,IACnC,EAAI,IACN,EAAI,KAAK,KAAK,CAAC,GAEjB,EAAIC,EAAK,EACL8B,EAAM,GAAKxB,EAAK,GAAK,GAAK,IAC5B,EAAI,CAAC,GAGPyB,EAAI,GAAK,CACX,CAEA,OAAOA,CACT,EAEOrB,CACT,CAhFsBhB,EAAAU,GAAA,iBC9CtB,eAAsB6B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnE,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAgB,EAAI,EACpBC,EAAS,EAAID,EACb,CAAE,UAAAE,CAAU,EAAIZ,EAGhBa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBe,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAG,CAACR,EAAI,EAAKA,EAAI,EAAK,GAAK,EAAG,CAACE,EAAS,CAAE,EAC5C,CAAE,EAAG,CAACF,EAAI,EAAKA,EAAI,EAAK,GAAK,EAAGE,EAAS,CAAE,EAC3C,GAAGO,GACD,CAACT,EAAI,EAAKA,EAAI,EAAK,GACnBE,EAAS,EACTF,EAAI,EAAKA,EAAI,EAAK,GAClBE,EAAS,EACTD,EACA,EACF,EACA,CAAE,EAAGD,EAAI,EAAKA,EAAI,EAAK,GAAK,EAAG,CAACE,EAAS,CAAE,EAC3C,CAAE,EAAG,CAACF,EAAI,EAAKA,EAAI,EAAK,GAAK,EAAG,CAACE,EAAS,CAAE,EAC5C,CAAE,EAAG,CAACF,EAAI,EAAG,EAAG,CAACE,EAAS,CAAE,EAC5B,CAAE,EAAG,CAACF,EAAI,EAAG,EAAIE,EAAS,EAAK,GAAI,EACnC,CAAE,EAAG,CAACF,EAAI,EAAG,EAAG,CAACE,EAAS,CAAE,CAC9B,EAEMQ,EAAON,EAAG,QACdI,EAAO,IAAKG,GAAM,CAACA,EAAE,EAAGA,EAAE,CAAC,CAAC,EAC5BL,CACF,EAEMM,EAAejB,EAAS,OAAO,IAAMe,EAAM,cAAc,EAE/D,OAAAE,EAAa,KAAK,QAAS,uBAAuB,EAE9CT,GAAaZ,EAAK,OAAS,aAC7BqB,EAAa,UAAU,MAAM,EAAE,KAAK,QAAST,CAAS,EAGpDV,GAAcF,EAAK,OAAS,aAC9BqB,EAAa,UAAU,MAAM,EAAE,KAAK,QAASnB,CAAU,EAGzDmB,EAAa,KAAK,YAAa,eAAe,CAACX,EAAgB,CAAC,GAAG,EACnEJ,EAAM,KACJ,YACA,aAAa,CAACG,EAAI,GAAKT,EAAK,SAAW,GAAOS,EAAI,EAAK,GAAO,GAAKJ,EAAK,GAAKA,EAAK,MAAQ,GAAG,IAAI,CAAC,EAAI,GAAKL,EAAK,SAAW,GAAKU,EAAgB,GAAKL,EAAK,GAAKA,EAAK,KAAO,GAAG,GAChL,EAEAiB,EAAiBtB,EAAMqB,CAAY,EACnCrB,EAAK,UAAY,SAAUuB,EAAO,CAEhC,OADYC,EAAU,QAAQxB,EAAMiB,EAAQM,CAAK,CAEnD,EAEOnB,CACT,CAtEsBqB,EAAA3B,GAAA,sBCLtB,eAAsB4B,GAAwCC,EAAwBC,EAAY,CAChG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnE,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAa,EACbC,EAAI,CAACF,EAAI,EACTG,EAAI,CAAC,EAAI,EACT,CAAE,UAAAC,CAAU,EAAIb,EAGhBc,EAAKC,EAAM,IAAIX,CAAQ,EACvBY,EAAUC,EAAkBjB,EAAM,CAAC,CAAC,EAEpCkB,EAAkB,CACtB,CAAE,EAAGP,EAAID,EAAY,EAAGE,EAAIF,CAAW,EACvC,CAAE,EAAGC,EAAID,EAAY,EAAGE,EAAI,EAAIF,CAAW,EAC3C,CAAE,EAAGC,EAAIF,EAAIC,EAAY,EAAGE,EAAI,EAAIF,CAAW,EAC/C,CAAE,EAAGC,EAAIF,EAAIC,EAAY,EAAGE,EAAI,CAAE,EAClC,CAAE,EAAGD,EAAIF,EAAG,EAAGG,EAAI,CAAE,EACrB,CAAE,EAAGD,EAAIF,EAAG,EAAGG,EAAI,EAAIF,CAAW,EAClC,CAAE,EAAGC,EAAIF,EAAIC,EAAY,EAAGE,EAAI,EAAIF,CAAW,EAC/C,CAAE,EAAGC,EAAIF,EAAIC,EAAY,EAAGE,EAAIF,CAAW,EAC3C,CAAE,EAAGC,EAAID,EAAY,EAAGE,EAAIF,CAAW,EACvC,CAAE,EAAGC,EAAID,EAAY,EAAGE,CAAE,EAC1B,CAAE,EAAAD,EAAG,EAAAC,CAAE,EACP,CAAE,EAAAD,EAAG,EAAGC,EAAIF,CAAW,CACzB,EAEMS,EAAkB,CACtB,CAAE,EAAAR,EAAG,EAAGC,EAAIF,CAAW,EACvB,CAAE,EAAGC,EAAIF,EAAIC,EAAY,EAAGE,EAAIF,CAAW,EAC3C,CAAE,EAAGC,EAAIF,EAAIC,EAAY,EAAGE,EAAI,CAAE,EAClC,CAAE,EAAGD,EAAIF,EAAG,EAAGG,EAAI,CAAE,EACrB,CAAE,EAAGD,EAAIF,EAAG,EAAAG,CAAE,EACd,CAAE,EAAAD,EAAG,EAAAC,CAAE,CACT,EAEIZ,EAAK,OAAS,cAChBgB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAMI,EAAYC,EAAqBH,CAAe,EAChDI,EAAYR,EAAG,KAAKM,EAAWJ,CAAO,EACtCO,EAAYF,EAAqBF,CAAe,EAChDK,EAAYV,EAAG,KAAKS,EAAW,CAAE,GAAGP,EAAS,KAAM,MAAO,CAAC,EAE3DlB,EAAYM,EAAS,OAAO,IAAMoB,EAAW,cAAc,EACjE,OAAA1B,EAAU,OAAO,IAAMwB,EAAW,cAAc,EAEhDxB,EAAU,KAAK,QAAS,uBAAuB,EAE3Ce,GAAab,EAAK,OAAS,aAC7BF,EAAU,UAAU,MAAM,EAAE,KAAK,QAASe,CAAS,EAGjDX,GAAcF,EAAK,OAAS,aAC9BF,EAAU,UAAU,MAAM,EAAE,KAAK,QAASI,CAAU,EAGtDI,EAAM,KACJ,YACA,aAAa,EAAED,EAAK,MAAQ,GAAKK,GAAcL,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,GAAKK,GAAcL,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC5I,EAEAoB,EAAiBzB,EAAMF,CAAS,EAEhCE,EAAK,UAAY,SAAU0B,EAAO,CAEhC,OADYC,EAAU,QAAQ3B,EAAMkB,EAAiBQ,CAAK,CAE5D,EAEOtB,CACT,CA3EsBwB,EAAA9B,GAAA,aCMtB,eAAsB+B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnE,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAgB,EAAI,EACpBC,EAAS,EAAID,EACbE,EAAI,CAACH,EAAI,EACTI,EAAI,CAACF,EAAS,EACdG,EAAa,EAEb,CAAE,UAAAC,CAAU,EAAIf,EAEhBgB,EAAaC,GACjBL,EAAIE,EACJD,EAAIF,EAASG,EACbF,EAAIH,EAAIK,EACRD,EAAIF,EAASG,EACbJ,EACA,EACF,EAEMQ,EAAgBF,IAAaA,EAAW,OAAS,CAAC,EAElDG,EAAkB,CACtB,CAAE,EAAGP,EAAIE,EAAY,EAAGD,EAAIC,CAAW,EACvC,CAAE,EAAGF,EAAIE,EAAY,EAAGD,EAAIF,EAASG,CAAW,EAChD,GAAGE,EACH,CAAE,EAAGJ,EAAIH,EAAIK,EAAY,EAAGI,EAAc,EAAIJ,CAAW,EACzD,CAAE,EAAGF,EAAIH,EAAG,EAAGS,EAAc,EAAIJ,CAAW,EAC5C,CAAE,EAAGF,EAAIH,EAAG,EAAGS,EAAc,EAAI,EAAIJ,CAAW,EAChD,CAAE,EAAGF,EAAIH,EAAIK,EAAY,EAAGI,EAAc,EAAI,EAAIJ,CAAW,EAC7D,CAAE,EAAGF,EAAIH,EAAIK,EAAY,EAAGD,EAAIC,CAAW,EAC3C,CAAE,EAAGF,EAAIE,EAAY,EAAGD,EAAIC,CAAW,EACvC,CAAE,EAAGF,EAAIE,EAAY,EAAGD,CAAE,EAC1B,CAAE,EAAAD,EAAG,EAAAC,CAAE,EACP,CAAE,EAAAD,EAAG,EAAGC,EAAIC,CAAW,CACzB,EAEMM,EAAkB,CACtB,CAAE,EAAAR,EAAG,EAAGC,EAAIC,CAAW,EACvB,CAAE,EAAGF,EAAIH,EAAIK,EAAY,EAAGD,EAAIC,CAAW,EAC3C,CAAE,EAAGF,EAAIH,EAAIK,EAAY,EAAGI,EAAc,EAAIJ,CAAW,EACzD,CAAE,EAAGF,EAAIH,EAAG,EAAGS,EAAc,EAAIJ,CAAW,EAC5C,CAAE,EAAGF,EAAIH,EAAG,EAAAI,CAAE,EACd,CAAE,EAAAD,EAAG,EAAAC,CAAE,CACT,EAGMQ,EAAKC,EAAM,IAAIlB,CAAQ,EACvBmB,EAAUC,EAAkBxB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBuB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAYC,EAAqBP,CAAe,EAChDQ,EAAYN,EAAG,KAAKI,EAAWF,CAAO,EACtCK,EAAYF,EAAqBN,CAAe,EAChDS,EAAYR,EAAG,KAAKO,EAAWL,CAAO,EAEtCO,EAAQ1B,EAAS,OAAO,IAAMuB,EAAW,cAAc,EAC7D,OAAAG,EAAM,OAAO,IAAMD,CAAS,EAE5BC,EAAM,KAAK,QAAS,uBAAuB,EAEvCf,GAAaf,EAAK,OAAS,aAC7B8B,EAAM,UAAU,MAAM,EAAE,KAAK,QAASf,CAAS,EAG7Cb,GAAcF,EAAK,OAAS,aAC9B8B,EAAM,UAAU,MAAM,EAAE,KAAK,QAAS5B,CAAU,EAGlD4B,EAAM,KAAK,YAAa,eAAe,CAACpB,EAAgB,CAAC,GAAG,EAE5DJ,EAAM,KACJ,YACA,aAAa,EAAED,EAAK,MAAQ,GAAKS,GAAcT,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,GAAKS,EAAaJ,EAAgB,GAAKL,EAAK,GAAKA,EAAK,KAAO,GAAG,GAChK,EAEA0B,EAAiB/B,EAAM8B,CAAK,EAE5B9B,EAAK,UAAY,SAAUgC,EAAO,CAEhC,OADYC,EAAU,QAAQjC,EAAMmB,EAAiBa,CAAK,CAE5D,EAEO5B,CACT,CA9FsB8B,EAAApC,GAAA,2BCLtB,eAAsBqC,GACpBC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,CAAe,CAAE,EAC7B,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcJ,CAAI,EACtDA,EAAK,WAAaE,EACIF,EAAK,eAAiBK,GAAU,EAAE,WAAW,aAAe,KAEhFL,EAAK,YAAc,IAErB,GAAM,CAAE,SAAAM,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYT,EAAQC,EAAMS,EAAeT,CAAI,CAAC,EACzEU,EAAa,KAAK,IAAIH,EAAK,OAASP,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EAC5EW,EAAc,KAAK,IAAIJ,EAAK,QAAUP,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EAC/EY,EAAI,CAACF,EAAa,EAClBG,EAAI,CAACF,EAAc,EACnB,CAAE,UAAAG,CAAU,EAAId,EAIhBe,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBlB,EAAM,CACtC,KAAMC,EAAe,aACrB,OAAQA,EAAe,eACzB,CAAC,EAEGD,EAAK,OAAS,cAChBiB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAgBJ,EAAG,UAAUH,EAAGC,EAAGH,EAAYC,EAAaM,CAAO,EAEnEG,EAAOd,EAAS,OAAO,IAAMa,EAAe,cAAc,EAChE,OAAAC,EAAK,KAAK,QAAS,uBAAuB,EAEtCN,GAAad,EAAK,OAAS,aAC7BoB,EAAK,UAAU,MAAM,EAAE,KAAK,QAASN,CAAS,EAG5CX,GAAcH,EAAK,OAAS,aAC9BoB,EAAK,UAAU,MAAM,EAAE,KAAK,QAASjB,CAAU,EAGjDkB,EAAiBrB,EAAMoB,CAAI,EAE3BpB,EAAK,UAAY,SAAUsB,EAAO,CAChC,OAAOC,EAAU,KAAKvB,EAAMsB,CAAK,CACnC,EAEOhB,CACT,CAnDsBkB,EAAA1B,GAAA,QCCf,IAAM2B,GAAyBC,EAAA,CAACC,EAAWC,EAAWC,IACpD,CACL,IAAIF,EAAIE,EAAO,CAAC,IAAID,CAAC,GACrB,IAAID,EAAIE,CAAI,IAAID,EAAIC,EAAO,CAAC,GAC5B,IAAIF,EAAIE,EAAO,CAAC,IAAID,EAAIC,CAAI,GAC5B,IAAIF,CAAC,IAAIC,EAAIC,EAAO,CAAC,GACrB,GACF,EAAE,KAAK,GAAG,EAP0B,0BAUtC,eAAsBC,GAAuCC,EAAwBC,EAAY,CAC/F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAIH,EAAK,MAAQL,EAAK,QACtBS,EAAIJ,EAAK,OAASL,EAAK,QACvBU,EAAIF,EAAIC,EAERE,EAAS,CACb,CAAE,EAAGD,EAAI,EAAG,EAAG,CAAE,EACjB,CAAE,EAAGA,EAAG,EAAG,CAACA,EAAI,CAAE,EAClB,CAAE,EAAGA,EAAI,EAAG,EAAG,CAACA,CAAE,EAClB,CAAE,EAAG,EAAG,EAAG,CAACA,EAAI,CAAE,CACpB,EAEIE,EACE,CAAE,UAAAC,CAAU,EAAIb,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMc,EAAKC,EAAM,IAAIX,CAAQ,EACvBY,EAAUC,EAAkBjB,EAAM,CAAC,CAAC,EACpCkB,EAAWzB,GAAuB,EAAG,EAAGiB,CAAC,EACzCS,EAAYL,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAUR,EACP,OAAO,IAAMe,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACT,EAAI,CAAC,KAAKA,EAAI,CAAC,GAAG,EAEjDG,GACFD,EAAQ,KAAK,QAASC,CAAS,CAEnC,MACED,EAAUQ,EAAmBhB,EAAUM,EAAGA,EAAGC,CAAM,EAGrD,OAAIT,GACFU,EAAQ,KAAK,QAASV,CAAU,EAGlCmB,EAAiBrB,EAAMY,CAAO,EAE9BZ,EAAK,UAAY,SAAUsB,EAAO,CAChC,OAAAC,EAAI,MACF;AAAA,QACAD,EACA;AAAA;AAAA,EACAtB,EACA;AAAA,MACAwB,EAAU,QAAQxB,EAAMW,EAAQW,CAAK,CACvC,EACOE,EAAU,QAAQxB,EAAMW,EAAQW,CAAK,CAC9C,EAEOlB,CACT,CAxDsBV,EAAAI,GAAA,YCZtB,eAAsB2B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAEhFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAIA,GAAM,OAAS,CAAC,EAC/D,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAIA,GAAM,QAAU,CAAC,EAEjEU,EAAI,CAACD,EAAI,EACTE,EAAI,CAAC,EAAI,EACTC,EAAQD,EAAI,EAEZE,EAAS,CACb,CAAE,EAAGH,EAAIE,EAAO,EAAAD,CAAE,EAClB,CAAE,EAAGD,EAAG,EAAG,CAAE,EACb,CAAE,EAAGA,EAAIE,EAAO,EAAG,CAACD,CAAE,EACtB,CAAE,EAAG,CAACD,EAAG,EAAG,CAACC,CAAE,EACf,CAAE,EAAG,CAACD,EAAG,EAAAC,CAAE,CACb,EAEM,CAAE,UAAAG,CAAU,EAAId,EAEhBe,EAAKC,EAAM,IAAIZ,CAAQ,EACvBa,EAAUC,EAAkBlB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBiB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAWC,EAAqBP,CAAM,EACtCQ,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAErCK,EAAUlB,EAAS,OAAO,IAAMiB,EAAW,cAAc,EAE/D,OAAAC,EAAQ,KAAK,QAAS,uBAAuB,EAEzCR,GAAad,EAAK,OAAS,aAC7BsB,EAAQ,UAAU,MAAM,EAAE,KAAK,QAASR,CAAS,EAE/CZ,GAAcF,EAAK,OAAS,aAC9BsB,EAAQ,UAAU,MAAM,EAAE,KAAK,QAASpB,CAAU,EAGpDoB,EAAQ,KAAK,YAAa,aAAa,CAACV,EAAQ,CAAC,KAAK,EAEtDN,EAAM,KACJ,YACA,aAAa,CAACM,EAAQ,EAAIP,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,IAAMA,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC5H,EACAkB,EAAiBvB,EAAMsB,CAAO,EAE9BtB,EAAK,UAAY,SAAUwB,EAAO,CAChC,OAAOC,EAAU,QAAQzB,EAAMa,EAAQW,CAAK,CAC9C,EAEOpB,CACT,CA5DsBsB,EAAA5B,GAAA,uBCMtB,eAAsB6B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,IAAIG,EACCJ,EAAK,WAGRI,EAAU,QAAUJ,EAAK,WAFzBI,EAAU,eAMZ,IAAMC,EAAWN,EAEd,OAAO,GAAG,EACV,KAAK,QAASK,CAAO,EACrB,KAAK,KAAMJ,EAAK,OAASA,EAAK,EAAE,EAG7BM,EAAID,EAAS,OAAO,GAAG,EAEvBE,EAAQF,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EAAE,KAAK,QAASH,CAAU,EAE5EM,EAAcR,EAAK,YAEnBS,EAAQT,EAAK,MAEbU,EAAOH,EAAM,KAAK,EAAG,YAAY,MAAMI,GAAYF,EAAOT,EAAK,WAAY,GAAM,EAAI,CAAC,EACxFY,EAAO,CAAE,MAAO,EAAG,OAAQ,CAAE,EACjC,GAAIC,EAASC,EAAU,GAAG,WAAW,UAAU,EAAG,CAChD,IAAMC,EAAML,EAAK,SAAS,CAAC,EACrBM,EAAKC,EAAOP,CAAI,EACtBE,EAAOG,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASJ,EAAK,KAAK,EAC3BI,EAAG,KAAK,SAAUJ,EAAK,MAAM,CAC/B,CACAM,EAAI,KAAK,SAAUV,CAAW,EAC9B,IAAMW,EAAWX,GAAe,CAAC,EAC3BY,EAAWV,EAAK,QAAQ,EACxBW,EAAQd,EACX,KAAK,EACL,YACC,MAAMI,GACJQ,EAAS,KAAOA,EAAS,KAAK,OAAO,EAAIA,EACzCnB,EAAK,WACL,GACA,EACF,CACF,EAGIe,EAAMM,EAAM,SAAS,CAAC,EACtBL,EAAKC,EAAOI,CAAK,EACvBT,EAAOG,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASJ,EAAK,KAAK,EAC3BI,EAAG,KAAK,SAAUJ,EAAK,MAAM,EAG7B,IAAMU,GAAetB,EAAK,SAAW,GAAK,EAC1CiB,EAAOI,CAAK,EAAE,KACZ,YACA,eACGT,EAAK,MAAQQ,EAAS,MAAQ,GAAKA,EAAS,MAAQR,EAAK,OAAS,GACnE,MACCQ,EAAS,OAASE,EAAc,GACjC,GACJ,EACAL,EAAOP,CAAI,EAAE,KACX,YACA,eACGE,EAAK,MAAQQ,EAAS,MAAQ,EAAI,EAAEA,EAAS,MAAQR,EAAK,OAAS,GACpE,MAGJ,EAIAA,EAAOL,EAAM,KAAK,EAAG,QAAQ,EAG7BA,EAAM,KACJ,YACA,aAAe,CAACK,EAAK,MAAQ,EAAI,MAAQ,CAACA,EAAK,OAAS,EAAIU,EAAc,GAAK,GACjF,EAEA,IAAMC,EAAaX,EAAK,OAASZ,EAAK,SAAW,GAC3CwB,EAAcZ,EAAK,QAAUZ,EAAK,SAAW,GAC7CyB,EAAI,CAACb,EAAK,MAAQ,EAAIU,EACtBI,EAAI,CAACd,EAAK,OAAS,EAAIU,EACzBK,EACAC,EACJ,GAAI5B,EAAK,OAAS,YAAa,CAE7B,IAAM6B,EAAKC,EAAM,IAAIzB,CAAQ,EACvB0B,EAAUC,EAAkBhC,EAAM,CAAC,CAAC,EACpCiC,EAAYJ,EAAG,KACnBK,EAAuBT,EAAGC,EAAGH,EAAYC,EAAaxB,EAAK,IAAM,CAAC,EAClE+B,CACF,EAEMI,EAAYN,EAAG,KACnB,CAACjB,EAAK,MAAQ,EAAIU,EAClB,CAACV,EAAK,OAAS,EAAIU,EAAcF,EAAS,OAASE,EACnDV,EAAK,MAAQ,EAAIU,EACjB,CAACV,EAAK,OAAS,EAAIU,EAAcF,EAAS,OAASE,EACnDS,CACF,EAEAH,EAAYvB,EAAS,OAAO,KAC1Ba,EAAI,MAAM,wBAAyBe,CAAS,EACrCE,GACN,cAAc,EACjBR,EAAOtB,EAAS,OAAO,KACrBa,EAAI,MAAM,wBAAyBe,CAAS,EACrCA,GACN,cAAc,CACnB,MACEN,EAAOrB,EAAE,OAAO,OAAQ,cAAc,EACtCsB,EAAYtB,EAAE,OAAO,MAAM,EAC3BqB,EACG,KAAK,QAAS,mBAAmB,EACjC,KAAK,QAASzB,CAAU,EACxB,KAAK,IAAK,CAACU,EAAK,MAAQ,EAAIU,CAAW,EACvC,KAAK,IAAK,CAACV,EAAK,OAAS,EAAIU,CAAW,EACxC,KAAK,QAASV,EAAK,OAASZ,EAAK,SAAW,EAAE,EAC9C,KAAK,SAAUY,EAAK,QAAUZ,EAAK,SAAW,EAAE,EAEnD4B,EACG,KAAK,QAAS,SAAS,EACvB,KAAK,KAAM,CAAChB,EAAK,MAAQ,EAAIU,CAAW,EACxC,KAAK,KAAMV,EAAK,MAAQ,EAAIU,CAAW,EACvC,KAAK,KAAM,CAACV,EAAK,OAAS,EAAIU,EAAcF,EAAS,OAASE,CAAW,EACzE,KAAK,KAAM,CAACV,EAAK,OAAS,EAAIU,EAAcF,EAAS,OAASE,CAAW,EAE9E,OAAAc,EAAiBpC,EAAM2B,CAAI,EAE3B3B,EAAK,UAAY,SAAUqC,EAAO,CAChC,OAAOC,EAAU,KAAKtC,EAAMqC,CAAK,CACnC,EAEOhC,CACT,CAhJsBkC,EAAAzC,GAAA,iBCTtB,eAAsB0C,GACpBC,EACAC,EACA,CACA,IAAMC,EAAU,CACd,GAAI,EACJ,GAAI,EACJ,QAAS,GACT,eAAgBD,GAAM,SAAW,GAAK,EACtC,eAAgBA,GAAM,SAAW,GAAK,CACxC,EAEA,OAAOE,GAASH,EAAQC,EAAMC,CAAO,CACvC,CAbsBE,EAAAL,GAAA,eCItB,eAAsBM,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAcT,GAAM,SAAW,EAC/BU,EAAI,KAAK,IAAIL,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnEW,EAAI,KAAK,IAAIN,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEY,EAAI,CAACP,EAAK,MAAQ,EAAII,EACtBI,EAAI,CAACR,EAAK,OAAS,EAAII,EAEvB,CAAE,UAAAK,CAAU,EAAId,EAEhBe,EAAKC,EAAM,IAAIZ,CAAQ,EACvBa,EAAUC,EAAkBlB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBiB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAAP,EAAG,EAAAC,CAAE,EACP,CAAE,EAAGD,EAAIF,EAAI,EAAG,EAAAG,CAAE,EAClB,CAAE,EAAGD,EAAIF,EAAI,EAAG,EAAGG,EAAIF,CAAE,EACzB,CAAE,EAAGC,EAAI,EAAG,EAAGC,EAAIF,CAAE,EACrB,CAAE,EAAGC,EAAI,EAAG,EAAGC,CAAE,EACjB,CAAE,EAAAD,EAAG,EAAAC,CAAE,EACP,CAAE,EAAAD,EAAG,EAAGC,EAAIF,CAAE,CAChB,EAEMS,EAAYL,EAAG,QACnBI,EAAO,IAAKE,GAAM,CAACA,EAAE,EAAGA,EAAE,CAAC,CAAC,EAC5BJ,CACF,EAEMK,EAAOlB,EAAS,OAAO,IAAMgB,EAAW,cAAc,EAE5D,OAAAE,EAAK,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAASC,EAAoBT,CAAS,CAAC,EAEpFZ,GAAcF,EAAK,OAAS,aAC9BsB,EAAK,UAAU,MAAM,EAAE,KAAK,QAASpB,CAAU,EAG7CY,GAAad,EAAK,OAAS,aAC7BsB,EAAK,UAAU,MAAM,EAAE,KAAK,QAASpB,CAAU,EAGjDI,EAAM,KACJ,YACA,aAAa,CAACI,EAAI,EAAI,GAAKV,EAAK,SAAW,IAAMK,EAAK,GAAKA,EAAK,MAAQ,GAAG,IAAI,CAACM,EAAI,GAAKX,EAAK,SAAW,IAAMK,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC1I,EAEAmB,EAAiBxB,EAAMsB,CAAI,EAE3BtB,EAAK,UAAY,SAAUyB,EAAO,CAChC,OAAOC,EAAU,KAAK1B,EAAMyB,CAAK,CACnC,EAEOrB,CACT,CA9DsBuB,EAAA7B,GAAA,iBCDtB,eAAsB8B,GAAyCC,EAAwBC,EAAY,CACjG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnE,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAI,CAACD,EAAI,EACTE,EAAI,CAAC,EAAI,EAET,CAAE,UAAAC,CAAU,EAAIZ,EAGhBa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBe,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAAP,EAAG,EAAAC,CAAE,EACP,CAAE,EAAAD,EAAG,EAAGC,EAAI,CAAE,EACd,CAAE,EAAGD,EAAID,EAAG,EAAGE,EAAI,CAAE,EACrB,CAAE,EAAGD,EAAID,EAAG,EAAGE,EAAI,EAAI,CAAE,CAC3B,EAEMO,EAAWC,EAAqBF,CAAM,EACtCG,EAAYP,EAAG,KAAKK,EAAUH,CAAO,EAErCM,EAAUjB,EAAS,OAAO,IAAMgB,EAAW,cAAc,EAC/D,OAAAC,EAAQ,KAAK,QAAS,uBAAuB,EAEzCT,GAAaZ,EAAK,OAAS,aAC7BqB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAAST,CAAS,EAGpDV,GAAcF,EAAK,OAAS,aAC9BqB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAASnB,CAAU,EAGzDmB,EAAQ,KAAK,YAAa,gBAAgB,EAAI,CAAC,GAAG,EAClDf,EAAM,KACJ,YACA,aAAa,CAACG,EAAI,GAAKT,EAAK,SAAW,IAAMK,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,CAAC,EAAI,GAAKL,EAAK,SAAW,IAAMK,EAAK,GAAKA,EAAK,KAAO,GAAG,GACvI,EAEAiB,EAAiBtB,EAAMqB,CAAO,EAE9BrB,EAAK,UAAY,SAAUuB,EAAO,CAEhC,OADYC,EAAU,QAAQxB,EAAMiB,EAAQM,CAAK,CAEnD,EAEOnB,CACT,CAvDsBqB,EAAA3B,GAAA,cCHtB,eAAsB4B,GAAyCC,EAAwBC,EAAY,CACjG,IAAMC,EAAU,CACd,GAAI,EACJ,GAAI,EACJ,QAAS,GACT,eAAgBD,GAAM,SAAW,GAAK,EACtC,eAAgBA,GAAM,SAAW,GAAK,CACxC,EACA,OAAOE,GAASH,EAAQC,EAAMC,CAAO,CACvC,CATsBE,EAAAL,GAAA,cCkDtB,eAAsBM,GAAsCC,EAAwBC,EAAY,CAC9F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAIH,EAAK,OAASL,EAAK,QACvBS,EAAIJ,EAAK,MAAQG,EAAI,EAAIR,EAAK,QAEhCU,EACE,CAAE,UAAAC,CAAU,EAAIX,EACtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMY,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAUC,EAAkBf,EAAM,CAAC,CAAC,EAEpCgB,EAAWC,EAAuB,CAACR,EAAI,EAAG,CAACD,EAAI,EAAGC,EAAGD,EAAGA,EAAI,CAAC,EAC7DU,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAON,EAAS,OAAO,IAAMc,EAAW,cAAc,EACtDR,EAAK,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAASS,EAAoBR,CAAS,CAAC,CAC1F,MACED,EAAON,EAAS,OAAO,OAAQ,cAAc,EAE7CM,EACG,KAAK,QAAS,uBAAuB,EACrC,KAAK,QAASR,CAAU,EACxB,KAAK,KAAMM,EAAI,CAAC,EAChB,KAAK,KAAMA,EAAI,CAAC,EAChB,KAAK,IAAK,CAACC,EAAI,CAAC,EAChB,KAAK,IAAK,CAACD,EAAI,CAAC,EAChB,KAAK,QAASC,CAAC,EACf,KAAK,SAAUD,CAAC,EAGrB,OAAAY,EAAiBpB,EAAMU,CAAI,EAE3BV,EAAK,UAAY,SAAUqB,EAAO,CAChC,OAAOC,EAAU,KAAKtB,EAAMqB,CAAK,CACnC,EAEOjB,CACT,CAzCsBmB,EAAAzB,GAAA,WClDtB,eAAsB0B,GAAoCC,EAAwBC,EAAY,CAM5F,OAAOC,GAASF,EAAQC,EALR,CACd,GAAI,EACJ,GAAI,EACJ,QAAS,gBACX,CACqC,CACvC,CAPsBE,EAAAJ,GAAA,SCGf,SAASK,GACdC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,CAAe,CAAE,EAC7B,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcJ,CAAI,EACtDA,EAAK,WAAaE,EAClB,GAAM,CAAE,UAAAG,CAAU,EAAIL,EAChB,CAAE,UAAAM,EAAW,YAAAC,EAAa,WAAAC,CAAW,EAAIP,EACzCQ,EAAWV,EACd,OAAO,GAAG,EACV,KAAK,QAAS,cAAc,EAC5B,KAAK,KAAMC,EAAK,OAASA,EAAK,EAAE,EAG7BU,EAAKC,EAAM,IAAIF,CAAQ,EACvBG,EAAUC,EAAkBb,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBY,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAYJ,EAAG,OAAO,EAAG,EAAG,GAAI,CACpC,GAAGE,EACH,OAAQN,EACR,YAAa,CACf,CAAC,EACKS,EAAYR,GAAeC,EAC3BQ,EAAiBN,EAAG,OAAO,EAAG,EAAG,EAAG,CACxC,GAAGE,EACH,KAAMG,EACN,OAAQA,EACR,YAAa,EACb,UAAW,OACb,CAAC,EACKE,EAASR,EAAS,OAAO,IAAMK,EAAW,cAAc,EAC9D,OAAAG,EAAO,OAAO,IAAMD,CAAc,EAE9BX,GACFY,EAAO,UAAU,MAAM,EAAE,KAAK,QAASZ,CAAS,EAG9CF,GACFc,EAAO,UAAU,MAAM,EAAE,KAAK,QAASd,CAAU,EAGnDe,EAAiBlB,EAAMiB,CAAM,EAE7BjB,EAAK,UAAY,SAAUmB,EAAO,CAChC,OAAOC,EAAU,OAAOpB,EAAM,EAAGmB,CAAK,CACxC,EAEOV,CACT,CAtDgBY,EAAAvB,GAAA,YCAT,SAASwB,GACdC,EACAC,EACA,CAAE,OAAQ,CAAE,eAAAC,CAAe,CAAE,EAC7B,CACA,GAAM,CAAE,UAAAC,CAAU,EAAID,EAEhBE,EAAWJ,EACd,OAAO,GAAG,EACV,KAAK,QAAS,cAAc,EAC5B,KAAK,KAAMC,EAAK,OAASA,EAAK,EAAE,EAE/BI,EACJ,GAAIJ,EAAK,OAAS,YAAa,CAG7B,IAAMK,EADKC,EAAM,IAAIH,CAAQ,EACR,OAAO,EAAG,EAAG,GAAII,GAAeL,CAAS,CAAC,EAC/DE,EAASD,EAAS,OAAO,IAAME,CAAS,EAExCD,EAAO,KAAK,QAAS,aAAa,EAAE,KAAK,IAAK,CAAC,EAAE,KAAK,QAAS,EAAE,EAAE,KAAK,SAAU,EAAE,CACtF,MACEA,EAASD,EAAS,OAAO,SAAU,cAAc,EAEjDC,EAAO,KAAK,QAAS,aAAa,EAAE,KAAK,IAAK,CAAC,EAAE,KAAK,QAAS,EAAE,EAAE,KAAK,SAAU,EAAE,EAGtF,OAAAI,EAAiBR,EAAMI,CAAM,EAE7BJ,EAAK,UAAY,SAAUS,EAAO,CAChC,OAAOC,EAAU,OAAOV,EAAM,EAAGS,CAAK,CACxC,EAEON,CACT,CAjCgBQ,EAAAb,GAAA,cC4BhB,eAAsBc,GAAyCC,EAAwBC,EAAY,CACjG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EACzEQ,GAAeR,GAAM,SAAW,GAAK,EACrCS,EAAIJ,EAAK,MAAQL,EAAK,QACtB,EAAIK,EAAK,OAASL,EAAK,QACvBU,EAAI,CAACL,EAAK,MAAQ,EAAIG,EACtBG,EAAI,CAACN,EAAK,OAAS,EAAIG,EAEvBI,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAGH,EAAG,EAAG,CAAE,EACb,CAAE,EAAGA,EAAG,EAAG,CAAC,CAAE,EACd,CAAE,EAAG,EAAG,EAAG,CAAC,CAAE,EACd,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,GAAI,EAAG,CAAE,EACd,CAAE,EAAGA,EAAI,EAAG,EAAG,CAAE,EACjB,CAAE,EAAGA,EAAI,EAAG,EAAG,CAAC,CAAE,EAClB,CAAE,EAAG,GAAI,EAAG,CAAC,CAAE,EACf,CAAE,EAAG,GAAI,EAAG,CAAE,CAChB,EAEA,GAAIT,EAAK,OAAS,YAAa,CAE7B,IAAMa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EAEpCiB,EAAYJ,EAAG,UAAUH,EAAI,EAAGC,EAAGF,EAAI,GAAI,EAAGM,CAAO,EACrDG,EAAKL,EAAG,KAAKH,EAAGC,EAAGD,EAAGC,EAAI,EAAGI,CAAO,EACpCI,EAAKN,EAAG,KAAKH,EAAID,EAAGE,EAAGD,EAAID,EAAGE,EAAI,EAAGI,CAAO,EAElDX,EAAS,OAAO,IAAMc,EAAI,cAAc,EACxCd,EAAS,OAAO,IAAMe,EAAI,cAAc,EACxC,IAAMC,EAAOhB,EAAS,OAAO,IAAMa,EAAW,cAAc,EACtD,CAAE,UAAAI,CAAU,EAAIrB,EACtBoB,EAAK,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAASE,EAAoBD,CAAS,CAAC,EACxFE,EAAiBvB,EAAMoB,CAAI,CAC7B,KAAO,CACL,IAAMI,EAAKC,EAAmBrB,EAAUK,EAAG,EAAGG,CAAM,EAChDV,GACFsB,EAAG,KAAK,QAAStB,CAAU,EAE7BqB,EAAiBvB,EAAMwB,CAAE,CAC3B,CAEA,OAAAxB,EAAK,UAAY,SAAU0B,EAAO,CAChC,OAAOC,EAAU,QAAQ3B,EAAMY,EAAQc,CAAK,CAC9C,EAEOtB,CACT,CAnDsBwB,EAAA9B,GAAA,cC5BtB,eAAsB+B,GAAyCC,EAAwBC,EAAY,CACjG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EACzEQ,EAAI,KAAK,IAAIH,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnES,EAAI,KAAK,IAAIJ,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAI,CAACF,EAAI,EACTG,EAAI,CAACF,EAAI,EACTG,EAAW,GAAMH,EACjBI,EAAY,GAAMJ,EAClB,CAAE,UAAAK,CAAU,EAAId,EAGhBe,EAAKC,EAAM,IAAIZ,CAAQ,EACvBa,EAAUC,EAAkBlB,EAAM,CAAC,CAAC,EAEpCmB,EAAa,CACjB,CAAE,EAAGT,EAAIE,EAAW,EAAG,EAAAD,CAAE,EACzB,CAAE,EAAGD,EAAIF,EAAII,EAAW,EAAG,EAAAD,CAAE,EAC7B,CAAE,EAAGD,EAAIF,EAAII,EAAW,EAAG,EAAGD,EAAIF,CAAE,EACpC,CAAE,EAAGC,EAAIE,EAAW,EAAG,EAAGD,EAAIF,CAAE,CAClC,EAEMW,EAAY,CAChB,CAAE,EAAGV,EAAIF,EAAII,EAAW,EAAG,EAAGD,EAAIF,CAAE,EACpC,CAAE,EAAGC,EAAIF,EAAII,EAAW,EAAG,EAAGD,EAAIF,CAAE,EACpC,CAAE,EAAGC,EAAIF,EAAII,EAAW,EAAG,EAAGD,EAAIF,EAAII,CAAU,CAClD,EAEIb,EAAK,OAAS,cAChBiB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAMI,EAAWC,EAAqBH,CAAU,EAC1CI,EAAWR,EAAG,KAAKM,EAAUJ,CAAO,EAEpCO,EAAUF,EAAqBF,CAAS,EACxCK,EAAUV,EAAG,KAAKS,EAAS,CAAE,GAAGP,EAAS,UAAW,OAAQ,CAAC,EAE7DnB,EAAaM,EAAS,OAAO,IAAMqB,EAAS,cAAc,EAChE,OAAA3B,EAAW,OAAO,IAAMyB,EAAU,cAAc,EAEhDzB,EAAW,KAAK,QAAS,uBAAuB,EAE5CgB,GAAad,EAAK,OAAS,aAC7BF,EAAW,UAAU,MAAM,EAAE,KAAK,QAASgB,CAAS,EAGlDZ,GAAcF,EAAK,OAAS,aAC9BF,EAAW,UAAU,MAAM,EAAE,KAAK,QAASI,CAAU,EAGvDwB,EAAiB1B,EAAMF,CAAU,EAEjCE,EAAK,UAAY,SAAU2B,EAAO,CAGhC,OAFYC,EAAU,QAAQ5B,EAAMmB,EAAYQ,CAAK,CAGvD,EAEOvB,CACT,CA9DsByB,EAAA/B,GAAA,cCMtB,eAAsBgC,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnE,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAgB,EAAI,EACpBC,EAAW,GAAMF,EACjBG,EAAY,GAAM,EAClBC,EAAS,EAAIH,EACb,CAAE,UAAAI,CAAU,EAAId,EAGhBe,EAAKC,EAAM,IAAIZ,CAAQ,EACvBa,EAAUC,EAAkBlB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBiB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAG,CAACV,EAAI,EAAKA,EAAI,EAAK,GAAK,EAAGI,EAAS,CAAE,EAC3C,GAAGO,GACD,CAACX,EAAI,EAAKA,EAAI,EAAK,GACnBI,EAAS,EACTJ,EAAI,EAAKA,EAAI,EAAK,GAClBI,EAAS,EACTH,EACA,EACF,EAEA,CAAE,EAAGD,EAAI,EAAKA,EAAI,EAAK,GAAK,EAAG,CAACI,EAAS,CAAE,EAC3C,CAAE,EAAG,CAACJ,EAAI,EAAKA,EAAI,EAAK,GAAK,EAAG,CAACI,EAAS,CAAE,CAC9C,EAEMQ,EAAI,CAACZ,EAAI,EAAKA,EAAI,EAAK,GACvBa,EAAI,CAACT,EAAS,EAAID,EAAY,GAE9BW,EAAY,CAChB,CAAE,EAAGF,EAAIZ,EAAIE,EAAU,GAAIW,EAAI,GAAK,GAAI,EACxC,CAAE,EAAGD,EAAIZ,EAAG,EAAGa,EAAI,EAAIV,CAAU,EACjC,CAAE,EAAGS,EAAIZ,EAAG,GAAIa,EAAI,GAAK,EAAI,EAC7B,GAAGF,GACDC,EAAIZ,GACHa,EAAI,GAAK,IACVD,EAAIZ,EAAIE,GACPW,EAAI,GAAK,IACV,CAAC,EAAI,IACL,EACF,CACF,EAEME,EAAmBC,EAAqBN,CAAM,EAC9CO,EAAmBX,EAAG,KAAKS,EAAkBP,CAAO,EAEpDU,EAAyBF,EAAqBF,CAAS,EACvDK,EAAyBb,EAAG,KAAKY,EAAwB,CAC7D,GAAGV,EACH,UAAW,OACb,CAAC,EAEKY,EAAezB,EAAS,OAAO,IAAMwB,EAAwB,cAAc,EACjF,OAAAC,EAAa,OAAO,IAAMH,EAAkB,cAAc,EAE1DG,EAAa,KAAK,QAAS,uBAAuB,EAE9Cf,GAAad,EAAK,OAAS,aAC7B6B,EAAa,UAAU,MAAM,EAAE,KAAK,QAASf,CAAS,EAGpDZ,GAAcF,EAAK,OAAS,aAC9B6B,EAAa,UAAU,MAAM,EAAE,KAAK,QAAS3B,CAAU,EAGzD2B,EAAa,KAAK,YAAa,eAAe,CAACnB,EAAgB,CAAC,GAAG,EACnEJ,EAAM,KACJ,YACA,aAAa,CAACG,EAAI,GAAKT,EAAK,SAAW,IAAMK,EAAK,GAAKA,EAAK,MAAQ,GAAG,IAAI,CAAC,EAAI,GAAKL,EAAK,SAAW,GAAKU,EAAgB,GAAKL,EAAK,GAAKA,EAAK,KAAO,GAAG,GAC1J,EAEAyB,EAAiB9B,EAAM6B,CAAY,EACnC7B,EAAK,UAAY,SAAU+B,EAAO,CAEhC,OADYC,EAAU,QAAQhC,EAAMmB,EAAQY,CAAK,CAEnD,EAEO3B,CACT,CA3FsB6B,EAAAnC,GAAA,4BCPtB,eAAsBoC,GAAmCC,EAAwBC,EAAY,CAC3F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAElB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAa,KAAK,IAAIH,EAAK,MAAQL,EAAK,QAASA,GAAM,OAAS,CAAC,EACjES,EAAc,KAAK,IAAIJ,EAAK,OAASL,EAAK,QAASA,GAAM,QAAU,CAAC,EACpEU,EAAI,CAACF,EAAa,EAClBG,EAAI,CAACF,EAAc,EAEnBG,EAAOR,EAAS,OAAO,OAAQ,cAAc,EAEnD,OAAAQ,EACG,KAAK,QAAS,MAAM,EACpB,KAAK,QAASV,CAAU,EACxB,KAAK,KAAM,CAAC,EACZ,KAAK,KAAM,CAAC,EACZ,KAAK,IAAKQ,CAAC,EACX,KAAK,IAAKC,CAAC,EACX,KAAK,QAASH,CAAU,EACxB,KAAK,SAAUC,CAAW,EAE7BI,EAAiBb,EAAMY,CAAI,EAE3BZ,EAAK,UAAY,SAAUc,EAAO,CAChC,OAAOC,EAAU,KAAKf,EAAMc,CAAK,CACnC,EAEOV,CACT,CA9BsBY,EAAAlB,GAAA,QCEf,IAAMmB,GAAsBC,EAAA,CACjCC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,IAAIL,CAAC,IAAIC,CAAC;AAAA,OACZG,CAAE,IAAIC,CAAE,YAAe,CAACF,CAAM;AAAA,OAC9BD,CAAK;AAAA,OACLE,CAAE,IAAIC,CAAE,YAAeF,CAAM;AAAA,OAC7BD,CAAK,IAAI,CAACC,CAAM;AAAA,OAChBC,CAAE,IAAIC,CAAE,YAAeF,CAAM;AAAA,OAC7B,CAACD,CAAK,KAdsB,uBAiBtBI,GAA2BP,EAAA,CACtCC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CACL,IAAIL,CAAC,IAAIC,CAAC,GACV,IAAID,EAAIE,CAAK,IAAID,CAAC,GAClB,IAAIG,CAAE,IAAIC,CAAE,YAAe,CAACF,CAAM,GAClC,IAAI,CAACD,CAAK,KACV,IAAIE,CAAE,IAAIC,CAAE,YAAeF,CAAM,GACjC,IAAID,CAAK,IACX,EAAE,KAAK,GAAG,EAf4B,4BAiB3BK,GAA2BR,EAAA,CACtCC,EACAC,EACAC,EACAC,EACAC,EACAC,IAEO,CAAC,IAAIL,EAAIE,EAAQ,CAAC,IAAI,CAACC,EAAS,CAAC,GAAI,IAAIC,CAAE,IAAIC,CAAE,YAAYF,CAAM,EAAE,EAAE,KAAK,GAAG,EARhD,4BAWxC,eAAsBK,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,EAAO,YAAAC,CAAY,EAAI,MAAMC,EACnDT,EACAC,EACAS,EAAeT,CAAI,CACrB,EACMU,EAAeV,EAAK,OAAS,MAAQO,EAAc,EAAIA,EACvDI,EAAIN,EAAK,OAASK,EAClBf,EAAKgB,EAAI,EACTjB,EAAKC,GAAM,IAAMgB,EAAI,IACrBC,EAAIP,EAAK,MAAQX,EAAKgB,EACtB,CAAE,UAAAG,CAAU,EAAIb,EAElBc,EAEJ,GAAId,EAAK,OAAS,YAAa,CAE7B,IAAMe,EAAKC,EAAM,IAAIZ,CAAQ,EACvBa,EAAgBrB,GAAyB,EAAG,EAAGgB,EAAGD,EAAGjB,EAAIC,CAAE,EAC3DuB,EAAgBrB,GAAyB,EAAG,EAAGe,EAAGD,EAAGjB,EAAIC,CAAE,EAC3DwB,EAAYJ,EAAG,KAAKE,EAAeG,EAAkBpB,EAAM,CAAC,CAAC,CAAC,EAC9DqB,EAAYN,EAAG,KAAKG,EAAeE,EAAkBpB,EAAM,CAAE,KAAM,MAAO,CAAC,CAAC,EAClFc,EAAWV,EAAS,OAAO,IAAMiB,EAAW,cAAc,EAC1DP,EAAWV,EAAS,OAAO,IAAMe,EAAW,cAAc,EAC1DL,EAAS,KAAK,QAAS,uBAAuB,EAC1CD,GACFC,EAAS,KAAK,QAASD,CAAS,CAEpC,KAAO,CACL,IAAMS,EAAWlC,GAAoB,EAAG,EAAGwB,EAAGD,EAAGjB,EAAIC,CAAE,EACvDmB,EAAWV,EACR,OAAO,OAAQ,cAAc,EAC7B,KAAK,IAAKkB,CAAQ,EAClB,KAAK,QAAS,uBAAuB,EACrC,KAAK,QAASC,EAAoBV,CAAS,CAAC,EAC5C,KAAK,QAASX,CAAU,EAC3BY,EAAS,KAAK,QAAS,uBAAuB,EAE1CD,GACFC,EAAS,UAAU,MAAM,EAAE,KAAK,QAASD,CAAS,EAGhDX,GACFY,EAAS,UAAU,MAAM,EAAE,KAAK,QAASZ,CAAU,CAEvD,CAEA,OAAAY,EAAS,KAAK,iBAAkBpB,CAAE,EAClCoB,EAAS,KAAK,YAAa,aAAa,CAACF,EAAI,CAAC,KAAKD,EAAI,CAAC,IAAI,EAE5DL,EAAM,KACJ,YACA,aAAa,EAAED,EAAK,MAAQ,GAAKX,GAAMW,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,IAAMA,EAAK,GAAKA,EAAK,KAAO,GAAG,GACvH,EAEAmB,EAAiBxB,EAAMc,CAAQ,EAE/Bd,EAAK,UAAY,SAAUyB,EAAO,CAChC,IAAMC,EAAMC,EAAU,KAAK3B,EAAMyB,CAAK,EAChC,EAAIC,EAAI,GAAK1B,EAAK,GAAK,GAE7B,GACEL,GAAM,IACL,KAAK,IAAI,CAAC,GAAKK,EAAK,QAAU,GAAK,GACjC,KAAK,IAAI,CAAC,IAAMA,EAAK,QAAU,GAAK,GACnC,KAAK,IAAI0B,EAAI,GAAK1B,EAAK,GAAK,EAAE,GAAKA,EAAK,OAAS,GAAK,EAAIN,GAC9D,CACA,IAAIJ,EAAII,EAAKA,GAAM,EAAK,EAAI,GAAMC,EAAKA,IACnCL,GAAK,IACPA,EAAI,KAAK,KAAKA,CAAC,GAEjBA,EAAII,EAAKJ,EACLmC,EAAM,GAAKzB,EAAK,GAAK,GAAK,IAC5BV,EAAI,CAACA,GAGPoC,EAAI,GAAKpC,CACX,CAEA,OAAOoC,CACT,EAEOtB,CACT,CAxFsBf,EAAAS,GAAA,kBC9BtB,eAAsB8B,GAAwCC,EAAwBC,EAAY,CAChG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAIH,EAAK,MAAQL,EAAK,QACtBS,EAAIJ,EAAK,OAASL,EAAK,QACvBU,EAAS,CACb,CAAE,EAAI,GAAKD,EAAK,EAAG,EAAG,CAAE,EACxB,CAAE,EAAGD,EAAK,EAAIC,EAAK,EAAG,EAAG,CAAE,EAC3B,CAAE,EAAGD,EAAG,EAAG,CAACC,CAAE,EACd,CAAE,EAAG,EAAG,EAAG,CAACA,CAAE,CAChB,EAEIE,EACE,CAAE,UAAAC,CAAU,EAAIZ,EAEtB,GAAIA,EAAK,OAAS,YAAa,CAE7B,IAAMa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EACpCiB,EAAWC,EAAqBR,CAAM,EACtCS,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAE3CJ,EAAUP,EACP,OAAO,IAAMe,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACX,EAAI,CAAC,KAAKC,EAAI,CAAC,GAAG,EAEjDG,GACFD,EAAQ,KAAK,QAASC,CAAS,CAEnC,MACED,EAAUS,EAAmBhB,EAAUI,EAAGC,EAAGC,CAAM,EAGrD,OAAIR,GACFS,EAAQ,KAAK,QAAST,CAAU,EAGlCF,EAAK,MAAQQ,EACbR,EAAK,OAASS,EAEdY,EAAiBrB,EAAMW,CAAO,EAE9BX,EAAK,UAAY,SAAUsB,EAAO,CAChC,OAAOC,EAAU,QAAQvB,EAAMU,EAAQY,CAAK,CAC9C,EAEOlB,CACT,CAjDsBoB,EAAA1B,GAAA,aChBtB,eAAsB2B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EACzEQ,EAAW,GACfC,EAAY,GACRC,EAAI,KAAK,IAAIF,EAAUH,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EAC7EW,EAAI,KAAK,IAAIF,EAAWJ,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EAEhF,CAAE,UAAAY,CAAU,EAAIZ,EAEhBa,EAAKC,EAAM,IAAIV,CAAQ,EACvBW,EAAUC,EAAkBhB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBe,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAI,CAACP,EAAI,EAAK,GAAK,EAAG,CAACC,EAAI,CAAE,EAC/B,CAAE,EAAID,EAAI,EAAK,GAAK,EAAG,CAACC,EAAI,CAAE,EAC9B,CAAE,EAAGD,EAAI,EAAG,EAAI,CAACC,EAAI,EAAK,EAAI,EAC9B,CAAE,EAAGD,EAAI,EAAG,EAAGC,EAAI,CAAE,EACrB,CAAE,EAAG,CAACD,EAAI,EAAG,EAAGC,EAAI,CAAE,EACtB,CAAE,EAAG,CAACD,EAAI,EAAG,EAAI,CAACC,EAAI,EAAK,EAAI,CACjC,EAEMO,EAAWC,EAAqBF,CAAM,EACtCG,EAAYP,EAAG,KAAKK,EAAUH,CAAO,EAErCM,EAAUjB,EAAS,OAAO,IAAMgB,EAAW,cAAc,EAC/D,OAAAC,EAAQ,KAAK,QAAS,uBAAuB,EAEzCT,GAAaZ,EAAK,OAAS,aAC7BqB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAAST,CAAS,EAGpDV,GAAcF,EAAK,OAAS,aAC9BqB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAASnB,CAAU,EAGzDoB,EAAiBtB,EAAMqB,CAAO,EAE9BrB,EAAK,UAAY,SAAUuB,EAAO,CAEhC,OADYC,EAAU,QAAQxB,EAAMiB,EAAQM,CAAK,CAEnD,EAEOnB,CACT,CArDsBqB,EAAA3B,GAAA,uBCItB,eAAsB4B,GAAuCC,EAAwBC,EAAY,CAC/F,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAgBC,EAASC,EAAU,EAAE,WAAW,UAAU,EAE1DC,EAAIP,EAAK,OAASL,EAAK,SAAW,GAClCa,EAAID,EAAIP,EAAK,OAEbS,EAAKF,EAAIP,EAAK,OACdU,EAAS,CACb,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAGD,EAAI,EAAG,CAAE,EACd,CAAE,EAAGA,EAAK,EAAG,EAAG,CAACD,CAAE,CACrB,EAEM,CAAE,UAAAG,CAAU,EAAIhB,EAGhBiB,EAAKC,EAAM,IAAId,CAAQ,EACvBe,EAAUC,EAAkBpB,EAAM,CAAC,CAAC,EACtCA,EAAK,OAAS,cAChBmB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAEtB,IAAME,EAAWC,EAAqBP,CAAM,EACtCQ,EAAYN,EAAG,KAAKI,EAAUF,CAAO,EAErCK,EAAUpB,EACb,OAAO,IAAMmB,EAAW,cAAc,EACtC,KAAK,YAAa,aAAa,CAACV,EAAI,CAAC,KAAKA,EAAI,CAAC,GAAG,EAErD,OAAIG,GAAahB,EAAK,OAAS,aAC7BwB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAASR,CAAS,EAGpDd,GAAcF,EAAK,OAAS,aAC9BwB,EAAQ,eAAe,MAAM,EAAE,KAAK,QAAStB,CAAU,EAGzDF,EAAK,MAAQY,EACbZ,EAAK,OAASa,EAEdY,EAAiBzB,EAAMwB,CAAO,EAE9BlB,EAAM,KACJ,YACA,aAAa,CAACD,EAAK,MAAQ,GAAKA,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAKQ,EAAI,GAAKR,EAAK,QAAUL,EAAK,SAAW,IAAMS,EAAgB,EAAI,IAAMJ,EAAK,GAAKA,EAAK,KAAO,IAAI,GACnK,EAEAL,EAAK,UAAY,SAAU0B,EAAO,CAChC,OAAAC,EAAI,KAAK,qBAAsB3B,EAAMe,EAAQW,CAAK,EAC3CE,EAAU,QAAQ5B,EAAMe,EAAQW,CAAK,CAC9C,EAEOtB,CACT,CAxDsByB,EAAA/B,GAAA,YCEtB,eAAsBgC,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnE,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAgB,EAAI,EACpBC,EAAS,EAAID,EACb,CAAE,UAAAE,CAAU,EAAIZ,EAIhBa,EADW,GACWJ,EACtBK,EAASD,EAAW,EAAIA,EAAW,EAAI,EAGvCE,EAAKC,EAAM,IAAIZ,CAAQ,EACvBa,EAAUC,EAAkBlB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBiB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAG,CAACV,EAAI,EAAIK,EAAQ,EAAGH,EAAS,CAAE,EACpC,GAAGS,GACD,CAACX,EAAI,EAAIK,EACTH,EAAS,EACTF,EAAI,EAAIK,EACRH,EAAS,EACTD,EACA,EACF,EACA,CAAE,EAAGD,EAAI,EAAIK,EAAQ,EAAG,CAACH,EAAS,CAAE,EACpC,CAAE,EAAG,CAACF,EAAI,EAAIK,EAAQ,EAAG,CAACH,EAAS,CAAE,CACvC,EAEMU,EAAmBC,EAAqBH,CAAM,EAC9CI,EAAmBR,EAAG,KAAKM,EAAkBJ,CAAO,EAEpDO,EAAepB,EAAS,OAAO,IAAMmB,EAAkB,cAAc,EAE3E,OAAAC,EAAa,KAAK,QAAS,uBAAuB,EAE9CZ,GAAaZ,EAAK,OAAS,aAC7BwB,EAAa,UAAU,MAAM,EAAE,KAAK,QAASZ,CAAS,EAGpDV,GAAcF,EAAK,OAAS,aAC9BwB,EAAa,UAAU,MAAM,EAAE,KAAK,QAAStB,CAAU,EAGzDsB,EAAa,KAAK,YAAa,eAAe,CAACd,EAAgB,CAAC,GAAG,EACnEJ,EAAM,KACJ,YACA,aAAa,CAACG,EAAI,GAAKT,EAAK,SAAW,IAAMK,EAAK,GAAKA,EAAK,MAAQ,GAAG,IAAI,CAAC,EAAI,GAAKL,EAAK,SAAW,GAAKU,GAAiBL,EAAK,GAAKA,EAAK,KAAO,GAAG,GACtJ,EAEAoB,EAAiBzB,EAAMwB,CAAY,EACnCxB,EAAK,UAAY,SAAU0B,EAAO,CAEhC,OADYC,EAAU,QAAQ3B,EAAMmB,EAAQO,CAAK,CAEnD,EAEOtB,CACT,CArEsBwB,EAAA9B,GAAA,sBCAtB,eAAsB+B,GACpBC,EACAC,EACA,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,CAAK,EAAI,MAAMC,EAAYP,EAAQC,EAAMO,EAAeP,CAAI,CAAC,EAEzEQ,EAAW,IACXC,EAAY,GAEZC,EAAY,KAAK,IAAIL,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EAC3EW,EAAa,KAAK,IAAIN,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EAE9EY,EAAcF,EAAYC,EAE5BE,EAAIH,EACJI,EAAIH,EAEJE,EAAIC,EAAIF,EACVE,EAAID,EAAID,EAERC,EAAIC,EAAIF,EAGVC,EAAI,KAAK,IAAIA,EAAGL,CAAQ,EACxBM,EAAI,KAAK,IAAIA,EAAGL,CAAS,EAEzB,IAAMM,EAAgB,KAAK,IAAID,EAAI,GAAKA,EAAI,CAAC,EACvCE,EAASF,EAAIC,EAAgB,EAC7B,CAAE,UAAAE,CAAU,EAAIjB,EAGhBkB,EAAKC,EAAM,IAAIf,CAAQ,EACvBgB,EAAUC,EAAkBrB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBoB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAS,CACb,CAAE,EAAG,CAACT,EAAI,EAAG,EAAGG,EAAS,CAAE,EAC3B,GAAGO,GAA2B,CAACV,EAAI,EAAGG,EAAS,EAAGH,EAAI,EAAGG,EAAS,EAAGD,EAAe,CAAC,EACrF,CAAE,EAAGF,EAAI,EAAG,EAAG,CAACG,EAAS,CAAE,EAC3B,GAAGO,GAA2BV,EAAI,EAAG,CAACG,EAAS,EAAG,CAACH,EAAI,EAAG,CAACG,EAAS,EAAGD,EAAe,EAAE,CAC1F,EAEMS,EAAeC,EAAqBH,CAAM,EAC1CI,EAAeR,EAAG,KAAKM,EAAcJ,CAAO,EAE5CO,EAAWvB,EAAS,OAAO,IAAMsB,EAAc,cAAc,EAEnE,OAAAC,EAAS,KAAK,QAAS,uBAAuB,EAE1CV,GAAajB,EAAK,OAAS,aAC7B2B,EAAS,UAAU,MAAM,EAAE,KAAK,QAASV,CAAS,EAGhDf,GAAcF,EAAK,OAAS,aAC9B2B,EAAS,UAAU,MAAM,EAAE,KAAK,QAASzB,CAAU,EAGrD0B,EAAiB5B,EAAM2B,CAAQ,EAC/B3B,EAAK,UAAY,SAAU6B,EAAO,CAEhC,OADYC,EAAU,QAAQ9B,EAAMsB,EAAQO,CAAK,CAEnD,EAEOzB,CACT,CAtEsB2B,EAAAjC,GAAA,iBCNtB,eAAsBkC,GAAyCC,EAAwBC,EAAY,CACjG,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcH,CAAI,EACtDA,EAAK,WAAaC,EAClB,GAAM,CAAE,SAAAG,EAAU,KAAAC,EAAM,MAAAC,CAAM,EAAI,MAAMC,EAAYR,EAAQC,EAAMQ,EAAeR,CAAI,CAAC,EAChFS,EAAI,KAAK,IAAIJ,EAAK,OAASL,EAAK,SAAW,GAAK,EAAGA,GAAM,OAAS,CAAC,EACnE,EAAI,KAAK,IAAIK,EAAK,QAAUL,EAAK,SAAW,GAAK,EAAGA,GAAM,QAAU,CAAC,EACrEU,EAAa,EACbC,EAAI,CAACF,EAAI,EACTG,EAAI,CAAC,EAAI,EACT,CAAE,UAAAC,CAAU,EAAIb,EAGhBc,EAAKC,EAAM,IAAIX,CAAQ,EACvBY,EAAUC,EAAkBjB,EAAM,CAAC,CAAC,EAEpCkB,EAAkB,CACtB,CAAE,EAAGP,EAAID,EAAY,EAAGE,EAAIF,CAAW,EACvC,CAAE,EAAGC,EAAID,EAAY,EAAGE,EAAI,CAAE,EAC9B,CAAE,EAAGD,EAAIF,EAAG,EAAGG,EAAI,CAAE,EACrB,CAAE,EAAGD,EAAIF,EAAG,EAAGG,EAAIF,CAAW,CAChC,EAEMS,EAAO,IAAIR,EAAID,CAAU,IAAIE,EAAIF,CAAU,KAAKC,EAAIF,CAAC,IAAIG,EAAIF,CAAU,KAAKC,EAAIF,CAAC,IAAIG,EAAI,CAAC,KAAKD,EAAID,CAAU,IAAIE,EAAI,CAAC,KAAKD,EAAID,CAAU,IAAIE,EAAIF,CAAU;AAAA,mBAChJC,EAAID,CAAU,IAAIE,CAAC,KAAKD,EAAIF,CAAC,IAAIG,CAAC;AAAA,mBAClCD,CAAC,IAAIC,EAAIF,CAAU,KAAKC,CAAC,IAAIC,EAAI,CAAC,GAE/CZ,EAAK,OAAS,cAChBgB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAMI,EAAKN,EAAG,KAAKK,EAAMH,CAAO,EAE1BlB,EAAaM,EAAS,OAAO,IAAMgB,EAAI,cAAc,EAC3D,OAAAtB,EAAW,KAAK,YAAa,aAAaY,EAAa,CAAC,KAAKA,EAAa,CAAC,GAAG,EAE9EZ,EAAW,KAAK,QAAS,uBAAuB,EAE5Ce,GAAab,EAAK,OAAS,aAC7BF,EAAW,UAAU,MAAM,EAAE,KAAK,QAASe,CAAS,EAGlDX,GAAcF,EAAK,OAAS,aAC9BF,EAAW,UAAU,MAAM,EAAE,KAAK,QAASI,CAAU,EAGvDI,EAAM,KACJ,YACA,aAAa,EAAED,EAAK,MAAQ,GAAKK,EAAa,GAAKL,EAAK,GAAKA,EAAK,MAAQ,GAAG,KAAK,EAAEA,EAAK,OAAS,GAAKK,EAAa,GAAKL,EAAK,GAAKA,EAAK,KAAO,GAAG,GACpJ,EAEAgB,EAAiBrB,EAAMF,CAAU,EAEjCE,EAAK,UAAY,SAAUsB,EAAO,CAEhC,OADYC,EAAU,QAAQvB,EAAMkB,EAAiBI,CAAK,CAE5D,EAEOlB,CACT,CA3DsBoB,EAAA1B,GAAA,cCMtB,eAAsB2B,GACpBC,EACAC,EACAC,EACAC,EACAC,EAAMF,EAAO,MAAO,SAAW,GAC/B,CACA,IAAMG,EAAgBF,EAAoB,EAAJ,EAChCG,EAAWN,EAEd,OAAO,GAAG,EACV,KAAK,QAASO,EAAeN,CAAI,CAAC,EAClC,KAAK,KAAMA,EAAK,OAASA,EAAK,EAAE,EAE/BO,EAAkB,KAClBC,EAAa,KACbC,EAAe,KACfC,EAAe,KAEfC,EAAwB,EACxBC,EAAmB,EACnBC,EAAqB,EAGzB,GADAN,EAAkBF,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,uBAAuB,EACxEL,EAAK,YAAY,OAAS,EAAG,CAC/B,IAAMc,EAAad,EAAK,YAAY,CAAC,EACrC,MAAMe,GAAQR,EAAiB,CAAE,KAAM,OAAIO,CAAU,MAAI,EAA6B,CAAC,EAGvFH,EAD4BJ,EAAgB,KAAK,EAAG,QAAQ,EAChB,MAC9C,CAEAC,EAAaH,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,kBAAkB,EAClE,MAAMU,GAAQP,EAAYR,EAAM,EAAG,CAAC,qBAAqB,CAAC,EAC1D,IAAMgB,EAAiBR,EAAW,KAAK,EAAG,QAAQ,EAClDI,EAAmBI,EAAe,OAElCP,EAAeJ,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,oBAAoB,EACtE,IAAIY,EAAU,EACd,QAAWC,KAAUlB,EAAK,QAAS,CACjC,IAAMmB,EAAS,MAAMJ,GAAQN,EAAcS,EAAQD,EAAS,CAACC,EAAO,gBAAgB,CAAC,CAAC,EACtFD,GAAWE,EAASf,CACtB,CACAS,EAAqBJ,EAAa,KAAK,EAAG,QAAQ,EAAE,OAChDI,GAAsB,IACxBA,EAAqBV,EAAM,GAG7BO,EAAeL,EAAS,OAAO,GAAG,EAAE,KAAK,QAAS,oBAAoB,EACtE,IAAIe,EAAiB,EACrB,QAAWC,KAAUrB,EAAK,QAAS,CACjC,IAAMmB,EAAS,MAAMJ,GAAQL,EAAcW,EAAQD,EAAgB,CAACC,EAAO,gBAAgB,CAAC,CAAC,EAC7FD,GAAkBD,EAASf,CAC7B,CAEA,IAAIkB,EAAOjB,EAAS,KAAK,EAAG,QAAQ,EAGpC,GAAIE,IAAoB,KAAM,CAC5B,IAAMgB,EAAsBhB,EAAgB,KAAK,EAAG,QAAQ,EAC5DA,EAAgB,KAAK,YAAa,aAAa,CAACgB,EAAoB,MAAQ,CAAC,GAAG,CAClF,CAGA,OAAAf,EAAW,KAAK,YAAa,aAAa,CAACQ,EAAe,MAAQ,CAAC,KAAKL,CAAqB,GAAG,EAEhGW,EAAOjB,EAAS,KAAK,EAAG,QAAQ,EAEhCI,EAAa,KACX,YACA,gBAAmBE,EAAwBC,EAAmBT,EAAM,CAAC,GACvE,EACAmB,EAAOjB,EAAS,KAAK,EAAG,QAAQ,EAChCK,EAAa,KACX,YACA,gBAAmBC,EAAwBC,GAAoBC,EAAqBA,EAAqBV,EAAM,EAAIA,EAAM,EAAE,GAC7H,EAEAmB,EAAOjB,EAAS,KAAK,EAAG,QAAQ,EAEzB,CAAE,SAAAA,EAAU,KAAAiB,CAAK,CAC1B,CAjFsBE,EAAA1B,GAAA,cAoFtB,eAAeiB,GACbU,EACAzB,EACAiB,EACAS,EAAmB,CAAC,EACpB,CACA,IAAMC,EAASF,EAAY,OAAO,GAAG,EAAE,KAAK,QAAS,OAAO,EAAE,KAAK,QAASC,EAAO,KAAK,IAAI,CAAC,EACvFzB,EAAS2B,GAAU,EACrB1B,EACF,kBAAmBF,EAAOA,EAAK,cAAiB6B,EAAS5B,EAAO,UAAU,GAAK,GAE7E6B,EAAc,GAEd,SAAU9B,EACZ8B,EAAc9B,EAAK,KAEnB8B,EAAc9B,EAAK,MAKjB,CAACE,GAAiB4B,EAAY,WAAW,IAAI,IAC/CA,EAAcA,EAAY,UAAU,CAAC,GAGnCC,GAASD,CAAW,IACtB5B,EAAgB,IAGlB,IAAM8B,EAAO,MAAMC,GACjBN,EACAO,GAAaC,GAAeL,CAAW,CAAC,EACxC,CACE,MAAOM,GAAmBN,EAAa7B,CAAM,EAAI,GACjD,QAAS,sBACT,cAAAC,CACF,EACAD,CACF,EACIqB,EACAe,EAAgB,EAEpB,GAAKnC,EA4BE,CACL,IAAMoC,EAAMN,EAAK,SAAS,CAAC,EACrBO,EAAKC,EAAOR,CAAI,EAEtBK,EAAgBC,EAAI,UAAU,MAAM,MAAM,EAAE,OAExCA,EAAI,UAAU,SAAS,SAAS,IAClCD,GAAiBC,EAAI,UAAU,MAAM,QAAQ,EAAE,OAAS,GAI1D,IAAMG,EAASH,EAAI,qBAAqB,KAAK,EAC7C,GAAIG,EAAQ,CACV,IAAMC,EAAYZ,EAAY,QAAQ,cAAe,EAAE,EAAE,KAAK,IAAM,GACpE,MAAM,QAAQ,IACZ,CAAC,GAAGW,CAAM,EAAE,IACTE,GACC,IAAI,QAASC,GAAQ,CACnB,SAASC,GAAa,CAIpB,GAHAF,EAAI,MAAM,QAAU,OACpBA,EAAI,MAAM,cAAgB,SAEtBD,EAAW,CAEb,IAAMI,EACJ7C,EAAO,UAAU,SAAS,GAAK,OAAO,iBAAiB,SAAS,IAAI,EAAE,SAElE8C,EAAQ,SAASD,EAAc,EAAE,EADf,EACqC,KAC7DH,EAAI,MAAM,SAAWI,EACrBJ,EAAI,MAAM,SAAWI,CACvB,MACEJ,EAAI,MAAM,MAAQ,OAEpBC,EAAID,CAAG,CACT,CAhBSnB,EAAAqB,EAAA,cAiBT,WAAW,IAAM,CACXF,EAAI,UACNE,EAAW,CAEf,CAAC,EACDF,EAAI,iBAAiB,QAASE,CAAU,EACxCF,EAAI,iBAAiB,OAAQE,CAAU,CACzC,CAAC,CACL,CACF,CACF,CAEAvB,EAAOgB,EAAI,sBAAsB,EACjCC,EAAG,KAAK,QAASjB,EAAK,KAAK,EAC3BiB,EAAG,KAAK,SAAUjB,EAAK,MAAM,CAC/B,KA9EoB,CAEdI,EAAO,SAAS,qBAAqB,GACvCc,EAAOR,CAAI,EAAE,UAAU,OAAO,EAAE,KAAK,cAAe,EAAE,EAGxDK,EAAgBL,EAAK,SAAS,OAE9B,IAAMgB,EAAYhB,EAAK,SAAS,CAAC,GAC7BA,EAAK,cAAgB,IAAMA,EAAK,YAAY,SAAS,KAAK,KAC5DgB,EAAU,YACRlB,EAAY,CAAC,EACbA,EAAY,UAAU,CAAC,EAAE,WAAW,OAAQ,GAAG,EAAE,WAAW,OAAQ,GAAG,EAAE,KAAK,EAG1DA,EAAY,CAAC,IAAM,MAEvCkB,EAAU,YAAcA,EAAU,YAAY,CAAC,EAAI,IAAMA,EAAU,YAAY,UAAU,CAAC,IAK1FA,EAAU,cAAgB,cAC5BA,EAAU,YAAc,IAI1B1B,EAAOU,EAAK,QAAQ,CACtB,CAqDA,OAAAL,EAAO,KAAK,YAAa,gBAAkB,CAACL,EAAK,QAAU,EAAIe,GAAiBpB,GAAW,GAAG,EACvFK,EAAK,MACd,CA7HeE,EAAAT,GAAA,WCrFf,eAAsBkC,GAAuCC,EAAwBC,EAAY,CAC/F,IAAMC,EAASC,EAAU,EACnBC,EAAUF,EAAO,MAAO,SAAW,GACnCG,EAAMD,EACNE,EAAgBL,EAAK,eAAiBM,EAASL,EAAO,UAAU,GAAK,GAErEM,EAAYP,EAClBO,EAAU,YAAcA,EAAU,aAAe,CAAC,EAClDA,EAAU,QAAUA,EAAU,SAAW,CAAC,EAC1CA,EAAU,QAAUA,EAAU,SAAW,CAAC,EAE1C,GAAM,CAAE,SAAAC,EAAU,KAAAC,CAAK,EAAI,MAAMC,GAAWX,EAAQC,EAAMC,EAAQI,EAAeD,CAAG,EAE9E,CAAE,YAAAO,EAAa,WAAAC,CAAW,EAAIC,EAAcb,CAAI,EACtDA,EAAK,WAAaW,EAElBX,EAAK,UAAYO,EAAU,QAAU,GAErC,IAAMO,EAASP,EAAU,QAAQ,KAAK,GAAG,GAAKK,GAAc,GAEvDZ,EAAK,YACRA,EAAK,UAAYc,EAAO,WAAW,aAAc,EAAE,EAAE,MAAM,GAAG,GAGhE,IAAMC,EACJR,EAAU,QAAQ,SAAW,GAC7BA,EAAU,QAAQ,SAAW,GAC7B,CAACN,EAAO,OAAO,oBAIXe,EAAKC,EAAM,IAAIT,CAAQ,EACvBU,EAAUC,EAAkBnB,EAAM,CAAC,CAAC,EAEtCA,EAAK,OAAS,cAChBkB,EAAQ,UAAY,EACpBA,EAAQ,UAAY,SAGtB,IAAME,EAAIX,EAAK,MACXY,EAAIZ,EAAK,OACTF,EAAU,QAAQ,SAAW,GAAKA,EAAU,QAAQ,SAAW,EACjEc,GAAKjB,EACIG,EAAU,QAAQ,OAAS,GAAKA,EAAU,QAAQ,SAAW,IACtEc,GAAKjB,EAAM,GAEb,IAAMkB,EAAI,CAACF,EAAI,EACTG,EAAI,CAACF,EAAI,EAGTG,EAAYR,EAAG,UACnBM,EAAInB,EACJoB,EACEpB,GACCY,EACGZ,EACAI,EAAU,QAAQ,SAAW,GAAKA,EAAU,QAAQ,SAAW,EAC7D,CAACJ,EAAU,EACX,GACRiB,EAAI,EAAIjB,EACRkB,EACE,EAAIlB,GACHY,EACGZ,EAAU,EACVI,EAAU,QAAQ,SAAW,GAAKA,EAAU,QAAQ,SAAW,EAC7D,CAACJ,EACD,GACRe,CACF,EAEMO,EAAOjB,EAAS,OAAO,IAAMgB,EAAW,cAAc,EAC5DC,EAAK,KAAK,QAAS,uBAAuB,EAC1C,IAAMC,EAAWD,EAAK,KAAK,EAAG,QAAQ,EAItCjB,EAAS,UAAU,OAAO,EAAE,KAAK,CAACmB,EAAQC,EAAWC,IAAe,CAClE,IAAMC,EAAOC,EAAqBF,EAAMD,CAAC,CAAC,EAEpCI,EAAYF,EAAK,KAAK,WAAW,EAEnCG,EAAa,EAEjB,GAAID,EAAW,CAEb,IAAME,EADQ,OAAO,8BAA8B,EAC3B,KAAKF,CAAS,EAClCE,IACFD,EAAa,WAAWC,EAAU,CAAC,CAAC,EAExC,CAEA,IAAIC,EACFF,EACAV,EACApB,GACCY,EACGZ,EACAI,EAAU,QAAQ,SAAW,GAAKA,EAAU,QAAQ,SAAW,EAC7D,CAACJ,EAAU,EACX,GACHE,IAGH8B,GAAiB,GAEnB,IAAIC,EAAgBd,GAElBQ,EAAK,KAAK,OAAO,EAAE,SAAS,aAAa,GACzCA,EAAK,KAAK,OAAO,EAAE,SAAS,kBAAkB,KAE9CM,EAAgB,CAACN,EAAK,KAAK,GAAG,QAAQ,EAAE,MAAQ,GAAK,EACrDtB,EAAS,UAAU,MAAM,EAAE,KAAK,SAAUmB,EAAQC,EAAWC,EAAY,CACnE,OAAO,iBAAiBA,EAAMD,CAAC,CAAC,EAAE,aAAe,WACnDQ,EAAgB,EAEpB,CAAC,GAGHN,EAAK,KAAK,YAAa,aAAaM,CAAa,KAAKD,CAAa,GAAG,CACxE,CAAC,EAGD,IAAME,EACH7B,EAAS,OAAO,mBAAmB,EAAE,KAAK,EAAyB,QAAQ,EAAE,QAC3EO,EAAiBZ,EAAU,EAAI,IAAM,EACpCmC,EACH9B,EAAS,OAAO,cAAc,EAAE,KAAK,EAAyB,QAAQ,EAAE,QACtEO,EAAiBZ,EAAU,EAAI,IAAM,EACpCoC,EACH/B,EAAS,OAAO,gBAAgB,EAAE,KAAK,EAAyB,QAAQ,EAAE,QACxEO,EAAiBZ,EAAU,EAAI,IAAM,EAE1C,GAAII,EAAU,QAAQ,OAAS,GAAKA,EAAU,QAAQ,OAAS,GAAKQ,EAAgB,CAClF,IAAMyB,EAAYxB,EAAG,KACnBU,EAAS,EACTW,EAAwBC,EAAmBf,EAAIpB,EAC/CuB,EAAS,EAAIA,EAAS,MACtBW,EAAwBC,EAAmBf,EAAIpB,EAC/Ce,CACF,EACaV,EAAS,OAAO,IAAMgC,CAAS,EACvC,KAAK,QAAS,SAAS,EAAE,KAAK,QAAS1B,CAAM,CACpD,CAGA,GAAIC,GAAkBR,EAAU,QAAQ,OAAS,GAAKA,EAAU,QAAQ,OAAS,EAAG,CAClF,IAAMiC,EAAYxB,EAAG,KACnBU,EAAS,EACTW,EAAwBC,EAAmBC,EAAqBhB,EAAInB,EAAM,EAAID,EAC9EuB,EAAS,EAAIA,EAAS,MACtBW,EAAwBC,EAAmBC,EAAqBhB,EAAIpB,EAAUC,EAAM,EACpFc,CACF,EACaV,EAAS,OAAO,IAAMgC,CAAS,EACvC,KAAK,QAAS,SAAS,EAAE,KAAK,QAAS1B,CAAM,CACpD,CAiBA,GAdIP,EAAU,OAAS,aACrBC,EAAS,UAAU,MAAM,EAAE,KAAK,QAASM,CAAM,EAGjDW,EAAK,OAAO,eAAe,EAAE,KAAK,QAASX,CAAM,EAEjDN,EAAS,UAAU,UAAU,EAAE,OAAO,MAAM,EAAE,KAAK,QAASM,CAAM,EAE9Dd,EAAK,WACPQ,EAAS,UAAU,MAAM,EAAE,KAAK,QAASR,EAAK,UAAU,EAExDQ,EAAS,UAAU,MAAM,EAAE,KAAK,QAASM,CAAM,EAG7C,CAACT,EAAe,CAElB,IAAMoC,EAAa,OAAO,qBAAqB,EACzCC,EAAQD,EAAW,KAAK3B,CAAM,EACpC,GAAI4B,EAAO,CACT,IAAMC,EAAaD,EAAM,CAAC,EAAE,QAAQ,QAAS,MAAM,EACnDlC,EAAS,UAAU,OAAO,EAAE,KAAK,QAASmC,CAAU,CACtD,SAAWhC,EAAa,CACtB,IAAM+B,EAAQD,EAAW,KAAK9B,CAAW,EACzC,GAAI+B,EAAO,CACT,IAAMC,EAAaD,EAAM,CAAC,EAAE,QAAQ,QAAS,MAAM,EACnDlC,EAAS,UAAU,OAAO,EAAE,KAAK,QAASmC,CAAU,CACtD,CACF,CACF,CAEA,OAAAC,EAAiB5C,EAAMyB,CAAI,EAC3BzB,EAAK,UAAY,SAAU6C,EAAO,CAChC,OAAOC,EAAU,KAAK9C,EAAM6C,CAAK,CACnC,EAEOrC,CACT,CAlMsBuC,EAAAjD,GAAA,YCJtB,IAAMkD,GAAoBC,EAACC,GAAkD,CAC3E,OAAQA,EAAU,CAChB,IAAK,YACH,MAAO,MACT,IAAK,OACH,MAAO,SACT,IAAK,SACH,OAAO,KACT,IAAK,MACH,MAAO,OACT,IAAK,WACH,MAAO,WACX,CACF,EAb0B,qBAc1B,eAAsBC,GACpBC,EAEAC,EACA,CAAE,OAAAC,CAAO,EACT,CACA,GAAM,CAAE,YAAAC,EAAa,WAAAC,CAAW,EAAIC,EAAcJ,CAAU,EAC5DA,EAAW,WAAaE,GAAe,GAEvC,IAAMG,EAAgB,GAChBC,EAAWN,EAAW,MAC5BA,EAAW,OAASA,EAAW,OAAS,KAAO,GAE/C,GAAM,CACJ,SAAAO,EACA,KAAAC,EACA,MAAOC,CACT,EAAI,MAAMC,EAAYX,EAAQC,EAAYW,EAAeX,CAAU,CAAC,EAC9DY,EAAUZ,EAAW,SAAW,GAElCa,EAAY,GACZC,EAEA,WAAYd,GAAcA,EAAW,QAAUC,GAAQ,QAAQ,gBACjEY,EAAYZ,GAAQ,QAAQ,cAAc,QAAQ,WAAYD,EAAW,MAAM,EAC/Ec,EAAOP,EACJ,OAAoB,QAAS,cAAc,EAC3C,KAAK,QAAS,oBAAoB,EAClC,KAAK,aAAcM,CAAS,EAC5B,KAAK,SAAU,QAAQ,GAG5B,IAAME,EAAU,CACd,cAAef,EAAW,cAC1B,WAAYA,EAAW,YAAc,GACrC,MAAOA,EAAW,MAClB,IAAKA,EAAW,IAChB,QAASA,EAAW,SAAW,EAC/B,YAAa,EACf,EACIgB,EAASC,EACTH,EACD,CAAE,MAAOE,EAAS,KAAMC,CAAM,EAAI,MAAMC,GACvCJ,EACC,WAAYd,GAAcA,EAAW,QAAW,GACjDe,CACF,EAEC,CAAE,MAAOC,EAAS,KAAMC,CAAM,EAAI,MAAMC,GACvCX,EACC,WAAYP,GAAcA,EAAW,QAAW,GACjDe,CACF,EAEF,GAAM,CAAE,MAAOI,EAAiB,KAAMC,CAAa,EAAI,MAAMF,GAC3DX,EACC,aAAcP,GAAcA,EAAW,UAAa,GACrDe,CACF,EACAf,EAAW,MAAQM,EACnB,IAAMe,EAAgB,GAChBC,EAAatB,GAAY,OAAS,EAClCuB,EAAY,KAAK,IAAIN,EAAM,OAAQG,EAAa,MAAM,EAAI,EAC1DI,EACJ,KAAK,IAAIhB,EAAK,OAASa,EAAgB,EAAGrB,GAAY,QAAU,CAAC,EAAIuB,EACjEE,EAAI,CAACH,EAAa,EAClBI,EAAI,CAACF,EAAc,EACzBf,EAAa,KACX,YACA,cAAgBG,EAAUU,EAAa,GAAK,MAAQ,CAACC,EAAYf,EAAK,OAAS,GAAK,GACtF,EACAQ,EAAQ,KACN,YACA,cAAgBJ,EAAUU,EAAa,GAAK,MAAQ,CAACC,EAAYf,EAAK,OAAS,GAAK,GACtF,EACAW,EAAgB,KACd,YACA,cACGP,EAAUU,EAAa,EAAIF,EAAa,MAAQ,EAAIf,GACrD,MACC,CAACkB,EAAYf,EAAK,OAAS,GAC5B,GACJ,EAEA,IAAImB,EAEE,CAAE,GAAAC,EAAI,GAAAC,CAAG,EAAI7B,EACb,CAAE,UAAA8B,CAAU,EAAI9B,EAEtB,GAAIA,EAAW,OAAS,YAAa,CAEnC,IAAM+B,EAAKC,EAAM,IAAIzB,CAAQ,EACvBQ,EAAUkB,EAAkBjC,EAAY,CAAC,CAAC,EAE1CkC,EACJN,GAAMC,EACFE,EAAG,KAAKI,EAAuBV,EAAGC,EAAGJ,EAAYE,EAAaI,GAAM,CAAC,EAAGb,CAAO,EAC/EgB,EAAG,UAAUN,EAAGC,EAAGJ,EAAYE,EAAaT,CAAO,EAEzDY,EAAOpB,EAAS,OAAO,IAAM2B,EAAW,cAAc,EACtDP,EAAK,KAAK,QAAS,uBAAuB,EAAE,KAAK,QAASG,GAAwB,IAAI,CACxF,KAAO,CACLH,EAAOpB,EAAS,OAAO,OAAQ,cAAc,EAE7CoB,EACG,KAAK,QAAS,+BAA+B,EAC7C,KAAK,QAASxB,CAAU,EACxB,KAAK,KAAMyB,GAAM,CAAC,EAClB,KAAK,KAAMC,GAAM,CAAC,EAClB,KAAK,IAAKJ,CAAC,EACX,KAAK,IAAKC,CAAC,EACX,KAAK,QAASJ,CAAU,EACxB,KAAK,SAAUE,CAAW,EAE7B,IAAM3B,EAAW,aAAcG,GAAcA,EAAW,SACxD,GAAIH,EAAU,CACZ,IAAMuC,EAAO7B,EAAS,OAAO,MAAM,EAC7B8B,EAAQZ,EAAI,EAEZa,EAAKZ,EAAI,KAAK,OAAOE,GAAM,GAAK,CAAC,EACjCW,EAAKb,EAAIF,EAAc,KAAK,OAAOI,GAAM,GAAK,CAAC,EACrDQ,EACG,KAAK,KAAMC,CAAK,EAChB,KAAK,KAAMC,CAAE,EACb,KAAK,KAAMD,CAAK,EAChB,KAAK,KAAME,CAAE,EAEb,KAAK,eAAgB,GAAG,EACxB,KAAK,SAAU5C,GAAkBE,CAAQ,CAAC,CAC/C,CACF,CAEA,OAAA2C,EAAiBxC,EAAY2B,CAAI,EACjC3B,EAAW,OAASwB,EAEpBxB,EAAW,UAAY,SAAUyC,EAAO,CACtC,OAAOC,EAAU,KAAK1C,EAAYyC,CAAK,CACzC,EAEOlC,CACT,CA5IsBX,EAAAE,GAAA,cC8Df,IAAM6C,GAAa,CACxB,CACE,aAAc,UACd,KAAM,YACN,UAAW,OACX,YAAa,yBACb,QAAS,CAAC,OAAQ,UAAW,WAAW,EACxC,gBAAiB,CAAC,YAAY,EAC9B,QAASC,EACX,EACA,CACE,aAAc,QACd,KAAM,oBACN,UAAW,UACX,YAAa,sBACb,QAAS,CAAC,OAAO,EACjB,gBAAiB,CAAC,aAAa,EAC/B,QAASC,EACX,EACA,CACE,aAAc,iBACd,KAAM,UACN,UAAW,UACX,YAAa,iBACb,QAAS,CAAC,WAAY,MAAM,EAC5B,QAASC,EACX,EACA,CACE,aAAc,aACd,KAAM,mBACN,UAAW,UACX,YAAa,aACb,QAAS,CAAC,aAAc,UAAW,mBAAoB,YAAY,EACnE,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,WACN,UAAW,MACX,YAAa,mBACb,QAAS,CAAC,KAAM,WAAY,UAAU,EACtC,QAASC,EACX,EACA,CACE,aAAc,QACd,KAAM,SACN,UAAW,SACX,YAAa,iBACb,QAAS,CAAC,MAAM,EAChB,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,UACN,UAAW,OACX,YAAa,uBACb,QAAS,CAAC,WAAY,UAAW,UAAU,EAC3C,QAASC,EACX,EACA,CACE,aAAc,sBACd,KAAM,UACN,UAAW,MACX,YAAa,gCACb,QAAS,CAAC,UAAW,SAAS,EAC9B,QAASC,EACX,EACA,CACE,aAAc,oBACd,KAAM,aACN,UAAW,SACX,YAAa,6BACb,QAAS,CAAC,aAAc,QAAQ,EAChC,gBAAiB,CAAC,YAAY,EAC9B,QAASC,EACX,EACA,CACE,aAAc,oBACd,KAAM,YACN,UAAW,SACX,YAAa,6BACb,QAAS,CAAC,YAAa,QAAQ,EAC/B,gBAAiB,CAAC,WAAW,EAC7B,QAASC,EACX,EACA,CACE,aAAc,kBACd,KAAM,wBACN,UAAW,SACX,YAAa,kBACb,QAAS,CAAC,WAAY,mBAAoB,WAAW,EACrD,QAASC,EACX,EACA,CACE,aAAc,mBACd,KAAM,qBACN,UAAW,SACX,YAAa,2BACb,QAAS,CAAC,SAAU,gBAAiB,eAAe,EACpD,gBAAiB,CAAC,eAAe,EACjC,QAASC,EACX,EACA,CACE,aAAc,OACd,KAAM,gBACN,UAAW,WACX,YAAa,0BACb,QAAS,CAAC,eAAe,EACzB,gBAAiB,CAAC,cAAc,EAChC,QAASC,EACX,EACA,CACE,aAAc,aACd,KAAM,aACN,UAAW,OACX,YAAa,aACb,QAASC,EACX,EACA,CACE,aAAc,OACd,KAAM,oBACN,UAAW,aACX,YAAa,oBACb,QAAS,CAAC,OAAQ,mBAAmB,EACrC,QAASC,EACX,EACA,CACE,aAAc,uBACd,KAAM,kBACN,UAAW,WACX,YAAa,sBACb,QAAS,CAAC,kBAAmB,gBAAiB,WAAY,gBAAgB,EAC1E,QAASC,EACX,EACA,CACE,aAAc,QACd,KAAM,eACN,UAAW,UACX,YAAa,uBACb,QAAS,CAAC,QAAS,cAAc,EACjC,gBAAiB,CAAC,YAAY,EAC9B,QAASC,EACX,EACA,CACE,aAAc,OACd,KAAM,gBACN,UAAW,UACX,YAAa,aACb,QAAS,CAAC,OAAQ,eAAe,EACjC,gBAAiB,CAAC,UAAU,EAC5B,QAASC,EACX,EACA,CACE,aAAc,YACd,KAAM,mBACN,UAAW,OACX,YAAa,+BACb,QAAS,CAAC,MAAM,EAChB,gBAAiB,CAAC,UAAU,EAC5B,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,YACN,UAAW,YACX,YAAa,iCACb,QAAS,CAAC,YAAa,SAAS,EAChC,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,cACN,UAAW,QACX,YAAa,iBACb,QAAS,CAAC,UAAW,SAAS,EAC9B,QAASC,EACX,EACA,CACE,aAAc,gBACd,KAAM,cACN,UAAW,UACX,YAAa,iBACb,QAASC,EACX,EACA,CACE,aAAc,oCACd,KAAM,eACN,UAAW,SACX,YAAa,iBACb,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,iBACN,UAAW,OACX,YAAa,qBACb,QAAS,CAAC,WAAY,gBAAgB,EACtC,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,WACN,UAAW,MACX,YAAa,wBACb,QAAS,CAAC,MAAO,UAAU,EAC3B,QAASC,EACX,EACA,CACE,aAAc,QACd,KAAM,yBACN,UAAW,QACX,YAAa,qBACb,QAAS,CAAC,wBAAwB,EAClC,QAASC,EACX,EACA,CACE,aAAc,wBACd,KAAM,sBACN,UAAW,QACX,YAAa,wBACb,QAAS,CAAC,MAAO,qBAAqB,EACtC,QAASC,EACX,EACA,CACE,aAAc,eACd,KAAM,iBACN,UAAW,UACX,YAAa,eACb,QAAS,CAAC,OAAQ,gBAAgB,EAClC,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,mBACN,UAAW,YACX,YAAa,uBACb,QAAS,CAAC,mBAAoB,SAAS,EACvC,QAASC,EACX,EACA,CACE,aAAc,kBACd,KAAM,oBACN,UAAW,WACX,YAAa,wBACb,QAAS,CAAC,WAAY,oBAAqB,iBAAiB,EAC5D,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,WACN,UAAW,MACX,YAAa,qBACb,QAAS,CAAC,UAAW,UAAU,EAC/B,QAASC,EACX,EACA,CACE,aAAc,mBACd,KAAM,cACN,UAAW,WACX,YAAa,mBACb,QAAS,CAAC,mBAAoB,aAAa,EAC3C,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,gBACN,UAAW,SACX,YAAa,iBACb,QAAS,CAAC,WAAY,eAAe,EACrC,QAASC,EACX,EACA,CACE,aAAc,aACd,KAAM,uBACN,UAAW,aACX,YAAa,kBACb,QAAS,CAAC,aAAc,kBAAkB,EAC1C,QAASC,EACX,EACA,CACE,aAAc,cACd,KAAM,mBACN,UAAW,WACX,YAAa,wBACb,QAAS,CAAC,cAAe,kBAAkB,EAC3C,QAASC,EACX,EACA,CACE,aAAc,eACd,KAAM,mBACN,UAAW,UACX,YAAa,oBACb,QAAS,CAAC,eAAgB,kBAAkB,EAC5C,QAASC,EACX,EACA,CACE,aAAc,iBACd,KAAM,mBACN,UAAW,OACX,YAAa,qBACb,QAAS,CAAC,YAAa,SAAU,kBAAkB,EACnD,QAASC,EACX,EACA,CACE,aAAc,gBACd,KAAM,oBACN,UAAW,UACX,YAAa,qBACb,QAAS,CAAC,QAAS,YAAa,mBAAmB,EACnD,QAASC,EACX,EACA,CACE,aAAc,cACd,KAAM,oBACN,UAAW,WACX,YAAa,cACb,QAAS,CAAC,cAAe,mBAAmB,EAC5C,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,iBACN,UAAW,aACX,YAAa,UACb,QAAS,CAAC,UAAW,gBAAgB,EACrC,QAASC,EACX,EACA,CACE,aAAc,kBACd,KAAM,kBACN,UAAW,UACX,YAAa,kBACb,QAAS,CAAC,UAAW,iBAAiB,EACtC,QAASC,EACX,EACA,CACE,aAAc,iBACd,KAAM,mBACN,UAAW,WACX,YAAa,iBACb,QAAS,CAAC,mBAAoB,WAAY,gBAAgB,EAC1D,QAASC,EACX,EACA,CACE,aAAc,aACd,KAAM,OACN,UAAW,OACX,YAAa,aACb,QAAS,CAAC,YAAY,EACtB,QAASC,EACX,EACA,CACE,aAAc,MACd,KAAM,MACN,UAAW,MACX,YAAa,YACb,gBAAiB,CAAC,qBAAqB,EACvC,QAASC,EACX,EACA,CACE,aAAc,iBACd,KAAM,iBACN,UAAW,UACX,YAAa,iBACb,QAAS,CAAC,gBAAgB,EAC1B,QAASC,EACX,CACF,EAEMC,GAAmBC,EAAA,IAAM,CA2B7B,IAAMC,EAAU,CACd,GAAI,OAAO,QA1Bc,CAEzB,MAAAC,GACA,OAAAC,GACA,KAAAC,GAGA,cAAAC,GACA,UAAAC,GAGA,WAAAC,GACA,WAAAC,GACA,KAAAC,GACA,YAAAC,GACA,YAAAC,GACA,OAAAC,GAGA,WAAAC,GAGA,SAAAC,EACF,CAGuC,EACrC,GAAG7D,GAAW,QAAS8D,GACL,CACdA,EAAM,UACN,GAAI,YAAaA,EAAQA,EAAM,QAAU,CAAC,EAC1C,GAAI,oBAAqBA,EAAQA,EAAM,gBAAkB,CAAC,CAC5D,EACe,IAAKC,GAAU,CAACA,EAAOD,EAAM,OAAO,CAAU,CAC9D,CACH,EACA,OAAO,OAAO,YAAYd,CAAO,CAInC,EA1CyB,oBA4CZgB,GAASlB,GAAiB,EAEhC,SAASmB,GAAaH,EAAiC,CAC5D,OAAOA,KAASE,EAClB,CAFgBjB,EAAAkB,GAAA,gBCzehB,IAAMC,GAAY,IAAI,IAEtB,eAAsBC,GACpBC,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAGAH,EAAK,QAAU,SACbA,EAAK,IAAMA,EAAK,GAClBA,EAAK,MAAQ,cAEbA,EAAK,MAAQ,cAIjB,IAAMI,EAAeJ,EAAK,MAAQK,GAAOL,EAAK,KAAK,EAAI,OAEvD,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,kBAAkBJ,EAAK,KAAK,6BAA6B,EAG3E,GAAIA,EAAK,KAAM,CAEb,IAAIM,EACAL,EAAc,OAAO,gBAAkB,UACzCK,EAAS,OACAN,EAAK,aACdM,EAASN,EAAK,YAAc,UAE9BE,EAAQH,EACL,OAAoB,OAAO,EAC3B,KAAK,aAAcC,EAAK,IAAI,EAC5B,KAAK,SAAUM,GAAU,IAAI,EAChCH,EAAK,MAAMC,EAAaF,EAAOF,EAAMC,CAAa,CACpD,MACEE,EAAK,MAAMC,EAAaL,EAAMC,EAAMC,CAAa,EACjDC,EAAQC,EAEV,OAAIH,EAAK,SACPG,EAAG,KAAK,QAASH,EAAK,OAAO,EAG/BH,GAAU,IAAIG,EAAK,GAAIE,CAAK,EAExBF,EAAK,cACPE,EAAM,KAAK,QAASA,EAAM,KAAK,OAAO,EAAI,YAAY,EAEjDA,CACT,CAlDsBK,EAAAT,GAAA,cAoDf,IAAMU,GAAcD,EAAA,CAACR,EAAmBC,IAA2B,CACxEH,GAAU,IAAIG,EAAK,GAAID,CAAI,CAC7B,EAF2B,eAIdU,GAAQF,EAAA,IAAM,CACzBV,GAAU,MAAM,CAClB,EAFqB,SAIRa,GAAeH,EAACP,GAA6C,CACxE,IAAMG,EAAKN,GAAU,IAAIG,EAAK,EAAE,EAChCW,EAAI,MACF,oBACAX,EAAK,KACLA,EACA,cAAgBA,EAAK,EAAIA,EAAK,MAAQ,EAAI,GAAK,KAAOA,EAAK,MAAQ,EAAI,GACzE,EACA,IAAMY,EAAU,EACVC,EAAOb,EAAK,MAAQ,EAC1B,OAAIA,EAAK,YACPG,EAAG,KACD,YACA,cACGH,EAAK,EAAIa,EAAOb,EAAK,MAAQ,GAC9B,MACCA,EAAK,EAAIA,EAAK,OAAS,EAAIY,GAC5B,GACJ,EAEAT,EAAG,KAAK,YAAa,aAAeH,EAAK,EAAI,KAAOA,EAAK,EAAI,GAAG,EAE3Da,CACT,EAvB4B",
"names": ["labelHelper", "__name", "parent", "node", "_classes", "cssClasses", "useHtmlLabels", "evaluate", "getConfig", "shapeSvg", "labelEl", "handleUndefinedAttr", "label", "text", "createText", "sanitizeText", "decodeEntities", "bbox", "halfPadding", "div", "dv", "select_default", "images", "noImgText", "img", "res", "setupImage", "bodyFontSize", "enlargingFactor", "parsedBodyFontSize", "defaultConfig_default", "parseFontSize", "width", "insertLabel", "options", "updateNodeBounds", "element", "getNodeClasses", "__name", "node", "extra", "createPathFromPoints", "points", "pointStrings", "p", "i", "generateFullSineWavePoints", "x1", "y1", "x2", "y2", "amplitude", "numCycles", "deltaX", "deltaY", "cycleLength", "frequency", "midY", "t", "x", "y", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "startAngleRad", "angleStep", "angle", "t", "e", "s", "n", "o", "h", "r", "__name", "a", "i", "c", "l", "u", "p", "f", "d", "g", "M", "k", "b", "y", "m", "x", "w", "P", "v", "S", "O", "L", "T", "D", "A", "G", "E", "$", "j", "z", "F", "q", "V", "_", "Z", "I", "C", "W", "R", "Q", "H", "N", "B", "J", "K", "U", "X", "Y", "tt", "et", "st", "nt", "ot", "at", "intersectRect", "__name", "node", "point", "x", "y", "dx", "dy", "w", "h", "sx", "sy", "intersect_rect_default", "applyStyle", "dom", "styleFn", "__name", "addHtmlLabel", "node", "fo", "select_default", "div", "label", "hasKatex", "renderKatex", "common_default", "getConfig", "labelClass", "createLabel", "_vertexText", "style", "isTitle", "isNode", "vertexText", "evaluate", "log", "decodeEntities", "s", "svgLabel", "rows", "row", "tspan", "createLabel_default", "createRoundedRectPathD", "__name", "x", "y", "totalWidth", "totalHeight", "radius", "solidStateFill", "__name", "color", "handDrawnSeed", "getConfig", "compileStyles", "node", "stylesMap", "styles2Map", "styles", "styleMap", "style", "key", "value", "styles2String", "stylesArray", "labelStyles", "nodeStyles", "borderStyles", "backgroundStyles", "userNodeOverrides", "options", "themeVariables", "nodeBorder", "mainBkg", "rect", "__name", "parent", "node", "log", "siteConfig", "getConfig", "themeVariables", "handDrawnSeed", "clusterBkg", "clusterBorder", "labelStyles", "nodeStyles", "borderStyles", "backgroundStyles", "styles2String", "shapeSvg", "useHtmlLabels", "evaluate", "labelEl", "text", "createText", "bbox", "div", "dv", "select_default", "width", "height", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "subGraphTitleTopMargin", "getSubGraphTitleMargins", "span", "rectBox", "point", "intersect_rect_default", "noteGroup", "padding", "halfPadding", "roundedWithTitle", "altBackground", "compositeBackground", "compositeTitleBackground", "nodeBorder", "outerRectG", "label", "innerRect", "createLabel_default", "innerHeight", "innerY", "isAlt", "roughOuterNode", "roughInnerNode", "kanbanSection", "divider", "squareRect", "shapes", "clusterElems", "insertCluster", "elem", "shape", "cluster", "clear", "__name", "clusterElems", "intersectNode", "node", "point", "__name", "intersect_node_default", "intersectEllipse", "node", "rx", "ry", "point", "cx", "cy", "px", "py", "det", "dx", "dy", "__name", "intersect_ellipse_default", "intersectCircle", "node", "rx", "point", "intersect_ellipse_default", "__name", "intersect_circle_default", "intersectLine", "p1", "p2", "q1", "q2", "a1", "a2", "b1", "b2", "c1", "c2", "r1", "r2", "r3", "r4", "denom", "offset", "num", "x", "y", "sameSign", "__name", "intersect_line_default", "intersectPolygon", "node", "polyPoints", "point", "x1", "y1", "intersections", "minX", "minY", "entry", "left", "top", "i", "p1", "p2", "intersect", "intersect_line_default", "p", "q", "pdx", "pdy", "distp", "qdx", "qdy", "distq", "__name", "intersect_polygon_default", "intersect_default", "intersect_node_default", "intersect_circle_default", "intersect_ellipse_default", "intersect_polygon_default", "intersect_rect_default", "anchor", "parent", "node", "labelStyles", "styles2String", "classes", "getNodeClasses", "cssClasses", "shapeSvg", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "roughNode", "circleElem", "handleUndefinedAttr", "updateNodeBounds", "point", "log", "intersect_default", "__name", "generateArcPoints", "x1", "y1", "x2", "y2", "rx", "ry", "clockwise", "midX", "midY", "angle", "dx", "dy", "transformedX", "transformedY", "distance", "scaledCenterDistance", "centerX", "centerY", "startAngle", "angleRange", "points", "i", "t", "x", "y", "__name", "bowTieRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "bowTieRectPath", "createPathFromPoints", "bowTieRectShapePath", "bowTieRectShape", "updateNodeBounds", "point", "intersect_default", "insertPolygonShape", "parent", "w", "h", "points", "d", "__name", "card", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "padding", "w", "left", "right", "top", "bottom", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "choice", "parent", "node", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "s", "points", "rc", "at", "options", "userNodeOverrides", "choicePath", "createPathFromPoints", "roughNode", "choiceShape", "point", "intersect_default", "__name", "circle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "labelHelper", "getNodeClasses", "radius", "circleElem", "cssStyles", "rc", "at", "options", "userNodeOverrides", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "point", "log", "intersect_default", "__name", "createLine", "r", "xAxis45", "yAxis45", "lineLength", "pointQ1", "pointQ2", "pointQ3", "pointQ4", "__name", "crossedCircle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "circleNode", "linePath", "lineNode", "updateNodeBounds", "point", "log", "intersect_default", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "__name", "curlyBraceLeft", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "cssStyles", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newCurlyBracePath", "createPathFromPoints", "curlyBraceLeftNode", "rectPath", "rectShape", "curlyBraceLeftShape", "updateNodeBounds", "point", "intersect_default", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "__name", "curlyBraceRight", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "cssStyles", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newCurlyBracePath", "createPathFromPoints", "curlyBraceRightNode", "rectPath", "rectShape", "curlyBraceRightShape", "updateNodeBounds", "point", "intersect_default", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "__name", "curlyBraces", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "cssStyles", "leftCurlyBracePoints", "rightCurlyBracePoints", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newLeftCurlyBracePath", "createPathFromPoints", "leftCurlyBraceNode", "newRightCurlyBracePath", "rightCurlyBraceNode", "rectPath", "rectShape", "curlyBracesShape", "updateNodeBounds", "point", "intersect_default", "curvedTrapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "minWidth", "minHeight", "w", "h", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "totalWidth", "totalHeight", "rw", "tw", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "createCylinderPathD", "__name", "x", "y", "width", "height", "rx", "ry", "createOuterCylinderPathD", "createInnerCylinderPathD", "cylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "outerPathData", "innerPathData", "outerNode", "userNodeOverrides", "innerLine", "pathData", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "dividedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "rectOffset", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pts", "poly", "p", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "doublecircle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "labelHelper", "getNodeClasses", "outerRadius", "innerRadius", "circleGroup", "cssStyles", "rc", "at", "outerOptions", "userNodeOverrides", "innerOptions", "outerRoughNode", "innerRoughNode", "handleUndefinedAttr", "outerCircle", "innerCircle", "updateNodeBounds", "point", "log", "intersect_default", "__name", "filledCircle", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "radius", "cssStyles", "rc", "at", "nodeBorder", "options", "userNodeOverrides", "circleNode", "updateNodeBounds", "point", "log", "intersect_default", "__name", "flippedTriangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "tw", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "updateNodeBounds", "point", "log", "intersect_default", "__name", "forkJoin", "parent", "node", "dir", "state", "themeVariables", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "width", "height", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughNode", "shape", "updateNodeBounds", "padding", "point", "intersect_default", "__name", "halfRoundedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "minWidth", "minHeight", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "__name", "createHexagonPathD", "__name", "x", "y", "width", "height", "m", "hexagon", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "f", "h", "w", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "hourglass", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "__name", "icon", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "iconNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "iconCircle", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "label", "labelHelper", "padding", "labelPadding", "topLabel", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "rc", "at", "options", "userNodeOverrides", "fill", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "diameter", "iconNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "updateNodeBounds", "point", "log", "intersect_default", "__name", "iconRounded", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "fill", "iconNode", "createRoundedRectPathD", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "iconSquare", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "fill", "iconNode", "createRoundedRectPathD", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "imageSquare", "parent", "node", "flowchart", "img", "imageNaturalWidth", "imageNaturalHeight", "labelStyles", "styles2String", "defaultWidth", "imageRawWidth", "imageWidth", "imageHeight", "shapeSvg", "bbox", "label", "labelHelper", "topLabel", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "imageNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "image", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "inv_trapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "drawRect", "parent", "node", "options", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "rect", "rx", "ry", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "handleUndefinedAttr", "updateNodeBounds", "point", "intersect_default", "__name", "labelRect", "parent", "node", "shapeSvg", "bbox", "label", "labelHelper", "rect", "updateNodeBounds", "point", "intersect_default", "__name", "lean_left", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "lean_right", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "lightningBolt", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "width", "height", "gap", "points", "rc", "at", "options", "userNodeOverrides", "linePath", "createPathFromPoints", "lineNode", "updateNodeBounds", "point", "log", "intersect_default", "__name", "createCylinderPathD", "__name", "x", "y", "width", "height", "rx", "ry", "outerOffset", "createOuterCylinderPathD", "createInnerCylinderPathD", "linedCylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "cylinder", "cssStyles", "rc", "at", "outerPathData", "innerPathData", "options", "userNodeOverrides", "outerNode", "innerLine", "pathData", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "linedWaveEdgedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "waveAmplitude", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "poly", "p", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "__name", "multiRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "rectOffset", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "outerPathPoints", "innerPathPoints", "outerPath", "createPathFromPoints", "outerNode", "innerPath", "innerNode", "updateNodeBounds", "point", "intersect_default", "__name", "multiWaveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "waveAmplitude", "finalH", "x", "y", "rectOffset", "cssStyles", "wavePoints", "generateFullSineWavePoints", "lastWavePoint", "outerPathPoints", "innerPathPoints", "rc", "at", "options", "userNodeOverrides", "outerPath", "createPathFromPoints", "outerNode", "innerPath", "innerNode", "shape", "updateNodeBounds", "point", "intersect_default", "__name", "note", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "getConfig", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "noteShapeNode", "rect", "updateNodeBounds", "point", "intersect_default", "__name", "createDecisionBoxPathD", "__name", "x", "y", "size", "question", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "s", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "log", "intersect_default", "rect_left_inv_arrow", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "x", "y", "notch", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "rectWithTitle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "classes", "shapeSvg", "g", "label", "description", "title", "text", "createLabel_default", "bbox", "evaluate", "getConfig", "div", "dv", "select_default", "log", "textRows", "titleBox", "descr", "halfPadding", "totalWidth", "totalHeight", "x", "y", "rect", "innerLine", "rc", "at", "options", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "roughLine", "updateNodeBounds", "point", "intersect_default", "__name", "roundedRect", "parent", "node", "options", "drawRect", "__name", "shadedProcess", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "halfPadding", "w", "h", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "roughNode", "p", "rect", "handleUndefinedAttr", "updateNodeBounds", "point", "intersect_default", "__name", "slopedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "squareRect", "parent", "node", "options", "drawRect", "__name", "stadium", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "rect", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createRoundedRectPathD", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "point", "intersect_default", "__name", "state", "parent", "node", "drawRect", "__name", "stateEnd", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "cssStyles", "lineColor", "stateBorder", "nodeBorder", "shapeSvg", "rc", "at", "options", "userNodeOverrides", "roughNode", "innerFill", "roughInnerNode", "circle", "updateNodeBounds", "point", "intersect_default", "__name", "stateStart", "parent", "node", "themeVariables", "lineColor", "shapeSvg", "circle", "roughNode", "at", "solidStateFill", "updateNodeBounds", "point", "intersect_default", "__name", "subroutine", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "halfPadding", "w", "x", "y", "points", "rc", "at", "options", "userNodeOverrides", "roughNode", "l1", "l2", "rect", "cssStyles", "handleUndefinedAttr", "updateNodeBounds", "el", "insertPolygonShape", "point", "intersect_default", "__name", "taggedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "x", "y", "tagWidth", "tagHeight", "cssStyles", "rc", "at", "options", "userNodeOverrides", "rectPoints", "tagPoints", "rectPath", "createPathFromPoints", "rectNode", "tagPath", "tagNode", "updateNodeBounds", "point", "intersect_default", "__name", "taggedWaveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "waveAmplitude", "tagWidth", "tagHeight", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "x", "y", "tagPoints", "waveEdgeRectPath", "createPathFromPoints", "waveEdgeRectNode", "taggedWaveEdgeRectPath", "taggedWaveEdgeRectNode", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "__name", "text", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "rect", "updateNodeBounds", "point", "intersect_default", "__name", "createCylinderPathD", "__name", "x", "y", "width", "height", "rx", "ry", "createOuterCylinderPathD", "createInnerCylinderPathD", "tiltedCylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "halfPadding", "labelHelper", "getNodeClasses", "labelPadding", "h", "w", "cssStyles", "cylinder", "rc", "at", "outerPathData", "innerPathData", "outerNode", "userNodeOverrides", "innerLine", "pathData", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "trapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "trapezoidalPentagon", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "minWidth", "minHeight", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "triangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "useHtmlLabels", "evaluate", "getConfig", "w", "h", "tw", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "__name", "waveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "waveAmplitude", "finalH", "cssStyles", "widthDif", "extraW", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "waveEdgeRectPath", "createPathFromPoints", "waveEdgeRectNode", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "__name", "waveRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "minWidth", "minHeight", "baseWidth", "baseHeight", "aspectRatio", "w", "h", "waveAmplitude", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "waveRectPath", "createPathFromPoints", "waveRectNode", "waveRect", "updateNodeBounds", "point", "intersect_default", "__name", "windowPane", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "rectOffset", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "outerPathPoints", "path", "no", "updateNodeBounds", "point", "intersect_default", "__name", "textHelper", "parent", "node", "config", "useHtmlLabels", "GAP", "TEXT_PADDING", "shapeSvg", "getNodeClasses", "annotationGroup", "labelGroup", "membersGroup", "methodsGroup", "annotationGroupHeight", "labelGroupHeight", "membersGroupHeight", "annotation", "addText", "labelGroupBBox", "yOffset", "member", "height", "methodsYOffset", "method", "bbox", "annotationGroupBBox", "__name", "parentGroup", "styles", "textEl", "getConfig", "evaluate", "textContent", "hasKatex", "text", "createText", "sanitizeText", "decodeEntities", "calculateTextWidth", "numberOfLines", "div", "dv", "select_default", "images", "noImgText", "img", "res", "setupImage", "bodyFontSize", "width", "textChild", "classBox", "parent", "node", "config", "getConfig", "PADDING", "GAP", "useHtmlLabels", "evaluate", "classNode", "shapeSvg", "bbox", "textHelper", "labelStyles", "nodeStyles", "styles2String", "styles", "renderExtraBox", "rc", "at", "options", "userNodeOverrides", "w", "h", "x", "y", "roughRect", "rect", "rectBBox", "_", "i", "nodes", "text", "select_default", "transform", "translateY", "translate", "newTranslateY", "newTranslateX", "annotationGroupHeight", "labelGroupHeight", "membersGroupHeight", "roughLine", "colorRegex", "match", "colorStyle", "updateNodeBounds", "point", "intersect_default", "__name", "colorFromPriority", "__name", "priority", "kanbanItem", "parent", "kanbanNode", "config", "labelStyles", "nodeStyles", "styles2String", "labelPaddingX", "orgWidth", "shapeSvg", "bbox", "labelElTitle", "labelHelper", "getNodeClasses", "padding", "ticketUrl", "link", "options", "labelEl", "bbox2", "insertLabel", "labelElAssigned", "bboxAssigned", "labelPaddingY", "totalWidth", "heightAdj", "totalHeight", "x", "y", "rect", "rx", "ry", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "line", "lineX", "y1", "y2", "updateNodeBounds", "point", "intersect_default", "shapesDefs", "squareRect", "roundedRect", "stadium", "subroutine", "cylinder", "circle", "question", "hexagon", "lean_right", "lean_left", "trapezoid", "inv_trapezoid", "doublecircle", "text", "card", "shadedProcess", "stateStart", "stateEnd", "forkJoin", "hourglass", "curlyBraceLeft", "curlyBraceRight", "curlyBraces", "lightningBolt", "waveEdgedRectangle", "halfRoundedRectangle", "tiltedCylinder", "linedCylinder", "curvedTrapezoid", "dividedRectangle", "triangle", "windowPane", "filledCircle", "trapezoidalPentagon", "flippedTriangle", "slopedRect", "multiWaveEdgedRectangle", "multiRect", "bowTieRect", "crossedCircle", "taggedWaveEdgedRectangle", "taggedRect", "waveRectangle", "rect_left_inv_arrow", "linedWaveEdgedRect", "generateShapeMap", "__name", "entries", "state", "choice", "note", "rectWithTitle", "labelRect", "iconSquare", "iconCircle", "icon", "iconRounded", "imageSquare", "anchor", "kanbanItem", "classBox", "shape", "alias", "shapes", "isValidShape", "nodeElems", "insertNode", "elem", "node", "renderOptions", "newEl", "el", "shapeHandler", "shapes", "target", "__name", "setNodeElem", "clear", "positionNode", "log", "padding", "diff"]
}