flowink 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/parser/generated.js", "../src/errors.js", "../src/parser/semantic.js", "../src/parser/preprocess.js", "../src/parse.js", "../src/layout.js", "../src/text.js", "../src/place-labels.js", "../src/rasterize.js", "../src/index.js"],
4
+ "sourcesContent": ["/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\n/** @type {any} */\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,3],$V2=[1,5],$V3=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],$V4=[2,2],$V5=[1,13],$V6=[1,14],$V7=[1,15],$V8=[1,16],$V9=[1,23],$Va=[1,25],$Vb=[1,26],$Vc=[1,27],$Vd=[1,50],$Ve=[1,49],$Vf=[1,29],$Vg=[1,30],$Vh=[1,31],$Vi=[1,32],$Vj=[1,33],$Vk=[1,45],$Vl=[1,47],$Vm=[1,43],$Vn=[1,48],$Vo=[1,44],$Vp=[1,51],$Vq=[1,46],$Vr=[1,52],$Vs=[1,53],$Vt=[1,34],$Vu=[1,35],$Vv=[1,36],$Vw=[1,37],$Vx=[1,38],$Vy=[1,58],$Vz=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],$VA=[1,62],$VB=[1,61],$VC=[1,63],$VD=[8,9,11,75,77,78],$VE=[1,79],$VF=[1,92],$VG=[1,97],$VH=[1,96],$VI=[1,93],$VJ=[1,89],$VK=[1,95],$VL=[1,91],$VM=[1,98],$VN=[1,94],$VO=[1,99],$VP=[1,90],$VQ=[8,9,10,11,40,75,77,78],$VR=[8,9,10,11,40,46,75,77,78],$VS=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],$VT=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],$VU=[44,60,89,102,105,106,109,111,114,115,116],$VV=[1,122],$VW=[1,123],$VX=[1,125],$VY=[1,124],$VZ=[44,60,62,74,89,102,105,106,109,111,114,115,116],$V_=[1,134],$V$=[1,148],$V01=[1,149],$V11=[1,150],$V21=[1,151],$V31=[1,136],$V41=[1,138],$V51=[1,142],$V61=[1,143],$V71=[1,144],$V81=[1,145],$V91=[1,146],$Va1=[1,147],$Vb1=[1,152],$Vc1=[1,153],$Vd1=[1,132],$Ve1=[1,133],$Vf1=[1,140],$Vg1=[1,135],$Vh1=[1,139],$Vi1=[1,137],$Vj1=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],$Vk1=[1,155],$Vl1=[1,157],$Vm1=[8,9,11],$Vn1=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],$Vo1=[1,177],$Vp1=[1,173],$Vq1=[1,174],$Vr1=[1,178],$Vs1=[1,175],$Vt1=[1,176],$Vu1=[77,116,119],$Vv1=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],$Vw1=[10,106],$Vx1=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],$Vy1=[1,248],$Vz1=[1,246],$VA1=[1,250],$VB1=[1,244],$VC1=[1,245],$VD1=[1,247],$VE1=[1,249],$VF1=[1,251],$VG1=[1,269],$VH1=[8,9,11,106],$VI1=[8,9,10,11,60,84,105,106,109,110,111,112];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"graphConfig\":4,\"document\":5,\"line\":6,\"statement\":7,\"SEMI\":8,\"NEWLINE\":9,\"SPACE\":10,\"EOF\":11,\"GRAPH\":12,\"NODIR\":13,\"DIR\":14,\"FirstStmtSeparator\":15,\"ending\":16,\"endToken\":17,\"spaceList\":18,\"spaceListNewline\":19,\"vertexStatement\":20,\"separator\":21,\"styleStatement\":22,\"linkStyleStatement\":23,\"classDefStatement\":24,\"classStatement\":25,\"clickStatement\":26,\"subgraph\":27,\"textNoTags\":28,\"SQS\":29,\"text\":30,\"SQE\":31,\"end\":32,\"direction\":33,\"acc_title\":34,\"acc_title_value\":35,\"acc_descr\":36,\"acc_descr_value\":37,\"acc_descr_multiline_value\":38,\"shapeData\":39,\"SHAPE_DATA\":40,\"link\":41,\"node\":42,\"styledVertex\":43,\"AMP\":44,\"vertex\":45,\"STYLE_SEPARATOR\":46,\"idString\":47,\"DOUBLECIRCLESTART\":48,\"DOUBLECIRCLEEND\":49,\"PS\":50,\"PE\":51,\"(-\":52,\"-)\":53,\"STADIUMSTART\":54,\"STADIUMEND\":55,\"SUBROUTINESTART\":56,\"SUBROUTINEEND\":57,\"VERTEX_WITH_PROPS_START\":58,\"NODE_STRING[field]\":59,\"COLON\":60,\"NODE_STRING[value]\":61,\"PIPE\":62,\"CYLINDERSTART\":63,\"CYLINDEREND\":64,\"DIAMOND_START\":65,\"DIAMOND_STOP\":66,\"TAGEND\":67,\"TRAPSTART\":68,\"TRAPEND\":69,\"INVTRAPSTART\":70,\"INVTRAPEND\":71,\"linkStatement\":72,\"arrowText\":73,\"TESTSTR\":74,\"START_LINK\":75,\"edgeText\":76,\"LINK\":77,\"LINK_ID\":78,\"edgeTextToken\":79,\"STR\":80,\"MD_STR\":81,\"textToken\":82,\"keywords\":83,\"STYLE\":84,\"LINKSTYLE\":85,\"CLASSDEF\":86,\"CLASS\":87,\"CLICK\":88,\"DOWN\":89,\"UP\":90,\"textNoTagsToken\":91,\"stylesOpt\":92,\"idString[vertex]\":93,\"idString[class]\":94,\"CALLBACKNAME\":95,\"CALLBACKARGS\":96,\"HREF\":97,\"LINK_TARGET\":98,\"STR[link]\":99,\"STR[tooltip]\":100,\"alphaNum\":101,\"DEFAULT\":102,\"numList\":103,\"INTERPOLATE\":104,\"NUM\":105,\"COMMA\":106,\"style\":107,\"styleComponent\":108,\"NODE_STRING\":109,\"UNIT\":110,\"BRKT\":111,\"PCT\":112,\"idStringToken\":113,\"MINUS\":114,\"MULT\":115,\"UNICODE_TEXT\":116,\"TEXT\":117,\"TAGSTART\":118,\"EDGE_TEXT\":119,\"alphaNumToken\":120,\"direction_tb\":121,\"direction_bt\":122,\"direction_rl\":123,\"direction_lr\":124,\"direction_td\":125,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",8:\"SEMI\",9:\"NEWLINE\",10:\"SPACE\",11:\"EOF\",12:\"GRAPH\",13:\"NODIR\",14:\"DIR\",27:\"subgraph\",29:\"SQS\",31:\"SQE\",32:\"end\",34:\"acc_title\",35:\"acc_title_value\",36:\"acc_descr\",37:\"acc_descr_value\",38:\"acc_descr_multiline_value\",40:\"SHAPE_DATA\",44:\"AMP\",46:\"STYLE_SEPARATOR\",48:\"DOUBLECIRCLESTART\",49:\"DOUBLECIRCLEEND\",50:\"PS\",51:\"PE\",52:\"(-\",53:\"-)\",54:\"STADIUMSTART\",55:\"STADIUMEND\",56:\"SUBROUTINESTART\",57:\"SUBROUTINEEND\",58:\"VERTEX_WITH_PROPS_START\",59:\"NODE_STRING[field]\",60:\"COLON\",61:\"NODE_STRING[value]\",62:\"PIPE\",63:\"CYLINDERSTART\",64:\"CYLINDEREND\",65:\"DIAMOND_START\",66:\"DIAMOND_STOP\",67:\"TAGEND\",68:\"TRAPSTART\",69:\"TRAPEND\",70:\"INVTRAPSTART\",71:\"INVTRAPEND\",74:\"TESTSTR\",75:\"START_LINK\",77:\"LINK\",78:\"LINK_ID\",80:\"STR\",81:\"MD_STR\",84:\"STYLE\",85:\"LINKSTYLE\",86:\"CLASSDEF\",87:\"CLASS\",88:\"CLICK\",89:\"DOWN\",90:\"UP\",93:\"idString[vertex]\",94:\"idString[class]\",95:\"CALLBACKNAME\",96:\"CALLBACKARGS\",97:\"HREF\",98:\"LINK_TARGET\",99:\"STR[link]\",100:\"STR[tooltip]\",102:\"DEFAULT\",104:\"INTERPOLATE\",105:\"NUM\",106:\"COMMA\",109:\"NODE_STRING\",110:\"UNIT\",111:\"BRKT\",112:\"PCT\",114:\"MINUS\",115:\"MULT\",116:\"UNICODE_TEXT\",117:\"TEXT\",118:\"TAGSTART\",119:\"EDGE_TEXT\",121:\"direction_tb\",122:\"direction_bt\",123:\"direction_rl\",124:\"direction_lr\",125:\"direction_td\"},\nproductions_: [0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1],[33,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 2:\n this.$ = [];\nbreak;\ncase 3:\n\n\t if(!Array.isArray($$[$0]) || $$[$0].length > 0){\n\t $$[$0-1].push($$[$0]);\n\t }\n\t this.$=$$[$0-1];\nbreak;\ncase 4: case 183:\nthis.$=$$[$0];\nbreak;\ncase 11:\n yy.setDirection('TB');this.$ = 'TB';\nbreak;\ncase 12:\n yy.setDirection($$[$0-1]);this.$ = $$[$0-1];\nbreak;\ncase 27:\n this.$=$$[$0-1].nodes\nbreak;\ncase 28: case 29: case 30: case 31: case 32:\nthis.$=[];\nbreak;\ncase 33:\nthis.$=yy.addSubGraph($$[$0-6],$$[$0-1],$$[$0-4]);\nbreak;\ncase 34:\nthis.$=yy.addSubGraph($$[$0-3],$$[$0-1],$$[$0-3]);\nbreak;\ncase 35:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],undefined);\nbreak;\ncase 37:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 38: case 39:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 43:\n this.$ = $$[$0-1] + $$[$0]; \nbreak;\ncase 44:\n this.$ = $$[$0]; \nbreak;\ncase 45:\n /* console.warn('vs shapeData',$$[$0-3].stmt,$$[$0-1], $$[$0]);*/ yy.addVertex($$[$0-1][$$[$0-1].length-1],undefined,undefined,undefined, undefined,undefined, undefined,$$[$0]); yy.addLink($$[$0-3].stmt,$$[$0-1],$$[$0-2]); this.$ = { stmt: $$[$0-1], nodes: $$[$0-1].concat($$[$0-3].nodes) } \nbreak;\ncase 46:\n /*console.warn('vs',$$[$0-2].stmt,$$[$0]);*/ yy.addLink($$[$0-2].stmt,$$[$0],$$[$0-1]); this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0-2].nodes) } \nbreak;\ncase 47:\n /* console.warn('vs',$$[$0-3].stmt,$$[$0-1]); */ yy.addLink($$[$0-3].stmt,$$[$0-1],$$[$0-2]); this.$ = { stmt: $$[$0-1], nodes: $$[$0-1].concat($$[$0-3].nodes) } \nbreak;\ncase 48:\n /*console.warn('vertexStatement: node spaceList', $$[$0-1]);*/ this.$ = {stmt: $$[$0-1], nodes:$$[$0-1] }\nbreak;\ncase 49:\n\n /*console.warn('vertexStatement: node shapeData', $$[$0-1][0], $$[$0]);*/\n yy.addVertex($$[$0-1][$$[$0-1].length-1],undefined,undefined,undefined, undefined,undefined, undefined,$$[$0]);\n this.$ = {stmt: $$[$0-1], nodes:$$[$0-1], shapeData: $$[$0]}\n \nbreak;\ncase 50:\n /* console.warn('vertexStatement: single node', $$[$0]); */ this.$ = {stmt: $$[$0], nodes:$$[$0] }\nbreak;\ncase 51:\n /*console.warn('nod', $$[$0]);*/ this.$ = [$$[$0]];\nbreak;\ncase 52:\n yy.addVertex($$[$0-5][$$[$0-5].length-1],undefined,undefined,undefined, undefined,undefined, undefined,$$[$0-4]); this.$ = $$[$0-5].concat($$[$0]); /*console.warn('pip2', $$[$0-5][0], $$[$0], this.$);*/ \nbreak;\ncase 53:\n this.$ = $$[$0-4].concat($$[$0]); /*console.warn('pip', $$[$0-4][0], $$[$0], this.$);*/ \nbreak;\ncase 54:\n /* console.warn('nodc', $$[$0]);*/ this.$ = $$[$0];\nbreak;\ncase 55:\nthis.$ = $$[$0-2];yy.setClass($$[$0-2],$$[$0])\nbreak;\ncase 56:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');\nbreak;\ncase 57:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'doublecircle');\nbreak;\ncase 58:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');\nbreak;\ncase 59:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'ellipse');\nbreak;\ncase 60:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'stadium');\nbreak;\ncase 61:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'subroutine');\nbreak;\ncase 62:\nthis.$ = $$[$0-7];yy.addVertex($$[$0-7],$$[$0-1],'rect',undefined,undefined,undefined, Object.fromEntries([[$$[$0-5], $$[$0-3]]]));\nbreak;\ncase 63:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'cylinder');\nbreak;\ncase 64:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');\nbreak;\ncase 65:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');\nbreak;\ncase 66:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'hexagon');\nbreak;\ncase 67:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');\nbreak;\ncase 68:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'trapezoid');\nbreak;\ncase 69:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'inv_trapezoid');\nbreak;\ncase 70:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'lean_right');\nbreak;\ncase 71:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'lean_left');\nbreak;\ncase 72:\n /*console.warn('h: ', $$[$0]);*/this.$ = $$[$0];yy.addVertex($$[$0]);\nbreak;\ncase 73:\n$$[$0-1].text = $$[$0];this.$ = $$[$0-1];\nbreak;\ncase 74: case 75:\n$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2];\nbreak;\ncase 76:\nthis.$ = $$[$0];\nbreak;\ncase 77:\nvar inf = yy.destructLink($$[$0], $$[$0-2]); this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length,\"text\":$$[$0-1]};\nbreak;\ncase 78:\nvar inf = yy.destructLink($$[$0], $$[$0-2]); this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length,\"text\":$$[$0-1], \"id\": $$[$0-3]};\nbreak;\ncase 79:\nthis.$={text:$$[$0], type:'text'};\nbreak;\ncase 80:\nthis.$={text:$$[$0-1].text+''+$$[$0], type:$$[$0-1].type};\nbreak;\ncase 81:\nthis.$={text: $$[$0], type: 'string'};\nbreak;\ncase 82:\nthis.$={text:$$[$0], type:'markdown'};\nbreak;\ncase 83:\nvar inf = yy.destructLink($$[$0]);this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length};\nbreak;\ncase 84:\nvar inf = yy.destructLink($$[$0]);this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length, \"id\": $$[$0-1]};\nbreak;\ncase 85:\nthis.$ = $$[$0-1];\nbreak;\ncase 86:\n this.$={text:$$[$0], type: 'text'};\nbreak;\ncase 87:\n this.$={text:$$[$0-1].text+''+$$[$0], type: $$[$0-1].type};\nbreak;\ncase 88:\n this.$ = {text: $$[$0], type: 'string'};\nbreak;\ncase 89: case 104:\n this.$={text: $$[$0], type: 'markdown'};\nbreak;\ncase 101:\nthis.$={text:$$[$0], type: 'text'};\nbreak;\ncase 102:\nthis.$={text:$$[$0-1].text+''+$$[$0], type: $$[$0-1].type};\nbreak;\ncase 103:\n this.$={text: $$[$0], type: 'text'};\nbreak;\ncase 105:\nthis.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);\nbreak;\ncase 106:\nthis.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);\nbreak;\ncase 107: case 115:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0]);\nbreak;\ncase 108: case 116:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 109:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 110:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-4], $$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-4], $$[$0]);\nbreak;\ncase 111:\nthis.$ = $$[$0-2];yy.setLink($$[$0-2], $$[$0]);\nbreak;\ncase 112:\nthis.$ = $$[$0-4];yy.setLink($$[$0-4], $$[$0-2]);yy.setTooltip($$[$0-4], $$[$0]);\nbreak;\ncase 113:\nthis.$ = $$[$0-4];yy.setLink($$[$0-4], $$[$0-2], $$[$0]);\nbreak;\ncase 114:\nthis.$ = $$[$0-6];yy.setLink($$[$0-6], $$[$0-4], $$[$0]);yy.setTooltip($$[$0-6], $$[$0-2]);\nbreak;\ncase 117:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 118:\nthis.$ = $$[$0-3];yy.setLink($$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 119:\nthis.$ = $$[$0-3];yy.setLink($$[$0-3], $$[$0-2], $$[$0]);\nbreak;\ncase 120:\nthis.$ = $$[$0-5];yy.setLink($$[$0-5], $$[$0-4], $$[$0]);yy.setTooltip($$[$0-5], $$[$0-2]);\nbreak;\ncase 121:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);\nbreak;\ncase 122:\nthis.$ = $$[$0-4];yy.updateLink([$$[$0-2]],$$[$0]);\nbreak;\ncase 123:\nthis.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);\nbreak;\ncase 124:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate([$$[$0-6]],$$[$0-2]);yy.updateLink([$$[$0-6]],$$[$0]);\nbreak;\ncase 125:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate($$[$0-6],$$[$0-2]);yy.updateLink($$[$0-6],$$[$0]);\nbreak;\ncase 126:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate([$$[$0-4]],$$[$0]);\nbreak;\ncase 127:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate($$[$0-4],$$[$0]);\nbreak;\ncase 128: case 130:\nthis.$ = [$$[$0]]\nbreak;\ncase 129: case 131:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 133:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\ncase 181:\nthis.$=$$[$0]\nbreak;\ncase 182:\nthis.$=$$[$0-1]+''+$$[$0]\nbreak;\ncase 184:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\ncase 185:\n this.$={stmt:'dir', value:'TB'};\nbreak;\ncase 186:\n this.$={stmt:'dir', value:'BT'};\nbreak;\ncase 187:\n this.$={stmt:'dir', value:'RL'};\nbreak;\ncase 188:\n this.$={stmt:'dir', value:'LR'};\nbreak;\ncase 189:\n this.$={stmt:'dir', value:'TD'};\nbreak;\n}\n},\ntable: [{3:1,4:2,9:$V0,10:$V1,12:$V2},{1:[3]},o($V3,$V4,{5:6}),{4:7,9:$V0,10:$V1,12:$V2},{4:8,9:$V0,10:$V1,12:$V2},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:$V5,9:$V6,10:$V7,11:$V8,20:17,22:18,23:19,24:20,25:21,26:22,27:$V9,33:24,34:$Va,36:$Vb,38:$Vc,42:28,43:39,44:$Vd,45:40,47:41,60:$Ve,84:$Vf,85:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs,121:$Vt,122:$Vu,123:$Vv,124:$Vw,125:$Vx},o($V3,[2,9]),o($V3,[2,10]),o($V3,[2,11]),{8:[1,55],9:[1,56],10:$Vy,15:54,18:57},o($Vz,[2,3]),o($Vz,[2,4]),o($Vz,[2,5]),o($Vz,[2,6]),o($Vz,[2,7]),o($Vz,[2,8]),{8:$VA,9:$VB,11:$VC,21:59,41:60,72:64,75:[1,65],77:[1,67],78:[1,66]},{8:$VA,9:$VB,11:$VC,21:68},{8:$VA,9:$VB,11:$VC,21:69},{8:$VA,9:$VB,11:$VC,21:70},{8:$VA,9:$VB,11:$VC,21:71},{8:$VA,9:$VB,11:$VC,21:72},{8:$VA,9:$VB,10:[1,73],11:$VC,21:74},o($Vz,[2,36]),{35:[1,75]},{37:[1,76]},o($Vz,[2,39]),o($VD,[2,50],{18:77,39:78,10:$Vy,40:$VE}),{10:[1,80]},{10:[1,81]},{10:[1,82]},{10:[1,83]},{14:$VF,44:$VG,60:$VH,80:[1,87],89:$VI,95:[1,84],97:[1,85],101:86,105:$VJ,106:$VK,109:$VL,111:$VM,114:$VN,115:$VO,116:$VP,120:88},o($Vz,[2,185]),o($Vz,[2,186]),o($Vz,[2,187]),o($Vz,[2,188]),o($Vz,[2,189]),o($VQ,[2,51]),o($VQ,[2,54],{46:[1,100]}),o($VR,[2,72],{113:113,29:[1,101],44:$Vd,48:[1,102],50:[1,103],52:[1,104],54:[1,105],56:[1,106],58:[1,107],60:$Ve,63:[1,108],65:[1,109],67:[1,110],68:[1,111],70:[1,112],89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,114:$Vq,115:$Vr,116:$Vs}),o($VS,[2,181]),o($VS,[2,142]),o($VS,[2,143]),o($VS,[2,144]),o($VS,[2,145]),o($VS,[2,146]),o($VS,[2,147]),o($VS,[2,148]),o($VS,[2,149]),o($VS,[2,150]),o($VS,[2,151]),o($VS,[2,152]),o($V3,[2,12]),o($V3,[2,18]),o($V3,[2,19]),{9:[1,114]},o($VT,[2,26],{18:115,10:$Vy}),o($Vz,[2,27]),{42:116,43:39,44:$Vd,45:40,47:41,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},o($Vz,[2,40]),o($Vz,[2,41]),o($Vz,[2,42]),o($VU,[2,76],{73:117,62:[1,119],74:[1,118]}),{76:120,79:121,80:$VV,81:$VW,116:$VX,119:$VY},{75:[1,126],77:[1,127]},o($VZ,[2,83]),o($Vz,[2,28]),o($Vz,[2,29]),o($Vz,[2,30]),o($Vz,[2,31]),o($Vz,[2,32]),{10:$V_,12:$V$,14:$V01,27:$V11,28:128,32:$V21,44:$V31,60:$V41,75:$V51,80:[1,130],81:[1,131],83:141,84:$V61,85:$V71,86:$V81,87:$V91,88:$Va1,89:$Vb1,90:$Vc1,91:129,105:$Vd1,109:$Ve1,111:$Vf1,114:$Vg1,115:$Vh1,116:$Vi1},o($Vj1,$V4,{5:154}),o($Vz,[2,37]),o($Vz,[2,38]),o($VD,[2,48],{44:$Vk1}),o($VD,[2,49],{18:156,10:$Vy,40:$Vl1}),o($VQ,[2,44]),{44:$Vd,47:158,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},{102:[1,159],103:160,105:[1,161]},{44:$Vd,47:162,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},{44:$Vd,47:163,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},o($Vm1,[2,107],{10:[1,164],96:[1,165]}),{80:[1,166]},o($Vm1,[2,115],{120:168,10:[1,167],14:$VF,44:$VG,60:$VH,89:$VI,105:$VJ,106:$VK,109:$VL,111:$VM,114:$VN,115:$VO,116:$VP}),o($Vm1,[2,117],{10:[1,169]}),o($Vn1,[2,183]),o($Vn1,[2,170]),o($Vn1,[2,171]),o($Vn1,[2,172]),o($Vn1,[2,173]),o($Vn1,[2,174]),o($Vn1,[2,175]),o($Vn1,[2,176]),o($Vn1,[2,177]),o($Vn1,[2,178]),o($Vn1,[2,179]),o($Vn1,[2,180]),{44:$Vd,47:170,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},{30:171,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:179,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:181,50:[1,180],67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:182,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:183,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:184,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{109:[1,185]},{30:186,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:187,65:[1,188],67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:189,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:190,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{30:191,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},o($VS,[2,182]),o($V3,[2,20]),o($VT,[2,25]),o($VD,[2,46],{39:192,18:193,10:$Vy,40:$VE}),o($VU,[2,73],{10:[1,194]}),{10:[1,195]},{30:196,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{77:[1,197],79:198,116:$VX,119:$VY},o($Vu1,[2,79]),o($Vu1,[2,81]),o($Vu1,[2,82]),o($Vu1,[2,168]),o($Vu1,[2,169]),{76:199,79:121,80:$VV,81:$VW,116:$VX,119:$VY},o($VZ,[2,84]),{8:$VA,9:$VB,10:$V_,11:$VC,12:$V$,14:$V01,21:201,27:$V11,29:[1,200],32:$V21,44:$V31,60:$V41,75:$V51,83:141,84:$V61,85:$V71,86:$V81,87:$V91,88:$Va1,89:$Vb1,90:$Vc1,91:202,105:$Vd1,109:$Ve1,111:$Vf1,114:$Vg1,115:$Vh1,116:$Vi1},o($Vv1,[2,101]),o($Vv1,[2,103]),o($Vv1,[2,104]),o($Vv1,[2,157]),o($Vv1,[2,158]),o($Vv1,[2,159]),o($Vv1,[2,160]),o($Vv1,[2,161]),o($Vv1,[2,162]),o($Vv1,[2,163]),o($Vv1,[2,164]),o($Vv1,[2,165]),o($Vv1,[2,166]),o($Vv1,[2,167]),o($Vv1,[2,90]),o($Vv1,[2,91]),o($Vv1,[2,92]),o($Vv1,[2,93]),o($Vv1,[2,94]),o($Vv1,[2,95]),o($Vv1,[2,96]),o($Vv1,[2,97]),o($Vv1,[2,98]),o($Vv1,[2,99]),o($Vv1,[2,100]),{6:11,7:12,8:$V5,9:$V6,10:$V7,11:$V8,20:17,22:18,23:19,24:20,25:21,26:22,27:$V9,32:[1,203],33:24,34:$Va,36:$Vb,38:$Vc,42:28,43:39,44:$Vd,45:40,47:41,60:$Ve,84:$Vf,85:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs,121:$Vt,122:$Vu,123:$Vv,124:$Vw,125:$Vx},{10:$Vy,18:204},{44:[1,205]},o($VQ,[2,43]),{10:[1,206],44:$Vd,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:113,114:$Vq,115:$Vr,116:$Vs},{10:[1,207]},{10:[1,208],106:[1,209]},o($Vw1,[2,128]),{10:[1,210],44:$Vd,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:113,114:$Vq,115:$Vr,116:$Vs},{10:[1,211],44:$Vd,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:113,114:$Vq,115:$Vr,116:$Vs},{80:[1,212]},o($Vm1,[2,109],{10:[1,213]}),o($Vm1,[2,111],{10:[1,214]}),{80:[1,215]},o($Vn1,[2,184]),{80:[1,216],98:[1,217]},o($VQ,[2,55],{113:113,44:$Vd,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,114:$Vq,115:$Vr,116:$Vs}),{31:[1,218],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},o($Vx1,[2,86]),o($Vx1,[2,88]),o($Vx1,[2,89]),o($Vx1,[2,153]),o($Vx1,[2,154]),o($Vx1,[2,155]),o($Vx1,[2,156]),{49:[1,220],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{30:221,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{51:[1,222],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{53:[1,223],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{55:[1,224],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{57:[1,225],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{60:[1,226]},{64:[1,227],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{66:[1,228],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{30:229,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},{31:[1,230],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{67:$Vo1,69:[1,231],71:[1,232],82:219,116:$Vr1,117:$Vs1,118:$Vt1},{67:$Vo1,69:[1,234],71:[1,233],82:219,116:$Vr1,117:$Vs1,118:$Vt1},o($VD,[2,45],{18:156,10:$Vy,40:$Vl1}),o($VD,[2,47],{44:$Vk1}),o($VU,[2,75]),o($VU,[2,74]),{62:[1,235],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},o($VU,[2,77]),o($Vu1,[2,80]),{77:[1,236],79:198,116:$VX,119:$VY},{30:237,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},o($Vj1,$V4,{5:238}),o($Vv1,[2,102]),o($Vz,[2,35]),{43:239,44:$Vd,45:40,47:41,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},{10:$Vy,18:240},{10:$Vy1,60:$Vz1,84:$VA1,92:241,105:$VB1,107:242,108:243,109:$VC1,110:$VD1,111:$VE1,112:$VF1},{10:$Vy1,60:$Vz1,84:$VA1,92:252,104:[1,253],105:$VB1,107:242,108:243,109:$VC1,110:$VD1,111:$VE1,112:$VF1},{10:$Vy1,60:$Vz1,84:$VA1,92:254,104:[1,255],105:$VB1,107:242,108:243,109:$VC1,110:$VD1,111:$VE1,112:$VF1},{105:[1,256]},{10:$Vy1,60:$Vz1,84:$VA1,92:257,105:$VB1,107:242,108:243,109:$VC1,110:$VD1,111:$VE1,112:$VF1},{44:$Vd,47:258,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},o($Vm1,[2,108]),{80:[1,259]},{80:[1,260],98:[1,261]},o($Vm1,[2,116]),o($Vm1,[2,118],{10:[1,262]}),o($Vm1,[2,119]),o($VR,[2,56]),o($Vx1,[2,87]),o($VR,[2,57]),{51:[1,263],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},o($VR,[2,64]),o($VR,[2,59]),o($VR,[2,60]),o($VR,[2,61]),{109:[1,264]},o($VR,[2,63]),o($VR,[2,65]),{66:[1,265],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},o($VR,[2,67]),o($VR,[2,68]),o($VR,[2,70]),o($VR,[2,69]),o($VR,[2,71]),o([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),o($VU,[2,78]),{31:[1,266],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{6:11,7:12,8:$V5,9:$V6,10:$V7,11:$V8,20:17,22:18,23:19,24:20,25:21,26:22,27:$V9,32:[1,267],33:24,34:$Va,36:$Vb,38:$Vc,42:28,43:39,44:$Vd,45:40,47:41,60:$Ve,84:$Vf,85:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs,121:$Vt,122:$Vu,123:$Vv,124:$Vw,125:$Vx},o($VQ,[2,53]),{43:268,44:$Vd,45:40,47:41,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs},o($Vm1,[2,121],{106:$VG1}),o($VH1,[2,130],{108:270,10:$Vy1,60:$Vz1,84:$VA1,105:$VB1,109:$VC1,110:$VD1,111:$VE1,112:$VF1}),o($VI1,[2,132]),o($VI1,[2,134]),o($VI1,[2,135]),o($VI1,[2,136]),o($VI1,[2,137]),o($VI1,[2,138]),o($VI1,[2,139]),o($VI1,[2,140]),o($VI1,[2,141]),o($Vm1,[2,122],{106:$VG1}),{10:[1,271]},o($Vm1,[2,123],{106:$VG1}),{10:[1,272]},o($Vw1,[2,129]),o($Vm1,[2,105],{106:$VG1}),o($Vm1,[2,106],{113:113,44:$Vd,60:$Ve,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,114:$Vq,115:$Vr,116:$Vs}),o($Vm1,[2,110]),o($Vm1,[2,112],{10:[1,273]}),o($Vm1,[2,113]),{98:[1,274]},{51:[1,275]},{62:[1,276]},{66:[1,277]},{8:$VA,9:$VB,11:$VC,21:278},o($Vz,[2,34]),o($VQ,[2,52]),{10:$Vy1,60:$Vz1,84:$VA1,105:$VB1,107:279,108:243,109:$VC1,110:$VD1,111:$VE1,112:$VF1},o($VI1,[2,133]),{14:$VF,44:$VG,60:$VH,89:$VI,101:280,105:$VJ,106:$VK,109:$VL,111:$VM,114:$VN,115:$VO,116:$VP,120:88},{14:$VF,44:$VG,60:$VH,89:$VI,101:281,105:$VJ,106:$VK,109:$VL,111:$VM,114:$VN,115:$VO,116:$VP,120:88},{98:[1,282]},o($Vm1,[2,120]),o($VR,[2,58]),{30:283,67:$Vo1,80:$Vp1,81:$Vq1,82:172,116:$Vr1,117:$Vs1,118:$Vt1},o($VR,[2,66]),o($Vj1,$V4,{5:284}),o($VH1,[2,131],{108:270,10:$Vy1,60:$Vz1,84:$VA1,105:$VB1,109:$VC1,110:$VD1,111:$VE1,112:$VF1}),o($Vm1,[2,126],{120:168,10:[1,285],14:$VF,44:$VG,60:$VH,89:$VI,105:$VJ,106:$VK,109:$VL,111:$VM,114:$VN,115:$VO,116:$VP}),o($Vm1,[2,127],{120:168,10:[1,286],14:$VF,44:$VG,60:$VH,89:$VI,105:$VJ,106:$VK,109:$VL,111:$VM,114:$VN,115:$VO,116:$VP}),o($Vm1,[2,114]),{31:[1,287],67:$Vo1,82:219,116:$Vr1,117:$Vs1,118:$Vt1},{6:11,7:12,8:$V5,9:$V6,10:$V7,11:$V8,20:17,22:18,23:19,24:20,25:21,26:22,27:$V9,32:[1,288],33:24,34:$Va,36:$Vb,38:$Vc,42:28,43:39,44:$Vd,45:40,47:41,60:$Ve,84:$Vf,85:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,102:$Vl,105:$Vm,106:$Vn,109:$Vo,111:$Vp,113:42,114:$Vq,115:$Vr,116:$Vs,121:$Vt,122:$Vu,123:$Vv,124:$Vw,125:$Vx},{10:$Vy1,60:$Vz1,84:$VA1,92:289,105:$VB1,107:242,108:243,109:$VC1,110:$VD1,111:$VE1,112:$VF1},{10:$Vy1,60:$Vz1,84:$VA1,92:290,105:$VB1,107:242,108:243,109:$VC1,110:$VD1,111:$VE1,112:$VF1},o($VR,[2,62]),o($Vz,[2,33]),o($Vm1,[2,124],{106:$VG1}),o($Vm1,[2,125],{106:$VG1})],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin(\"acc_title\");return 34; \nbreak;\ncase 1: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 2: this.begin(\"acc_descr\");return 36; \nbreak;\ncase 3: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 4: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 5: this.popState(); \nbreak;\ncase 6:return \"acc_descr_multiline_value\";\nbreak;\ncase 7:\n // console.log('=> shapeData', yy_.yytext);\n this.pushState(\"shapeData\"); yy_.yytext=\"\"; return 40 \nbreak;\ncase 8:\n // console.log('=> shapeDataStr', yy_.yytext);\n this.pushState(\"shapeDataStr\");\n return 40;\n \nbreak;\ncase 9:\n // console.log('shapeData <==', yy_.yytext);\n this.popState(); return 40\nbreak;\ncase 10:\n // console.log('shapeData', yy_.yytext);\n const re = /\\n\\s*/g;\n yy_.yytext = yy_.yytext.replace(re,\"<br/>\");\n return 40\nbreak;\ncase 11:\n // console.log('shapeData', yy_.yytext);\n return 40;\n \nbreak;\ncase 12:\n // console.log('<== root', yy_.yytext)\n this.popState();\n \nbreak;\ncase 13:this.begin(\"callbackname\");\nbreak;\ncase 14:this.popState();\nbreak;\ncase 15:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 16:return 95;\nbreak;\ncase 17:this.popState();\nbreak;\ncase 18:return 96;\nbreak;\ncase 19: return \"MD_STR\";\nbreak;\ncase 20: this.popState();\nbreak;\ncase 21: this.begin(\"md_string\");\nbreak;\ncase 22: return \"STR\"; \nbreak;\ncase 23:this.popState();\nbreak;\ncase 24:this.pushState(\"string\");\nbreak;\ncase 25:return 84;\nbreak;\ncase 26:return 102;\nbreak;\ncase 27:return 85;\nbreak;\ncase 28:return 104;\nbreak;\ncase 29:return 86;\nbreak;\ncase 30:return 87;\nbreak;\ncase 31:return 97;\nbreak;\ncase 32:this.begin(\"click\");\nbreak;\ncase 33:this.popState();\nbreak;\ncase 34:return 88;\nbreak;\ncase 35:if(yy.lex.firstGraph()){this.begin(\"dir\");} return 12;\nbreak;\ncase 36:if(yy.lex.firstGraph()){this.begin(\"dir\");} return 12;\nbreak;\ncase 37:if(yy.lex.firstGraph()){this.begin(\"dir\");} return 12;\nbreak;\ncase 38:if(yy.lex.firstGraph()){this.begin(\"dir\");} return 12;\nbreak;\ncase 39:return 27;\nbreak;\ncase 40:return 32;\nbreak;\ncase 41:return 98;\nbreak;\ncase 42:return 98;\nbreak;\ncase 43:return 98;\nbreak;\ncase 44:return 98;\nbreak;\ncase 45: this.popState(); return 13; \nbreak;\ncase 46: this.popState(); return 14; \nbreak;\ncase 47: this.popState(); return 14; \nbreak;\ncase 48: this.popState(); return 14; \nbreak;\ncase 49: this.popState(); return 14; \nbreak;\ncase 50: this.popState(); return 14; \nbreak;\ncase 51: this.popState(); return 14; \nbreak;\ncase 52: this.popState(); return 14; \nbreak;\ncase 53: this.popState(); return 14; \nbreak;\ncase 54: this.popState(); return 14; \nbreak;\ncase 55: this.popState(); return 14; \nbreak;\ncase 56:return 121;\nbreak;\ncase 57:return 122;\nbreak;\ncase 58:return 123;\nbreak;\ncase 59:return 124;\nbreak;\ncase 60:return 125;\nbreak;\ncase 61: return 78; \nbreak;\ncase 62:return 105;\nbreak;\ncase 63:return 111;\nbreak;\ncase 64:return 46;\nbreak;\ncase 65:return 60;\nbreak;\ncase 66:return 44;\nbreak;\ncase 67:return 8;\nbreak;\ncase 68:return 106;\nbreak;\ncase 69:return 115;\nbreak;\ncase 70: this.popState(); return 77; \nbreak;\ncase 71: this.pushState(\"edgeText\"); return 75; \nbreak;\ncase 72:return 119;\nbreak;\ncase 73: this.popState(); return 77; \nbreak;\ncase 74: this.pushState(\"thickEdgeText\"); return 75; \nbreak;\ncase 75:return 119;\nbreak;\ncase 76: this.popState(); return 77; \nbreak;\ncase 77: this.pushState(\"dottedEdgeText\"); return 75; \nbreak;\ncase 78:return 119;\nbreak;\ncase 79:return 77;\nbreak;\ncase 80: this.popState(); return 53; \nbreak;\ncase 81:return \"TEXT\"\nbreak;\ncase 82: this.pushState(\"ellipseText\"); return 52; \nbreak;\ncase 83: this.popState(); return 55; \nbreak;\ncase 84: this.pushState(\"text\"); return 54; \nbreak;\ncase 85: this.popState(); return 57; \nbreak;\ncase 86: this.pushState(\"text\"); return 56; \nbreak;\ncase 87: return 58; \nbreak;\ncase 88: this.pushState(\"text\"); return 67; \nbreak;\ncase 89: this.popState(); return 64; \nbreak;\ncase 90: this.pushState(\"text\") ;return 63; \nbreak;\ncase 91: this.popState(); return 49; \nbreak;\ncase 92: this.pushState(\"text\"); return 48; \nbreak;\ncase 93: this.popState(); return 69; \nbreak;\ncase 94: this.popState(); return 71; \nbreak;\ncase 95:return 117;\nbreak;\ncase 96: this.pushState(\"trapText\"); return 68; \nbreak;\ncase 97: this.pushState(\"trapText\"); return 70; \nbreak;\ncase 98:return 118;\nbreak;\ncase 99:return 67;\nbreak;\ncase 100:return 90;\nbreak;\ncase 101:return 'SEP';\nbreak;\ncase 102:return 89;\nbreak;\ncase 103:return 115;\nbreak;\ncase 104:return 111;\nbreak;\ncase 105:return 44;\nbreak;\ncase 106:\n return 109;\n\nbreak;\ncase 107:return 114\nbreak;\ncase 108:return 116;\nbreak;\ncase 109: this.popState(); return 62; \nbreak;\ncase 110: this.pushState(\"text\"); return 62; \nbreak;\ncase 111: this.popState(); return 51; \nbreak;\ncase 112: this.pushState(\"text\"); return 50; \nbreak;\ncase 113: this.popState(); return 31; \nbreak;\ncase 114: this.pushState(\"text\"); return 29; \nbreak;\ncase 115: this.popState(); return 66 \nbreak;\ncase 116: this.pushState(\"text\"); return 65 \nbreak;\ncase 117:return \"TEXT\";\nbreak;\ncase 118:return 'QUOTE';\nbreak;\ncase 119:return 9;\nbreak;\ncase 120:return 10;\nbreak;\ncase 121:return 11;\nbreak;\n}\n},\nrules: [/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:@\\{)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\\\"]+)/,/^(?:[^}^\"]+)/,/^(?:\\})/,/^(?:call[\\s]+)/,/^(?:\\([\\s]*\\))/,/^(?:\\()/,/^(?:[^(]*)/,/^(?:\\))/,/^(?:[^)]*)/,/^(?:[^`\"]+)/,/^(?:[`][\"])/,/^(?:[\"][`])/,/^(?:[^\"]+)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:style\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\b)/,/^(?:class\\b)/,/^(?:href[\\s])/,/^(?:click[\\s]+)/,/^(?:[\\s\\n])/,/^(?:[^\\s\\n]*)/,/^(?:flowchart-elk\\b)/,/^(?:swimlane-beta\\b)/,/^(?:graph\\b)/,/^(?:flowchart\\b)/,/^(?:subgraph\\b)/,/^(?:end\\b\\s*)/,/^(?:_self\\b)/,/^(?:_blank\\b)/,/^(?:_parent\\b)/,/^(?:_top\\b)/,/^(?:(\\r?\\n)*\\s*\\n)/,/^(?:\\s*LR\\b)/,/^(?:\\s*RL\\b)/,/^(?:\\s*TB\\b)/,/^(?:\\s*BT\\b)/,/^(?:\\s*TD\\b)/,/^(?:\\s*BR\\b)/,/^(?:\\s*<)/,/^(?:\\s*>)/,/^(?:\\s*\\^)/,/^(?:\\s*v\\b)/,/^(?:.*direction\\s+TB[^\\n]*)/,/^(?:.*direction\\s+BT[^\\n]*)/,/^(?:.*direction\\s+RL[^\\n]*)/,/^(?:.*direction\\s+LR[^\\n]*)/,/^(?:.*direction\\s+TD[^\\n]*)/,/^(?:[^\\s\\\"]+@(?=[^\\{\\\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\\*)/,/^(?:\\s*[xo<]?--+[-xo>]\\s*)/,/^(?:\\s*[xo<]?--\\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\\s*[xo<]?==+[=xo>]\\s*)/,/^(?:\\s*[xo<]?==\\s*)/,/^(?:[^=]|=(?!))/,/^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/,/^(?:\\s*[xo<]?-\\.\\s*)/,/^(?:[^\\.]|\\.(?!))/,/^(?:\\s*~~[\\~]+\\s*)/,/^(?:[-/\\)][\\)])/,/^(?:[^\\(\\)\\[\\]\\{\\}]|!\\)+)/,/^(?:\\(-)/,/^(?:\\]\\))/,/^(?:\\(\\[)/,/^(?:\\]\\])/,/^(?:\\[\\[)/,/^(?:\\[\\|)/,/^(?:>)/,/^(?:\\)\\])/,/^(?:\\[\\()/,/^(?:\\)\\)\\))/,/^(?:\\(\\(\\()/,/^(?:[\\\\(?=\\])][\\]])/,/^(?:\\/(?=\\])\\])/,/^(?:\\/(?!\\])|\\\\(?!\\])|[^\\\\\\[\\]\\(\\)\\{\\}\\/]+)/,/^(?:\\[\\/)/,/^(?:\\[\\\\)/,/^(?:<)/,/^(?:>)/,/^(?:\\^)/,/^(?:\\\\\\|)/,/^(?:v\\b)/,/^(?:\\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!\"\\#$%&'*+\\.`?\\\\_\\/]|-(?=[^\\>\\-\\.])|(?!))+)/,/^(?:-)/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\|)/,/^(?:\\|)/,/^(?:\\))/,/^(?:\\()/,/^(?:\\])/,/^(?:\\[)/,/^(?:(\\}))/,/^(?:\\{)/,/^(?:[^\\[\\]\\(\\)\\{\\}\\|\\\"]+)/,/^(?:\")/,/^(?:(\\r?\\n)+)/,/^(?:[^\\S\\n\\r]+)/,/^(?:$)/],\nconditions: {\"shapeDataEndBracket\":{\"rules\":[21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"shapeDataStr\":{\"rules\":[9,10,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"shapeData\":{\"rules\":[8,11,12,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"callbackargs\":{\"rules\":[17,18,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"callbackname\":{\"rules\":[14,15,16,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"href\":{\"rules\":[21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"click\":{\"rules\":[21,24,33,34,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"dottedEdgeText\":{\"rules\":[21,24,76,78,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"thickEdgeText\":{\"rules\":[21,24,73,75,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"edgeText\":{\"rules\":[21,24,70,72,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"trapText\":{\"rules\":[21,24,79,82,84,86,90,92,93,94,95,96,97,110,112,114,116],\"inclusive\":false},\"ellipseText\":{\"rules\":[21,24,79,80,81,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"text\":{\"rules\":[21,24,79,82,83,84,85,86,89,90,91,92,96,97,109,110,111,112,113,114,115,116,117],\"inclusive\":false},\"vertex\":{\"rules\":[21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"dir\":{\"rules\":[21,24,45,46,47,48,49,50,51,52,53,54,55,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[5,6,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"acc_descr\":{\"rules\":[3,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"acc_title\":{\"rules\":[1,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"md_string\":{\"rules\":[19,20,21,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"string\":{\"rules\":[21,22,23,24,79,82,84,86,90,92,96,97,110,112,114,116],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,44,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,73,74,76,77,79,82,84,86,87,88,90,92,96,97,98,99,100,101,102,103,104,105,106,107,108,110,112,114,116,118,119,120,121],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\n/** @type {any} */\nconst generatedParser = parser;\nexport default generatedParser;\n", "/** An input or layout error. Locations refer to the original Mermaid source. */\nexport class FlowInkError extends Error {\n /** @param {string} message @param {{code?:string,line?:number,column?:number,cause?:unknown}} [options] */\n constructor(message, options = {}) {\n super(message, { cause: options.cause });\n this.name = 'FlowInkError';\n this.code = options.code ?? 'FLOWINK_ERROR';\n this.line = options.line;\n this.column = options.column;\n }\n}\n", "import { FlowInkError } from '../errors.js';\nimport yaml from 'js-yaml';\n\nconst VALID_SHAPES = new Set(`join rounded state anchor db summary database start document event stop console process text circle rect display prepare squareRect choice note composite rectWithTitle labelRect block_arrow collapsedGroup iconSquare iconCircle icon iconRounded imageSquare kanbanItem proc rectangle roundedRect stadium terminal pill fr-rect subprocess subproc framed-rectangle subroutine cyl cylinder datastore data-store folder directory bucket browser person circ bang cloud diam decision diamond question hex hexagon lean-r lean-right in-out lean_right lean-l lean-left out-in lean_left trap-b priority trapezoid-bottom trapezoid trap-t manual trapezoid-top inv-trapezoid inv_trapezoid dbl-circ double-circle doublecircle notch-rect card notched-rectangle lin-rect lined-rectangle lined-process lin-proc shaded-process sm-circ small-circle stateStart fr-circ framed-circle stateEnd fork forkJoin hourglass collate brace comment brace-l brace-r braces bolt com-link lightning-bolt doc delay half-rounded-rectangle h-cyl das horizontal-cylinder lin-cyl disk lined-cylinder curv-trap curved-trapezoid div-rect div-proc divided-rectangle divided-process tri extract triangle win-pane internal-storage window-pane f-circ junction filled-circle notch-pent loop-limit notched-pentagon flip-tri manual-file flipped-triangle sl-rect manual-input sloped-rectangle docs documents st-doc stacked-document st-rect procs processes stacked-rectangle bow-rect stored-data bow-tie-rectangle cross-circ crossed-circle tag-doc tagged-document tag-rect tagged-rectangle tag-proc tagged-process flag paper-tape odd rect_left_inv_arrow lin-doc lined-document`.split(/\\s+/));\n\nfunction textValue(value) {\n if (value === undefined || value === null) return '';\n return typeof value === 'object' && 'text' in value ? String(value.text) : String(value);\n}\n\nfunction labelType(value) {\n return value?.type === 'markdown' || value?.type === 'string' ? value.type : 'text';\n}\n\nfunction parseShapeData(raw) {\n const metadata = {};\n if (!raw) return metadata;\n const body = String(raw).trim();\n // Shape data is indented relative to the node. YAML block scalars require\n // that common indentation to be removed before parsing.\n const lines = body.split('\\n');\n // The first key is trimmed to column zero. Subsequent keys retain the\n // node's indentation, while block scalar content is further indented.\n const indents = lines.slice(1).filter((line) => line.trim()).map((line) => line.match(/^\\s*/)[0].length);\n const indent = indents.length ? Math.min(...indents) : 0;\n const normalized = lines.map((line, index) => index === 0 ? line : line.slice(Math.min(indent, line.length))).join('\\n');\n try {\n const parsed = yaml.load(normalized.includes('\\n') ? normalized : `{${normalized}}`, { schema: yaml.JSON_SCHEMA });\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) Object.assign(metadata, parsed);\n } catch (error) {\n throw new FlowInkError(error?.message ?? 'Invalid shape data.', { code: 'SHAPE_DATA_ERROR', cause: error });\n }\n metadata.raw = body;\n return metadata;\n}\n\nexport class FlowSemanticDB {\n constructor(source) {\n this.source = source;\n this.direction = 'TB';\n this.vertices = new Map();\n this.edges = [];\n this.classes = new Map();\n this.classTextStyles = new Map();\n this.subGraphs = [];\n this.subGraphLookup = new Map();\n this.tooltips = new Map();\n this.interactions = new Map();\n this.defaultStyles = [];\n this.defaultInterpolate = undefined;\n this.vertexCounter = 0;\n this.firstGraphFlag = true;\n this.lex = { firstGraph: () => this.firstGraph() };\n this.title = undefined;\n this.description = undefined;\n for (const name of [\n 'firstGraph', 'setDirection', 'addVertex', 'addSingleLink', 'addLink', 'destructLink',\n 'addSubGraph', 'addClass', 'setClass', 'updateLink', 'updateLinkInterpolate', 'setTooltip',\n 'setLink', 'setClickEvent', 'setAccTitle', 'setAccDescription',\n ]) this[name] = this[name].bind(this);\n }\n\n firstGraph() {\n if (this.firstGraphFlag) { this.firstGraphFlag = false; return true; }\n return false;\n }\n\n clear() {}\n\n setDirection(direction) {\n const value = String(direction).trim();\n this.direction = value === 'TD' || value.includes('v') ? 'TB' : value.includes('>') ? 'LR' : value.includes('<') ? 'RL' : value.includes('^') ? 'BT' : value;\n }\n\n addVertex(id, textObj, type, styles, classes, dir, props, rawShapeData) {\n if (!id || !String(id).trim()) return;\n id = String(id);\n const shapeData = rawShapeData !== undefined ? parseShapeData(rawShapeData) : undefined;\n const subGraph = this.subGraphLookup.get(id);\n if (subGraph && shapeData) {\n Object.assign(subGraph.metadata, shapeData);\n return;\n }\n const edge = this.edges.find((item) => item.id === id.replace(/^@|@$/g, ''));\n if (edge && rawShapeData !== undefined) {\n // Edge property declarations use the same vertex production in the\n // upstream grammar. Do not expose its temporary vertex as a node.\n const placeholder = this.vertices.get(id);\n if (placeholder && placeholder.label === id && placeholder.shape === 'rect' && !placeholder.styles.length && !placeholder.classes.length) this.vertices.delete(id);\n Object.assign(edge.metadata, shapeData);\n const shape = edge.metadata;\n if (shape.animate !== undefined) edge.animate = Boolean(shape.animate);\n if (shape.animation !== undefined) edge.animation = String(shape.animation);\n if (shape.curve !== undefined) {\n edge.curve = String(shape.curve);\n edge.interpolate = String(shape.curve);\n edge.metadata.interpolate = String(shape.curve);\n }\n return;\n }\n let vertex = this.vertices.get(id);\n if (!vertex) {\n vertex = { id, label: id, labelType: 'text', shape: 'rect', styles: [], classes: [], metadata: {} };\n this.vertices.set(id, vertex);\n }\n this.vertexCounter += 1;\n if (textObj !== undefined) {\n vertex.label = textValue(textObj).trim().replace(/^\"|\"$/g, '');\n vertex.labelType = labelType(textObj);\n }\n if (type) vertex.shape = type;\n if (Array.isArray(styles)) vertex.styles.push(...styles);\n if (Array.isArray(classes)) vertex.classes.push(...classes);\n if (dir) vertex.direction = dir;\n if (props && typeof props === 'object') Object.assign(vertex.metadata, props);\n if (rawShapeData !== undefined) Object.assign(vertex.metadata, shapeData);\n if (rawShapeData !== undefined) {\n const shapeData = vertex.metadata;\n if (shapeData.shape !== undefined) {\n const shape = String(shapeData.shape);\n if (shape !== shape.toLowerCase() || shape.includes('_') || !VALID_SHAPES.has(shape)) {\n throw new FlowInkError(`No such shape: ${shape}.`, { code: 'INVALID_SHAPE' });\n }\n vertex.shape = shape;\n }\n if (shapeData.label !== undefined) {\n vertex.label = String(shapeData.label);\n vertex.labelType = shapeData.labelType === undefined ? 'markdown' : labelType({ type: shapeData.labelType });\n } else if (shapeData.labelType !== undefined) vertex.labelType = labelType({ type: shapeData.labelType });\n else if ((shapeData.icon || shapeData.img) && vertex.label === id) vertex.label = '';\n }\n }\n\n addSingleLink(start, end, type = {}, id) {\n const cleanId = id ? String(id).replace(/^@|@$/g, '') : undefined;\n const existingUserId = cleanId && this.edges.find((item) => item.id === cleanId);\n if (existingUserId && !existingUserId.isUserDefinedId) {\n let replacement = `L${this.edges.length}`;\n while (this.edges.some((item) => item.id === replacement) || replacement === cleanId) replacement = `L${Number(replacement.slice(1)) + 1}`;\n existingUserId.id = replacement;\n }\n let generatedId = `L${this.edges.length}`;\n while (this.edges.some((item) => item.id === generatedId) || generatedId === cleanId) {\n generatedId = `L${Number(generatedId.slice(1)) + 1}`;\n }\n const useUserId = Boolean(cleanId && !this.edges.some((item) => item.id === cleanId));\n const edge = {\n id: useUserId ? cleanId : generatedId,\n source: String(start), target: String(end), label: textValue(type.text), labelType: labelType(type.text),\n arrowStart: 'none', arrowEnd: 'none', stroke: type.stroke ?? 'normal', length: Math.min(type.length ?? 1, 10),\n styles: [], classes: [], metadata: this.defaultInterpolate === undefined ? {} : { interpolate: this.defaultInterpolate },\n };\n if (this.defaultInterpolate !== undefined) edge.interpolate = this.defaultInterpolate;\n if (useUserId) edge.isUserDefinedId = true;\n if (useUserId) edge.metadata.isUserDefinedId = true;\n const map = {\n arrow_open: ['none', 'none'], arrow_point: ['none', 'point'], arrow_circle: ['none', 'circle'], arrow_cross: ['none', 'cross'],\n double_arrow_point: ['point', 'point'], double_arrow_circle: ['circle', 'circle'], double_arrow_cross: ['cross', 'cross'],\n };\n [edge.arrowStart, edge.arrowEnd] = map[type.type] ?? ['none', 'none'];\n this.edges.push(edge);\n }\n\n addLink(starts, ends, linkData = {}) {\n const id = linkData?.id ? String(linkData.id).replace(/^@|@$/g, '') : undefined;\n for (const start of starts) for (const end of ends) this.addSingleLink(start, end, linkData, start === starts.at(-1) && end === ends[0] ? id : undefined);\n }\n\n destructLink(value, startValue) {\n const end = String(value).trim();\n let type = end.endsWith('>') ? 'arrow_point' : end.endsWith('o') ? 'arrow_circle' : end.endsWith('x') ? 'arrow_cross' : 'arrow_open';\n let line = end.slice(0, -1);\n let stroke = 'normal';\n const startMarker = line[0];\n const endMarker = end.at(-1);\n if (!startValue && ((startMarker === '<' && endMarker === '>') || (startMarker === 'o' && endMarker === 'o') || (startMarker === 'x' && endMarker === 'x'))) {\n type = `double_${type}`;\n line = line.slice(1);\n }\n stroke = line.startsWith('=') ? 'thick' : line.startsWith('~') ? 'invisible' : line.includes('.') ? 'dotted' : 'normal';\n let length = line.length - 1;\n if (stroke === 'dotted') length = (line.match(/\\./g) || []).length;\n if (startValue) {\n const start = String(startValue).trim();\n const startType = start[0] === '<' ? 'arrow_point' : start[0] === 'o' ? 'arrow_circle' : start[0] === 'x' ? 'arrow_cross' : 'arrow_open';\n if (startType !== 'arrow_open' && startType !== type) return { type: 'INVALID', stroke: 'INVALID' };\n if (startType !== 'arrow_open') type = `double_${type.replace('arrow_', 'arrow_')}`;\n if (type === 'double_arrow_arrow_point') type = 'double_arrow_point';\n }\n return { type, stroke, length };\n }\n\n addSubGraph(idObj, list, titleObj) {\n const title = textValue(titleObj ?? idObj).trim();\n const sameText = idObj && titleObj && idObj === titleObj;\n const id = idObj?.text && (!sameText || !/\\s/.test(idObj.text)) ? idObj.text.trim() : `subGraph${this.subGraphs.length}`;\n const flat = (list ?? []).flat(Infinity);\n const directions = flat.filter((item) => item?.stmt === 'dir');\n const direction = directions.at(-1)?.value;\n const nodeIds = [...new Set(flat.flatMap((item) => {\n if (typeof item === 'string' && item.trim()) return [item];\n if (item && typeof item === 'object' && typeof item.id === 'string') return [item.id];\n return [];\n }))];\n const occupied = new Set(this.subGraphs.flatMap((group) => group.nodeIds));\n const uniqueNodeIds = nodeIds.filter((nodeId) => !occupied.has(nodeId));\n const subgraph = { id, label: title, nodeIds: uniqueNodeIds, ...(direction ? { direction: direction === 'TD' ? 'TB' : direction } : {}), styles: [], classes: [], metadata: { labelType: labelType(titleObj ?? idObj) } };\n this.subGraphs.push(subgraph); this.subGraphLookup.set(id, subgraph);\n for (const nodeId of nodeIds) {\n const node = this.vertices.get(nodeId);\n if (node && !node.parentId) node.parentId = id;\n const child = this.subGraphLookup.get(nodeId);\n if (child && !child.parentId) child.parentId = id;\n }\n return subgraph;\n }\n\n addClass(ids, styles) {\n const values = String(styles?.join?.() ?? styles ?? '')\n .replace(/\\\\,/g, '\u00A7\u00A7\u00A7').replace(/,/g, ';').replace(/\u00A7\u00A7\u00A7/g, ',')\n .split(';').map((style) => style.trim()).filter(Boolean);\n for (const id of String(ids).split(',')) {\n this.classes.set(id, [...(this.classes.get(id) ?? []), ...values]);\n const textStyles = values.filter((style) => /color/.test(style)).map((style) => style.replace('fill', 'bgFill'));\n if (textStyles.length) this.classTextStyles.set(id, [...(this.classTextStyles.get(id) ?? []), ...textStyles]);\n }\n }\n\n setClass(ids, className) {\n for (const id of String(ids).split(',')) {\n const node = this.vertices.get(id); if (node) node.classes.push(String(className));\n const edge = this.edges.find((item) => item.id === id); if (edge) edge.classes.push(String(className));\n const group = this.subGraphLookup.get(id); if (group) group.classes.push(String(className));\n }\n }\n\n updateLink(positions, styles) {\n for (const position of positions) {\n if (position === 'default') this.defaultStyles = styles.slice();\n else if (this.edges[position]) {\n this.edges[position].styles = styles.slice();\n if (styles.length && !styles.some((style) => String(style).startsWith('fill'))) this.edges[position].styles.push('fill:none');\n } else throw new FlowInkError(`The link index ${position} is out of bounds.`, { code: 'INVALID_LINK_INDEX' });\n }\n }\n\n updateLinkInterpolate(positions, value) {\n const interpolate = String(value);\n for (const position of positions) {\n if (position === 'default') {\n this.defaultInterpolate = interpolate;\n } else if (this.edges[position]) {\n this.edges[position].metadata.interpolate = interpolate;\n this.edges[position].interpolate = interpolate;\n }\n else throw new FlowInkError(`The link index ${position} is out of bounds.`, { code: 'INVALID_LINK_INDEX' });\n }\n }\n\n setTooltip(ids, tooltip) { for (const id of String(ids).split(',')) this.tooltips.set(id, String(tooltip)); }\n setLink(ids, link, target) {\n for (const id of String(ids).split(',')) {\n if (!this.vertices.has(id) && !this.edges.some((edge) => edge.id === id) && !this.subGraphLookup.has(id)) continue;\n this.interactions.set(id, { href: String(link), target });\n this.setClass(id, 'clickable');\n }\n }\n setClickEvent(ids, callback, args) {\n for (const id of String(ids).split(',')) {\n if (!this.vertices.has(id) && !this.edges.some((edge) => edge.id === id) && !this.subGraphLookup.has(id)) continue;\n this.interactions.set(id, { callback: String(callback), args: args ? String(args) : undefined });\n this.setClass(id, 'clickable');\n }\n }\n setAccTitle(value) { this.title = String(value); }\n setAccDescription(value) { this.description = String(value); }\n\n finalize() {\n for (const group of this.subGraphs) {\n const synthetic = this.vertices.get(group.id);\n if (synthetic) {\n group.styles.push(...synthetic.styles);\n group.classes.push(...synthetic.classes);\n Object.assign(group.metadata, synthetic.metadata);\n }\n if (this.tooltips.has(group.id)) group.metadata.tooltip = this.tooltips.get(group.id);\n if (this.interactions.has(group.id)) group.metadata.interaction = this.interactions.get(group.id);\n }\n for (const node of this.vertices.values()) {\n for (const className of node.classes) node.styles.push(...(this.classes.get(className) ?? []));\n if (this.tooltips.has(node.id)) node.metadata.tooltip = this.tooltips.get(node.id);\n if (this.interactions.has(node.id)) node.metadata.interaction = this.interactions.get(node.id);\n }\n for (const edge of this.edges) {\n if (edge.interpolate === undefined && this.defaultInterpolate !== undefined) {\n edge.interpolate = this.defaultInterpolate;\n edge.metadata.interpolate = this.defaultInterpolate;\n }\n edge.styles = [...this.defaultStyles, ...edge.styles];\n for (const className of edge.classes) edge.styles.push(...(this.classes.get(className) ?? []));\n if (this.interactions.has(edge.id)) edge.metadata.interaction = this.interactions.get(edge.id);\n }\n const metadata = {};\n if (this.title !== undefined) metadata.title = this.title;\n if (this.description !== undefined) metadata.description = this.description;\n if (this.title !== undefined) metadata.accessibilityTitle = this.title;\n if (this.description !== undefined) metadata.accessibilityDescription = this.description;\n if (this.defaultStyles.length) metadata.defaultStyle = [...this.defaultStyles];\n if (this.defaultInterpolate !== undefined) metadata.defaultInterpolate = this.defaultInterpolate;\n if (this.classTextStyles.size) metadata.classTextStyles = Object.fromEntries(this.classTextStyles);\n return { source: this.source, direction: this.direction, nodes: [...this.vertices.values()], edges: this.edges, subgraphs: this.subGraphs, classes: Object.fromEntries(this.classes), metadata };\n }\n}\n\nexport function parserError(error, source) {\n const line = error?.hash?.loc?.first_line ?? error?.lineNumber;\n const firstColumn = error?.hash?.loc?.first_column;\n const column = firstColumn === undefined ? undefined : firstColumn + 1;\n return new FlowInkError(error?.message ?? 'Invalid Mermaid flowchart', { code: 'PARSE_ERROR', line, column, cause: error });\n}\n", "import yaml from 'js-yaml';\nimport { FlowInkError } from '../errors.js';\n\nconst FRONT_MATTER = /^([^\\S\\n\\r]*)-{3}\\s*[\\n\\r](.*?)[\\n\\r]\\1-{3}\\s*[\\n\\r]+/s;\n\n/** Keep Mermaid's parser-facing cleanup small and source-position preserving. */\nfunction cleanupText(value) {\n return value.replace(/\\r\\n?/g, '\\n').replace(\n /<(\\w+)([^>]*)>/g,\n (match, tag, attributes) => `<${tag}${attributes.replace(/=\"([^\"]*)\"/g, \"='$1'\")}>`,\n );\n}\n\nfunction sourceLineAt(source, index) {\n return source.slice(0, index).split(/\\r\\n?|\\n/).length;\n}\n\nexport function preprocess(source) {\n const original = String(source);\n let text = cleanupText(original.replace(/^\\uFEFF/, ''));\n let frontmatter;\n let lineOffset = 0;\n const match = text.match(FRONT_MATTER);\n if (match) {\n const prefix = match[0];\n lineOffset = prefix.split(/\\r?\\n/).length - (prefix.endsWith('\\n') ? 1 : 0);\n try {\n frontmatter = yaml.load(match[2], { schema: yaml.JSON_SCHEMA }) ?? {};\n if (!frontmatter || typeof frontmatter !== 'object' || Array.isArray(frontmatter)) frontmatter = {};\n } catch (error) {\n const mark = error?.mark;\n throw new FlowInkError(error?.message ?? 'Invalid Mermaid frontmatter', {\n code: 'FRONTMATTER_ERROR',\n line: sourceLineAt(text, match.index + match[0].indexOf(match[2])) + (mark?.line ?? 0),\n column: mark ? mark.column + 1 : undefined,\n cause: error,\n });\n }\n text = text.slice(prefix.length);\n }\n const directives = [];\n text = text.replace(/^\\s*%%\\{([\\s\\S]*?)\\}%%\\s*(?:\\r?\\n|$)/gm, (match, value) => {\n directives.push(value.trim());\n // Keep the removed directive's newline(s) for Jison source locations.\n return match.replace(/[^\\n]/g, '');\n });\n // Inline %% is syntax in the flow grammar and remains invalid there. Only\n // full-line comments are removed by Mermaid's flow preprocessor.\n text = text.replace(/^[^\\S\\n]*%%(?!\\{)[^\\n]*/gm, '');\n const metadata = {};\n if (frontmatter) {\n metadata.frontmatter = frontmatter;\n if (frontmatter.title !== undefined) metadata.title = String(frontmatter.title);\n if (frontmatter.config !== undefined) metadata.config = frontmatter.config;\n if (frontmatter.displayMode !== undefined) metadata.displayMode = String(frontmatter.displayMode);\n }\n if (directives.length) metadata.directives = directives;\n return { text, metadata, lineOffset };\n}\n", "import parser from './parser/generated.js';\nimport { FlowInkError } from './errors.js';\nimport { FlowSemanticDB, parserError } from './parser/semantic.js';\nimport { preprocess } from './parser/preprocess.js';\n\n/** @param {string} source @returns {import('./types.js').FlowGraph} */\nexport function parse(source) {\n if (typeof source !== 'string') throw new FlowInkError('Flowchart source must be a string', { code: 'INVALID_INPUT' });\n const db = new FlowSemanticDB(source);\n const processed = preprocess(source);\n const localParser = new parser.Parser();\n try {\n localParser.yy = db;\n // Mermaid's flow parser accepts shape blocks only when the closing brace\n // is immediately followed by a statement separator.\n localParser.parse(`${processed.text.replace(/}[^\\S\\n]*(?=\\n|$)/g, '}')}\\n`);\n const graph = db.finalize();\n // Mermaid's parser canonicalises HTML attribute quoting in labels.\n const canonicaliseLabel = (value) => String(value).replace(/(<[^>]+?)='([^']*)'/g, '$1=\"$2\"');\n for (const node of graph.nodes) node.label = canonicaliseLabel(node.label);\n for (const edge of graph.edges) edge.label = canonicaliseLabel(edge.label);\n Object.assign(graph.metadata, processed.metadata);\n return graph;\n } catch (error) {\n if (error instanceof FlowInkError) throw error;\n const wrapped = parserError(error, source);\n if (wrapped.line !== undefined) wrapped.line += processed.lineOffset;\n throw wrapped;\n }\n}\n\nexport default parse;\n", "// The bundled entry has no runtime dependency on the optional `web-worker`\n// package, so it works unchanged in both Node and browser consumers.\nimport ELK from 'elkjs/lib/elk.bundled.js';\nimport { FlowInkError } from './errors.js';\nimport { prepareNode, labelLines, displayWidth } from './text.js';\nimport { placeLabels } from './place-labels.js';\n\n/** @typedef {import('./types.js').FlowGraph} FlowGraph */\n/** @typedef {import('./types.js').LayoutGraph} LayoutGraph */\n\nconst elk = new ELK();\n\nconst DIRECTIONS = Object.freeze({ TB: 'DOWN', BT: 'UP', LR: 'RIGHT', RL: 'LEFT' });\n\n/**\n * Lay out a parsed flow graph on an integer character grid.\n *\n * ELK does the global compound graph layout and orthogonal routing. The\n * conversion at the end deliberately keeps every edge (including invisible\n * edges) in the result; the rasterizer decides which strokes to draw.\n *\n * @param {FlowGraph} graph\n * @returns {Promise<LayoutGraph>}\n */\nexport async function layout(graph) {\n const context = makeContext(graph);\n let laidOut;\n try {\n laidOut = await elk.layout(toElkGraph(context));\n } catch (cause) {\n throw new FlowInkError(`ELK could not lay out the flowchart: ${cause instanceof Error ? cause.message : String(cause)}`, {\n code: 'LAYOUT_ERROR',\n cause,\n });\n }\n const result = fromElkGraph(context, laidOut);\n if (needsWireClearance(context.graph, result)) expandGrid(result);\n return placeLabels(result);\n}\n\nfunction needsWireClearance(graph, layoutGraph) {\n const pairs = new Set();\n const reverse = new Set();\n for (const edge of graph.edges) {\n const pair = pairKey(edge.source, edge.target);\n if (pairs.has(pair) || reverse.has(pairKey(edge.target, edge.source))) return true;\n pairs.add(pair);\n reverse.add(pair);\n }\n const segments = layoutGraph.edges.flatMap((edge) => edge.points.slice(1).map((b, index) => ({\n id: edge.id, a: edge.points[index], b, horizontal: edge.points[index].y === b.y,\n })));\n for (let i = 0; i < segments.length; i += 1) for (let j = i + 1; j < segments.length; j += 1) {\n const a = segments[i]; const b = segments[j];\n if (a.id === b.id || a.horizontal !== b.horizontal) continue;\n const fixed = a.horizontal ? 'y' : 'x';\n const varying = a.horizontal ? 'x' : 'y';\n const distance = Math.abs(a.a[fixed] - b.a[fixed]);\n const overlap = Math.min(Math.max(a.a[varying], a.b[varying]), Math.max(b.a[varying], b.b[varying]))\n - Math.max(Math.min(a.a[varying], a.b[varying]), Math.min(b.a[varying], b.b[varying]));\n if (distance === 1 && overlap >= 1) return true;\n }\n return false;\n}\n\nfunction expandGrid(layoutGraph) {\n for (const box of layoutGraph.boxes) {\n box.x *= 2;\n box.y *= 2;\n box.width = Math.max(1, (box.width - 1) * 2 + 1);\n box.height = Math.max(1, (box.height - 1) * 2 + 1);\n }\n for (const edge of layoutGraph.edges) {\n for (const point of edge.points) { point.x *= 2; point.y *= 2; }\n if (edge.label) {\n edge.label.x *= 2;\n edge.label.y *= 2;\n edge.label.width = Math.max(1, (edge.label.width - 1) * 2 + 1);\n edge.label.height = Math.max(1, (edge.label.height - 1) * 2 + 1);\n }\n }\n layoutGraph.width = Math.max(1, layoutGraph.width * 2);\n layoutGraph.height = Math.max(1, layoutGraph.height * 2);\n}\n\nfunction makeContext(graph) {\n if (!graph || typeof graph !== 'object') invalid('A FlowGraph object is required.');\n if (!Array.isArray(graph.nodes) || !Array.isArray(graph.edges) || !Array.isArray(graph.subgraphs)) {\n invalid('FlowGraph must contain nodes, edges, and subgraphs arrays.');\n }\n if (!DIRECTIONS[graph.direction]) invalid(`Unsupported flow direction: ${String(graph.direction)}.`);\n\n const subgraphs = new Map();\n // A subgraph used as an edge endpoint is sometimes also materialized as a\n // synthetic node by Mermaid's semantic DB. The subgraph is the canonical\n // element and must not be sent to ELK twice with the same id.\n for (const subgraph of graph.subgraphs) {\n requireId(subgraph, 'subgraph');\n if (subgraphs.has(subgraph.id)) invalid(`Duplicate graph element id: ${subgraph.id}.`);\n subgraphs.set(subgraph.id, subgraph);\n }\n const nodes = new Map();\n for (const node of graph.nodes) {\n requireId(node, 'node');\n if (subgraphs.has(node.id)) continue;\n if (nodes.has(node.id)) invalid(`Duplicate graph element id: ${node.id}.`);\n nodes.set(node.id, node);\n }\n\n const parent = new Map();\n for (const node of nodes.values()) {\n if (node.parentId !== undefined && !subgraphs.has(node.parentId)) {\n invalid(`Node ${node.id} refers to missing subgraph ${node.parentId}.`);\n }\n if (node.parentId !== undefined) parent.set(node.id, node.parentId);\n }\n for (const subgraph of subgraphs.values()) {\n if (subgraph.parentId !== undefined && !subgraphs.has(subgraph.parentId)) {\n invalid(`Subgraph ${subgraph.id} refers to missing parent ${subgraph.parentId}.`);\n }\n if (subgraph.parentId !== undefined) parent.set(subgraph.id, subgraph.parentId);\n for (const childId of subgraph.nodeIds ?? []) {\n if (!nodes.has(childId) && !subgraphs.has(childId)) invalid(`Subgraph ${subgraph.id} refers to missing child ${childId}.`);\n const previous = parent.get(childId);\n if (previous !== undefined && previous !== subgraph.id) {\n invalid(`Graph element ${childId} has conflicting subgraph parents.`);\n }\n parent.set(childId, subgraph.id);\n }\n }\n\n // Detect malformed containment before handing it to ELK. A cycle here\n // otherwise tends to produce an opaque ELK exception.\n for (const id of [...nodes.keys(), ...subgraphs.keys()]) {\n const seen = new Set([id]);\n let current = parent.get(id);\n while (current !== undefined) {\n if (seen.has(current)) invalid(`Cyclic subgraph containment involving ${id}.`);\n seen.add(current);\n current = parent.get(current);\n }\n }\n\n for (const edge of graph.edges) {\n requireId(edge, 'edge');\n if (!nodes.has(edge.source) && !subgraphs.has(edge.source)) invalid(`Edge ${edge.id} has missing source ${edge.source}.`);\n if (!nodes.has(edge.target) && !subgraphs.has(edge.target)) invalid(`Edge ${edge.id} has missing target ${edge.target}.`);\n }\n\n const children = new Map();\n const order = new Map();\n const put = (id, index) => {\n const p = parent.get(id);\n const key = p ?? null;\n if (!children.has(key)) children.set(key, []);\n if (!children.get(key).includes(id)) children.get(key).push(id);\n order.set(id, index);\n };\n // There is no shared source order between FlowNode and FlowSubgraph, so the\n // two arrays are used as the deterministic model order and ties use id.\n graph.nodes.forEach((n, i) => put(n.id, i));\n graph.subgraphs.forEach((s, i) => put(s.id, graph.nodes.length + i));\n for (const list of children.values()) list.sort((a, b) => order.get(a) - order.get(b) || a.localeCompare(b));\n\n const element = new Map([...nodes, ...subgraphs]);\n const elkIds = new Map();\n let nodeIndex = 0; let groupIndex = 0;\n for (const id of nodes.keys()) elkIds.set(id, `n${nodeIndex++}`);\n for (const id of subgraphs.keys()) elkIds.set(id, `g${groupIndex++}`);\n const edgeElkIds = new Map(graph.edges.map((edge, index) => [edge.id, `e${index}`]));\n const dimensions = new Map();\n for (const node of nodes.values()) {\n const prepared = prepareNode(node);\n const lines = Array.isArray(prepared.lines) ? prepared.lines.map(String) : [String(node.label ?? node.id)];\n dimensions.set(node.id, {\n lines,\n shape: prepared.shape ?? node.shape ?? 'rect',\n width: positiveSize(prepared.width, maxWidth(lines, node.label)),\n height: positiveSize(prepared.height, Math.max(3, lines.length + 2)),\n });\n }\n for (const subgraph of subgraphs.values()) {\n const text = String(subgraph.label ?? subgraph.id);\n const lines = labelLines(text, subgraph.metadata?.labelType ?? 'text').map(String);\n dimensions.set(subgraph.id, {\n lines,\n shape: 'subgraph',\n width: Math.max(3, maxWidth(lines, text) + 2),\n height: Math.max(3, lines.length + 2),\n });\n }\n\n // ELK may assign several incident edges to the same fractional port on a\n // small box. Reserve enough character cells before snapping to the grid so\n // every arrow can receive a distinct adjacent cell.\n const incident = new Map();\n for (const edge of graph.edges) {\n incident.set(edge.source, (incident.get(edge.source) ?? 0) + 1);\n incident.set(edge.target, (incident.get(edge.target) ?? 0) + 1);\n }\n for (const [id, count] of incident) {\n const dim = dimensions.get(id);\n if (!dim) continue;\n const direction = contextDirection(graph, parent, subgraphs, id);\n if (direction === 'LR' || direction === 'RL') dim.height = Math.max(dim.height, count * 2 + 1);\n else dim.width = Math.max(dim.width, count * 2 + 1);\n }\n\n return { graph, nodes, subgraphs, element, parent, children, dimensions, order, elkIds, edgeElkIds };\n}\n\nfunction contextDirection(graph, parent, subgraphs, id) {\n let current = id;\n while (current !== undefined) {\n const direction = subgraphs.get(current)?.direction;\n if (direction) return direction;\n current = parent.get(current);\n }\n return graph.direction;\n}\n\nfunction toElkGraph(context) {\n const { graph } = context;\n const root = {\n id: 'r0',\n layoutOptions: commonLayoutOptions(DIRECTIONS[graph.direction]),\n children: containerChildren(context, null),\n edges: containerEdges(context, null),\n };\n return root;\n}\n\nfunction containerChildren(context, containerId) {\n const ids = context.children.get(containerId) ?? [];\n return ids.map((id) => {\n const dim = context.dimensions.get(id);\n if (context.subgraphs.has(id)) {\n const subgraph = context.subgraphs.get(id);\n const children = containerChildren(context, id);\n const result = {\n id: context.elkIds.get(id),\n labels: [{ id: `l${context.elkIds.get(id)}`, text: subgraph.label ?? id, width: dim.width - 2, height: Math.max(1, dim.lines.length) }],\n layoutOptions: commonLayoutOptions(subgraph.direction ? DIRECTIONS[subgraph.direction] : undefined, true, !hasExternalConnection(context, id)),\n children,\n edges: containerEdges(context, id),\n };\n if (children.length === 0) {\n result.width = elkSize(dim.width);\n result.height = elkSize(dim.height);\n }\n if (!result.layoutOptions['elk.direction']) delete result.layoutOptions['elk.direction'];\n return result;\n }\n return { id: context.elkIds.get(id), width: elkSize(dim.width), height: elkSize(dim.height), labels: [] };\n });\n}\n\nfunction commonLayoutOptions(direction, nested = false, separateChildren = false) {\n const options = {\n 'elk.algorithm': 'layered',\n ...(direction ? { 'elk.direction': direction } : {}),\n 'elk.edgeRouting': 'ORTHOGONAL',\n 'elk.hierarchyHandling': separateChildren ? 'SEPARATE_CHILDREN' : 'INCLUDE_CHILDREN',\n 'elk.json.shapeCoords': 'ROOT',\n 'elk.json.edgeCoords': 'ROOT',\n ...(nested ? {} : { 'elk.layered.considerModelOrder.strategy': 'NODES_AND_EDGES' }),\n 'elk.layered.considerModelOrder.portModelOrder': 'true',\n 'elk.layered.mergeEdges': 'false',\n 'elk.layered.mergeHierarchyEdges': 'false',\n 'elk.spacing.nodeNode': '2',\n 'elk.layered.spacing.nodeNodeBetweenLayers': '3',\n 'elk.layered.spacing.edgeNodeBetweenLayers': '2',\n 'elk.spacing.edgeEdge': '2',\n 'elk.spacing.edgeNode': '2',\n 'elk.spacing.nodeSelfLoop': '2',\n 'elk.padding': '[top=2,left=2,bottom=2,right=2]',\n };\n return options;\n}\n\nfunction hasExternalConnection(context, subgraphId) {\n return context.graph.edges.some((edge) => {\n // A group endpoint itself can still be laid out locally. A connection\n // involving one of its children forces the compound graph to stay in the\n // parent's hierarchy so ELK can resolve the cross-level edge.\n const sourceInside = isDescendant(context, edge.source, subgraphId);\n const targetInside = isDescendant(context, edge.target, subgraphId);\n return sourceInside !== targetInside;\n });\n}\n\nfunction isDescendant(context, id, ancestor) {\n let current = context.parent.get(id);\n while (current !== undefined) {\n if (current === ancestor) return true;\n current = context.parent.get(current);\n }\n return false;\n}\n\nfunction containerEdges(context, containerId) {\n return context.graph.edges\n .filter((edge) => lowestCommonContainer(context, edge.source, edge.target) === containerId)\n .map((edge) => {\n const dim = context.dimensions.get(edge.id);\n const result = {\n id: context.edgeElkIds.get(edge.id),\n sources: [context.elkIds.get(edge.source)],\n targets: [context.elkIds.get(edge.target)],\n };\n if (edge.label) {\n const lines = labelLines(edge.label, edge.labelType).map(String);\n result.labels = [{ id: `l${context.edgeElkIds.get(edge.id)}`, text: lines.join('\\n'), width: Math.max(1, maxWidth(lines, edge.label)), height: Math.max(1, lines.length) }];\n }\n return result;\n });\n}\n\nfunction lowestCommonContainer(context, source, target) {\n // A self-loop is contained by the endpoint's parent graph. Returning the\n // endpoint itself would leave the edge unreachable for a leaf node and\n // would place a compound self-loop in a non-existent child graph.\n if (source === target) return context.parent.get(source) ?? null;\n const ancestors = new Set();\n let current = source;\n while (current !== undefined) {\n ancestors.add(current);\n current = context.parent.get(current);\n }\n ancestors.add(null);\n current = target;\n while (current !== undefined && !ancestors.has(current)) current = context.parent.get(current);\n const common = ancestors.has(current) ? current : null;\n // Edges are stored in graphs, while node ids are elements of those graphs.\n // If the LCA is a leaf node (only possible for an ancestor endpoint), use\n // its parent graph.\n if (common !== null && !context.subgraphs.has(common)) return context.parent.get(common) ?? null;\n return common;\n}\n\nfunction fromElkGraph(context, result) {\n const internalElements = new Map();\n const internalFloatBoxes = new Map();\n walkOutput(result, internalElements, internalFloatBoxes, true);\n const outputElements = new Map();\n const floatBoxes = new Map();\n for (const [publicId, internalId] of context.elkIds) {\n const element = internalElements.get(internalId);\n if (element) outputElements.set(publicId, element);\n const float = internalFloatBoxes.get(internalId);\n if (float) floatBoxes.set(publicId, float);\n }\n const boxes = [];\n for (const [id, element] of context.element) {\n const laid = outputElements.get(id);\n if (!laid || !Number.isFinite(laid.x) || !Number.isFinite(laid.y)) {\n invalid(`ELK returned no position for ${id}.`, 'LAYOUT_MISSING_BOX');\n }\n const dim = context.dimensions.get(id);\n const x = Math.floor(laid.x);\n const y = Math.floor(laid.y);\n // ELK coordinates describe the interval between character centers. A\n // cell box with N border cells therefore has an ELK extent of N - 1;\n // convert the resulting extent back to inclusive cell dimensions here.\n const width = Math.max(dim.width, Math.ceil(laid.x + (laid.width ?? elkSize(dim.width))) - x + 1);\n const height = Math.max(dim.height, Math.ceil(laid.y + (laid.height ?? elkSize(dim.height))) - y + 1);\n boxes.push({ id, kind: context.subgraphs.has(id) ? 'subgraph' : 'node', x, y, width, height, lines: dim.lines, shape: dim.shape, ...(context.parent.has(id) ? { parentId: context.parent.get(id) } : {}) });\n }\n const boxById = new Map(boxes.map((box) => [box.id, box]));\n context.__boxById = boxById;\n const edgeOutputs = new Map();\n const internalEdges = new Map();\n walkEdges(result, internalEdges);\n for (const [publicId, internalId] of context.edgeElkIds) {\n const edge = internalEdges.get(internalId);\n if (edge) edgeOutputs.set(publicId, edge);\n }\n const occupied = new Map();\n const placedLabels = [];\n const routes = new Map();\n const endpointCounts = new Map();\n for (const item of context.graph.edges) {\n endpointCounts.set(item.source, (endpointCounts.get(item.source) ?? 0) + 1);\n endpointCounts.set(item.target, (endpointCounts.get(item.target) ?? 0) + 1);\n }\n const endpointRanks = new Map();\n for (const sourceEdge of context.graph.edges) {\n const output = edgeOutputs.get(sourceEdge.id);\n if (!output || !Array.isArray(output.sections) || output.sections.length === 0) {\n invalid(`ELK returned no route for edge ${sourceEdge.id}.`, 'LAYOUT_MISSING_EDGE');\n }\n const sourceBox = boxById.get(sourceEdge.source);\n const targetBox = boxById.get(sourceEdge.target);\n const sourceRank = endpointRanks.get(sourceEdge.source) ?? 0;\n const targetRank = endpointRanks.get(sourceEdge.target) ?? 0;\n endpointRanks.set(sourceEdge.source, sourceRank + 1);\n endpointRanks.set(sourceEdge.target, targetRank + 1);\n const sourceOffset = 2 * (sourceRank - Math.floor((endpointCounts.get(sourceEdge.source) ?? 1) / 2));\n const targetOffset = 2 * (targetRank - Math.floor((endpointCounts.get(sourceEdge.target) ?? 1) / 2));\n const route = routePoints(output, sourceBox, targetBox, floatBoxes, context, occupied, { sourceOffset, targetOffset }, sourceEdge.source === sourceEdge.target ? { rank: targetRank, count: endpointCounts.get(sourceEdge.target) ?? 1 } : undefined, sourceEdge.arrowStart, sourceEdge.arrowEnd);\n if (route.length < 2) invalid(`ELK returned an empty route for edge ${sourceEdge.id}.`, 'LAYOUT_EMPTY_EDGE');\n routes.set(sourceEdge.id, route);\n if (sourceEdge.stroke !== 'invisible') addRouteToOccupied(occupied, route, sourceEdge, boxById);\n }\n const edges = [];\n for (const sourceEdge of context.graph.edges) {\n const output = edgeOutputs.get(sourceEdge.id);\n const sourceBox = boxById.get(sourceEdge.source);\n const route = routes.get(sourceEdge.id);\n const label = sourceEdge.label ? edgeLabel(output, sourceEdge, route, sourceBox, boxById, placedLabels, routes) : undefined;\n if (label) placedLabels.push({ ...label, route });\n edges.push({ id: sourceEdge.id, points: route, arrowStart: sourceEdge.arrowStart ?? 'none', arrowEnd: sourceEdge.arrowEnd ?? 'none', stroke: sourceEdge.stroke ?? 'normal', ...(label ? { label } : {}) });\n }\n\n const minX = Math.min(0, ...boxes.map((box) => box.x), ...edges.flatMap((edge) => edge.points.map((point) => point.x)));\n const minY = Math.min(0, ...boxes.map((box) => box.y), ...edges.flatMap((edge) => edge.points.map((point) => point.y)));\n if (minX !== 0 || minY !== 0) {\n for (const box of boxes) { box.x -= minX; box.y -= minY; }\n for (const edge of edges) for (const point of edge.points) { point.x -= minX; point.y -= minY; }\n for (const edge of edges) if (edge.label) { edge.label.x -= minX; edge.label.y -= minY; }\n }\n const width = Math.max(1, ...boxes.map((box) => box.x + box.width), ...edges.flatMap((edge) => edge.points.map((point) => point.x + 1)));\n const height = Math.max(1, ...boxes.map((box) => box.y + box.height), ...edges.flatMap((edge) => edge.points.map((point) => point.y + 1)));\n return { boxes, edges, width, height };\n}\n\nfunction walkOutput(node, elements, floatBoxes, isRoot = false) {\n if (node?.id && !isRoot) {\n elements.set(node.id, node);\n if (Number.isFinite(node.x) && Number.isFinite(node.y)) floatBoxes.set(node.id, { x: node.x, y: node.y, width: node.width ?? 0, height: node.height ?? 0 });\n }\n for (const child of node?.children ?? []) walkOutput(child, elements, floatBoxes, false);\n}\n\nfunction walkEdges(node, edges) {\n for (const edge of node?.edges ?? []) edges.set(edge.id, edge);\n for (const child of node?.children ?? []) walkEdges(child, edges);\n}\n\nfunction routePoints(edge, sourceBox, targetBox, floatBoxes, context, occupied, endpointOffsets = {}, selfLoop, arrowStart = 'none', arrowEnd = 'none') {\n if (!sourceBox || !targetBox) invalid(`An edge endpoint has no layout box.`, 'LAYOUT_MISSING_BOX');\n const sections = edge.sections;\n if (selfLoop && sourceBox.id === targetBox.id) {\n const custom = selfLoopRoute(sourceBox, selfLoop.rank, selfLoop.count);\n if (!routeBlocked(custom, context.__boxById, allowedBoxes(context, sourceBox.id, targetBox.id), occupied, sourceBox.id, targetBox.id, arrowStart, arrowEnd)) return custom;\n }\n const raw = [];\n for (const section of sections) {\n const points = [section.startPoint, ...(section.bendPoints ?? []), section.endPoint].filter(Boolean);\n for (const point of points) {\n if (!raw.length || raw[raw.length - 1].x !== point.x || raw[raw.length - 1].y !== point.y) raw.push({ x: point.x, y: point.y });\n }\n }\n if (raw.length < 2) return [];\n const sourceFloat = floatBoxes.get(sourceBox.id);\n const targetFloat = floatBoxes.get(targetBox.id);\n const sourceAnchor = anchor(raw[0], raw[1], sourceFloat, sourceBox, endpointOffsets.sourceOffset ?? 0);\n const targetAnchor = anchor(raw[raw.length - 1], raw[raw.length - 2], targetFloat, targetBox, endpointOffsets.targetOffset ?? 0);\n raw[0] = sourceAnchor;\n raw[raw.length - 1] = targetAnchor;\n const points = orthogonalRound(raw);\n // Rounding an ELK bend can otherwise move an endpoint one cell off its\n // border. Restore the anchors, then make the first/last segment orthogonal.\n points[0] = { ...sourceAnchor };\n points[points.length - 1] = { ...targetAnchor };\n restoreEndpointSegment(points, 0, 1);\n restoreEndpointSegment(points, points.length - 1, -1);\n nudgeRouteEndpoint(points, sourceBox, 0, 1, 0);\n nudgeRouteEndpoint(points, targetBox, points.length - 1, -1, 0);\n simplifyRoute(points);\n const allowed = allowedBoxes(context, sourceBox.id, targetBox.id);\n if (routeBlocked(points, context.__boxById, allowed, occupied, sourceBox.id, targetBox.id, arrowStart, arrowEnd)) {\n const repaired = gridRepair(points[0], points[points.length - 1], context, sourceBox, targetBox, occupied, arrowStart, arrowEnd);\n if (!repaired) invalid(`Integer grid routing collided while placing edge ${edge.id}.`, 'LAYOUT_ROUTE_COLLISION');\n return repaired;\n }\n return points;\n}\n\nfunction restoreEndpointSegment(points, index, neighborStep) {\n const point = points[index];\n const neighbor = points[index + neighborStep];\n if (!point || !neighbor || point.x === neighbor.x || point.y === neighbor.y) return;\n // Keep the already rounded neighbor coordinate which changes least from\n // the anchor; the other coordinate becomes the anchor's coordinate.\n if (Math.abs(neighbor.x - point.x) >= Math.abs(neighbor.y - point.y)) neighbor.y = point.y;\n else neighbor.x = point.x;\n}\n\nfunction selfLoopRoute(box, rank, count) {\n const side = rank % 4;\n const ring = Math.floor(rank / 4) + 2;\n const left = box.x; const right = box.x + box.width - 1;\n const top = box.y; const bottom = box.y + box.height - 1;\n if (side === 0) {\n const x = left - ring;\n return [{ x: left, y: top + 1 }, { x, y: top + 1 }, { x, y: bottom - 1 }, { x: left, y: bottom - 1 }];\n }\n if (side === 1) {\n const x = right + ring;\n return [{ x: right, y: bottom - 1 }, { x, y: bottom - 1 }, { x, y: top + 1 }, { x: right, y: top + 1 }];\n }\n if (side === 2) {\n const y = top - ring;\n return [{ x: left + 1, y: top }, { x: left + 1, y }, { x: right - 1, y }, { x: right - 1, y: top }];\n }\n const y = bottom + ring;\n return [{ x: right - 1, y: bottom }, { x: right - 1, y }, { x: left + 1, y }, { x: left + 1, y: bottom }];\n}\n\nfunction nudgeRouteEndpoint(points, box, index, neighborStep, offset) {\n if (!offset || points.length < 2) return;\n const point = points[index];\n const neighbor = points[index + neighborStep];\n if (!neighbor) return;\n if (point.x === box.x || point.x === box.x + box.width - 1) {\n point.y = Math.max(box.y, Math.min(box.y + box.height - 1, point.y + offset));\n neighbor.y = point.y;\n } else if (point.y === box.y || point.y === box.y + box.height - 1) {\n point.x = Math.max(box.x, Math.min(box.x + box.width - 1, point.x + offset));\n neighbor.x = point.x;\n }\n}\n\nfunction anchor(point, neighbor, floatBox, box, offset = 0) {\n const left = floatBox?.x ?? box.x;\n const right = left + (floatBox?.width ?? box.width);\n const top = floatBox?.y ?? box.y;\n const bottom = top + (floatBox?.height ?? box.height);\n const distances = [{ side: 'left', value: Math.abs(point.x - left) }, { side: 'right', value: Math.abs(point.x - right) }, { side: 'top', value: Math.abs(point.y - top) }, { side: 'bottom', value: Math.abs(point.y - bottom) }];\n distances.sort((a, b) => a.value - b.value);\n const side = distances[0].side;\n if (side === 'left' || side === 'right') {\n const center = box.y + Math.floor((box.height - 1) / 2);\n const y = Math.max(box.y, Math.min(box.y + box.height - 1, center + offset));\n return { x: side === 'left' ? box.x : box.x + box.width - 1, y };\n }\n const center = box.x + Math.floor((box.width - 1) / 2);\n const x = Math.max(box.x, Math.min(box.x + box.width - 1, center + offset));\n return { x, y: side === 'top' ? box.y : box.y + box.height - 1 };\n}\n\nfunction orthogonalRound(raw) {\n const result = [{ x: Math.round(raw[0].x), y: Math.round(raw[0].y) }];\n for (let i = 1; i < raw.length; i += 1) {\n const current = { x: Math.round(raw[i].x), y: Math.round(raw[i].y) };\n const previous = result[result.length - 1];\n if (current.x === previous.x || current.y === previous.y) {\n result.push(current);\n continue;\n }\n // A rounded bend can become diagonal even when the original bend was\n // orthogonal. Insert a deterministic Manhattan corner in that case.\n if (Math.abs(current.x - previous.x) >= Math.abs(current.y - previous.y)) {\n result.push({ x: current.x, y: previous.y });\n } else {\n result.push({ x: previous.x, y: current.y });\n }\n result.push(current);\n }\n return result;\n}\n\nfunction simplifyRoute(points) {\n for (let i = points.length - 2; i > 0; i -= 1) {\n const a = points[i - 1];\n const b = points[i];\n const c = points[i + 1];\n if ((a.x === b.x && b.x === c.x) || (a.y === b.y && b.y === c.y)) points.splice(i, 1);\n }\n return points;\n}\n\nfunction allowedBoxes(context, sourceId, targetId) {\n const allowed = new Set([sourceId, targetId]);\n for (const id of context.element.keys()) {\n if (isAncestor(context, id, sourceId) || isAncestor(context, id, targetId)) allowed.add(id);\n }\n return allowed;\n}\n\nfunction isAncestor(context, candidate, id) {\n let current = context.parent.get(id);\n while (current !== undefined) {\n if (current === candidate) return true;\n current = context.parent.get(current);\n }\n return false;\n}\n\nfunction routeBlocked(points, boxes, allowed, occupied, sourceId, targetId, arrowStart = 'none', arrowEnd = 'none') {\n const pair = pairKey(sourceId, targetId);\n const arrowCells = routeArrowKeys(points, arrowStart, arrowEnd);\n for (let i = 1; i < points.length; i += 1) {\n const orientation = points[i - 1].x === points[i].x ? 'v' : 'h';\n for (const cell of segmentCells(points[i - 1], points[i])) {\n const existing = occupied.get(key(cell.x, cell.y));\n if (existing?.arrow || (existing && arrowCells.has(key(cell.x, cell.y))) || existing?.orientations.has(orientation)) return true;\n for (const [id, box] of boxes) {\n if (!box || (!inside(cell, box) && !(box.kind === 'node' && !allowed.has(id) && insideExpanded(cell, box, 1)))) continue;\n if (box.kind === 'subgraph' && headerCell(cell, box)) return true;\n if (box.kind === 'node' && allowed.has(id)) {\n // A route may leave or enter an endpoint on exactly one border\n // cell, but cannot travel along the endpoint's border or interior.\n const endpoint = key(cell.x, cell.y) === key(points[0].x, points[0].y) || key(cell.x, cell.y) === key(points.at(-1).x, points.at(-1).y);\n if (!endpoint) return true;\n } else if (!allowed.has(id)) return true;\n }\n }\n }\n return false;\n}\n\nfunction gridRepair(start, end, context, sourceBox, targetBox, occupied, arrowStart = 'none', arrowEnd = 'none') {\n const boxes = context.__boxById;\n if (!boxes) return null;\n const sourceId = sourceBox.id;\n const targetId = targetBox.id;\n const pair = pairKey(sourceId, targetId);\n const allowed = allowedBoxes(context, sourceId, targetId);\n const directions = [[1, 0], [-1, 0], [0, 1], [0, -1]];\n const all = [...boxes.values()];\n // Expand the search corridor geometrically. A fixed small window can fail\n // on dense/cross-hierarchy graphs even though an unobstructed route exists.\n const starts = endpointCandidates(sourceBox, start);\n const ends = endpointCandidates(targetBox, end);\n for (const candidateStart of starts) for (const candidateEnd of ends) {\n if (candidateStart.x === candidateEnd.x && candidateStart.y === candidateEnd.y && sourceId !== targetId) continue;\n const startPoint = candidateStart;\n const endPoint = candidateEnd;\n for (const margin of [8, 16, 32, 64]) {\n const minX = Math.min(startPoint.x, endPoint.x, ...all.map((b) => b.x)) - margin;\n const maxX = Math.max(startPoint.x, endPoint.x, ...all.map((b) => b.x + b.width - 1)) + margin;\n const minY = Math.min(startPoint.y, endPoint.y, ...all.map((b) => b.y)) - margin;\n const maxY = Math.max(startPoint.y, endPoint.y, ...all.map((b) => b.y + b.height - 1)) + margin;\n const queue = [startPoint];\n const previous = new Map([[key(startPoint.x, startPoint.y), null]]);\n const currentArrows = endpointArrowNeighborhood(startPoint, endPoint, arrowStart, arrowEnd);\n const blocked = (x, y, orientation) => {\n const cell = { x, y };\n const existing = occupied.get(key(x, y));\n // Crossings are representable, but reusing a collinear segment from an\n // unrelated edge (or its arrow-adjacent cell) would erase topology.\n if (existing?.arrow || (existing && currentArrows.has(key(x, y))) || existing?.orientations.has(orientation)) return true;\n for (const [id, box] of boxes) {\n if (!inside(cell, box) && !(box.kind === 'node' && !allowed.has(id) && insideExpanded(cell, box, 1))) continue;\n if (box.kind === 'subgraph' && headerCell(cell, box)) return true;\n if (box.kind === 'node' && allowed.has(id)) {\n if (!(x === startPoint.x && y === startPoint.y) && !(x === endPoint.x && y === endPoint.y)) return true;\n } else if (!allowed.has(id)) return true;\n }\n return false;\n };\n let head = 0;\n while (head < queue.length) {\n const current = queue[head++];\n if (current.x === endPoint.x && current.y === endPoint.y) {\n const path = [];\n let cursor = current;\n while (cursor) { path.push(cursor); cursor = previous.get(key(cursor.x, cursor.y)); }\n path.reverse();\n return compress(path);\n }\n for (const [dx, dy] of directions) {\n const x = current.x + dx; const y = current.y + dy;\n if (x < minX || x > maxX || y < minY || y > maxY || blocked(x, y, dx ? 'h' : 'v')) continue;\n const k = key(x, y);\n if (previous.has(k)) continue;\n previous.set(k, current); queue.push({ x, y });\n }\n }\n }\n }\n return null;\n}\n\nfunction endpointCandidates(box, preferred) {\n const points = [];\n for (let y = box.y; y < box.y + box.height; y += 1) {\n for (let x = box.x; x < box.x + box.width; x += 1) {\n if (x !== box.x && x !== box.x + box.width - 1 && y !== box.y && y !== box.y + box.height - 1) continue;\n points.push({ x, y });\n }\n }\n points.sort((a, b) => Math.abs(a.x - preferred.x) + Math.abs(a.y - preferred.y) - (Math.abs(b.x - preferred.x) + Math.abs(b.y - preferred.y)) || a.y - b.y || a.x - b.x);\n return points.slice(0, 32);\n}\n\nfunction endpointArrowNeighborhood(start, end, arrowStart, arrowEnd) {\n const cells = new Set();\n const add = (point) => {\n for (const [dx, dy] of [[1, 0], [-1, 0], [0, 1], [0, -1]]) cells.add(key(point.x + dx, point.y + dy));\n };\n if (arrowStart !== 'none' && arrowStart !== undefined) add(start);\n if (arrowEnd !== 'none' && arrowEnd !== undefined) add(end);\n return cells;\n}\n\nfunction headerCell(point, box) {\n if (box.kind !== 'subgraph' || point.y < box.y + 1 || point.y >= box.y + 1 + box.lines.length) return false;\n const line = box.lines[point.y - box.y - 1] ?? '';\n const left = box.x + 1 + Math.floor((Math.max(0, box.width - 2) - displayWidth(line)) / 2);\n return point.x >= left && point.x < left + displayWidth(line);\n}\n\nfunction compress(points) {\n if (points.length < 2) return points;\n const result = [points[0]];\n let dx = points[1].x - points[0].x;\n let dy = points[1].y - points[0].y;\n for (let i = 1; i < points.length - 1; i += 1) {\n const ndx = points[i + 1].x - points[i].x;\n const ndy = points[i + 1].y - points[i].y;\n if ((dx === 0) !== (ndx === 0)) result.push(points[i]);\n dx = ndx; dy = ndy;\n }\n result.push(points[points.length - 1]);\n return result;\n}\n\nfunction addRouteToOccupied(occupied, points, edge, boxes) {\n const sourceId = edge.source;\n const targetId = edge.target;\n for (let i = 1; i < points.length; i += 1) {\n const orientation = points[i - 1].x === points[i].x ? 'v' : 'h';\n for (const cell of segmentCells(points[i - 1], points[i])) {\n if ((inside(cell, boxes.get(sourceId)) && cell !== points[0]) || (inside(cell, boxes.get(targetId)) && cell !== points.at(-1))) continue;\n const cellKey = key(cell.x, cell.y);\n if (!occupied.has(cellKey)) occupied.set(cellKey, { orientations: new Set(), pairs: new Set() });\n const entry = occupied.get(cellKey);\n entry.orientations.add(orientation);\n entry.pairs.add(pairKey(sourceId, targetId));\n if (!entry.sources) entry.sources = new Set();\n entry.sources.add(sourceId);\n }\n }\n markArrowOccupancy(occupied, points, edge.arrowStart, edge.arrowEnd);\n}\n\nfunction markArrowOccupancy(occupied, points, arrowStart, arrowEnd) {\n const first = distinctRoutePair(points, true);\n const last = distinctRoutePair(points, false);\n for (const pair of [arrowStart !== 'none' && arrowStart !== undefined ? first : null, arrowEnd !== 'none' && arrowEnd !== undefined ? last : null]) {\n if (!pair) continue;\n const cell = key(pair.next.x, pair.next.y);\n if (!occupied.has(cell)) occupied.set(cell, { orientations: new Set(), pairs: new Set(), sources: new Set() });\n occupied.get(cell).arrow = true;\n }\n}\n\nfunction distinctRoutePair(points, start) {\n if (start) {\n for (let i = 1; i < points.length; i += 1) if (points[i].x !== points[0].x || points[i].y !== points[0].y) return { next: oneStep(points[0], points[i]) };\n } else {\n for (let i = points.length - 2; i >= 0; i -= 1) if (points[i].x !== points.at(-1).x || points[i].y !== points.at(-1).y) return { next: oneStep(points.at(-1), points[i]) };\n }\n return null;\n}\n\nfunction oneStep(end, toward) {\n const dx = toward.x - end.x;\n const dy = toward.y - end.y;\n return Math.abs(dx) >= Math.abs(dy)\n ? { x: end.x + Math.sign(dx), y: end.y }\n : { x: end.x, y: end.y + Math.sign(dy) };\n}\n\nfunction routeArrowKeys(points, arrowStart = 'none', arrowEnd = 'none') {\n const keys = new Set();\n const first = distinctRoutePair(points, true);\n const last = distinctRoutePair(points, false);\n if (arrowStart !== 'none' && arrowStart !== undefined && first) keys.add(key(first.next.x, first.next.y));\n if (arrowEnd !== 'none' && arrowEnd !== undefined && last) keys.add(key(last.next.x, last.next.y));\n return keys;\n}\n\nfunction segmentCells(a, b) {\n if (a.x !== b.x && a.y !== b.y) {\n throw new FlowInkError(`Non-orthogonal segment from (${a.x},${a.y}) to (${b.x},${b.y}).`, { code: 'NON_ORTHOGONAL_EDGE' });\n }\n const cells = [];\n const dx = Math.sign(b.x - a.x); const dy = Math.sign(b.y - a.y);\n let x = a.x; let y = a.y;\n cells.push({ x, y });\n while (x !== b.x || y !== b.y) { x += dx; y += dy; cells.push({ x, y }); }\n return cells;\n}\n\nfunction inside(point, box) {\n return box && point.x >= box.x && point.x < box.x + box.width && point.y >= box.y && point.y < box.y + box.height;\n}\n\nfunction insideExpanded(point, box, margin) {\n return point.x >= box.x - margin && point.x <= box.x + box.width - 1 + margin\n && point.y >= box.y - margin && point.y <= box.y + box.height - 1 + margin;\n}\n\nfunction edgeLabel(output, edge, route, sourceBox, boxes, placedLabels, routes) {\n const source = output.labels?.[0];\n const lines = labelLines(edge.label, edge.labelType).map(String);\n const width = Math.max(1, Math.ceil(source?.width ?? maxWidth(lines, edge.label)));\n const height = Math.max(1, Math.ceil(source?.height ?? lines.length));\n // ELK's label coordinates are useful to graphical renderers, but after\n // snapping to character cells they can end up at the side of a vertical\n // route. Center the label on the longest route segment instead.\n let best = [route[0], route[1]];\n let bestLength = -1;\n for (let i = 1; i < route.length; i += 1) {\n const length = Math.abs(route[i].x - route[i - 1].x) + Math.abs(route[i].y - route[i - 1].y);\n if (length > bestLength) { best = [route[i - 1], route[i]]; bestLength = length; }\n }\n const [a, b] = best;\n const midX = Math.floor((a.x + b.x) / 2);\n const midY = Math.floor((a.y + b.y) / 2);\n if (edge.source === edge.target && sourceBox) {\n const routeMinX = Math.min(...route.map((point) => point.x));\n const routeMaxX = Math.max(...route.map((point) => point.x));\n const leftOfBox = routeMinX < sourceBox.x;\n const y = Math.max(0, midY - Math.floor(height / 2));\n const candidates = [\n { x: leftOfBox ? routeMinX - width - 1 : routeMaxX + 2, y },\n { x: leftOfBox ? routeMaxX + 2 : routeMinX - width - 1, y: y + height + 1 },\n ];\n for (const candidate of candidates) {\n if (candidate.x < 0 || labelCollides(candidate, width, height, route, boxes, placedLabels, routes)) continue;\n return { ...candidate, lines, width, height };\n }\n return { x: Math.max(0, candidates[0].x), y, lines, width, height };\n }\n const horizontal = b.y === a.y;\n const centeredX = midX - Math.floor(width / 2);\n const centeredY = midY - Math.floor(height / 2);\n const candidates = horizontal\n ? [{ x: centeredX, y: centeredY - height - 1 }, { x: centeredX, y: centeredY + height + 1 }]\n : [{ x: centeredX - width - 1, y: centeredY }, { x: centeredX + width + 1, y: centeredY }];\n candidates.push({ x: centeredX, y: centeredY });\n for (const candidate of candidates) {\n if (candidate.x < 0 || candidate.y < 0) continue;\n if (labelCollides(candidate, width, height, route, boxes, placedLabels, routes)) continue;\n return { ...candidate, lines, width, height };\n }\n return { x: Math.max(0, centeredX), y: Math.max(0, centeredY), lines, width, height };\n}\n\nfunction labelCollides(candidate, width, height, route, boxes, placedLabels, routes) {\n const routeCells = new Set();\n for (const candidateRoute of routes.values()) {\n for (let i = 1; i < candidateRoute.length; i += 1) for (const cell of segmentCells(candidateRoute[i - 1], candidateRoute[i])) routeCells.add(key(cell.x, cell.y));\n }\n for (let y = candidate.y; y < candidate.y + height; y += 1) {\n for (let x = candidate.x; x < candidate.x + width; x += 1) {\n if (routeCells.has(key(x, y))) return true;\n for (const box of boxes.values()) {\n // Reserve the full box rectangle. This is conservative, but avoids\n // labels colliding with a container title or a node border after\n // rasterization.\n if (inside({ x, y }, box)) return true;\n }\n }\n }\n for (const label of placedLabels) {\n if (candidate.x < label.x + label.width && label.x < candidate.x + width && candidate.y < label.y + label.height && label.y < candidate.y + height) return true;\n }\n return false;\n}\n\nfunction maxWidth(lines, fallback) {\n if (lines.length > 0) return Math.max(1, ...lines.map((line) => Number(displayWidth(line))));\n return Math.max(1, Number(displayWidth(String(fallback ?? ''))));\n}\n\nfunction positiveSize(value, fallback) {\n return Number.isFinite(value) && value > 0 ? Math.max(1, Math.ceil(value)) : Math.max(1, Math.ceil(fallback));\n}\n\nfunction elkSize(cells) { return Math.max(1, cells - 1); }\n\nfunction requireId(value, type) {\n if (!value || typeof value.id !== 'string' || value.id.length === 0) invalid(`Every ${type} must have a non-empty string id.`);\n}\n\nfunction invalid(message, code = 'INVALID_GRAPH') {\n throw new FlowInkError(message, { code });\n}\n\nfunction key(x, y) { return `${x},${y}`; }\n\nfunction pairKey(source, target) { return `${source}\\u0000${target}`; }\n", "import stringWidth from 'string-width';\nimport { decodeHTML } from 'entities';\nimport { marked } from 'marked';\n\n/**\n * Return the number of terminal character cells occupied by a string.\n *\n * `string-width` counts grapheme clusters and East Asian wide characters,\n * which is the same unit used by the text rasterizer. A label can contain\n * newlines, so this function returns the width of its widest line.\n *\n * @param {unknown} value\n * @returns {number}\n */\nexport function displayWidth(value) {\n if (value === null || value === undefined) return 0;\n const text = String(value).replace(/\\r\\n?/g, '\\n');\n return Math.max(0, ...text.split('\\n').map((line) => stringWidth(line)));\n}\n\nconst graphemeSegmenter = typeof Intl !== 'undefined' && Intl.Segmenter\n ? new Intl.Segmenter(undefined, { granularity: 'grapheme' })\n : null;\n\n/** Expand tabs to four-column tab stops so terminal labels occupy known cells. */\nfunction expandTabs(value) {\n return value.split('\\n').map((line) => {\n let column = 0;\n let result = '';\n const graphemes = graphemeSegmenter\n ? [...graphemeSegmenter.segment(line)].map(({ segment }) => segment)\n : [...line];\n for (const grapheme of graphemes) {\n if (grapheme === '\\t') {\n const spaces = 4 - (column % 4);\n result += ' '.repeat(spaces);\n column += spaces;\n } else {\n result += grapheme;\n column += stringWidth(grapheme);\n }\n }\n return result;\n }).join('\\n');\n}\n\nconst BLOCK_TAGS = /^(?:address|article|aside|blockquote|br|caption|dd|div|dl|dt|fieldset|figcaption|figure|footer|form|h[1-6]|header|hr|li|main|nav|ol|p|pre|section|table|tbody|td|tfoot|th|thead|tr|ul)$/i;\n\n/**\n * Decode Mermaid's entity notation as well as normal HTML entities. Mermaid's\n * flow parser accepts forms such as `#quot;`, `#9829;`, and `#amp;` in labels.\n * @param {string} value\n * @returns {string}\n */\nfunction decodeLabelEntities(value) {\n // Decode normal HTML entities once. In particular, `&amp;lt;` means the\n // literal text `&lt;`; decoding repeatedly would incorrectly turn that into\n // `<` and lose the author's intent.\n let result = decodeHTML(value);\n // Mermaid's notation is deliberately decoded in one pass as well. The\n // negative lookbehind prevents the `#` in a native `&#9829;` reference from\n // being treated as a second, Mermaid-specific entity.\n return result.replace(/(?<!&)#(x[0-9a-f]+|[0-9]+|[a-z][a-z0-9]+);/gi, (match, name) => {\n const entity = /^x/i.test(name)\n ? `&#${name};`\n : /^[0-9]/.test(name)\n ? `&#${name};`\n : `&${name};`;\n const decoded = decodeHTML(entity);\n return decoded === entity ? match : decoded;\n });\n}\n\n/** Remove markup from a raw HTML token without evaluating it. */\nfunction htmlTokenText(value) {\n const source = String(value);\n let result = '';\n let index = 0;\n while (index < source.length) {\n if (source.startsWith('<!--', index)) {\n const end = source.indexOf('-->', index + 4);\n index = end < 0 ? source.length : end + 3;\n continue;\n }\n if (source[index] !== '<') {\n result += source[index];\n index += 1;\n continue;\n }\n\n // Find the tag terminator while respecting quoted `>` characters in\n // attributes. If this is not a valid tag (for example `A < B > C` or an\n // escaped `\\>`), retain the angle bracket as ordinary label text.\n let end = index + 1;\n let quote = '';\n for (; end < source.length; end += 1) {\n const character = source[end];\n if (quote) {\n if (character === quote) quote = '';\n } else if (character === '\"' || character === \"'\") {\n quote = character;\n } else if (character === '>') {\n break;\n }\n }\n if (end >= source.length) {\n result += '<';\n index += 1;\n continue;\n }\n const rawTag = source.slice(index, end + 1);\n const match = rawTag.match(/^<(\\/?[a-z][a-z0-9-]*)(?=\\s|\\/?>)[\\s\\S]*>$/i);\n if (!match) {\n result += '<';\n index += 1;\n continue;\n }\n const closing = match[1].startsWith('/');\n const tag = match[1].replace(/^\\//, '').toLowerCase();\n if (tag === 'img') {\n const alt = rawTag.match(/\\balt\\s*=\\s*(['\"])([\\s\\S]*?)\\1/i);\n if (alt) result += alt[2];\n } else if (tag === 'br') {\n result += '\\n';\n } else if (BLOCK_TAGS.test(tag) && (closing || tag === 'hr')) {\n // A closing block tag terminates its content. Opening tags do not add a\n // line of their own, avoiding an empty line between adjacent paragraphs.\n result += '\\n';\n }\n index = end + 1;\n }\n return result;\n}\n\n/** @param {any} token @returns {string} */\nfunction tokenText(token) {\n if (!token) return '';\n const type = token.type;\n\n if (type === 'html') return htmlTokenText(token.text ?? token.raw ?? '');\n if (type === 'image') {\n // Marked keeps image alt text in `text`; retaining it prevents an image\n // label from silently becoming empty in a terminal diagram.\n return token.tokens ? tokensText(token.tokens) : (token.text ?? '');\n }\n if (type === 'br') return '\\n';\n if (type === 'codespan' || type === 'code' || type === 'text' || type === 'escape') {\n if (type === 'code' || type === 'codespan') return token.text ?? '';\n if (token.tokens) return tokensText(token.tokens);\n return token.text ?? '';\n }\n if (type === 'hr') return '\\n';\n if (type === 'space') return '\\n';\n\n if (type === 'table') {\n const header = (token.header ?? []).map(tokenText).join(' | ');\n const rows = (token.rows ?? []).map((row) => row.map(tokenText).join(' | '));\n return [header, ...rows].filter((line) => line !== '').join('\\n') + '\\n';\n }\n\n if (type === 'list_item') {\n const body = token.tokens ? tokensText(token.tokens) : (token.text ?? '');\n // Task markers are meaningful label content even though marked stores\n // them as token metadata rather than child tokens.\n const marker = token.task ? `[${token.checked ? 'x' : ' '}] ` : '';\n return marker + body + '\\n';\n }\n\n if (token.tokens) return tokensText(token.tokens) + (type === 'paragraph' || type === 'heading' ? '\\n' : '');\n if (token.items) return token.items.map(tokenText).join('') + '\\n';\n if (token.text !== undefined) return String(token.text);\n return '';\n}\n\n/** @param {any[]} tokens @returns {string} */\nfunction tokensText(tokens) {\n return (tokens ?? []).map(tokenText).join('');\n}\n\n/**\n * Convert a Mermaid label to plain, displayable lines. Markdown and HTML are\n * parsed with marked only; no generated markup is inserted into a DOM or\n * otherwise executed.\n *\n * @param {unknown} label\n * @param {unknown} [labelType]\n * @returns {string[]}\n */\nexport function labelLines(label, labelType = 'text') {\n const source = label === null || label === undefined ? '' : String(label);\n if (source === '') return [''];\n\n let plain;\n const markdown = /^(?:markdown|md)$/i.test(String(labelType ?? ''));\n if (!markdown) {\n plain = htmlTokenText(source);\n } else {\n try {\n plain = tokensText(marked.lexer(source));\n } catch {\n // A malformed markdown extension should not make an otherwise printable\n // Mermaid node disappear. Entity decoding still applies in this fallback.\n plain = htmlTokenText(source);\n }\n }\n\n plain = expandTabs(decodeLabelEntities(plain).replace(/\\r\\n?/g, '\\n'));\n // Lexer block tokens add a terminal newline. It is layout punctuation rather\n // than an additional empty line in the node label.\n plain = plain.replace(/^\\n+|\\n+$/g, '');\n return plain === '' ? [''] : plain.split('\\n');\n}\n\nconst SHAPE_ALIASES = new Map([\n ['rect', 'rect'], ['rectangle', 'rect'], ['square', 'rect'], ['proc', 'rect'], ['process', 'rect'], ['f_rect', 'rect'],\n ['fr_rect', 'rect'], ['subroutine', 'rect'], ['subproc', 'rect'],\n ['lined_square', 'rect'], ['notch_rect', 'rect'], ['div_rect', 'rect'],\n ['tag', 'rect'], ['fork', 'rect'], ['join', 'rect'],\n ['round', 'round'], ['rounded', 'round'], ['stadium', 'round'], ['pill', 'round'],\n ['event', 'round'], ['f_round', 'round'], ['fr_round', 'round'],\n ['circle', 'circle'], ['circ', 'circle'], ['doublecircle', 'circle'], ['dbl_circ', 'circle'], ['sm_circ', 'circle'], ['fr_circ', 'circle'], ['f_circ', 'circle'], ['state', 'circle'],\n ['diamond', 'diamond'], ['diam', 'diamond'], ['rhombus', 'diamond'], ['decision', 'diamond'], ['question', 'diamond'],\n ['image', 'image'], ['img', 'image'], ['icon', 'icon'],\n]);\n\nfunction shapeKey(value) {\n return String(value ?? '').trim().toLowerCase().replace(/[\\s-]+/g, '_');\n}\n\nfunction metadataField(metadata, name) {\n return metadata[name];\n}\n\nfunction shapeForNode(node) {\n const metadata = node && node.metadata && typeof node.metadata === 'object' ? node.metadata : {};\n const primary = node?.shape;\n const metadataShape = metadataField(metadata, 'shape');\n const iconValue = metadataField(metadata, 'icon');\n const imgValue = metadataField(metadata, 'img');\n const mediaKind = iconValue !== undefined && iconValue !== null\n ? 'icon'\n : imgValue !== undefined && imgValue !== null\n ? 'image'\n : undefined;\n const form = metadataField(metadata, 'form');\n const formShape = mediaKind && SHAPE_ALIASES.has(shapeKey(form)) ? form : undefined;\n const typeShape = SHAPE_ALIASES.has(shapeKey(node?.type)) ? node?.type : undefined;\n // Semantic parsing initializes legacy vertices to `rect`; an explicit\n // shape in the newer `@{ shape: ... }` form is kept in metadata. Let that\n // metadata replace only the default rectangle, while an explicit non-rect\n // node shape remains authoritative.\n const mediaUsesDefaultShape = mediaKind && metadataShape === undefined\n && (primary === undefined || shapeKey(primary) === 'rect');\n const candidates = mediaUsesDefaultShape\n ? [formShape]\n : shapeKey(primary) === 'rect' && metadataShape !== undefined\n ? [metadataShape, primary, node?.shapeType, typeShape]\n : [primary, node?.shapeType, metadataShape, typeShape];\n for (const candidate of candidates) {\n if (candidate === undefined || candidate === null) continue;\n const key = shapeKey(candidate);\n return { original: String(candidate), canonical: SHAPE_ALIASES.get(key) ?? 'rect', placeholderKind: mediaKind };\n }\n if (mediaKind) {\n return formShape\n ? { original: String(formShape), canonical: SHAPE_ALIASES.get(shapeKey(formShape)), placeholderKind: mediaKind }\n : { original: mediaKind, canonical: mediaKind, placeholderKind: mediaKind };\n }\n return { original: 'rect', canonical: 'rect' };\n}\n\n/**\n * Prepare a graph node for character-cell layout.\n *\n * @param {import('./types.js').FlowNode|Record<string, any>} node\n * @returns {{lines:string[],shape:string,width:number,height:number,metadata:Record<string, any>,originalShape:string}}\n */\nexport function prepareNode(node = {}) {\n const input = node && typeof node === 'object' ? node : {};\n const metadataInput = input.metadata && typeof input.metadata === 'object' ? input.metadata : {};\n const { original, canonical, placeholderKind } = shapeForNode(input);\n // Shape-data declarations (`A@{label: ...}`) are stored by the semantic\n // parser in metadata, while legacy nodes expose their label directly.\n const label = metadataField(metadataInput, 'label') ?? input.label ?? input.text ?? input.value ?? '';\n let lines = labelLines(label, input.labelType ?? metadataInput.labelType ?? 'text');\n const shapePlaceholder = shapeKey(original) !== 'rect' && !SHAPE_ALIASES.has(shapeKey(original));\n const prefixes = [];\n if (shapePlaceholder) prefixes.push(`[${original}]`);\n if (placeholderKind) prefixes.push(`[${placeholderKind}]`);\n else if (canonical === 'image' || canonical === 'icon') prefixes.push(`[${canonical}]`);\n if (prefixes.length) {\n lines = lines.length === 1 && lines[0] === '' ? prefixes : [...prefixes, ...lines];\n }\n\n const widest = Math.max(0, ...lines.map(displayWidth));\n // Two horizontal border cells plus one padding cell on each side.\n const padding = 1;\n const borderWidth = 2;\n const borderHeight = 2;\n const minimumWidth = canonical === 'circle' || canonical === 'diamond' ? 5 : canonical === 'image' || canonical === 'icon' ? 7 : 5;\n const minimumHeight = canonical === 'circle' || canonical === 'diamond' ? 5 : 3;\n let width = Math.max(minimumWidth, widest + padding * 2 + borderWidth);\n let height = Math.max(minimumHeight, lines.length + borderHeight);\n // The rasterizer draws circles as rounded boxes. Keeping independent width\n // and height avoids making a long label unnecessarily wide or tall.\n\n const originalProperties = { ...input };\n delete originalProperties.metadata;\n const metadata = { ...metadataInput };\n if (metadata.originalShape === undefined) metadata.originalShape = original;\n if (metadata.originalProperties === undefined) metadata.originalProperties = originalProperties;\n if (shapePlaceholder || placeholderKind) {\n metadata.placeholder = true;\n if (shapePlaceholder) metadata.placeholderFor = original;\n if (placeholderKind) metadata.placeholderKind = placeholderKind;\n }\n\n return { lines, shape: canonical, width, height, metadata, originalShape: original };\n}\n\nexport { SHAPE_ALIASES };\n", "import { FlowInkError } from './errors.js';\nimport { displayWidth } from './text.js';\n\n/** @typedef {import('./types.js').LayoutGraph} LayoutGraph */\n\n/*\n * Place labels after ELK has produced routes. ELK's label coordinates are\n * useful for a graphical renderer, but they are not character-cell safe: a\n * rounded coordinate can put a label on a border, an arrow, or another\n * route. This module intentionally works only with the public integer\n * LayoutGraph contract, so it can also be used by callers that provide their\n * own layout.\n */\n\n/**\n * Reposition every edge label around its own orthogonal route.\n *\n * The input graph is updated in place and returned for convenient piping.\n * Boxes and routes are never rerouted. If a label (or supplied geometry)\n * reaches a negative coordinate, the complete graph is translated and the\n * advertised canvas is expanded accordingly.\n *\n * @param {LayoutGraph} layout\n * @returns {LayoutGraph}\n */\nexport function placeLabels(layout) {\n validateInput(layout);\n\n const boxes = layout.boxes;\n const edges = layout.edges;\n const obstacles = buildBoxObstacles(boxes);\n const routeCells = new Map();\n const arrowCells = new Set();\n\n for (const edge of edges) {\n validateRoute(edge);\n const cells = segmentCellsForRoute(edge.points);\n for (const cell of cells) {\n const cellKey = key(cell.x, cell.y);\n if (!routeCells.has(cellKey)) routeCells.set(cellKey, new Set());\n routeCells.get(cellKey).add(edge.id);\n }\n deriveArrowCells(edge, arrowCells);\n }\n\n const placed = [];\n for (const edge of edges) {\n if (!edge.label) continue;\n const label = normalizeLabel(edge.label, edge.id);\n const route = edge.points;\n const candidate = findPlacement({\n edge,\n label,\n route,\n obstacles,\n routeCells,\n arrowCells,\n placed,\n bounds: layoutBounds(layout, boxes, edges),\n });\n if (!candidate) {\n throw new FlowInkError(`Cannot place label for edge ${edge.id} without hiding graph geometry.`, {\n code: 'LABEL_PLACEMENT_ERROR',\n });\n }\n edge.label = { ...edge.label, ...label, x: candidate.x, y: candidate.y };\n placed.push({ edgeId: edge.id, ...label, x: candidate.x, y: candidate.y });\n }\n\n translateAndExpand(layout);\n return layout;\n}\n\nfunction validateInput(layout) {\n if (!layout || typeof layout !== 'object' || !Array.isArray(layout.boxes) || !Array.isArray(layout.edges)) {\n fail('Layout must contain boxes and edges arrays.', 'INVALID_LAYOUT');\n }\n for (const box of layout.boxes) {\n if (!box || typeof box.id !== 'string' || !Number.isInteger(box.x) || !Number.isInteger(box.y)\n || !Number.isInteger(box.width) || !Number.isInteger(box.height)\n || box.width < 1 || box.height < 1 || !Array.isArray(box.lines)) {\n fail(`Layout box ${box?.id ?? '<unknown>'} is invalid.`, 'INVALID_LAYOUT');\n }\n }\n const ids = new Set();\n for (const edge of layout.edges) {\n if (!edge || typeof edge.id !== 'string' || ids.has(edge.id)) fail(`Layout edge id is missing or duplicated: ${edge?.id ?? '<unknown>'}.`, 'INVALID_LAYOUT');\n ids.add(edge.id);\n if (!Array.isArray(edge.points) || edge.points.length < 1) fail(`Layout edge ${edge.id} must have at least one point.`, 'INVALID_LAYOUT');\n }\n}\n\nfunction validateRoute(edge) {\n for (const point of edge.points) {\n if (!point || !Number.isInteger(point.x) || !Number.isInteger(point.y)) {\n fail(`Layout edge ${edge.id} has an invalid route point.`, 'INVALID_LAYOUT');\n }\n }\n for (let i = 1; i < edge.points.length; i += 1) {\n const a = edge.points[i - 1];\n const b = edge.points[i];\n if (a.x !== b.x && a.y !== b.y) fail(`Layout edge ${edge.id} is not orthogonal.`, 'NON_ORTHOGONAL_EDGE');\n }\n}\n\nfunction normalizeLabel(source, edgeId) {\n if (!source || !Array.isArray(source.lines)) fail(`Label for edge ${edgeId} must provide lines.`, 'INVALID_LAYOUT');\n // LayoutGraph normally already stores one string per terminal row. Split\n // embedded newlines as well so callers constructing a graph by hand get the\n // same reservation semantics as parser-produced labels.\n const lines = source.lines.flatMap((line) => String(line).replace(/\\r\\n?/g, '\\n').split('\\n'));\n const measuredWidth = Math.max(0, ...lines.map((line) => displayWidth(line)));\n const suppliedWidth = Number.isInteger(source.width) && source.width > 0 ? source.width : 0;\n const suppliedHeight = Number.isInteger(source.height) && source.height > 0 ? source.height : 0;\n return {\n lines: lines.length ? lines : [''],\n width: Math.max(1, measuredWidth, suppliedWidth),\n height: Math.max(1, lines.length, suppliedHeight),\n };\n}\n\nfunction buildBoxObstacles(boxes) {\n const obstacles = new Set();\n for (const box of boxes) {\n const isGroup = box.kind === 'subgraph';\n for (let y = box.y; y < box.y + box.height; y += 1) {\n for (let x = box.x; x < box.x + box.width; x += 1) {\n const border = x === box.x || x === box.x + box.width - 1 || y === box.y || y === box.y + box.height - 1;\n // A group body is available for labels, but its border and title\n // strip are not. Reserve the complete strip because the title is\n // centered by the rasterizer and may occupy any interior columns.\n const title = isGroup && y >= box.y + 1 && y < box.y + 1 + box.lines.length;\n if (!isGroup || border || title) obstacles.add(key(x, y));\n }\n }\n }\n return obstacles;\n}\n\nfunction findPlacement({ edge, label, route, obstacles, routeCells, arrowCells, placed, bounds }) {\n const segments = routeSegments(route)\n .filter((segment) => segment.length > 0)\n .sort((a, b) => b.length - a.length || a.index - b.index);\n const maxGap = Math.max(8, bounds.width + bounds.height + label.width + label.height + 4);\n\n // Long segments get first choice and labels remain visually attached to the\n // route. The side order is fixed to make output stable across runs.\n for (let gap = 1; gap <= maxGap; gap += 1) {\n for (const segment of segments) {\n const candidates = adjacentCandidates(segment, label, gap);\n for (const candidate of candidates) {\n if (clear(candidate, label, edge.id, false, obstacles, routeCells, arrowCells, placed)) return candidate;\n }\n }\n }\n\n // A one-point route is unusual but still has a useful local neighborhood.\n // This also makes self-loop labels robust when every side of the loop is\n // short. The search is bounded only by the finite input geometry.\n const anchor = route[0];\n const ringLimit = Math.max(8, bounds.width + bounds.height + label.width + label.height + 4);\n for (let radius = 1; radius <= ringLimit; radius += 1) {\n const ring = [\n { x: anchor.x - Math.floor(label.width / 2), y: anchor.y - label.height - radius },\n { x: anchor.x - Math.floor(label.width / 2), y: anchor.y + radius },\n { x: anchor.x - label.width - radius, y: anchor.y - Math.floor(label.height / 2) },\n { x: anchor.x + radius, y: anchor.y - Math.floor(label.height / 2) },\n ];\n for (const candidate of ring) {\n if (clear(candidate, label, edge.id, false, obstacles, routeCells, arrowCells, placed)) return candidate;\n }\n }\n\n // Inline text is a last resort. It is allowed only when the label is a\n // single terminal row, lies on this edge's route, and leaves route cells on\n // both sides so the line remains visibly connected.\n if (label.height === 1) {\n for (const segment of segments) {\n const candidate = inlineCandidate(segment, label);\n if (candidate && clear(candidate, label, edge.id, true, obstacles, routeCells, arrowCells, placed)\n && connectedInline(candidate, label, edge.id, segment, routeCells)) return candidate;\n }\n }\n return null;\n}\n\nfunction routeSegments(points) {\n const result = [];\n for (let i = 1; i < points.length; i += 1) {\n const a = points[i - 1];\n const b = points[i];\n result.push({ index: i - 1, a, b, horizontal: a.y === b.y, length: Math.abs(b.x - a.x) + Math.abs(b.y - a.y) });\n }\n return result;\n}\n\nfunction adjacentCandidates(segment, label, gap) {\n const { a, b } = segment;\n const midX = Math.floor((a.x + b.x) / 2);\n const midY = Math.floor((a.y + b.y) / 2);\n const candidates = [];\n if (segment.horizontal) {\n const x = midX - Math.floor(label.width / 2);\n candidates.push({ x, y: a.y - label.height - gap });\n candidates.push({ x, y: a.y + gap });\n } else {\n const y = midY - Math.floor(label.height / 2);\n candidates.push({ x: a.x - label.width - gap, y });\n candidates.push({ x: a.x + gap, y });\n }\n return candidates;\n}\n\nfunction inlineCandidate(segment, label) {\n const { a, b } = segment;\n if (segment.horizontal) return { x: Math.floor((a.x + b.x - label.width) / 2), y: a.y };\n return { x: a.x, y: Math.floor((a.y + b.y - label.height) / 2) };\n}\n\nfunction clear(candidate, label, edgeId, inline, obstacles, routeCells, arrowCells, placed) {\n for (let y = candidate.y; y < candidate.y + label.height; y += 1) {\n for (let x = candidate.x; x < candidate.x + label.width; x += 1) {\n const cellKey = key(x, y);\n if (obstacles.has(cellKey) || arrowCells.has(cellKey)) return false;\n const owners = routeCells.get(cellKey);\n if (owners && (!inline || owners.size !== 1 || !owners.has(edgeId))) return false;\n if (placed.some((other) => intersects(candidate, label, other))) return false;\n }\n }\n // Leave one empty character cell between a label and every unrelated route.\n // Without this buffer a label that technically does not overlap can still\n // read as attached to a neighboring vertical/return edge in a terminal.\n for (let y = candidate.y - 1; y <= candidate.y + label.height; y += 1) {\n for (let x = candidate.x - 1; x <= candidate.x + label.width; x += 1) {\n const owners = routeCells.get(key(x, y));\n if (owners && [...owners].some((owner) => owner !== edgeId)) return false;\n }\n }\n // A geometrically clear position can still look attached to a neighboring\n // return edge when two routes run in parallel. Keep only candidates whose\n // rectangle is strictly nearer to this edge than to every other edge. A\n // tie is deliberately rejected: terminal diagrams have no line weights or\n // color to disambiguate it. Inline text has distance zero to its own route\n // and therefore naturally wins when it is the only unambiguous option.\n const ownDistance = distanceToRoute(candidate, label, routeCells, edgeId, true);\n const unrelatedDistance = distanceToRoute(candidate, label, routeCells, edgeId, false);\n if (ownDistance >= unrelatedDistance) return false;\n return true;\n}\n\nfunction distanceToRoute(candidate, label, routeCells, edgeId, own) {\n let distance = Infinity;\n for (const [cellKey, owners] of routeCells) {\n const isOwn = owners.size === 1 && owners.has(edgeId);\n if (isOwn !== own) continue;\n const [x, y] = cellKey.split(',').map(Number);\n distance = Math.min(distance, pointToRectDistance(x, y, candidate, label));\n if (distance === 0) return 0;\n }\n return distance;\n}\n\nfunction pointToRectDistance(x, y, candidate, label) {\n const dx = x < candidate.x ? candidate.x - x : x >= candidate.x + label.width ? x - (candidate.x + label.width - 1) : 0;\n const dy = y < candidate.y ? candidate.y - y : y >= candidate.y + label.height ? y - (candidate.y + label.height - 1) : 0;\n return dx + dy;\n}\n\nfunction connectedInline(candidate, label, edgeId, segment, routeCells) {\n let inside = false;\n let outsideBefore = false;\n let outsideAfter = false;\n for (const cell of segmentCells(segment.a, segment.b)) {\n if (cell.x >= candidate.x && cell.x < candidate.x + label.width && cell.y >= candidate.y && cell.y < candidate.y + label.height) {\n inside = true;\n const before = { x: cell.x - Math.sign(segment.b.x - segment.a.x), y: cell.y - Math.sign(segment.b.y - segment.a.y) };\n const after = { x: cell.x + Math.sign(segment.b.x - segment.a.x), y: cell.y + Math.sign(segment.b.y - segment.a.y) };\n if (routeCells.get(key(before.x, before.y))?.has(edgeId)) outsideBefore = true;\n if (routeCells.get(key(after.x, after.y))?.has(edgeId)) outsideAfter = true;\n }\n }\n return inside && outsideBefore && outsideAfter;\n}\n\nfunction intersects(a, aSize, b) {\n return a.x < b.x + b.width && b.x < a.x + aSize.width && a.y < b.y + b.height && b.y < a.y + aSize.height;\n}\n\nfunction deriveArrowCells(edge, output) {\n if (edge.points.length < 2) return;\n const first = distinctPair(edge.points, true);\n const last = distinctPair(edge.points, false);\n if (edge.arrowStart && edge.arrowStart !== 'none' && first) output.add(key(first.next.x, first.next.y));\n if (edge.arrowEnd && edge.arrowEnd !== 'none' && last) output.add(key(last.previous.x, last.previous.y));\n}\n\nfunction distinctPair(points, start) {\n if (start) {\n for (let i = 1; i < points.length; i += 1) {\n if (points[i].x !== points[0].x || points[i].y !== points[0].y) return { next: oneStep(points[0], points[i]) };\n }\n } else {\n for (let i = points.length - 2; i >= 0; i -= 1) {\n if (points[i].x !== points.at(-1).x || points[i].y !== points.at(-1).y) return { previous: oneStep(points.at(-1), points[i]) };\n }\n }\n return null;\n}\n\nfunction oneStep(from, toward) {\n return { x: from.x + Math.sign(toward.x - from.x), y: from.y + Math.sign(toward.y - from.y) };\n}\n\nfunction segmentCells(a, b) {\n const cells = [];\n const dx = Math.sign(b.x - a.x);\n const dy = Math.sign(b.y - a.y);\n let x = a.x;\n let y = a.y;\n cells.push({ x, y });\n while (x !== b.x || y !== b.y) {\n x += dx;\n y += dy;\n cells.push({ x, y });\n }\n return cells;\n}\n\nfunction segmentCellsForRoute(points) {\n const result = [];\n const seen = new Set();\n for (let i = 1; i < points.length; i += 1) {\n for (const cell of segmentCells(points[i - 1], points[i])) {\n const cellKey = key(cell.x, cell.y);\n if (!seen.has(cellKey)) { seen.add(cellKey); result.push(cell); }\n }\n }\n if (points.length === 1) result.push(points[0]);\n return result;\n}\n\nfunction layoutBounds(layout, boxes, edges) {\n const xs = [0];\n const ys = [0];\n for (const box of boxes) { xs.push(box.x, box.x + box.width); ys.push(box.y, box.y + box.height); }\n for (const edge of edges) for (const point of edge.points) { xs.push(point.x); ys.push(point.y); }\n return { width: Math.max(1, (Math.max(...xs) - Math.min(...xs)) + (layout.width || 0)), height: Math.max(1, (Math.max(...ys) - Math.min(...ys)) + (layout.height || 0)) };\n}\n\nfunction translateAndExpand(layout) {\n const labels = layout.edges.flatMap((edge) => edge.label ? [edge.label] : []);\n const xValues = [0];\n const yValues = [0];\n for (const box of layout.boxes) { xValues.push(box.x); yValues.push(box.y); }\n for (const edge of layout.edges) for (const point of edge.points) { xValues.push(point.x); yValues.push(point.y); }\n for (const label of labels) { xValues.push(label.x); yValues.push(label.y); }\n const shiftX = Math.max(0, -Math.min(...xValues));\n const shiftY = Math.max(0, -Math.min(...yValues));\n if (shiftX || shiftY) {\n for (const box of layout.boxes) { box.x += shiftX; box.y += shiftY; }\n for (const edge of layout.edges) {\n for (const point of edge.points) { point.x += shiftX; point.y += shiftY; }\n if (edge.label) { edge.label.x += shiftX; edge.label.y += shiftY; }\n }\n }\n const width = Math.max(0, Number.isInteger(layout.width) ? layout.width + shiftX : 0);\n const height = Math.max(0, Number.isInteger(layout.height) ? layout.height + shiftY : 0);\n layout.width = width;\n layout.height = height;\n for (const box of layout.boxes) { layout.width = Math.max(layout.width, box.x + box.width); layout.height = Math.max(layout.height, box.y + box.height); }\n for (const edge of layout.edges) {\n for (const point of edge.points) { layout.width = Math.max(layout.width, point.x + 1); layout.height = Math.max(layout.height, point.y + 1); }\n if (edge.label) { layout.width = Math.max(layout.width, edge.label.x + edge.label.width); layout.height = Math.max(layout.height, edge.label.y + edge.label.height); }\n }\n}\n\nfunction key(x, y) { return `${x},${y}`; }\n\nfunction fail(message, code) { throw new FlowInkError(message, { code }); }\n\nexport default placeLabels;\n", "import { FlowInkError } from './errors.js';\nimport { displayWidth } from './text.js';\n\n/**\n * Turn an integer, orthogonally-routed layout into a terminal drawing.\n *\n * The rasterizer deliberately keeps a cell model until the very last step.\n * This is what lets a wide character reserve its second cell and lets us\n * detect a route that would otherwise disappear behind a node.\n *\n * @param {import('./types.js').LayoutGraph} layout\n * @param {import('./types.js').RenderOptions} [options]\n * @returns {string}\n */\nexport function rasterize(layout, options = {}) {\n const charset = options?.charset ?? 'ascii';\n if (charset !== 'ascii' && charset !== 'unicode') {\n throw new FlowInkError('charset must be \"ascii\" or \"unicode\".', { code: 'INVALID_OPTIONS' });\n }\n const checked = validateLayout(layout);\n const { boxes, edges, labels, width, height } = checked;\n const grid = makeGrid(width, height);\n const interior = buildInteriorMap(boxes, width, height);\n const nodeBorders = buildNodeBorderMap(boxes, width, height);\n const boxBorders = buildBoxBorderMap(boxes, width, height);\n const endpointOwners = buildEndpointOwners(edges);\n\n // Routes are drawn first. A later box border can therefore cover the\n // endpoint cell while retaining the line up to the border.\n for (const edge of edges) drawEdge(grid, edge, interior, nodeBorders, boxBorders, endpointOwners, labels, charset);\n for (const box of boxes) drawBox(grid, box, charset);\n\n // Edge labels are intentionally applied after routes and boxes. A label\n // collision is an impossible layout and must be visible to the caller.\n for (const edge of edges) {\n if (edge.label) drawLabel(grid, edge.label, `edge ${edge.id}`, edge.id);\n }\n for (const edge of edges) drawArrows(grid, edge, boxes, charset);\n\n return stringifyGrid(grid);\n}\n\n/** @param {import('./types.js').LayoutGraph} layout */\nexport function validateLayout(layout) {\n if (!layout || typeof layout !== 'object') fail('Layout must be an object.', 'INVALID_LAYOUT');\n if (!Array.isArray(layout.boxes) || !Array.isArray(layout.edges)) {\n fail('Layout must contain boxes and edges arrays.', 'INVALID_LAYOUT');\n }\n if (!Number.isInteger(layout.width) || !Number.isInteger(layout.height) || layout.width < 0 || layout.height < 0) {\n fail('Layout width and height must be non-negative integers.', 'INVALID_LAYOUT');\n }\n\n const boxIds = new Set();\n const boxes = layout.boxes.map((box, index) => {\n if (!box || typeof box !== 'object') fail(`Layout box ${index} is invalid.`, 'INVALID_LAYOUT');\n if (typeof box.id !== 'string' || boxIds.has(box.id)) fail(`Layout box id is missing or duplicated: ${box.id ?? index}.`, 'INVALID_LAYOUT');\n boxIds.add(box.id);\n for (const key of ['x', 'y', 'width', 'height']) {\n if (!Number.isInteger(box[key])) fail(`Layout box ${box.id} has a non-integer ${key}.`, 'INVALID_LAYOUT');\n }\n if (box.x < 0 || box.y < 0 || box.width < 1 || box.height < 1) fail(`Layout box ${box.id} has invalid geometry.`, 'INVALID_LAYOUT');\n if (!Array.isArray(box.lines)) fail(`Layout box ${box.id} must provide lines.`, 'INVALID_LAYOUT');\n if (box.lines.some((line) => typeof line !== 'string')) fail(`Layout box ${box.id} has a non-string label line.`, 'INVALID_LAYOUT');\n return { ...box, shape: String(box.shape ?? 'rect') };\n });\n\n // A partial overlap cannot be represented without destroying one of the\n // two borders. Containment is valid because subgraphs contain nodes.\n for (let i = 0; i < boxes.length; i += 1) {\n for (let j = i + 1; j < boxes.length; j += 1) {\n if (partialBoxOverlap(boxes[i], boxes[j])) {\n fail(`Layout boxes ${boxes[i].id} and ${boxes[j].id} overlap.`, 'BOX_OVERLAP');\n }\n }\n }\n\n const edgeIds = new Set();\n const edges = layout.edges.map((edge, index) => {\n if (!edge || typeof edge !== 'object') fail(`Layout edge ${index} is invalid.`, 'INVALID_LAYOUT');\n if (typeof edge.id !== 'string' || edgeIds.has(edge.id)) fail(`Layout edge id is missing or duplicated: ${edge.id ?? index}.`, 'INVALID_LAYOUT');\n edgeIds.add(edge.id);\n if (!Array.isArray(edge.points) || edge.points.length < 1) fail(`Layout edge ${edge.id} must have at least one point.`, 'INVALID_LAYOUT');\n const points = edge.points.map((point, pointIndex) => {\n if (!point || !Number.isInteger(point.x) || !Number.isInteger(point.y) || point.x < 0 || point.y < 0) {\n fail(`Layout edge ${edge.id} has an invalid point at ${pointIndex}.`, 'INVALID_LAYOUT');\n }\n return { x: point.x, y: point.y };\n });\n for (let i = 1; i < points.length; i += 1) {\n if (points[i - 1].x !== points[i].x && points[i - 1].y !== points[i].y) {\n fail(`Layout edge ${edge.id} is not orthogonal.`, 'NON_ORTHOGONAL_EDGE');\n }\n }\n for (const arrow of [edge.arrowStart, edge.arrowEnd].filter((value) => value !== undefined)) {\n if (!['none', 'point', 'circle', 'cross'].includes(arrow)) fail(`Layout edge ${edge.id} has an invalid arrow type.`, 'INVALID_LAYOUT');\n }\n if (edge.stroke !== undefined && !['normal', 'thick', 'dotted', 'invisible'].includes(edge.stroke)) {\n fail(`Layout edge ${edge.id} has an invalid stroke.`, 'INVALID_LAYOUT');\n }\n return {\n ...edge,\n points,\n arrowStart: edge.arrowStart ?? 'none',\n arrowEnd: edge.arrowEnd ?? 'none',\n stroke: edge.stroke ?? 'normal',\n };\n });\n const labels = [];\n for (const edge of edges) {\n if (!edge.label) continue;\n const label = normalizeLabel(edge.label, `edge ${edge.id}`);\n labels.push(label);\n }\n\n // Layout coordinates are normally already translated to (0, 0). Expand\n // dimensions when a caller supplies a valid route beyond the advertised\n // extent; silently clipping that route would be much worse than expansion.\n let width = layout.width;\n let height = layout.height;\n for (const box of boxes) { width = Math.max(width, box.x + box.width); height = Math.max(height, box.y + box.height); }\n for (const edge of edges) for (const point of edge.points) { width = Math.max(width, point.x + 1); height = Math.max(height, point.y + 1); }\n for (const label of labels) { width = Math.max(width, label.x + label.width); height = Math.max(height, label.y + label.height); }\n return { boxes, edges, labels, width, height };\n}\n\nfunction normalizeLabel(label, owner) {\n if (!label || !Number.isInteger(label.x) || !Number.isInteger(label.y) || label.x < 0 || label.y < 0 || !Array.isArray(label.lines)) {\n fail(`Label for ${owner} is invalid.`, 'INVALID_LAYOUT');\n }\n if (label.lines.some((line) => typeof line !== 'string')) fail(`Label for ${owner} has a non-string line.`, 'INVALID_LAYOUT');\n const measured = Math.max(0, ...label.lines.map((line) => displayWidth(line)));\n const width = Number.isInteger(label.width) && label.width >= measured ? label.width : measured;\n const height = Number.isInteger(label.height) && label.height >= label.lines.length ? label.height : label.lines.length;\n return { ...label, width, height };\n}\n\nfunction partialBoxOverlap(a, b) {\n const overlap = a.x < b.x + b.width && b.x < a.x + a.width && a.y < b.y + b.height && b.y < a.y + a.height;\n if (!overlap) return false;\n const contains = (outer, inner) => outer.kind === 'subgraph' && outer.x <= inner.x && outer.y <= inner.y && outer.x + outer.width >= inner.x + inner.width && outer.y + outer.height >= inner.y + inner.height;\n return !contains(a, b) && !contains(b, a);\n}\n\nfunction makeGrid(width, height) {\n return Array.from({ length: height }, () => Array.from({ length: width }, () => ({ glyph: ' ', kind: 'empty', wide: false, edge: null })));\n}\n\nfunction buildInteriorMap(boxes, width, height) {\n const map = new Map();\n const add = (x, y, box) => {\n if (x < 0 || y < 0 || x >= width || y >= height) return;\n const key = `${x},${y}`;\n const old = map.get(key);\n if (old && old !== box.id) fail(`Nested box interiors overlap at (${x},${y}).`, 'BOX_OVERLAP');\n map.set(key, box.id);\n };\n for (const box of boxes) {\n // A subgraph is a container; routes between its children legitimately\n // occupy its interior. Node interiors remain obstacles.\n if (box.kind === 'subgraph') continue;\n for (let y = box.y + 1; y < box.y + box.height - 1; y += 1) {\n for (let x = box.x + 1; x < box.x + box.width - 1; x += 1) add(x, y, box);\n }\n }\n return map;\n}\n\nfunction buildNodeBorderMap(boxes, width, height) {\n const map = new Map();\n for (const box of boxes) {\n if (box.kind === 'subgraph') continue;\n for (const { x, y } of boxBorderCells(box, 'ascii')) {\n if (x >= 0 && y >= 0 && x < width && y < height) map.set(`${x},${y}`, box.id);\n }\n }\n return map;\n}\n\nfunction buildBoxBorderMap(boxes, width, height) {\n const map = new Map();\n for (const box of boxes) {\n for (const { x, y } of boxBorderCells(box, 'ascii')) {\n if (x >= 0 && y >= 0 && x < width && y < height) map.set(`${x},${y}`, box.id);\n }\n }\n return map;\n}\n\nfunction buildEndpointOwners(edges) {\n const map = new Map();\n for (const edge of edges) {\n for (const point of [edge.points[0], edge.points.at(-1)]) {\n const key = `${point.x},${point.y}`;\n if (!map.has(key)) map.set(key, new Set());\n map.get(key).add(edge.id);\n }\n }\n return map;\n}\n\nfunction drawEdge(grid, edge, interior, nodeBorders, boxBorders, endpointOwners, labels, charset) {\n if (edge.stroke === 'invisible') return;\n const points = edge.points;\n const endpoints = new Set([`${points[0].x},${points[0].y}`, `${points[points.length - 1].x},${points[points.length - 1].y}`]);\n const legitimateSelfLoop = points[0].x === points.at(-1).x && points[0].y === points.at(-1).y\n && boxBorders.has(`${points[0].x},${points[0].y}`);\n const cells = new Map();\n const add = (x, y, directions, segmentIndex = -1) => {\n const cell = grid[y]?.[x];\n if (!cell) fail(`Edge ${edge.id} lies outside the layout.`, 'LAYOUT_CLIP');\n if (interior.has(`${x},${y}`)) fail(`Edge ${edge.id} passes through a box interior at (${x},${y}).`, 'EDGE_BOX_COLLISION');\n if (nodeBorders.has(`${x},${y}`) && !endpoints.has(`${x},${y}`)) fail(`Edge ${edge.id} crosses a non-endpoint node border at (${x},${y}).`, 'EDGE_BOX_COLLISION');\n const key = `${x},${y}`;\n let route = cells.get(key);\n if (!route) { route = { dirs: new Set(), edgeIds: new Set(), stroke: edge.stroke, segmentIndices: new Set() }; cells.set(key, route); }\n for (const direction of directions) route.dirs.add(direction);\n route.edgeIds.add(edge.id);\n route.segmentIndices.add(segmentIndex);\n if (strokeRank(edge.stroke) > strokeRank(route.stroke)) route.stroke = edge.stroke;\n };\n if (points.length === 1) add(points[0].x, points[0].y, []);\n for (let i = 1; i < points.length; i += 1) {\n const a = points[i - 1];\n const b = points[i];\n const dx = Math.sign(b.x - a.x);\n const dy = Math.sign(b.y - a.y);\n const direction = dx ? (dx > 0 ? 'right' : 'left') : (dy > 0 ? 'down' : 'up');\n const reverse = opposite(direction);\n const count = Math.max(Math.abs(b.x - a.x), Math.abs(b.y - a.y));\n for (let step = 0; step <= count; step += 1) {\n const x = a.x + dx * step;\n const y = a.y + dy * step;\n add(x, y, step === 0 ? [direction] : step === count ? [reverse] : [direction, reverse], i - 1);\n }\n }\n for (const [key, route] of cells) {\n const segments = [...route.segmentIndices].filter((index) => index >= 0).sort((a, b) => a - b);\n const endpointBorder = endpointOwners.get(key)?.has(edge.id) && boxBorders.has(key);\n if (segments.length > 1 && segments.at(-1) - segments[0] > 1 && !endpointBorder && !legitimateSelfLoop) {\n fail(`Edge ${edge.id} crosses itself at (${key.replace(',', ',')}).`, 'ROUTE_COLLISION');\n }\n }\n for (const [key, route] of cells) {\n const [x, y] = key.split(',').map(Number);\n const cell = grid[y][x];\n if (cell.kind === 'label' || cell.kind === 'box-label') fail(`Edge ${edge.id} overwrites a label at (${x},${y}).`, 'EDGE_LABEL_COLLISION');\n if (!cell.edge) cell.edge = { dirs: new Set(), edgeIds: new Set(), stroke: route.stroke, edgeRoutes: new Map() };\n for (const [otherId, otherRoute] of cell.edge.edgeRoutes) {\n const allowed = sharedIntersection(key, edge.id, otherId, boxBorders, endpointOwners);\n if (!allowed && !compatibleCrossing(route.dirs, otherRoute.dirs)) {\n fail(`Edges ${otherId} and ${edge.id} overlap ambiguously at (${x},${y}).`, 'ROUTE_COLLISION');\n }\n }\n cell.edge.edgeRoutes.set(edge.id, { dirs: new Set(route.dirs), segmentIndices: new Set(route.segmentIndices) });\n for (const d of route.dirs) cell.edge.dirs.add(d);\n for (const id of route.edgeIds) cell.edge.edgeIds.add(id);\n if (strokeRank(route.stroke) > strokeRank(cell.edge.stroke)) cell.edge.stroke = route.stroke;\n cell.kind = 'edge';\n cell.glyph = edgeGlyph(cell.edge.dirs, cell.edge.edgeIds, cell.edge.stroke, charset);\n }\n // A route may intentionally run through another edge label. The label is\n // rendered later and remains authoritative; its cells are reserved here so\n // box drawing cannot erase it.\n for (const label of labels) {\n for (let y = label.y; y < label.y + label.height; y += 1) for (let x = label.x; x < label.x + label.width; x += 1) {\n if (grid[y]?.[x]?.kind === 'box-label') fail(`Edge label overlaps a box label at (${x},${y}).`, 'LABEL_COLLISION');\n }\n }\n}\n\nfunction sharedIntersection(key, firstId, secondId, boxBorders, endpointOwners) {\n const owners = endpointOwners.get(key);\n if (owners?.has(firstId) && owners.has(secondId)) return true;\n // A single shared border cell is a valid place for a compound edge to\n // enter/leave a subgraph. Longer collinear overlaps are still rejected by\n // the direction check at their subsequent cells.\n return boxBorders.has(key) && (!owners || owners.size === 0);\n}\n\nfunction compatibleCrossing(first, second) {\n const firstHorizontal = first.has('left') && first.has('right') && !first.has('up') && !first.has('down');\n const firstVertical = first.has('up') && first.has('down') && !first.has('left') && !first.has('right');\n const secondHorizontal = second.has('left') && second.has('right') && !second.has('up') && !second.has('down');\n const secondVertical = second.has('up') && second.has('down') && !second.has('left') && !second.has('right');\n return (firstHorizontal && secondVertical) || (firstVertical && secondHorizontal);\n}\n\nfunction drawBox(grid, box, charset) {\n const cells = boxBorderCells(box, charset);\n for (const { x, y, glyph } of cells) {\n const cell = grid[y]?.[x];\n if (!cell) fail(`Box ${box.id} lies outside the layout.`, 'LAYOUT_CLIP');\n if (cell.kind === 'box-label' || cell.kind === 'label') fail(`Box ${box.id} overwrites a label at (${x},${y}).`, 'BOX_LABEL_COLLISION');\n const route = cell.edge;\n if (route && box.kind !== 'subgraph') {\n // Node endpoints retain their border glyph. Intermediate node-border\n // crossings are rejected while the edge is rasterized.\n cell.edge = null;\n }\n cell.kind = 'box';\n cell.glyph = route && box.kind === 'subgraph' ? borderWithRoute(glyph, route, charset) : glyph;\n }\n const innerWidth = Math.max(0, box.width - 2);\n const innerHeight = Math.max(0, box.height - 2);\n const lines = box.lines;\n if (lines.length > innerHeight) fail(`Box ${box.id} does not have enough height for its label.`, 'BOX_LABEL_COLLISION');\n // Mermaid puts a container title in the header row. Centering a very tall\n // subgraph title would place it directly on a child route.\n const top = box.kind === 'subgraph'\n ? box.y + 1\n : box.y + 1 + Math.floor((innerHeight - lines.length) / 2);\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i];\n const lineWidth = displayWidth(line);\n if (lineWidth > innerWidth) fail(`Box ${box.id} does not have enough width for its label.`, 'BOX_LABEL_COLLISION');\n const left = box.x + 1 + Math.floor((innerWidth - lineWidth) / 2);\n putText(grid, left, top + i, line, 'box-label', `box ${box.id}`);\n }\n}\n\nfunction boxBorderCells(box, charset) {\n const out = [];\n const { x, y, width: w, height: h } = box;\n const shape = String(box.shape ?? 'rect').toLowerCase();\n const glyphs = charset === 'unicode';\n const put = (xx, yy, glyph) => out.push({ x: xx, y: yy, glyph });\n if (w === 1 || h === 1) {\n for (let yy = y; yy < y + h; yy += 1) for (let xx = x; xx < x + w; xx += 1) put(xx, yy, glyphs ? '\u2502' : '|');\n return out;\n }\n const rounded = shape === 'round' || shape === 'rounded' || shape === 'stadium' || shape === 'circle';\n if (rounded) {\n const c = glyphs ? ['\u256D', '\u256E', '\u2570', '\u256F'] : ['/', '\\\\', '\\\\', '/'];\n put(x, y, c[0]); put(x + w - 1, y, c[1]); put(x, y + h - 1, c[2]); put(x + w - 1, y + h - 1, c[3]);\n for (let xx = x + 1; xx < x + w - 1; xx += 1) { put(xx, y, glyphs ? '\u2500' : '-'); put(xx, y + h - 1, glyphs ? '\u2500' : '-'); }\n for (let yy = y + 1; yy < y + h - 1; yy += 1) { put(x, yy, glyphs ? '\u2502' : '|'); put(x + w - 1, yy, glyphs ? '\u2502' : '|'); }\n return out;\n }\n if (shape === 'diamond' || shape === 'rhombus') {\n // A terminal has no diagonal drawing primitive. This slanted-corner\n // approximation keeps a complete bounding border, so ELK ports landing\n // on any side remain visibly connected.\n const slash = glyphs ? '\u2571' : '/';\n const back = glyphs ? '\u2572' : '\\\\';\n const vertical = glyphs ? '\u2502' : '|';\n for (let xx = x + 1; xx < x + w - 1; xx += 1) { put(xx, y, glyphs ? '\u2500' : '-'); put(xx, y + h - 1, glyphs ? '\u2500' : '-'); }\n put(x, y, slash); put(x + w - 1, y, back); put(x, y + h - 1, back); put(x + w - 1, y + h - 1, slash);\n for (let yy = y + 1; yy < y + h - 1; yy += 1) {\n const left = yy === y + Math.floor((h - 1) / 2) ? (glyphs ? '\u25C1' : '<') : vertical;\n const right = yy === y + Math.floor((h - 1) / 2) ? (glyphs ? '\u25B7' : '>') : vertical;\n put(x, yy, left); put(x + w - 1, yy, right);\n }\n return out;\n }\n const corner = glyphs ? ['\u250C', '\u2510', '\u2514', '\u2518'] : ['+', '+', '+', '+'];\n put(x, y, corner[0]); put(x + w - 1, y, corner[1]); put(x, y + h - 1, corner[2]); put(x + w - 1, y + h - 1, corner[3]);\n for (let xx = x + 1; xx < x + w - 1; xx += 1) { put(xx, y, glyphs ? '\u2500' : '-'); put(xx, y + h - 1, glyphs ? '\u2500' : '-'); }\n for (let yy = y + 1; yy < y + h - 1; yy += 1) { put(x, yy, glyphs ? '\u2502' : '|'); put(x + w - 1, yy, glyphs ? '\u2502' : '|'); }\n return out;\n}\n\nfunction borderWithRoute(border, route, charset) {\n const horizontal = route.dirs.has('left') || route.dirs.has('right');\n const vertical = route.dirs.has('up') || route.dirs.has('down');\n // Preserve ordinary endpoint borders. A route that passes through a\n // container border in both directions gets an explicit junction glyph so\n // the connection cannot disappear behind the border.\n if (horizontal && vertical) return charset === 'unicode' ? '\u253C' : '+';\n if (horizontal && route.dirs.has('left') && route.dirs.has('right')) return charset === 'unicode' ? '\u2500' : '-';\n if (vertical && route.dirs.has('up') && route.dirs.has('down')) return charset === 'unicode' ? '\u2502' : '|';\n return border;\n}\n\nfunction drawLabel(grid, label, owner, edgeId) {\n for (let i = 0; i < label.lines.length; i += 1) putText(grid, label.x, label.y + i, label.lines[i], 'label', owner, false, edgeId);\n}\n\nfunction putText(grid, x, y, text, kind, owner, allowRoute = false, allowedEdgeId = undefined) {\n if (!grid[y]) fail(`${owner} lies outside the layout.`, 'LAYOUT_CLIP');\n let column = x;\n let previous = null;\n for (const grapheme of segment(text)) {\n const w = Math.max(0, displayWidth(grapheme));\n if (w === 0) {\n if (previous) previous.glyph += grapheme;\n continue;\n }\n if (column < 0 || column + w > grid[y].length) fail(`${owner} lies outside the layout.`, 'LAYOUT_CLIP');\n for (let offset = 0; offset < w; offset += 1) {\n const cell = grid[y][column + offset];\n // Edge labels are allowed to occupy the route's cells: the label is\n // the visible representation there. Node and box labels, borders, and\n // arrows cannot be overwritten.\n const routeLabel = (kind === 'label' || allowRoute) && cell.kind === 'edge'\n && (!allowedEdgeId || (cell.edge?.edgeIds.size === 1 && cell.edge.edgeIds.has(allowedEdgeId)));\n if (!routeLabel && (cell.kind === 'box' || cell.kind === 'edge' || cell.kind === 'arrow' || cell.kind === 'label' || cell.kind === 'box-label')) {\n fail(`${owner} collides at (${column + offset},${y}).`, 'LABEL_COLLISION');\n }\n cell.kind = kind; cell.glyph = offset === 0 ? grapheme : ''; cell.wide = offset === 0 && w > 1;\n }\n previous = grid[y][column];\n column += w;\n }\n}\n\nfunction drawArrows(grid, edge, boxes, charset) {\n if (edge.stroke === 'invisible' || edge.points.length < 2) return;\n const place = (kind, arrow, at, toward) => {\n if (!arrow || arrow === 'none') return;\n const cell = grid[at.y]?.[at.x];\n if (!cell) fail(`Arrow for edge ${edge.id} lies outside the layout.`, 'LAYOUT_CLIP');\n if (cell.kind === 'box-label' || cell.kind === 'label') fail(`Arrow for edge ${edge.id} overwrites a label.`, 'EDGE_LABEL_COLLISION');\n if (cell.kind === 'box') fail(`Arrow for edge ${edge.id} overwrites a box border.`, 'EDGE_BOX_COLLISION');\n if (cell.kind === 'arrow') fail(`Arrow for edge ${edge.id} overlaps another arrow.`, 'ARROW_COLLISION');\n if (cell.kind === 'edge' && cell.edge && [...cell.edge.edgeIds].some((id) => id !== edge.id)) {\n fail(`Arrow for edge ${edge.id} hides another route.`, 'ARROW_COLLISION');\n }\n const glyph = arrowGlyph(arrow, toward, charset);\n cell.kind = 'arrow'; cell.glyph = glyph; cell.wide = false;\n };\n const first = distinctPair(edge.points, true);\n const last = distinctPair(edge.points, false);\n if (first) place('start', edge.arrowStart, first.next, opposite(directionBetween(first.current, first.next)));\n if (last) place('end', edge.arrowEnd, last.previous, directionBetween(last.previous, last.current));\n}\n\nfunction distinctPair(points, start) {\n if (start) {\n for (let i = 1; i < points.length; i += 1) if (points[i].x !== points[0].x || points[i].y !== points[0].y) return { current: points[0], next: oneStep(points[0], points[i]) };\n } else {\n for (let i = points.length - 2; i >= 0; i -= 1) if (points[i].x !== points[points.length - 1].x || points[i].y !== points[points.length - 1].y) return { previous: oneStep(points[points.length - 1], points[i]), current: points[points.length - 1] };\n }\n return null;\n}\n\nfunction oneStep(end, toward) {\n return { x: end.x + Math.sign(toward.x - end.x), y: end.y + Math.sign(toward.y - end.y) };\n}\n\nfunction directionBetween(a, b) {\n if (b.x > a.x) return 'right'; if (b.x < a.x) return 'left'; if (b.y > a.y) return 'down'; return 'up';\n}\n\nfunction edgeGlyph(dirs, edgeIds, stroke, charset) {\n if (dirs.size === 0) return charset === 'unicode' ? '\u00B7' : '.';\n const has = (d) => dirs.has(d);\n if (dirs.size >= 4) return charset === 'unicode' ? (edgeIds.size > 1 ? '\u2573' : '\u253C') : (edgeIds.size > 1 ? '#' : '+');\n if (dirs.size === 3) return charset === 'unicode' ? '\u253C' : '+';\n if (dirs.size === 2 && has('left') && has('right')) return charset === 'unicode' ? unicodeStroke(stroke, 'h') : asciiStroke(stroke, 'h');\n if (dirs.size === 2 && has('up') && has('down')) return charset === 'unicode' ? unicodeStroke(stroke, 'v') : asciiStroke(stroke, 'v');\n if (dirs.size === 2) {\n if (charset === 'ascii') return '+';\n if (has('right') && has('down')) return '\u250C'; if (has('left') && has('down')) return '\u2510'; if (has('right') && has('up')) return '\u2514'; return '\u2518';\n }\n return charset === 'unicode' ? (has('left') || has('right') ? unicodeStroke(stroke, 'h') : unicodeStroke(stroke, 'v')) : (has('left') || has('right') ? asciiStroke(stroke, 'h') : asciiStroke(stroke, 'v'));\n}\n\nfunction asciiStroke(stroke, axis) { return stroke === 'thick' ? (axis === 'h' ? '=' : '#') : stroke === 'dotted' ? (axis === 'h' ? ':' : ':') : (axis === 'h' ? '-' : '|'); }\nfunction unicodeStroke(stroke, axis) { return stroke === 'thick' ? (axis === 'h' ? '\u2501' : '\u2503') : stroke === 'dotted' ? (axis === 'h' ? '\u2504' : '\u2506') : (axis === 'h' ? '\u2500' : '\u2502'); }\nfunction strokeRank(stroke) { return stroke === 'thick' ? 3 : stroke === 'normal' ? 2 : stroke === 'dotted' ? 1 : 0; }\nfunction opposite(direction) { return ({ left: 'right', right: 'left', up: 'down', down: 'up' })[direction]; }\n\nfunction arrowGlyph(arrow, direction, charset) {\n if (arrow === 'circle') return charset === 'unicode' ? '\u25CB' : 'o';\n if (arrow === 'cross') return charset === 'unicode' ? '\u00D7' : 'x';\n if (charset === 'unicode') return ({ left: '\u25C0', right: '\u25B6', up: '\u25B2', down: '\u25BC' })[direction] ?? '\u25B6';\n return ({ left: '<', right: '>', up: '^', down: 'v' })[direction] ?? '>';\n}\n\nfunction stringifyGrid(grid) {\n if (!grid.length) return '';\n let left = Infinity;\n let right = -1;\n for (const row of grid) {\n for (let x = 0; x < row.length; x += 1) {\n if (row[x].glyph && row[x].glyph !== ' ') { left = Math.min(left, x); right = Math.max(right, x); }\n }\n }\n if (right < 0) return '';\n // An empty glyph is a continuation cell reserved by a wide grapheme; it\n // contributes no extra character. Ordinary empty cells contain a literal\n // space and must remain available for routing and alignment.\n const lines = grid.slice().map((row) => row.slice(left, right + 1).map((cell) => cell.glyph === '' ? '' : (cell.glyph || ' ')).join('').replace(/[ \\t]+$/u, ''));\n while (lines.length && lines[lines.length - 1] === '') lines.pop();\n while (lines.length && lines[0] === '') lines.shift();\n return lines.join('\\n');\n}\n\nfunction segment(value) {\n if (typeof Intl !== 'undefined' && Intl.Segmenter) return Array.from(new Intl.Segmenter(undefined, { granularity: 'grapheme' }).segment(value), (item) => item.segment);\n return Array.from(value);\n}\n\nfunction fail(message, code) { throw new FlowInkError(message, { code }); }\n\nexport default rasterize;\n", "import { parse } from './parse.js';\nimport { layout } from './layout.js';\nimport { rasterize } from './rasterize.js';\nimport { FlowInkError } from './errors.js';\nexport { parse, FlowInkError };\n/** @typedef {import('./types.js').FlowGraph} FlowGraph */\n/** @typedef {import('./types.js').RenderOptions} RenderOptions */\n\n/**\n * Render a Mermaid 12.0.0 flowchart as a plain text diagram.\n * @param {string} source Mermaid flowchart source.\n * @param {RenderOptions} [options]\n * @returns {Promise<string>}\n */\nexport async function render(source, options = {}) {\n if (!options || typeof options !== 'object') {\n throw new FlowInkError('Render options must be an object.', { code: 'INVALID_OPTIONS' });\n }\n const charset = options.charset ?? 'ascii';\n if (charset !== 'ascii' && charset !== 'unicode') {\n throw new FlowInkError('charset must be \"ascii\" or \"unicode\".', { code: 'INVALID_OPTIONS' });\n }\n const graph = parse(source);\n try {\n return rasterize(await layout(graph), { charset });\n } catch (cause) {\n if (cause instanceof FlowInkError) throw cause;\n throw new FlowInkError(`Cannot lay out this flowchart: ${cause instanceof Error ? cause.message : String(cause)}`, { code: 'LAYOUT_ERROR', cause });\n }\n}\n"],
5
+ "mappings": ";AA0EA,IAAI,UAAU,WAAU;AACxB,MAAI,IAAE,SAAS,GAAE,GAAEA,IAAE,GAAE;AAAC,SAAIA,KAAEA,MAAG,CAAC,GAAE,IAAE,EAAE,QAAO,KAAIA,GAAE,EAAE,CAAC,CAAC,IAAE,EAAE;AAAC,WAAOA;AAAA,EAAC,GAAE,MAAI,CAAC,GAAE,CAAC,GAAE,MAAI,CAAC,GAAE,CAAC,GAAE,MAAI,CAAC,GAAE,CAAC,GAAE,MAAI,CAAC,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,MAAI,CAAC,GAAE,CAAC,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,MAAI,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,MAAI,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,MAAI,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,MAAI,CAAC,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,MAAI,CAAC,GAAE,GAAG,GAAE,MAAI,CAAC,GAAE,GAAG,GAAE,MAAI,CAAC,GAAE,GAAG,GAAE,MAAI,CAAC,GAAE,GAAG,GAAE,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,MAAI,CAAC,GAAE,GAAG,GAAE,MAAI,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAE,EAAE,GAAE,OAAK,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,GAAE,GAAG,GAAE,OAAK,CAAC,IAAG,KAAI,GAAG,GAAE,OAAK,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,OA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AC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,CAAC;AAAA,IACt0C,eAAe,SAAS,UAAU,QAAQ,QAAQ,UAAU,IAAI,SAAyB,IAAiB,IAAiB;AAG3H,UAAI,KAAK,GAAG,SAAS;AACrB,cAAQ,SAAS;AAAA,QACjB,KAAK;AACJ,eAAK,IAAI,CAAC;AACX;AAAA,QACA,KAAK;AAEA,cAAG,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,SAAS,GAAE;AAC3C,eAAG,KAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;AAAA,UACxB;AACA,eAAK,IAAE,GAAG,KAAG,CAAC;AACnB;AAAA,QACA,KAAK;AAAA,QAAG,KAAK;AACb,eAAK,IAAE,GAAG,EAAE;AACZ;AAAA,QACA,KAAK;AACJ,aAAG,aAAa,IAAI;AAAE,eAAK,IAAI;AAChC;AAAA,QACA,KAAK;AACJ,aAAG,aAAa,GAAG,KAAG,CAAC,CAAC;AAAE,eAAK,IAAI,GAAG,KAAG,CAAC;AAC3C;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,GAAG,KAAG,CAAC,EAAE;AACjB;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AAAA,QAAI,KAAK;AAAA,QAAI,KAAK;AAAA,QAAI,KAAK;AACzC,eAAK,IAAE,CAAC;AACR;AAAA,QACA,KAAK;AACL,eAAK,IAAE,GAAG,YAAY,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,CAAC;AAChD;AAAA,QACA,KAAK;AACL,eAAK,IAAE,GAAG,YAAY,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,CAAC;AAChD;AAAA,QACA,KAAK;AACL,eAAK,IAAE,GAAG,YAAY,QAAU,GAAG,KAAG,CAAC,GAAE,MAAS;AAClD;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,GAAG,EAAE,EAAE,KAAK;AAAE,aAAG,YAAY,KAAK,CAAC;AAC3C;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AACb,eAAK,IAAE,GAAG,EAAE,EAAE,KAAK;AAAE,aAAG,kBAAkB,KAAK,CAAC;AACjD;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,KAAG,CAAC,IAAI,GAAG,EAAE;AAC1B;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,EAAE;AACf;AAAA,QACA,KAAK;AAC8D,aAAG,UAAU,GAAG,KAAG,CAAC,EAAE,GAAG,KAAG,CAAC,EAAE,SAAO,CAAC,GAAE,QAAU,QAAU,QAAW,QAAU,QAAW,QAAU,GAAG,EAAE,CAAC;AAAG,aAAG,QAAQ,GAAG,KAAG,CAAC,EAAE,MAAK,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,CAAC;AAAG,eAAK,IAAI,EAAE,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,KAAG,CAAC,EAAE,OAAO,GAAG,KAAG,CAAC,EAAE,KAAK,EAAE;AAClS;AAAA,QACA,KAAK;AACyC,aAAG,QAAQ,GAAG,KAAG,CAAC,EAAE,MAAK,GAAG,EAAE,GAAE,GAAG,KAAG,CAAC,CAAC;AAAG,eAAK,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,KAAG,CAAC,EAAE,KAAK,EAAE;AACvJ;AAAA,QACA,KAAK;AAC6C,aAAG,QAAQ,GAAG,KAAG,CAAC,EAAE,MAAK,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,CAAC;AAAG,eAAK,IAAI,EAAE,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,KAAG,CAAC,EAAE,OAAO,GAAG,KAAG,CAAC,EAAE,KAAK,EAAE;AACjK;AAAA,QACA,KAAK;AAC2D,eAAK,IAAI,EAAC,MAAM,GAAG,KAAG,CAAC,GAAG,OAAM,GAAG,KAAG,CAAC,EAAE;AACzG;AAAA,QACA,KAAK;AAGG,aAAG,UAAU,GAAG,KAAG,CAAC,EAAE,GAAG,KAAG,CAAC,EAAE,SAAO,CAAC,GAAE,QAAU,QAAU,QAAW,QAAU,QAAW,QAAU,GAAG,EAAE,CAAC;AAC7G,eAAK,IAAI,EAAC,MAAM,GAAG,KAAG,CAAC,GAAG,OAAM,GAAG,KAAG,CAAC,GAAG,WAAW,GAAG,EAAE,EAAC;AAEnE;AAAA,QACA,KAAK;AACwD,eAAK,IAAI,EAAC,MAAM,GAAG,EAAE,GAAG,OAAM,GAAG,EAAE,EAAE;AAClG;AAAA,QACA,KAAK;AAC6B,eAAK,IAAI,CAAC,GAAG,EAAE,CAAC;AAClD;AAAA,QACA,KAAK;AACH,aAAG,UAAU,GAAG,KAAG,CAAC,EAAE,GAAG,KAAG,CAAC,EAAE,SAAO,CAAC,GAAE,QAAU,QAAU,QAAW,QAAU,QAAW,QAAU,GAAG,KAAG,CAAC,CAAC;AAAG,eAAK,IAAI,GAAG,KAAG,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC;AACnJ;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,KAAG,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC;AAChC;AAAA,QACA,KAAK;AAC+B,eAAK,IAAI,GAAG,EAAE;AAClD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,SAAS,GAAG,KAAG,CAAC,GAAE,GAAG,EAAE,CAAC;AAC7C;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,QAAQ;AACzD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,cAAc;AAC/D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,QAAQ;AACzD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,SAAS;AAC1D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,SAAS;AAC1D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,YAAY;AAC7D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,QAAO,QAAU,QAAU,QAAW,OAAO,YAAY,CAAC,CAAC,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjI;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,UAAU;AAC3D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,OAAO;AACxD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,SAAS;AAC1D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,SAAS;AAC1D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,KAAK;AACtD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,WAAW;AAC5D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,eAAe;AAChE;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,YAAY;AAC7D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,GAAE,WAAW;AAC5D;AAAA,QACA,KAAK;AAC4B,eAAK,IAAI,GAAG,EAAE;AAAE,aAAG,UAAU,GAAG,EAAE,CAAC;AACpE;AAAA,QACA,KAAK;AACL,aAAG,KAAG,CAAC,EAAE,OAAO,GAAG,EAAE;AAAE,eAAK,IAAI,GAAG,KAAG,CAAC;AACvC;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AACd,aAAG,KAAG,CAAC,EAAE,OAAO,GAAG,KAAG,CAAC;AAAE,eAAK,IAAI,GAAG,KAAG,CAAC;AACzC;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,EAAE;AACd;AAAA,QACA,KAAK;AACL,cAAI,MAAM,GAAG,aAAa,GAAG,EAAE,GAAG,GAAG,KAAG,CAAC,CAAC;AAAG,eAAK,IAAI,EAAC,QAAO,IAAI,MAAK,UAAS,IAAI,QAAO,UAAS,IAAI,QAAO,QAAO,GAAG,KAAG,CAAC,EAAC;AAC9H;AAAA,QACA,KAAK;AACL,cAAI,MAAM,GAAG,aAAa,GAAG,EAAE,GAAG,GAAG,KAAG,CAAC,CAAC;AAAG,eAAK,IAAI,EAAC,QAAO,IAAI,MAAK,UAAS,IAAI,QAAO,UAAS,IAAI,QAAO,QAAO,GAAG,KAAG,CAAC,GAAG,MAAM,GAAG,KAAG,CAAC,EAAC;AAC9I;AAAA,QACA,KAAK;AACL,eAAK,IAAE,EAAC,MAAK,GAAG,EAAE,GAAG,MAAK,OAAM;AAChC;AAAA,QACA,KAAK;AACL,eAAK,IAAE,EAAC,MAAK,GAAG,KAAG,CAAC,EAAE,OAAK,KAAG,GAAG,EAAE,GAAG,MAAK,GAAG,KAAG,CAAC,EAAE,KAAI;AACxD;AAAA,QACA,KAAK;AACL,eAAK,IAAE,EAAC,MAAM,GAAG,EAAE,GAAG,MAAM,SAAQ;AACpC;AAAA,QACA,KAAK;AACL,eAAK,IAAE,EAAC,MAAK,GAAG,EAAE,GAAG,MAAK,WAAU;AACpC;AAAA,QACA,KAAK;AACL,cAAI,MAAM,GAAG,aAAa,GAAG,EAAE,CAAC;AAAE,eAAK,IAAI,EAAC,QAAO,IAAI,MAAK,UAAS,IAAI,QAAO,UAAS,IAAI,OAAM;AACnG;AAAA,QACA,KAAK;AACL,cAAI,MAAM,GAAG,aAAa,GAAG,EAAE,CAAC;AAAE,eAAK,IAAI,EAAC,QAAO,IAAI,MAAK,UAAS,IAAI,QAAO,UAAS,IAAI,QAAQ,MAAM,GAAG,KAAG,CAAC,EAAC;AACnH;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAChB;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAK,GAAG,EAAE,GAAG,MAAM,OAAM;AAClC;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAK,GAAG,KAAG,CAAC,EAAE,OAAK,KAAG,GAAG,EAAE,GAAG,MAAM,GAAG,KAAG,CAAC,EAAE,KAAI;AAC1D;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,EAAC,MAAM,GAAG,EAAE,GAAG,MAAM,SAAQ;AACvC;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AACb,eAAK,IAAE,EAAC,MAAM,GAAG,EAAE,GAAG,MAAM,WAAU;AACvC;AAAA,QACA,KAAK;AACL,eAAK,IAAE,EAAC,MAAK,GAAG,EAAE,GAAG,MAAM,OAAM;AACjC;AAAA,QACA,KAAK;AACL,eAAK,IAAE,EAAC,MAAK,GAAG,KAAG,CAAC,EAAE,OAAK,KAAG,GAAG,EAAE,GAAG,MAAM,GAAG,KAAG,CAAC,EAAE,KAAI;AACzD;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAM,GAAG,EAAE,GAAG,MAAM,OAAM;AACnC;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,SAAS,GAAG,KAAG,CAAC,GAAE,GAAG,EAAE,CAAC;AAC7C;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,SAAS,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAC9C;AAAA,QACA,KAAK;AAAA,QAAK,KAAK;AACf,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,cAAc,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AACnD;AAAA,QACA,KAAK;AAAA,QAAK,KAAK;AACf,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,cAAc,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AACrF;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,cAAc,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAC7D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,cAAc,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAC/F;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAC7C;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAC/E;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AACvD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AACzF;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAC7C;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAC/E;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AACvD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,QAAQ,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AACzF;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,UAAU,GAAG,KAAG,CAAC,GAAE,QAAU,QAAU,GAAG,EAAE,CAAC;AAClE;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,WAAW,CAAC,GAAG,KAAG,CAAC,CAAC,GAAE,GAAG,EAAE,CAAC;AACjD;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAE,GAAG,EAAE,CAAC;AAC/C;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,sBAAsB,CAAC,GAAG,KAAG,CAAC,CAAC,GAAE,GAAG,KAAG,CAAC,CAAC;AAAE,aAAG,WAAW,CAAC,GAAG,KAAG,CAAC,CAAC,GAAE,GAAG,EAAE,CAAC;AAC/F;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,sBAAsB,GAAG,KAAG,CAAC,GAAE,GAAG,KAAG,CAAC,CAAC;AAAE,aAAG,WAAW,GAAG,KAAG,CAAC,GAAE,GAAG,EAAE,CAAC;AAC3F;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,sBAAsB,CAAC,GAAG,KAAG,CAAC,CAAC,GAAE,GAAG,EAAE,CAAC;AAC5D;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC;AAAE,aAAG,sBAAsB,GAAG,KAAG,CAAC,GAAE,GAAG,EAAE,CAAC;AAC1D;AAAA,QACA,KAAK;AAAA,QAAK,KAAK;AACf,eAAK,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB;AAAA,QACA,KAAK;AAAA,QAAK,KAAK;AACf,aAAG,KAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;AAAE,eAAK,IAAI,GAAG,KAAG,CAAC;AACtC;AAAA,QACA,KAAK;AACL,eAAK,IAAI,GAAG,KAAG,CAAC,IAAI,GAAG,EAAE;AACzB;AAAA,QACA,KAAK;AACL,eAAK,IAAE,GAAG,EAAE;AACZ;AAAA,QACA,KAAK;AACL,eAAK,IAAE,GAAG,KAAG,CAAC,IAAE,KAAG,GAAG,EAAE;AACxB;AAAA,QACA,KAAK;AACL,eAAK,IAAE,GAAG,KAAG,CAAC,IAAE,KAAG,GAAG,EAAE;AACxB;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAK,OAAO,OAAM,KAAI;AAC/B;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAK,OAAO,OAAM,KAAI;AAC/B;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAK,OAAO,OAAM,KAAI;AAC/B;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAK,OAAO,OAAM,KAAI;AAC/B;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,EAAC,MAAK,OAAO,OAAM,KAAI;AAC/B;AAAA,MACA;AAAA,IACA;AAAA,IACA,OAAO,CAAC,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,GAAE,CAAC,CAAC,EAAC,GAAE,EAAE,KAAI,KAAI,EAAC,GAAE,EAAC,CAAC,GAAE,EAAC,GAAE,GAAE,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,GAAE,GAAE,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,KAAI,IAAG,IAAG,IAAG,GAAE,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,KAAI,IAAG,GAAE,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,KAAI,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,KAAI,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,GAAE,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,KAAI,IAAG,IAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,MAAK,KAAI,EAAC,GAAE,IAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,KAAI,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,KAAI,CAAC,GAAE,GAAG,GAAE,KAAI,KAAI,KAAI,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,KAAI,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,KAAI,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,KAAI,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,MAAK,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,MAAK,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,KAAI,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,MAAK,KAAI,EAAC,GAAE,IAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,CAAC,GAAE,GAAG,GAAE,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,CAAC,GAAE,GAAG,GAAE,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,KAAI,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,KAAI,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAK,KAAI,EAAC,GAAE,IAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,GAAE,EAAC,KAAI,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,CAAC,GAAE,EAAE,MAAK,CAAC,GAAE,GAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,GAAE,IAAG,GAAE,IAAG,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,GAAE,EAAC,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAC,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,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",
6
+ "names": ["o", "parser", "parse", "lexer", "shapeData", "yaml", "yaml", "match", "segment", "end", "labelType", "key", "layout", "segment", "anchor", "inside", "key", "width", "height", "points", "y", "center", "segmentCells", "oneStep", "candidates", "layout", "fail", "key", "normalizeLabel", "distinctPair", "oneStep"]
7
+ }