{
  "version": 3,
  "sources": ["../../../src/diagrams/git/parser/gitGraph.jison", "../../../src/diagrams/git/gitGraphAst.js", "../../../src/diagrams/git/gitGraphRenderer.js", "../../../src/diagrams/git/styles.js", "../../../src/diagrams/git/gitGraphDiagram.ts"],
  "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*/\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,3],$V1=[1,6],$V2=[1,4],$V3=[1,5],$V4=[2,5],$V5=[1,12],$V6=[5,7,13,19,21,23,24,26,28,31,37,40,47],$V7=[7,13,19,21,23,24,26,28,31,37,40],$V8=[7,12,13,19,21,23,24,26,28,31,37,40],$V9=[7,13,47],$Va=[1,42],$Vb=[1,41],$Vc=[7,13,29,32,35,38,47],$Vd=[1,55],$Ve=[1,56],$Vf=[1,57],$Vg=[7,13,32,35,42,47];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"eol\":4,\"GG\":5,\"document\":6,\"EOF\":7,\":\":8,\"DIR\":9,\"options\":10,\"body\":11,\"OPT\":12,\"NL\":13,\"line\":14,\"statement\":15,\"commitStatement\":16,\"mergeStatement\":17,\"cherryPickStatement\":18,\"acc_title\":19,\"acc_title_value\":20,\"acc_descr\":21,\"acc_descr_value\":22,\"acc_descr_multiline_value\":23,\"section\":24,\"branchStatement\":25,\"CHECKOUT\":26,\"ref\":27,\"BRANCH\":28,\"ORDER\":29,\"NUM\":30,\"CHERRY_PICK\":31,\"COMMIT_ID\":32,\"STR\":33,\"PARENT_COMMIT\":34,\"COMMIT_TAG\":35,\"EMPTYSTR\":36,\"MERGE\":37,\"COMMIT_TYPE\":38,\"commitType\":39,\"COMMIT\":40,\"commit_arg\":41,\"COMMIT_MSG\":42,\"NORMAL\":43,\"REVERSE\":44,\"HIGHLIGHT\":45,\"ID\":46,\";\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"GG\",7:\"EOF\",8:\":\",9:\"DIR\",12:\"OPT\",13:\"NL\",19:\"acc_title\",20:\"acc_title_value\",21:\"acc_descr\",22:\"acc_descr_value\",23:\"acc_descr_multiline_value\",24:\"section\",26:\"CHECKOUT\",28:\"BRANCH\",29:\"ORDER\",30:\"NUM\",31:\"CHERRY_PICK\",32:\"COMMIT_ID\",33:\"STR\",34:\"PARENT_COMMIT\",35:\"COMMIT_TAG\",36:\"EMPTYSTR\",37:\"MERGE\",38:\"COMMIT_TYPE\",40:\"COMMIT\",42:\"COMMIT_MSG\",43:\"NORMAL\",44:\"REVERSE\",45:\"HIGHLIGHT\",46:\"ID\",47:\";\"},\nproductions_: [0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,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 return $$[$0]; \nbreak;\ncase 3:\n return $$[$0-1]; \nbreak;\ncase 4:\nyy.setDirection($$[$0-3]); return $$[$0-1];\nbreak;\ncase 6:\n yy.setOptions($$[$0-1]); this.$ = $$[$0]\nbreak;\ncase 7:\n$$[$0-1] +=$$[$0]; this.$=$$[$0-1]\nbreak;\ncase 9:\nthis.$ = []\nbreak;\ncase 10:\n$$[$0-1].push($$[$0]); this.$=$$[$0-1];\nbreak;\ncase 11:\nthis.$ =$$[$0-1]\nbreak;\ncase 16:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 17: case 18:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 19:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 21:\nyy.checkout($$[$0])\nbreak;\ncase 22:\nyy.branch($$[$0])\nbreak;\ncase 23:\nyy.branch($$[$0-2], $$[$0])\nbreak;\ncase 24:\nyy.cherryPick($$[$0], '', undefined)\nbreak;\ncase 25:\nyy.cherryPick($$[$0-2], '', undefined,$$[$0])\nbreak;\ncase 26:\nyy.cherryPick($$[$0-2], '', $$[$0])\nbreak;\ncase 27:\nyy.cherryPick($$[$0-4], '', $$[$0],$$[$0-2])\nbreak;\ncase 28:\nyy.cherryPick($$[$0-4], '', $$[$0-2],$$[$0])\nbreak;\ncase 29:\nyy.cherryPick($$[$0], '', $$[$0-2])\nbreak;\ncase 30:\nyy.cherryPick($$[$0], '', '')\nbreak;\ncase 31:\nyy.cherryPick($$[$0-2], '', '')\nbreak;\ncase 32:\nyy.cherryPick($$[$0-4], '', '',$$[$0-2])\nbreak;\ncase 33:\nyy.cherryPick($$[$0-4], '', '',$$[$0])\nbreak;\ncase 34:\nyy.cherryPick($$[$0-2], '', $$[$0-4],$$[$0])\nbreak;\ncase 35:\nyy.cherryPick($$[$0-2], '', '',$$[$0])\nbreak;\ncase 36:\nyy.merge($$[$0],'','','')\nbreak;\ncase 37:\nyy.merge($$[$0-2], $$[$0],'','')\nbreak;\ncase 38:\nyy.merge($$[$0-2],'', $$[$0],'')\nbreak;\ncase 39:\nyy.merge($$[$0-2], '','',$$[$0])\nbreak;\ncase 40:\nyy.merge($$[$0-4], $$[$0],'', $$[$0-2])\nbreak;\ncase 41:\nyy.merge($$[$0-4], '',$$[$0], $$[$0-2])\nbreak;\ncase 42:\nyy.merge($$[$0-4], '',$$[$0-2], $$[$0])\nbreak;\ncase 43:\nyy.merge($$[$0-4], $$[$0-2], $$[$0], '')\nbreak;\ncase 44:\nyy.merge($$[$0-4], $$[$0-2], '', $$[$0])\nbreak;\ncase 45:\nyy.merge($$[$0-4], $$[$0],$$[$0-2], '')\nbreak;\ncase 46:\nyy.merge($$[$0-6], $$[$0-4], $$[$0-2], $$[$0])\nbreak;\ncase 47:\nyy.merge($$[$0-6], $$[$0], $$[$0-4], $$[$0-2])\nbreak;\ncase 48:\nyy.merge($$[$0-6], $$[$0-4], $$[$0], $$[$0-2])\nbreak;\ncase 49:\nyy.merge($$[$0-6], $$[$0-2], $$[$0-4], $$[$0])\nbreak;\ncase 50:\nyy.merge($$[$0-6], $$[$0], $$[$0-2], $$[$0-4])\nbreak;\ncase 51:\nyy.merge($$[$0-6], $$[$0-2], $$[$0], $$[$0-4])\nbreak;\ncase 52:\nyy.commit($$[$0])\nbreak;\ncase 53:\nyy.commit('','',yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 54:\nyy.commit('','',$$[$0],'')\nbreak;\ncase 55:\nyy.commit('','',$$[$0],$$[$0-2])\nbreak;\ncase 56:\nyy.commit('','',$$[$0-2],$$[$0])\nbreak;\ncase 57:\nyy.commit('',$$[$0],yy.commitType.NORMAL,'')\nbreak;\ncase 58:\nyy.commit('',$$[$0-2],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 59:\nyy.commit('',$$[$0],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 60:\nyy.commit('',$$[$0-2],$$[$0],'')\nbreak;\ncase 61:\nyy.commit('',$$[$0],$$[$0-2],'')\nbreak;\ncase 62:\nyy.commit('',$$[$0-4],$$[$0-2],$$[$0])\nbreak;\ncase 63:\nyy.commit('',$$[$0-4],$$[$0],$$[$0-2])\nbreak;\ncase 64:\nyy.commit('',$$[$0-2],$$[$0-4],$$[$0])\nbreak;\ncase 65:\nyy.commit('',$$[$0],$$[$0-4],$$[$0-2])\nbreak;\ncase 66:\nyy.commit('',$$[$0],$$[$0-2],$$[$0-4])\nbreak;\ncase 67:\nyy.commit('',$$[$0-2],$$[$0],$$[$0-4])\nbreak;\ncase 68:\nyy.commit($$[$0],'',yy.commitType.NORMAL,'')\nbreak;\ncase 69:\nyy.commit($$[$0],'',yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 70:\nyy.commit($$[$0-2],'',yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 71:\nyy.commit($$[$0-2],'',$$[$0],'')\nbreak;\ncase 72:\nyy.commit($$[$0],'',$$[$0-2],'')\nbreak;\ncase 73:\nyy.commit($$[$0],$$[$0-2],yy.commitType.NORMAL,'')\nbreak;\ncase 74:\nyy.commit($$[$0-2],$$[$0],yy.commitType.NORMAL,'')\nbreak;\ncase 75:\nyy.commit($$[$0-4],'',$$[$0-2],$$[$0])\nbreak;\ncase 76:\nyy.commit($$[$0-4],'',$$[$0],$$[$0-2])\nbreak;\ncase 77:\nyy.commit($$[$0-2],'',$$[$0-4],$$[$0])\nbreak;\ncase 78:\nyy.commit($$[$0],'',$$[$0-4],$$[$0-2])\nbreak;\ncase 79:\nyy.commit($$[$0],'',$$[$0-2],$$[$0-4])\nbreak;\ncase 80:\nyy.commit($$[$0-2],'',$$[$0],$$[$0-4])\nbreak;\ncase 81:\nyy.commit($$[$0-4],$$[$0],$$[$0-2],'')\nbreak;\ncase 82:\nyy.commit($$[$0-4],$$[$0-2],$$[$0],'')\nbreak;\ncase 83:\nyy.commit($$[$0-2],$$[$0],$$[$0-4],'')\nbreak;\ncase 84:\nyy.commit($$[$0],$$[$0-2],$$[$0-4],'')\nbreak;\ncase 85:\nyy.commit($$[$0],$$[$0-4],$$[$0-2],'')\nbreak;\ncase 86:\nyy.commit($$[$0-2],$$[$0-4],$$[$0],'')\nbreak;\ncase 87:\nyy.commit($$[$0-4],$$[$0],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 88:\nyy.commit($$[$0-4],$$[$0-2],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 89:\nyy.commit($$[$0-2],$$[$0],yy.commitType.NORMAL,$$[$0-4])\nbreak;\ncase 90:\nyy.commit($$[$0],$$[$0-2],yy.commitType.NORMAL,$$[$0-4])\nbreak;\ncase 91:\nyy.commit($$[$0],$$[$0-4],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 92:\nyy.commit($$[$0-2],$$[$0-4],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 93:\nyy.commit($$[$0-6],$$[$0-4],$$[$0-2],$$[$0])\nbreak;\ncase 94:\nyy.commit($$[$0-6],$$[$0-4],$$[$0],$$[$0-2])\nbreak;\ncase 95:\nyy.commit($$[$0-6],$$[$0-2],$$[$0-4],$$[$0])\nbreak;\ncase 96:\nyy.commit($$[$0-6],$$[$0],$$[$0-4],$$[$0-2])\nbreak;\ncase 97:\nyy.commit($$[$0-6],$$[$0-2],$$[$0],$$[$0-4])\nbreak;\ncase 98:\nyy.commit($$[$0-6],$$[$0],$$[$0-2],$$[$0-4])\nbreak;\ncase 99:\nyy.commit($$[$0-4],$$[$0-6],$$[$0-2],$$[$0])\nbreak;\ncase 100:\nyy.commit($$[$0-4],$$[$0-6],$$[$0],$$[$0-2])\nbreak;\ncase 101:\nyy.commit($$[$0-2],$$[$0-6],$$[$0-4],$$[$0])\nbreak;\ncase 102:\nyy.commit($$[$0],$$[$0-6],$$[$0-4],$$[$0-2])\nbreak;\ncase 103:\nyy.commit($$[$0-2],$$[$0-6],$$[$0],$$[$0-4])\nbreak;\ncase 104:\nyy.commit($$[$0],$$[$0-6],$$[$0-2],$$[$0-4])\nbreak;\ncase 105:\nyy.commit($$[$0],$$[$0-4],$$[$0-2],$$[$0-6])\nbreak;\ncase 106:\nyy.commit($$[$0-2],$$[$0-4],$$[$0],$$[$0-6])\nbreak;\ncase 107:\nyy.commit($$[$0],$$[$0-2],$$[$0-4],$$[$0-6])\nbreak;\ncase 108:\nyy.commit($$[$0-2],$$[$0],$$[$0-4],$$[$0-6])\nbreak;\ncase 109:\nyy.commit($$[$0-4],$$[$0-2],$$[$0],$$[$0-6])\nbreak;\ncase 110:\nyy.commit($$[$0-4],$$[$0],$$[$0-2],$$[$0-6])\nbreak;\ncase 111:\nyy.commit($$[$0-2],$$[$0-4],$$[$0-6],$$[$0])\nbreak;\ncase 112:\nyy.commit($$[$0],$$[$0-4],$$[$0-6],$$[$0-2])\nbreak;\ncase 113:\nyy.commit($$[$0-2],$$[$0],$$[$0-6],$$[$0-4])\nbreak;\ncase 114:\nyy.commit($$[$0],$$[$0-2],$$[$0-6],$$[$0-4])\nbreak;\ncase 115:\nyy.commit($$[$0-4],$$[$0-2],$$[$0-6],$$[$0])\nbreak;\ncase 116:\nyy.commit($$[$0-4],$$[$0],$$[$0-6],$$[$0-2])\nbreak;\ncase 117:\nthis.$ = \"\"\nbreak;\ncase 118:\nthis.$=$$[$0]\nbreak;\ncase 119:\n this.$=yy.commitType.NORMAL;\nbreak;\ncase 120:\n this.$=yy.commitType.REVERSE;\nbreak;\ncase 121:\n this.$=yy.commitType.HIGHLIGHT;\nbreak;\n}\n},\ntable: [{3:1,4:2,5:$V0,7:$V1,13:$V2,47:$V3},{1:[3]},{3:7,4:2,5:$V0,7:$V1,13:$V2,47:$V3},{6:8,7:$V4,8:[1,9],9:[1,10],10:11,13:$V5},o($V6,[2,124]),o($V6,[2,125]),o($V6,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:$V4,10:11,13:$V5},{8:[1,15]},o($V7,[2,9],{11:16,12:[1,17]}),o($V8,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:$V4,10:11,13:$V5},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},o($V8,[2,7]),{1:[2,3]},{7:[1,36]},o($V7,[2,10]),{4:37,7:$V1,13:$V2,47:$V3},o($V7,[2,12]),o($V9,[2,13]),o($V9,[2,14]),o($V9,[2,15]),{20:[1,38]},{22:[1,39]},o($V9,[2,18]),o($V9,[2,19]),o($V9,[2,20]),{27:40,33:$Va,46:$Vb},o($V9,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:$Va,46:$Vb},{32:[1,50],35:[1,51]},{27:52,33:$Va,46:$Vb},{1:[2,4]},o($V7,[2,11]),o($V9,[2,16]),o($V9,[2,17]),o($V9,[2,21]),o($Vc,[2,122]),o($Vc,[2,123]),o($V9,[2,52]),{33:[1,53]},{39:54,43:$Vd,44:$Ve,45:$Vf},{33:[1,58]},{33:[1,59]},o($V9,[2,118]),o($V9,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},o($V9,[2,22],{29:[1,66]}),o($V9,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),o($V9,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),o($Vg,[2,119]),o($Vg,[2,120]),o($Vg,[2,121]),o($V9,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),o($V9,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:$Vd,44:$Ve,45:$Vf},{33:[1,81]},o($V9,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:$Vd,44:$Ve,45:$Vf},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:$Vd,44:$Ve,45:$Vf},{33:[1,95]},{33:[1,96]},{39:97,43:$Vd,44:$Ve,45:$Vf},{33:[1,98]},o($V9,[2,37],{35:[1,100],38:[1,99]}),o($V9,[2,38],{32:[1,102],35:[1,101]}),o($V9,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},o($V9,[2,23]),o($V9,[2,55],{32:[1,110],42:[1,111]}),o($V9,[2,59],{38:[1,112],42:[1,113]}),o($V9,[2,69],{32:[1,115],38:[1,114]}),o($V9,[2,56],{32:[1,116],42:[1,117]}),o($V9,[2,61],{35:[1,118],42:[1,119]}),o($V9,[2,72],{32:[1,121],35:[1,120]}),o($V9,[2,58],{38:[1,122],42:[1,123]}),o($V9,[2,60],{35:[1,124],42:[1,125]}),o($V9,[2,73],{35:[1,127],38:[1,126]}),o($V9,[2,70],{32:[1,129],38:[1,128]}),o($V9,[2,71],{32:[1,131],35:[1,130]}),o($V9,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:$Vd,44:$Ve,45:$Vf},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:$Vd,44:$Ve,45:$Vf},o($V9,[2,25],{35:[1,140]}),o($V9,[2,26],{34:[1,141]}),o($V9,[2,31],{34:[1,142]}),o($V9,[2,29],{34:[1,143]}),o($V9,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:$Vd,44:$Ve,45:$Vf},{33:[1,148]},{39:149,43:$Vd,44:$Ve,45:$Vf},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:$Vd,44:$Ve,45:$Vf},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:$Vd,44:$Ve,45:$Vf},{33:[1,162]},{39:163,43:$Vd,44:$Ve,45:$Vf},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:$Vd,44:$Ve,45:$Vf},{33:[1,168]},o($V9,[2,43],{35:[1,169]}),o($V9,[2,44],{38:[1,170]}),o($V9,[2,42],{32:[1,171]}),o($V9,[2,45],{35:[1,172]}),o($V9,[2,40],{38:[1,173]}),o($V9,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},o($V9,[2,66],{42:[1,181]}),o($V9,[2,79],{32:[1,182]}),o($V9,[2,67],{42:[1,183]}),o($V9,[2,90],{38:[1,184]}),o($V9,[2,80],{32:[1,185]}),o($V9,[2,89],{38:[1,186]}),o($V9,[2,65],{42:[1,187]}),o($V9,[2,78],{32:[1,188]}),o($V9,[2,64],{42:[1,189]}),o($V9,[2,84],{35:[1,190]}),o($V9,[2,77],{32:[1,191]}),o($V9,[2,83],{35:[1,192]}),o($V9,[2,63],{42:[1,193]}),o($V9,[2,91],{38:[1,194]}),o($V9,[2,62],{42:[1,195]}),o($V9,[2,85],{35:[1,196]}),o($V9,[2,86],{35:[1,197]}),o($V9,[2,92],{38:[1,198]}),o($V9,[2,76],{32:[1,199]}),o($V9,[2,87],{38:[1,200]}),o($V9,[2,75],{32:[1,201]}),o($V9,[2,81],{35:[1,202]}),o($V9,[2,82],{35:[1,203]}),o($V9,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:$Vd,44:$Ve,45:$Vf},{33:[1,207]},{33:[1,208]},{39:209,43:$Vd,44:$Ve,45:$Vf},{33:[1,210]},o($V9,[2,27]),o($V9,[2,32]),o($V9,[2,28]),o($V9,[2,33]),o($V9,[2,34]),o($V9,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:$Vd,44:$Ve,45:$Vf},{33:[1,215]},{39:216,43:$Vd,44:$Ve,45:$Vf},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:$Vd,44:$Ve,45:$Vf},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:$Vd,44:$Ve,45:$Vf},{33:[1,229]},{39:230,43:$Vd,44:$Ve,45:$Vf},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:$Vd,44:$Ve,45:$Vf},o($V9,[2,46]),o($V9,[2,48]),o($V9,[2,47]),o($V9,[2,49]),o($V9,[2,51]),o($V9,[2,50]),o($V9,[2,107]),o($V9,[2,108]),o($V9,[2,105]),o($V9,[2,106]),o($V9,[2,110]),o($V9,[2,109]),o($V9,[2,114]),o($V9,[2,113]),o($V9,[2,112]),o($V9,[2,111]),o($V9,[2,116]),o($V9,[2,115]),o($V9,[2,104]),o($V9,[2,103]),o($V9,[2,102]),o($V9,[2,101]),o($V9,[2,99]),o($V9,[2,100]),o($V9,[2,98]),o($V9,[2,97]),o($V9,[2,96]),o($V9,[2,95]),o($V9,[2,93]),o($V9,[2,94])],\ndefaultActions: {7:[2,1],13:[2,2],18:[2,3],36:[2,4]},\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            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\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/* 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: {\"case-insensitive\":true},\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 19; \nbreak;\ncase 1: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 2: this.begin(\"acc_descr\");return 21; \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:/*{console.log('New line');return 13;}*/ return 13;\nbreak;\ncase 8:/* skip comments */\nbreak;\ncase 9:/* skip comments */\nbreak;\ncase 10:return 5;\nbreak;\ncase 11:return 40;\nbreak;\ncase 12:return 32;\nbreak;\ncase 13:return 38;\nbreak;\ncase 14:return 42;\nbreak;\ncase 15:return 43;\nbreak;\ncase 16:return 44;\nbreak;\ncase 17:return 45;\nbreak;\ncase 18:return 35;\nbreak;\ncase 19:return 28;\nbreak;\ncase 20:return 29;\nbreak;\ncase 21:return 37;\nbreak;\ncase 22:return 31;\nbreak;\ncase 23:return 34\nbreak;\ncase 24:return 26;\nbreak;\ncase 25:return 9;\nbreak;\ncase 26:return 9;\nbreak;\ncase 27:return 9;\nbreak;\ncase 28:return 8;\nbreak;\ncase 29:return 'CARET'\nbreak;\ncase 30:this.begin(\"options\"); //\nbreak;\ncase 31:this.popState();       // not used anymore in the renderer, fixed for backward compatibility\nbreak;\ncase 32:return 12;          //\nbreak;\ncase 33:return 36;\nbreak;\ncase 34:this.begin(\"string\");\nbreak;\ncase 35:this.popState();\nbreak;\ncase 36:return 33;\nbreak;\ncase 37:return 30;\nbreak;\ncase 38:return 46; // only a subset of https://git-scm.com/docs/git-check-ref-format\nbreak;\ncase 39:return 7;\nbreak;\ncase 40:/* skip all whitespace */ // lowest priority so we can use lookaheads in earlier regex\nbreak;\n}\n},\nrules: [/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:(\\r?\\n)+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:gitGraph\\b)/i,/^(?:commit(?=\\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\\b)/i,/^(?:REVERSE\\b)/i,/^(?:HIGHLIGHT\\b)/i,/^(?:tag:)/i,/^(?:branch(?=\\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\\s|$))/i,/^(?:cherry-pick(?=\\s|$))/i,/^(?:parent:)/i,/^(?:\\b(checkout|switch)(?=\\s|$))/i,/^(?:LR\\b)/i,/^(?:TB\\b)/i,/^(?:BT\\b)/i,/^(?::)/i,/^(?:\\^)/i,/^(?:options\\r?\\n)/i,/^(?:[ \\r\\n\\t]+end\\b)/i,/^(?:[\\s\\S]+(?=[ \\r\\n\\t]+end))/i,/^(?:[\"][\"])/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[0-9]+(?=\\s|$))/i,/^(?:\\w([-\\./\\w]*[-\\w])?)/i,/^(?:$)/i,/^(?:\\s+)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[5,6],\"inclusive\":false},\"acc_descr\":{\"rules\":[3],\"inclusive\":false},\"acc_title\":{\"rules\":[1],\"inclusive\":false},\"options\":{\"rules\":[31,32],\"inclusive\":false},\"string\":{\"rules\":[35,36],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,34,37,38,39,40],\"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\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { log } from '../../logger.js';\nimport { random } from '../../utils.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport common from '../common/common.js';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../common/commonDb.js';\n\nlet mainBranchName = getConfig().gitGraph.mainBranchName;\nlet mainBranchOrder = getConfig().gitGraph.mainBranchOrder;\nlet commits = new Map();\nlet head = null;\nlet branchesConfig = new Map();\nbranchesConfig.set(mainBranchName, { name: mainBranchName, order: mainBranchOrder });\nlet branches = new Map();\nbranches.set(mainBranchName, head);\nlet curBranch = mainBranchName;\nlet direction = 'LR';\nlet seq = 0;\n\n/**\n *\n */\nfunction getId() {\n  return random({ length: 7 });\n}\n\n// /**\n//  * @param currentCommit\n//  * @param otherCommit\n//  */\n// eslint-disable-next-line @cspell/spellchecker\n// function isFastForwardable(currentCommit, otherCommit) {\n//   log.debug('Entering isFastForwardable:', currentCommit.id, otherCommit.id);\n//   let cnt = 0;\n//   while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit && cnt < 1000) {\n//     cnt++;\n//     // only if other branch has more commits\n//     if (otherCommit.parent == null) break;\n//     if (Array.isArray(otherCommit.parent)) {\n//       log.debug('In merge commit:', otherCommit.parent);\n//       return (\n//         isFastForwardable(currentCommit, commits.get(otherCommit.parent[0])) ||\n//         isFastForwardable(currentCommit, commits.get(otherCommit.parent[1]))\n//       );\n//     } else {\n//       otherCommit = commits.get(otherCommit.parent);\n//     }\n//   }\n//   log.debug(currentCommit.id, otherCommit.id);\n//   return currentCommit.id === otherCommit.id;\n// }\n\n/**\n * @param currentCommit\n * @param otherCommit\n */\n// function isReachableFrom(currentCommit, otherCommit) {\n//   const currentSeq = currentCommit.seq;\n//   const otherSeq = otherCommit.seq;\n//   if (currentSeq > otherSeq) return isFastForwardable(otherCommit, currentCommit);\n//   return false;\n// }\n\n/**\n * @param list\n * @param fn\n */\nfunction uniqBy(list, fn) {\n  const recordMap = Object.create(null);\n  return list.reduce((out, item) => {\n    const key = fn(item);\n    if (!recordMap[key]) {\n      recordMap[key] = true;\n      out.push(item);\n    }\n    return out;\n  }, []);\n}\n\nexport const setDirection = function (dir) {\n  direction = dir;\n};\nlet options = {};\nexport const setOptions = function (rawOptString) {\n  log.debug('options str', rawOptString);\n  rawOptString = rawOptString && rawOptString.trim();\n  rawOptString = rawOptString || '{}';\n  try {\n    options = JSON.parse(rawOptString);\n  } catch (e) {\n    log.error('error while parsing gitGraph options', e.message);\n  }\n};\n\nexport const getOptions = function () {\n  return options;\n};\n\nexport const commit = function (msg, id, type, tag) {\n  log.debug('Entering commit:', msg, id, type, tag);\n  id = common.sanitizeText(id, getConfig());\n  msg = common.sanitizeText(msg, getConfig());\n  tag = common.sanitizeText(tag, getConfig());\n  const commit = {\n    id: id ? id : seq + '-' + getId(),\n    message: msg,\n    seq: seq++,\n    type: type ? type : commitType.NORMAL,\n    tag: tag ? tag : '',\n    parents: head == null ? [] : [head.id],\n    branch: curBranch,\n  };\n  head = commit;\n  commits.set(commit.id, commit);\n  branches.set(curBranch, commit.id);\n  log.debug('in pushCommit ' + commit.id);\n};\n\nexport const branch = function (name, order) {\n  name = common.sanitizeText(name, getConfig());\n  if (!branches.has(name)) {\n    branches.set(name, head != null ? head.id : null);\n    branchesConfig.set(name, { name, order: order ? parseInt(order, 10) : null });\n    checkout(name);\n    log.debug('in createBranch');\n  } else {\n    let error = new Error(\n      'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ' +\n        name +\n        '\")'\n    );\n    error.hash = {\n      text: 'branch ' + name,\n      token: 'branch ' + name,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"checkout ' + name + '\"'],\n    };\n    throw error;\n  }\n};\n\nexport const merge = function (otherBranch, custom_id, override_type, custom_tag) {\n  otherBranch = common.sanitizeText(otherBranch, getConfig());\n  custom_id = common.sanitizeText(custom_id, getConfig());\n\n  const currentCommit = commits.get(branches.get(curBranch));\n  const otherCommit = commits.get(branches.get(otherBranch));\n  if (curBranch === otherBranch) {\n    let error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch abc'],\n    };\n    throw error;\n  } else if (currentCommit === undefined || !currentCommit) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Current branch (' + curBranch + ')has no commits'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['commit'],\n    };\n    throw error;\n  } else if (!branches.has(otherBranch)) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') does not exist'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch ' + otherBranch],\n    };\n    throw error;\n  } else if (otherCommit === undefined || !otherCommit) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') has no commits'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"commit\"'],\n    };\n    throw error;\n  } else if (currentCommit === otherCommit) {\n    let error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch abc'],\n    };\n    throw error;\n  } else if (custom_id && commits.has(custom_id)) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Commit with id:' +\n        custom_id +\n        ' already exists, use different custom Id'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch + custom_id + override_type + custom_tag,\n      token: 'merge ' + otherBranch + custom_id + override_type + custom_tag,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: [\n        'merge ' + otherBranch + ' ' + custom_id + '_UNIQUE ' + override_type + ' ' + custom_tag,\n      ],\n    };\n\n    throw error;\n  }\n  // if (isReachableFrom(currentCommit, otherCommit)) {\n  //   log.debug('Already merged');\n  //   return;\n  // }\n  // if (isFastForwardable(currentCommit, otherCommit)) {\n  //   branches.set(curBranch, branches.get(otherBranch));\n  //   head = commits.get(branches.get(curBranch));\n  // } else {\n  // create merge commit\n  const commit = {\n    id: custom_id ? custom_id : seq + '-' + getId(),\n    message: 'merged branch ' + otherBranch + ' into ' + curBranch,\n    seq: seq++,\n    parents: [head == null ? null : head.id, branches.get(otherBranch)],\n    branch: curBranch,\n    type: commitType.MERGE,\n    customType: override_type,\n    customId: custom_id ? true : false,\n    tag: custom_tag ? custom_tag : '',\n  };\n  head = commit;\n  commits.set(commit.id, commit);\n  branches.set(curBranch, commit.id);\n  // }\n  log.debug(branches);\n  log.debug('in mergeBranch');\n};\n\nexport const cherryPick = function (sourceId, targetId, tag, parentCommitId) {\n  log.debug('Entering cherryPick:', sourceId, targetId, tag);\n  sourceId = common.sanitizeText(sourceId, getConfig());\n  targetId = common.sanitizeText(targetId, getConfig());\n  tag = common.sanitizeText(tag, getConfig());\n  parentCommitId = common.sanitizeText(parentCommitId, getConfig());\n\n  if (!sourceId || !commits.has(sourceId)) {\n    let error = new Error(\n      'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n    );\n    error.hash = {\n      text: 'cherryPick ' + sourceId + ' ' + targetId,\n      token: 'cherryPick ' + sourceId + ' ' + targetId,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['cherry-pick abc'],\n    };\n    throw error;\n  }\n  let sourceCommit = commits.get(sourceId);\n  let sourceCommitBranch = sourceCommit.branch;\n  if (\n    parentCommitId &&\n    !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))\n  ) {\n    let error = new Error(\n      'Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.'\n    );\n    throw error;\n  }\n  if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n    let error = new Error(\n      'Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.'\n    );\n    throw error;\n  }\n  if (!targetId || !commits.has(targetId)) {\n    // cherry-pick source commit to current branch\n\n    if (sourceCommitBranch === curBranch) {\n      let error = new Error(\n        'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n      );\n      error.hash = {\n        text: 'cherryPick ' + sourceId + ' ' + targetId,\n        token: 'cherryPick ' + sourceId + ' ' + targetId,\n        line: '1',\n        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n        expected: ['cherry-pick abc'],\n      };\n      throw error;\n    }\n    const currentCommit = commits.get(branches.get(curBranch));\n    if (currentCommit === undefined || !currentCommit) {\n      let error = new Error(\n        'Incorrect usage of \"cherry-pick\". Current branch (' + curBranch + ')has no commits'\n      );\n      error.hash = {\n        text: 'cherryPick ' + sourceId + ' ' + targetId,\n        token: 'cherryPick ' + sourceId + ' ' + targetId,\n        line: '1',\n        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n        expected: ['cherry-pick abc'],\n      };\n      throw error;\n    }\n    const commit = {\n      id: seq + '-' + getId(),\n      message: 'cherry-picked ' + sourceCommit + ' into ' + curBranch,\n      seq: seq++,\n      parents: [head == null ? null : head.id, sourceCommit.id],\n      branch: curBranch,\n      type: commitType.CHERRY_PICK,\n      tag:\n        tag ??\n        `cherry-pick:${sourceCommit.id}${\n          sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : ''\n        }`,\n    };\n    head = commit;\n    commits.set(commit.id, commit);\n    branches.set(curBranch, commit.id);\n    log.debug(branches);\n    log.debug('in cherryPick');\n  }\n};\nexport const checkout = function (branch) {\n  branch = common.sanitizeText(branch, getConfig());\n  if (!branches.has(branch)) {\n    let error = new Error(\n      'Trying to checkout branch which is not yet created. (Help try using \"branch ' + branch + '\")'\n    );\n    error.hash = {\n      text: 'checkout ' + branch,\n      token: 'checkout ' + branch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"branch ' + branch + '\"'],\n    };\n    throw error;\n    //branches[branch] = head != null ? head.id : null;\n    //log.debug('in createBranch');\n  } else {\n    curBranch = branch;\n    const id = branches.get(curBranch);\n    head = commits.get(id);\n  }\n};\n\n// export const reset = function (commitRef) {\n//   log.debug('in reset', commitRef);\n//   const ref = commitRef.split(':')[0];\n//   let parentCount = parseInt(commitRef.split(':')[1]);\n//   let commit = ref === 'HEAD' ? head : commits.get(branches.get(ref));\n//   log.debug(commit, parentCount);\n//   while (parentCount > 0) {\n//     commit = commits.get(commit.parent);\n//     parentCount--;\n//     if (!commit) {\n//       const err = 'Critical error - unique parent commit not found during reset';\n//       log.error(err);\n//       throw err;\n//     }\n//   }\n//   head = commit;\n//   branches[curBranch] = commit.id;\n// };\n\n/**\n * @param arr\n * @param key\n * @param newVal\n */\nfunction upsert(arr, key, newVal) {\n  const index = arr.indexOf(key);\n  if (index === -1) {\n    arr.push(newVal);\n  } else {\n    arr.splice(index, 1, newVal);\n  }\n}\n\n/** @param commitArr */\nfunction prettyPrintCommitHistory(commitArr) {\n  const commit = commitArr.reduce((out, commit) => {\n    if (out.seq > commit.seq) {\n      return out;\n    }\n    return commit;\n  }, commitArr[0]);\n  let line = '';\n  commitArr.forEach(function (c) {\n    if (c === commit) {\n      line += '\\t*';\n    } else {\n      line += '\\t|';\n    }\n  });\n  const label = [line, commit.id, commit.seq];\n  for (let branch in branches) {\n    if (branches.get(branch) === commit.id) {\n      label.push(branch);\n    }\n  }\n  log.debug(label.join(' '));\n  if (commit.parents && commit.parents.length == 2) {\n    const newCommit = commits.get(commit.parents[0]);\n    upsert(commitArr, commit, newCommit);\n    commitArr.push(commits.get(commit.parents[1]));\n  } else if (commit.parents.length == 0) {\n    return;\n  } else {\n    const nextCommit = commits.get(commit.parents);\n    upsert(commitArr, commit, nextCommit);\n  }\n  commitArr = uniqBy(commitArr, (c) => c.id);\n  prettyPrintCommitHistory(commitArr);\n}\n\nexport const prettyPrint = function () {\n  log.debug(commits);\n  const node = getCommitsArray()[0];\n  prettyPrintCommitHistory([node]);\n};\n\nexport const clear = function () {\n  commits = new Map();\n  head = null;\n  let mainBranch = getConfig().gitGraph.mainBranchName;\n  let mainBranchOrder = getConfig().gitGraph.mainBranchOrder;\n  branches = new Map();\n  branches.set(mainBranch, null);\n  branchesConfig = new Map();\n  branchesConfig.set(mainBranch, { name: mainBranch, order: mainBranchOrder });\n  curBranch = mainBranch;\n  seq = 0;\n  commonClear();\n};\n\nexport const getBranchesAsObjArray = function () {\n  const branchesArray = [...branchesConfig.values()]\n    .map((branchConfig, i) => {\n      if (branchConfig.order !== null) {\n        return branchConfig;\n      }\n      return {\n        ...branchConfig,\n        order: parseFloat(`0.${i}`, 10),\n      };\n    })\n    .sort((a, b) => a.order - b.order)\n    .map(({ name }) => ({ name }));\n\n  return branchesArray;\n};\n\nexport const getBranches = function () {\n  return branches;\n};\nexport const getCommits = function () {\n  return commits;\n};\nexport const getCommitsArray = function () {\n  const commitArr = [...commits.values()];\n  commitArr.forEach(function (o) {\n    log.debug(o.id);\n  });\n  commitArr.sort((a, b) => a.seq - b.seq);\n  return commitArr;\n};\nexport const getCurrentBranch = function () {\n  return curBranch;\n};\nexport const getDirection = function () {\n  return direction;\n};\nexport const getHead = function () {\n  return head;\n};\n\nexport const commitType = {\n  NORMAL: 0,\n  REVERSE: 1,\n  HIGHLIGHT: 2,\n  MERGE: 3,\n  CHERRY_PICK: 4,\n};\n\nexport default {\n  getConfig: () => getConfig().gitGraph,\n  setDirection,\n  setOptions,\n  getOptions,\n  commit,\n  branch,\n  merge,\n  cherryPick,\n  checkout,\n  //reset,\n  prettyPrint,\n  clear,\n  getBranchesAsObjArray,\n  getBranches,\n  getCommits,\n  getCommitsArray,\n  getCurrentBranch,\n  getDirection,\n  getHead,\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  setDiagramTitle,\n  getDiagramTitle,\n  commitType,\n};\n", "import { select } from 'd3';\nimport { getConfig, setupGraphViewbox } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport utils from '../../utils.js';\n\n/**\n * @typedef {Map<string, { id: string, message: string, seq: number, type: number, tag: string, parents: string[], branch: string }>} CommitMap\n */\n\n/** @type {CommitMap} */\nlet allCommitsDict = new Map();\n\nconst commitType = {\n  NORMAL: 0,\n  REVERSE: 1,\n  HIGHLIGHT: 2,\n  MERGE: 3,\n  CHERRY_PICK: 4,\n};\n\nconst THEME_COLOR_LIMIT = 8;\n\nlet branchPos = {};\nlet commitPos = {};\nlet lanes = [];\nlet maxPos = 0;\nlet dir = 'LR';\nlet defaultPos = 30;\nconst clear = () => {\n  branchPos = new Map();\n  commitPos = new Map();\n  allCommitsDict = new Map();\n  maxPos = 0;\n  lanes = [];\n  dir = 'LR';\n};\n\n/**\n * Draws a text, used for labels of the branches\n *\n * @param {string} txt The text\n * @returns {SVGElement}\n */\nconst drawText = (txt) => {\n  const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n  let rows = [];\n\n  // Handling of new lines in the label\n  if (typeof txt === 'string') {\n    rows = txt.split(/\\\\n|\\n|<br\\s*\\/?>/gi);\n  } else if (Array.isArray(txt)) {\n    rows = txt;\n  } else {\n    rows = [];\n  }\n\n  for (const row of rows) {\n    const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n    tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n    tspan.setAttribute('dy', '1em');\n    tspan.setAttribute('x', '0');\n    tspan.setAttribute('class', 'row');\n    tspan.textContent = row.trim();\n    svgLabel.appendChild(tspan);\n  }\n  /**\n   * @param svg\n   * @param selector\n   */\n  return svgLabel;\n};\n\n/**\n * Searches for the closest parent from the parents list passed as argument.\n * The parents list comes from an individual commit. The closest parent is actually\n * the one farther down the graph, since that means it is closer to its child.\n *\n * @param {string[]} parents\n * @returns {string | undefined}\n */\nconst findClosestParent = (parents) => {\n  let closestParent = '';\n  let maxPosition = 0;\n\n  parents.forEach((parent) => {\n    const parentPosition =\n      dir === 'TB' || dir === 'BT' ? commitPos.get(parent).y : commitPos.get(parent).x;\n    if (parentPosition >= maxPosition) {\n      closestParent = parent;\n      maxPosition = parentPosition;\n    }\n  });\n\n  return closestParent || undefined;\n};\n\n/**\n * Searches for the closest parent from the parents list passed as argument for Bottom-to-Top orientation.\n * The parents list comes from an individual commit. The closest parent is actually\n * the one farther down the graph, since that means it is closer to its child.\n *\n * @param {string[]} parents\n * @returns {string | undefined}\n */\nconst findClosestParentBT = (parents) => {\n  let closestParent = '';\n  let maxPosition = Infinity;\n\n  parents.forEach((parent) => {\n    const parentPosition = commitPos.get(parent).y;\n    if (parentPosition <= maxPosition) {\n      closestParent = parent;\n      maxPosition = parentPosition;\n    }\n  });\n\n  return closestParent || undefined;\n};\n\n/**\n * Sets the position of the commit elements when the orientation is set to BT-Parallel.\n * This is needed to render the chart in Bottom-to-Top mode while keeping the parallel\n * commits in the correct position. First, it finds the correct position of the root commit\n * using the findClosestParent method. Then, it uses the findClosestParentBT to set the position\n * of the remaining commits.\n *\n * @param {any} sortedKeys\n * @param {CommitMap} commits\n * @param {any} defaultPos\n * @param {any} commitStep\n * @param {any} layoutOffset\n */\nconst setParallelBTPos = (sortedKeys, commits, defaultPos, commitStep, layoutOffset) => {\n  let curPos = defaultPos;\n  let maxPosition = defaultPos;\n  let roots = [];\n  sortedKeys.forEach((key) => {\n    const commit = commits.get(key);\n    if (commit.parents.length) {\n      const closestParent = findClosestParent(commit.parents);\n      curPos = commitPos.get(closestParent).y + commitStep;\n      if (curPos >= maxPosition) {\n        maxPosition = curPos;\n      }\n    } else {\n      roots.push(commit);\n    }\n    const x = branchPos.get(commit.branch).pos;\n    const y = curPos + layoutOffset;\n    commitPos.set(commit.id, { x: x, y: y });\n  });\n  curPos = maxPosition;\n  roots.forEach((commit) => {\n    const posWithOffset = curPos + defaultPos;\n    const y = posWithOffset;\n    const x = branchPos.get(commit.branch).pos;\n    commitPos.set(commit.id, { x: x, y: y });\n  });\n  sortedKeys.forEach((key) => {\n    const commit = commits.get(key);\n    if (commit.parents.length) {\n      const closestParent = findClosestParentBT(commit.parents);\n      curPos = commitPos.get(closestParent).y - commitStep;\n      if (curPos <= maxPosition) {\n        maxPosition = curPos;\n      }\n      const x = branchPos.get(commit.branch).pos;\n      const y = curPos - layoutOffset;\n      commitPos.set(commit.id, { x: x, y: y });\n    }\n  });\n};\n\n/**\n * Draws the commits with its symbol and labels. The function has two modes, one which only\n * calculates the positions and one that does the actual drawing. This for a simple way getting the\n * vertical layering correct in the graph.\n *\n * @param {any} svg\n * @param {CommitMap} commits\n * @param {any} modifyGraph\n */\nconst drawCommits = (svg, commits, modifyGraph) => {\n  const gitGraphConfig = getConfig().gitGraph;\n  const gBullets = svg.append('g').attr('class', 'commit-bullets');\n  const gLabels = svg.append('g').attr('class', 'commit-labels');\n  let pos = 0;\n\n  if (dir === 'TB' || dir === 'BT') {\n    pos = defaultPos;\n  }\n  const keys = [...commits.keys()];\n  const isParallelCommits = gitGraphConfig.parallelCommits;\n  const layoutOffset = 10;\n  const commitStep = 40;\n  let sortedKeys =\n    dir !== 'BT' || (dir === 'BT' && isParallelCommits)\n      ? keys.sort((a, b) => {\n          return commits.get(a).seq - commits.get(b).seq;\n        })\n      : keys\n          .sort((a, b) => {\n            return commits.get(a).seq - commits.get(b).seq;\n          })\n          .reverse();\n\n  if (dir === 'BT' && isParallelCommits) {\n    setParallelBTPos(sortedKeys, commits, pos, commitStep, layoutOffset);\n    sortedKeys = sortedKeys.reverse();\n  }\n  sortedKeys.forEach((key) => {\n    const commit = commits.get(key);\n    if (isParallelCommits) {\n      if (commit.parents.length) {\n        const closestParent =\n          dir === 'BT' ? findClosestParentBT(commit.parents) : findClosestParent(commit.parents);\n        if (dir === 'TB') {\n          pos = commitPos.get(closestParent).y + commitStep;\n        } else if (dir === 'BT') {\n          pos = commitPos.get(key).y - commitStep;\n        } else {\n          pos = commitPos.get(closestParent).x + commitStep;\n        }\n      } else {\n        if (dir === 'TB') {\n          pos = defaultPos;\n        } else if (dir === 'BT') {\n          pos = commitPos.get(key).y - commitStep;\n        } else {\n          pos = 0;\n        }\n      }\n    }\n    const posWithOffset = dir === 'BT' && isParallelCommits ? pos : pos + layoutOffset;\n    const y = dir === 'TB' || dir === 'BT' ? posWithOffset : branchPos.get(commit.branch).pos;\n    const x = dir === 'TB' || dir === 'BT' ? branchPos.get(commit.branch).pos : posWithOffset;\n\n    // Don't draw the commits now but calculate the positioning which is used by the branch lines etc.\n    if (modifyGraph) {\n      let typeClass;\n      let commitSymbolType =\n        commit.customType !== undefined && commit.customType !== ''\n          ? commit.customType\n          : commit.type;\n      switch (commitSymbolType) {\n        case commitType.NORMAL:\n          typeClass = 'commit-normal';\n          break;\n        case commitType.REVERSE:\n          typeClass = 'commit-reverse';\n          break;\n        case commitType.HIGHLIGHT:\n          typeClass = 'commit-highlight';\n          break;\n        case commitType.MERGE:\n          typeClass = 'commit-merge';\n          break;\n        case commitType.CHERRY_PICK:\n          typeClass = 'commit-cherry-pick';\n          break;\n        default:\n          typeClass = 'commit-normal';\n      }\n\n      if (commitSymbolType === commitType.HIGHLIGHT) {\n        const circle = gBullets.append('rect');\n        circle.attr('x', x - 10);\n        circle.attr('y', y - 10);\n        circle.attr('height', 20);\n        circle.attr('width', 20);\n        circle.attr(\n          'class',\n          `commit ${commit.id} commit-highlight${\n            branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n          } ${typeClass}-outer`\n        );\n        gBullets\n          .append('rect')\n          .attr('x', x - 6)\n          .attr('y', y - 6)\n          .attr('height', 12)\n          .attr('width', 12)\n          .attr(\n            'class',\n            `commit ${commit.id} commit${\n              branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n            } ${typeClass}-inner`\n          );\n      } else if (commitSymbolType === commitType.CHERRY_PICK) {\n        gBullets\n          .append('circle')\n          .attr('cx', x)\n          .attr('cy', y)\n          .attr('r', 10)\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('circle')\n          .attr('cx', x - 3)\n          .attr('cy', y + 2)\n          .attr('r', 2.75)\n          .attr('fill', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('circle')\n          .attr('cx', x + 3)\n          .attr('cy', y + 2)\n          .attr('r', 2.75)\n          .attr('fill', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('line')\n          .attr('x1', x + 3)\n          .attr('y1', y + 1)\n          .attr('x2', x)\n          .attr('y2', y - 5)\n          .attr('stroke', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('line')\n          .attr('x1', x - 3)\n          .attr('y1', y + 1)\n          .attr('x2', x)\n          .attr('y2', y - 5)\n          .attr('stroke', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n      } else {\n        const circle = gBullets.append('circle');\n        circle.attr('cx', x);\n        circle.attr('cy', y);\n        circle.attr('r', commit.type === commitType.MERGE ? 9 : 10);\n        circle.attr(\n          'class',\n          `commit ${commit.id} commit${branchPos.get(commit.branch).index % THEME_COLOR_LIMIT}`\n        );\n        if (commitSymbolType === commitType.MERGE) {\n          const circle2 = gBullets.append('circle');\n          circle2.attr('cx', x);\n          circle2.attr('cy', y);\n          circle2.attr('r', 6);\n          circle2.attr(\n            'class',\n            `commit ${typeClass} ${commit.id} commit${\n              branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n            }`\n          );\n        }\n        if (commitSymbolType === commitType.REVERSE) {\n          const cross = gBullets.append('path');\n          cross\n            .attr('d', `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`)\n            .attr(\n              'class',\n              `commit ${typeClass} ${commit.id} commit${\n                branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n              }`\n            );\n        }\n      }\n    }\n    if (dir === 'TB' || dir === 'BT') {\n      commitPos.set(commit.id, { x: x, y: posWithOffset });\n    } else {\n      commitPos.set(commit.id, { x: posWithOffset, y: y });\n    }\n\n    // The first iteration over the commits are for positioning purposes, this\n    // is required for drawing the lines. The circles and labels is drawn after the labels\n    // placing them on top of the lines.\n    if (modifyGraph) {\n      const px = 4;\n      const py = 2;\n      // Draw the commit label\n      if (\n        commit.type !== commitType.CHERRY_PICK &&\n        ((commit.customId && commit.type === commitType.MERGE) ||\n          commit.type !== commitType.MERGE) &&\n        gitGraphConfig.showCommitLabel\n      ) {\n        const wrapper = gLabels.append('g');\n        const labelBkg = wrapper.insert('rect').attr('class', 'commit-label-bkg');\n\n        const text = wrapper\n          .append('text')\n          .attr('x', pos)\n          .attr('y', y + 25)\n          .attr('class', 'commit-label')\n          .text(commit.id);\n        let bbox = text.node().getBBox();\n\n        // Now we have the label, lets position the background\n        labelBkg\n          .attr('x', posWithOffset - bbox.width / 2 - py)\n          .attr('y', y + 13.5)\n          .attr('width', bbox.width + 2 * py)\n          .attr('height', bbox.height + 2 * py);\n\n        if (dir === 'TB' || dir === 'BT') {\n          labelBkg.attr('x', x - (bbox.width + 4 * px + 5)).attr('y', y - 12);\n          text.attr('x', x - (bbox.width + 4 * px)).attr('y', y + bbox.height - 12);\n        } else {\n          text.attr('x', posWithOffset - bbox.width / 2);\n        }\n        if (gitGraphConfig.rotateCommitLabel) {\n          if (dir === 'TB' || dir === 'BT') {\n            text.attr('transform', 'rotate(' + -45 + ', ' + x + ', ' + y + ')');\n            labelBkg.attr('transform', 'rotate(' + -45 + ', ' + x + ', ' + y + ')');\n          } else {\n            let r_x = -7.5 - ((bbox.width + 10) / 25) * 9.5;\n            let r_y = 10 + (bbox.width / 25) * 8.5;\n            wrapper.attr(\n              'transform',\n              'translate(' + r_x + ', ' + r_y + ') rotate(' + -45 + ', ' + pos + ', ' + y + ')'\n            );\n          }\n        }\n      }\n      if (commit.tag) {\n        const rect = gLabels.insert('polygon');\n        const hole = gLabels.append('circle');\n        const tag = gLabels\n          .append('text')\n          // Note that we are delaying setting the x position until we know the width of the text\n          .attr('y', y - 16)\n          .attr('class', 'tag-label')\n          .text(commit.tag);\n        let tagBbox = tag.node().getBBox();\n        tag.attr('x', posWithOffset - tagBbox.width / 2);\n\n        const h2 = tagBbox.height / 2;\n        const ly = y - 19.2;\n        rect.attr('class', 'tag-label-bkg').attr(\n          'points',\n          `\n          ${pos - tagBbox.width / 2 - px / 2},${ly + py}\n          ${pos - tagBbox.width / 2 - px / 2},${ly - py}\n          ${posWithOffset - tagBbox.width / 2 - px},${ly - h2 - py}\n          ${posWithOffset + tagBbox.width / 2 + px},${ly - h2 - py}\n          ${posWithOffset + tagBbox.width / 2 + px},${ly + h2 + py}\n          ${posWithOffset - tagBbox.width / 2 - px},${ly + h2 + py}`\n        );\n\n        hole\n          .attr('cx', pos - tagBbox.width / 2 + px / 2)\n          .attr('cy', ly)\n          .attr('r', 1.5)\n          .attr('class', 'tag-hole');\n\n        if (dir === 'TB' || dir === 'BT') {\n          rect\n            .attr('class', 'tag-label-bkg')\n            .attr(\n              'points',\n              `\n            ${x},${pos + py}\n            ${x},${pos - py}\n            ${x + layoutOffset},${pos - h2 - py}\n            ${x + layoutOffset + tagBbox.width + px},${pos - h2 - py}\n            ${x + layoutOffset + tagBbox.width + px},${pos + h2 + py}\n            ${x + layoutOffset},${pos + h2 + py}`\n            )\n            .attr('transform', 'translate(12,12) rotate(45, ' + x + ',' + pos + ')');\n          hole\n            .attr('cx', x + px / 2)\n            .attr('cy', pos)\n            .attr('transform', 'translate(12,12) rotate(45, ' + x + ',' + pos + ')');\n          tag\n            .attr('x', x + 5)\n            .attr('y', pos + 3)\n            .attr('transform', 'translate(14,14) rotate(45, ' + x + ',' + pos + ')');\n        }\n      }\n    }\n    pos = dir === 'BT' && isParallelCommits ? pos + commitStep : pos + commitStep + layoutOffset;\n    if (pos > maxPos) {\n      maxPos = pos;\n    }\n  });\n};\n\n/**\n * Detect if there are commits\n * between commitA's x-position\n * and commitB's x-position on the\n * same branch as commitA, where\n * commitA isn't main\n *\n * @param {any} commitA\n * @param {any} commitB\n * @param p1\n * @param p2\n * @param {CommitMap} allCommits\n * @returns {boolean}\n * If there are commits between\n * commitA's x-position\n * and commitB's x-position\n * on the source branch, where\n * source branch is not main\n * return true\n */\nconst shouldRerouteArrow = (commitA, commitB, p1, p2, allCommits) => {\n  const commitBIsFurthest = dir === 'TB' || dir === 'BT' ? p1.x < p2.x : p1.y < p2.y;\n  const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n  const isOnBranchToGetCurve = (x) => x.branch === branchToGetCurve;\n  const isBetweenCommits = (x) => x.seq > commitA.seq && x.seq < commitB.seq;\n  return [...allCommits.values()].some((commitX) => {\n    return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n  });\n};\n\n/**\n * This function find a lane in the y-axis that is not overlapping with any other lanes. This is\n * used for drawing the lines between commits.\n *\n * @param {any} y1\n * @param {any} y2\n * @param {any} depth\n * @returns {number} Y value between y1 and y2\n */\nconst findLane = (y1, y2, depth = 0) => {\n  const candidate = y1 + Math.abs(y1 - y2) / 2;\n  if (depth > 5) {\n    return candidate;\n  }\n\n  let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n  if (ok) {\n    lanes.push(candidate);\n    return candidate;\n  }\n  const diff = Math.abs(y1 - y2);\n  return findLane(y1, y2 - diff / 5, depth + 1);\n};\n\n/**\n * Draw the lines between the commits. They were arrows initially.\n *\n * @param {any} svg\n * @param {any} commitA\n * @param {any} commitB\n * @param {CommitMap} allCommits\n */\nconst drawArrow = (svg, commitA, commitB, allCommits) => {\n  const p1 = commitPos.get(commitA.id); // arrowStart\n  const p2 = commitPos.get(commitB.id); // arrowEnd\n  const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n  // log.debug('drawArrow', p1, p2, arrowNeedsRerouting, commitA.id, commitB.id);\n\n  // Lower-right quadrant logic; top-left is 0,0\n\n  let arc = '';\n  let arc2 = '';\n  let radius = 0;\n  let offset = 0;\n  let colorClassNum = branchPos.get(commitB.branch).index;\n  if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n    colorClassNum = branchPos.get(commitA.branch).index;\n  }\n\n  let lineDef;\n  if (arrowNeedsRerouting) {\n    arc = 'A 10 10, 0, 0, 0,';\n    arc2 = 'A 10 10, 0, 0, 1,';\n    radius = 10;\n    offset = 10;\n\n    const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n    const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n\n    if (dir === 'TB') {\n      if (p1.x < p2.x) {\n        // Source commit is on branch position left of destination commit\n        // so render arrow rightward with colour of destination branch\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${\n          p1.y + offset\n        } L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      } else {\n        // Source commit is on branch position right of destination commit\n        // so render arrow leftward with colour of source branch\n        colorClassNum = branchPos.get(commitA.branch).index;\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${\n          p1.y + offset\n        } L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      }\n    } else if (dir === 'BT') {\n      if (p1.x < p2.x) {\n        // Source commit is on branch position left of destination commit\n        // so render arrow rightward with colour of destination branch\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${\n          p1.y - offset\n        } L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      } else {\n        // Source commit is on branch position right of destination commit\n        // so render arrow leftward with colour of source branch\n        colorClassNum = branchPos.get(commitA.branch).index;\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${\n          p1.y - offset\n        } L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      }\n    } else {\n      if (p1.y < p2.y) {\n        // Source commit is on branch positioned above destination commit\n        // so render arrow downward with colour of destination branch\n        lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${\n          p1.x + offset\n        } ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n      } else {\n        // Source commit is on branch positioned below destination commit\n        // so render arrow upward with colour of source branch\n        colorClassNum = branchPos.get(commitA.branch).index;\n        lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${\n          p1.x + offset\n        } ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n      }\n    }\n  } else {\n    arc = 'A 20 20, 0, 0, 0,';\n    arc2 = 'A 20 20, 0, 0, 1,';\n    radius = 20;\n    offset = 20;\n\n    if (dir === 'TB') {\n      if (p1.x < p2.x) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${\n            p1.y + offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n      if (p1.x > p2.x) {\n        arc = 'A 20 20, 0, 0, 0,';\n        arc2 = 'A 20 20, 0, 0, 1,';\n        radius = 20;\n        offset = 20;\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y + offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n\n      if (p1.x === p2.x) {\n        lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n      }\n    } else if (dir === 'BT') {\n      if (p1.x < p2.x) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y - offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n      if (p1.x > p2.x) {\n        arc = 'A 20 20, 0, 0, 0,';\n        arc2 = 'A 20 20, 0, 0, 1,';\n        radius = 20;\n        offset = 20;\n\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y - offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n\n      if (p1.x === p2.x) {\n        lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n      }\n    } else {\n      if (p1.y < p2.y) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${\n            p1.y + offset\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n      if (p1.y > p2.y) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y - offset\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n\n      if (p1.y === p2.y) {\n        lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n      }\n    }\n  }\n  svg\n    .append('path')\n    .attr('d', lineDef)\n    .attr('class', 'arrow arrow' + (colorClassNum % THEME_COLOR_LIMIT));\n};\n\n/**\n * @param {*} svg\n * @param {CommitMap} commits\n */\nconst drawArrows = (svg, commits) => {\n  const gArrows = svg.append('g').attr('class', 'commit-arrows');\n  [...commits.keys()].forEach((key) => {\n    const commit = commits.get(key);\n    if (commit.parents && commit.parents.length > 0) {\n      commit.parents.forEach((parent) => {\n        drawArrow(gArrows, commits.get(parent), commit, commits);\n      });\n    }\n  });\n};\n\n/**\n * Adds the branches and the branches' labels to the svg.\n *\n * @param svg\n * @param branches\n */\nconst drawBranches = (svg, branches) => {\n  const gitGraphConfig = getConfig().gitGraph;\n  const g = svg.append('g');\n  branches.forEach((branch, index) => {\n    const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n\n    const pos = branchPos.get(branch.name).pos;\n    const line = g.append('line');\n    line.attr('x1', 0);\n    line.attr('y1', pos);\n    line.attr('x2', maxPos);\n    line.attr('y2', pos);\n    line.attr('class', 'branch branch' + adjustIndexForTheme);\n\n    if (dir === 'TB') {\n      line.attr('y1', defaultPos);\n      line.attr('x1', pos);\n      line.attr('y2', maxPos);\n      line.attr('x2', pos);\n    } else if (dir === 'BT') {\n      line.attr('y1', maxPos);\n      line.attr('x1', pos);\n      line.attr('y2', defaultPos);\n      line.attr('x2', pos);\n    }\n    lanes.push(pos);\n\n    let name = branch.name;\n\n    // Create the actual text element\n    const labelElement = drawText(name);\n    // Create outer g, edgeLabel, this will be positioned after graph layout\n    const bkg = g.insert('rect');\n    const branchLabel = g.insert('g').attr('class', 'branchLabel');\n\n    // Create inner g, label, this will be positioned now for centering the text\n    const label = branchLabel.insert('g').attr('class', 'label branch-label' + adjustIndexForTheme);\n    label.node().appendChild(labelElement);\n    let bbox = labelElement.getBBox();\n    bkg\n      .attr('class', 'branchLabelBkg label' + adjustIndexForTheme)\n      .attr('rx', 4)\n      .attr('ry', 4)\n      .attr('x', -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0))\n      .attr('y', -bbox.height / 2 + 8)\n      .attr('width', bbox.width + 18)\n      .attr('height', bbox.height + 4);\n    label.attr(\n      'transform',\n      'translate(' +\n        (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) +\n        ', ' +\n        (pos - bbox.height / 2 - 1) +\n        ')'\n    );\n    if (dir === 'TB') {\n      bkg.attr('x', pos - bbox.width / 2 - 10).attr('y', 0);\n      label.attr('transform', 'translate(' + (pos - bbox.width / 2 - 5) + ', ' + 0 + ')');\n    } else if (dir === 'BT') {\n      bkg.attr('x', pos - bbox.width / 2 - 10).attr('y', maxPos);\n      label.attr('transform', 'translate(' + (pos - bbox.width / 2 - 5) + ', ' + maxPos + ')');\n    } else {\n      bkg.attr('transform', 'translate(' + -19 + ', ' + (pos - bbox.height / 2) + ')');\n    }\n  });\n};\n\n/**\n * @param txt\n * @param id\n * @param ver\n * @param diagObj\n */\nexport const draw = function (txt, id, ver, diagObj) {\n  clear();\n  const conf = getConfig();\n  const gitGraphConfig = conf.gitGraph;\n  // try {\n  log.debug('in gitgraph renderer', txt + '\\n', 'id:', id, ver);\n\n  allCommitsDict = diagObj.db.getCommits();\n  const branches = diagObj.db.getBranchesAsObjArray();\n  dir = diagObj.db.getDirection();\n  const diagram = select(`[id=\"${id}\"]`);\n  // Position branches\n  let pos = 0;\n  branches.forEach((branch, index) => {\n    const labelElement = drawText(branch.name);\n    const g = diagram.append('g');\n    const branchLabel = g.insert('g').attr('class', 'branchLabel');\n    const label = branchLabel.insert('g').attr('class', 'label branch-label');\n    label.node().appendChild(labelElement);\n    let bbox = labelElement.getBBox();\n\n    branchPos.set(branch.name, { pos, index });\n    pos +=\n      50 +\n      (gitGraphConfig.rotateCommitLabel ? 40 : 0) +\n      (dir === 'TB' || dir === 'BT' ? bbox.width / 2 : 0);\n    label.remove();\n    branchLabel.remove();\n    g.remove();\n  });\n\n  drawCommits(diagram, allCommitsDict, false);\n  if (gitGraphConfig.showBranches) {\n    drawBranches(diagram, branches);\n  }\n  drawArrows(diagram, allCommitsDict);\n  drawCommits(diagram, allCommitsDict, true);\n  utils.insertTitle(\n    diagram,\n    'gitTitleText',\n    gitGraphConfig.titleTopMargin,\n    diagObj.db.getDiagramTitle()\n  );\n\n  // Setup the view box and size of the svg element\n  setupGraphViewbox(\n    undefined,\n    diagram,\n    gitGraphConfig.diagramPadding,\n    gitGraphConfig.useMaxWidth ?? conf.useMaxWidth\n  );\n};\n\nexport default {\n  draw,\n};\n", "const getStyles = (options) =>\n  `\n  .commit-id,\n  .commit-msg,\n  .branch-label {\n    fill: lightgrey;\n    color: lightgrey;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n  ${[0, 1, 2, 3, 4, 5, 6, 7]\n    .map(\n      (i) =>\n        `\n        .branch-label${i} { fill: ${options['gitBranchLabel' + i]}; }\n        .commit${i} { stroke: ${options['git' + i]}; fill: ${options['git' + i]}; }\n        .commit-highlight${i} { stroke: ${options['gitInv' + i]}; fill: ${options['gitInv' + i]}; }\n        .label${i}  { fill: ${options['git' + i]}; }\n        .arrow${i} { stroke: ${options['git' + i]}; }\n        `\n    )\n    .join('\\n')}\n\n  .branch {\n    stroke-width: 1;\n    stroke: ${options.lineColor};\n    stroke-dasharray: 2;\n  }\n  .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n  .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${\n    options.commitLabelBackground\n  }; opacity: 0.5; }\n  .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n  .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n  .tag-hole { fill: ${options.textColor}; }\n\n  .commit-merge {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n  }\n  .commit-reverse {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n    stroke-width: 3;\n  }\n  .commit-highlight-outer {\n  }\n  .commit-highlight-inner {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n  }\n\n  .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n  .gitTitleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor};\n  }\n`;\n\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport gitGraphParser from './parser/gitGraph.jison';\nimport gitGraphDb from './gitGraphAst.js';\nimport gitGraphRenderer from './gitGraphRenderer.js';\nimport gitGraphStyles from './styles.js';\nimport type { DiagramDefinition } from '../../diagram-api/types.js';\n\nexport const diagram: DiagramDefinition = {\n  parser: gitGraphParser,\n  db: gitGraphDb,\n  renderer: gitGraphRenderer,\n  styles: gitGraphStyles,\n};\n"],
  "mappings": "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G,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,IAA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AAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,GAAE,IAAG,GAAE,KAAI,IAAG,KAAI,IAAG,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,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,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,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,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,GAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,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,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,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,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,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,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,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,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,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,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,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,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,GAAE,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,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,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,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,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,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,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,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,GAAG,EAAC,GAAE,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,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,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,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,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,GAAG,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,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,IAChzJ,gBAAgB,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC;AAAA,IACnD,YAAY,gCAAS,WAAY,KAAK,MAAM;AACxC,UAAI,KAAK,aAAa;AAClB,aAAK,MAAM,GAAG;AAAA,MAClB,OAAO;AACH,YAAI,QAAQ,IAAI,MAAM,GAAG;AACzB,cAAM,OAAO;AACb,cAAM;AAAA,MACV;AAAA,IACJ,GARY;AAAA,IASZ,OAAO,gCAAS,MAAM,OAAO;AACzB,UAAI,OAAO,MAAM,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,QAAQ,KAAK,OAAO,SAAS,IAAI,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM;AACtK,UAAI,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACzC,UAAIC,SAAQ,OAAO,OAAO,KAAK,KAAK;AACpC,UAAI,cAAc,EAAE,IAAI,CAAC,EAAE;AAC3B,eAAS,KAAK,KAAK,IAAI;AACnB,YAAI,OAAO,UAAU,eAAe,KAAK,KAAK,IAAI,CAAC,GAAG;AAClD,sBAAY,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;AAAA,QACjC;AAAA,MACJ;AACA,MAAAA,OAAM,SAAS,OAAO,YAAY,EAAE;AACpC,kBAAY,GAAG,QAAQA;AACvB,kBAAY,GAAG,SAAS;AACxB,UAAI,OAAOA,OAAM,UAAU,aAAa;AACpC,QAAAA,OAAM,SAAS,CAAC;AAAA,MACpB;AACA,UAAI,QAAQA,OAAM;AAClB,aAAO,KAAK,KAAK;AACjB,UAAI,SAASA,OAAM,WAAWA,OAAM,QAAQ;AAC5C,UAAI,OAAO,YAAY,GAAG,eAAe,YAAY;AACjD,aAAK,aAAa,YAAY,GAAG;AAAA,MACrC,OAAO;AACH,aAAK,aAAa,OAAO,eAAe,IAAI,EAAE;AAAA,MAClD;AACA,eAAS,SAAS,GAAG;AACjB,cAAM,SAAS,MAAM,SAAS,IAAI;AAClC,eAAO,SAAS,OAAO,SAAS;AAChC,eAAO,SAAS,OAAO,SAAS;AAAA,MACpC;AAJS;AAKD,eAAS,MAAM;AACf,YAAI;AACJ,gBAAQ,OAAO,IAAI,KAAKA,OAAM,IAAI,KAAK;AACvC,YAAI,OAAO,UAAU,UAAU;AAC3B,cAAI,iBAAiB,OAAO;AACxB,qBAAS;AACT,oBAAQ,OAAO,IAAI;AAAA,UACvB;AACA,kBAAQ,KAAK,SAAS,KAAK,KAAK;AAAA,QACpC;AACA,eAAO;AAAA,MACX;AAXa;AAYjB,UAAI,QAAQ,gBAAgB,OAAO,QAAQ,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,UAAU;AAC/E,aAAO,MAAM;AACT,gBAAQ,MAAM,MAAM,SAAS,CAAC;AAC9B,YAAI,KAAK,eAAe,KAAK,GAAG;AAC5B,mBAAS,KAAK,eAAe,KAAK;AAAA,QACtC,OAAO;AACH,cAAI,WAAW,QAAQ,OAAO,UAAU,aAAa;AACjD,qBAAS,IAAI;AAAA,UACjB;AACA,mBAAS,MAAM,KAAK,KAAK,MAAM,KAAK,EAAE,MAAM;AAAA,QAChD;AACA,YAAI,OAAO,WAAW,eAAe,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG;AAC/D,cAAI,SAAS;AACb,qBAAW,CAAC;AACZ,eAAK,KAAK,MAAM,KAAK,GAAG;AACpB,gBAAI,KAAK,WAAW,CAAC,KAAK,IAAI,QAAQ;AAClC,uBAAS,KAAK,MAAO,KAAK,WAAW,CAAC,IAAI,GAAI;AAAA,YAClD;AAAA,UACJ;AACA,cAAIA,OAAM,cAAc;AACpB,qBAAS,0BAA0B,WAAW,KAAK,QAAQA,OAAM,aAAa,IAAI,iBAAiB,SAAS,KAAK,IAAI,IAAI,aAAc,KAAK,WAAW,MAAM,KAAK,UAAU;AAAA,UAChL,OAAO;AACH,qBAAS,0BAA0B,WAAW,KAAK,mBAAmB,UAAU,MAAM,iBAAiB,OAAQ,KAAK,WAAW,MAAM,KAAK,UAAU;AAAA,UACxJ;AACA,eAAK,WAAW,QAAQ;AAAA,YACpB,MAAMA,OAAM;AAAA,YACZ,OAAO,KAAK,WAAW,MAAM,KAAK;AAAA,YAClC,MAAMA,OAAM;AAAA,YACZ,KAAK;AAAA,YACL;AAAA,UACJ,CAAC;AAAA,QACL;AACA,YAAI,OAAO,CAAC,aAAa,SAAS,OAAO,SAAS,GAAG;AACjD,gBAAM,IAAI,MAAM,sDAAsD,QAAQ,cAAc,MAAM;AAAA,QACtG;AACA,gBAAQ,OAAO,CAAC,GAAG;AAAA,UACnB,KAAK;AACD,kBAAM,KAAK,MAAM;AACjB,mBAAO,KAAKA,OAAM,MAAM;AACxB,mBAAO,KAAKA,OAAM,MAAM;AACxB,kBAAM,KAAK,OAAO,CAAC,CAAC;AACpB,qBAAS;AACT,gBAAI,CAAC,gBAAgB;AACjB,uBAASA,OAAM;AACf,uBAASA,OAAM;AACf,yBAAWA,OAAM;AACjB,sBAAQA,OAAM;AACd,kBAAI,aAAa,GAAG;AAChB;AAAA,cACJ;AAAA,YACJ,OAAO;AACH,uBAAS;AACT,+BAAiB;AAAA,YACrB;AACA;AAAA,UACJ,KAAK;AACD,kBAAM,KAAK,aAAa,OAAO,CAAC,CAAC,EAAE,CAAC;AACpC,kBAAM,IAAI,OAAO,OAAO,SAAS,GAAG;AACpC,kBAAM,KAAK;AAAA,cACP,YAAY,OAAO,OAAO,UAAU,OAAO,EAAE,EAAE;AAAA,cAC/C,WAAW,OAAO,OAAO,SAAS,CAAC,EAAE;AAAA,cACrC,cAAc,OAAO,OAAO,UAAU,OAAO,EAAE,EAAE;AAAA,cACjD,aAAa,OAAO,OAAO,SAAS,CAAC,EAAE;AAAA,YAC3C;AACA,gBAAI,QAAQ;AACR,oBAAM,GAAG,QAAQ;AAAA,gBACb,OAAO,OAAO,UAAU,OAAO,EAAE,EAAE,MAAM,CAAC;AAAA,gBAC1C,OAAO,OAAO,SAAS,CAAC,EAAE,MAAM,CAAC;AAAA,cACrC;AAAA,YACJ;AACA,gBAAI,KAAK,cAAc,MAAM,OAAO;AAAA,cAChC;AAAA,cACA;AAAA,cACA;AAAA,cACA,YAAY;AAAA,cACZ,OAAO,CAAC;AAAA,cACR;AAAA,cACA;AAAA,YACJ,EAAE,OAAO,IAAI,CAAC;AACd,gBAAI,OAAO,MAAM,aAAa;AAC1B,qBAAO;AAAA,YACX;AACA,gBAAI,KAAK;AACL,sBAAQ,MAAM,MAAM,GAAG,KAAK,MAAM,CAAC;AACnC,uBAAS,OAAO,MAAM,GAAG,KAAK,GAAG;AACjC,uBAAS,OAAO,MAAM,GAAG,KAAK,GAAG;AAAA,YACrC;AACA,kBAAM,KAAK,KAAK,aAAa,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1C,mBAAO,KAAK,MAAM,CAAC;AACnB,mBAAO,KAAK,MAAM,EAAE;AACpB,uBAAW,MAAM,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,MAAM,MAAM,SAAS,CAAC,CAAC;AACjE,kBAAM,KAAK,QAAQ;AACnB;AAAA,UACJ,KAAK;AACD,mBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX,GA3IO;AAAA,EA2IN;AAED,MAAI,QAAS,2BAAU;AACvB,QAAIA,SAAS;AAAA,MAEb,KAAI;AAAA,MAEJ,YAAW,gCAAS,WAAW,KAAK,MAAM;AAClC,YAAI,KAAK,GAAG,QAAQ;AAChB,eAAK,GAAG,OAAO,WAAW,KAAK,IAAI;AAAA,QACvC,OAAO;AACH,gBAAM,IAAI,MAAM,GAAG;AAAA,QACvB;AAAA,MACJ,GANO;AAAA;AAAA,MASX,UAAS,gCAAU,OAAO,IAAI;AACtB,aAAK,KAAK,MAAM,KAAK,MAAM,CAAC;AAC5B,aAAK,SAAS;AACd,aAAK,QAAQ,KAAK,aAAa,KAAK,OAAO;AAC3C,aAAK,WAAW,KAAK,SAAS;AAC9B,aAAK,SAAS,KAAK,UAAU,KAAK,QAAQ;AAC1C,aAAK,iBAAiB,CAAC,SAAS;AAChC,aAAK,SAAS;AAAA,UACV,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,WAAW;AAAA,UACX,aAAa;AAAA,QACjB;AACA,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,QAAQ,CAAC,GAAE,CAAC;AAAA,QAC5B;AACA,aAAK,SAAS;AACd,eAAO;AAAA,MACX,GAlBK;AAAA;AAAA,MAqBT,OAAM,kCAAY;AACV,YAAI,KAAK,KAAK,OAAO,CAAC;AACtB,aAAK,UAAU;AACf,aAAK;AACL,aAAK;AACL,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,YAAI,QAAQ,GAAG,MAAM,iBAAiB;AACtC,YAAI,OAAO;AACP,eAAK;AACL,eAAK,OAAO;AAAA,QAChB,OAAO;AACH,eAAK,OAAO;AAAA,QAChB;AACA,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,MAAM,CAAC;AAAA,QACvB;AAEA,aAAK,SAAS,KAAK,OAAO,MAAM,CAAC;AACjC,eAAO;AAAA,MACX,GApBE;AAAA;AAAA,MAuBN,OAAM,gCAAU,IAAI;AACZ,YAAI,MAAM,GAAG;AACb,YAAI,QAAQ,GAAG,MAAM,eAAe;AAEpC,aAAK,SAAS,KAAK,KAAK;AACxB,aAAK,SAAS,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,SAAS,GAAG;AAE5D,aAAK,UAAU;AACf,YAAI,WAAW,KAAK,MAAM,MAAM,eAAe;AAC/C,aAAK,QAAQ,KAAK,MAAM,OAAO,GAAG,KAAK,MAAM,SAAS,CAAC;AACvD,aAAK,UAAU,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,SAAS,CAAC;AAE7D,YAAI,MAAM,SAAS,GAAG;AAClB,eAAK,YAAY,MAAM,SAAS;AAAA,QACpC;AACA,YAAI,IAAI,KAAK,OAAO;AAEpB,aAAK,SAAS;AAAA,UACV,YAAY,KAAK,OAAO;AAAA,UACxB,WAAW,KAAK,WAAW;AAAA,UAC3B,cAAc,KAAK,OAAO;AAAA,UAC1B,aAAa,SACR,MAAM,WAAW,SAAS,SAAS,KAAK,OAAO,eAAe,KAC5D,SAAS,SAAS,SAAS,MAAM,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,SAChE,KAAK,OAAO,eAAe;AAAA,QACjC;AAEA,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,SAAS,GAAG;AAAA,QACvD;AACA,aAAK,SAAS,KAAK,OAAO;AAC1B,eAAO;AAAA,MACX,GAhCE;AAAA;AAAA,MAmCN,MAAK,kCAAY;AACT,aAAK,QAAQ;AACb,eAAO;AAAA,MACX,GAHC;AAAA;AAAA,MAML,QAAO,kCAAY;AACX,YAAI,KAAK,QAAQ,iBAAiB;AAC9B,eAAK,aAAa;AAAA,QACtB,OAAO;AACH,iBAAO,KAAK,WAAW,4BAA4B,KAAK,WAAW,KAAK,qIAAqI,KAAK,aAAa,GAAG;AAAA,YAC9N,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM,KAAK;AAAA,UACf,CAAC;AAAA,QAEL;AACA,eAAO;AAAA,MACX,GAZG;AAAA;AAAA,MAeP,MAAK,gCAAU,GAAG;AACV,aAAK,MAAM,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,MAClC,GAFC;AAAA;AAAA,MAKL,WAAU,kCAAY;AACd,YAAI,OAAO,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,SAAS,KAAK,MAAM,MAAM;AACzE,gBAAQ,KAAK,SAAS,KAAK,QAAM,MAAM,KAAK,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AAAA,MAC7E,GAHM;AAAA;AAAA,MAMV,eAAc,kCAAY;AAClB,YAAI,OAAO,KAAK;AAChB,YAAI,KAAK,SAAS,IAAI;AAClB,kBAAQ,KAAK,OAAO,OAAO,GAAG,KAAG,KAAK,MAAM;AAAA,QAChD;AACA,gBAAQ,KAAK,OAAO,GAAE,EAAE,KAAK,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,OAAO,EAAE;AAAA,MAClF,GANU;AAAA;AAAA,MASd,cAAa,kCAAY;AACjB,YAAI,MAAM,KAAK,UAAU;AACzB,YAAI,IAAI,IAAI,MAAM,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG;AAC1C,eAAO,MAAM,KAAK,cAAc,IAAI,OAAO,IAAI;AAAA,MACnD,GAJS;AAAA;AAAA,MAOb,YAAW,gCAAS,OAAO,cAAc;AACjC,YAAI,OACA,OACA;AAEJ,YAAI,KAAK,QAAQ,iBAAiB;AAE9B,mBAAS;AAAA,YACL,UAAU,KAAK;AAAA,YACf,QAAQ;AAAA,cACJ,YAAY,KAAK,OAAO;AAAA,cACxB,WAAW,KAAK;AAAA,cAChB,cAAc,KAAK,OAAO;AAAA,cAC1B,aAAa,KAAK,OAAO;AAAA,YAC7B;AAAA,YACA,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,SAAS,KAAK;AAAA,YACd,SAAS,KAAK;AAAA,YACd,QAAQ,KAAK;AAAA,YACb,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,YACb,IAAI,KAAK;AAAA,YACT,gBAAgB,KAAK,eAAe,MAAM,CAAC;AAAA,YAC3C,MAAM,KAAK;AAAA,UACf;AACA,cAAI,KAAK,QAAQ,QAAQ;AACrB,mBAAO,OAAO,QAAQ,KAAK,OAAO,MAAM,MAAM,CAAC;AAAA,UACnD;AAAA,QACJ;AAEA,gBAAQ,MAAM,CAAC,EAAE,MAAM,iBAAiB;AACxC,YAAI,OAAO;AACP,eAAK,YAAY,MAAM;AAAA,QAC3B;AACA,aAAK,SAAS;AAAA,UACV,YAAY,KAAK,OAAO;AAAA,UACxB,WAAW,KAAK,WAAW;AAAA,UAC3B,cAAc,KAAK,OAAO;AAAA,UAC1B,aAAa,QACA,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM,QAAQ,EAAE,CAAC,EAAE,SAC5E,KAAK,OAAO,cAAc,MAAM,CAAC,EAAE;AAAA,QACpD;AACA,aAAK,UAAU,MAAM,CAAC;AACtB,aAAK,SAAS,MAAM,CAAC;AACrB,aAAK,UAAU;AACf,aAAK,SAAS,KAAK,OAAO;AAC1B,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,QAAQ,CAAC,KAAK,QAAQ,KAAK,UAAU,KAAK,MAAM;AAAA,QAChE;AACA,aAAK,QAAQ;AACb,aAAK,aAAa;AAClB,aAAK,SAAS,KAAK,OAAO,MAAM,MAAM,CAAC,EAAE,MAAM;AAC/C,aAAK,WAAW,MAAM,CAAC;AACvB,gBAAQ,KAAK,cAAc,KAAK,MAAM,KAAK,IAAI,MAAM,cAAc,KAAK,eAAe,KAAK,eAAe,SAAS,CAAC,CAAC;AACtH,YAAI,KAAK,QAAQ,KAAK,QAAQ;AAC1B,eAAK,OAAO;AAAA,QAChB;AACA,YAAI,OAAO;AACP,iBAAO;AAAA,QACX,WAAW,KAAK,YAAY;AAExB,mBAAS,KAAK,QAAQ;AAClB,iBAAK,CAAC,IAAI,OAAO,CAAC;AAAA,UACtB;AACA,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX,GArEO;AAAA;AAAA,MAwEX,MAAK,kCAAY;AACT,YAAI,KAAK,MAAM;AACX,iBAAO,KAAK;AAAA,QAChB;AACA,YAAI,CAAC,KAAK,QAAQ;AACd,eAAK,OAAO;AAAA,QAChB;AAEA,YAAI,OACA,OACA,WACA;AACJ,YAAI,CAAC,KAAK,OAAO;AACb,eAAK,SAAS;AACd,eAAK,QAAQ;AAAA,QACjB;AACA,YAAI,QAAQ,KAAK,cAAc;AAC/B,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,sBAAY,KAAK,OAAO,MAAM,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC;AAClD,cAAI,cAAc,CAAC,SAAS,UAAU,CAAC,EAAE,SAAS,MAAM,CAAC,EAAE,SAAS;AAChE,oBAAQ;AACR,oBAAQ;AACR,gBAAI,KAAK,QAAQ,iBAAiB;AAC9B,sBAAQ,KAAK,WAAW,WAAW,MAAM,CAAC,CAAC;AAC3C,kBAAI,UAAU,OAAO;AACjB,uBAAO;AAAA,cACX,WAAW,KAAK,YAAY;AACxB,wBAAQ;AACR;AAAA,cACJ,OAAO;AAEH,uBAAO;AAAA,cACX;AAAA,YACJ,WAAW,CAAC,KAAK,QAAQ,MAAM;AAC3B;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,OAAO;AACP,kBAAQ,KAAK,WAAW,OAAO,MAAM,KAAK,CAAC;AAC3C,cAAI,UAAU,OAAO;AACjB,mBAAO;AAAA,UACX;AAEA,iBAAO;AAAA,QACX;AACA,YAAI,KAAK,WAAW,IAAI;AACpB,iBAAO,KAAK;AAAA,QAChB,OAAO;AACH,iBAAO,KAAK,WAAW,4BAA4B,KAAK,WAAW,KAAK,2BAA2B,KAAK,aAAa,GAAG;AAAA,YACpH,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM,KAAK;AAAA,UACf,CAAC;AAAA,QACL;AAAA,MACJ,GAvDC;AAAA;AAAA,MA0DL,KAAI,gCAAS,MAAO;AACZ,YAAI,IAAI,KAAK,KAAK;AAClB,YAAI,GAAG;AACH,iBAAO;AAAA,QACX,OAAO;AACH,iBAAO,KAAK,IAAI;AAAA,QACpB;AAAA,MACJ,GAPA;AAAA;AAAA,MAUJ,OAAM,gCAAS,MAAO,WAAW;AACzB,aAAK,eAAe,KAAK,SAAS;AAAA,MACtC,GAFE;AAAA;AAAA,MAKN,UAAS,gCAAS,WAAY;AACtB,YAAI,IAAI,KAAK,eAAe,SAAS;AACrC,YAAI,IAAI,GAAG;AACP,iBAAO,KAAK,eAAe,IAAI;AAAA,QACnC,OAAO;AACH,iBAAO,KAAK,eAAe,CAAC;AAAA,QAChC;AAAA,MACJ,GAPK;AAAA;AAAA,MAUT,eAAc,gCAAS,gBAAiB;AAChC,YAAI,KAAK,eAAe,UAAU,KAAK,eAAe,KAAK,eAAe,SAAS,CAAC,GAAG;AACnF,iBAAO,KAAK,WAAW,KAAK,eAAe,KAAK,eAAe,SAAS,CAAC,CAAC,EAAE;AAAA,QAChF,OAAO;AACH,iBAAO,KAAK,WAAW,SAAS,EAAE;AAAA,QACtC;AAAA,MACJ,GANU;AAAA;AAAA,MASd,UAAS,gCAAS,SAAU,GAAG;AACvB,YAAI,KAAK,eAAe,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC;AACpD,YAAI,KAAK,GAAG;AACR,iBAAO,KAAK,eAAe,CAAC;AAAA,QAChC,OAAO;AACH,iBAAO;AAAA,QACX;AAAA,MACJ,GAPK;AAAA;AAAA,MAUT,WAAU,gCAAS,UAAW,WAAW;AACjC,aAAK,MAAM,SAAS;AAAA,MACxB,GAFM;AAAA;AAAA,MAKV,gBAAe,gCAAS,iBAAiB;AACjC,eAAO,KAAK,eAAe;AAAA,MAC/B,GAFW;AAAA,MAGf,SAAS,EAAC,oBAAmB,KAAI;AAAA,MACjC,eAAe,gCAAS,UAAU,IAAG,KAAI,2BAA0B,UAAU;AAC7E,YAAI,UAAQ;AACZ,gBAAO,2BAA2B;AAAA,UAClC,KAAK;AAAG,iBAAK,MAAM,WAAW;AAAE,mBAAO;AACvC;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AAAG,mBAAO;AAChC;AAAA,UACA,KAAK;AAAG,iBAAK,MAAM,WAAW;AAAE,mBAAO;AACvC;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AAAG,mBAAO;AAChC;AAAA,UACA,KAAK;AAAG,iBAAK,MAAM,qBAAqB;AACxC;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AACtB;AAAA,UACA,KAAK;AAAE,mBAAO;AACd;AAAA,UACA,KAAK;AAA2C,mBAAO;AACvD;AAAA,UACA,KAAK;AACL;AAAA,UACA,KAAK;AACL;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,iBAAK,MAAM,SAAS;AAC5B;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AACtB;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,iBAAK,MAAM,QAAQ;AAC3B;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AACtB;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AACL;AAAA,QACA;AAAA,MACA,GAtFe;AAAA,MAuFf,OAAO,CAAC,yBAAwB,yBAAwB,yBAAwB,yBAAwB,0BAAyB,cAAa,gBAAe,kBAAiB,iBAAgB,iBAAgB,oBAAmB,wBAAuB,aAAY,eAAc,cAAa,kBAAiB,mBAAkB,qBAAoB,cAAa,wBAAuB,gBAAe,uBAAsB,6BAA4B,iBAAgB,qCAAoC,cAAa,cAAa,cAAa,WAAU,YAAW,sBAAqB,yBAAwB,kCAAiC,gBAAe,aAAY,aAAY,eAAc,wBAAuB,6BAA4B,WAAU,WAAW;AAAA,MACtvB,YAAY,EAAC,uBAAsB,EAAC,SAAQ,CAAC,GAAE,CAAC,GAAE,aAAY,MAAK,GAAE,aAAY,EAAC,SAAQ,CAAC,CAAC,GAAE,aAAY,MAAK,GAAE,aAAY,EAAC,SAAQ,CAAC,CAAC,GAAE,aAAY,MAAK,GAAE,WAAU,EAAC,SAAQ,CAAC,IAAG,EAAE,GAAE,aAAY,MAAK,GAAE,UAAS,EAAC,SAAQ,CAAC,IAAG,EAAE,GAAE,aAAY,MAAK,GAAE,WAAU,EAAC,SAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,aAAY,KAAI,EAAC;AAAA,IAC3X;AACA,WAAOA;AAAA,EACP,EAAG;AACH,EAAAD,QAAO,QAAQ;AACf,WAAS,SAAU;AACjB,SAAK,KAAK,CAAC;AAAA,EACb;AAFS;AAGT,SAAO,YAAYA;AAAO,EAAAA,QAAO,SAAS;AAC1C,SAAO,IAAI;AACX,EAAG;AACF,OAAO,SAAS;AAEhB,IAAO,mBAAQ;;;AC19BhB,IAAI,iBAAiB,UAAU,EAAE,SAAS;AAC1C,IAAI,kBAAkB,UAAU,EAAE,SAAS;AAC3C,IAAI,UAAU,oBAAI,IAAI;AACtB,IAAI,OAAO;AACX,IAAI,iBAAiB,oBAAI,IAAI;AAC7B,eAAe,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,OAAO,gBAAgB,CAAC;AACnF,IAAI,WAAW,oBAAI,IAAI;AACvB,SAAS,IAAI,gBAAgB,IAAI;AACjC,IAAI,YAAY;AAChB,IAAI,YAAY;AAChB,IAAI,MAAM;AAKV,SAAS,QAAQ;AACf,SAAO,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC7B;AAFS;AA6CT,SAAS,OAAO,MAAM,IAAI;AACxB,QAAM,YAAY,uBAAO,OAAO,IAAI;AACpC,SAAO,KAAK,OAAO,CAAC,KAAK,SAAS;AAChC,UAAM,MAAM,GAAG,IAAI;AACnB,QAAI,CAAC,UAAU,GAAG,GAAG;AACnB,gBAAU,GAAG,IAAI;AACjB,UAAI,KAAK,IAAI;AAAA,IACf;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAVS;AAYF,IAAM,eAAe,gCAAUE,MAAK;AACzC,cAAYA;AACd,GAF4B;AAG5B,IAAI,UAAU,CAAC;AACR,IAAM,aAAa,gCAAU,cAAc;AAChD,MAAI,MAAM,eAAe,YAAY;AACrC,iBAAe,gBAAgB,aAAa,KAAK;AACjD,iBAAe,gBAAgB;AAC/B,MAAI;AACF,cAAU,KAAK,MAAM,YAAY;AAAA,EACnC,SAAS,GAAG;AACV,QAAI,MAAM,wCAAwC,EAAE,OAAO;AAAA,EAC7D;AACF,GAT0B;AAWnB,IAAM,aAAa,kCAAY;AACpC,SAAO;AACT,GAF0B;AAInB,IAAM,SAAS,gCAAU,KAAK,IAAI,MAAM,KAAK;AAClD,MAAI,MAAM,oBAAoB,KAAK,IAAI,MAAM,GAAG;AAChD,OAAK,eAAO,aAAa,IAAI,UAAU,CAAC;AACxC,QAAM,eAAO,aAAa,KAAK,UAAU,CAAC;AAC1C,QAAM,eAAO,aAAa,KAAK,UAAU,CAAC;AAC1C,QAAMC,UAAS;AAAA,IACb,IAAI,KAAK,KAAK,MAAM,MAAM,MAAM;AAAA,IAChC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,MAAM,OAAO,OAAO,WAAW;AAAA,IAC/B,KAAK,MAAM,MAAM;AAAA,IACjB,SAAS,QAAQ,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;AAAA,IACrC,QAAQ;AAAA,EACV;AACA,SAAOA;AACP,UAAQ,IAAIA,QAAO,IAAIA,OAAM;AAC7B,WAAS,IAAI,WAAWA,QAAO,EAAE;AACjC,MAAI,MAAM,mBAAmBA,QAAO,EAAE;AACxC,GAlBsB;AAoBf,IAAM,SAAS,gCAAU,MAAM,OAAO;AAC3C,SAAO,eAAO,aAAa,MAAM,UAAU,CAAC;AAC5C,MAAI,CAAC,SAAS,IAAI,IAAI,GAAG;AACvB,aAAS,IAAI,MAAM,QAAQ,OAAO,KAAK,KAAK,IAAI;AAChD,mBAAe,IAAI,MAAM,EAAE,MAAM,OAAO,QAAQ,SAAS,OAAO,EAAE,IAAI,KAAK,CAAC;AAC5E,aAAS,IAAI;AACb,QAAI,MAAM,iBAAiB;AAAA,EAC7B,OAAO;AACL,QAAI,QAAQ,IAAI;AAAA,MACd,8HACE,OACA;AAAA,IACJ;AACA,UAAM,OAAO;AAAA,MACX,MAAM,YAAY;AAAA,MAClB,OAAO,YAAY;AAAA,MACnB,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,eAAe,OAAO,GAAG;AAAA,IACtC;AACA,UAAM;AAAA,EACR;AACF,GAtBsB;AAwBf,IAAM,QAAQ,gCAAU,aAAa,WAAW,eAAe,YAAY;AAChF,gBAAc,eAAO,aAAa,aAAa,UAAU,CAAC;AAC1D,cAAY,eAAO,aAAa,WAAW,UAAU,CAAC;AAEtD,QAAM,gBAAgB,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC;AACzD,QAAM,cAAc,QAAQ,IAAI,SAAS,IAAI,WAAW,CAAC;AACzD,MAAI,cAAc,aAAa;AAC7B,QAAI,QAAQ,IAAI,MAAM,6DAA6D;AACnF,UAAM,OAAO;AAAA,MACX,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,MAClB,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,YAAY;AAAA,IACzB;AACA,UAAM;AAAA,EACR,WAAW,kBAAkB,UAAa,CAAC,eAAe;AACxD,QAAI,QAAQ,IAAI;AAAA,MACd,iDAAiD,YAAY;AAAA,IAC/D;AACA,UAAM,OAAO;AAAA,MACX,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,MAClB,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,QAAQ;AAAA,IACrB;AACA,UAAM;AAAA,EACR,WAAW,CAAC,SAAS,IAAI,WAAW,GAAG;AACrC,QAAI,QAAQ,IAAI;AAAA,MACd,sDAAsD,cAAc;AAAA,IACtE;AACA,UAAM,OAAO;AAAA,MACX,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,MAClB,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,YAAY,WAAW;AAAA,IACpC;AACA,UAAM;AAAA,EACR,WAAW,gBAAgB,UAAa,CAAC,aAAa;AACpD,QAAI,QAAQ,IAAI;AAAA,MACd,sDAAsD,cAAc;AAAA,IACtE;AACA,UAAM,OAAO;AAAA,MACX,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,MAClB,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,UAAU;AAAA,IACvB;AACA,UAAM;AAAA,EACR,WAAW,kBAAkB,aAAa;AACxC,QAAI,QAAQ,IAAI,MAAM,0DAA0D;AAChF,UAAM,OAAO;AAAA,MACX,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,MAClB,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,YAAY;AAAA,IACzB;AACA,UAAM;AAAA,EACR,WAAW,aAAa,QAAQ,IAAI,SAAS,GAAG;AAC9C,QAAI,QAAQ,IAAI;AAAA,MACd,gDACE,YACA;AAAA,IACJ;AACA,UAAM,OAAO;AAAA,MACX,MAAM,WAAW,cAAc,YAAY,gBAAgB;AAAA,MAC3D,OAAO,WAAW,cAAc,YAAY,gBAAgB;AAAA,MAC5D,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU;AAAA,QACR,WAAW,cAAc,MAAM,YAAY,aAAa,gBAAgB,MAAM;AAAA,MAChF;AAAA,IACF;AAEA,UAAM;AAAA,EACR;AAUA,QAAMA,UAAS;AAAA,IACb,IAAI,YAAY,YAAY,MAAM,MAAM,MAAM;AAAA,IAC9C,SAAS,mBAAmB,cAAc,WAAW;AAAA,IACrD,KAAK;AAAA,IACL,SAAS,CAAC,QAAQ,OAAO,OAAO,KAAK,IAAI,SAAS,IAAI,WAAW,CAAC;AAAA,IAClE,QAAQ;AAAA,IACR,MAAM,WAAW;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU,YAAY,OAAO;AAAA,IAC7B,KAAK,aAAa,aAAa;AAAA,EACjC;AACA,SAAOA;AACP,UAAQ,IAAIA,QAAO,IAAIA,OAAM;AAC7B,WAAS,IAAI,WAAWA,QAAO,EAAE;AAEjC,MAAI,MAAM,QAAQ;AAClB,MAAI,MAAM,gBAAgB;AAC5B,GA1GqB;AA4Gd,IAAM,aAAa,gCAAU,UAAU,UAAU,KAAK,gBAAgB;AAC3E,MAAI,MAAM,wBAAwB,UAAU,UAAU,GAAG;AACzD,aAAW,eAAO,aAAa,UAAU,UAAU,CAAC;AACpD,aAAW,eAAO,aAAa,UAAU,UAAU,CAAC;AACpD,QAAM,eAAO,aAAa,KAAK,UAAU,CAAC;AAC1C,mBAAiB,eAAO,aAAa,gBAAgB,UAAU,CAAC;AAEhE,MAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,QAAQ,GAAG;AACvC,QAAI,QAAQ,IAAI;AAAA,MACd;AAAA,IACF;AACA,UAAM,OAAO;AAAA,MACX,MAAM,gBAAgB,WAAW,MAAM;AAAA,MACvC,OAAO,gBAAgB,WAAW,MAAM;AAAA,MACxC,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,iBAAiB;AAAA,IAC9B;AACA,UAAM;AAAA,EACR;AACA,MAAI,eAAe,QAAQ,IAAI,QAAQ;AACvC,MAAI,qBAAqB,aAAa;AACtC,MACE,kBACA,EAAE,MAAM,QAAQ,aAAa,OAAO,KAAK,aAAa,QAAQ,SAAS,cAAc,IACrF;AACA,QAAI,QAAQ,IAAI;AAAA,MACd;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACA,MAAI,aAAa,SAAS,WAAW,SAAS,CAAC,gBAAgB;AAC7D,QAAI,QAAQ,IAAI;AAAA,MACd;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACA,MAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,QAAQ,GAAG;AAGvC,QAAI,uBAAuB,WAAW;AACpC,UAAI,QAAQ,IAAI;AAAA,QACd;AAAA,MACF;AACA,YAAM,OAAO;AAAA,QACX,MAAM,gBAAgB,WAAW,MAAM;AAAA,QACvC,OAAO,gBAAgB,WAAW,MAAM;AAAA,QACxC,MAAM;AAAA,QACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,QACpE,UAAU,CAAC,iBAAiB;AAAA,MAC9B;AACA,YAAM;AAAA,IACR;AACA,UAAM,gBAAgB,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC;AACzD,QAAI,kBAAkB,UAAa,CAAC,eAAe;AACjD,UAAI,QAAQ,IAAI;AAAA,QACd,uDAAuD,YAAY;AAAA,MACrE;AACA,YAAM,OAAO;AAAA,QACX,MAAM,gBAAgB,WAAW,MAAM;AAAA,QACvC,OAAO,gBAAgB,WAAW,MAAM;AAAA,QACxC,MAAM;AAAA,QACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,QACpE,UAAU,CAAC,iBAAiB;AAAA,MAC9B;AACA,YAAM;AAAA,IACR;AACA,UAAMA,UAAS;AAAA,MACb,IAAI,MAAM,MAAM,MAAM;AAAA,MACtB,SAAS,mBAAmB,eAAe,WAAW;AAAA,MACtD,KAAK;AAAA,MACL,SAAS,CAAC,QAAQ,OAAO,OAAO,KAAK,IAAI,aAAa,EAAE;AAAA,MACxD,QAAQ;AAAA,MACR,MAAM,WAAW;AAAA,MACjB,KACE,OACA,eAAe,aAAa,EAAE,GAC5B,aAAa,SAAS,WAAW,QAAQ,WAAW,cAAc,KAAK,EACzE;AAAA,IACJ;AACA,WAAOA;AACP,YAAQ,IAAIA,QAAO,IAAIA,OAAM;AAC7B,aAAS,IAAI,WAAWA,QAAO,EAAE;AACjC,QAAI,MAAM,QAAQ;AAClB,QAAI,MAAM,eAAe;AAAA,EAC3B;AACF,GAtF0B;AAuFnB,IAAM,WAAW,gCAAUC,SAAQ;AACxC,EAAAA,UAAS,eAAO,aAAaA,SAAQ,UAAU,CAAC;AAChD,MAAI,CAAC,SAAS,IAAIA,OAAM,GAAG;AACzB,QAAI,QAAQ,IAAI;AAAA,MACd,iFAAiFA,UAAS;AAAA,IAC5F;AACA,UAAM,OAAO;AAAA,MACX,MAAM,cAAcA;AAAA,MACpB,OAAO,cAAcA;AAAA,MACrB,MAAM;AAAA,MACN,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,EAAE;AAAA,MACpE,UAAU,CAAC,aAAaA,UAAS,GAAG;AAAA,IACtC;AACA,UAAM;AAAA,EAGR,OAAO;AACL,gBAAYA;AACZ,UAAM,KAAK,SAAS,IAAI,SAAS;AACjC,WAAO,QAAQ,IAAI,EAAE;AAAA,EACvB;AACF,GArBwB;AA+CxB,SAAS,OAAO,KAAK,KAAK,QAAQ;AAChC,QAAM,QAAQ,IAAI,QAAQ,GAAG;AAC7B,MAAI,UAAU,IAAI;AAChB,QAAI,KAAK,MAAM;AAAA,EACjB,OAAO;AACL,QAAI,OAAO,OAAO,GAAG,MAAM;AAAA,EAC7B;AACF;AAPS;AAUT,SAAS,yBAAyB,WAAW;AAC3C,QAAMD,UAAS,UAAU,OAAO,CAAC,KAAKA,YAAW;AAC/C,QAAI,IAAI,MAAMA,QAAO,KAAK;AACxB,aAAO;AAAA,IACT;AACA,WAAOA;AAAA,EACT,GAAG,UAAU,CAAC,CAAC;AACf,MAAI,OAAO;AACX,YAAU,QAAQ,SAAU,GAAG;AAC7B,QAAI,MAAMA,SAAQ;AAChB,cAAQ;AAAA,IACV,OAAO;AACL,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,CAAC,MAAMA,QAAO,IAAIA,QAAO,GAAG;AAC1C,WAASC,WAAU,UAAU;AAC3B,QAAI,SAAS,IAAIA,OAAM,MAAMD,QAAO,IAAI;AACtC,YAAM,KAAKC,OAAM;AAAA,IACnB;AAAA,EACF;AACA,MAAI,MAAM,MAAM,KAAK,GAAG,CAAC;AACzB,MAAID,QAAO,WAAWA,QAAO,QAAQ,UAAU,GAAG;AAChD,UAAM,YAAY,QAAQ,IAAIA,QAAO,QAAQ,CAAC,CAAC;AAC/C,WAAO,WAAWA,SAAQ,SAAS;AACnC,cAAU,KAAK,QAAQ,IAAIA,QAAO,QAAQ,CAAC,CAAC,CAAC;AAAA,EAC/C,WAAWA,QAAO,QAAQ,UAAU,GAAG;AACrC;AAAA,EACF,OAAO;AACL,UAAM,aAAa,QAAQ,IAAIA,QAAO,OAAO;AAC7C,WAAO,WAAWA,SAAQ,UAAU;AAAA,EACtC;AACA,cAAY,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE;AACzC,2BAAyB,SAAS;AACpC;AAlCS;AAoCF,IAAM,cAAc,kCAAY;AACrC,MAAI,MAAM,OAAO;AACjB,QAAM,OAAO,gBAAgB,EAAE,CAAC;AAChC,2BAAyB,CAAC,IAAI,CAAC;AACjC,GAJ2B;AAMpB,IAAME,SAAQ,kCAAY;AAC/B,YAAU,oBAAI,IAAI;AAClB,SAAO;AACP,MAAI,aAAa,UAAU,EAAE,SAAS;AACtC,MAAIC,mBAAkB,UAAU,EAAE,SAAS;AAC3C,aAAW,oBAAI,IAAI;AACnB,WAAS,IAAI,YAAY,IAAI;AAC7B,mBAAiB,oBAAI,IAAI;AACzB,iBAAe,IAAI,YAAY,EAAE,MAAM,YAAY,OAAOA,iBAAgB,CAAC;AAC3E,cAAY;AACZ,QAAM;AACN,QAAY;AACd,GAZqB;AAcd,IAAM,wBAAwB,kCAAY;AAC/C,QAAM,gBAAgB,CAAC,GAAG,eAAe,OAAO,CAAC,EAC9C,IAAI,CAAC,cAAc,MAAM;AACxB,QAAI,aAAa,UAAU,MAAM;AAC/B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO,WAAW,KAAK,CAAC,IAAI,EAAE;AAAA,IAChC;AAAA,EACF,CAAC,EACA,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,IAAI,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE;AAE/B,SAAO;AACT,GAfqC;AAiB9B,IAAM,cAAc,kCAAY;AACrC,SAAO;AACT,GAF2B;AAGpB,IAAM,aAAa,kCAAY;AACpC,SAAO;AACT,GAF0B;AAGnB,IAAM,kBAAkB,kCAAY;AACzC,QAAM,YAAY,CAAC,GAAG,QAAQ,OAAO,CAAC;AACtC,YAAU,QAAQ,SAAU,GAAG;AAC7B,QAAI,MAAM,EAAE,EAAE;AAAA,EAChB,CAAC;AACD,YAAU,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG;AACtC,SAAO;AACT,GAP+B;AAQxB,IAAM,mBAAmB,kCAAY;AAC1C,SAAO;AACT,GAFgC;AAGzB,IAAM,eAAe,kCAAY;AACtC,SAAO;AACT,GAF4B;AAGrB,IAAM,UAAU,kCAAY;AACjC,SAAO;AACT,GAFuB;AAIhB,IAAM,aAAa;AAAA,EACxB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,aAAa;AACf;AAEA,IAAO,sBAAQ;AAAA,EACb,WAAW,6BAAM,UAAU,EAAE,UAAlB;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA,OAAAD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACrhBA,SAAS,cAAc;AAUvB,IAAI,iBAAiB,oBAAI,IAAI;AAE7B,IAAME,cAAa;AAAA,EACjB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,aAAa;AACf;AAEA,IAAM,oBAAoB;AAE1B,IAAI,YAAY,CAAC;AACjB,IAAI,YAAY,CAAC;AACjB,IAAI,QAAQ,CAAC;AACb,IAAI,SAAS;AACb,IAAI,MAAM;AACV,IAAI,aAAa;AACjB,IAAMC,SAAQ,6BAAM;AAClB,cAAY,oBAAI,IAAI;AACpB,cAAY,oBAAI,IAAI;AACpB,mBAAiB,oBAAI,IAAI;AACzB,WAAS;AACT,UAAQ,CAAC;AACT,QAAM;AACR,GAPc;AAed,IAAM,WAAW,wBAAC,QAAQ;AACxB,QAAM,WAAW,SAAS,gBAAgB,8BAA8B,MAAM;AAC9E,MAAI,OAAO,CAAC;AAGZ,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,IAAI,MAAM,qBAAqB;AAAA,EACxC,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC7B,WAAO;AAAA,EACT,OAAO;AACL,WAAO,CAAC;AAAA,EACV;AAEA,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,SAAS,gBAAgB,8BAA8B,OAAO;AAC5E,UAAM,eAAe,wCAAwC,aAAa,UAAU;AACpF,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,aAAa,KAAK,GAAG;AAC3B,UAAM,aAAa,SAAS,KAAK;AACjC,UAAM,cAAc,IAAI,KAAK;AAC7B,aAAS,YAAY,KAAK;AAAA,EAC5B;AAKA,SAAO;AACT,GA3BiB;AAqCjB,IAAM,oBAAoB,wBAAC,YAAY;AACrC,MAAI,gBAAgB;AACpB,MAAI,cAAc;AAElB,UAAQ,QAAQ,CAAC,WAAW;AAC1B,UAAM,iBACJ,QAAQ,QAAQ,QAAQ,OAAO,UAAU,IAAI,MAAM,EAAE,IAAI,UAAU,IAAI,MAAM,EAAE;AACjF,QAAI,kBAAkB,aAAa;AACjC,sBAAgB;AAChB,oBAAc;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO,iBAAiB;AAC1B,GAd0B;AAwB1B,IAAM,sBAAsB,wBAAC,YAAY;AACvC,MAAI,gBAAgB;AACpB,MAAI,cAAc;AAElB,UAAQ,QAAQ,CAAC,WAAW;AAC1B,UAAM,iBAAiB,UAAU,IAAI,MAAM,EAAE;AAC7C,QAAI,kBAAkB,aAAa;AACjC,sBAAgB;AAChB,oBAAc;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO,iBAAiB;AAC1B,GAb4B;AA4B5B,IAAM,mBAAmB,wBAAC,YAAYC,UAASC,aAAY,YAAY,iBAAiB;AACtF,MAAI,SAASA;AACb,MAAI,cAAcA;AAClB,MAAI,QAAQ,CAAC;AACb,aAAW,QAAQ,CAAC,QAAQ;AAC1B,UAAMC,UAASF,SAAQ,IAAI,GAAG;AAC9B,QAAIE,QAAO,QAAQ,QAAQ;AACzB,YAAM,gBAAgB,kBAAkBA,QAAO,OAAO;AACtD,eAAS,UAAU,IAAI,aAAa,EAAE,IAAI;AAC1C,UAAI,UAAU,aAAa;AACzB,sBAAc;AAAA,MAChB;AAAA,IACF,OAAO;AACL,YAAM,KAAKA,OAAM;AAAA,IACnB;AACA,UAAM,IAAI,UAAU,IAAIA,QAAO,MAAM,EAAE;AACvC,UAAM,IAAI,SAAS;AACnB,cAAU,IAAIA,QAAO,IAAI,EAAE,GAAM,EAAK,CAAC;AAAA,EACzC,CAAC;AACD,WAAS;AACT,QAAM,QAAQ,CAACA,YAAW;AACxB,UAAM,gBAAgB,SAASD;AAC/B,UAAM,IAAI;AACV,UAAM,IAAI,UAAU,IAAIC,QAAO,MAAM,EAAE;AACvC,cAAU,IAAIA,QAAO,IAAI,EAAE,GAAM,EAAK,CAAC;AAAA,EACzC,CAAC;AACD,aAAW,QAAQ,CAAC,QAAQ;AAC1B,UAAMA,UAASF,SAAQ,IAAI,GAAG;AAC9B,QAAIE,QAAO,QAAQ,QAAQ;AACzB,YAAM,gBAAgB,oBAAoBA,QAAO,OAAO;AACxD,eAAS,UAAU,IAAI,aAAa,EAAE,IAAI;AAC1C,UAAI,UAAU,aAAa;AACzB,sBAAc;AAAA,MAChB;AACA,YAAM,IAAI,UAAU,IAAIA,QAAO,MAAM,EAAE;AACvC,YAAM,IAAI,SAAS;AACnB,gBAAU,IAAIA,QAAO,IAAI,EAAE,GAAM,EAAK,CAAC;AAAA,IACzC;AAAA,EACF,CAAC;AACH,GAvCyB;AAkDzB,IAAM,cAAc,wBAAC,KAAKF,UAAS,gBAAgB;AACjD,QAAM,iBAAiB,UAAU,EAAE;AACnC,QAAM,WAAW,IAAI,OAAO,GAAG,EAAE,KAAK,SAAS,gBAAgB;AAC/D,QAAM,UAAU,IAAI,OAAO,GAAG,EAAE,KAAK,SAAS,eAAe;AAC7D,MAAI,MAAM;AAEV,MAAI,QAAQ,QAAQ,QAAQ,MAAM;AAChC,UAAM;AAAA,EACR;AACA,QAAM,OAAO,CAAC,GAAGA,SAAQ,KAAK,CAAC;AAC/B,QAAM,oBAAoB,eAAe;AACzC,QAAM,eAAe;AACrB,QAAM,aAAa;AACnB,MAAI,aACF,QAAQ,QAAS,QAAQ,QAAQ,oBAC7B,KAAK,KAAK,CAAC,GAAG,MAAM;AAClB,WAAOA,SAAQ,IAAI,CAAC,EAAE,MAAMA,SAAQ,IAAI,CAAC,EAAE;AAAA,EAC7C,CAAC,IACD,KACG,KAAK,CAAC,GAAG,MAAM;AACd,WAAOA,SAAQ,IAAI,CAAC,EAAE,MAAMA,SAAQ,IAAI,CAAC,EAAE;AAAA,EAC7C,CAAC,EACA,QAAQ;AAEjB,MAAI,QAAQ,QAAQ,mBAAmB;AACrC,qBAAiB,YAAYA,UAAS,KAAK,YAAY,YAAY;AACnE,iBAAa,WAAW,QAAQ;AAAA,EAClC;AACA,aAAW,QAAQ,CAAC,QAAQ;AAC1B,UAAME,UAASF,SAAQ,IAAI,GAAG;AAC9B,QAAI,mBAAmB;AACrB,UAAIE,QAAO,QAAQ,QAAQ;AACzB,cAAM,gBACJ,QAAQ,OAAO,oBAAoBA,QAAO,OAAO,IAAI,kBAAkBA,QAAO,OAAO;AACvF,YAAI,QAAQ,MAAM;AAChB,gBAAM,UAAU,IAAI,aAAa,EAAE,IAAI;AAAA,QACzC,WAAW,QAAQ,MAAM;AACvB,gBAAM,UAAU,IAAI,GAAG,EAAE,IAAI;AAAA,QAC/B,OAAO;AACL,gBAAM,UAAU,IAAI,aAAa,EAAE,IAAI;AAAA,QACzC;AAAA,MACF,OAAO;AACL,YAAI,QAAQ,MAAM;AAChB,gBAAM;AAAA,QACR,WAAW,QAAQ,MAAM;AACvB,gBAAM,UAAU,IAAI,GAAG,EAAE,IAAI;AAAA,QAC/B,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,gBAAgB,QAAQ,QAAQ,oBAAoB,MAAM,MAAM;AACtE,UAAM,IAAI,QAAQ,QAAQ,QAAQ,OAAO,gBAAgB,UAAU,IAAIA,QAAO,MAAM,EAAE;AACtF,UAAM,IAAI,QAAQ,QAAQ,QAAQ,OAAO,UAAU,IAAIA,QAAO,MAAM,EAAE,MAAM;AAG5E,QAAI,aAAa;AACf,UAAI;AACJ,UAAI,mBACFA,QAAO,eAAe,UAAaA,QAAO,eAAe,KACrDA,QAAO,aACPA,QAAO;AACb,cAAQ,kBAAkB;AAAA,QACxB,KAAKJ,YAAW;AACd,sBAAY;AACZ;AAAA,QACF,KAAKA,YAAW;AACd,sBAAY;AACZ;AAAA,QACF,KAAKA,YAAW;AACd,sBAAY;AACZ;AAAA,QACF,KAAKA,YAAW;AACd,sBAAY;AACZ;AAAA,QACF,KAAKA,YAAW;AACd,sBAAY;AACZ;AAAA,QACF;AACE,sBAAY;AAAA,MAChB;AAEA,UAAI,qBAAqBA,YAAW,WAAW;AAC7C,cAAM,SAAS,SAAS,OAAO,MAAM;AACrC,eAAO,KAAK,KAAK,IAAI,EAAE;AACvB,eAAO,KAAK,KAAK,IAAI,EAAE;AACvB,eAAO,KAAK,UAAU,EAAE;AACxB,eAAO,KAAK,SAAS,EAAE;AACvB,eAAO;AAAA,UACL;AAAA,UACA,UAAUI,QAAO,EAAE,oBACjB,UAAU,IAAIA,QAAO,MAAM,EAAE,QAAQ,iBACvC,IAAI,SAAS;AAAA,QACf;AACA,iBACG,OAAO,MAAM,EACb,KAAK,KAAK,IAAI,CAAC,EACf,KAAK,KAAK,IAAI,CAAC,EACf,KAAK,UAAU,EAAE,EACjB,KAAK,SAAS,EAAE,EAChB;AAAA,UACC;AAAA,UACA,UAAUA,QAAO,EAAE,UACjB,UAAU,IAAIA,QAAO,MAAM,EAAE,QAAQ,iBACvC,IAAI,SAAS;AAAA,QACf;AAAA,MACJ,WAAW,qBAAqBJ,YAAW,aAAa;AACtD,iBACG,OAAO,QAAQ,EACf,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,CAAC,EACZ,KAAK,KAAK,EAAE,EACZ,KAAK,SAAS,UAAUI,QAAO,EAAE,IAAI,SAAS,EAAE;AACnD,iBACG,OAAO,QAAQ,EACf,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,KAAK,IAAI,EACd,KAAK,QAAQ,MAAM,EACnB,KAAK,SAAS,UAAUA,QAAO,EAAE,IAAI,SAAS,EAAE;AACnD,iBACG,OAAO,QAAQ,EACf,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,KAAK,IAAI,EACd,KAAK,QAAQ,MAAM,EACnB,KAAK,SAAS,UAAUA,QAAO,EAAE,IAAI,SAAS,EAAE;AACnD,iBACG,OAAO,MAAM,EACb,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,UAAU,MAAM,EACrB,KAAK,SAAS,UAAUA,QAAO,EAAE,IAAI,SAAS,EAAE;AACnD,iBACG,OAAO,MAAM,EACb,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,UAAU,MAAM,EACrB,KAAK,SAAS,UAAUA,QAAO,EAAE,IAAI,SAAS,EAAE;AAAA,MACrD,OAAO;AACL,cAAM,SAAS,SAAS,OAAO,QAAQ;AACvC,eAAO,KAAK,MAAM,CAAC;AACnB,eAAO,KAAK,MAAM,CAAC;AACnB,eAAO,KAAK,KAAKA,QAAO,SAASJ,YAAW,QAAQ,IAAI,EAAE;AAC1D,eAAO;AAAA,UACL;AAAA,UACA,UAAUI,QAAO,EAAE,UAAU,UAAU,IAAIA,QAAO,MAAM,EAAE,QAAQ,iBAAiB;AAAA,QACrF;AACA,YAAI,qBAAqBJ,YAAW,OAAO;AACzC,gBAAM,UAAU,SAAS,OAAO,QAAQ;AACxC,kBAAQ,KAAK,MAAM,CAAC;AACpB,kBAAQ,KAAK,MAAM,CAAC;AACpB,kBAAQ,KAAK,KAAK,CAAC;AACnB,kBAAQ;AAAA,YACN;AAAA,YACA,UAAU,SAAS,IAAII,QAAO,EAAE,UAC9B,UAAU,IAAIA,QAAO,MAAM,EAAE,QAAQ,iBACvC;AAAA,UACF;AAAA,QACF;AACA,YAAI,qBAAqBJ,YAAW,SAAS;AAC3C,gBAAM,QAAQ,SAAS,OAAO,MAAM;AACpC,gBACG,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EACrF;AAAA,YACC;AAAA,YACA,UAAU,SAAS,IAAII,QAAO,EAAE,UAC9B,UAAU,IAAIA,QAAO,MAAM,EAAE,QAAQ,iBACvC;AAAA,UACF;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,QAAQ,QAAQ,MAAM;AAChC,gBAAU,IAAIA,QAAO,IAAI,EAAE,GAAM,GAAG,cAAc,CAAC;AAAA,IACrD,OAAO;AACL,gBAAU,IAAIA,QAAO,IAAI,EAAE,GAAG,eAAe,EAAK,CAAC;AAAA,IACrD;AAKA,QAAI,aAAa;AACf,YAAM,KAAK;AACX,YAAM,KAAK;AAEX,UACEA,QAAO,SAASJ,YAAW,gBACzBI,QAAO,YAAYA,QAAO,SAASJ,YAAW,SAC9CI,QAAO,SAASJ,YAAW,UAC7B,eAAe,iBACf;AACA,cAAM,UAAU,QAAQ,OAAO,GAAG;AAClC,cAAM,WAAW,QAAQ,OAAO,MAAM,EAAE,KAAK,SAAS,kBAAkB;AAExE,cAAM,OAAO,QACV,OAAO,MAAM,EACb,KAAK,KAAK,GAAG,EACb,KAAK,KAAK,IAAI,EAAE,EAChB,KAAK,SAAS,cAAc,EAC5B,KAAKI,QAAO,EAAE;AACjB,YAAI,OAAO,KAAK,KAAK,EAAE,QAAQ;AAG/B,iBACG,KAAK,KAAK,gBAAgB,KAAK,QAAQ,IAAI,EAAE,EAC7C,KAAK,KAAK,IAAI,IAAI,EAClB,KAAK,SAAS,KAAK,QAAQ,IAAI,EAAE,EACjC,KAAK,UAAU,KAAK,SAAS,IAAI,EAAE;AAEtC,YAAI,QAAQ,QAAQ,QAAQ,MAAM;AAChC,mBAAS,KAAK,KAAK,KAAK,KAAK,QAAQ,IAAI,KAAK,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;AAClE,eAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,IAAI,GAAG,EAAE,KAAK,KAAK,IAAI,KAAK,SAAS,EAAE;AAAA,QAC1E,OAAO;AACL,eAAK,KAAK,KAAK,gBAAgB,KAAK,QAAQ,CAAC;AAAA,QAC/C;AACA,YAAI,eAAe,mBAAmB;AACpC,cAAI,QAAQ,QAAQ,QAAQ,MAAM;AAChC,iBAAK,KAAK,aAAa,iBAAyB,IAAI,OAAO,IAAI,GAAG;AAClE,qBAAS,KAAK,aAAa,iBAAyB,IAAI,OAAO,IAAI,GAAG;AAAA,UACxE,OAAO;AACL,gBAAI,MAAM,QAAS,KAAK,QAAQ,MAAM,KAAM;AAC5C,gBAAI,MAAM,KAAM,KAAK,QAAQ,KAAM;AACnC,oBAAQ;AAAA,cACN;AAAA,cACA,eAAe,MAAM,OAAO,MAAM,mBAA2B,MAAM,OAAO,IAAI;AAAA,YAChF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAIA,QAAO,KAAK;AACd,cAAM,OAAO,QAAQ,OAAO,SAAS;AACrC,cAAM,OAAO,QAAQ,OAAO,QAAQ;AACpC,cAAM,MAAM,QACT,OAAO,MAAM,EAEb,KAAK,KAAK,IAAI,EAAE,EAChB,KAAK,SAAS,WAAW,EACzB,KAAKA,QAAO,GAAG;AAClB,YAAI,UAAU,IAAI,KAAK,EAAE,QAAQ;AACjC,YAAI,KAAK,KAAK,gBAAgB,QAAQ,QAAQ,CAAC;AAE/C,cAAM,KAAK,QAAQ,SAAS;AAC5B,cAAM,KAAK,IAAI;AACf,aAAK,KAAK,SAAS,eAAe,EAAE;AAAA,UAClC;AAAA,UACA;AAAA,YACE,MAAM,QAAQ,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE;AAAA,YAC3C,MAAM,QAAQ,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE;AAAA,YAC3C,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE;AAAA,YACtD,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE;AAAA,YACtD,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE;AAAA,YACtD,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE;AAAA,QAC1D;AAEA,aACG,KAAK,MAAM,MAAM,QAAQ,QAAQ,IAAI,KAAK,CAAC,EAC3C,KAAK,MAAM,EAAE,EACb,KAAK,KAAK,GAAG,EACb,KAAK,SAAS,UAAU;AAE3B,YAAI,QAAQ,QAAQ,QAAQ,MAAM;AAChC,eACG,KAAK,SAAS,eAAe,EAC7B;AAAA,YACC;AAAA,YACA;AAAA,cACA,CAAC,IAAI,MAAM,EAAE;AAAA,cACb,CAAC,IAAI,MAAM,EAAE;AAAA,cACb,IAAI,YAAY,IAAI,MAAM,KAAK,EAAE;AAAA,cACjC,IAAI,eAAe,QAAQ,QAAQ,EAAE,IAAI,MAAM,KAAK,EAAE;AAAA,cACtD,IAAI,eAAe,QAAQ,QAAQ,EAAE,IAAI,MAAM,KAAK,EAAE;AAAA,cACtD,IAAI,YAAY,IAAI,MAAM,KAAK,EAAE;AAAA,UACnC,EACC,KAAK,aAAa,iCAAiC,IAAI,MAAM,MAAM,GAAG;AACzE,eACG,KAAK,MAAM,IAAI,KAAK,CAAC,EACrB,KAAK,MAAM,GAAG,EACd,KAAK,aAAa,iCAAiC,IAAI,MAAM,MAAM,GAAG;AACzE,cACG,KAAK,KAAK,IAAI,CAAC,EACf,KAAK,KAAK,MAAM,CAAC,EACjB,KAAK,aAAa,iCAAiC,IAAI,MAAM,MAAM,GAAG;AAAA,QAC3E;AAAA,MACF;AAAA,IACF;AACA,UAAM,QAAQ,QAAQ,oBAAoB,MAAM,aAAa,MAAM,aAAa;AAChF,QAAI,MAAM,QAAQ;AAChB,eAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH,GAvSoB;AA6TpB,IAAM,qBAAqB,wBAAC,SAAS,SAAS,IAAI,IAAI,eAAe;AACnE,QAAM,oBAAoB,QAAQ,QAAQ,QAAQ,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;AACjF,QAAM,mBAAmB,oBAAoB,QAAQ,SAAS,QAAQ;AACtE,QAAM,uBAAuB,wBAAC,MAAM,EAAE,WAAW,kBAApB;AAC7B,QAAM,mBAAmB,wBAAC,MAAM,EAAE,MAAM,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAA9C;AACzB,SAAO,CAAC,GAAG,WAAW,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY;AAChD,WAAO,iBAAiB,OAAO,KAAK,qBAAqB,OAAO;AAAA,EAClE,CAAC;AACH,GAR2B;AAmB3B,IAAM,WAAW,wBAAC,IAAI,IAAI,QAAQ,MAAM;AACtC,QAAM,YAAY,KAAK,KAAK,IAAI,KAAK,EAAE,IAAI;AAC3C,MAAI,QAAQ,GAAG;AACb,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,MAAM,MAAM,CAAC,SAAS,KAAK,IAAI,OAAO,SAAS,KAAK,EAAE;AAC/D,MAAI,IAAI;AACN,UAAM,KAAK,SAAS;AACpB,WAAO;AAAA,EACT;AACA,QAAM,OAAO,KAAK,IAAI,KAAK,EAAE;AAC7B,SAAO,SAAS,IAAI,KAAK,OAAO,GAAG,QAAQ,CAAC;AAC9C,GAbiB;AAuBjB,IAAM,YAAY,wBAAC,KAAK,SAAS,SAAS,eAAe;AACvD,QAAM,KAAK,UAAU,IAAI,QAAQ,EAAE;AACnC,QAAM,KAAK,UAAU,IAAI,QAAQ,EAAE;AACnC,QAAM,sBAAsB,mBAAmB,SAAS,SAAS,IAAI,IAAI,UAAU;AAKnF,MAAI,MAAM;AACV,MAAI,OAAO;AACX,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,gBAAgB,UAAU,IAAI,QAAQ,MAAM,EAAE;AAClD,MAAI,QAAQ,SAASJ,YAAW,SAAS,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;AAC1E,oBAAgB,UAAU,IAAI,QAAQ,MAAM,EAAE;AAAA,EAChD;AAEA,MAAI;AACJ,MAAI,qBAAqB;AACvB,UAAM;AACN,WAAO;AACP,aAAS;AACT,aAAS;AAET,UAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,SAAS,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,CAAC;AACtE,UAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,SAAS,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,CAAC;AAEtE,QAAI,QAAQ,MAAM;AAChB,UAAI,GAAG,IAAI,GAAG,GAAG;AAGf,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,QAAQ,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,IACtE,GAAG,IAAI,MACT,MAAM,KAAK,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MACjF,OAAO;AAGL,wBAAgB,UAAU,IAAI,QAAQ,MAAM,EAAE;AAC9C,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,QAAQ,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,IACrE,GAAG,IAAI,MACT,MAAM,KAAK,IAAI,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MAClF;AAAA,IACF,WAAW,QAAQ,MAAM;AACvB,UAAI,GAAG,IAAI,GAAG,GAAG;AAGf,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,QAAQ,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,IACrE,GAAG,IAAI,MACT,MAAM,KAAK,IAAI,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MAClF,OAAO;AAGL,wBAAgB,UAAU,IAAI,QAAQ,MAAM,EAAE;AAC9C,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,QAAQ,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,IACtE,GAAG,IAAI,MACT,MAAM,KAAK,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MACjF;AAAA,IACF,OAAO;AACL,UAAI,GAAG,IAAI,GAAG,GAAG;AAGf,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,MAAM,IAAI,GAAG,IAC5D,GAAG,IAAI,MACT,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,QAAQ,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MAC3F,OAAO;AAGL,wBAAgB,UAAU,IAAI,QAAQ,MAAM,EAAE;AAC9C,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,MAAM,IAAI,IAAI,IAC7D,GAAG,IAAI,MACT,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,QAAQ,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MAC1F;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM;AACN,WAAO;AACP,aAAS;AACT,aAAS;AAET,QAAI,QAAQ,MAAM;AAChB,UAAI,GAAG,IAAI,GAAG,GAAG;AACf,YAAI,QAAQ,SAASA,YAAW,SAAS,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;AAC1E,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM,IAC5E,GAAG,CACL,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB,OAAO;AACL,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,IACpE,GAAG,IAAI,MACT,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB;AAAA,MACF;AACA,UAAI,GAAG,IAAI,GAAG,GAAG;AACf,cAAM;AACN,eAAO;AACP,iBAAS;AACT,iBAAS;AACT,YAAI,QAAQ,SAASA,YAAW,SAAS,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;AAC1E,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,IAC7E,GAAG,CACL,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB,OAAO;AACL,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IACnE,GAAG,IAAI,MACT,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB;AAAA,MACF;AAEA,UAAI,GAAG,MAAM,GAAG,GAAG;AACjB,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MAC/C;AAAA,IACF,WAAW,QAAQ,MAAM;AACvB,UAAI,GAAG,IAAI,GAAG,GAAG;AACf,YAAI,QAAQ,SAASA,YAAW,SAAS,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;AAC1E,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,IAC7E,GAAG,CACL,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB,OAAO;AACL,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IACnE,GAAG,IAAI,MACT,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB;AAAA,MACF;AACA,UAAI,GAAG,IAAI,GAAG,GAAG;AACf,cAAM;AACN,eAAO;AACP,iBAAS;AACT,iBAAS;AAET,YAAI,QAAQ,SAASA,YAAW,SAAS,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;AAC1E,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM,IAC5E,GAAG,CACL,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB,OAAO;AACL,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IACnE,GAAG,IAAI,MACT,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB;AAAA,MACF;AAEA,UAAI,GAAG,MAAM,GAAG,GAAG;AACjB,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MAC/C;AAAA,IACF,OAAO;AACL,UAAI,GAAG,IAAI,GAAG,GAAG;AACf,YAAI,QAAQ,SAASA,YAAW,SAAS,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;AAC1E,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,IACpE,GAAG,IAAI,MACT,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB,OAAO;AACL,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM,IAC5E,GAAG,CACL,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB;AAAA,MACF;AACA,UAAI,GAAG,IAAI,GAAG,GAAG;AACf,YAAI,QAAQ,SAASA,YAAW,SAAS,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;AAC1E,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IACnE,GAAG,IAAI,MACT,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB,OAAO;AACL,oBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,IAC7E,GAAG,CACL,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,QACpB;AAAA,MACF;AAEA,UAAI,GAAG,MAAM,GAAG,GAAG;AACjB,kBAAU,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACA,MACG,OAAO,MAAM,EACb,KAAK,KAAK,OAAO,EACjB,KAAK,SAAS,gBAAiB,gBAAgB,iBAAkB;AACtE,GA/KkB;AAqLlB,IAAM,aAAa,wBAAC,KAAKE,aAAY;AACnC,QAAM,UAAU,IAAI,OAAO,GAAG,EAAE,KAAK,SAAS,eAAe;AAC7D,GAAC,GAAGA,SAAQ,KAAK,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACnC,UAAME,UAASF,SAAQ,IAAI,GAAG;AAC9B,QAAIE,QAAO,WAAWA,QAAO,QAAQ,SAAS,GAAG;AAC/C,MAAAA,QAAO,QAAQ,QAAQ,CAAC,WAAW;AACjC,kBAAU,SAASF,SAAQ,IAAI,MAAM,GAAGE,SAAQF,QAAO;AAAA,MACzD,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH,GAVmB;AAkBnB,IAAM,eAAe,wBAAC,KAAKG,cAAa;AACtC,QAAM,iBAAiB,UAAU,EAAE;AACnC,QAAM,IAAI,IAAI,OAAO,GAAG;AACxB,EAAAA,UAAS,QAAQ,CAACC,SAAQ,UAAU;AAClC,UAAM,sBAAsB,QAAQ;AAEpC,UAAM,MAAM,UAAU,IAAIA,QAAO,IAAI,EAAE;AACvC,UAAM,OAAO,EAAE,OAAO,MAAM;AAC5B,SAAK,KAAK,MAAM,CAAC;AACjB,SAAK,KAAK,MAAM,GAAG;AACnB,SAAK,KAAK,MAAM,MAAM;AACtB,SAAK,KAAK,MAAM,GAAG;AACnB,SAAK,KAAK,SAAS,kBAAkB,mBAAmB;AAExD,QAAI,QAAQ,MAAM;AAChB,WAAK,KAAK,MAAM,UAAU;AAC1B,WAAK,KAAK,MAAM,GAAG;AACnB,WAAK,KAAK,MAAM,MAAM;AACtB,WAAK,KAAK,MAAM,GAAG;AAAA,IACrB,WAAW,QAAQ,MAAM;AACvB,WAAK,KAAK,MAAM,MAAM;AACtB,WAAK,KAAK,MAAM,GAAG;AACnB,WAAK,KAAK,MAAM,UAAU;AAC1B,WAAK,KAAK,MAAM,GAAG;AAAA,IACrB;AACA,UAAM,KAAK,GAAG;AAEd,QAAI,OAAOA,QAAO;AAGlB,UAAM,eAAe,SAAS,IAAI;AAElC,UAAM,MAAM,EAAE,OAAO,MAAM;AAC3B,UAAM,cAAc,EAAE,OAAO,GAAG,EAAE,KAAK,SAAS,aAAa;AAG7D,UAAM,QAAQ,YAAY,OAAO,GAAG,EAAE,KAAK,SAAS,uBAAuB,mBAAmB;AAC9F,UAAM,KAAK,EAAE,YAAY,YAAY;AACrC,QAAI,OAAO,aAAa,QAAQ;AAChC,QACG,KAAK,SAAS,yBAAyB,mBAAmB,EAC1D,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,CAAC,EACZ,KAAK,KAAK,CAAC,KAAK,QAAQ,KAAK,eAAe,sBAAsB,OAAO,KAAK,EAAE,EAChF,KAAK,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,EAC9B,KAAK,SAAS,KAAK,QAAQ,EAAE,EAC7B,KAAK,UAAU,KAAK,SAAS,CAAC;AACjC,UAAM;AAAA,MACJ;AAAA,MACA,gBACG,CAAC,KAAK,QAAQ,MAAM,eAAe,sBAAsB,OAAO,KAAK,MACtE,QACC,MAAM,KAAK,SAAS,IAAI,KACzB;AAAA,IACJ;AACA,QAAI,QAAQ,MAAM;AAChB,UAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,IAAI,EAAE,EAAE,KAAK,KAAK,CAAC;AACpD,YAAM,KAAK,aAAa,gBAAgB,MAAM,KAAK,QAAQ,IAAI,KAAK,MAAc;AAAA,IACpF,WAAW,QAAQ,MAAM;AACvB,UAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM;AACzD,YAAM,KAAK,aAAa,gBAAgB,MAAM,KAAK,QAAQ,IAAI,KAAK,OAAO,SAAS,GAAG;AAAA,IACzF,OAAO;AACL,UAAI,KAAK,aAAa,qBAA6B,MAAM,KAAK,SAAS,KAAK,GAAG;AAAA,IACjF;AAAA,EACF,CAAC;AACH,GAjEqB;AAyEd,IAAM,OAAO,gCAAU,KAAK,IAAI,KAAK,SAAS;AACnD,EAAAL,OAAM;AACN,QAAM,OAAO,UAAU;AACvB,QAAM,iBAAiB,KAAK;AAE5B,MAAI,MAAM,wBAAwB,MAAM,MAAM,OAAO,IAAI,GAAG;AAE5D,mBAAiB,QAAQ,GAAG,WAAW;AACvC,QAAMI,YAAW,QAAQ,GAAG,sBAAsB;AAClD,QAAM,QAAQ,GAAG,aAAa;AAC9B,QAAME,WAAU,OAAO,QAAQ,EAAE,IAAI;AAErC,MAAI,MAAM;AACV,EAAAF,UAAS,QAAQ,CAACC,SAAQ,UAAU;AAClC,UAAM,eAAe,SAASA,QAAO,IAAI;AACzC,UAAM,IAAIC,SAAQ,OAAO,GAAG;AAC5B,UAAM,cAAc,EAAE,OAAO,GAAG,EAAE,KAAK,SAAS,aAAa;AAC7D,UAAM,QAAQ,YAAY,OAAO,GAAG,EAAE,KAAK,SAAS,oBAAoB;AACxE,UAAM,KAAK,EAAE,YAAY,YAAY;AACrC,QAAI,OAAO,aAAa,QAAQ;AAEhC,cAAU,IAAID,QAAO,MAAM,EAAE,KAAK,MAAM,CAAC;AACzC,WACE,MACC,eAAe,oBAAoB,KAAK,MACxC,QAAQ,QAAQ,QAAQ,OAAO,KAAK,QAAQ,IAAI;AACnD,UAAM,OAAO;AACb,gBAAY,OAAO;AACnB,MAAE,OAAO;AAAA,EACX,CAAC;AAED,cAAYC,UAAS,gBAAgB,KAAK;AAC1C,MAAI,eAAe,cAAc;AAC/B,iBAAaA,UAASF,SAAQ;AAAA,EAChC;AACA,aAAWE,UAAS,cAAc;AAClC,cAAYA,UAAS,gBAAgB,IAAI;AACzC,gBAAM;AAAA,IACJA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,QAAQ,GAAG,gBAAgB;AAAA,EAC7B;AAGA;AAAA,IACE;AAAA,IACAA;AAAA,IACA,eAAe;AAAA,IACf,eAAe,eAAe,KAAK;AAAA,EACrC;AACF,GAnDoB;AAqDpB,IAAO,2BAAQ;AAAA,EACb;AACF;;;ACp2BA,IAAM,YAAY,wBAACC,aACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EACtB;AAAA,EACC,CAAC,MACC;AAAA,uBACe,CAAC,YAAYA,SAAQ,mBAAmB,CAAC,CAAC;AAAA,iBAChD,CAAC,cAAcA,SAAQ,QAAQ,CAAC,CAAC,WAAWA,SAAQ,QAAQ,CAAC,CAAC;AAAA,2BACpD,CAAC,cAAcA,SAAQ,WAAW,CAAC,CAAC,WAAWA,SAAQ,WAAW,CAAC,CAAC;AAAA,gBAC/E,CAAC,aAAaA,SAAQ,QAAQ,CAAC,CAAC;AAAA,gBAChC,CAAC,cAAcA,SAAQ,QAAQ,CAAC,CAAC;AAAA;AAE7C,EACC,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,cAIDA,SAAQ,SAAS;AAAA;AAAA;AAAA,+BAGAA,SAAQ,mBAAmB,WAAWA,SAAQ,gBAAgB;AAAA,mCAC1DA,SAAQ,mBAAmB,WAC1DA,SAAQ,qBACV;AAAA,4BAC0BA,SAAQ,gBAAgB,WAAWA,SAAQ,aAAa;AAAA,2BACzDA,SAAQ,kBAAkB,aAAaA,SAAQ,cAAc;AAAA,sBAClEA,SAAQ,SAAS;AAAA;AAAA;AAAA,cAGzBA,SAAQ,YAAY;AAAA,YACtBA,SAAQ,YAAY;AAAA;AAAA;AAAA,cAGlBA,SAAQ,YAAY;AAAA,YACtBA,SAAQ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMlBA,SAAQ,YAAY;AAAA,YACtBA,SAAQ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOpBA,SAAQ,SAAS;AAAA;AAAA,GAxDX;AA4DlB,IAAO,iBAAQ;;;ACrDR,IAAM,UAA6B;AAAA,EACxC,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,QAAQ;AACV;",
  "names": ["o", "parser", "lexer", "dir", "commit", "branch", "clear", "mainBranchOrder", "commitType", "clear", "commits", "defaultPos", "commit", "branches", "branch", "diagram", "options"]
}
