From 4b957424855d0807514a84dc3e33cb0e1401317e Mon Sep 17 00:00:00 2001 From: Thorian93 Date: Fri, 2 Aug 2024 21:06:27 +0200 Subject: [PATCH 001/170] Fix typo in installation_manually.md --- administration-guide/installation_manually.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administration-guide/installation_manually.md b/administration-guide/installation_manually.md index 78bef2d..e16c359 100644 --- a/administration-guide/installation_manually.md +++ b/administration-guide/installation_manually.md @@ -127,7 +127,7 @@ Make sure the virtual environment is activated inside the Service! This is also ```bash sudo su --login semaphore python3 -m pip install --user virtualenv -python3 -m vitualenv /home/semaphore/venv +python3 -m venv /home/semaphore/venv # activate the context of the virtual environment source /home/semaphore/venv/bin/activate # verify we are using python3 from inside the venv From b80f6f684d705a52d5d43635bbb829d9e9990639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Steininger?= Date: Sat, 10 Aug 2024 21:42:30 +0200 Subject: [PATCH 002/170] Add missing ms teams alerts config --- administration-guide/configuration.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/administration-guide/configuration.md b/administration-guide/configuration.md index ed787a0..49e8058 100644 --- a/administration-guide/configuration.md +++ b/administration-guide/configuration.md @@ -89,6 +89,8 @@ Semaphore uses a `config.json` configuration file with following content: "telegram_alert": false, "slack_alert": false, "slack_url": "", + "microsoft_teams_alert": false, + "microsoft_teams_url": "", "rocketchat_alert": false, "rocketchat_url": "", "ldap_enable": false, @@ -125,8 +127,10 @@ Semaphore uses a `config.json` configuration file with following content: | `telegram_alert` | `telegram-alert` | | | `slack_alert` | `slack-alert` | Set to True to enable pushing alerts to slack. It should be used in combination with `slack_url` | | `slack_url` | `slack-url` | The slack webhook url. Semaphore will used it to POST Slack formatted json alerts to the provided url. | -| `rocketchat_alert` | `rocketchat-alert` | Set to True to enable pushing alerts to Rocket.Chat. It should be used in combination with `rocketchat_url`. Available since v2.9.56. | -| `rocketchat_url` | `rocketchat-url` | The rocketchat webhook url. Semaphore will used it to POST Rocket.Chat formatted json alerts to the provided url. Available since v2.9.56. | +| `microsoft_teams_alert` | — | Set to True to enable pushing alerts to teams. It should be used in combination with `microsoft_teams_url`. | +| `microsoft_teams_url` | — | The teams webhook url. Semaphore will used it to POST alerts. | +| `rocketchat_alert` | `rocketchat-alert` | Set to True to enable pushing alerts to Rocket.Chat. It should be used in combination with `rocketchat_url`. Available since v2.9.56. | +| `rocketchat_url` | `rocketchat-url` | The rocketchat webhook url. Semaphore will used it to POST Rocket.Chat formatted json alerts to the provided url. Available since v2.9.56. | | `ldap_enable` | `ldap-enable` | | | `ldap_needtls` | `ldap-needtls` | | | `ldap_binddn` | `ldap-binddn` | | From 046181e2eaa42b47cf4b7ea3879f3198188513f0 Mon Sep 17 00:00:00 2001 From: cm-schl <63400209+cm-schl@users.noreply.github.com> Date: Tue, 27 Aug 2024 17:30:52 +0200 Subject: [PATCH 003/170] nginx config - add default port I think inside the nginx config example is missing the default port 3000. --- administration-guide/security.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/administration-guide/security.md b/administration-guide/security.md index 99f48b3..601ef18 100644 --- a/administration-guide/security.md +++ b/administration-guide/security.md @@ -64,7 +64,7 @@ server { chunked_transfer_encoding on; location / { - proxy_pass http://127.0.0.1/; + proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -76,7 +76,7 @@ server { } location /api/ws { - proxy_pass http://127.0.0.1/api/ws; + proxy_pass http://127.0.0.1:3000/api/ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; From 6a5fd5bcf60dfe4051db380fc52c6368189d627d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Tajn=C5=A1ek?= Date: Fri, 20 Sep 2024 17:47:20 +0200 Subject: [PATCH 004/170] docs: update integration documentation to clarify environment requirements Added clarification that an environment with matching keys is required for passing variables to tasks via integrations. This is a response to some issues I had setting up an integration with Bitbucket. I also opened up a PR for the main project https://github.com/semaphoreui/semaphore/pull/2352 --- user-guide/integrations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/user-guide/integrations.md b/user-guide/integrations.md index 906dd5d..ac82eaf 100644 --- a/user-guide/integrations.md +++ b/user-guide/integrations.md @@ -18,4 +18,6 @@ With matchers, you can define parameters of the incoming request. When these par ## Value Extractors -With an extractor, you can extract the necessary data from the incoming request and pass it to the task as environment variables. \ No newline at end of file +With an extractor, you can extract the necessary data from the incoming request and pass it to the task as environment variables. For the extracted variables to be passed to the +task, you must create an environment with the corresponding keys. Ensure that the environment keys match the variables defined in the extractor, as this allows the task to receive +and use the correct environment variables. From effd721c0c1c69d192e3e7f28a40c09e3fd6cbe4 Mon Sep 17 00:00:00 2001 From: Markus Bergholz Date: Thu, 17 Oct 2024 15:21:33 +0200 Subject: [PATCH 005/170] add gitea --- src/administration-guide/openid/gitea.md | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/administration-guide/openid/gitea.md diff --git a/src/administration-guide/openid/gitea.md b/src/administration-guide/openid/gitea.md new file mode 100644 index 0000000..8cc4cc6 --- /dev/null +++ b/src/administration-guide/openid/gitea.md @@ -0,0 +1,29 @@ +# Gitea config + +`config.json`: +```json +"oidc_providers": { + "github": { + "icon": "github", + "display_name": "Sign in with gitea instance", + "client_id": "123-456-789", + "client_secret": "**********", + "redirect_url": "https://your-semaphore.tld/api/auth/oidc/github/redirect", + "endpoint": { + "auth": "https://your-gitea.tld/login/oauth/authorize", + "token": "https://your-gitea.tld/login/oauth/access_token", + "userinfo": "https://your-gitea.tld/api/v1/user" + }, + "scopes": ["read:user", "user:email"], + "username_claim": "login", + "email_claim": "email", + "name_claim": "full_name", + "order": 1 + } +} +``` + +In your `gitea` instance, go to `https://your-gitea.tld/user/settings/applications` and create a new `oauth2` application. +As redirect URI use `https://your-semaphore.tld/api/auth/oidc/github/redirect`. + +Authentication works fine. But "Name" and "Username" does not recieved correctly. The username will be a unique ID in semaphore and the name will be set to "Anonymous", which is changeable by the user itself. The emails is mapped correctly. From c61ead318b54a7991ad1e452e2c923a6335d16b7 Mon Sep 17 00:00:00 2001 From: gduale Date: Sun, 20 Oct 2024 13:05:06 +0200 Subject: [PATCH 006/170] Update tasks.md Add "Task log retention". --- src/user-guide/tasks.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/user-guide/tasks.md b/src/user-guide/tasks.md index ddc041f..3f0f0e1 100644 --- a/src/user-guide/tasks.md +++ b/src/user-guide/tasks.md @@ -11,3 +11,11 @@ The **Deploy** task type allows you to specify a version of the build associated When the task is running, or it has finished, you can see the task status and the running log. ![](<../.gitbook/assets/image (7).png>) + +## Tasks log retention +You'll notice that logs of previous runs of your tasks are available in the tasks template or in the dashboard. + +However, by default, log retention is infinite. + +You can configure this by using the `max_tasks_per_template` parameter in `config.json` or the `SEMAPHORE_MAX_TASKS_PER_TEMPLATE` environment variable. + From c35c9f6f061ed8816129ac2192a09d7e863a18fa Mon Sep 17 00:00:00 2001 From: Bas Date: Thu, 31 Oct 2024 22:26:50 +0100 Subject: [PATCH 007/170] Use port 3000 in ProxyPass for Nginx too. --- src/administration-guide/security.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/security.md b/src/administration-guide/security.md index 99f48b3..601ef18 100644 --- a/src/administration-guide/security.md +++ b/src/administration-guide/security.md @@ -64,7 +64,7 @@ server { chunked_transfer_encoding on; location / { - proxy_pass http://127.0.0.1/; + proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -76,7 +76,7 @@ server { } location /api/ws { - proxy_pass http://127.0.0.1/api/ws; + proxy_pass http://127.0.0.1:3000/api/ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; From b02cf9a447585e981a9d739d5adb07017c8602d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20M=C3=BCller?= Date: Fri, 15 Nov 2024 10:07:46 +0100 Subject: [PATCH 008/170] added runner start in call for running runner --- src/administration-guide/runners.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/runners.md b/src/administration-guide/runners.md index d0a8536..49b801e 100644 --- a/src/administration-guide/runners.md +++ b/src/administration-guide/runners.md @@ -91,7 +91,7 @@ To re-register the runner, you can use the `semaphore runner register` command. Now you can start the runner with the command: ``` -semaphore runner --config /path/to/your/config/file.json +semaphore runner start --config /path/to/your/config/file.json ``` "),typeof Ft!="string"&&!TF(Ft))if(typeof Ft.toString=="function"){if(Ft=Ft.toString(),typeof Ft!="string")throw T("dirty is not a string, aborting")}else throw T("toString is not a function");if(!Se.isSupported)return Ft;if(To||Hs(Re),Se.removed=[],typeof Ft=="string"&&(be=!1),be){if(Ft.nodeName){let Xl=_i(Ft.nodeName);if(!mt[Xl]||rn[Xl])throw T("root node is forbidden and cannot be sanitized in-place")}}else if(Ft instanceof fe)st=xF(""),Rt=st.ownerDocument.importNode(Ft,!0),Rt.nodeType===ue.element&&Rt.nodeName==="BODY"||Rt.nodeName==="HTML"?st=Rt:st.appendChild(Rt);else{if(!ht&&!Rn&&!_a&&Ft.indexOf("<")===-1)return He&&$t?He.createHTML(Ft):Ft;if(st=xF(Ft),!st)return ht?null:$t?ze:""}st&&qi&&ql(st.firstChild);let oa=bF(be?Ft:st);for(;bn=oa.nextNode();)kF(bn)||(bn.content instanceof me&&Ove(bn.content),SF(bn));if(be)return Ft;if(ht){if(At)for(Da=yt.call(st.ownerDocument);st.firstChild;)Da.appendChild(st.firstChild);else Da=st;return(gr.shadowroot||gr.shadowrootmode)&&(Da=Ye.call(Pe,Da,!0)),Da}let hs=_a?st.outerHTML:st.innerHTML;return _a&&mt["!doctype"]&&st.ownerDocument&&st.ownerDocument.doctype&&st.ownerDocument.doctype.name&&S(K,st.ownerDocument.doctype.name)&&(hs=" +`+hs),Rn&&f([Ve,je,kt],Xl=>{hs=v(hs,Xl," ")}),He&&$t?He.createHTML(hs):hs},Se.setConfig=function(){let Ft=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Hs(Ft),To=!0},Se.clearConfig=function(){Wl=null,To=!1},Se.isValidAttribute=function(Ft,Re,st){Wl||Hs({});let Rt=_i(Ft),bn=_i(Re);return EF(Rt,bn,st)},Se.addHook=function(Ft,Re){typeof Re=="function"&&(Je[Ft]=Je[Ft]||[],p(Je[Ft],Re))},Se.removeHook=function(Ft){if(Je[Ft])return d(Je[Ft])},Se.removeHooks=function(Ft){Je[Ft]&&(Je[Ft]=[])},Se.removeAllHooks=function(){Je={}},Se}o(oe,"createDOMPurify");var ke=oe();return ke})});var k$={};hr(k$,{default:()=>Ebe});function B2e(t){return String(t).replace(P2e,e=>O2e[e])}function $2e(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function X2e(t){for(var e=0;e=i[0]&&t<=i[1])return r.name}return null}function LG(t){for(var e=0;e=h4[e]&&t<=h4[e+1])return!0;return!1}function axe(t,e){Zl[t]=e}function M7(t,e,r){if(!Zl[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=Zl[e][n];if(!i&&t[0]in Zz&&(n=Zz[t[0]].charCodeAt(0),i=Zl[e][n]),!i&&r==="text"&&LG(n)&&(i=Zl[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function sxe(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!l7[e]){var r=l7[e]={cssEmPerMu:Jb.quad[e]/18};for(var n in Jb)Jb.hasOwnProperty(n)&&(r[n]=Jb[n][e])}return l7[e]}function tG(t){if(t instanceof ms)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function uxe(t){if(t instanceof jf)return t;throw new Error("Expected span but got "+String(t)+".")}function G(t,e,r,n,i,a){wn[t][i]={font:e,group:r,replace:n},a&&n&&(wn[t][n]=wn[t][i])}function vt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u0&&(a.push(s4(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(s4(s,e));var h;r?(h=s4(Ri(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=su(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=ct(f.height+f.depth),f.depth&&(d.style.verticalAlign=ct(-f.depth))}return f}function $G(t){return new Xf(t)}function sG(t,e,r,n,i){var a=gs(t,r),s;a.length===1&&a[0]instanceof ps&&Vt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new et.MathNode("mrow",a);var l=new et.MathNode("annotation",[new et.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new et.MathNode("semantics",[s,l]),h=new et.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Be.makeSpan([f],[h])}function ir(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function B7(t){var e=T4(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function T4(t){return t&&(t.type==="atom"||fxe.hasOwnProperty(t.type))?t:null}function YG(t,e){var r=Ri(t.body,e,!0);return Vxe([t.mclass],r,e)}function WG(t,e){var r,n=gs(t.body,e);return t.mclass==="minner"?r=new et.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new et.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new et.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function Yxe(t,e,r){var n=Uxe[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function Wxe(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new nt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=Yxe(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=oG()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function E4(t,e){var r=T4(t);if(r&&Vt.contains(abe,r.text))return r;throw r?new nt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new nt("Invalid delimiter type '"+t.type+"'",t)}function uG(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function ec(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u1||!f)&&y.pop(),x.length{"use strict";Xs=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Ao=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Xs.range(this,e))}},nt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15":">","<":"<",'"':""","'":"'"},P2e=/[&><"']/g;o(B2e,"escape");_G=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),F2e=o(function(e){var r=_G(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),z2e=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),G2e=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Vt={contains:R2e,deflt:N2e,escape:B2e,hyphenate:I2e,getBaseElem:_G,isCharacterBox:F2e,protocolFromUrl:G2e},u4={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o($2e,"getDefaultValue");ry=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in u4)if(u4.hasOwnProperty(r)){var n=u4[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:$2e(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new nt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Vt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},Kl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Ql[V2e[this.id]]}sub(){return Ql[U2e[this.id]]}fracNum(){return Ql[H2e[this.id]]}fracDen(){return Ql[Y2e[this.id]]}cramp(){return Ql[W2e[this.id]]}text(){return Ql[q2e[this.id]]}isTight(){return this.size>=2}},N7=0,f4=1,gp=2,iu=3,ny=4,So=5,yp=6,qa=7,Ql=[new Kl(N7,0,!1),new Kl(f4,0,!0),new Kl(gp,1,!1),new Kl(iu,1,!0),new Kl(ny,2,!1),new Kl(So,2,!0),new Kl(yp,3,!1),new Kl(qa,3,!0)],V2e=[ny,So,ny,So,yp,qa,yp,qa],U2e=[So,So,So,So,qa,qa,qa,qa],H2e=[gp,iu,ny,So,yp,qa,yp,qa],Y2e=[iu,iu,So,So,qa,qa,qa,qa],W2e=[f4,f4,iu,iu,So,So,qa,qa],q2e=[N7,f4,gp,iu,gp,iu,gp,iu],Ht={DISPLAY:Ql[N7],TEXT:Ql[gp],SCRIPT:Ql[ny],SCRIPTSCRIPT:Ql[yp]},b7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(X2e,"scriptFromCodepoint");h4=[];b7.forEach(t=>t.blocks.forEach(e=>h4.push(...e)));o(LG,"supportedCodepoint");mp=80,j2e=o(function(e,r){return"M95,"+(622+e+r)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),K2e=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),Q2e=o(function(e,r){return"M983 "+(10+e+r)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),Z2e=o(function(e,r){return"M424,"+(2398+e+r)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),J2e=o(function(e,r){return"M473,"+(2713+e+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),exe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),txe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),rxe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=j2e(r,mp);break;case"sqrtSize1":i=K2e(r,mp);break;case"sqrtSize2":i=Q2e(r,mp);break;case"sqrtSize3":i=Z2e(r,mp);break;case"sqrtSize4":i=J2e(r,mp);break;case"sqrtTall":i=txe(r,mp,n)}return i},"sqrtPath"),nxe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),Qz={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},ixe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),Xf=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Vt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},Zl={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Jb={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Zz={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(axe,"setFontMetrics");o(M7,"getCharacterMetrics");l7={};o(sxe,"getGlobalMetrics");oxe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],Jz=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],eG=o(function(e,r){return r.size<2?e:oxe[e-1][r.size-1]},"sizeAtStyle"),d4=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=Jz[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:eG(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:Jz[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=eG(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=sxe(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};d4.BASESIZE=6;w7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},lxe={ex:!0,em:!0,mu:!0},DG=o(function(e){return typeof e!="string"&&(e=e.unit),e in w7||e in lxe||e==="ex"},"validUnit"),Hn=o(function(e,r){var n;if(e.unit in w7)n=w7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new nt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),ct=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),dh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),RG=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),NG=o(function(e){var r=document.createElement(e);r.className=dh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a",r},"toMarkup"),jf=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,RG.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Vt.contains(this.classes,e)}toNode(){return NG.call(this,"span")}toMarkup(){return MG.call(this,"span")}},iy=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,RG.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Vt.contains(this.classes,e)}toNode(){return NG.call(this,"a")}toMarkup(){return MG.call(this,"a")}},T7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Vt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+Vt.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=ct(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=dh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Vt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Vt.escape(n)+'"');var a=Vt.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},ll=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}},ay=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="","\\gt",!0);G(U,ee,xe,"\u2208","\\in",!0);G(U,ee,xe,"\uE020","\\@not");G(U,ee,xe,"\u2282","\\subset",!0);G(U,ee,xe,"\u2283","\\supset",!0);G(U,ee,xe,"\u2286","\\subseteq",!0);G(U,ee,xe,"\u2287","\\supseteq",!0);G(U,ve,xe,"\u2288","\\nsubseteq",!0);G(U,ve,xe,"\u2289","\\nsupseteq",!0);G(U,ee,xe,"\u22A8","\\models");G(U,ee,xe,"\u2190","\\leftarrow",!0);G(U,ee,xe,"\u2264","\\le");G(U,ee,xe,"\u2264","\\leq",!0);G(U,ee,xe,"<","\\lt",!0);G(U,ee,xe,"\u2192","\\rightarrow",!0);G(U,ee,xe,"\u2192","\\to");G(U,ve,xe,"\u2271","\\ngeq",!0);G(U,ve,xe,"\u2270","\\nleq",!0);G(U,ee,lu,"\xA0","\\ ");G(U,ee,lu,"\xA0","\\space");G(U,ee,lu,"\xA0","\\nobreakspace");G(Qe,ee,lu,"\xA0","\\ ");G(Qe,ee,lu,"\xA0"," ");G(Qe,ee,lu,"\xA0","\\space");G(Qe,ee,lu,"\xA0","\\nobreakspace");G(U,ee,lu,null,"\\nobreak");G(U,ee,lu,null,"\\allowbreak");G(U,ee,b4,",",",");G(U,ee,b4,";",";");G(U,ve,bt,"\u22BC","\\barwedge",!0);G(U,ve,bt,"\u22BB","\\veebar",!0);G(U,ee,bt,"\u2299","\\odot",!0);G(U,ee,bt,"\u2295","\\oplus",!0);G(U,ee,bt,"\u2297","\\otimes",!0);G(U,ee,Le,"\u2202","\\partial",!0);G(U,ee,bt,"\u2298","\\oslash",!0);G(U,ve,bt,"\u229A","\\circledcirc",!0);G(U,ve,bt,"\u22A1","\\boxdot",!0);G(U,ee,bt,"\u25B3","\\bigtriangleup");G(U,ee,bt,"\u25BD","\\bigtriangledown");G(U,ee,bt,"\u2020","\\dagger");G(U,ee,bt,"\u22C4","\\diamond");G(U,ee,bt,"\u22C6","\\star");G(U,ee,bt,"\u25C3","\\triangleleft");G(U,ee,bt,"\u25B9","\\triangleright");G(U,ee,js,"{","\\{");G(Qe,ee,Le,"{","\\{");G(Qe,ee,Le,"{","\\textbraceleft");G(U,ee,Xa,"}","\\}");G(Qe,ee,Le,"}","\\}");G(Qe,ee,Le,"}","\\textbraceright");G(U,ee,js,"{","\\lbrace");G(U,ee,Xa,"}","\\rbrace");G(U,ee,js,"[","\\lbrack",!0);G(Qe,ee,Le,"[","\\lbrack",!0);G(U,ee,Xa,"]","\\rbrack",!0);G(Qe,ee,Le,"]","\\rbrack",!0);G(U,ee,js,"(","\\lparen",!0);G(U,ee,Xa,")","\\rparen",!0);G(Qe,ee,Le,"<","\\textless",!0);G(Qe,ee,Le,">","\\textgreater",!0);G(U,ee,js,"\u230A","\\lfloor",!0);G(U,ee,Xa,"\u230B","\\rfloor",!0);G(U,ee,js,"\u2308","\\lceil",!0);G(U,ee,Xa,"\u2309","\\rceil",!0);G(U,ee,Le,"\\","\\backslash");G(U,ee,Le,"\u2223","|");G(U,ee,Le,"\u2223","\\vert");G(Qe,ee,Le,"|","\\textbar",!0);G(U,ee,Le,"\u2225","\\|");G(U,ee,Le,"\u2225","\\Vert");G(Qe,ee,Le,"\u2225","\\textbardbl");G(Qe,ee,Le,"~","\\textasciitilde");G(Qe,ee,Le,"\\","\\textbackslash");G(Qe,ee,Le,"^","\\textasciicircum");G(U,ee,xe,"\u2191","\\uparrow",!0);G(U,ee,xe,"\u21D1","\\Uparrow",!0);G(U,ee,xe,"\u2193","\\downarrow",!0);G(U,ee,xe,"\u21D3","\\Downarrow",!0);G(U,ee,xe,"\u2195","\\updownarrow",!0);G(U,ee,xe,"\u21D5","\\Updownarrow",!0);G(U,ee,xi,"\u2210","\\coprod");G(U,ee,xi,"\u22C1","\\bigvee");G(U,ee,xi,"\u22C0","\\bigwedge");G(U,ee,xi,"\u2A04","\\biguplus");G(U,ee,xi,"\u22C2","\\bigcap");G(U,ee,xi,"\u22C3","\\bigcup");G(U,ee,xi,"\u222B","\\int");G(U,ee,xi,"\u222B","\\intop");G(U,ee,xi,"\u222C","\\iint");G(U,ee,xi,"\u222D","\\iiint");G(U,ee,xi,"\u220F","\\prod");G(U,ee,xi,"\u2211","\\sum");G(U,ee,xi,"\u2A02","\\bigotimes");G(U,ee,xi,"\u2A01","\\bigoplus");G(U,ee,xi,"\u2A00","\\bigodot");G(U,ee,xi,"\u222E","\\oint");G(U,ee,xi,"\u222F","\\oiint");G(U,ee,xi,"\u2230","\\oiiint");G(U,ee,xi,"\u2A06","\\bigsqcup");G(U,ee,xi,"\u222B","\\smallint");G(Qe,ee,vp,"\u2026","\\textellipsis");G(U,ee,vp,"\u2026","\\mathellipsis");G(Qe,ee,vp,"\u2026","\\ldots",!0);G(U,ee,vp,"\u2026","\\ldots",!0);G(U,ee,vp,"\u22EF","\\@cdots",!0);G(U,ee,vp,"\u22F1","\\ddots",!0);G(U,ee,Le,"\u22EE","\\varvdots");G(U,ee,Pn,"\u02CA","\\acute");G(U,ee,Pn,"\u02CB","\\grave");G(U,ee,Pn,"\xA8","\\ddot");G(U,ee,Pn,"~","\\tilde");G(U,ee,Pn,"\u02C9","\\bar");G(U,ee,Pn,"\u02D8","\\breve");G(U,ee,Pn,"\u02C7","\\check");G(U,ee,Pn,"^","\\hat");G(U,ee,Pn,"\u20D7","\\vec");G(U,ee,Pn,"\u02D9","\\dot");G(U,ee,Pn,"\u02DA","\\mathring");G(U,ee,Ut,"\uE131","\\@imath");G(U,ee,Ut,"\uE237","\\@jmath");G(U,ee,Le,"\u0131","\u0131");G(U,ee,Le,"\u0237","\u0237");G(Qe,ee,Le,"\u0131","\\i",!0);G(Qe,ee,Le,"\u0237","\\j",!0);G(Qe,ee,Le,"\xDF","\\ss",!0);G(Qe,ee,Le,"\xE6","\\ae",!0);G(Qe,ee,Le,"\u0153","\\oe",!0);G(Qe,ee,Le,"\xF8","\\o",!0);G(Qe,ee,Le,"\xC6","\\AE",!0);G(Qe,ee,Le,"\u0152","\\OE",!0);G(Qe,ee,Le,"\xD8","\\O",!0);G(Qe,ee,Pn,"\u02CA","\\'");G(Qe,ee,Pn,"\u02CB","\\`");G(Qe,ee,Pn,"\u02C6","\\^");G(Qe,ee,Pn,"\u02DC","\\~");G(Qe,ee,Pn,"\u02C9","\\=");G(Qe,ee,Pn,"\u02D8","\\u");G(Qe,ee,Pn,"\u02D9","\\.");G(Qe,ee,Pn,"\xB8","\\c");G(Qe,ee,Pn,"\u02DA","\\r");G(Qe,ee,Pn,"\u02C7","\\v");G(Qe,ee,Pn,"\xA8",'\\"');G(Qe,ee,Pn,"\u02DD","\\H");G(Qe,ee,Pn,"\u25EF","\\textcircled");IG={"--":!0,"---":!0,"``":!0,"''":!0};G(Qe,ee,Le,"\u2013","--",!0);G(Qe,ee,Le,"\u2013","\\textendash");G(Qe,ee,Le,"\u2014","---",!0);G(Qe,ee,Le,"\u2014","\\textemdash");G(Qe,ee,Le,"\u2018","`",!0);G(Qe,ee,Le,"\u2018","\\textquoteleft");G(Qe,ee,Le,"\u2019","'",!0);G(Qe,ee,Le,"\u2019","\\textquoteright");G(Qe,ee,Le,"\u201C","``",!0);G(Qe,ee,Le,"\u201C","\\textquotedblleft");G(Qe,ee,Le,"\u201D","''",!0);G(Qe,ee,Le,"\u201D","\\textquotedblright");G(U,ee,Le,"\xB0","\\degree",!0);G(Qe,ee,Le,"\xB0","\\degree");G(Qe,ee,Le,"\xB0","\\textdegree",!0);G(U,ee,Le,"\xA3","\\pounds");G(U,ee,Le,"\xA3","\\mathsterling",!0);G(Qe,ee,Le,"\xA3","\\pounds");G(Qe,ee,Le,"\xA3","\\textsterling",!0);G(U,ve,Le,"\u2720","\\maltese");G(Qe,ve,Le,"\u2720","\\maltese");rG='0123456789/@."';for(e4=0;e40)return ol(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=mxe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=BG[u].fontName,p=[u]):(d=a4(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(w4(a,d,i).metrics)return ol(a,d,i,r,s.concat(p));if(IG.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(dh(t.classes)!==dh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),vxe=o(t=>{for(var e=0;er&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),ds=o(function(e,r,n,i){var a=new jf(e,r,n,i);return I7(a),a},"makeSpan"),OG=o((t,e,r,n)=>new jf(t,e,r,n),"makeSvgSpan"),xxe=o(function(e,r,n){var i=ds([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=ct(i.height),i.maxFontSize=1,i},"makeLineSpan"),bxe=o(function(e,r,n,i){var a=new iy(e,r,n,i);return I7(a),a},"makeAnchor"),PG=o(function(e){var r=new Xf(e);return I7(r),r},"makeFragment"),wxe=o(function(e,r){return e instanceof Xf?ds([],[e],r):e},"wrapFragment"),Txe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s{var r=ds(["mspace"],[],e),n=Hn(t,e);return r.style.marginRight=ct(n),r},"makeGlue"),a4=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),BG={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},FG={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Cxe=o(function(e,r){var[n,i,a]=FG[e],s=new Jl(n),l=new ll([s],{width:ct(i),height:ct(a),style:"width:"+ct(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=OG(["overlay"],[l],r);return u.height=a,u.style.height=ct(a),u.style.width=ct(i),u},"staticSvg"),Be={fontMap:BG,makeSymbol:ol,mathsym:pxe,makeSpan:ds,makeSvgSpan:OG,makeLineSpan:xxe,makeAnchor:bxe,makeFragment:PG,wrapFragment:wxe,makeVList:kxe,makeOrd:gxe,makeGlue:Exe,staticSvg:Cxe,svgData:FG,tryCombineChars:vxe},Un={number:3,unit:"mu"},Wf={number:4,unit:"mu"},nu={number:5,unit:"mu"},Sxe={mord:{mop:Un,mbin:Wf,mrel:nu,minner:Un},mop:{mord:Un,mop:Un,mrel:nu,minner:Un},mbin:{mord:Wf,mop:Wf,mopen:Wf,minner:Wf},mrel:{mord:nu,mop:nu,mopen:nu,minner:nu},mopen:{},mclose:{mop:Un,mbin:Wf,mrel:nu,minner:Un},mpunct:{mord:Un,mop:Un,mrel:nu,mopen:Un,mclose:Un,mpunct:Un,minner:Un},minner:{mord:Un,mop:Un,mbin:Wf,mrel:nu,mopen:Un,mpunct:Un,minner:Un}},Axe={mord:{mop:Un},mop:{mord:Un,mop:Un},mbin:{},mrel:{},mopen:{},mclose:{mop:Un},mpunct:{},minner:{mop:Un}},zG={},m4={},g4={};o(vt,"defineFunction");o(Kf,"defineFunctionBuilders");y4=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),ui=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),su=Be.makeSpan,_xe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Lxe=["rightmost","mrel","mclose","mpunct"],Dxe={display:Ht.DISPLAY,text:Ht.TEXT,script:Ht.SCRIPT,scriptscript:Ht.SCRIPTSCRIPT},Rxe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Ri=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Vt.contains(Lxe,x)?y.classes[0]="mord":x==="mbin"&&Vt.contains(_xe,v)&&(g.classes[0]="mord")},{node:d},p,m),aG(a,(g,y)=>{var v=E7(y),x=E7(g),b=v&&x?g.hasClass("mtight")?Axe[v][x]:Sxe[v][x]:null;if(b)return Be.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),aG=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),GG=o(function(e){return e instanceof Xf||e instanceof iy||e instanceof jf&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),Nxe=o(function t(e,r){var n=GG(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),E7=o(function(e,r){return e?(r&&(e=Nxe(e,r)),Rxe[e.classes[0]]||null):null},"getTypeOfDomTree"),sy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return su(r.concat(n))},"makeNullDelimiter"),Cr=o(function(e,r,n){if(!e)return su();if(m4[e.type]){var i=m4[e.type](e,r);if(n&&r.size!==n.size){i=su(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new nt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(s4,"buildHTMLUnbreakable");o(C7,"buildHTML");o($G,"newDocumentFragment");ps=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=dh(this.classes));for(var n=0;n0&&(e+=' class ="'+Vt.escape(dh(this.classes))+'"'),e+=">";for(var n=0;n",e}toText(){return this.children.map(e=>e.toText()).join("")}},qf=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Vt.escape(this.toText())}toText(){return this.text}},S7=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",ct(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},et={MathNode:ps,TextNode:qf,SpaceNode:S7,newDocumentFragment:$G},_o=o(function(e,r,n){return wn[r][e]&&wn[r][e].replace&&e.charCodeAt(0)!==55349&&!(IG.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=wn[r][e].replace),new et.TextNode(e)},"makeText"),O7=o(function(e){return e.length===1?e[0]:new et.MathNode("mrow",e)},"makeRow"),P7=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Vt.contains(["\\imath","\\jmath"],a))return null;wn[i][a]&&wn[i][a].replace&&(a=wn[i][a].replace);var s=Be.fontMap[n].fontName;return M7(a,s,i)?Be.fontMap[n].variant:null},"getVariant"),gs=o(function(e,r,n){if(e.length===1){var i=fn(e[0],r);return n&&i instanceof ps&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),ph=o(function(e,r,n){return O7(gs(e,r,n))},"buildExpressionRow"),fn=o(function(e,r){if(!e)return new et.MathNode("mrow");if(g4[e.type]){var n=g4[e.type](e,r);return n}else throw new nt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(sG,"buildMathML");VG=o(function(e){return new d4({style:e.displayMode?Ht.DISPLAY:Ht.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),UG=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Be.makeSpan(n,[e])}return e},"displayWrap"),Mxe=o(function(e,r,n){var i=VG(n),a;if(n.output==="mathml")return sG(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=C7(e,i);a=Be.makeSpan(["katex"],[s])}else{var l=sG(e,r,i,n.displayMode,!1),u=C7(e,i);a=Be.makeSpan(["katex"],[l,u])}return UG(a,n)},"buildTree"),Ixe=o(function(e,r,n){var i=VG(n),a=C7(e,i),s=Be.makeSpan(["katex"],[a]);return UG(s,n)},"buildHTMLTree"),Oxe={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Pxe=o(function(e){var r=new et.MathNode("mo",[new et.TextNode(Oxe[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),Bxe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Fxe=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),zxe=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Vt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=Fxe(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Jl(p),v=new ll([y],{width:"100%",height:ct(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Be.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=Bxe[u],[w,S,T]=b,E=T/1e3,_=w.length,A,L;if(_===1){var M=b[3];A=["hide-tail"],L=[M]}else if(_===2)A=["halfarrow-left","halfarrow-right"],L=["xMinYMin","xMaxYMin"];else if(_===3)A=["brace-left","brace-center","brace-right"],L=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+_+" children.");for(var N=0;N<_;N++){var k=new Jl(w[N]),I=new ll([k],{width:"400em",height:ct(E),viewBox:"0 0 "+l+" "+T,preserveAspectRatio:L[N]+" slice"}),C=Be.makeSvgSpan([A[N]],[I],r);if(_===1)return{span:C,minWidth:S,height:E};C.style.height=ct(E),x.push(C)}return{span:Be.makeSpan(["stretchy"],x,r),minWidth:S,height:E}}}o(n,"buildSvgSpan_");var{span:i,minWidth:a,height:s}=n();return i.height=s,i.style.height=ct(s),a>0&&(i.style.minWidth=ct(a)),i},"svgSpan"),Gxe=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Be.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new ay({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new ay({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new ll(h,{width:"100%",height:ct(l)});s=Be.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=ct(l),s},"encloseSpan"),ou={encloseSpan:Gxe,mathMLnode:Pxe,svgSpan:zxe};o(ir,"assertNodeType");o(B7,"assertSymbolNodeType");o(T4,"checkSymbolNodeType");F7=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=ir(t.base,"accent"),r=n.base,t.base=r,i=uxe(Cr(t,e)),t.base=n):(n=ir(t,"accent"),r=n.base);var a=Cr(r,e.havingCrampedStyle()),s=n.isShifty&&Vt.isCharacterBox(r),l=0;if(s){var u=Vt.getBaseElem(r),h=Cr(u,e.havingCrampedStyle());l=tG(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=ou.svgSpan(n,e),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+ct(2*l)+")",marginLeft:ct(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Be.staticSvg("vec",e),g=Be.svgData.vec[1]):(m=Be.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=tG(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Be.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=ct(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Be.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),HG=o((t,e)=>{var r=t.isStretchy?ou.mathMLnode(t.label):new et.MathNode("mo",[_o(t.label,t.mode)]),n=new et.MathNode("mover",[fn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),$xe=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));vt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=y4(e[0]),n=!$xe.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:F7,mathmlBuilder:HG});vt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:F7,mathmlBuilder:HG});vt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Cr(t.base,e),n=ou.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ou.mathMLnode(t.label),n=new et.MathNode("munder",[fn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});o4=o(t=>{var e=new et.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");vt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Be.wrapFragment(Cr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Be.wrapFragment(Cr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=ou.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Be.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=ou.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=o4(fn(t.body,e));if(t.below){var a=o4(fn(t.below,e));n=new et.MathNode("munderover",[r,a,i])}else n=new et.MathNode("mover",[r,i])}else if(t.below){var s=o4(fn(t.below,e));n=new et.MathNode("munder",[r,s])}else n=o4(),n=new et.MathNode("mover",[r,n]);return n}});Vxe=Be.makeSpan;o(YG,"htmlBuilder$9");o(WG,"mathmlBuilder$8");vt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:ui(i),isCharacterBox:Vt.isCharacterBox(i)}},htmlBuilder:YG,mathmlBuilder:WG});k4=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");vt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:k4(e[0]),body:ui(e[1]),isCharacterBox:Vt.isCharacterBox(e[1])}}});vt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=k4(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:ui(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Vt.isCharacterBox(u)}},htmlBuilder:YG,mathmlBuilder:WG});vt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:k4(e[0]),body:ui(e[0])}},htmlBuilder(t,e){var r=Ri(t.body,e,!0),n=Be.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=gs(t.body,e),n=new et.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});Uxe={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},oG=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),lG=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),Hxe=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(Yxe,"cdArrow");o(Wxe,"parseCD");vt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Be.wrapFragment(Cr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=ct(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new et.MathNode("mrow",[fn(t.label,e)]);return r=new et.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new et.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});vt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Be.wrapFragment(Cr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new et.MathNode("mrow",[fn(t.fragment,e)])}});vt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=ir(e[0],"ordgroup"),i=n.body,a="",s=0;s=1114111)throw new nt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});qG=o((t,e)=>{var r=Ri(t.body,e.withColor(t.color),!1);return Be.makeFragment(r)},"htmlBuilder$8"),XG=o((t,e)=>{var r=gs(t.body,e.withColor(t.color)),n=new et.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");vt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=ir(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:ui(i)}},htmlBuilder:qG,mathmlBuilder:XG});vt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=ir(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:qG,mathmlBuilder:XG});vt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&ir(i,"size").value}},htmlBuilder(t,e){var r=Be.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=ct(Hn(t.size,e)))),r},mathmlBuilder(t,e){var r=new et.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",ct(Hn(t.size,e)))),r}});A7={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},jG=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new nt("Expected a control sequence",t);return e},"checkControlSequence"),qxe=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),KG=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");vt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(A7[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=A7[n.text]),ir(e.parseFunction(),"internal");throw new nt("Invalid token after macro prefix",n)}});vt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new nt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new nt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new nt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new nt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===A7[r]),{type:"internal",mode:e.mode}}});vt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=jG(e.gullet.popToken());e.gullet.consumeSpaces();var i=qxe(e);return KG(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});vt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=jG(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return KG(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});ey=o(function(e,r,n){var i=wn.math[e]&&wn.math[e].replace,a=M7(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),z7=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Be.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),QG=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=ct(a),e.height-=a,e.depth+=a},"centerSpan"),Xxe=o(function(e,r,n,i,a,s){var l=Be.makeSymbol(e,"Main-Regular",a,i),u=z7(l,r,i,s);return n&&QG(u,i,r),u},"makeSmallDelim"),jxe=o(function(e,r,n,i){return Be.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),ZG=o(function(e,r,n,i,a,s){var l=jxe(e,r,a,i),u=z7(Be.makeSpan(["delimsizing","size"+r],[l],i),Ht.TEXT,i,s);return n&&QG(u,i,Ht.TEXT),u},"makeLargeDelim"),h7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Be.makeSpan(["delimsizinginner",i],[Be.makeSpan([],[Be.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),f7=o(function(e,r,n){var i=Zl["Size4-Regular"][e.charCodeAt(0)]?Zl["Size4-Regular"][e.charCodeAt(0)][4]:Zl["Size1-Regular"][e.charCodeAt(0)][4],a=new Jl("inner",nxe(e,Math.round(1e3*r))),s=new ll([a],{width:ct(i),height:ct(r),style:"width:"+ct(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Be.makeSvgSpan([],[s],n);return l.height=r,l.style.height=ct(r),l.style.width=ct(i),{type:"elem",elem:l}},"makeInner"),_7=.008,l4={type:"kern",size:-1*_7},Kxe=["|","\\lvert","\\rvert","\\vert"],Qxe=["\\|","\\lVert","\\rVert","\\Vert"],JG=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Vt.contains(Kxe,e)?(h="\u2223",d="vert",p=333):Vt.contains(Qxe,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=ey(l,m,a),y=g.height+g.depth,v=ey(h,m,a),x=v.height+v.depth,b=ey(f,m,a),w=b.height+b.depth,S=0,T=1;if(u!==null){var E=ey(u,m,a);S=E.height+E.depth,T=2}var _=y+w+S,A=Math.max(0,Math.ceil((r-_)/(T*x))),L=_+A*T*x,M=i.fontMetrics().axisHeight;n&&(M*=i.sizeMultiplier);var N=L/2-M,k=[];if(d.length>0){var I=L-y-w,C=Math.round(L*1e3),O=ixe(d,Math.round(I*1e3)),D=new Jl(d,O),P=(p/1e3).toFixed(3)+"em",F=(C/1e3).toFixed(3)+"em",B=new ll([D],{width:P,height:F,viewBox:"0 0 "+p+" "+C}),$=Be.makeSvgSpan([],[B],i);$.height=C/1e3,$.style.width=P,$.style.height=F,k.push({type:"elem",elem:$})}else{if(k.push(h7(f,m,a)),k.push(l4),u===null){var z=L-y-w+2*_7;k.push(f7(h,z,i))}else{var Y=(L-y-w-S)/2+2*_7;k.push(f7(h,Y,i)),k.push(l4),k.push(h7(u,m,a)),k.push(l4),k.push(f7(h,Y,i))}k.push(l4),k.push(h7(l,m,a))}var Q=i.havingBaseStyle(Ht.TEXT),X=Be.makeVList({positionType:"bottom",positionData:N,children:k},Q);return z7(Be.makeSpan(["delimsizing","mult"],[X],Q),Ht.TEXT,i,s)},"makeStackedDelim"),d7=80,p7=.08,m7=o(function(e,r,n,i,a){var s=rxe(e,i,n),l=new Jl(e,s),u=new ll([l],{width:"400em",height:ct(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Be.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),Zxe=o(function(e,r){var n=r.havingBaseSizing(),i=n$("\\surd",e*n.sizeMultiplier,r$,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+d7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+p7)/a,h=(1+s)/a,l=m7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+d7)*ty[i.size],h=(ty[i.size]+s)/a,u=(ty[i.size]+s+p7)/a,l=m7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+p7,h=e+s,f=Math.floor(1e3*e+s)+d7,l=m7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=ct(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),e$=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],Jxe=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],t$=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],ty=[0,1.2,1.8,2.4,3],ebe=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Vt.contains(e$,e)||Vt.contains(t$,e))return ZG(e,r,!1,n,i,a);if(Vt.contains(Jxe,e))return JG(e,ty[r],!1,n,i,a);throw new nt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),tbe=[{type:"small",style:Ht.SCRIPTSCRIPT},{type:"small",style:Ht.SCRIPT},{type:"small",style:Ht.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],rbe=[{type:"small",style:Ht.SCRIPTSCRIPT},{type:"small",style:Ht.SCRIPT},{type:"small",style:Ht.TEXT},{type:"stack"}],r$=[{type:"small",style:Ht.SCRIPTSCRIPT},{type:"small",style:Ht.SCRIPT},{type:"small",style:Ht.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],nbe=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),n$=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;sr)return n[s]}return n[n.length-1]},"traverseSequence"),i$=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Vt.contains(t$,e)?l=tbe:Vt.contains(e$,e)?l=r$:l=rbe;var u=n$(e,r,l,i);return u.type==="small"?Xxe(e,u.style,n,i,a,s):u.type==="large"?ZG(e,u.size,n,i,a,s):JG(e,r,n,i,a,s)},"makeCustomSizedDelim"),ibe=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return i$(e,d,!0,i,a,s)},"makeLeftRightDelim"),au={sqrtImage:Zxe,sizedDelim:ebe,sizeToMaxHeight:ty,customSizedDelim:i$,leftRightDelim:ibe},cG={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},abe=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(E4,"checkDelimiter");vt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=E4(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:cG[t.funcName].size,mclass:cG[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Be.makeSpan([t.mclass]):au.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(_o(t.delim,t.mode));var r=new et.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=ct(au.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(uG,"assertParsed");vt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new nt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:E4(e[0],t).text,color:r}},"handler")});vt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=E4(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=ir(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{uG(t);for(var r=Ri(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s{uG(t);var r=gs(t.body,e);if(t.left!=="."){var n=new et.MathNode("mo",[_o(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new et.MathNode("mo",[_o(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return O7(r)},"mathmlBuilder")});vt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=E4(e[0],t);if(!t.parser.leftrightDepth)throw new nt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=sy(e,[]);else{r=au.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?_o("|","text"):_o(t.delim,t.mode),n=new et.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});G7=o((t,e)=>{var r=Be.wrapFragment(Cr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Vt.isCharacterBox(t.body);if(n==="sout")a=Be.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=Hn({number:.6,unit:"pt"},e),h=Hn({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=ct(d/2+u);var p=Math.floor(1e3*d*i),m=exe(p),g=new ll([new Jl("phase",m)],{width:"400em",height:ct(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Be.makeSvgSpan(["hide-tail"],[g],e),a.style.height=ct(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=ou.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=ct(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=ct(x),a.style.borderRightWidth=ct(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Be.makeSpan(["mord","cancel-lap"],[b],e):Be.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),$7=o((t,e)=>{var r=0,n=new et.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[fn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");vt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=ir(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:G7,mathmlBuilder:$7});vt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=ir(e[0],"color-token").color,s=ir(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:G7,mathmlBuilder:$7});vt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});vt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:G7,mathmlBuilder:$7});vt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});a$={};o(ec,"defineEnvironment");s$={};o(le,"defineMacro");o(hG,"getHLines");C4=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new nt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(V7,"getAutoTag");o(mh,"parseArray");o(U7,"dCellStyle");tc=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(Ht.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?Hn({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function S(ke){for(var Ie=0;Ie0&&(w+=.25),h.push({pos:w,isDashed:ke[Ie]})}for(o(S,"setHLinePos"),S(s[0]),n=0;n0&&(N+=b,_ke))for(n=0;n=l)){var J=void 0;(i>0||e.hskipBeforeAndAfter)&&(J=Vt.deflt(Y.pregap,p),J!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=ct(J),C.push(O)));var Z=[];for(n=0;n0){for(var se=Be.makeLineSpan("hline",r,f),ce=Be.makeLineSpan("hdashline",r,f),ue=[{type:"elem",elem:u,shift:0}];h.length>0;){var te=h.pop(),De=te.pos-k;te.isDashed?ue.push({type:"elem",elem:ce,shift:De}):ue.push({type:"elem",elem:se,shift:De})}u=Be.makeVList({positionType:"individualShift",children:ue},r)}if(P.length===0)return Be.makeSpan(["mord"],[u],r);var oe=Be.makeVList({positionType:"individualShift",children:P},r);return oe=Be.makeSpan(["tag"],[oe],r),Be.makeFragment([u,oe])},"htmlBuilder"),sbe={c:"center ",l:"left ",r:"right "},rc=o(function(e,r){for(var n=[],i=new et.MathNode("mtd",[],["mtr-glue"]),a=new et.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w0?"left ":"",p+=A[A.length-1].length>0?"right ":"";for(var L=1;L-1?"alignat":"align",a=e.envName==="split",s=mh(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:V7(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");ec({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=T4(e[0]),n=r?[e[0]]:ir(e[0],"ordgroup").body,i=n.map(function(s){var l=B7(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new nt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return mh(t.parser,a,U7(t.envName))},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new nt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=mh(t.parser,n,U7(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=mh(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=T4(e[0]),n=r?[e[0]]:ir(e[0],"ordgroup").body,i=n.map(function(s){var l=B7(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new nt("Unknown column alignment: "+u,s)});if(i.length>1)throw new nt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=mh(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new nt("{subarray} can contain only one column");return a},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=mh(t.parser,e,U7(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:o$,htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Vt.contains(["gather","gather*"],t.envName)&&C4(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:V7(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return mh(t.parser,e,"display")},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:o$,htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){C4(t);var e={autoTag:V7(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return mh(t.parser,e,"display")},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["CD"],props:{numArgs:0},handler(t){return C4(t),Wxe(t.parser)},htmlBuilder:tc,mathmlBuilder:rc});le("\\nonumber","\\gdef\\@eqnsw{0}");le("\\notag","\\nonumber");vt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new nt(t.funcName+" valid only within array environment")}});fG=a$;vt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new nt("Invalid environment name",i);for(var a="",s=0;s{var r=t.font,n=e.withFont(r);return Cr(t.body,n)},"htmlBuilder$5"),c$=o((t,e)=>{var r=t.font,n=e.withFont(r);return fn(t.body,n)},"mathmlBuilder$4"),dG={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};vt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=y4(e[0]),a=n;return a in dG&&(a=dG[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:l$,mathmlBuilder:c$});vt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Vt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:k4(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});vt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:l$,mathmlBuilder:c$});u$=o((t,e)=>{var r=e;return t==="display"?r=r.id>=Ht.SCRIPT.id?r.text():Ht.DISPLAY:t==="text"&&r.size===Ht.DISPLAY.size?r=Ht.TEXT:t==="script"?r=Ht.SCRIPT:t==="scriptscript"&&(r=Ht.SCRIPTSCRIPT),r},"adjustStyle"),H7=o((t,e)=>{var r=u$(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Cr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new et.MathNode("mfrac",[fn(t.numer,e),fn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=Hn(t.barSize,e);r.setAttribute("linethickness",ct(n))}var i=u$(t.size,e.style);if(i.size!==e.style.size){r=new et.MathNode("mstyle",[r]);var a=i.size===Ht.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new et.MathNode("mo",[new et.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new et.MathNode("mo",[new et.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return O7(s)}return r},"mathmlBuilder$3");vt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:H7,mathmlBuilder:Y7});vt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});vt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});pG=["display","text","script","scriptscript"],mG=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");vt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=y4(e[0]),s=a.type==="atom"&&a.family==="open"?mG(a.text):null,l=y4(e[1]),u=l.type==="atom"&&l.family==="close"?mG(l.text):null,h=ir(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=ir(m.body[0],"textord");p=pG[Number(g.text)]}}else m=ir(m,"textord"),p=pG[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:H7,mathmlBuilder:Y7});vt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:ir(e[0],"size").value,token:i}}});vt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=z2e(ir(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:H7,mathmlBuilder:Y7});h$=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Cr(t.sup,e.havingStyle(r.sup()),e):Cr(t.sub,e.havingStyle(r.sub()),e),i=ir(t.base,"horizBrace")):i=ir(t,"horizBrace");var a=Cr(i.base,e.havingBaseStyle(Ht.DISPLAY)),s=ou.svgSpan(i,e),l;if(i.isOver?(l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Be.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Be.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),obe=o((t,e)=>{var r=ou.mathMLnode(t.label);return new et.MathNode(t.isOver?"mover":"munder",[fn(t.base,e),r])},"mathmlBuilder$2");vt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:h$,mathmlBuilder:obe});vt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=ir(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:ui(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Ri(t.body,e,!1);return Be.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ph(t.body,e);return r instanceof ps||(r=new ps("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});vt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=ir(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=t,a=ir(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=Ri(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Be.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>ph(t.body,e),"mathmlBuilder")});vt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:ui(e[0]),mathml:ui(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Ri(t.html,e,!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>ph(t.mathml,e),"mathmlBuilder")});g7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new nt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!DG(n))throw new nt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");vt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=ir(r[0],"raw").string,h=u.split(","),f=0;f{var r=Hn(t.height,e),n=0;t.totalheight.number>0&&(n=Hn(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=Hn(t.width,e));var a={height:ct(r+n)};i>0&&(a.width=ct(i)),n>0&&(a.verticalAlign=ct(-n));var s=new T7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new et.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=Hn(t.height,e),i=0;if(t.totalheight.number>0&&(i=Hn(t.totalheight,e)-n,r.setAttribute("valign",ct(-i))),r.setAttribute("height",ct(n+i)),t.width.number>0){var a=Hn(t.width,e);r.setAttribute("width",ct(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});vt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=ir(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Be.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=Hn(t.dimension,e);return new et.SpaceNode(r)}});vt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Be.makeSpan([],[Cr(t.body,e)]),r=Be.makeSpan(["inner"],[r],e)):r=Be.makeSpan(["inner"],[Cr(t.body,e)]);var n=Be.makeSpan(["fix"],[]),i=Be.makeSpan([t.alignment],[r,n],e),a=Be.makeSpan(["strut"]);return a.style.height=ct(i.height+i.depth),i.depth&&(a.style.verticalAlign=ct(-i.depth)),i.children.unshift(a),i=Be.makeSpan(["thinbox"],[i],e),Be.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new et.MathNode("mpadded",[fn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});vt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});vt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new nt("Mismatched "+t.funcName)}});gG=o((t,e)=>{switch(e.style.size){case Ht.DISPLAY.size:return t.display;case Ht.TEXT.size:return t.text;case Ht.SCRIPT.size:return t.script;case Ht.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");vt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:ui(e[0]),text:ui(e[1]),script:ui(e[2]),scriptscript:ui(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=gG(t,e),n=Ri(r,e,!1);return Be.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=gG(t,e);return ph(r,e)},"mathmlBuilder")});f$=o((t,e,r,n,i,a,s)=>{t=Be.makeSpan([],[t]);var l=r&&Vt.isCharacterBox(r),u,h;if(e){var f=Cr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Cr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:ct(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:ct(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Be.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:ct(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:ct(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Be.makeSpan(["mspace"],[],n);x.style.marginRight=ct(a),v.unshift(x)}return Be.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),d$=["\\smallint"],xp=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=ir(t.base,"op"),i=!0):a=ir(t,"op");var s=e.style,l=!1;s.size===Ht.DISPLAY.size&&a.symbol&&!Vt.contains(d$,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Be.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Be.staticSvg(f+"Size"+(l?"2":"1"),e);u=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Ri(a.body,e,!0);m.length===1&&m[0]instanceof ms?(u=m[0],u.classes[0]="mop"):u=Be.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new ps("mo",[_o(t.name,t.mode)]),Vt.contains(d$,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ps("mo",gs(t.body,e));else{r=new ps("mi",[new qf(t.name.slice(1))]);var n=new ps("mo",[_o("\u2061","text")]);t.parentIsSupSub?r=new ps("mrow",[r,n]):r=$G([r,n])}return r},"mathmlBuilder$1"),lbe={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};vt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=lbe[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:xp,mathmlBuilder:oy});vt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ui(n)}},"handler"),htmlBuilder:xp,mathmlBuilder:oy});cbe={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};vt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:xp,mathmlBuilder:oy});vt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:xp,mathmlBuilder:oy});vt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=cbe[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:xp,mathmlBuilder:oy});p$=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=ir(t.base,"operatorname"),i=!0):a=ir(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Ri(l,e.withFont("mathrm"),!0),h=0;h{for(var r=gs(t.body,e.withFont("mathrm")),n=!0,i=0;if.toText()).join("");r=[new et.TextNode(l)]}var u=new et.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new et.MathNode("mo",[_o("\u2061","text")]);return t.parentIsSupSub?new et.MathNode("mrow",[u,h]):et.newDocumentFragment([u,h])},"mathmlBuilder");vt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:ui(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:p$,mathmlBuilder:ube});le("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");Kf({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Be.makeFragment(Ri(t.body,e,!1)):Be.makeSpan(["mord"],Ri(t.body,e,!0),e)},mathmlBuilder(t,e){return ph(t.body,e,!0)}});vt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Cr(t.body,e.havingCrampedStyle()),n=Be.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Be.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new et.MathNode("mo",[new et.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new et.MathNode("mover",[fn(t.body,e),r]);return n.setAttribute("accent","true"),n}});vt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:ui(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Ri(t.body,e.withPhantom(),!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=gs(t.body,e);return new et.MathNode("mphantom",r)},"mathmlBuilder")});vt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Cr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n{var r=gs(ui(t.body),e),n=new et.MathNode("mphantom",r),i=new et.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});vt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan(["inner"],[Cr(t.body,e.withPhantom())]),n=Be.makeSpan(["fix"],[]);return Be.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=gs(ui(t.body),e),n=new et.MathNode("mphantom",r),i=new et.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});vt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=ir(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Cr(t.body,e),n=Hn(t.dy,e);return Be.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new et.MathNode("mpadded",[fn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});vt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});vt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=ir(e[0],"size"),s=ir(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&ir(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Be.makeSpan(["mord","rule"],[],e),n=Hn(t.width,e),i=Hn(t.height,e),a=t.shift?Hn(t.shift,e):0;return r.style.borderRightWidth=ct(n),r.style.borderTopWidth=ct(i),r.style.bottom=ct(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=Hn(t.width,e),n=Hn(t.height,e),i=t.shift?Hn(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new et.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",ct(r)),s.setAttribute("height",ct(n));var l=new et.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",ct(i)):(l.setAttribute("height",ct(i)),l.setAttribute("depth",ct(-i))),l.setAttribute("voffset",ct(i)),l}});o(m$,"sizingGroup");yG=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],hbe=o((t,e)=>{var r=e.havingSize(t.size);return m$(t.body,r,e)},"htmlBuilder");vt({type:"sizing",names:yG,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:yG.indexOf(n)+1,body:a}},"handler"),htmlBuilder:hbe,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=gs(t.body,r),i=new et.MathNode("mstyle",n);return i.setAttribute("mathsize",ct(r.sizeMultiplier)),i},"mathmlBuilder")});vt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&ir(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=Be.makeSpan([],[Cr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n{var r=new et.MathNode("mpadded",[fn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});vt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Cr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Be.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=ct(f);var m=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(Ht.SCRIPTSCRIPT),y=Cr(t.index,g,e),v=.6*(m.height-m.depth),x=Be.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Be.makeSpan(["root"],[x]);return Be.makeSpan(["mord","sqrt"],[b,m],e)}else return Be.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new et.MathNode("mroot",[fn(r,e),fn(n,e)]):new et.MathNode("msqrt",[fn(r,e)])}});vG={display:Ht.DISPLAY,text:Ht.TEXT,script:Ht.SCRIPT,scriptscript:Ht.SCRIPTSCRIPT};vt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=vG[t.style],n=e.havingStyle(r).withFont("");return m$(t.body,n,e)},mathmlBuilder(t,e){var r=vG[t.style],n=e.havingStyle(r),i=gs(t.body,n),a=new et.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});fbe=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===Ht.DISPLAY.size||n.alwaysHandleSupSub);return i?xp:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===Ht.DISPLAY.size||n.limits);return a?p$:null}else{if(n.type==="accent")return Vt.isCharacterBox(n.base)?F7:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?h$:null}else return null}else return null},"htmlBuilderDelegate");Kf({type:"supsub",htmlBuilder(t,e){var r=fbe(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Cr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Vt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Cr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Cr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===Ht.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=ct(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof ms||w)&&(b=ct(-s.italic))}var S;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)0&&(f+=_,d-=_)}var A=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];S=Be.makeVList({positionType:"individualShift",children:A},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var L=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];S=Be.makeVList({positionType:"shift",positionData:d,children:L},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),S=Be.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var M=E7(s,"right")||"mord";return Be.makeSpan([M],[s,Be.makeSpan(["msupsub"],[S])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[fn(t.base,e)];t.sub&&a.push(fn(t.sub,e)),t.sup&&a.push(fn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===Ht.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===Ht.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===Ht.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===Ht.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===Ht.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===Ht.DISPLAY)?s="mover":s="msup"}return new et.MathNode(s,a)}});Kf({type:"atom",htmlBuilder(t,e){return Be.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new et.MathNode("mo",[_o(t.text,t.mode)]);if(t.family==="bin"){var n=P7(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});g$={mi:"italic",mn:"normal",mtext:"normal"};Kf({type:"mathord",htmlBuilder(t,e){return Be.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new et.MathNode("mi",[_o(t.text,t.mode,e)]),n=P7(t,e)||"italic";return n!==g$[r.type]&&r.setAttribute("mathvariant",n),r}});Kf({type:"textord",htmlBuilder(t,e){return Be.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=_o(t.text,t.mode,e),n=P7(t,e)||"normal",i;return t.mode==="text"?i=new et.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new et.MathNode("mn",[r]):t.text==="\\prime"?i=new et.MathNode("mo",[r]):i=new et.MathNode("mi",[r]),n!==g$[i.type]&&i.setAttribute("mathvariant",n),i}});y7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},v7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Kf({type:"spacing",htmlBuilder(t,e){if(v7.hasOwnProperty(t.text)){var r=v7[t.text].className||"";if(t.mode==="text"){var n=Be.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Be.makeSpan(["mspace",r],[Be.mathsym(t.text,t.mode,e)],e)}else{if(y7.hasOwnProperty(t.text))return Be.makeSpan(["mspace",y7[t.text]],[],e);throw new nt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(v7.hasOwnProperty(t.text))r=new et.MathNode("mtext",[new et.TextNode("\xA0")]);else{if(y7.hasOwnProperty(t.text))return new et.MathNode("mspace");throw new nt('Unknown type of space "'+t.text+'"')}return r}});xG=o(()=>{var t=new et.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");Kf({type:"tag",mathmlBuilder(t,e){var r=new et.MathNode("mtable",[new et.MathNode("mtr",[xG(),new et.MathNode("mtd",[ph(t.body,e)]),xG(),new et.MathNode("mtd",[ph(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});bG={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},wG={"\\textbf":"textbf","\\textmd":"textmd"},dbe={"\\textit":"textit","\\textup":"textup"},TG=o((t,e)=>{var r=t.font;if(r){if(bG[r])return e.withTextFontFamily(bG[r]);if(wG[r])return e.withTextFontWeight(wG[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(dbe[r])},"optionsWithFont");vt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:ui(i),font:n}},htmlBuilder(t,e){var r=TG(t,e),n=Ri(t.body,r,!0);return Be.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=TG(t,e);return ph(t.body,r)}});vt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Cr(t.body,e),n=Be.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new et.MathNode("mo",[new et.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new et.MathNode("munder",[fn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});vt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Cr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Be.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new et.MathNode("mpadded",[fn(t.body,e)],["vcenter"])}});vt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new nt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=kG(t),n=[],i=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),fh=zG,y$=`[ \r + ]`,pbe="\\\\[a-zA-Z@]+",mbe="\\\\[^\uD800-\uDFFF]",gbe="("+pbe+")"+y$+"*",ybe=`\\\\( +|[ \r ]+ +?)[ \r ]*`,L7="[\u0300-\u036F]",vbe=new RegExp(L7+"+$"),xbe="("+y$+"+)|"+(ybe+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(L7+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(L7+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+gbe)+("|"+mbe+")"),v4=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(xbe,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Ao("EOF",new Xs(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new nt("Unexpected character: '"+e[r]+"'",new Ao(e[r],new Xs(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Ao(i,new Xs(this,r,this.tokenRegex.lastIndex))}},D7=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new nt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},bbe=s$;le("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});le("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});le("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});le("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});le("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});le("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");le("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});EG={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};le("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new nt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=EG[e.text],n==null||n>=r)throw new nt("Invalid base-"+r+" digit "+e.text);for(var i;(i=EG[t.future().text])!=null&&i{var n=t.consumeArg().tokens;if(n.length!==1)throw new nt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new nt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new nt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new nt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");le("\\newcommand",t=>W7(t,!1,!0));le("\\renewcommand",t=>W7(t,!0,!1));le("\\providecommand",t=>W7(t,!0,!0));le("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});le("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});le("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),fh[r],wn.math[r],wn.text[r]),""});le("\\bgroup","{");le("\\egroup","}");le("~","\\nobreakspace");le("\\lq","`");le("\\rq","'");le("\\aa","\\r a");le("\\AA","\\r A");le("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");le("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");le("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");le("\u212C","\\mathscr{B}");le("\u2130","\\mathscr{E}");le("\u2131","\\mathscr{F}");le("\u210B","\\mathscr{H}");le("\u2110","\\mathscr{I}");le("\u2112","\\mathscr{L}");le("\u2133","\\mathscr{M}");le("\u211B","\\mathscr{R}");le("\u212D","\\mathfrak{C}");le("\u210C","\\mathfrak{H}");le("\u2128","\\mathfrak{Z}");le("\\Bbbk","\\Bbb{k}");le("\xB7","\\cdotp");le("\\llap","\\mathllap{\\textrm{#1}}");le("\\rlap","\\mathrlap{\\textrm{#1}}");le("\\clap","\\mathclap{\\textrm{#1}}");le("\\mathstrut","\\vphantom{(}");le("\\underbar","\\underline{\\text{#1}}");le("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');le("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");le("\\ne","\\neq");le("\u2260","\\neq");le("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");le("\u2209","\\notin");le("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");le("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");le("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");le("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");le("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");le("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");le("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");le("\u27C2","\\perp");le("\u203C","\\mathclose{!\\mkern-0.8mu!}");le("\u220C","\\notni");le("\u231C","\\ulcorner");le("\u231D","\\urcorner");le("\u231E","\\llcorner");le("\u231F","\\lrcorner");le("\xA9","\\copyright");le("\xAE","\\textregistered");le("\uFE0F","\\textregistered");le("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');le("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');le("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');le("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');le("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");le("\u22EE","\\vdots");le("\\varGamma","\\mathit{\\Gamma}");le("\\varDelta","\\mathit{\\Delta}");le("\\varTheta","\\mathit{\\Theta}");le("\\varLambda","\\mathit{\\Lambda}");le("\\varXi","\\mathit{\\Xi}");le("\\varPi","\\mathit{\\Pi}");le("\\varSigma","\\mathit{\\Sigma}");le("\\varUpsilon","\\mathit{\\Upsilon}");le("\\varPhi","\\mathit{\\Phi}");le("\\varPsi","\\mathit{\\Psi}");le("\\varOmega","\\mathit{\\Omega}");le("\\substack","\\begin{subarray}{c}#1\\end{subarray}");le("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");le("\\boxed","\\fbox{$\\displaystyle{#1}$}");le("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");le("\\implies","\\DOTSB\\;\\Longrightarrow\\;");le("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");CG={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};le("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in CG?e=CG[r]:(r.slice(0,4)==="\\not"||r in wn.math&&Vt.contains(["bin","rel"],wn.math[r].group))&&(e="\\dotsb"),e});q7={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};le("\\dotso",function(t){var e=t.future().text;return e in q7?"\\ldots\\,":"\\ldots"});le("\\dotsc",function(t){var e=t.future().text;return e in q7&&e!==","?"\\ldots\\,":"\\ldots"});le("\\cdots",function(t){var e=t.future().text;return e in q7?"\\@cdots\\,":"\\@cdots"});le("\\dotsb","\\cdots");le("\\dotsm","\\cdots");le("\\dotsi","\\!\\cdots");le("\\dotsx","\\ldots\\,");le("\\DOTSI","\\relax");le("\\DOTSB","\\relax");le("\\DOTSX","\\relax");le("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");le("\\,","\\tmspace+{3mu}{.1667em}");le("\\thinspace","\\,");le("\\>","\\mskip{4mu}");le("\\:","\\tmspace+{4mu}{.2222em}");le("\\medspace","\\:");le("\\;","\\tmspace+{5mu}{.2777em}");le("\\thickspace","\\;");le("\\!","\\tmspace-{3mu}{.1667em}");le("\\negthinspace","\\!");le("\\negmedspace","\\tmspace-{4mu}{.2222em}");le("\\negthickspace","\\tmspace-{5mu}{.277em}");le("\\enspace","\\kern.5em ");le("\\enskip","\\hskip.5em\\relax");le("\\quad","\\hskip1em\\relax");le("\\qquad","\\hskip2em\\relax");le("\\tag","\\@ifstar\\tag@literal\\tag@paren");le("\\tag@paren","\\tag@literal{({#1})}");le("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new nt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});le("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");le("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");le("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");le("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");le("\\newline","\\\\\\relax");le("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");v$=ct(Zl["Main-Regular"][84][1]-.7*Zl["Main-Regular"][65][1]);le("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+v$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");le("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+v$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");le("\\hspace","\\@ifstar\\@hspacer\\@hspace");le("\\@hspace","\\hskip #1\\relax");le("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");le("\\ordinarycolon",":");le("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");le("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');le("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');le("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');le("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');le("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');le("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');le("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');le("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');le("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');le("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');le("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');le("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');le("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');le("\u2237","\\dblcolon");le("\u2239","\\eqcolon");le("\u2254","\\coloneqq");le("\u2255","\\eqqcolon");le("\u2A74","\\Coloneqq");le("\\ratio","\\vcentcolon");le("\\coloncolon","\\dblcolon");le("\\colonequals","\\coloneqq");le("\\coloncolonequals","\\Coloneqq");le("\\equalscolon","\\eqqcolon");le("\\equalscoloncolon","\\Eqqcolon");le("\\colonminus","\\coloneq");le("\\coloncolonminus","\\Coloneq");le("\\minuscolon","\\eqcolon");le("\\minuscoloncolon","\\Eqcolon");le("\\coloncolonapprox","\\Colonapprox");le("\\coloncolonsim","\\Colonsim");le("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");le("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");le("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");le("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");le("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");le("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");le("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");le("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");le("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");le("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");le("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");le("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");le("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");le("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");le("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");le("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");le("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");le("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");le("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");le("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");le("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");le("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");le("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");le("\\imath","\\html@mathml{\\@imath}{\u0131}");le("\\jmath","\\html@mathml{\\@jmath}{\u0237}");le("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");le("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");le("\u27E6","\\llbracket");le("\u27E7","\\rrbracket");le("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");le("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");le("\u2983","\\lBrace");le("\u2984","\\rBrace");le("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");le("\u29B5","\\minuso");le("\\darr","\\downarrow");le("\\dArr","\\Downarrow");le("\\Darr","\\Downarrow");le("\\lang","\\langle");le("\\rang","\\rangle");le("\\uarr","\\uparrow");le("\\uArr","\\Uparrow");le("\\Uarr","\\Uparrow");le("\\N","\\mathbb{N}");le("\\R","\\mathbb{R}");le("\\Z","\\mathbb{Z}");le("\\alef","\\aleph");le("\\alefsym","\\aleph");le("\\Alpha","\\mathrm{A}");le("\\Beta","\\mathrm{B}");le("\\bull","\\bullet");le("\\Chi","\\mathrm{X}");le("\\clubs","\\clubsuit");le("\\cnums","\\mathbb{C}");le("\\Complex","\\mathbb{C}");le("\\Dagger","\\ddagger");le("\\diamonds","\\diamondsuit");le("\\empty","\\emptyset");le("\\Epsilon","\\mathrm{E}");le("\\Eta","\\mathrm{H}");le("\\exist","\\exists");le("\\harr","\\leftrightarrow");le("\\hArr","\\Leftrightarrow");le("\\Harr","\\Leftrightarrow");le("\\hearts","\\heartsuit");le("\\image","\\Im");le("\\infin","\\infty");le("\\Iota","\\mathrm{I}");le("\\isin","\\in");le("\\Kappa","\\mathrm{K}");le("\\larr","\\leftarrow");le("\\lArr","\\Leftarrow");le("\\Larr","\\Leftarrow");le("\\lrarr","\\leftrightarrow");le("\\lrArr","\\Leftrightarrow");le("\\Lrarr","\\Leftrightarrow");le("\\Mu","\\mathrm{M}");le("\\natnums","\\mathbb{N}");le("\\Nu","\\mathrm{N}");le("\\Omicron","\\mathrm{O}");le("\\plusmn","\\pm");le("\\rarr","\\rightarrow");le("\\rArr","\\Rightarrow");le("\\Rarr","\\Rightarrow");le("\\real","\\Re");le("\\reals","\\mathbb{R}");le("\\Reals","\\mathbb{R}");le("\\Rho","\\mathrm{P}");le("\\sdot","\\cdot");le("\\sect","\\S");le("\\spades","\\spadesuit");le("\\sub","\\subset");le("\\sube","\\subseteq");le("\\supe","\\supseteq");le("\\Tau","\\mathrm{T}");le("\\thetasym","\\vartheta");le("\\weierp","\\wp");le("\\Zeta","\\mathrm{Z}");le("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");le("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");le("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");le("\\bra","\\mathinner{\\langle{#1}|}");le("\\ket","\\mathinner{|{#1}\\rangle}");le("\\braket","\\mathinner{\\langle{#1}\\rangle}");le("\\Bra","\\left\\langle#1\\right|");le("\\Ket","\\left|#1\\right\\rangle");x$=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");le("\\bra@ket",x$(!1));le("\\bra@set",x$(!0));le("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");le("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");le("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");le("\\angln","{\\angl n}");le("\\blue","\\textcolor{##6495ed}{#1}");le("\\orange","\\textcolor{##ffa500}{#1}");le("\\pink","\\textcolor{##ff00af}{#1}");le("\\red","\\textcolor{##df0030}{#1}");le("\\green","\\textcolor{##28ae7b}{#1}");le("\\gray","\\textcolor{gray}{#1}");le("\\purple","\\textcolor{##9d38bd}{#1}");le("\\blueA","\\textcolor{##ccfaff}{#1}");le("\\blueB","\\textcolor{##80f6ff}{#1}");le("\\blueC","\\textcolor{##63d9ea}{#1}");le("\\blueD","\\textcolor{##11accd}{#1}");le("\\blueE","\\textcolor{##0c7f99}{#1}");le("\\tealA","\\textcolor{##94fff5}{#1}");le("\\tealB","\\textcolor{##26edd5}{#1}");le("\\tealC","\\textcolor{##01d1c1}{#1}");le("\\tealD","\\textcolor{##01a995}{#1}");le("\\tealE","\\textcolor{##208170}{#1}");le("\\greenA","\\textcolor{##b6ffb0}{#1}");le("\\greenB","\\textcolor{##8af281}{#1}");le("\\greenC","\\textcolor{##74cf70}{#1}");le("\\greenD","\\textcolor{##1fab54}{#1}");le("\\greenE","\\textcolor{##0d923f}{#1}");le("\\goldA","\\textcolor{##ffd0a9}{#1}");le("\\goldB","\\textcolor{##ffbb71}{#1}");le("\\goldC","\\textcolor{##ff9c39}{#1}");le("\\goldD","\\textcolor{##e07d10}{#1}");le("\\goldE","\\textcolor{##a75a05}{#1}");le("\\redA","\\textcolor{##fca9a9}{#1}");le("\\redB","\\textcolor{##ff8482}{#1}");le("\\redC","\\textcolor{##f9685d}{#1}");le("\\redD","\\textcolor{##e84d39}{#1}");le("\\redE","\\textcolor{##bc2612}{#1}");le("\\maroonA","\\textcolor{##ffbde0}{#1}");le("\\maroonB","\\textcolor{##ff92c6}{#1}");le("\\maroonC","\\textcolor{##ed5fa6}{#1}");le("\\maroonD","\\textcolor{##ca337c}{#1}");le("\\maroonE","\\textcolor{##9e034e}{#1}");le("\\purpleA","\\textcolor{##ddd7ff}{#1}");le("\\purpleB","\\textcolor{##c6b9fc}{#1}");le("\\purpleC","\\textcolor{##aa87ff}{#1}");le("\\purpleD","\\textcolor{##7854ab}{#1}");le("\\purpleE","\\textcolor{##543b78}{#1}");le("\\mintA","\\textcolor{##f5f9e8}{#1}");le("\\mintB","\\textcolor{##edf2df}{#1}");le("\\mintC","\\textcolor{##e0e5cc}{#1}");le("\\grayA","\\textcolor{##f6f7f7}{#1}");le("\\grayB","\\textcolor{##f0f1f2}{#1}");le("\\grayC","\\textcolor{##e3e5e6}{#1}");le("\\grayD","\\textcolor{##d6d8da}{#1}");le("\\grayE","\\textcolor{##babec2}{#1}");le("\\grayF","\\textcolor{##888d93}{#1}");le("\\grayG","\\textcolor{##626569}{#1}");le("\\grayH","\\textcolor{##3b3e40}{#1}");le("\\grayI","\\textcolor{##21242c}{#1}");le("\\kaBlue","\\textcolor{##314453}{#1}");le("\\kaGreen","\\textcolor{##71B307}{#1}");b$={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},R7=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new D7(bbe,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new v4(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new Ao("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new nt("Extra }",a)}else if(a.text==="EOF")throw new nt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new nt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new nt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new nt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new nt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new nt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ao(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new v4(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||fh.hasOwnProperty(e)||wn.math.hasOwnProperty(e)||wn.text.hasOwnProperty(e)||b$.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:fh.hasOwnProperty(e)&&!fh[e].primitive}},SG=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,c4=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),x7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},AG={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},x4=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new R7(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new nt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Ao("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&fh[i.text]&&fh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=wn[this.mode][r].group,u=Xs.range(e),h;if(hxe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(LG(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Xs.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),bp.default.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var bp,Qf,Cbe,Sbe,A$,C$,qr,_be,Lbe,Dbe,Rbe,_$,Nbe,yr,Mbe,Ibe,gh,K7,Obe,Pbe,S$,Q7,Ni,Zf,yh,We,rr=R(()=>{"use strict";bp=Xi(o7(),1),Qf=//gi,Cbe=o(t=>t?_$(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),Sbe=(()=>{let t=!1;return()=>{t||(Abe(),t=!0)}})();o(Abe,"setupDompurifyHooks");A$=o(t=>(Sbe(),bp.default.sanitize(t)),"removeScript"),C$=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=A$(t):r!=="loose"&&(t=_$(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=Rbe(t))}return t},"sanitizeMore"),qr=o((t,e)=>t&&(e.dompurifyConfig?t=bp.default.sanitize(C$(t,e),e.dompurifyConfig).toString():t=bp.default.sanitize(C$(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),_be=o((t,e)=>typeof t=="string"?qr(t,e):t.flat().map(r=>qr(r,e)),"sanitizeTextOrArray"),Lbe=o(t=>Qf.test(t),"hasBreaks"),Dbe=o(t=>t.split(Qf),"splitBreaks"),Rbe=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),_$=o(t=>t.replace(Qf,"#br#"),"breakToPlaceholder"),Nbe=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},"getUrl"),yr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),Mbe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),Ibe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),gh=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),Obe=o((t,e)=>{let r=K7(t,"~"),n=K7(e,"~");return r===1&&n===1},"shouldCombineSets"),Pbe=o(t=>{let e=K7(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),S$=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),Q7=/\$\$(.*)\$\$/g,Ni=o(t=>(t.match(Q7)?.length??0)>0,"hasKatex"),Zf=o(async(t,e)=>{t=await yh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),yh=o(async(t,e)=>{if(!Ni(t))return t;if(!(S$()||e.legacyMathML||e.forceLegacyMathML))return t.replace(Q7,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(E$(),k$)),n=e.forceLegacyMathML||!S$()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(Qf).map(i=>Ni(i)?`
${i}
`:`
${i}
`).join("").replace(Q7,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(//g,""))},"renderKatex"),We={getRows:Cbe,sanitizeText:qr,sanitizeTextOrArray:_be,hasBreaks:Lbe,splitBreaks:Dbe,lineBreakRegex:Qf,removeScript:A$,getUrl:Nbe,evaluate:yr,getMax:Mbe,getMin:Ibe}});var Bbe,Fbe,Sr,Lo,Yn=R(()=>{"use strict";ut();Bbe=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),Fbe=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),Sr=o(function(t,e,r,n){let i=Fbe(e,r,n);Bbe(t,i)},"configureSvgSize"),Lo=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;V.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;V.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,V.info(`Calculated bounds: ${l}x${u}`),Sr(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var S4,zbe,L$,D$,Z7=R(()=>{"use strict";ut();S4={},zbe=o((t,e,r)=>{let n="";return t in S4&&S4[t]?n=S4[t](r):V.warn(`No theme found for ${t}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 1px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + & .edge-thickness-invisible { + stroke-width: 0; + fill: none; + } + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + & p { + margin: 0 + } + + ${n} + + ${e} +`},"getStyles"),L$=o((t,e)=>{e!==void 0&&(S4[t]=e)},"addStylesForDiagram"),D$=zbe});var ly={};hr(ly,{clear:()=>vr,getAccDescription:()=>Lr,getAccTitle:()=>Ar,getDiagramTitle:()=>Xr,setAccDescription:()=>_r,setAccTitle:()=>kr,setDiagramTitle:()=>nn});var J7,eS,tS,rS,vr,kr,Ar,_r,Lr,nn,Xr,bi=R(()=>{"use strict";rr();qs();J7="",eS="",tS="",rS=o(t=>qr(t,Or()),"sanitizeText"),vr=o(()=>{J7="",tS="",eS=""},"clear"),kr=o(t=>{J7=rS(t).replace(/^\s+/g,"")},"setAccTitle"),Ar=o(()=>J7,"getAccTitle"),_r=o(t=>{tS=rS(t).replace(/\n\s+/g,` +`)},"setAccDescription"),Lr=o(()=>tS,"getAccDescription"),nn=o(t=>{eS=rS(t)},"setDiagramTitle"),Xr=o(()=>eS,"getDiagramTitle")});var R$,Gbe,de,iS,_4,$be,aS,Vbe,A4,Jf,cy,nS,_t=R(()=>{"use strict";Hf();ut();qs();rr();Yn();Z7();bi();R$=V,Gbe=$1,de=Or,iS=Zb,_4=uh,$be=o(t=>qr(t,de()),"sanitizeText"),aS=Lo,Vbe=o(()=>ly,"getCommonDb"),A4={},Jf=o((t,e,r)=>{A4[t]&&R$.warn(`Diagram with id ${t} already registered. Overwriting.`),A4[t]=e,r&&$C(t,r),L$(t,e.styles),e.injectUtils?.(R$,Gbe,de,$be,aS,Vbe(),()=>{})},"registerDiagram"),cy=o(t=>{if(t in A4)return A4[t];throw new nS(t)},"getDiagram"),nS=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var ul,vh,ja,cl,nc,uy,sS,oS,L4,D4,N$,Ube,Hbe,Ybe,Wbe,qbe,Xbe,jbe,Kbe,Qbe,Zbe,Jbe,e4e,t4e,r4e,n4e,i4e,a4e,M$,s4e,o4e,I$,l4e,c4e,u4e,h4e,xh,f4e,d4e,p4e,m4e,g4e,hy,lS=R(()=>{"use strict";_t();rr();bi();ul=[],vh=[""],ja="global",cl="",nc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],uy=[],sS="",oS=!1,L4=4,D4=2,Ube=o(function(){return N$},"getC4Type"),Hbe=o(function(t){N$=qr(t,de())},"setC4Type"),Ybe=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=uy.find(d=>d.from===e&&d.to===r);if(f?h=f:uy.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=xh()},"addRel"),Wbe=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=ul.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,ul.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=ja,l.wrap=xh()},"addPersonOrSystem"),qbe=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=xh(),u.typeC4Shape={text:t},u.parentBoundary=ja},"addContainer"),Xbe=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=xh(),u.typeC4Shape={text:t},u.parentBoundary=ja},"addComponent"),jbe=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=nc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,nc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ja,a.wrap=xh(),cl=ja,ja=t,vh.push(cl)},"addPersonOrSystemBoundary"),Kbe=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=nc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,nc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ja,a.wrap=xh(),cl=ja,ja=t,vh.push(cl)},"addContainerBoundary"),Qbe=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=nc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,nc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=ja,u.wrap=xh(),cl=ja,ja=e,vh.push(cl)},"addDeploymentNode"),Zbe=o(function(){ja=cl,vh.pop(),cl=vh.pop(),vh.push(cl)},"popBoundaryParseStack"),Jbe=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=ul.find(p=>p.alias===e);if(!(d===void 0&&(d=nc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),e4e=o(function(t,e,r,n,i,a,s){let l=uy.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),t4e=o(function(t,e,r){let n=L4,i=D4;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(L4=n),i>=1&&(D4=i)},"updateLayoutConfig"),r4e=o(function(){return L4},"getC4ShapeInRow"),n4e=o(function(){return D4},"getC4BoundaryInRow"),i4e=o(function(){return ja},"getCurrentBoundaryParse"),a4e=o(function(){return cl},"getParentBoundaryParse"),M$=o(function(t){return t==null?ul:ul.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),s4e=o(function(t){return ul.find(e=>e.alias===t)},"getC4Shape"),o4e=o(function(t){return Object.keys(M$(t))},"getC4ShapeKeys"),I$=o(function(t){return t==null?nc:nc.filter(e=>e.parentBoundary===t)},"getBoundaries"),l4e=I$,c4e=o(function(){return uy},"getRels"),u4e=o(function(){return sS},"getTitle"),h4e=o(function(t){oS=t},"setWrap"),xh=o(function(){return oS},"autoWrap"),f4e=o(function(){ul=[],nc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],cl="",ja="global",vh=[""],uy=[],vh=[""],sS="",oS=!1,L4=4,D4=2},"clear"),d4e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},p4e={FILLED:0,OPEN:1},m4e={LEFTOF:0,RIGHTOF:1,OVER:2},g4e=o(function(t){sS=qr(t,de())},"setTitle"),hy={addPersonOrSystem:Wbe,addPersonOrSystemBoundary:jbe,addContainer:qbe,addContainerBoundary:Kbe,addComponent:Xbe,addDeploymentNode:Qbe,popBoundaryParseStack:Zbe,addRel:Ybe,updateElStyle:Jbe,updateRelStyle:e4e,updateLayoutConfig:t4e,autoWrap:xh,setWrap:h4e,getC4ShapeArray:M$,getC4Shape:s4e,getC4ShapeKeys:o4e,getBoundaries:I$,getBoundarys:l4e,getCurrentBoundaryParse:i4e,getParentBoundaryParse:a4e,getRels:c4e,getTitle:u4e,getC4Type:Ube,getC4ShapeInRow:r4e,getC4BoundaryInRow:n4e,setAccTitle:kr,getAccTitle:Ar,getAccDescription:Lr,setAccDescription:_r,getConfig:o(()=>de().c4,"getConfig"),clear:f4e,LINETYPE:d4e,ARROWTYPE:p4e,PLACEMENT:m4e,setTitle:g4e,setC4Type:Hbe}});function ed(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var cS=R(()=>{"use strict";o(ed,"ascending")});function uS(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var O$=R(()=>{"use strict";o(uS,"descending")});function td(t){let e,r,n;t.length!==2?(e=ed,r=o((l,u)=>ed(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===ed||t===uS?t:y4e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function y4e(){return 0}var hS=R(()=>{"use strict";cS();O$();o(td,"bisector");o(y4e,"zero")});function fS(t){return t===null?NaN:+t}var P$=R(()=>{"use strict";o(fS,"number")});var B$,F$,v4e,x4e,dS,z$=R(()=>{"use strict";cS();hS();P$();B$=td(ed),F$=B$.right,v4e=B$.left,x4e=td(fS).center,dS=F$});function G$({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function b4e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function w4e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function T4e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var wp,$$=R(()=>{"use strict";wp=class extends Map{static{o(this,"InternMap")}constructor(e,r=T4e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(G$(this,e))}has(e){return super.has(G$(this,e))}set(e,r){return super.set(b4e(this,e),r)}delete(e){return super.delete(w4e(this,e))}};o(G$,"intern_get");o(b4e,"intern_set");o(w4e,"intern_delete");o(T4e,"keyof")});function R4(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=k4e?10:a>=E4e?5:a>=C4e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let n=e=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h{"use strict";k4e=Math.sqrt(50),E4e=Math.sqrt(10),C4e=Math.sqrt(2);o(R4,"tickSpec");o(N4,"ticks");o(fy,"tickIncrement");o(Tp,"tickStep")});function M4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var U$=R(()=>{"use strict";o(M4,"max")});function I4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var H$=R(()=>{"use strict";o(I4,"min")});function O4(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n{"use strict";o(O4,"range")});var bh=R(()=>{"use strict";z$();hS();U$();H$();Y$();V$();$$()});function pS(t){return t}var W$=R(()=>{"use strict";o(pS,"default")});function S4e(t){return"translate("+t+",0)"}function A4e(t){return"translate(0,"+t+")"}function _4e(t){return e=>+t(e)}function L4e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function D4e(){return!this.__axis}function X$(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===B4||t===P4?-1:1,f=t===P4||t===mS?"x":"y",d=t===B4||t===gS?S4e:A4e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):pS),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,S=(e.bandwidth?L4e:_4e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),_=T.selectAll(".tick").data(g,e).order(),A=_.exit(),L=_.enter().append("g").attr("class","tick"),M=_.select("line"),N=_.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),_=_.merge(L),M=M.merge(L.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),N=N.merge(L.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===B4?"0em":t===gS?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),_=_.transition(m),M=M.transition(m),N=N.transition(m),A=A.transition(m).attr("opacity",q$).attr("transform",function(k){return isFinite(k=S(k))?d(k+u):this.getAttribute("transform")}),L.attr("opacity",q$).attr("transform",function(k){var I=this.parentNode.__axis;return d((I&&isFinite(I=I(k))?I:S(k))+u)})),A.remove(),E.attr("d",t===P4||t===mS?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),_.attr("opacity",1).attr("transform",function(k){return d(S(k)+u)}),M.attr(f+"2",h*a),N.attr(f,h*v).text(y),T.filter(D4e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===mS?"start":t===P4?"end":"middle"),T.each(function(){this.__axis=S})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function yS(t){return X$(B4,t)}function vS(t){return X$(gS,t)}var B4,mS,gS,P4,q$,j$=R(()=>{"use strict";W$();B4=1,mS=2,gS=3,P4=4,q$=1e-6;o(S4e,"translateX");o(A4e,"translateY");o(_4e,"number");o(L4e,"center");o(D4e,"entering");o(X$,"axis");o(yS,"axisTop");o(vS,"axisBottom")});var K$=R(()=>{"use strict";j$()});function Z$(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function M4e(t,e){for(var r=0,n=t.length,i;r{"use strict";R4e={value:o(()=>{},"value")};o(Z$,"dispatch");o(F4,"Dispatch");o(N4e,"parseTypenames");F4.prototype=Z$.prototype={constructor:F4,on:o(function(t,e){var r=this._,n=N4e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a0)for(var r=new Array(i),n=0,i,a;n{"use strict";J$()});var z4,wS,TS=R(()=>{"use strict";z4="http://www.w3.org/1999/xhtml",wS={svg:"http://www.w3.org/2000/svg",xhtml:z4,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function ic(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),wS.hasOwnProperty(e)?{space:wS[e],local:t}:t}var G4=R(()=>{"use strict";TS();o(ic,"default")});function I4e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===z4&&e.documentElement.namespaceURI===z4?e.createElement(t):e.createElementNS(r,t)}}function O4e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function dy(t){var e=ic(t);return(e.local?O4e:I4e)(e)}var kS=R(()=>{"use strict";G4();TS();o(I4e,"creatorInherit");o(O4e,"creatorFixed");o(dy,"default")});function P4e(){}function wh(t){return t==null?P4e:function(){return this.querySelector(t)}}var $4=R(()=>{"use strict";o(P4e,"none");o(wh,"default")});function ES(t){typeof t!="function"&&(t=wh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";hl();$4();o(ES,"default")});function CS(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var tV=R(()=>{"use strict";o(CS,"array")});function B4e(){return[]}function kp(t){return t==null?B4e:function(){return this.querySelectorAll(t)}}var SS=R(()=>{"use strict";o(B4e,"empty");o(kp,"default")});function F4e(t){return function(){return CS(t.apply(this,arguments))}}function AS(t){typeof t=="function"?t=F4e(t):t=kp(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a{"use strict";hl();tV();SS();o(F4e,"arrayAll");o(AS,"default")});function Ep(t){return function(){return this.matches(t)}}function V4(t){return function(e){return e.matches(t)}}var py=R(()=>{"use strict";o(Ep,"default");o(V4,"childMatcher")});function G4e(t){return function(){return z4e.call(this.children,t)}}function $4e(){return this.firstElementChild}function _S(t){return this.select(t==null?$4e:G4e(typeof t=="function"?t:V4(t)))}var z4e,nV=R(()=>{"use strict";py();z4e=Array.prototype.find;o(G4e,"childFind");o($4e,"childFirst");o(_S,"default")});function U4e(){return Array.from(this.children)}function H4e(t){return function(){return V4e.call(this.children,t)}}function LS(t){return this.selectAll(t==null?U4e:H4e(typeof t=="function"?t:V4(t)))}var V4e,iV=R(()=>{"use strict";py();V4e=Array.prototype.filter;o(U4e,"children");o(H4e,"childrenFilter");o(LS,"default")});function DS(t){typeof t!="function"&&(t=Ep(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";hl();py();o(DS,"default")});function my(t){return new Array(t.length)}var RS=R(()=>{"use strict";o(my,"default")});function NS(){return new Zn(this._enter||this._groups.map(my),this._parents)}function gy(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var MS=R(()=>{"use strict";RS();hl();o(NS,"default");o(gy,"EnterNode");gy.prototype={constructor:gy,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function IS(t){return function(){return t}}var sV=R(()=>{"use strict";o(IS,"default")});function Y4e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s=w&&(w=b+1);!(T=v[w])&&++w{"use strict";hl();MS();sV();o(Y4e,"bindIndex");o(W4e,"bindKey");o(q4e,"datum");o(OS,"default");o(X4e,"arraylike")});function PS(){return new Zn(this._exit||this._groups.map(my),this._parents)}var lV=R(()=>{"use strict";RS();hl();o(PS,"default")});function BS(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var cV=R(()=>{"use strict";o(BS,"default")});function FS(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u{"use strict";hl();o(FS,"default")});function zS(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var hV=R(()=>{"use strict";o(zS,"default")});function GS(t){t||(t=j4e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var fV=R(()=>{"use strict";hl();o(GS,"default");o(j4e,"ascending")});function $S(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var dV=R(()=>{"use strict";o($S,"default")});function VS(){return Array.from(this)}var pV=R(()=>{"use strict";o(VS,"default")});function US(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(US,"default")});function HS(){let t=0;for(let e of this)++t;return t}var gV=R(()=>{"use strict";o(HS,"default")});function YS(){return!this.node()}var yV=R(()=>{"use strict";o(YS,"default")});function WS(t){for(var e=this._groups,r=0,n=e.length;r{"use strict";o(WS,"default")});function K4e(t){return function(){this.removeAttribute(t)}}function Q4e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Z4e(t,e){return function(){this.setAttribute(t,e)}}function J4e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function e3e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function t3e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function qS(t,e){var r=ic(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?Q4e:K4e:typeof e=="function"?r.local?t3e:e3e:r.local?J4e:Z4e)(r,e))}var xV=R(()=>{"use strict";G4();o(K4e,"attrRemove");o(Q4e,"attrRemoveNS");o(Z4e,"attrConstant");o(J4e,"attrConstantNS");o(e3e,"attrFunction");o(t3e,"attrFunctionNS");o(qS,"default")});function yy(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var XS=R(()=>{"use strict";o(yy,"default")});function r3e(t){return function(){this.style.removeProperty(t)}}function n3e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function i3e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function jS(t,e,r){return arguments.length>1?this.each((e==null?r3e:typeof e=="function"?i3e:n3e)(t,e,r??"")):Th(this.node(),t)}function Th(t,e){return t.style.getPropertyValue(e)||yy(t).getComputedStyle(t,null).getPropertyValue(e)}var KS=R(()=>{"use strict";XS();o(r3e,"styleRemove");o(n3e,"styleConstant");o(i3e,"styleFunction");o(jS,"default");o(Th,"styleValue")});function a3e(t){return function(){delete this[t]}}function s3e(t,e){return function(){this[t]=e}}function o3e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function QS(t,e){return arguments.length>1?this.each((e==null?a3e:typeof e=="function"?o3e:s3e)(t,e)):this.node()[t]}var bV=R(()=>{"use strict";o(a3e,"propertyRemove");o(s3e,"propertyConstant");o(o3e,"propertyFunction");o(QS,"default")});function wV(t){return t.trim().split(/^|\s+/)}function ZS(t){return t.classList||new TV(t)}function TV(t){this._node=t,this._names=wV(t.getAttribute("class")||"")}function kV(t,e){for(var r=ZS(t),n=-1,i=e.length;++n{"use strict";o(wV,"classArray");o(ZS,"classList");o(TV,"ClassList");TV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(kV,"classedAdd");o(EV,"classedRemove");o(l3e,"classedTrue");o(c3e,"classedFalse");o(u3e,"classedFunction");o(JS,"default")});function h3e(){this.textContent=""}function f3e(t){return function(){this.textContent=t}}function d3e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function eA(t){return arguments.length?this.each(t==null?h3e:(typeof t=="function"?d3e:f3e)(t)):this.node().textContent}var SV=R(()=>{"use strict";o(h3e,"textRemove");o(f3e,"textConstant");o(d3e,"textFunction");o(eA,"default")});function p3e(){this.innerHTML=""}function m3e(t){return function(){this.innerHTML=t}}function g3e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function tA(t){return arguments.length?this.each(t==null?p3e:(typeof t=="function"?g3e:m3e)(t)):this.node().innerHTML}var AV=R(()=>{"use strict";o(p3e,"htmlRemove");o(m3e,"htmlConstant");o(g3e,"htmlFunction");o(tA,"default")});function y3e(){this.nextSibling&&this.parentNode.appendChild(this)}function rA(){return this.each(y3e)}var _V=R(()=>{"use strict";o(y3e,"raise");o(rA,"default")});function v3e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function nA(){return this.each(v3e)}var LV=R(()=>{"use strict";o(v3e,"lower");o(nA,"default")});function iA(t){var e=typeof t=="function"?t:dy(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var DV=R(()=>{"use strict";kS();o(iA,"default")});function x3e(){return null}function aA(t,e){var r=typeof t=="function"?t:dy(t),n=e==null?x3e:typeof e=="function"?e:wh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var RV=R(()=>{"use strict";kS();$4();o(x3e,"constantNull");o(aA,"default")});function b3e(){var t=this.parentNode;t&&t.removeChild(this)}function sA(){return this.each(b3e)}var NV=R(()=>{"use strict";o(b3e,"remove");o(sA,"default")});function w3e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function T3e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function oA(t){return this.select(t?T3e:w3e)}var MV=R(()=>{"use strict";o(w3e,"selection_cloneShallow");o(T3e,"selection_cloneDeep");o(oA,"default")});function lA(t){return arguments.length?this.property("__data__",t):this.node().__data__}var IV=R(()=>{"use strict";o(lA,"default")});function k3e(t){return function(e){t.call(this,e,this.__data__)}}function E3e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function C3e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r{"use strict";o(k3e,"contextListener");o(E3e,"parseTypenames");o(C3e,"onRemove");o(S3e,"onAdd");o(cA,"default")});function PV(t,e,r){var n=yy(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function A3e(t,e){return function(){return PV(this,t,e)}}function _3e(t,e){return function(){return PV(this,t,e.apply(this,arguments))}}function uA(t,e){return this.each((typeof e=="function"?_3e:A3e)(t,e))}var BV=R(()=>{"use strict";XS();o(PV,"dispatchEvent");o(A3e,"dispatchConstant");o(_3e,"dispatchFunction");o(uA,"default")});function*hA(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(hA,"default")});function Zn(t,e){this._groups=t,this._parents=e}function zV(){return new Zn([[document.documentElement]],fA)}function L3e(){return this}var fA,cu,hl=R(()=>{"use strict";eV();rV();nV();iV();aV();oV();MS();lV();cV();uV();hV();fV();dV();pV();mV();gV();yV();vV();xV();KS();bV();CV();SV();AV();_V();LV();DV();RV();NV();MV();IV();OV();BV();FV();fA=[null];o(Zn,"Selection");o(zV,"selection");o(L3e,"selection_selection");Zn.prototype=zV.prototype={constructor:Zn,select:ES,selectAll:AS,selectChild:_S,selectChildren:LS,filter:DS,data:OS,enter:NS,exit:PS,join:BS,merge:FS,selection:L3e,order:zS,sort:GS,call:$S,nodes:VS,node:US,size:HS,empty:YS,each:WS,attr:qS,style:jS,property:QS,classed:JS,text:eA,html:tA,raise:rA,lower:nA,append:iA,insert:aA,remove:sA,clone:oA,datum:lA,on:cA,dispatch:uA,[Symbol.iterator]:hA};cu=zV});function $e(t){return typeof t=="string"?new Zn([[document.querySelector(t)]],[document.documentElement]):new Zn([[t]],fA)}var GV=R(()=>{"use strict";hl();o($e,"default")});var fl=R(()=>{"use strict";py();G4();GV();hl();$4();SS();KS()});var $V=R(()=>{"use strict"});function kh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function Cp(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var dA=R(()=>{"use strict";o(kh,"default");o(Cp,"extend")});function Eh(){}function UV(){return this.rgb().formatHex()}function B3e(){return this.rgb().formatHex8()}function F3e(){return KV(this).formatHsl()}function HV(){return this.rgb().formatRgb()}function pl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=D3e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?YV(e):r===3?new la(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?U4(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?U4(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=R3e.exec(t))?new la(e[1],e[2],e[3],1):(e=N3e.exec(t))?new la(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=M3e.exec(t))?U4(e[1],e[2],e[3],e[4]):(e=I3e.exec(t))?U4(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=O3e.exec(t))?XV(e[1],e[2]/100,e[3]/100,1):(e=P3e.exec(t))?XV(e[1],e[2]/100,e[3]/100,e[4]):VV.hasOwnProperty(t)?YV(VV[t]):t==="transparent"?new la(NaN,NaN,NaN,0):null}function YV(t){return new la(t>>16&255,t>>8&255,t&255,1)}function U4(t,e,r,n){return n<=0&&(t=e=r=NaN),new la(t,e,r,n)}function mA(t){return t instanceof Eh||(t=pl(t)),t?(t=t.rgb(),new la(t.r,t.g,t.b,t.opacity)):new la}function Ap(t,e,r,n){return arguments.length===1?mA(t):new la(t,e,r,n??1)}function la(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function WV(){return`#${rd(this.r)}${rd(this.g)}${rd(this.b)}`}function z3e(){return`#${rd(this.r)}${rd(this.g)}${rd(this.b)}${rd((isNaN(this.opacity)?1:this.opacity)*255)}`}function qV(){let t=W4(this.opacity);return`${t===1?"rgb(":"rgba("}${nd(this.r)}, ${nd(this.g)}, ${nd(this.b)}${t===1?")":`, ${t})`}`}function W4(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function nd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function rd(t){return t=nd(t),(t<16?"0":"")+t.toString(16)}function XV(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new dl(t,e,r,n)}function KV(t){if(t instanceof dl)return new dl(t.h,t.s,t.l,t.opacity);if(t instanceof Eh||(t=pl(t)),!t)return new dl;if(t instanceof dl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r0&&u<1?0:s,new dl(s,l,u,t.opacity)}function QV(t,e,r,n){return arguments.length===1?KV(t):new dl(t,e,r,n??1)}function dl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function jV(t){return t=(t||0)%360,t<0?t+360:t}function H4(t){return Math.max(0,Math.min(1,t||0))}function pA(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var vy,Y4,Sp,xy,ac,D3e,R3e,N3e,M3e,I3e,O3e,P3e,VV,gA=R(()=>{"use strict";dA();o(Eh,"Color");vy=.7,Y4=1/vy,Sp="\\s*([+-]?\\d+)\\s*",xy="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",ac="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",D3e=/^#([0-9a-f]{3,8})$/,R3e=new RegExp(`^rgb\\(${Sp},${Sp},${Sp}\\)$`),N3e=new RegExp(`^rgb\\(${ac},${ac},${ac}\\)$`),M3e=new RegExp(`^rgba\\(${Sp},${Sp},${Sp},${xy}\\)$`),I3e=new RegExp(`^rgba\\(${ac},${ac},${ac},${xy}\\)$`),O3e=new RegExp(`^hsl\\(${xy},${ac},${ac}\\)$`),P3e=new RegExp(`^hsla\\(${xy},${ac},${ac},${xy}\\)$`),VV={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};kh(Eh,pl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:UV,formatHex:UV,formatHex8:B3e,formatHsl:F3e,formatRgb:HV,toString:HV});o(UV,"color_formatHex");o(B3e,"color_formatHex8");o(F3e,"color_formatHsl");o(HV,"color_formatRgb");o(pl,"color");o(YV,"rgbn");o(U4,"rgba");o(mA,"rgbConvert");o(Ap,"rgb");o(la,"Rgb");kh(la,Ap,Cp(Eh,{brighter(t){return t=t==null?Y4:Math.pow(Y4,t),new la(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?vy:Math.pow(vy,t),new la(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new la(nd(this.r),nd(this.g),nd(this.b),W4(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:WV,formatHex:WV,formatHex8:z3e,formatRgb:qV,toString:qV}));o(WV,"rgb_formatHex");o(z3e,"rgb_formatHex8");o(qV,"rgb_formatRgb");o(W4,"clampa");o(nd,"clampi");o(rd,"hex");o(XV,"hsla");o(KV,"hslConvert");o(QV,"hsl");o(dl,"Hsl");kh(dl,QV,Cp(Eh,{brighter(t){return t=t==null?Y4:Math.pow(Y4,t),new dl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?vy:Math.pow(vy,t),new dl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new la(pA(t>=240?t-240:t+120,i,n),pA(t,i,n),pA(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new dl(jV(this.h),H4(this.s),H4(this.l),W4(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=W4(this.opacity);return`${t===1?"hsl(":"hsla("}${jV(this.h)}, ${H4(this.s)*100}%, ${H4(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(jV,"clamph");o(H4,"clampt");o(pA,"hsl2rgb")});var ZV,JV,eU=R(()=>{"use strict";ZV=Math.PI/180,JV=180/Math.PI});function sU(t){if(t instanceof sc)return new sc(t.l,t.a,t.b,t.opacity);if(t instanceof uu)return oU(t);t instanceof la||(t=mA(t));var e=bA(t.r),r=bA(t.g),n=bA(t.b),i=yA((.2225045*e+.7168786*r+.0606169*n)/rU),a,s;return e===r&&r===n?a=s=i:(a=yA((.4360747*e+.3850649*r+.1430804*n)/tU),s=yA((.0139322*e+.0971045*r+.7141733*n)/nU)),new sc(116*i-16,500*(a-i),200*(i-s),t.opacity)}function wA(t,e,r,n){return arguments.length===1?sU(t):new sc(t,e,r,n??1)}function sc(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function yA(t){return t>G3e?Math.pow(t,1/3):t/aU+iU}function vA(t){return t>_p?t*t*t:aU*(t-iU)}function xA(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function bA(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function $3e(t){if(t instanceof uu)return new uu(t.h,t.c,t.l,t.opacity);if(t instanceof sc||(t=sU(t)),t.a===0&&t.b===0)return new uu(NaN,0{"use strict";dA();gA();eU();q4=18,tU=.96422,rU=1,nU=.82521,iU=4/29,_p=6/29,aU=3*_p*_p,G3e=_p*_p*_p;o(sU,"labConvert");o(wA,"lab");o(sc,"Lab");kh(sc,wA,Cp(Eh,{brighter(t){return new sc(this.l+q4*(t??1),this.a,this.b,this.opacity)},darker(t){return new sc(this.l-q4*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=tU*vA(e),t=rU*vA(t),r=nU*vA(r),new la(xA(3.1338561*e-1.6168667*t-.4906146*r),xA(-.9787684*e+1.9161415*t+.033454*r),xA(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(yA,"xyz2lab");o(vA,"lab2xyz");o(xA,"lrgb2rgb");o(bA,"rgb2lrgb");o($3e,"hclConvert");o(by,"hcl");o(uu,"Hcl");o(oU,"hcl2lab");kh(uu,by,Cp(Eh,{brighter(t){return new uu(this.h,this.c,this.l+q4*(t??1),this.opacity)},darker(t){return new uu(this.h,this.c,this.l-q4*(t??1),this.opacity)},rgb(){return oU(this).rgb()}}))});var Lp=R(()=>{"use strict";gA();lU()});function TA(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function kA(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n{"use strict";o(TA,"basis");o(kA,"default")});function CA(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return TA((r-n/e)*e,i,a,s,l)}}var cU=R(()=>{"use strict";EA();o(CA,"default")});var Dp,SA=R(()=>{"use strict";Dp=o(t=>()=>t,"default")});function uU(t,e){return function(r){return t+r*e}}function V3e(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function hU(t,e){var r=e-t;return r?uU(t,r>180||r<-180?r-360*Math.round(r/360):r):Dp(isNaN(t)?e:t)}function fU(t){return(t=+t)==1?hu:function(e,r){return r-e?V3e(e,r,t):Dp(isNaN(e)?r:e)}}function hu(t,e){var r=e-t;return r?uU(t,r):Dp(isNaN(t)?e:t)}var AA=R(()=>{"use strict";SA();o(uU,"linear");o(V3e,"exponential");o(hU,"hue");o(fU,"gamma");o(hu,"nogamma")});function dU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";Lp();EA();cU();AA();id=o(function t(e){var r=fU(e);function n(i,a){var s=r((i=Ap(i)).r,(a=Ap(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=hu(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(dU,"rgbSpline");U3e=dU(kA),H3e=dU(CA)});function LA(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i{"use strict";o(LA,"default");o(pU,"isNumberArray")});function gU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s{"use strict";X4();o(gU,"genericArray")});function DA(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var vU=R(()=>{"use strict";o(DA,"default")});function ji(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var wy=R(()=>{"use strict";o(ji,"default")});function RA(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=Ch(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var xU=R(()=>{"use strict";X4();o(RA,"default")});function Y3e(t){return function(){return t}}function W3e(t){return function(e){return t(e)+""}}function Rp(t,e){var r=MA.lastIndex=NA.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=MA.exec(t))&&(i=NA.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:ji(n,i)})),r=NA.lastIndex;return r{"use strict";wy();MA=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,NA=new RegExp(MA.source,"g");o(Y3e,"zero");o(W3e,"one");o(Rp,"default")});function Ch(t,e){var r=typeof e,n;return e==null||r==="boolean"?Dp(e):(r==="number"?ji:r==="string"?(n=pl(e))?(e=n,id):Rp:e instanceof pl?id:e instanceof Date?DA:pU(e)?LA:Array.isArray(e)?gU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?RA:ji)(t,e)}var X4=R(()=>{"use strict";Lp();_A();yU();vU();wy();xU();IA();SA();mU();o(Ch,"default")});function j4(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var bU=R(()=>{"use strict";o(j4,"default")});function Q4(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n{"use strict";wU=180/Math.PI,K4={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(Q4,"default")});function kU(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?K4:Q4(e.a,e.b,e.c,e.d,e.e,e.f)}function EU(t){return t==null?K4:(Z4||(Z4=document.createElementNS("http://www.w3.org/2000/svg","g")),Z4.setAttribute("transform",t),(t=Z4.transform.baseVal.consolidate())?(t=t.matrix,Q4(t.a,t.b,t.c,t.d,t.e,t.f)):K4)}var Z4,CU=R(()=>{"use strict";TU();o(kU,"parseCss");o(EU,"parseSvg")});function SU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:ji(h,d)},{i:y-2,x:ji(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:ji(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:ji(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:ji(h,d)},{i:y-2,x:ji(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";wy();CU();o(SU,"interpolateTransform");OA=SU(kU,"px, ","px)","deg)"),PA=SU(EU,", ",")",")")});function _U(t){return function(e,r){var n=t((e=by(e)).h,(r=by(r)).h),i=hu(e.c,r.c),a=hu(e.l,r.l),s=hu(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var BA,q3e,LU=R(()=>{"use strict";Lp();AA();o(_U,"hcl");BA=_U(hU),q3e=_U(hu)});var Np=R(()=>{"use strict";X4();wy();bU();IA();AU();_A();LU()});function Ay(){return ad||(NU(X3e),ad=Cy.now()+t3)}function X3e(){ad=0}function Sy(){this._call=this._time=this._next=null}function r3(t,e,r){var n=new Sy;return n.restart(t,e,r),n}function MU(){Ay(),++Mp;for(var t=J4,e;t;)(e=ad-t._time)>=0&&t._call.call(void 0,e),t=t._next;--Mp}function DU(){ad=(e3=Cy.now())+t3,Mp=ky=0;try{MU()}finally{Mp=0,K3e(),ad=0}}function j3e(){var t=Cy.now(),e=t-e3;e>RU&&(t3-=e,e3=t)}function K3e(){for(var t,e=J4,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:J4=r);Ey=t,FA(n)}function FA(t){if(!Mp){ky&&(ky=clearTimeout(ky));var e=t-ad;e>24?(t<1/0&&(ky=setTimeout(DU,t-Cy.now()-t3)),Ty&&(Ty=clearInterval(Ty))):(Ty||(e3=Cy.now(),Ty=setInterval(j3e,RU)),Mp=1,NU(DU))}}var Mp,ky,Ty,RU,J4,Ey,e3,ad,t3,Cy,NU,zA=R(()=>{"use strict";Mp=0,ky=0,Ty=0,RU=1e3,e3=0,ad=0,t3=0,Cy=typeof performance=="object"&&performance.now?performance:Date,NU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(Ay,"now");o(X3e,"clearNow");o(Sy,"Timer");Sy.prototype=r3.prototype={constructor:Sy,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?Ay():+r)+(e==null?0:+e),!this._next&&Ey!==this&&(Ey?Ey._next=this:J4=this,Ey=this),this._call=t,this._time=r,FA()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,FA())},"stop")};o(r3,"timer");o(MU,"timerFlush");o(DU,"wake");o(j3e,"poke");o(K3e,"nap");o(FA,"sleep")});function _y(t,e,r){var n=new Sy;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var IU=R(()=>{"use strict";zA();o(_y,"default")});var n3=R(()=>{"use strict";zA();IU()});function fu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;J3e(t,r,{name:e,index:n,group:i,on:Q3e,tween:Z3e,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:BU})}function Dy(t,e){var r=Mi(t,e);if(r.state>BU)throw new Error("too late; already scheduled");return r}function ca(t,e){var r=Mi(t,e);if(r.state>i3)throw new Error("too late; already running");return r}function Mi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function J3e(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=r3(a,0,r.time);function a(h){r.state=OU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==OU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===i3)return _y(s);m.state===PU?(m.state=Ly,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f{"use strict";bS();n3();Q3e=xS("start","end","cancel","interrupt"),Z3e=[],BU=0,OU=1,a3=2,i3=3,PU=4,s3=5,Ly=6;o(fu,"default");o(Dy,"init");o(ca,"set");o(Mi,"get");o(J3e,"create")});function Ry(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>a3&&n.state{"use strict";ys();o(Ry,"default")});function GA(t){return this.each(function(){Ry(this,t)})}var zU=R(()=>{"use strict";FU();o(GA,"default")});function e5e(t,e){var r,n;return function(){var i=ca(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s{"use strict";ys();o(e5e,"tweenRemove");o(t5e,"tweenFunction");o($A,"default");o(Ip,"tweenValue")});function My(t,e){var r;return(typeof e=="number"?ji:e instanceof pl?id:(r=pl(e))?(e=r,id):Rp)(t,e)}var VA=R(()=>{"use strict";Lp();Np();o(My,"default")});function r5e(t){return function(){this.removeAttribute(t)}}function n5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function i5e(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function a5e(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function s5e(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function o5e(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function UA(t,e){var r=ic(t),n=r==="transform"?PA:My;return this.attrTween(t,typeof e=="function"?(r.local?o5e:s5e)(r,n,Ip(this,"attr."+t,e)):e==null?(r.local?n5e:r5e)(r):(r.local?a5e:i5e)(r,n,e))}var GU=R(()=>{"use strict";Np();fl();Ny();VA();o(r5e,"attrRemove");o(n5e,"attrRemoveNS");o(i5e,"attrConstant");o(a5e,"attrConstantNS");o(s5e,"attrFunction");o(o5e,"attrFunctionNS");o(UA,"default")});function l5e(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function c5e(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function u5e(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&c5e(t,a)),r}return o(i,"tween"),i._value=e,i}function h5e(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&l5e(t,a)),r}return o(i,"tween"),i._value=e,i}function HA(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=ic(t);return this.tween(r,(n.local?u5e:h5e)(n,e))}var $U=R(()=>{"use strict";fl();o(l5e,"attrInterpolate");o(c5e,"attrInterpolateNS");o(u5e,"attrTweenNS");o(h5e,"attrTween");o(HA,"default")});function f5e(t,e){return function(){Dy(this,t).delay=+e.apply(this,arguments)}}function d5e(t,e){return e=+e,function(){Dy(this,t).delay=e}}function YA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?f5e:d5e)(e,t)):Mi(this.node(),e).delay}var VU=R(()=>{"use strict";ys();o(f5e,"delayFunction");o(d5e,"delayConstant");o(YA,"default")});function p5e(t,e){return function(){ca(this,t).duration=+e.apply(this,arguments)}}function m5e(t,e){return e=+e,function(){ca(this,t).duration=e}}function WA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?p5e:m5e)(e,t)):Mi(this.node(),e).duration}var UU=R(()=>{"use strict";ys();o(p5e,"durationFunction");o(m5e,"durationConstant");o(WA,"default")});function g5e(t,e){if(typeof e!="function")throw new Error;return function(){ca(this,t).ease=e}}function qA(t){var e=this._id;return arguments.length?this.each(g5e(e,t)):Mi(this.node(),e).ease}var HU=R(()=>{"use strict";ys();o(g5e,"easeConstant");o(qA,"default")});function y5e(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ca(this,t).ease=r}}function XA(t){if(typeof t!="function")throw new Error;return this.each(y5e(this._id,t))}var YU=R(()=>{"use strict";ys();o(y5e,"easeVarying");o(XA,"default")});function jA(t){typeof t!="function"&&(t=Ep(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";fl();sd();o(jA,"default")});function KA(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l{"use strict";sd();o(KA,"default")});function v5e(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function x5e(t,e,r){var n,i,a=v5e(e)?Dy:ca;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function QA(t,e){var r=this._id;return arguments.length<2?Mi(this.node(),r).on.on(t):this.each(x5e(r,t,e))}var XU=R(()=>{"use strict";ys();o(v5e,"start");o(x5e,"onFunction");o(QA,"default")});function b5e(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function ZA(){return this.on("end.remove",b5e(this._id))}var jU=R(()=>{"use strict";o(b5e,"removeFunction");o(ZA,"default")});function JA(t){var e=this._name,r=this._id;typeof t!="function"&&(t=wh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s{"use strict";fl();sd();ys();o(JA,"default")});function e8(t){var e=this._name,r=this._id;typeof t!="function"&&(t=kp(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l{"use strict";fl();sd();ys();o(e8,"default")});function t8(){return new w5e(this._groups,this._parents)}var w5e,ZU=R(()=>{"use strict";fl();w5e=cu.prototype.constructor;o(t8,"default")});function T5e(t,e){var r,n,i;return function(){var a=Th(this,t),s=(this.style.removeProperty(t),Th(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function JU(t){return function(){this.style.removeProperty(t)}}function k5e(t,e,r){var n,i=r+"",a;return function(){var s=Th(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function E5e(t,e,r){var n,i,a;return function(){var s=Th(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),Th(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function C5e(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ca(this,t),h=u.on,f=u.value[a]==null?l||(l=JU(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function r8(t,e,r){var n=(t+="")=="transform"?OA:My;return e==null?this.styleTween(t,T5e(t,n)).on("end.style."+t,JU(t)):typeof e=="function"?this.styleTween(t,E5e(t,n,Ip(this,"style."+t,e))).each(C5e(this._id,t)):this.styleTween(t,k5e(t,n,e),r).on("end.style."+t,null)}var eH=R(()=>{"use strict";Np();fl();ys();Ny();VA();o(T5e,"styleNull");o(JU,"styleRemove");o(k5e,"styleConstant");o(E5e,"styleFunction");o(C5e,"styleMaybeRemove");o(r8,"default")});function S5e(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function A5e(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&S5e(t,s,r)),n}return o(a,"tween"),a._value=e,a}function n8(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,A5e(t,e,r??""))}var tH=R(()=>{"use strict";o(S5e,"styleInterpolate");o(A5e,"styleTween");o(n8,"default")});function _5e(t){return function(){this.textContent=t}}function L5e(t){return function(){var e=t(this);this.textContent=e??""}}function i8(t){return this.tween("text",typeof t=="function"?L5e(Ip(this,"text",t)):_5e(t==null?"":t+""))}var rH=R(()=>{"use strict";Ny();o(_5e,"textConstant");o(L5e,"textFunction");o(i8,"default")});function D5e(t){return function(e){this.textContent=t.call(this,e)}}function R5e(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&D5e(i)),e}return o(n,"tween"),n._value=t,n}function a8(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,R5e(t))}var nH=R(()=>{"use strict";o(D5e,"textInterpolate");o(R5e,"textTween");o(a8,"default")});function s8(){for(var t=this._name,e=this._id,r=o3(),n=this._groups,i=n.length,a=0;a{"use strict";sd();ys();o(s8,"default")});function o8(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ca(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var aH=R(()=>{"use strict";ys();o(o8,"default")});function Ka(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function sH(t){return cu().transition(t)}function o3(){return++N5e}var N5e,du,sd=R(()=>{"use strict";fl();GU();$U();VU();UU();HU();YU();WU();qU();XU();jU();KU();QU();ZU();eH();tH();rH();nH();iH();Ny();aH();N5e=0;o(Ka,"Transition");o(sH,"transition");o(o3,"newId");du=cu.prototype;Ka.prototype=sH.prototype={constructor:Ka,select:JA,selectAll:e8,selectChild:du.selectChild,selectChildren:du.selectChildren,filter:jA,merge:KA,selection:t8,transition:s8,call:du.call,nodes:du.nodes,node:du.node,size:du.size,empty:du.empty,each:du.each,on:QA,attr:UA,attrTween:HA,style:r8,styleTween:n8,text:i8,textTween:a8,remove:ZA,tween:$A,delay:YA,duration:WA,ease:qA,easeVarying:XA,end:o8,[Symbol.iterator]:du[Symbol.iterator]}});function l3(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var oH=R(()=>{"use strict";o(l3,"cubicInOut")});var l8=R(()=>{"use strict";oH()});function I5e(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function c8(t){var e,r;t instanceof Ka?(e=t._id,t=t._name):(e=o3(),(r=M5e).time=Ay(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a{"use strict";sd();ys();l8();n3();M5e={time:null,delay:0,duration:250,ease:l3};o(I5e,"inherit");o(c8,"default")});var cH=R(()=>{"use strict";fl();zU();lH();cu.prototype.interrupt=GA;cu.prototype.transition=c8});var c3=R(()=>{"use strict";cH()});var uH=R(()=>{"use strict"});var hH=R(()=>{"use strict"});var fH=R(()=>{"use strict"});function dH(t){return[+t[0],+t[1]]}function O5e(t){return[dH(t[0]),dH(t[1])]}function u8(t){return{type:t}}var Kpt,Qpt,Zpt,Jpt,emt,tmt,pH=R(()=>{"use strict";c3();uH();hH();fH();({abs:Kpt,max:Qpt,min:Zpt}=Math);o(dH,"number1");o(O5e,"number2");Jpt={name:"x",handles:["w","e"].map(u8),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},emt={name:"y",handles:["n","s"].map(u8),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},tmt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(u8),input:o(function(t){return t==null?null:O5e(t)},"input"),output:o(function(t){return t},"output")};o(u8,"type")});var mH=R(()=>{"use strict";pH()});function gH(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return gH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i{"use strict";h8=Math.PI,f8=2*h8,od=1e-6,P5e=f8-od;o(gH,"append");o(B5e,"appendRound");ld=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?gH:B5e(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>od)if(!(Math.abs(d*u-h*f)>od)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((h8-Math.acos((y+p-v)/(2*x*b)))/2),S=w/b,T=w/x;Math.abs(S-1)>od&&this._append`L${e+S*f},${r+S*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>od||Math.abs(this._y1-f)>od)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%f8+f8),p>P5e?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>od&&this._append`A${n},${n},0,${+(p>=h8)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(yH,"path");yH.prototype=ld.prototype});var d8=R(()=>{"use strict";vH()});var xH=R(()=>{"use strict"});var bH=R(()=>{"use strict"});var wH=R(()=>{"use strict"});var TH=R(()=>{"use strict"});var kH=R(()=>{"use strict"});var EH=R(()=>{"use strict"});var CH=R(()=>{"use strict"});function p8(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function cd(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var Iy=R(()=>{"use strict";o(p8,"default");o(cd,"formatDecimalParts")});function ml(t){return t=cd(Math.abs(t)),t?t[1]:NaN}var Oy=R(()=>{"use strict";Iy();o(ml,"default")});function m8(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var SH=R(()=>{"use strict";o(m8,"default")});function g8(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var AH=R(()=>{"use strict";o(g8,"default")});function Sh(t){if(!(e=F5e.exec(t)))throw new Error("invalid format: "+t);var e;return new u3({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function u3(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var F5e,y8=R(()=>{"use strict";F5e=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Sh,"formatSpecifier");Sh.prototype=u3.prototype;o(u3,"FormatSpecifier");u3.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function v8(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var _H=R(()=>{"use strict";o(v8,"default")});function b8(t,e){var r=cd(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(x8=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+cd(t,Math.max(0,e+a-1))[0]}var x8,w8=R(()=>{"use strict";Iy();o(b8,"default")});function h3(t,e){var r=cd(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var LH=R(()=>{"use strict";Iy();o(h3,"default")});var T8,DH=R(()=>{"use strict";Iy();w8();LH();T8={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:p8,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>h3(t*100,e),"p"),r:h3,s:b8,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function f3(t){return t}var RH=R(()=>{"use strict";o(f3,"default")});function k8(t){var e=t.grouping===void 0||t.thousands===void 0?f3:m8(NH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?f3:g8(NH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Sh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,S=d.trim,T=d.type;T==="n"?(b=!0,T="g"):T8[T]||(w===void 0&&(w=12),S=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",_=y==="$"?n:/[%p]/.test(T)?s:"",A=T8[T],L=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function M(N){var k=E,I=_,C,O,D;if(T==="c")I=A(N)+I,N="";else{N=+N;var P=N<0||1/N<0;if(N=isNaN(N)?u:A(Math.abs(N),w),S&&(N=v8(N)),P&&+N==0&&g!=="+"&&(P=!1),k=(P?g==="("?g:l:g==="-"||g==="("?"":g)+k,I=(T==="s"?MH[8+x8/3]:"")+I+(P&&g==="("?")":""),L){for(C=-1,O=N.length;++CD||D>57){I=(D===46?i+N.slice(C+1):N.slice(C))+I,N=N.slice(0,C);break}}}b&&!v&&(N=e(N,1/0));var F=k.length+N.length+I.length,B=F>1)+k+N+I+B.slice(F);break;default:N=B+k+N+I;break}return a(N)}return o(M,"format"),M.toString=function(){return d+""},M}o(h,"newFormat");function f(d,p){var m=h((d=Sh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(ml(p)/3)))*3,y=Math.pow(10,-g),v=MH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var NH,MH,IH=R(()=>{"use strict";Oy();SH();AH();y8();_H();DH();w8();RH();NH=Array.prototype.map,MH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(k8,"default")});function E8(t){return d3=k8(t),p3=d3.format,m3=d3.formatPrefix,d3}var d3,p3,m3,OH=R(()=>{"use strict";IH();E8({thousands:",",grouping:[3],currency:["$",""]});o(E8,"defaultLocale")});function g3(t){return Math.max(0,-ml(Math.abs(t)))}var PH=R(()=>{"use strict";Oy();o(g3,"default")});function y3(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ml(e)/3)))*3-ml(Math.abs(t)))}var BH=R(()=>{"use strict";Oy();o(y3,"default")});function v3(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,ml(e)-ml(t))+1}var FH=R(()=>{"use strict";Oy();o(v3,"default")});var C8=R(()=>{"use strict";OH();y8();PH();BH();FH()});var zH=R(()=>{"use strict"});var GH=R(()=>{"use strict"});var $H=R(()=>{"use strict"});var VH=R(()=>{"use strict"});function Ah(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Py=R(()=>{"use strict";o(Ah,"initRange")});function pu(){var t=new wp,e=[],r=[],n=S8;function i(a){let s=t.get(a);if(s===void 0){if(n!==S8)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new wp;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return pu(e,r).unknown(n)},Ah.apply(i,arguments),i}var S8,A8=R(()=>{"use strict";bh();Py();S8=Symbol("implicit");o(pu,"ordinal")});function Op(){var t=pu().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i{"use strict";bh();Py();A8();o(Op,"band")});function _8(t){return function(){return t}}var HH=R(()=>{"use strict";o(_8,"constants")});function L8(t){return+t}var YH=R(()=>{"use strict";o(L8,"number")});function Pp(t){return t}function D8(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:_8(isNaN(e)?NaN:.5)}function z5e(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function G5e(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i2?$5e:G5e,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),ji)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,L8),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=j4,f()},d.clamp=function(p){return arguments.length?(s=p?!0:Pp,f()):s!==Pp},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function By(){return V5e()(Pp,Pp)}var WH,R8=R(()=>{"use strict";bh();Np();HH();YH();WH=[0,1];o(Pp,"identity");o(D8,"normalize");o(z5e,"clamper");o(G5e,"bimap");o($5e,"polymap");o(x3,"copy");o(V5e,"transformer");o(By,"continuous")});function N8(t,e,r,n){var i=Tp(t,e,r),a;switch(n=Sh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=y3(i,s))&&(n.precision=a),m3(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=v3(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=g3(i))&&(n.precision=a-(n.type==="%")*2);break}}return p3(n)}var qH=R(()=>{"use strict";bh();C8();o(N8,"tickFormat")});function U5e(t){var e=t.domain;return t.ticks=function(r){var n=e();return N4(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return N8(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l0;){if(h=fy(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function gl(){var t=By();return t.copy=function(){return x3(t,gl())},Ah.apply(t,arguments),U5e(t)}var XH=R(()=>{"use strict";bh();R8();Py();qH();o(U5e,"linearish");o(gl,"linear")});function M8(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a{"use strict";o(M8,"nice")});function dn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hdn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(I8.setTime(+a),O8.setTime(+s),t(I8),t(O8),Math.floor(r(I8,O8))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var I8,O8,mu=R(()=>{"use strict";I8=new Date,O8=new Date;o(dn,"timeInterval")});var oc,KH,P8=R(()=>{"use strict";mu();oc=dn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);oc.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?dn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):oc);KH=oc.range});var Ks,QH,B8=R(()=>{"use strict";mu();Ks=dn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),QH=Ks.range});var gu,H5e,b3,Y5e,F8=R(()=>{"use strict";mu();gu=dn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),H5e=gu.range,b3=dn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),Y5e=b3.range});var yu,W5e,w3,q5e,z8=R(()=>{"use strict";mu();yu=dn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),W5e=yu.range,w3=dn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),q5e=w3.range});var Do,X5e,zy,j5e,T3,K5e,G8=R(()=>{"use strict";mu();Do=dn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),X5e=Do.range,zy=dn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),j5e=zy.range,T3=dn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),K5e=T3.range});function fd(t){return dn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function dd(t){return dn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var yl,_h,k3,E3,cc,C3,S3,JH,Q5e,Z5e,J5e,ewe,twe,rwe,pd,Bp,eY,tY,Lh,rY,nY,iY,nwe,iwe,awe,swe,owe,lwe,$8=R(()=>{"use strict";mu();o(fd,"timeWeekday");yl=fd(0),_h=fd(1),k3=fd(2),E3=fd(3),cc=fd(4),C3=fd(5),S3=fd(6),JH=yl.range,Q5e=_h.range,Z5e=k3.range,J5e=E3.range,ewe=cc.range,twe=C3.range,rwe=S3.range;o(dd,"utcWeekday");pd=dd(0),Bp=dd(1),eY=dd(2),tY=dd(3),Lh=dd(4),rY=dd(5),nY=dd(6),iY=pd.range,nwe=Bp.range,iwe=eY.range,awe=tY.range,swe=Lh.range,owe=rY.range,lwe=nY.range});var vu,cwe,A3,uwe,V8=R(()=>{"use strict";mu();vu=dn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),cwe=vu.range,A3=dn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),uwe=A3.range});var Qs,hwe,vl,fwe,U8=R(()=>{"use strict";mu();Qs=dn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Qs.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:dn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});hwe=Qs.range,vl=dn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());vl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:dn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});fwe=vl.range});function sY(t,e,r,n,i,a){let s=[[Ks,1,1e3],[Ks,5,5*1e3],[Ks,15,15*1e3],[Ks,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(Tp(h/31536e6,f/31536e6,d));if(m===0)return oc.every(Math.max(Tp(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";bh();P8();B8();F8();z8();G8();$8();V8();U8();o(sY,"ticker");[pwe,mwe]=sY(vl,A3,pd,T3,w3,b3),[H8,Y8]=sY(Qs,vu,yl,Do,yu,gu)});var _3=R(()=>{"use strict";P8();B8();F8();z8();G8();$8();V8();U8();oY()});function W8(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function q8(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Gy(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function X8(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=$y(i),f=Vy(i),d=$y(a),p=Vy(a),m=$y(s),g=Vy(s),y=$y(l),v=Vy(l),x=$y(u),b=Vy(u),w={a:P,A:F,b:B,B:$,c:null,d:dY,e:dY,f:Fwe,g:Xwe,G:Kwe,H:Owe,I:Pwe,j:Bwe,L:vY,m:zwe,M:Gwe,p:z,q:Y,Q:gY,s:yY,S:$we,u:Vwe,U:Uwe,V:Hwe,w:Ywe,W:Wwe,x:null,X:null,y:qwe,Y:jwe,Z:Qwe,"%":mY},S={a:Q,A:X,b:ie,B:j,c:null,d:pY,e:pY,f:tTe,g:hTe,G:dTe,H:Zwe,I:Jwe,j:eTe,L:bY,m:rTe,M:nTe,p:J,q:Z,Q:gY,s:yY,S:iTe,u:aTe,U:sTe,V:oTe,w:lTe,W:cTe,x:null,X:null,y:uTe,Y:fTe,Z:pTe,"%":mY},T={a:M,A:N,b:k,B:I,c:C,d:hY,e:hY,f:Rwe,g:uY,G:cY,H:fY,I:fY,j:Awe,L:Dwe,m:Swe,M:_we,p:L,q:Cwe,Q:Mwe,s:Iwe,S:Lwe,u:bwe,U:wwe,V:Twe,w:xwe,W:kwe,x:O,X:D,y:uY,Y:cY,Z:Ewe,"%":Nwe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),S.x=E(r,S),S.X=E(n,S),S.c=E(e,S);function E(H,q){return function(K){var se=[],ce=-1,ue=0,te=H.length,De,oe,ke;for(K instanceof Date||(K=new Date(+K));++ce53)return null;"w"in se||(se.w=1),"Z"in se?(ue=q8(Gy(se.y,0,1)),te=ue.getUTCDay(),ue=te>4||te===0?Bp.ceil(ue):Bp(ue),ue=zy.offset(ue,(se.V-1)*7),se.y=ue.getUTCFullYear(),se.m=ue.getUTCMonth(),se.d=ue.getUTCDate()+(se.w+6)%7):(ue=W8(Gy(se.y,0,1)),te=ue.getDay(),ue=te>4||te===0?_h.ceil(ue):_h(ue),ue=Do.offset(ue,(se.V-1)*7),se.y=ue.getFullYear(),se.m=ue.getMonth(),se.d=ue.getDate()+(se.w+6)%7)}else("W"in se||"U"in se)&&("w"in se||(se.w="u"in se?se.u%7:"W"in se?1:0),te="Z"in se?q8(Gy(se.y,0,1)).getUTCDay():W8(Gy(se.y,0,1)).getDay(),se.m=0,se.d="W"in se?(se.w+6)%7+se.W*7-(te+5)%7:se.w+se.U*7-(te+6)%7);return"Z"in se?(se.H+=se.Z/100|0,se.M+=se.Z%100,q8(se)):W8(se)}}o(_,"newParse");function A(H,q,K,se){for(var ce=0,ue=q.length,te=K.length,De,oe;ce=te)return-1;if(De=q.charCodeAt(ce++),De===37){if(De=q.charAt(ce++),oe=T[De in lY?q.charAt(ce++):De],!oe||(se=oe(H,K,se))<0)return-1}else if(De!=K.charCodeAt(se++))return-1}return se}o(A,"parseSpecifier");function L(H,q,K){var se=h.exec(q.slice(K));return se?(H.p=f.get(se[0].toLowerCase()),K+se[0].length):-1}o(L,"parsePeriod");function M(H,q,K){var se=m.exec(q.slice(K));return se?(H.w=g.get(se[0].toLowerCase()),K+se[0].length):-1}o(M,"parseShortWeekday");function N(H,q,K){var se=d.exec(q.slice(K));return se?(H.w=p.get(se[0].toLowerCase()),K+se[0].length):-1}o(N,"parseWeekday");function k(H,q,K){var se=x.exec(q.slice(K));return se?(H.m=b.get(se[0].toLowerCase()),K+se[0].length):-1}o(k,"parseShortMonth");function I(H,q,K){var se=y.exec(q.slice(K));return se?(H.m=v.get(se[0].toLowerCase()),K+se[0].length):-1}o(I,"parseMonth");function C(H,q,K){return A(H,e,q,K)}o(C,"parseLocaleDateTime");function O(H,q,K){return A(H,r,q,K)}o(O,"parseLocaleDate");function D(H,q,K){return A(H,n,q,K)}o(D,"parseLocaleTime");function P(H){return s[H.getDay()]}o(P,"formatShortWeekday");function F(H){return a[H.getDay()]}o(F,"formatWeekday");function B(H){return u[H.getMonth()]}o(B,"formatShortMonth");function $(H){return l[H.getMonth()]}o($,"formatMonth");function z(H){return i[+(H.getHours()>=12)]}o(z,"formatPeriod");function Y(H){return 1+~~(H.getMonth()/3)}o(Y,"formatQuarter");function Q(H){return s[H.getUTCDay()]}o(Q,"formatUTCShortWeekday");function X(H){return a[H.getUTCDay()]}o(X,"formatUTCWeekday");function ie(H){return u[H.getUTCMonth()]}o(ie,"formatUTCShortMonth");function j(H){return l[H.getUTCMonth()]}o(j,"formatUTCMonth");function J(H){return i[+(H.getUTCHours()>=12)]}o(J,"formatUTCPeriod");function Z(H){return 1+~~(H.getUTCMonth()/3)}return o(Z,"formatUTCQuarter"),{format:o(function(H){var q=E(H+="",w);return q.toString=function(){return H},q},"format"),parse:o(function(H){var q=_(H+="",!1);return q.toString=function(){return H},q},"parse"),utcFormat:o(function(H){var q=E(H+="",S);return q.toString=function(){return H},q},"utcFormat"),utcParse:o(function(H){var q=_(H+="",!0);return q.toString=function(){return H},q},"utcParse")}}function Pr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a[e.toLowerCase(),r]))}function xwe(t,e,r){var n=Ki.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function bwe(t,e,r){var n=Ki.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function wwe(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function Twe(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function kwe(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function cY(t,e,r){var n=Ki.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function uY(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function Ewe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function Cwe(t,e,r){var n=Ki.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function Swe(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function hY(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function Awe(t,e,r){var n=Ki.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function fY(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function _we(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function Lwe(t,e,r){var n=Ki.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function Dwe(t,e,r){var n=Ki.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function Rwe(t,e,r){var n=Ki.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function Nwe(t,e,r){var n=gwe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function Mwe(t,e,r){var n=Ki.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function Iwe(t,e,r){var n=Ki.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function dY(t,e){return Pr(t.getDate(),e,2)}function Owe(t,e){return Pr(t.getHours(),e,2)}function Pwe(t,e){return Pr(t.getHours()%12||12,e,2)}function Bwe(t,e){return Pr(1+Do.count(Qs(t),t),e,3)}function vY(t,e){return Pr(t.getMilliseconds(),e,3)}function Fwe(t,e){return vY(t,e)+"000"}function zwe(t,e){return Pr(t.getMonth()+1,e,2)}function Gwe(t,e){return Pr(t.getMinutes(),e,2)}function $we(t,e){return Pr(t.getSeconds(),e,2)}function Vwe(t){var e=t.getDay();return e===0?7:e}function Uwe(t,e){return Pr(yl.count(Qs(t)-1,t),e,2)}function xY(t){var e=t.getDay();return e>=4||e===0?cc(t):cc.ceil(t)}function Hwe(t,e){return t=xY(t),Pr(cc.count(Qs(t),t)+(Qs(t).getDay()===4),e,2)}function Ywe(t){return t.getDay()}function Wwe(t,e){return Pr(_h.count(Qs(t)-1,t),e,2)}function qwe(t,e){return Pr(t.getFullYear()%100,e,2)}function Xwe(t,e){return t=xY(t),Pr(t.getFullYear()%100,e,2)}function jwe(t,e){return Pr(t.getFullYear()%1e4,e,4)}function Kwe(t,e){var r=t.getDay();return t=r>=4||r===0?cc(t):cc.ceil(t),Pr(t.getFullYear()%1e4,e,4)}function Qwe(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Pr(e/60|0,"0",2)+Pr(e%60,"0",2)}function pY(t,e){return Pr(t.getUTCDate(),e,2)}function Zwe(t,e){return Pr(t.getUTCHours(),e,2)}function Jwe(t,e){return Pr(t.getUTCHours()%12||12,e,2)}function eTe(t,e){return Pr(1+zy.count(vl(t),t),e,3)}function bY(t,e){return Pr(t.getUTCMilliseconds(),e,3)}function tTe(t,e){return bY(t,e)+"000"}function rTe(t,e){return Pr(t.getUTCMonth()+1,e,2)}function nTe(t,e){return Pr(t.getUTCMinutes(),e,2)}function iTe(t,e){return Pr(t.getUTCSeconds(),e,2)}function aTe(t){var e=t.getUTCDay();return e===0?7:e}function sTe(t,e){return Pr(pd.count(vl(t)-1,t),e,2)}function wY(t){var e=t.getUTCDay();return e>=4||e===0?Lh(t):Lh.ceil(t)}function oTe(t,e){return t=wY(t),Pr(Lh.count(vl(t),t)+(vl(t).getUTCDay()===4),e,2)}function lTe(t){return t.getUTCDay()}function cTe(t,e){return Pr(Bp.count(vl(t)-1,t),e,2)}function uTe(t,e){return Pr(t.getUTCFullYear()%100,e,2)}function hTe(t,e){return t=wY(t),Pr(t.getUTCFullYear()%100,e,2)}function fTe(t,e){return Pr(t.getUTCFullYear()%1e4,e,4)}function dTe(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Lh(t):Lh.ceil(t),Pr(t.getUTCFullYear()%1e4,e,4)}function pTe(){return"+0000"}function mY(){return"%"}function gY(t){return+t}function yY(t){return Math.floor(+t/1e3)}var lY,Ki,gwe,ywe,TY=R(()=>{"use strict";_3();o(W8,"localDate");o(q8,"utcDate");o(Gy,"newDate");o(X8,"formatLocale");lY={"-":"",_:" ",0:"0"},Ki=/^\s*\d+/,gwe=/^%/,ywe=/[\\^$*+?|[\]().{}]/g;o(Pr,"pad");o(vwe,"requote");o($y,"formatRe");o(Vy,"formatLookup");o(xwe,"parseWeekdayNumberSunday");o(bwe,"parseWeekdayNumberMonday");o(wwe,"parseWeekNumberSunday");o(Twe,"parseWeekNumberISO");o(kwe,"parseWeekNumberMonday");o(cY,"parseFullYear");o(uY,"parseYear");o(Ewe,"parseZone");o(Cwe,"parseQuarter");o(Swe,"parseMonthNumber");o(hY,"parseDayOfMonth");o(Awe,"parseDayOfYear");o(fY,"parseHour24");o(_we,"parseMinutes");o(Lwe,"parseSeconds");o(Dwe,"parseMilliseconds");o(Rwe,"parseMicroseconds");o(Nwe,"parseLiteralPercent");o(Mwe,"parseUnixTimestamp");o(Iwe,"parseUnixTimestampSeconds");o(dY,"formatDayOfMonth");o(Owe,"formatHour24");o(Pwe,"formatHour12");o(Bwe,"formatDayOfYear");o(vY,"formatMilliseconds");o(Fwe,"formatMicroseconds");o(zwe,"formatMonthNumber");o(Gwe,"formatMinutes");o($we,"formatSeconds");o(Vwe,"formatWeekdayNumberMonday");o(Uwe,"formatWeekNumberSunday");o(xY,"dISO");o(Hwe,"formatWeekNumberISO");o(Ywe,"formatWeekdayNumberSunday");o(Wwe,"formatWeekNumberMonday");o(qwe,"formatYear");o(Xwe,"formatYearISO");o(jwe,"formatFullYear");o(Kwe,"formatFullYearISO");o(Qwe,"formatZone");o(pY,"formatUTCDayOfMonth");o(Zwe,"formatUTCHour24");o(Jwe,"formatUTCHour12");o(eTe,"formatUTCDayOfYear");o(bY,"formatUTCMilliseconds");o(tTe,"formatUTCMicroseconds");o(rTe,"formatUTCMonthNumber");o(nTe,"formatUTCMinutes");o(iTe,"formatUTCSeconds");o(aTe,"formatUTCWeekdayNumberMonday");o(sTe,"formatUTCWeekNumberSunday");o(wY,"UTCdISO");o(oTe,"formatUTCWeekNumberISO");o(lTe,"formatUTCWeekdayNumberSunday");o(cTe,"formatUTCWeekNumberMonday");o(uTe,"formatUTCYear");o(hTe,"formatUTCYearISO");o(fTe,"formatUTCFullYear");o(dTe,"formatUTCFullYearISO");o(pTe,"formatUTCZone");o(mY,"formatLiteralPercent");o(gY,"formatUnixTimestamp");o(yY,"formatUnixTimestampSeconds")});function j8(t){return Fp=X8(t),md=Fp.format,kY=Fp.parse,EY=Fp.utcFormat,CY=Fp.utcParse,Fp}var Fp,md,kY,EY,CY,SY=R(()=>{"use strict";TY();j8({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(j8,"defaultLocale")});var K8=R(()=>{"use strict";SY()});function mTe(t){return new Date(t)}function gTe(t){return t instanceof Date?+t:+new Date(+t)}function AY(t,e,r,n,i,a,s,l,u,h){var f=By(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),S=h("%Y");function T(E){return(u(E){"use strict";_3();K8();R8();Py();jH();o(mTe,"date");o(gTe,"number");o(AY,"calendar");o(L3,"time")});var LY=R(()=>{"use strict";UH();XH();A8();_Y()});function Q8(t){for(var e=t.length/6|0,r=new Array(e),n=0;n{"use strict";o(Q8,"default")});var Z8,RY=R(()=>{"use strict";DY();Z8=Q8("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var NY=R(()=>{"use strict";RY()});function Nn(t){return o(function(){return t},"constant")}var D3=R(()=>{"use strict";o(Nn,"default")});function IY(t){return t>1?0:t<-1?zp:Math.acos(t)}function e_(t){return t>=1?Uy:t<=-1?-Uy:Math.asin(t)}var J8,ua,Dh,MY,R3,xl,gd,Qi,zp,Uy,Gp,N3=R(()=>{"use strict";J8=Math.abs,ua=Math.atan2,Dh=Math.cos,MY=Math.max,R3=Math.min,xl=Math.sin,gd=Math.sqrt,Qi=1e-12,zp=Math.PI,Uy=zp/2,Gp=2*zp;o(IY,"acos");o(e_,"asin")});function M3(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new ld(e)}var t_=R(()=>{"use strict";d8();o(M3,"withPath")});function yTe(t){return t.innerRadius}function vTe(t){return t.outerRadius}function xTe(t){return t.startAngle}function bTe(t){return t.endAngle}function wTe(t){return t&&t.padAngle}function TTe(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*pC*C+O*O&&(A=M,L=N),{cx:A,cy:L,x01:-f,y01:-d,x11:A*(i/T-1),y11:L*(i/T-1)}}function bl(){var t=yTe,e=vTe,r=Nn(0),n=null,i=xTe,a=bTe,s=wTe,l=null,u=M3(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-Uy,y=a.apply(this,arguments)-Uy,v=J8(y-g),x=y>g;if(l||(l=f=u()),mQi))l.moveTo(0,0);else if(v>Gp-Qi)l.moveTo(m*Dh(g),m*xl(g)),l.arc(0,0,m,g,y,!x),p>Qi&&(l.moveTo(p*Dh(y),p*xl(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,S=g,T=y,E=v,_=v,A=s.apply(this,arguments)/2,L=A>Qi&&(n?+n.apply(this,arguments):gd(p*p+m*m)),M=R3(J8(m-p)/2,+r.apply(this,arguments)),N=M,k=M,I,C;if(L>Qi){var O=e_(L/p*xl(A)),D=e_(L/m*xl(A));(E-=O*2)>Qi?(O*=x?1:-1,S+=O,T-=O):(E=0,S=T=(g+y)/2),(_-=D*2)>Qi?(D*=x?1:-1,b+=D,w-=D):(_=0,b=w=(g+y)/2)}var P=m*Dh(b),F=m*xl(b),B=p*Dh(T),$=p*xl(T);if(M>Qi){var z=m*Dh(w),Y=m*xl(w),Q=p*Dh(S),X=p*xl(S),ie;if(vQi?k>Qi?(I=I3(Q,X,P,F,m,k,x),C=I3(z,Y,B,$,m,k,x),l.moveTo(I.cx+I.x01,I.cy+I.y01),kQi)||!(E>Qi)?l.lineTo(B,$):N>Qi?(I=I3(B,$,z,Y,p,-N,x),C=I3(P,F,Q,X,p,-N,x),l.lineTo(I.cx+I.x01,I.cy+I.y01),N{"use strict";D3();N3();t_();o(yTe,"arcInnerRadius");o(vTe,"arcOuterRadius");o(xTe,"arcStartAngle");o(bTe,"arcEndAngle");o(wTe,"arcPadAngle");o(TTe,"intersect");o(I3,"cornerTangents");o(bl,"default")});function Hy(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var Dyt,r_=R(()=>{"use strict";Dyt=Array.prototype.slice;o(Hy,"default")});function PY(t){this._context=t}function xu(t){return new PY(t)}var n_=R(()=>{"use strict";o(PY,"Linear");PY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(xu,"default")});function BY(t){return t[0]}function FY(t){return t[1]}var zY=R(()=>{"use strict";o(BY,"x");o(FY,"y")});function ha(t,e){var r=Nn(!0),n=null,i=xu,a=null,s=M3(l);t=typeof t=="function"?t:t===void 0?BY:Nn(t),e=typeof e=="function"?e:e===void 0?FY:Nn(e);function l(u){var h,f=(u=Hy(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h{"use strict";r_();D3();n_();t_();zY();o(ha,"default")});function i_(t,e){return et?1:e>=t?0:NaN}var $Y=R(()=>{"use strict";o(i_,"default")});function a_(t){return t}var VY=R(()=>{"use strict";o(a_,"default")});function O3(){var t=a_,e=i_,r=null,n=Nn(0),i=Nn(Gp),a=Nn(0);function s(l){var u,h=(l=Hy(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(Gp,Math.max(-Gp,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),S;for(u=0;u0&&(p+=S);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u0?S*d:0)+w,g[f]={data:l[f],index:u,value:S,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Nn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Nn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Nn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Nn(+l),s):a},s}var UY=R(()=>{"use strict";r_();D3();$Y();VY();N3();o(O3,"default")});function s_(t){return new P3(t,!0)}function o_(t){return new P3(t,!1)}var P3,HY=R(()=>{"use strict";P3=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(s_,"bumpX");o(o_,"bumpY")});function Zs(){}var Yy=R(()=>{"use strict";o(Zs,"default")});function $p(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Wy(t){this._context=t}function vs(t){return new Wy(t)}var qy=R(()=>{"use strict";o($p,"point");o(Wy,"Basis");Wy.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:$p(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:$p(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(vs,"default")});function YY(t){this._context=t}function B3(t){return new YY(t)}var WY=R(()=>{"use strict";Yy();qy();o(YY,"BasisClosed");YY.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:$p(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(B3,"default")});function qY(t){this._context=t}function F3(t){return new qY(t)}var XY=R(()=>{"use strict";qy();o(qY,"BasisOpen");qY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:$p(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(F3,"default")});function jY(t,e){this._basis=new Wy(t),this._beta=e}var l_,KY=R(()=>{"use strict";qy();o(jY,"Bundle");jY.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};l_=o(function t(e){function r(n){return e===1?new Wy(n):new jY(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function Vp(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function z3(t,e){this._context=t,this._k=(1-e)/6}var c_,Xy=R(()=>{"use strict";o(Vp,"point");o(z3,"Cardinal");z3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Vp(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Vp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};c_=o(function t(e){function r(n){return new z3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function G3(t,e){this._context=t,this._k=(1-e)/6}var u_,h_=R(()=>{"use strict";Yy();Xy();o(G3,"CardinalClosed");G3.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Vp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};u_=o(function t(e){function r(n){return new G3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function $3(t,e){this._context=t,this._k=(1-e)/6}var f_,d_=R(()=>{"use strict";Xy();o($3,"CardinalOpen");$3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Vp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};f_=o(function t(e){function r(n){return new $3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function jy(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Qi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Qi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function QY(t,e){this._context=t,this._alpha=e}var p_,V3=R(()=>{"use strict";N3();Xy();o(jy,"point");o(QY,"CatmullRom");QY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:jy(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};p_=o(function t(e){function r(n){return e?new QY(n,e):new z3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function ZY(t,e){this._context=t,this._alpha=e}var m_,JY=R(()=>{"use strict";h_();Yy();V3();o(ZY,"CatmullRomClosed");ZY.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:jy(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};m_=o(function t(e){function r(n){return e?new ZY(n,e):new G3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function eW(t,e){this._context=t,this._alpha=e}var g_,tW=R(()=>{"use strict";d_();V3();o(eW,"CatmullRomOpen");eW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:jy(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};g_=o(function t(e){function r(n){return e?new eW(n,e):new $3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function rW(t){this._context=t}function U3(t){return new rW(t)}var nW=R(()=>{"use strict";Yy();o(rW,"LinearClosed");rW.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(U3,"default")});function iW(t){return t<0?-1:1}function aW(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(iW(a)+iW(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function sW(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function y_(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function H3(t){this._context=t}function oW(t){this._context=new lW(t)}function lW(t){this._context=t}function v_(t){return new H3(t)}function x_(t){return new oW(t)}var cW=R(()=>{"use strict";o(iW,"sign");o(aW,"slope3");o(sW,"slope2");o(y_,"point");o(H3,"MonotoneX");H3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:y_(this,this._t0,sW(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,y_(this,sW(this,r=aW(this,t,e)),r);break;default:y_(this,this._t0,r=aW(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(oW,"MonotoneY");(oW.prototype=Object.create(H3.prototype)).point=function(t,e){H3.prototype.point.call(this,e,t)};o(lW,"ReflectContext");lW.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(v_,"monotoneX");o(x_,"monotoneY")});function hW(t){this._context=t}function uW(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e{"use strict";o(hW,"Natural");hW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=uW(t),i=uW(e),a=0,s=1;s{"use strict";o(W3,"Step");W3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(q3,"default");o(b_,"stepBefore");o(w_,"stepAfter")});var pW=R(()=>{"use strict";OY();GY();UY();WY();XY();qy();HY();KY();h_();d_();Xy();JY();tW();V3();nW();n_();cW();fW();dW()});var mW=R(()=>{"use strict"});var gW=R(()=>{"use strict"});function Rh(t,e,r){this.k=t,this.x=e,this.y=r}function k_(t){for(;!t.__zoom;)if(!(t=t.parentNode))return T_;return t.__zoom}var T_,E_=R(()=>{"use strict";o(Rh,"Transform");Rh.prototype={constructor:Rh,scale:o(function(t){return t===1?this:new Rh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Rh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};T_=new Rh(1,0,0);k_.prototype=Rh.prototype;o(k_,"transform")});var yW=R(()=>{"use strict"});var vW=R(()=>{"use strict";c3();mW();gW();E_();yW()});var xW=R(()=>{"use strict";vW();E_()});var Zt=R(()=>{"use strict";bh();K$();mH();xH();Lp();bH();wH();bS();$V();TH();l8();kH();CH();C8();zH();GH();Np();d8();$H();EH();VH();LY();NY();fl();pW();_3();K8();n3();c3();xW()});var bW=gi(Zi=>{"use strict";Object.defineProperty(Zi,"__esModule",{value:!0});Zi.BLANK_URL=Zi.relativeFirstCharacters=Zi.whitespaceEscapeCharsRegex=Zi.urlSchemeRegex=Zi.ctrlCharactersRegex=Zi.htmlCtrlEntityRegex=Zi.htmlEntitiesRegex=Zi.invalidProtocolRegex=void 0;Zi.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Zi.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Zi.htmlCtrlEntityRegex=/&(newline|tab);/gi;Zi.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Zi.urlSchemeRegex=/^.+(:|:)/gim;Zi.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Zi.relativeFirstCharacters=[".","/"];Zi.BLANK_URL="about:blank"});var Up=gi(X3=>{"use strict";Object.defineProperty(X3,"__esModule",{value:!0});X3.sanitizeUrl=void 0;var Na=bW();function kTe(t){return Na.relativeFirstCharacters.indexOf(t[0])>-1}o(kTe,"isRelativeUrlWithoutProtocol");function ETe(t){var e=t.replace(Na.ctrlCharactersRegex,"");return e.replace(Na.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(ETe,"decodeHtmlCharacters");function CTe(t){return URL.canParse(t)}o(CTe,"isValidUrl");function wW(t){try{return decodeURIComponent(t)}catch{return t}}o(wW,"decodeURI");function STe(t){if(!t)return Na.BLANK_URL;var e,r=wW(t.trim());do r=ETe(r).replace(Na.htmlCtrlEntityRegex,"").replace(Na.ctrlCharactersRegex,"").replace(Na.whitespaceEscapeCharsRegex,"").trim(),r=wW(r),e=r.match(Na.ctrlCharactersRegex)||r.match(Na.htmlEntitiesRegex)||r.match(Na.htmlCtrlEntityRegex)||r.match(Na.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Na.BLANK_URL;if(kTe(n))return n;var i=n.trimStart(),a=i.match(Na.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Na.invalidProtocolRegex.test(s))return Na.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!CTe(l))return Na.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(STe,"sanitizeUrl");X3.sanitizeUrl=STe});var C_,yd,j3,TW,kW,EW,wl,Ky,Qy=R(()=>{"use strict";C_=Xi(Up(),1);rr();yd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),j3=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};yd(t,r).lower()},"drawBackgroundRect"),TW=o((t,e)=>{let r=e.text.replace(Qf," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),kW=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,C_.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),EW=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,C_.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),wl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),Ky=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var CW,S_,SW,ATe,_Te,LTe,DTe,RTe,NTe,MTe,ITe,OTe,PTe,BTe,FTe,bu,Tl,AW=R(()=>{"use strict";rr();Qy();CW=Xi(Up(),1),S_=o(function(t,e){return yd(t,e)},"drawRect"),SW=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,CW.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),ATe=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();bu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),bu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),_Te=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};S_(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,bu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,bu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,bu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),LTe=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=wl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},S_(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=FTe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":SW(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,bu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?bu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&bu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,bu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),DTe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),RTe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),NTe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),MTe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),ITe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),OTe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),PTe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),BTe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),FTe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),bu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(We.lineBreakRegex);for(let v=0;v{"use strict";zTe=typeof global=="object"&&global&&global.Object===Object&&global,Q3=zTe});var GTe,$Te,Jn,Ro=R(()=>{"use strict";A_();GTe=typeof self=="object"&&self&&self.Object===Object&&self,$Te=Q3||GTe||Function("return this")(),Jn=$Te});var VTe,Ji,vd=R(()=>{"use strict";Ro();VTe=Jn.Symbol,Ji=VTe});function YTe(t){var e=UTe.call(t,Zy),r=t[Zy];try{t[Zy]=void 0;var n=!0}catch{}var i=HTe.call(t);return n&&(e?t[Zy]=r:delete t[Zy]),i}var _W,UTe,HTe,Zy,LW,DW=R(()=>{"use strict";vd();_W=Object.prototype,UTe=_W.hasOwnProperty,HTe=_W.toString,Zy=Ji?Ji.toStringTag:void 0;o(YTe,"getRawTag");LW=YTe});function XTe(t){return qTe.call(t)}var WTe,qTe,RW,NW=R(()=>{"use strict";WTe=Object.prototype,qTe=WTe.toString;o(XTe,"objectToString");RW=XTe});function QTe(t){return t==null?t===void 0?KTe:jTe:MW&&MW in Object(t)?LW(t):RW(t)}var jTe,KTe,MW,fa,wu=R(()=>{"use strict";vd();DW();NW();jTe="[object Null]",KTe="[object Undefined]",MW=Ji?Ji.toStringTag:void 0;o(QTe,"baseGetTag");fa=QTe});function ZTe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var pn,Js=R(()=>{"use strict";o(ZTe,"isObject");pn=ZTe});function nke(t){if(!pn(t))return!1;var e=fa(t);return e==eke||e==tke||e==JTe||e==rke}var JTe,eke,tke,rke,wi,Jy=R(()=>{"use strict";wu();Js();JTe="[object AsyncFunction]",eke="[object Function]",tke="[object GeneratorFunction]",rke="[object Proxy]";o(nke,"isFunction");wi=nke});var ike,Z3,IW=R(()=>{"use strict";Ro();ike=Jn["__core-js_shared__"],Z3=ike});function ake(t){return!!OW&&OW in t}var OW,PW,BW=R(()=>{"use strict";IW();OW=function(){var t=/[^.]+$/.exec(Z3&&Z3.keys&&Z3.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(ake,"isMasked");PW=ake});function lke(t){if(t!=null){try{return oke.call(t)}catch{}try{return t+""}catch{}}return""}var ske,oke,Tu,__=R(()=>{"use strict";ske=Function.prototype,oke=ske.toString;o(lke,"toSource");Tu=lke});function gke(t){if(!pn(t)||PW(t))return!1;var e=wi(t)?mke:uke;return e.test(Tu(t))}var cke,uke,hke,fke,dke,pke,mke,FW,zW=R(()=>{"use strict";Jy();BW();Js();__();cke=/[\\^$.*+?()[\]{}|]/g,uke=/^\[object .+?Constructor\]$/,hke=Function.prototype,fke=Object.prototype,dke=hke.toString,pke=fke.hasOwnProperty,mke=RegExp("^"+dke.call(pke).replace(cke,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(gke,"baseIsNative");FW=gke});function yke(t,e){return t?.[e]}var GW,$W=R(()=>{"use strict";o(yke,"getValue");GW=yke});function vke(t,e){var r=GW(t,e);return FW(r)?r:void 0}var xs,Nh=R(()=>{"use strict";zW();$W();o(vke,"getNative");xs=vke});var xke,ku,ev=R(()=>{"use strict";Nh();xke=xs(Object,"create"),ku=xke});function bke(){this.__data__=ku?ku(null):{},this.size=0}var VW,UW=R(()=>{"use strict";ev();o(bke,"hashClear");VW=bke});function wke(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var HW,YW=R(()=>{"use strict";o(wke,"hashDelete");HW=wke});function Cke(t){var e=this.__data__;if(ku){var r=e[t];return r===Tke?void 0:r}return Eke.call(e,t)?e[t]:void 0}var Tke,kke,Eke,WW,qW=R(()=>{"use strict";ev();Tke="__lodash_hash_undefined__",kke=Object.prototype,Eke=kke.hasOwnProperty;o(Cke,"hashGet");WW=Cke});function _ke(t){var e=this.__data__;return ku?e[t]!==void 0:Ake.call(e,t)}var Ske,Ake,XW,jW=R(()=>{"use strict";ev();Ske=Object.prototype,Ake=Ske.hasOwnProperty;o(_ke,"hashHas");XW=_ke});function Dke(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=ku&&e===void 0?Lke:e,this}var Lke,KW,QW=R(()=>{"use strict";ev();Lke="__lodash_hash_undefined__";o(Dke,"hashSet");KW=Dke});function Hp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";UW();YW();qW();jW();QW();o(Hp,"Hash");Hp.prototype.clear=VW;Hp.prototype.delete=HW;Hp.prototype.get=WW;Hp.prototype.has=XW;Hp.prototype.set=KW;L_=Hp});function Rke(){this.__data__=[],this.size=0}var JW,eq=R(()=>{"use strict";o(Rke,"listCacheClear");JW=Rke});function Nke(t,e){return t===e||t!==t&&e!==e}var No,xd=R(()=>{"use strict";o(Nke,"eq");No=Nke});function Mke(t,e){for(var r=t.length;r--;)if(No(t[r][0],e))return r;return-1}var Mh,tv=R(()=>{"use strict";xd();o(Mke,"assocIndexOf");Mh=Mke});function Pke(t){var e=this.__data__,r=Mh(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():Oke.call(e,r,1),--this.size,!0}var Ike,Oke,tq,rq=R(()=>{"use strict";tv();Ike=Array.prototype,Oke=Ike.splice;o(Pke,"listCacheDelete");tq=Pke});function Bke(t){var e=this.__data__,r=Mh(e,t);return r<0?void 0:e[r][1]}var nq,iq=R(()=>{"use strict";tv();o(Bke,"listCacheGet");nq=Bke});function Fke(t){return Mh(this.__data__,t)>-1}var aq,sq=R(()=>{"use strict";tv();o(Fke,"listCacheHas");aq=Fke});function zke(t,e){var r=this.__data__,n=Mh(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var oq,lq=R(()=>{"use strict";tv();o(zke,"listCacheSet");oq=zke});function Yp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";eq();rq();iq();sq();lq();o(Yp,"ListCache");Yp.prototype.clear=JW;Yp.prototype.delete=tq;Yp.prototype.get=nq;Yp.prototype.has=aq;Yp.prototype.set=oq;Ih=Yp});var Gke,Oh,J3=R(()=>{"use strict";Nh();Ro();Gke=xs(Jn,"Map"),Oh=Gke});function $ke(){this.size=0,this.__data__={hash:new L_,map:new(Oh||Ih),string:new L_}}var cq,uq=R(()=>{"use strict";ZW();rv();J3();o($ke,"mapCacheClear");cq=$ke});function Vke(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var hq,fq=R(()=>{"use strict";o(Vke,"isKeyable");hq=Vke});function Uke(t,e){var r=t.__data__;return hq(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Ph,nv=R(()=>{"use strict";fq();o(Uke,"getMapData");Ph=Uke});function Hke(t){var e=Ph(this,t).delete(t);return this.size-=e?1:0,e}var dq,pq=R(()=>{"use strict";nv();o(Hke,"mapCacheDelete");dq=Hke});function Yke(t){return Ph(this,t).get(t)}var mq,gq=R(()=>{"use strict";nv();o(Yke,"mapCacheGet");mq=Yke});function Wke(t){return Ph(this,t).has(t)}var yq,vq=R(()=>{"use strict";nv();o(Wke,"mapCacheHas");yq=Wke});function qke(t,e){var r=Ph(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var xq,bq=R(()=>{"use strict";nv();o(qke,"mapCacheSet");xq=qke});function Wp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";uq();pq();gq();vq();bq();o(Wp,"MapCache");Wp.prototype.clear=cq;Wp.prototype.delete=dq;Wp.prototype.get=mq;Wp.prototype.has=yq;Wp.prototype.set=xq;bd=Wp});function D_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(Xke);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(D_.Cache||bd),r}var Xke,qp,R_=R(()=>{"use strict";e5();Xke="Expected a function";o(D_,"memoize");D_.Cache=bd;qp=D_});function jke(){this.__data__=new Ih,this.size=0}var wq,Tq=R(()=>{"use strict";rv();o(jke,"stackClear");wq=jke});function Kke(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var kq,Eq=R(()=>{"use strict";o(Kke,"stackDelete");kq=Kke});function Qke(t){return this.__data__.get(t)}var Cq,Sq=R(()=>{"use strict";o(Qke,"stackGet");Cq=Qke});function Zke(t){return this.__data__.has(t)}var Aq,_q=R(()=>{"use strict";o(Zke,"stackHas");Aq=Zke});function eEe(t,e){var r=this.__data__;if(r instanceof Ih){var n=r.__data__;if(!Oh||n.length{"use strict";rv();J3();e5();Jke=200;o(eEe,"stackSet");Lq=eEe});function Xp(t){var e=this.__data__=new Ih(t);this.size=e.size}var uc,iv=R(()=>{"use strict";rv();Tq();Eq();Sq();_q();Dq();o(Xp,"Stack");Xp.prototype.clear=wq;Xp.prototype.delete=kq;Xp.prototype.get=Cq;Xp.prototype.has=Aq;Xp.prototype.set=Lq;uc=Xp});var tEe,jp,N_=R(()=>{"use strict";Nh();tEe=function(){try{var t=xs(Object,"defineProperty");return t({},"",{}),t}catch{}}(),jp=tEe});function rEe(t,e,r){e=="__proto__"&&jp?jp(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var hc,Kp=R(()=>{"use strict";N_();o(rEe,"baseAssignValue");hc=rEe});function nEe(t,e,r){(r!==void 0&&!No(t[e],r)||r===void 0&&!(e in t))&&hc(t,e,r)}var av,M_=R(()=>{"use strict";Kp();xd();o(nEe,"assignMergeValue");av=nEe});function iEe(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var Rq,Nq=R(()=>{"use strict";o(iEe,"createBaseFor");Rq=iEe});var aEe,Qp,t5=R(()=>{"use strict";Nq();aEe=Rq(),Qp=aEe});function oEe(t,e){if(e)return t.slice();var r=t.length,n=Oq?Oq(r):new t.constructor(r);return t.copy(n),n}var Pq,Mq,sEe,Iq,Oq,r5,I_=R(()=>{"use strict";Ro();Pq=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Mq=Pq&&typeof module=="object"&&module&&!module.nodeType&&module,sEe=Mq&&Mq.exports===Pq,Iq=sEe?Jn.Buffer:void 0,Oq=Iq?Iq.allocUnsafe:void 0;o(oEe,"cloneBuffer");r5=oEe});var lEe,Zp,O_=R(()=>{"use strict";Ro();lEe=Jn.Uint8Array,Zp=lEe});function cEe(t){var e=new t.constructor(t.byteLength);return new Zp(e).set(new Zp(t)),e}var Jp,n5=R(()=>{"use strict";O_();o(cEe,"cloneArrayBuffer");Jp=cEe});function uEe(t,e){var r=e?Jp(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var i5,P_=R(()=>{"use strict";n5();o(uEe,"cloneTypedArray");i5=uEe});function hEe(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";o(hEe,"copyArray");a5=hEe});var Bq,fEe,Fq,zq=R(()=>{"use strict";Js();Bq=Object.create,fEe=function(){function t(){}return o(t,"object"),function(e){if(!pn(e))return{};if(Bq)return Bq(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Fq=fEe});function dEe(t,e){return function(r){return t(e(r))}}var s5,F_=R(()=>{"use strict";o(dEe,"overArg");s5=dEe});var pEe,em,o5=R(()=>{"use strict";F_();pEe=s5(Object.getPrototypeOf,Object),em=pEe});function gEe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||mEe;return t===r}var mEe,fc,tm=R(()=>{"use strict";mEe=Object.prototype;o(gEe,"isPrototype");fc=gEe});function yEe(t){return typeof t.constructor=="function"&&!fc(t)?Fq(em(t)):{}}var l5,z_=R(()=>{"use strict";zq();o5();tm();o(yEe,"initCloneObject");l5=yEe});function vEe(t){return t!=null&&typeof t=="object"}var Wn,Mo=R(()=>{"use strict";o(vEe,"isObjectLike");Wn=vEe});function bEe(t){return Wn(t)&&fa(t)==xEe}var xEe,G_,Gq=R(()=>{"use strict";wu();Mo();xEe="[object Arguments]";o(bEe,"baseIsArguments");G_=bEe});var $q,wEe,TEe,kEe,kl,rm=R(()=>{"use strict";Gq();Mo();$q=Object.prototype,wEe=$q.hasOwnProperty,TEe=$q.propertyIsEnumerable,kEe=G_(function(){return arguments}())?G_:function(t){return Wn(t)&&wEe.call(t,"callee")&&!TEe.call(t,"callee")},kl=kEe});var EEe,wt,Bn=R(()=>{"use strict";EEe=Array.isArray,wt=EEe});function SEe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=CEe}var CEe,nm,c5=R(()=>{"use strict";CEe=9007199254740991;o(SEe,"isLength");nm=SEe});function AEe(t){return t!=null&&nm(t.length)&&!wi(t)}var ei,Io=R(()=>{"use strict";Jy();c5();o(AEe,"isArrayLike");ei=AEe});function _Ee(t){return Wn(t)&&ei(t)}var wd,u5=R(()=>{"use strict";Io();Mo();o(_Ee,"isArrayLikeObject");wd=_Ee});function LEe(){return!1}var Vq,Uq=R(()=>{"use strict";o(LEe,"stubFalse");Vq=LEe});var Wq,Hq,DEe,Yq,REe,NEe,El,im=R(()=>{"use strict";Ro();Uq();Wq=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Hq=Wq&&typeof module=="object"&&module&&!module.nodeType&&module,DEe=Hq&&Hq.exports===Wq,Yq=DEe?Jn.Buffer:void 0,REe=Yq?Yq.isBuffer:void 0,NEe=REe||Vq,El=NEe});function FEe(t){if(!Wn(t)||fa(t)!=MEe)return!1;var e=em(t);if(e===null)return!0;var r=PEe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&qq.call(r)==BEe}var MEe,IEe,OEe,qq,PEe,BEe,Xq,jq=R(()=>{"use strict";wu();o5();Mo();MEe="[object Object]",IEe=Function.prototype,OEe=Object.prototype,qq=IEe.toString,PEe=OEe.hasOwnProperty,BEe=qq.call(Object);o(FEe,"isPlainObject");Xq=FEe});function c6e(t){return Wn(t)&&nm(t.length)&&!!Mn[fa(t)]}var zEe,GEe,$Ee,VEe,UEe,HEe,YEe,WEe,qEe,XEe,jEe,KEe,QEe,ZEe,JEe,e6e,t6e,r6e,n6e,i6e,a6e,s6e,o6e,l6e,Mn,Kq,Qq=R(()=>{"use strict";wu();c5();Mo();zEe="[object Arguments]",GEe="[object Array]",$Ee="[object Boolean]",VEe="[object Date]",UEe="[object Error]",HEe="[object Function]",YEe="[object Map]",WEe="[object Number]",qEe="[object Object]",XEe="[object RegExp]",jEe="[object Set]",KEe="[object String]",QEe="[object WeakMap]",ZEe="[object ArrayBuffer]",JEe="[object DataView]",e6e="[object Float32Array]",t6e="[object Float64Array]",r6e="[object Int8Array]",n6e="[object Int16Array]",i6e="[object Int32Array]",a6e="[object Uint8Array]",s6e="[object Uint8ClampedArray]",o6e="[object Uint16Array]",l6e="[object Uint32Array]",Mn={};Mn[e6e]=Mn[t6e]=Mn[r6e]=Mn[n6e]=Mn[i6e]=Mn[a6e]=Mn[s6e]=Mn[o6e]=Mn[l6e]=!0;Mn[zEe]=Mn[GEe]=Mn[ZEe]=Mn[$Ee]=Mn[JEe]=Mn[VEe]=Mn[UEe]=Mn[HEe]=Mn[YEe]=Mn[WEe]=Mn[qEe]=Mn[XEe]=Mn[jEe]=Mn[KEe]=Mn[QEe]=!1;o(c6e,"baseIsTypedArray");Kq=c6e});function u6e(t){return function(e){return t(e)}}var Oo,Td=R(()=>{"use strict";o(u6e,"baseUnary");Oo=u6e});var Zq,sv,h6e,$_,f6e,Po,ov=R(()=>{"use strict";A_();Zq=typeof exports=="object"&&exports&&!exports.nodeType&&exports,sv=Zq&&typeof module=="object"&&module&&!module.nodeType&&module,h6e=sv&&sv.exports===Zq,$_=h6e&&Q3.process,f6e=function(){try{var t=sv&&sv.require&&sv.require("util").types;return t||$_&&$_.binding&&$_.binding("util")}catch{}}(),Po=f6e});var Jq,d6e,Bh,lv=R(()=>{"use strict";Qq();Td();ov();Jq=Po&&Po.isTypedArray,d6e=Jq?Oo(Jq):Kq,Bh=d6e});function p6e(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var cv,V_=R(()=>{"use strict";o(p6e,"safeGet");cv=p6e});function y6e(t,e,r){var n=t[e];(!(g6e.call(t,e)&&No(n,r))||r===void 0&&!(e in t))&&hc(t,e,r)}var m6e,g6e,dc,am=R(()=>{"use strict";Kp();xd();m6e=Object.prototype,g6e=m6e.hasOwnProperty;o(y6e,"assignValue");dc=y6e});function v6e(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";am();Kp();o(v6e,"copyObject");Bo=v6e});function x6e(t,e){for(var r=-1,n=Array(t);++r{"use strict";o(x6e,"baseTimes");eX=x6e});function T6e(t,e){var r=typeof t;return e=e??b6e,!!e&&(r=="number"||r!="symbol"&&w6e.test(t))&&t>-1&&t%1==0&&t{"use strict";b6e=9007199254740991,w6e=/^(?:0|[1-9]\d*)$/;o(T6e,"isIndex");Fh=T6e});function C6e(t,e){var r=wt(t),n=!r&&kl(t),i=!r&&!n&&El(t),a=!r&&!n&&!i&&Bh(t),s=r||n||i||a,l=s?eX(t.length,String):[],u=l.length;for(var h in t)(e||E6e.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Fh(h,u)))&&l.push(h);return l}var k6e,E6e,h5,U_=R(()=>{"use strict";tX();rm();Bn();im();uv();lv();k6e=Object.prototype,E6e=k6e.hasOwnProperty;o(C6e,"arrayLikeKeys");h5=C6e});function S6e(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var rX,nX=R(()=>{"use strict";o(S6e,"nativeKeysIn");rX=S6e});function L6e(t){if(!pn(t))return rX(t);var e=fc(t),r=[];for(var n in t)n=="constructor"&&(e||!_6e.call(t,n))||r.push(n);return r}var A6e,_6e,iX,aX=R(()=>{"use strict";Js();tm();nX();A6e=Object.prototype,_6e=A6e.hasOwnProperty;o(L6e,"baseKeysIn");iX=L6e});function D6e(t){return ei(t)?h5(t,!0):iX(t)}var bs,zh=R(()=>{"use strict";U_();aX();Io();o(D6e,"keysIn");bs=D6e});function R6e(t){return Bo(t,bs(t))}var sX,oX=R(()=>{"use strict";kd();zh();o(R6e,"toPlainObject");sX=R6e});function N6e(t,e,r,n,i,a,s){var l=cv(t,r),u=cv(e,r),h=s.get(u);if(h){av(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=wt(u),m=!p&&El(u),g=!p&&!m&&Bh(u);f=u,p||m||g?wt(l)?f=l:wd(l)?f=a5(l):m?(d=!1,f=r5(u,!0)):g?(d=!1,f=i5(u,!0)):f=[]:Xq(u)||kl(u)?(f=l,kl(l)?f=sX(l):(!pn(l)||wi(l))&&(f=l5(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),av(t,r,f)}var lX,cX=R(()=>{"use strict";M_();I_();P_();B_();z_();rm();Bn();u5();im();Jy();Js();jq();lv();V_();oX();o(N6e,"baseMergeDeep");lX=N6e});function uX(t,e,r,n,i){t!==e&&Qp(e,function(a,s){if(i||(i=new uc),pn(a))lX(t,e,s,r,uX,n,i);else{var l=n?n(cv(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),av(t,s,l)}},bs)}var hX,fX=R(()=>{"use strict";iv();M_();t5();cX();Js();zh();V_();o(uX,"baseMerge");hX=uX});function M6e(t){return t}var ea,Eu=R(()=>{"use strict";o(M6e,"identity");ea=M6e});function I6e(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var dX,pX=R(()=>{"use strict";o(I6e,"apply");dX=I6e});function O6e(t,e,r){return e=mX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=mX(n.length-e,0),s=Array(a);++i{"use strict";pX();mX=Math.max;o(O6e,"overRest");f5=O6e});function P6e(t){return function(){return t}}var ws,Y_=R(()=>{"use strict";o(P6e,"constant");ws=P6e});var B6e,gX,yX=R(()=>{"use strict";Y_();N_();Eu();B6e=jp?function(t,e){return jp(t,"toString",{configurable:!0,enumerable:!1,value:ws(e),writable:!0})}:ea,gX=B6e});function $6e(t){var e=0,r=0;return function(){var n=G6e(),i=z6e-(n-r);if(r=n,i>0){if(++e>=F6e)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var F6e,z6e,G6e,vX,xX=R(()=>{"use strict";F6e=800,z6e=16,G6e=Date.now;o($6e,"shortOut");vX=$6e});var V6e,d5,W_=R(()=>{"use strict";yX();xX();V6e=vX(gX),d5=V6e});function U6e(t,e){return d5(f5(t,e,ea),t+"")}var pc,sm=R(()=>{"use strict";Eu();H_();W_();o(U6e,"baseRest");pc=U6e});function H6e(t,e,r){if(!pn(r))return!1;var n=typeof e;return(n=="number"?ei(r)&&Fh(e,r.length):n=="string"&&e in r)?No(r[e],t):!1}var eo,Ed=R(()=>{"use strict";xd();Io();uv();Js();o(H6e,"isIterateeCall");eo=H6e});function Y6e(t){return pc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&eo(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n{"use strict";sm();Ed();o(Y6e,"createAssigner");p5=Y6e});var W6e,Gh,X_=R(()=>{"use strict";fX();q_();W6e=p5(function(t,e,r){hX(t,e,r)}),Gh=W6e});function om(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return q6e[r]??e}function Q6e(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,TX.sanitizeUrl)(r):r}function CX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function J6e(t){let e,r=0;t.forEach(i=>{r+=CX(i,e),e=i});let n=r/2;return Q_(t,n)}function eCe(t){return t.length===1?t[0]:J6e(t)}function rCe(t,e,r){let n=structuredClone(r);V.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=Q_(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function lm(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function nCe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i{"use strict";TX=Xi(Up(),1);Zt();rr();r7();ut();Hf();cp();R_();X_();Vb();K_="\u200B",q6e={curveBasis:vs,curveBasisClosed:B3,curveBasisOpen:F3,curveBumpX:s_,curveBumpY:o_,curveBundle:l_,curveCardinalClosed:u_,curveCardinalOpen:f_,curveCardinal:c_,curveCatmullRomClosed:m_,curveCatmullRomOpen:g_,curveCatmullRom:p_,curveLinear:xu,curveLinearClosed:U3,curveMonotoneX:v_,curveMonotoneY:x_,curveNatural:Y3,curveStep:q3,curveStepAfter:w_,curveStepBefore:b_},X6e=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,j6e=o(function(t,e){let r=kX(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);fp(s),n=On(n,[...s])}else n=r.args;if(!n)return;let i=lp(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),kX=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${X6e.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),V.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=Vf.exec(t))!==null;)if(n.index===Vf.lastIndex&&Vf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return V.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),EX=o(function(t){return t.replace(Vf,"")},"removeDirectives"),K6e=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(om,"interpolateToCurve");o(Q6e,"formatUrl");Z6e=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),Q_=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=CX(i,r);if(a=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:bX((1-s)*r.x+s*i.x,5),y:bX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),tCe=o((t,e,r)=>{V.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=Q_(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(rCe,"calcTerminalLabelPosition");o(lm,"getStylesFromArray");wX=0,Z_=o(()=>(wX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+wX),"generateId");o(nCe,"makeRandomHex");J_=o(t=>nCe(t.length),"random"),iCe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),aCe=o(function(t,e){let r=e.text.replace(We.lineBreakRegex," "),[,n]=mc(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),e9=qp((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),We.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=Cl(`${s} `,r),h=Cl(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=sCe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),sCe=qp((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(Cl(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(g5,"calculateTextHeight");o(Cl,"calculateTextWidth");t9=qp((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=mc(r),s=["sans-serif",n],l=t.split(We.lineBreakRegex),u=[],h=$e("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=iCe();v.text=y||K_;let x=aCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),j_=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},oCe=o(function(t){return m5=m5||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),m5.innerHTML=t,unescape(m5.textContent)},"entityDecode");o(r9,"isDetailedError");lCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),mc=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Ts,"cleanAndMerge");Lt={assignWithDepth:On,wrapLabel:e9,calculateTextHeight:g5,calculateTextWidth:Cl,calculateTextDimensions:t9,cleanAndMerge:Ts,detectInit:j6e,detectDirective:kX,isSubstringInArray:K6e,interpolateToCurve:om,calcLabelPosition:eCe,calcCardinalityPosition:tCe,calcTerminalLabelPosition:rCe,formatUrl:Q6e,getStylesFromArray:lm,generateId:Z_,random:J_,runFunc:Z6e,entityDecode:oCe,insertTitle:lCe,parseFontSize:mc,InitIDGenerator:j_},SX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),to=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),y5=o((t,e,{counter:r=0,prefix:n,suffix:i})=>`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId")});function Sl(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=e9(e[t].text,i,n),e[t].textLines=e[t].text.split(We.lineBreakRegex).length,e[t].width=i,e[t].height=g5(e[t].text,n);else{let a=e[t].text.split(We.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(Cl(l,n),e[t].width),s=g5(l,n),e[t].height=e[t].height+s}}function RX(t,e,r,n,i){let a=new w5(i);a.data.widthLimit=r.data.widthLimit/Math.min(n9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Nt.wrap,f=v5(Nt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Sl("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=v5(Nt);Sl("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=v5(Nt);g.fontSize=g.fontSize-2,Sl("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%n9===0){let g=r.data.startx+Nt.diagramMarginX,y=r.data.stopy+Nt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Nt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&DX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&RX(t,e,a,m,i),l.alias!=="global"&&LX(t,l,a),r.data.stopy=Math.max(a.data.stopy+Nt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Nt.c4ShapeMargin,r.data.stopx),x5=Math.max(x5,r.data.stopx),b5=Math.max(b5,r.data.stopy)}}var x5,b5,_X,n9,Nt,w5,i9,hv,v5,cCe,LX,DX,ks,AX,uCe,hCe,fCe,a9,NX=R(()=>{"use strict";Zt();AW();ut();VC();rr();lS();_t();cp();xr();Yn();x5=0,b5=0,_X=4,n9=2;U1.yy=hy;Nt={},w5=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,i9(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>_X)&&(r=this.nextData.startx+e.margin+Nt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},i9(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},i9=o(function(t){On(Nt,t),t.fontFamily&&(Nt.personFontFamily=Nt.systemFontFamily=Nt.messageFontFamily=t.fontFamily),t.fontSize&&(Nt.personFontSize=Nt.systemFontSize=Nt.messageFontSize=t.fontSize),t.fontWeight&&(Nt.personFontWeight=Nt.systemFontWeight=Nt.messageFontWeight=t.fontWeight)},"setConf"),hv=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),v5=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),cCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Sl,"calcC4ShapeTextWH");LX=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Nt.c4ShapeMargin-35;let n=e.wrap&&Nt.wrap,i=v5(Nt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=Cl(e.label.text,i);Sl("label",e,n,i,a),Tl.drawBoundary(t,e,Nt)},"drawBoundary"),DX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=hv(Nt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=Cl("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Nt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Nt.wrap,h=Nt.width-Nt.c4ShapePadding*2,f=hv(Nt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Sl("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=hv(Nt,s.typeC4Shape.text);Sl("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=hv(Nt,s.techn.text);Sl("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=hv(Nt,s.typeC4Shape.text);Sl("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Nt.c4ShapePadding,s.width=Math.max(s.width||Nt.width,p,Nt.width),s.height=Math.max(s.height||Nt.height,d,Nt.height),s.margin=s.margin||Nt.c4ShapeMargin,t.insert(s),Tl.drawC4Shape(e,s,Nt)}t.bumpLastMargin(Nt.c4ShapeMargin)},"drawC4ShapeArray"),ks=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},AX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&ri?p=new ks(r,l):r==i&&na&&(p=new ks(s,n)),r>i&&n=f?p=new ks(r,l+f*t.width/2):p=new ks(s-u/h*t.height/2,n+t.height):r=f?p=new ks(r+t.width,l+f*t.width/2):p=new ks(s+u/h*t.height/2,n+t.height):ra?d>=f?p=new ks(r+t.width,l-f*t.width/2):p=new ks(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new ks(r,l-t.width/2*f):p=new ks(s-t.height/2*u/h,n)),p},"getIntersectPoint"),uCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=AX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=AX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),hCe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Nt.wrap,l=cCe(Nt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=Cl(a.label.text,l);Sl("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=Cl(a.techn.text,l),Sl("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=Cl(a.descr.text,l),Sl("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=uCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}Tl.drawRels(t,e,Nt)},"drawRels");o(RX,"drawInsideBoundary");fCe=o(function(t,e,r,n){Nt=de().c4;let i=de().securityLevel,a;i==="sandbox"&&(a=$e("#i"+e));let s=i==="sandbox"?$e(a.nodes()[0].contentDocument.body):$e("body"),l=n.db;n.db.setWrap(Nt.wrap),_X=l.getC4ShapeInRow(),n9=l.getC4BoundaryInRow(),V.debug(`C:${JSON.stringify(Nt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):$e(`[id="${e}"]`);Tl.insertComputerIcon(u),Tl.insertDatabaseIcon(u),Tl.insertClockIcon(u);let h=new w5(n);h.setData(Nt.diagramMarginX,Nt.diagramMarginX,Nt.diagramMarginY,Nt.diagramMarginY),h.data.widthLimit=screen.availWidth,x5=Nt.diagramMarginX,b5=Nt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");RX(u,"",h,d,n),Tl.insertArrowHead(u),Tl.insertArrowEnd(u),Tl.insertArrowCrossHead(u),Tl.insertArrowFilledHead(u),hCe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=x5,h.data.stopy=b5;let p=h.data,g=p.stopy-p.starty+2*Nt.diagramMarginY,v=p.stopx-p.startx+2*Nt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Nt.diagramMarginX).attr("y",p.starty+Nt.diagramMarginY),Sr(u,g,v,Nt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Nt.diagramMarginX+" -"+(Nt.diagramMarginY+x)+" "+v+" "+(g+x)),V.debug("models:",p)},"draw"),a9={drawPersonOrSystemArray:DX,drawBoundary:LX,setConf:i9,draw:fCe}});var dCe,MX,IX=R(()=>{"use strict";dCe=o(t=>`.person { + stroke: ${t.personBorder}; + fill: ${t.personBkg}; + } +`,"getStyles"),MX=dCe});var OX={};hr(OX,{diagram:()=>pCe});var pCe,PX=R(()=>{"use strict";VC();lS();NX();IX();pCe={parser:rz,db:hy,renderer:a9,styles:MX,init:o(({c4:t,wrap:e})=>{a9.setConf(t),hy.setWrap(e)},"init")}});function o9(t){let e=[];for(let r of t){let n=dv.get(r);n?.styles&&(e=[...e,...n.styles??[]].map(i=>i.trim())),n?.textStyles&&(e=[...e,...n.textStyles??[]].map(i=>i.trim()))}return e}var vCe,zX,cm,$h,Es,dv,Cu,l9,c9,T5,s9,Fo,k5,E5,C5,S5,xCe,bCe,wCe,TCe,kCe,ECe,CCe,u9,SCe,ACe,_Ce,GX,LCe,DCe,h9,$X,VX,RCe,UX,NCe,MCe,ICe,OCe,PCe,fv,HX,YX,BCe,FCe,WX,zCe,GCe,$Ce,VCe,UCe,qX,XX,HCe,YCe,WCe,qCe,XCe,jCe,A5,f9=R(()=>{"use strict";Zt();xr();_t();rr();ut();bi();vCe="flowchart-",zX=0,cm=de(),$h=new Map,Es=[],dv=new Map,Cu=[],l9=new Map,c9=new Map,T5=0,s9=!0,E5=[],C5=o(t=>We.sanitizeText(t,cm),"sanitizeText"),S5=o(function(t){for(let e of $h.values())if(e.id===t)return e.domId;return t},"lookUpDomId"),xCe=o(function(t,e,r,n,i,a,s={}){if(!t||t.trim().length===0)return;let l,u=$h.get(t);u===void 0&&(u={id:t,labelType:"text",domId:vCe+t+"-"+zX,styles:[],classes:[]},$h.set(t,u)),zX++,e!==void 0?(cm=de(),l=C5(e.text.trim()),u.labelType=e.type,l.startsWith('"')&&l.endsWith('"')&&(l=l.substring(1,l.length-1)),u.text=l):u.text===void 0&&(u.text=t),r!==void 0&&(u.type=r),n?.forEach(function(h){u.styles.push(h)}),i?.forEach(function(h){u.classes.push(h)}),a!==void 0&&(u.dir=a),u.props===void 0?u.props=s:s!==void 0&&Object.assign(u.props,s)},"addVertex"),bCe=o(function(t,e,r){let a={start:t,end:e,type:void 0,text:"",labelType:"text"};V.info("abc78 Got edge...",a);let s=r.text;if(s!==void 0&&(a.text=C5(s.text.trim()),a.text.startsWith('"')&&a.text.endsWith('"')&&(a.text=a.text.substring(1,a.text.length-1)),a.labelType=s.type),r!==void 0&&(a.type=r.type,a.stroke=r.stroke,a.length=r.length>10?10:r.length),Es.length<(cm.maxEdges??500))V.info("Pushing edge..."),Es.push(a);else throw new Error(`Edge limit exceeded. ${Es.length} edges found, but the limit is ${cm.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)},"addSingleLink"),wCe=o(function(t,e,r){V.info("addLink",t,e,r);for(let n of t)for(let i of e)bCe(n,i,r)},"addLink"),TCe=o(function(t,e){t.forEach(function(r){r==="default"?Es.defaultInterpolate=e:Es[r].interpolate=e})},"updateLinkInterpolate"),kCe=o(function(t,e){t.forEach(function(r){if(typeof r=="number"&&r>=Es.length)throw new Error(`The index ${r} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${Es.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);r==="default"?Es.defaultStyle=e:(Es[r].style=e,(Es[r]?.style?.length??0)>0&&!Es[r]?.style?.some(n=>n?.startsWith("fill"))&&Es[r]?.style?.push("fill:none"))})},"updateLink"),ECe=o(function(t,e){t.split(",").forEach(function(r){let n=dv.get(r);n===void 0&&(n={id:r,styles:[],textStyles:[]},dv.set(r,n)),e?.forEach(function(i){if(/color/.exec(i)){let a=i.replace("fill","bgFill");n.textStyles.push(a)}n.styles.push(i)})})},"addClass"),CCe=o(function(t){Fo=t,/.*/.exec(Fo)&&(Fo="LR"),/.*v/.exec(Fo)&&(Fo="TB"),Fo==="TD"&&(Fo="TB")},"setDirection"),u9=o(function(t,e){for(let r of t.split(",")){let n=$h.get(r);n&&n.classes.push(e);let i=l9.get(r);i&&i.classes.push(e)}},"setClass"),SCe=o(function(t,e){if(e!==void 0){e=C5(e);for(let r of t.split(","))c9.set(k5==="gen-1"?S5(r):r,e)}},"setTooltip"),ACe=o(function(t,e,r){let n=S5(t);if(de().securityLevel!=="loose"||e===void 0)return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),$e(this).classed("hover",!1)})},"setupToolTips");E5.push(UX);NCe=o(function(t="gen-1"){$h=new Map,dv=new Map,Es=[],E5=[UX],Cu=[],l9=new Map,T5=0,c9=new Map,s9=!0,k5=t,cm=de(),vr()},"clear"),MCe=o(t=>{k5=t||"gen-2"},"setGen"),ICe=o(function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},"defaultStyle"),OCe=o(function(t,e,r){let n=t.text.trim(),i=r.text;t===r&&/\s/.exec(r.text)&&(n=void 0);function a(h){let f={boolean:{},number:{},string:{}},d=[],p;return{nodeList:h.filter(function(g){let y=typeof g;return g.stmt&&g.stmt==="dir"?(p=g.value,!1):g.trim()===""?!1:y in f?f[y].hasOwnProperty(g)?!1:f[y][g]=!0:d.includes(g)?!1:d.push(g)}),dir:p}}o(a,"uniq");let{nodeList:s,dir:l}=a(e.flat());if(k5==="gen-1")for(let h=0;h2e3)return{result:!1,count:0};if(HX[fv]=e,Cu[e].id===t)return{result:!0,count:0};let n=0,i=1;for(;n=0){let s=YX(t,a);if(s.result)return{result:!0,count:i+s.count};i=i+s.count}n=n+1}return{result:!1,count:i}},"indexNodes2"),BCe=o(function(t){return HX[t]},"getDepthFirstPos"),FCe=o(function(){fv=-1,Cu.length>0&&YX("none",Cu.length-1)},"indexNodes"),WX=o(function(){return Cu},"getSubGraphs"),zCe=o(()=>s9?(s9=!1,!0):!1,"firstGraph"),GCe=o(t=>{let e=t.trim(),r="arrow_open";switch(e[0]){case"<":r="arrow_point",e=e.slice(1);break;case"x":r="arrow_cross",e=e.slice(1);break;case"o":r="arrow_circle",e=e.slice(1);break}let n="normal";return e.includes("=")&&(n="thick"),e.includes(".")&&(n="dotted"),{type:r,stroke:n}},"destructStartLink"),$Ce=o((t,e)=>{let r=e.length,n=0;for(let i=0;i{let e=t.trim(),r=e.slice(0,-1),n="arrow_open";switch(e.slice(-1)){case"x":n="arrow_cross",e.startsWith("x")&&(n="double_"+n,r=r.slice(1));break;case">":n="arrow_point",e.startsWith("<")&&(n="double_"+n,r=r.slice(1));break;case"o":n="arrow_circle",e.startsWith("o")&&(n="double_"+n,r=r.slice(1));break}let i="normal",a=r.length-1;r.startsWith("=")&&(i="thick"),r.startsWith("~")&&(i="invisible");let s=$Ce(".",r);return s&&(i="dotted",a=s),{type:n,stroke:i,length:a}},"destructEndLink"),UCe=o((t,e)=>{let r=VCe(t),n;if(e){if(n=GCe(e),n.stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=r.length,n}return r},"destructLink"),qX=o((t,e)=>{for(let r of t)if(r.nodes.includes(e))return!0;return!1},"exists"),XX=o((t,e)=>{let r=[];return t.nodes.forEach((n,i)=>{qX(e,n)||r.push(t.nodes[i])}),{nodes:r}},"makeUniq"),HCe={firstGraph:zCe},YCe=o(t=>t.type==="square"?"squareRect":t.type==="round"?"roundedRect":t.type??"squareRect","getTypeFromVertex"),WCe=o((t,e)=>t.find(r=>r.id===e),"findNode"),qCe=o(t=>{let e="none",r="arrow_point";switch(t){case"arrow_point":case"arrow_circle":case"arrow_cross":r=t;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":e=t.replace("double_",""),r=e;break}return{arrowTypeStart:e,arrowTypeEnd:r}},"destructEdgeType"),XCe=o((t,e,r,n,i,a)=>{let s=r.get(t.id),l=n.get(t.id)??!1,u=WCe(e,t.id);u?(u.cssStyles=t.styles,u.cssCompiledStyles=o9(t.classes),u.cssClasses=t.classes.join(" ")):e.push({id:t.id,label:t.text,labelStyle:"",parentId:s,padding:i.flowchart?.padding||8,cssStyles:t.styles,cssCompiledStyles:o9(["default","node",...t.classes]),cssClasses:"default "+t.classes.join(" "),shape:YCe(t),dir:t.dir,domId:t.domId,isGroup:l,look:a,link:t.link,linkTarget:t.linkTarget,tooltip:GX(t.id)})},"addNodeFromVertex");o(o9,"getCompiledStyles");jCe=o(()=>{let t=de(),e=[],r=[],n=WX(),i=new Map,a=new Map;for(let u=n.length-1;u>=0;u--){let h=n[u];h.nodes.length>0&&a.set(h.id,!0);for(let f of h.nodes)i.set(f,h.id)}for(let u=n.length-1;u>=0;u--){let h=n[u];e.push({id:h.id,label:h.title,labelStyle:"",parentId:i.get(h.id),padding:8,cssCompiledStyles:o9(h.classes),cssClasses:h.classes.join(" "),shape:"rect",dir:h.dir,isGroup:!0,look:t.look})}$X().forEach(u=>{XCe(u,e,i,a,t,t.look||"classic")});let l=VX();return l.forEach((u,h)=>{let{arrowTypeStart:f,arrowTypeEnd:d}=qCe(u.type),p=[...l.defaultStyle??[]];u.style&&p.push(...u.style);let m={id:y5(u.start,u.end,{counter:h,prefix:"L"}),start:u.start,end:u.end,type:u.type??"normal",label:u.text,labelpos:"c",thickness:u.stroke,minlen:u.length,classes:u?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:u?.stroke==="invisible"?"none":f,arrowTypeEnd:u?.stroke==="invisible"?"none":d,arrowheadStyle:"fill: #333",labelStyle:p,style:p,pattern:u.stroke,look:t.look};r.push(m)}),{nodes:e,edges:r,other:{},config:t}},"getData"),A5={defaultConfig:o(()=>_4.flowchart,"defaultConfig"),setAccTitle:kr,getAccTitle:Ar,getAccDescription:Lr,getData:jCe,setAccDescription:_r,addVertex:xCe,lookUpDomId:S5,addLink:wCe,updateLinkInterpolate:TCe,updateLink:kCe,addClass:ECe,setDirection:CCe,setClass:u9,setTooltip:SCe,getTooltip:GX,setClickEvent:LCe,setLink:_Ce,bindFunctions:DCe,getDirection:h9,getVertices:$X,getEdges:VX,getClasses:RCe,clear:NCe,setGen:MCe,defaultStyle:ICe,addSubGraph:OCe,getDepthFirstPos:BCe,indexNodes:FCe,getSubGraphs:WX,destructLink:UCe,lex:HCe,exists:qX,makeUniq:XX,setDiagramTitle:nn,getDiagramTitle:Xr}});var KCe,jX,KX=R(()=>{"use strict";KCe=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),jX=o((t,e,r)=>{let n=KCe(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function m9(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function rj(t){Sd=t}function ro(t,e){if(e){if(nj.test(t))return t.replace(QCe,QX)}else if(ij.test(t))return t.replace(ZCe,QX);return t}function t7e(t){return t.replace(e7e,(e,r)=>(r=r.toLowerCase(),r==="colon"?":":r.charAt(0)==="#"?r.charAt(1)==="x"?String.fromCharCode(parseInt(r.substring(2),16)):String.fromCharCode(+r.substring(1)):""))}function ln(t,e){let r=typeof t=="string"?t:t.source;e=e||"";let n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(r7e,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function ZX(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}function JX(t,e){let r=t.replace(/\|/g,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(/ \|/),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length{let a=i.match(/^\s+/);if(a===null)return i;let[s]=a;return s.length>=n.length?i.slice(n.length):i}).join(` +`)}function jr(t,e){return Cd.parse(t,e)}var Sd,nj,QCe,ij,ZCe,JCe,QX,e7e,r7e,gv,hm,a7e,s7e,o7e,vv,l7e,aj,sj,g9,c7e,y9,u7e,h7e,D5,v9,f7e,oj,d7e,x9,tj,p7e,m7e,lj,g7e,cj,y7e,xv,v7e,x7e,b7e,w7e,T7e,k7e,E7e,C7e,S7e,L5,A7e,uj,hj,_7e,b9,L7e,d9,D7e,_5,mv,Su,fm,yv,Au,um,p9,Cd,mkt,gkt,ykt,vkt,xkt,bkt,wkt,fj=R(()=>{"use strict";o(m9,"_getDefaults");Sd=m9();o(rj,"changeDefaults");nj=/[&<>"']/,QCe=new RegExp(nj.source,"g"),ij=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,ZCe=new RegExp(ij.source,"g"),JCe={"&":"&","<":"<",">":">",'"':""","'":"'"},QX=o(t=>JCe[t],"getEscapeReplacement");o(ro,"escape$1");e7e=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;o(t7e,"unescape");r7e=/(^|[^\[])\^/g;o(ln,"edit");o(ZX,"cleanUrl");gv={exec:o(()=>null,"exec")};o(JX,"splitCells");o(pv,"rtrim");o(n7e,"findClosingBracket");o(ej,"outputLink");o(i7e,"indentCodeCompensation");hm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Sd}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:pv(n,` +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=i7e(n,r[3]||"");return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(/#$/.test(n)){let i=pv(n,"#");(this.options.pedantic||!i||/ $/.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:pv(r[0],` +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=pv(r[0],` +`).split(` +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h/.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(` +`),d=f.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,` + $1`).replace(/^ {0,3}>[ \t]?/gm,"");i=i?`${i} +${f}`:f,a=a?`${a} +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s[s.length-1];if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s[s.length-1].raw.length).split(` +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=new RegExp(`^( {0,3}${n})((?:[ ][^\\n]*)?(?:\\n|$))`),l=!1;for(;e;){let u=!1,h="",f="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;h=r[0],e=e.substring(h.length);let d=r[2].split(` +`,1)[0].replace(/^\t+/,x=>" ".repeat(3*x.length)),p=e.split(` +`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=r[1].length+1:(g=r[2].search(/[^ ]/),g=g>4?1:g,f=d.slice(g),g+=r[1].length),m&&/^ *$/.test(p)&&(h+=p+` +`,e=e.substring(p.length+1),u=!0),!u){let x=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),b=new RegExp(`^ {0,${Math.min(3,g-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),w=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:\`\`\`|~~~)`),S=new RegExp(`^ {0,${Math.min(3,g-1)}}#`);for(;e;){let T=e.split(` +`,1)[0];if(p=T,this.options.pedantic&&(p=p.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),w.test(p)||S.test(p)||x.test(p)||b.test(e))break;if(p.search(/[^ ]/)>=g||!p.trim())f+=` +`+p.slice(g);else{if(m||d.search(/[^ ]/)>=4||w.test(d)||S.test(d)||b.test(d))break;f+=` +`+p}!m&&!p.trim()&&(m=!0),h+=T+` +`,e=e.substring(T.length+1),d=p.slice(g)}}a.loose||(l?a.loose=!0:/\n *\n *$/.test(h)&&(l=!0));let y=null,v;this.options.gfm&&(y=/^\[[ xX]\] /.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),a.raw+=h}a.items[a.items.length-1].raw=a.items[a.items.length-1].raw.trimEnd(),a.items[a.items.length-1].text=a.items[a.items.length-1].text.trimEnd(),a.raw=a.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>/\n.*\n/.test(d.raw));a.loose=f}if(a.loose)for(let u=0;u$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!/[:|]/.test(r[2]))return;let n=JX(r[1]),i=r[2].replace(/^\||\| *$/g,"").split("|"),a=r[3]&&r[3].trim()?r[3].replace(/\n[ \t]*$/,"").split(` +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)/^ *-+: *$/.test(l)?s.align.push("right"):/^ *:-+: *$/.test(l)?s.align.push("center"):/^ *:-+ *$/.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===` +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:ro(r[1])}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&/^/i.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;let s=pv(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=n7e(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),/^$/.test(n)?i=i.slice(1):i=i.slice(1,-1)),ej(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(/\s+/g," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return ej(n,a,n[0],this.lexer)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(/\n/g," "),i=/[^ ]/.test(n),a=/^ /.test(n)&&/ $/.test(n);return i&&a&&(n=n.substring(1,n.length-1)),n=ro(n,!0),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=ro(r[1]),i="mailto:"+n):(n=ro(r[1]),i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=ro(r[0]),i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=ro(r[0]),r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n;return this.lexer.state.inRawBlock?n=r[0]:n=ro(r[0]),{type:"text",raw:r[0],text:n}}}},a7e=/^(?: *(?:\n|$))+/,s7e=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,o7e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,vv=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,l7e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,aj=/(?:[*+-]|\d{1,9}[.)])/,sj=ln(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,aj).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),g9=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,c7e=/^[^\n]+/,y9=/(?!\s*\])(?:\\.|[^\[\]\\])+/,u7e=ln(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",y9).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),h7e=ln(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,aj).getRegex(),D5="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",v9=/|$))/,f7e=ln("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",v9).replace("tag",D5).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),oj=ln(g9).replace("hr",vv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",D5).getRegex(),d7e=ln(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",oj).getRegex(),x9={blockquote:d7e,code:s7e,def:u7e,fences:o7e,heading:l7e,hr:vv,html:f7e,lheading:sj,list:h7e,newline:a7e,paragraph:oj,table:gv,text:c7e},tj=ln("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",vv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",D5).getRegex(),p7e={...x9,table:tj,paragraph:ln(g9).replace("hr",vv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",tj).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",D5).getRegex()},m7e={...x9,html:ln(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",v9).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:gv,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ln(g9).replace("hr",vv).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",sj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},lj=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,g7e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,cj=/^( {2,}|\\)\n(?!\s*$)/,y7e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,b7e=ln(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,xv).getRegex(),w7e=ln("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,xv).getRegex(),T7e=ln("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,xv).getRegex(),k7e=ln(/\\([punct])/,"gu").replace(/punct/g,xv).getRegex(),E7e=ln(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),C7e=ln(v9).replace("(?:-->|$)","-->").getRegex(),S7e=ln("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",C7e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),L5=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,A7e=ln(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",L5).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),uj=ln(/^!?\[(label)\]\[(ref)\]/).replace("label",L5).replace("ref",y9).getRegex(),hj=ln(/^!?\[(ref)\](?:\[\])?/).replace("ref",y9).getRegex(),_7e=ln("reflink|nolink(?!\\()","g").replace("reflink",uj).replace("nolink",hj).getRegex(),b9={_backpedal:gv,anyPunctuation:k7e,autolink:E7e,blockSkip:x7e,br:cj,code:g7e,del:gv,emStrongLDelim:b7e,emStrongRDelimAst:w7e,emStrongRDelimUnd:T7e,escape:lj,link:A7e,nolink:hj,punctuation:v7e,reflink:uj,reflinkSearch:_7e,tag:S7e,text:y7e,url:gv},L7e={...b9,link:ln(/^!?\[(label)\]\((.*?)\)/).replace("label",L5).getRegex(),reflink:ln(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",L5).getRegex()},d9={...b9,escape:ln(lj).replace("])","~|])").getRegex(),url:ln(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\u+" ".repeat(h.length));let i,a,s;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(l=>(i=l.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))){if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length),i.raw.length===1&&r.length>0?r[r.length-1].raw+=` +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.raw,this.inlineQueue[this.inlineQueue.length-1].src=a.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(s=e,this.options.extensions&&this.options.extensions.startBlock){let l=1/0,u=e.slice(1),h;this.options.extensions.startBlock.forEach(f=>{h=f.call({lexer:this},u),typeof h=="number"&&h>=0&&(l=Math.min(l,h))}),l<1/0&&l>=0&&(s=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(s))){a=r[r.length-1],n&&a?.type==="paragraph"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i),n=s.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&a.type==="text"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n,i,a,s=e,l,u,h;if(this.tokens.links){let f=Object.keys(this.tokens.links);if(f.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)f.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(l=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,l.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(u||(h=""),u=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(f=>(n=f.call({lexer:this},e,r))?(e=e.substring(n.raw.length),r.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.emStrong(e,s,h)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),r.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),r.push(n);continue}if(a=e,this.options.extensions&&this.options.extensions.startInline){let f=1/0,d=e.slice(1),p;this.options.extensions.startInline.forEach(m=>{p=m.call({lexer:this},d),typeof p=="number"&&p>=0&&(f=Math.min(f,p))}),f<1/0&&f>=0&&(a=e.substring(0,f+1))}if(n=this.tokenizer.inlineText(a)){e=e.substring(n.raw.length),n.raw.slice(-1)!=="_"&&(h=n.raw.slice(-1)),u=!0,i=r[r.length-1],i&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(e){let f="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(f);break}else throw new Error(f)}}return r}},fm=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Sd}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(/^\S*/)?.[0],a=e.replace(/\n$/,"")+` +`;return i?'
'+(n?a:ro(a,!0))+`
+`:"
"+(n?a:ro(a,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}heading({tokens:e,depth:r}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l +`+i+" +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens.length>0&&e.tokens[0].type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+e.tokens[0].tokens[0].text)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" "}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`
  • ${r}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let r="",n="";for(let a=0;a${i}`),` + +`+r+` +`+i+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${e}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=ZX(e);if(a===null)return i;e=a;let s='
    ",s}image({href:e,title:r,text:n}){let i=ZX(e);if(i===null)return n;e=i;let a=`${n}{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new fm(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l];n.useNewRenderer||(u=this.#t(u,l,a));let h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new hm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new um;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(s==="options")continue;let l=s,u=n.hooks[l],h=a[l];um.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}#t(e,r,n){switch(r){case"heading":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,n.parser.parseInline(i.tokens),i.depth,t7e(n.parser.parseInline(i.tokens,n.parser.textRenderer)))};case"code":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.lang,!!i.escaped)};case"table":return function(i){if(!i.type||i.type!==r)return e.apply(this,arguments);let a="",s="";for(let u=0;u0&&f.tokens[0].type==="paragraph"?(f.tokens[0].text=g+" "+f.tokens[0].text,f.tokens[0].tokens&&f.tokens[0].tokens.length>0&&f.tokens[0].tokens[0].type==="text"&&(f.tokens[0].tokens[0].text=g+" "+f.tokens[0].tokens[0].text)):f.tokens.unshift({type:"text",text:g+" "}):m+=g+" "}m+=this.parser.parse(f.tokens,l),u+=this.listitem({type:"list_item",raw:m,text:m,task:p,checked:!!d,loose:l,tokens:f.tokens})}return e.call(this,u,a,s)};case"html":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.block)};case"paragraph":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"escape":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"link":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,this.parser.parseInline(i.tokens))};case"image":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,i.text)};case"strong":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"em":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"codespan":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"del":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"text":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)}}return e}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Su.lex(e,r??this.defaults)}parser(e,r){return Au.parse(e,r??this.defaults)}#e(e,r){return(n,i)=>{let a={...i},s={...this.defaults,...a};this.defaults.async===!0&&a.async===!1&&(s.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),s.async=!0);let l=this.#r(!!s.silent,!!s.async);if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(s.hooks&&(s.hooks.options=s),s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(u=>e(u,s)).then(u=>s.hooks?s.hooks.processAllTokens(u):u).then(u=>s.walkTokens?Promise.all(this.walkTokens(u,s.walkTokens)).then(()=>u):u).then(u=>r(u,s)).then(u=>s.hooks?s.hooks.postprocess(u):u).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let u=e(n,s);s.hooks&&(u=s.hooks.processAllTokens(u)),s.walkTokens&&this.walkTokens(u,s.walkTokens);let h=r(u,s);return s.hooks&&(h=s.hooks.postprocess(h)),h}catch(u){return l(u)}}}#r(e,r){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let i="

    An error occurred:

    "+ro(n.message+"",!0)+"
    ";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},Cd=new p9;o(jr,"marked");jr.options=jr.setOptions=function(t){return Cd.setOptions(t),jr.defaults=Cd.defaults,rj(jr.defaults),jr};jr.getDefaults=m9;jr.defaults=Sd;jr.use=function(...t){return Cd.use(...t),jr.defaults=Cd.defaults,rj(jr.defaults),jr};jr.walkTokens=function(t,e){return Cd.walkTokens(t,e)};jr.parseInline=Cd.parseInline;jr.Parser=Au;jr.parser=Au.parse;jr.Renderer=fm;jr.TextRenderer=yv;jr.Lexer=Su;jr.lexer=Su.lex;jr.Tokenizer=hm;jr.Hooks=um;jr.parse=jr;mkt=jr.options,gkt=jr.setOptions,ykt=jr.use,vkt=jr.walkTokens,xkt=jr.parseInline,bkt=Au.parse,wkt=Su.lex});function R7e(t,{markdownAutoWrap:e}){let n=t.replace(//g,` +`).replace(/\n{2,}/g,` +`),i=Gb(n);return e===!1?i.replace(/ /g," "):i}function dj(t,e={}){let r=R7e(t,e),n=jr.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function pj(t,{markdownAutoWrap:e}={}){let r=jr.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"
    ").replace(/ /g," "):i.text.replace(/\n */g,"
    "):i.type==="strong"?`${i.tokens?.map(n).join("")}`:i.type==="em"?`${i.tokens?.map(n).join("")}`:i.type==="paragraph"?`

    ${i.tokens?.map(n).join("")}

    `:i.type==="space"?"":i.type==="html"?`${i.text}`:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var mj=R(()=>{"use strict";fj();zC();o(R7e,"preprocessMarkdown");o(dj,"markdownToLines");o(pj,"markdownToHTML")});function N7e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function M7e(t,e){let r=N7e(e.content);return gj(t,[],r,e.type)}function gj(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?gj(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function yj(t,e){if(t.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return w9(t,e)}function w9(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return w9(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=M7e(e,a);r.push([l]),u.content&&t.unshift(u)}return w9(t,e,r)}var vj=R(()=>{"use strict";o(N7e,"splitTextToChars");o(M7e,"splitWordToFitWidth");o(gj,"splitWordToFitWidthRecursion");o(yj,"splitLineToFitWidth");o(w9,"splitLineToFitWidthRecursion")});function xj(t,e){e&&t.attr("style",e)}async function I7e(t,e,r,n,i=!1){let a=t.append("foreignObject"),s=a.append("xhtml:div"),l=e.label;e.label&&Ni(e.label)&&(l=await yh(e.label.replace(We.lineBreakRegex,` +`),de()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),xj(h,e.labelStyle),h.attr("class",`${u} ${n}`),xj(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function T9(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function O7e(t,e,r){let n=t.append("text"),i=T9(n,1,e);k9(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function bj(t,e,r){let n=t.append("text"),i=T9(n,1,e);k9(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function P7e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>O7e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:yj(h,f);for(let p of d){let m=T9(l,u,1.1);k9(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",-f).attr("y",-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function k9(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function E9(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>``)}var ta,Al=R(()=>{"use strict";_t();rr();Zt();ut();mj();xr();vj();o(xj,"applyStyle");o(I7e,"addHtmlSpan");o(T9,"createTspan");o(O7e,"computeWidthOfText");o(bj,"computeDimensionOfText");o(P7e,"createFormattedText");o(k9,"updateTextContentAndStyles");o(E9,"replaceIconSubstring");ta=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(V.info("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=pj(e,h),d=E9(to(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:Ni(e)?p:d,labelStyle:r.replace("fill:","color:")};return await I7e(t,m,l,i,u)}else{let f=e.replace(//g,"
    "),d=dj(f.replace("
    ","
    "),h),p=P7e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");$e(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");$e(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");$e(p).select("text").attr("style",g)}return p}},"createText")});function wj(t,e){e&&t.attr("style",e)}function B7e(t){let e=$e(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),wj(a,t.labelStyle),a.attr("class",i),wj(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var F7e,ra,bv=R(()=>{"use strict";Zt();ut();_t();rr();xr();Al();o(wj,"applyStyle");o(B7e,"addHtmlLabel");F7e=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),yr(de().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),V.debug("vertexText"+i);let a={isNode:n,label:E9(to(i)),labelStyle:e.replace("fill:","color:")};return B7e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),ra=F7e});function z7e(t,e){return t.intersect(e)}var Tj,kj=R(()=>{"use strict";o(z7e,"intersectNode");Tj=z7e});function G7e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(G7e,"intersectEllipse");R5=G7e});function $7e(t,e,r){return R5(t,e,e,r)}var Ej,Cj=R(()=>{"use strict";C9();o($7e,"intersectCircle");Ej=$7e});function V7e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&Sj(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&Sj(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function Sj(t,e){return t*e>0}var Aj,_j=R(()=>{"use strict";o(V7e,"intersectLine");o(Sj,"sameSign");Aj=V7e});function U7e(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,S=y.y-r.y,T=Math.sqrt(w*w+S*S);return b{"use strict";_j();Lj=U7e;o(U7e,"intersectPolygon")});var H7e,Ad,S9=R(()=>{"use strict";H7e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Ad=H7e});var Tn,A9=R(()=>{"use strict";kj();Cj();C9();Dj();S9();Tn={node:Tj,circle:Ej,ellipse:R5,polygon:Lj,rect:Ad}});function _l(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Ti,kn,N5=R(()=>{"use strict";bv();Al();_t();Zt();rr();xr();Ti=o(async(t,e,r,n)=>{let i=de(),a,s=e.useHtmlLabels||yr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=ta(u,qr(to(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(ra(qr(to(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(yr(i.flowchart.htmlLabels)){let g=d.children[0],y=$e(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function S(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,_=parseInt(T,10)*5+"px";b.style.minWidth=_,b.style.maxWidth=_}else b.style.width="100%";w(b)}o(S,"setupImage"),setTimeout(()=>{b.complete&&S()}),b.addEventListener("error",S),b.addEventListener("load",S)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),kn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(_l,"insertPolygonShape")});var Y7e,Rj,Nj=R(()=>{"use strict";N5();ut();_t();A9();Y7e=o(async(t,e)=>{e.useHtmlLabels||de().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Ti(t,e,"node "+e.classes,!0);V.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),kn(e,s),e.intersect=function(l){return Tn.rect(e,l)},n},"note"),Rj=Y7e});function _9(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(V.debug("add top border"),a(r)):s(r),e.includes("r")?(V.debug("add right border"),a(n)):s(n),e.includes("b")?(V.debug("add bottom border"),a(r)):s(r),e.includes("l")?(V.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var Mj,no,Ij,W7e,q7e,X7e,j7e,K7e,Q7e,Z7e,J7e,eSe,tSe,rSe,nSe,iSe,aSe,sSe,oSe,lSe,cSe,uSe,Oj,hSe,fSe,Pj,dm,pm,Bj,Fj,wv,M5=R(()=>{"use strict";Zt();_t();rr();ut();KX();bv();A9();Nj();N5();Mj=o(t=>t?" "+t:"","formatClass"),no=o((t,e)=>`${e||"node default"}${Mj(t.classes)} ${Mj(t.class)}`,"getClassesFromNode"),Ij=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];V.info("Question main (Circle)");let u=_l(r,s,s,l);return u.attr("style",e.style),kn(e,u),e.intersect=function(h){return V.warn("Intersect called"),Tn.polygon(e,l,h)},r},"question"),W7e=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return Tn.circle(e,14,s)},r},"choice"),q7e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=_l(r,l,a,u);return h.attr("style",e.style),kn(e,h),e.intersect=function(f){return Tn.polygon(e,u,f)},r},"hexagon"),X7e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=jX(e.directions,n,e),h=_l(r,l,a,u);return h.attr("style",e.style),kn(e,h),e.intersect=function(f){return Tn.polygon(e,u,f)},r},"block_arrow"),j7e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return _l(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return Tn.polygon(e,s,u)},r},"rect_left_inv_arrow"),K7e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=_l(r,i,a,s);return l.attr("style",e.style),kn(e,l),e.intersect=function(u){return Tn.polygon(e,s,u)},r},"lean_right"),Q7e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=_l(r,i,a,s);return l.attr("style",e.style),kn(e,l),e.intersect=function(u){return Tn.polygon(e,s,u)},r},"lean_left"),Z7e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=_l(r,i,a,s);return l.attr("style",e.style),kn(e,l),e.intersect=function(u){return Tn.polygon(e,s,u)},r},"trapezoid"),J7e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=_l(r,i,a,s);return l.attr("style",e.style),kn(e,l),e.intersect=function(u){return Tn.polygon(e,s,u)},r},"inv_trapezoid"),eSe=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=_l(r,i,a,s);return l.attr("style",e.style),kn(e,l),e.intersect=function(u){return Tn.polygon(e,s,u)},r},"rect_right_inv_arrow"),tSe=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return kn(e,h),e.intersect=function(f){let d=Tn.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),rSe=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ti(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(_9(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{V.warn(`Unknown node property ${d}`)})}return kn(e,a),e.intersect=function(f){return Tn.rect(e,f)},r},"rect"),nSe=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ti(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(_9(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{V.warn(`Unknown node property ${d}`)})}return kn(e,a),e.intersect=function(f){return Tn.rect(e,f)},r},"composite"),iSe=o(async(t,e)=>{let{shapeSvg:r}=await Ti(t,e,"label",!0);V.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(_9(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{V.warn(`Unknown node property ${l}`)})}return kn(e,n),e.intersect=function(s){return Tn.rect(e,s)},r},"labelRect");o(_9,"applyNodePropertyBorders");aSe=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,V.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(ra(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(yr(de().flowchart.htmlLabels)){let y=h.children[0],v=$e(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}V.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(ra(d.join?d.join("
    "):d,e.labelStyle,!0,!0));if(yr(de().flowchart.htmlLabels)){let y=m.children[0],v=$e(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return $e(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),$e(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return kn(e,s),e.intersect=function(l){return Tn.rect(e,l)},r},"stadium"),oSe=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ti(t,e,no(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),V.info("Circle main"),kn(e,a),e.intersect=function(s){return V.info("Circle intersect",e,n.width/2+i,s),Tn.circle(e,n.width/2+i,s)},r},"circle"),lSe=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ti(t,e,no(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),V.info("DoubleCircle main"),kn(e,l),e.intersect=function(h){return V.info("DoubleCircle intersect",e,n.width/2+i+a,h),Tn.circle(e,n.width/2+i+a,h)},r},"doublecircle"),cSe=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ti(t,e,no(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=_l(r,i,a,s);return l.attr("style",e.style),kn(e,l),e.intersect=function(u){return Tn.polygon(e,s,u)},r},"subroutine"),uSe=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),kn(e,n),e.intersect=function(i){return Tn.circle(e,7,i)},r},"start"),Oj=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return kn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return Tn.rect(e,l)},n},"forkJoin"),hSe=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),kn(e,i),e.intersect=function(a){return Tn.circle(e,7,a)},r},"end"),fSe=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(ra(y,e.labelStyle,!0,!0)),x=v.getBBox();if(yr(de().flowchart.htmlLabels)){let A=v.children[0],L=$e(v);x=A.getBoundingClientRect(),L.attr("width",x.width),L.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(de().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let w=p.node().appendChild(ra(b,e.labelStyle,!0,!0));$e(w).attr("class","classTitle");let S=w.getBBox();if(yr(de().flowchart.htmlLabels)){let A=w.children[0],L=$e(w);S=A.getBoundingClientRect(),L.attr("width",S.width),L.attr("height",S.height)}d+=S.height+n,S.width>f&&(f=S.width);let T=[];e.classData.members.forEach(A=>{let L=A.getDisplayDetails(),M=L.displayText;de().flowchart.htmlLabels&&(M=M.replace(//g,">"));let N=p.node().appendChild(ra(M,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0)),k=N.getBBox();if(yr(de().flowchart.htmlLabels)){let I=N.children[0],C=$e(N);k=I.getBoundingClientRect(),C.attr("width",k.width),C.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(N)}),d+=i;let E=[];if(e.classData.methods.forEach(A=>{let L=A.getDisplayDetails(),M=L.displayText;de().flowchart.htmlLabels&&(M=M.replace(//g,">"));let N=p.node().appendChild(ra(M,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0)),k=N.getBBox();if(yr(de().flowchart.htmlLabels)){let I=N.children[0],C=$e(N);k=I.getBoundingClientRect(),C.attr("width",k.width),C.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(N)}),d+=i,g){let A=(f-x.width)/2;$e(v).attr("transform","translate( "+(-1*f/2+A)+", "+-1*d/2+")"),m=x.height+n}let _=(f-S.width)/2;return $e(w).attr("transform","translate( "+(-1*f/2+_)+", "+(-1*d/2+m)+")"),m+=S.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(A=>{$e(A).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let L=A?.getBBox();m+=(L?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(A=>{$e(A).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let L=A?.getBBox();m+=(L?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),kn(e,l),e.intersect=function(A){return Tn.rect(e,A)},s},"class_box"),Pj={rhombus:Ij,composite:nSe,question:Ij,rect:rSe,labelRect:iSe,rectWithTitle:aSe,choice:W7e,circle:oSe,doublecircle:lSe,stadium:sSe,hexagon:q7e,block_arrow:X7e,rect_left_inv_arrow:j7e,lean_right:K7e,lean_left:Q7e,trapezoid:Z7e,inv_trapezoid:J7e,rect_right_inv_arrow:eSe,cylinder:tSe,start:uSe,end:hSe,note:Rj,subroutine:cSe,fork:Oj,join:Oj,class_box:fSe},dm={},pm=o(async(t,e,r)=>{let n,i;if(e.link){let a;de().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await Pj[e.shape](n,e,r)}else i=await Pj[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),dm[e.id]=n,e.haveCallback&&dm[e.id].attr("class",dm[e.id].attr("class")+" clickable"),n},"insertNode"),Bj=o((t,e)=>{dm[e.id]=t},"setNodeElem"),Fj=o(()=>{dm={}},"clear"),wv=o(t=>{let e=dm[t.id];V.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var I5,L9=R(()=>{"use strict";Zt();M5();I5=o((t,e)=>{let r;return e==="sandbox"&&(r=$e("#i"+t)),(e==="sandbox"?$e(r.nodes()[0].contentDocument.body):$e("body")).select(`[id="${t}"]`)},"getDiagramElement")});var io,_d=R(()=>{"use strict";io=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});function D9(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function dSe(t,e){return t[0]===e[0]&&t[1]===e[1]}function pSe(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)D9(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];dSe(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;wb.yminw.ymin?1:b.xw.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;wv);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let S=y[b].edge,T=y[w].edge;m.push([[Math.round(S.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)D9(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),D9(p,f,d)})(u,l,-i)}return u}function Cv(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),pSe(t,i,n,a||1)}function U5(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function N9(t,e){return t.type===e}function W9(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:mSe,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:R9,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:zj,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!N9(a,zj);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return W9("M0,0"+t);i++,s=O5[a.text],n=a.text}else N9(a,R9)?s=O5[n]:(i++,s=O5[a.text],n=a.text);if(!(i+sf%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function Xj(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(jj(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function Tv(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function jj(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=Tv(t,e,-f),[r,n]=Tv(r,n,-f);let I=(t-r)/2,C=(e-n)/2,O=I*I/(i*i)+C*C/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let D=i*i,P=a*a,F=D*P-D*C*C-P*I*I,B=D*C*C+P*I*I,$=(l===u?-1:1)*Math.sqrt(Math.abs(F/B));y=$*i*C/a+(t+r)/2,v=$*-a*I/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let I=g,C=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=jj(r=y+i*Math.cos(g),n=v+a*Math.sin(g),C,O,i,a,s,0,u,[g,I,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),S=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),_=4/3*i*E,A=4/3*a*E,L=[t,e],M=[t+_*w,e-A*b],N=[r+_*T,n-A*S],k=[r,n];if(M[0]=2*L[0]-M[0],M[1]=2*L[1]-M[1],h)return[M,N,k].concat(p);{p=[M,N,k].concat(p);let I=[];for(let C=0;C2){let i=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=Yj(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=Yj(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Vh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Vh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function Vj(t,e){let r=Xj(qj(W9(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Vh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...vSe(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Vh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function M9(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+Yt(i,e),n[0][1]+Yt(i,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*Zj(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=Yt(m,i,h),g=Yt(g,i,h);let y=[],v=o(()=>Yt(d,i,h),"M"),x=o(()=>Yt(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:Yt(f,i,h)),e+(b?0:Yt(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function P5(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+Yt(e,r),t[0][1]+Yt(e,r)]),n.push([t[0][0]+Yt(e,r),t[0][1]+Yt(e,r)]);for(let i=1;i3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Ld(u,h,.5),m=Ld(h,f,.5),g=Ld(f,d,.5),y=Ld(p,m,.5),v=Ld(m,g,.5),x=Ld(y,v,.5);U9([u,p,y,x],0,r,i),U9([x,v,g,d],0,r,i)}var a,s;return i}function bSe(t,e){return V5(t,0,t.length,e)}function V5(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>n?(V5(t,e,h+1,n,a),V5(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function I9(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a0?V5(n,0,n.length,r):n}var Ev,O9,P9,B9,F9,z9,Cs,G9,mSe,R9,zj,O5,gSe,ao,gm,H9,B5,Y9,Jt,ti=R(()=>{"use strict";o(D9,"t");o(dSe,"e");o(pSe,"s");o(Cv,"n");Ev=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=Cv(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(U5,"a");O9=class extends Ev{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=Cv(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)U5([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},P9=class extends Ev{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},B9=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=Cv(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=U5(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=U5(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=U5(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(_=0,A=2*Math.PI);let L=(A-_)/b.curveStepCount,M=[];for(let N=_;N<=A;N+=L)M.push([w+T*Math.cos(N),S+E*Math.sin(N)]);return M.push([w+T*Math.cos(A),S+E*Math.sin(A)]),M.push([w,S]),mm([M],b)}(e,r,n,i,a,s,h));return h.stroke!==ao&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=Gj(e,n);if(n.fill&&n.fill!==ao)if(n.fillStyle==="solid"){let s=Gj(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...I9(Wj([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...I9(Wj(h),10,(1+n.roughness)/2))}s.length&&i.push(mm([s],n))}return n.stroke!==ao&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=F5(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(M9([e],n)):i.push(mm([e],n))),n.stroke!==ao&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==ao,s=n.stroke!==ao,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=Xj(qj(W9(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...I9(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let _=y.length?y[y.length-1]:v;x.push([_[0],_[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let S=[];for(let T of g){let E=bSe(T,p);E.length&&S.push(E)}return S}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=Vj(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=Vj(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(M9(u,n));else i.push(mm(u,n));return s&&(l?u.forEach(f=>{i.push(F5(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:ao};break;case"fillPath":s={d:this.opsToPath(a),stroke:ao,strokeWidth:0,fill:n.fill||ao};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||ao,strokeWidth:n,fill:ao}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},H9=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new gm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},B5="http://www.w3.org/2000/svg",Y9=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new gm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(B5,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(B5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(B5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(B5,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Jt={canvas:o((t,e)=>new H9(t,e),"canvas"),svg:o((t,e)=>new Y9(t,e),"svg"),generator:o(t=>new gm(t),"generator"),newSeed:o(()=>gm.newSeed(),"newSeed")}});var wSe,Dd,q9=R(()=>{"use strict";wSe=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Dd=wSe});function TSe(t,e){e&&t.attr("style",e)}async function kSe(t){let e=$e(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&Ni(t.label)&&(n=await yh(t.label.replace(We.lineBreakRegex,` +`),de()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),TSe(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var ESe,gc,H5=R(()=>{"use strict";Zt();ut();_t();rr();xr();o(TSe,"applyStyle");o(kSe,"addHtmlLabel");ESe=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),yr(de().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),V.info("vertexText"+i);let a={isNode:n,label:to(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:e&&e.replace("fill:","color:")};return await kSe(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gc=ESe});var _u,Sv=R(()=>{"use strict";_u=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});var Lu,Jj,CSe,Br,Fr,ki=R(()=>{"use strict";_t();Lu=o(t=>{let{handDrawnSeed:e}=de();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),Jj=o(t=>{let e=CSe([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),CSe=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),Br=o(t=>{let{stylesArray:e}=Jj(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];l==="color"||l==="font-size"||l==="font-family"||l==="font-weight"||l==="font-style"||l==="text-decoration"||l==="text-align"||l==="text-transform"||l==="line-height"||l==="letter-spacing"||l==="word-spacing"||l==="text-shadow"||l==="text-overflow"||l==="white-space"||l==="word-wrap"||l==="word-break"||l==="overflow-wrap"||l==="hyphens"?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Fr=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=de(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=Jj(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,stroke:s.get("stroke")||i,seed:n,strokeWidth:1.3},e)},"userNodeOverrides")});var eK,SSe,ASe,_Se,LSe,DSe,tK,Y5,rK,X9=R(()=>{"use strict";_t();rr();ut();_d();Zt();ti();Al();q9();H5();Sv();ki();eK=o(async(t,e)=>{V.info("Creating subgraph rect for ",e.id,e);let r=de(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Br(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=yr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await ta(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(yr(r.flowchart.htmlLabels)){let _=g.children[0],A=$e(g);y=_.getBoundingClientRect(),A.attr("width",y.width),A.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;V.trace("Data ",e,JSON.stringify(e));let S;if(e.look==="handDrawn"){let _=Jt.svg(d),A=Fr(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),L=_.path(_u(b,w,v,x,0),A);S=d.insert(()=>(V.debug("Rough node insert CXC",L),L),":first-child"),S.select("path:nth-child(2)").attr("style",h.join(";")),S.select("path").attr("style",f.join(";").replace("fill","stroke"))}else S=d.insert("rect",":first-child"),S.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=io(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let _=m.select("span");_&&_.attr("style",l)}let E=S.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(_){return Dd(e,_)},{cluster:d,labelBBox:y}},"rect"),SSe=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Dd(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),ASe=o(async(t,e)=>{let r=de(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await gc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(yr(r.flowchart.htmlLabels)){let L=m.children[0],M=$e(m);g=L.getBoundingClientRect(),M.attr("width",g.width),M.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,S=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,_;if(e.look==="handDrawn"){let L=e.cssClasses.includes("statediagram-cluster-alt"),M=Jt.svg(h),N=e.rx||e.ry?M.path(_u(S,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):M.rectangle(S,T,x,b,{seed:i});_=h.insert(()=>N,":first-child");let k=M.rectangle(S,E,x,w,{fill:L?a:s,fillStyle:L?"hachure":"solid",stroke:u,seed:i});_=h.insert(()=>N,":first-child"),p=h.insert(()=>k)}else _=f.insert("rect",":first-child"),_.attr("class","outer").attr("x",S).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",S).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(yr(r.flowchart.htmlLabels)?0:3)})`);let A=_.node().getBBox();return e.height=A.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(L){return Dd(e,L)},{cluster:h,labelBBox:g}},"roundedWithTitle"),_Se=o((t,e)=>{let r=de(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Jt.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Dd(e,y)},{cluster:s,labelBBox:{}}},"divider"),LSe=eK,DSe={rect:eK,squareRect:LSe,roundedWithTitle:ASe,noteGroup:SSe,divider:_Se},tK=new Map,Y5=o(async(t,e)=>{let r=e.shape||"rect",n=await DSe[r](t,e);return tK.set(e.id,n),n},"insertCluster"),rK=o(()=>{tK=new Map},"clear")});function W5(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=q5(t),e=q5(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var Uh,q5,X5,j9=R(()=>{"use strict";Uh={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(W5,"calculateDeltaAndAngle");q5=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),X5=o(t=>({x:o(function(e,r,n){let i=0;if(r===0&&Object.hasOwn(Uh,t.arrowTypeStart)){let{angle:a,deltaX:s}=W5(n[0],n[1]);i=Uh[t.arrowTypeStart]*Math.cos(a)*(s>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(Uh,t.arrowTypeEnd)){let{angle:a,deltaX:s}=W5(n[n.length-1],n[n.length-2]);i=Uh[t.arrowTypeEnd]*Math.cos(a)*(s>=0?1:-1)}return q5(e).x+i},"x"),y:o(function(e,r,n){let i=0;if(r===0&&Object.hasOwn(Uh,t.arrowTypeStart)){let{angle:a,deltaY:s}=W5(n[0],n[1]);i=Uh[t.arrowTypeStart]*Math.abs(Math.sin(a))*(s>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(Uh,t.arrowTypeEnd)){let{angle:a,deltaY:s}=W5(n[n.length-1],n[n.length-2]);i=Uh[t.arrowTypeEnd]*Math.abs(Math.sin(a))*(s>=0?1:-1)}return q5(e).y+i},"y")}),"getLineFunctionsWithOffset")});var iK,RSe,nK,aK=R(()=>{"use strict";ut();iK=o((t,e,r,n,i)=>{e.arrowTypeStart&&nK(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&nK(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),RSe={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},nK=o((t,e,r,n,i,a)=>{let s=RSe[r];if(!s){V.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function j5(t,e){de().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function ISe(t){let e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var K5,da,lK,Av,Q5,Z5,NSe,MSe,sK,oK,OSe,J5,K9=R(()=>{"use strict";_t();rr();ut();Al();xr();j9();_d();Zt();ti();H5();aK();K5=new Map,da=new Map,lK=o(()=>{K5.clear(),da.clear()},"clear"),Av=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),Q5=o(async(t,e)=>{let r=yr(de().flowchart.htmlLabels),n=await ta(t,e.label,{style:Av(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});V.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=$e(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),K5.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await gc(e.startLabelLeft,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),da.get(e.id)||da.set(e.id,{}),da.get(e.id).startLeft=h,j5(l,e.startLabelLeft)}if(e.startLabelRight){let u=await gc(e.startLabelRight,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),da.get(e.id)||da.set(e.id,{}),da.get(e.id).startRight=h,j5(l,e.startLabelRight)}if(e.endLabelLeft){let u=await gc(e.endLabelLeft,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),da.get(e.id)||da.set(e.id,{}),da.get(e.id).endLeft=h,j5(l,e.endLabelLeft)}if(e.endLabelRight){let u=await gc(e.endLabelRight,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),da.get(e.id)||da.set(e.id,{}),da.get(e.id).endRight=h,j5(l,e.endLabelRight)}return n},"insertEdgeLabel");o(j5,"setTerminalWidth");Z5=o((t,e)=>{V.debug("Moving label abc88 ",t.id,t.label,K5.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=de(),{subGraphTitleTotalMargin:i}=io(n);if(t.label){let a=K5.get(t.id),s=t.x,l=t.y;if(r){let u=Lt.calcLabelPosition(r);V.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=da.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=da.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=da.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=da.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),NSe=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),MSe=o((t,e,r)=>{V.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{V.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(V.info("abc88 checking point",a,e),!NSe(e,a)&&!i){let s=MSe(e,n,a);V.debug("abc88 inside",a,n,s),V.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?V.warn("abc88 no intersect",s,r):r.push(s),i=!0}else V.warn("abc88 outside",a,n),n=a,i||r.push(a)}),V.debug("returning points",r),r},"cutPathAtIntersect");o(ISe,"extractCornerPoints");oK=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),OSe=o(function(t){let{cornerPointPositions:e}=ISe(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){V.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else V.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),J5=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=de(),u=e.points,h=!1,f=i;var d=a;d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),V.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(V.info("to cluster abc88",r.get(e.toCluster)),u=sK(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(V.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=sK(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let p=u.filter(A=>!Number.isNaN(A.y));p=OSe(p);let m=p[p.length-1];if(p.length>1){m=p[p.length-1];let A=p[p.length-2],L=(m.x-A.x)/2,M=(m.y-A.y)/2,N={x:A.x+L,y:A.y+M};p.splice(-1,0,N)}let g=vs;e.curve&&(g=e.curve);let{x:y,y:v}=X5(e),x=ha().x(y).y(v).curve(g),b;switch(e.thickness){case"normal":b="edge-thickness-normal";break;case"thick":b="edge-thickness-thick";break;case"invisible":b="edge-thickness-invisible";break;default:b="edge-thickness-normal"}switch(e.pattern){case"solid":b+=" edge-pattern-solid";break;case"dotted":b+=" edge-pattern-dotted";break;case"dashed":b+=" edge-pattern-dashed";break;default:b+=" edge-pattern-solid"}let w,S=x(p),T=Array.isArray(e.style)?e.style:[e.style];if(e.look==="handDrawn"){let A=Jt.svg(t);Object.assign([],p);let L=A.path(S,{roughness:.3,seed:l});b+=" transition",w=$e(L).select("path").attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",T?T.reduce((N,k)=>N+";"+k,""):"");let M=w.attr("d");w.attr("d",M),t.node().appendChild(w.node())}else w=t.append("path").attr("d",S).attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",T?T.reduce((A,L)=>A+";"+L,""):"");let E="";(de().flowchart.arrowMarkerAbsolute||de().state.arrowMarkerAbsolute)&&(E=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,E=E.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),V.info("arrowTypeStart",e.arrowTypeStart),V.info("arrowTypeEnd",e.arrowTypeEnd),iK(w,e,E,s,n);let _={};return h&&(_.updatedPath=u),_.originalPath=e.points,_},"insertEdge")});var PSe,BSe,FSe,zSe,GSe,$Se,VSe,USe,HSe,YSe,WSe,ew,Q9=R(()=>{"use strict";ut();PSe=o((t,e,r,n)=>{e.forEach(i=>{WSe[i](t,r,n)})},"insertMarkers"),BSe=o((t,e,r)=>{V.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),FSe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),zSe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),GSe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),$Se=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),VSe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),USe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),HSe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),YSe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),WSe={extension:BSe,composition:FSe,aggregation:zSe,dependency:GSe,lollipop:$Se,point:VSe,circle:USe,cross:HSe,barb:YSe},ew=PSe});var zr,ar,En,ri=R(()=>{"use strict";Al();_t();Zt();rr();xr();zr=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||yr(de().flowchart.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",e.labelStyle),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u;u=await ta(s,qr(to(l),de()),{useHtmlLabels:i,width:e.width||de().flowchart.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle});let h=u.getBBox(),f=e.padding/2;if(yr(de().flowchart.htmlLabels)){let d=u.children[0],p=$e(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=de().fontSize?de().fontSize:window.getComputedStyle(document.body).fontSize,S=parseInt(b,10)*5+"px";y.style.minWidth=S,y.style.maxWidth=S}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),ar=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),En=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses")});function qSe(t,e){return t.intersect(e)}var cK,uK=R(()=>{"use strict";o(qSe,"intersectNode");cK=qSe});function XSe(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(XSe,"intersectEllipse");tw=XSe});function jSe(t,e,r){return tw(t,e,e,r)}var hK,fK=R(()=>{"use strict";Z9();o(jSe,"intersectCircle");hK=jSe});function KSe(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&dK(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&dK(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function dK(t,e){return t*e>0}var pK,mK=R(()=>{"use strict";o(KSe,"intersectLine");o(dK,"sameSign");pK=KSe});function QSe(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";mK();o(QSe,"intersectPolygon");gK=QSe});var sr,hi=R(()=>{"use strict";uK();fK();Z9();yK();q9();sr={node:cK,circle:hK,ellipse:tw,polygon:gK,rect:Dd}});var Rd,_v=R(()=>{"use strict";ri();hi();Sv();ki();ti();Rd=o(async(t,e,r)=>{let{labelStyles:n,nodeStyles:i}=Br(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await zr(t,e,En(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Jt.svg(a),v=Fr(e,{}),x=p||m?y.path(_u(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",g)}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",p).attr("data-id","abc").attr("data-et","node").attr("ry",m).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return ar(e,d),e.intersect=function(y){return sr.rect(e,y)},a},"drawRect")});var vK,xK=R(()=>{"use strict";_v();vK=o(async(t,e)=>Rd(t,e,{rx:5,ry:5,classes:"flowchart-node"}),"state")});var bK,wK=R(()=>{"use strict";_v();bK=o(async(t,e)=>{let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Rd(t,e,r)},"roundedRect")});var TK,kK=R(()=>{"use strict";_v();TK=o(async(t,e)=>{let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Rd(t,e,r)},"squareRect")});var EK,CK=R(()=>{"use strict";ri();hi();ti();ki();_t();EK=o((t,e)=>{let{themeVariables:r}=de(),{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Jt.svg(i).circle(0,0,14,Lu(n));a=i.insert(()=>l)}else a=i.insert("circle",":first-child");return a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ar(e,a),e.intersect=function(s){return sr.circle(e,7,s)},i},"stateStart")});var SK,AK=R(()=>{"use strict";ri();hi();ti();ki();_t();SK=o((t,e)=>{let{themeVariables:r}=de(),{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a,s;if(e.look==="handDrawn"){let l=Jt.svg(i),u=l.circle(0,0,14,{...Lu(n),roughness:.5}),h=l.circle(0,0,5,{...Lu(n),fillStyle:"solid"});a=i.insert(()=>u),s=i.insert(()=>h)}else s=i.insert("circle",":first-child"),a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),s.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10);return ar(e,a),e.intersect=function(l){return sr.circle(e,7,l)},i},"stateEnd")});var J9,_K=R(()=>{"use strict";ri();hi();ti();ki();_t();J9=o((t,e,r)=>{let{themeVariables:n}=de(),{lineColor:i}=n,a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),s=70,l=10;r==="LR"&&(s=10,l=70);let u=-1*s/2,h=-1*l/2,f;if(e.look==="handDrawn"){let y=Jt.svg(a).rectangle(u,h,s,l,Lu(i));f=a.insert(()=>y)}else f=a.append("rect").attr("x",u).attr("y",h).attr("width",s).attr("height",l).attr("class","fork-join");ar(e,f);let d=0,p=0,m=10;return e.height&&(d=e.height),e.width&&(p=e.width),e.padding&&(m=e.padding),e.height=d+m/2,e.width=p+m/2,e.intersect=function(g){return sr.rect(e,g)},a},"forkJoin")});var LK,DK=R(()=>{"use strict";hi();ti();ki();_t();LK=o((t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{themeVariables:i}=de(),{lineColor:a}=i,s=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),l=28,u=[{x:0,y:l/2},{x:l/2,y:0},{x:0,y:-l/2},{x:-l/2,y:0}],h;if(e.look==="handDrawn"){let f=Jt.svg(s),d=u.map(function(m){return[m.x,m.y]}),p=f.polygon(d,Lu(a));h=s.insert(()=>p)}else h=s.insert("polygon",":first-child").attr("points",u.map(function(f){return f.x+","+f.y}).join(" "));return h.attr("class","state-start").attr("r",7).attr("width",28).attr("height",28).attr("style",n),e.width=28,e.height=28,e.intersect=function(f){return sr.circle(e,14,f)},s},"choice")});var RK,NK=R(()=>{"use strict";ut();ri();hi();_t();ti();RK=o(async(t,e)=>{let{themeVariables:r,handDrawnSeed:n}=de(),{noteBorderColor:i,noteBkgColor:a}=r;e.useHtmlLabels||(e.centerLabel=!0);let{shapeSvg:l,bbox:u}=await zr(t,e,"node "+e.cssClasses);V.info("Classes = ",e.cssClasses);let{cssStyles:h}=e,f,d=u.width+e.padding,p=u.height+e.padding,m=-d/2,g=-p/2;if(e.look==="handDrawn"){let v=Jt.svg(l).rectangle(m,g,d,p,{roughness:.7,fill:a,fillWeight:3,seed:n,stroke:i});f=l.insert(()=>v,":first-child"),f.attr("class","basic label-container").attr("style",h)}else f=l.insert("rect",":first-child"),f.attr("rx",e.rx).attr("ry",e.ry).attr("x",m).attr("y",g).attr("width",d).attr("height",p);return ar(e,f),e.intersect=function(y){return sr.rect(e,y)},l},"note")});var MK,IK=R(()=>{"use strict";ri();hi();ki();ti();Sv();MK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Jt.svg(i),d=Fr(e,{}),p=_u(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",h)}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return ar(e,u),e.intersect=function(f){return sr.rect(e,f)},i},"stadium")});var OK,PK=R(()=>{"use strict";Zt();rr();ri();H5();hi();ki();ti();_t();Sv();ut();OK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await gc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(yr(de()?.flowchart?.htmlLabels)){let A=f.children[0],L=$e(f);d=A.getBoundingClientRect(),L.attr("width",d.width),L.attr("height",d.height)}V.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await gc(p.join?p.join("
    "):p,e.labelStyle,!0,!0)),y=g.children[0],v=$e(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;$e(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),$e(f).attr("transform","translate( "+(d.width(V.debug("Rough node insert CXC",M),N),":first-child"),E=a.insert(()=>(V.debug("Rough node insert CXC",M),M),":first-child")}else E=s.insert("rect",":first-child"),_=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),_.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return ar(e,E),e.intersect=function(A){return sr.rect(e,A)},a},"rectWithTitle")});function Ma(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Du=R(()=>{"use strict";o(Ma,"insertPolygonShape")});var BK,FK=R(()=>{"use strict";ri();hi();ki();ti();Du();BK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Jt.svg(i),m=Fr(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",b),ar(e,x)}else{let p=Ma(i,l,u,d);n&&p.attr("style",n),ar(e,p)}return e.intersect=function(p){return sr.polygon(e,d,p)},i},"subroutine")});var ZSe,JSe,eAe,zK,GK=R(()=>{"use strict";ri();hi();ki();ti();ZSe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),JSe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),eAe=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD"),zK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.width+e.padding,l=s/2,u=l/(2.5+s/50),h=a.height+u+e.padding,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Jt.svg(i),m=JSe(0,0,s,h,l,u),g=eAe(0,u,s,h,l,u),y=p.path(m,Fr(e,{})),v=p.path(g,Fr(e,{fill:"none"}));f=i.insert(()=>v,":first-child"),f=i.insert(()=>y,":first-child"),f.attr("class","basic label-container"),d&&f.attr("style",d)}else{let p=ZSe(0,0,s,h,l,u);f=i.insert("path",":first-child").attr("d",p).attr("class","basic label-container").attr("style",d).attr("style",n)}return f.attr("label-offset-y",u),f.attr("transform",`translate(${-s/2}, ${-(h/2+u)})`),ar(e,f),e.intersect=function(p){let m=sr.rect(e,p),g=m.x-(e.x??0);if(l!=0&&(Math.abs(g)<(e.width??0)/2||Math.abs(g)==(e.width??0)/2&&Math.abs(m.y-(e.y??0))>(e.height??0)/2-u)){let y=u*u*(1-g*g/(l*l));y>0&&(y=Math.sqrt(y)),y=u-y,p.y-(e.y??0)>0&&(y=-y),m.y+=y}return m},i},"cylinder")});var $K,VK=R(()=>{"use strict";ut();ri();hi();ki();ti();$K=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await zr(t,e,En(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Jt.svg(i),d=Fr(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",h)}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return ar(e,u),e.intersect=function(f){return V.info("Circle intersect",e,l,f),sr.circle(e,l,f)},i},"circle")});var UK,HK=R(()=>{"use strict";ut();ri();hi();ki();ti();UK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await zr(t,e,En(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Jt.svg(i),m=Fr(e,{roughness:.2,strokeWidth:2.5}),g=Fr(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",e.cssClasses).attr("style",d),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return ar(e,f),e.intersect=function(p){return V.info("DoubleCircle intersect",e,u,p),sr.circle(e,u,p)},i},"doublecircle")});var tAe,YK,WK=R(()=>{"use strict";ri();hi();ki();ti();Du();tAe=o((t,e,r,n)=>[`M${t-n/2},${e}`,`L${t+r},${e}`,`L${t+r},${e-n}`,`L${t-n/2},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createPolygonPathD"),YK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-l/2,y:0},{x:s,y:0},{x:s,y:-l},{x:-l/2,y:-l},{x:0,y:-l/2}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Jt.svg(i),p=Fr(e,{}),m=tAe(0,0,s,l),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s+l,e.height=l,ar(e,h),e.intersect=function(d){return sr.polygon(e,u,d)},i},"rect_left_inv_arrow")});var rAe,qK,XK=R(()=>{"use strict";ut();ri();hi();ki();ti();Du();rAe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD"),qK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Jt.svg(i),m=Fr(e,{}),g=rAe(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=Ma(i,u,u,h);return n&&f.attr("style",n),ar(e,f),e.intersect=function(p){return V.debug(`APA12 Intersect called SPLIT +point:`,p,` +node: +`,e,` +res:`,sr.polygon(e,h,p)),sr.polygon(e,h,p)},i},"question")});var nAe,jK,KK=R(()=>{"use strict";ri();hi();ki();ti();Du();nAe=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD"),jK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Jt.svg(i),g=Fr(e,{}),y=nAe(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=Ma(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,ar(e,d),e.intersect=function(m){return sr.polygon(e,f,m)},i},"hexagon")});var iAe,QK,ZK=R(()=>{"use strict";ri();hi();ki();ti();Du();iAe=o((t,e,r,n)=>[`M${t-2*n/6},${e}`,`L${t+r-n/6},${e}`,`L${t+r+2*n/6},${e-n}`,`L${t+n/6},${e-n}`,"Z"].join(" "),"createLeanRightPathD"),QK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-2*l/6,y:0},{x:s-l/6,y:0},{x:s+2*l/6,y:-l},{x:l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Jt.svg(i),p=Fr(e,{}),m=iAe(0,0,s,l),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,ar(e,h),e.intersect=function(d){return sr.polygon(e,u,d)},i},"lean_right")});var aAe,JK,eQ=R(()=>{"use strict";ri();hi();ki();ti();Du();aAe=o((t,e,r,n)=>[`M${t+2*n/6},${e}`,`L${t+r+n/6},${e}`,`L${t+r-2*n/6},${e-n}`,`L${t-n/6},${e-n}`,"Z"].join(" "),"createLeanLeftPathD"),JK=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:2*l/6,y:0},{x:s+l/6,y:0},{x:s-2*l/6,y:-l},{x:-l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Jt.svg(i),p=Fr(e,{}),m=aAe(0,0,s,l),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,ar(e,h),e.intersect=function(d){return sr.polygon(e,u,d)},i},"lean_left")});var sAe,tQ,rQ=R(()=>{"use strict";ri();hi();ki();ti();Du();sAe=o((t,e,r,n)=>[`M${t-2*n/6},${e}`,`L${t+r+2*n/6},${e}`,`L${t+r-n/6},${e-n}`,`L${t+n/6},${e-n}`,"Z"].join(" "),"createTrapezoidPathD"),tQ=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-2*l/6,y:0},{x:s+2*l/6,y:0},{x:s-l/6,y:-l},{x:l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Jt.svg(i),p=Fr(e,{}),m=sAe(0,0,s,l),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,ar(e,h),e.intersect=function(d){return sr.polygon(e,u,d)},i},"trapezoid")});var oAe,nQ,iQ=R(()=>{"use strict";ri();hi();ki();ti();Du();oAe=o((t,e,r,n)=>[`M${t+n/6},${e}`,`L${t+r-n/6},${e}`,`L${t+r+2*n/6},${e-n}`,`L${t-2*n/6},${e-n}`,"Z"].join(" "),"createInvertedTrapezoidPathD"),nQ=o(async(t,e)=>{let{labelStyles:r,nodeStyles:n}=Br(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await zr(t,e,En(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:l/6,y:0},{x:s-l/6,y:0},{x:s+2*l/6,y:-l},{x:-2*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Jt.svg(i),p=Fr(e,{}),m=oAe(0,0,s,l),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,ar(e,h),e.intersect=function(d){return sr.polygon(e,u,d)},i},"inv_trapezoid")});var aQ,sQ=R(()=>{"use strict";_v();ri();hi();aQ=o(async(t,e)=>{let{shapeSvg:r}=await zr(t,e,"label"),n=r.insert("rect",":first-child");return n.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),ar(e,n),e.intersect=function(s){return sr.rect(e,s)},r},"labelRect")});var oQ,ym,rw,lQ,cQ,eL,tL=R(()=>{"use strict";ut();xK();wK();kK();CK();AK();_K();DK();NK();IK();PK();_t();FK();GK();VK();HK();WK();XK();KK();ZK();eQ();rQ();iQ();sQ();oQ={state:vK,stateStart:EK,stateEnd:SK,fork:J9,join:J9,choice:LK,note:RK,roundedRect:bK,rectWithTitle:OK,squareRect:TK,stadium:MK,subroutine:BK,cylinder:zK,circle:$K,doublecircle:UK,odd:YK,diamond:qK,hexagon:jK,lean_right:QK,lean_left:JK,trapezoid:tQ,inv_trapezoid:nQ,labelRect:aQ},ym=new Map,rw=o(async(t,e,r)=>{let n,i;if(e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect"),e.link){let a;de().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await oQ[e.shape](n,e,r)}else i=await oQ[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),ym.set(e.id,n),e.haveCallback&&ym.get(e.id).attr("class",ym.get(e.id).attr("class")+" clickable"),n},"insertNode"),lQ=o((t,e)=>{ym.set(e.id,t)},"setNodeElem"),cQ=o(()=>{ym.clear()},"clear"),eL=o(t=>{let e=ym.get(t.id);V.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var uQ,hQ=R(()=>{"use strict";qs();rr();ut();X9();K9();Q9();tL();ri();xr();uQ={common:We,getConfig:Or,insertCluster:Y5,insertEdge:J5,insertEdgeLabel:Q5,insertMarkers:ew,insertNode:rw,interpolateToCurve:om,labelHelper:zr,log:V,positionEdgeLabel:Z5}});function cAe(t){return typeof t=="symbol"||Wn(t)&&fa(t)==lAe}var lAe,so,Nd=R(()=>{"use strict";wu();Mo();lAe="[object Symbol]";o(cAe,"isSymbol");so=cAe});function uAe(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r{"use strict";o(uAe,"arrayMap");Ss=uAe});function pQ(t){if(typeof t=="string")return t;if(wt(t))return Ss(t,pQ)+"";if(so(t))return dQ?dQ.call(t):"";var e=t+"";return e=="0"&&1/t==-hAe?"-0":e}var hAe,fQ,dQ,mQ,gQ=R(()=>{"use strict";vd();Md();Bn();Nd();hAe=1/0,fQ=Ji?Ji.prototype:void 0,dQ=fQ?fQ.toString:void 0;o(pQ,"baseToString");mQ=pQ});function dAe(t){for(var e=t.length;e--&&fAe.test(t.charAt(e)););return e}var fAe,yQ,vQ=R(()=>{"use strict";fAe=/\s/;o(dAe,"trimmedEndIndex");yQ=dAe});function mAe(t){return t&&t.slice(0,yQ(t)+1).replace(pAe,"")}var pAe,xQ,bQ=R(()=>{"use strict";vQ();pAe=/^\s+/;o(mAe,"baseTrim");xQ=mAe});function bAe(t){if(typeof t=="number")return t;if(so(t))return wQ;if(pn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=pn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=xQ(t);var r=yAe.test(t);return r||vAe.test(t)?xAe(t.slice(2),r?2:8):gAe.test(t)?wQ:+t}var wQ,gAe,yAe,vAe,xAe,TQ,kQ=R(()=>{"use strict";bQ();Js();Nd();wQ=NaN,gAe=/^[-+]0x[0-9a-f]+$/i,yAe=/^0b[01]+$/i,vAe=/^0o[0-7]+$/i,xAe=parseInt;o(bAe,"toNumber");TQ=bAe});function TAe(t){if(!t)return t===0?t:0;if(t=TQ(t),t===EQ||t===-EQ){var e=t<0?-1:1;return e*wAe}return t===t?t:0}var EQ,wAe,vm,rL=R(()=>{"use strict";kQ();EQ=1/0,wAe=17976931348623157e292;o(TAe,"toFinite");vm=TAe});function kAe(t){var e=vm(t),r=e%1;return e===e?r?e-r:e:0}var yc,xm=R(()=>{"use strict";rL();o(kAe,"toInteger");yc=kAe});var EAe,nw,CQ=R(()=>{"use strict";Nh();Ro();EAe=xs(Jn,"WeakMap"),nw=EAe});function CAe(){}var qn,nL=R(()=>{"use strict";o(CAe,"noop");qn=CAe});function SAe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(SAe,"arrayEach");iw=SAe});function AAe(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a{"use strict";o(AAe,"baseFindIndex");aw=AAe});function _Ae(t){return t!==t}var SQ,AQ=R(()=>{"use strict";o(_Ae,"baseIsNaN");SQ=_Ae});function LAe(t,e,r){for(var n=r-1,i=t.length;++n{"use strict";o(LAe,"strictIndexOf");_Q=LAe});function DAe(t,e,r){return e===e?_Q(t,e,r):aw(t,SQ,r)}var bm,sw=R(()=>{"use strict";aL();AQ();LQ();o(DAe,"baseIndexOf");bm=DAe});function RAe(t,e){var r=t==null?0:t.length;return!!r&&bm(t,e,0)>-1}var ow,sL=R(()=>{"use strict";sw();o(RAe,"arrayIncludes");ow=RAe});var NAe,DQ,RQ=R(()=>{"use strict";F_();NAe=s5(Object.keys,Object),DQ=NAe});function OAe(t){if(!fc(t))return DQ(t);var e=[];for(var r in Object(t))IAe.call(t,r)&&r!="constructor"&&e.push(r);return e}var MAe,IAe,wm,lw=R(()=>{"use strict";tm();RQ();MAe=Object.prototype,IAe=MAe.hasOwnProperty;o(OAe,"baseKeys");wm=OAe});function PAe(t){return ei(t)?h5(t):wm(t)}var Dr,vc=R(()=>{"use strict";U_();lw();Io();o(PAe,"keys");Dr=PAe});var BAe,FAe,zAe,pa,NQ=R(()=>{"use strict";am();kd();q_();Io();tm();vc();BAe=Object.prototype,FAe=BAe.hasOwnProperty,zAe=p5(function(t,e){if(fc(e)||ei(e)){Bo(e,Dr(e),t);return}for(var r in e)FAe.call(e,r)&&dc(t,r,e[r])}),pa=zAe});function VAe(t,e){if(wt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||so(t)?!0:$Ae.test(t)||!GAe.test(t)||e!=null&&t in Object(e)}var GAe,$Ae,Tm,cw=R(()=>{"use strict";Bn();Nd();GAe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$Ae=/^\w*$/;o(VAe,"isKey");Tm=VAe});function HAe(t){var e=qp(t,function(n){return r.size===UAe&&r.clear(),n}),r=e.cache;return e}var UAe,MQ,IQ=R(()=>{"use strict";R_();UAe=500;o(HAe,"memoizeCapped");MQ=HAe});var YAe,WAe,qAe,OQ,PQ=R(()=>{"use strict";IQ();YAe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,WAe=/\\(\\)?/g,qAe=MQ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(YAe,function(r,n,i,a){e.push(i?a.replace(WAe,"$1"):n||r)}),e}),OQ=qAe});function XAe(t){return t==null?"":mQ(t)}var uw,oL=R(()=>{"use strict";gQ();o(XAe,"toString");uw=XAe});function jAe(t,e){return wt(t)?t:Tm(t,e)?[t]:OQ(uw(t))}var Hh,Lv=R(()=>{"use strict";Bn();cw();PQ();oL();o(jAe,"castPath");Hh=jAe});function QAe(t){if(typeof t=="string"||so(t))return t;var e=t+"";return e=="0"&&1/t==-KAe?"-0":e}var KAe,xc,km=R(()=>{"use strict";Nd();KAe=1/0;o(QAe,"toKey");xc=QAe});function ZAe(t,e){e=Hh(e,t);for(var r=0,n=e.length;t!=null&&r{"use strict";Lv();km();o(ZAe,"baseGet");Yh=ZAe});function JAe(t,e,r){var n=t==null?void 0:Yh(t,e);return n===void 0?r:n}var BQ,FQ=R(()=>{"use strict";Dv();o(JAe,"get");BQ=JAe});function e8e(t,e){for(var r=-1,n=e.length,i=t.length;++r{"use strict";o(e8e,"arrayPush");Em=e8e});function t8e(t){return wt(t)||kl(t)||!!(zQ&&t&&t[zQ])}var zQ,GQ,$Q=R(()=>{"use strict";vd();rm();Bn();zQ=Ji?Ji.isConcatSpreadable:void 0;o(t8e,"isFlattenable");GQ=t8e});function VQ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=GQ),i||(i=[]);++a0&&r(l)?e>1?VQ(l,e-1,r,n,i):Em(i,l):n||(i[i.length]=l)}return i}var bc,Cm=R(()=>{"use strict";hw();$Q();o(VQ,"baseFlatten");bc=VQ});function r8e(t){var e=t==null?0:t.length;return e?bc(t,1):[]}var Gr,fw=R(()=>{"use strict";Cm();o(r8e,"flatten");Gr=r8e});function n8e(t){return d5(f5(t,void 0,Gr),t+"")}var UQ,HQ=R(()=>{"use strict";fw();H_();W_();o(n8e,"flatRest");UQ=n8e});function i8e(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n{"use strict";o(i8e,"baseSlice");dw=i8e});function d8e(t){return f8e.test(t)}var a8e,s8e,o8e,l8e,c8e,u8e,h8e,f8e,YQ,WQ=R(()=>{"use strict";a8e="\\ud800-\\udfff",s8e="\\u0300-\\u036f",o8e="\\ufe20-\\ufe2f",l8e="\\u20d0-\\u20ff",c8e=s8e+o8e+l8e,u8e="\\ufe0e\\ufe0f",h8e="\\u200d",f8e=RegExp("["+h8e+a8e+c8e+u8e+"]");o(d8e,"hasUnicode");YQ=d8e});function p8e(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i{"use strict";o(p8e,"arrayReduce");qQ=p8e});function m8e(t,e){return t&&Bo(e,Dr(e),t)}var jQ,KQ=R(()=>{"use strict";kd();vc();o(m8e,"baseAssign");jQ=m8e});function g8e(t,e){return t&&Bo(e,bs(e),t)}var QQ,ZQ=R(()=>{"use strict";kd();zh();o(g8e,"baseAssignIn");QQ=g8e});function y8e(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r{"use strict";o(y8e,"arrayFilter");Sm=y8e});function v8e(){return[]}var mw,cL=R(()=>{"use strict";o(v8e,"stubArray");mw=v8e});var x8e,b8e,JQ,w8e,Am,gw=R(()=>{"use strict";pw();cL();x8e=Object.prototype,b8e=x8e.propertyIsEnumerable,JQ=Object.getOwnPropertySymbols,w8e=JQ?function(t){return t==null?[]:(t=Object(t),Sm(JQ(t),function(e){return b8e.call(t,e)}))}:mw,Am=w8e});function T8e(t,e){return Bo(t,Am(t),e)}var eZ,tZ=R(()=>{"use strict";kd();gw();o(T8e,"copySymbols");eZ=T8e});var k8e,E8e,yw,uL=R(()=>{"use strict";hw();o5();gw();cL();k8e=Object.getOwnPropertySymbols,E8e=k8e?function(t){for(var e=[];t;)Em(e,Am(t)),t=em(t);return e}:mw,yw=E8e});function C8e(t,e){return Bo(t,yw(t),e)}var rZ,nZ=R(()=>{"use strict";kd();uL();o(C8e,"copySymbolsIn");rZ=C8e});function S8e(t,e,r){var n=e(t);return wt(t)?n:Em(n,r(t))}var vw,hL=R(()=>{"use strict";hw();Bn();o(S8e,"baseGetAllKeys");vw=S8e});function A8e(t){return vw(t,Dr,Am)}var Rv,fL=R(()=>{"use strict";hL();gw();vc();o(A8e,"getAllKeys");Rv=A8e});function _8e(t){return vw(t,bs,yw)}var xw,dL=R(()=>{"use strict";hL();uL();zh();o(_8e,"getAllKeysIn");xw=_8e});var L8e,bw,iZ=R(()=>{"use strict";Nh();Ro();L8e=xs(Jn,"DataView"),bw=L8e});var D8e,ww,aZ=R(()=>{"use strict";Nh();Ro();D8e=xs(Jn,"Promise"),ww=D8e});var R8e,Wh,pL=R(()=>{"use strict";Nh();Ro();R8e=xs(Jn,"Set"),Wh=R8e});var sZ,N8e,oZ,lZ,cZ,uZ,M8e,I8e,O8e,P8e,B8e,Id,oo,Od=R(()=>{"use strict";iZ();J3();aZ();pL();CQ();wu();__();sZ="[object Map]",N8e="[object Object]",oZ="[object Promise]",lZ="[object Set]",cZ="[object WeakMap]",uZ="[object DataView]",M8e=Tu(bw),I8e=Tu(Oh),O8e=Tu(ww),P8e=Tu(Wh),B8e=Tu(nw),Id=fa;(bw&&Id(new bw(new ArrayBuffer(1)))!=uZ||Oh&&Id(new Oh)!=sZ||ww&&Id(ww.resolve())!=oZ||Wh&&Id(new Wh)!=lZ||nw&&Id(new nw)!=cZ)&&(Id=o(function(t){var e=fa(t),r=e==N8e?t.constructor:void 0,n=r?Tu(r):"";if(n)switch(n){case M8e:return uZ;case I8e:return sZ;case O8e:return oZ;case P8e:return lZ;case B8e:return cZ}return e},"getTag"));oo=Id});function G8e(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&z8e.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var F8e,z8e,hZ,fZ=R(()=>{"use strict";F8e=Object.prototype,z8e=F8e.hasOwnProperty;o(G8e,"initCloneArray");hZ=G8e});function $8e(t,e){var r=e?Jp(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var dZ,pZ=R(()=>{"use strict";n5();o($8e,"cloneDataView");dZ=$8e});function U8e(t){var e=new t.constructor(t.source,V8e.exec(t));return e.lastIndex=t.lastIndex,e}var V8e,mZ,gZ=R(()=>{"use strict";V8e=/\w*$/;o(U8e,"cloneRegExp");mZ=U8e});function H8e(t){return vZ?Object(vZ.call(t)):{}}var yZ,vZ,xZ,bZ=R(()=>{"use strict";vd();yZ=Ji?Ji.prototype:void 0,vZ=yZ?yZ.valueOf:void 0;o(H8e,"cloneSymbol");xZ=H8e});function u_e(t,e,r){var n=t.constructor;switch(e){case J8e:return Jp(t);case Y8e:case W8e:return new n(+t);case e_e:return dZ(t,r);case t_e:case r_e:case n_e:case i_e:case a_e:case s_e:case o_e:case l_e:case c_e:return i5(t,r);case q8e:return new n;case X8e:case Q8e:return new n(t);case j8e:return mZ(t);case K8e:return new n;case Z8e:return xZ(t)}}var Y8e,W8e,q8e,X8e,j8e,K8e,Q8e,Z8e,J8e,e_e,t_e,r_e,n_e,i_e,a_e,s_e,o_e,l_e,c_e,wZ,TZ=R(()=>{"use strict";n5();pZ();gZ();bZ();P_();Y8e="[object Boolean]",W8e="[object Date]",q8e="[object Map]",X8e="[object Number]",j8e="[object RegExp]",K8e="[object Set]",Q8e="[object String]",Z8e="[object Symbol]",J8e="[object ArrayBuffer]",e_e="[object DataView]",t_e="[object Float32Array]",r_e="[object Float64Array]",n_e="[object Int8Array]",i_e="[object Int16Array]",a_e="[object Int32Array]",s_e="[object Uint8Array]",o_e="[object Uint8ClampedArray]",l_e="[object Uint16Array]",c_e="[object Uint32Array]";o(u_e,"initCloneByTag");wZ=u_e});function f_e(t){return Wn(t)&&oo(t)==h_e}var h_e,kZ,EZ=R(()=>{"use strict";Od();Mo();h_e="[object Map]";o(f_e,"baseIsMap");kZ=f_e});var CZ,d_e,SZ,AZ=R(()=>{"use strict";EZ();Td();ov();CZ=Po&&Po.isMap,d_e=CZ?Oo(CZ):kZ,SZ=d_e});function m_e(t){return Wn(t)&&oo(t)==p_e}var p_e,_Z,LZ=R(()=>{"use strict";Od();Mo();p_e="[object Set]";o(m_e,"baseIsSet");_Z=m_e});var DZ,g_e,RZ,NZ=R(()=>{"use strict";LZ();Td();ov();DZ=Po&&Po.isSet,g_e=DZ?Oo(DZ):_Z,RZ=g_e});function Tw(t,e,r,n,i,a){var s,l=e&y_e,u=e&v_e,h=e&x_e;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!pn(t))return t;var f=wt(t);if(f){if(s=hZ(t),!l)return a5(t,s)}else{var d=oo(t),p=d==IZ||d==E_e;if(El(t))return r5(t,l);if(d==OZ||d==MZ||p&&!i){if(s=u||p?{}:l5(t),!l)return u?rZ(t,QQ(s,t)):eZ(t,jQ(s,t))}else{if(!Cn[d])return i?t:{};s=wZ(t,d,l)}}a||(a=new uc);var m=a.get(t);if(m)return m;a.set(t,s),RZ(t)?t.forEach(function(v){s.add(Tw(v,e,r,v,t,a))}):SZ(t)&&t.forEach(function(v,x){s.set(x,Tw(v,e,r,x,t,a))});var g=h?u?xw:Rv:u?bs:Dr,y=f?void 0:g(t);return iw(y||t,function(v,x){y&&(x=v,v=t[x]),dc(s,x,Tw(v,e,r,x,t,a))}),s}var y_e,v_e,x_e,MZ,b_e,w_e,T_e,k_e,IZ,E_e,C_e,S_e,OZ,A_e,__e,L_e,D_e,R_e,N_e,M_e,I_e,O_e,P_e,B_e,F_e,z_e,G_e,$_e,V_e,Cn,kw,mL=R(()=>{"use strict";iv();iL();am();KQ();ZQ();I_();B_();tZ();nZ();fL();dL();Od();fZ();TZ();z_();Bn();im();AZ();Js();NZ();vc();zh();y_e=1,v_e=2,x_e=4,MZ="[object Arguments]",b_e="[object Array]",w_e="[object Boolean]",T_e="[object Date]",k_e="[object Error]",IZ="[object Function]",E_e="[object GeneratorFunction]",C_e="[object Map]",S_e="[object Number]",OZ="[object Object]",A_e="[object RegExp]",__e="[object Set]",L_e="[object String]",D_e="[object Symbol]",R_e="[object WeakMap]",N_e="[object ArrayBuffer]",M_e="[object DataView]",I_e="[object Float32Array]",O_e="[object Float64Array]",P_e="[object Int8Array]",B_e="[object Int16Array]",F_e="[object Int32Array]",z_e="[object Uint8Array]",G_e="[object Uint8ClampedArray]",$_e="[object Uint16Array]",V_e="[object Uint32Array]",Cn={};Cn[MZ]=Cn[b_e]=Cn[N_e]=Cn[M_e]=Cn[w_e]=Cn[T_e]=Cn[I_e]=Cn[O_e]=Cn[P_e]=Cn[B_e]=Cn[F_e]=Cn[C_e]=Cn[S_e]=Cn[OZ]=Cn[A_e]=Cn[__e]=Cn[L_e]=Cn[D_e]=Cn[z_e]=Cn[G_e]=Cn[$_e]=Cn[V_e]=!0;Cn[k_e]=Cn[IZ]=Cn[R_e]=!1;o(Tw,"baseClone");kw=Tw});function H_e(t){return kw(t,U_e)}var U_e,Qr,gL=R(()=>{"use strict";mL();U_e=4;o(H_e,"clone");Qr=H_e});function q_e(t){return kw(t,Y_e|W_e)}var Y_e,W_e,yL,PZ=R(()=>{"use strict";mL();Y_e=1,W_e=4;o(q_e,"cloneDeep");yL=q_e});function X_e(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e{"use strict";o(X_e,"compact");wc=X_e});function K_e(t){return this.__data__.set(t,j_e),this}var j_e,FZ,zZ=R(()=>{"use strict";j_e="__lodash_hash_undefined__";o(K_e,"setCacheAdd");FZ=K_e});function Q_e(t){return this.__data__.has(t)}var GZ,$Z=R(()=>{"use strict";o(Q_e,"setCacheHas");GZ=Q_e});function Ew(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new bd;++e{"use strict";e5();zZ();$Z();o(Ew,"SetCache");Ew.prototype.add=Ew.prototype.push=FZ;Ew.prototype.has=GZ;_m=Ew});function Z_e(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(Z_e,"arraySome");Sw=Z_e});function J_e(t,e){return t.has(e)}var Lm,Aw=R(()=>{"use strict";o(J_e,"cacheHas");Lm=J_e});function r9e(t,e,r,n,i,a){var s=r&e9e,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&t9e?new _m:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";Cw();vL();Aw();e9e=1,t9e=2;o(r9e,"equalArrays");_w=r9e});function n9e(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var VZ,UZ=R(()=>{"use strict";o(n9e,"mapToArray");VZ=n9e});function i9e(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Dm,Lw=R(()=>{"use strict";o(i9e,"setToArray");Dm=i9e});function v9e(t,e,r,n,i,a,s){switch(r){case y9e:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case g9e:return!(t.byteLength!=e.byteLength||!a(new Zp(t),new Zp(e)));case o9e:case l9e:case h9e:return No(+t,+e);case c9e:return t.name==e.name&&t.message==e.message;case f9e:case p9e:return t==e+"";case u9e:var l=VZ;case d9e:var u=n&a9e;if(l||(l=Dm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=s9e,s.set(t,e);var f=_w(l(t),l(e),n,i,a,s);return s.delete(t),f;case m9e:if(bL)return bL.call(t)==bL.call(e)}return!1}var a9e,s9e,o9e,l9e,c9e,u9e,h9e,f9e,d9e,p9e,m9e,g9e,y9e,HZ,bL,YZ,WZ=R(()=>{"use strict";vd();O_();xd();xL();UZ();Lw();a9e=1,s9e=2,o9e="[object Boolean]",l9e="[object Date]",c9e="[object Error]",u9e="[object Map]",h9e="[object Number]",f9e="[object RegExp]",d9e="[object Set]",p9e="[object String]",m9e="[object Symbol]",g9e="[object ArrayBuffer]",y9e="[object DataView]",HZ=Ji?Ji.prototype:void 0,bL=HZ?HZ.valueOf:void 0;o(v9e,"equalByTag");YZ=v9e});function T9e(t,e,r,n,i,a){var s=r&x9e,l=Rv(t),u=l.length,h=Rv(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:w9e.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";fL();x9e=1,b9e=Object.prototype,w9e=b9e.hasOwnProperty;o(T9e,"equalObjects");qZ=T9e});function C9e(t,e,r,n,i,a){var s=wt(t),l=wt(e),u=s?KZ:oo(t),h=l?KZ:oo(e);u=u==jZ?Dw:u,h=h==jZ?Dw:h;var f=u==Dw,d=h==Dw,p=u==h;if(p&&El(t)){if(!El(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new uc),s||Bh(t)?_w(t,e,r,n,i,a):YZ(t,e,u,r,n,i,a);if(!(r&k9e)){var m=f&&QZ.call(t,"__wrapped__"),g=d&&QZ.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new uc),i(y,v,r,n,a)}}return p?(a||(a=new uc),qZ(t,e,r,n,i,a)):!1}var k9e,jZ,KZ,Dw,E9e,QZ,ZZ,JZ=R(()=>{"use strict";iv();xL();WZ();XZ();Od();Bn();im();lv();k9e=1,jZ="[object Arguments]",KZ="[object Array]",Dw="[object Object]",E9e=Object.prototype,QZ=E9e.hasOwnProperty;o(C9e,"baseIsEqualDeep");ZZ=C9e});function eJ(t,e,r,n,i){return t===e?!0:t==null||e==null||!Wn(t)&&!Wn(e)?t!==t&&e!==e:ZZ(t,e,r,n,eJ,i)}var Rw,wL=R(()=>{"use strict";JZ();Mo();o(eJ,"baseIsEqual");Rw=eJ});function _9e(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i{"use strict";iv();wL();S9e=1,A9e=2;o(_9e,"baseIsMatch");tJ=_9e});function L9e(t){return t===t&&!pn(t)}var Nw,TL=R(()=>{"use strict";Js();o(L9e,"isStrictComparable");Nw=L9e});function D9e(t){for(var e=Dr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Nw(i)]}return e}var nJ,iJ=R(()=>{"use strict";TL();vc();o(D9e,"getMatchData");nJ=D9e});function R9e(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var Mw,kL=R(()=>{"use strict";o(R9e,"matchesStrictComparable");Mw=R9e});function N9e(t){var e=nJ(t);return e.length==1&&e[0][2]?Mw(e[0][0],e[0][1]):function(r){return r===t||tJ(r,t,e)}}var aJ,sJ=R(()=>{"use strict";rJ();iJ();kL();o(N9e,"baseMatches");aJ=N9e});function M9e(t,e){return t!=null&&e in Object(t)}var oJ,lJ=R(()=>{"use strict";o(M9e,"baseHasIn");oJ=M9e});function I9e(t,e,r){e=Hh(e,t);for(var n=-1,i=e.length,a=!1;++n{"use strict";Lv();rm();Bn();uv();c5();km();o(I9e,"hasPath");Iw=I9e});function O9e(t,e){return t!=null&&Iw(t,e,oJ)}var Ow,CL=R(()=>{"use strict";lJ();EL();o(O9e,"hasIn");Ow=O9e});function F9e(t,e){return Tm(t)&&Nw(e)?Mw(xc(t),e):function(r){var n=BQ(r,t);return n===void 0&&n===e?Ow(r,t):Rw(e,n,P9e|B9e)}}var P9e,B9e,cJ,uJ=R(()=>{"use strict";wL();FQ();CL();cw();TL();kL();km();P9e=1,B9e=2;o(F9e,"baseMatchesProperty");cJ=F9e});function z9e(t){return function(e){return e?.[t]}}var Pw,SL=R(()=>{"use strict";o(z9e,"baseProperty");Pw=z9e});function G9e(t){return function(e){return Yh(e,t)}}var hJ,fJ=R(()=>{"use strict";Dv();o(G9e,"basePropertyDeep");hJ=G9e});function $9e(t){return Tm(t)?Pw(xc(t)):hJ(t)}var dJ,pJ=R(()=>{"use strict";SL();fJ();cw();km();o($9e,"property");dJ=$9e});function V9e(t){return typeof t=="function"?t:t==null?ea:typeof t=="object"?wt(t)?cJ(t[0],t[1]):aJ(t):dJ(t)}var cn,Qa=R(()=>{"use strict";sJ();uJ();Eu();Bn();pJ();o(V9e,"baseIteratee");cn=V9e});function U9e(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i{"use strict";o(U9e,"arrayAggregator");mJ=U9e});function H9e(t,e){return t&&Qp(t,e,Dr)}var Rm,Bw=R(()=>{"use strict";t5();vc();o(H9e,"baseForOwn");Rm=H9e});function Y9e(t,e){return function(r,n){if(r==null)return r;if(!ei(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a{"use strict";Io();o(Y9e,"createBaseEach");yJ=Y9e});var W9e,As,qh=R(()=>{"use strict";Bw();vJ();W9e=yJ(Rm),As=W9e});function q9e(t,e,r,n){return As(t,function(i,a,s){e(n,i,r(i),s)}),n}var xJ,bJ=R(()=>{"use strict";qh();o(q9e,"baseAggregator");xJ=q9e});function X9e(t,e){return function(r,n){var i=wt(r)?mJ:xJ,a=e?e():{};return i(r,t,cn(n,2),a)}}var wJ,TJ=R(()=>{"use strict";gJ();bJ();Qa();Bn();o(X9e,"createAggregator");wJ=X9e});var j9e,Fw,kJ=R(()=>{"use strict";Ro();j9e=o(function(){return Jn.Date.now()},"now"),Fw=j9e});var EJ,K9e,Q9e,Xh,CJ=R(()=>{"use strict";sm();xd();Ed();zh();EJ=Object.prototype,K9e=EJ.hasOwnProperty,Q9e=pc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&eo(e[0],e[1],i)&&(n=1);++r{"use strict";o(Z9e,"arrayIncludesWith");zw=Z9e});function eLe(t,e,r,n){var i=-1,a=ow,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Ss(e,Oo(r))),n?(a=zw,s=!1):e.length>=J9e&&(a=Lm,s=!1,e=new _m(e));e:for(;++i{"use strict";Cw();sL();AL();Md();Td();Aw();J9e=200;o(eLe,"baseDifference");SJ=eLe});var tLe,jh,_J=R(()=>{"use strict";AJ();Cm();sm();u5();tLe=pc(function(t,e){return wd(t)?SJ(t,bc(e,1,wd,!0)):[]}),jh=tLe});function rLe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ma,LJ=R(()=>{"use strict";o(rLe,"last");ma=rLe});function nLe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:yc(e),dw(t,e<0?0:e,n)):[]}var fi,DJ=R(()=>{"use strict";lL();xm();o(nLe,"drop");fi=nLe});function iLe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:yc(e),e=n-e,dw(t,0,e<0?0:e)):[]}var Ru,RJ=R(()=>{"use strict";lL();xm();o(iLe,"dropRight");Ru=iLe});function aLe(t){return typeof t=="function"?t:ea}var Nm,Gw=R(()=>{"use strict";Eu();o(aLe,"castFunction");Nm=aLe});function sLe(t,e){var r=wt(t)?iw:As;return r(t,Nm(e))}var Ee,$w=R(()=>{"use strict";iL();qh();Gw();Bn();o(sLe,"forEach");Ee=sLe});var NJ=R(()=>{"use strict";$w()});function oLe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(oLe,"arrayEvery");MJ=oLe});function lLe(t,e){var r=!0;return As(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var OJ,PJ=R(()=>{"use strict";qh();o(lLe,"baseEvery");OJ=lLe});function cLe(t,e,r){var n=wt(t)?MJ:OJ;return r&&eo(t,e,r)&&(e=void 0),n(t,cn(e,3))}var Ia,BJ=R(()=>{"use strict";IJ();PJ();Qa();Bn();Ed();o(cLe,"every");Ia=cLe});function uLe(t,e){var r=[];return As(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var Vw,_L=R(()=>{"use strict";qh();o(uLe,"baseFilter");Vw=uLe});function hLe(t,e){var r=wt(t)?Sm:Vw;return r(t,cn(e,3))}var $r,LL=R(()=>{"use strict";pw();_L();Qa();Bn();o(hLe,"filter");$r=hLe});function fLe(t){return function(e,r,n){var i=Object(e);if(!ei(e)){var a=cn(r,3);e=Dr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var FJ,zJ=R(()=>{"use strict";Qa();Io();vc();o(fLe,"createFind");FJ=fLe});function pLe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:yc(r);return i<0&&(i=dLe(n+i,0)),aw(t,cn(e,3),i)}var dLe,GJ,$J=R(()=>{"use strict";aL();Qa();xm();dLe=Math.max;o(pLe,"findIndex");GJ=pLe});var mLe,Za,VJ=R(()=>{"use strict";zJ();$J();mLe=FJ(GJ),Za=mLe});function gLe(t){return t&&t.length?t[0]:void 0}var na,UJ=R(()=>{"use strict";o(gLe,"head");na=gLe});var HJ=R(()=>{"use strict";UJ()});function yLe(t,e){var r=-1,n=ei(t)?Array(t.length):[];return As(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var Uw,DL=R(()=>{"use strict";qh();Io();o(yLe,"baseMap");Uw=yLe});function vLe(t,e){var r=wt(t)?Ss:Uw;return r(t,cn(e,3))}var qe,Mm=R(()=>{"use strict";Md();Qa();DL();Bn();o(vLe,"map");qe=vLe});function xLe(t,e){return bc(qe(t,e),1)}var ga,RL=R(()=>{"use strict";Cm();Mm();o(xLe,"flatMap");ga=xLe});function bLe(t,e){return t==null?t:Qp(t,Nm(e),bs)}var NL,YJ=R(()=>{"use strict";t5();Gw();zh();o(bLe,"forIn");NL=bLe});function wLe(t,e){return t&&Rm(t,Nm(e))}var ML,WJ=R(()=>{"use strict";Bw();Gw();o(wLe,"forOwn");ML=wLe});var TLe,kLe,ELe,IL,qJ=R(()=>{"use strict";Kp();TJ();TLe=Object.prototype,kLe=TLe.hasOwnProperty,ELe=wJ(function(t,e,r){kLe.call(t,r)?t[r].push(e):hc(t,r,[e])}),IL=ELe});function CLe(t,e){return t>e}var XJ,jJ=R(()=>{"use strict";o(CLe,"baseGt");XJ=CLe});function _Le(t,e){return t!=null&&ALe.call(t,e)}var SLe,ALe,KJ,QJ=R(()=>{"use strict";SLe=Object.prototype,ALe=SLe.hasOwnProperty;o(_Le,"baseHas");KJ=_Le});function LLe(t,e){return t!=null&&Iw(t,e,KJ)}var Xe,ZJ=R(()=>{"use strict";QJ();EL();o(LLe,"has");Xe=LLe});function RLe(t){return typeof t=="string"||!wt(t)&&Wn(t)&&fa(t)==DLe}var DLe,di,Hw=R(()=>{"use strict";wu();Bn();Mo();DLe="[object String]";o(RLe,"isString");di=RLe});function NLe(t,e){return Ss(e,function(r){return t[r]})}var JJ,eee=R(()=>{"use strict";Md();o(NLe,"baseValues");JJ=NLe});function MLe(t){return t==null?[]:JJ(t,Dr(t))}var or,OL=R(()=>{"use strict";eee();vc();o(MLe,"values");or=MLe});function OLe(t,e,r,n){t=ei(t)?t:or(t),r=r&&!n?yc(r):0;var i=t.length;return r<0&&(r=ILe(i+r,0)),di(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&bm(t,e,r)>-1}var ILe,Fn,tee=R(()=>{"use strict";sw();Io();Hw();xm();OL();ILe=Math.max;o(OLe,"includes");Fn=OLe});function BLe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:yc(r);return i<0&&(i=PLe(n+i,0)),bm(t,e,i)}var PLe,Yw,ree=R(()=>{"use strict";sw();xm();PLe=Math.max;o(BLe,"indexOf");Yw=BLe});function VLe(t){if(t==null)return!0;if(ei(t)&&(wt(t)||typeof t=="string"||typeof t.splice=="function"||El(t)||Bh(t)||kl(t)))return!t.length;var e=oo(t);if(e==FLe||e==zLe)return!t.size;if(fc(t))return!wm(t).length;for(var r in t)if($Le.call(t,r))return!1;return!0}var FLe,zLe,GLe,$Le,Qt,Ww=R(()=>{"use strict";lw();Od();rm();Bn();Io();im();tm();lv();FLe="[object Map]",zLe="[object Set]",GLe=Object.prototype,$Le=GLe.hasOwnProperty;o(VLe,"isEmpty");Qt=VLe});function HLe(t){return Wn(t)&&fa(t)==ULe}var ULe,nee,iee=R(()=>{"use strict";wu();Mo();ULe="[object RegExp]";o(HLe,"baseIsRegExp");nee=HLe});var aee,YLe,zo,see=R(()=>{"use strict";iee();Td();ov();aee=Po&&Po.isRegExp,YLe=aee?Oo(aee):nee,zo=YLe});function WLe(t){return t===void 0}var er,oee=R(()=>{"use strict";o(WLe,"isUndefined");er=WLe});function qLe(t,e){return t{"use strict";o(qLe,"baseLt");qw=qLe});function XLe(t,e){var r={};return e=cn(e,3),Rm(t,function(n,i,a){hc(r,i,e(n,i,a))}),r}var Pd,lee=R(()=>{"use strict";Kp();Bw();Qa();o(XLe,"mapValues");Pd=XLe});function jLe(t,e,r){for(var n=-1,i=t.length;++n{"use strict";Nd();o(jLe,"baseExtremum");Im=jLe});function KLe(t){return t&&t.length?Im(t,ea,XJ):void 0}var _s,cee=R(()=>{"use strict";Xw();jJ();Eu();o(KLe,"max");_s=KLe});function QLe(t){return t&&t.length?Im(t,ea,qw):void 0}var Ll,BL=R(()=>{"use strict";Xw();PL();Eu();o(QLe,"min");Ll=QLe});function ZLe(t,e){return t&&t.length?Im(t,cn(e,2),qw):void 0}var Bd,uee=R(()=>{"use strict";Xw();Qa();PL();o(ZLe,"minBy");Bd=ZLe});function eDe(t){if(typeof t!="function")throw new TypeError(JLe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var JLe,hee,fee=R(()=>{"use strict";JLe="Expected a function";o(eDe,"negate");hee=eDe});function tDe(t,e,r,n){if(!pn(t))return t;e=Hh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i{"use strict";am();Lv();uv();Js();km();o(tDe,"baseSet");dee=tDe});function rDe(t,e,r){for(var n=-1,i=e.length,a={};++n{"use strict";Dv();pee();Lv();o(rDe,"basePickBy");jw=rDe});function nDe(t,e){if(t==null)return{};var r=Ss(xw(t),function(n){return[n]});return e=cn(e),jw(t,r,function(n,i){return e(n,i[0])})}var Ls,mee=R(()=>{"use strict";Md();Qa();FL();dL();o(nDe,"pickBy");Ls=nDe});function iDe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var gee,yee=R(()=>{"use strict";o(iDe,"baseSortBy");gee=iDe});function aDe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=so(t),s=e!==void 0,l=e===null,u=e===e,h=so(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t{"use strict";Nd();o(aDe,"compareAscending");vee=aDe});function sDe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var bee,wee=R(()=>{"use strict";xee();o(sDe,"compareMultiple");bee=sDe});function oDe(t,e,r){e.length?e=Ss(e,function(a){return wt(a)?function(s){return Yh(s,a.length===1?a[0]:a)}:a}):e=[ea];var n=-1;e=Ss(e,Oo(cn));var i=Uw(t,function(a,s,l){var u=Ss(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return gee(i,function(a,s){return bee(a,s,r)})}var Tee,kee=R(()=>{"use strict";Md();Dv();Qa();DL();yee();Td();wee();Eu();Bn();o(oDe,"baseOrderBy");Tee=oDe});var lDe,Eee,Cee=R(()=>{"use strict";SL();lDe=Pw("length"),Eee=lDe});function bDe(t){for(var e=See.lastIndex=0;See.test(t);)++e;return e}var Aee,cDe,uDe,hDe,fDe,dDe,pDe,zL,GL,mDe,_ee,Lee,Dee,gDe,Ree,Nee,yDe,vDe,xDe,See,Mee,Iee=R(()=>{"use strict";Aee="\\ud800-\\udfff",cDe="\\u0300-\\u036f",uDe="\\ufe20-\\ufe2f",hDe="\\u20d0-\\u20ff",fDe=cDe+uDe+hDe,dDe="\\ufe0e\\ufe0f",pDe="["+Aee+"]",zL="["+fDe+"]",GL="\\ud83c[\\udffb-\\udfff]",mDe="(?:"+zL+"|"+GL+")",_ee="[^"+Aee+"]",Lee="(?:\\ud83c[\\udde6-\\uddff]){2}",Dee="[\\ud800-\\udbff][\\udc00-\\udfff]",gDe="\\u200d",Ree=mDe+"?",Nee="["+dDe+"]?",yDe="(?:"+gDe+"(?:"+[_ee,Lee,Dee].join("|")+")"+Nee+Ree+")*",vDe=Nee+Ree+yDe,xDe="(?:"+[_ee+zL+"?",zL,Lee,Dee,pDe].join("|")+")",See=RegExp(GL+"(?="+GL+")|"+xDe+vDe,"g");o(bDe,"unicodeSize");Mee=bDe});function wDe(t){return YQ(t)?Mee(t):Eee(t)}var Oee,Pee=R(()=>{"use strict";Cee();WQ();Iee();o(wDe,"stringSize");Oee=wDe});function TDe(t,e){return jw(t,e,function(r,n){return Ow(t,n)})}var Bee,Fee=R(()=>{"use strict";FL();CL();o(TDe,"basePick");Bee=TDe});var kDe,Fd,zee=R(()=>{"use strict";Fee();HQ();kDe=UQ(function(t,e){return t==null?{}:Bee(t,e)}),Fd=kDe});function SDe(t,e,r,n){for(var i=-1,a=CDe(EDe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var EDe,CDe,Gee,$ee=R(()=>{"use strict";EDe=Math.ceil,CDe=Math.max;o(SDe,"baseRange");Gee=SDe});function ADe(t){return function(e,r,n){return n&&typeof n!="number"&&eo(e,r,n)&&(r=n=void 0),e=vm(e),r===void 0?(r=e,e=0):r=vm(r),n=n===void 0?e{"use strict";$ee();Ed();rL();o(ADe,"createRange");Vee=ADe});var _De,Go,Hee=R(()=>{"use strict";Uee();_De=Vee(),Go=_De});function LDe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var Yee,Wee=R(()=>{"use strict";o(LDe,"baseReduce");Yee=LDe});function DDe(t,e,r){var n=wt(t)?qQ:Yee,i=arguments.length<3;return n(t,cn(e,4),r,i,As)}var Vr,$L=R(()=>{"use strict";XQ();qh();Qa();Wee();Bn();o(DDe,"reduce");Vr=DDe});function RDe(t,e){var r=wt(t)?Sm:Vw;return r(t,hee(cn(e,3)))}var Kh,qee=R(()=>{"use strict";pw();_L();Qa();Bn();fee();o(RDe,"reject");Kh=RDe});function IDe(t){if(t==null)return 0;if(ei(t))return di(t)?Oee(t):t.length;var e=oo(t);return e==NDe||e==MDe?t.size:wm(t).length}var NDe,MDe,VL,Xee=R(()=>{"use strict";lw();Od();Io();Hw();Pee();NDe="[object Map]",MDe="[object Set]";o(IDe,"size");VL=IDe});function ODe(t,e){var r;return As(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var jee,Kee=R(()=>{"use strict";qh();o(ODe,"baseSome");jee=ODe});function PDe(t,e,r){var n=wt(t)?Sw:jee;return r&&eo(t,e,r)&&(e=void 0),n(t,cn(e,3))}var Nv,Qee=R(()=>{"use strict";vL();Qa();Kee();Bn();Ed();o(PDe,"some");Nv=PDe});var BDe,Tc,Zee=R(()=>{"use strict";Cm();kee();sm();Ed();BDe=pc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&eo(t,e[0],e[1])?e=[]:r>2&&eo(e[0],e[1],e[2])&&(e=[e[0]]),Tee(t,bc(e,1),[])}),Tc=BDe});var FDe,zDe,Jee,ete=R(()=>{"use strict";pL();nL();Lw();FDe=1/0,zDe=Wh&&1/Dm(new Wh([,-0]))[1]==FDe?function(t){return new Wh(t)}:qn,Jee=zDe});function $De(t,e,r){var n=-1,i=ow,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=zw;else if(a>=GDe){var h=e?null:Jee(t);if(h)return Dm(h);s=!1,i=Lm,u=new _m}else u=e?[]:l;e:for(;++n{"use strict";Cw();sL();AL();Aw();ete();Lw();GDe=200;o($De,"baseUniq");Om=$De});var VDe,UL,tte=R(()=>{"use strict";Cm();sm();Kw();u5();VDe=pc(function(t){return Om(bc(t,1,wd,!0))}),UL=VDe});function UDe(t){return t&&t.length?Om(t):[]}var Pm,rte=R(()=>{"use strict";Kw();o(UDe,"uniq");Pm=UDe});function HDe(t,e){return t&&t.length?Om(t,cn(e,2)):[]}var nte,ite=R(()=>{"use strict";Qa();Kw();o(HDe,"uniqBy");nte=HDe});function WDe(t){var e=++YDe;return uw(t)+e}var YDe,zd,ate=R(()=>{"use strict";oL();YDe=0;o(WDe,"uniqueId");zd=WDe});function qDe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n{"use strict";o(qDe,"baseZipObject");ste=qDe});function XDe(t,e){return ste(t||[],e||[],dc)}var Qw,lte=R(()=>{"use strict";am();ote();o(XDe,"zipObject");Qw=XDe});var Pt=R(()=>{"use strict";NQ();gL();PZ();BZ();Y_();CJ();_J();DJ();RJ();NJ();BJ();LL();VJ();HJ();RL();fw();$w();YJ();WJ();qJ();ZJ();Eu();tee();ree();Bn();Ww();Jy();Js();see();Hw();oee();vc();LJ();Mm();lee();cee();X_();BL();uee();nL();kJ();zee();mee();Hee();$L();qee();Xee();Qee();Zee();tte();rte();ate();OL();lte();});function ute(t,e){t[e]?t[e]++:t[e]=1}function hte(t,e){--t[e]||delete t[e]}function Mv(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+cte+a+cte+(er(n)?jDe:n)}function KDe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function HL(t,e){return Mv(t,e.v,e.w,e.name)}var jDe,Gd,cte,lr,Zw=R(()=>{"use strict";Pt();jDe="\0",Gd="\0",cte="",lr=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Xe(e,"directed")?e.directed:!0,this._isMultigraph=Xe(e,"multigraph")?e.multigraph:!1,this._isCompound=Xe(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=ws(void 0),this._defaultEdgeLabelFn=ws(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Gd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return wi(e)||(e=ws(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Dr(this._nodes)}sources(){var e=this;return $r(this.nodes(),function(r){return Qt(e._in[r])})}sinks(){var e=this;return $r(this.nodes(),function(r){return Qt(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ee(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Xe(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Gd,this._children[e]={},this._children[Gd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Xe(this._nodes,e)}removeNode(e){var r=this;if(Xe(this._nodes,e)){var n=o(function(i){r.removeEdge(r._edgeObjs[i])},"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ee(this.children(e),function(i){r.setParent(i)}),delete this._children[e]),Ee(Dr(this._in[e]),n),delete this._in[e],delete this._preds[e],Ee(Dr(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(er(r))r=Gd;else{r+="";for(var n=r;!er(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Gd)return r}}children(e){if(er(e)&&(e=Gd),this._isCompound){var r=this._children[e];if(r)return Dr(r)}else{if(e===Gd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return Dr(r)}successors(e){var r=this._sucs[e];if(r)return Dr(r)}neighbors(e){var r=this.predecessors(e);if(r)return UL(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ee(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ee(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ee(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return wi(e)||(e=ws(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return or(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Vr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,er(n)||(n=""+n);var l=Mv(this._isDirected,e,r,n);if(Xe(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!er(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=KDe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,ute(this._preds[r],e),ute(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):Mv(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):Mv(this._isDirected,e,r,n);return Xe(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):Mv(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],hte(this._preds[r],e),hte(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=or(n);return r?$r(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=or(n);return r?$r(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};lr.prototype._nodeCount=0;lr.prototype._edgeCount=0;o(ute,"incrementOrInitEntry");o(hte,"decrementOrRemoveEntry");o(Mv,"edgeArgsToId");o(KDe,"edgeArgsToObj");o(HL,"edgeObjToId")});var ya=R(()=>{"use strict";Zw()});function fte(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function QDe(t,e){if(t!=="_next"&&t!=="_prev")return e}var Jw,dte=R(()=>{"use strict";Jw=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return fte(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&fte(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,QDe)),n=n._prev;return"["+e.join(", ")+"]"}};o(fte,"unlink");o(QDe,"filterOutLinks")});function pte(t,e){if(t.nodeCount()<=1)return[];var r=eRe(t,e||ZDe),n=JDe(r.graph,r.buckets,r.zeroIdx);return Gr(qe(n,function(i){return t.outEdges(i.v,i.w)}))}function JDe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)YL(t,e,r,s);for(;s=i.dequeue();)YL(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(YL(t,e,r,s,!0));break}}}return n}function YL(t,e,r,n,i){var a=i?[]:void 0;return Ee(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,WL(e,r,u)}),Ee(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,WL(e,r,h)}),t.removeNode(n.v),a}function eRe(t,e){var r=new lr,n=0,i=0;Ee(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ee(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Go(i+n+3).map(function(){return new Jw}),s=n+1;return Ee(r.nodes(),function(l){WL(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function WL(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var ZDe,mte=R(()=>{"use strict";Pt();ya();dte();ZDe=ws(1);o(pte,"greedyFAS");o(JDe,"doGreedyFAS");o(YL,"removeNode");o(eRe,"buildState");o(WL,"assignBucket")});function gte(t){var e=t.graph().acyclicer==="greedy"?pte(t,r(t)):tRe(t);Ee(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,zd("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function tRe(t){var e=[],r={},n={};function i(a){Xe(n,a)||(n[a]=!0,r[a]=!0,Ee(t.outEdges(a),function(s){Xe(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ee(t.nodes(),i),e}function yte(t){Ee(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var qL=R(()=>{"use strict";Pt();mte();o(gte,"run");o(tRe,"dfsFAS");o(yte,"undo")});function kc(t,e,r,n){var i;do i=zd(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function xte(t){var e=new lr().setGraph(t.graph());return Ee(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ee(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function eT(t){var e=new lr({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ee(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ee(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function XL(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function Qh(t){var e=qe(Go(KL(t)+1),function(){return[]});return Ee(t.nodes(),function(r){var n=t.node(r),i=n.rank;er(i)||(e[i][n.order]=r)}),e}function bte(t){var e=Ll(qe(t.nodes(),function(r){return t.node(r).rank}));Ee(t.nodes(),function(r){var n=t.node(r);Xe(n,"rank")&&(n.rank-=e)})}function wte(t){var e=Ll(qe(t.nodes(),function(a){return t.node(a).rank})),r=[];Ee(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ee(r,function(a,s){er(a)&&s%i!==0?--n:n&&Ee(a,function(l){t.node(l).rank+=n})})}function jL(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),kc(t,"border",i,e)}function KL(t){return _s(qe(t.nodes(),function(e){var r=t.node(e).rank;if(!er(r))return r}))}function Tte(t,e){var r={lhs:[],rhs:[]};return Ee(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function kte(t,e){var r=Fw();try{return e()}finally{console.log(t+" time: "+(Fw()-r)+"ms")}}function Ete(t,e){return e()}var Ec=R(()=>{"use strict";Pt();ya();o(kc,"addDummyNode");o(xte,"simplify");o(eT,"asNonCompoundGraph");o(XL,"intersectRect");o(Qh,"buildLayerMatrix");o(bte,"normalizeRanks");o(wte,"removeEmptyRanks");o(jL,"addBorderNode");o(KL,"maxRank");o(Tte,"partition");o(kte,"time");o(Ete,"notime")});function Ste(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ee(n,e),Xe(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a{"use strict";Pt();Ec();o(Ste,"addBorderSegments");o(Cte,"addBorderNode")});function Lte(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Rte(t)}function Dte(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&rRe(t),(e==="lr"||e==="rl")&&(nRe(t),Rte(t))}function Rte(t){Ee(t.nodes(),function(e){_te(t.node(e))}),Ee(t.edges(),function(e){_te(t.edge(e))})}function _te(t){var e=t.width;t.width=t.height,t.height=e}function rRe(t){Ee(t.nodes(),function(e){QL(t.node(e))}),Ee(t.edges(),function(e){var r=t.edge(e);Ee(r.points,QL),Xe(r,"y")&&QL(r)})}function QL(t){t.y=-t.y}function nRe(t){Ee(t.nodes(),function(e){ZL(t.node(e))}),Ee(t.edges(),function(e){var r=t.edge(e);Ee(r.points,ZL),Xe(r,"x")&&ZL(r)})}function ZL(t){var e=t.x;t.x=t.y,t.y=e}var Nte=R(()=>{"use strict";Pt();o(Lte,"adjust");o(Dte,"undo");o(Rte,"swapWidthHeight");o(_te,"swapWidthHeightOne");o(rRe,"reverseY");o(QL,"reverseYOne");o(nRe,"swapXY");o(ZL,"swapXYOne")});function Mte(t){t.graph().dummyChains=[],Ee(t.edges(),function(e){aRe(t,e)})}function aRe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h,f,d;for(d=0,++n;n{"use strict";Pt();Ec();o(Mte,"run");o(aRe,"normalizeEdge");o(Ite,"undo")});function Iv(t){var e={};function r(n){var i=t.node(n);if(Xe(e,n))return i.rank;e[n]=!0;var a=Ll(qe(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ee(t.sources(),r)}function $d(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var tT=R(()=>{"use strict";Pt();o(Iv,"longestPath");o($d,"slack")});function rT(t){var e=new lr({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;sRe(e,t){"use strict";Pt();ya();tT();o(rT,"feasibleTree");o(sRe,"tightTree");o(oRe,"findMinSlackEdge");o(lRe,"shiftRanks")});var Pte=R(()=>{"use strict"});var tD=R(()=>{"use strict"});var tGt,rD=R(()=>{"use strict";Pt();tD();tGt=ws(1)});var Bte=R(()=>{"use strict";rD()});var nD=R(()=>{"use strict"});var Fte=R(()=>{"use strict";nD()});var fGt,zte=R(()=>{"use strict";Pt();fGt=ws(1)});function iD(t){var e={},r={},n=[];function i(a){if(Xe(r,a))throw new Ov;Xe(e,a)||(r[a]=!0,e[a]=!0,Ee(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ee(t.sinks(),i),VL(e)!==t.nodeCount())throw new Ov;return n}function Ov(){}var aD=R(()=>{"use strict";Pt();iD.CycleException=Ov;o(iD,"topsort");o(Ov,"CycleException");Ov.prototype=new Error});var Gte=R(()=>{"use strict";aD()});function nT(t,e,r){wt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ee(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);$te(t,s,r==="post",a,n,i)}),i}function $te(t,e,r,n,i,a){Xe(n,e)||(n[e]=!0,r||a.push(e),Ee(i(e),function(s){$te(t,s,r,n,i,a)}),r&&a.push(e))}var sD=R(()=>{"use strict";Pt();o(nT,"dfs");o($te,"doDfs")});function oD(t,e){return nT(t,e,"post")}var Vte=R(()=>{"use strict";sD();o(oD,"postorder")});function lD(t,e){return nT(t,e,"pre")}var Ute=R(()=>{"use strict";sD();o(lD,"preorder")});var Hte=R(()=>{"use strict";tD();Zw()});var Yte=R(()=>{"use strict";Pte();rD();Bte();Fte();zte();Gte();Vte();Ute();Hte();nD();aD()});function Jh(t){t=xte(t),Iv(t);var e=rT(t);uD(e),cD(e,t);for(var r,n;r=jte(e);)n=Kte(e,t,r),Qte(e,t,r,n)}function cD(t,e){var r=oD(t,t.nodes());r=r.slice(0,r.length-1),Ee(r,function(n){dRe(t,e,n)})}function dRe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=qte(t,e,r)}function qte(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ee(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,mRe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function uD(t,e){arguments.length<2&&(e=t.nodes()[0]),Xte(t,{},1,e)}function Xte(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ee(t.neighbors(n),function(l){Xe(e,l)||(r=Xte(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function jte(t){return Za(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Kte(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=$r(e.edges(),function(f){return u===Wte(t,t.node(f.v),l)&&u!==Wte(t,t.node(f.w),l)});return Bd(h,function(f){return $d(e,f)})}function Qte(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),uD(t),cD(t,e),pRe(t,e)}function pRe(t,e){var r=Za(t.nodes(),function(i){return!e.node(i).parent}),n=lD(t,r);n=n.slice(1),Ee(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function mRe(t,e,r){return t.hasEdge(e,r)}function Wte(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var Zte=R(()=>{"use strict";Pt();Yte();Ec();eD();tT();Jh.initLowLimValues=uD;Jh.initCutValues=cD;Jh.calcCutValue=qte;Jh.leaveEdge=jte;Jh.enterEdge=Kte;Jh.exchangeEdges=Qte;o(Jh,"networkSimplex");o(cD,"initCutValues");o(dRe,"assignCutValue");o(qte,"calcCutValue");o(uD,"initLowLimValues");o(Xte,"dfsAssignLowLim");o(jte,"leaveEdge");o(Kte,"enterEdge");o(Qte,"exchangeEdges");o(pRe,"updateRanks");o(mRe,"isTreeEdge");o(Wte,"isDescendant")});function hD(t){switch(t.graph().ranker){case"network-simplex":Jte(t);break;case"tight-tree":yRe(t);break;case"longest-path":gRe(t);break;default:Jte(t)}}function yRe(t){Iv(t),rT(t)}function Jte(t){Jh(t)}var gRe,fD=R(()=>{"use strict";eD();Zte();tT();o(hD,"rank");gRe=Iv;o(yRe,"tightTreeRanker");o(Jte,"networkSimplexRanker")});function ere(t){var e=kc(t,"root",{},"_root"),r=vRe(t),n=_s(or(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ee(t.edges(),function(s){t.edge(s).minlen*=i});var a=xRe(t)+1;Ee(t.children(),function(s){tre(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function tre(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=jL(t,"_bt"),h=jL(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ee(l,function(d){tre(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function vRe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ee(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ee(t.children(),function(n){r(n,1)}),e}function xRe(t){return Vr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function rre(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ee(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var nre=R(()=>{"use strict";Pt();Ec();o(ere,"run");o(tre,"dfs");o(vRe,"treeDepths");o(xRe,"sumWeights");o(rre,"cleanup")});function ire(t,e,r){var n={},i;Ee(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var are=R(()=>{"use strict";Pt();o(ire,"addSubgraphConstraints")});function sre(t,e,r){var n=wRe(t),i=new lr({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ee(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ee(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=er(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Xe(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function wRe(t){for(var e;t.hasNode(e=zd("_root")););return e}var ore=R(()=>{"use strict";Pt();ya();o(sre,"buildLayerGraph");o(wRe,"createRootNode")});function lre(t,e){for(var r=0,n=1;n0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var cre=R(()=>{"use strict";Pt();o(lre,"crossCount");o(TRe,"twoLayerCrossCount")});function ure(t){var e={},r=$r(t.nodes(),function(l){return!t.children(l).length}),n=_s(qe(r,function(l){return t.node(l).rank})),i=qe(Go(n+1),function(){return[]});function a(l){if(!Xe(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ee(t.successors(l),a)}}o(a,"dfs");var s=Tc(r,function(l){return t.node(l).rank});return Ee(s,a),i}var hre=R(()=>{"use strict";Pt();o(ure,"initOrder")});function fre(t,e){return qe(e,function(r){var n=t.inEdges(r);if(n.length){var i=Vr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var dre=R(()=>{"use strict";Pt();o(fre,"barycenter")});function pre(t,e){var r={};Ee(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};er(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ee(e.edges(),function(i){var a=r[i.v],s=r[i.w];!er(a)&&!er(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=$r(r,function(i){return!i.indegree});return kRe(n)}function kRe(t){var e=[];function r(a){return function(s){s.merged||(er(s.barycenter)||er(a.barycenter)||s.barycenter>=a.barycenter)&&ERe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ee(i.in.reverse(),r(i)),Ee(i.out,n(i))}return qe($r(e,function(a){return!a.merged}),function(a){return Fd(a,["vs","i","barycenter","weight"])})}function ERe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var mre=R(()=>{"use strict";Pt();o(pre,"resolveConflicts");o(kRe,"doResolveConflicts");o(ERe,"mergeEntries")});function yre(t,e){var r=Tte(t,function(f){return Xe(f,"barycenter")}),n=r.lhs,i=Tc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(CRe(!!e)),u=gre(a,i,u),Ee(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=gre(a,i,u)});var h={vs:Gr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function gre(t,e,r){for(var n;e.length&&(n=ma(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function CRe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var vre=R(()=>{"use strict";Pt();Ec();o(yre,"sort");o(gre,"consumeUnsortable");o(CRe,"compareWithBias")});function dD(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=$r(i,function(g){return g!==s&&g!==l}));var h=fre(t,i);Ee(h,function(g){if(t.children(g.v).length){var y=dD(t,g.v,r,n);u[g.v]=y,Xe(y,"barycenter")&&ARe(g,y)}});var f=pre(h,r);SRe(f,u);var d=yre(f,n);if(s&&(d.vs=Gr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Xe(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function SRe(t,e){Ee(t,function(r){r.vs=Gr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function ARe(t,e){er(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var xre=R(()=>{"use strict";Pt();dre();mre();vre();o(dD,"sortSubgraph");o(SRe,"expandSubgraphs");o(ARe,"mergeBarycenters")});function Tre(t){var e=KL(t),r=bre(t,Go(1,e+1),"inEdges"),n=bre(t,Go(e-1,-1,-1),"outEdges"),i=ure(t);wre(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){_Re(l%2?r:n,l%4>=2),i=Qh(t);var h=lre(t,i);h{"use strict";Pt();ya();Ec();are();ore();cre();hre();xre();o(Tre,"order");o(bre,"buildLayerGraphs");o(_Re,"sweepLayerGraphs");o(wre,"assignOrder")});function Ere(t){var e=DRe(t);Ee(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=LRe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function DRe(t){var e={},r=0;function n(i){var a=r;Ee(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ee(t.children(),n),e}var Cre=R(()=>{"use strict";Pt();o(Ere,"parentDummyChains");o(LRe,"findPath");o(DRe,"postorder")});function RRe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ma(a);return Ee(a,function(f,d){var p=MRe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ee(a.slice(l,d+1),function(g){Ee(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&Sre(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ee(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Vr(e,i),r}function MRe(t,e){if(t.node(e).dummy)return Za(t.predecessors(e),function(r){return t.node(r).dummy})}function Sre(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function IRe(t,e,r){if(e>r){var n=e;e=r,r=n}return Xe(t[e],r)}function ORe(t,e,r,n){var i={},a={},s={};return Ee(e,function(l){Ee(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ee(e,function(l){var u=-1;Ee(l,function(h){var f=n(h);if(f.length){f=Tc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";Pt();ya();Ec();o(RRe,"findType1Conflicts");o(NRe,"findType2Conflicts");o(MRe,"findOtherInnerSegmentNode");o(Sre,"addConflict");o(IRe,"hasConflict");o(ORe,"verticalAlignment");o(PRe,"horizontalCompaction");o(BRe,"buildBlockGraph");o(FRe,"findSmallestWidthAlignment");o(zRe,"alignCoordinates");o(GRe,"balance");o(Are,"positionX");o($Re,"sep");o(VRe,"width")});function Lre(t){t=eT(t),URe(t),ML(Are(t),function(e,r){t.node(r).x=e})}function URe(t){var e=Qh(t),r=t.graph().ranksep,n=0;Ee(e,function(i){var a=_s(qe(i,function(s){return t.node(s).height}));Ee(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Dre=R(()=>{"use strict";Pt();Ec();_re();o(Lre,"position");o(URe,"positionY")});function lo(t,e){var r=e&&e.debugTiming?kte:Ete;r("layout",function(){var n=r(" buildLayoutGraph",function(){return eNe(t)});r(" runLayout",function(){HRe(n,r)}),r(" updateInputGraph",function(){YRe(t,n)})})}function HRe(t,e){e(" makeSpaceForEdgeLabels",function(){tNe(t)}),e(" removeSelfEdges",function(){uNe(t)}),e(" acyclic",function(){gte(t)}),e(" nestingGraph.run",function(){ere(t)}),e(" rank",function(){hD(eT(t))}),e(" injectEdgeLabelProxies",function(){rNe(t)}),e(" removeEmptyRanks",function(){wte(t)}),e(" nestingGraph.cleanup",function(){rre(t)}),e(" normalizeRanks",function(){bte(t)}),e(" assignRankMinMax",function(){nNe(t)}),e(" removeEdgeLabelProxies",function(){iNe(t)}),e(" normalize.run",function(){Mte(t)}),e(" parentDummyChains",function(){Ere(t)}),e(" addBorderSegments",function(){Ste(t)}),e(" order",function(){Tre(t)}),e(" insertSelfEdges",function(){hNe(t)}),e(" adjustCoordinateSystem",function(){Lte(t)}),e(" position",function(){Lre(t)}),e(" positionSelfEdges",function(){fNe(t)}),e(" removeBorderNodes",function(){cNe(t)}),e(" normalize.undo",function(){Ite(t)}),e(" fixupEdgeLabelCoords",function(){oNe(t)}),e(" undoCoordinateSystem",function(){Dte(t)}),e(" translateGraph",function(){aNe(t)}),e(" assignNodeIntersects",function(){sNe(t)}),e(" reversePoints",function(){lNe(t)}),e(" acyclic.undo",function(){yte(t)})}function YRe(t,e){Ee(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ee(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Xe(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function eNe(t){var e=new lr({multigraph:!0,compound:!0}),r=mD(t.graph());return e.setGraph(Gh({},qRe,pD(r,WRe),Fd(r,XRe))),Ee(t.nodes(),function(n){var i=mD(t.node(n));e.setNode(n,Xh(pD(i,jRe),KRe)),e.setParent(n,t.parent(n))}),Ee(t.edges(),function(n){var i=mD(t.edge(n));e.setEdge(n,Gh({},ZRe,pD(i,QRe),Fd(i,JRe)))}),e}function tNe(t){var e=t.graph();e.ranksep/=2,Ee(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function rNe(t){Ee(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};kc(t,"edge-proxy",a,"_ep")}})}function nNe(t){var e=0;Ee(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=_s(e,n.maxRank))}),t.graph().maxRank=e}function iNe(t){Ee(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function aNe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ee(t.nodes(),function(h){u(t.node(h))}),Ee(t.edges(),function(h){var f=t.edge(h);Xe(f,"x")&&u(f)}),e-=s,n-=l,Ee(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ee(t.edges(),function(h){var f=t.edge(h);Ee(f.points,function(d){d.x-=e,d.y-=n}),Xe(f,"x")&&(f.x-=e),Xe(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function sNe(t){Ee(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(XL(n,a)),r.points.push(XL(i,s))})}function oNe(t){Ee(t.edges(),function(e){var r=t.edge(e);if(Xe(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function lNe(t){Ee(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function cNe(t){Ee(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ma(r.borderLeft)),s=t.node(ma(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ee(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function uNe(t){Ee(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function hNe(t){var e=Qh(t);Ee(e,function(r){var n=0;Ee(r,function(i,a){var s=t.node(i);s.order=a+n,Ee(s.selfEdges,function(l){kc(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function fNe(t){Ee(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function pD(t,e){return Pd(Fd(t,e),Number)}function mD(t){var e={};return Ee(t,function(r,n){e[n.toLowerCase()]=r}),e}var WRe,qRe,XRe,jRe,KRe,QRe,ZRe,JRe,Rre=R(()=>{"use strict";Pt();ya();Ate();Nte();qL();JL();fD();nre();kre();Cre();Dre();Ec();o(lo,"layout");o(HRe,"runLayout");o(YRe,"updateInputGraph");WRe=["nodesep","edgesep","ranksep","marginx","marginy"],qRe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},XRe=["acyclicer","ranker","rankdir","align"],jRe=["width","height"],KRe={width:0,height:0},QRe=["minlen","weight","width","height","labeloffset"],ZRe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},JRe=["labelpos"];o(eNe,"buildLayoutGraph");o(tNe,"makeSpaceForEdgeLabels");o(rNe,"injectEdgeLabelProxies");o(nNe,"assignRankMinMax");o(iNe,"removeEdgeLabelProxies");o(aNe,"translateGraph");o(sNe,"assignNodeIntersects");o(oNe,"fixupEdgeLabelCoords");o(lNe,"reversePointsForReversedEdges");o(cNe,"removeBorderNodes");o(uNe,"removeSelfEdges");o(hNe,"insertSelfEdges");o(fNe,"positionSelfEdges");o(pD,"selectNumberAttrs");o(mD,"canonicalize")});var Vd=R(()=>{"use strict";qL();Rre();JL();fD()});function zn(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:dNe(t),edges:pNe(t)};return er(t.graph())||(e.value=Qr(t.graph())),e}function dNe(t){return qe(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return er(r)||(i.value=r),er(n)||(i.parent=n),i})}function pNe(t){return qe(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return er(e.name)||(n.name=e.name),er(r)||(n.value=r),n})}var Pv=R(()=>{"use strict";Pt();Zw();o(zn,"write");o(dNe,"writeNodes");o(pNe,"writeEdges")});var cr,Ud,Mre,Ire,aT,mNe,Ore,Pre,gNe,Bm,Nre,Bre,Fre,zre,Gre,$re=R(()=>{"use strict";ut();ya();Pv();cr=new Map,Ud=new Map,Mre=new Map,Ire=o(()=>{Ud.clear(),Mre.clear(),cr.clear()},"clear"),aT=o((t,e)=>{let r=Ud.get(e)||[];return V.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),mNe=o((t,e)=>{let r=Ud.get(e)||[];return V.info("Descendants of ",e," is ",r),V.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||aT(t.v,e)||aT(t.w,e)||r.includes(t.w):(V.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Ore=o((t,e,r,n)=>{V.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),V.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Ore(a,e,r,n);else{let s=e.node(a);V.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(V.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(V.debug("Setting parent",a,t),r.setParent(a,t)):(V.info("In copy ",t,"root",n,"data",e.node(t),n),V.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);V.debug("Copying Edges",l),l.forEach(u=>{V.info("Edge",u);let h=e.edge(u.v,u.w,u.name);V.info("Edge data",h,n);try{mNe(u,n)?(V.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),V.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):V.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){V.error(f)}})}V.debug("Removing node",a),e.removeNode(a)})},"copy"),Pre=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)Mre.set(i,t),n=[...n,...Pre(i,e)];return n},"extractDescendants"),gNe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Bm=o((t,e,r)=>{let n=e.children(t);if(V.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Bm(a,e,r),l=gNe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Nre=o(t=>!cr.has(t)||!cr.get(t).externalConnections?t:cr.has(t)?cr.get(t).id:t,"getAnchorId"),Bre=o((t,e)=>{if(!t||e>10){V.debug("Opting out, no graph ");return}else V.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(V.warn("Cluster identified",r," Replacement id in edges: ",Bm(r,t,r)),Ud.set(r,Pre(r,t)),cr.set(r,{id:Bm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(V.debug("Cluster identified",r,Ud),i.forEach(a=>{let s=aT(a.v,r),l=aT(a.w,r);s^l&&(V.warn("Edge: ",a," leaves cluster ",r),V.warn("Descendants of XXX ",r,": ",Ud.get(r)),cr.get(r).externalConnections=!0)})):V.debug("Not a cluster ",r,Ud)});for(let r of cr.keys()){let n=cr.get(r).id,i=t.parent(n);i!==r&&cr.has(i)&&!cr.get(i).externalConnections&&(cr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);V.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),V.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(V.warn("Fix XXX",cr,"ids:",r.v,r.w,"Translating: ",cr.get(r.v)," --- ",cr.get(r.w)),cr.get(r.v)||cr.get(r.w)){if(V.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Nre(r.v),a=Nre(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);cr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);cr.get(s).externalConnections=!0,n.toCluster=r.w}V.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),V.warn("Adjusted Graph",zn(t)),Fre(t,0),V.trace(cr)},"adjustClustersAndEdges"),Fre=o((t,e)=>{if(V.warn("extractor - ",e,zn(t),t.children("D")),e>10){V.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){V.debug("Done, no node has children",t.nodes());return}V.debug("Nodes = ",r,e);for(let i of r)if(V.debug("Extracting node",i,cr,cr.has(i)&&!cr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!cr.has(i))V.debug("Not a cluster",i,e);else if(!cr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){V.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";cr.get(i)?.clusterData?.dir&&(s=cr.get(i).clusterData.dir,V.warn("Fixing dir",cr.get(i).clusterData.dir,s));let l=new lr({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});V.warn("Old graph before copy",zn(t)),Ore(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:cr.get(i).clusterData,label:cr.get(i).label,graph:l}),V.warn("New graph after copy node: (",i,")",zn(l)),V.debug("Old graph after copy",zn(t))}else V.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!cr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),V.debug(cr);r=t.nodes(),V.warn("New list of nodes",r);for(let i of r){let a=t.node(i);V.warn(" Now next level",i,a),a?.clusterNode&&Fre(a.graph,e+1)}},"extractor"),zre=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=zre(t,i);r=[...r,...a]}),r},"sorter"),Gre=o(t=>zre(t,t.children()),"sortNodesByHierarchy")});var Ure={};hr(Ure,{render:()=>yNe});var Vre,yNe,Hre=R(()=>{"use strict";Vd();Pv();ya();Q9();ri();$re();tL();X9();K9();ut();_d();_t();Vre=o(async(t,e,r,n,i,a)=>{V.warn("Graph in recursive render:XAX",zn(e),i);let s=e.graph().rankdir;V.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?V.info("Recursive render XXX",e.nodes()):V.info("No nodes found for",e),e.edges().length>0&&V.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));V.trace(`Setting data for parent cluster XXX + Node.id = `,y,` + data=`,x.height,` +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(V.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(V.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){V.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Vre(d,v.graph,r,n,e.node(y),a),S=w.elem;ar(v,S),v.diff=w.diff||0,V.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),lQ(S,v)}else e.children(y).length>0?(V.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),V.trace(Bm(v.id,e)),cr.set(v.id,{id:Bm(v.id,e),node:v})):(V.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await rw(d,e.node(y),s))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);V.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),V.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),V.info("Fix",cr,"ids:",v.v,v.w,"Translating: ",cr.get(v.v),cr.get(v.w)),await Q5(f,x)});await Promise.all(y)},"processEdges")(),V.info("Graph before layout:",JSON.stringify(zn(e))),V.info("############################################# XXX"),V.info("### Layout ### XXX"),V.info("############################################# XXX"),lo(e),V.info("Graph after layout:",JSON.stringify(zn(e)));let m=0,{subGraphTitleTotalMargin:g}=io(a);return await Promise.all(Gre(e).map(async function(y){let v=e.node(y);if(V.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,V.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),cr.get(v.id).node=v,eL(v);else if(e.children(y).length>0){V.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;V.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await Y5(u,v),cr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,V.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),eL(v)}})),e.edges().forEach(function(y){let v=e.edge(y);V.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(S=>S.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=J5(h,v,cr,r,x,b,n);Z5(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);V.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),V.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),yNe=o(async(t,e)=>{let r=new lr({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");ew(n,t.markers,t.type,t.diagramId),cQ(),lK(),rK(),Ire(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),V.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc{"use strict";hQ();ut();Bv={},gD=o(t=>{for(let e of t)Bv[e.name]=e},"registerLayoutLoaders"),vNe=o(()=>{gD([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(Hre(),Ure)),"loader")}])},"registerDefaultLayoutLoaders");vNe();sT=o(async(t,e)=>{if(!(t.layoutAlgorithm in Bv))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=Bv[t.layoutAlgorithm];return(await r.loader()).render(t,e,uQ,{algorithm:r.algorithm})},"render"),Yre=o((t="",{fallback:e="dagre"}={})=>{if(t in Bv)return t;if(e in Bv)return V.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var lT,xNe,bNe,yD=R(()=>{"use strict";Yn();ut();lT=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=xNe(t,e);Sr(t,a,i,n);let u=bNe(s,l,i,a,e);t.attr("viewBox",u),V.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),xNe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),bNe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var wNe,TNe,Wre,qre=R(()=>{"use strict";Zt();_t();ut();L9();oT();yD();xr();f9();wNe=o(function(t,e){return e.db.getClasses()},"getClasses"),TNe=o(async function(t,e,r,n){V.info("REF0:"),V.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=de(),l;i==="sandbox"&&(l=$e("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;V.debug("Before getData: ");let h=n.db.getData();V.debug("Data: ",h);let f=I5(e,i),d=h9();h.type=n.type,h.layoutAlgorithm=Yre(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&V.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,V.debug("REF1:",h),await sT(h,f);let p=h.config.flowchart?.diagramPadding??8;Lt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),lT(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=$e(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),Wre={getClasses:wNe,draw:TNe}});var vD,Xre,jre=R(()=>{"use strict";vD=function(){var t=o(function(qi,ht,At,$t){for(At=At||{},$t=qi.length;$t--;At[qi[$t]]=ht);return At},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],S=[1,33],T=[1,44],E=[1,46],_=[1,42],A=[1,47],L=[1,43],M=[1,50],N=[1,45],k=[1,51],I=[1,52],C=[1,34],O=[1,35],D=[1,36],P=[1,37],F=[1,57],B=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],$=[1,61],z=[1,60],Y=[1,62],Q=[8,9,11,73,75],X=[1,88],ie=[1,93],j=[1,92],J=[1,89],Z=[1,85],H=[1,91],q=[1,87],K=[1,94],se=[1,90],ce=[1,95],ue=[1,86],te=[8,9,10,11,73,75],De=[8,9,10,11,44,73,75],oe=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],ke=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],Ie=[42,58,86,99,102,103,106,108,111,112,113],Se=[1,121],Ue=[1,120],Pe=[1,128],_e=[1,142],me=[1,143],W=[1,144],fe=[1,145],ge=[1,130],re=[1,132],he=[1,136],ne=[1,137],ae=[1,138],we=[1,139],Te=[1,140],Ce=[1,141],Ae=[1,146],Ge=[1,147],Me=[1,126],ye=[1,127],He=[1,134],ze=[1,129],Ze=[1,133],gt=[1,131],yt=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],tt=[1,149],Ye=[8,9,11],Je=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],Ve=[1,169],je=[1,165],kt=[1,166],at=[1,170],xt=[1,167],it=[1,168],dt=[75,113,116],lt=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],It=[10,103],mt=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],St=[1,235],gr=[1,233],xn=[1,237],jt=[1,231],rn=[1,232],Er=[1,234],Kn=[1,236],hn=[1,238],Qn=[1,255],on=[8,9,11,103],Rn=[8,9,10,11,58,81,102,103,106,107,108,109],Ha={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(ht,At,$t,rt,Ot,pe,ur){var be=pe.length-1;switch(Ot){case 2:this.$=[];break;case 3:(!Array.isArray(pe[be])||pe[be].length>0)&&pe[be-1].push(pe[be]),this.$=pe[be-1];break;case 4:case 176:this.$=pe[be];break;case 11:rt.setDirection("TB"),this.$="TB";break;case 12:rt.setDirection(pe[be-1]),this.$=pe[be-1];break;case 27:this.$=pe[be-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=rt.addSubGraph(pe[be-6],pe[be-1],pe[be-4]);break;case 34:this.$=rt.addSubGraph(pe[be-3],pe[be-1],pe[be-3]);break;case 35:this.$=rt.addSubGraph(void 0,pe[be-1],void 0);break;case 37:this.$=pe[be].trim(),rt.setAccTitle(this.$);break;case 38:case 39:this.$=pe[be].trim(),rt.setAccDescription(this.$);break;case 43:rt.addLink(pe[be-2].stmt,pe[be],pe[be-1]),this.$={stmt:pe[be],nodes:pe[be].concat(pe[be-2].nodes)};break;case 44:rt.addLink(pe[be-3].stmt,pe[be-1],pe[be-2]),this.$={stmt:pe[be-1],nodes:pe[be-1].concat(pe[be-3].nodes)};break;case 45:this.$={stmt:pe[be-1],nodes:pe[be-1]};break;case 46:this.$={stmt:pe[be],nodes:pe[be]};break;case 47:this.$=[pe[be]];break;case 48:this.$=pe[be-4].concat(pe[be]);break;case 49:this.$=pe[be];break;case 50:this.$=pe[be-2],rt.setClass(pe[be-2],pe[be]);break;case 51:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"square");break;case 52:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"doublecircle");break;case 53:this.$=pe[be-5],rt.addVertex(pe[be-5],pe[be-2],"circle");break;case 54:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"ellipse");break;case 55:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"stadium");break;case 56:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"subroutine");break;case 57:this.$=pe[be-7],rt.addVertex(pe[be-7],pe[be-1],"rect",void 0,void 0,void 0,Object.fromEntries([[pe[be-5],pe[be-3]]]));break;case 58:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"cylinder");break;case 59:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"round");break;case 60:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"diamond");break;case 61:this.$=pe[be-5],rt.addVertex(pe[be-5],pe[be-2],"hexagon");break;case 62:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"odd");break;case 63:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"trapezoid");break;case 64:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"inv_trapezoid");break;case 65:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"lean_right");break;case 66:this.$=pe[be-3],rt.addVertex(pe[be-3],pe[be-1],"lean_left");break;case 67:this.$=pe[be],rt.addVertex(pe[be]);break;case 68:pe[be-1].text=pe[be],this.$=pe[be-1];break;case 69:case 70:pe[be-2].text=pe[be-1],this.$=pe[be-2];break;case 71:this.$=pe[be];break;case 72:var Ir=rt.destructLink(pe[be],pe[be-2]);this.$={type:Ir.type,stroke:Ir.stroke,length:Ir.length,text:pe[be-1]};break;case 73:this.$={text:pe[be],type:"text"};break;case 74:this.$={text:pe[be-1].text+""+pe[be],type:pe[be-1].type};break;case 75:this.$={text:pe[be],type:"string"};break;case 76:this.$={text:pe[be],type:"markdown"};break;case 77:var Ir=rt.destructLink(pe[be]);this.$={type:Ir.type,stroke:Ir.stroke,length:Ir.length};break;case 78:this.$=pe[be-1];break;case 79:this.$={text:pe[be],type:"text"};break;case 80:this.$={text:pe[be-1].text+""+pe[be],type:pe[be-1].type};break;case 81:this.$={text:pe[be],type:"string"};break;case 82:case 97:this.$={text:pe[be],type:"markdown"};break;case 94:this.$={text:pe[be],type:"text"};break;case 95:this.$={text:pe[be-1].text+""+pe[be],type:pe[be-1].type};break;case 96:this.$={text:pe[be],type:"text"};break;case 98:this.$=pe[be-4],rt.addClass(pe[be-2],pe[be]);break;case 99:this.$=pe[be-4],rt.setClass(pe[be-2],pe[be]);break;case 100:case 108:this.$=pe[be-1],rt.setClickEvent(pe[be-1],pe[be]);break;case 101:case 109:this.$=pe[be-3],rt.setClickEvent(pe[be-3],pe[be-2]),rt.setTooltip(pe[be-3],pe[be]);break;case 102:this.$=pe[be-2],rt.setClickEvent(pe[be-2],pe[be-1],pe[be]);break;case 103:this.$=pe[be-4],rt.setClickEvent(pe[be-4],pe[be-3],pe[be-2]),rt.setTooltip(pe[be-4],pe[be]);break;case 104:this.$=pe[be-2],rt.setLink(pe[be-2],pe[be]);break;case 105:this.$=pe[be-4],rt.setLink(pe[be-4],pe[be-2]),rt.setTooltip(pe[be-4],pe[be]);break;case 106:this.$=pe[be-4],rt.setLink(pe[be-4],pe[be-2],pe[be]);break;case 107:this.$=pe[be-6],rt.setLink(pe[be-6],pe[be-4],pe[be]),rt.setTooltip(pe[be-6],pe[be-2]);break;case 110:this.$=pe[be-1],rt.setLink(pe[be-1],pe[be]);break;case 111:this.$=pe[be-3],rt.setLink(pe[be-3],pe[be-2]),rt.setTooltip(pe[be-3],pe[be]);break;case 112:this.$=pe[be-3],rt.setLink(pe[be-3],pe[be-2],pe[be]);break;case 113:this.$=pe[be-5],rt.setLink(pe[be-5],pe[be-4],pe[be]),rt.setTooltip(pe[be-5],pe[be-2]);break;case 114:this.$=pe[be-4],rt.addVertex(pe[be-2],void 0,void 0,pe[be]);break;case 115:this.$=pe[be-4],rt.updateLink([pe[be-2]],pe[be]);break;case 116:this.$=pe[be-4],rt.updateLink(pe[be-2],pe[be]);break;case 117:this.$=pe[be-8],rt.updateLinkInterpolate([pe[be-6]],pe[be-2]),rt.updateLink([pe[be-6]],pe[be]);break;case 118:this.$=pe[be-8],rt.updateLinkInterpolate(pe[be-6],pe[be-2]),rt.updateLink(pe[be-6],pe[be]);break;case 119:this.$=pe[be-6],rt.updateLinkInterpolate([pe[be-4]],pe[be]);break;case 120:this.$=pe[be-6],rt.updateLinkInterpolate(pe[be-4],pe[be]);break;case 121:case 123:this.$=[pe[be]];break;case 122:case 124:pe[be-2].push(pe[be]),this.$=pe[be-2];break;case 126:this.$=pe[be-1]+pe[be];break;case 174:this.$=pe[be];break;case 175:this.$=pe[be-1]+""+pe[be];break;case 177:this.$=pe[be-1]+""+pe[be];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,40:28,41:38,42:g,43:39,45:40,58:y,81:v,82:x,83:b,84:w,85:S,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I,118:C,119:O,120:D,121:P},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(B,[2,3]),t(B,[2,4]),t(B,[2,5]),t(B,[2,6]),t(B,[2,7]),t(B,[2,8]),{8:$,9:z,11:Y,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:$,9:z,11:Y,21:66},{8:$,9:z,11:Y,21:67},{8:$,9:z,11:Y,21:68},{8:$,9:z,11:Y,21:69},{8:$,9:z,11:Y,21:70},{8:$,9:z,10:[1,71],11:Y,21:72},t(B,[2,36]),{35:[1,73]},{37:[1,74]},t(B,[2,39]),t(Q,[2,46],{18:75,10:F}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:X,42:ie,58:j,77:[1,83],86:J,92:[1,80],94:[1,81],98:82,102:Z,103:H,106:q,108:K,111:se,112:ce,113:ue,117:84},t(B,[2,178]),t(B,[2,179]),t(B,[2,180]),t(B,[2,181]),t(te,[2,47]),t(te,[2,49],{44:[1,96]}),t(De,[2,67],{110:109,29:[1,97],42:g,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:y,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:T,99:E,102:_,103:A,106:L,108:M,111:N,112:k,113:I}),t(oe,[2,174]),t(oe,[2,135]),t(oe,[2,136]),t(oe,[2,137]),t(oe,[2,138]),t(oe,[2,139]),t(oe,[2,140]),t(oe,[2,141]),t(oe,[2,142]),t(oe,[2,143]),t(oe,[2,144]),t(oe,[2,145]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,110]},t(ke,[2,26],{18:111,10:F}),t(B,[2,27]),{40:112,41:38,42:g,43:39,45:40,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I},t(B,[2,40]),t(B,[2,41]),t(B,[2,42]),t(Ie,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:Se,116:Ue},t([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),t(B,[2,28]),t(B,[2,29]),t(B,[2,30]),t(B,[2,31]),t(B,[2,32]),{10:Pe,12:_e,14:me,27:W,28:122,32:fe,42:ge,58:re,73:he,77:[1,124],78:[1,125],80:135,81:ne,82:ae,83:we,84:Te,85:Ce,86:Ae,87:Ge,88:123,102:Me,106:ye,108:He,111:ze,112:Ze,113:gt},t(yt,a,{5:148}),t(B,[2,37]),t(B,[2,38]),t(Q,[2,45],{42:tt}),{42:g,45:150,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I},{99:[1,151],100:152,102:[1,153]},{42:g,45:154,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I},{42:g,45:155,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I},t(Ye,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},t(Ye,[2,108],{117:160,10:[1,159],14:X,42:ie,58:j,86:J,102:Z,103:H,106:q,108:K,111:se,112:ce,113:ue}),t(Ye,[2,110],{10:[1,161]}),t(Je,[2,176]),t(Je,[2,163]),t(Je,[2,164]),t(Je,[2,165]),t(Je,[2,166]),t(Je,[2,167]),t(Je,[2,168]),t(Je,[2,169]),t(Je,[2,170]),t(Je,[2,171]),t(Je,[2,172]),t(Je,[2,173]),{42:g,45:162,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I},{30:163,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:171,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:173,48:[1,172],65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:174,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:175,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:176,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{106:[1,177]},{30:178,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:179,63:[1,180],65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:181,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:182,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{30:183,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},t(oe,[2,175]),t(i,[2,20]),t(ke,[2,25]),t(Q,[2,43],{18:184,10:F}),t(Ie,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{75:[1,188],76:189,113:Se,116:Ue},t(dt,[2,73]),t(dt,[2,75]),t(dt,[2,76]),t(dt,[2,161]),t(dt,[2,162]),{8:$,9:z,10:Pe,11:Y,12:_e,14:me,21:191,27:W,29:[1,190],32:fe,42:ge,58:re,73:he,80:135,81:ne,82:ae,83:we,84:Te,85:Ce,86:Ae,87:Ge,88:192,102:Me,106:ye,108:He,111:ze,112:Ze,113:gt},t(lt,[2,94]),t(lt,[2,96]),t(lt,[2,97]),t(lt,[2,150]),t(lt,[2,151]),t(lt,[2,152]),t(lt,[2,153]),t(lt,[2,154]),t(lt,[2,155]),t(lt,[2,156]),t(lt,[2,157]),t(lt,[2,158]),t(lt,[2,159]),t(lt,[2,160]),t(lt,[2,83]),t(lt,[2,84]),t(lt,[2,85]),t(lt,[2,86]),t(lt,[2,87]),t(lt,[2,88]),t(lt,[2,89]),t(lt,[2,90]),t(lt,[2,91]),t(lt,[2,92]),t(lt,[2,93]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,193],33:24,34:d,36:p,38:m,40:28,41:38,42:g,43:39,45:40,58:y,81:v,82:x,83:b,84:w,85:S,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I,118:C,119:O,120:D,121:P},{10:F,18:194},{10:[1,195],42:g,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:109,111:N,112:k,113:I},{10:[1,196]},{10:[1,197],103:[1,198]},t(It,[2,121]),{10:[1,199],42:g,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:109,111:N,112:k,113:I},{10:[1,200],42:g,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:109,111:N,112:k,113:I},{77:[1,201]},t(Ye,[2,102],{10:[1,202]}),t(Ye,[2,104],{10:[1,203]}),{77:[1,204]},t(Je,[2,177]),{77:[1,205],95:[1,206]},t(te,[2,50],{110:109,42:g,58:y,86:T,99:E,102:_,103:A,106:L,108:M,111:N,112:k,113:I}),{31:[1,207],65:Ve,79:208,113:at,114:xt,115:it},t(mt,[2,79]),t(mt,[2,81]),t(mt,[2,82]),t(mt,[2,146]),t(mt,[2,147]),t(mt,[2,148]),t(mt,[2,149]),{47:[1,209],65:Ve,79:208,113:at,114:xt,115:it},{30:210,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{49:[1,211],65:Ve,79:208,113:at,114:xt,115:it},{51:[1,212],65:Ve,79:208,113:at,114:xt,115:it},{53:[1,213],65:Ve,79:208,113:at,114:xt,115:it},{55:[1,214],65:Ve,79:208,113:at,114:xt,115:it},{58:[1,215]},{62:[1,216],65:Ve,79:208,113:at,114:xt,115:it},{64:[1,217],65:Ve,79:208,113:at,114:xt,115:it},{30:218,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},{31:[1,219],65:Ve,79:208,113:at,114:xt,115:it},{65:Ve,67:[1,220],69:[1,221],79:208,113:at,114:xt,115:it},{65:Ve,67:[1,223],69:[1,222],79:208,113:at,114:xt,115:it},t(Q,[2,44],{42:tt}),t(Ie,[2,70]),t(Ie,[2,69]),{60:[1,224],65:Ve,79:208,113:at,114:xt,115:it},t(Ie,[2,72]),t(dt,[2,74]),{30:225,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},t(yt,a,{5:226}),t(lt,[2,95]),t(B,[2,35]),{41:227,42:g,43:39,45:40,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I},{10:St,58:gr,81:xn,89:228,102:jt,104:229,105:230,106:rn,107:Er,108:Kn,109:hn},{10:St,58:gr,81:xn,89:239,101:[1,240],102:jt,104:229,105:230,106:rn,107:Er,108:Kn,109:hn},{10:St,58:gr,81:xn,89:241,101:[1,242],102:jt,104:229,105:230,106:rn,107:Er,108:Kn,109:hn},{102:[1,243]},{10:St,58:gr,81:xn,89:244,102:jt,104:229,105:230,106:rn,107:Er,108:Kn,109:hn},{42:g,45:245,58:y,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I},t(Ye,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},t(Ye,[2,109]),t(Ye,[2,111],{10:[1,249]}),t(Ye,[2,112]),t(De,[2,51]),t(mt,[2,80]),t(De,[2,52]),{49:[1,250],65:Ve,79:208,113:at,114:xt,115:it},t(De,[2,59]),t(De,[2,54]),t(De,[2,55]),t(De,[2,56]),{106:[1,251]},t(De,[2,58]),t(De,[2,60]),{64:[1,252],65:Ve,79:208,113:at,114:xt,115:it},t(De,[2,62]),t(De,[2,63]),t(De,[2,65]),t(De,[2,64]),t(De,[2,66]),t([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:Ve,79:208,113:at,114:xt,115:it},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,254],33:24,34:d,36:p,38:m,40:28,41:38,42:g,43:39,45:40,58:y,81:v,82:x,83:b,84:w,85:S,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I,118:C,119:O,120:D,121:P},t(te,[2,48]),t(Ye,[2,114],{103:Qn}),t(on,[2,123],{105:256,10:St,58:gr,81:xn,102:jt,106:rn,107:Er,108:Kn,109:hn}),t(Rn,[2,125]),t(Rn,[2,127]),t(Rn,[2,128]),t(Rn,[2,129]),t(Rn,[2,130]),t(Rn,[2,131]),t(Rn,[2,132]),t(Rn,[2,133]),t(Rn,[2,134]),t(Ye,[2,115],{103:Qn}),{10:[1,257]},t(Ye,[2,116],{103:Qn}),{10:[1,258]},t(It,[2,122]),t(Ye,[2,98],{103:Qn}),t(Ye,[2,99],{110:109,42:g,58:y,86:T,99:E,102:_,103:A,106:L,108:M,111:N,112:k,113:I}),t(Ye,[2,103]),t(Ye,[2,105],{10:[1,259]}),t(Ye,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:$,9:z,11:Y,21:264},t(B,[2,34]),{10:St,58:gr,81:xn,102:jt,104:265,105:230,106:rn,107:Er,108:Kn,109:hn},t(Rn,[2,126]),{14:X,42:ie,58:j,86:J,98:266,102:Z,103:H,106:q,108:K,111:se,112:ce,113:ue,117:84},{14:X,42:ie,58:j,86:J,98:267,102:Z,103:H,106:q,108:K,111:se,112:ce,113:ue,117:84},{95:[1,268]},t(Ye,[2,113]),t(De,[2,53]),{30:269,65:Ve,77:je,78:kt,79:164,113:at,114:xt,115:it},t(De,[2,61]),t(yt,a,{5:270}),t(on,[2,124],{105:256,10:St,58:gr,81:xn,102:jt,106:rn,107:Er,108:Kn,109:hn}),t(Ye,[2,119],{117:160,10:[1,271],14:X,42:ie,58:j,86:J,102:Z,103:H,106:q,108:K,111:se,112:ce,113:ue}),t(Ye,[2,120],{117:160,10:[1,272],14:X,42:ie,58:j,86:J,102:Z,103:H,106:q,108:K,111:se,112:ce,113:ue}),t(Ye,[2,107]),{31:[1,273],65:Ve,79:208,113:at,114:xt,115:it},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,274],33:24,34:d,36:p,38:m,40:28,41:38,42:g,43:39,45:40,58:y,81:v,82:x,83:b,84:w,85:S,86:T,99:E,102:_,103:A,106:L,108:M,110:41,111:N,112:k,113:I,118:C,119:O,120:D,121:P},{10:St,58:gr,81:xn,89:275,102:jt,104:229,105:230,106:rn,107:Er,108:Kn,109:hn},{10:St,58:gr,81:xn,89:276,102:jt,104:229,105:230,106:rn,107:Er,108:Kn,109:hn},t(De,[2,57]),t(B,[2,33]),t(Ye,[2,117],{103:Qn}),t(Ye,[2,118],{103:Qn})],defaultActions:{},parseError:o(function(ht,At){if(At.recoverable)this.trace(ht);else{var $t=new Error(ht);throw $t.hash=At,$t}},"parseError"),parse:o(function(ht){var At=this,$t=[0],rt=[],Ot=[null],pe=[],ur=this.table,be="",Ir=0,Xc=0,M1=0,_b=2,I1=1,O1=pe.slice.call(arguments,1),ci=Object.create(this.lexer),ko={yy:{}};for(var ih in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ih)&&(ko.yy[ih]=this.yy[ih]);ci.setInput(ht,ko.yy),ko.yy.lexer=ci,ko.yy.parser=this,typeof ci.yylloc>"u"&&(ci.yylloc={});var Us=ci.yylloc;pe.push(Us);var ah=ci.options&&ci.options.ranges;typeof ko.yy.parseError=="function"?this.parseError=ko.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Lb(La){$t.length=$t.length-2*La,Ot.length=Ot.length-La,pe.length=pe.length-La}o(Lb,"popStack");function P1(){var La;return La=rt.pop()||ci.lex()||I1,typeof La!="number"&&(La instanceof Array&&(rt=La,La=rt.pop()),La=At.symbols_[La]||La),La}o(P1,"lex");for(var sa,jc,Kc,us,_i,Wl,sh={},zf,Hs,B1,Gf;;){if(Kc=$t[$t.length-1],this.defaultActions[Kc]?us=this.defaultActions[Kc]:((sa===null||typeof sa>"u")&&(sa=P1()),us=ur[Kc]&&ur[Kc][sa]),typeof us>"u"||!us.length||!us[0]){var F1="";Gf=[];for(zf in ur[Kc])this.terminals_[zf]&&zf>_b&&Gf.push("'"+this.terminals_[zf]+"'");ci.showPosition?F1="Parse error on line "+(Ir+1)+`: +`+ci.showPosition()+` +Expecting `+Gf.join(", ")+", got '"+(this.terminals_[sa]||sa)+"'":F1="Parse error on line "+(Ir+1)+": Unexpected "+(sa==I1?"end of input":"'"+(this.terminals_[sa]||sa)+"'"),this.parseError(F1,{text:ci.match,token:this.terminals_[sa]||sa,line:ci.yylineno,loc:Us,expected:Gf})}if(us[0]instanceof Array&&us.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Kc+", token: "+sa);switch(us[0]){case 1:$t.push(sa),Ot.push(ci.yytext),pe.push(ci.yylloc),$t.push(us[1]),sa=null,jc?(sa=jc,jc=null):(Xc=ci.yyleng,be=ci.yytext,Ir=ci.yylineno,Us=ci.yylloc,M1>0&&M1--);break;case 2:if(Hs=this.productions_[us[1]][1],sh.$=Ot[Ot.length-Hs],sh._$={first_line:pe[pe.length-(Hs||1)].first_line,last_line:pe[pe.length-1].last_line,first_column:pe[pe.length-(Hs||1)].first_column,last_column:pe[pe.length-1].last_column},ah&&(sh._$.range=[pe[pe.length-(Hs||1)].range[0],pe[pe.length-1].range[1]]),Wl=this.performAction.apply(sh,[be,Xc,Ir,ko.yy,us[1],Ot,pe].concat(O1)),typeof Wl<"u")return Wl;Hs&&($t=$t.slice(0,-1*Hs*2),Ot=Ot.slice(0,-1*Hs),pe=pe.slice(0,-1*Hs)),$t.push(this.productions_[us[1]][0]),Ot.push(sh.$),pe.push(sh._$),B1=ur[$t[$t.length-2]][$t[$t.length-1]],$t.push(B1);break;case 3:return!0}}return!0},"parse")},_a=function(){var qi={EOF:1,parseError:o(function(At,$t){if(this.yy.parser)this.yy.parser.parseError(At,$t);else throw new Error(At)},"parseError"),setInput:o(function(ht,At){return this.yy=At||this.yy||{},this._input=ht,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ht=this._input[0];this.yytext+=ht,this.yyleng++,this.offset++,this.match+=ht,this.matched+=ht;var At=ht.match(/(?:\r\n?|\n).*/g);return At?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ht},"input"),unput:o(function(ht){var At=ht.length,$t=ht.split(/(?:\r\n?|\n)/g);this._input=ht+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-At),this.offset-=At;var rt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),$t.length-1&&(this.yylineno-=$t.length-1);var Ot=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:$t?($t.length===rt.length?this.yylloc.first_column:0)+rt[rt.length-$t.length].length-$t[0].length:this.yylloc.first_column-At},this.options.ranges&&(this.yylloc.range=[Ot[0],Ot[0]+this.yyleng-At]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ht){this.unput(this.match.slice(ht))},"less"),pastInput:o(function(){var ht=this.matched.substr(0,this.matched.length-this.match.length);return(ht.length>20?"...":"")+ht.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ht=this.match;return ht.length<20&&(ht+=this._input.substr(0,20-ht.length)),(ht.substr(0,20)+(ht.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ht=this.pastInput(),At=new Array(ht.length+1).join("-");return ht+this.upcomingInput()+` +`+At+"^"},"showPosition"),test_match:o(function(ht,At){var $t,rt,Ot;if(this.options.backtrack_lexer&&(Ot={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ot.yylloc.range=this.yylloc.range.slice(0))),rt=ht[0].match(/(?:\r\n?|\n).*/g),rt&&(this.yylineno+=rt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:rt?rt[rt.length-1].length-rt[rt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ht[0].length},this.yytext+=ht[0],this.match+=ht[0],this.matches=ht,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ht[0].length),this.matched+=ht[0],$t=this.performAction.call(this,this.yy,this,At,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),$t)return $t;if(this._backtrack){for(var pe in Ot)this[pe]=Ot[pe];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ht,At,$t,rt;this._more||(this.yytext="",this.match="");for(var Ot=this._currentRules(),pe=0;peAt[0].length)){if(At=$t,rt=pe,this.options.backtrack_lexer){if(ht=this.test_match($t,Ot[pe]),ht!==!1)return ht;if(this._backtrack){At=!1;continue}else return!1}else if(!this.options.flex)break}return At?(ht=this.test_match(At,Ot[rt]),ht!==!1?ht:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var At=this.next();return At||this.lex()},"lex"),begin:o(function(At){this.conditionStack.push(At)},"begin"),popState:o(function(){var At=this.conditionStack.length-1;return At>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(At){return At=this.conditionStack.length-1-Math.abs(At||0),At>=0?this.conditionStack[At]:"INITIAL"},"topState"),pushState:o(function(At){this.begin(At)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(At,$t,rt,Ot){var pe=Ot;switch(rt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return At.lex.firstGraph()&&this.begin("dir"),12;break;case 30:return At.lex.firstGraph()&&this.begin("dir"),12;break;case 31:return At.lex.firstGraph()&&this.begin("dir"),12;break;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;break;case 39:return this.popState(),14;break;case 40:return this.popState(),14;break;case 41:return this.popState(),14;break;case 42:return this.popState(),14;break;case 43:return this.popState(),14;break;case 44:return this.popState(),14;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;break;case 62:return this.pushState("edgeText"),73;break;case 63:return 116;case 64:return this.popState(),75;break;case 65:return this.pushState("thickEdgeText"),73;break;case 66:return 116;case 67:return this.popState(),75;break;case 68:return this.pushState("dottedEdgeText"),73;break;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;break;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;break;case 74:return this.popState(),53;break;case 75:return this.pushState("text"),52;break;case 76:return this.popState(),55;break;case 77:return this.pushState("text"),54;break;case 78:return 56;case 79:return this.pushState("text"),65;break;case 80:return this.popState(),62;break;case 81:return this.pushState("text"),61;break;case 82:return this.popState(),47;break;case 83:return this.pushState("text"),46;break;case 84:return this.popState(),67;break;case 85:return this.popState(),69;break;case 86:return 114;case 87:return this.pushState("trapText"),66;break;case 88:return this.pushState("trapText"),68;break;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;break;case 101:return this.pushState("text"),60;break;case 102:return this.popState(),49;break;case 103:return this.pushState("text"),48;break;case 104:return this.popState(),31;break;case 105:return this.pushState("text"),29;break;case 106:return this.popState(),64;break;case 107:return this.pushState("text"),63;break;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return qi}();Ha.lexer=_a;function To(){this.yy={}}return o(To,"Parser"),To.prototype=Ha,Ha.Parser=To,new To}();vD.parser=vD;Xre=vD});var kNe,ENe,Kre,Qre=R(()=>{"use strict";al();kNe=o((t,e)=>{let r=X1,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Ws(n,i,a,e)},"fade"),ENe=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span { + color: ${t.titleColor}; + } + .cluster-label span p { + background-color: transparent; + } + + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .rough-node .label text , .node .label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${kNe(t.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${t.clusterBkg}; + stroke: ${t.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),Kre=ENe});var cT={};hr(cT,{diagram:()=>CNe});var CNe,uT=R(()=>{"use strict";_t();f9();qre();jre();Qre();CNe={parser:Xre,db:A5,renderer:Wre,styles:Kre,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&iS({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,iS({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),A5.clear(),A5.setGen("gen-2")},"init")}});var xD,rne,nne=R(()=>{"use strict";xD=function(){var t=o(function(A,L,M,N){for(M=M||{},N=A.length;N--;M[A[N]]=L);return M},"o"),e=[6,8,10,20,22,24,26,27,28],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,14],l=[1,15],u=[1,21],h=[1,22],f=[1,23],d=[1,24],p=[1,25],m=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],g=[1,34],y=[27,28,46,47],v=[41,42,43,44,45],x=[17,34],b=[1,54],w=[1,53],S=[17,34,36,38],T={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:o(function(L,M,N,k,I,C,O){var D=C.length-1;switch(I){case 1:break;case 2:this.$=[];break;case 3:C[D-1].push(C[D]),this.$=C[D-1];break;case 4:case 5:this.$=C[D];break;case 6:case 7:this.$=[];break;case 8:k.addEntity(C[D-4]),k.addEntity(C[D-2]),k.addRelationship(C[D-4],C[D],C[D-2],C[D-3]);break;case 9:k.addEntity(C[D-3]),k.addAttributes(C[D-3],C[D-1]);break;case 10:k.addEntity(C[D-2]);break;case 11:k.addEntity(C[D]);break;case 12:k.addEntity(C[D-6],C[D-4]),k.addAttributes(C[D-6],C[D-1]);break;case 13:k.addEntity(C[D-5],C[D-3]);break;case 14:k.addEntity(C[D-3],C[D-1]);break;case 15:case 16:this.$=C[D].trim(),k.setAccTitle(this.$);break;case 17:case 18:this.$=C[D].trim(),k.setAccDescription(this.$);break;case 19:case 43:this.$=C[D];break;case 20:case 41:case 42:this.$=C[D].replace(/"/g,"");break;case 21:case 29:this.$=[C[D]];break;case 22:C[D].push(C[D-1]),this.$=C[D];break;case 23:this.$={attributeType:C[D-1],attributeName:C[D]};break;case 24:this.$={attributeType:C[D-2],attributeName:C[D-1],attributeKeyTypeList:C[D]};break;case 25:this.$={attributeType:C[D-2],attributeName:C[D-1],attributeComment:C[D]};break;case 26:this.$={attributeType:C[D-3],attributeName:C[D-2],attributeKeyTypeList:C[D-1],attributeComment:C[D]};break;case 27:case 28:case 31:this.$=C[D];break;case 30:C[D-2].push(C[D]),this.$=C[D-2];break;case 32:this.$=C[D].replace(/"/g,"");break;case 33:this.$={cardA:C[D],relType:C[D-1],cardB:C[D-2]};break;case 34:this.$=k.Cardinality.ZERO_OR_ONE;break;case 35:this.$=k.Cardinality.ZERO_OR_MORE;break;case 36:this.$=k.Cardinality.ONE_OR_MORE;break;case 37:this.$=k.Cardinality.ONLY_ONE;break;case 38:this.$=k.Cardinality.MD_PARENT;break;case 39:this.$=k.Identification.NON_IDENTIFYING;break;case 40:this.$=k.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:u,42:h,43:f,44:d,45:p}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(m,[2,19]),t(m,[2,20]),t(e,[2,4]),{11:29,27:s,28:l},{16:30,17:[1,31],29:32,30:33,34:g},{11:35,27:s,28:l},{40:36,46:[1,37],47:[1,38]},t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(y,[2,37]),t(y,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:g},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:u,42:h,43:f,44:d,45:p},t(v,[2,39]),t(v,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(x,[2,23],{32:50,33:51,35:52,37:b,38:w}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(x,[2,24],{33:56,36:[1,57],38:w}),t(x,[2,25]),t(S,[2,29]),t(x,[2,32]),t(S,[2,31]),{16:58,17:[1,59],29:32,30:33,34:g},t(x,[2,26]),{35:60,37:b},{17:[1,61]},t(e,[2,13]),t(S,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:o(function(L,M){if(M.recoverable)this.trace(L);else{var N=new Error(L);throw N.hash=M,N}},"parseError"),parse:o(function(L){var M=this,N=[0],k=[],I=[null],C=[],O=this.table,D="",P=0,F=0,B=0,$=2,z=1,Y=C.slice.call(arguments,1),Q=Object.create(this.lexer),X={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(X.yy[ie]=this.yy[ie]);Q.setInput(L,X.yy),X.yy.lexer=Q,X.yy.parser=this,typeof Q.yylloc>"u"&&(Q.yylloc={});var j=Q.yylloc;C.push(j);var J=Q.options&&Q.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(Pe){N.length=N.length-2*Pe,I.length=I.length-Pe,C.length=C.length-Pe}o(Z,"popStack");function H(){var Pe;return Pe=k.pop()||Q.lex()||z,typeof Pe!="number"&&(Pe instanceof Array&&(k=Pe,Pe=k.pop()),Pe=M.symbols_[Pe]||Pe),Pe}o(H,"lex");for(var q,K,se,ce,ue,te,De={},oe,ke,Ie,Se;;){if(se=N[N.length-1],this.defaultActions[se]?ce=this.defaultActions[se]:((q===null||typeof q>"u")&&(q=H()),ce=O[se]&&O[se][q]),typeof ce>"u"||!ce.length||!ce[0]){var Ue="";Se=[];for(oe in O[se])this.terminals_[oe]&&oe>$&&Se.push("'"+this.terminals_[oe]+"'");Q.showPosition?Ue="Parse error on line "+(P+1)+`: +`+Q.showPosition()+` +Expecting `+Se.join(", ")+", got '"+(this.terminals_[q]||q)+"'":Ue="Parse error on line "+(P+1)+": Unexpected "+(q==z?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(Ue,{text:Q.match,token:this.terminals_[q]||q,line:Q.yylineno,loc:j,expected:Se})}if(ce[0]instanceof Array&&ce.length>1)throw new Error("Parse Error: multiple actions possible at state: "+se+", token: "+q);switch(ce[0]){case 1:N.push(q),I.push(Q.yytext),C.push(Q.yylloc),N.push(ce[1]),q=null,K?(q=K,K=null):(F=Q.yyleng,D=Q.yytext,P=Q.yylineno,j=Q.yylloc,B>0&&B--);break;case 2:if(ke=this.productions_[ce[1]][1],De.$=I[I.length-ke],De._$={first_line:C[C.length-(ke||1)].first_line,last_line:C[C.length-1].last_line,first_column:C[C.length-(ke||1)].first_column,last_column:C[C.length-1].last_column},J&&(De._$.range=[C[C.length-(ke||1)].range[0],C[C.length-1].range[1]]),te=this.performAction.apply(De,[D,F,P,X.yy,ce[1],I,C].concat(Y)),typeof te<"u")return te;ke&&(N=N.slice(0,-1*ke*2),I=I.slice(0,-1*ke),C=C.slice(0,-1*ke)),N.push(this.productions_[ce[1]][0]),I.push(De.$),C.push(De._$),Ie=O[N[N.length-2]][N[N.length-1]],N.push(Ie);break;case 3:return!0}}return!0},"parse")},E=function(){var A={EOF:1,parseError:o(function(M,N){if(this.yy.parser)this.yy.parser.parseError(M,N);else throw new Error(M)},"parseError"),setInput:o(function(L,M){return this.yy=M||this.yy||{},this._input=L,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var L=this._input[0];this.yytext+=L,this.yyleng++,this.offset++,this.match+=L,this.matched+=L;var M=L.match(/(?:\r\n?|\n).*/g);return M?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),L},"input"),unput:o(function(L){var M=L.length,N=L.split(/(?:\r\n?|\n)/g);this._input=L+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-M),this.offset-=M;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),N.length-1&&(this.yylineno-=N.length-1);var I=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:N?(N.length===k.length?this.yylloc.first_column:0)+k[k.length-N.length].length-N[0].length:this.yylloc.first_column-M},this.options.ranges&&(this.yylloc.range=[I[0],I[0]+this.yyleng-M]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(L){this.unput(this.match.slice(L))},"less"),pastInput:o(function(){var L=this.matched.substr(0,this.matched.length-this.match.length);return(L.length>20?"...":"")+L.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var L=this.match;return L.length<20&&(L+=this._input.substr(0,20-L.length)),(L.substr(0,20)+(L.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var L=this.pastInput(),M=new Array(L.length+1).join("-");return L+this.upcomingInput()+` +`+M+"^"},"showPosition"),test_match:o(function(L,M){var N,k,I;if(this.options.backtrack_lexer&&(I={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(I.yylloc.range=this.yylloc.range.slice(0))),k=L[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+L[0].length},this.yytext+=L[0],this.match+=L[0],this.matches=L,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(L[0].length),this.matched+=L[0],N=this.performAction.call(this,this.yy,this,M,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var C in I)this[C]=I[C];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var L,M,N,k;this._more||(this.yytext="",this.match="");for(var I=this._currentRules(),C=0;CM[0].length)){if(M=N,k=C,this.options.backtrack_lexer){if(L=this.test_match(N,I[C]),L!==!1)return L;if(this._backtrack){M=!1;continue}else return!1}else if(!this.options.flex)break}return M?(L=this.test_match(M,I[k]),L!==!1?L:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var M=this.next();return M||this.lex()},"lex"),begin:o(function(M){this.conditionStack.push(M)},"begin"),popState:o(function(){var M=this.conditionStack.length-1;return M>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(M){return M=this.conditionStack.length-1-Math.abs(M||0),M>=0?this.conditionStack[M]:"INITIAL"},"topState"),pushState:o(function(M){this.begin(M)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(M,N,k,I){var C=I;switch(k){case 0:return this.begin("acc_title"),22;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),24;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;break;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;break;case 22:return N.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return N.yytext[0];case 55:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return A}();T.lexer=E;function _(){this.yy={}}return o(_,"Parser"),_.prototype=T,T.Parser=_,new _}();xD.parser=xD;rne=xD});var Hd,bD,NNe,MNe,ine,INe,ONe,PNe,BNe,FNe,ane,sne=R(()=>{"use strict";ut();_t();bi();Hd=new Map,bD=[],NNe={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},MNe={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},ine=o(function(t,e=void 0){return Hd.has(t)?!Hd.get(t).alias&&e&&(Hd.get(t).alias=e,V.info(`Add alias '${e}' to entity '${t}'`)):(Hd.set(t,{attributes:[],alias:e}),V.info("Added new entity :",t)),Hd.get(t)},"addEntity"),INe=o(()=>Hd,"getEntities"),ONe=o(function(t,e){let r=ine(t),n;for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),V.debug("Added attribute ",e[n].attributeName)},"addAttributes"),PNe=o(function(t,e,r,n){let i={entityA:t,roleA:e,entityB:r,relSpec:n};bD.push(i),V.debug("Added new relationship :",i)},"addRelationship"),BNe=o(()=>bD,"getRelationships"),FNe=o(function(){Hd=new Map,bD=[],vr()},"clear"),ane={Cardinality:NNe,Identification:MNe,getConfig:o(()=>de().er,"getConfig"),addEntity:ine,addAttributes:ONe,getEntities:INe,addRelationship:PNe,getRelationships:BNe,clear:FNe,setAccTitle:kr,getAccTitle:Ar,setAccDescription:_r,getAccDescription:Lr,setDiagramTitle:nn,getDiagramTitle:Xr}});var Dl,zNe,$o,one=R(()=>{"use strict";Dl={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},zNe=o(function(t,e){let r;t.append("defs").append("marker").attr("id",Dl.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Dl.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Dl.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",Dl.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Dl.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Dl.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",Dl.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",Dl.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",Dl.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",Dl.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"insertMarkers"),$o={ERMarkers:Dl,insertMarkers:zNe}});var lne,cne=R(()=>{"use strict";lne=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function GNe(t){return typeof t=="string"&&lne.test(t)}var une,hne=R(()=>{"use strict";cne();o(GNe,"validate");une=GNe});function fne(t,e=0){return va[t[e+0]]+va[t[e+1]]+va[t[e+2]]+va[t[e+3]]+"-"+va[t[e+4]]+va[t[e+5]]+"-"+va[t[e+6]]+va[t[e+7]]+"-"+va[t[e+8]]+va[t[e+9]]+"-"+va[t[e+10]]+va[t[e+11]]+va[t[e+12]]+va[t[e+13]]+va[t[e+14]]+va[t[e+15]]}var va,dne=R(()=>{"use strict";va=[];for(let t=0;t<256;++t)va.push((t+256).toString(16).slice(1));o(fne,"unsafeStringify")});function $Ne(t){if(!une(t))throw TypeError("Invalid UUID");let e,r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}var pne,mne=R(()=>{"use strict";hne();o($Ne,"parse");pne=$Ne});function VNe(t){t=unescape(encodeURIComponent(t));let e=[];for(let r=0;r{"use strict";dne();mne();o(VNe,"stringToBytes");UNe="6ba7b810-9dad-11d1-80b4-00c04fd430c8",HNe="6ba7b811-9dad-11d1-80b4-00c04fd430c8";o(wD,"v35")});function YNe(t,e,r,n){switch(t){case 0:return e&r^~e&n;case 1:return e^r^n;case 2:return e&r^e&n^r&n;case 3:return e^r^n}}function TD(t,e){return t<>>32-e}function WNe(t){let e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){let s=unescape(encodeURIComponent(t));t=[];for(let l=0;l>>0;p=d,d=f,f=TD(h,30)>>>0,h=u,u=y}r[0]=r[0]+u>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+d>>>0,r[4]=r[4]+p>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}var yne,vne=R(()=>{"use strict";o(YNe,"f");o(TD,"ROTL");o(WNe,"sha1");yne=WNe});var qNe,kD,xne=R(()=>{"use strict";gne();vne();qNe=wD("v5",80,yne),kD=qNe});var bne=R(()=>{"use strict";xne()});function nMe(t="",e=""){let r=t.replace(XNe,"");return`${Tne(e)}${Tne(r)}${kD(t,rMe)}`}function Tne(t=""){return t.length>0?`${t}-`:""}var XNe,Ii,Fv,jNe,KNe,QNe,ZNe,kne,JNe,wne,eMe,tMe,rMe,Ene,Cne=R(()=>{"use strict";ya();Zt();Vd();_t();ut();xr();one();Yn();rr();bne();XNe=/[^\dA-Za-z](\W)*/g,Ii={},Fv=new Map,jNe=o(function(t){let e=Object.keys(t);for(let r of e)Ii[r]=t[r]},"setConf"),KNe=o((t,e,r)=>{let n=Ii.entityPadding/3,i=Ii.entityPadding/3,a=Ii.fontSize*.85,s=e.node().getBBox(),l=[],u=!1,h=!1,f=0,d=0,p=0,m=0,g=s.height+n*2,y=1;r.forEach(w=>{w.attributeKeyTypeList!==void 0&&w.attributeKeyTypeList.length>0&&(u=!0),w.attributeComment!==void 0&&(h=!0)}),r.forEach(w=>{let S=`${e.node().id}-attr-${y}`,T=0,E=gh(w.attributeType),_=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(E),A=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(w.attributeName),L={};L.tn=_,L.nn=A;let M=_.node().getBBox(),N=A.node().getBBox();if(f=Math.max(f,M.width),d=Math.max(d,N.width),T=Math.max(M.height,N.height),u){let k=w.attributeKeyTypeList!==void 0?w.attributeKeyTypeList.join(","):"",I=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(k);L.kn=I;let C=I.node().getBBox();p=Math.max(p,C.width),T=Math.max(T,C.height)}if(h){let k=t.append("text").classed("er entityLabel",!0).attr("id",`${S}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(w.attributeComment||"");L.cn=k;let I=k.node().getBBox();m=Math.max(m,I.width),T=Math.max(T,I.height)}L.height=T,l.push(L),g+=T+n*2,y+=1});let v=4;u&&(v+=2),h&&(v+=2);let x=f+d+p+m,b={width:Math.max(Ii.minEntityWidth,Math.max(s.width+Ii.entityPadding*2,x+i*v)),height:r.length>0?g:Math.max(Ii.minEntityHeight,s.height+Ii.entityPadding*2)};if(r.length>0){let w=Math.max(0,(b.width-x-i*v)/(v/2));e.attr("transform","translate("+b.width/2+","+(n+s.height/2)+")");let S=s.height+n*2,T="attributeBoxOdd";l.forEach(E=>{let _=S+n+E.height/2;E.tn.attr("transform","translate("+i+","+_+")");let A=t.insert("rect","#"+E.tn.node().id).classed(`er ${T}`,!0).attr("x",0).attr("y",S).attr("width",f+i*2+w).attr("height",E.height+n*2),L=parseFloat(A.attr("x"))+parseFloat(A.attr("width"));E.nn.attr("transform","translate("+(L+i)+","+_+")");let M=t.insert("rect","#"+E.nn.node().id).classed(`er ${T}`,!0).attr("x",L).attr("y",S).attr("width",d+i*2+w).attr("height",E.height+n*2),N=parseFloat(M.attr("x"))+parseFloat(M.attr("width"));if(u){E.kn.attr("transform","translate("+(N+i)+","+_+")");let k=t.insert("rect","#"+E.kn.node().id).classed(`er ${T}`,!0).attr("x",N).attr("y",S).attr("width",p+i*2+w).attr("height",E.height+n*2);N=parseFloat(k.attr("x"))+parseFloat(k.attr("width"))}h&&(E.cn.attr("transform","translate("+(N+i)+","+_+")"),t.insert("rect","#"+E.cn.node().id).classed(`er ${T}`,"true").attr("x",N).attr("y",S).attr("width",m+i*2+w).attr("height",E.height+n*2)),S+=E.height+n*2,T=T==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else b.height=Math.max(Ii.minEntityHeight,g),e.attr("transform","translate("+b.width/2+","+b.height/2+")");return b},"drawAttributes"),QNe=o(function(t,e,r){let n=[...e.keys()],i;return n.forEach(function(a){let s=nMe(a,"entity");Fv.set(a,s);let l=t.append("g").attr("id",s);i=i===void 0?s:i;let u="text-"+s,h=l.append("text").classed("er entityLabel",!0).attr("id",u).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",de().fontFamily).style("font-size",Ii.fontSize+"px").text(e.get(a).alias??a),{width:f,height:d}=KNe(l,h,e.get(a).attributes),m=l.insert("rect","#"+u).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",f).attr("height",d).node().getBBox();r.setNode(s,{width:m.width,height:m.height,shape:"rect",id:s})}),i},"drawEntities"),ZNe=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},"adjustEntities"),kne=o(function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},"getEdgeName"),JNe=o(function(t,e){return t.forEach(function(r){e.setEdge(Fv.get(r.entityA),Fv.get(r.entityB),{relationship:r},kne(r))}),t},"addRelationships"),wne=0,eMe=o(function(t,e,r,n,i){wne++;let a=r.edge(Fv.get(e.entityA),Fv.get(e.entityB),kne(e)),s=ha().x(function(y){return y.x}).y(function(y){return y.y}).curve(vs),l=t.insert("path","#"+n).classed("er relationshipLine",!0).attr("d",s(a.points)).style("stroke",Ii.stroke).style("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let u="";switch(Ii.arrowMarkerAbsolute&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+u+"#"+$o.ERMarkers.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+u+"#"+$o.ERMarkers.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+u+"#"+$o.ERMarkers.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+u+"#"+$o.ERMarkers.ONLY_ONE_END+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+u+"#"+$o.ERMarkers.MD_PARENT_END+")");break}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+u+"#"+$o.ERMarkers.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+u+"#"+$o.ERMarkers.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+u+"#"+$o.ERMarkers.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+u+"#"+$o.ERMarkers.ONLY_ONE_START+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+u+"#"+$o.ERMarkers.MD_PARENT_START+")");break}let h=l.node().getTotalLength(),f=l.node().getPointAtLength(h*.5),d="rel"+wne,p=e.roleA.split(/
    /g),m=t.append("text").classed("er relationshipLabel",!0).attr("id",d).attr("x",f.x).attr("y",f.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",de().fontFamily).style("font-size",Ii.fontSize+"px");if(p.length==1)m.text(e.roleA);else{let y=-(p.length-1)*.5;p.forEach((v,x)=>{m.append("tspan").attr("x",f.x).attr("dy",`${x===0?y:1}em`).text(v)})}let g=m.node().getBBox();t.insert("rect","#"+d).classed("er relationshipLabelBox",!0).attr("x",f.x-g.width/2).attr("y",f.y-g.height/2).attr("width",g.width).attr("height",g.height)},"drawRelationshipFromLayout"),tMe=o(function(t,e,r,n){Ii=de().er,V.info("Drawing ER diagram");let i=de().securityLevel,a;i==="sandbox"&&(a=$e("#i"+e));let l=(i==="sandbox"?$e(a.nodes()[0].contentDocument.body):$e("body")).select(`[id='${e}']`);$o.insertMarkers(l,Ii);let u;u=new lr({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:Ii.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let h=QNe(l,n.db.getEntities(),u),f=JNe(n.db.getRelationships(),u);lo(u),ZNe(l,u),f.forEach(function(y){eMe(l,y,u,h,n)});let d=Ii.diagramPadding;Lt.insertTitle(l,"entityTitleText",Ii.titleTopMargin,n.db.getDiagramTitle());let p=l.node().getBBox(),m=p.width+d*2,g=p.height+d*2;Sr(l,g,m,Ii.useMaxWidth),l.attr("viewBox",`${p.x-d} ${p.y-d} ${m} ${g}`)},"draw"),rMe="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";o(nMe,"generateId");o(Tne,"strWithHyphen");Ene={setConf:jNe,draw:tMe}});var iMe,Sne,Ane=R(()=>{"use strict";iMe=o(t=>` + .entityBox { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${t.attributeBackgroundColorOdd}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxEven { + fill: ${t.attributeBackgroundColorEven}; + stroke: ${t.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${t.tertiaryColor}; + opacity: 0.7; + background-color: ${t.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${t.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + #MD_PARENT_START { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + #MD_PARENT_END { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + +`,"getStyles"),Sne=iMe});var _ne={};hr(_ne,{diagram:()=>aMe});var aMe,Lne=R(()=>{"use strict";nne();sne();Cne();Ane();aMe={parser:rne,db:ane,renderer:Ene,styles:Sne}});function Xn(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function xa(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function ED(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function Wd(t){return typeof t=="object"&&t!==null&&Xn(t.container)&&xa(t.reference)&&typeof t.message=="string"}function co(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function ef(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function zv(t){return co(t)&&typeof t.fullText=="string"}var Yd,Vo=R(()=>{"use strict";o(Xn,"isAstNode");o(xa,"isReference");o(ED,"isAstNodeDescription");o(Wd,"isLinkingError");Yd=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return Xn(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(co,"isCompositeCstNode");o(ef,"isLeafCstNode");o(zv,"isRootCstNode")});function cMe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function hT(t){return!!t&&typeof t[Symbol.iterator]=="function"}function Kr(...t){if(t.length===1){let e=t[0];if(e instanceof uo)return e;if(hT(e))return new uo(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new uo(()=>({index:0}),r=>r.index1?new uo(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";uo=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){let r=e[Symbol.iterator]();return new t(()=>({first:this.startFn(),firstDone:!1}),n=>{let i;if(!n.firstDone){do if(i=this.nextFn(n.first),!i.done)return i;while(!i.done);n.firstDone=!0}do if(i=r.next(),!i.done)return i;while(!i.done);return Ja})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=cMe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ja:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ja})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(hT(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ja})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(hT(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ja})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ja:this.nextFn(r.state)))}distinct(e){let r=new Set;return this.filter(n=>{let i=e?e(n):n;return r.has(i)?!1:(r.add(i),!0)})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(cMe,"toString");o(hT,"isIterable");Gv=new uo(()=>{},()=>Ja),Ja=Object.freeze({done:!0,value:void 0});o(Kr,"stream");Cc=class extends uo{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ja})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(Fm||(Fm={}))});var dT={};hr(dT,{DefaultNameRegexp:()=>fT,RangeComparison:()=>Mu,compareRange:()=>Mne,findCommentNode:()=>_D,findDeclarationNodeAtOffset:()=>hMe,findLeafNodeAtOffset:()=>LD,findLeafNodeBeforeOffset:()=>Ine,flattenCst:()=>uMe,getInteriorNodes:()=>pMe,getNextNode:()=>fMe,getPreviousNode:()=>Pne,getStartlineNode:()=>dMe,inRange:()=>AD,isChildNode:()=>SD,isCommentNode:()=>CD,streamCst:()=>qd,toDocumentSegment:()=>Xd,tokenToRange:()=>zm});function qd(t){return new Cc(t,e=>co(e)?e.content:[],{includeRoot:!0})}function uMe(t){return qd(t).filter(ef)}function SD(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function zm(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function Xd(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function Mne(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>e.end.character)return Mu.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.lineMu.After}function hMe(t,e,r=fT){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return LD(t,e)}}function _D(t,e){if(t){let r=Pne(t,!0);if(r&&CD(r,e))return r;if(zv(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(CD(a,e))return a}}}}function CD(t,e){return ef(t)&&e.includes(t.tokenType.name)}function LD(t,e){if(ef(t))return t;if(co(t)){let r=One(t,e,!1);if(r)return LD(r,e)}}function Ine(t,e){if(ef(t))return t;if(co(t)){let r=One(t,e,!0);if(r)return Ine(r,e)}}function One(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function Pne(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function fMe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n{"use strict";Vo();Ds();o(qd,"streamCst");o(uMe,"flattenCst");o(SD,"isChildNode");o(zm,"tokenToRange");o(Xd,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside"})(Mu||(Mu={}));o(Mne,"compareRange");o(AD,"inRange");fT=/^[\w\p{L}]$/u;o(hMe,"findDeclarationNodeAtOffset");o(_D,"findCommentNode");o(CD,"isCommentNode");o(LD,"findLeafNodeAtOffset");o(Ine,"findLeafNodeBeforeOffset");o(One,"binarySearch");o(Pne,"getPreviousNode");o(fMe,"getNextNode");o(dMe,"getStartlineNode");o(pMe,"getInteriorNodes");o(mMe,"getCommonParent");o(Nne,"getParentChain")});function tf(t){throw new Error("Error! The input value was not handled.")}var jd,pT=R(()=>{"use strict";jd=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(tf,"assertUnreachable")});var Yv={};hr(Yv,{AbstractElement:()=>RD,AbstractRule:()=>$v,AbstractType:()=>Vv,Action:()=>aR,Alternatives:()=>sR,ArrayLiteral:()=>ND,ArrayType:()=>MD,Assignment:()=>oR,BooleanLiteral:()=>OD,CharacterRange:()=>lR,Condition:()=>mT,Conjunction:()=>BD,CrossReference:()=>uR,Disjunction:()=>zD,EndOfFile:()=>hR,Grammar:()=>$D,GrammarImport:()=>Fne,Group:()=>dR,InferredType:()=>VD,Interface:()=>UD,Keyword:()=>pR,LangiumGrammarAstReflection:()=>Gm,LangiumGrammarTerminals:()=>gMe,NamedArgument:()=>zne,NegatedToken:()=>mR,Negation:()=>HD,NumberLiteral:()=>WD,Parameter:()=>qD,ParameterReference:()=>XD,ParserRule:()=>KD,ReferenceType:()=>QD,RegexToken:()=>yR,ReturnType:()=>Gne,RuleCall:()=>xR,SimpleType:()=>eR,StringLiteral:()=>tR,TerminalAlternatives:()=>bR,TerminalGroup:()=>TR,TerminalRule:()=>yT,TerminalRuleCall:()=>ER,Type:()=>rR,TypeAttribute:()=>$ne,TypeDefinition:()=>DD,UnionType:()=>nR,UnorderedGroup:()=>CR,UntilToken:()=>SR,ValueLiteral:()=>gT,Wildcard:()=>_R,isAbstractElement:()=>Uv,isAbstractRule:()=>yMe,isAbstractType:()=>vMe,isAction:()=>Iu,isAlternatives:()=>wT,isArrayLiteral:()=>kMe,isArrayType:()=>ID,isAssignment:()=>Nl,isBooleanLiteral:()=>PD,isCharacterRange:()=>cR,isCondition:()=>xMe,isConjunction:()=>FD,isCrossReference:()=>Kd,isDisjunction:()=>GD,isEndOfFile:()=>fR,isFeatureName:()=>bMe,isGrammar:()=>EMe,isGrammarImport:()=>CMe,isGroup:()=>rf,isInferredType:()=>vT,isInterface:()=>xT,isKeyword:()=>Ho,isNamedArgument:()=>SMe,isNegatedToken:()=>gR,isNegation:()=>YD,isNumberLiteral:()=>AMe,isParameter:()=>_Me,isParameterReference:()=>jD,isParserRule:()=>Oa,isPrimitiveType:()=>Bne,isReferenceType:()=>ZD,isRegexToken:()=>vR,isReturnType:()=>JD,isRuleCall:()=>Ml,isSimpleType:()=>bT,isStringLiteral:()=>LMe,isTerminalAlternatives:()=>wR,isTerminalGroup:()=>kR,isTerminalRule:()=>Uo,isTerminalRuleCall:()=>TT,isType:()=>Hv,isTypeAttribute:()=>DMe,isTypeDefinition:()=>wMe,isUnionType:()=>iR,isUnorderedGroup:()=>kT,isUntilToken:()=>AR,isValueLiteral:()=>TMe,isWildcard:()=>LR,reflection:()=>Kt});function yMe(t){return Kt.isInstance(t,$v)}function vMe(t){return Kt.isInstance(t,Vv)}function xMe(t){return Kt.isInstance(t,mT)}function bMe(t){return Bne(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function Bne(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function wMe(t){return Kt.isInstance(t,DD)}function TMe(t){return Kt.isInstance(t,gT)}function Uv(t){return Kt.isInstance(t,RD)}function kMe(t){return Kt.isInstance(t,ND)}function ID(t){return Kt.isInstance(t,MD)}function PD(t){return Kt.isInstance(t,OD)}function FD(t){return Kt.isInstance(t,BD)}function GD(t){return Kt.isInstance(t,zD)}function EMe(t){return Kt.isInstance(t,$D)}function CMe(t){return Kt.isInstance(t,Fne)}function vT(t){return Kt.isInstance(t,VD)}function xT(t){return Kt.isInstance(t,UD)}function SMe(t){return Kt.isInstance(t,zne)}function YD(t){return Kt.isInstance(t,HD)}function AMe(t){return Kt.isInstance(t,WD)}function _Me(t){return Kt.isInstance(t,qD)}function jD(t){return Kt.isInstance(t,XD)}function Oa(t){return Kt.isInstance(t,KD)}function ZD(t){return Kt.isInstance(t,QD)}function JD(t){return Kt.isInstance(t,Gne)}function bT(t){return Kt.isInstance(t,eR)}function LMe(t){return Kt.isInstance(t,tR)}function Uo(t){return Kt.isInstance(t,yT)}function Hv(t){return Kt.isInstance(t,rR)}function DMe(t){return Kt.isInstance(t,$ne)}function iR(t){return Kt.isInstance(t,nR)}function Iu(t){return Kt.isInstance(t,aR)}function wT(t){return Kt.isInstance(t,sR)}function Nl(t){return Kt.isInstance(t,oR)}function cR(t){return Kt.isInstance(t,lR)}function Kd(t){return Kt.isInstance(t,uR)}function fR(t){return Kt.isInstance(t,hR)}function rf(t){return Kt.isInstance(t,dR)}function Ho(t){return Kt.isInstance(t,pR)}function gR(t){return Kt.isInstance(t,mR)}function vR(t){return Kt.isInstance(t,yR)}function Ml(t){return Kt.isInstance(t,xR)}function wR(t){return Kt.isInstance(t,bR)}function kR(t){return Kt.isInstance(t,TR)}function TT(t){return Kt.isInstance(t,ER)}function kT(t){return Kt.isInstance(t,CR)}function AR(t){return Kt.isInstance(t,SR)}function LR(t){return Kt.isInstance(t,_R)}var gMe,$v,Vv,mT,DD,gT,RD,ND,MD,OD,BD,zD,$D,Fne,VD,UD,zne,HD,WD,qD,XD,KD,QD,Gne,eR,tR,yT,rR,$ne,nR,aR,sR,oR,lR,uR,hR,dR,pR,mR,yR,xR,bR,TR,ER,CR,SR,_R,Gm,Kt,Sc=R(()=>{"use strict";Vo();gMe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},$v="AbstractRule";o(yMe,"isAbstractRule");Vv="AbstractType";o(vMe,"isAbstractType");mT="Condition";o(xMe,"isCondition");o(bMe,"isFeatureName");o(Bne,"isPrimitiveType");DD="TypeDefinition";o(wMe,"isTypeDefinition");gT="ValueLiteral";o(TMe,"isValueLiteral");RD="AbstractElement";o(Uv,"isAbstractElement");ND="ArrayLiteral";o(kMe,"isArrayLiteral");MD="ArrayType";o(ID,"isArrayType");OD="BooleanLiteral";o(PD,"isBooleanLiteral");BD="Conjunction";o(FD,"isConjunction");zD="Disjunction";o(GD,"isDisjunction");$D="Grammar";o(EMe,"isGrammar");Fne="GrammarImport";o(CMe,"isGrammarImport");VD="InferredType";o(vT,"isInferredType");UD="Interface";o(xT,"isInterface");zne="NamedArgument";o(SMe,"isNamedArgument");HD="Negation";o(YD,"isNegation");WD="NumberLiteral";o(AMe,"isNumberLiteral");qD="Parameter";o(_Me,"isParameter");XD="ParameterReference";o(jD,"isParameterReference");KD="ParserRule";o(Oa,"isParserRule");QD="ReferenceType";o(ZD,"isReferenceType");Gne="ReturnType";o(JD,"isReturnType");eR="SimpleType";o(bT,"isSimpleType");tR="StringLiteral";o(LMe,"isStringLiteral");yT="TerminalRule";o(Uo,"isTerminalRule");rR="Type";o(Hv,"isType");$ne="TypeAttribute";o(DMe,"isTypeAttribute");nR="UnionType";o(iR,"isUnionType");aR="Action";o(Iu,"isAction");sR="Alternatives";o(wT,"isAlternatives");oR="Assignment";o(Nl,"isAssignment");lR="CharacterRange";o(cR,"isCharacterRange");uR="CrossReference";o(Kd,"isCrossReference");hR="EndOfFile";o(fR,"isEndOfFile");dR="Group";o(rf,"isGroup");pR="Keyword";o(Ho,"isKeyword");mR="NegatedToken";o(gR,"isNegatedToken");yR="RegexToken";o(vR,"isRegexToken");xR="RuleCall";o(Ml,"isRuleCall");bR="TerminalAlternatives";o(wR,"isTerminalAlternatives");TR="TerminalGroup";o(kR,"isTerminalGroup");ER="TerminalRuleCall";o(TT,"isTerminalRuleCall");CR="UnorderedGroup";o(kT,"isUnorderedGroup");SR="UntilToken";o(AR,"isUntilToken");_R="Wildcard";o(LR,"isWildcard");Gm=class extends Yd{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return["AbstractElement","AbstractRule","AbstractType","Action","Alternatives","ArrayLiteral","ArrayType","Assignment","BooleanLiteral","CharacterRange","Condition","Conjunction","CrossReference","Disjunction","EndOfFile","Grammar","GrammarImport","Group","InferredType","Interface","Keyword","NamedArgument","NegatedToken","Negation","NumberLiteral","Parameter","ParameterReference","ParserRule","ReferenceType","RegexToken","ReturnType","RuleCall","SimpleType","StringLiteral","TerminalAlternatives","TerminalGroup","TerminalRule","TerminalRuleCall","Type","TypeAttribute","TypeDefinition","UnionType","UnorderedGroup","UntilToken","ValueLiteral","Wildcard"]}computeIsSubtype(e,r){switch(e){case aR:case sR:case oR:case lR:case uR:case hR:case dR:case pR:case mR:case yR:case xR:case bR:case TR:case ER:case CR:case SR:case _R:return this.isSubtype(RD,r);case ND:case WD:case tR:return this.isSubtype(gT,r);case MD:case QD:case eR:case nR:return this.isSubtype(DD,r);case OD:return this.isSubtype(mT,r)||this.isSubtype(gT,r);case BD:case zD:case HD:case XD:return this.isSubtype(mT,r);case VD:case UD:case rR:return this.isSubtype(Vv,r);case KD:return this.isSubtype($v,r)||this.isSubtype(Vv,r);case yT:return this.isSubtype($v,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Vv;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return $v;case"Grammar:usedGrammars":return $D;case"NamedArgument:parameter":case"ParameterReference:parameter":return qD;case"TerminalRuleCall:rule":return yT;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case"AbstractElement":return{name:"AbstractElement",properties:[{name:"cardinality"},{name:"lookahead"}]};case"ArrayLiteral":return{name:"ArrayLiteral",properties:[{name:"elements",defaultValue:[]}]};case"ArrayType":return{name:"ArrayType",properties:[{name:"elementType"}]};case"BooleanLiteral":return{name:"BooleanLiteral",properties:[{name:"true",defaultValue:!1}]};case"Conjunction":return{name:"Conjunction",properties:[{name:"left"},{name:"right"}]};case"Disjunction":return{name:"Disjunction",properties:[{name:"left"},{name:"right"}]};case"Grammar":return{name:"Grammar",properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case"GrammarImport":return{name:"GrammarImport",properties:[{name:"path"}]};case"InferredType":return{name:"InferredType",properties:[{name:"name"}]};case"Interface":return{name:"Interface",properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case"NamedArgument":return{name:"NamedArgument",properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case"Negation":return{name:"Negation",properties:[{name:"value"}]};case"NumberLiteral":return{name:"NumberLiteral",properties:[{name:"value"}]};case"Parameter":return{name:"Parameter",properties:[{name:"name"}]};case"ParameterReference":return{name:"ParameterReference",properties:[{name:"parameter"}]};case"ParserRule":return{name:"ParserRule",properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case"ReferenceType":return{name:"ReferenceType",properties:[{name:"referenceType"}]};case"ReturnType":return{name:"ReturnType",properties:[{name:"name"}]};case"SimpleType":return{name:"SimpleType",properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case"StringLiteral":return{name:"StringLiteral",properties:[{name:"value"}]};case"TerminalRule":return{name:"TerminalRule",properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case"Type":return{name:"Type",properties:[{name:"name"},{name:"type"}]};case"TypeAttribute":return{name:"TypeAttribute",properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case"UnionType":return{name:"UnionType",properties:[{name:"types",defaultValue:[]}]};case"Action":return{name:"Action",properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case"Alternatives":return{name:"Alternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"Assignment":return{name:"Assignment",properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case"CharacterRange":return{name:"CharacterRange",properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case"CrossReference":return{name:"CrossReference",properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case"EndOfFile":return{name:"EndOfFile",properties:[{name:"cardinality"},{name:"lookahead"}]};case"Group":return{name:"Group",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case"Keyword":return{name:"Keyword",properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case"NegatedToken":return{name:"NegatedToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"RegexToken":return{name:"RegexToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case"RuleCall":return{name:"RuleCall",properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"TerminalAlternatives":return{name:"TerminalAlternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalGroup":return{name:"TerminalGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalRuleCall":return{name:"TerminalRuleCall",properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"UnorderedGroup":return{name:"UnorderedGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"UntilToken":return{name:"UntilToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"Wildcard":return{name:"Wildcard",properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},Kt=new Gm});var CT={};hr(CT,{assignMandatoryProperties:()=>NR,copyAstNode:()=>RR,findLocalReferences:()=>NMe,findRootNode:()=>Vne,getContainerOfType:()=>Qd,getDocument:()=>Oi,hasContainerOfType:()=>RMe,linkContentToContainer:()=>ET,streamAllContents:()=>Ac,streamAst:()=>Yo,streamContents:()=>Wv,streamReferences:()=>$m});function ET(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{Xn(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):Xn(r)&&(r.$container=t,r.$containerProperty=e))}function Qd(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function RMe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Oi(t){let r=Vne(t).$document;if(!r)throw new Error("AST node has no document.");return r}function Vne(t){for(;t.$container;)t=t.$container;return t}function Wv(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new uo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndexWv(r,e))}function Yo(t,e){if(t){if(e?.range&&!DR(t,e.range))return new Cc(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Cc(t,r=>Wv(r,e),{includeRoot:!0})}function DR(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?AD(n,e):!1}function $m(t){return new uo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{$m(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),Kr(r)}function NR(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=Une(i.defaultValue))}function Une(t){return Array.isArray(t)?[...t.map(Une)]:t}function RR(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(Xn(i))r[n]=RR(i,e);else if(xa(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)Xn(s)?a.push(RR(s,e)):xa(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return ET(r),r}var es=R(()=>{"use strict";Vo();Ds();Rl();o(ET,"linkContentToContainer");o(Qd,"getContainerOfType");o(RMe,"hasContainerOfType");o(Oi,"getDocument");o(Vne,"findRootNode");o(Wv,"streamContents");o(Ac,"streamAllContents");o(Yo,"streamAst");o(DR,"isAstNodeInRange");o($m,"streamReferences");o(NMe,"findLocalReferences");o(NR,"assignMandatoryProperties");o(Une,"copyDefaultValue");o(RR,"copyAstNode")});function qt(t){return t.charCodeAt(0)}function ST(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function Vm(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function Zd(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function qv(){throw Error("Internal Error - Should never get here!")}function MR(t){return t.type==="Character"}var IR=R(()=>{"use strict";o(qt,"cc");o(ST,"insertToSet");o(Vm,"addFlag");o(Zd,"ASSERT_EXISTS");o(qv,"ASSERT_NEVER_REACH_HERE");o(MR,"isCharacter")});var Xv,jv,OR,Hne=R(()=>{"use strict";IR();Xv=[];for(let t=qt("0");t<=qt("9");t++)Xv.push(t);jv=[qt("_")].concat(Xv);for(let t=qt("a");t<=qt("z");t++)jv.push(t);for(let t=qt("A");t<=qt("Z");t++)jv.push(t);OR=[qt(" "),qt("\f"),qt(` +`),qt("\r"),qt(" "),qt("\v"),qt(" "),qt("\xA0"),qt("\u1680"),qt("\u2000"),qt("\u2001"),qt("\u2002"),qt("\u2003"),qt("\u2004"),qt("\u2005"),qt("\u2006"),qt("\u2007"),qt("\u2008"),qt("\u2009"),qt("\u200A"),qt("\u2028"),qt("\u2029"),qt("\u202F"),qt("\u205F"),qt("\u3000"),qt("\uFEFF")]});var MMe,AT,IMe,Jd,Yne=R(()=>{"use strict";IR();Hne();MMe=/[0-9a-fA-F]/,AT=/[0-9]/,IMe=/[1-9]/,Jd=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":Vm(n,"global");break;case"i":Vm(n,"ignoreCase");break;case"m":Vm(n,"multiLine");break;case"u":Vm(n,"unicode");break;case"y":Vm(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}Zd(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return qv()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;Zd(r);break}if(!(e===!0&&r===void 0)&&Zd(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),Zd(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):qv()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[qt(` +`),qt("\r"),qt("\u2028"),qt("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=Xv;break;case"D":e=Xv,r=!0;break;case"s":e=OR;break;case"S":e=OR,r=!0;break;case"w":e=jv;break;case"W":e=jv,r=!0;break}return Zd(e)?{type:"Set",value:e,complement:r}:qv()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=qt("\f");break;case"n":e=qt(` +`);break;case"r":e=qt("\r");break;case"t":e=qt(" ");break;case"v":e=qt("\v");break}return Zd(e)?{type:"Character",value:e}:qv()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:qt("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:qt(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:qt(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(MR(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(MR(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var _c,Wne=R(()=>{"use strict";_c=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var Kv=R(()=>{"use strict";Yne();Wne()});var LT={};hr(LT,{NEWLINE_REGEXP:()=>BR,escapeRegExp:()=>t0,getCaseInsensitivePattern:()=>zR,getTerminalParts:()=>OMe,isMultilineComment:()=>FR,isWhitespace:()=>_T,partialMatches:()=>GR,partialRegExp:()=>Xne});function OMe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=qne.pattern(t),r=[];for(let n of e.value.value)e0.reset(t),e0.visit(n),r.push({start:e0.startRegexp,end:e0.endRegex});return r}catch{return[]}}function FR(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),e0.reset(t),e0.visit(qne.pattern(t)),e0.multiline}catch{return!1}}function _T(t){return(typeof t=="string"?new RegExp(t):t).test(" ")}function t0(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zR(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:t0(e)).join("")}function GR(t,e){let r=Xne(t),n=e.match(r);return!!n&&n[0].length>0}function Xne(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var BR,qne,PR,e0,Um=R(()=>{"use strict";Kv();BR=/\r?\n/gm,qne=new Jd,PR=class extends _c{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=t0(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},e0=new PR;o(OMe,"getTerminalParts");o(FR,"isMultilineComment");o(_T,"isWhitespace");o(t0,"escapeRegExp");o(zR,"getCaseInsensitivePattern");o(GR,"partialMatches");o(Xne,"partialRegExp")});var RT={};hr(RT,{findAssignment:()=>jR,findNameAssignment:()=>DT,findNodeForKeyword:()=>qR,findNodeForProperty:()=>Zv,findNodesForKeyword:()=>PMe,findNodesForKeywordInternal:()=>XR,findNodesForProperty:()=>YR,getActionAtElement:()=>Jne,getActionType:()=>tie,getAllReachableRules:()=>Qv,getCrossReferenceTerminal:()=>UR,getEntryRule:()=>jne,getExplicitRuleType:()=>KR,getHiddenRules:()=>Kne,getRuleType:()=>QR,getTypeName:()=>r0,isArrayCardinality:()=>FMe,isArrayOperator:()=>zMe,isCommentTerminal:()=>HR,isDataType:()=>GMe,isDataTypeRule:()=>Jv,isOptionalCardinality:()=>BMe,terminalRegex:()=>Hm});function jne(t){return t.rules.find(e=>Oa(e)&&e.entry)}function Kne(t){return t.rules.filter(e=>Uo(e)&&e.hidden)}function Qv(t,e){let r=new Set,n=jne(t);if(!n)return new Set(t.rules);let i=[n].concat(Kne(t));for(let s of i)Qne(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||Uo(s)&&s.hidden)&&a.add(s);return a}function Qne(t,e,r){e.add(t.name),Ac(t).forEach(n=>{if(Ml(n)||r&&TT(n)){let i=n.rule.ref;i&&!e.has(i.name)&&Qne(i,e,r)}})}function UR(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=DT(t.type.ref);return e?.terminal}}function HR(t){return t.hidden&&!Hm(t).test(" ")}function YR(t,e){return!t||!e?[]:WR(t,e,t.astNode,!0)}function Zv(t,e,r){if(!t||!e)return;let n=WR(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function WR(t,e,r,n){if(!n){let i=Qd(t.grammarSource,Nl);if(i&&i.feature===e)return[t]}return co(t)&&t.astNode===r?t.content.flatMap(i=>WR(i,e,r,!1)):[]}function PMe(t,e){return t?XR(t,e,t?.astNode):[]}function qR(t,e,r){if(!t)return;let n=XR(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function XR(t,e,r){if(t.astNode!==r)return[];if(Ho(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=qd(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Ho(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function jR(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=Qd(t.grammarSource,Nl);if(n)return n;t=t.container}}function DT(t){let e=t;return vT(e)&&(Iu(e.$container)?e=e.$container.$container:Oa(e.$container)?e=e.$container:tf(e.$container)),Zne(t,e,new Map)}function Zne(t,e,r){var n;function i(a,s){let l;return Qd(a,Nl)||(l=Zne(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Ac(e)){if(Nl(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Ml(a)&&Oa(a.rule.ref))return i(a,a.rule.ref);if(bT(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Jne(t){let e=t.$container;if(rf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Iu(a))return a;{let s=Ac(r[i]).find(Iu);if(s)return s}}}if(Uv(e))return Jne(e)}function BMe(t,e){return t==="?"||t==="*"||rf(e)&&!!e.guardCondition}function FMe(t){return t==="*"||t==="+"}function zMe(t){return t==="+="}function Jv(t){return eie(t,new Set)}function eie(t,e){if(e.has(t))return!0;e.add(t);for(let r of Ac(t))if(Ml(r)){if(!r.rule.ref||Oa(r.rule.ref)&&!eie(r.rule.ref,e))return!1}else{if(Nl(r))return!1;if(Iu(r))return!1}return!!t.definition}function GMe(t){return VR(t.type,new Set)}function VR(t,e){if(e.has(t))return!0;if(e.add(t),ID(t))return!1;if(ZD(t))return!1;if(iR(t))return t.types.every(r=>VR(r,e));if(bT(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return Hv(r)?VR(r.type,e):!1}else return!1}else return!1}function KR(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Oa(e))return e.name;if(xT(e)||Hv(e))return e.name}}}function r0(t){var e;if(Oa(t))return Jv(t)?t.name:(e=KR(t))!==null&&e!==void 0?e:t.name;if(xT(t)||Hv(t)||JD(t))return t.name;if(Iu(t)){let r=tie(t);if(r)return r}else if(vT(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function tie(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return r0(t.type.ref)}function QR(t){var e,r,n;return Uo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":Jv(t)?t.name:(n=KR(t))!==null&&n!==void 0?n:t.name}function Hm(t){let e={s:!1,i:!1,u:!1},r=Ym(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function Ym(t,e){if(wR(t))return $Me(t);if(kR(t))return VMe(t);if(cR(t))return YMe(t);if(TT(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Ou(Ym(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(gR(t))return HMe(t);if(AR(t))return UMe(t);if(vR(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Ou(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(LR(t))return Ou(ZR,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function $Me(t){return Ou(t.elements.map(e=>Ym(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function VMe(t){return Ou(t.elements.map(e=>Ym(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function UMe(t){return Ou(`${ZR}*?${Ym(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function HMe(t){return Ou(`(?!${Ym(t.terminal)})${ZR}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function YMe(t){return t.right?Ou(`[${$R(t.left)}-${$R(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Ou($R(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function $R(t){return t0(t.value)}function Ou(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var ZR,Il=R(()=>{"use strict";pT();Sc();Vo();es();Rl();Um();o(jne,"getEntryRule");o(Kne,"getHiddenRules");o(Qv,"getAllReachableRules");o(Qne,"ruleDfs");o(UR,"getCrossReferenceTerminal");o(HR,"isCommentTerminal");o(YR,"findNodesForProperty");o(Zv,"findNodeForProperty");o(WR,"findNodesForPropertyInternal");o(PMe,"findNodesForKeyword");o(qR,"findNodeForKeyword");o(XR,"findNodesForKeywordInternal");o(jR,"findAssignment");o(DT,"findNameAssignment");o(Zne,"findNameAssignmentInternal");o(Jne,"getActionAtElement");o(BMe,"isOptionalCardinality");o(FMe,"isArrayCardinality");o(zMe,"isArrayOperator");o(Jv,"isDataTypeRule");o(eie,"isDataTypeRuleInternal");o(GMe,"isDataType");o(VR,"isDataTypeInternal");o(KR,"getExplicitRuleType");o(r0,"getTypeName");o(tie,"getActionType");o(QR,"getRuleType");o(Hm,"terminalRegex");ZR=/[\s\S]/.source;o(Ym,"abstractElementToRegex");o($Me,"terminalAlternativesToRegex");o(VMe,"terminalGroupToRegex");o(UMe,"untilTokenToRegex");o(HMe,"negateTokenToRegex");o(YMe,"characterRangeToRegex");o($R,"keywordToRegex");o(Ou,"withCardinality")});function JR(t){let e=[],r=t.Grammar;for(let n of r.rules)Uo(n)&&HR(n)&&FR(Hm(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:fT}}var eN=R(()=>{"use strict";Rl();Il();Um();Sc();o(JR,"createGrammarConfig")});var tN=R(()=>{"use strict"});function Wm(t){console&&console.error&&console.error(`Error: ${t}`)}function e2(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var rie=R(()=>{"use strict";o(Wm,"PRINT_ERROR");o(e2,"PRINT_WARNING")});function t2(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var nie=R(()=>{"use strict";o(t2,"timer")});function r2(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var iie=R(()=>{"use strict";o(r2,"toFastProperties")});var qm=R(()=>{"use strict";rie();nie();iie()});function WMe(t){return qMe(t)?t.LABEL:t.name}function qMe(t){return di(t.LABEL)&&t.LABEL!==""}function NT(t){return qe(t,Xm)}function Xm(t){function e(r){return qe(r,Xm)}if(o(e,"convertDefinition"),t instanceof Zr){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return di(t.label)&&(r.label=t.label),r}else{if(t instanceof Sn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof Jr)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof An)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof _n)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Xm(new fr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof mn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Xm(new fr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof br)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof gn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof fr){let r={type:"Terminal",name:t.terminalType.name,label:WMe(t.terminalType),idx:t.idx};di(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=zo(n)?n.source:n),r}else{if(t instanceof ts)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var ho,Zr,ts,Sn,Jr,An,_n,br,mn,gn,fr,MT=R(()=>{"use strict";Pt();o(WMe,"tokenLabel");o(qMe,"hasTokenLabel");ho=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ee(this.definition,r=>{r.accept(e)})}},Zr=class extends ho{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,pa(this,Ls(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},ts=class extends ho{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",pa(this,Ls(e,r=>r!==void 0))}},Sn=class extends ho{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,pa(this,Ls(e,r=>r!==void 0))}},Jr=class extends ho{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,pa(this,Ls(e,r=>r!==void 0))}},An=class extends ho{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,pa(this,Ls(e,r=>r!==void 0))}},_n=class extends ho{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,pa(this,Ls(e,r=>r!==void 0))}},br=class extends ho{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,pa(this,Ls(e,r=>r!==void 0))}},mn=class extends ho{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,pa(this,Ls(e,r=>r!==void 0))}},gn=class extends ho{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,pa(this,Ls(e,r=>r!==void 0))}},fr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,pa(this,Ls(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(NT,"serializeGrammar");o(Xm,"serializeProduction")});var rs,aie=R(()=>{"use strict";MT();rs=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case Zr:return this.visitNonTerminal(r);case Sn:return this.visitAlternative(r);case Jr:return this.visitOption(r);case An:return this.visitRepetitionMandatory(r);case _n:return this.visitRepetitionMandatoryWithSeparator(r);case mn:return this.visitRepetitionWithSeparator(r);case br:return this.visitRepetition(r);case gn:return this.visitAlternation(r);case fr:return this.visitTerminal(r);case ts:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function rN(t){return t instanceof Sn||t instanceof Jr||t instanceof br||t instanceof An||t instanceof _n||t instanceof mn||t instanceof fr||t instanceof ts}function n0(t,e=[]){return t instanceof Jr||t instanceof br||t instanceof mn?!0:t instanceof gn?Nv(t.definition,n=>n0(n,e)):t instanceof Zr&&Fn(e,t)?!1:t instanceof ho?(t instanceof Zr&&e.push(t),Ia(t.definition,n=>n0(n,e))):!1}function nN(t){return t instanceof gn}function Rs(t){if(t instanceof Zr)return"SUBRULE";if(t instanceof Jr)return"OPTION";if(t instanceof gn)return"OR";if(t instanceof An)return"AT_LEAST_ONE";if(t instanceof _n)return"AT_LEAST_ONE_SEP";if(t instanceof mn)return"MANY_SEP";if(t instanceof br)return"MANY";if(t instanceof fr)return"CONSUME";throw Error("non exhaustive match")}var sie=R(()=>{"use strict";Pt();MT();o(rN,"isSequenceProd");o(n0,"isOptionalProd");o(nN,"isBranchingProd");o(Rs,"getProductionDslName")});var ns=R(()=>{"use strict";MT();aie();sie()});function oie(t,e,r){return[new Jr({definition:[new fr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Pu,IT=R(()=>{"use strict";Pt();ns();Pu=class{static{o(this,"RestWalker")}walk(e,r=[]){Ee(e.definition,(n,i)=>{let a=fi(e.definition,i+1);if(n instanceof Zr)this.walkProdRef(n,a,r);else if(n instanceof fr)this.walkTerminal(n,a,r);else if(n instanceof Sn)this.walkFlat(n,a,r);else if(n instanceof Jr)this.walkOption(n,a,r);else if(n instanceof An)this.walkAtLeastOne(n,a,r);else if(n instanceof _n)this.walkAtLeastOneSep(n,a,r);else if(n instanceof mn)this.walkManySep(n,a,r);else if(n instanceof br)this.walkMany(n,a,r);else if(n instanceof gn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new Jr({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=oie(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new Jr({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=oie(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ee(e.definition,a=>{let s=new Sn({definition:[a]});this.walk(s,i)})}};o(oie,"restForRepetitionWithSeparator")});function i0(t){if(t instanceof Zr)return i0(t.referencedRule);if(t instanceof fr)return KMe(t);if(rN(t))return XMe(t);if(nN(t))return jMe(t);throw Error("non exhaustive match")}function XMe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=n0(a),e=e.concat(i0(a)),n=n+1,i=r.length>n;return Pm(e)}function jMe(t){let e=qe(t.definition,r=>i0(r));return Pm(Gr(e))}function KMe(t){return[t.terminalType]}var iN=R(()=>{"use strict";Pt();ns();o(i0,"first");o(XMe,"firstForSequence");o(jMe,"firstForBranching");o(KMe,"firstForTerminal")});var OT,aN=R(()=>{"use strict";OT="_~IN~_"});function lie(t){let e={};return Ee(t,r=>{let n=new sN(r).startWalking();pa(e,n)}),e}function QMe(t,e){return t.name+e+OT}var sN,cie=R(()=>{"use strict";IT();iN();Pt();aN();ns();sN=class extends Pu{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=QMe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Sn({definition:a}),l=i0(s);this.follows[i]=l}};o(lie,"computeAllProdsFollows");o(QMe,"buildBetweenProdsFollowPrefix")});function jm(t){let e=t.toString();if(PT.hasOwnProperty(e))return PT[e];{let r=ZMe.pattern(e);return PT[e]=r,r}}function uie(){PT={}}var PT,ZMe,BT=R(()=>{"use strict";Kv();PT={},ZMe=new Jd;o(jm,"getRegExpAst");o(uie,"clearRegExpParserCache")});function die(t,e=!1){try{let r=jm(t);return oN(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===fie)e&&e2(`${n2} Unable to optimize: < ${t.toString()} > + Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Wm(`${n2} + Failed parsing: < ${t.toString()} > + Using the @chevrotain/regexp-to-ast library + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function oN(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i{if(typeof u=="number")FT(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)FT(f,e,r);else{for(let f=h.from;f<=h.to&&f=Km){let f=h.from>=Km?h.from:Km,d=h.to,p=Lc(f),m=Lc(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":oN(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&lN(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return or(e)}function FT(t,e,r){let n=Lc(t);e[n]=n,r===!0&&JMe(t,e)}function JMe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Lc(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Lc(i.charCodeAt(0));e[a]=a}}}function hie(t,e){return Za(t.value,r=>{if(typeof r=="number")return Fn(e,r);{let n=r;return Za(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function lN(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?wt(t.value)?Ia(t.value,lN):lN(t.value):!1}function zT(t,e){if(e instanceof RegExp){let r=jm(e),n=new cN(t);return n.visit(r),n.found}else return Za(e,r=>Fn(t,r.charCodeAt(0)))!==void 0}var fie,n2,cN,pie=R(()=>{"use strict";Kv();Pt();qm();BT();uN();fie="Complement Sets are not supported for first char optimization",n2=`Unable to use "first char" lexer optimizations: +`;o(die,"getOptimizedStartCodesIndices");o(oN,"firstCharOptimizedIndices");o(FT,"addOptimizedIdxToResult");o(JMe,"handleIgnoreCase");o(hie,"findCode");o(lN,"isWholeOptional");cN=class extends _c{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){Fn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?hie(e,this.targetCharCodes)===void 0&&(this.found=!0):hie(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(zT,"canMatchCharCode")});function yie(t,e){e=Xh(e,{useSticky:fN,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{yIe()});let n;r("Reject Lexer.NA",()=>{n=Kh(t,b=>b[a0]===ni.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=qe(n,b=>{let w=b[a0];if(zo(w)){let S=w.source;return S.length===1&&S!=="^"&&S!=="$"&&S!=="."&&!w.ignoreCase?S:S.length===2&&S[0]==="\\"&&!Fn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],S[1])?S[1]:e.useSticky?gie(w):mie(w)}else{if(wi(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let S=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(S);return e.useSticky?gie(T):mie(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=qe(n,b=>b.tokenTypeIdx),l=qe(n,b=>{let w=b.GROUP;if(w!==ni.SKIPPED){if(di(w))return w;if(er(w))return!1;throw Error("non exhaustive match")}}),u=qe(n,b=>{let w=b.LONGER_ALT;if(w)return wt(w)?qe(w,T=>Yw(n,T)):[Yw(n,w)]}),h=qe(n,b=>b.PUSH_MODE),f=qe(n,b=>Xe(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Cie(e.lineTerminatorCharacters);d=qe(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=qe(n,w=>Xe(w,"LINE_BREAKS")?!!w.LINE_BREAKS:Eie(w,b)===!1&&zT(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=qe(n,Tie),m=qe(a,mIe),g=Vr(n,(b,w)=>{let S=w.GROUP;return di(S)&&S!==ni.SKIPPED&&(b[S]=[]),b},{}),y=qe(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Vr(n,(b,w,S)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Lc(T);hN(b,E,y[S])}else if(wt(w.START_CHARS_HINT)){let T;Ee(w.START_CHARS_HINT,E=>{let _=typeof E=="string"?E.charCodeAt(0):E,A=Lc(_);T!==A&&(T=A,hN(b,A,y[S]))})}else if(zo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&Wm(`${n2} Unable to analyze < ${w.PATTERN.toString()} > pattern. + The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=die(w.PATTERN,e.ensureOptimizations);Qt(T)&&(v=!1),Ee(T,E=>{hN(b,E,y[S])})}else e.ensureOptimizations&&Wm(`${n2} TokenType: <${w.name}> is using a custom token pattern without providing parameter. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function vie(t,e){let r=[],n=tIe(t);r=r.concat(n.errors);let i=rIe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(eIe(a)),r=r.concat(uIe(a)),r=r.concat(hIe(a,e)),r=r.concat(fIe(a)),r}function eIe(t){let e=[],r=$r(t,n=>zo(n[a0]));return e=e.concat(iIe(r)),e=e.concat(oIe(r)),e=e.concat(lIe(r)),e=e.concat(cIe(r)),e=e.concat(aIe(r)),e}function tIe(t){let e=$r(t,i=>!Xe(i,a0)),r=qe(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Gn.MISSING_PATTERN,tokenTypes:[i]})),n=jh(t,e);return{errors:r,valid:n}}function rIe(t){let e=$r(t,i=>{let a=i[a0];return!zo(a)&&!wi(a)&&!Xe(a,"exec")&&!di(a)}),r=qe(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Gn.INVALID_PATTERN,tokenTypes:[i]})),n=jh(t,e);return{errors:r,valid:n}}function iIe(t){class e extends _c{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=$r(t,i=>{let a=i.PATTERN;try{let s=jm(a),l=new e;return l.visit(s),l.found}catch{return nIe.test(a.source)}});return qe(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Gn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function aIe(t){let e=$r(t,n=>n.PATTERN.test(""));return qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Gn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function oIe(t){class e extends _c{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=$r(t,i=>{let a=i.PATTERN;try{let s=jm(a),l=new e;return l.visit(s),l.found}catch{return sIe.test(a.source)}});return qe(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Gn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function lIe(t){let e=$r(t,n=>{let i=n[a0];return i instanceof RegExp&&(i.multiline||i.global)});return qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Gn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function cIe(t){let e=[],r=qe(t,a=>Vr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!Fn(e,l)&&l.PATTERN!==ni.NA&&(e.push(l),s.push(l)),s),[]));r=wc(r);let n=$r(r,a=>a.length>1);return qe(n,a=>{let s=qe(a,u=>u.name);return{message:`The same RegExp pattern ->${na(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Gn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function uIe(t){let e=$r(t,n=>{if(!Xe(n,"GROUP"))return!1;let i=n.GROUP;return i!==ni.SKIPPED&&i!==ni.NA&&!di(i)});return qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Gn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function hIe(t,e){let r=$r(t,i=>i.PUSH_MODE!==void 0&&!Fn(e,i.PUSH_MODE));return qe(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Gn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function fIe(t){let e=[],r=Vr(t,(n,i,a)=>{let s=i.PATTERN;return s===ni.NA||(di(s)?n.push({str:s,idx:a,tokenType:i}):zo(s)&&pIe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ee(t,(n,i)=>{Ee(r,({str:a,idx:s,tokenType:l})=>{if(i${l.name}<- can never be matched. +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Gn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function dIe(t,e){if(zo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(wi(e))return e(t,0,[],{});if(Xe(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function pIe(t){return Za([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function mie(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function gie(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function xie(t,e,r){let n=[];return Xe(t,Qm)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Qm+`> property in its definition +`,type:Gn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Xe(t,GT)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+GT+`> property in its definition +`,type:Gn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Xe(t,GT)&&Xe(t,Qm)&&!Xe(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${Qm}: <${t.defaultMode}>which does not exist +`,type:Gn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Xe(t,GT)&&Ee(t.modes,(i,a)=>{Ee(i,(s,l)=>{if(er(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:Gn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Xe(s,"LONGER_ALT")){let u=wt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ee(u,h=>{!er(h)&&!Fn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:Gn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function bie(t,e,r){let n=[],i=!1,a=wc(Gr(or(t.modes))),s=Kh(a,u=>u[a0]===ni.NA),l=Cie(r);return e&&Ee(s,u=>{let h=Eie(u,l);if(h!==!1){let d={message:gIe(u,h),type:h.issue,tokenType:u};n.push(d)}else Xe(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):zT(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:Gn.NO_LINE_BREAKS_FLAGS}),n}function wie(t){let e={},r=Dr(t);return Ee(r,n=>{let i=t[n];if(wt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function Tie(t){let e=t.PATTERN;if(zo(e))return!1;if(wi(e))return!0;if(Xe(e,"exec"))return!0;if(di(e))return!1;throw Error("non exhaustive match")}function mIe(t){return di(t)&&t.length===1?t.charCodeAt(0):!1}function Eie(t,e){if(Xe(t,"LINE_BREAKS"))return!1;if(zo(t.PATTERN)){try{zT(e,t.PATTERN)}catch(r){return{issue:Gn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(di(t.PATTERN))return!1;if(Tie(t))return{issue:Gn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function gIe(t,e){if(e.issue===Gn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + The problem is in the <${t.name}> Token Type + Root cause: ${e.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Gn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${t.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Cie(t){return qe(t,r=>di(r)?r.charCodeAt(0):r)}function hN(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Lc(t){return t255?255+~~(t/255):t}}var a0,Qm,GT,fN,nIe,sIe,kie,Km,$T,uN=R(()=>{"use strict";Kv();i2();Pt();qm();pie();BT();a0="PATTERN",Qm="defaultMode",GT="modes",fN=typeof new RegExp("(?:)").sticky=="boolean";o(yie,"analyzeTokenTypes");o(vie,"validatePatterns");o(eIe,"validateRegExpPattern");o(tIe,"findMissingPatterns");o(rIe,"findInvalidPatterns");nIe=/[^\\][$]/;o(iIe,"findEndOfInputAnchor");o(aIe,"findEmptyMatchRegExps");sIe=/[^\\[][\^]|^\^/;o(oIe,"findStartOfInputAnchor");o(lIe,"findUnsupportedFlags");o(cIe,"findDuplicatePatterns");o(uIe,"findInvalidGroupType");o(hIe,"findModesThatDoNotExist");o(fIe,"findUnreachablePatterns");o(dIe,"testTokenType");o(pIe,"noMetaChar");o(mie,"addStartOfInput");o(gie,"addStickyFlag");o(xie,"performRuntimeChecks");o(bie,"performWarningRuntimeChecks");o(wie,"cloneEmptyGroups");o(Tie,"isCustomPattern");o(mIe,"isShortPattern");kie={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function vIe(t){let e=Qr(t),r=t,n=!0;for(;n;){r=wc(Gr(qe(r,a=>a.CATEGORIES)));let i=jh(r,e);e=e.concat(i),Qt(i)?n=!1:r=i}return e}function xIe(t){Ee(t,e=>{dN(e)||(_ie[Sie]=e,e.tokenTypeIdx=Sie++),Aie(e)&&!wt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Aie(e)||(e.CATEGORIES=[]),TIe(e)||(e.categoryMatches=[]),kIe(e)||(e.categoryMatchesMap={})})}function bIe(t){Ee(t,e=>{e.categoryMatches=[],Ee(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(_ie[n].tokenTypeIdx)})})}function wIe(t){Ee(t,e=>{Lie([],e)})}function Lie(t,e){Ee(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ee(e.CATEGORIES,r=>{let n=t.concat(e);Fn(n,r)||Lie(n,r)})}function dN(t){return Xe(t,"tokenTypeIdx")}function Aie(t){return Xe(t,"CATEGORIES")}function TIe(t){return Xe(t,"categoryMatches")}function kIe(t){return Xe(t,"categoryMatchesMap")}function Die(t){return Xe(t,"tokenTypeIdx")}var Sie,_ie,s0=R(()=>{"use strict";Pt();o(Bu,"tokenStructuredMatcher");o(Zm,"tokenStructuredMatcherNoCategories");Sie=1,_ie={};o(Fu,"augmentTokenTypes");o(vIe,"expandCategories");o(xIe,"assignTokenDefaultProps");o(bIe,"assignCategoriesTokensProp");o(wIe,"assignCategoriesMapProp");o(Lie,"singleAssignCategoriesToksMap");o(dN,"hasShortKeyProperty");o(Aie,"hasCategoriesProperty");o(TIe,"hasExtendingTokensTypesProperty");o(kIe,"hasExtendingTokensTypesMapProperty");o(Die,"isTokenType")});var pN,mN=R(()=>{"use strict";pN={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Gn,a2,ni,i2=R(()=>{"use strict";uN();Pt();qm();s0();mN();BT();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Gn||(Gn={}));a2={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:pN,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(a2);ni=class{static{o(this,"Lexer")}constructor(e,r=a2){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:l,value:u}=t2(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=pa({},a2,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===a2.lineTerminatorsPattern)this.config.lineTerminatorsPattern=kie;else if(this.config.lineTerminatorCharacters===a2.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),wt(e)?i={modes:{defaultMode:Qr(e)},defaultMode:Qm}:(a=!1,i=Qr(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(xie(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(bie(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ee(i.modes,(l,u)=>{i.modes[u]=Kh(l,h=>er(h))});let s=Dr(i.modes);if(Ee(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(vie(l,s))}),Qt(this.lexerDefinitionErrors)){Fu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=yie(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=pa({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!Qt(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=qe(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+u)}Ee(this.lexerDefinitionWarning,l=>{e2(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(fN?(this.chopInput=ea,this.match=this.matchWithTest):(this.updateLastIndex=qn,this.match=this.matchWithExec),a&&(this.handleModes=qn),this.trackStartLines===!1&&(this.computeNewColumn=ea),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=qn),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Vr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!Qt(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{uie()}),this.TRACE_INIT("toFastProperties",()=>{r2(this)})})}tokenize(e,r=this.defaultMode){if(!Qt(this.lexerDefinitionErrors)){let i=qe(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,S=w.length,T=0,E=0,_=this.hasCustom?0:Math.floor(e.length/10),A=new Array(_),L=[],M=this.trackStartLines?1:void 0,N=this.trackStartLines?1:void 0,k=wie(this.emptyGroups),I=this.trackStartLines,C=this.config.lineTerminatorsPattern,O=0,D=[],P=[],F=[],B=[];Object.freeze(B);let $;function z(){return D}o(z,"getPossiblePatternsSlow");function Y(J){let Z=Lc(J),H=P[Z];return H===void 0?B:H}o(Y,"getPossiblePatternsOptimized");let Q=o(J=>{if(F.length===1&&J.tokenType.PUSH_MODE===void 0){let Z=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(J);L.push({offset:J.startOffset,line:J.startLine,column:J.startColumn,length:J.image.length,message:Z})}else{F.pop();let Z=ma(F);D=this.patternIdxToConfig[Z],P=this.charCodeToPatternIdxToConfig[Z],O=D.length;let H=this.canModeBeOptimized[Z]&&this.config.safeMode===!1;P&&H?$=Y:$=z}},"pop_mode");function X(J){F.push(J),P=this.charCodeToPatternIdxToConfig[J],D=this.patternIdxToConfig[J],O=D.length,O=D.length;let Z=this.canModeBeOptimized[J]&&this.config.safeMode===!1;P&&Z?$=Y:$=z}o(X,"push_mode"),X.call(this,r);let ie,j=this.config.recoveryEnabled;for(;Tu.length){u=s,h=f,ie=ce;break}}}break}}if(u!==null){if(d=u.length,p=ie.group,p!==void 0&&(m=ie.tokenTypeIdx,g=this.createTokenInstance(u,T,m,ie.tokenType,M,N,d),this.handlePayload(g,h),p===!1?E=this.addToken(A,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,N=this.computeNewColumn(N,d),I===!0&&ie.canLineTerminator===!0){let q=0,K,se;C.lastIndex=0;do K=C.test(u),K===!0&&(se=C.lastIndex-1,q++);while(K===!0);q!==0&&(M=M+q,N=d-se,this.updateTokenEndLineColumnLocation(g,p,se,q,M,N,d))}this.handleModes(ie,Q,X,g)}else{let q=T,K=M,se=N,ce=j===!1;for(;ce===!1&&T{"use strict";Pt();i2();s0();o(zu,"tokenLabel");o(gN,"hasTokenLabel");EIe="parent",Rie="categories",Nie="label",Mie="group",Iie="push_mode",Oie="pop_mode",Pie="longer_alt",Bie="line_breaks",Fie="start_chars_hint";o(VT,"createToken");o(CIe,"createTokenInternal");fo=VT({name:"EOF",pattern:ni.NA});Fu([fo]);o(o0,"createTokenInstance");o(s2,"tokenMatcher")});var Gu,zie,Ol,Jm=R(()=>{"use strict";l0();Pt();ns();Gu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${gN(t)?`--> ${zu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` +but found: '`+na(e).image+"'";if(n)return a+n+l;{let u=Vr(t,(p,m)=>p.concat(m),[]),h=qe(u,p=>`[${qe(p,m=>zu(m)).join(", ")}]`),d=`one of these possible Token sequences: +${qe(h,(p,m)=>` ${m+1}. ${p}`).join(` +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` +but found: '`+na(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${qe(t,h=>`[${qe(h,f=>zu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(Gu);zie={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-"}},Ol={buildDuplicateFoundError(t,e){function r(f){return f instanceof fr?f.terminalType.name:f instanceof Zr?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=na(e),a=i.idx,s=Rs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + appears more than once (${e.length} times) in the top level rule: ->${n}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=qe(t.prefixPath,i=>zu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(t){let e=qe(t.prefixPath,i=>zu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n},buildEmptyRepetitionError(t){let e=Rs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: + inside <${t.topLevelRule.name}> Rule. + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=qe(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${e}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${n} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof ts?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function Gie(t,e){let r=new yN(t,e);return r.resolveRefs(),r.errors}var yN,$ie=R(()=>{"use strict";Ns();Pt();ns();o(Gie,"resolveGrammar");yN=class extends rs{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ee(or(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:Pi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function WT(t,e,r=[]){r=Qr(r);let n=[],i=0;function a(l){return l.concat(fi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=WT(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length{Qt(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof fr)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:fi(t,i)}),n}function qT(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!Qt(d);){let p=d.pop();if(p===s){l&&ma(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(Qt(m))continue;let x=m[0];if(x===i){let b={idx:g,def:fi(m),ruleStack:Ru(y),occurrenceStack:Ru(v)};d.push(b)}else if(x instanceof fr)if(g=0;b--){let w=x.definition[b],S={idx:g,def:w.definition.concat(fi(m)),ruleStack:y,occurrenceStack:v};d.push(S),d.push(s)}else if(x instanceof Sn)d.push({idx:g,def:x.definition.concat(fi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof ts)d.push(SIe(x,g,y,v));else throw Error("non exhaustive match")}return f}function SIe(t,e,r,n){let i=Qr(r);i.push(t.name);let a=Qr(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var vN,UT,eg,HT,o2,YT,l2,c2=R(()=>{"use strict";Pt();iN();IT();ns();vN=class extends Pu{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=Qr(this.path.ruleStack).reverse(),this.occurrenceStack=Qr(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){Qt(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},UT=class extends vN{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Sn({definition:i});this.possibleTokTypes=i0(a),this.found=!0}}},eg=class extends Pu{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},HT=class extends eg{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=na(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof fr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},o2=class extends eg{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=na(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof fr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},YT=class extends eg{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=na(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof fr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},l2=class extends eg{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=na(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof fr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(WT,"possiblePathsFrom");o(qT,"nextPossibleTokensAfter");o(SIe,"expandTopLevelRule")});function u2(t){if(t instanceof Jr||t==="Option")return $n.OPTION;if(t instanceof br||t==="Repetition")return $n.REPETITION;if(t instanceof An||t==="RepetitionMandatory")return $n.REPETITION_MANDATORY;if(t instanceof _n||t==="RepetitionMandatoryWithSeparator")return $n.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof mn||t==="RepetitionWithSeparator")return $n.REPETITION_WITH_SEPARATOR;if(t instanceof gn||t==="Alternation")return $n.ALTERNATION;throw Error("non exhaustive match")}function jT(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=u2(n);return a===$n.ALTERNATION?tg(e,r,i):rg(e,r,a,i)}function Uie(t,e,r,n,i,a){let s=tg(t,e,r),l=jie(s)?Zm:Bu;return a(s,n,l,i)}function Hie(t,e,r,n,i,a){let s=rg(t,e,i,r),l=jie(s)?Zm:Bu;return a(s[0],l,n)}function Yie(t,e,r,n){let i=t.length,a=Ia(t,s=>Ia(s,l=>l.length===1));if(e)return function(s){let l=qe(s,u=>u.GATE);for(let u=0;uGr(u)),l=Vr(s,(u,h,f)=>(Ee(h,d=>{Xe(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ee(d.categoryMatches,p=>{Xe(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),i=t.length;if(n&&!r){let a=Gr(t);if(a.length===1&&Qt(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Vr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ee(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;aWT([s],1)),n=Vie(r.length),i=qe(r,s=>{let l={};return Ee(s,u=>{let h=xN(u.partialPath);Ee(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=Vie(l.length);for(let u=0;u{let x=xN(v.partialPath);Ee(x,b=>{i[u][b]=!0})})}}}}return n}function tg(t,e,r,n){let i=new XT(t,$n.ALTERNATION,n);return e.accept(i),qie(i.result,r)}function rg(t,e,r,n){let i=new XT(t,r);e.accept(i);let a=i.result,l=new bN(e,t,r).startWalking(),u=new Sn({definition:a}),h=new Sn({definition:l});return qie([u,h],n)}function KT(t,e){e:for(let r=0;r{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function jie(t){return Ia(t,e=>Ia(e,r=>Ia(r,n=>Qt(n.categoryMatches))))}var $n,bN,XT,ng=R(()=>{"use strict";Pt();c2();IT();s0();ns();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})($n||($n={}));o(u2,"getProdType");o(jT,"getLookaheadPaths");o(Uie,"buildLookaheadFuncForOr");o(Hie,"buildLookaheadFuncForOptionalProd");o(Yie,"buildAlternativesLookAheadFunc");o(Wie,"buildSingleAlternativeLookaheadFunction");bN=class extends Pu{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,$n.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,$n.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,$n.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,$n.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,$n.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},XT=class extends rs{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,$n.OPTION)}visitRepetition(e){this.checkIsTarget(e,$n.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,$n.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,$n.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,$n.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,$n.ALTERNATION)}};o(Vie,"initializeArrayOfArrays");o(xN,"pathToHashKeys");o(AIe,"isUniquePrefixHash");o(qie,"lookAheadSequenceFromAlternatives");o(tg,"getLookaheadPathsForOr");o(rg,"getLookaheadPathsForOptionalProd");o(KT,"containsPath");o(Xie,"isStrictPrefixOfPath");o(jie,"areTokenCategoriesNotUsed")});function Kie(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return qe(e,r=>Object.assign({type:Pi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function Qie(t,e,r,n){let i=ga(t,u=>_Ie(u,r)),a=IIe(t,e,r),s=ga(t,u=>RIe(u,r)),l=ga(t,u=>DIe(u,t,n,r));return i.concat(a,s,l)}function _Ie(t,e){let r=new wN;t.accept(r);let n=r.allProductions,i=IL(n,LIe),a=Ls(i,l=>l.length>1);return qe(or(a),l=>{let u=na(l),h=e.buildDuplicateFoundError(t,l),f=Rs(u),d={message:h,type:Pi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Zie(u);return p&&(d.parameter=p),d})}function LIe(t){return`${Rs(t)}_#_${t.idx}_#_${Zie(t)}`}function Zie(t){return t instanceof fr?t.terminalType.name:t instanceof Zr?t.nonTerminalName:""}function DIe(t,e,r,n){let i=[];if(Vr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:Pi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Jie(t,e,r){let n=[],i;return Fn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:Pi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function kN(t,e,r,n=[]){let i=[],a=QT(e.definition);if(Qt(a))return[];{let s=t.name;Fn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:Pi.LEFT_RECURSION,ruleName:s});let u=jh(a,n.concat([t])),h=ga(u,f=>{let d=Qr(n);return d.push(f),kN(t,f,r,d)});return i.concat(h)}}function QT(t){let e=[];if(Qt(t))return e;let r=na(t);if(r instanceof Zr)e.push(r.referencedRule);else if(r instanceof Sn||r instanceof Jr||r instanceof An||r instanceof _n||r instanceof mn||r instanceof br)e=e.concat(QT(r.definition));else if(r instanceof gn)e=Gr(qe(r.definition,a=>QT(a.definition)));else if(!(r instanceof fr))throw Error("non exhaustive match");let n=n0(r),i=t.length>1;if(n&&i){let a=fi(t);return e.concat(QT(a))}else return e}function eae(t,e){let r=new h2;t.accept(r);let n=r.alternations;return ga(n,a=>{let s=Ru(a.definition);return ga(s,(l,u)=>{let h=qT([l],[],Bu,1);return Qt(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:Pi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function tae(t,e,r){let n=new h2;t.accept(n);let i=n.alternations;return i=Kh(i,s=>s.ignoreAmbiguities===!0),ga(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=tg(l,t,u,s),f=NIe(h,s,t,r),d=MIe(h,s,t,r);return f.concat(d)})}function RIe(t,e){let r=new h2;t.accept(r);let n=r.alternations;return ga(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:Pi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function rae(t,e,r){let n=[];return Ee(t,i=>{let a=new TN;i.accept(a);let s=a.allProductions;Ee(s,l=>{let u=u2(l),h=l.maxLookahead||e,f=l.idx,p=rg(f,i,u,h)[0];if(Qt(Gr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:Pi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function NIe(t,e,r,n){let i=[],a=Vr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ee(u,f=>{let d=[h];Ee(t,(p,m)=>{h!==m&&KT(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!KT(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return qe(a,l=>{let u=qe(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:Pi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function MIe(t,e,r,n){let i=Vr(t,(s,l,u)=>{let h=qe(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return wc(ga(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=$r(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:Pi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function IIe(t,e,r){let n=[],i=qe(e,a=>a.name);return Ee(t,a=>{let s=a.name;if(Fn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:Pi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var wN,h2,TN,f2=R(()=>{"use strict";Pt();Ns();ns();ng();c2();s0();o(Kie,"validateLookahead");o(Qie,"validateGrammar");o(_Ie,"validateDuplicateProductions");o(LIe,"identifyProductionForDuplicates");o(Zie,"getExtraProductionArgument");wN=class extends rs{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(DIe,"validateRuleDoesNotAlreadyExist");o(Jie,"validateRuleIsOverridden");o(kN,"validateNoLeftRecursion");o(QT,"getFirstNoneTerminal");h2=class extends rs{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(eae,"validateEmptyOrAlternative");o(tae,"validateAmbiguousAlternationAlternatives");TN=class extends rs{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(RIe,"validateTooManyAlts");o(rae,"validateSomeNonEmptyLookaheadPath");o(NIe,"checkAlternativesAmbiguities");o(MIe,"checkPrefixAlternativesAmbiguities");o(IIe,"checkTerminalAndNoneTerminalsNameSpace")});function nae(t){let e=Xh(t,{errMsgProvider:zie}),r={};return Ee(t.rules,n=>{r[n.name]=n}),Gie(r,e.errMsgProvider)}function iae(t){return t=Xh(t,{errMsgProvider:Ol}),Qie(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var aae=R(()=>{"use strict";Pt();$ie();f2();Jm();o(nae,"resolveGrammar");o(iae,"validateGrammar")});function nf(t){return Fn(uae,t.name)}var sae,oae,lae,cae,uae,ig,c0,d2,p2,m2,ag=R(()=>{"use strict";Pt();sae="MismatchedTokenException",oae="NoViableAltException",lae="EarlyExitException",cae="NotAllInputParsedException",uae=[sae,oae,lae,cae];Object.freeze(uae);o(nf,"isRecognitionException");ig=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},c0=class extends ig{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=sae}},d2=class extends ig{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=oae}},p2=class extends ig{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=cae}},m2=class extends ig{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=lae}}});function OIe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=fo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var EN,SN,CN,ZT,AN=R(()=>{"use strict";l0();Pt();ag();aN();Ns();EN={},SN="InRuleRecoveryException",CN=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=SN}},ZT=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Xe(e,"recoveryEnabled")?e.recoveryEnabled:is.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=OIe)}getTokenToInsert(e){let r=o0(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new c0(m,h,this.LA(0));g.resyncedTokens=Ru(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new CN("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||Qt(r))return!1;let n=this.LA(1);return Za(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return Fn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=Za(e,a=>s2(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return EN;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return qe(e,(n,i)=>i===0?EN:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=qe(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return Gr(e)}getFollowSetFromFollowKey(e){if(e===EN)return[fo];let r=e.ruleName+e.idxInCallingRule+OT+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,fo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Ru(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=Qr(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return qe(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(OIe,"attemptInRepetitionRecovery")});function JT(t,e,r){return r|e|t}var ek=R(()=>{"use strict";o(JT,"getKeyForAutomaticLookahead")});var $u,_N=R(()=>{"use strict";Pt();Jm();Ns();f2();ng();$u=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:is.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(Qt(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ga(e,r=>kN(r,r,Ol))}validateEmptyOrAlternatives(e){return ga(e,r=>eae(r,Ol))}validateAmbiguousAlternationAlternatives(e,r){return ga(e,n=>tae(n,r,Ol))}validateSomeNonEmptyLookaheadPath(e,r){return rae(e,r,Ol)}buildLookaheadForAlternation(e){return Uie(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Yie)}buildLookaheadForOptional(e){return Hie(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,u2(e.prodType),Wie)}}});function PIe(t){tk.reset(),t.accept(tk);let e=tk.dslMethods;return tk.reset(),e}var rk,LN,tk,hae=R(()=>{"use strict";Pt();Ns();ek();ns();_N();rk=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Xe(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:is.dynamicTokensEnabled,this.maxLookahead=Xe(e,"maxLookahead")?e.maxLookahead:is.maxLookahead,this.lookaheadStrategy=Xe(e,"lookaheadStrategy")?e.lookaheadStrategy:new $u({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ee(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=PIe(r);Ee(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Rs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=JT(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ee(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Rs(h))}),Ee(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Rs(h))}),Ee(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Rs(h))}),Ee(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Rs(h))}),Ee(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Rs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=JT(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return JT(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},LN=class extends rs{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},tk=new LN;o(PIe,"collectMethods")});function NN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(NN,"setNodeLocationOnlyOffset");o(MN,"setNodeLocationFull");o(fae,"addTerminalToCst");o(dae,"addNoneTerminalToCst")});function IN(t,e){Object.defineProperty(t,BIe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var BIe,mae=R(()=>{"use strict";BIe="name";o(IN,"defineNameProp")});function FIe(t,e){let r=Dr(t),n=r.length;for(let i=0;is.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + ${a.join(` + +`).replace(/\n/g,` + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function yae(t,e,r){let n=o(function(){},"derivedConstructor");IN(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ee(e,a=>{i[a]=FIe}),n.prototype=i,n.prototype.constructor=n,n}function zIe(t,e){return GIe(t,e)}function GIe(t,e){let r=$r(e,i=>wi(t[i])===!1),n=qe(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:ON.MISSING_METHOD,methodName:i}));return wc(n)}var ON,vae=R(()=>{"use strict";Pt();mae();o(FIe,"defaultVisit");o(gae,"createBaseSemanticVisitorConstructor");o(yae,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(ON||(ON={}));o(zIe,"validateVisitor");o(GIe,"validateMissingCstMethods")});var sk,xae=R(()=>{"use strict";pae();Pt();vae();Ns();sk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Xe(e,"nodeLocationTracking")?e.nodeLocationTracking:is.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=qn,this.cstFinallyStateUpdate=qn,this.cstPostTerminal=qn,this.cstPostNonTerminal=qn,this.cstPostRule=qn;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=MN,this.setNodeLocationFromNode=MN,this.cstPostRule=qn,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=qn,this.setNodeLocationFromNode=qn,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=NN,this.setNodeLocationFromNode=NN,this.cstPostRule=qn,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=qn,this.setNodeLocationFromNode=qn,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=qn,this.setNodeLocationFromNode=qn,this.cstPostRule=qn,this.setInitialNodeLocation=qn;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];fae(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];dae(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(er(this.baseCstVisitorConstructor)){let e=gae(this.className,Dr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(er(this.baseCstVisitorWithDefaultsConstructor)){let e=yae(this.className,Dr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var ok,bae=R(()=>{"use strict";Ns();ok=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):sg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?sg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var lk,wae=R(()=>{"use strict";Pt();ag();Ns();Jm();f2();ns();lk=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=og){if(Fn(this.definedRulesNames,e)){let s={message:Ol.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:Pi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=og){let i=Jie(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(nf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return NT(or(this.gastProductionsCache))}}});var ck,Tae=R(()=>{"use strict";Pt();ek();ag();ng();c2();Ns();AN();l0();s0();ck=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Zm,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Xe(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(wt(e)){if(Qt(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(wt(e))this.tokensMap=Vr(e,(a,s)=>(a[s.name]=s,a),{});else if(Xe(e,"modes")&&Ia(Gr(or(e.modes)),Die)){let a=Gr(or(e.modes)),s=Pm(a);this.tokensMap=Vr(s,(l,u)=>(l[u.name]=u,l),{})}else if(pn(e))this.tokensMap=Qr(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=fo;let n=Xe(e,"modes")?Gr(or(e.modes)):or(e),i=Ia(n,a=>Qt(a.categoryMatches));this.tokenMatcher=i?Zm:Bu,Fu(or(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Xe(n,"resyncEnabled")?n.resyncEnabled:og.resyncEnabled,a=Xe(n,"recoveryValueFunc")?n.recoveryValueFunc:og.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(nf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,$n.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,YT)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,l2],l,1536,e,l2)}else throw this.raiseEarlyExitException(e,$n.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,HT,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,o2],l,1280,e,o2)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=wt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new p2(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw nf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new c0(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===SN?n:a}}else throw n}saveRecogState(){let e=this.errors,r=Qr(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),fo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var uk,kae=R(()=>{"use strict";ag();Pt();ng();Ns();uk=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Xe(e,"errorMessageProvider")?e.errorMessageProvider:is.errorMessageProvider}SAVE_ERROR(e){if(nf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:Qr(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return Qr(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=rg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new m2(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=tg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new d2(u,this.LA(1),l))}}});var hk,Eae=R(()=>{"use strict";c2();Pt();hk=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(er(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return qT([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=na(e.ruleStack),i=this.getGAstProductions()[r];return new UT(i,e).startWalking()}}});function y2(t,e,r,n=!1){dk(r);let i=ma(this.recordingProdStack),a=wi(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Xe(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),pk}function UIe(t,e){dk(e);let r=ma(this.recordingProdStack),n=wt(t)===!1,i=n===!1?t:t.DEF,a=new gn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Xe(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=Nv(i,l=>wi(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ee(i,l=>{let u=new Sn({definition:[]});a.definition.push(u),Xe(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Xe(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),pk}function Aae(t){return t===0?"":`${t}`}function dk(t){if(t<0||t>Sae){let e=new Error(`Invalid DSL Method idx value: <${t}> + Idx value must be a none negative value smaller than ${Sae+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var pk,Cae,Sae,_ae,Lae,VIe,fk,Dae=R(()=>{"use strict";Pt();ns();i2();s0();l0();Ns();ek();pk={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(pk);Cae=!0,Sae=Math.pow(2,8)-1,_ae=VT({name:"RECORDING_PHASE_TOKEN",pattern:ni.NA});Fu([_ae]);Lae=o0(_ae,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Lae);VIe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},fk=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return sg}topLevelRuleRecord(e,r){try{let n=new ts({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return y2.call(this,Jr,e,r)}atLeastOneInternalRecord(e,r){y2.call(this,An,r,e)}atLeastOneSepFirstInternalRecord(e,r){y2.call(this,_n,r,e,Cae)}manyInternalRecord(e,r){y2.call(this,br,r,e)}manySepFirstInternalRecord(e,r){y2.call(this,mn,r,e,Cae)}orInternalRecord(e,r){return UIe.call(this,e,r)}subruleInternalRecord(e,r,n){if(dk(r),!e||Xe(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ma(this.recordingProdStack),a=e.ruleName,s=new Zr({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?VIe:pk}consumeInternalRecord(e,r,n){if(dk(r),!dN(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ma(this.recordingProdStack),a=new fr({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),Lae}};o(y2,"recordProd");o(UIe,"recordOrProd");o(Aae,"getIdxSuffix");o(dk,"assertMethodIdxIsValid")});var mk,Rae=R(()=>{"use strict";Pt();qm();Ns();mk=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Xe(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=is.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:a}=t2(r),s=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function Nae(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var Mae=R(()=>{"use strict";o(Nae,"applyMixins")});function gk(t=void 0){return function(){return t}}var sg,is,og,Pi,v2,x2,Ns=R(()=>{"use strict";Pt();qm();cie();l0();Jm();aae();AN();hae();xae();bae();wae();Tae();kae();Eae();Dae();Rae();Mae();f2();sg=o0(fo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(sg);is=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:Gu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),og=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(Pi||(Pi={}));o(gk,"EMPTY_ALT");v2=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{r2(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ee(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=nae({rules:or(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(Qt(n)&&this.skipValidations===!1){let i=iae({rules:or(this.gastProductionsCache),tokenTypes:or(this.tokensMap),errMsgProvider:Ol,grammarName:r}),a=Kie({lookaheadStrategy:this.lookaheadStrategy,rules:or(this.gastProductionsCache),tokenTypes:or(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),Qt(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=lie(or(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:or(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(or(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!Qt(this.definitionErrors))throw e=qe(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: + ${e.join(` +------------------------------- +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Xe(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=Xe(r,"skipValidations")?r.skipValidations:is.skipValidations}};v2.DEFER_DEFINITION_ERRORS_HANDLING=!1;Nae(v2,[ZT,rk,sk,ok,ck,lk,uk,hk,fk,mk]);x2=class extends v2{static{o(this,"EmbeddedActionsParser")}constructor(e,r=is){let n=Qr(r);n.outputCst=!1,super(e,n)}}});var Iae=R(()=>{"use strict";ns()});var Oae=R(()=>{"use strict"});var Pae=R(()=>{"use strict";Iae();Oae()});var Bae=R(()=>{"use strict";tN()});var u0=R(()=>{"use strict";tN();Ns();i2();l0();ng();_N();Jm();ag();mN();ns();ns();Pae();Bae()});function h0(t,e,r){return`${t.name}_${e}_${r}`}function $ae(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};KIe(e,t);let r=t.length;for(let n=0;nVae(t,e,s));return hg(t,e,n,r,...i)}function rOe(t,e,r){let n=ia(t,e,r,{type:af});sf(t,n);let i=hg(t,e,n,r,f0(t,e,r));return nOe(t,e,r,i)}function f0(t,e,r){let n=$r(qe(r.definition,i=>Vae(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:aOe(t,n)}function Uae(t,e,r,n,i){let a=n.left,s=n.right,l=ia(t,e,r,{type:jIe});sf(t,l);let u=ia(t,e,r,{type:Gae});return a.loopback=l,u.loopback=l,t.decisionMap[h0(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ei(s,l),i===void 0?(Ei(l,a),Ei(l,u)):(Ei(l,u),Ei(l,i.left),Ei(i.right,a)),{left:a,right:u}}function Hae(t,e,r,n,i){let a=n.left,s=n.right,l=ia(t,e,r,{type:XIe});sf(t,l);let u=ia(t,e,r,{type:Gae}),h=ia(t,e,r,{type:qIe});return l.loopback=h,u.loopback=h,Ei(l,a),Ei(l,u),Ei(s,h),i!==void 0?(Ei(h,u),Ei(h,i.left),Ei(i.right,a)):Ei(h,l),t.decisionMap[h0(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function nOe(t,e,r,n){let i=n.left,a=n.right;return Ei(i,a),t.decisionMap[h0(e,"Option",r.idx)]=i,n}function sf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function hg(t,e,r,n,...i){let a=ia(t,e,n,{type:WIe,start:r});r.end=a;for(let l of i)l!==void 0?(Ei(r,l.left),Ei(l.right,a)):Ei(r,a);let s={left:r,right:a};return t.decisionMap[h0(e,iOe(n),n.idx)]=r,s}function iOe(t){if(t instanceof gn)return"Alternation";if(t instanceof Jr)return"Option";if(t instanceof br)return"Repetition";if(t instanceof mn)return"RepetitionWithSeparator";if(t instanceof An)return"RepetitionMandatory";if(t instanceof _n)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function aOe(t,e){let r=e.length;for(let a=0;a{"use strict";Mm();LL();u0();o(h0,"buildATNKey");af=1,YIe=2,Fae=4,zae=5,ug=7,WIe=8,qIe=9,XIe=10,jIe=11,Gae=12,b2=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},lg=class extends b2{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},w2=class extends b2{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},cg=class extends b2{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o($ae,"createATN");o(KIe,"createRuleStartAndStopATNStates");o(Vae,"atom");o(QIe,"repetition");o(ZIe,"repetitionSep");o(JIe,"repetitionMandatory");o(eOe,"repetitionMandatorySep");o(tOe,"alternation");o(rOe,"option");o(f0,"block");o(Uae,"plus");o(Hae,"star");o(nOe,"optional");o(sf,"defineDecisionState");o(hg,"makeAlts");o(iOe,"getProdType");o(aOe,"makeBlock");o(BN,"tokenRef");o(sOe,"ruleRef");o(oOe,"buildRuleHandle");o(Ei,"epsilon");o(ia,"newState");o(FN,"addTransition");o(lOe,"removeState")});function zN(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var T2,fg,Wae=R(()=>{"use strict";Mm();T2={},fg=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=zN(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return qe(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(zN,"getATNConfigKey")});function cOe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function Xae(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function uOe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;nzu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${mOe(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n}function mOe(t){if(t instanceof Zr)return"SUBRULE";if(t instanceof Jr)return"OPTION";if(t instanceof gn)return"OR";if(t instanceof An)return"AT_LEAST_ONE";if(t instanceof _n)return"AT_LEAST_ONE_SEP";if(t instanceof mn)return"MANY_SEP";if(t instanceof br)return"MANY";if(t instanceof fr)return"CONSUME";throw Error("non exhaustive match")}function gOe(t,e,r){let n=ga(e.configs.elements,a=>a.state.transitions),i=nte(n.filter(a=>a instanceof lg).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function yOe(t,e){return t.edges[e.tokenTypeIdx]}function vOe(t,e,r){let n=new fg,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===ug){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!kOe(a))for(let s of i)a.add(s);return a}function xOe(t,e){if(t instanceof lg&&s2(e,t.tokenType))return t.target}function bOe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Kae(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function jae(t,e,r,n){return n=Qae(t,n),e.edges[r.tokenTypeIdx]=n,n}function Qae(t,e){if(e===T2)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function wOe(t){let e=new fg,r=t.transitions.length;for(let n=0;n0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};vk(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i1)return!0;return!1}function _Oe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var yk,qae,k2,Zae=R(()=>{"use strict";u0();Yae();Wae();BL();RL();ite();Mm();fw();$w();Ww();$L();o(cOe,"createDFACache");yk=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;nconsole.log(n)}initialize(e){this.atn=$ae(e.rules),this.dfas=uOe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=h0(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=qe(jT({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>qe(p,m=>m[0]));if(Xae(d,!1)&&!a){let p=Vr(d,(m,g,y)=>(Ee(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ee(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new yk,g=p===void 0?0:p.length;for(let v=0;vqe(p,m=>m[0]));if(Xae(d)&&d[0][0]&&!a){let p=d[0],m=Gr(p);if(m.length===1&&Qt(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Vr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ee(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=GN.call(this,s,f,qae,l);return typeof p=="object"?!1:p===0}}};o(Xae,"isLL1Sequence");o(uOe,"initATNSimulator");o(GN,"adaptivePredict");o(hOe,"performLookahead");o(fOe,"computeLookaheadTarget");o(dOe,"reportLookaheadAmbiguity");o(pOe,"buildAmbiguityError");o(mOe,"getProductionDslName");o(gOe,"buildAdaptivePredictError");o(yOe,"getExistingTargetState");o(vOe,"computeReachSet");o(xOe,"getReachableTarget");o(bOe,"getUniqueAlt");o(Kae,"newDFAState");o(jae,"addDFAEdge");o(Qae,"addDFAState");o(wOe,"computeStartState");o(vk,"closure");o(TOe,"getEpsilonTarget");o(kOe,"hasConfigInRuleStopState");o(EOe,"allConfigsInRuleStopStates");o(COe,"hasConflictTerminatingPrediction");o(SOe,"getConflictingAltSets");o(AOe,"hasConflictingAltSet");o(_Oe,"hasStateAssociatedWithOneAlt")});var Jae=R(()=>{"use strict";Zae()});var ese,$N,tse,xk,Ur,wr,bk,rse,VN,nse,ise,ase,sse,UN,ose,lse,cse,wk,dg,pg,HN,mg,use,YN,WN,qN,XN,jN,hse,fse,KN,dse,QN,E2,pse,mse,gse,yse,vse,xse,bse,wse,Tk,Tse,kse,Ese,Cse,Sse,Ase,_se,Lse,Dse,Rse,Nse,kk,Mse,Ise,Ose,Pse,Bse,Fse,zse,Gse,$se,Vse,Use,Hse,Yse,ZN,JN,Wse,qse,Xse,jse,Kse,Qse,Zse,Jse,eoe,eM,Fe,tM=R(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(ese||(ese={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})($N||($N={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(tse||(tse={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(xk||(xk={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=xk.MAX_VALUE),i===Number.MAX_VALUE&&(i=xk.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.line)&&Fe.uinteger(i.character)}o(r,"is"),t.is=r})(Ur||(Ur={}));(function(t){function e(n,i,a,s){if(Fe.uinteger(n)&&Fe.uinteger(i)&&Fe.uinteger(a)&&Fe.uinteger(s))return{start:Ur.create(n,i),end:Ur.create(a,s)};if(Ur.is(n)&&Ur.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Ur.is(i.start)&&Ur.is(i.end)}o(r,"is"),t.is=r})(wr||(wr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&wr.is(i.range)&&(Fe.string(i.uri)||Fe.undefined(i.uri))}o(r,"is"),t.is=r})(bk||(bk={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&wr.is(i.targetRange)&&Fe.string(i.targetUri)&&wr.is(i.targetSelectionRange)&&(wr.is(i.originSelectionRange)||Fe.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(rse||(rse={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.numberRange(i.red,0,1)&&Fe.numberRange(i.green,0,1)&&Fe.numberRange(i.blue,0,1)&&Fe.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(VN||(VN={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&wr.is(i.range)&&VN.is(i.color)}o(r,"is"),t.is=r})(nse||(nse={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.undefined(i.textEdit)||pg.is(i))&&(Fe.undefined(i.additionalTextEdits)||Fe.typedArray(i.additionalTextEdits,pg.is))}o(r,"is"),t.is=r})(ise||(ise={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(ase||(ase={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return Fe.defined(a)&&(h.startCharacter=a),Fe.defined(s)&&(h.endCharacter=s),Fe.defined(l)&&(h.kind=l),Fe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.startLine)&&Fe.uinteger(i.startLine)&&(Fe.undefined(i.startCharacter)||Fe.uinteger(i.startCharacter))&&(Fe.undefined(i.endCharacter)||Fe.uinteger(i.endCharacter))&&(Fe.undefined(i.kind)||Fe.string(i.kind))}o(r,"is"),t.is=r})(sse||(sse={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&bk.is(i.location)&&Fe.string(i.message)}o(r,"is"),t.is=r})(UN||(UN={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(ose||(ose={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(lse||(lse={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&Fe.string(n.href)}o(e,"is"),t.is=e})(cse||(cse={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return Fe.defined(a)&&(h.severity=a),Fe.defined(s)&&(h.code=s),Fe.defined(l)&&(h.source=l),Fe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return Fe.defined(a)&&wr.is(a.range)&&Fe.string(a.message)&&(Fe.number(a.severity)||Fe.undefined(a.severity))&&(Fe.integer(a.code)||Fe.string(a.code)||Fe.undefined(a.code))&&(Fe.undefined(a.codeDescription)||Fe.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(Fe.string(a.source)||Fe.undefined(a.source))&&(Fe.undefined(a.relatedInformation)||Fe.typedArray(a.relatedInformation,UN.is))}o(r,"is"),t.is=r})(wk||(wk={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return Fe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.title)&&Fe.string(i.command)}o(r,"is"),t.is=r})(dg||(dg={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return Fe.objectLiteral(s)&&Fe.string(s.newText)&&wr.is(s.range)}o(i,"is"),t.is=i})(pg||(pg={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(Fe.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(HN||(HN={}));(function(t){function e(r){let n=r;return Fe.string(n)}o(e,"is"),t.is=e})(mg||(mg={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return pg.is(s)&&(HN.is(s.annotationId)||mg.is(s.annotationId))}o(i,"is"),t.is=i})(use||(use={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&KN.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(YN||(YN={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||mg.is(i.annotationId))}o(r,"is"),t.is=r})(WN||(WN={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&Fe.string(i.oldUri)&&Fe.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||mg.is(i.annotationId))}o(r,"is"),t.is=r})(qN||(qN={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||Fe.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||Fe.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||mg.is(i.annotationId))}o(r,"is"),t.is=r})(XN||(XN={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>Fe.string(i.kind)?WN.is(i)||qN.is(i)||XN.is(i):YN.is(i)))}o(e,"is"),t.is=e})(jN||(jN={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)}o(r,"is"),t.is=r})(hse||(hse={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.integer(i.version)}o(r,"is"),t.is=r})(fse||(fse={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&(i.version===null||Fe.integer(i.version))}o(r,"is"),t.is=r})(KN||(KN={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.string(i.languageId)&&Fe.integer(i.version)&&Fe.string(i.text)}o(r,"is"),t.is=r})(dse||(dse={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(QN||(QN={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(r)&&QN.is(n.kind)&&Fe.string(n.value)}o(e,"is"),t.is=e})(E2||(E2={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(pse||(pse={}));(function(t){t.PlainText=1,t.Snippet=2})(mse||(mse={}));(function(t){t.Deprecated=1})(gse||(gse={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.newText)&&wr.is(i.insert)&&wr.is(i.replace)}o(r,"is"),t.is=r})(yse||(yse={}));(function(t){t.asIs=1,t.adjustIndentation=2})(vse||(vse={}));(function(t){function e(r){let n=r;return n&&(Fe.string(n.detail)||n.detail===void 0)&&(Fe.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(xse||(xse={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(bse||(bse={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(wse||(wse={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return Fe.string(i)||Fe.objectLiteral(i)&&Fe.string(i.language)&&Fe.string(i.value)}o(r,"is"),t.is=r})(Tk||(Tk={}));(function(t){function e(r){let n=r;return!!n&&Fe.objectLiteral(n)&&(E2.is(n.contents)||Tk.is(n.contents)||Fe.typedArray(n.contents,Tk.is))&&(r.range===void 0||wr.is(r.range))}o(e,"is"),t.is=e})(Tse||(Tse={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(kse||(kse={}));(function(t){function e(r,n,...i){let a={label:r};return Fe.defined(n)&&(a.documentation=n),Fe.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(Ese||(Ese={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Cse||(Cse={}));(function(t){function e(r,n){let i={range:r};return Fe.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(Sse||(Sse={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Ase||(Ase={}));(function(t){t.Deprecated=1})(_se||(_se={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(Lse||(Lse={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(Dse||(Dse={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.name)&&Fe.number(i.kind)&&wr.is(i.range)&&wr.is(i.selectionRange)&&(i.detail===void 0||Fe.string(i.detail))&&(i.deprecated===void 0||Fe.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(Rse||(Rse={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(Nse||(Nse={}));(function(t){t.Invoked=1,t.Automatic=2})(kk||(kk={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.typedArray(i.diagnostics,wk.is)&&(i.only===void 0||Fe.typedArray(i.only,Fe.string))&&(i.triggerKind===void 0||i.triggerKind===kk.Invoked||i.triggerKind===kk.Automatic)}o(r,"is"),t.is=r})(Mse||(Mse={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):dg.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.title)&&(i.diagnostics===void 0||Fe.typedArray(i.diagnostics,wk.is))&&(i.kind===void 0||Fe.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||dg.is(i.command))&&(i.isPreferred===void 0||Fe.boolean(i.isPreferred))&&(i.edit===void 0||jN.is(i.edit))}o(r,"is"),t.is=r})(Ise||(Ise={}));(function(t){function e(n,i){let a={range:n};return Fe.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&wr.is(i.range)&&(Fe.undefined(i.command)||dg.is(i.command))}o(r,"is"),t.is=r})(Ose||(Ose={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.uinteger(i.tabSize)&&Fe.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(Pse||(Pse={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&wr.is(i.range)&&(Fe.undefined(i.target)||Fe.string(i.target))}o(r,"is"),t.is=r})(Bse||(Bse={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&wr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(Fse||(Fse={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(zse||(zse={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(Gse||(Gse={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})($se||($se={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&wr.is(i.range)&&Fe.string(i.text)}o(r,"is"),t.is=r})(Vse||(Vse={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&wr.is(i.range)&&Fe.boolean(i.caseSensitiveLookup)&&(Fe.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(Use||(Use={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&wr.is(i.range)&&(Fe.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(Hse||(Hse={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&wr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(Yse||(Yse={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(ZN||(ZN={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&(i.tooltip===void 0||Fe.string(i.tooltip)||E2.is(i.tooltip))&&(i.location===void 0||bk.is(i.location))&&(i.command===void 0||dg.is(i.command))}o(r,"is"),t.is=r})(JN||(JN={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Ur.is(i.position)&&(Fe.string(i.label)||Fe.typedArray(i.label,JN.is))&&(i.kind===void 0||ZN.is(i.kind))&&i.textEdits===void 0||Fe.typedArray(i.textEdits,pg.is)&&(i.tooltip===void 0||Fe.string(i.tooltip)||E2.is(i.tooltip))&&(i.paddingLeft===void 0||Fe.boolean(i.paddingLeft))&&(i.paddingRight===void 0||Fe.boolean(i.paddingRight))}o(r,"is"),t.is=r})(Wse||(Wse={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(qse||(qse={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(Xse||(Xse={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(jse||(jse={}));(function(t){t.Invoked=0,t.Automatic=1})(Kse||(Kse={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(Qse||(Qse={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Zse||(Zse={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&$N.is(n.uri)&&Fe.string(n.name)}o(e,"is"),t.is=e})(Jse||(Jse={}));(function(t){function e(a,s,l,u){return new eM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Fe.defined(s)&&Fe.string(s.uri)&&(Fe.undefined(s.languageId)||Fe.string(s.languageId))&&Fe.uinteger(s.lineCount)&&Fe.func(s.getText)&&Fe.func(s.positionAt)&&Fe.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return Ur.create(0,e);for(;ne?i=s:n=s+1}let a=n-1;return Ur.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Fe||(Fe={}))});var C2,S2,d0,p0,rM,gg,Ek=R(()=>{"use strict";tM();Vo();Rl();C2=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]}buildRootNode(e){return this.rootNode=new gg(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new p0;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new d0(e.startOffset,e.image.length,zm(e),e.tokenType,!1);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}addHiddenTokens(e){for(let r of e){let n=new d0(r.startOffset,r.image.length,zm(r),r.tokenType,!0);n.root=this.rootNode,this.addHiddenToken(this.rootNode,n)}}addHiddenToken(e,r){let{offset:n,end:i}=r;for(let a=0;al&&i=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},rM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},gg=class extends p0{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function nM(t){return t.$type===Ck}var Ck,toe,roe,A2,_2,Sk,yg,L2,LOe,iM,D2=R(()=>{"use strict";u0();Jae();Sc();Il();es();Ek();Ck=Symbol("Datatype");o(nM,"isDataTypeNode");toe="\u200B",roe=o(t=>t.endsWith(toe)?t:t+toe,"withRuleSuffix"),A2=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition;this.wrapper=new iM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},_2=class extends A2{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new C2,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=e.fragment?void 0:Jv(e)?Ck:r0(e),i=this.wrapper.DEFINE_RULE(roe(e.name),this.startImplementation(n,r).bind(this));return e.entry&&(this.mainRule=i),i}parse(e){this.nodeBuilder.buildRootNode(e);let r=this.lexer.tokenize(e);this.wrapper.input=r.tokens;let n=this.mainRule.call(this.wrapper,{});return this.nodeBuilder.addHiddenTokens(r.hidden),this.unorderedGroups.clear(),{value:n,lexerErrors:r.errors,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{if(!this.isRecording()){let a={$type:e};this.stack.push(a),e===Ck&&(a.value="")}let i;try{i=r(n)}catch{i=void 0}return!this.isRecording()&&i===void 0&&(i=this.construct()),i}}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.nodeBuilder.buildLeafNode(i,n),{assignment:s,isCrossRef:l}=this.getAssignment(n),u=this.current;if(s){let h=Ho(n)?i.image:this.converter.convert(i.image,a);this.assign(s.operator,s.feature,h,a,l)}else if(nM(u)){let h=i.image;Ho(n)||(h=this.converter.convert(h,a).toString()),u.value+=h}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i){let a;this.isRecording()||(a=this.nodeBuilder.buildCompositeNode(n));let s=this.wrapper.wrapSubrule(e,r,i);!this.isRecording()&&a&&a.length>0&&this.performSubruleAssignment(s,n,a)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(nM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let l=e.$type,u=this.assignWithoutOverride(e,s);l&&(u.$type=l);let h=u;this.stack.pop(),this.stack.push(h)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(!n.$cstNode&&r.feature&&r.operator){n=this.construct(!1);let a=n.$cstNode.feature;this.nodeBuilder.buildCompositeNode(a)}let i={$type:e};this.stack.pop(),this.stack.push(i),r.feature&&r.operator&&this.assign(r.operator,r.feature,n,n.$cstNode,!1)}}construct(e=!0){if(this.isRecording())return;let r=this.current;return ET(r),this.nodeBuilder.construct(r),e&&this.stack.pop(),nM(r)?this.converter.convert(r.value,r.$cstNode):(NR(this.astReflection,r),r)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=Qd(e,Nl);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?Kd(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[n,i]of Object.entries(r)){let a=e[n];a===void 0?e[n]=i:Array.isArray(a)&&Array.isArray(i)&&(i.push(...a),e[n]=i)}return e}get definitionErrors(){return this.wrapper.definitionErrors}},Sk=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return Gu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return Gu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return Gu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return Gu.buildEarlyExitMessage(e)}},yg=class extends Sk{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},L2=class extends A2{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e);return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(roe(e.name),this.startImplementation(r).bind(this));return e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i){this.before(n),this.wrapper.wrapSubrule(e,r,i),this.after(n)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},LOe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new yg},iM=class extends x2{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},LOe),{lookaheadStrategy:n?new $u({maxLookahead:r.maxLookahead}):new k2}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function _k(t,e,r){return DOe({parser:e,tokens:r,rules:new Map,ruleNames:new Map},t),e}function DOe(t,e){let r=Qv(e,!1),n=Kr(e.rules).filter(Oa).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});a.rules.set(i.name,t.parser.rule(i,m0(a,i.definition)))}}function m0(t,e,r=!1){let n;if(Ho(e))n=BOe(t,e);else if(Iu(e))n=ROe(t,e);else if(Nl(e))n=m0(t,e.terminal);else if(Kd(e))n=noe(t,e);else if(Ml(e))n=NOe(t,e);else if(wT(e))n=IOe(t,e);else if(kT(e))n=OOe(t,e);else if(rf(e))n=POe(t,e);else if(fR(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,fo,e),"method")}else throw new jd(e.$cstNode,`Unexpected element type: ${e.$type}`);return ioe(t,r?void 0:Ak(e),n,e.cardinality)}function ROe(t,e){let r=r0(e);return()=>t.parser.action(r,e)}function NOe(t,e){let r=e.rule.ref;if(Oa(r)){let n=t.subrule++,i=e.arguments.length>0?MOe(r,e.arguments):()=>({});return a=>t.parser.subrule(n,aoe(t,r),e,i(a))}else if(Uo(r)){let n=t.consume++,i=aM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)tf(r);else throw new jd(e.$cstNode,`Undefined rule type: ${e.$type}`)}function MOe(t,e){let r=e.map(n=>Vu(n.value));return n=>{let i={};for(let a=0;ae(n)||r(n)}else if(FD(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)&&r(n)}else if(YD(t)){let e=Vu(t.value);return r=>!e(r)}else if(jD(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(PD(t)){let e=!!t.true;return()=>e}tf(t)}function IOe(t,e){if(e.elements.length===1)return m0(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:m0(t,i,!0)},s=Ak(i);s&&(a.GATE=Vu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function OOe(t,e){if(e.elements.length===1)return m0(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:m0(t,l,!0)},h=Ak(l);h&&(u.GATE=Vu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=ioe(t,Ak(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function POe(t,e){let r=e.elements.map(n=>m0(t,n));return n=>r.forEach(i=>i(n))}function Ak(t){if(rf(t))return t.guardCondition}function noe(t,e,r=e.terminal){if(r)if(Ml(r)&&Oa(r.rule.ref)){let n=t.subrule++;return i=>t.parser.subrule(n,aoe(t,r.rule.ref),e,i)}else if(Ml(r)&&Uo(r.rule.ref)){let n=t.consume++,i=aM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Ho(r)){let n=t.consume++,i=aM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=DT(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+r0(e.type.ref));return noe(t,e,i)}}function BOe(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function ioe(t,e,r,n){let i=e&&Vu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:gk(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:gk(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else tf(n)}function aoe(t,e){let r=FOe(t,e),n=t.rules.get(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function FOe(t,e){if(Oa(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Oa(n);)(rf(n)||wT(n)||kT(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function aM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var sM=R(()=>{"use strict";u0();Sc();pT();Ds();Il();o(_k,"createParser");o(DOe,"buildRules");o(m0,"buildElement");o(ROe,"buildAction");o(NOe,"buildRuleCall");o(MOe,"buildRuleCallPredicate");o(Vu,"buildPredicate");o(IOe,"buildAlternatives");o(OOe,"buildUnorderedGroup");o(POe,"buildGroup");o(Ak,"getGuardCondition");o(noe,"buildCrossReference");o(BOe,"buildKeyword");o(ioe,"wrap");o(aoe,"getRule");o(FOe,"getRuleName");o(aM,"getToken")});function oM(t){let e=t.Grammar,r=t.parser.Lexer,n=new L2(t);return _k(e,n,r.definition),n.finalize(),n}var lM=R(()=>{"use strict";D2();sM();o(oM,"createCompletionParser")});function cM(t){let e=soe(t);return e.finalize(),e}function soe(t){let e=t.Grammar,r=t.parser.Lexer,n=new _2(t);return _k(e,n,r.definition)}var uM=R(()=>{"use strict";D2();sM();o(cM,"createLangiumParser");o(soe,"prepareLangiumParser")});var g0,hM=R(()=>{"use strict";u0();Sc();es();Il();Um();Ds();g0=class{static{o(this,"DefaultTokenBuilder")}buildTokens(e,r){let n=Kr(Qv(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&_T(l)?a.unshift(s):a.push(s)}),a}buildTerminalTokens(e){return e.filter(Uo).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=Hm(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n,LINE_BREAKS:!0};return e.hidden&&(i.GROUP=_T(r)?ni.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")?!0:!!(e.source.includes("?<=")||e.source.includes("?(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Oa).flatMap(i=>Ac(i).filter(Ho)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){return{name:e.value,PATTERN:this.buildKeywordPattern(e,n),LONGER_ALT:this.findLongerAlt(e,r)}}buildKeywordPattern(e,r){return r?new RegExp(zR(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&GR("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var y0,Dc,fM=R(()=>{"use strict";Sc();Il();y0=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(Kd(n)&&(n=UR(n)),Ml(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Dc.convertInt(r);case"STRING":return Dc.convertString(r);case"ID":return Dc.convertID(r)}switch((i=QR(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Dc.convertNumber(r);case"boolean":return Dc.convertBoolean(r);case"bigint":return Dc.convertBigint(r);case"date":return Dc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(mM,"__esModule",{value:!0});var dM;function pM(){if(dM===void 0)throw new Error("No runtime abstraction layer installed");return dM}o(pM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");dM=r}o(e,"install"),t.install=e})(pM||(pM={}));mM.default=pM});var coe=gi(Pa=>{"use strict";Object.defineProperty(Pa,"__esModule",{value:!0});Pa.stringArray=Pa.array=Pa.func=Pa.error=Pa.number=Pa.string=Pa.boolean=void 0;function zOe(t){return t===!0||t===!1}o(zOe,"boolean");Pa.boolean=zOe;function ooe(t){return typeof t=="string"||t instanceof String}o(ooe,"string");Pa.string=ooe;function GOe(t){return typeof t=="number"||t instanceof Number}o(GOe,"number");Pa.number=GOe;function $Oe(t){return t instanceof Error}o($Oe,"error");Pa.error=$Oe;function VOe(t){return typeof t=="function"}o(VOe,"func");Pa.func=VOe;function loe(t){return Array.isArray(t)}o(loe,"array");Pa.array=loe;function UOe(t){return loe(t)&&t.every(e=>ooe(e))}o(UOe,"stringArray");Pa.stringArray=UOe});var vM=gi(vg=>{"use strict";Object.defineProperty(vg,"__esModule",{value:!0});vg.Emitter=vg.Event=void 0;var HOe=gM(),uoe;(function(t){let e={dispose(){}};t.None=function(){return e}})(uoe||(vg.Event=uoe={}));var yM=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i{this._callbacks||(this._callbacks=new yM),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};vg.Emitter=Lk;Lk._noop=function(){}});var hoe=gi(xg=>{"use strict";Object.defineProperty(xg,"__esModule",{value:!0});xg.CancellationTokenSource=xg.CancellationToken=void 0;var YOe=gM(),WOe=coe(),xM=vM(),Dk;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:xM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:xM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||WOe.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(Dk||(xg.CancellationToken=Dk={}));var qOe=Object.freeze(function(t,e){let r=(0,YOe.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),Rk=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?qOe:(this._emitter||(this._emitter=new xM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},bM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new Rk),this._token}cancel(){this._token?this._token.cancel():this._token=Dk.Cancelled}dispose(){this._token?this._token instanceof Rk&&this._token.dispose():this._token=Dk.None}};xg.CancellationTokenSource=bM});var pr={};var Wo=R(()=>{"use strict";dr(pr,Xi(hoe(),1))});function TM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function doe(){return wM=Date.now(),new pr.CancellationTokenSource}function poe(t){foe=t}function of(t){return t===Rc}async function Bi(t){if(t===pr.CancellationToken.None)return;let e=Date.now();if(e-wM>=foe&&(wM=e,await TM()),t.isCancellationRequested)throw Rc}var wM,foe,Rc,as,qo=R(()=>{"use strict";Wo();o(TM,"delayNextTick");wM=0,foe=10;o(doe,"startCancelableOperation");o(poe,"setInterruptionPeriod");Rc=Symbol("OperationCancelled");o(of,"isOperationCancelled");o(Bi,"interruptAndCheck");as=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function kM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);kM(n,e),kM(i,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function XOe(t){let e=yoe(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var Nk,bg,voe=R(()=>{"use strict";Nk=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=yoe(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=moe(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1r&&goe(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new Nk(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof Nk)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=kM(a.map(XOe),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(bg||(bg={}));o(kM,"mergeSort");o(moe,"computeLineOffsets");o(goe,"isEOL");o(yoe,"getWellformedRange");o(XOe,"getWellformedEdit")});var xoe,Ms,wg,EM=R(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;fy){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>M,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(N,k){if(!N.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${N.authority}", path: "${N.path}", query: "${N.query}", fragment: "${N.fragment}"}`);if(N.scheme&&!a.test(N.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(N.path){if(N.authority){if(!s.test(N.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(N.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,I,C,O,D,P=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,B){return F||B?F:"file"}(k,P),this.authority=I||h,this.path=function(F,B){switch(F){case"https":case"http":case"file":B?B[0]!==f&&(B=f+B):B=f}return B}(this.scheme,C||h),this.query=O||h,this.fragment=D||h,u(this,P))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:I,authority:C,path:O,query:D,fragment:P}=k;return I===void 0?I=this.scheme:I===null&&(I=h),C===void 0?C=this.authority:C===null&&(C=h),O===void 0?O=this.path:O===null&&(O=h),D===void 0?D=this.query:D===null&&(D=h),P===void 0?P=this.fragment:P===null&&(P=h),I===this.scheme&&C===this.authority&&O===this.path&&D===this.query&&P===this.fragment?this:new g(I,C,O,D,P)}static parse(k,I=!1){let C=d.exec(k);return C?new g(C[2]||h,E(C[4]||h),E(C[5]||h),E(C[7]||h),E(C[9]||h),I):new g(h,h,h,h,h)}static file(k){let I=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let C=k.indexOf(f,2);C===-1?(I=k.substring(2),k=f):(I=k.substring(2,C),k=k.substring(C)||f)}return new g("file",I,k,h,h)}static from(k){let I=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(I,!0),I}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let I=new g(k);return I._formatted=k.external,I._fsPath=k._sep===m?k.fsPath:null,I}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(N,k,I){let C,O=-1;for(let D=0;D=97&&P<=122||P>=65&&P<=90||P>=48&&P<=57||P===45||P===46||P===95||P===126||k&&P===47||I&&P===91||I&&P===93||I&&P===58)O!==-1&&(C+=encodeURIComponent(N.substring(O,D)),O=-1),C!==void 0&&(C+=N.charAt(D));else{C===void 0&&(C=N.substr(0,D));let F=y[P];F!==void 0?(O!==-1&&(C+=encodeURIComponent(N.substring(O,D)),O=-1),C+=F):O===-1&&(O=D)}}return O!==-1&&(C+=encodeURIComponent(N.substring(O))),C!==void 0?C:N}o(v,"d");function x(N){let k;for(let I=0;I1&&N.scheme==="file"?`//${N.authority}${N.path}`:N.path.charCodeAt(0)===47&&(N.path.charCodeAt(1)>=65&&N.path.charCodeAt(1)<=90||N.path.charCodeAt(1)>=97&&N.path.charCodeAt(1)<=122)&&N.path.charCodeAt(2)===58?k?N.path.substr(1):N.path[1].toLowerCase()+N.path.substr(2):N.path,i&&(I=I.replace(/\//g,"\\")),I}o(b,"m");function w(N,k){let I=k?x:v,C="",{scheme:O,authority:D,path:P,query:F,fragment:B}=N;if(O&&(C+=O,C+=":"),(D||O==="file")&&(C+=f,C+=f),D){let $=D.indexOf("@");if($!==-1){let z=D.substr(0,$);D=D.substr($+1),$=z.lastIndexOf(":"),$===-1?C+=I(z,!1,!1):(C+=I(z.substr(0,$),!1,!1),C+=":",C+=I(z.substr($+1),!1,!0)),C+="@"}D=D.toLowerCase(),$=D.lastIndexOf(":"),$===-1?C+=I(D,!1,!0):(C+=I(D.substr(0,$),!1,!0),C+=D.substr($))}if(P){if(P.length>=3&&P.charCodeAt(0)===47&&P.charCodeAt(2)===58){let $=P.charCodeAt(1);$>=65&&$<=90&&(P=`/${String.fromCharCode($+32)}:${P.substr(3)}`)}else if(P.length>=2&&P.charCodeAt(1)===58){let $=P.charCodeAt(0);$>=65&&$<=90&&(P=`${String.fromCharCode($+32)}:${P.substr(2)}`)}C+=I(P,!0,!1)}return F&&(C+="?",C+=I(F,!1,!1)),B&&(C+="#",C+=k?B:v(B,!1,!1)),C}o(w,"y");function S(N){try{return decodeURIComponent(N)}catch{return N.length>3?N.substr(0,3)+S(N.substr(3)):N}}o(S,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(N){return N.match(T)?N.replace(T,k=>S(k)):N}o(E,"C");var _=r(470);let A=_.posix||_,L="/";var M;(function(N){N.joinPath=function(k,...I){return k.with({path:A.join(k.path,...I)})},N.resolvePath=function(k,...I){let C=k.path,O=!1;C[0]!==L&&(C=L+C,O=!0);let D=A.resolve(C,...I);return O&&D[0]===L&&!k.authority&&(D=D.substring(1)),k.with({path:D})},N.dirname=function(k){if(k.path.length===0||k.path===L)return k;let I=A.dirname(k.path);return I.length===1&&I.charCodeAt(0)===46&&(I=""),k.with({path:I})},N.basename=function(k){return A.basename(k.path)},N.extname=function(k){return A.extname(k.path)}})(M||(M={}))})(),xoe=n})();({URI:Ms,Utils:wg}=xoe)});var ss,Nc=R(()=>{"use strict";EM();(function(t){t.basename=wg.basename,t.dirname=wg.dirname,t.extname=wg.extname,t.joinPath=wg.joinPath,t.resolvePath=wg.resolvePath;function e(n,i){return n?.toString()===i?.toString()}o(e,"equals"),t.equals=e;function r(n,i){let a=typeof n=="string"?n:n.path,s=typeof i=="string"?i:i.path,l=a.split("/").filter(p=>p.length>0),u=s.split("/").filter(p=>p.length>0),h=0;for(;h{"use strict";voe();Tg();Wo();Ds();Nc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(yn||(yn={}));R2=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=pr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??Ms.parse(e.uri),n?this.createAsync(r,e,n):this.create(r,e)}fromString(e,r,n){return n?this.createAsync(r,e,n):this.create(r,e)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r){if(typeof r=="string"){let n=this.parse(e,r);return this.createLangiumDocument(n,e,void 0,r)}else if("$model"in r){let n={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(n,e)}else{let n=this.parse(e,r.getText());return this.createLangiumDocument(n,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:yn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:yn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=yn.Parsed,e}parse(e,r){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=bg.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},N2=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory}get all(){return Kr(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=yn.Changed,n.precomputedScopes=void 0,n.references=[],n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=yn.Changed,this.documentMap.delete(r)),n}}});var M2,CM=R(()=>{"use strict";Wo();Vo();es();qo();Tg();M2=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=pr.CancellationToken.None){for(let n of Yo(e.parseResult.value))await Bi(r),$m(n).forEach(i=>this.doLink(i,e))}doLink(e,r){let n=e.reference;if(n._ref===void 0)try{let i=this.getCandidate(e);if(Wd(i))n._ref=i;else if(n._nodeDescription=i,this.langiumDocuments().hasDocument(i.documentUri)){let a=this.loadAstNode(i);n._ref=a??this.createLinkingError(e,i)}}catch(i){n._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${n.$refText}': ${i}`})}r.references.push(n)}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(Xn(this._ref))return this._ref;if(ED(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){let u=a.getLinkedNode({reference:s,container:e,property:r});if(u.error&&Oi(e).state{"use strict";Il();o(boe,"isNamed");I2=class{static{o(this,"DefaultNameProvider")}getName(e){if(boe(e))return e.name}getNameNode(e){return Zv(e.$cstNode,"name")}}});var O2,AM=R(()=>{"use strict";Il();Vo();es();Rl();Ds();Nc();O2=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=jR(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(xa(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(xa(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||SD(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>ss.equals(a.sourceUri,r.documentUri))),n.push(...i),Kr(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Oi(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:Xd(r),local:!0}}}}});var Mc,v0,kg=R(()=>{"use strict";Ds();Mc=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return Fm.sum(Kr(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return Kr(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return Kr(this.map.keys())}values(){return Kr(this.map.values()).flat()}entriesGroupedByKey(){return Kr(this.map.entries())}},v0=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var P2,_M=R(()=>{"use strict";Wo();es();kg();qo();P2=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=pr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=Wv,i=pr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await Bi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=pr.CancellationToken.None){let n=e.parseResult.value,i=new Mc;for(let a of Ac(n))await Bi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var Eg,B2,jOe,LM=R(()=>{"use strict";Ds();Eg=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},B2=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=Kr(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},jOe={getElement(){},getAllElements(){return Gv}}});var Cg,F2,x0,Mk,Sg,Ik=R(()=>{"use strict";Cg=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},F2=class extends Cg{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},x0=class extends Cg{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},Mk=class extends x0{static{o(this,"DocumentCache")}constructor(e){super(r=>r.toString()),this.onDispose(e.workspace.DocumentBuilder.onUpdate((r,n)=>{let i=r.concat(n);for(let a of i)this.clear(a)}))}},Sg=class extends F2{static{o(this,"WorkspaceCache")}constructor(e){super(),this.onDispose(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var z2,DM=R(()=>{"use strict";LM();es();Ds();Ik();z2=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new Sg(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Oi(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(Kr(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new Eg(Kr(e),r,n)}createScopeForNodes(e,r,n){let i=Kr(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new Eg(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new B2(this.indexManager.allElements(e)))}}});function RM(t){return typeof t.$comment=="string"}function woe(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var G2,Ok=R(()=>{"use strict";EM();Vo();es();Il();o(RM,"isAstNodeWithComment");o(woe,"isIntermediateReference");G2=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r={}){let n=r?.replacer,i=o((s,l)=>this.replacer(s,l,r),"defaultReplacer"),a=n?(s,l)=>n(s,l,i):i;try{return this.currentDocument=Oi(e),JSON.stringify(e,a,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r={}){let n=JSON.parse(e);return this.linkNode(n,n,r),n}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(xa(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Oi(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(Xn(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=YR(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Nc();$2=class{static{o(this,"DefaultServiceRegistry")}register(e){if(!this.singleton&&!this.map){this.singleton=e;return}if(!this.map&&(this.map={},this.singleton)){for(let r of this.singleton.LanguageMetaData.fileExtensions)this.map[r]=this.singleton;this.singleton=void 0}for(let r of e.LanguageMetaData.fileExtensions)this.map[r]!==void 0&&this.map[r]!==e&&console.warn(`The file extension ${r} is used by multiple languages. It is now assigned to '${e.LanguageMetaData.languageId}'.`),this.map[r]=e}getServices(e){if(this.singleton!==void 0)return this.singleton;if(this.map===void 0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let r=ss.extname(e),n=this.map[r];if(!n)throw new Error(`The service registry contains no services for the extension '${r}'.`);return n}get all(){return this.singleton!==void 0?[this.singleton]:this.map!==void 0?Object.values(this.map):[]}}});function Pk(t){return{code:t}}var Ag,V2,U2=R(()=>{"use strict";kg();qo();Ds();o(Pk,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(Ag||(Ag={}));V2=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Mc,this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}}}wrapValidationException(e,r){return async(n,i,a)=>{try{await e.call(r,n,i,a)}catch(s){if(of(s))throw s;console.error("An error occurred during validation:",s);let l=s instanceof Error?s.message:String(s);s instanceof Error&&s.stack&&console.error(s.stack),i("error","An error occurred during validation: "+l,{node:n})}}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=Kr(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}}});function Toe(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=Zv(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=qR(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function Bk(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}var H2,Uu,MM=R(()=>{"use strict";Wo();Il();es();Rl();qo();U2();H2=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=pr.CancellationToken.None){let i=e.parseResult,a=[];if(await Bi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Uu.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Uu.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Uu.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(of(s))throw s;console.error("An error occurred during validation:",s)}return await Bi(n),a}processLexingErrors(e,r,n){for(let i of e.lexerErrors){let a={severity:Bk("error"),range:{start:{line:i.line-1,character:i.column-1},end:{line:i.line-1,character:i.column+i.length-1}},message:i.message,data:Pk(Uu.LexingError),source:this.getSource()};r.push(a)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=zm(i.token);if(a){let s={severity:Bk("error"),range:a,message:i.message,data:Pk(Uu.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:Uu.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=pr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await Promise.all(Yo(e).map(async s=>{await Bi(n);let l=this.validationRegistry.getChecks(s.$type,r.categories);for(let u of l)await u(s,a,n)})),i}toDiagnostic(e,r,n){return{message:r,range:Toe(n),severity:Bk(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(Toe,"getDiagnosticRange");o(Bk,"toDiagnosticSeverity");(function(t){t.LexingError="lexing-error",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(Uu||(Uu={}))});var Y2,W2,IM=R(()=>{"use strict";Wo();Vo();es();Rl();qo();Nc();Y2=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n=Oi(e)){r??(r=this.nameProvider.getName(e));let i=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${i} has no name.`);let a,s=o(()=>{var l;return a??(a=Xd((l=this.nameProvider.getNameNode(e))!==null&&l!==void 0?l:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return s()},selectionSegment:Xd(e.$cstNode),type:e.$type,documentUri:n.uri,path:i}}},W2=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=pr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of Yo(i))await Bi(r),$m(a).filter(s=>!Wd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Oi(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:Xd(n),local:ss.equals(r.documentUri,i)}}}});var q2,OM=R(()=>{"use strict";q2=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var X2,PM=R(()=>{"use strict";qo();X2=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new as,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{this.updateSectionConfiguration(r,e.settings[r])})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}}});var b0,BM=R(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(b0||(b0={}))});var j2,FM=R(()=>{"use strict";Wo();BM();kg();qo();Ds();U2();Tg();j2=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Mc,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=yn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=pr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===yn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=yn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:Ag.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=yn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=yn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=pr.CancellationToken.None){this.currentState=yn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=yn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=Kr(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,yn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await Bi(n);let a=this.langiumDocuments.all.filter(s=>{var l;return s.staten(e,r)))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),b0.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,yn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,yn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,yn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,yn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,yn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,yn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(s=>s.state{this.buildPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=pr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Rc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Rc)})})}async notifyBuildPhase(e,r,n){if(e.length===0)return;let i=this.buildPhaseListeners.get(r);for(let a of i)await Bi(n),await a(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:Ag.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var K2,zM=R(()=>{"use strict";es();Ik();Wo();Ds();Nc();K2=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new x0,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Oi(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{ss.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),Kr(i)}allElements(e,r){let n=Kr(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=pr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=pr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var Q2,GM=R(()=>{"use strict";Wo();qo();Nc();Q2=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new as,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=pr.CancellationToken.None){let n=await this.performStartup(e);await Bi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return Ms.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=ss.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=ss.extname(r.uri);return n.includes(a)}return!1}}});function koe(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function VM(t){return t&&"modes"in t&&"defaultMode"in t}function $M(t){return!koe(t)&&!VM(t)}var Z2,UM=R(()=>{"use strict";u0();Z2=class{static{o(this,"DefaultLexer")}constructor(e){let r=e.parser.TokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=$M(r)?Object.values(r):r;this.chevrotainLexer=new ni(n,{positionTracking:"full"})}get definition(){return this.tokenTypes}tokenize(e){var r;let n=this.chevrotainLexer.tokenize(e);return{tokens:n.tokens,errors:n.errors,hidden:(r=n.groups.hidden)!==null&&r!==void 0?r:[]}}toTokenTypeDictionary(e){if($M(e))return e;let r=VM(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(koe,"isTokenTypeArray");o(VM,"isIMultiModeLexerDefinition");o($M,"isTokenTypeDictionary")});function WM(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=Ur.create(0,0));let a=Soe(t),s=XM(n),l=QOe({lines:a,position:i,options:s});return rPe({index:0,tokens:l,position:i})}function qM(t,e){let r=XM(e),n=Soe(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function Soe(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(BR)}function QOe(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l=f.length){if(i.length>0){let m=Ur.create(a,s);i.push({type:"break",content:"",range:wr.create(m,m)})}}else{Eoe.lastIndex=d;let m=Eoe.exec(f);if(m){let g=m[0],y=m[1],v=Ur.create(a,s+d),x=Ur.create(a,s+d+g.length);i.push({type:"tag",content:y,range:wr.create(v,x)}),d+=g.length,d=YM(f,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function ZOe(t,e,r,n){let i=[];if(t.length===0){let a=Ur.create(r,n),s=Ur.create(r,n+e.length);i.push({type:"text",content:e,range:wr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:wr.create(Ur.create(r,a+n),Ur.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:wr.create(Ur.create(r,a+f+n),Ur.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:wr.create(Ur.create(r,a+f+n),Ur.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:wr.create(Ur.create(r,a+f+n),Ur.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:wr.create(Ur.create(r,a+n),Ur.create(r,a+n+s.length))})}return i}function YM(t,e){let r=t.substring(e).match(JOe);return r?e+r.index:t.length}function tPe(t){let e=t.match(ePe);if(e&&typeof e.index=="number")return e.index}function rPe(t){var e,r,n,i;let a=Ur.create(t.position.line,t.position.character);if(t.tokens.length===0)return new Fk([],wr.create(a,a));let s=[];for(;t.index0){let u=YM(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:oPe(e,s)}}function oPe(t,e){try{return Ms.parse(t,!0),`[${e}](${t})`}catch{return t}}function Coe(t){return t.endsWith(` +`)?` +`:` + +`}var Eoe,KOe,JOe,ePe,Fk,J2,ex,zk,jM=R(()=>{"use strict";tM();Um();Nc();o(WM,"parseJSDoc");o(qM,"isJSDoc");o(Soe,"getLines");Eoe=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,KOe=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(QOe,"tokenize");o(ZOe,"buildInlineTokens");JOe=/\S/,ePe=/\s*$/;o(YM,"skipWhitespace");o(tPe,"lastCharacter");o(rPe,"parseJSDocComment");o(nPe,"parseJSDocElement");o(iPe,"appendEmptyLine");o(Aoe,"parseJSDocText");o(aPe,"parseJSDocInline");o(_oe,"parseJSDocTag");o(Loe,"parseJSDocLine");o(XM,"normalizeOptions");o(HM,"normalizeOption");Fk=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=Coe(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=Coe(r)+i}return r.trim()}},J2=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=sPe(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} +${r}`),this.inline?`{${i}}`:i}};o(sPe,"renderInlineTag");o(oPe,"renderLinkDefault");ex=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;rn.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let r="";for(let n=0;ni.range.start.line&&(r+=` +`)}return r}},zk=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Coe,"fillNewlines")});var tx,KM=R(()=>{"use strict";es();jM();tx=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&qM(r))return WM(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Oi(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var rx,QM=R(()=>{"use strict";Ok();Rl();rx=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return RM(e)?e.$comment:(r=_D(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var ii={};var ZM=R(()=>{"use strict";dr(ii,Xi(vM(),1))});var nx,JM,eI,tI=R(()=>{"use strict";qo();ZM();nx=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e){return Promise.resolve(this.syncParser.parse(e))}},JM=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new as,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new as;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Rc)}),this.queue.push(r),r.promise}},eI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new ii.Emitter,this.deferred=new as,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Rc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new as,this.sendMessage(e),this.deferred.promise}}});var ix,rI=R(()=>{"use strict";Wo();qo();ix=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new pr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=new pr.CancellationTokenSource;return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n){let i=new as,a={action:r,deferred:i,cancellationToken:n??pr.CancellationToken.None};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){of(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var ax,nI=R(()=>{"use strict";Ek();Sc();Vo();es();kg();Rl();ax=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new v0,this.tokenTypeIdMap=new v0,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors.map(r=>Object.assign({},r)),parserErrors:e.parserErrors.map(r=>Object.assign({},r)),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of Yo(e))r.set(i,{});if(e.$cstNode)for(let i of qd(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)Xn(l)?s.push(this.dehydrateAstNode(l,r)):xa(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else Xn(a)?n[i]=this.dehydrateAstNode(a,r):xa(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return zv(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),co(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):ef(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of Yo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of qd(e.$cstNode)){let s;"fullText"in a?(s=new gg(a.fullText),i=s):"content"in a?s=new p0:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)Xn(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):xa(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else Xn(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):xa(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),co(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new d0(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap();let r=this.grammarElementIdMap.getKey(e);if(r)return r;throw new Error("Invalid grammar element id: "+e)}createGrammarElementIdMap(){let e=0;for(let r of Yo(this.grammar))Uv(r)&&this.grammarElementIdMap.set(r,e++)}}});function po(t){return{documentation:{CommentProvider:o(e=>new rx(e),"CommentProvider"),DocumentationProvider:o(e=>new tx(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new nx(e),"AsyncParser"),GrammarConfig:o(e=>JR(e),"GrammarConfig"),LangiumParser:o(e=>cM(e),"LangiumParser"),CompletionParser:o(e=>oM(e),"CompletionParser"),ValueConverter:o(()=>new y0,"ValueConverter"),TokenBuilder:o(()=>new g0,"TokenBuilder"),Lexer:o(e=>new Z2(e),"Lexer"),ParserErrorMessageProvider:o(()=>new yg,"ParserErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new q2,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new Y2(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new W2(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new M2(e),"Linker"),NameProvider:o(()=>new I2,"NameProvider"),ScopeProvider:o(e=>new z2(e),"ScopeProvider"),ScopeComputation:o(e=>new P2(e),"ScopeComputation"),References:o(e=>new O2(e),"References")},serializer:{Hydrator:o(e=>new ax(e),"Hydrator"),JsonSerializer:o(e=>new G2(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new H2(e),"DocumentValidator"),ValidationRegistry:o(e=>new V2(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function mo(t){return{ServiceRegistry:o(()=>new $2,"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new N2(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new R2(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new j2(e),"DocumentBuilder"),IndexManager:o(e=>new K2(e),"IndexManager"),WorkspaceManager:o(e=>new Q2(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new ix,"WorkspaceLock"),ConfigurationProvider:o(e=>new X2(e),"ConfigurationProvider")}}}var iI=R(()=>{"use strict";eN();lM();uM();hM();fM();CM();SM();AM();_M();DM();Ok();NM();MM();U2();IM();OM();PM();FM();Tg();zM();GM();UM();KM();QM();D2();tI();rI();nI();o(po,"createDefaultCoreModule");o(mo,"createDefaultSharedCoreModule")});function Fi(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(Gk,{});return Moe(h)}function Noe(t){if(t&&t[sI])for(let e of Object.values(t))Noe(e);return t}function Moe(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),get:o((n,i)=>Roe(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(Roe(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Reflect.ownKeys(t),sI],"ownKeys")});return r[sI]=!0,r}function Roe(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===Doe)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. See https://langium.org/docs/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=Doe;try{t[e]=typeof i=="function"?i(n):Moe(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function Gk(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=Gk(i,n):t[r]=n}}return t}var aI,sI,Doe,oI=R(()=>{"use strict";(function(t){t.merge=(e,r)=>Gk(Gk({},e),r)})(aI||(aI={}));o(Fi,"inject");sI=Symbol("isProxy");o(Noe,"eagerLoad");o(Moe,"_inject");Doe=Symbol();o(Roe,"_resolve");o(Gk,"_merge")});var Ioe=R(()=>{"use strict"});var Ooe=R(()=>{"use strict";QM();KM();jM()});var Poe=R(()=>{"use strict"});var Boe=R(()=>{"use strict";eN();Poe()});var Foe=R(()=>{"use strict"});var zoe=R(()=>{"use strict";tI();lM();Ek();uM();D2();UM();Foe();hM();fM()});var Goe=R(()=>{"use strict";CM();SM();AM();LM();_M();DM()});var $oe=R(()=>{"use strict";nI();Ok()});var $k,go,lI=R(()=>{"use strict";$k=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},go={fileSystemProvider:o(()=>new $k,"fileSystemProvider")}});function uPe(){let t=Fi(mo(go),cPe),e=Fi(po({shared:t}),lPe);return t.ServiceRegistry.register(e),e}function lf(t){var e;let r=uPe(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,Ms.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var lPe,cPe,Voe=R(()=>{"use strict";iI();oI();Sc();lI();Nc();lPe={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},cPe={AstReflection:o(()=>new Gm,"AstReflection")};o(uPe,"createMinimalGrammarServices");o(lf,"loadGrammarFromJson")});var Rr={};hr(Rr,{AstUtils:()=>CT,BiMap:()=>v0,Cancellation:()=>pr,ContextCache:()=>x0,CstUtils:()=>dT,DONE_RESULT:()=>Ja,Deferred:()=>as,Disposable:()=>b0,DisposableCache:()=>Cg,DocumentCache:()=>Mk,EMPTY_STREAM:()=>Gv,ErrorWithLocation:()=>jd,GrammarUtils:()=>RT,MultiMap:()=>Mc,OperationCancelled:()=>Rc,Reduction:()=>Fm,RegExpUtils:()=>LT,SimpleCache:()=>F2,StreamImpl:()=>uo,TreeStreamImpl:()=>Cc,URI:()=>Ms,UriUtils:()=>ss,WorkspaceCache:()=>Sg,assertUnreachable:()=>tf,delayNextTick:()=>TM,interruptAndCheck:()=>Bi,isOperationCancelled:()=>of,loadGrammarFromJson:()=>lf,setInterruptionPeriod:()=>poe,startCancelableOperation:()=>doe,stream:()=>Kr});var Uoe=R(()=>{"use strict";Ik();ZM();dr(Rr,ii);kg();BM();pT();Voe();qo();Ds();Nc();es();Wo();Rl();Il();Um()});var Hoe=R(()=>{"use strict";MM();U2()});var Yoe=R(()=>{"use strict";IM();OM();PM();FM();Tg();lI();zM();rI();GM()});var ba={};hr(ba,{AbstractAstReflection:()=>Yd,AbstractCstNode:()=>S2,AbstractLangiumParser:()=>A2,AbstractParserErrorMessageProvider:()=>Sk,AbstractThreadedAsyncParser:()=>JM,AstUtils:()=>CT,BiMap:()=>v0,Cancellation:()=>pr,CompositeCstNodeImpl:()=>p0,ContextCache:()=>x0,CstNodeBuilder:()=>C2,CstUtils:()=>dT,DONE_RESULT:()=>Ja,DatatypeSymbol:()=>Ck,DefaultAstNodeDescriptionProvider:()=>Y2,DefaultAstNodeLocator:()=>q2,DefaultAsyncParser:()=>nx,DefaultCommentProvider:()=>rx,DefaultConfigurationProvider:()=>X2,DefaultDocumentBuilder:()=>j2,DefaultDocumentValidator:()=>H2,DefaultHydrator:()=>ax,DefaultIndexManager:()=>K2,DefaultJsonSerializer:()=>G2,DefaultLangiumDocumentFactory:()=>R2,DefaultLangiumDocuments:()=>N2,DefaultLexer:()=>Z2,DefaultLinker:()=>M2,DefaultNameProvider:()=>I2,DefaultReferenceDescriptionProvider:()=>W2,DefaultReferences:()=>O2,DefaultScopeComputation:()=>P2,DefaultScopeProvider:()=>z2,DefaultServiceRegistry:()=>$2,DefaultTokenBuilder:()=>g0,DefaultValueConverter:()=>y0,DefaultWorkspaceLock:()=>ix,DefaultWorkspaceManager:()=>Q2,Deferred:()=>as,Disposable:()=>b0,DisposableCache:()=>Cg,DocumentCache:()=>Mk,DocumentState:()=>yn,DocumentValidator:()=>Uu,EMPTY_SCOPE:()=>jOe,EMPTY_STREAM:()=>Gv,EmptyFileSystem:()=>go,EmptyFileSystemProvider:()=>$k,ErrorWithLocation:()=>jd,GrammarAST:()=>Yv,GrammarUtils:()=>RT,JSDocDocumentationProvider:()=>tx,LangiumCompletionParser:()=>L2,LangiumParser:()=>_2,LangiumParserErrorMessageProvider:()=>yg,LeafCstNodeImpl:()=>d0,MapScope:()=>B2,Module:()=>aI,MultiMap:()=>Mc,OperationCancelled:()=>Rc,ParserWorker:()=>eI,Reduction:()=>Fm,RegExpUtils:()=>LT,RootCstNodeImpl:()=>gg,SimpleCache:()=>F2,StreamImpl:()=>uo,StreamScope:()=>Eg,TextDocument:()=>bg,TreeStreamImpl:()=>Cc,URI:()=>Ms,UriUtils:()=>ss,ValidationCategory:()=>Ag,ValidationRegistry:()=>V2,ValueConverter:()=>Dc,WorkspaceCache:()=>Sg,assertUnreachable:()=>tf,createCompletionParser:()=>oM,createDefaultCoreModule:()=>po,createDefaultSharedCoreModule:()=>mo,createGrammarConfig:()=>JR,createLangiumParser:()=>cM,delayNextTick:()=>TM,diagnosticData:()=>Pk,eagerLoad:()=>Noe,getDiagnosticRange:()=>Toe,inject:()=>Fi,interruptAndCheck:()=>Bi,isAstNode:()=>Xn,isAstNodeDescription:()=>ED,isAstNodeWithComment:()=>RM,isCompositeCstNode:()=>co,isIMultiModeLexerDefinition:()=>VM,isJSDoc:()=>qM,isLeafCstNode:()=>ef,isLinkingError:()=>Wd,isNamed:()=>boe,isOperationCancelled:()=>of,isReference:()=>xa,isRootCstNode:()=>zv,isTokenTypeArray:()=>koe,isTokenTypeDictionary:()=>$M,loadGrammarFromJson:()=>lf,parseJSDoc:()=>WM,prepareLangiumParser:()=>soe,setInterruptionPeriod:()=>poe,startCancelableOperation:()=>doe,stream:()=>Kr,toDiagnosticSeverity:()=>Bk});var Ic=R(()=>{"use strict";iI();oI();NM();Ioe();Vo();Ooe();Boe();zoe();Goe();$oe();Uoe();dr(ba,Rr);Hoe();Yoe();Sc()});function Joe(t){return Pl.isInstance(t,Zoe)}function ele(t){return Pl.isInstance(t,cI)}function tle(t){return Pl.isInstance(t,uI)}function rle(t){return Pl.isInstance(t,pPe)}function nle(t){return Pl.isInstance(t,hI)}function ale(t){return Pl.isInstance(t,ile)}function sle(t){return Pl.isInstance(t,fI)}function lle(t){return Pl.isInstance(t,ole)}function ule(t){return Pl.isInstance(t,cle)}function fle(t){return Pl.isInstance(t,hle)}function ple(t){return Pl.isInstance(t,dle)}var hPe,Tt,Qoe,Zoe,cI,fPe,dPe,uI,pPe,hI,ile,fI,ole,cle,hle,dle,mPe,mle,Pl,Woe,gPe,qoe,yPe,Xoe,vPe,joe,xPe,Koe,bPe,wPe,TPe,kPe,EPe,CPe,Bl,dI,pI,mI,gI,yI,SPe,APe,_Pe,LPe,_g,w0,Xo,DPe,jo=R(()=>{"use strict";Ic();Ic();Ic();Ic();hPe=Object.defineProperty,Tt=o((t,e)=>hPe(t,"name",{value:e,configurable:!0}),"__name"),Qoe="Statement",Zoe="Architecture";o(Joe,"isArchitecture");Tt(Joe,"isArchitecture");cI="Branch";o(ele,"isBranch");Tt(ele,"isBranch");fPe="Checkout",dPe="CherryPicking",uI="Commit";o(tle,"isCommit");Tt(tle,"isCommit");pPe="Common";o(rle,"isCommon");Tt(rle,"isCommon");hI="GitGraph";o(nle,"isGitGraph");Tt(nle,"isGitGraph");ile="Info";o(ale,"isInfo");Tt(ale,"isInfo");fI="Merge";o(sle,"isMerge");Tt(sle,"isMerge");ole="Packet";o(lle,"isPacket");Tt(lle,"isPacket");cle="PacketBlock";o(ule,"isPacketBlock");Tt(ule,"isPacketBlock");hle="Pie";o(fle,"isPie");Tt(fle,"isPie");dle="PieSection";o(ple,"isPieSection");Tt(ple,"isPieSection");mPe="Direction",mle=class extends Yd{static{o(this,"MermaidAstReflection")}static{Tt(this,"MermaidAstReflection")}getAllTypes(){return["Architecture","Branch","Checkout","CherryPicking","Commit","Common","Direction","Edge","GitGraph","Group","Info","Junction","Merge","Packet","PacketBlock","Pie","PieSection","Service","Statement"]}computeIsSubtype(t,e){switch(t){case cI:case fPe:case dPe:case uI:case fI:return this.isSubtype(Qoe,e);case mPe:return this.isSubtype(hI,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case"Architecture":return{name:"Architecture",properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case"Branch":return{name:"Branch",properties:[{name:"name"},{name:"order"}]};case"Checkout":return{name:"Checkout",properties:[{name:"branch"}]};case"CherryPicking":return{name:"CherryPicking",properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case"Commit":return{name:"Commit",properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Common":return{name:"Common",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Edge":return{name:"Edge",properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case"GitGraph":return{name:"GitGraph",properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case"Group":return{name:"Group",properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case"Info":return{name:"Info",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Junction":return{name:"Junction",properties:[{name:"id"},{name:"in"}]};case"Merge":return{name:"Merge",properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Packet":return{name:"Packet",properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case"PacketBlock":return{name:"PacketBlock",properties:[{name:"end"},{name:"label"},{name:"start"}]};case"Pie":return{name:"Pie",properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case"PieSection":return{name:"PieSection",properties:[{name:"label"},{name:"value"}]};case"Service":return{name:"Service",properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case"Direction":return{name:"Direction",properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Pl=new mle,gPe=Tt(()=>Woe??(Woe=lf('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","name":"Info","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),yPe=Tt(()=>qoe??(qoe=lf(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","name":"Packet","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),vPe=Tt(()=>Xoe??(Xoe=lf('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","name":"Pie","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),xPe=Tt(()=>joe??(joe=lf('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","name":"Architecture","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","fragment":true,"definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LeftPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RightPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Arrow","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),bPe=Tt(()=>Koe??(Koe=lf(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","name":"GitGraph","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),wPe={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},TPe={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},kPe={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},EPe={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},CPe={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Bl={AstReflection:Tt(()=>new mle,"AstReflection")},dI={Grammar:Tt(()=>gPe(),"Grammar"),LanguageMetaData:Tt(()=>wPe,"LanguageMetaData"),parser:{}},pI={Grammar:Tt(()=>yPe(),"Grammar"),LanguageMetaData:Tt(()=>TPe,"LanguageMetaData"),parser:{}},mI={Grammar:Tt(()=>vPe(),"Grammar"),LanguageMetaData:Tt(()=>kPe,"LanguageMetaData"),parser:{}},gI={Grammar:Tt(()=>xPe(),"Grammar"),LanguageMetaData:Tt(()=>EPe,"LanguageMetaData"),parser:{}},yI={Grammar:Tt(()=>bPe(),"Grammar"),LanguageMetaData:Tt(()=>CPe,"LanguageMetaData"),parser:{}},SPe=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,APe=/accTitle[\t ]*:([^\n\r]*)/,_Pe=/title([\t ][^\n\r]*|)/,LPe={ACC_DESCR:SPe,ACC_TITLE:APe,TITLE:_Pe},_g=class extends y0{static{o(this,"AbstractMermaidValueConverter")}static{Tt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=LPe[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},w0=class extends _g{static{o(this,"CommonValueConverter")}static{Tt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},Xo=class extends g0{static{o(this,"AbstractMermaidTokenBuilder")}static{Tt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},DPe=class extends Xo{static{o(this,"CommonTokenBuilder")}static{Tt(this,"CommonTokenBuilder")}}});function Uk(t=go){let e=Fi(mo(t),Bl),r=Fi(po({shared:e}),yI,Vk);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var RPe,Vk,vI=R(()=>{"use strict";jo();Ic();RPe=class extends Xo{static{o(this,"GitGraphTokenBuilder")}static{Tt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},Vk={parser:{TokenBuilder:Tt(()=>new RPe,"TokenBuilder"),ValueConverter:Tt(()=>new w0,"ValueConverter")}};o(Uk,"createGitGraphServices");Tt(Uk,"createGitGraphServices")});function Yk(t=go){let e=Fi(mo(t),Bl),r=Fi(po({shared:e}),dI,Hk);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var NPe,Hk,xI=R(()=>{"use strict";jo();Ic();NPe=class extends Xo{static{o(this,"InfoTokenBuilder")}static{Tt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},Hk={parser:{TokenBuilder:Tt(()=>new NPe,"TokenBuilder"),ValueConverter:Tt(()=>new w0,"ValueConverter")}};o(Yk,"createInfoServices");Tt(Yk,"createInfoServices")});function qk(t=go){let e=Fi(mo(t),Bl),r=Fi(po({shared:e}),pI,Wk);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var MPe,Wk,bI=R(()=>{"use strict";jo();Ic();MPe=class extends Xo{static{o(this,"PacketTokenBuilder")}static{Tt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},Wk={parser:{TokenBuilder:Tt(()=>new MPe,"TokenBuilder"),ValueConverter:Tt(()=>new w0,"ValueConverter")}};o(qk,"createPacketServices");Tt(qk,"createPacketServices")});function jk(t=go){let e=Fi(mo(t),Bl),r=Fi(po({shared:e}),mI,Xk);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var IPe,OPe,Xk,wI=R(()=>{"use strict";jo();Ic();IPe=class extends Xo{static{o(this,"PieTokenBuilder")}static{Tt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},OPe=class extends _g{static{o(this,"PieValueConverter")}static{Tt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},Xk={parser:{TokenBuilder:Tt(()=>new IPe,"TokenBuilder"),ValueConverter:Tt(()=>new OPe,"ValueConverter")}};o(jk,"createPieServices");Tt(jk,"createPieServices")});function Qk(t=go){let e=Fi(mo(t),Bl),r=Fi(po({shared:e}),gI,Kk);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var PPe,BPe,Kk,TI=R(()=>{"use strict";jo();Ic();PPe=class extends Xo{static{o(this,"ArchitectureTokenBuilder")}static{Tt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},BPe=class extends _g{static{o(this,"ArchitectureValueConverter")}static{Tt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},Kk={parser:{TokenBuilder:Tt(()=>new PPe,"TokenBuilder"),ValueConverter:Tt(()=>new BPe,"ValueConverter")}};o(Qk,"createArchitectureServices");Tt(Qk,"createArchitectureServices")});var gle={};hr(gle,{InfoModule:()=>Hk,createInfoServices:()=>Yk});var yle=R(()=>{"use strict";xI();jo()});var vle={};hr(vle,{PacketModule:()=>Wk,createPacketServices:()=>qk});var xle=R(()=>{"use strict";bI();jo()});var ble={};hr(ble,{PieModule:()=>Xk,createPieServices:()=>jk});var wle=R(()=>{"use strict";wI();jo()});var Tle={};hr(Tle,{ArchitectureModule:()=>Kk,createArchitectureServices:()=>Qk});var kle=R(()=>{"use strict";TI();jo()});var Ele={};hr(Ele,{GitGraphModule:()=>Vk,createGitGraphServices:()=>Uk});var Cle=R(()=>{"use strict";vI();jo()});async function Fl(t,e){let r=FPe[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);T0[t]||await r();let i=T0[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new zPe(i);return i.value}var T0,FPe,zPe,Lg=R(()=>{"use strict";vI();xI();bI();wI();TI();jo();T0={},FPe={info:Tt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(yle(),gle)),e=t().Info.parser.LangiumParser;T0.info=e},"info"),packet:Tt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(xle(),vle)),e=t().Packet.parser.LangiumParser;T0.packet=e},"packet"),pie:Tt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(wle(),ble)),e=t().Pie.parser.LangiumParser;T0.pie=e},"pie"),architecture:Tt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(kle(),Tle)),e=t().Architecture.parser.LangiumParser;T0.architecture=e},"architecture"),gitGraph:Tt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(Cle(),Ele)),e=t().GitGraph.parser.LangiumParser;T0.gitGraph=e},"gitGraph")};o(Fl,"parse");Tt(Fl,"parse");zPe=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` +`),r=t.parserErrors.map(n=>n.message).join(` +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Tt(this,"MermaidParseError")}}});function cf(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var sx=R(()=>{"use strict";o(cf,"populateCommonDb")});var Hr,Zk=R(()=>{"use strict";Hr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var uf,Jk=R(()=>{"use strict";uf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function kI(){return J_({length:7})}function $Pe(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function Sle(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function _le(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in pt.records.branches)pt.records.branches.get(i)===e.id&&n.push(i);if(V.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=pt.records.commits.get(e.parents[0]);Sle(t,e,i),e.parents[1]&&t.push(pt.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=pt.records.commits.get(e.parents[0]);Sle(t,e,i)}}t=$Pe(t,i=>i.id),_le(t)}var GPe,k0,pt,VPe,UPe,HPe,YPe,WPe,qPe,XPe,Ale,jPe,KPe,QPe,ZPe,JPe,Lle,eBe,tBe,rBe,eE,EI=R(()=>{"use strict";ut();xr();qs();rr();bi();Zk();Jk();sl();GPe=mr.gitGraph,k0=o(()=>Ts({...GPe,...Or().gitGraph}),"getConfig"),pt=new uf(()=>{let t=k0(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(kI,"getID");o($Pe,"uniqBy");VPe=o(function(t){pt.records.direction=t},"setDirection"),UPe=o(function(t){V.debug("options str",t),t=t?.trim(),t=t||"{}";try{pt.records.options=JSON.parse(t)}catch(e){V.error("error while parsing gitGraph options",e.message)}},"setOptions"),HPe=o(function(){return pt.records.options},"getOptions"),YPe=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;V.info("commit",e,r,n,i),V.debug("Entering commit:",e,r,n,i);let a=k0();r=We.sanitizeText(r,a),e=We.sanitizeText(e,a),i=i?.map(l=>We.sanitizeText(l,a));let s={id:r||pt.records.seq+"-"+kI(),message:e,seq:pt.records.seq++,type:n??Hr.NORMAL,tags:i??[],parents:pt.records.head==null?[]:[pt.records.head.id],branch:pt.records.currBranch};pt.records.head=s,V.info("main branch",a.mainBranchName),pt.records.commits.set(s.id,s),pt.records.branches.set(pt.records.currBranch,s.id),V.debug("in pushCommit "+s.id)},"commit"),WPe=o(function(t){let e=t.name,r=t.order;if(e=We.sanitizeText(e,k0()),pt.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);pt.records.branches.set(e,pt.records.head!=null?pt.records.head.id:null),pt.records.branchConfig.set(e,{name:e,order:r}),Ale(e),V.debug("in createBranch")},"branch"),qPe=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=k0();e=We.sanitizeText(e,a),r&&(r=We.sanitizeText(r,a));let s=pt.records.branches.get(pt.records.currBranch),l=pt.records.branches.get(e),u=s?pt.records.commits.get(s):void 0,h=l?pt.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(pt.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${pt.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!pt.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&pt.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${pt.records.seq}-${kI()}`,message:`merged branch ${e} into ${pt.records.currBranch}`,seq:pt.records.seq++,parents:pt.records.head==null?[]:[pt.records.head.id,f],branch:pt.records.currBranch,type:Hr.MERGE,customType:n,customId:!!r,tags:i??[]};pt.records.head=d,pt.records.commits.set(d.id,d),pt.records.branches.set(pt.records.currBranch,d.id),V.debug(pt.records.branches),V.debug("in mergeBranch")},"merge"),XPe=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;V.debug("Entering cherryPick:",e,r,n);let a=k0();if(e=We.sanitizeText(e,a),r=We.sanitizeText(r,a),n=n?.map(u=>We.sanitizeText(u,a)),i=We.sanitizeText(i,a),!e||!pt.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=pt.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Hr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!pt.records.commits.has(r)){if(l===pt.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=pt.records.branches.get(pt.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${pt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=pt.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${pt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:pt.records.seq+"-"+kI(),message:`cherry-picked ${s?.message} into ${pt.records.currBranch}`,seq:pt.records.seq++,parents:pt.records.head==null?[]:[pt.records.head.id,s.id],branch:pt.records.currBranch,type:Hr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===Hr.MERGE?`|parent:${i}`:""}`]};pt.records.head=f,pt.records.commits.set(f.id,f),pt.records.branches.set(pt.records.currBranch,f.id),V.debug(pt.records.branches),V.debug("in cherryPick")}},"cherryPick"),Ale=o(function(t){if(t=We.sanitizeText(t,k0()),pt.records.branches.has(t)){pt.records.currBranch=t;let e=pt.records.branches.get(pt.records.currBranch);e===void 0||!e?pt.records.head=null:pt.records.head=pt.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(Sle,"upsert");o(_le,"prettyPrintCommitHistory");jPe=o(function(){V.debug(pt.records.commits);let t=Lle()[0];_le([t])},"prettyPrint"),KPe=o(function(){pt.reset(),vr()},"clear"),QPe=o(function(){return[...pt.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),ZPe=o(function(){return pt.records.branches},"getBranches"),JPe=o(function(){return pt.records.commits},"getCommits"),Lle=o(function(){let t=[...pt.records.commits.values()];return t.forEach(function(e){V.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),eBe=o(function(){return pt.records.currBranch},"getCurrentBranch"),tBe=o(function(){return pt.records.direction},"getDirection"),rBe=o(function(){return pt.records.head},"getHead"),eE={commitType:Hr,getConfig:k0,setDirection:VPe,setOptions:UPe,getOptions:HPe,commit:YPe,branch:WPe,merge:qPe,cherryPick:XPe,checkout:Ale,prettyPrint:jPe,clear:KPe,getBranchesAsObjArray:QPe,getBranches:ZPe,getCommits:JPe,getCommitsArray:Lle,getCurrentBranch:eBe,getDirection:tBe,getHead:rBe,setAccTitle:kr,getAccTitle:Ar,getAccDescription:Lr,setAccDescription:_r,setDiagramTitle:nn,getDiagramTitle:Xr}});var nBe,iBe,aBe,sBe,oBe,lBe,cBe,Dle,Rle=R(()=>{"use strict";Lg();ut();sx();EI();Zk();nBe=o((t,e)=>{cf(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)iBe(r,e)},"populate"),iBe=o((t,e)=>{let n={Commit:o(i=>e.commit(aBe(i)),"Commit"),Branch:o(i=>e.branch(sBe(i)),"Branch"),Merge:o(i=>e.merge(oBe(i)),"Merge"),Checkout:o(i=>e.checkout(lBe(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(cBe(i)),"CherryPicking")}[t.$type];n?n(t):V.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),aBe=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Hr[t.type]:Hr.NORMAL,tags:t.tags??void 0}),"parseCommit"),sBe=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),oBe=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Hr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),lBe=o(t=>t.branch,"parseCheckout"),cBe=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Dle={parse:o(async t=>{let e=await Fl("gitGraph",t);V.debug(e),nBe(e,eE)},"parse")}});var uBe,Ko,ff,df,Oc,Hu,E0,Is,Os,tE,ox,rE,hf,Tr,hBe,Mle,Ile,fBe,dBe,pBe,mBe,gBe,yBe,vBe,xBe,bBe,wBe,TBe,kBe,Nle,EBe,lx,CBe,SBe,ABe,_Be,LBe,Ole,Ple=R(()=>{"use strict";Zt();_t();ut();xr();Zk();uBe=de(),Ko=uBe?.gitGraph,ff=10,df=40,Oc=4,Hu=2,E0=8,Is=new Map,Os=new Map,tE=30,ox=new Map,rE=[],hf=0,Tr="LR",hBe=o(()=>{Is.clear(),Os.clear(),ox.clear(),hf=0,rE=[],Tr="LR"},"clear"),Mle=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),Ile=o(t=>{let e,r,n;return Tr==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Tr==="TB"||Tr=="BT"?Os.get(i)?.y:Os.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),fBe=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Os.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),dBe=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=mBe(l),i=Math.max(n,i)):a.push(l),gBe(l,n)}),n=i,a.forEach(s=>{yBe(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=fBe(l.parents);n=Os.get(u).y-df,n<=i&&(i=n);let h=Is.get(l.branch).pos,f=n-ff;Os.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),pBe=o(t=>{let e=Ile(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Os.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),mBe=o(t=>pBe(t)+df,"calculateCommitPosition"),gBe=o((t,e)=>{let r=Is.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+ff;return Os.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),yBe=o((t,e,r)=>{let n=Is.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Os.set(t.id,{x:a,y:i})},"setRootPosition"),vBe=o((t,e,r,n,i,a)=>{if(a===Hr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%E0} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%E0} ${n}-inner`);else if(a===Hr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===Hr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%E0}`),a===Hr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%E0}`)}a===Hr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%E0}`)}},"drawCommitBullet"),xBe=o((t,e,r,n)=>{if(e.type!==Hr.CHERRY_PICK&&(e.customId&&e.type===Hr.MERGE||e.type!==Hr.MERGE)&&Ko?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-Hu).attr("y",r.y+13.5).attr("width",l.width+2*Hu).attr("height",l.height+2*Hu),Tr==="TB"||Tr==="BT"?(a.attr("x",r.x-(l.width+4*Oc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*Oc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),Ko.rotateCommitLabel))if(Tr==="TB"||Tr==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),bBe=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` + ${n-a/2-Oc/2},${m+Hu} + ${n-a/2-Oc/2},${m-Hu} + ${r.posWithOffset-a/2-Oc},${m-p-Hu} + ${r.posWithOffset+a/2+Oc},${m-p-Hu} + ${r.posWithOffset+a/2+Oc},${m+p+Hu} + ${r.posWithOffset-a/2-Oc},${m+p+Hu}`),h.attr("cy",m).attr("cx",n-a/2+Oc/2).attr("r",1.5).attr("class","tag-hole"),Tr==="TB"||Tr==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` + ${r.x},${g+2} + ${r.x},${g-2} + ${r.x+ff},${g-p-2} + ${r.x+ff+a+4},${g-p-2} + ${r.x+ff+a+4},${g+p+2} + ${r.x+ff},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+Oc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),wBe=o(t=>{switch(t.customType??t.type){case Hr.NORMAL:return"commit-normal";case Hr.REVERSE:return"commit-reverse";case Hr.HIGHLIGHT:return"commit-highlight";case Hr.MERGE:return"commit-merge";case Hr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),TBe=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=Ile(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+df:e==="BT"?(n.get(t.id)??i).y-df:s.x+df}}else return e==="TB"?tE:e==="BT"?(n.get(t.id)??i).y-df:0;return 0},"calculatePosition"),kBe=o((t,e,r)=>{let n=Tr==="BT"&&r?e:e+ff,i=Tr==="TB"||Tr==="BT"?n:Is.get(t.branch)?.pos,a=Tr==="TB"||Tr==="BT"?Is.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),Nle=o((t,e,r)=>{if(!Ko)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Tr==="TB"||Tr==="BT"?tE:0,s=[...e.keys()],l=Ko?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Tr==="BT"&&(l&&dBe(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=TBe(d,Tr,a,Os));let p=kBe(d,a,l);if(r){let m=wBe(d),g=d.customType??d.type,y=Is.get(d.branch)?.index??0;vBe(n,d,p,m,y,g),xBe(i,d,p,a),bBe(i,d,p,a)}Tr==="TB"||Tr==="BT"?Os.set(d.id,{x:p.x,y:p.posWithOffset}):Os.set(d.id,{x:p.posWithOffset,y:p.y}),a=Tr==="BT"&&l?a+df:a+df+ff,a>hf&&(hf=a)})},"drawCommits"),EBe=o((t,e,r,n,i)=>{let s=(Tr==="TB"||Tr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),lx=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(rE.every(s=>Math.abs(s-n)>=10))return rE.push(n),n;let a=Math.abs(t-e);return lx(t,e-a/5,r+1)},"findLane"),CBe=o((t,e,r,n)=>{let i=Os.get(e.id),a=Os.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=EBe(e,r,i,a,n),l="",u="",h=0,f=0,d=Is.get(r.branch)?.index;r.type===Hr.MERGE&&e.id!==r.parents[0]&&(d=Is.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.ya.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Hr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Tr==="BT"?(i.xa.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Hr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.ya.y&&(r.type===Hr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%E0)},"drawArrow"),SBe=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{CBe(r,e.get(a),i,e)})})},"drawArrows"),ABe=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%E0,s=Is.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",hf),l.attr("y2",s),l.attr("class","branch branch"+a),Tr==="TB"?(l.attr("y1",tE),l.attr("x1",s),l.attr("y2",hf),l.attr("x2",s)):Tr==="BT"&&(l.attr("y1",hf),l.attr("x1",s),l.attr("y2",tE),l.attr("x2",s)),rE.push(s);let u=n.name,h=Mle(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(Ko?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(Ko?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Tr==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Tr==="BT"?(f.attr("x",s-m.width/2-10).attr("y",hf),p.attr("transform","translate("+(s-m.width/2-5)+", "+hf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),_Be=o(function(t,e,r,n,i){return Is.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Tr==="TB"||Tr==="BT"?n.width/2:0),e},"setBranchPosition"),LBe=o(function(t,e,r,n){if(hBe(),V.debug("in gitgraph renderer",t+` +`,"id:",e,r),!Ko)throw new Error("GitGraph config not found");let i=Ko.rotateCommitLabel??!1,a=n.db;ox=a.getCommits();let s=a.getBranchesAsObjArray();Tr=a.getDirection();let l=$e(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=Mle(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=_Be(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),Nle(l,ox,!1),Ko.showBranches&&ABe(l,s),SBe(l,ox),Nle(l,ox,!0),Lt.insertTitle(l,"gitTitleText",Ko.titleTopMargin??0,a.getDiagramTitle()),aS(void 0,l,Ko.diagramPadding,Ko.useMaxWidth)},"draw"),Ole={draw:LBe}});var DBe,Ble,Fle=R(()=>{"use strict";DBe=o(t=>` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0,1,2,3,4,5,6,7].map(e=>` + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; } + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; } + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; } + .label${e} { fill: ${t["git"+e]}; } + .arrow${e} { stroke: ${t["git"+e]}; } + `).join(` +`)} + + .branch { + stroke-width: 1; + stroke: ${t.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } + .tag-hole { fill: ${t.textColor}; } + + .commit-merge { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + .commit-reverse { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),Ble=DBe});var zle={};hr(zle,{diagram:()=>RBe});var RBe,Gle=R(()=>{"use strict";Rle();EI();Ple();Fle();RBe={parser:Dle,db:eE,renderer:Ole,styles:Ble}});var CI,Ule,Hle=R(()=>{"use strict";CI=function(){var t=o(function(I,C,O,D){for(O=O||{},D=I.length;D--;O[I[D]]=C);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],S=[1,20],T=[1,21],E=[1,22],_=[1,23],A=[1,25],L=[1,35],M={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(C,O,D,P,F,B,$){var z=B.length-1;switch(F){case 1:return B[z-1];case 2:this.$=[];break;case 3:B[z-1].push(B[z]),this.$=B[z-1];break;case 4:case 5:this.$=B[z];break;case 6:case 7:this.$=[];break;case 8:P.setWeekday("monday");break;case 9:P.setWeekday("tuesday");break;case 10:P.setWeekday("wednesday");break;case 11:P.setWeekday("thursday");break;case 12:P.setWeekday("friday");break;case 13:P.setWeekday("saturday");break;case 14:P.setWeekday("sunday");break;case 15:P.setWeekend("friday");break;case 16:P.setWeekend("saturday");break;case 17:P.setDateFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 18:P.enableInclusiveEndDates(),this.$=B[z].substr(18);break;case 19:P.TopAxis(),this.$=B[z].substr(8);break;case 20:P.setAxisFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 21:P.setTickInterval(B[z].substr(13)),this.$=B[z].substr(13);break;case 22:P.setExcludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 23:P.setIncludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 24:P.setTodayMarker(B[z].substr(12)),this.$=B[z].substr(12);break;case 27:P.setDiagramTitle(B[z].substr(6)),this.$=B[z].substr(6);break;case 28:this.$=B[z].trim(),P.setAccTitle(this.$);break;case 29:case 30:this.$=B[z].trim(),P.setAccDescription(this.$);break;case 31:P.addSection(B[z].substr(8)),this.$=B[z].substr(8);break;case 33:P.addTask(B[z-1],B[z]),this.$="task";break;case 34:this.$=B[z-1],P.setClickEvent(B[z-1],B[z],null);break;case 35:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],B[z]);break;case 36:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],null),P.setLink(B[z-2],B[z]);break;case 37:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-2],B[z-1]),P.setLink(B[z-3],B[z]);break;case 38:this.$=B[z-2],P.setClickEvent(B[z-2],B[z],null),P.setLink(B[z-2],B[z-1]);break;case 39:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-1],B[z]),P.setLink(B[z-3],B[z-2]);break;case 40:this.$=B[z-1],P.setLink(B[z-1],B[z]);break;case 41:case 47:this.$=B[z-1]+" "+B[z];break;case 42:case 43:case 45:this.$=B[z-2]+" "+B[z-1]+" "+B[z];break;case 44:case 46:this.$=B[z-3]+" "+B[z-2]+" "+B[z-1]+" "+B[z];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:S,33:T,35:E,36:_,37:24,38:A,40:L},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:S,33:T,35:E,36:_,37:24,38:A,40:L},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(C,O){if(O.recoverable)this.trace(C);else{var D=new Error(C);throw D.hash=O,D}},"parseError"),parse:o(function(C){var O=this,D=[0],P=[],F=[null],B=[],$=this.table,z="",Y=0,Q=0,X=0,ie=2,j=1,J=B.slice.call(arguments,1),Z=Object.create(this.lexer),H={yy:{}};for(var q in this.yy)Object.prototype.hasOwnProperty.call(this.yy,q)&&(H.yy[q]=this.yy[q]);Z.setInput(C,H.yy),H.yy.lexer=Z,H.yy.parser=this,typeof Z.yylloc>"u"&&(Z.yylloc={});var K=Z.yylloc;B.push(K);var se=Z.options&&Z.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ce(ge){D.length=D.length-2*ge,F.length=F.length-ge,B.length=B.length-ge}o(ce,"popStack");function ue(){var ge;return ge=P.pop()||Z.lex()||j,typeof ge!="number"&&(ge instanceof Array&&(P=ge,ge=P.pop()),ge=O.symbols_[ge]||ge),ge}o(ue,"lex");for(var te,De,oe,ke,Ie,Se,Ue={},Pe,_e,me,W;;){if(oe=D[D.length-1],this.defaultActions[oe]?ke=this.defaultActions[oe]:((te===null||typeof te>"u")&&(te=ue()),ke=$[oe]&&$[oe][te]),typeof ke>"u"||!ke.length||!ke[0]){var fe="";W=[];for(Pe in $[oe])this.terminals_[Pe]&&Pe>ie&&W.push("'"+this.terminals_[Pe]+"'");Z.showPosition?fe="Parse error on line "+(Y+1)+`: +`+Z.showPosition()+` +Expecting `+W.join(", ")+", got '"+(this.terminals_[te]||te)+"'":fe="Parse error on line "+(Y+1)+": Unexpected "+(te==j?"end of input":"'"+(this.terminals_[te]||te)+"'"),this.parseError(fe,{text:Z.match,token:this.terminals_[te]||te,line:Z.yylineno,loc:K,expected:W})}if(ke[0]instanceof Array&&ke.length>1)throw new Error("Parse Error: multiple actions possible at state: "+oe+", token: "+te);switch(ke[0]){case 1:D.push(te),F.push(Z.yytext),B.push(Z.yylloc),D.push(ke[1]),te=null,De?(te=De,De=null):(Q=Z.yyleng,z=Z.yytext,Y=Z.yylineno,K=Z.yylloc,X>0&&X--);break;case 2:if(_e=this.productions_[ke[1]][1],Ue.$=F[F.length-_e],Ue._$={first_line:B[B.length-(_e||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-(_e||1)].first_column,last_column:B[B.length-1].last_column},se&&(Ue._$.range=[B[B.length-(_e||1)].range[0],B[B.length-1].range[1]]),Se=this.performAction.apply(Ue,[z,Q,Y,H.yy,ke[1],F,B].concat(J)),typeof Se<"u")return Se;_e&&(D=D.slice(0,-1*_e*2),F=F.slice(0,-1*_e),B=B.slice(0,-1*_e)),D.push(this.productions_[ke[1]][0]),F.push(Ue.$),B.push(Ue._$),me=$[D[D.length-2]][D[D.length-1]],D.push(me);break;case 3:return!0}}return!0},"parse")},N=function(){var I={EOF:1,parseError:o(function(O,D){if(this.yy.parser)this.yy.parser.parseError(O,D);else throw new Error(O)},"parseError"),setInput:o(function(C,O){return this.yy=O||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var O=C.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var O=C.length,D=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),D.length-1&&(this.yylineno-=D.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:D?(D.length===P.length?this.yylloc.first_column:0)+P[P.length-D.length].length-D[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),O=new Array(C.length+1).join("-");return C+this.upcomingInput()+` +`+O+"^"},"showPosition"),test_match:o(function(C,O){var D,P,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),P=C[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],D=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),D)return D;if(this._backtrack){for(var B in F)this[B]=F[B];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,O,D,P;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),B=0;BO[0].length)){if(O=D,P=B,this.options.backtrack_lexer){if(C=this.test_match(D,F[B]),C!==!1)return C;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(C=this.test_match(O,F[P]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,D,P,F){var B=F;switch(P){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return I}();M.lexer=N;function k(){this.yy={}}return o(k,"Parser"),k.prototype=M,M.Parser=k,new k}();CI.parser=CI;Ule=CI});var Yle=gi((SI,AI)=>{"use strict";(function(t,e){typeof SI=="object"&&typeof AI<"u"?AI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(SI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var Wle=gi((_I,LI)=>{"use strict";(function(t,e){typeof _I=="object"&&typeof LI<"u"?LI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(_I,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(A,L,M){var N=M&&M.toUpperCase();return L||v[M]||t[M]||v[N].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,I,C){return I||C.slice(1)})})).match(e),b=x.length,w=0;w-1)return new Date((D==="X"?1e3:1)*O);var B=m(D)(O),$=B.year,z=B.month,Y=B.day,Q=B.hours,X=B.minutes,ie=B.seconds,j=B.milliseconds,J=B.zone,Z=B.week,H=new Date,q=Y||($||z?1:H.getDate()),K=$||H.getFullYear(),se=0;$&&!z||(se=z>0?z-1:H.getMonth());var ce,ue=Q||0,te=X||0,De=ie||0,oe=j||0;return J?new Date(Date.UTC(K,se,q,ue,te,De,oe+60*J.offset*1e3)):P?new Date(Date.UTC(K,se,q,ue,te,De,oe)):(ce=new Date(K,se,q,ue,te,De,oe),Z&&(ce=F(ce).week(Z).toDate()),ce)}catch{return new Date("")}}(S,_,T,v),this.init(),N&&N!==!0&&(this.$L=this.locale(N).$L),M&&S!=this.format(_)&&(this.$d=new Date("")),s={}}else if(_ instanceof Array)for(var k=_.length,I=1;I<=k;I+=1){E[1]=_[I-1];var C=v.apply(this,E);if(C.isValid()){this.$d=C.$d,this.$L=C.$L,this.init();break}I===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var qle=gi((DI,RI)=>{"use strict";(function(t,e){typeof DI=="object"&&typeof RI<"u"?RI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(DI,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function cce(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var Kle,yo,Qle,Zle,Jle,Xle,Pc,OI,PI,BI,cx,ux,FI,zI,aE,Rg,GI,ece,$I,hx,VI,UI,sE,NI,OBe,PBe,BBe,FBe,zBe,GBe,$Be,VBe,UBe,HBe,YBe,WBe,qBe,XBe,jBe,KBe,QBe,ZBe,JBe,eFe,tFe,rFe,nFe,tce,iFe,aFe,sFe,rce,oFe,MI,nce,ice,nE,Dg,lFe,cFe,II,iE,zi,ace,uFe,C0,hFe,jle,fFe,sce,dFe,oce,pFe,mFe,lce,uce=R(()=>{"use strict";Kle=Xi(Up(),1),yo=Xi(Nb(),1),Qle=Xi(Yle(),1),Zle=Xi(Wle(),1),Jle=Xi(qle(),1);ut();_t();xr();bi();yo.default.extend(Qle.default);yo.default.extend(Zle.default);yo.default.extend(Jle.default);Xle={friday:5,saturday:6},Pc="",OI="",BI="",cx=[],ux=[],FI=new Map,zI=[],aE=[],Rg="",GI="",ece=["active","done","crit","milestone"],$I=[],hx=!1,VI=!1,UI="sunday",sE="saturday",NI=0,OBe=o(function(){zI=[],aE=[],Rg="",$I=[],nE=0,II=void 0,iE=void 0,zi=[],Pc="",OI="",GI="",PI=void 0,BI="",cx=[],ux=[],hx=!1,VI=!1,NI=0,FI=new Map,vr(),UI="sunday",sE="saturday"},"clear"),PBe=o(function(t){OI=t},"setAxisFormat"),BBe=o(function(){return OI},"getAxisFormat"),FBe=o(function(t){PI=t},"setTickInterval"),zBe=o(function(){return PI},"getTickInterval"),GBe=o(function(t){BI=t},"setTodayMarker"),$Be=o(function(){return BI},"getTodayMarker"),VBe=o(function(t){Pc=t},"setDateFormat"),UBe=o(function(){hx=!0},"enableInclusiveEndDates"),HBe=o(function(){return hx},"endDatesAreInclusive"),YBe=o(function(){VI=!0},"enableTopAxis"),WBe=o(function(){return VI},"topAxisEnabled"),qBe=o(function(t){GI=t},"setDisplayMode"),XBe=o(function(){return GI},"getDisplayMode"),jBe=o(function(){return Pc},"getDateFormat"),KBe=o(function(t){cx=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),QBe=o(function(){return cx},"getIncludes"),ZBe=o(function(t){ux=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),JBe=o(function(){return ux},"getExcludes"),eFe=o(function(){return FI},"getLinks"),tFe=o(function(t){Rg=t,zI.push(t)},"addSection"),rFe=o(function(){return zI},"getSections"),nFe=o(function(){let t=jle(),e=10,r=0;for(;!t&&r[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=C0(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,yo.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{V.debug("Invalid date:"+r),V.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),nce=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),ice=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=C0(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),FI.set(n,r))}),sce(t,"clickable")},"setLink"),sce=o(function(t,e){t.split(",").forEach(function(r){let n=C0(r);n!==void 0&&n.classes.push(e)})},"setClass"),dFe=o(function(t,e,r){if(de().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Lt.runFunc(e,...n)})},"setClickFun"),oce=o(function(t,e){$I.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),pFe=o(function(t,e,r){t.split(",").forEach(function(n){dFe(n,e,r)}),sce(t,"clickable")},"setClickEvent"),mFe=o(function(t){$I.forEach(function(e){e(t)})},"bindFunctions"),lce={getConfig:o(()=>de().gantt,"getConfig"),clear:OBe,setDateFormat:VBe,getDateFormat:jBe,enableInclusiveEndDates:UBe,endDatesAreInclusive:HBe,enableTopAxis:YBe,topAxisEnabled:WBe,setAxisFormat:PBe,getAxisFormat:BBe,setTickInterval:FBe,getTickInterval:zBe,setTodayMarker:GBe,getTodayMarker:$Be,setAccTitle:kr,getAccTitle:Ar,setDiagramTitle:nn,getDiagramTitle:Xr,setDisplayMode:qBe,getDisplayMode:XBe,setAccDescription:_r,getAccDescription:Lr,addSection:tFe,getSections:rFe,getTasks:nFe,addTask:uFe,findTaskById:C0,addTaskOrg:hFe,setIncludes:KBe,getIncludes:QBe,setExcludes:ZBe,getExcludes:JBe,setClickEvent:pFe,setLink:fFe,getLinks:eFe,bindFunctions:mFe,parseDuration:nce,isInvalidDate:tce,setWeekday:iFe,getWeekday:aFe,setWeekend:sFe};o(cce,"getTaskTags")});var oE,gFe,hce,yFe,Yu,vFe,fce,dce=R(()=>{"use strict";oE=Xi(Nb(),1);ut();Zt();rr();_t();Yn();gFe=o(function(){V.debug("Something is calling, setConf, remove the call")},"setConf"),hce={monday:_h,tuesday:k3,wednesday:E3,thursday:cc,friday:C3,saturday:S3,sunday:yl},yFe=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),vFe=o(function(t,e,r,n){let i=de().gantt,a=de().securityLevel,s;a==="sandbox"&&(s=$e("#i"+e));let l=a==="sandbox"?$e(s.nodes()[0].contentDocument.body):$e("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Yu=h.parentElement.offsetWidth,Yu===void 0&&(Yu=1200),i.useWidth!==void 0&&(Yu=i.useWidth);let f=n.db.getTasks(),d=[];for(let A of f)d.push(A.type);d=_(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let A={};for(let M of f)A[M.section]===void 0?A[M.section]=[M]:A[M.section].push(M);let L=0;for(let M of Object.keys(A)){let N=yFe(A[M],L)+1;L+=N,m+=N*(i.barHeight+i.barGap),p[M]=N}}else{m+=f.length*(i.barHeight+i.barGap);for(let A of d)p[A]=f.filter(L=>L.type===A).length}h.setAttribute("viewBox","0 0 "+Yu+" "+m);let g=l.select(`[id="${e}"]`),y=L3().domain([I4(f,function(A){return A.startTime}),M4(f,function(A){return A.endTime})]).rangeRound([0,Yu-i.leftPadding-i.rightPadding]);function v(A,L){let M=A.startTime,N=L.startTime,k=0;return M>N?k=1:M$.order))].map($=>A.find(z=>z.order===$));g.append("g").selectAll("rect").data(D).enter().append("rect").attr("x",0).attr("y",function($,z){return z=$.order,z*L+M-2}).attr("width",function(){return C-i.rightPadding/2}).attr("height",L).attr("class",function($){for(let[z,Y]of d.entries())if($.type===Y)return"section section"+z%i.numberSectionStyles;return"section section0"});let P=g.append("g").selectAll("rect").data(A).enter(),F=n.db.getLinks();if(P.append("rect").attr("id",function($){return $.id}).attr("rx",3).attr("ry",3).attr("x",function($){return $.milestone?y($.startTime)+N+.5*(y($.endTime)-y($.startTime))-.5*k:y($.startTime)+N}).attr("y",function($,z){return z=$.order,z*L+M}).attr("width",function($){return $.milestone?k:y($.renderEndTime||$.endTime)-y($.startTime)}).attr("height",k).attr("transform-origin",function($,z){return z=$.order,(y($.startTime)+N+.5*(y($.endTime)-y($.startTime))).toString()+"px "+(z*L+M+.5*k).toString()+"px"}).attr("class",function($){let z="task",Y="";$.classes.length>0&&(Y=$.classes.join(" "));let Q=0;for(let[ie,j]of d.entries())$.type===j&&(Q=ie%i.numberSectionStyles);let X="";return $.active?$.crit?X+=" activeCrit":X=" active":$.done?$.crit?X=" doneCrit":X=" done":$.crit&&(X+=" crit"),X.length===0&&(X=" task"),$.milestone&&(X=" milestone "+X),X+=Q,X+=" "+Y,z+X}),P.append("text").attr("id",function($){return $.id+"-text"}).text(function($){return $.task}).attr("font-size",i.fontSize).attr("x",function($){let z=y($.startTime),Y=y($.renderEndTime||$.endTime);$.milestone&&(z+=.5*(y($.endTime)-y($.startTime))-.5*k),$.milestone&&(Y=z+k);let Q=this.getBBox().width;return Q>Y-z?Y+Q+1.5*i.leftPadding>C?z+N-5:Y+N+5:(Y-z)/2+z+N}).attr("y",function($,z){return z=$.order,z*L+i.barHeight/2+(i.fontSize/2-2)+M}).attr("text-height",k).attr("class",function($){let z=y($.startTime),Y=y($.endTime);$.milestone&&(Y=z+k);let Q=this.getBBox().width,X="";$.classes.length>0&&(X=$.classes.join(" "));let ie=0;for(let[J,Z]of d.entries())$.type===Z&&(ie=J%i.numberSectionStyles);let j="";return $.active&&($.crit?j="activeCritText"+ie:j="activeText"+ie),$.done?$.crit?j=j+" doneCritText"+ie:j=j+" doneText"+ie:$.crit&&(j=j+" critText"+ie),$.milestone&&(j+=" milestoneText"),Q>Y-z?Y+Q+1.5*i.leftPadding>C?X+" taskTextOutsideLeft taskTextOutside"+ie+" "+j:X+" taskTextOutsideRight taskTextOutside"+ie+" "+j+" width-"+Q:X+" taskText taskText"+ie+" "+j+" width-"+Q}),de().securityLevel==="sandbox"){let $;$=$e("#i"+e);let z=$.nodes()[0].contentDocument;P.filter(function(Y){return F.has(Y.id)}).each(function(Y){var Q=z.querySelector("#"+Y.id),X=z.querySelector("#"+Y.id+"-text");let ie=Q.parentNode;var j=z.createElement("a");j.setAttribute("xlink:href",F.get(Y.id)),j.setAttribute("target","_top"),ie.appendChild(j),j.appendChild(Q),j.appendChild(X)})}}o(b,"drawRects");function w(A,L,M,N,k,I,C,O){if(C.length===0&&O.length===0)return;let D,P;for(let{startTime:Q,endTime:X}of I)(D===void 0||QP)&&(P=X);if(!D||!P)return;if((0,oE.default)(P).diff((0,oE.default)(D),"year")>5){V.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),B=[],$=null,z=(0,oE.default)(D);for(;z.valueOf()<=P;)n.db.isInvalidDate(z,F,C,O)?$?$.end=z:$={start:z,end:z}:$&&(B.push($),$=null),z=z.add(1,"d");g.append("g").selectAll("rect").data(B).enter().append("rect").attr("id",function(Q){return"exclude-"+Q.start.format("YYYY-MM-DD")}).attr("x",function(Q){return y(Q.start)+M}).attr("y",i.gridLineStartPadding).attr("width",function(Q){let X=Q.end.add(1,"day");return y(X)-y(Q.start)}).attr("height",k-L-i.gridLineStartPadding).attr("transform-origin",function(Q,X){return(y(Q.start)+M+.5*(y(Q.end)-y(Q.start))).toString()+"px "+(X*A+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function S(A,L,M,N){let k=vS(y).tickSize(-N+L+i.gridLineStartPadding).tickFormat(md(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),C=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(C!==null){let O=C[1],D=C[2],P=n.db.getWeekday()||i.weekday;switch(D){case"millisecond":k.ticks(oc.every(O));break;case"second":k.ticks(Ks.every(O));break;case"minute":k.ticks(gu.every(O));break;case"hour":k.ticks(yu.every(O));break;case"day":k.ticks(Do.every(O));break;case"week":k.ticks(hce[P].every(O));break;case"month":k.ticks(vu.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+A+", "+(N-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=yS(y).tickSize(-N+L+i.gridLineStartPadding).tickFormat(md(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(C!==null){let D=C[1],P=C[2],F=n.db.getWeekday()||i.weekday;switch(P){case"millisecond":O.ticks(oc.every(D));break;case"second":O.ticks(Ks.every(D));break;case"minute":O.ticks(gu.every(D));break;case"hour":O.ticks(yu.every(D));break;case"day":O.ticks(Do.every(D));break;case"week":O.ticks(hce[F].every(D));break;case"month":O.ticks(vu.every(D));break}}g.append("g").attr("class","grid").attr("transform","translate("+A+", "+L+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(S,"makeGrid");function T(A,L){let M=0,N=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(N).enter().append(function(k){let I=k[0].split(We.lineBreakRegex),C=-(I.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",C+"em");for(let[D,P]of I.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),D>0&&F.setAttribute("dy","1em"),F.textContent=P,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,I){if(I>0)for(let C=0;C{"use strict";xFe=o(t=>` + .mermaid-main-font { + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .exclude-range { + fill: ${t.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${t.sectionBkgColor}; + } + + .section2 { + fill: ${t.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${t.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${t.titleColor}; + } + + .sectionTitle1 { + fill: ${t.titleColor}; + } + + .sectionTitle2 { + fill: ${t.titleColor}; + } + + .sectionTitle3 { + fill: ${t.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${t.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${t.fontFamily}; + fill: ${t.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${t.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideRight { + fill: ${t.taskTextDarkColor}; + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideLeft { + fill: ${t.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${t.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${t.taskBkgColor}; + stroke: ${t.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${t.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${t.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${t.activeTaskBkgColor}; + stroke: ${t.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${t.doneTaskBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${t.critBorderColor}; + fill: ${t.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.titleColor||t.textColor}; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } +`,"getStyles"),pce=xFe});var gce={};hr(gce,{diagram:()=>bFe});var bFe,yce=R(()=>{"use strict";Hle();uce();dce();mce();bFe={parser:Ule,db:lce,renderer:fce,styles:pce}});var bce,wce=R(()=>{"use strict";Lg();ut();bce={parse:o(async t=>{let e=await Fl("info",t);V.debug(e)},"parse")}});var fx,HI=R(()=>{fx="11.2.0"});var CFe,SFe,Tce,kce=R(()=>{"use strict";HI();CFe={version:fx},SFe=o(()=>CFe.version,"getVersion"),Tce={getVersion:SFe}});var Ps,pf=R(()=>{"use strict";Zt();_t();Ps=o(t=>{let{securityLevel:e}=de(),r=$e("body");if(e==="sandbox"){let a=$e(`#i${t}`).node()?.contentDocument??document;r=$e(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var AFe,Ece,Cce=R(()=>{"use strict";ut();pf();Yn();AFe=o((t,e,r)=>{V.debug(`rendering info diagram +`+t);let n=Ps(e);Sr(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),Ece={draw:AFe}});var Sce={};hr(Sce,{diagram:()=>_Fe});var _Fe,Ace=R(()=>{"use strict";wce();kce();Cce();_Fe={parser:bce,db:Tce,renderer:Ece}});var Dce,YI,lE,WI,RFe,NFe,MFe,IFe,OFe,PFe,BFe,cE,qI=R(()=>{"use strict";ut();bi();sl();Dce=mr.pie,YI={sections:new Map,showData:!1,config:Dce},lE=YI.sections,WI=YI.showData,RFe=structuredClone(Dce),NFe=o(()=>structuredClone(RFe),"getConfig"),MFe=o(()=>{lE=new Map,WI=YI.showData,vr()},"clear"),IFe=o(({label:t,value:e})=>{lE.has(t)||(lE.set(t,e),V.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),OFe=o(()=>lE,"getSections"),PFe=o(t=>{WI=t},"setShowData"),BFe=o(()=>WI,"getShowData"),cE={getConfig:NFe,clear:MFe,setDiagramTitle:nn,getDiagramTitle:Xr,setAccTitle:kr,getAccTitle:Ar,setAccDescription:_r,getAccDescription:Lr,addSection:IFe,getSections:OFe,setShowData:PFe,getShowData:BFe}});var FFe,Rce,Nce=R(()=>{"use strict";Lg();ut();sx();qI();FFe=o((t,e)=>{cf(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),Rce={parse:o(async t=>{let e=await Fl("pie",t);V.debug(e),FFe(e,cE)},"parse")}});var zFe,Mce,Ice=R(()=>{"use strict";zFe=o(t=>` + .pieCircle{ + stroke: ${t.pieStrokeColor}; + stroke-width : ${t.pieStrokeWidth}; + opacity : ${t.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${t.pieOuterStrokeColor}; + stroke-width: ${t.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${t.pieTitleTextSize}; + fill: ${t.pieTitleTextColor}; + font-family: ${t.fontFamily}; + } + .slice { + font-family: ${t.fontFamily}; + fill: ${t.pieSectionTextColor}; + font-size:${t.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${t.pieLegendTextColor}; + font-family: ${t.fontFamily}; + font-size: ${t.pieLegendTextSize}; + } +`,"getStyles"),Mce=zFe});var GFe,$Fe,Oce,Pce=R(()=>{"use strict";Zt();_t();ut();pf();Yn();xr();GFe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return O3().value(n=>n.value)(e)},"createPieArcs"),$Fe=o((t,e,r,n)=>{V.debug(`rendering pie chart +`+t);let i=n.db,a=de(),s=Ts(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=Ps(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=mc(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=bl().innerRadius(0).outerRadius(x),w=bl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let S=i.getSections(),T=GFe(S),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],_=pu(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>_(k.data.label)).attr("class","pieCircle");let A=0;S.forEach(k=>{A+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/A*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let L=m.selectAll(".legend").data(_.domain()).enter().append("g").attr("class","legend").attr("transform",(k,I)=>{let C=u+h,O=C*_.domain().length/2,D=12*u,P=I*C-O;return"translate("+D+","+P+")"});L.append("rect").attr("width",u).attr("height",u).style("fill",_).style("stroke",_),L.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:I,value:C}=k.data;return i.getShowData()?`${I} [${C}]`:I});let M=Math.max(...L.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),N=d+l+u+h+M;p.attr("viewBox",`0 0 ${N} ${f}`),Sr(p,f,N,s.useMaxWidth)},"draw"),Oce={draw:$Fe}});var Bce={};hr(Bce,{diagram:()=>VFe});var VFe,Fce=R(()=>{"use strict";Nce();qI();Ice();Pce();VFe={parser:Rce,db:cE,renderer:Oce,styles:Mce}});var XI,$ce,Vce=R(()=>{"use strict";XI=function(){var t=o(function(we,Te,Ce,Ae){for(Ce=Ce||{},Ae=we.length;Ae--;Ce[we[Ae]]=Te);return Ce},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],S=[1,20],T=[1,21],E=[1,22],_=[1,24],A=[1,25],L=[1,26],M=[1,27],N=[1,28],k=[1,29],I=[1,32],C=[1,33],O=[1,34],D=[1,39],P=[1,40],F=[1,42],B=[1,44],$=[1,62],z=[1,61],Y=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Q=[1,65],X=[1,66],ie=[1,67],j=[1,68],J=[1,69],Z=[1,70],H=[1,71],q=[1,72],K=[1,73],se=[1,74],ce=[1,75],ue=[1,76],te=[4,5,6,7,8,9,10,11,12,13,14,15,18],De=[1,90],oe=[1,91],ke=[1,92],Ie=[1,99],Se=[1,93],Ue=[1,96],Pe=[1,94],_e=[1,95],me=[1,97],W=[1,98],fe=[1,102],ge=[10,55,56,57],re=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],he={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(Te,Ce,Ae,Ge,Me,ye,He){var ze=ye.length-1;switch(Me){case 23:this.$=ye[ze];break;case 24:this.$=ye[ze-1]+""+ye[ze];break;case 26:this.$=ye[ze-1]+ye[ze];break;case 27:this.$=[ye[ze].trim()];break;case 28:ye[ze-2].push(ye[ze].trim()),this.$=ye[ze-2];break;case 29:this.$=ye[ze-4],Ge.addClass(ye[ze-2],ye[ze]);break;case 37:this.$=[];break;case 42:this.$=ye[ze].trim(),Ge.setDiagramTitle(this.$);break;case 43:this.$=ye[ze].trim(),Ge.setAccTitle(this.$);break;case 44:case 45:this.$=ye[ze].trim(),Ge.setAccDescription(this.$);break;case 46:Ge.addSection(ye[ze].substr(8)),this.$=ye[ze].substr(8);break;case 47:Ge.addPoint(ye[ze-3],"",ye[ze-1],ye[ze],[]);break;case 48:Ge.addPoint(ye[ze-4],ye[ze-3],ye[ze-1],ye[ze],[]);break;case 49:Ge.addPoint(ye[ze-4],"",ye[ze-2],ye[ze-1],ye[ze]);break;case 50:Ge.addPoint(ye[ze-5],ye[ze-4],ye[ze-2],ye[ze-1],ye[ze]);break;case 51:Ge.setXAxisLeftText(ye[ze-2]),Ge.setXAxisRightText(ye[ze]);break;case 52:ye[ze-1].text+=" \u27F6 ",Ge.setXAxisLeftText(ye[ze-1]);break;case 53:Ge.setXAxisLeftText(ye[ze]);break;case 54:Ge.setYAxisBottomText(ye[ze-2]),Ge.setYAxisTopText(ye[ze]);break;case 55:ye[ze-1].text+=" \u27F6 ",Ge.setYAxisBottomText(ye[ze-1]);break;case 56:Ge.setYAxisBottomText(ye[ze]);break;case 57:Ge.setQuadrant1Text(ye[ze]);break;case 58:Ge.setQuadrant2Text(ye[ze]);break;case 59:Ge.setQuadrant3Text(ye[ze]);break;case 60:Ge.setQuadrant4Text(ye[ze]);break;case 64:this.$={text:ye[ze],type:"text"};break;case 65:this.$={text:ye[ze-1].text+""+ye[ze],type:ye[ze-1].type};break;case 66:this.$={text:ye[ze],type:"text"};break;case 67:this.$={text:ye[ze],type:"markdown"};break;case 68:this.$=ye[ze];break;case 69:this.$=ye[ze-1]+""+ye[ze];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:S,41:T,42:E,48:_,50:A,51:L,52:M,53:N,54:k,60:I,61:C,63:O,64:D,65:P,66:F,67:B}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:S,41:T,42:E,48:_,50:A,51:L,52:M,53:N,54:k,60:I,61:C,63:O,64:D,65:P,66:F,67:B}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:I,61:C,63:O,64:D,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:I,61:C,63:O,64:D,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:I,61:C,63:O,64:D,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:I,61:C,63:O,64:D,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:I,61:C,63:O,64:D,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:I,61:C,63:O,64:D,65:P,66:F,67:B},{4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,44:[1,57],47:[1,58],58:60,59:59,63:O,64:D,65:P,66:F,67:B},t(Y,[2,64]),t(Y,[2,66]),t(Y,[2,67]),t(Y,[2,70]),t(Y,[2,71]),t(Y,[2,72]),t(Y,[2,73]),t(Y,[2,74]),t(Y,[2,75]),t(Y,[2,76]),t(Y,[2,77]),t(Y,[2,78]),t(Y,[2,79]),t(Y,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Q,5:X,6:ie,7:j,8:J,9:Z,10:H,11:q,12:K,13:se,14:ce,15:ue,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,49:[1,77],63:O,64:D,65:P,66:F,67:B}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,49:[1,78],63:O,64:D,65:P,66:F,67:B}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:D,65:P,66:F,67:B}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:D,65:P,66:F,67:B}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:D,65:P,66:F,67:B}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:D,65:P,66:F,67:B}),{45:[1,79]},{44:[1,80]},t(Y,[2,65]),t(Y,[2,81]),t(Y,[2,82]),t(Y,[2,83]),{3:82,4:Q,5:X,6:ie,7:j,8:J,9:Z,10:H,11:q,12:K,13:se,14:ce,15:ue,18:[1,81]},t(te,[2,23]),t(te,[2,1]),t(te,[2,2]),t(te,[2,3]),t(te,[2,4]),t(te,[2,5]),t(te,[2,6]),t(te,[2,7]),t(te,[2,8]),t(te,[2,9]),t(te,[2,10]),t(te,[2,11]),t(te,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:I,61:C,63:O,64:D,65:P,66:F,67:B}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:I,61:C,63:O,64:D,65:P,66:F,67:B}),{46:[1,85]},{45:[1,86]},{4:De,5:oe,6:ke,8:Ie,11:Se,13:Ue,16:89,17:Pe,18:_e,19:me,20:W,22:88,23:87},t(te,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:D,65:P,66:F,67:B}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:D,65:P,66:F,67:B}),t(u,[2,47],{22:88,16:89,23:100,4:De,5:oe,6:ke,8:Ie,11:Se,13:Ue,17:Pe,18:_e,19:me,20:W}),{46:[1,101]},t(u,[2,29],{10:fe}),t(ge,[2,27],{16:103,4:De,5:oe,6:ke,8:Ie,11:Se,13:Ue,17:Pe,18:_e,19:me,20:W}),t(re,[2,25]),t(re,[2,13]),t(re,[2,14]),t(re,[2,15]),t(re,[2,16]),t(re,[2,17]),t(re,[2,18]),t(re,[2,19]),t(re,[2,20]),t(re,[2,21]),t(re,[2,22]),t(u,[2,49],{10:fe}),t(u,[2,48],{22:88,16:89,23:104,4:De,5:oe,6:ke,8:Ie,11:Se,13:Ue,17:Pe,18:_e,19:me,20:W}),{4:De,5:oe,6:ke,8:Ie,11:Se,13:Ue,16:89,17:Pe,18:_e,19:me,20:W,22:105},t(re,[2,26]),t(u,[2,50],{10:fe}),t(ge,[2,28],{16:103,4:De,5:oe,6:ke,8:Ie,11:Se,13:Ue,17:Pe,18:_e,19:me,20:W})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(Te,Ce){if(Ce.recoverable)this.trace(Te);else{var Ae=new Error(Te);throw Ae.hash=Ce,Ae}},"parseError"),parse:o(function(Te){var Ce=this,Ae=[0],Ge=[],Me=[null],ye=[],He=this.table,ze="",Ze=0,gt=0,yt=0,tt=2,Ye=1,Je=ye.slice.call(arguments,1),Ve=Object.create(this.lexer),je={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(je.yy[kt]=this.yy[kt]);Ve.setInput(Te,je.yy),je.yy.lexer=Ve,je.yy.parser=this,typeof Ve.yylloc>"u"&&(Ve.yylloc={});var at=Ve.yylloc;ye.push(at);var xt=Ve.options&&Ve.options.ranges;typeof je.yy.parseError=="function"?this.parseError=je.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function it(on){Ae.length=Ae.length-2*on,Me.length=Me.length-on,ye.length=ye.length-on}o(it,"popStack");function dt(){var on;return on=Ge.pop()||Ve.lex()||Ye,typeof on!="number"&&(on instanceof Array&&(Ge=on,on=Ge.pop()),on=Ce.symbols_[on]||on),on}o(dt,"lex");for(var lt,It,mt,St,gr,xn,jt={},rn,Er,Kn,hn;;){if(mt=Ae[Ae.length-1],this.defaultActions[mt]?St=this.defaultActions[mt]:((lt===null||typeof lt>"u")&&(lt=dt()),St=He[mt]&&He[mt][lt]),typeof St>"u"||!St.length||!St[0]){var Qn="";hn=[];for(rn in He[mt])this.terminals_[rn]&&rn>tt&&hn.push("'"+this.terminals_[rn]+"'");Ve.showPosition?Qn="Parse error on line "+(Ze+1)+`: +`+Ve.showPosition()+` +Expecting `+hn.join(", ")+", got '"+(this.terminals_[lt]||lt)+"'":Qn="Parse error on line "+(Ze+1)+": Unexpected "+(lt==Ye?"end of input":"'"+(this.terminals_[lt]||lt)+"'"),this.parseError(Qn,{text:Ve.match,token:this.terminals_[lt]||lt,line:Ve.yylineno,loc:at,expected:hn})}if(St[0]instanceof Array&&St.length>1)throw new Error("Parse Error: multiple actions possible at state: "+mt+", token: "+lt);switch(St[0]){case 1:Ae.push(lt),Me.push(Ve.yytext),ye.push(Ve.yylloc),Ae.push(St[1]),lt=null,It?(lt=It,It=null):(gt=Ve.yyleng,ze=Ve.yytext,Ze=Ve.yylineno,at=Ve.yylloc,yt>0&&yt--);break;case 2:if(Er=this.productions_[St[1]][1],jt.$=Me[Me.length-Er],jt._$={first_line:ye[ye.length-(Er||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(Er||1)].first_column,last_column:ye[ye.length-1].last_column},xt&&(jt._$.range=[ye[ye.length-(Er||1)].range[0],ye[ye.length-1].range[1]]),xn=this.performAction.apply(jt,[ze,gt,Ze,je.yy,St[1],Me,ye].concat(Je)),typeof xn<"u")return xn;Er&&(Ae=Ae.slice(0,-1*Er*2),Me=Me.slice(0,-1*Er),ye=ye.slice(0,-1*Er)),Ae.push(this.productions_[St[1]][0]),Me.push(jt.$),ye.push(jt._$),Kn=He[Ae[Ae.length-2]][Ae[Ae.length-1]],Ae.push(Kn);break;case 3:return!0}}return!0},"parse")},ne=function(){var we={EOF:1,parseError:o(function(Ce,Ae){if(this.yy.parser)this.yy.parser.parseError(Ce,Ae);else throw new Error(Ce)},"parseError"),setInput:o(function(Te,Ce){return this.yy=Ce||this.yy||{},this._input=Te,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Te=this._input[0];this.yytext+=Te,this.yyleng++,this.offset++,this.match+=Te,this.matched+=Te;var Ce=Te.match(/(?:\r\n?|\n).*/g);return Ce?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Te},"input"),unput:o(function(Te){var Ce=Te.length,Ae=Te.split(/(?:\r\n?|\n)/g);this._input=Te+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ce),this.offset-=Ce;var Ge=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ae.length-1&&(this.yylineno-=Ae.length-1);var Me=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ae?(Ae.length===Ge.length?this.yylloc.first_column:0)+Ge[Ge.length-Ae.length].length-Ae[0].length:this.yylloc.first_column-Ce},this.options.ranges&&(this.yylloc.range=[Me[0],Me[0]+this.yyleng-Ce]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Te){this.unput(this.match.slice(Te))},"less"),pastInput:o(function(){var Te=this.matched.substr(0,this.matched.length-this.match.length);return(Te.length>20?"...":"")+Te.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Te=this.match;return Te.length<20&&(Te+=this._input.substr(0,20-Te.length)),(Te.substr(0,20)+(Te.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Te=this.pastInput(),Ce=new Array(Te.length+1).join("-");return Te+this.upcomingInput()+` +`+Ce+"^"},"showPosition"),test_match:o(function(Te,Ce){var Ae,Ge,Me;if(this.options.backtrack_lexer&&(Me={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Me.yylloc.range=this.yylloc.range.slice(0))),Ge=Te[0].match(/(?:\r\n?|\n).*/g),Ge&&(this.yylineno+=Ge.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ge?Ge[Ge.length-1].length-Ge[Ge.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Te[0].length},this.yytext+=Te[0],this.match+=Te[0],this.matches=Te,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Te[0].length),this.matched+=Te[0],Ae=this.performAction.call(this,this.yy,this,Ce,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ae)return Ae;if(this._backtrack){for(var ye in Me)this[ye]=Me[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Te,Ce,Ae,Ge;this._more||(this.yytext="",this.match="");for(var Me=this._currentRules(),ye=0;yeCe[0].length)){if(Ce=Ae,Ge=ye,this.options.backtrack_lexer){if(Te=this.test_match(Ae,Me[ye]),Te!==!1)return Te;if(this._backtrack){Ce=!1;continue}else return!1}else if(!this.options.flex)break}return Ce?(Te=this.test_match(Ce,Me[Ge]),Te!==!1?Te:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ce=this.next();return Ce||this.lex()},"lex"),begin:o(function(Ce){this.conditionStack.push(Ce)},"begin"),popState:o(function(){var Ce=this.conditionStack.length-1;return Ce>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ce){return Ce=this.conditionStack.length-1-Math.abs(Ce||0),Ce>=0?this.conditionStack[Ce]:"INITIAL"},"topState"),pushState:o(function(Ce){this.begin(Ce)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Ce,Ae,Ge,Me){var ye=Me;switch(Ge){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return we}();he.lexer=ne;function ae(){this.yy={}}return o(ae,"Parser"),ae.prototype=he,he.Parser=ae,new ae}();XI.parser=XI;$ce=XI});var os,uE,Uce=R(()=>{"use strict";Zt();sl();ut();jb();os=hp(),uE=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:mr.quadrantChart?.chartWidth||500,chartWidth:mr.quadrantChart?.chartHeight||500,titlePadding:mr.quadrantChart?.titlePadding||10,titleFontSize:mr.quadrantChart?.titleFontSize||20,quadrantPadding:mr.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:mr.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:mr.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:mr.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:mr.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:mr.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:mr.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:mr.quadrantChart?.pointTextPadding||5,pointLabelFontSize:mr.quadrantChart?.pointLabelFontSize||12,pointRadius:mr.quadrantChart?.pointRadius||5,xAxisPosition:mr.quadrantChart?.xAxisPosition||"top",yAxisPosition:mr.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:mr.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:mr.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:os.quadrant1Fill,quadrant2Fill:os.quadrant2Fill,quadrant3Fill:os.quadrant3Fill,quadrant4Fill:os.quadrant4Fill,quadrant1TextFill:os.quadrant1TextFill,quadrant2TextFill:os.quadrant2TextFill,quadrant3TextFill:os.quadrant3TextFill,quadrant4TextFill:os.quadrant4TextFill,quadrantPointFill:os.quadrantPointFill,quadrantPointTextFill:os.quadrantPointTextFill,quadrantXAxisTextFill:os.quadrantXAxisTextFill,quadrantYAxisTextFill:os.quadrantYAxisTextFill,quadrantTitleFill:os.quadrantTitleFill,quadrantInternalBorderStrokeFill:os.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:os.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,V.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){V.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){V.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=gl().domain([0,1]).range([i,s+i]),u=gl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function jI(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function Hce(t){return!/^\d+$/.test(t)}function Yce(t){return!/^\d+px$/.test(t)}var S0,Wce=R(()=>{"use strict";S0=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(jI,"validateHexCode");o(Hce,"validateNumber");o(Yce,"validateSizeInPixels")});function Wu(t){return qr(t.trim(),YFe)}function WFe(t){wa.setData({quadrant1Text:Wu(t.text)})}function qFe(t){wa.setData({quadrant2Text:Wu(t.text)})}function XFe(t){wa.setData({quadrant3Text:Wu(t.text)})}function jFe(t){wa.setData({quadrant4Text:Wu(t.text)})}function KFe(t){wa.setData({xAxisLeftText:Wu(t.text)})}function QFe(t){wa.setData({xAxisRightText:Wu(t.text)})}function ZFe(t){wa.setData({yAxisTopText:Wu(t.text)})}function JFe(t){wa.setData({yAxisBottomText:Wu(t.text)})}function KI(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(Hce(i))throw new S0(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(jI(i))throw new S0(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(jI(i))throw new S0(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(Yce(i))throw new S0(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function eze(t,e,r,n,i){let a=KI(i);wa.addPoints([{x:r,y:n,text:Wu(t.text),className:e,...a}])}function tze(t,e){wa.addClass(t,KI(e))}function rze(t){wa.setConfig({chartWidth:t})}function nze(t){wa.setConfig({chartHeight:t})}function ize(){let t=de(),{themeVariables:e,quadrantChart:r}=t;return r&&wa.setConfig(r),wa.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),wa.setData({titleText:Xr()}),wa.build()}var YFe,wa,aze,qce,Xce=R(()=>{"use strict";_t();rr();bi();Uce();Wce();YFe=de();o(Wu,"textSanitizer");wa=new uE;o(WFe,"setQuadrant1Text");o(qFe,"setQuadrant2Text");o(XFe,"setQuadrant3Text");o(jFe,"setQuadrant4Text");o(KFe,"setXAxisLeftText");o(QFe,"setXAxisRightText");o(ZFe,"setYAxisTopText");o(JFe,"setYAxisBottomText");o(KI,"parseStyles");o(eze,"addPoint");o(tze,"addClass");o(rze,"setWidth");o(nze,"setHeight");o(ize,"getQuadrantData");aze=o(function(){wa.clear(),vr()},"clear"),qce={setWidth:rze,setHeight:nze,setQuadrant1Text:WFe,setQuadrant2Text:qFe,setQuadrant3Text:XFe,setQuadrant4Text:jFe,setXAxisLeftText:KFe,setXAxisRightText:QFe,setYAxisTopText:ZFe,setYAxisBottomText:JFe,parseStyles:KI,addPoint:eze,addClass:tze,getQuadrantData:ize,clear:aze,setAccTitle:kr,getAccTitle:Ar,setDiagramTitle:nn,getDiagramTitle:Xr,getAccDescription:Lr,setAccDescription:_r}});var sze,jce,Kce=R(()=>{"use strict";Zt();_t();ut();Yn();sze=o((t,e,r,n)=>{function i(A){return A==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(A){return A==="left"?"start":"middle"}o(a,"getTextAnchor");function s(A){return`translate(${A.x}, ${A.y}) rotate(${A.rotation||0})`}o(s,"getTransformation");let l=de();V.debug(`Rendering quadrant chart +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=$e("#i"+e));let d=(u==="sandbox"?$e(h.nodes()[0].contentDocument.body):$e("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;Sr(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),S=p.append("g").attr("class","title");y.title&&S.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",A=>A.x1).attr("y1",A=>A.y1).attr("x2",A=>A.x2).attr("y2",A=>A.y2).style("stroke",A=>A.strokeFill).style("stroke-width",A=>A.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",A=>A.x).attr("y",A=>A.y).attr("width",A=>A.width).attr("height",A=>A.height).attr("fill",A=>A.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",A=>A.text.fill).attr("font-size",A=>A.text.fontSize).attr("dominant-baseline",A=>i(A.text.horizontalPos)).attr("text-anchor",A=>a(A.text.verticalPos)).attr("transform",A=>s(A.text)).text(A=>A.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(A=>A.text).attr("fill",A=>A.fill).attr("font-size",A=>A.fontSize).attr("dominant-baseline",A=>i(A.horizontalPos)).attr("text-anchor",A=>a(A.verticalPos)).attr("transform",A=>s(A));let _=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");_.append("circle").attr("cx",A=>A.x).attr("cy",A=>A.y).attr("r",A=>A.radius).attr("fill",A=>A.fill).attr("stroke",A=>A.strokeColor).attr("stroke-width",A=>A.strokeWidth),_.append("text").attr("x",0).attr("y",0).text(A=>A.text.text).attr("fill",A=>A.text.fill).attr("font-size",A=>A.text.fontSize).attr("dominant-baseline",A=>i(A.text.horizontalPos)).attr("text-anchor",A=>a(A.text.verticalPos)).attr("transform",A=>s(A.text))},"draw"),jce={draw:sze}});var Qce={};hr(Qce,{diagram:()=>oze});var oze,Zce=R(()=>{"use strict";Vce();Xce();Kce();oze={parser:$ce,db:qce,renderer:jce,styles:o(()=>"","styles")}});var QI,tue,rue=R(()=>{"use strict";QI=function(){var t=o(function(O,D,P,F){for(P=P||{},F=O.length;F--;P[O[F]]=D);return P},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],S=[1,43],T=[1,42],E=[1,47],_=[1,50],A=[1,10,12,14,16,18,19,21,23,34,35,36],L=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],M=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],N=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(D,P,F,B,$,z,Y){var Q=z.length-1;switch($){case 5:B.setOrientation(z[Q]);break;case 9:B.setDiagramTitle(z[Q].text.trim());break;case 12:B.setLineData({text:"",type:"text"},z[Q]);break;case 13:B.setLineData(z[Q-1],z[Q]);break;case 14:B.setBarData({text:"",type:"text"},z[Q]);break;case 15:B.setBarData(z[Q-1],z[Q]);break;case 16:this.$=z[Q].trim(),B.setAccTitle(this.$);break;case 17:case 18:this.$=z[Q].trim(),B.setAccDescription(this.$);break;case 19:this.$=z[Q-1];break;case 20:this.$=[Number(z[Q-2]),...z[Q]];break;case 21:this.$=[Number(z[Q])];break;case 22:B.setXAxisTitle(z[Q]);break;case 23:B.setXAxisTitle(z[Q-1]);break;case 24:B.setXAxisTitle({type:"text",text:""});break;case 25:B.setXAxisBand(z[Q]);break;case 26:B.setXAxisRangeData(Number(z[Q-2]),Number(z[Q]));break;case 27:this.$=z[Q-1];break;case 28:this.$=[z[Q-2],...z[Q]];break;case 29:this.$=[z[Q]];break;case 30:B.setYAxisTitle(z[Q]);break;case 31:B.setYAxisTitle(z[Q-1]);break;case 32:B.setYAxisTitle({type:"text",text:""});break;case 33:B.setYAxisRangeData(Number(z[Q-2]),Number(z[Q]));break;case 37:this.$={text:z[Q],type:"text"};break;case 38:this.$={text:z[Q],type:"text"};break;case 39:this.$={text:z[Q],type:"markdown"};break;case 40:this.$=z[Q];break;case 41:this.$=z[Q-1]+""+z[Q];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:S,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:_,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:_,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(A,[2,18]),{1:[2,2]},t(A,[2,8]),t(A,[2,9]),t(L,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(L,[2,38]),t(L,[2,39]),t(M,[2,40]),t(M,[2,42]),t(M,[2,43]),t(M,[2,44]),t(M,[2,45]),t(M,[2,46]),t(M,[2,47]),t(M,[2,48]),t(M,[2,49]),t(M,[2,50]),t(M,[2,51]),t(A,[2,10]),t(A,[2,22],{30:41,29:56,24:S,27:T}),t(A,[2,24]),t(A,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(A,[2,11]),t(A,[2,30],{33:60,27:E}),t(A,[2,32]),{31:[1,61]},t(A,[2,12]),{17:62,24:_},{25:63,27:N},t(A,[2,14]),{17:65,24:_},t(A,[2,16]),t(A,[2,17]),t(M,[2,41]),t(A,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(A,[2,31]),{27:[1,69]},t(A,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(A,[2,15]),t(A,[2,26]),t(A,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(A,[2,33]),t(A,[2,19]),{25:73,27:N},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(D,P){if(P.recoverable)this.trace(D);else{var F=new Error(D);throw F.hash=P,F}},"parseError"),parse:o(function(D){var P=this,F=[0],B=[],$=[null],z=[],Y=this.table,Q="",X=0,ie=0,j=0,J=2,Z=1,H=z.slice.call(arguments,1),q=Object.create(this.lexer),K={yy:{}};for(var se in this.yy)Object.prototype.hasOwnProperty.call(this.yy,se)&&(K.yy[se]=this.yy[se]);q.setInput(D,K.yy),K.yy.lexer=q,K.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var ce=q.yylloc;z.push(ce);var ue=q.options&&q.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function te(he){F.length=F.length-2*he,$.length=$.length-he,z.length=z.length-he}o(te,"popStack");function De(){var he;return he=B.pop()||q.lex()||Z,typeof he!="number"&&(he instanceof Array&&(B=he,he=B.pop()),he=P.symbols_[he]||he),he}o(De,"lex");for(var oe,ke,Ie,Se,Ue,Pe,_e={},me,W,fe,ge;;){if(Ie=F[F.length-1],this.defaultActions[Ie]?Se=this.defaultActions[Ie]:((oe===null||typeof oe>"u")&&(oe=De()),Se=Y[Ie]&&Y[Ie][oe]),typeof Se>"u"||!Se.length||!Se[0]){var re="";ge=[];for(me in Y[Ie])this.terminals_[me]&&me>J&&ge.push("'"+this.terminals_[me]+"'");q.showPosition?re="Parse error on line "+(X+1)+`: +`+q.showPosition()+` +Expecting `+ge.join(", ")+", got '"+(this.terminals_[oe]||oe)+"'":re="Parse error on line "+(X+1)+": Unexpected "+(oe==Z?"end of input":"'"+(this.terminals_[oe]||oe)+"'"),this.parseError(re,{text:q.match,token:this.terminals_[oe]||oe,line:q.yylineno,loc:ce,expected:ge})}if(Se[0]instanceof Array&&Se.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ie+", token: "+oe);switch(Se[0]){case 1:F.push(oe),$.push(q.yytext),z.push(q.yylloc),F.push(Se[1]),oe=null,ke?(oe=ke,ke=null):(ie=q.yyleng,Q=q.yytext,X=q.yylineno,ce=q.yylloc,j>0&&j--);break;case 2:if(W=this.productions_[Se[1]][1],_e.$=$[$.length-W],_e._$={first_line:z[z.length-(W||1)].first_line,last_line:z[z.length-1].last_line,first_column:z[z.length-(W||1)].first_column,last_column:z[z.length-1].last_column},ue&&(_e._$.range=[z[z.length-(W||1)].range[0],z[z.length-1].range[1]]),Pe=this.performAction.apply(_e,[Q,ie,X,K.yy,Se[1],$,z].concat(H)),typeof Pe<"u")return Pe;W&&(F=F.slice(0,-1*W*2),$=$.slice(0,-1*W),z=z.slice(0,-1*W)),F.push(this.productions_[Se[1]][0]),$.push(_e.$),z.push(_e._$),fe=Y[F[F.length-2]][F[F.length-1]],F.push(fe);break;case 3:return!0}}return!0},"parse")},I=function(){var O={EOF:1,parseError:o(function(P,F){if(this.yy.parser)this.yy.parser.parseError(P,F);else throw new Error(P)},"parseError"),setInput:o(function(D,P){return this.yy=P||this.yy||{},this._input=D,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var D=this._input[0];this.yytext+=D,this.yyleng++,this.offset++,this.match+=D,this.matched+=D;var P=D.match(/(?:\r\n?|\n).*/g);return P?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),D},"input"),unput:o(function(D){var P=D.length,F=D.split(/(?:\r\n?|\n)/g);this._input=D+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-P),this.offset-=P;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var $=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===B.length?this.yylloc.first_column:0)+B[B.length-F.length].length-F[0].length:this.yylloc.first_column-P},this.options.ranges&&(this.yylloc.range=[$[0],$[0]+this.yyleng-P]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(D){this.unput(this.match.slice(D))},"less"),pastInput:o(function(){var D=this.matched.substr(0,this.matched.length-this.match.length);return(D.length>20?"...":"")+D.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var D=this.match;return D.length<20&&(D+=this._input.substr(0,20-D.length)),(D.substr(0,20)+(D.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var D=this.pastInput(),P=new Array(D.length+1).join("-");return D+this.upcomingInput()+` +`+P+"^"},"showPosition"),test_match:o(function(D,P){var F,B,$;if(this.options.backtrack_lexer&&($={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&($.yylloc.range=this.yylloc.range.slice(0))),B=D[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+D[0].length},this.yytext+=D[0],this.match+=D[0],this.matches=D,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(D[0].length),this.matched+=D[0],F=this.performAction.call(this,this.yy,this,P,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var z in $)this[z]=$[z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var D,P,F,B;this._more||(this.yytext="",this.match="");for(var $=this._currentRules(),z=0;z<$.length;z++)if(F=this._input.match(this.rules[$[z]]),F&&(!P||F[0].length>P[0].length)){if(P=F,B=z,this.options.backtrack_lexer){if(D=this.test_match(F,$[z]),D!==!1)return D;if(this._backtrack){P=!1;continue}else return!1}else if(!this.options.flex)break}return P?(D=this.test_match(P,$[B]),D!==!1?D:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var P=this.next();return P||this.lex()},"lex"),begin:o(function(P){this.conditionStack.push(P)},"begin"),popState:o(function(){var P=this.conditionStack.length-1;return P>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(P){return P=this.conditionStack.length-1-Math.abs(P||0),P>=0?this.conditionStack[P]:"INITIAL"},"topState"),pushState:o(function(P){this.begin(P)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(P,F,B,$){var z=$;switch(B){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=I;function C(){this.yy={}}return o(C,"Parser"),C.prototype=k,k.Parser=C,new C}();QI.parser=QI;tue=QI});function ZI(t){return t.type==="bar"}function hE(t){return t.type==="band"}function Ng(t){return t.type==="linear"}var fE=R(()=>{"use strict";o(ZI,"isBarPlot");o(hE,"isBandAxisData");o(Ng,"isLinearAxisData")});var Mg,JI=R(()=>{"use strict";Al();Mg=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=bj(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var Ig,eO=R(()=>{"use strict";Ig=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var dE,nue=R(()=>{"use strict";Zt();ut();eO();dE=class extends Ig{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=Op().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=Op().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),V.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var pE,iue=R(()=>{"use strict";Zt();eO();pE=class extends Ig{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=gl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=gl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function tO(t,e,r,n){let i=new Mg(n);return hE(t)?new dE(e,r,t.categories,t.title,i):new pE(e,r,[t.min,t.max],t.title,i)}var aue=R(()=>{"use strict";fE();JI();nue();iue();o(tO,"getAxis")});function sue(t,e,r,n){let i=new Mg(n);return new rO(i,t,e,r)}var rO,oue=R(()=>{"use strict";JI();rO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(sue,"getChartTitleComponent")});var mE,lue=R(()=>{"use strict";Zt();mE=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=ha().y(n=>n[0]).x(n=>n[1])(e):r=ha().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var gE,cue=R(()=>{"use strict";gE=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function uue(t,e,r){return new nO(t,e,r)}var nO,hue=R(()=>{"use strict";lue();cue();nO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new mE(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new gE(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(uue,"getPlotComponent")});var yE,fue=R(()=>{"use strict";aue();oue();hue();fE();yE=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:sue(e,r,n,i),plot:uue(e,r,n),xAxis:tO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:tO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>ZI(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>ZI(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var vE,due=R(()=>{"use strict";fue();vE=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new yE(e,r,n,i).getDrawableElement()}}});function mue(){let t=hp(),e=Or();return Ts(t.xyChart,e.themeVariables.xyChart)}function gue(){let t=Or();return Ts(mr.xyChart,t.xyChart)}function yue(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function sO(t){let e=Or();return qr(t.trim(),e)}function hze(t){pue=t}function fze(t){t==="horizontal"?px.chartOrientation="horizontal":px.chartOrientation="vertical"}function dze(t){sn.xAxis.title=sO(t.text)}function vue(t,e){sn.xAxis={type:"linear",title:sn.xAxis.title,min:t,max:e},xE=!0}function pze(t){sn.xAxis={type:"band",title:sn.xAxis.title,categories:t.map(e=>sO(e.text))},xE=!0}function mze(t){sn.yAxis.title=sO(t.text)}function gze(t,e){sn.yAxis={type:"linear",title:sn.yAxis.title,min:t,max:e},aO=!0}function yze(t){let e=Math.min(...t),r=Math.max(...t),n=Ng(sn.yAxis)?sn.yAxis.min:1/0,i=Ng(sn.yAxis)?sn.yAxis.max:-1/0;sn.yAxis={type:"linear",title:sn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function xue(t){let e=[];if(t.length===0)return e;if(!xE){let r=Ng(sn.xAxis)?sn.xAxis.min:1/0,n=Ng(sn.xAxis)?sn.xAxis.max:-1/0;vue(Math.min(r,1),Math.max(n,t.length))}if(aO||yze(t),hE(sn.xAxis)&&(e=sn.xAxis.categories.map((r,n)=>[r,t[n]])),Ng(sn.xAxis)){let r=sn.xAxis.min,n=sn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function bue(t){return iO[t===0?0:t%iO.length]}function vze(t,e){let r=xue(e);sn.plots.push({type:"line",strokeFill:bue(dx),strokeWidth:2,data:r}),dx++}function xze(t,e){let r=xue(e);sn.plots.push({type:"bar",fill:bue(dx),data:r}),dx++}function bze(){if(sn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return sn.title=Xr(),vE.build(px,sn,mx,pue)}function wze(){return mx}function Tze(){return px}var dx,pue,px,mx,sn,iO,xE,aO,kze,wue,Tue=R(()=>{"use strict";qs();sl();jb();xr();rr();bi();due();fE();dx=0,px=gue(),mx=mue(),sn=yue(),iO=mx.plotColorPalette.split(",").map(t=>t.trim()),xE=!1,aO=!1;o(mue,"getChartDefaultThemeConfig");o(gue,"getChartDefaultConfig");o(yue,"getChartDefaultData");o(sO,"textSanitizer");o(hze,"setTmpSVGG");o(fze,"setOrientation");o(dze,"setXAxisTitle");o(vue,"setXAxisRangeData");o(pze,"setXAxisBand");o(mze,"setYAxisTitle");o(gze,"setYAxisRangeData");o(yze,"setYAxisRangeFromPlotData");o(xue,"transformDataWithoutCategory");o(bue,"getPlotColorFromPalette");o(vze,"setLineData");o(xze,"setBarData");o(bze,"getDrawableElem");o(wze,"getChartThemeConfig");o(Tze,"getChartConfig");kze=o(function(){vr(),dx=0,px=gue(),sn=yue(),mx=mue(),iO=mx.plotColorPalette.split(",").map(t=>t.trim()),xE=!1,aO=!1},"clear"),wue={getDrawableElem:bze,clear:kze,setAccTitle:kr,getAccTitle:Ar,setDiagramTitle:nn,getDiagramTitle:Xr,getAccDescription:Lr,setAccDescription:_r,setOrientation:fze,setXAxisTitle:dze,setXAxisRangeData:vue,setXAxisBand:pze,setYAxisTitle:mze,setYAxisRangeData:gze,setLineData:vze,setBarData:xze,setTmpSVGG:hze,getChartThemeConfig:wze,getChartConfig:Tze}});var Eze,kue,Eue=R(()=>{"use strict";ut();pf();Yn();Eze=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),V.debug(`Rendering xychart chart +`+t);let f=Ps(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");Sr(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let S=d;w>0&&g[b]&&(S=g[b]),b+=v[w],x=g[b],x||(x=g[b]=S.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),kue={draw:Eze}});var Cue={};hr(Cue,{diagram:()=>Cze});var Cze,Sue=R(()=>{"use strict";rue();Tue();Eue();Cze={parser:tue,db:wue,renderer:kue}});var oO,Lue,Due=R(()=>{"use strict";oO=function(){var t=o(function(ie,j,J,Z){for(J=J||{},Z=ie.length;Z--;J[ie[Z]]=j);return J},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],s=[1,18],l=[2,7],u=[1,22],h=[1,23],f=[1,24],d=[1,25],p=[1,26],m=[1,27],g=[1,20],y=[1,28],v=[1,29],x=[62,63],b=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],w=[1,47],S=[1,48],T=[1,49],E=[1,50],_=[1,51],A=[1,52],L=[1,53],M=[53,54],N=[1,64],k=[1,60],I=[1,61],C=[1,62],O=[1,63],D=[1,65],P=[1,69],F=[1,70],B=[1,67],$=[1,68],z=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],Y={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:o(function(j,J,Z,H,q,K,se){var ce=K.length-1;switch(q){case 4:this.$=K[ce].trim(),H.setAccTitle(this.$);break;case 5:case 6:this.$=K[ce].trim(),H.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:H.addRequirement(K[ce-3],K[ce-4]);break;case 14:H.setNewReqId(K[ce-2]);break;case 15:H.setNewReqText(K[ce-2]);break;case 16:H.setNewReqRisk(K[ce-2]);break;case 17:H.setNewReqVerifyMethod(K[ce-2]);break;case 20:this.$=H.RequirementType.REQUIREMENT;break;case 21:this.$=H.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=H.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=H.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=H.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=H.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=H.RiskLevel.LOW_RISK;break;case 27:this.$=H.RiskLevel.MED_RISK;break;case 28:this.$=H.RiskLevel.HIGH_RISK;break;case 29:this.$=H.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=H.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=H.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=H.VerifyType.VERIFY_TEST;break;case 33:H.addElement(K[ce-3]);break;case 34:H.setNewElementType(K[ce-2]);break;case 35:H.setNewElementDocRef(K[ce-2]);break;case 38:H.addRelationship(K[ce-2],K[ce],K[ce-4]);break;case 39:H.addRelationship(K[ce-2],K[ce-4],K[ce]);break;case 40:this.$=H.Relationships.CONTAINS;break;case 41:this.$=H.Relationships.COPIES;break;case 42:this.$=H.Relationships.DERIVES;break;case 43:this.$=H.Relationships.SATISFIES;break;case 44:this.$=H.Relationships.VERIFIES;break;case 45:this.$=H.Relationships.REFINES;break;case 46:this.$=H.Relationships.TRACES;break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:s,7:31,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:32,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:33,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:34,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:35,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(x,[2,20]),t(x,[2,21]),t(x,[2,22]),t(x,[2,23]),t(x,[2,24]),t(x,[2,25]),t(b,[2,49]),t(b,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:w,56:S,57:T,58:E,59:_,60:A,61:L},{52:54,55:w,56:S,57:T,58:E,59:_,60:A,61:L},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(M,[2,40]),t(M,[2,41]),t(M,[2,42]),t(M,[2,43]),t(M,[2,44]),t(M,[2,45]),t(M,[2,46]),{54:[1,58]},{5:N,20:59,21:k,24:I,26:C,28:O,30:D},{5:P,30:F,46:66,47:B,49:$},{23:71,62:y,63:v},{23:72,62:y,63:v},t(z,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:N,20:77,21:k,24:I,26:C,28:O,30:D},t(z,[2,19]),t(z,[2,33]),{22:[1,78]},{22:[1,79]},{5:P,30:F,46:80,47:B,49:$},t(z,[2,37]),t(z,[2,38]),t(z,[2,39]),{23:81,62:y,63:v},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(z,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(z,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:N,20:106,21:k,24:I,26:C,28:O,30:D},{5:N,20:107,21:k,24:I,26:C,28:O,30:D},{5:N,20:108,21:k,24:I,26:C,28:O,30:D},{5:N,20:109,21:k,24:I,26:C,28:O,30:D},{5:P,30:F,46:110,47:B,49:$},{5:P,30:F,46:111,47:B,49:$},t(z,[2,14]),t(z,[2,15]),t(z,[2,16]),t(z,[2,17]),t(z,[2,34]),t(z,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:o(function(j,J){if(J.recoverable)this.trace(j);else{var Z=new Error(j);throw Z.hash=J,Z}},"parseError"),parse:o(function(j){var J=this,Z=[0],H=[],q=[null],K=[],se=this.table,ce="",ue=0,te=0,De=0,oe=2,ke=1,Ie=K.slice.call(arguments,1),Se=Object.create(this.lexer),Ue={yy:{}};for(var Pe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Pe)&&(Ue.yy[Pe]=this.yy[Pe]);Se.setInput(j,Ue.yy),Ue.yy.lexer=Se,Ue.yy.parser=this,typeof Se.yylloc>"u"&&(Se.yylloc={});var _e=Se.yylloc;K.push(_e);var me=Se.options&&Se.options.ranges;typeof Ue.yy.parseError=="function"?this.parseError=Ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function W(He){Z.length=Z.length-2*He,q.length=q.length-He,K.length=K.length-He}o(W,"popStack");function fe(){var He;return He=H.pop()||Se.lex()||ke,typeof He!="number"&&(He instanceof Array&&(H=He,He=H.pop()),He=J.symbols_[He]||He),He}o(fe,"lex");for(var ge,re,he,ne,ae,we,Te={},Ce,Ae,Ge,Me;;){if(he=Z[Z.length-1],this.defaultActions[he]?ne=this.defaultActions[he]:((ge===null||typeof ge>"u")&&(ge=fe()),ne=se[he]&&se[he][ge]),typeof ne>"u"||!ne.length||!ne[0]){var ye="";Me=[];for(Ce in se[he])this.terminals_[Ce]&&Ce>oe&&Me.push("'"+this.terminals_[Ce]+"'");Se.showPosition?ye="Parse error on line "+(ue+1)+`: +`+Se.showPosition()+` +Expecting `+Me.join(", ")+", got '"+(this.terminals_[ge]||ge)+"'":ye="Parse error on line "+(ue+1)+": Unexpected "+(ge==ke?"end of input":"'"+(this.terminals_[ge]||ge)+"'"),this.parseError(ye,{text:Se.match,token:this.terminals_[ge]||ge,line:Se.yylineno,loc:_e,expected:Me})}if(ne[0]instanceof Array&&ne.length>1)throw new Error("Parse Error: multiple actions possible at state: "+he+", token: "+ge);switch(ne[0]){case 1:Z.push(ge),q.push(Se.yytext),K.push(Se.yylloc),Z.push(ne[1]),ge=null,re?(ge=re,re=null):(te=Se.yyleng,ce=Se.yytext,ue=Se.yylineno,_e=Se.yylloc,De>0&&De--);break;case 2:if(Ae=this.productions_[ne[1]][1],Te.$=q[q.length-Ae],Te._$={first_line:K[K.length-(Ae||1)].first_line,last_line:K[K.length-1].last_line,first_column:K[K.length-(Ae||1)].first_column,last_column:K[K.length-1].last_column},me&&(Te._$.range=[K[K.length-(Ae||1)].range[0],K[K.length-1].range[1]]),we=this.performAction.apply(Te,[ce,te,ue,Ue.yy,ne[1],q,K].concat(Ie)),typeof we<"u")return we;Ae&&(Z=Z.slice(0,-1*Ae*2),q=q.slice(0,-1*Ae),K=K.slice(0,-1*Ae)),Z.push(this.productions_[ne[1]][0]),q.push(Te.$),K.push(Te._$),Ge=se[Z[Z.length-2]][Z[Z.length-1]],Z.push(Ge);break;case 3:return!0}}return!0},"parse")},Q=function(){var ie={EOF:1,parseError:o(function(J,Z){if(this.yy.parser)this.yy.parser.parseError(J,Z);else throw new Error(J)},"parseError"),setInput:o(function(j,J){return this.yy=J||this.yy||{},this._input=j,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var j=this._input[0];this.yytext+=j,this.yyleng++,this.offset++,this.match+=j,this.matched+=j;var J=j.match(/(?:\r\n?|\n).*/g);return J?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),j},"input"),unput:o(function(j){var J=j.length,Z=j.split(/(?:\r\n?|\n)/g);this._input=j+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-J),this.offset-=J;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Z.length-1&&(this.yylineno-=Z.length-1);var q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Z?(Z.length===H.length?this.yylloc.first_column:0)+H[H.length-Z.length].length-Z[0].length:this.yylloc.first_column-J},this.options.ranges&&(this.yylloc.range=[q[0],q[0]+this.yyleng-J]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(j){this.unput(this.match.slice(j))},"less"),pastInput:o(function(){var j=this.matched.substr(0,this.matched.length-this.match.length);return(j.length>20?"...":"")+j.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var j=this.match;return j.length<20&&(j+=this._input.substr(0,20-j.length)),(j.substr(0,20)+(j.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var j=this.pastInput(),J=new Array(j.length+1).join("-");return j+this.upcomingInput()+` +`+J+"^"},"showPosition"),test_match:o(function(j,J){var Z,H,q;if(this.options.backtrack_lexer&&(q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(q.yylloc.range=this.yylloc.range.slice(0))),H=j[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+j[0].length},this.yytext+=j[0],this.match+=j[0],this.matches=j,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(j[0].length),this.matched+=j[0],Z=this.performAction.call(this,this.yy,this,J,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Z)return Z;if(this._backtrack){for(var K in q)this[K]=q[K];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var j,J,Z,H;this._more||(this.yytext="",this.match="");for(var q=this._currentRules(),K=0;KJ[0].length)){if(J=Z,H=K,this.options.backtrack_lexer){if(j=this.test_match(Z,q[K]),j!==!1)return j;if(this._backtrack){J=!1;continue}else return!1}else if(!this.options.flex)break}return J?(j=this.test_match(J,q[H]),j!==!1?j:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var J=this.next();return J||this.lex()},"lex"),begin:o(function(J){this.conditionStack.push(J)},"begin"),popState:o(function(){var J=this.conditionStack.length-1;return J>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(J){return J=this.conditionStack.length-1-Math.abs(J||0),J>=0?this.conditionStack[J]:"INITIAL"},"topState"),pushState:o(function(J){this.begin(J)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(J,Z,H,q){var K=q;switch(H){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return Z.yytext=Z.yytext.trim(),62;break}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return ie}();Y.lexer=Q;function X(){this.yy={}}return o(X,"Parser"),X.prototype=Y,Y.Parser=X,new X}();oO.parser=oO;Lue=oO});var lO,Bs,gx,mf,yx,Lze,Dze,Rze,Nze,Mze,Ize,Oze,Pze,Bze,Fze,zze,Gze,$ze,Vze,Uze,Hze,Yze,Rue,Nue=R(()=>{"use strict";_t();ut();bi();lO=[],Bs={},gx=new Map,mf={},yx=new Map,Lze={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},Dze={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},Rze={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Nze={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},Mze=o((t,e)=>(gx.has(t)||gx.set(t,{name:t,type:e,id:Bs.id,text:Bs.text,risk:Bs.risk,verifyMethod:Bs.verifyMethod}),Bs={},gx.get(t)),"addRequirement"),Ize=o(()=>gx,"getRequirements"),Oze=o(t=>{Bs!==void 0&&(Bs.id=t)},"setNewReqId"),Pze=o(t=>{Bs!==void 0&&(Bs.text=t)},"setNewReqText"),Bze=o(t=>{Bs!==void 0&&(Bs.risk=t)},"setNewReqRisk"),Fze=o(t=>{Bs!==void 0&&(Bs.verifyMethod=t)},"setNewReqVerifyMethod"),zze=o(t=>(yx.has(t)||(yx.set(t,{name:t,type:mf.type,docRef:mf.docRef}),V.info("Added new requirement: ",t)),mf={},yx.get(t)),"addElement"),Gze=o(()=>yx,"getElements"),$ze=o(t=>{mf!==void 0&&(mf.type=t)},"setNewElementType"),Vze=o(t=>{mf!==void 0&&(mf.docRef=t)},"setNewElementDocRef"),Uze=o((t,e,r)=>{lO.push({type:t,src:e,dst:r})},"addRelationship"),Hze=o(()=>lO,"getRelationships"),Yze=o(()=>{lO=[],Bs={},gx=new Map,mf={},yx=new Map,vr()},"clear"),Rue={RequirementType:Lze,RiskLevel:Dze,VerifyType:Rze,Relationships:Nze,getConfig:o(()=>de().req,"getConfig"),addRequirement:Mze,getRequirements:Ize,setNewReqId:Oze,setNewReqText:Pze,setNewReqRisk:Bze,setNewReqVerifyMethod:Fze,setAccTitle:kr,getAccTitle:Ar,setAccDescription:_r,getAccDescription:Lr,addElement:zze,getElements:Gze,setNewElementType:$ze,setNewElementDocRef:Vze,addRelationship:Uze,getRelationships:Hze,clear:Yze}});var Wze,Mue,Iue=R(()=>{"use strict";Wze=o(t=>` + + marker { + fill: ${t.relationColor}; + stroke: ${t.relationColor}; + } + + marker.cross { + stroke: ${t.lineColor}; + } + + svg { + font-family: ${t.fontFamily}; + font-size: ${t.fontSize}; + } + + .reqBox { + fill: ${t.requirementBackground}; + fill-opacity: 1.0; + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${t.requirementTextColor}; + } + .reqLabelBox { + fill: ${t.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + .relationshipLine { + stroke: ${t.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${t.relationLabelColor}; + } + +`,"getStyles"),Mue=Wze});var cO,qze,uO,Oue=R(()=>{"use strict";cO={CONTAINS:"contains",ARROW:"arrow"},qze=o((t,e)=>{let r=t.append("defs").append("marker").attr("id",cO.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");r.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),r.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),r.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",cO.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0 + L${e.line_height},${e.line_height/2} + M${e.line_height},${e.line_height/2} + L0,${e.line_height}`).attr("stroke-width",1)},"insertLineEndings"),uO={ReqMarkers:cO,insertLineEndings:qze}});var ai,Pue,Bue,Fue,zue,Xze,jze,Kze,Qze,Zze,Jze,Og,eGe,Gue,$ue=R(()=>{"use strict";Zt();Vd();ya();_t();ut();Yn();rr();Oue();ai={},Pue=0,Bue=o((t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",ai.rect_min_width+"px").attr("height",ai.rect_min_height+"px"),"newRectNode"),Fue=o((t,e,r)=>{let n=ai.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",ai.rect_padding).attr("dominant-baseline","hanging"),a=0;r.forEach(h=>{a==0?i.append("tspan").attr("text-anchor","middle").attr("x",ai.rect_min_width/2).attr("dy",0).text(h):i.append("tspan").attr("text-anchor","middle").attr("x",ai.rect_min_width/2).attr("dy",ai.line_height*.75).text(h),a++});let s=1.5*ai.rect_padding,l=a*ai.line_height*.75,u=s+l;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",ai.rect_min_width).attr("y1",u).attr("y2",u),{titleNode:i,y:u}},"newTitleNode"),zue=o((t,e,r,n)=>{let i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",ai.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),a=0,s=30,l=[];return r.forEach(u=>{let h=u.length;for(;h>s&&a<3;){let f=u.substring(0,s);u=u.substring(s,u.length),h=u.length,l[l.length]=f,a++}if(a==3){let f=l[l.length-1];l[l.length-1]=f.substring(0,f.length-4)+"..."}else l[l.length]=u;a=0}),l.forEach(u=>{i.append("tspan").attr("x",ai.rect_padding).attr("dy",ai.line_height).text(u)}),i},"newBodyNode"),Xze=o((t,e,r,n)=>{let i=e.node().getTotalLength(),a=e.node().getPointAtLength(i*.5),s="rel"+Pue;Pue++;let u=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-u.width/2).attr("y",a.y-u.height/2).attr("width",u.width).attr("height",u.height).attr("fill","white").attr("fill-opacity","85%")},"addEdgeLabel"),jze=o(function(t,e,r,n,i){let a=r.edge(Og(e.src),Og(e.dst)),s=ha().x(function(u){return u.x}).y(function(u){return u.y}),l=t.insert("path","#"+n).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?l.attr("marker-start","url("+We.getUrl(ai.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(l.attr("stroke-dasharray","10,7"),l.attr("marker-end","url("+We.getUrl(ai.arrowMarkerAbsolute)+"#"+uO.ReqMarkers.ARROW+"_line_ending)")),Xze(t,l,ai,`<<${e.type}>>`)},"drawRelationshipFromLayout"),Kze=o((t,e,r)=>{t.forEach((n,i)=>{i=Og(i),V.info("Added new requirement: ",i);let a=r.append("g").attr("id",i),s="req-"+i,l=Bue(a,s),u=[],h=Fue(a,i+"_title",[`<<${n.type}>>`,`${n.name}`]);u.push(h.titleNode);let f=zue(a,i+"_body",[`Id: ${n.id}`,`Text: ${n.text}`,`Risk: ${n.risk}`,`Verification: ${n.verifyMethod}`],h.y);u.push(f);let d=l.node().getBBox();e.setNode(i,{width:d.width,height:d.height,shape:"rect",id:i})})},"drawReqs"),Qze=o((t,e,r)=>{t.forEach((n,i)=>{let a=Og(i),s=r.append("g").attr("id",a),l="element-"+a,u=Bue(s,l),h=[],f=Fue(s,l+"_title",["<>",`${i}`]);h.push(f.titleNode);let d=zue(s,l+"_body",[`Type: ${n.type||"Not Specified"}`,`Doc Ref: ${n.docRef||"None"}`],f.y);h.push(d);let p=u.node().getBBox();e.setNode(a,{width:p.width,height:p.height,shape:"rect",id:a})})},"drawElements"),Zze=o((t,e)=>(t.forEach(function(r){let n=Og(r.src),i=Og(r.dst);e.setEdge(n,i,{relationship:r})}),t),"addRelationships"),Jze=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&(t.select("#"+r),t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )"))})},"adjustEntities"),Og=o(t=>t.replace(/\s/g,"").replace(/\./g,"_"),"elementString"),eGe=o((t,e,r,n)=>{ai=de().requirement;let i=ai.securityLevel,a;i==="sandbox"&&(a=$e("#i"+e));let l=(i==="sandbox"?$e(a.nodes()[0].contentDocument.body):$e("body")).select(`[id='${e}']`);uO.insertLineEndings(l,ai);let u=new lr({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:ai.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}}),h=n.db.getRequirements(),f=n.db.getElements(),d=n.db.getRelationships();Kze(h,u,l),Qze(f,u,l),Zze(d,u),lo(u),Jze(l,u),d.forEach(function(v){jze(l,v,u,e,n)});let p=ai.rect_padding,m=l.node().getBBox(),g=m.width+p*2,y=m.height+p*2;Sr(l,y,g,ai.useMaxWidth),l.attr("viewBox",`${m.x-p} ${m.y-p} ${g} ${y}`)},"draw"),Gue={draw:eGe}});var Vue={};hr(Vue,{diagram:()=>tGe});var tGe,Uue=R(()=>{"use strict";Due();Nue();Iue();$ue();tGe={parser:Lue,db:Rue,renderer:Gue,styles:Mue}});var hO,Wue,que=R(()=>{"use strict";hO=function(){var t=o(function(H,q,K,se){for(K=K||{},se=H.length;se--;K[H[se]]=q);return K},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],S=[1,32],T=[1,33],E=[1,34],_=[1,35],A=[1,36],L=[1,37],M=[1,38],N=[1,39],k=[1,41],I=[1,42],C=[1,43],O=[1,44],D=[1,45],P=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],B=[4,5,16,50,52,53],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Y=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Q=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],X=[68,69,70],ie=[1,122],j={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(q,K,se,ce,ue,te,De){var oe=te.length-1;switch(ue){case 3:return ce.apply(te[oe]),te[oe];break;case 4:case 9:this.$=[];break;case 5:case 10:te[oe-1].push(te[oe]),this.$=te[oe-1];break;case 6:case 7:case 11:case 12:this.$=te[oe];break;case 8:case 13:this.$=[];break;case 15:te[oe].type="createParticipant",this.$=te[oe];break;case 16:te[oe-1].unshift({type:"boxStart",boxData:ce.parseBoxData(te[oe-2])}),te[oe-1].push({type:"boxEnd",boxText:te[oe-2]}),this.$=te[oe-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(te[oe-2]),sequenceIndexStep:Number(te[oe-1]),sequenceVisible:!0,signalType:ce.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(te[oe-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ce.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ce.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ce.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:ce.LINETYPE.ACTIVE_START,actor:te[oe-1].actor};break;case 23:this.$={type:"activeEnd",signalType:ce.LINETYPE.ACTIVE_END,actor:te[oe-1].actor};break;case 29:ce.setDiagramTitle(te[oe].substring(6)),this.$=te[oe].substring(6);break;case 30:ce.setDiagramTitle(te[oe].substring(7)),this.$=te[oe].substring(7);break;case 31:this.$=te[oe].trim(),ce.setAccTitle(this.$);break;case 32:case 33:this.$=te[oe].trim(),ce.setAccDescription(this.$);break;case 34:te[oe-1].unshift({type:"loopStart",loopText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.LOOP_START}),te[oe-1].push({type:"loopEnd",loopText:te[oe-2],signalType:ce.LINETYPE.LOOP_END}),this.$=te[oe-1];break;case 35:te[oe-1].unshift({type:"rectStart",color:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.RECT_START}),te[oe-1].push({type:"rectEnd",color:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.RECT_END}),this.$=te[oe-1];break;case 36:te[oe-1].unshift({type:"optStart",optText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.OPT_START}),te[oe-1].push({type:"optEnd",optText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.OPT_END}),this.$=te[oe-1];break;case 37:te[oe-1].unshift({type:"altStart",altText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.ALT_START}),te[oe-1].push({type:"altEnd",signalType:ce.LINETYPE.ALT_END}),this.$=te[oe-1];break;case 38:te[oe-1].unshift({type:"parStart",parText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.PAR_START}),te[oe-1].push({type:"parEnd",signalType:ce.LINETYPE.PAR_END}),this.$=te[oe-1];break;case 39:te[oe-1].unshift({type:"parStart",parText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.PAR_OVER_START}),te[oe-1].push({type:"parEnd",signalType:ce.LINETYPE.PAR_END}),this.$=te[oe-1];break;case 40:te[oe-1].unshift({type:"criticalStart",criticalText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.CRITICAL_START}),te[oe-1].push({type:"criticalEnd",signalType:ce.LINETYPE.CRITICAL_END}),this.$=te[oe-1];break;case 41:te[oe-1].unshift({type:"breakStart",breakText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.BREAK_START}),te[oe-1].push({type:"breakEnd",optText:ce.parseMessage(te[oe-2]),signalType:ce.LINETYPE.BREAK_END}),this.$=te[oe-1];break;case 43:this.$=te[oe-3].concat([{type:"option",optionText:ce.parseMessage(te[oe-1]),signalType:ce.LINETYPE.CRITICAL_OPTION},te[oe]]);break;case 45:this.$=te[oe-3].concat([{type:"and",parText:ce.parseMessage(te[oe-1]),signalType:ce.LINETYPE.PAR_AND},te[oe]]);break;case 47:this.$=te[oe-3].concat([{type:"else",altText:ce.parseMessage(te[oe-1]),signalType:ce.LINETYPE.ALT_ELSE},te[oe]]);break;case 48:te[oe-3].draw="participant",te[oe-3].type="addParticipant",te[oe-3].description=ce.parseMessage(te[oe-1]),this.$=te[oe-3];break;case 49:te[oe-1].draw="participant",te[oe-1].type="addParticipant",this.$=te[oe-1];break;case 50:te[oe-3].draw="actor",te[oe-3].type="addParticipant",te[oe-3].description=ce.parseMessage(te[oe-1]),this.$=te[oe-3];break;case 51:te[oe-1].draw="actor",te[oe-1].type="addParticipant",this.$=te[oe-1];break;case 52:te[oe-1].type="destroyParticipant",this.$=te[oe-1];break;case 53:this.$=[te[oe-1],{type:"addNote",placement:te[oe-2],actor:te[oe-1].actor,text:te[oe]}];break;case 54:te[oe-2]=[].concat(te[oe-1],te[oe-1]).slice(0,2),te[oe-2][0]=te[oe-2][0].actor,te[oe-2][1]=te[oe-2][1].actor,this.$=[te[oe-1],{type:"addNote",placement:ce.PLACEMENT.OVER,actor:te[oe-2].slice(0,2),text:te[oe]}];break;case 55:this.$=[te[oe-1],{type:"addLinks",actor:te[oe-1].actor,text:te[oe]}];break;case 56:this.$=[te[oe-1],{type:"addALink",actor:te[oe-1].actor,text:te[oe]}];break;case 57:this.$=[te[oe-1],{type:"addProperties",actor:te[oe-1].actor,text:te[oe]}];break;case 58:this.$=[te[oe-1],{type:"addDetails",actor:te[oe-1].actor,text:te[oe]}];break;case 61:this.$=[te[oe-2],te[oe]];break;case 62:this.$=te[oe];break;case 63:this.$=ce.PLACEMENT.LEFTOF;break;case 64:this.$=ce.PLACEMENT.RIGHTOF;break;case 65:this.$=[te[oe-4],te[oe-1],{type:"addMessage",from:te[oe-4].actor,to:te[oe-1].actor,signalType:te[oe-3],msg:te[oe],activate:!0},{type:"activeStart",signalType:ce.LINETYPE.ACTIVE_START,actor:te[oe-1].actor}];break;case 66:this.$=[te[oe-4],te[oe-1],{type:"addMessage",from:te[oe-4].actor,to:te[oe-1].actor,signalType:te[oe-3],msg:te[oe]},{type:"activeEnd",signalType:ce.LINETYPE.ACTIVE_END,actor:te[oe-4].actor}];break;case 67:this.$=[te[oe-3],te[oe-1],{type:"addMessage",from:te[oe-3].actor,to:te[oe-1].actor,signalType:te[oe-2],msg:te[oe]}];break;case 68:this.$={type:"addParticipant",actor:te[oe]};break;case 69:this.$=ce.LINETYPE.SOLID_OPEN;break;case 70:this.$=ce.LINETYPE.DOTTED_OPEN;break;case 71:this.$=ce.LINETYPE.SOLID;break;case 72:this.$=ce.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=ce.LINETYPE.DOTTED;break;case 74:this.$=ce.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=ce.LINETYPE.SOLID_CROSS;break;case 76:this.$=ce.LINETYPE.DOTTED_CROSS;break;case 77:this.$=ce.LINETYPE.SOLID_POINT;break;case 78:this.$=ce.LINETYPE.DOTTED_POINT;break;case 79:this.$=ce.parseMessage(te[oe].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:L,52:M,53:N},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:P},{22:55,70:P},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:P},{22:72,70:P},{22:73,70:P},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:P},{22:90,70:P},{22:91,70:P},{22:92,70:P},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(B,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t($,i,{7:99}),t($,i,{7:100}),t($,i,{7:101}),t(z,i,{40:102,7:103}),t(Y,i,{42:104,7:105}),t(Y,i,{7:105,42:106}),t(Q,i,{45:107,7:108}),t($,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:P},t(X,[2,69]),t(X,[2,70]),t(X,[2,71]),t(X,[2,72]),t(X,[2,73]),t(X,[2,74]),t(X,[2,75]),t(X,[2,76]),t(X,[2,77]),t(X,[2,78]),{22:118,70:P},{22:120,58:119,70:P},{70:[2,63]},{70:[2,64]},{56:121,81:ie},{56:123,81:ie},{56:124,81:ie},{56:125,81:ie},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:L,52:M,53:N},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,49:[1,136],50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,48:[1,138],50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,47:[1,141],50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:S,41:T,43:E,44:_,46:A,50:L,52:M,53:N,54:k,59:I,60:C,61:O,62:D,70:P},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:P},{22:146,70:P},{56:147,81:ie},{56:148,81:ie},{56:149,81:ie},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(B,[2,10]),{12:151,50:L,52:M,53:N},t(B,[2,12]),t(B,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:ie},{56:158,81:ie},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:P},t(B,[2,11]),t(z,i,{7:103,40:160}),t(Y,i,{7:105,42:161}),t(Q,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(q,K){if(K.recoverable)this.trace(q);else{var se=new Error(q);throw se.hash=K,se}},"parseError"),parse:o(function(q){var K=this,se=[0],ce=[],ue=[null],te=[],De=this.table,oe="",ke=0,Ie=0,Se=0,Ue=2,Pe=1,_e=te.slice.call(arguments,1),me=Object.create(this.lexer),W={yy:{}};for(var fe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,fe)&&(W.yy[fe]=this.yy[fe]);me.setInput(q,W.yy),W.yy.lexer=me,W.yy.parser=this,typeof me.yylloc>"u"&&(me.yylloc={});var ge=me.yylloc;te.push(ge);var re=me.options&&me.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function he(yt){se.length=se.length-2*yt,ue.length=ue.length-yt,te.length=te.length-yt}o(he,"popStack");function ne(){var yt;return yt=ce.pop()||me.lex()||Pe,typeof yt!="number"&&(yt instanceof Array&&(ce=yt,yt=ce.pop()),yt=K.symbols_[yt]||yt),yt}o(ne,"lex");for(var ae,we,Te,Ce,Ae,Ge,Me={},ye,He,ze,Ze;;){if(Te=se[se.length-1],this.defaultActions[Te]?Ce=this.defaultActions[Te]:((ae===null||typeof ae>"u")&&(ae=ne()),Ce=De[Te]&&De[Te][ae]),typeof Ce>"u"||!Ce.length||!Ce[0]){var gt="";Ze=[];for(ye in De[Te])this.terminals_[ye]&&ye>Ue&&Ze.push("'"+this.terminals_[ye]+"'");me.showPosition?gt="Parse error on line "+(ke+1)+`: +`+me.showPosition()+` +Expecting `+Ze.join(", ")+", got '"+(this.terminals_[ae]||ae)+"'":gt="Parse error on line "+(ke+1)+": Unexpected "+(ae==Pe?"end of input":"'"+(this.terminals_[ae]||ae)+"'"),this.parseError(gt,{text:me.match,token:this.terminals_[ae]||ae,line:me.yylineno,loc:ge,expected:Ze})}if(Ce[0]instanceof Array&&Ce.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Te+", token: "+ae);switch(Ce[0]){case 1:se.push(ae),ue.push(me.yytext),te.push(me.yylloc),se.push(Ce[1]),ae=null,we?(ae=we,we=null):(Ie=me.yyleng,oe=me.yytext,ke=me.yylineno,ge=me.yylloc,Se>0&&Se--);break;case 2:if(He=this.productions_[Ce[1]][1],Me.$=ue[ue.length-He],Me._$={first_line:te[te.length-(He||1)].first_line,last_line:te[te.length-1].last_line,first_column:te[te.length-(He||1)].first_column,last_column:te[te.length-1].last_column},re&&(Me._$.range=[te[te.length-(He||1)].range[0],te[te.length-1].range[1]]),Ge=this.performAction.apply(Me,[oe,Ie,ke,W.yy,Ce[1],ue,te].concat(_e)),typeof Ge<"u")return Ge;He&&(se=se.slice(0,-1*He*2),ue=ue.slice(0,-1*He),te=te.slice(0,-1*He)),se.push(this.productions_[Ce[1]][0]),ue.push(Me.$),te.push(Me._$),ze=De[se[se.length-2]][se[se.length-1]],se.push(ze);break;case 3:return!0}}return!0},"parse")},J=function(){var H={EOF:1,parseError:o(function(K,se){if(this.yy.parser)this.yy.parser.parseError(K,se);else throw new Error(K)},"parseError"),setInput:o(function(q,K){return this.yy=K||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var K=q.match(/(?:\r\n?|\n).*/g);return K?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var K=q.length,se=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-K),this.offset-=K;var ce=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),se.length-1&&(this.yylineno-=se.length-1);var ue=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:se?(se.length===ce.length?this.yylloc.first_column:0)+ce[ce.length-se.length].length-se[0].length:this.yylloc.first_column-K},this.options.ranges&&(this.yylloc.range=[ue[0],ue[0]+this.yyleng-K]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),K=new Array(q.length+1).join("-");return q+this.upcomingInput()+` +`+K+"^"},"showPosition"),test_match:o(function(q,K){var se,ce,ue;if(this.options.backtrack_lexer&&(ue={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ue.yylloc.range=this.yylloc.range.slice(0))),ce=q[0].match(/(?:\r\n?|\n).*/g),ce&&(this.yylineno+=ce.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ce?ce[ce.length-1].length-ce[ce.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],se=this.performAction.call(this,this.yy,this,K,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),se)return se;if(this._backtrack){for(var te in ue)this[te]=ue[te];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,K,se,ce;this._more||(this.yytext="",this.match="");for(var ue=this._currentRules(),te=0;teK[0].length)){if(K=se,ce=te,this.options.backtrack_lexer){if(q=this.test_match(se,ue[te]),q!==!1)return q;if(this._backtrack){K=!1;continue}else return!1}else if(!this.options.flex)break}return K?(q=this.test_match(K,ue[ce]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var K=this.next();return K||this.lex()},"lex"),begin:o(function(K){this.conditionStack.push(K)},"begin"),popState:o(function(){var K=this.conditionStack.length-1;return K>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(K){return K=this.conditionStack.length-1-Math.abs(K||0),K>=0?this.conditionStack[K]:"INITIAL"},"topState"),pushState:o(function(K){this.begin(K)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(K,se,ce,ue){var te=ue;switch(ce){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return se.yytext=se.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return se.yytext=se.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return H}();j.lexer=J;function Z(){this.yy={}}return o(Z,"Parser"),Z.prototype=j,j.Parser=Z,new Z}();hO.parser=hO;Wue=hO});function dO(t,e){if(t.links==null)t.links=e;else for(let r in e)t.links[r]=e[r]}function Zue(t,e){if(t.properties==null)t.properties=e;else for(let r in e)t.properties[r]=e[r]}function SGe(){Mt.records.currentBox=void 0}var Mt,aGe,fO,sGe,oGe,pi,lGe,cGe,uGe,hGe,fGe,dGe,pGe,xx,mGe,gGe,yGe,vGe,xGe,Xue,A0,bGe,wGe,TGe,vx,kGe,EGe,jue,Kue,CGe,Que,Jue,AGe,ehe,pO,the=R(()=>{"use strict";_t();ut();Jk();rr();bi();Mt=new uf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0})),aGe=o(function(t){Mt.records.boxes.push({name:t.text,wrap:t.wrap??A0(),fill:t.color,actorKeys:[]}),Mt.records.currentBox=Mt.records.boxes.slice(-1)[0]},"addBox"),fO=o(function(t,e,r,n){let i=Mt.records.currentBox,a=Mt.records.actors.get(t);if(a){if(Mt.records.currentBox&&a.box&&Mt.records.currentBox!==a.box)throw new Error(`A same participant should only be defined in one Box: ${a.name} can't be in '${a.box.name}' and in '${Mt.records.currentBox.name}' at the same time.`);if(i=a.box?a.box:Mt.records.currentBox,a.box=i,a&&e===a.name&&r==null)return}if(r?.text==null&&(r={text:e,type:n}),(n==null||r.text==null)&&(r={text:e,type:n}),Mt.records.actors.set(t,{box:i,name:e,description:r.text,wrap:r.wrap??A0(),prevActor:Mt.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:n??"participant"}),Mt.records.prevActor){let s=Mt.records.actors.get(Mt.records.prevActor);s&&(s.nextActor=t)}Mt.records.currentBox&&Mt.records.currentBox.actorKeys.push(t),Mt.records.prevActor=t},"addActor"),sGe=o(t=>{let e,r=0;if(!t)return 0;for(e=0;e>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},s}return Mt.records.messages.push({from:t,to:e,message:r?.text??"",wrap:r?.wrap??A0(),type:n,activate:i}),!0},"addSignal"),lGe=o(function(){return Mt.records.boxes.length>0},"hasAtLeastOneBox"),cGe=o(function(){return Mt.records.boxes.some(t=>t.name)},"hasAtLeastOneBoxWithTitle"),uGe=o(function(){return Mt.records.messages},"getMessages"),hGe=o(function(){return Mt.records.boxes},"getBoxes"),fGe=o(function(){return Mt.records.actors},"getActors"),dGe=o(function(){return Mt.records.createdActors},"getCreatedActors"),pGe=o(function(){return Mt.records.destroyedActors},"getDestroyedActors"),xx=o(function(t){return Mt.records.actors.get(t)},"getActor"),mGe=o(function(){return[...Mt.records.actors.keys()]},"getActorKeys"),gGe=o(function(){Mt.records.sequenceNumbersEnabled=!0},"enableSequenceNumbers"),yGe=o(function(){Mt.records.sequenceNumbersEnabled=!1},"disableSequenceNumbers"),vGe=o(()=>Mt.records.sequenceNumbersEnabled,"showSequenceNumbers"),xGe=o(function(t){Mt.records.wrapEnabled=t},"setWrap"),Xue=o(t=>{if(t===void 0)return{};t=t.trim();let e=/^:?wrap:/.exec(t)!==null?!0:/^:?nowrap:/.exec(t)!==null?!1:void 0;return{cleanedText:(e===void 0?t:t.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:e}},"extractWrap"),A0=o(()=>Mt.records.wrapEnabled!==void 0?Mt.records.wrapEnabled:de().sequence?.wrap??!1,"autoWrap"),bGe=o(function(){Mt.reset(),vr()},"clear"),wGe=o(function(t){let e=t.trim(),{wrap:r,cleanedText:n}=Xue(e),i={text:n,wrap:r};return V.debug(`parseMessage: ${JSON.stringify(i)}`),i},"parseMessage"),TGe=o(function(t){let e=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(t),r=e?.[1]?e[1].trim():"transparent",n=e?.[2]?e[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",r)||(r="transparent",n=t.trim());else{let s=new Option().style;s.color=r,s.color!==r&&(r="transparent",n=t.trim())}let{wrap:i,cleanedText:a}=Xue(n);return{text:a?qr(a,de()):void 0,color:r,wrap:i}},"parseBoxData"),vx={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},kGe={FILLED:0,OPEN:1},EGe={LEFTOF:0,RIGHTOF:1,OVER:2},jue=o(function(t,e,r){let n={actor:t,placement:e,message:r.text,wrap:r.wrap??A0()},i=[].concat(t,t);Mt.records.notes.push(n),Mt.records.messages.push({from:i[0],to:i[1],message:r.text,wrap:r.wrap??A0(),type:vx.NOTE,placement:e})},"addNote"),Kue=o(function(t,e){let r=xx(t);try{let n=qr(e.text,de());n=n.replace(/&/g,"&"),n=n.replace(/=/g,"=");let i=JSON.parse(n);dO(r,i)}catch(n){V.error("error while parsing actor link text",n)}},"addLinks"),CGe=o(function(t,e){let r=xx(t);try{let n={},i=qr(e.text,de()),a=i.indexOf("@");i=i.replace(/&/g,"&"),i=i.replace(/=/g,"=");let s=i.slice(0,a-1).trim(),l=i.slice(a+1).trim();n[s]=l,dO(r,n)}catch(n){V.error("error while parsing actor link text",n)}},"addALink");o(dO,"insertLinks");Que=o(function(t,e){let r=xx(t);try{let n=qr(e.text,de()),i=JSON.parse(n);Zue(r,i)}catch(n){V.error("error while parsing actor properties text",n)}},"addProperties");o(Zue,"insertProperties");o(SGe,"boxEnd");Jue=o(function(t,e){let r=xx(t),n=document.getElementById(e.text);try{let i=n.innerHTML,a=JSON.parse(i);a.properties&&Zue(r,a.properties),a.links&&dO(r,a.links)}catch(i){V.error("error while parsing actor details text",i)}},"addDetails"),AGe=o(function(t,e){if(t?.properties!==void 0)return t.properties[e]},"getActorProperty"),ehe=o(function(t){if(Array.isArray(t))t.forEach(function(e){ehe(e)});else switch(t.type){case"sequenceIndex":Mt.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":fO(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if(Mt.records.actors.has(t.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");Mt.records.lastCreated=t.actor,fO(t.actor,t.actor,t.description,t.draw),Mt.records.createdActors.set(t.actor,Mt.records.messages.length);break;case"destroyParticipant":Mt.records.lastDestroyed=t.actor,Mt.records.destroyedActors.set(t.actor,Mt.records.messages.length);break;case"activeStart":pi(t.actor,void 0,void 0,t.signalType);break;case"activeEnd":pi(t.actor,void 0,void 0,t.signalType);break;case"addNote":jue(t.actor,t.placement,t.text);break;case"addLinks":Kue(t.actor,t.text);break;case"addALink":CGe(t.actor,t.text);break;case"addProperties":Que(t.actor,t.text);break;case"addDetails":Jue(t.actor,t.text);break;case"addMessage":if(Mt.records.lastCreated){if(t.to!==Mt.records.lastCreated)throw new Error("The created participant "+Mt.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");Mt.records.lastCreated=void 0}else if(Mt.records.lastDestroyed){if(t.to!==Mt.records.lastDestroyed&&t.from!==Mt.records.lastDestroyed)throw new Error("The destroyed participant "+Mt.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");Mt.records.lastDestroyed=void 0}pi(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":aGe(t.boxData);break;case"boxEnd":SGe();break;case"loopStart":pi(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":pi(void 0,void 0,void 0,t.signalType);break;case"rectStart":pi(void 0,void 0,t.color,t.signalType);break;case"rectEnd":pi(void 0,void 0,void 0,t.signalType);break;case"optStart":pi(void 0,void 0,t.optText,t.signalType);break;case"optEnd":pi(void 0,void 0,void 0,t.signalType);break;case"altStart":pi(void 0,void 0,t.altText,t.signalType);break;case"else":pi(void 0,void 0,t.altText,t.signalType);break;case"altEnd":pi(void 0,void 0,void 0,t.signalType);break;case"setAccTitle":kr(t.text);break;case"parStart":pi(void 0,void 0,t.parText,t.signalType);break;case"and":pi(void 0,void 0,t.parText,t.signalType);break;case"parEnd":pi(void 0,void 0,void 0,t.signalType);break;case"criticalStart":pi(void 0,void 0,t.criticalText,t.signalType);break;case"option":pi(void 0,void 0,t.optionText,t.signalType);break;case"criticalEnd":pi(void 0,void 0,void 0,t.signalType);break;case"breakStart":pi(void 0,void 0,t.breakText,t.signalType);break;case"breakEnd":pi(void 0,void 0,void 0,t.signalType);break}},"apply"),pO={addActor:fO,addMessage:oGe,addSignal:pi,addLinks:Kue,addDetails:Jue,addProperties:Que,autoWrap:A0,setWrap:xGe,enableSequenceNumbers:gGe,disableSequenceNumbers:yGe,showSequenceNumbers:vGe,getMessages:uGe,getActors:fGe,getCreatedActors:dGe,getDestroyedActors:pGe,getActor:xx,getActorKeys:mGe,getActorProperty:AGe,getAccTitle:Ar,getBoxes:hGe,getDiagramTitle:Xr,setDiagramTitle:nn,getConfig:o(()=>de().sequence,"getConfig"),clear:bGe,parseMessage:wGe,parseBoxData:TGe,LINETYPE:vx,ARROWTYPE:kGe,PLACEMENT:EGe,addNote:jue,setAccTitle:kr,apply:ehe,setAccDescription:_r,getAccDescription:Lr,hasAtLeastOneBox:lGe,hasAtLeastOneBoxWithTitle:cGe}});var _Ge,rhe,nhe=R(()=>{"use strict";_Ge=o(t=>`.actor { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + + text.actor > tspan { + fill: ${t.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${t.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${t.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${t.signalColor}; + } + + #arrowhead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .sequenceNumber { + fill: ${t.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${t.signalColor}; + } + + #crosshead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .messageText { + fill: ${t.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${t.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${t.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${t.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation1 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation2 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${t.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + .actor-man circle, line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + stroke-width: 2px; + } +`,"getStyles"),rhe=_Ge});var mO,gf,ahe,she,LGe,ihe,gO,DGe,RGe,bx,_0,ohe,Bc,yO,NGe,MGe,IGe,OGe,PGe,BGe,FGe,lhe,zGe,GGe,$Ge,VGe,UGe,HGe,YGe,che,WGe,vO,qGe,si,uhe=R(()=>{"use strict";rr();Qy();xr();mO=Xi(Up(),1);qs();gf=18*2,ahe="actor-top",she="actor-bottom",LGe="actor-box",ihe="actor-man",gO=o(function(t,e){return yd(t,e)},"drawRect"),DGe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,mO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),qGe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),RGe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),bx=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await yh(e.text,Or()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),_0=o(function(t,e){let r=0,n=0,i=e.text.split(We.lineBreakRegex),[a,s]=mc(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||K_;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),ohe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,_0(t,e),n},"drawLabel"),Bc=-1,yO=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),NGe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+5,l=t.append("g").lower();var u=l;n||(Bc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",RGe(`actor${Bc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Bc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Bc,e.links!=null&&u.attr("id","root-"+Bc));let h=wl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${she}`:f+=` ${ahe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=gO(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?EW(u,h.x+h.width-20,h.y+10,m.substr(1)):kW(u,h.x+h.width-20,h.y+10,m)}vO(r,Ni(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${LGe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),MGe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Bc++,l.append("line").attr("id","actor"+Bc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Bc);let u=t.append("g"),h=ihe;n?h+=` ${she}`:h+=` ${ahe}`,u.attr("class",h),u.attr("name",e.name);let f=wl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Bc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Bc).attr("x1",a-gf/2).attr("y1",i+33).attr("x2",a+gf/2).attr("y2",i+33),u.append("line").attr("x1",a-gf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+gf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,vO(r,Ni(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${ihe}`},r),e.height},"drawActorTypeActor"),IGe=o(async function(t,e,r,n){switch(e.type){case"actor":return await MGe(t,e,r,n);case"participant":return await NGe(t,e,r,n)}},"drawActor"),OGe=o(function(t,e,r){let i=t.append("g");lhe(i,e),e.name&&vO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),PGe=o(function(t){return t.append("g")},"anchorElement"),BGe=o(function(t,e,r,n,i){let a=wl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,gO(s,a)},"drawActivation"),FGe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=Ky();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",ohe(d,m),m=che(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=Ni(m.text)?await bx(d,m,e):_0(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,Ni(m.text)?(e.starty=e.sections[y].y,await bx(d,m,e)):_0(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),lhe=o(function(t,e){j3(t,e)},"drawBackgroundRect"),zGe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),GGe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),$Ge=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),VGe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),UGe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),HGe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),YGe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),che=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),WGe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),vO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=mc(m),b=a.split(We.lineBreakRegex);for(let w=0;w{let s=L0(Ne),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Ne.boxTextMargin,a.wrap&&(a.name=Lt.wrapLabel(a.name,l-2*Ne.wrapPadding,s));let u=Lt.calculateTextDimensions(a.name,s);i=We.getMax(u.height,i);let h=We.getMax(l,u.width+2*Ne.wrapPadding);if(a.margin=Ne.boxTextMargin,la.textMaxHeight=i),We.getMax(n,Ne.height)}var Ne,Ke,XGe,L0,Pg,xO,KGe,QGe,bO,fhe,dhe,bE,hhe,JGe,t$e,n$e,i$e,a$e,phe,mhe=R(()=>{"use strict";Zt();uhe();ut();rr();Qy();_t();cp();xr();Yn();Ne={},Ke={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,dhe(de())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Ne.boxMargin,Math.max),i.updateVal(Ke.data,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(Ke.data,"stopx",r+f*Ne.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Ne.boxMargin,Math.max),i.updateVal(Ke.data,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(Ke.data,"stopy",n+f*Ne.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=We.getMin(t,r),a=We.getMax(t,r),s=We.getMin(e,n),l=We.getMax(e,n);this.updateVal(Ke.data,"startx",i,Math.min),this.updateVal(Ke.data,"starty",s,Math.min),this.updateVal(Ke.data,"stopx",a,Math.max),this.updateVal(Ke.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=bE(t.from).length||0,a=n.x+n.width/2+(i-1)*Ne.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ne.activationWidth,stopy:void 0,actor:t.from,anchored:si.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:Ke.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=We.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},XGe=o(async function(t,e){Ke.bumpVerticalPos(Ne.boxMargin),e.height=Ne.boxMargin,e.starty=Ke.getVerticalPos();let r=wl();r.x=e.startx,r.y=e.starty,r.width=e.width||Ne.width,r.class="note";let n=t.append("g"),i=si.drawRect(n,r),a=Ky();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Ne.noteFontFamily,a.fontSize=Ne.noteFontSize,a.fontWeight=Ne.noteFontWeight,a.anchor=Ne.noteAlign,a.textMargin=Ne.noteMargin,a.valign="center";let s=Ni(a.text)?await bx(n,a):_0(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Ne.noteMargin),e.height+=l+2*Ne.noteMargin,Ke.bumpVerticalPos(l+2*Ne.noteMargin),e.stopy=e.starty+l+2*Ne.noteMargin,e.stopx=e.startx+r.width,Ke.insert(e.startx,e.starty,e.stopx,e.stopy),Ke.models.addNote(e)},"drawNote"),L0=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),Pg=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),xO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(jGe,"boundMessage");KGe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Lt.calculateTextDimensions(l,L0(Ne)),p=Ky();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Ne.messageFontFamily,p.fontSize=Ne.messageFontSize,p.fontWeight=Ne.messageFontWeight,p.anchor=Ne.messageAlign,p.valign="center",p.textMargin=Ne.wrapPadding,p.tspan=!1,Ni(p.text)?await bx(t,p,{startx:i,stopx:a,starty:r}):_0(t,p);let m=d.width,g;i===a?Ne.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+We.getMax(Ne.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Ne.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Ne.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),QGe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||Ke.models.addBox(h),u+=Ne.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Ne.width,p.height=We.getMax(p.height||Ne.height,Ne.height),p.margin=p.margin||Ne.actorMargin,f=We.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=Ke.getVerticalPos(),Ke.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,Ke.models.addActor(p)}h&&!s&&Ke.models.addBox(h),Ke.bumpVerticalPos(f)},"addActorRenderingData"),bO=o(async function(t,e,r,n){if(n){let i=0;Ke.bumpVerticalPos(Ne.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=Ke.getVerticalPos());let l=await si.drawActor(t,s,Ne,!0);i=We.getMax(i,l)}Ke.bumpVerticalPos(i+Ne.boxMargin)}else for(let i of r){let a=e.get(i);await si.drawActor(t,a,Ne,!1)}},"drawActors"),fhe=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=t$e(l),h=si.drawPopup(t,l,u,Ne,Ne.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),dhe=o(function(t){On(Ne,t),t.fontFamily&&(Ne.actorFontFamily=Ne.noteFontFamily=Ne.messageFontFamily=t.fontFamily),t.fontSize&&(Ne.actorFontSize=Ne.noteFontSize=Ne.messageFontSize=t.fontSize),t.fontWeight&&(Ne.actorFontWeight=Ne.noteFontWeight=Ne.messageFontWeight=t.fontWeight)},"setConf"),bE=o(function(t){return Ke.activations.filter(function(e){return e.actor===t})},"actorActivations"),hhe=o(function(t,e){let r=e.get(t),n=bE(t),i=n.reduce(function(s,l){return We.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return We.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(Fc,"adjustLoopHeightForWrap");o(ZGe,"adjustCreatedDestroyedData");JGe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=de();Ne=a;let s;i==="sandbox"&&(s=$e("#i"+e));let l=i==="sandbox"?$e(s.nodes()[0].contentDocument.body):$e("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;Ke.init(),V.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):$e(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await e$e(f,y,n);if(Ne.height=await r$e(f,w,m),si.insertComputerIcon(h),si.insertDatabaseIcon(h),si.insertClockIcon(h),x&&(Ke.bumpVerticalPos(Ne.boxMargin),b&&Ke.bumpVerticalPos(m[0].textMaxHeight)),Ne.hideUnusedParticipants===!0){let F=new Set;y.forEach(B=>{F.add(B.from),F.add(B.to)}),g=g.filter(B=>F.has(B))}QGe(h,f,d,g,0,y,!1);let S=await a$e(y,f,w,n);si.insertArrowHead(h),si.insertArrowCrossHead(h),si.insertArrowFilledHead(h),si.insertSequenceNumber(h);function T(F,B){let $=Ke.endActivation(F);$.starty+18>B&&($.starty=B-6,B+=12),si.drawActivation(h,$,B,Ne,bE(F.from).length),Ke.insert($.startx,B-10,$.stopx,B)}o(T,"activeEnd");let E=1,_=1,A=[],L=[],M=0;for(let F of y){let B,$,z;switch(F.type){case n.db.LINETYPE.NOTE:Ke.resetVerticalPos(),$=F.noteModel,await XGe(h,$);break;case n.db.LINETYPE.ACTIVE_START:Ke.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,Ke.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Fc(S,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,Y=>Ke.newLoop(Y));break;case n.db.LINETYPE.LOOP_END:B=Ke.endLoop(),await si.drawLoop(h,B,"loop",Ne),Ke.bumpVerticalPos(B.stopy-Ke.getVerticalPos()),Ke.models.addLoop(B);break;case n.db.LINETYPE.RECT_START:Fc(S,F,Ne.boxMargin,Ne.boxMargin,Y=>Ke.newLoop(void 0,Y.message));break;case n.db.LINETYPE.RECT_END:B=Ke.endLoop(),L.push(B),Ke.models.addLoop(B),Ke.bumpVerticalPos(B.stopy-Ke.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Fc(S,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,Y=>Ke.newLoop(Y));break;case n.db.LINETYPE.OPT_END:B=Ke.endLoop(),await si.drawLoop(h,B,"opt",Ne),Ke.bumpVerticalPos(B.stopy-Ke.getVerticalPos()),Ke.models.addLoop(B);break;case n.db.LINETYPE.ALT_START:Fc(S,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,Y=>Ke.newLoop(Y));break;case n.db.LINETYPE.ALT_ELSE:Fc(S,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,Y=>Ke.addSectionToLoop(Y));break;case n.db.LINETYPE.ALT_END:B=Ke.endLoop(),await si.drawLoop(h,B,"alt",Ne),Ke.bumpVerticalPos(B.stopy-Ke.getVerticalPos()),Ke.models.addLoop(B);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:Fc(S,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,Y=>Ke.newLoop(Y)),Ke.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:Fc(S,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,Y=>Ke.addSectionToLoop(Y));break;case n.db.LINETYPE.PAR_END:B=Ke.endLoop(),await si.drawLoop(h,B,"par",Ne),Ke.bumpVerticalPos(B.stopy-Ke.getVerticalPos()),Ke.models.addLoop(B);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,_=F.message.step||_,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Fc(S,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,Y=>Ke.newLoop(Y));break;case n.db.LINETYPE.CRITICAL_OPTION:Fc(S,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,Y=>Ke.addSectionToLoop(Y));break;case n.db.LINETYPE.CRITICAL_END:B=Ke.endLoop(),await si.drawLoop(h,B,"critical",Ne),Ke.bumpVerticalPos(B.stopy-Ke.getVerticalPos()),Ke.models.addLoop(B);break;case n.db.LINETYPE.BREAK_START:Fc(S,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,Y=>Ke.newLoop(Y));break;case n.db.LINETYPE.BREAK_END:B=Ke.endLoop(),await si.drawLoop(h,B,"break",Ne),Ke.bumpVerticalPos(B.stopy-Ke.getVerticalPos()),Ke.models.addLoop(B);break;default:try{z=F.msgModel,z.starty=Ke.getVerticalPos(),z.sequenceIndex=E,z.sequenceVisible=n.db.showSequenceNumbers();let Y=await jGe(h,z);ZGe(F,z,Y,M,f,d,p),A.push({messageModel:z,lineStartY:Y}),Ke.models.addMessage(z)}catch(Y){V.error("error while drawing message",Y)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+_),M++}V.debug("createdActors",d),V.debug("destroyedActors",p),await bO(h,f,g,!1);for(let F of A)await KGe(h,F.messageModel,F.lineStartY,n);Ne.mirrorActors&&await bO(h,f,g,!0),L.forEach(F=>si.drawBackgroundRect(h,F)),yO(h,f,g,Ne);for(let F of Ke.models.boxes)F.height=Ke.getVerticalPos()-F.y,Ke.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",si.drawBox(h,F,Ne);x&&Ke.bumpVerticalPos(Ne.boxMargin);let N=fhe(h,f,g,u),{bounds:k}=Ke.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let I=k.stopy-k.starty;I2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Ne.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Lt.wrapLabel(t.message,We.getMax(m+2*Ne.wrapPadding,Ne.width),L0(Ne)));let g=Lt.calculateTextDimensions(t.message,L0(Ne));return{width:We.getMax(t.wrap?0:g.width+2*Ne.wrapPadding,m+2*Ne.wrapPadding,Ne.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),a$e=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.id=Lt.random({length:10}),h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=bE(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ne.activationWidth/2,g={startx:m,stopx:m+Ne.activationWidth,actor:h.from,enabled:!0};Ke.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=Ke.activations.map(p=>p.actor).lastIndexOf(h.from);Ke.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await n$e(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=We.getMin(s.from,l.startx),s.to=We.getMax(s.to,l.startx+l.width),s.width=We.getMax(s.width,Math.abs(s.from-s.to))-Ne.labelBoxWidth})):(u=i$e(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=We.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=We.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=We.getMax(s.width,Math.abs(s.to-s.from))-Ne.labelBoxWidth}else s.from=We.getMin(u.startx,s.from),s.to=We.getMax(u.stopx,s.to),s.width=We.getMax(s.width,u.width)-Ne.labelBoxWidth}))}return Ke.activations=[],V.debug("Loop type widths:",i),i},"calculateLoopBounds"),phe={bounds:Ke,drawActors:bO,drawActorsPopup:fhe,setConf:dhe,draw:JGe}});var ghe={};hr(ghe,{diagram:()=>s$e});var s$e,yhe=R(()=>{"use strict";que();the();nhe();mhe();s$e={parser:Wue,db:pO,renderer:phe,styles:rhe,init:o(({wrap:t})=>{pO.setWrap(t)},"init")}});var wO,wE,TO=R(()=>{"use strict";wO=function(){var t=o(function(Pe,_e,me,W){for(me=me||{},W=Pe.length;W--;me[Pe[W]]=_e);return me},"o"),e=[1,17],r=[1,18],n=[1,19],i=[1,39],a=[1,40],s=[1,25],l=[1,23],u=[1,24],h=[1,31],f=[1,32],d=[1,33],p=[1,34],m=[1,35],g=[1,36],y=[1,26],v=[1,27],x=[1,28],b=[1,29],w=[1,43],S=[1,30],T=[1,42],E=[1,44],_=[1,41],A=[1,45],L=[1,9],M=[1,8,9],N=[1,56],k=[1,57],I=[1,58],C=[1,59],O=[1,60],D=[1,61],P=[1,62],F=[1,8,9,39],B=[1,74],$=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],z=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],Y=[13,74,80,95,97,98],Q=[13,64,65,74,80,95,97,98],X=[13,59,60,61,62,63,74,80,95,97,98],ie=[1,93],j=[1,110],J=[1,108],Z=[1,102],H=[1,103],q=[1,104],K=[1,105],se=[1,106],ce=[1,107],ue=[1,109],te=[1,8,9,37,39,42],De=[1,8,9,21],oe=[1,8,9,78],ke=[1,8,9,21,73,74,78,80,81,82,83,84,85],Ie={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:o(function(_e,me,W,fe,ge,re,he){var ne=re.length-1;switch(ge){case 8:this.$=re[ne-1];break;case 9:case 11:case 12:this.$=re[ne];break;case 10:case 13:this.$=re[ne-1]+re[ne];break;case 14:case 15:this.$=re[ne-1]+"~"+re[ne]+"~";break;case 16:fe.addRelation(re[ne]);break;case 17:re[ne-1].title=fe.cleanupLabel(re[ne]),fe.addRelation(re[ne-1]);break;case 27:this.$=re[ne].trim(),fe.setAccTitle(this.$);break;case 28:case 29:this.$=re[ne].trim(),fe.setAccDescription(this.$);break;case 30:fe.addClassesToNamespace(re[ne-3],re[ne-1]);break;case 31:fe.addClassesToNamespace(re[ne-4],re[ne-1]);break;case 32:this.$=re[ne],fe.addNamespace(re[ne]);break;case 33:this.$=[re[ne]];break;case 34:this.$=[re[ne-1]];break;case 35:re[ne].unshift(re[ne-2]),this.$=re[ne];break;case 37:fe.setCssClass(re[ne-2],re[ne]);break;case 38:fe.addMembers(re[ne-3],re[ne-1]);break;case 39:fe.setCssClass(re[ne-5],re[ne-3]),fe.addMembers(re[ne-5],re[ne-1]);break;case 40:this.$=re[ne],fe.addClass(re[ne]);break;case 41:this.$=re[ne-1],fe.addClass(re[ne-1]),fe.setClassLabel(re[ne-1],re[ne]);break;case 42:fe.addAnnotation(re[ne],re[ne-2]);break;case 43:this.$=[re[ne]];break;case 44:re[ne].push(re[ne-1]),this.$=re[ne];break;case 45:break;case 46:fe.addMember(re[ne-1],fe.cleanupLabel(re[ne]));break;case 47:break;case 48:break;case 49:this.$={id1:re[ne-2],id2:re[ne],relation:re[ne-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:re[ne-3],id2:re[ne],relation:re[ne-1],relationTitle1:re[ne-2],relationTitle2:"none"};break;case 51:this.$={id1:re[ne-3],id2:re[ne],relation:re[ne-2],relationTitle1:"none",relationTitle2:re[ne-1]};break;case 52:this.$={id1:re[ne-4],id2:re[ne],relation:re[ne-2],relationTitle1:re[ne-3],relationTitle2:re[ne-1]};break;case 53:fe.addNote(re[ne],re[ne-1]);break;case 54:fe.addNote(re[ne]);break;case 55:fe.setDirection("TB");break;case 56:fe.setDirection("BT");break;case 57:fe.setDirection("RL");break;case 58:fe.setDirection("LR");break;case 59:this.$={type1:re[ne-2],type2:re[ne],lineType:re[ne-1]};break;case 60:this.$={type1:"none",type2:re[ne],lineType:re[ne-1]};break;case 61:this.$={type1:re[ne-1],type2:"none",lineType:re[ne]};break;case 62:this.$={type1:"none",type2:"none",lineType:re[ne]};break;case 63:this.$=fe.relationType.AGGREGATION;break;case 64:this.$=fe.relationType.EXTENSION;break;case 65:this.$=fe.relationType.COMPOSITION;break;case 66:this.$=fe.relationType.DEPENDENCY;break;case 67:this.$=fe.relationType.LOLLIPOP;break;case 68:this.$=fe.lineType.LINE;break;case 69:this.$=fe.lineType.DOTTED_LINE;break;case 70:case 76:this.$=re[ne-2],fe.setClickEvent(re[ne-1],re[ne]);break;case 71:case 77:this.$=re[ne-3],fe.setClickEvent(re[ne-2],re[ne-1]),fe.setTooltip(re[ne-2],re[ne]);break;case 72:this.$=re[ne-2],fe.setLink(re[ne-1],re[ne]);break;case 73:this.$=re[ne-3],fe.setLink(re[ne-2],re[ne-1],re[ne]);break;case 74:this.$=re[ne-3],fe.setLink(re[ne-2],re[ne-1]),fe.setTooltip(re[ne-2],re[ne]);break;case 75:this.$=re[ne-4],fe.setLink(re[ne-3],re[ne-2],re[ne]),fe.setTooltip(re[ne-3],re[ne-1]);break;case 78:this.$=re[ne-3],fe.setClickEvent(re[ne-2],re[ne-1],re[ne]);break;case 79:this.$=re[ne-4],fe.setClickEvent(re[ne-3],re[ne-2],re[ne-1]),fe.setTooltip(re[ne-3],re[ne]);break;case 80:this.$=re[ne-3],fe.setLink(re[ne-2],re[ne]);break;case 81:this.$=re[ne-4],fe.setLink(re[ne-3],re[ne-1],re[ne]);break;case 82:this.$=re[ne-4],fe.setLink(re[ne-3],re[ne-1]),fe.setTooltip(re[ne-3],re[ne]);break;case 83:this.$=re[ne-5],fe.setLink(re[ne-4],re[ne-2],re[ne]),fe.setTooltip(re[ne-4],re[ne-1]);break;case 84:this.$=re[ne-2],fe.setCssStyle(re[ne-1],re[ne]);break;case 85:fe.setCssClass(re[ne-1],re[ne]);break;case 86:this.$=[re[ne]];break;case 87:re[ne-2].push(re[ne]),this.$=re[ne-2];break;case 89:this.$=re[ne-1]+re[ne];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:r,35:n,36:21,40:i,41:22,44:a,45:s,47:l,48:u,50:h,52:f,53:d,54:p,55:m,56:g,66:y,67:v,69:x,73:b,74:w,76:S,80:T,95:E,97:_,98:A},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(L,[2,5],{8:[1,46]}),{8:[1,47]},t(M,[2,16],{21:[1,48]}),t(M,[2,18]),t(M,[2,19]),t(M,[2,20]),t(M,[2,21]),t(M,[2,22]),t(M,[2,23]),t(M,[2,24]),t(M,[2,25]),t(M,[2,26]),{32:[1,49]},{34:[1,50]},t(M,[2,29]),t(M,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:N,60:k,61:I,62:C,63:O,64:D,65:P}),{37:[1,63]},t(F,[2,36],{37:[1,65],42:[1,64]}),t(M,[2,47]),t(M,[2,48]),{16:66,74:w,80:T,95:E,97:_},{16:37,17:67,18:38,74:w,80:T,95:E,97:_,98:A},{16:37,17:68,18:38,74:w,80:T,95:E,97:_,98:A},{16:37,17:69,18:38,74:w,80:T,95:E,97:_,98:A},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:w,80:T,95:E,97:_,98:A},{13:B,51:73},t(M,[2,55]),t(M,[2,56]),t(M,[2,57]),t(M,[2,58]),t($,[2,11],{16:37,18:38,17:75,19:[1,76],74:w,80:T,95:E,97:_,98:A}),t($,[2,12],{19:[1,77]}),{15:78,16:79,74:w,80:T,95:E,97:_},{16:37,17:80,18:38,74:w,80:T,95:E,97:_,98:A},t(z,[2,112]),t(z,[2,113]),t(z,[2,114]),t(z,[2,115]),t([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),t(L,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:e,33:r,35:n,40:i,44:a,45:s,47:l,48:u,50:h,52:f,53:d,54:p,55:m,56:g,66:y,67:v,69:x,73:b,74:w,76:S,80:T,95:E,97:_,98:A}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:r,35:n,36:21,40:i,41:22,44:a,45:s,47:l,48:u,50:h,52:f,53:d,54:p,55:m,56:g,66:y,67:v,69:x,73:b,74:w,76:S,80:T,95:E,97:_,98:A},t(M,[2,17]),t(M,[2,27]),t(M,[2,28]),{13:[1,84],16:37,17:83,18:38,74:w,80:T,95:E,97:_,98:A},{49:85,57:54,58:55,59:N,60:k,61:I,62:C,63:O,64:D,65:P},t(M,[2,46]),{58:86,64:D,65:P},t(Y,[2,62],{57:87,59:N,60:k,61:I,62:C,63:O}),t(Q,[2,63]),t(Q,[2,64]),t(Q,[2,65]),t(Q,[2,66]),t(Q,[2,67]),t(X,[2,68]),t(X,[2,69]),{8:[1,89],23:90,38:88,41:22,44:a},{16:91,74:w,80:T,95:E,97:_},{43:92,47:ie},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:j,73:J,74:Z,75:99,77:100,79:101,80:H,81:q,82:K,83:se,84:ce,85:ue},{74:[1,111]},{13:B,51:112},t(M,[2,54]),t(M,[2,117]),t($,[2,13]),t($,[2,14]),t($,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:w,80:T,95:E,97:_},t(te,[2,40],{11:114,12:[1,115]}),t(L,[2,7]),{9:[1,116]},t(De,[2,49]),{16:37,17:117,18:38,74:w,80:T,95:E,97:_,98:A},{13:[1,119],16:37,17:118,18:38,74:w,80:T,95:E,97:_,98:A},t(Y,[2,61],{57:120,59:N,60:k,61:I,62:C,63:O}),t(Y,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:a},{8:[1,123],39:[2,33]},t(F,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:ie},{16:37,17:127,18:38,74:w,80:T,95:E,97:_,98:A},t(M,[2,70],{13:[1,128]}),t(M,[2,72],{13:[1,130],68:[1,129]}),t(M,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},t(M,[2,84],{78:[1,134]}),t(oe,[2,86],{79:135,21:j,73:J,74:Z,80:H,81:q,82:K,83:se,84:ce,85:ue}),t(ke,[2,88]),t(ke,[2,90]),t(ke,[2,91]),t(ke,[2,92]),t(ke,[2,93]),t(ke,[2,94]),t(ke,[2,95]),t(ke,[2,96]),t(ke,[2,97]),t(ke,[2,98]),t(M,[2,85]),t(M,[2,53]),{37:[2,10]},t(te,[2,41]),{13:[1,136]},{1:[2,4]},t(De,[2,51]),t(De,[2,50]),{16:37,17:137,18:38,74:w,80:T,95:E,97:_,98:A},t(Y,[2,59]),t(M,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:a},{43:140,47:ie},t(F,[2,38]),{39:[2,44]},t(M,[2,42]),t(M,[2,71]),t(M,[2,73]),t(M,[2,74],{68:[1,141]}),t(M,[2,77]),t(M,[2,78],{13:[1,142]}),t(M,[2,80],{13:[1,144],68:[1,143]}),{21:j,73:J,74:Z,77:145,79:101,80:H,81:q,82:K,83:se,84:ce,85:ue},t(ke,[2,89]),{14:[1,146]},t(De,[2,52]),t(M,[2,31]),{39:[2,35]},{39:[1,147]},t(M,[2,75]),t(M,[2,79]),t(M,[2,81]),t(M,[2,82],{68:[1,148]}),t(oe,[2,87],{79:135,21:j,73:J,74:Z,80:H,81:q,82:K,83:se,84:ce,85:ue}),t(te,[2,8]),t(F,[2,39]),t(M,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:o(function(_e,me){if(me.recoverable)this.trace(_e);else{var W=new Error(_e);throw W.hash=me,W}},"parseError"),parse:o(function(_e){var me=this,W=[0],fe=[],ge=[null],re=[],he=this.table,ne="",ae=0,we=0,Te=0,Ce=2,Ae=1,Ge=re.slice.call(arguments,1),Me=Object.create(this.lexer),ye={yy:{}};for(var He in this.yy)Object.prototype.hasOwnProperty.call(this.yy,He)&&(ye.yy[He]=this.yy[He]);Me.setInput(_e,ye.yy),ye.yy.lexer=Me,ye.yy.parser=this,typeof Me.yylloc>"u"&&(Me.yylloc={});var ze=Me.yylloc;re.push(ze);var Ze=Me.options&&Me.options.ranges;typeof ye.yy.parseError=="function"?this.parseError=ye.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function gt(mt){W.length=W.length-2*mt,ge.length=ge.length-mt,re.length=re.length-mt}o(gt,"popStack");function yt(){var mt;return mt=fe.pop()||Me.lex()||Ae,typeof mt!="number"&&(mt instanceof Array&&(fe=mt,mt=fe.pop()),mt=me.symbols_[mt]||mt),mt}o(yt,"lex");for(var tt,Ye,Je,Ve,je,kt,at={},xt,it,dt,lt;;){if(Je=W[W.length-1],this.defaultActions[Je]?Ve=this.defaultActions[Je]:((tt===null||typeof tt>"u")&&(tt=yt()),Ve=he[Je]&&he[Je][tt]),typeof Ve>"u"||!Ve.length||!Ve[0]){var It="";lt=[];for(xt in he[Je])this.terminals_[xt]&&xt>Ce&<.push("'"+this.terminals_[xt]+"'");Me.showPosition?It="Parse error on line "+(ae+1)+`: +`+Me.showPosition()+` +Expecting `+lt.join(", ")+", got '"+(this.terminals_[tt]||tt)+"'":It="Parse error on line "+(ae+1)+": Unexpected "+(tt==Ae?"end of input":"'"+(this.terminals_[tt]||tt)+"'"),this.parseError(It,{text:Me.match,token:this.terminals_[tt]||tt,line:Me.yylineno,loc:ze,expected:lt})}if(Ve[0]instanceof Array&&Ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Je+", token: "+tt);switch(Ve[0]){case 1:W.push(tt),ge.push(Me.yytext),re.push(Me.yylloc),W.push(Ve[1]),tt=null,Ye?(tt=Ye,Ye=null):(we=Me.yyleng,ne=Me.yytext,ae=Me.yylineno,ze=Me.yylloc,Te>0&&Te--);break;case 2:if(it=this.productions_[Ve[1]][1],at.$=ge[ge.length-it],at._$={first_line:re[re.length-(it||1)].first_line,last_line:re[re.length-1].last_line,first_column:re[re.length-(it||1)].first_column,last_column:re[re.length-1].last_column},Ze&&(at._$.range=[re[re.length-(it||1)].range[0],re[re.length-1].range[1]]),kt=this.performAction.apply(at,[ne,we,ae,ye.yy,Ve[1],ge,re].concat(Ge)),typeof kt<"u")return kt;it&&(W=W.slice(0,-1*it*2),ge=ge.slice(0,-1*it),re=re.slice(0,-1*it)),W.push(this.productions_[Ve[1]][0]),ge.push(at.$),re.push(at._$),dt=he[W[W.length-2]][W[W.length-1]],W.push(dt);break;case 3:return!0}}return!0},"parse")},Se=function(){var Pe={EOF:1,parseError:o(function(me,W){if(this.yy.parser)this.yy.parser.parseError(me,W);else throw new Error(me)},"parseError"),setInput:o(function(_e,me){return this.yy=me||this.yy||{},this._input=_e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var _e=this._input[0];this.yytext+=_e,this.yyleng++,this.offset++,this.match+=_e,this.matched+=_e;var me=_e.match(/(?:\r\n?|\n).*/g);return me?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_e},"input"),unput:o(function(_e){var me=_e.length,W=_e.split(/(?:\r\n?|\n)/g);this._input=_e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-me),this.offset-=me;var fe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),W.length-1&&(this.yylineno-=W.length-1);var ge=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:W?(W.length===fe.length?this.yylloc.first_column:0)+fe[fe.length-W.length].length-W[0].length:this.yylloc.first_column-me},this.options.ranges&&(this.yylloc.range=[ge[0],ge[0]+this.yyleng-me]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(_e){this.unput(this.match.slice(_e))},"less"),pastInput:o(function(){var _e=this.matched.substr(0,this.matched.length-this.match.length);return(_e.length>20?"...":"")+_e.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var _e=this.match;return _e.length<20&&(_e+=this._input.substr(0,20-_e.length)),(_e.substr(0,20)+(_e.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var _e=this.pastInput(),me=new Array(_e.length+1).join("-");return _e+this.upcomingInput()+` +`+me+"^"},"showPosition"),test_match:o(function(_e,me){var W,fe,ge;if(this.options.backtrack_lexer&&(ge={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ge.yylloc.range=this.yylloc.range.slice(0))),fe=_e[0].match(/(?:\r\n?|\n).*/g),fe&&(this.yylineno+=fe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:fe?fe[fe.length-1].length-fe[fe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_e[0].length},this.yytext+=_e[0],this.match+=_e[0],this.matches=_e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_e[0].length),this.matched+=_e[0],W=this.performAction.call(this,this.yy,this,me,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),W)return W;if(this._backtrack){for(var re in ge)this[re]=ge[re];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _e,me,W,fe;this._more||(this.yytext="",this.match="");for(var ge=this._currentRules(),re=0;reme[0].length)){if(me=W,fe=re,this.options.backtrack_lexer){if(_e=this.test_match(W,ge[re]),_e!==!1)return _e;if(this._backtrack){me=!1;continue}else return!1}else if(!this.options.flex)break}return me?(_e=this.test_match(me,ge[fe]),_e!==!1?_e:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var me=this.next();return me||this.lex()},"lex"),begin:o(function(me){this.conditionStack.push(me)},"begin"),popState:o(function(){var me=this.conditionStack.length-1;return me>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(me){return me=this.conditionStack.length-1-Math.abs(me||0),me>=0?this.conditionStack[me]:"INITIAL"},"topState"),pushState:o(function(me){this.begin(me)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(me,W,fe,ge){var re=ge;switch(fe){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:break;case 5:break;case 6:return this.begin("acc_title"),31;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),33;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 22:this.popState();break;case 23:return 71;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;break;case 29:return this.popState(),8;break;case 30:break;case 31:return this.begin("namespace-body"),37;break;case 32:return this.popState(),39;break;case 33:return"EOF_IN_STRUCT";case 34:return 8;case 35:break;case 36:return"EDGE_STATE";case 37:return this.begin("class"),44;break;case 38:return this.popState(),8;break;case 39:break;case 40:return this.popState(),this.popState(),39;break;case 41:return this.begin("class-body"),37;break;case 42:return this.popState(),39;break;case 43:return"EOF_IN_STRUCT";case 44:return"EDGE_STATE";case 45:return"OPEN_IN_STRUCT";case 46:break;case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 57:this.popState();break;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 60:this.popState();break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:return 68;case 64:return 68;case 65:return 68;case 66:return 68;case 67:return 60;case 68:return 60;case 69:return 62;case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:return 84;case 84:return 84;case 85:return 85;case 86:return"EQUALS";case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:return 83;case 95:return 83;case 96:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],inclusive:!0}}};return Pe}();Ie.lexer=Se;function Ue(){this.yy={}}return o(Ue,"Parser"),Ue.prototype=Ie,Ie.Parser=Ue,new Ue}();wO.parser=wO;wE=wO});var bhe,wx,whe=R(()=>{"use strict";_t();rr();bhe=["#","+","~","-",""],wx=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="";let n=qr(e,de());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+gh(this.id);this.memberType==="method"&&(e+=`(${gh(this.parameters.trim())})`,this.returnType&&(e+=" : "+gh(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let i=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(i){let a=i[1]?i[1].trim():"";if(bhe.includes(a)&&(this.visibility=a),this.id=i[2].trim(),this.parameters=i[3]?i[3].trim():"",r=i[4]?i[4].trim():"",this.returnType=i[5]?i[5].trim():"",r===""){let s=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(s)&&(r=s,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let n=e.length,i=e.substring(0,1),a=e.substring(n-1);bhe.includes(i)&&(this.visibility=i),/[$*]/.exec(a)&&(r=a),this.id=e.substring(this.visibility===""?0:1,r===""?n:n-1)}this.classifier=r}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var EE,EO,Gi,TE,The,qu,kO,Tx,D0,R0,u$e,kE,khe,h$e,f$e,d$e,p$e,m$e,g$e,y$e,Ehe,v$e,x$e,b$e,CO,w$e,T$e,k$e,E$e,C$e,S$e,A$e,_$e,Che,SO,L$e,D$e,R$e,N$e,M$e,I$e,O$e,Bg,AO=R(()=>{"use strict";Zt();ut();_t();rr();xr();bi();whe();EE="classId-",EO=[],Gi=new Map,TE=[],The=0,qu=new Map,kO=0,Tx=[],D0=o(t=>We.sanitizeText(t,de()),"sanitizeText"),R0=o(function(t){let e=We.sanitizeText(t,de()),r="",n=e;if(e.indexOf("~")>0){let i=e.split("~");n=D0(i[0]),r=D0(i[1])}return{className:n,type:r}},"splitClassNameAndType"),u$e=o(function(t,e){let r=We.sanitizeText(t,de());e&&(e=D0(e));let{className:n}=R0(r);Gi.get(n).label=e},"setClassLabel"),kE=o(function(t){let e=We.sanitizeText(t,de()),{className:r,type:n}=R0(e);if(Gi.has(r))return;let i=We.sanitizeText(r,de());Gi.set(i,{id:i,type:n,label:i,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:EE+i+"-"+The}),The++},"addClass"),khe=o(function(t){let e=We.sanitizeText(t,de());if(Gi.has(e))return Gi.get(e).domId;throw new Error("Class not found: "+e)},"lookUpDomId"),h$e=o(function(){EO=[],Gi=new Map,TE=[],Tx=[],Tx.push(Che),qu=new Map,kO=0,SO="TB",vr()},"clear"),f$e=o(function(t){return Gi.get(t)},"getClass"),d$e=o(function(){return Gi},"getClasses"),p$e=o(function(){return EO},"getRelations"),m$e=o(function(){return TE},"getNotes"),g$e=o(function(t){V.debug("Adding relation: "+JSON.stringify(t)),kE(t.id1),kE(t.id2),t.id1=R0(t.id1).className,t.id2=R0(t.id2).className,t.relationTitle1=We.sanitizeText(t.relationTitle1.trim(),de()),t.relationTitle2=We.sanitizeText(t.relationTitle2.trim(),de()),EO.push(t)},"addRelation"),y$e=o(function(t,e){let r=R0(t).className;Gi.get(r).annotations.push(e)},"addAnnotation"),Ehe=o(function(t,e){kE(t);let r=R0(t).className,n=Gi.get(r);if(typeof e=="string"){let i=e.trim();i.startsWith("<<")&&i.endsWith(">>")?n.annotations.push(D0(i.substring(2,i.length-2))):i.indexOf(")")>0?n.methods.push(new wx(i,"method")):i&&n.members.push(new wx(i,"attribute"))}},"addMember"),v$e=o(function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach(r=>Ehe(t,r)))},"addMembers"),x$e=o(function(t,e){let r={id:`note${TE.length}`,class:e,text:t};TE.push(r)},"addNote"),b$e=o(function(t){return t.startsWith(":")&&(t=t.substring(1)),D0(t.trim())},"cleanupLabel"),CO=o(function(t,e){t.split(",").forEach(function(r){let n=r;/\d/.exec(r[0])&&(n=EE+n);let i=Gi.get(n);i&&i.cssClasses.push(e)})},"setCssClass"),w$e=o(function(t,e){t.split(",").forEach(function(r){e!==void 0&&(Gi.get(r).tooltip=D0(e))})},"setTooltip"),T$e=o(function(t,e){return e&&qu.has(e)?qu.get(e).classes.get(t).tooltip:Gi.get(t).tooltip},"getTooltip"),k$e=o(function(t,e,r){let n=de();t.split(",").forEach(function(i){let a=i;/\d/.exec(i[0])&&(a=EE+a);let s=Gi.get(a);s&&(s.link=Lt.formatUrl(e,n),n.securityLevel==="sandbox"?s.linkTarget="_top":typeof r=="string"?s.linkTarget=D0(r):s.linkTarget="_blank")}),CO(t,"clickable")},"setLink"),E$e=o(function(t,e,r){t.split(",").forEach(function(n){C$e(n,e,r),Gi.get(n).haveCallback=!0}),CO(t,"clickable")},"setClickEvent"),C$e=o(function(t,e,r){let n=We.sanitizeText(t,de());if(de().securityLevel!=="loose"||e===void 0)return;let a=n;if(Gi.has(a)){let s=khe(a),l=[];if(typeof r=="string"){l=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let u=0;u")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),$e(this).classed("hover",!1)})},"setupToolTips");Tx.push(Che);SO="TB",L$e=o(()=>SO,"getDirection"),D$e=o(t=>{SO=t},"setDirection"),R$e=o(function(t){qu.has(t)||(qu.set(t,{id:t,classes:new Map,children:{},domId:EE+t+"-"+kO}),kO++)},"addNamespace"),N$e=o(function(t){return qu.get(t)},"getNamespace"),M$e=o(function(){return qu},"getNamespaces"),I$e=o(function(t,e){if(qu.has(t))for(let r of e){let{className:n}=R0(r);Gi.get(n).parent=t,qu.get(t).classes.set(n,Gi.get(n))}},"addClassesToNamespace"),O$e=o(function(t,e){let r=Gi.get(t);if(!(!e||!r))for(let n of e)n.includes(",")?r.styles.push(...n.split(",")):r.styles.push(n)},"setCssStyle"),Bg={setAccTitle:kr,getAccTitle:Ar,getAccDescription:Lr,setAccDescription:_r,getConfig:o(()=>de().class,"getConfig"),addClass:kE,bindFunctions:S$e,clear:h$e,getClass:f$e,getClasses:d$e,getNotes:m$e,addAnnotation:y$e,addNote:x$e,getRelations:p$e,addRelation:g$e,getDirection:L$e,setDirection:D$e,addMember:Ehe,addMembers:v$e,cleanupLabel:b$e,lineType:A$e,relationType:_$e,setClickEvent:E$e,setCssClass:CO,setLink:k$e,getTooltip:T$e,setTooltip:w$e,lookUpDomId:khe,setDiagramTitle:nn,getDiagramTitle:Xr,setClassLabel:u$e,addNamespace:R$e,addClassesToNamespace:I$e,getNamespace:N$e,getNamespaces:M$e,setCssStyle:O$e}});var P$e,CE,_O=R(()=>{"use strict";P$e=o(t=>`g.classGroup text { + fill: ${t.nodeBorder||t.classText}; + stroke: none; + font-family: ${t.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${t.classText}; +} +.edgeLabel .label rect { + fill: ${t.mainBkg}; +} +.label text { + fill: ${t.classText}; +} +.edgeLabel .label span { + background: ${t.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.classGroup line { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${t.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${t.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),CE=P$e});var She,B$e,F$e,_he,z$e,Ahe,SE,Lhe=R(()=>{"use strict";Zt();xr();ut();rr();She=0,B$e=o(function(t,e,r,n,i){let a=o(function(b){switch(b){case i.db.relationType.AGGREGATION:return"aggregation";case i.db.relationType.EXTENSION:return"extension";case i.db.relationType.COMPOSITION:return"composition";case i.db.relationType.DEPENDENCY:return"dependency";case i.db.relationType.LOLLIPOP:return"lollipop"}},"getRelationType");e.points=e.points.filter(b=>!Number.isNaN(b.y));let s=e.points,l=ha().x(function(b){return b.x}).y(function(b){return b.y}).curve(vs),u=t.append("path").attr("d",l(s)).attr("id","edge"+She).attr("class","relation"),h="";n.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),r.relation.lineType==1&&u.attr("class","relation dashed-line"),r.relation.lineType==10&&u.attr("class","relation dotted-line"),r.relation.type1!=="none"&&u.attr("marker-start","url("+h+"#"+a(r.relation.type1)+"Start)"),r.relation.type2!=="none"&&u.attr("marker-end","url("+h+"#"+a(r.relation.type2)+"End)");let f,d,p=e.points.length,m=Lt.calcLabelPosition(e.points);f=m.x,d=m.y;let g,y,v,x;if(p%2!==0&&p>1){let b=Lt.calcCardinalityPosition(r.relation.type1!=="none",e.points,e.points[0]),w=Lt.calcCardinalityPosition(r.relation.type2!=="none",e.points,e.points[p-1]);V.debug("cardinality_1_point "+JSON.stringify(b)),V.debug("cardinality_2_point "+JSON.stringify(w)),g=b.x,y=b.y,v=w.x,x=w.y}if(r.title!==void 0){let b=t.append("g").attr("class","classLabel"),w=b.append("text").attr("class","label").attr("x",f).attr("y",d).attr("fill","red").attr("text-anchor","middle").text(r.title);window.label=w;let S=w.node().getBBox();b.insert("rect",":first-child").attr("class","box").attr("x",S.x-n.padding/2).attr("y",S.y-n.padding/2).attr("width",S.width+n.padding).attr("height",S.height+n.padding)}V.info("Rendering relation "+JSON.stringify(r)),r.relationTitle1!==void 0&&r.relationTitle1!=="none"&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",g).attr("y",y).attr("fill","black").attr("font-size","6").text(r.relationTitle1),r.relationTitle2!==void 0&&r.relationTitle2!=="none"&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",v).attr("y",x).attr("fill","black").attr("font-size","6").text(r.relationTitle2),She++},"drawEdge"),F$e=o(function(t,e,r,n){V.debug("Rendering class ",e,r);let i=e.id,a={id:i,label:e.id,width:0,height:0},s=t.append("g").attr("id",n.db.lookUpDomId(i)).attr("class","classGroup"),l;e.link?l=s.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",r.textHeight+r.padding).attr("x",0):l=s.append("text").attr("y",r.textHeight+r.padding).attr("x",0);let u=!0;e.annotations.forEach(function(w){let S=l.append("tspan").text("\xAB"+w+"\xBB");u||S.attr("dy",r.textHeight),u=!1});let h=_he(e),f=l.append("tspan").text(h).attr("class","title");u||f.attr("dy",r.textHeight);let d=l.node().getBBox().height,p,m,g;if(e.members.length>0){p=s.append("line").attr("x1",0).attr("y1",r.padding+d+r.dividerMargin/2).attr("y2",r.padding+d+r.dividerMargin/2);let w=s.append("text").attr("x",r.padding).attr("y",d+r.dividerMargin+r.textHeight).attr("fill","white").attr("class","classText");u=!0,e.members.forEach(function(S){Ahe(w,S,u,r),u=!1}),m=w.node().getBBox()}if(e.methods.length>0){g=s.append("line").attr("x1",0).attr("y1",r.padding+d+r.dividerMargin+m.height).attr("y2",r.padding+d+r.dividerMargin+m.height);let w=s.append("text").attr("x",r.padding).attr("y",d+2*r.dividerMargin+m.height+r.textHeight).attr("fill","white").attr("class","classText");u=!0,e.methods.forEach(function(S){Ahe(w,S,u,r),u=!1})}let y=s.node().getBBox();var v=" ";e.cssClasses.length>0&&(v=v+e.cssClasses.join(" "));let b=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",y.width+2*r.padding).attr("height",y.height+r.padding+.5*r.dividerMargin).attr("class",v).node().getBBox().width;return l.node().childNodes.forEach(function(w){w.setAttribute("x",(b-w.getBBox().width)/2)}),e.tooltip&&l.insert("title").text(e.tooltip),p&&p.attr("x2",b),g&&g.attr("x2",b),a.width=b,a.height=y.height+r.padding+.5*r.dividerMargin,a},"drawClass"),_he=o(function(t){let e=t.id;return t.type&&(e+="<"+gh(t.type)+">"),e},"getClassTitleString"),z$e=o(function(t,e,r,n){V.debug("Rendering note ",e,r);let i=e.id,a={id:i,text:e.text,width:0,height:0},s=t.append("g").attr("id",i).attr("class","classGroup"),l=s.append("text").attr("y",r.textHeight+r.padding).attr("x",0),u=JSON.parse(`"${e.text}"`).split(` +`);u.forEach(function(p){V.debug(`Adding line: ${p}`),l.append("tspan").text(p).attr("class","title").attr("dy",r.textHeight)});let h=s.node().getBBox(),d=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",h.width+2*r.padding).attr("height",h.height+u.length*r.textHeight+r.padding+.5*r.dividerMargin).node().getBBox().width;return l.node().childNodes.forEach(function(p){p.setAttribute("x",(d-p.getBBox().width)/2)}),a.width=d,a.height=h.height+u.length*r.textHeight+r.padding+.5*r.dividerMargin,a},"drawNote"),Ahe=o(function(t,e,r,n){let{displayText:i,cssStyle:a}=e.getDisplayDetails(),s=t.append("tspan").attr("x",n.padding).text(i);a!==""&&s.attr("style",e.cssStyle),r||s.attr("dy",n.textHeight)},"addTspan"),SE={getClassTitleString:_he,drawClass:F$e,drawEdge:B$e,drawNote:z$e}});var _E,AE,kx,G$e,$$e,Dhe,Rhe=R(()=>{"use strict";Zt();Vd();ya();ut();Lhe();Yn();_t();_E={},AE=20,kx=o(function(t){let e=Object.entries(_E).find(r=>r[1].label===t);if(e)return e[0]},"getGraphId"),G$e=o(function(t){t.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),t.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),$$e=o(function(t,e,r,n){let i=de().class;_E={},V.info("Rendering diagram "+t);let a=de().securityLevel,s;a==="sandbox"&&(s=$e("#i"+e));let l=a==="sandbox"?$e(s.nodes()[0].contentDocument.body):$e("body"),u=l.select(`[id='${e}']`);G$e(u);let h=new lr({multigraph:!0});h.setGraph({isMultiGraph:!0}),h.setDefaultEdgeLabel(function(){return{}});let f=n.db.getClasses(),d=[...f.keys()];for(let b of d){let w=f.get(b),S=SE.drawClass(u,w,i,n);_E[S.id]=S,h.setNode(S.id,S),V.info("Org height: "+S.height)}n.db.getRelations().forEach(function(b){V.info("tjoho"+kx(b.id1)+kx(b.id2)+JSON.stringify(b)),h.setEdge(kx(b.id1),kx(b.id2),{relation:b},b.title||"DEFAULT")}),n.db.getNotes().forEach(function(b){V.debug(`Adding note: ${JSON.stringify(b)}`);let w=SE.drawNote(u,b,i,n);_E[w.id]=w,h.setNode(w.id,w),b.class&&f.has(b.class)&&h.setEdge(b.id,kx(b.class),{relation:{id1:b.id,id2:b.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),lo(h),h.nodes().forEach(function(b){b!==void 0&&h.node(b)!==void 0&&(V.debug("Node "+b+": "+JSON.stringify(h.node(b))),l.select("#"+(n.db.lookUpDomId(b)||b)).attr("transform","translate("+(h.node(b).x-h.node(b).width/2)+","+(h.node(b).y-h.node(b).height/2)+" )"))}),h.edges().forEach(function(b){b!==void 0&&h.edge(b)!==void 0&&(V.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(h.edge(b))),SE.drawEdge(u,h.edge(b),h.edge(b).relation,i,n))});let g=u.node().getBBox(),y=g.width+AE*2,v=g.height+AE*2;Sr(u,v,y,i.useMaxWidth);let x=`${g.x-AE} ${g.y-AE} ${y} ${v}`;V.debug(`viewBox ${x}`),u.attr("viewBox",x)},"draw"),Dhe={draw:$$e}});var Nhe={};hr(Nhe,{diagram:()=>V$e});var V$e,Mhe=R(()=>{"use strict";TO();AO();_O();Rhe();V$e={parser:wE,db:Bg,renderer:Dhe,styles:CE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Bg.clear()},"init")}});var W$e,q$e,X$e,j$e,K$e,Q$e,Z$e,J$e,eVe,tVe,rVe,LE,LO=R(()=>{"use strict";ut();W$e=o((t,e,r,n)=>{e.forEach(i=>{rVe[i](t,r,n)})},"insertMarkers"),q$e=o((t,e,r)=>{V.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),X$e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),j$e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),K$e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Q$e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),Z$e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),J$e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),eVe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),tVe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),rVe={extension:q$e,composition:X$e,aggregation:j$e,dependency:K$e,lollipop:Q$e,point:Z$e,circle:J$e,cross:eVe,barb:tVe},LE=W$e});var tr,zl,Phe,Bhe,RE,nVe,Fhe,zhe,Fg,DE,Ghe,$he,Vhe,Uhe,Hhe=R(()=>{"use strict";ut();Pv();ya();tr={},zl={},Phe={},Bhe=o(()=>{zl={},Phe={},tr={}},"clear"),RE=o((t,e)=>(V.trace("In isDescendant",e," ",t," = ",zl[e].includes(t)),!!zl[e].includes(t)),"isDescendant"),nVe=o((t,e)=>(V.info("Descendants of ",e," is ",zl[e]),V.info("Edge is ",t),t.v===e||t.w===e?!1:zl[e]?zl[e].includes(t.v)||RE(t.v,e)||RE(t.w,e)||zl[e].includes(t.w):(V.debug("Tilt, ",e,",not in descendants"),!1)),"edgeInCluster"),Fhe=o((t,e,r,n)=>{V.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),V.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Fhe(a,e,r,n);else{let s=e.node(a);V.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(V.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(V.debug("Setting parent",a,t),r.setParent(a,t)):(V.info("In copy ",t,"root",n,"data",e.node(t),n),V.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);V.debug("Copying Edges",l),l.forEach(u=>{V.info("Edge",u);let h=e.edge(u.v,u.w,u.name);V.info("Edge data",h,n);try{nVe(u,n)?(V.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),V.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):V.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){V.error(f)}})}V.debug("Removing node",a),e.removeNode(a)})},"copy"),zhe=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)Phe[i]=t,n=[...n,...zhe(i,e)];return n},"extractDescendants"),Fg=o((t,e)=>{V.trace("Searching",t);let r=e.children(t);if(V.trace("Searching children of id ",t,r),r.length<1)return V.trace("This is a valid node",t),t;for(let n of r){let i=Fg(n,e);if(i)return V.trace("Found replacement for",t," => ",i),i}},"findNonClusterChild"),DE=o(t=>!tr[t]||!tr[t].externalConnections?t:tr[t]?tr[t].id:t,"getAnchorId"),Ghe=o((t,e)=>{if(!t||e>10){V.debug("Opting out, no graph ");return}else V.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(V.warn("Cluster identified",r," Replacement id in edges: ",Fg(r,t)),zl[r]=zhe(r,t),tr[r]={id:Fg(r,t),clusterData:t.node(r)})}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(V.debug("Cluster identified",r,zl),i.forEach(a=>{if(a.v!==r&&a.w!==r){let s=RE(a.v,r),l=RE(a.w,r);s^l&&(V.warn("Edge: ",a," leaves cluster ",r),V.warn("Descendants of XXX ",r,": ",zl[r]),tr[r].externalConnections=!0)}})):V.debug("Not a cluster ",r,zl)});for(let r of Object.keys(tr)){let n=tr[r].id,i=t.parent(n);i!==r&&tr[i]&&!tr[i].externalConnections&&(tr[r].id=i)}t.edges().forEach(function(r){let n=t.edge(r);V.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),V.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(V.warn("Fix XXX",tr,"ids:",r.v,r.w,"Translating: ",tr[r.v]," --- ",tr[r.w]),tr[r.v]&&tr[r.w]&&tr[r.v]===tr[r.w]){V.warn("Fixing and trixing link to self - removing XXX",r.v,r.w,r.name),V.warn("Fixing and trixing - removing XXX",r.v,r.w,r.name),i=DE(r.v),a=DE(r.w),t.removeEdge(r.v,r.w,r.name);let s=r.w+"---"+r.v;t.setNode(s,{domId:s,id:s,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});let l=structuredClone(n),u=structuredClone(n);l.label="",l.arrowTypeEnd="none",u.label="",l.fromCluster=r.v,u.toCluster=r.v,t.setEdge(i,s,l,r.name+"-cyclic-special"),t.setEdge(s,a,u,r.name+"-cyclic-special")}else if(tr[r.v]||tr[r.w]){if(V.warn("Fixing and trixing - removing XXX",r.v,r.w,r.name),i=DE(r.v),a=DE(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);tr[s].externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);tr[s].externalConnections=!0,n.toCluster=r.w}V.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),V.warn("Adjusted Graph",zn(t)),$he(t,0),V.trace(tr)},"adjustClustersAndEdges"),$he=o((t,e)=>{if(V.warn("extractor - ",e,zn(t),t.children("D")),e>10){V.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){V.debug("Done, no node has children",t.nodes());return}V.debug("Nodes = ",r,e);for(let i of r)if(V.debug("Extracting node",i,tr,tr[i]&&!tr[i].externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!tr[i])V.debug("Not a cluster",i,e);else if(!tr[i].externalConnections&&t.children(i)&&t.children(i).length>0){V.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";tr[i]?.clusterData?.dir&&(s=tr[i].clusterData.dir,V.warn("Fixing dir",tr[i].clusterData.dir,s));let l=new lr({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});V.warn("Old graph before copy",zn(t)),Fhe(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:tr[i].clusterData,labelText:tr[i].labelText,graph:l}),V.warn("New graph after copy node: (",i,")",zn(l)),V.debug("Old graph after copy",zn(t))}else V.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!tr[i].externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),V.debug(tr);r=t.nodes(),V.warn("New list of nodes",r);for(let i of r){let a=t.node(i);V.warn(" Now next level",i,a),a.clusterNode&&$he(a.graph,e+1)}},"extractor"),Vhe=o((t,e)=>{if(e.length===0)return[];let r=Object.assign(e);return e.forEach(n=>{let i=t.children(n),a=Vhe(t,i);r=[...r,...a]}),r},"sorter"),Uhe=o(t=>Vhe(t,t.children()),"sortNodesByHierarchy")});var iVe,aVe,sVe,oVe,lVe,Yhe,Whe,qhe,Xhe=R(()=>{"use strict";S9();ut();bv();Al();Zt();_t();rr();_d();iVe=o((t,e)=>{V.info("Creating subgraph rect for ",e.id,e);let r=de(),n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),i=n.insert("rect",":first-child"),a=yr(r.flowchart.htmlLabels),s=n.insert("g").attr("class","cluster-label"),l=e.labelType==="markdown"?ta(s,e.labelText,{style:e.labelStyle,useHtmlLabels:a},r):s.node().appendChild(ra(e.labelText,e.labelStyle,void 0,!0)),u=l.getBBox();if(yr(r.flowchart.htmlLabels)){let g=l.children[0],y=$e(l);u=g.getBoundingClientRect(),y.attr("width",u.width),y.attr("height",u.height)}let h=0*e.padding,f=h/2,d=e.width<=u.width+h?u.width+h:e.width;e.width<=u.width+h?e.diff=(u.width-e.width)/2-e.padding/2:e.diff=-e.padding/2,V.trace("Data ",e,JSON.stringify(e)),i.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-d/2).attr("y",e.y-e.height/2-f).attr("width",d).attr("height",e.height+h);let{subGraphTitleTopMargin:p}=io(r);a?s.attr("transform",`translate(${e.x-u.width/2}, ${e.y-e.height/2+p})`):s.attr("transform",`translate(${e.x}, ${e.y-e.height/2+p})`);let m=i.node().getBBox();return e.width=m.width,e.height=m.height,e.intersect=function(g){return Ad(e,g)},n},"rect"),aVe=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Ad(e,l)},r},"noteGroup"),sVe=o((t,e)=>{let r=de(),n=t.insert("g").attr("class",e.classes).attr("id",e.id),i=n.insert("rect",":first-child"),a=n.insert("g").attr("class","cluster-label"),s=n.append("rect"),l=a.node().appendChild(ra(e.labelText,e.labelStyle,void 0,!0)),u=l.getBBox();if(yr(r.flowchart.htmlLabels)){let g=l.children[0],y=$e(l);u=g.getBoundingClientRect(),y.attr("width",u.width),y.attr("height",u.height)}u=l.getBBox();let h=0*e.padding,f=h/2,d=e.width<=u.width+e.padding?u.width+e.padding:e.width;e.width<=u.width+e.padding?e.diff=(u.width+e.padding*0-e.width)/2:e.diff=-e.padding/2,i.attr("class","outer").attr("x",e.x-d/2-f).attr("y",e.y-e.height/2-f).attr("width",d+h).attr("height",e.height+h),s.attr("class","inner").attr("x",e.x-d/2-f).attr("y",e.y-e.height/2-f+u.height-1).attr("width",d+h).attr("height",e.height+h-u.height-3);let{subGraphTitleTopMargin:p}=io(r);a.attr("transform",`translate(${e.x-u.width/2}, ${e.y-e.height/2-e.padding/3+(yr(r.flowchart.htmlLabels)?5:3)+p})`);let m=i.node().getBBox();return e.height=m.height,e.intersect=function(g){return Ad(e,g)},n},"roundedWithTitle"),oVe=o((t,e)=>{let r=t.insert("g").attr("class",e.classes).attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.diff=-e.padding/2,e.intersect=function(l){return Ad(e,l)},r},"divider"),lVe={rect:iVe,roundedWithTitle:sVe,noteGroup:aVe,divider:oVe},Yhe={},Whe=o((t,e)=>{V.trace("Inserting cluster");let r=e.shape||"rect";Yhe[e.id]=lVe[r](t,e)},"insertCluster"),qhe=o(()=>{Yhe={}},"clear")});var Khe,cVe,jhe,Qhe=R(()=>{"use strict";ut();Khe=o((t,e,r,n,i)=>{e.arrowTypeStart&&jhe(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&jhe(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),cVe={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},jhe=o((t,e,r,n,i,a)=>{let s=cVe[r];if(!s){V.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function NE(t,e){de().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var ME,Ta,Jhe,IE,OE,uVe,hVe,Zhe,PE,DO=R(()=>{"use strict";ut();bv();Al();Zt();_t();xr();rr();j9();_d();Qhe();ME={},Ta={},Jhe=o(()=>{ME={},Ta={}},"clear"),IE=o((t,e)=>{let r=de(),n=yr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?ta(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):ra(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=$e(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),ME[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=ra(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ta[e.id]||(Ta[e.id]={}),Ta[e.id].startLeft=f,NE(u,e.startLabelLeft)}if(e.startLabelRight){let h=ra(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ta[e.id]||(Ta[e.id]={}),Ta[e.id].startRight=f,NE(u,e.startLabelRight)}if(e.endLabelLeft){let h=ra(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ta[e.id]||(Ta[e.id]={}),Ta[e.id].endLeft=f,NE(u,e.endLabelLeft)}if(e.endLabelRight){let h=ra(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ta[e.id]||(Ta[e.id]={}),Ta[e.id].endRight=f,NE(u,e.endLabelRight)}return i},"insertEdgeLabel");o(NE,"setTerminalWidth");OE=o((t,e)=>{V.debug("Moving label abc88 ",t.id,t.label,ME[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=de(),{subGraphTitleTotalMargin:i}=io(n);if(t.label){let a=ME[t.id],s=t.x,l=t.y;if(r){let u=Lt.calcLabelPosition(r);V.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Ta[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Ta[t.id].startRight,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Ta[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Ta[t.id].endRight,s=t.x,l=t.y;if(r){let u=Lt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),uVe=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),hVe=o((t,e,r)=>{V.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{V.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!uVe(e,a)&&!i){let s=hVe(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),PE=o(function(t,e,r,n,i,a,s){let l=r.points;V.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(V.debug("to cluster abc88",n[r.toCluster]),l=Zhe(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(V.debug("from cluster abc88",n[r.fromCluster]),l=Zhe(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(S=>!Number.isNaN(S.y)),p=vs;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=X5(r),y=ha().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(de().flowchart.arrowMarkerAbsolute||de().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),Khe(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var efe,tfe,rfe=R(()=>{"use strict";Vd();Pv();LO();N5();Hhe();M5();Xhe();DO();ut();_d();_t();efe=o(async(t,e,r,n,i,a)=>{V.info("Graph in recursive render: XXX",zn(e),i);let s=e.graph().rankdir;V.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?V.info("Recursive render XXX",e.nodes()):V.info("No nodes found for",e),e.edges().length>0&&V.trace("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(g){let y=e.node(g);if(i!==void 0){let v=JSON.parse(JSON.stringify(i.clusterData));V.info("Setting data for cluster XXX (",g,") ",v,i),e.setNode(i.id,v),e.parent(g)||(V.trace("Setting parent",g,i.id),e.setParent(g,i.id,v))}if(V.info("(Insert) Node XXX"+g+": "+JSON.stringify(e.node(g))),y?.clusterNode){V.info("Cluster identified",g,y.width,e.node(g));let{ranksep:v,nodesep:x}=e.graph();y.graph.setGraph({...y.graph.graph(),ranksep:v,nodesep:x});let b=await efe(d,y.graph,r,n,e.node(g),a),w=b.elem;kn(y,w),y.diff=b.diff||0,V.info("Node bounds (abc123)",g,y,y.width,y.x,y.y),Bj(w,y),V.warn("Recursive render complete ",w,y)}else e.children(g).length>0?(V.info("Cluster - the non recursive path XXX",g,y.id,y,e),V.info(Fg(y.id,e)),tr[y.id]={id:Fg(y.id,e),node:y}):(V.info("Node - the non recursive path",g,y.id,y),await pm(d,e.node(g),s))})),e.edges().forEach(async function(g){let y=e.edge(g.v,g.w,g.name);V.info("Edge "+g.v+" -> "+g.w+": "+JSON.stringify(g)),V.info("Edge "+g.v+" -> "+g.w+": ",g," ",JSON.stringify(e.edge(g))),V.info("Fix",tr,"ids:",g.v,g.w,"Translating: ",tr[g.v],tr[g.w]),await IE(f,y)}),e.edges().forEach(function(g){V.info("Edge "+g.v+" -> "+g.w+": "+JSON.stringify(g))}),V.info("Graph before layout:",JSON.stringify(zn(e))),V.info("#############################################"),V.info("### Layout ###"),V.info("#############################################"),V.info(e),lo(e),V.info("Graph after layout:",JSON.stringify(zn(e)));let p=0,{subGraphTitleTotalMargin:m}=io(a);return Uhe(e).forEach(function(g){let y=e.node(g);V.info("Position "+g+": "+JSON.stringify(e.node(g))),V.info("Position "+g+": ("+y.x,","+y.y,") width: ",y.width," height: ",y.height),y?.clusterNode?(y.y+=m,wv(y)):e.children(g).length>0?(y.height+=m,Whe(u,y),tr[y.id].node=y):(y.y+=m/2,wv(y))}),e.edges().forEach(function(g){let y=e.edge(g);V.info("Edge "+g.v+" -> "+g.w+": "+JSON.stringify(y),y),y.points.forEach(x=>x.y+=m/2);let v=PE(h,g,y,tr,r,e,n);OE(y,v)}),e.nodes().forEach(function(g){let y=e.node(g);V.info(g,y.type,y.diff),y.type==="group"&&(p=y.diff)}),{elem:l,diff:p}},"recursiveRender"),tfe=o(async(t,e,r,n,i)=>{LE(t,r,n,i),Fj(),Jhe(),qhe(),Bhe(),V.warn("Graph at first:",JSON.stringify(zn(e))),Ghe(e),V.warn("Graph after:",JSON.stringify(zn(e)));let a=de();await efe(t,e,n,i,void 0,a)},"render")});function nfe(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}var NO,RO,fVe,ife,dVe,pVe,mVe,gVe,afe,sfe=R(()=>{"use strict";Zt();ya();ut();_t();rfe();xr();xr();Yn();rr();NO=o(t=>We.sanitizeText(t,de()),"sanitizeText"),RO={dividerMargin:10,padding:5,textHeight:10,curve:void 0},fVe=o(function(t,e,r,n){V.info("keys:",[...t.keys()]),V.info(t),t.forEach(function(i){let s={shape:"rect",id:i.id,domId:i.domId,labelText:NO(i.id),labelStyle:"",style:"fill: none; stroke: black",padding:de().flowchart?.padding??de().class?.padding};e.setNode(i.id,s),ife(i.classes,e,r,n,i.id),V.info("setNode",s)})},"addNamespaces"),ife=o(function(t,e,r,n,i){V.info("keys:",[...t.keys()]),V.info(t),[...t.values()].filter(a=>a.parent===i).forEach(function(a){let s=a.cssClasses.join(" "),l=lm(a.styles),u=a.label??a.id,h=0,d={labelStyle:l.labelStyle,shape:"class_box",labelText:NO(u),classData:a,rx:h,ry:h,class:s,style:l.style,id:a.id,domId:a.domId,tooltip:n.db.getTooltip(a.id,i)||"",haveCallback:a.haveCallback,link:a.link,width:a.type==="group"?500:void 0,type:a.type,padding:de().flowchart?.padding??de().class?.padding};e.setNode(a.id,d),i&&e.setParent(a.id,i),V.info("setNode",d)})},"addClasses"),dVe=o(function(t,e,r,n){V.info(t),t.forEach(function(i,a){let s=i,l="",u={labelStyle:"",style:""},h=s.text,f=0,p={labelStyle:u.labelStyle,shape:"note",labelText:NO(h),noteData:s,rx:f,ry:f,class:l,style:u.style,id:s.id,domId:s.id,tooltip:"",type:"note",padding:de().flowchart?.padding??de().class?.padding};if(e.setNode(s.id,p),V.info("setNode",p),!s.class||!n.has(s.class))return;let m=r+a,g={id:`edgeNote${m}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:om(RO.curve,xu)};e.setEdge(s.id,s.class,g,m)})},"addNotes"),pVe=o(function(t,e){let r=de().flowchart,n=0;t.forEach(function(i){n++;let a={classes:"relation",pattern:i.relation.lineType==1?"dashed":"solid",id:y5(i.id1,i.id2,{prefix:"id",counter:n}),arrowhead:i.type==="arrow_open"?"none":"normal",startLabelRight:i.relationTitle1==="none"?"":i.relationTitle1,endLabelLeft:i.relationTitle2==="none"?"":i.relationTitle2,arrowTypeStart:nfe(i.relation.type1),arrowTypeEnd:nfe(i.relation.type2),style:"fill:none",labelStyle:"",curve:om(r?.curve,xu)};if(V.info(a,i),i.style!==void 0){let s=lm(i.style);a.style=s.style,a.labelStyle=s.labelStyle}i.text=i.title,i.text===void 0?i.style!==void 0&&(a.arrowheadStyle="fill: #333"):(a.arrowheadStyle="fill: #333",a.labelpos="c",de().flowchart?.htmlLabels??de().htmlLabels?(a.labelType="html",a.label=''+i.text+""):(a.labelType="text",a.label=i.text.replace(We.lineBreakRegex,` +`),i.style===void 0&&(a.style=a.style||"stroke: #333; stroke-width: 1.5px;fill:none"),a.labelStyle=a.labelStyle.replace("color:","fill:"))),e.setEdge(i.id1,i.id2,a,n)})},"addRelations"),mVe=o(function(t){RO={...RO,...t}},"setConf"),gVe=o(async function(t,e,r,n){V.info("Drawing class - ",e);let i=de().flowchart??de().class,a=de().securityLevel;V.info("config:",i);let s=i?.nodeSpacing??50,l=i?.rankSpacing??50,u=new lr({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:s,ranksep:l,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),h=n.db.getNamespaces(),f=n.db.getClasses(),d=n.db.getRelations(),p=n.db.getNotes();V.info(d),fVe(h,u,e,n),ife(f,u,e,n),pVe(d,u),dVe(p,u,d.length+1,f);let m;a==="sandbox"&&(m=$e("#i"+e));let g=a==="sandbox"?$e(m.nodes()[0].contentDocument.body):$e("body"),y=g.select(`[id="${e}"]`),v=g.select("#"+e+" g");if(await tfe(v,u,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),Lt.insertTitle(y,"classTitleText",i?.titleTopMargin??5,n.db.getDiagramTitle()),Lo(u,y,i?.diagramPadding,i?.useMaxWidth),!i?.htmlLabels){let x=a==="sandbox"?m.nodes()[0].contentDocument:document,b=x.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(let w of b){let S=w.getBBox(),T=x.createElementNS("http://www.w3.org/2000/svg","rect");T.setAttribute("rx",0),T.setAttribute("ry",0),T.setAttribute("width",S.width),T.setAttribute("height",S.height),w.insertBefore(T,w.firstChild)}}},"draw");o(nfe,"getArrowMarker");afe={setConf:mVe,draw:gVe}});var ofe={};hr(ofe,{diagram:()=>yVe});var yVe,lfe=R(()=>{"use strict";TO();AO();_O();sfe();yVe={parser:wE,db:Bg,renderer:afe,styles:CE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Bg.clear()},"init")}});var MO,BE,IO=R(()=>{"use strict";MO=function(){var t=o(function(F,B,$,z){for($=$||{},z=F.length;z--;$[F[z]]=B);return $},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],S=[1,29],T=[1,30],E=[1,31],_=[1,34],A=[1,35],L=[1,36],M=[1,37],N=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],I=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],C=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(B,$,z,Y,Q,X,ie){var j=X.length-1;switch(Q){case 3:return Y.setRootDoc(X[j]),X[j];break;case 4:this.$=[];break;case 5:X[j]!="nl"&&(X[j-1].push(X[j]),this.$=X[j-1]);break;case 6:case 7:this.$=X[j];break;case 8:this.$="nl";break;case 12:this.$=X[j];break;case 13:let q=X[j-1];q.description=Y.trimColon(X[j]),this.$=q;break;case 14:this.$={stmt:"relation",state1:X[j-2],state2:X[j]};break;case 15:let K=Y.trimColon(X[j]);this.$={stmt:"relation",state1:X[j-3],state2:X[j-1],description:K};break;case 19:this.$={stmt:"state",id:X[j-3],type:"default",description:"",doc:X[j-1]};break;case 20:var J=X[j],Z=X[j-2].trim();if(X[j].match(":")){var H=X[j].split(":");J=H[0],Z=[Z,H[1]]}this.$={stmt:"state",id:J,type:"default",description:Z};break;case 21:this.$={stmt:"state",id:X[j-3],type:"default",description:X[j-5],doc:X[j-1]};break;case 22:this.$={stmt:"state",id:X[j],type:"fork"};break;case 23:this.$={stmt:"state",id:X[j],type:"join"};break;case 24:this.$={stmt:"state",id:X[j],type:"choice"};break;case 25:this.$={stmt:"state",id:Y.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:X[j-1].trim(),note:{position:X[j-2].trim(),text:X[j].trim()}};break;case 29:this.$=X[j].trim(),Y.setAccTitle(this.$);break;case 30:case 31:this.$=X[j].trim(),Y.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:X[j-1].trim(),classes:X[j].trim()};break;case 34:this.$={stmt:"style",id:X[j-1].trim(),styleClass:X[j].trim()};break;case 35:this.$={stmt:"applyClass",id:X[j-1].trim(),styleClass:X[j].trim()};break;case 36:Y.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:Y.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:Y.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:Y.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:X[j].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:X[j-2].trim(),classes:[X[j].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:X[j-2].trim(),classes:[X[j].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:S,42:T,45:E,48:_,49:A,50:L,51:M,54:N},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:S,42:T,45:E,48:_,49:A,50:L,51:M,54:N},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(I,[2,42],{55:[1,54]}),t(I,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:N},t(k,[2,17]),t(C,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:S,42:T,45:E,48:_,49:A,50:L,51:M,54:N},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(I,[2,44]),t(I,[2,45]),t(k,[2,15]),t(k,[2,19]),t(C,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:S,42:T,45:E,48:_,49:A,50:L,51:M,54:N},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(B,$){if($.recoverable)this.trace(B);else{var z=new Error(B);throw z.hash=$,z}},"parseError"),parse:o(function(B){var $=this,z=[0],Y=[],Q=[null],X=[],ie=this.table,j="",J=0,Z=0,H=0,q=2,K=1,se=X.slice.call(arguments,1),ce=Object.create(this.lexer),ue={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(ue.yy[te]=this.yy[te]);ce.setInput(B,ue.yy),ue.yy.lexer=ce,ue.yy.parser=this,typeof ce.yylloc>"u"&&(ce.yylloc={});var De=ce.yylloc;X.push(De);var oe=ce.options&&ce.options.ranges;typeof ue.yy.parseError=="function"?this.parseError=ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(we){z.length=z.length-2*we,Q.length=Q.length-we,X.length=X.length-we}o(ke,"popStack");function Ie(){var we;return we=Y.pop()||ce.lex()||K,typeof we!="number"&&(we instanceof Array&&(Y=we,we=Y.pop()),we=$.symbols_[we]||we),we}o(Ie,"lex");for(var Se,Ue,Pe,_e,me,W,fe={},ge,re,he,ne;;){if(Pe=z[z.length-1],this.defaultActions[Pe]?_e=this.defaultActions[Pe]:((Se===null||typeof Se>"u")&&(Se=Ie()),_e=ie[Pe]&&ie[Pe][Se]),typeof _e>"u"||!_e.length||!_e[0]){var ae="";ne=[];for(ge in ie[Pe])this.terminals_[ge]&&ge>q&&ne.push("'"+this.terminals_[ge]+"'");ce.showPosition?ae="Parse error on line "+(J+1)+`: +`+ce.showPosition()+` +Expecting `+ne.join(", ")+", got '"+(this.terminals_[Se]||Se)+"'":ae="Parse error on line "+(J+1)+": Unexpected "+(Se==K?"end of input":"'"+(this.terminals_[Se]||Se)+"'"),this.parseError(ae,{text:ce.match,token:this.terminals_[Se]||Se,line:ce.yylineno,loc:De,expected:ne})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pe+", token: "+Se);switch(_e[0]){case 1:z.push(Se),Q.push(ce.yytext),X.push(ce.yylloc),z.push(_e[1]),Se=null,Ue?(Se=Ue,Ue=null):(Z=ce.yyleng,j=ce.yytext,J=ce.yylineno,De=ce.yylloc,H>0&&H--);break;case 2:if(re=this.productions_[_e[1]][1],fe.$=Q[Q.length-re],fe._$={first_line:X[X.length-(re||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(re||1)].first_column,last_column:X[X.length-1].last_column},oe&&(fe._$.range=[X[X.length-(re||1)].range[0],X[X.length-1].range[1]]),W=this.performAction.apply(fe,[j,Z,J,ue.yy,_e[1],Q,X].concat(se)),typeof W<"u")return W;re&&(z=z.slice(0,-1*re*2),Q=Q.slice(0,-1*re),X=X.slice(0,-1*re)),z.push(this.productions_[_e[1]][0]),Q.push(fe.$),X.push(fe._$),he=ie[z[z.length-2]][z[z.length-1]],z.push(he);break;case 3:return!0}}return!0},"parse")},D=function(){var F={EOF:1,parseError:o(function($,z){if(this.yy.parser)this.yy.parser.parseError($,z);else throw new Error($)},"parseError"),setInput:o(function(B,$){return this.yy=$||this.yy||{},this._input=B,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var B=this._input[0];this.yytext+=B,this.yyleng++,this.offset++,this.match+=B,this.matched+=B;var $=B.match(/(?:\r\n?|\n).*/g);return $?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),B},"input"),unput:o(function(B){var $=B.length,z=B.split(/(?:\r\n?|\n)/g);this._input=B+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$),this.offset-=$;var Y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),z.length-1&&(this.yylineno-=z.length-1);var Q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:z?(z.length===Y.length?this.yylloc.first_column:0)+Y[Y.length-z.length].length-z[0].length:this.yylloc.first_column-$},this.options.ranges&&(this.yylloc.range=[Q[0],Q[0]+this.yyleng-$]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(B){this.unput(this.match.slice(B))},"less"),pastInput:o(function(){var B=this.matched.substr(0,this.matched.length-this.match.length);return(B.length>20?"...":"")+B.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var B=this.match;return B.length<20&&(B+=this._input.substr(0,20-B.length)),(B.substr(0,20)+(B.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var B=this.pastInput(),$=new Array(B.length+1).join("-");return B+this.upcomingInput()+` +`+$+"^"},"showPosition"),test_match:o(function(B,$){var z,Y,Q;if(this.options.backtrack_lexer&&(Q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Q.yylloc.range=this.yylloc.range.slice(0))),Y=B[0].match(/(?:\r\n?|\n).*/g),Y&&(this.yylineno+=Y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Y?Y[Y.length-1].length-Y[Y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+B[0].length},this.yytext+=B[0],this.match+=B[0],this.matches=B,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(B[0].length),this.matched+=B[0],z=this.performAction.call(this,this.yy,this,$,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var X in Q)this[X]=Q[X];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var B,$,z,Y;this._more||(this.yytext="",this.match="");for(var Q=this._currentRules(),X=0;X$[0].length)){if($=z,Y=X,this.options.backtrack_lexer){if(B=this.test_match(z,Q[X]),B!==!1)return B;if(this._backtrack){$=!1;continue}else return!1}else if(!this.options.flex)break}return $?(B=this.test_match($,Q[Y]),B!==!1?B:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var $=this.next();return $||this.lex()},"lex"),begin:o(function($){this.conditionStack.push($)},"begin"),popState:o(function(){var $=this.conditionStack.length-1;return $>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function($){return $=this.conditionStack.length-1-Math.abs($||0),$>=0?this.conditionStack[$]:"INITIAL"},"topState"),pushState:o(function($){this.begin($)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function($,z,Y,Q){var X=Q;switch(Y){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),z.yytext=z.yytext.substr(2).trim(),31;break;case 67:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return z.yytext=z.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=D;function P(){this.yy={}}return o(P,"Parser"),P.prototype=O,O.Parser=P,new P}();MO.parser=MO;BE=MO});var hfe,FE,zg,Ex,ffe,dfe,pfe,N0,zE,OO,PO,BO,FO,zO,GE,$E,mfe,gfe,GO,$O,yfe,vfe,Gg,wVe,xfe,VO,TVe,kVe,bfe,wfe,EVe,Tfe,CVe,kfe,UO,HO,Efe,VE,Cfe,YO,UE=R(()=>{"use strict";hfe="LR",FE="TB",zg="state",Ex="relation",ffe="classDef",dfe="style",pfe="applyClass",N0="default",zE="divider",OO="fill:none",PO="fill: #333",BO="c",FO="text",zO="normal",GE="rect",$E="rectWithTitle",mfe="stateStart",gfe="stateEnd",GO="divider",$O="roundedWithTitle",yfe="note",vfe="noteGroup",Gg="statediagram",wVe="state",xfe=`${Gg}-${wVe}`,VO="transition",TVe="note",kVe="note-edge",bfe=`${VO} ${kVe}`,wfe=`${Gg}-${TVe}`,EVe="cluster",Tfe=`${Gg}-${EVe}`,CVe="cluster-alt",kfe=`${Gg}-${CVe}`,UO="parent",HO="note",Efe="state",VE="----",Cfe=`${VE}${HO}`,YO=`${VE}${UO}`});function WO(t="",e=0,r="",n=VE){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Efe}-${t}${i}-${e}`}function HE(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function AVe(t){return t?.classes?.join(" ")??""}function _Ve(t){return t?.styles??[]}var YE,yf,SVe,Sfe,$g,Afe,_fe=R(()=>{"use strict";_t();ut();rr();UE();YE=new Map,yf=0;o(WO,"stateDomId");SVe=o((t,e,r,n,i,a,s,l)=>{V.trace("items",e),e.forEach(u=>{switch(u.stmt){case zg:$g(t,u,r,n,i,a,s,l);break;case N0:$g(t,u,r,n,i,a,s,l);break;case Ex:{$g(t,u.state1,r,n,i,a,s,l),$g(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+yf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:OO,labelStyle:"",label:We.sanitizeText(u.description,de()),arrowheadStyle:PO,labelpos:BO,labelType:FO,thickness:zO,classes:VO,look:s};i.push(h),yf++}break}})},"setupDoc"),Sfe=o((t,e=FE)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(HE,"insertOrUpdateNode");o(AVe,"getClassesFromDbInfo");o(_Ve,"getStylesFromDbInfo");$g=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=AVe(h),d=_Ve(h);if(V.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=GE;e.start===!0?p=mfe:e.start===!1&&(p=gfe),e.type!==N0&&(p=e.type),YE.get(u)||YE.set(u,{id:u,shape:p,description:We.sanitizeText(u,de()),cssClasses:`${f} ${xfe}`,cssStyles:d});let m=YE.get(u);e.description&&(Array.isArray(m.description)?(m.shape=$E,m.description.push(e.description)):m.description?.length>0?(m.shape=$E,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=GE,m.description=e.description),m.description=We.sanitizeTextOrArray(m.description,de())),m.description?.length===1&&m.shape===$E&&(m.type==="group"?m.shape=$O:m.shape=GE),!m.type&&e.doc&&(V.info("Setting cluster for XCX",u,Sfe(e)),m.type="group",m.isGroup=!0,m.dir=Sfe(e),m.shape=e.type===zE?GO:$O,m.cssClasses=`${m.cssClasses} ${Tfe} ${a?kfe:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:WO(u,yf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===GO&&(g.label=""),t&&t.id!=="root"&&(V.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:yfe,label:e.note.text,cssClasses:wfe,cssStyles:[],cssCompilesStyles:[],id:u+Cfe+"-"+yf,domId:WO(u,yf,HO),type:m.type,isGroup:m.type==="group",padding:de().flowchart.padding,look:s,position:e.note.position},v=u+YO,x={labelStyle:"",shape:vfe,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+YO,domId:WO(u,yf,UO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};yf++,x.id=v,y.parentId=v,HE(n,x,l),HE(n,y,l),HE(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:OO,labelStyle:"",classes:bfe,arrowheadStyle:PO,labelpos:BO,labelType:FO,thickness:zO,look:s})}else HE(n,g,l)}e.doc&&(V.trace("Adding nodes children "),SVe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),Afe=o(()=>{YE.clear(),yf=0},"reset")});var qO,LVe,DVe,Lfe,XO=R(()=>{"use strict";_t();ut();L9();oT();yD();xr();UE();qO=o((t,e=FE)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),LVe=o(function(t,e){return e.db.extract(e.db.getRootDocV2()),e.db.getClasses()},"getClasses"),DVe=o(async function(t,e,r,n){V.info("REF0:"),V.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=de();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=I5(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await sT(l,u);let h=8;Lt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),lT(u,h,Gg,a?.useMaxWidth??!0)},"draw"),Lfe={getClasses:LVe,draw:DVe,getDir:qO}});function Pfe(){return new Map}function jO(t=""){let e=t;return t===ZO&&(Cx++,e=`${Mfe}${Cx}`),e}function KO(t="",e=N0){return t===ZO?Mfe:e}function GVe(t=""){let e=t;return t===Ife&&(Cx++,e=`${Ofe}${Cx}`),e}function $Ve(t="",e=N0){return t===Ife?Ofe:e}function VVe(t,e,r){let n=jO(t.id.trim()),i=KO(t.id.trim(),t.type),a=jO(e.id.trim()),s=KO(e.id.trim(),e.type);vf(n,i,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),vf(a,s,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),Fs.relations.push({id1:n,id2:a,relationTitle:We.sanitizeText(r,de())})}var ZO,Mfe,Ife,Ofe,Dfe,Rfe,RVe,NVe,XE,JO,Bfe,jE,Vg,Ffe,KE,Fs,Cx,Nfe,MVe,IVe,WE,OVe,PVe,qE,eP,BVe,vf,zfe,M0,Gfe,FVe,zVe,$fe,QO,UVe,HVe,Vfe,YVe,tP,WVe,qVe,XVe,jVe,KVe,QVe,Qo,QE=R(()=>{"use strict";ut();xr();rr();_t();bi();_fe();XO();UE();ZO="[*]",Mfe="start",Ife=ZO,Ofe="end",Dfe="color",Rfe="fill",RVe="bgFill",NVe=",";o(Pfe,"newClassesList");XE=[],JO=[],Bfe=hfe,jE=[],Vg=Pfe(),Ffe=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),KE={root:Ffe()},Fs=KE.root,Cx=0,Nfe=0,MVe={LINE:0,DOTTED_LINE:1},IVe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},WE=o(t=>JSON.parse(JSON.stringify(t)),"clone"),OVe=o(t=>{V.info("Setting root doc",t),jE=t},"setRootDoc"),PVe=o(()=>jE,"getRootDoc"),qE=o((t,e,r)=>{if(e.stmt===Ex)qE(t,e.state1,!0),qE(t,e.state2,!1);else if(e.stmt===zg&&(e.id==="[*]"?(e.id=r?t.id+"_start":t.id+"_end",e.start=r):e.id=e.id.trim()),e.doc){let n=[],i=[],a;for(a=0;a0&&i.length>0){let s={stmt:zg,id:Z_(),type:"divider",doc:WE(i)};n.push(WE(s)),e.doc=n}e.doc.forEach(s=>qE(e,s,!0))}},"docTranslator"),eP=o(()=>(qE({id:"root"},{id:"root",doc:jE},!0),{id:"root",doc:jE}),"getRootDocV2"),BVe=o(t=>{let e;t.doc?e=t.doc:e=t,V.info(e),zfe(!0),V.info("Extract initial document:",e),e.forEach(a=>{switch(V.warn("Statement",a.stmt),a.stmt){case zg:vf(a.id.trim(),a.type,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles);break;case Ex:$fe(a.state1,a.state2,a.description);break;case ffe:Vfe(a.id.trim(),a.classes);break;case dfe:{let s=a.id.trim().split(","),l=a.styleClass.split(",");s.forEach(u=>{let h=M0(u);if(h===void 0){let f=u.trim();vf(f),h=M0(f)}h.styles=l.map(f=>f.replace(/;/g,"")?.trim())})}break;case pfe:tP(a.id.trim(),a.styleClass);break}});let r=Gfe(),i=de().look;Afe(),$g(void 0,eP(),r,XE,JO,!0,i,Vg),XE.forEach(a=>{if(Array.isArray(a.label)){if(a.description=a.label.slice(1),a.isGroup&&a.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+a.id+"]");a.label=a.label[0]}})},"extract"),vf=o(function(t,e=N0,r=null,n=null,i=null,a=null,s=null,l=null){let u=t?.trim();if(Fs.states.has(u)?(Fs.states.get(u).doc||(Fs.states.get(u).doc=r),Fs.states.get(u).type||(Fs.states.get(u).type=e)):(V.info("Adding state ",u,n),Fs.states.set(u,{id:u,descriptions:[],type:e,doc:r,note:i,classes:[],styles:[],textStyles:[]})),n&&(V.info("Setting state description",u,n),typeof n=="string"&&QO(u,n.trim()),typeof n=="object"&&n.forEach(h=>QO(u,h.trim()))),i){let h=Fs.states.get(u);h.note=i,h.note.text=We.sanitizeText(h.note.text,de())}a&&(V.info("Setting state classes",u,a),(typeof a=="string"?[a]:a).forEach(f=>tP(u,f.trim()))),s&&(V.info("Setting state styles",u,s),(typeof s=="string"?[s]:s).forEach(f=>WVe(u,f.trim()))),l&&(V.info("Setting state styles",u,s),(typeof l=="string"?[l]:l).forEach(f=>qVe(u,f.trim())))},"addState"),zfe=o(function(t){XE=[],JO=[],KE={root:Ffe()},Fs=KE.root,Cx=0,Vg=Pfe(),t||vr()},"clear"),M0=o(function(t){return Fs.states.get(t)},"getState"),Gfe=o(function(){return Fs.states},"getStates"),FVe=o(function(){V.info("Documents = ",KE)},"logDocuments"),zVe=o(function(){return Fs.relations},"getRelations");o(jO,"startIdIfNeeded");o(KO,"startTypeIfNeeded");o(GVe,"endIdIfNeeded");o($Ve,"endTypeIfNeeded");o(VVe,"addRelationObjs");$fe=o(function(t,e,r){if(typeof t=="object")VVe(t,e,r);else{let n=jO(t.trim()),i=KO(t),a=GVe(e.trim()),s=$Ve(e);vf(n,i),vf(a,s),Fs.relations.push({id1:n,id2:a,title:We.sanitizeText(r,de())})}},"addRelation"),QO=o(function(t,e){let r=Fs.states.get(t),n=e.startsWith(":")?e.replace(":","").trim():e;r.descriptions.push(We.sanitizeText(n,de()))},"addDescription"),UVe=o(function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},"cleanupLabel"),HVe=o(()=>(Nfe++,"divider-id-"+Nfe),"getDividerId"),Vfe=o(function(t,e=""){Vg.has(t)||Vg.set(t,{id:t,styles:[],textStyles:[]});let r=Vg.get(t);e?.split(NVe).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Dfe).exec(n)){let s=i.replace(Rfe,RVe).replace(Dfe,Rfe);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),YVe=o(function(){return Vg},"getClasses"),tP=o(function(t,e){t.split(",").forEach(function(r){let n=M0(r);if(n===void 0){let i=r.trim();vf(i),n=M0(i)}n.classes.push(e)})},"setCssClass"),WVe=o(function(t,e){let r=M0(t);r!==void 0&&r.styles.push(e)},"setStyle"),qVe=o(function(t,e){let r=M0(t);r!==void 0&&r.textStyles.push(e)},"setTextStyle"),XVe=o(()=>Bfe,"getDirection"),jVe=o(t=>{Bfe=t},"setDirection"),KVe=o(t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),"trimColon"),QVe=o(()=>{let t=de();return{nodes:XE,edges:JO,other:{},config:t,direction:qO(eP())}},"getData"),Qo={getConfig:o(()=>de().state,"getConfig"),getData:QVe,addState:vf,clear:zfe,getState:M0,getStates:Gfe,getRelations:zVe,getClasses:YVe,getDirection:XVe,addRelation:$fe,getDividerId:HVe,setDirection:jVe,cleanupLabel:UVe,lineType:MVe,relationType:IVe,logDocuments:FVe,getRootDoc:PVe,setRootDoc:OVe,getRootDocV2:eP,extract:BVe,trimColon:KVe,getAccTitle:Ar,setAccTitle:kr,getAccDescription:Lr,setAccDescription:_r,addStyleClass:Vfe,setCssClass:tP,addDescription:QO,setDiagramTitle:nn,getDiagramTitle:Xr}});var ZVe,ZE,rP=R(()=>{"use strict";ZVe=o(t=>` +defs #statediagram-barbEnd { + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; + } +g.stateGroup text { + fill: ${t.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${t.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${t.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.stateGroup line { + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${t.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${t.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + + text { + fill: ${t.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${t.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} +.edgeLabel .label text { + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${t.transitionLabelColor||t.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${t.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node .fork-join { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node circle.state-end { + fill: ${t.innerEndBackground}; + stroke: ${t.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${t.lineColor}; +} + +.statediagram-cluster rect { + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${t.stateLabelColor}; + // line-height: 1; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${t.stateBorder||t.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${t.compositeBackground||t.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${t.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${t.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${t.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${t.lineColor}; + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),ZE=ZVe});var nP,JVe,eUe,Ufe,tUe,Hfe,Yfe=R(()=>{"use strict";nP={},JVe=o((t,e)=>{nP[t]=e},"set"),eUe=o(t=>nP[t],"get"),Ufe=o(()=>Object.keys(nP),"keys"),tUe=o(()=>Ufe().length,"size"),Hfe={get:eUe,set:JVe,keys:Ufe,size:tUe}});var rUe,nUe,iUe,aUe,qfe,sUe,oUe,lUe,cUe,iP,Wfe,Xfe,jfe=R(()=>{"use strict";Zt();Yfe();QE();xr();rr();_t();ut();rUe=o(t=>t.append("circle").attr("class","start-state").attr("r",de().state.sizeUnit).attr("cx",de().state.padding+de().state.sizeUnit).attr("cy",de().state.padding+de().state.sizeUnit),"drawStartState"),nUe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",de().state.textHeight).attr("class","divider").attr("x2",de().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),iUe=o((t,e)=>{let r=t.append("text").attr("x",2*de().state.padding).attr("y",de().state.textHeight+2*de().state.padding).attr("font-size",de().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",de().state.padding).attr("y",de().state.padding).attr("width",n.width+2*de().state.padding).attr("height",n.height+2*de().state.padding).attr("rx",de().state.radius),r},"drawSimpleState"),aUe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*de().state.padding).text(m);g||y.attr("dy",de().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*de().state.padding).attr("y",de().state.textHeight+1.3*de().state.padding).attr("font-size",de().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",de().state.padding).attr("y",a+de().state.padding*.4+de().state.dividerMargin+de().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",de().state.padding).attr("y1",de().state.padding+a+de().state.dividerMargin/2).attr("y2",de().state.padding+a+de().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*de().state.padding),t.insert("rect",":first-child").attr("x",de().state.padding).attr("y",de().state.padding).attr("width",d+2*de().state.padding).attr("height",f.height+a+2*de().state.padding).attr("rx",de().state.radius),t},"drawDescrState"),qfe=o((t,e,r)=>{let n=de().state.padding,i=2*de().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",de().state.titleShift).attr("font-size",de().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-de().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+de().state.textHeight+de().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",de().state.titleShift-de().state.textHeight-de().state.padding).attr("width",d).attr("height",de().state.textHeight*3).attr("rx",de().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",de().state.titleShift-de().state.textHeight-de().state.padding).attr("width",d).attr("height",m.height+3+2*de().state.textHeight).attr("rx",de().state.radius),t},"addTitleAndBox"),sUe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",de().state.sizeUnit+de().state.miniPadding).attr("cx",de().state.padding+de().state.sizeUnit+de().state.miniPadding).attr("cy",de().state.padding+de().state.sizeUnit+de().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",de().state.sizeUnit).attr("cx",de().state.padding+de().state.sizeUnit+2).attr("cy",de().state.padding+de().state.sizeUnit+2)),"drawEndState"),oUe=o((t,e)=>{let r=de().state.forkWidth,n=de().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",de().state.padding).attr("y",de().state.padding)},"drawForkJoinState"),lUe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(We.lineBreakRegex),u=1.25*de().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+de().state.noteMargin),d.attr("y",r+i+1.25*de().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),cUe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",de().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=lUe(t,0,0,n);return r.attr("height",a+2*de().state.noteMargin),r.attr("width",i+de().state.noteMargin*2),r},"drawNote"),iP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&rUe(i),e.type==="end"&&sUe(i),(e.type==="fork"||e.type==="join")&&oUe(i,e),e.type==="note"&&cUe(e.note.text,i),e.type==="divider"&&nUe(i),e.type==="default"&&e.descriptions.length===0&&iUe(i,e),e.type==="default"&&e.descriptions.length>0&&aUe(i,e);let a=i.node().getBBox();return n.width=a.width+2*de().state.padding,n.height=a.height+2*de().state.padding,Hfe.set(r,n),n},"drawState"),Wfe=0,Xfe=o(function(t,e,r){let n=o(function(u){switch(u){case Qo.relationType.AGGREGATION:return"aggregation";case Qo.relationType.EXTENSION:return"extension";case Qo.relationType.COMPOSITION:return"composition";case Qo.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=ha().x(function(u){return u.x}).y(function(u){return u.y}).curve(vs),s=t.append("path").attr("d",a(i)).attr("id","edge"+Wfe).attr("class","transition"),l="";if(de().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(Qo.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Lt.calcLabelPosition(e.points),d=We.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),S=w.node().getBBox();g=Math.max(g,S.width),y=Math.min(y,S.x),V.info(S.x,h,f+p),p===0&&(p=w.node().getBBox().height,V.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,S)=>w.attr("y",f+S*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-de().state.padding/2).attr("y",f-v/2-de().state.padding/2-3.5).attr("width",g+de().state.padding).attr("height",v+de().state.padding),V.info(x)}Wfe++},"drawEdge")});var vo,aP,uUe,hUe,fUe,dUe,Kfe,Qfe,Zfe=R(()=>{"use strict";Zt();Vd();ya();ut();rr();jfe();_t();Yn();aP={},uUe=o(function(){},"setConf"),hUe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),fUe=o(function(t,e,r,n){vo=de().state;let i=de().securityLevel,a;i==="sandbox"&&(a=$e("#i"+e));let s=i==="sandbox"?$e(a.nodes()[0].contentDocument.body):$e("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;V.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);hUe(u);let h=n.db.getRootDoc();Kfe(h,u,void 0,!1,s,l,n);let f=vo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;Sr(u,m,g,vo.useMaxWidth),u.attr("viewBox",`${d.x-vo.padding} ${d.y-vo.padding} `+p+" "+m)},"draw"),dUe=o(t=>t?t.length*vo.fontSizeFactor:1,"getLabelWidth"),Kfe=o((t,e,r,n,i,a,s)=>{let l=new lr({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let T=S.parentElement,E=0,_=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),_=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(_)&&(_=0)),S.setAttribute("x1",0-_+8),S.setAttribute("x2",E-_-8)})):V.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(V.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),Xfe(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*vo.padding,x.height=v.height+2*vo.padding,V.debug("Doc rendered",x,l),x},"renderDoc"),Qfe={setConf:uUe,draw:fUe}});var Jfe={};hr(Jfe,{diagram:()=>pUe});var pUe,ede=R(()=>{"use strict";IO();QE();rP();Zfe();pUe={parser:BE,db:Qo,renderer:Qfe,styles:ZE,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Qo.clear()},"init")}});var nde={};hr(nde,{diagram:()=>vUe});var vUe,ide=R(()=>{"use strict";IO();QE();rP();XO();vUe={parser:BE,db:Qo,renderer:Lfe,styles:ZE,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Qo.clear()},"init")}});var sP,ode,lde=R(()=>{"use strict";sP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",S=0,T=0,E=0,_=2,A=1,L=x.slice.call(arguments,1),M=Object.create(this.lexer),N={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(N.yy[k]=this.yy[k]);M.setInput(p,N.yy),N.yy.lexer=M,N.yy.parser=this,typeof M.yylloc>"u"&&(M.yylloc={});var I=M.yylloc;x.push(I);var C=M.options&&M.options.ranges;typeof N.yy.parseError=="function"?this.parseError=N.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(H){g.length=g.length-2*H,v.length=v.length-H,x.length=x.length-H}o(O,"popStack");function D(){var H;return H=y.pop()||M.lex()||A,typeof H!="number"&&(H instanceof Array&&(y=H,H=y.pop()),H=m.symbols_[H]||H),H}o(D,"lex");for(var P,F,B,$,z,Y,Q={},X,ie,j,J;;){if(B=g[g.length-1],this.defaultActions[B]?$=this.defaultActions[B]:((P===null||typeof P>"u")&&(P=D()),$=b[B]&&b[B][P]),typeof $>"u"||!$.length||!$[0]){var Z="";J=[];for(X in b[B])this.terminals_[X]&&X>_&&J.push("'"+this.terminals_[X]+"'");M.showPosition?Z="Parse error on line "+(S+1)+`: +`+M.showPosition()+` +Expecting `+J.join(", ")+", got '"+(this.terminals_[P]||P)+"'":Z="Parse error on line "+(S+1)+": Unexpected "+(P==A?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(Z,{text:M.match,token:this.terminals_[P]||P,line:M.yylineno,loc:I,expected:J})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+B+", token: "+P);switch($[0]){case 1:g.push(P),v.push(M.yytext),x.push(M.yylloc),g.push($[1]),P=null,F?(P=F,F=null):(T=M.yyleng,w=M.yytext,S=M.yylineno,I=M.yylloc,E>0&&E--);break;case 2:if(ie=this.productions_[$[1]][1],Q.$=v[v.length-ie],Q._$={first_line:x[x.length-(ie||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(ie||1)].first_column,last_column:x[x.length-1].last_column},C&&(Q._$.range=[x[x.length-(ie||1)].range[0],x[x.length-1].range[1]]),Y=this.performAction.apply(Q,[w,T,S,N.yy,$[1],v,x].concat(L)),typeof Y<"u")return Y;ie&&(g=g.slice(0,-1*ie*2),v=v.slice(0,-1*ie),x=x.slice(0,-1*ie)),g.push(this.productions_[$[1]][0]),v.push(Q.$),x.push(Q._$),j=b[g[g.length-2]][g[g.length-1]],g.push(j);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();sP.parser=sP;ode=sP});var Ug,oP,Sx,Ax,TUe,kUe,EUe,CUe,SUe,AUe,_Ue,cde,LUe,lP,ude=R(()=>{"use strict";_t();bi();Ug="",oP=[],Sx=[],Ax=[],TUe=o(function(){oP.length=0,Sx.length=0,Ug="",Ax.length=0,vr()},"clear"),kUe=o(function(t){Ug=t,oP.push(t)},"addSection"),EUe=o(function(){return oP},"getSections"),CUe=o(function(){let t=cde(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),AUe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:Ug,type:Ug,people:a,task:t,score:n};Ax.push(s)},"addTask"),_Ue=o(function(t){let e={section:Ug,type:Ug,description:t,task:t,classes:[]};Sx.push(e)},"addTaskOrg"),cde=o(function(){let t=o(function(r){return Ax[r].processed},"compileTask"),e=!0;for(let[r,n]of Ax.entries())t(r),e=e&&n.processed;return e},"compileTasks"),LUe=o(function(){return SUe()},"getActors"),lP={getConfig:o(()=>de().journey,"getConfig"),clear:TUe,setDiagramTitle:nn,getDiagramTitle:Xr,setAccTitle:kr,getAccTitle:Ar,setAccDescription:_r,getAccDescription:Lr,addSection:kUe,getSections:EUe,getTasks:CUe,addTask:AUe,addTaskOrg:_Ue,getActors:LUe}});var DUe,hde,fde=R(()=>{"use strict";DUe=o(t=>`.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${t.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${t.textColor} + } + + .legend { + fill: ${t.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${t.textColor} + } + + .face { + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${t.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${t.fillType0?`fill: ${t.fillType0}`:""}; + } + .task-type-1, .section-type-1 { + ${t.fillType0?`fill: ${t.fillType1}`:""}; + } + .task-type-2, .section-type-2 { + ${t.fillType0?`fill: ${t.fillType2}`:""}; + } + .task-type-3, .section-type-3 { + ${t.fillType0?`fill: ${t.fillType3}`:""}; + } + .task-type-4, .section-type-4 { + ${t.fillType0?`fill: ${t.fillType4}`:""}; + } + .task-type-5, .section-type-5 { + ${t.fillType0?`fill: ${t.fillType5}`:""}; + } + .task-type-6, .section-type-6 { + ${t.fillType0?`fill: ${t.fillType6}`:""}; + } + .task-type-7, .section-type-7 { + ${t.fillType0?`fill: ${t.fillType7}`:""}; + } + + .actor-0 { + ${t.actor0?`fill: ${t.actor0}`:""}; + } + .actor-1 { + ${t.actor1?`fill: ${t.actor1}`:""}; + } + .actor-2 { + ${t.actor2?`fill: ${t.actor2}`:""}; + } + .actor-3 { + ${t.actor3?`fill: ${t.actor3}`:""}; + } + .actor-4 { + ${t.actor4?`fill: ${t.actor4}`:""}; + } + .actor-5 { + ${t.actor5?`fill: ${t.actor5}`:""}; + } +`,"getStyles"),hde=DUe});var cP,RUe,pde,mde,NUe,MUe,dde,IUe,OUe,gde,PUe,Hg,yde=R(()=>{"use strict";Zt();Qy();cP=o(function(t,e){return yd(t,e)},"drawRect"),RUe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),pde=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),mde=o(function(t,e){return TW(t,e)},"drawText"),NUe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,mde(t,e)},"drawLabel"),MUe=o(function(t,e,r){let n=t.append("g"),i=wl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,cP(n,i),gde(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),dde=-1,IUe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");dde++;let a=300+5*30;i.append("line").attr("id","task"+dde).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),RUe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=wl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,cP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};pde(i,f),l+=10}),gde(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),OUe=o(function(t,e){j3(t,e)},"drawBackgroundRect"),gde=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{let i=Xu[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:Xu[n].position};Hg.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};Hg.drawText(t,s),r+=20})}var BUe,Xu,JE,I0,zUe,Zo,uP,vde,GUe,hP,xde=R(()=>{"use strict";Zt();yde();_t();Yn();BUe=o(function(t){Object.keys(t).forEach(function(r){JE[r]=t[r]})},"setConf"),Xu={};o(FUe,"drawActorLegend");JE=de().journey,I0=JE.leftMargin,zUe=o(function(t,e,r,n){let i=de().journey,a=de().securityLevel,s;a==="sandbox"&&(s=$e("#i"+e));let l=a==="sandbox"?$e(s.nodes()[0].contentDocument.body):$e("body");Zo.init();let u=l.select("#"+e);Hg.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in Xu)delete Xu[x];let p=0;d.forEach(x=>{Xu[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),FUe(u),Zo.insert(0,0,I0,Object.keys(Xu).length*50),GUe(u,h,0);let m=Zo.getBounds();f&&u.append("text").text(f).attr("x",I0).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=I0+m.stopx+2*i.diagramMarginX;Sr(u,g,y,i.useMaxWidth),u.append("line").attr("x1",I0).attr("y1",i.height*4).attr("x2",y-I0-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),Zo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=de().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(Zo.data,"startx",i,Math.min),this.updateVal(Zo.data,"starty",s,Math.min),this.updateVal(Zo.data,"stopx",a,Math.max),this.updateVal(Zo.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},uP=JE.sectionFills,vde=JE.sectionColours,GUe=o(function(t,e,r){let n=de().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=uP[l%uP.length],f=l%uP.length,h=vde[l%vde.length];let g=0,y=p.section;for(let x=d;x(Xu[y]&&(g[y]=Xu[y]),g),{});p.x=d*n.taskMargin+d*n.width+I0,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,Hg.drawTask(t,p,n),Zo.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),hP={setConf:BUe,draw:zUe}});var bde={};hr(bde,{diagram:()=>$Ue});var $Ue,wde=R(()=>{"use strict";lde();ude();fde();xde();$Ue={parser:ode,db:lP,renderer:hP,styles:hde,init:o(t=>{hP.setConf(t.journey),lP.clear()},"init")}});var dP,_de,Lde=R(()=>{"use strict";dP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var S=b.length-1;switch(x){case 1:return b[S-1];case 2:this.$=[];break;case 3:b[S-1].push(b[S]),this.$=b[S-1];break;case 4:case 5:this.$=b[S];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[S].substr(6)),this.$=b[S].substr(6);break;case 9:this.$=b[S].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[S].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[S].substr(8)),this.$=b[S].substr(8);break;case 15:v.addTask(b[S],0,""),this.$=b[S];break;case 16:v.addEvent(b[S].substr(2)),this.$=b[S];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,S="",T=0,E=0,_=0,A=2,L=1,M=b.slice.call(arguments,1),N=Object.create(this.lexer),k={yy:{}};for(var I in this.yy)Object.prototype.hasOwnProperty.call(this.yy,I)&&(k.yy[I]=this.yy[I]);N.setInput(m,k.yy),k.yy.lexer=N,k.yy.parser=this,typeof N.yylloc>"u"&&(N.yylloc={});var C=N.yylloc;b.push(C);var O=N.options&&N.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(q){y.length=y.length-2*q,x.length=x.length-q,b.length=b.length-q}o(D,"popStack");function P(){var q;return q=v.pop()||N.lex()||L,typeof q!="number"&&(q instanceof Array&&(v=q,q=v.pop()),q=g.symbols_[q]||q),q}o(P,"lex");for(var F,B,$,z,Y,Q,X={},ie,j,J,Z;;){if($=y[y.length-1],this.defaultActions[$]?z=this.defaultActions[$]:((F===null||typeof F>"u")&&(F=P()),z=w[$]&&w[$][F]),typeof z>"u"||!z.length||!z[0]){var H="";Z=[];for(ie in w[$])this.terminals_[ie]&&ie>A&&Z.push("'"+this.terminals_[ie]+"'");N.showPosition?H="Parse error on line "+(T+1)+`: +`+N.showPosition()+` +Expecting `+Z.join(", ")+", got '"+(this.terminals_[F]||F)+"'":H="Parse error on line "+(T+1)+": Unexpected "+(F==L?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(H,{text:N.match,token:this.terminals_[F]||F,line:N.yylineno,loc:C,expected:Z})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$+", token: "+F);switch(z[0]){case 1:y.push(F),x.push(N.yytext),b.push(N.yylloc),y.push(z[1]),F=null,B?(F=B,B=null):(E=N.yyleng,S=N.yytext,T=N.yylineno,C=N.yylloc,_>0&&_--);break;case 2:if(j=this.productions_[z[1]][1],X.$=x[x.length-j],X._$={first_line:b[b.length-(j||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(j||1)].first_column,last_column:b[b.length-1].last_column},O&&(X._$.range=[b[b.length-(j||1)].range[0],b[b.length-1].range[1]]),Q=this.performAction.apply(X,[S,E,T,k.yy,z[1],x,b].concat(M)),typeof Q<"u")return Q;j&&(y=y.slice(0,-1*j*2),x=x.slice(0,-1*j),b=b.slice(0,-1*j)),y.push(this.productions_[z[1]][0]),x.push(X.$),b.push(X._$),J=w[y[y.length-2]][y[y.length-1]],y.push(J);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();dP.parser=dP;_de=dP});var mP={};hr(mP,{addEvent:()=>Fde,addSection:()=>Ide,addTask:()=>Bde,addTaskOrg:()=>zde,clear:()=>Mde,default:()=>KUe,getCommonDb:()=>Nde,getSections:()=>Ode,getTasks:()=>Pde});var Yg,Rde,pP,e6,Wg,Nde,Mde,Ide,Ode,Pde,Bde,Fde,zde,Dde,KUe,Gde=R(()=>{"use strict";bi();Yg="",Rde=0,pP=[],e6=[],Wg=[],Nde=o(()=>ly,"getCommonDb"),Mde=o(function(){pP.length=0,e6.length=0,Yg="",Wg.length=0,vr()},"clear"),Ide=o(function(t){Yg=t,pP.push(t)},"addSection"),Ode=o(function(){return pP},"getSections"),Pde=o(function(){let t=Dde(),e=100,r=0;for(;!t&&rr.id===Rde-1).events.push(t)},"addEvent"),zde=o(function(t){let e={section:Yg,type:Yg,description:t,task:t,classes:[]};e6.push(e)},"addTaskOrg"),Dde=o(function(){let t=o(function(r){return Wg[r].processed},"compileTask"),e=!0;for(let[r,n]of Wg.entries())t(r),e=e&&n.processed;return e},"compileTasks"),KUe={clear:Mde,getCommonDb:Nde,addSection:Ide,getSections:Ode,getTasks:Pde,addTask:Bde,addTaskOrg:zde,addEvent:Fde}});function Hde(t,e){t.each(function(){var r=$e(this),n=r.text().split(/(\s+|
    )/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||i==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),i==="
    "?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var QUe,t6,ZUe,JUe,Vde,eHe,tHe,$de,rHe,nHe,iHe,gP,Ude,aHe,sHe,oHe,lHe,xf,Yde=R(()=>{"use strict";Zt();QUe=12,t6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),ZUe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),JUe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),Vde=o(function(t,e){let r=e.text.replace(//gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),eHe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,Vde(t,e)},"drawLabel"),tHe=o(function(t,e,r){let n=t.append("g"),i=gP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,t6(n,i),Ude(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),$de=-1,rHe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");$de++;let a=300+5*30;i.append("line").attr("id","task"+$de).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),ZUe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=gP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,t6(i,s),Ude(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),nHe=o(function(t,e){t6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),iHe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),gP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),Ude=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{"use strict";Zt();Yde();ut();_t();Yn();cHe=o(function(t,e,r,n){let i=de(),a=i.leftMargin??50;V.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=$e("#i"+e));let h=(s==="sandbox"?$e(l.nodes()[0].contentDocument.body):$e("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();V.debug("task",f),xf.initGraphics(h);let p=n.db.getSections();V.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,S=!0;p.forEach(function(L){let M={number:w,descr:L,section:w,width:150,padding:20,maxHeight:m},N=xf.getVirtualNodeHeight(h,M,i);V.debug("sectionHeight before draw",N),m=Math.max(m,N+20)});let T=0,E=0;V.debug("tasks.length",f.length);for(let[L,M]of f.entries()){let N={number:L,descr:M,section:M.section,width:150,padding:20,maxHeight:g},k=xf.getVirtualNodeHeight(h,N,i);V.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,M.events.length);let I=0;for(let C of M.events){let O={descr:C,section:M.section,number:M.section,width:150,padding:20,maxHeight:50};I+=xf.getVirtualNodeHeight(h,O,i)}E=Math.max(E,I)}V.debug("maxSectionHeight before draw",m),V.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(L=>{let M=f.filter(C=>C.section===L),N={number:w,descr:L,section:w,width:200*Math.max(M.length,1)-50,padding:20,maxHeight:m};V.debug("sectionNode",N);let k=h.append("g"),I=xf.drawNode(k,N,w,i);V.debug("sectionNode output",I),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,M.length>0&&Wde(h,M,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(M.length,1),b=v,w++}):(S=!1,Wde(h,f,w,x,b,g,i,T,E,m,!0));let _=h.node().getBBox();V.debug("bounds",_),d&&h.append("text").text(d).attr("x",_.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=S?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",_.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Lo(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),Wde=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};V.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=xf.drawNode(m,p,r,s).height;if(V.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+uHe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),uHe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};V.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=xf.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),qde={setConf:o(()=>{},"setConf"),draw:cHe}});var hHe,fHe,jde,Kde=R(()=>{"use strict";al();hHe=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${hHe(t)} + .section-root rect, .section-root path, .section-root circle { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`,"getStyles"),jde=fHe});var Qde={};hr(Qde,{diagram:()=>dHe});var dHe,Zde=R(()=>{"use strict";Lde();Gde();Xde();Kde();dHe={db:mP,renderer:qde,parser:_de,styles:jde}});var yP,t0e,r0e=R(()=>{"use strict";yP=function(){var t=o(function(S,T,E,_){for(E=E||{},_=S.length;_--;E[S[_]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,_,A,L,M,N){var k=M.length-1;switch(L){case 6:case 7:return A;case 8:A.getLogger().trace("Stop NL ");break;case 9:A.getLogger().trace("Stop EOF ");break;case 11:A.getLogger().trace("Stop NL2 ");break;case 12:A.getLogger().trace("Stop EOF2 ");break;case 15:A.getLogger().info("Node: ",M[k].id),A.addNode(M[k-1].length,M[k].id,M[k].descr,M[k].type);break;case 16:A.getLogger().trace("Icon: ",M[k]),A.decorateNode({icon:M[k]});break;case 17:case 21:A.decorateNode({class:M[k]});break;case 18:A.getLogger().trace("SPACELIST");break;case 19:A.getLogger().trace("Node: ",M[k].id),A.addNode(0,M[k].id,M[k].descr,M[k].type);break;case 20:A.decorateNode({icon:M[k]});break;case 25:A.getLogger().trace("node found ..",M[k-2]),this.$={id:M[k-1],descr:M[k-1],type:A.getType(M[k-2],M[k])};break;case 26:this.$={id:M[k],descr:M[k],type:A.nodeType.DEFAULT};break;case 27:A.getLogger().trace("node found ..",M[k-3]),this.$={id:M[k-3],descr:M[k-1],type:A.getType(M[k-2],M[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var _=new Error(T);throw _.hash=E,_}},"parseError"),parse:o(function(T){var E=this,_=[0],A=[],L=[null],M=[],N=this.table,k="",I=0,C=0,O=0,D=2,P=1,F=M.slice.call(arguments,1),B=Object.create(this.lexer),$={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&($.yy[z]=this.yy[z]);B.setInput(T,$.yy),$.yy.lexer=B,$.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var Y=B.yylloc;M.push(Y);var Q=B.options&&B.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function X(ke){_.length=_.length-2*ke,L.length=L.length-ke,M.length=M.length-ke}o(X,"popStack");function ie(){var ke;return ke=A.pop()||B.lex()||P,typeof ke!="number"&&(ke instanceof Array&&(A=ke,ke=A.pop()),ke=E.symbols_[ke]||ke),ke}o(ie,"lex");for(var j,J,Z,H,q,K,se={},ce,ue,te,De;;){if(Z=_[_.length-1],this.defaultActions[Z]?H=this.defaultActions[Z]:((j===null||typeof j>"u")&&(j=ie()),H=N[Z]&&N[Z][j]),typeof H>"u"||!H.length||!H[0]){var oe="";De=[];for(ce in N[Z])this.terminals_[ce]&&ce>D&&De.push("'"+this.terminals_[ce]+"'");B.showPosition?oe="Parse error on line "+(I+1)+`: +`+B.showPosition()+` +Expecting `+De.join(", ")+", got '"+(this.terminals_[j]||j)+"'":oe="Parse error on line "+(I+1)+": Unexpected "+(j==P?"end of input":"'"+(this.terminals_[j]||j)+"'"),this.parseError(oe,{text:B.match,token:this.terminals_[j]||j,line:B.yylineno,loc:Y,expected:De})}if(H[0]instanceof Array&&H.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+j);switch(H[0]){case 1:_.push(j),L.push(B.yytext),M.push(B.yylloc),_.push(H[1]),j=null,J?(j=J,J=null):(C=B.yyleng,k=B.yytext,I=B.yylineno,Y=B.yylloc,O>0&&O--);break;case 2:if(ue=this.productions_[H[1]][1],se.$=L[L.length-ue],se._$={first_line:M[M.length-(ue||1)].first_line,last_line:M[M.length-1].last_line,first_column:M[M.length-(ue||1)].first_column,last_column:M[M.length-1].last_column},Q&&(se._$.range=[M[M.length-(ue||1)].range[0],M[M.length-1].range[1]]),K=this.performAction.apply(se,[k,C,I,$.yy,H[1],L,M].concat(F)),typeof K<"u")return K;ue&&(_=_.slice(0,-1*ue*2),L=L.slice(0,-1*ue),M=M.slice(0,-1*ue)),_.push(this.productions_[H[1]][0]),L.push(se.$),M.push(se._$),te=N[_[_.length-2]][_[_.length-1]],_.push(te);break;case 3:return!0}}return!0},"parse")},b=function(){var S={EOF:1,parseError:o(function(E,_){if(this.yy.parser)this.yy.parser.parseError(E,_);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,_=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),_.length-1&&(this.yylineno-=_.length-1);var L=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:_?(_.length===A.length?this.yylloc.first_column:0)+A[A.length-_.length].length-_[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[L[0],L[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+` +`+E+"^"},"showPosition"),test_match:o(function(T,E){var _,A,L;if(this.options.backtrack_lexer&&(L={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(L.yylloc.range=this.yylloc.range.slice(0))),A=T[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],_=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),_)return _;if(this._backtrack){for(var M in L)this[M]=L[M];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,_,A;this._more||(this.yytext="",this.match="");for(var L=this._currentRules(),M=0;ME[0].length)){if(E=_,A=M,this.options.backtrack_lexer){if(T=this.test_match(_,L[M]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,L[A]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,_,A,L){var M=L;switch(A){case 0:return E.getLogger().trace("Found comment",_.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",_.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",_.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",_.yytext),20;break;case 36:return E.getLogger().trace("Long description:",_.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return S}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();yP.parser=yP;t0e=yP});var Gl,n0e,vP,yHe,vHe,xHe,bHe,$i,wHe,THe,kHe,EHe,CHe,SHe,AHe,i0e,a0e=R(()=>{"use strict";_t();rr();ut();sl();Gl=[],n0e=0,vP={},yHe=o(()=>{Gl=[],n0e=0,vP={}},"clear"),vHe=o(function(t){for(let e=Gl.length-1;e>=0;e--)if(Gl[e].levelGl.length>0?Gl[0]:null,"getMindmap"),bHe=o((t,e,r,n)=>{V.info("addNode",t,e,r,n);let i=de(),a=i.mindmap?.padding??mr.mindmap.padding;switch(n){case $i.ROUNDED_RECT:case $i.RECT:case $i.HEXAGON:a*=2}let s={id:n0e++,nodeId:qr(e,i),level:t,descr:qr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??mr.mindmap.maxNodeWidth,padding:a},l=vHe(t);if(l)l.children.push(s),Gl.push(s);else if(Gl.length===0)Gl.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),$i={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},wHe=o((t,e)=>{switch(V.debug("In get type",t,e),t){case"[":return $i.RECT;case"(":return e===")"?$i.ROUNDED_RECT:$i.CLOUD;case"((":return $i.CIRCLE;case")":return $i.CLOUD;case"))":return $i.BANG;case"{{":return $i.HEXAGON;default:return $i.DEFAULT}},"getType"),THe=o((t,e)=>{vP[t]=e},"setElementForId"),kHe=o(t=>{if(!t)return;let e=de(),r=Gl[Gl.length-1];t.icon&&(r.icon=qr(t.icon,e)),t.class&&(r.class=qr(t.class,e))},"decorateNode"),EHe=o(t=>{switch(t){case $i.DEFAULT:return"no-border";case $i.RECT:return"rect";case $i.ROUNDED_RECT:return"rounded-rect";case $i.CIRCLE:return"circle";case $i.CLOUD:return"cloud";case $i.BANG:return"bang";case $i.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),CHe=o(()=>V,"getLogger"),SHe=o(t=>vP[t],"getElementById"),AHe={clear:yHe,addNode:bHe,getMindmap:xHe,nodeType:$i,getType:wHe,setElementForId:THe,decorateNode:kHe,type2Str:EHe,getLogger:CHe,getElementById:SHe},i0e=AHe});function Hi(t){"@babel/helpers - typeof";return Hi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hi(t)}function XP(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s0e(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function eYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function tYe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function lYe(t){for(var e=t.length;e--&&oYe.test(t.charAt(e)););return e}function hYe(t){return t&&t.slice(0,cYe(t)+1).replace(uYe,"")}function gYe(t){var e=pYe.call(t,_x),r=t[_x];try{t[_x]=void 0;var n=!0}catch{}var i=mYe.call(t);return n&&(e?t[_x]=r:delete t[_x]),i}function bYe(t){return xYe.call(t)}function EYe(t){return t==null?t===void 0?kYe:TYe:u0e&&u0e in Object(t)?yYe(t):wYe(t)}function CYe(t){return t!=null&&typeof t=="object"}function _Ye(t){return typeof t=="symbol"||SYe(t)&&Rpe(t)==AYe}function MYe(t){if(typeof t=="number")return t;if(Jx(t))return h0e;if(V0(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=V0(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=fYe(t);var r=DYe.test(t);return r||RYe.test(t)?NYe(t.slice(2),r?2:8):LYe.test(t)?h0e:+t}function BYe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(IYe);e=f0e(e)||0,V0(r)&&(f=!!r.leading,d="maxWait"in r,a=d?OYe(f0e(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var _=n,A=i;return n=i=void 0,h=E,s=t.apply(A,_),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var _=E-u,A=E-h,L=e-_;return d?PYe(L,a-A):L}o(y,"remainingWait");function v(E){var _=E-u,A=E-h;return u===void 0||_>=e||_<0||d&&A>=a}o(v,"shouldInvoke");function x(){var E=xP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function S(){return l===void 0?s:b(xP())}o(S,"flush");function T(){var E=xP(),_=v(E);if(n=arguments,i=this,u=E,_){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=S,T}function z6(t,e,r,n,i,a){var s;return jn(t)?s=t:s=o1[t]||o1.euclidean,e===0&&jn(t)?s(i,a):s(e,r,n,i,a)}function Lqe(t,e){if(G6(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Jx(t)?!0:_qe.test(t)||!Aqe.test(t)||e!=null&&t in Object(e)}function Oqe(t){if(!V0(t))return!1;var e=Rpe(t);return e==Nqe||e==Mqe||e==Rqe||e==Iqe}function Fqe(t){return!!N0e&&N0e in t}function Vqe(t){if(t!=null){try{return $qe.call(t)}catch{}try{return t+""}catch{}}return""}function Qqe(t){if(!V0(t)||zqe(t))return!1;var e=Pqe(t)?Kqe:Yqe;return e.test(Uqe(t))}function Jqe(t,e){return t?.[e]}function tXe(t,e){var r=eXe(t,e);return Zqe(r)?r:void 0}function nXe(){this.__data__=Wx?Wx(null):{},this.size=0}function aXe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function uXe(t){var e=this.__data__;if(Wx){var r=e[t];return r===oXe?void 0:r}return cXe.call(e,t)?e[t]:void 0}function pXe(t){var e=this.__data__;return Wx?e[t]!==void 0:dXe.call(e,t)}function yXe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Wx&&e===void 0?gXe:e,this}function h1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1}function RXe(t,e){var r=this.__data__,n=$6(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function f1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function ume(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i0&&arguments[0]!==void 0?arguments[0]:mKe,e=arguments.length>1?arguments[1]:void 0,r=0;r0?k=C:N=C;while(Math.abs(I)>s&&++O=a?b(M,O):D===0?O:S(M,N,N+h)}o(T,"getTForX");var E=!1;function _(){E=!0,(t!==e||r!==n)&&w()}o(_,"precompute");var A=o(function(N){return E||_(),t===e&&r===n?N:N===0?0:N===1?1:v(T(N),e,n)},"f");A.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var L="generateBezier("+[t,e,r,n]+")";return A.toString=function(){return L},A}function Q0e(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function Z0e(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function jg(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=Z0e(t,i),l=Z0e(e,i);if(ft(s)&&ft(l))return Q0e(a,s,l,r,n);if(vn(s)&&vn(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=v6[m].apply(null,g)):s.easingImpl=v6[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Nx(x.x,b.x)&&(w.x=jg(x.x,b.x,v,y)),Nx(x.y,b.y)&&(w.y=jg(x.y,b.y,v,y)),t.position(w)}var S=s.startPan,T=s.pan,E=a.pan,_=T!=null&&n;_&&(Nx(S.x,T.x)&&(E.x=jg(S.x,T.x,v,y)),Nx(S.y,T.y)&&(E.y=jg(S.y,T.y,v,y)),t.emit("pan"));var A=s.startZoom,L=s.zoom,M=L!=null&&n;M&&(Nx(A,L)&&(a.zoom=Hx(a.minZoom,jg(A,L,v,y),a.maxZoom)),t.emit("zoom")),(_||M)&&t.emit("viewport");var N=s.style;if(N&&N.length>0&&i){for(var k=0;k=0;_--){var A=E[_];A()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],S=w._private;if(S.stopped){m.splice(b,1),S.hooked=!1,S.playing=!1,S.started=!1,x(S.frames);continue}!S.playing&&!S.applying||(S.playing&&S.applying&&(S.applying=!1),S.started||LKe(f,w,t),_Ke(f,w,t,d),S.applying&&(S.applying=!1),x(S.frames),S.step!=null&&S.step(t),w.completed()&&(m.splice(b,1),S.hooked=!1,S.playing=!1,S.started=!1,x(S.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function Ame(t){this.options=Wt({},BKe,FKe,t)}function _me(t){this.options=Wt({},zKe,t)}function Lme(t){this.options=Wt({},GKe,t)}function j6(t){this.options=Wt({},$Ke,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function Rme(t){this.options=Wt({},iQe,t)}function dB(t){this.options=Wt({},aQe,t)}function Nme(t){this.options=Wt({},sQe,t)}function Mme(t){this.options=Wt({},oQe,t)}function Ime(t){this.options=t,this.notifications=0}function Bme(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function mB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(uQe(t,e,r,n,i),{cx:GP,cy:$P,radius:z0,startX:Ome,startY:Pme,stopX:VP,stopY:UP,startAngle:Gc.ang+Math.PI/2*G0,endAngle:Jo.ang-Math.PI/2*G0,counterClockwise:w6})}function Fme(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function ZQe(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a{"use strict";o(Hi,"_typeof");o(XP,"_classCallCheck");o(s0e,"_defineProperties");o(jP,"_createClass");o(bpe,"_defineProperty$1");o($l,"_slicedToArray");o(_He,"_arrayWithHoles");o(LHe,"_iterableToArrayLimit");o(wpe,"_unsupportedIterableToArray");o(o0e,"_arrayLikeToArray");o(DHe,"_nonIterableRest");o(Tpe,"_createForOfIteratorHelper");Vi=typeof window>"u"?null:window,l0e=Vi?Vi.navigator:null;Vi&&Vi.document;RHe=Hi(""),kpe=Hi({}),NHe=Hi(function(){}),MHe=typeof HTMLElement>"u"?"undefined":Hi(HTMLElement),Qx=o(function(e){return e&&e.instanceString&&jn(e.instanceString)?e.instanceString():null},"instanceStr"),zt=o(function(e){return e!=null&&Hi(e)==RHe},"string"),jn=o(function(e){return e!=null&&Hi(e)===NHe},"fn"),vn=o(function(e){return!xo(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Mr=o(function(e){return e!=null&&Hi(e)===kpe&&!vn(e)&&e.constructor===Object},"plainObject"),IHe=o(function(e){return e!=null&&Hi(e)===kpe},"object"),ft=o(function(e){return e!=null&&Hi(e)===Hi(1)&&!isNaN(e)},"number"),OHe=o(function(e){return ft(e)&&Math.floor(e)===e},"integer"),k6=o(function(e){if(MHe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),xo=o(function(e){return Zx(e)||Epe(e)},"elementOrCollection"),Zx=o(function(e){return Qx(e)==="collection"&&e._private.single},"element"),Epe=o(function(e){return Qx(e)==="collection"&&!e._private.single},"collection"),KP=o(function(e){return Qx(e)==="core"},"core"),Cpe=o(function(e){return Qx(e)==="stylesheet"},"stylesheet"),PHe=o(function(e){return Qx(e)==="event"},"event"),Sf=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),BHe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),FHe=o(function(e){return Mr(e)&&ft(e.x1)&&ft(e.x2)&&ft(e.y1)&&ft(e.y2)},"boundingBox"),zHe=o(function(e){return IHe(e)&&jn(e.then)},"promise"),GHe=o(function(){return l0e&&l0e.userAgent.match(/msie|trident|edge/i)},"ms"),Gx=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),qHe=o(function(e,r){return-1*Ape(e,r)},"descending"),Wt=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+UHe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),KHe=o(function(e){var r,n=new RegExp("^"+$He+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),QHe=o(function(e){return JHe[e.toLowerCase()]},"colorname2tuple"),ZHe=o(function(e){return(vn(e)?e:null)||QHe(e)||XHe(e)||KHe(e)||jHe(e)},"color2tuple"),JHe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_pe=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:Zg,n=r,i;i=e.next(),!i.done;)n=n*Mpe+i.value|0;return n},"hashIterableInts"),$x=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Zg;return r*Mpe+e|0},"hashInt"),Vx=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ix;return(r<<5)+r+e|0},"hashIntAlt"),zYe=o(function(e,r){return e*2097152+r},"combineHashes"),bf=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),r6=o(function(e,r){return[$x(e[0],r[0]),Vx(e[1],r[1])]},"hashArrays"),GYe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),eB=o(function(e){e.splice(0,e.length)},"clearArray"),qYe=o(function(e,r){for(var n=0;n"u"?"undefined":Hi(Set))!==jYe?Set:KYe,B6=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!KP(e)){oi("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){oi("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new c1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];vn(r.classes)?h=r.classes:zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;fb?1:0},"defaultCmp"),f=o(function(x,b,w,S,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(S==null&&(S=x.length);wM;0<=M?L++:L--)A.push(L);return A}.apply(this).reverse(),_=[],S=0,T=E.length;SN;0<=N?++A:--A)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,S){var T,E,_;for(S==null&&(S=n),T=x[w];w>b;){if(_=w-1>>1,E=x[_],S(T,E)<0){x[w]=E,w=_;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var S,T,E,_,A;for(w==null&&(w=n),T=x.length,A=b,E=x[b],S=2*b+1;S0;){var E=b.pop(),_=v(E),A=E.id();if(p[A]=_,_!==1/0)for(var L=E.neighborhood().intersect(g),M=0;M0)for(F.unshift(P);d[$];){var z=d[$];F.unshift(z.edge),F.unshift(z.node),B=z.node,$=B.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},eWe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(S){for(var T=0;T0;){if(T(),_++,S===f){for(var A=[],L=a,M=f,N=x[M];A.unshift(L),N!=null&&A.unshift(N),L=v[M],L!=null;)M=L.id(),N=x[M];return{found:!0,distance:d[S],path:this.spawn(A),steps:_}}m[S]=!0;for(var k=w._private.edges,I=0;IN&&(g[M]=N,b[M]=L,w[M]=T),!a){var k=L*f+A;!a&&g[k]>N&&(g[k]=N,b[k]=A,w[k]=T)}}}for(var I=0;I1&&arguments[1]!==void 0?arguments[1]:s,Se=w(ke),Ue=[],Pe=Se;;){if(Pe==null)return r.spawn();var _e=b(Pe),me=_e.edge,W=_e.pred;if(Ue.unshift(Pe[0]),Pe.same(Ie)&&Ue.length>0)break;me!=null&&Ue.unshift(me),Pe=W}return u.spawn(Ue)},"pathTo"),E=0;E=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gi;){var a=Math.floor(Math.random()*r.length);r=lWe(a,e,r),n--}return r},"contractUntil"),cWe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/oWe);if(a<2){oi("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),mWe=o(function(e){return Math.PI*e/180},"deg2rad"),n6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),tB=Math.log2||function(t){return Math.log(t)/Math.log(2)},$pe=o(function(e){return e>0?1:e<0?-1:0},"signum"),H0=o(function(e,r){return Math.sqrt(B0(e,r))},"dist"),B0=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),gWe=o(function(e){for(var r=e.length,n=0,i=0;i=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),vWe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),xWe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),bWe=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),Vpe=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),wWe=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),p6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),m6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=$l(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),g0e=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),rB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),s1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),TWe=o(function(e,r){return s1(e,r.x,r.y)},"pointInBoundingBox"),Upe=o(function(e,r){return s1(e,r.x1,r.y1)&&s1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),Hpe=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Y0(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=kf(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,S=i-d+h-l,T=w,E=i+d-h+l;if(g=kf(e,r,n,i,w,S,T,E,!1),g.length>0)return g}if(p){var _=n-f+h-l,A=i+d+l,L=n+f-h+l,M=A;if(g=kf(e,r,n,i,_,A,L,M,!1),g.length>0)return g}if(m){var N=n-f-l,k=i-d+h-l,I=N,C=i+d-h+l;if(g=kf(e,r,n,i,N,k,I,C,!1),g.length>0)return g}var O;{var D=n-f+h,P=i-d+h;if(O=Ox(e,r,n,i,D,P,h+l),O.length>0&&O[0]<=D&&O[1]<=P)return[O[0],O[1]]}{var F=n+f-h,B=i-d+h;if(O=Ox(e,r,n,i,F,B,h+l),O.length>0&&O[0]>=F&&O[1]<=B)return[O[0],O[1]]}{var $=n+f-h,z=i+d-h;if(O=Ox(e,r,n,i,$,z,h+l),O.length>0&&O[0]>=$&&O[1]>=z)return[O[0],O[1]]}{var Y=n-f+h,Q=i+d-h;if(O=Ox(e,r,n,i,Y,Q,h+l),O.length>0&&O[0]<=Y&&O[1]>=Q)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),kWe=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),EWe=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),CWe=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),SWe=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),AWe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];SWe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,S,T=0;T=0?Sh?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),zs=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Qu=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=A6(f,-h);y=S6(v)}else y=f;return zs(e,r,y)},"pointInsidePolygon"),LWe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,S=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,S];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,S,T,E]}else return[w,S]},"intersectLineCircle"),TP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),kf=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,S=x/b,T=.001,E=0-T,_=1+T;return E<=w&&w<=_&&E<=S&&S<=_?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?TP(e,n,l)===l?[l,u]:TP(e,n,a)===a?[a,s]:TP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),Yx=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g0){var y=A6(d,-u);m=S6(y)}else m=d}else m=n;for(var v,x,b,w,S=0;S2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=S)},"set"),get:o(function(w){return h[w]},"get")},p=0;p0?D=O.edgesTo(C)[0]:D=C.edgesTo(O)[0];var P=i(D);C=C.id(),A[C]>A[k]+P&&(A[C]=A[k]+P,L.nodes.indexOf(C)<0?L.push(C):L.updateItem(C),_[C]=0,E[C]=[]),A[C]==A[k]+P&&(_[C]=_[C]+_[k],E[C].push(k))}else for(var F=0;F0;){for(var Y=T.pop(),Q=0;Q0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),YWe=o(function(e,r){for(var n=0;n5&&arguments[5]!==void 0?arguments[5]:XWe,l=i,u,h,f=0;f=2?Lx(e,r,n,0,w0e,jWe):Lx(e,r,n,0,b0e)},"euclidean"),squaredEuclidean:o(function(e,r,n){return Lx(e,r,n,0,w0e)},"squaredEuclidean"),manhattan:o(function(e,r,n){return Lx(e,r,n,0,b0e)},"manhattan"),max:o(function(e,r,n){return Lx(e,r,n,-1/0,KWe)},"max")};o1["squared-euclidean"]=o1.squaredEuclidean;o1.squaredeuclidean=o1.squaredEuclidean;o(z6,"clusteringDistance");QWe=Sa({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),iB=o(function(e){return QWe(e)},"setOptions"),_6=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return z6(e,i.length,l,u,h,f)},"getDist"),kP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;hn)return!1}return!0},"haveMatricesConverged"),eqe=o(function(e,r,n){for(var i=0;il&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xn[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]0&&i.push(a);return i},"findExemplars"),A0e=o(function(e,r,n){for(var i=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;fh&&(u=f,h=d)}n[a]=s[u]}return i=A0e(e,r,n),i},"assign"),_0e=o(function(e){for(var r=this.cy(),n=this.nodes(),i=pqe(e),a={},s=0;s=N?(k=N,N=C,I=O):C>k&&(k=C);for(var D=0;D0?1:0;_[L%i.minIterations*l+Y]=Q,z+=Q}if(z>0&&(L>=i.minIterations-1||L==i.maxIterations-1)){for(var X=0,ie=0;ie1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(A){A.isEdge()&&d[w].push(A.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var S=b.degree(!0);S%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var S=w,T=[w],E,_,A;d[S].length;)E=d[S].shift(),_=p[E][0],A=p[E][1],S!=A?(d[A]=d[A].filter(function(L){return L!=E}),S=A):!a&&S!=_&&(d[_]=d[_].filter(function(L){return L!=E}),S=_),T.unshift(E),T.unshift(S);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},s6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var S=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[S].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(S){v=S.source().id(),x=S.target().id(),b=v===m?x:v,b!==g&&(w=S.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:S})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),Tqe={hopcroftTarjanBiconnected:s6,htbc:s6,htb:s6,hopcroftTarjanBiconnectedComponents:s6},o6=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),kqe={tarjanStronglyConnected:o6,tsc:o6,tscc:o6,tarjanStronglyConnectedComponents:o6},Qpe={};[Ux,JYe,eWe,rWe,iWe,sWe,cWe,IWe,r1,n1,IP,qWe,sqe,fqe,xqe,wqe,Tqe,kqe].forEach(function(t){Wt(Qpe,t)});Zpe=0,Jpe=1,eme=2,Zu=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Zpe,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Zu.prototype={fulfill:o(function(e){return L0e(this,Jpe,"fulfillValue",e)},"fulfill"),reject:o(function(e){return L0e(this,eme,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new Zu;return n.onFulfilled.push(R0e(e,i,"fulfill")),n.onRejected.push(R0e(r,i,"reject")),tme(n),i.proxy},"then")};L0e=o(function(e,r,n,i){return e.state===Zpe&&(e.state=r,e[n]=i,tme(e)),e},"deliver"),tme=o(function(e){e.state===Jpe?D0e(e,"onFulfilled",e.fulfillValue):e.state===eme&&D0e(e,"onRejected",e.rejectReason)},"execute"),D0e=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){vn(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};g6.className=g6.classNames=g6.classes;Nr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Ui,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Nr.variable="(?:[\\w-.]|(?:\\\\"+Nr.metaChar+"))+";Nr.className="(?:[\\w-]|(?:\\\\"+Nr.metaChar+"))+";Nr.value=Nr.string+"|"+Nr.number;Nr.id=Nr.variable;(function(){var t,e,r;for(t=Nr.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(Nr.comparatorOp+="|\\!"+e)})();un=o(function(){return{checks:[]}},"newQuery"),Ct={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},PP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return qHe(t.selector,e.selector)}),Pje=function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return tn("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return tn("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&tn("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),Vje=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case Ct.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case Ct.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case Ct.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case Ct.DATA_EXIST:{var w=f.field;return"["+w+"]"}case Ct.META_COMPARE:{var S=f.operator,T=f.field;return"[["+T+n(e(S))+r(m)+"]]"}case Ct.STATE:return m;case Ct.ID:return"#"+m;case Ct.CLASS:return"."+m;case Ct.PARENT:case Ct.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case Ct.ANCESTOR:case Ct.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case Ct.COMPOUND_SPLIT:{var E=a(f.left,d),_=a(f.subject,d),A=a(f.right,d);return E+(E.length>0?" ":"")+_+A}case Ct.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e1&&arguments[1]!==void 0?arguments[1]:!0;return cB(this,t,e,ume)};o(hme,"addParent");l1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return cB(this,t,e,hme)};o(Kje,"addParentAndChildren");l1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return cB(this,t,e,Kje)};l1.ancestors=l1.parents;qx=fme={data:en.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:en.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:en.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:en.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:en.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:en.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};qx.attr=qx.data;qx.removeAttr=qx.removeData;Qje=fme,U6={};o(CP,"defineDegreeFunction");Wt(U6,{degree:CP(function(t,e){return e.source().same(e.target())?2:1}),indegree:CP(function(t,e){return e.target().same(t)?1:0}),outdegree:CP(function(t,e){return e.source().same(t)?1:0})});o(Xg,"defineDegreeBoundsFunction");Wt(U6,{minDegree:Xg("degree",function(t,e){return te}),minIndegree:Xg("indegree",function(t,e){return te}),minOutdegree:Xg("outdegree",function(t,e){return te})});Wt(U6,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Hl.modelPosition=Hl.point=Hl.position;Hl.modelPositions=Hl.points=Hl.positions;Hl.renderedPoint=Hl.renderedPosition;Hl.relativePoint=Hl.relativePosition;Zje=dme;i1=Rf={};Rf.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Rf.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Rf.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(L,M,N){var k=0,I=0,C=M+N;return L>0&&C>0&&(k=M/C*L,I=N/C*L),{biasDiff:k,biasComplementDiff:I}}o(m,"computeBiasValues");function g(L,M,N,k){if(N.units==="%")switch(k){case"width":return L>0?N.pfValue*L:0;case"height":return M>0?N.pfValue*M:0;case"average":return L>0&&M>0?N.pfValue*(L+M)/2:0;case"min":return L>0&&M>0?L>M?N.pfValue*M:N.pfValue*L:0;case"max":return L>0&&M>0?L>M?N.pfValue*L:N.pfValue*M:0;default:return 0}else return N.units==="px"?N.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),S=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),_=E.biasDiff,A=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-S+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-_+d.y1+d.y2+A)/2}o(r,"update");for(var n=0;ne.x2?i:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),F0=o(function(e,r){return r==null?e:Vl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Dx=o(function(e,r,n){return Ul(e,r,n)},"prefixedProperty"),l6=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,p6(d,1),Vl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),SP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Dx(s,"labelWidth",n),d=Dx(s,"labelHeight",n),p=Dx(s,"labelX",n),m=Dx(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,S=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,_=d,A=f,L=A/2,M=_/2,N,k,I,C;if(v)N=p-L,k=p+L,I=m-M,C=m+M;else{switch(u.value){case"left":N=p-A,k=p;break;case"center":N=p-L,k=p+L;break;case"right":N=p,k=p+A;break}switch(h.value){case"top":I=m-_,C=m;break;case"center":I=m-M,C=m+M;break;case"bottom":I=m,C=m+_;break}}N+=g-Math.max(b,S)-T-E,k+=g+Math.max(b,S)+T+E,I+=y-Math.max(b,S)-T-E,C+=y+Math.max(b,S)+T+E;var O=n||"main",D=a.labelBounds,P=D[O]=D[O]||{};P.x1=N,P.y1=I,P.x2=k,P.y2=C,P.w=k-N,P.h=C-I;var F=v&&x.strValue==="autorotate",B=x.pfValue!=null&&x.pfValue!==0;if(F||B){var $=F?Dx(a.rstyle,"labelAngle",n):x.pfValue,z=Math.cos($),Y=Math.sin($),Q=(N+k)/2,X=(I+C)/2;if(!v){switch(u.value){case"left":Q=k;break;case"right":Q=N;break}switch(h.value){case"top":X=C;break;case"bottom":X=I;break}}var ie=o(function(ce,ue){return ce=ce-Q,ue=ue-X,{x:ce*z-ue*Y+Q,y:ce*Y+ue*z+X}},"rotate"),j=ie(N,I),J=ie(N,C),Z=ie(k,I),H=ie(k,C);N=Math.min(j.x,J.x,Z.x,H.x),k=Math.max(j.x,J.x,Z.x,H.x),I=Math.min(j.y,J.y,Z.y,H.y),C=Math.max(j.y,J.y,Z.y,H.y)}var q=O+"Rot",K=D[q]=D[q]||{};K.x1=N,K.y1=I,K.x2=k,K.y2=C,K.w=k-N,K.h=C-I,Vl(e,N,I,k,C),Vl(a.labelBounds.all,N,I,k,C)}return e}},"updateBoundsFromLabel"),Jje=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(m6(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=bWe(e,f,d);Vpe(e,g)}}}},"updateBoundsFromOutline"),eKe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Gs(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(De){return De.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var S=0,T=0;i&&r.includeOverlays&&(S=e.pstyle("overlay-opacity").value,S!==0&&(T=e.pstyle("overlay-padding").value));var E=0,_=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(_=e.pstyle("underlay-padding").value));var A=Math.max(T,_),L=0,M=0;if(i&&(L=e.pstyle("width").pfValue,M=L/2),u&&r.includeNodes){var N=e.position();g=N.x,y=N.y;var k=e.outerWidth(),I=k/2,C=e.outerHeight(),O=C/2;f=g-I,d=g+I,p=y-O,m=y+O,Vl(s,f,p,d,m),i&&r.includeOutlines&&Jje(s,e)}else if(h&&r.includeEdges)if(i&&!a){var D=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=M,d+=M,p-=M,m+=M,Vl(s,f,p,d,m),D==="haystack"){var P=v.haystackPts;if(P&&P.length===2){if(f=P[0].x,p=P[0].y,d=P[1].x,m=P[1].y,f>d){var F=f;f=d,d=F}if(p>m){var B=p;p=m,m=B}Vl(s,f-M,p-M,d+M,m+M)}}else if(D==="bezier"||D==="unbundled-bezier"||D.endsWith("segments")||D.endsWith("taxi")){var $;switch(D){case"bezier":case"unbundled-bezier":$=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":$=v.linePts;break}if($!=null)for(var z=0;z<$.length;z++){var Y=$[z];f=Y.x-M,d=Y.x+M,p=Y.y-M,m=Y.y+M,Vl(s,f,p,d,m)}}}else{var Q=e.source(),X=Q.position(),ie=e.target(),j=ie.position();if(f=X.x,d=j.x,p=X.y,m=j.y,f>d){var J=f;f=d,d=J}if(p>m){var Z=p;p=m,m=Z}f-=M,d+=M,p-=M,m+=M,Vl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(l6(s,e,"mid-source"),l6(s,e,"mid-target"),l6(s,e,"source"),l6(s,e,"target")),i){var H=e.pstyle("ghost").value==="yes";if(H){var q=e.pstyle("ghost-offset-x").pfValue,K=e.pstyle("ghost-offset-y").pfValue;Vl(s,s.x1+q,s.y1+K,s.x2+q,s.y2+K)}}var se=l.bodyBounds=l.bodyBounds||{};g0e(se,s),m6(se,x),p6(se,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Vl(s,f-A,p-A,d+A,m+A));var ce=l.overlayBounds=l.overlayBounds||{};g0e(ce,s),m6(ce,x),p6(ce,1);var ue=l.labelBounds=l.labelBounds||{};ue.all!=null?xWe(ue.all):ue.all=Gs(),i&&r.includeLabels&&(r.includeMainLabels&&SP(s,e,null),h&&(r.includeSourceLabels&&SP(s,e,"source"),r.includeTargetLabels&&SP(s,e,"target")))}return s.x1=el(s.x1),s.y1=el(s.y1),s.x2=el(s.x2),s.y2=el(s.y2),s.w=el(s.x2-s.x1),s.h=el(s.y2-s.y1),s.w>0&&s.h>0&&w&&(m6(s,x),p6(s,1)),s},"boundingBoxImpl"),mme=o(function(e){var r=0,n=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Df.removeAllListeners=function(){return this.removeListener("*")};Df.emit=Df.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,vn(e)||(e=[e]),gKe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===pKe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&qYe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;an&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s=0&&a"u"?"undefined":Hi(Symbol))!=e&&Hi(Symbol.iterator)!=e;r&&(L6[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return bpe({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){this.cleanStyle();var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Mr(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});Fa.neighbourhood=Fa.neighborhood;Fa.closedNeighbourhood=Fa.closedNeighborhood;Fa.openNeighbourhood=Fa.openNeighborhood;Wt(Fa,{source:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:X0e({attr:"source"}),targets:X0e({attr:"target"})});o(X0e,"defineSourceFunction");Wt(Fa,{edgesWith:tl(j0e(),"edgesWith"),edgesTo:tl(j0e({thisIsSrc:!0}),"edgesTo")});o(j0e,"defineEdgesWithFunction");Wt(Fa,{connectedEdges:tl(function(t){for(var e=[],r=this,n=0;n0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});Fa.componentsOf=Fa.components;Ca=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){oi("A collection must have a reference to the core");return}var a=new Vc,s=!1;if(!r)r=[];else if(r.length>0&&Mr(r[0])&&!Zx(r[0])){s=!0;for(var l=[],u=new c1,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u0){for(var B=l.length===r.length?r:new Ca(n,l),$=0;$0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(C){for(var O=C._private.edges,D=0;D0&&(t?N.emitAndNotify("remove"):e&&N.emit("remove"));for(var k=0;kf&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Ln=o(function(e,r,n,i){var a=SKe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),v6={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Ln(.25,.1,.25,1),"ease-in":Ln(.42,0,1,1),"ease-out":Ln(0,0,.58,1),"ease-in-out":Ln(.42,0,.58,1),"ease-in-sine":Ln(.47,0,.745,.715),"ease-out-sine":Ln(.39,.575,.565,1),"ease-in-out-sine":Ln(.445,.05,.55,.95),"ease-in-quad":Ln(.55,.085,.68,.53),"ease-out-quad":Ln(.25,.46,.45,.94),"ease-in-out-quad":Ln(.455,.03,.515,.955),"ease-in-cubic":Ln(.55,.055,.675,.19),"ease-out-cubic":Ln(.215,.61,.355,1),"ease-in-out-cubic":Ln(.645,.045,.355,1),"ease-in-quart":Ln(.895,.03,.685,.22),"ease-out-quart":Ln(.165,.84,.44,1),"ease-in-out-quart":Ln(.77,0,.175,1),"ease-in-quint":Ln(.755,.05,.855,.06),"ease-out-quint":Ln(.23,1,.32,1),"ease-in-out-quint":Ln(.86,0,.07,1),"ease-in-expo":Ln(.95,.05,.795,.035),"ease-out-expo":Ln(.19,1,.22,1),"ease-in-out-expo":Ln(1,0,0,1),"ease-in-circ":Ln(.6,.04,.98,.335),"ease-out-circ":Ln(.075,.82,.165,1),"ease-in-out-circ":Ln(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return v6.linear;var i=AKe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Ln};o(Q0e,"getEasedValue");o(Z0e,"getValue");o(jg,"ease");o(_Ke,"step$1");o(Nx,"valid");o(LKe,"startAnimation");o(J0e,"stepAll");DKe={animate:en.animate(),animation:en.animation(),animated:en.animated(),clearQueue:en.clearQueue(),delay:en.delay(),delayAnimation:en.delayAnimation(),stop:en.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&E6(o(function(a){J0e(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){J0e(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},RKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&Zx(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},h6=o(function(e){return zt(e)?new _f(e):e},"argSelector"),Sme={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new H6(RKe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,h6(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,h6(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,h6(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,h6(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};en.eventAliasesOn(Sme);FP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};FP.jpeg=FP.jpg;x6={layout:o(function(e){var r=this;if(e==null){oi("Layout options must be specified to make a layout");return}if(e.name==null){oi("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){oi("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(Wt({},e,{cy:r,eles:a}));return s},"layout")};x6.createLayout=x6.makeLayout=x6.layout;NKe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};zP.invalidateDimensions=zP.resize;b6={collection:o(function(e,r){return zt(e)?this.$(e):xo(e)?e.collection():vn(e)?(r||(r={}),new Ca(this,e,r.unique,r.removed)):new Ca(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};b6.elements=b6.filter=b6.$;Ga={},Fx="t",IKe="f";Ga.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(S=1),l.color){var E=n.valueMin[0],_=n.valueMax[0],A=n.valueMin[1],L=n.valueMax[1],M=n.valueMin[2],N=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],I=n.valueMax[3]==null?1:n.valueMax[3],C=[Math.round(E+(_-E)*S),Math.round(A+(L-A)*S),Math.round(M+(N-M)*S),Math.round(k+(I-k)*S)];a={bypass:n.bypass,name:n.name,value:C,strValue:"rgb("+C[0]+", "+C[1]+", "+C[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*S;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var D=n.field.split("."),P=d.data,F=0;F0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ga.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ga.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ga.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.isBundledBezier()&&a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ga.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};rb={};rb.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;li.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){tn("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new _f(d);if(p.invalid){tn("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){tn("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],S=e.properties[b];if(!S){tn("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){tn("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return tn("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):vn(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var S=[],T=[],E=[],_="",A=!1,L=0;L0?" ":"")+M.strValue}return h.validate&&!h.validate(S,T)?null:h.singleEnum&&A?S.length===1&&zt(S[0])?{name:t,value:S[0],strValue:S[0],bypass:r}:null:{name:t,value:S,pfValue:E,strValue:_,bypass:r,units:T}}var N=o(function(){for(var H=0;Hh.max||h.strictMax&&e===h.max))return null;var D={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?D.pfValue=e:D.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(D.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(D.pfValue=k==="rad"?e:mWe(e)),k==="%"&&(D.pfValue=e/100),D}else if(h.propList){var P=[],F=""+e;if(F!=="none"){for(var B=F.split(/\s*,\s*|\s+/),$=0;$0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),ft(e)?s=e:Mr(e)&&(s=e.level,e.position!=null?a=F6(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;ft(h.x)&&(r.pan.x=h.x,l=!1),ft(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(zt(e)){var n=e;e=this.mutableElements().filter(n)}else xo(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};q0.centre=q0.center;q0.autolockNodes=q0.autolock;q0.autoungrabifyNodes=q0.autoungrabify;jx={data:en.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:en.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:en.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:en.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};jx.attr=jx.data;jx.removeAttr=jx.removeData;Kx=o(function(e){var r=this;e=Wt({},e);var n=e.container;n&&!k6(n)&&k6(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Vi!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=Wt({name:s?"grid":"null"},l.layout),l.renderer=Wt({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new Ca(this),listeners:[],aniEles:new Ca(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:ft(l.zoom)?l.zoom:1,pan:{x:Mr(l.pan)&&ft(l.pan.x)?l.pan.x:0,y:Mr(l.pan)&&ft(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(zHe);if(v)return u1.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=Wt({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Mr(g)||vn(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=Wt({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,jn(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,u=Gs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),h;if(xo(e.roots))h=e.roots;else if(vn(e.roots)){for(var f=[],d=0;d0;){var O=C(),D=M(O,k);if(D)O.outgoers().filter(function(ue){return ue.isNode()&&n.has(ue)}).forEach(I);else if(D===null){tn("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}L();var P=0;if(e.avoidOverlap)for(var F=0;F0&&x[0].length<=3?Pe/2:0),W=2*Math.PI/x[oe].length*ke;return oe===0&&x[0].length===1&&(me=1),{x:K.x+me*Math.cos(W),y:K.y+me*Math.sin(W)}}else{var _e={x:K.x+(ke+1-(Ie+1)/2)*Se,y:(oe+1)*Ue};return _e}},"getPosition");return n.nodes().layoutPositions(this,e,ce),this};zKe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(_me,"CircleLayout");_me.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Gs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var S=o(function(E,_){var A=e.startAngle+_*h*(i?1:-1),L=f*Math.cos(A),M=f*Math.sin(A),N={x:l.x+L,y:l.y+M};return N},"getPos");return n.nodes().layoutPositions(this,e,S),this};GKe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Lme,"ConcentricLayout");Lme.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Gs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var T=Math.abs(b[0].value-S.value);T>=v&&(b=[],x.push(b))}b.push(S)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var _=x.length>0&&x[0].length>1,A=Math.min(s.w,s.h)/2-E,L=A/(x.length+_?1:0);E=Math.min(E,L)}for(var M=0,N=0;N1&&e.avoidOverlap){var O=Math.cos(C)-Math.cos(0),D=Math.sin(C)-Math.sin(0),P=Math.sqrt(E*E/(O*O+D*D));M=Math.max(P,M)}k.r=M,M+=E}if(e.equidistant){for(var F=0,B=0,$=0;$=t.numIter||(XKe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature=t.animationThreshold&&a(),E6(d)}},"frame");f()}else{for(;h;)h=s(u),u++;rpe(n,t),l()}return this};j6.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};j6.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};VKe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Gs(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f0){l.graphSet.push(A);for(var f=0;fi.count?0:i.graph},"findLCA"),HKe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-10)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=R6(e,l,u),v=R6(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),QKe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),R6=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0n?(f.x=i,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),ZKe=o(function(e,r){for(var n=0;nn){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),eQe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),nQe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),iQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Rme,"GridLayout");Rme.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Gs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Q){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(X){if(X==null)return Math.min(u,h);var ie=Math.min(u,h);ie==u?u=X:h=X},"small"),d=o(function(X){if(X==null)return Math.max(u,h);var ie=Math.max(u,h);ie==u?u=X:h=X},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var S=0;S=h&&(O=0,C++)},"moveToNextCell"),P={},F=0;F(O=_We(t,e,D[P],D[P+1],D[P+2],D[P+3])))return v(_,O),!0}else if(L.edgeType==="bezier"||L.edgeType==="multibezier"||L.edgeType==="self"||L.edgeType==="compound"){for(var D=L.allpts,P=0;P+5(O=AWe(t,e,D[P],D[P+1],D[P+2],D[P+3],D[P+4],D[P+5])))return v(_,O),!0}for(var F=F||A.source,B=B||A.target,$=i.getArrowWidth(M,N),z=[{name:"source",x:L.arrowStartX,y:L.arrowStartY,angle:L.srcArrowAngle},{name:"target",x:L.arrowEndX,y:L.arrowEndY,angle:L.tgtArrowAngle},{name:"mid-source",x:L.midX,y:L.midY,angle:L.midsrcArrowAngle},{name:"mid-target",x:L.midX,y:L.midY,angle:L.midtgtArrowAngle}],P=0;P0&&(x(F),x(B))}o(b,"checkEdge");function w(_,A,L){return Ul(_,A,L)}o(w,"preprop");function S(_,A){var L=_._private,M=p,N;A?N=A+"-":N="",_.boundingBox();var k=L.labelBounds[A||"main"],I=_.pstyle(N+"label").value,C=_.pstyle("text-events").strValue==="yes";if(!(!C||!I)){var O=w(L.rscratch,"labelX",A),D=w(L.rscratch,"labelY",A),P=w(L.rscratch,"labelAngle",A),F=_.pstyle(N+"text-margin-x").pfValue,B=_.pstyle(N+"text-margin-y").pfValue,$=k.x1-M-F,z=k.x2+M-F,Y=k.y1-M-B,Q=k.y2+M-B;if(P){var X=Math.cos(P),ie=Math.sin(P),j=o(function(ce,ue){return ce=ce-O,ue=ue-D,{x:ce*X-ue*ie+O,y:ce*ie+ue*X+D}},"rotate"),J=j($,Y),Z=j($,Q),H=j(z,Y),q=j(z,Q),K=[J.x+F,J.y+B,H.x+F,H.y+B,q.x+F,q.y+B,Z.x+F,Z.y+B];if(zs(t,e,K))return v(_),!0}else if(s1(k,t,e))return v(_),!0}}o(S,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||S(E):b(E)||S(E)||S(E,"source")||S(E,"target")}return l};j0.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Gs({x1:t,y1:e,x2:r,y2:n}),d=0;d0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),uQe=o(function(e,r,n,i,a){if(e!==ope?lpe(r,e,Gc):cQe(Jo,Gc),lpe(r,n,Jo),ape=Gc.nx*Jo.ny-Gc.ny*Jo.nx,spe=Gc.nx*Jo.nx-Gc.ny*-Jo.ny,ju=Math.asin(Math.max(-1,Math.min(1,ape))),Math.abs(ju)<1e-6){GP=r.x,$P=r.y,z0=Qg=0;return}G0=1,w6=!1,spe<0?ju<0?ju=Math.PI+ju:(ju=Math.PI-ju,G0=-1,w6=!0):ju>0&&(G0=-1,w6=!0),r.radius!==void 0?Qg=r.radius:Qg=i,O0=ju/2,f6=Math.min(Gc.len/2,Jo.len/2),a?(zc=Math.abs(Math.cos(O0)*Qg/Math.sin(O0)),zc>f6?(zc=f6,z0=Math.abs(zc*Math.sin(O0)/Math.cos(O0))):z0=Qg):(zc=Math.min(f6,Qg),z0=Math.abs(zc*Math.sin(O0)/Math.cos(O0))),VP=r.x+Jo.nx*zc,UP=r.y+Jo.ny*zc,GP=VP-Jo.ny*z0*G0,$P=UP+Jo.nx*z0*G0,Ome=r.x+Gc.nx*zc,Pme=r.y+Gc.ny*zc,ope=r},"calcCornerArc");o(Bme,"drawPreparedRoundCorner");o(mB,"getRoundCorner");$a={};$a.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,_,A){var L=A-E,M=_-T,N=Math.sqrt(M*M+L*L);return{x:-L/N,y:M/N}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=$l(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=$l(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else tn("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};$a.findHaystackPoints=function(t){for(var e=0;e0?Math.max(Te-Ce,0):Math.min(Te+Ce,0)},"subDWH"),I=k(M,A),C=k(N,L),O=!1;b===h?x=Math.abs(I)>Math.abs(C)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var D=x===n,P=D?C:I,F=D?N:M,B=$pe(F),$=!1;!(O&&(S||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(B*=-1,P=B*Math.abs(P),$=!0);var z;if(S){var Y=T<0?1+T:T;z=Y*P}else{var Q=T<0?P:0;z=Q+T*B}var X=o(function(Te){return Math.abs(Te)<_||Math.abs(Te)>=Math.abs(P)},"getIsTooClose"),ie=X(z),j=X(Math.abs(P)-Math.abs(z)),J=ie||j;if(J&&!$)if(D){var Z=Math.abs(F)<=p/2,H=Math.abs(M)<=m/2;if(Z){var q=(f.x1+f.x2)/2,K=f.y1,se=f.y2;r.segpts=[q,K,q,se]}else if(H){var ce=(f.y1+f.y2)/2,ue=f.x1,te=f.x2;r.segpts=[ue,ce,te,ce]}else r.segpts=[f.x1,f.y2]}else{var De=Math.abs(F)<=d/2,oe=Math.abs(N)<=g/2;if(De){var ke=(f.y1+f.y2)/2,Ie=f.x1,Se=f.x2;r.segpts=[Ie,ke,Se,ke]}else if(oe){var Ue=(f.x1+f.x2)/2,Pe=f.y1,_e=f.y2;r.segpts=[Ue,Pe,Ue,_e]}else r.segpts=[f.x2,f.y1]}else if(D){var me=f.y1+z+(v?p/2*B:0),W=f.x1,fe=f.x2;r.segpts=[W,me,fe,me]}else{var ge=f.x1+z+(v?d/2*B:0),re=f.y1,he=f.y2;r.segpts=[ge,re,ge,he]}if(r.isRound){var ne=t.pstyle("taxi-radius").value,ae=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(ne),r.isArcRadius=new Array(r.segpts.length/2).fill(ae)}};$a.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!ft(r.startX)||!ft(r.startY),v=!ft(r.arrowStartX)||!ft(r.arrowStartY),x=!ft(r.endX)||!ft(r.endY),b=!ft(r.arrowEndX)||!ft(r.arrowEndY),w=3,S=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*S,E=H0({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),_=EC.poolIndex()){var O=I;I=C,C=O}var D=L.srcPos=I.position(),P=L.tgtPos=C.position(),F=L.srcW=I.outerWidth(),B=L.srcH=I.outerHeight(),$=L.tgtW=C.outerWidth(),z=L.tgtH=C.outerHeight(),Y=L.srcShape=r.nodeShapes[e.getNodeShape(I)],Q=L.tgtShape=r.nodeShapes[e.getNodeShape(C)],X=L.srcCornerRadius=I.pstyle("corner-radius").value==="auto"?"auto":I.pstyle("corner-radius").pfValue,ie=L.tgtCornerRadius=C.pstyle("corner-radius").value==="auto"?"auto":C.pstyle("corner-radius").pfValue,j=L.tgtRs=C._private.rscratch,J=L.srcRs=I._private.rscratch;L.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var Z=0;Z0){var se=a,ce=B0(se,Jg(r)),ue=B0(se,Jg(K)),te=ce;if(ue2){var De=B0(se,{x:K[2],y:K[3]});De0){var he=s,ne=B0(he,Jg(r)),ae=B0(he,Jg(re)),we=ne;if(ae2){var Te=B0(he,{x:re[2],y:re[3]});Te=g||_){v={cp:S,segment:E};break}}if(v)break}var A=v.cp,L=v.segment,M=(g-x)/L.length,N=L.t1-L.t0,k=m?L.t0+N*M:L.t1-N*M;k=Hx(0,k,1),e=t1(A.p0,A.p1,A.p2,k),p=fQe(A.p0,A.p1,A.p2,k);break}case"straight":case"segments":case"haystack":{for(var I=0,C,O,D,P,F=n.allpts.length,B=0;B+3=g));B+=2);var $=g-O,z=$/C;z=Hx(0,z,1),e=yWe(D,P,z),p=Gme(D,P);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};Hc.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};Hc.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Ul(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;Tf(r.rstyle,"labelWidth",e,d),Tf(r.rscratch,"labelWidth",e,d),Tf(r.rstyle,"labelHeight",e,p),Tf(r.rscratch,"labelHeight",e,p),Tf(r.rscratch,"labelLineHeight",e,f)};Hc.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Q,X){return X?(Tf(r.rscratch,Q,e,X),X):Ul(r.rscratch,Q,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var T=x.matchAll(y),E="",_=0,A=Tpe(T),L;try{for(A.s();!(L=A.n()).done;){var M=L.value,N=M[0],k=x.substring(_,M.index);_=M.index+N.length;var I=E.length===0?k:E+k+N,C=this.calculateLabelDimensions(t,I),O=C.width;O<=d?E+=k+N:(E&&g.push(E),E=k+N)}}catch(Y){A.e(Y)}finally{A.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var D=t.pstyle("text-max-width").pfValue,P="",F="\u2026",B=!1;if(this.calculateLabelDimensions(t,i).widthD)break;P+=i[$],$===i.length-1&&(B=!0)}return B||(P+=F),P}return i};Hc.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Hc.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=U0(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` +`),w=0;w1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var Je=i(W);ze&&(t.hoverData.tapholdCancelled=!0);var Ve=o(function(){var St=t.hoverData.dragDelta=t.hoverData.dragDelta||[];St.length===0?(St.push(ye[0]),St.push(ye[1])):(St[0]+=ye[0],St[1]+=ye[1])},"updateDragDelta");ge=!0,n(Ae,["mousemove","vmousemove","tapdrag"],W,{x:ae[0],y:ae[1]});var je=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||re.emit({originalEvent:W,type:"boxstart",position:{x:ae[0],y:ae[1]}}),Ce[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(ze){var kt={originalEvent:W,type:"cxtdrag",position:{x:ae[0],y:ae[1]}};Me?Me.emit(kt):re.emit(kt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||Ae!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:ae[0],y:ae[1]}}),t.hoverData.cxtOver=Ae,Ae&&Ae.emit({originalEvent:W,type:"cxtdragover",position:{x:ae[0],y:ae[1]}}))}}else if(t.hoverData.dragging){if(ge=!0,re.panningEnabled()&&re.userPanningEnabled()){var at;if(t.hoverData.justStartedPan){var xt=t.hoverData.mdownPos;at={x:(ae[0]-xt[0])*he,y:(ae[1]-xt[1])*he},t.hoverData.justStartedPan=!1}else at={x:ye[0]*he,y:ye[1]*he};re.panBy(at),re.emit("dragpan"),t.hoverData.dragged=!0}ae=t.projectIntoViewport(W.clientX,W.clientY)}else if(Ce[4]==1&&(Me==null||Me.pannable())){if(ze){if(!t.hoverData.dragging&&re.boxSelectionEnabled()&&(Je||!re.panningEnabled()||!re.userPanningEnabled()))je();else if(!t.hoverData.selecting&&re.panningEnabled()&&re.userPanningEnabled()){var it=a(Me,t.hoverData.downs);it&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Ce[4]=0,t.data.bgActivePosistion=Jg(we),t.redrawHint("select",!0),t.redraw())}Me&&Me.pannable()&&Me.active()&&Me.unactivate()}}else{if(Me&&Me.pannable()&&Me.active()&&Me.unactivate(),(!Me||!Me.grabbed())&&Ae!=Ge&&(Ge&&n(Ge,["mouseout","tapdragout"],W,{x:ae[0],y:ae[1]}),Ae&&n(Ae,["mouseover","tapdragover"],W,{x:ae[0],y:ae[1]}),t.hoverData.last=Ae),Me)if(ze){if(re.boxSelectionEnabled()&&Je)Me&&Me.grabbed()&&(v(He),Me.emit("freeon"),He.emit("free"),t.dragData.didDrag&&(Me.emit("dragfreeon"),He.emit("dragfree"))),je();else if(Me&&Me.grabbed()&&t.nodeIsDraggable(Me)){var dt=!t.dragData.didDrag;dt&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||g(He,{inDragLayer:!0});var lt={x:0,y:0};if(ft(ye[0])&&ft(ye[1])&&(lt.x+=ye[0],lt.y+=ye[1],dt)){var It=t.hoverData.dragDelta;It&&ft(It[0])&&ft(It[1])&&(lt.x+=It[0],lt.y+=It[1])}t.hoverData.draggingEles=!0,He.silentShift(lt).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Ve();ge=!0}if(Ce[2]=ae[0],Ce[3]=ae[1],ge)return W.stopPropagation&&W.stopPropagation(),W.preventDefault&&W.preventDefault(),!1}},"mousemoveHandler"),!1);var M,N,k;t.registerBinding(e,"mouseup",o(function(W){if(!(t.hoverData.which===1&&W.which!==1&&t.hoverData.capture)){var fe=t.hoverData.capture;if(fe){t.hoverData.capture=!1;var ge=t.cy,re=t.projectIntoViewport(W.clientX,W.clientY),he=t.selection,ne=t.findNearestElement(re[0],re[1],!0,!1),ae=t.dragData.possibleDragElements,we=t.hoverData.down,Te=i(W);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,we&&we.unactivate(),t.hoverData.which===3){var Ce={originalEvent:W,type:"cxttapend",position:{x:re[0],y:re[1]}};if(we?we.emit(Ce):ge.emit(Ce),!t.hoverData.cxtDragged){var Ae={originalEvent:W,type:"cxttap",position:{x:re[0],y:re[1]}};we?we.emit(Ae):ge.emit(Ae)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(n(ne,["mouseup","tapend","vmouseup"],W,{x:re[0],y:re[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(n(we,["click","tap","vclick"],W,{x:re[0],y:re[1]}),N=!1,W.timeStamp-k<=ge.multiClickDebounceTime()?(M&&clearTimeout(M),N=!0,k=null,n(we,["dblclick","dbltap","vdblclick"],W,{x:re[0],y:re[1]})):(M=setTimeout(function(){N||n(we,["oneclick","onetap","voneclick"],W,{x:re[0],y:re[1]})},ge.multiClickDebounceTime()),k=W.timeStamp)),we==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!i(W)&&(ge.$(r).unselect(["tapunselect"]),ae.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=ae=ge.collection()),ne==we&&!t.dragData.didDrag&&!t.hoverData.selecting&&ne!=null&&ne._private.selectable&&(t.hoverData.dragging||(ge.selectionType()==="additive"||Te?ne.selected()?ne.unselect(["tapunselect"]):ne.select(["tapselect"]):Te||(ge.$(r).unmerge(ne).unselect(["tapunselect"]),ne.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var Ge=ge.collection(t.getAllInBox(he[0],he[1],he[2],he[3]));t.redrawHint("select",!0),Ge.length>0&&t.redrawHint("eles",!0),ge.emit({type:"boxend",originalEvent:W,position:{x:re[0],y:re[1]}});var Me=o(function(ze){return ze.selectable()&&!ze.selected()},"eleWouldBeSelected");ge.selectionType()==="additive"||Te||ge.$(r).unmerge(Ge).unselect(),Ge.emit("box").stdFilter(Me).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!he[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var ye=we&&we.grabbed();v(ae),ye&&(we.emit("freeon"),ae.emit("free"),t.dragData.didDrag&&(we.emit("dragfreeon"),ae.emit("dragfree")))}}he[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null}}},"mouseupHandler"),!1);var I=o(function(W){if(!t.scrollingPage){var fe=t.cy,ge=fe.zoom(),re=fe.pan(),he=t.projectIntoViewport(W.clientX,W.clientY),ne=[he[0]*ge+re.x,he[1]*ge+re.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||A()){W.preventDefault();return}if(fe.panningEnabled()&&fe.userPanningEnabled()&&fe.zoomingEnabled()&&fe.userZoomingEnabled()){W.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var ae;W.deltaY!=null?ae=W.deltaY/-250:W.wheelDeltaY!=null?ae=W.wheelDeltaY/1e3:ae=W.wheelDelta/1e3,ae=ae*t.wheelSensitivity;var we=W.deltaMode===1;we&&(ae*=33);var Te=fe.zoom()*Math.pow(10,ae);W.type==="gesturechange"&&(Te=t.gestureStartZoom*W.scale),fe.zoom({level:Te,renderedPosition:{x:ne[0],y:ne[1]}}),fe.emit(W.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",I,!0),t.registerBinding(e,"scroll",o(function(W){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(W){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||W.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(me){t.hasTouchStarted||I(me)},!0),t.registerBinding(t.container,"mouseout",o(function(W){var fe=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseout",position:{x:fe[0],y:fe[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(W){var fe=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseover",position:{x:fe[0],y:fe[1]}})},"mouseOverHandler"),!1);var C,O,D,P,F,B,$,z,Y,Q,X,ie,j,J=o(function(W,fe,ge,re){return Math.sqrt((ge-W)*(ge-W)+(re-fe)*(re-fe))},"distance"),Z=o(function(W,fe,ge,re){return(ge-W)*(ge-W)+(re-fe)*(re-fe)},"distanceSq"),H;t.registerBinding(t.container,"touchstart",H=o(function(W){if(t.hasTouchStarted=!0,!!L(W)){b(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var fe=t.cy,ge=t.touchData.now,re=t.touchData.earlier;if(W.touches[0]){var he=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);ge[0]=he[0],ge[1]=he[1]}if(W.touches[1]){var he=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);ge[2]=he[0],ge[3]=he[1]}if(W.touches[2]){var he=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);ge[4]=he[0],ge[5]=he[1]}if(W.touches[1]){t.touchData.singleTouchMoved=!0,v(t.dragData.touchDragEles);var ne=t.findContainerClientCoords();Y=ne[0],Q=ne[1],X=ne[2],ie=ne[3],C=W.touches[0].clientX-Y,O=W.touches[0].clientY-Q,D=W.touches[1].clientX-Y,P=W.touches[1].clientY-Q,j=0<=C&&C<=X&&0<=D&&D<=X&&0<=O&&O<=ie&&0<=P&&P<=ie;var ae=fe.pan(),we=fe.zoom();F=J(C,O,D,P),B=Z(C,O,D,P),$=[(C+D)/2,(O+P)/2],z=[($[0]-ae.x)/we,($[1]-ae.y)/we];var Te=200,Ce=Te*Te;if(B=1){for(var gt=t.touchData.startPosition=[null,null,null,null,null,null],yt=0;yt=t.touchTapThreshold2}if(fe&&t.touchData.cxt){W.preventDefault();var gt=W.touches[0].clientX-Y,yt=W.touches[0].clientY-Q,tt=W.touches[1].clientX-Y,Ye=W.touches[1].clientY-Q,Je=Z(gt,yt,tt,Ye),Ve=Je/B,je=150,kt=je*je,at=1.5,xt=at*at;if(Ve>=xt||Je>=kt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var it={originalEvent:W,type:"cxttapend",position:{x:he[0],y:he[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(it),t.touchData.start=null):re.emit(it)}}if(fe&&t.touchData.cxt){var it={originalEvent:W,type:"cxtdrag",position:{x:he[0],y:he[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(it):re.emit(it),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var dt=t.findNearestElement(he[0],he[1],!0,!0);(!t.touchData.cxtOver||dt!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:he[0],y:he[1]}}),t.touchData.cxtOver=dt,dt&&dt.emit({originalEvent:W,type:"cxtdragover",position:{x:he[0],y:he[1]}}))}else if(fe&&W.touches[2]&&re.boxSelectionEnabled())W.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||re.emit({originalEvent:W,type:"boxstart",position:{x:he[0],y:he[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,ge[4]=1,!ge||ge.length===0||ge[0]===void 0?(ge[0]=(he[0]+he[2]+he[4])/3,ge[1]=(he[1]+he[3]+he[5])/3,ge[2]=(he[0]+he[2]+he[4])/3+1,ge[3]=(he[1]+he[3]+he[5])/3+1):(ge[2]=(he[0]+he[2]+he[4])/3,ge[3]=(he[1]+he[3]+he[5])/3),t.redrawHint("select",!0),t.redraw();else if(fe&&W.touches[1]&&!t.touchData.didSelect&&re.zoomingEnabled()&&re.panningEnabled()&&re.userZoomingEnabled()&&re.userPanningEnabled()){W.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var lt=t.dragData.touchDragEles;if(lt){t.redrawHint("drag",!0);for(var It=0;It0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var K;t.registerBinding(e,"touchcancel",K=o(function(W){var fe=t.touchData.start;t.touchData.capture=!1,fe&&fe.unactivate()},"touchcancelHandler"));var se,ce,ue,te;if(t.registerBinding(e,"touchend",se=o(function(W){var fe=t.touchData.start,ge=t.touchData.capture;if(ge)W.touches.length===0&&(t.touchData.capture=!1),W.preventDefault();else return;var re=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var he=t.cy,ne=he.zoom(),ae=t.touchData.now,we=t.touchData.earlier;if(W.touches[0]){var Te=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);ae[0]=Te[0],ae[1]=Te[1]}if(W.touches[1]){var Te=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);ae[2]=Te[0],ae[3]=Te[1]}if(W.touches[2]){var Te=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);ae[4]=Te[0],ae[5]=Te[1]}fe&&fe.unactivate();var Ce;if(t.touchData.cxt){if(Ce={originalEvent:W,type:"cxttapend",position:{x:ae[0],y:ae[1]}},fe?fe.emit(Ce):he.emit(Ce),!t.touchData.cxtDragged){var Ae={originalEvent:W,type:"cxttap",position:{x:ae[0],y:ae[1]}};fe?fe.emit(Ae):he.emit(Ae)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!W.touches[2]&&he.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var Ge=he.collection(t.getAllInBox(re[0],re[1],re[2],re[3]));re[0]=void 0,re[1]=void 0,re[2]=void 0,re[3]=void 0,re[4]=0,t.redrawHint("select",!0),he.emit({type:"boxend",originalEvent:W,position:{x:ae[0],y:ae[1]}});var Me=o(function(kt){return kt.selectable()&&!kt.selected()},"eleWouldBeSelected");Ge.emit("box").stdFilter(Me).select().emit("boxselect"),Ge.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(fe?.unactivate(),W.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!W.touches[1]){if(!W.touches[0]){if(!W.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var ye=t.dragData.touchDragEles;if(fe!=null){var He=fe._private.grabbed;v(ye),t.redrawHint("drag",!0),t.redrawHint("eles",!0),He&&(fe.emit("freeon"),ye.emit("free"),t.dragData.didDrag&&(fe.emit("dragfreeon"),ye.emit("dragfree"))),n(fe,["touchend","tapend","vmouseup","tapdragout"],W,{x:ae[0],y:ae[1]}),fe.unactivate(),t.touchData.start=null}else{var ze=t.findNearestElement(ae[0],ae[1],!0,!0);n(ze,["touchend","tapend","vmouseup","tapdragout"],W,{x:ae[0],y:ae[1]})}var Ze=t.touchData.startPosition[0]-ae[0],gt=Ze*Ze,yt=t.touchData.startPosition[1]-ae[1],tt=yt*yt,Ye=gt+tt,Je=Ye*ne*ne;t.touchData.singleTouchMoved||(fe||he.$(":selected").unselect(["tapunselect"]),n(fe,["tap","vclick"],W,{x:ae[0],y:ae[1]}),ce=!1,W.timeStamp-te<=he.multiClickDebounceTime()?(ue&&clearTimeout(ue),ce=!0,te=null,n(fe,["dbltap","vdblclick"],W,{x:ae[0],y:ae[1]})):(ue=setTimeout(function(){ce||n(fe,["onetap","voneclick"],W,{x:ae[0],y:ae[1]})},he.multiClickDebounceTime()),te=W.timeStamp)),fe!=null&&!t.dragData.didDrag&&fe._private.selectable&&Je"u"){var De=[],oe=o(function(W){return{clientX:W.clientX,clientY:W.clientY,force:1,identifier:W.pointerId,pageX:W.pageX,pageY:W.pageY,radiusX:W.width/2,radiusY:W.height/2,screenX:W.screenX,screenY:W.screenY,target:W.target}},"makeTouch"),ke=o(function(W){return{event:W,touch:oe(W)}},"makePointer"),Ie=o(function(W){De.push(ke(W))},"addPointer"),Se=o(function(W){for(var fe=0;fe0)return Y[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:Hpe(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Y0(i,a):u;var h=2*u;if(Qu(e,r,this.points,s,l,i,a-h,[0,-1],n)||Qu(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(zs(e,r,p)||$0(e,r,h,h,s+i/2-u,l+a/2-u,n)||$0(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};Ju.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",ls(3,0)),this.generateRoundPolygon("round-triangle",ls(3,0)),this.generatePolygon("rectangle",ls(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",ls(5,0)),this.generateRoundPolygon("round-pentagon",ls(5,0)),this.generatePolygon("hexagon",ls(6,0)),this.generateRoundPolygon("round-hexagon",ls(6,0)),this.generatePolygon("heptagon",ls(7,0)),this.generateRoundPolygon("round-heptagon",ls(7,0)),this.generatePolygon("octagon",ls(8,0)),this.generateRoundPolygon("round-octagon",ls(8,0));var n=new Array(20);{var i=NP(5,0),a=NP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*S)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*LP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||JP;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},pQe=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:C6;XP(this,t),this.idsByKey=new Vc,this.keyForId=new Vc,this.cachesByLvl=new Vc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),jP(t,[{key:"getIdsFor",value:o(function(r){r==null&&oi("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new c1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Vc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),fpe=25,d6=50,T6=-4,HP=3,mQe=7.99,gQe=8,yQe=1024,vQe=1024,xQe=1024,bQe=.2,wQe=.8,TQe=10,kQe=.15,EQe=.1,CQe=.9,SQe=.9,AQe=100,_Qe=1,e1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},LQe=Sa({getKey:null,doesEleInvalidateKey:C6,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Ppe,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Bx=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=LQe(r);Wt(n,i),n.lookup=new pQe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),Yi=Bx.prototype;Yi.reasons=e1;Yi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};Yi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};Yi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new eb(function(r,n){return n.reqs-r.reqs});return e};Yi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};Yi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(tB(l*r))),n=mQe||n>HP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=fpe?g=fpe:f<=d6?g=d6:g=Math.ceil(f/d6)*d6,f>xQe||d>vQe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthn;N--)L=a.getElement(t,e,r,N,e1.downscale);M()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!S&&!T)for(var I=n-1;I>=T6;I--){var C=u.get(t,I);if(C){k=C;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+gQe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};Yi.invalidateElements=function(t){for(var e=0;e=bQe*t.width&&this.retireTexture(t)};Yi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>wQe&&t.fullnessChecks>=TQe?Af(r,t):t.fullnessChecks++};Yi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Af(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,eB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Af(i,s),n.push(s),s}};Yi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};Yi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s<_Qe&&r.size()>0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,e1.dequeue)}return i};Yi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=ZP,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};Yi.onDequeue=function(t){this.onDequeues.push(t)};Yi.offDequeue=function(t){Af(this.onDequeues,t)};Yi.setupDequeueing=Yme.setupDequeueing({deqRedrawThreshold:AQe,deqCost:kQe,deqAvgCost:EQe,deqNoDrawCost:CQe,deqFastCost:SQe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n=RQe||r>M6)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var M=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),N=o(function(O){if(!m)for(var D=r+O;zx<=D&&D<=M6&&!M(D);D+=O);},"checkLvls");N(1),N(-1);for(var k=f.length-1;k>=0;k--){var I=f[k];I.invalid&&Af(f,I)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Gs();for(var M=0;MzQe)return null;var I=n.makeLayer(d,r);if(N!=null){var C=f.indexOf(N)+1;f.splice(C,0,I)}else(M.insert===void 0||M.insert)&&f.unshift(I);return I},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/DQe,w=!l,S=0;S=b||!Upe(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),_[r]=x}return m||(w?null:f)};Aa.getEleLevelForLayerLevel=function(t,e){return t};Aa.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,GQe),a.setImgSmoothing(s,!0))};Aa.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Aa.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n0){e=!0;break}}return e};Aa.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Ku(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Aa.invalidateLayer=function(t){if(this.lastInvalidationTime=Ku(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Af(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),S=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),_=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),A=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var L=e.pstyle("ghost").value==="yes";if(L){var M=e.pstyle("ghost-offset-x").pfValue,N=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,I=x*k;t.translate(M,N),w(I),_(I),t.translate(-M,-N)}else S();E(),w(),_(),T(),A(),r&&t.translate(u.x1,u.y1)}};Xme=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");eh.drawEdgeOverlay=Xme("overlay");eh.drawEdgeUnderlay=Xme("underlay");eh.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};K0.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(RP,"roundRect");K0.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=Ul(i,"labelAngle",e);return s.strValue==="autorotate"?r=t.isEdge()?l:0:s.strValue==="none"?r=0:r=s.pfValue,r};K0.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Ul(s,"labelX",r),h=Ul(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Ul(s,"labelWidth",r),y=Ul(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,S=e.pstyle("text-valign").value;b&&(w="center",S="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),S){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,_=e.pstyle("text-border-opacity").value,A=e.pstyle("text-border-width").pfValue,L=e.pstyle("text-background-padding").pfValue,M=e.pstyle("text-background-shape").strValue,N=M.indexOf("round")===0,k=2;if(E>0||A>0&&_>0){var I=u-L;switch(w){case"left":I-=g;break;case"center":I-=g/2;break}var C=h-y-L,O=g+2*L,D=y+2*L;if(E>0){var P=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",N?RP(t,I,C,O,D,k):t.fillRect(I,C,O,D),t.fillStyle=P}if(A>0&&_>0){var B=t.strokeStyle,$=t.lineWidth,z=e.pstyle("text-border-color").value,Y=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+z[0]+","+z[1]+","+z[2]+","+_*l+")",t.lineWidth=A,t.setLineDash)switch(Y){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=A/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(N?RP(t,I,C,O,D,k,"stroke"):t.strokeRect(I,C,O,D),Y==="double"){var Q=A/2;N?RP(t,I+Q,C+Q,O-Q*2,D-Q*2,k,"stroke"):t.strokeRect(I+Q,C+Q,O-Q*2,D-Q*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=$,t.strokeStyle=B}}var X=2*e.pstyle("text-outline-width").pfValue;if(X>0&&(t.lineWidth=X),e.pstyle("text-wrap").value==="wrap"){var ie=Ul(s,"labelWrapCachedLines",r),j=Ul(s,"labelLineHeight",r),J=g/2,Z=this.getLabelJustification(e);switch(Z==="auto"||(w==="left"?Z==="left"?u+=-g:Z==="center"&&(u+=-J):w==="center"?Z==="left"?u+=-J:Z==="right"&&(u+=J):w==="right"&&(Z==="center"?u+=J:Z==="right"&&(u+=g))),S){case"top":h-=(ie.length-1)*j;break;case"center":case"bottom":h-=(ie.length-1)*j;break}for(var H=0;H0&&t.strokeText(ie[H],u,h),t.fillText(ie[H],u,h),h+=j}else X>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};v1={};v1.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!ft(d.x)||!ft(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,S=new Array(w.length),T=new Array(w.length),E=0,_=0;_0&&arguments[0]!==void 0?arguments[0]:I;s.eleFillStyle(t,e,ne)},"setupShapeColor"),H=o(function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:z;s.colorStrokeStyle(t,C[0],C[1],C[2],ne)},"setupBorderColor"),q=o(function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ie;s.colorStrokeStyle(t,Q[0],Q[1],Q[2],ne)},"setupOutlineColor"),K=o(function(ne,ae,we,Te){var Ce=s.nodePathCache=s.nodePathCache||[],Ae=Ope(we==="polygon"?we+","+Te.join(","):we,""+ae,""+ne,""+J),Ge=Ce[Ae],Me,ye=!1;return Ge!=null?(Me=Ge,ye=!0,f.pathCache=Me):(Me=new Path2D,Ce[Ae]=f.pathCache=Me),{path:Me,cacheHit:ye}},"getPath"),se=e.pstyle("shape").strValue,ce=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ue=K(l,u,se,ce);g=ue.path,y=ue.cacheHit}var te=o(function(){if(!y){var ne=d;m&&(ne={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,ne.x,ne.y,l,u,J,f)}m?t.fill(g):t.fill()},"drawShape"),De=o(function(){for(var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,ae=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,we=h.backgrounding,Te=0,Ce=0;Ce0&&arguments[0]!==void 0?arguments[0]:!1,ae=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,ae),ne&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,J,f)))},"drawPie"),ke=o(function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,ae=(N>0?N:-N)*ne,we=N>0?0:255;N!==0&&(s.colorFillStyle(t,we,we,we,ae),m?t.fill(g):t.fill())},"darken"),Ie=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=P,t.lineJoin=D,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(B),t.lineDashOffset=$;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var ne=new Path2D;ne.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),ne.addPath(g),t.clip(ne,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var ae=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=ae}t.setLineDash&&t.setLineDash([])}},"drawBorder"),Se=o(function(){if(Y>0){if(t.lineWidth=Y,t.lineCap="butt",t.setLineDash)switch(X){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var ne=d;m&&(ne={x:0,y:0});var ae=s.getNodeShape(e),we=k;F==="inside"&&(we=0),F==="outside"&&(we*=2);var Te=(l+we+(Y+j))/l,Ce=(u+we+(Y+j))/u,Ae=l*Te,Ge=u*Ce,Me=s.nodeShapes[ae].points,ye;if(m){var He=K(Ae,Ge,ae,Me);ye=He.path}if(ae==="ellipse")s.drawEllipsePath(ye||t,ne.x,ne.y,Ae,Ge);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(ae)){var ze=0,Ze=0,gt=0;ae==="round-diamond"?ze=(we+j+Y)*1.4:ae==="round-heptagon"?(ze=(we+j+Y)*1.075,gt=-(we/2+j+Y)/35):ae==="round-hexagon"?ze=(we+j+Y)*1.12:ae==="round-pentagon"?(ze=(we+j+Y)*1.13,gt=-(we/2+j+Y)/15):ae==="round-tag"?(ze=(we+j+Y)*1.12,Ze=(we/2+Y+j)*.07):ae==="round-triangle"&&(ze=(we+j+Y)*(Math.PI/2),gt=-(we+j/2+Y)/Math.PI),ze!==0&&(Te=(l+ze)/l,Ae=l*Te,["round-hexagon","round-tag"].includes(ae)||(Ce=(u+ze)/u,Ge=u*Ce)),J=J==="auto"?Wpe(Ae,Ge):J;for(var yt=Ae/2,tt=Ge/2,Ye=J+(we+Y+j)/2,Je=new Array(Me.length/2),Ve=new Array(Me.length/2),je=0;je0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");v1.drawNodeOverlay=jme("overlay");v1.drawNodeUnderlay=jme("underlay");v1.hasPie=function(t){return t=t[0],t._private.hasPie};v1.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,S=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,S),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};bo={},QQe=100;bo.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};bo.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;is.minMbLowQualFrames&&(s.motionBlurPxRatio=s.mbPxRBlurry)),s.clearingMotionBlur&&(s.motionBlurPxRatio=1),s.textureDrawLastFrame&&!d&&(f[s.NODE]=!0,f[s.SELECT_BOX]=!0);var b=u.style(),w=u.zoom(),S=i!==void 0?i:w,T=u.pan(),E={x:T.x,y:T.y},_={zoom:w,pan:{x:T.x,y:T.y}},A=s.prevViewport,L=A===void 0||_.zoom!==A.zoom||_.pan.x!==A.pan.x||_.pan.y!==A.pan.y;!L&&!(y&&!g)&&(s.motionBlurPxRatio=1),a&&(E=a),S*=l,E.x*=l,E.y*=l;var M=s.getCachedZSortedEles();function N(ue,te,De,oe,ke){var Ie=ue.globalCompositeOperation;ue.globalCompositeOperation="destination-out",s.colorFillStyle(ue,255,255,255,s.motionBlurTransparency),ue.fillRect(te,De,oe,ke),ue.globalCompositeOperation=Ie}o(N,"mbclear");function k(ue,te){var De,oe,ke,Ie;!s.clearingMotionBlur&&(ue===h.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]||ue===h.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG])?(De={x:T.x*m,y:T.y*m},oe=w*m,ke=s.canvasWidth*m,Ie=s.canvasHeight*m):(De=E,oe=S,ke=s.canvasWidth,Ie=s.canvasHeight),ue.setTransform(1,0,0,1,0,0),te==="motionBlur"?N(ue,0,0,ke,Ie):!e&&(te===void 0||te)&&ue.clearRect(0,0,ke,Ie),r||(ue.translate(De.x,De.y),ue.scale(oe,oe)),a&&ue.translate(a.x,a.y),i&&ue.scale(i,i)}if(o(k,"setContextTransform"),d||(s.textureDrawLastFrame=!1),d){if(s.textureDrawLastFrame=!0,!s.textureCache){s.textureCache={},s.textureCache.bb=u.mutableElements().boundingBox(),s.textureCache.texture=s.data.bufferCanvases[s.TEXTURE_BUFFER];var I=s.data.bufferContexts[s.TEXTURE_BUFFER];I.setTransform(1,0,0,1,0,0),I.clearRect(0,0,s.canvasWidth*s.textureMult,s.canvasHeight*s.textureMult),s.render({forcedContext:I,drawOnlyNodeLayer:!0,forcedPxRatio:l*s.textureMult});var _=s.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:s.canvasWidth,height:s.canvasHeight};_.mpan={x:(0-_.pan.x)/_.zoom,y:(0-_.pan.y)/_.zoom}}f[s.DRAG]=!1,f[s.NODE]=!1;var C=h.contexts[s.NODE],O=s.textureCache.texture,_=s.textureCache.viewport;C.setTransform(1,0,0,1,0,0),p?N(C,0,0,_.width,_.height):C.clearRect(0,0,_.width,_.height);var D=b.core("outside-texture-bg-color").value,P=b.core("outside-texture-bg-opacity").value;s.colorFillStyle(C,D[0],D[1],D[2],P),C.fillRect(0,0,_.width,_.height);var w=u.zoom();k(C,!1),C.clearRect(_.mpan.x,_.mpan.y,_.width/_.zoom/l,_.height/_.zoom/l),C.drawImage(O,_.mpan.x,_.mpan.y,_.width/_.zoom/l,_.height/_.zoom/l)}else s.textureOnViewport&&!e&&(s.textureCache=null);var F=u.extent(),B=s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming||s.hoverData.draggingEles||s.cy.animated(),$=s.hideEdgesOnViewport&&B,z=[];if(z[s.NODE]=!f[s.NODE]&&p&&!s.clearedForMotionBlur[s.NODE]||s.clearingMotionBlur,z[s.NODE]&&(s.clearedForMotionBlur[s.NODE]=!0),z[s.DRAG]=!f[s.DRAG]&&p&&!s.clearedForMotionBlur[s.DRAG]||s.clearingMotionBlur,z[s.DRAG]&&(s.clearedForMotionBlur[s.DRAG]=!0),f[s.NODE]||r||n||z[s.NODE]){var Y=p&&!z[s.NODE]&&m!==1,C=e||(Y?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]:h.contexts[s.NODE]),Q=p&&!Y?"motionBlur":void 0;k(C,Q),$?s.drawCachedNodes(C,M.nondrag,l,F):s.drawLayeredElements(C,M.nondrag,l,F),s.debug&&s.drawDebugPoints(C,M.nondrag),!r&&!p&&(f[s.NODE]=!1)}if(!n&&(f[s.DRAG]||r||z[s.DRAG])){var Y=p&&!z[s.DRAG]&&m!==1,C=e||(Y?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]:h.contexts[s.DRAG]);k(C,p&&!Y?"motionBlur":void 0),$?s.drawCachedNodes(C,M.drag,l,F):s.drawCachedElements(C,M.drag,l,F),s.debug&&s.drawDebugPoints(C,M.drag),!r&&!p&&(f[s.DRAG]=!1)}if(s.showFps||!n&&f[s.SELECT_BOX]&&!r){var C=e||h.contexts[s.SELECT_BOX];if(k(C),s.selection[4]==1&&(s.hoverData.selecting||s.touchData.selecting)){var w=s.cy.zoom(),X=b.core("selection-box-border-width").value/w;C.lineWidth=X,C.fillStyle="rgba("+b.core("selection-box-color").value[0]+","+b.core("selection-box-color").value[1]+","+b.core("selection-box-color").value[2]+","+b.core("selection-box-opacity").value+")",C.fillRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]),X>0&&(C.strokeStyle="rgba("+b.core("selection-box-border-color").value[0]+","+b.core("selection-box-border-color").value[1]+","+b.core("selection-box-border-color").value[2]+","+b.core("selection-box-opacity").value+")",C.strokeRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]))}if(h.bgActivePosistion&&!s.hoverData.selecting){var w=s.cy.zoom(),ie=h.bgActivePosistion;C.fillStyle="rgba("+b.core("active-bg-color").value[0]+","+b.core("active-bg-color").value[1]+","+b.core("active-bg-color").value[2]+","+b.core("active-bg-opacity").value+")",C.beginPath(),C.arc(ie.x,ie.y,b.core("active-bg-size").pfValue/w,0,2*Math.PI),C.fill()}var j=s.lastRedrawTime;if(s.showFps&&j){j=Math.round(j);var J=Math.round(1e3/j);C.setTransform(1,0,0,1,0,0),C.fillStyle="rgba(255, 0, 0, 0.75)",C.strokeStyle="rgba(255, 0, 0, 0.75)",C.lineWidth=1,C.fillText("1 frame = "+j+" ms = "+J+" fps",0,20);var Z=60;C.strokeRect(0,30,250,20),C.fillRect(0,30,250*Math.min(J/Z,1),20)}r||(f[s.SELECT_BOX]=!1)}if(p&&m!==1){var H=h.contexts[s.NODE],q=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE],K=h.contexts[s.DRAG],se=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG],ce=o(function(te,De,oe){te.setTransform(1,0,0,1,0,0),oe||!x?te.clearRect(0,0,s.canvasWidth,s.canvasHeight):N(te,0,0,s.canvasWidth,s.canvasHeight);var ke=m;te.drawImage(De,0,0,s.canvasWidth*ke,s.canvasHeight*ke,0,0,s.canvasWidth,s.canvasHeight)},"drawMotionBlur");(f[s.NODE]||z[s.NODE])&&(ce(H,q,z[s.NODE]),f[s.NODE]=!1),(f[s.DRAG]||z[s.DRAG])&&(ce(K,se,z[s.DRAG]),f[s.DRAG]=!1)}s.prevViewport=_,s.clearingMotionBlur&&(s.clearingMotionBlur=!1,s.motionBlurCleared=!0,s.motionBlur=!0),p&&(s.motionBlurTimeout=setTimeout(function(){s.motionBlurTimeout=null,s.clearedForMotionBlur[s.NODE]=!1,s.clearedForMotionBlur[s.DRAG]=!1,s.motionBlur=!1,s.clearingMotionBlur=!d,s.mbFrames=0,f[s.NODE]=!0,f[s.DRAG]=!0,s.redraw()},QQe)),e||u.emit("render")};Nf={};Nf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(ZQe,"b64ToBlob");o(xpe,"b64UriToB64");o(Qme,"output");ab.png=function(t){return Qme(t,this.bufferCanvasImage(t),"image/png")};ab.jpg=function(t){return Qme(t,this.bufferCanvasImage(t),"image/jpeg")};Zme={};Zme.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};JQe=Jme,Yr=Jme.prototype;Yr.CANVAS_LAYERS=3;Yr.SELECT_BOX=0;Yr.DRAG=1;Yr.NODE=2;Yr.BUFFER_COUNT=3;Yr.TEXTURE_BUFFER=0;Yr.MOTIONBLUR_BUFFER_NODE=1;Yr.MOTIONBLUR_BUFFER_DRAG=2;o(Jme,"CanvasRenderer");Yr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Yr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Yr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Yr.SELECT_BOX]=e;break}};eZe=typeof Path2D<"u";Yr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Yr.usePaths=function(){return eZe&&this.pathsEnabled};Yr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Yr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Yr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Hi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[qme,Yc,eh,yB,K0,v1,bo,Nf,ab,Zme].forEach(function(t){Wt(Yr,t)});tZe=[{name:"null",impl:Ime},{name:"base",impl:Hme},{name:"canvas",impl:JQe}],rZe=[{type:"layout",extensions:lQe},{type:"renderer",extensions:tZe}],ege={},tge={};o(rge,"setExtension");o(nge,"getExtension");o(nZe,"setModule");o(iZe,"getModule");qP=o(function(){if(arguments.length===2)return nge.apply(null,arguments);if(arguments.length===3)return rge.apply(null,arguments);if(arguments.length===4)return iZe.apply(null,arguments);if(arguments.length===5)return nZe.apply(null,arguments);oi("Invalid extension access syntax")},"extension");Kx.prototype.extension=qP;rZe.forEach(function(t){t.extensions.forEach(function(e){rge(t.type,e.name,e.impl)})});ige=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),X0=ige.prototype;X0.instanceString=function(){return"stylesheet"};X0.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};X0.css=function(t,e){var r=this.length-1;if(zt(t))this[r].properties.push({name:t,value:e});else if(Mr(t))for(var n=t,i=Object.keys(n),a=0;a{"use strict";o(function(e,r){typeof sb=="object"&&typeof xB=="object"?xB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof sb=="object"?sb.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(sb,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var S=x.source.owner.getEdges().indexOf(x);if(S==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(S,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),S=w.length,T=0;Tv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,S,T,E,_,A=this.nodes,L=A.length,M=0;Mw&&(y=w),vT&&(x=T),bw&&(y=w),vT&&(x=T),b=this.nodes.length){var L=0;v.forEach(function(M){M.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=A,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):C===D&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===D?f>u?(l[2]=_,l[3]=A,I=!0):(l[2]=E,l[3]=T,I=!0):O===D&&(f>u?(l[2]=S,l[3]=T,I=!0):(l[2]=L,l[3]=A,I=!0)),k&&I)return!1;if(u>f?h>d?(P=this.getCardinalDirection(C,D,4),F=this.getCardinalDirection(O,D,2)):(P=this.getCardinalDirection(-C,D,3),F=this.getCardinalDirection(-O,D,1)):h>d?(P=this.getCardinalDirection(-C,D,1),F=this.getCardinalDirection(-O,D,3)):(P=this.getCardinalDirection(C,D,2),F=this.getCardinalDirection(O,D,4)),!k)switch(P){case 1:$=m,B=u+-w/D,l[0]=B,l[1]=$;break;case 2:B=x,$=h+b*D,l[0]=B,l[1]=$;break;case 3:$=v,B=u+w/D,l[0]=B,l[1]=$;break;case 4:B=y,$=h+-b*D,l[0]=B,l[1]=$;break}if(!I)switch(F){case 1:Y=T,z=f+-N/D,l[2]=z,l[3]=Y;break;case 2:z=L,Y=d+M*D,l[2]=z,l[3]=Y;break;case 3:Y=A,z=f+N/D,l[2]=z,l[3]=Y;break;case 4:z=_,Y=d+-M*D,l[2]=z,l[3]=Y;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,S=void 0,T=void 0,E=void 0,_=void 0,A=void 0,L=void 0;return w=p-f,T=h-d,_=d*f-h*p,S=v-g,E=m-y,A=y*g-m*v,L=w*E-S*T,L===0?null:(x=(T*A-E*_)/L,b=(S*_-w*A)/L,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var _=E.getEdges(),x=0;x<_.length;x++){var A=_[x].getOtherEnd(E);if(S.get(E)!=A)if(!b.has(A))w.push(A),S.set(A,E);else{g=!1;break}}}if(!g)m=[];else{var L=[].concat(n(b));m.push(L);for(var x=0;x-1&&T.splice(N,1)}b=new Set,S=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(A,1);var L=S.getNeighborsList();L.forEach(function(k){if(y.indexOf(k)<0){var I=v.get(k),C=I-1;C==1&&E.push(k),v.set(k,C)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var S=0;Sh},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof ob=="object"&&typeof wB=="object"?wB.exports=r(bB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof ob=="object"?ob.coseBase=r(bB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(ob,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),_=this.nodesWithGravity.filter(function(A){return E.has(A)});this.graphManager.setAllNodesToApplyGravitation(_),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(L){return T.has(L)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var _=!this.isTreeGrowing&&!this.isGrowthFinished,A=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(_,A),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},_=0;_1){var k;for(k=0;kA&&(A=Math.floor(N.y)),M=Math.floor(N.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-N.x/2,d.WORLD_CENTER_Y-N.y/2))},w.radialLayout=function(T,E,_){var A=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,A);var L=x.calculateBounds(T),M=new b;M.setDeviceOrgX(L.getMinX()),M.setDeviceOrgY(L.getMinY()),M.setWorldOrgX(_.x),M.setWorldOrgY(_.y);for(var N=0;N1;){var Q=Y[0];Y.splice(0,1);var X=P.indexOf(Q);X>=0&&P.splice(X,1),$--,F--}E!=null?z=(P.indexOf(Y[0])+1)%$:z=0;for(var ie=Math.abs(A-_)/F,j=z;B!=F;j=++j%$){var J=P[j].getOtherEnd(T);if(J!=E){var Z=(_+B*ie)%360,H=(Z+ie)%360;w.branchRadialLayout(J,T,Z,H,L+M,M),B++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,_=0;_E&&(E=L)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var _=[],A=this.graphManager.getAllNodes(),L=0;L"u"&&(E[k]=[]),E[k]=E[k].concat(M)}Object.keys(E).forEach(function(I){if(E[I].length>1){var C="DummyCompound_"+I;T.memberGroups[C]=E[I];var O=E[I][0].getParent(),D=new l(T.graphManager);D.id=C,D.paddingLeft=O.paddingLeft||0,D.paddingRight=O.paddingRight||0,D.paddingBottom=O.paddingBottom||0,D.paddingTop=O.paddingTop||0,T.idToDummyNode[C]=D;var P=T.getGraphManager().add(T.newGraph(),D),F=O.getChild();F.add(D);for(var B=0;B=0;T--){var E=this.compoundOrder[T],_=E.id,A=E.paddingLeft,L=E.paddingTop;this.adjustLocations(this.tiledMemberPack[_],E.rect.x,E.rect.y,A,L)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(_){var A=T.idToDummyNode[_],L=A.paddingLeft,M=A.paddingTop;T.adjustLocations(E[_],A.rect.x,A.rect.y,L,M)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var _=T.getChild();if(_==null)return this.toBeTiled[E]=!1,!1;for(var A=_.getNodes(),L=0;L0)return this.toBeTiled[E]=!1,!1;if(M.getChild()==null){this.toBeTiled[M.id]=!1;continue}if(!this.getToBeTiled(M))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,_=T.getEdges(),A=0,L=0;L<_.length;L++){var M=_[L];M.getSource().id!==M.getTarget().id&&(A=A+1)}return A},w.prototype.getNodeDegreeWithChildren=function(T){var E=this.getNodeDegree(T);if(T.getChild()==null)return E;for(var _=T.getChild().getNodes(),A=0;A<_.length;A++){var L=_[A];E+=this.getNodeDegreeWithChildren(L)}return E},w.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},w.prototype.fillCompexOrderByDFS=function(T){for(var E=0;EI&&(I=O.rect.height)}_+=I+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var _=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(A){var L=E[A];_.tiledMemberPack[A]=_.tileNodes(T[A],L.paddingLeft+L.paddingRight),L.rect.width=_.tiledMemberPack[A].width,L.rect.height=_.tiledMemberPack[A].height})},w.prototype.tileNodes=function(T,E){var _=h.TILING_PADDING_VERTICAL,A=h.TILING_PADDING_HORIZONTAL,L={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:_,horizontalPadding:A};T.sort(function(k,I){return k.rect.width*k.rect.height>I.rect.width*I.rect.height?-1:k.rect.width*k.rect.height0&&(N+=T.horizontalPadding),T.rowWidth[_]=N,T.width0&&(k+=T.verticalPadding);var I=0;k>T.rowHeight[_]&&(I=T.rowHeight[_],T.rowHeight[_]=k,I=T.rowHeight[_]-I),T.height+=I,T.rows[_].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,_=Number.MAX_VALUE,A=0;A_&&(E=A,_=T.rowWidth[A]);return E},w.prototype.canAddHorizontal=function(T,E,_){var A=this.getShortestRowIndex(T);if(A<0)return!0;var L=T.rowWidth[A];if(L+T.horizontalPadding+E<=T.width)return!0;var M=0;T.rowHeight[A]<_&&A>0&&(M=_+T.verticalPadding-T.rowHeight[A]);var N;T.width-L>=E+T.horizontalPadding?N=(T.height+M)/(L+E+T.horizontalPadding):N=(T.height+M)/T.width,M=_+T.verticalPadding;var k;return T.widthM&&E!=_){A.splice(-1,1),T.rows[_].push(L),T.rowWidth[E]=T.rowWidth[E]-M,T.rowWidth[_]=T.rowWidth[_]+M,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var N=Number.MIN_VALUE,k=0;kN&&(N=A[k].height);E>0&&(N+=T.verticalPadding);var I=T.rowHeight[E]+T.rowHeight[_];T.rowHeight[E]=N,T.rowHeight[_]0)for(var F=L;F<=M;F++)P[0]+=this.grid[F][N-1].length+this.grid[F][N].length-1;if(M0)for(var F=N;F<=k;F++)P[3]+=this.grid[L-1][F].length+this.grid[L][F].length-1;for(var B=y.MAX_VALUE,$,z,Y=0;Y{"use strict";o(function(e,r){typeof lb=="object"&&typeof kB=="object"?kB.exports=r(TB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof lb=="object"?lb.cytoscapeCoseBilkent=r(TB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(lb,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},S=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=S.newGraphManager();this.gm=E;var _=this.options.eles.nodes(),A=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(_),S);for(var L=0;L0){var k;k=b.getGraphManager().add(b.newGraph(),_),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function fZe(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var sZe,oZe,lZe,cZe,uZe,hZe,dZe,pZe,sge,oge,lge=R(()=>{"use strict";Al();xr();sZe=12,oZe=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),lZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),cZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1} + a${s},${s} 1 0,1 ${n*.35},${1*n*.2} + + a${a},${a} 1 0,1 ${n*.15},${1*i*.35} + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65} + + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15} + a${l},${l} 1 0,1 ${-1*n*.5},0 + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15} + + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35} + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65} + + H0 V0 Z`)},"cloudBkg"),uZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},${1*i*.1} + + a${a},${a} 1 0,0 ${n*.15},${1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34} + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33} + + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15} + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15} + + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34} + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33} + + H0 V0 Z`)},"bangBkg"),hZe=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(fZe,"insertPolygonShape");dZe=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];fZe(e,s,n,l,r)},"hexagonBkg"),pZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),sge=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(sZe-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/()/g,` +`);await ta(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=mc(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:oZe(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:pZe(t,h,r,s);break;case t.nodeType.RECT:lZe(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),hZe(t,h,r,s);break;case t.nodeType.CLOUD:cZe(t,h,r,s);break;case t.nodeType.BANG:uZe(t,h,r,s);break;case t.nodeType.HEXAGON:dZe(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),oge=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function uge(t,e,r,n,i){await sge(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>uge(t,e,a,n<0?s:n,i)))}function mZe(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;V.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function hge(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{hge(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function gZe(t,e){return new Promise(r=>{let n=$e("body").append("div").attr("id","cy").attr("style","display:none"),i=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),hge(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{V.info("Ready",a),r(i)})})}function yZe(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,oge(t,i);let a=t.getElementById(i.nodeId);V.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var cge,vZe,fge,dge=R(()=>{"use strict";vB();cge=Xi(age(),1);Zt();_t();ut();pf();Yn();lge();sl();rl.use(cge.default);o(uge,"drawNodes");o(mZe,"drawEdges");o(hge,"addNodes");o(gZe,"layoutMindmap");o(yZe,"positionNodes");vZe=o(async(t,e,r,n)=>{V.debug(`Rendering mindmap diagram +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=de();s.htmlLabels=!1;let l=Ps(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await uge(i,h,a,-1,s);let f=await gZe(a,s);mZe(u,f),yZe(i,f),Lo(void 0,l,s.mindmap?.padding??mr.mindmap.padding,s.mindmap?.useMaxWidth??mr.mindmap.useMaxWidth)},"draw"),fge={draw:vZe}});var xZe,bZe,pge,mge=R(()=>{"use strict";al();xZe=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${xZe(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),pge=bZe});var gge={};hr(gge,{diagram:()=>wZe});var wZe,yge=R(()=>{"use strict";r0e();a0e();dge();mge();wZe={db:i0e,renderer:fge,parser:t0e,styles:pge}});var EB,cb,bge=R(()=>{"use strict";EB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,S=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),_={yy:{}};for(var A in this.yy)Object.prototype.hasOwnProperty.call(this.yy,A)&&(_.yy[A]=this.yy[A]);E.setInput(u,_.yy),_.yy.lexer=E,_.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var L=E.yylloc;m.push(L);var M=E.options&&E.options.ranges;typeof _.yy.parseError=="function"?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function N(ie){f.length=f.length-2*ie,p.length=p.length-ie,m.length=m.length-ie}o(N,"popStack");function k(){var ie;return ie=d.pop()||E.lex()||S,typeof ie!="number"&&(ie instanceof Array&&(d=ie,ie=d.pop()),ie=h.symbols_[ie]||ie),ie}o(k,"lex");for(var I,C,O,D,P,F,B={},$,z,Y,Q;;){if(O=f[f.length-1],this.defaultActions[O]?D=this.defaultActions[O]:((I===null||typeof I>"u")&&(I=k()),D=g[O]&&g[O][I]),typeof D>"u"||!D.length||!D[0]){var X="";Q=[];for($ in g[O])this.terminals_[$]&&$>w&&Q.push("'"+this.terminals_[$]+"'");E.showPosition?X="Parse error on line "+(v+1)+`: +`+E.showPosition()+` +Expecting `+Q.join(", ")+", got '"+(this.terminals_[I]||I)+"'":X="Parse error on line "+(v+1)+": Unexpected "+(I==S?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(X,{text:E.match,token:this.terminals_[I]||I,line:E.yylineno,loc:L,expected:Q})}if(D[0]instanceof Array&&D.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+I);switch(D[0]){case 1:f.push(I),p.push(E.yytext),m.push(E.yylloc),f.push(D[1]),I=null,C?(I=C,C=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,L=E.yylloc,b>0&&b--);break;case 2:if(z=this.productions_[D[1]][1],B.$=p[p.length-z],B._$={first_line:m[m.length-(z||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-(z||1)].first_column,last_column:m[m.length-1].last_column},M&&(B._$.range=[m[m.length-(z||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(B,[y,x,v,_.yy,D[1],p,m].concat(T)),typeof F<"u")return F;z&&(f=f.slice(0,-1*z*2),p=p.slice(0,-1*z),m=m.slice(0,-1*z)),f.push(this.productions_[D[1]][0]),p.push(B.$),m.push(B._$),Y=g[f[f.length-2]][f[f.length-1]],f.push(Y);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();EB.parser=EB;cb=EB});var J6,eC,Z6,CZe,CB,SZe,SB,AZe,_Ze,LZe,DZe,wge,Tge=R(()=>{"use strict";_t();rr();bi();J6=[],eC=[],Z6=new Map,CZe=o(()=>{J6=[],eC=[],Z6=new Map,vr()},"clear"),CB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},SZe=o((t,e,r)=>{J6.push(new CB(t,e,r))},"addLink"),SB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},AZe=o(t=>{t=We.sanitizeText(t,de());let e=Z6.get(t);return e===void 0&&(e=new SB(t),Z6.set(t,e),eC.push(e)),e},"findOrCreateNode"),_Ze=o(()=>eC,"getNodes"),LZe=o(()=>J6,"getLinks"),DZe=o(()=>({nodes:eC.map(t=>({id:t.ID})),links:J6.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),wge={nodesMap:Z6,getConfig:o(()=>de().sankey,"getConfig"),getNodes:_Ze,getLinks:LZe,getGraph:DZe,addLink:SZe,findOrCreateNode:AZe,getAccTitle:Ar,setAccTitle:kr,getAccDescription:Lr,setAccDescription:_r,getDiagramTitle:Xr,setDiagramTitle:nn,clear:CZe}});function ub(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var kge=R(()=>{"use strict";o(ub,"max")});function x1(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var Ege=R(()=>{"use strict";o(x1,"min")});function b1(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var Cge=R(()=>{"use strict";o(b1,"sum")});var AB=R(()=>{"use strict";kge();Ege();Cge()});function RZe(t){return t.target.depth}function _B(t){return t.depth}function LB(t,e){return e-1-t.height}function hb(t,e){return t.sourceLinks.length?t.depth:e-1}function DB(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?x1(t.sourceLinks,RZe)-1:0}var RB=R(()=>{"use strict";AB();o(RZe,"targetDepth");o(_B,"left");o(LB,"right");o(hb,"justify");o(DB,"center")});function w1(t){return function(){return t}}var Sge=R(()=>{"use strict";o(w1,"constant")});function Age(t,e){return tC(t.source,e.source)||t.index-e.index}function _ge(t,e){return tC(t.target,e.target)||t.index-e.index}function tC(t,e){return t.y0-e.y0}function NB(t){return t.value}function NZe(t){return t.index}function MZe(t){return t.nodes}function IZe(t){return t.links}function Lge(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function Dge({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function rC(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=NZe,u=hb,h,f,d=MZe,p=IZe,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),Dge(O),O}o(g,"sankey"),g.update=function(O){return Dge(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:w1(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:w1(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:w1(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:w1(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:D}){for(let[F,B]of O.entries())B.index=F,B.sourceLinks=[],B.targetLinks=[];let P=new Map(O.map((F,B)=>[l(F,B,O),F]));for(let[F,B]of D.entries()){B.index=F;let{source:$,target:z}=B;typeof $!="object"&&($=B.source=Lge(P,$)),typeof z!="object"&&(z=B.target=Lge(P,z)),$.sourceLinks.push(B),z.targetLinks.push(B)}if(f!=null)for(let{sourceLinks:F,targetLinks:B}of O)F.sort(f),B.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let D of O)D.value=D.fixedValue===void 0?Math.max(b1(D.sourceLinks,NB),b1(D.targetLinks,NB)):D.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let D=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let $ of P){$.depth=B;for(let{target:z}of $.sourceLinks)F.add(z)}if(++B>D)throw new Error("circular link");P=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let D=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let $ of P){$.height=B;for(let{source:z}of $.targetLinks)F.add(z)}if(++B>D)throw new Error("circular link");P=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let D=ub(O,B=>B.depth)+1,P=(r-t-i)/(D-1),F=new Array(D);for(let B of O){let $=Math.max(0,Math.min(D-1,Math.floor(u.call(null,B,D))));B.layer=$,B.x0=t+$*P,B.x1=B.x0+i,F[$]?F[$].push(B):F[$]=[B]}if(h)for(let B of F)B.sort(h);return F}o(w,"computeNodeLayers");function S(O){let D=x1(O,P=>(n-e-(P.length-1)*s)/b1(P,NB));for(let P of O){let F=e;for(let B of P){B.y0=F,B.y1=F+B.value*D,F=B.y1+s;for(let $ of B.sourceLinks)$.width=$.value*D}F=(n-F+s)/(P.length+1);for(let B=0;BP.length)-1)),S(D);for(let P=0;P0))continue;let X=(Y/Q-z.y0)*D;z.y0+=X,z.y1+=X,N(z)}h===void 0&&$.sort(tC),A($,P)}}o(E,"relaxLeftToRight");function _(O,D,P){for(let F=O.length,B=F-2;B>=0;--B){let $=O[B];for(let z of $){let Y=0,Q=0;for(let{target:ie,value:j}of z.sourceLinks){let J=j*(ie.layer-z.layer);Y+=C(z,ie)*J,Q+=J}if(!(Q>0))continue;let X=(Y/Q-z.y0)*D;z.y0+=X,z.y1+=X,N(z)}h===void 0&&$.sort(tC),A($,P)}}o(_,"relaxRightToLeft");function A(O,D){let P=O.length>>1,F=O[P];M(O,F.y0-s,P-1,D),L(O,F.y1+s,P+1,D),M(O,n,O.length-1,D),L(O,e,0,D)}o(A,"resolveCollisions");function L(O,D,P,F){for(;P1e-6&&(B.y0+=$,B.y1+=$),D=B.y1+s}}o(L,"resolveCollisionsTopToBottom");function M(O,D,P,F){for(;P>=0;--P){let B=O[P],$=(B.y1-D)*F;$>1e-6&&(B.y0-=$,B.y1-=$),D=B.y0-s}}o(M,"resolveCollisionsBottomToTop");function N({sourceLinks:O,targetLinks:D}){if(f===void 0){for(let{source:{sourceLinks:P}}of D)P.sort(_ge);for(let{target:{targetLinks:P}}of O)P.sort(Age)}}o(N,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:D,targetLinks:P}of O)D.sort(_ge),P.sort(Age)}o(k,"reorderLinks");function I(O,D){let P=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:B}of O.sourceLinks){if(F===D)break;P+=B+s}for(let{source:F,width:B}of D.targetLinks){if(F===O)break;P-=B}return P}o(I,"targetTop");function C(O,D){let P=D.y0-(D.targetLinks.length-1)*s/2;for(let{source:F,width:B}of D.targetLinks){if(F===O)break;P+=B+s}for(let{target:F,width:B}of O.sourceLinks){if(F===D)break;P-=B}return P}return o(C,"sourceTop"),g}var Rge=R(()=>{"use strict";AB();RB();Sge();o(Age,"ascendingSourceBreadth");o(_ge,"ascendingTargetBreadth");o(tC,"ascendingBreadth");o(NB,"value");o(NZe,"defaultId");o(MZe,"defaultNodes");o(IZe,"defaultLinks");o(Lge,"find");o(Dge,"computeLinkBreadths");o(rC,"Sankey")});function OB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Nge(){return new OB}var MB,IB,Q0,OZe,PB,Mge=R(()=>{"use strict";MB=Math.PI,IB=2*MB,Q0=1e-6,OZe=IB-Q0;o(OB,"Path");o(Nge,"path");OB.prototype=Nge.prototype={constructor:OB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>Q0)if(!(Math.abs(f*l-u*h)>Q0)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((MB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,S=b/v;Math.abs(w-1)>Q0&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+S*l)+","+(this._y1=e+S*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>Q0||Math.abs(this._y1-h)>Q0)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%IB+IB),d>OZe?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>Q0&&(this._+="A"+r+","+r+",0,"+ +(d>=MB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};PB=Nge});var Ige=R(()=>{"use strict";Mge()});function nC(t){return o(function(){return t},"constant")}var Oge=R(()=>{"use strict";o(nC,"default")});function Pge(t){return t[0]}function Bge(t){return t[1]}var Fge=R(()=>{"use strict";o(Pge,"x");o(Bge,"y")});var zge,Gge=R(()=>{"use strict";zge=Array.prototype.slice});function PZe(t){return t.source}function BZe(t){return t.target}function FZe(t){var e=PZe,r=BZe,n=Pge,i=Bge,a=null;function s(){var l,u=zge.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=PB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:nC(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:nC(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function zZe(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function BB(){return FZe(zZe)}var $ge=R(()=>{"use strict";Ige();Gge();Oge();Fge();o(PZe,"linkSource");o(BZe,"linkTarget");o(FZe,"link");o(zZe,"curveHorizontal");o(BB,"linkHorizontal")});var Vge=R(()=>{"use strict";$ge()});function GZe(t){return[t.source.x1,t.y0]}function $Ze(t){return[t.target.x0,t.y1]}function iC(){return BB().source(GZe).target($Ze)}var Uge=R(()=>{"use strict";Vge();o(GZe,"horizontalSource");o($Ze,"horizontalTarget");o(iC,"default")});var Hge=R(()=>{"use strict";Rge();RB();Uge()});var fb,Yge=R(()=>{"use strict";fb=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var VZe,UZe,Wge,qge=R(()=>{"use strict";_t();Zt();Hge();Yn();Yge();VZe={left:_B,right:LB,center:DB,justify:hb},UZe=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=de(),s=_4.sankey,l;i==="sandbox"&&(l=$e("#i"+e));let u=i==="sandbox"?$e(l.nodes()[0].contentDocument.body):$e("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):$e(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=VZe[m];rC().nodeId(M=>M.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=pu(Z8);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",M=>(M.uid=fb.next("node-")).id).attr("transform",function(M){return"translate("+M.x0+","+M.y0+")"}).attr("x",M=>M.x0).attr("y",M=>M.y0).append("rect").attr("height",M=>M.y1-M.y0).attr("width",M=>M.x1-M.x0).attr("fill",M=>T(M.id));let E=o(({id:M,value:N})=>v?`${M} +${g}${Math.round(N*100)/100}${y}`:M,"getText");h.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",M=>M.x0(M.y1+M.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",M=>M.x0(N.uid=fb.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",N=>N.source.x1).attr("x2",N=>N.target.x0);M.append("stop").attr("offset","0%").attr("stop-color",N=>T(N.source.id)),M.append("stop").attr("offset","100%").attr("stop-color",N=>T(N.target.id))}let L;switch(A){case"gradient":L=o(M=>M.uid,"coloring");break;case"source":L=o(M=>T(M.source.id),"coloring");break;case"target":L=o(M=>T(M.target.id),"coloring");break;default:L=A}_.append("path").attr("d",iC()).attr("stroke",L).attr("stroke-width",M=>Math.max(1,M.width)),Lo(void 0,h,0,p)},"draw"),Wge={draw:UZe}});var Xge,jge=R(()=>{"use strict";Xge=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var Kge={};hr(Kge,{diagram:()=>YZe});var HZe,YZe,Qge=R(()=>{"use strict";bge();Tge();qge();jge();HZe=cb.parse.bind(cb);cb.parse=t=>HZe(Xge(t));YZe={parser:cb,db:wge,renderer:Wge}});var e1e,FB,jZe,KZe,QZe,ZZe,JZe,Mf,zB=R(()=>{"use strict";qs();sl();xr();bi();e1e={packet:[]},FB=structuredClone(e1e),jZe=mr.packet,KZe=o(()=>{let t=Ts({...jZe,...Or().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),QZe=o(()=>FB.packet,"getPacket"),ZZe=o(t=>{t.length>0&&FB.packet.push(t)},"pushWord"),JZe=o(()=>{vr(),FB=structuredClone(e1e)},"clear"),Mf={pushWord:ZZe,getPacket:QZe,getConfig:KZe,clear:JZe,setAccTitle:kr,getAccTitle:Ar,setDiagramTitle:nn,getDiagramTitle:Xr,getAccDescription:Lr,setAccDescription:_r}});var eJe,tJe,rJe,t1e,r1e=R(()=>{"use strict";Lg();ut();sx();zB();eJe=1e4,tJe=o(t=>{cf(t,Mf);let e=-1,r=[],n=1,{bitsPerRow:i}=Mf.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),t1e={parse:o(async t=>{let e=await Fl("packet",t);V.debug(e),tJe(e)},"parse")}});var nJe,iJe,n1e,i1e=R(()=>{"use strict";pf();Yn();nJe=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=Ps(e);y.attr("viewbox",`0 0 ${g} ${m}`),Sr(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())iJe(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),iJe=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),n1e={draw:nJe}});var aJe,a1e,s1e=R(()=>{"use strict";xr();aJe={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},a1e=o(({packet:t}={})=>{let e=Ts(aJe,t);return` + .packetByte { + font-size: ${e.byteFontSize}; + } + .packetByte.start { + fill: ${e.startByteColor}; + } + .packetByte.end { + fill: ${e.endByteColor}; + } + .packetLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .packetTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + .packetBlock { + stroke: ${e.blockStrokeColor}; + stroke-width: ${e.blockStrokeWidth}; + fill: ${e.blockFillColor}; + } + `},"styles")});var o1e={};hr(o1e,{diagram:()=>sJe});var sJe,l1e=R(()=>{"use strict";zB();r1e();i1e();s1e();sJe={parser:t1e,db:Mf,renderer:n1e,styles:a1e}});var GB,h1e,f1e=R(()=>{"use strict";GB=function(){var t=o(function(w,S,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=S);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(S,T,E,_,A,L,M){var N=L.length-1;switch(A){case 4:_.getLogger().debug("Rule: separator (NL) ");break;case 5:_.getLogger().debug("Rule: separator (Space) ");break;case 6:_.getLogger().debug("Rule: separator (EOF) ");break;case 7:_.getLogger().debug("Rule: hierarchy: ",L[N-1]),_.setHierarchy(L[N-1]);break;case 8:_.getLogger().debug("Stop NL ");break;case 9:_.getLogger().debug("Stop EOF ");break;case 10:_.getLogger().debug("Stop NL2 ");break;case 11:_.getLogger().debug("Stop EOF2 ");break;case 12:_.getLogger().debug("Rule: statement: ",L[N]),typeof L[N].length=="number"?this.$=L[N]:this.$=[L[N]];break;case 13:_.getLogger().debug("Rule: statement #2: ",L[N-1]),this.$=[L[N-1]].concat(L[N]);break;case 14:_.getLogger().debug("Rule: link: ",L[N],S),this.$={edgeTypeStr:L[N],label:""};break;case 15:_.getLogger().debug("Rule: LABEL link: ",L[N-3],L[N-1],L[N]),this.$={edgeTypeStr:L[N],label:L[N-1]};break;case 18:let k=parseInt(L[N]),I=_.generateId();this.$={id:I,type:"space",label:"",width:k,children:[]};break;case 23:_.getLogger().debug("Rule: (nodeStatement link node) ",L[N-2],L[N-1],L[N]," typestr: ",L[N-1].edgeTypeStr);let C=_.edgeStrToEdgeData(L[N-1].edgeTypeStr);this.$=[{id:L[N-2].id,label:L[N-2].label,type:L[N-2].type,directions:L[N-2].directions},{id:L[N-2].id+"-"+L[N].id,start:L[N-2].id,end:L[N].id,label:L[N-1].label,type:"edge",directions:L[N].directions,arrowTypeEnd:C,arrowTypeStart:"arrow_open"},{id:L[N].id,label:L[N].label,type:_.typeStr2Type(L[N].typeStr),directions:L[N].directions}];break;case 24:_.getLogger().debug("Rule: nodeStatement (abc88 node size) ",L[N-1],L[N]),this.$={id:L[N-1].id,label:L[N-1].label,type:_.typeStr2Type(L[N-1].typeStr),directions:L[N-1].directions,widthInColumns:parseInt(L[N],10)};break;case 25:_.getLogger().debug("Rule: nodeStatement (node) ",L[N]),this.$={id:L[N].id,label:L[N].label,type:_.typeStr2Type(L[N].typeStr),directions:L[N].directions,widthInColumns:1};break;case 26:_.getLogger().debug("APA123",this?this:"na"),_.getLogger().debug("COLUMNS: ",L[N]),this.$={type:"column-setting",columns:L[N]==="auto"?-1:parseInt(L[N])};break;case 27:_.getLogger().debug("Rule: id-block statement : ",L[N-2],L[N-1]);let O=_.generateId();this.$={...L[N-2],type:"composite",children:L[N-1]};break;case 28:_.getLogger().debug("Rule: blockStatement : ",L[N-2],L[N-1],L[N]);let D=_.generateId();this.$={id:D,type:"composite",label:"",children:L[N-1]};break;case 29:_.getLogger().debug("Rule: node (NODE_ID separator): ",L[N]),this.$={id:L[N]};break;case 30:_.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",L[N-1],L[N]),this.$={id:L[N-1],label:L[N].label,typeStr:L[N].typeStr,directions:L[N].directions};break;case 31:_.getLogger().debug("Rule: dirList: ",L[N]),this.$=[L[N]];break;case 32:_.getLogger().debug("Rule: dirList: ",L[N-1],L[N]),this.$=[L[N-1]].concat(L[N]);break;case 33:_.getLogger().debug("Rule: nodeShapeNLabel: ",L[N-2],L[N-1],L[N]),this.$={typeStr:L[N-2]+L[N],label:L[N-1]};break;case 34:_.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",L[N-3],L[N-2]," #3:",L[N-1],L[N]),this.$={typeStr:L[N-3]+L[N],label:L[N-2],directions:L[N-1]};break;case 35:case 36:this.$={type:"classDef",id:L[N-1].trim(),css:L[N].trim()};break;case 37:this.$={type:"applyClass",id:L[N-1].trim(),styleClass:L[N].trim()};break;case 38:this.$={type:"applyStyles",id:L[N-1].trim(),stylesStr:L[N].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(S,T){if(T.recoverable)this.trace(S);else{var E=new Error(S);throw E.hash=T,E}},"parseError"),parse:o(function(S){var T=this,E=[0],_=[],A=[null],L=[],M=this.table,N="",k=0,I=0,C=0,O=2,D=1,P=L.slice.call(arguments,1),F=Object.create(this.lexer),B={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(B.yy[$]=this.yy[$]);F.setInput(S,B.yy),B.yy.lexer=F,B.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var z=F.yylloc;L.push(z);var Y=F.options&&F.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Q(oe){E.length=E.length-2*oe,A.length=A.length-oe,L.length=L.length-oe}o(Q,"popStack");function X(){var oe;return oe=_.pop()||F.lex()||D,typeof oe!="number"&&(oe instanceof Array&&(_=oe,oe=_.pop()),oe=T.symbols_[oe]||oe),oe}o(X,"lex");for(var ie,j,J,Z,H,q,K={},se,ce,ue,te;;){if(J=E[E.length-1],this.defaultActions[J]?Z=this.defaultActions[J]:((ie===null||typeof ie>"u")&&(ie=X()),Z=M[J]&&M[J][ie]),typeof Z>"u"||!Z.length||!Z[0]){var De="";te=[];for(se in M[J])this.terminals_[se]&&se>O&&te.push("'"+this.terminals_[se]+"'");F.showPosition?De="Parse error on line "+(k+1)+`: +`+F.showPosition()+` +Expecting `+te.join(", ")+", got '"+(this.terminals_[ie]||ie)+"'":De="Parse error on line "+(k+1)+": Unexpected "+(ie==D?"end of input":"'"+(this.terminals_[ie]||ie)+"'"),this.parseError(De,{text:F.match,token:this.terminals_[ie]||ie,line:F.yylineno,loc:z,expected:te})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+J+", token: "+ie);switch(Z[0]){case 1:E.push(ie),A.push(F.yytext),L.push(F.yylloc),E.push(Z[1]),ie=null,j?(ie=j,j=null):(I=F.yyleng,N=F.yytext,k=F.yylineno,z=F.yylloc,C>0&&C--);break;case 2:if(ce=this.productions_[Z[1]][1],K.$=A[A.length-ce],K._$={first_line:L[L.length-(ce||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(ce||1)].first_column,last_column:L[L.length-1].last_column},Y&&(K._$.range=[L[L.length-(ce||1)].range[0],L[L.length-1].range[1]]),q=this.performAction.apply(K,[N,I,k,B.yy,Z[1],A,L].concat(P)),typeof q<"u")return q;ce&&(E=E.slice(0,-1*ce*2),A=A.slice(0,-1*ce),L=L.slice(0,-1*ce)),E.push(this.productions_[Z[1]][0]),A.push(K.$),L.push(K._$),ue=M[E[E.length-2]][E[E.length-1]],E.push(ue);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(S,T){return this.yy=T||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var T=S.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var T=S.length,E=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var _=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===_.length?this.yylloc.first_column:0)+_[_.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else 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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),T=new Array(S.length+1).join("-");return S+this.upcomingInput()+` +`+T+"^"},"showPosition"),test_match:o(function(S,T){var E,_,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),_=S[0].match(/(?:\r\n?|\n).*/g),_&&(this.yylineno+=_.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:_?_[_.length-1].length-_[_.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var L in A)this[L]=A[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,T,E,_;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),L=0;LT[0].length)){if(T=E,_=L,this.options.backtrack_lexer){if(S=this.test_match(E,A[L]),S!==!1)return S;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(S=this.test_match(T,A[_]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,_,A){var L=A;switch(_){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();GB.parser=GB;h1e=GB});function gJe(t){switch(V.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return V.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function yJe(t){switch(V.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function vJe(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Yl,VB,$B,d1e,p1e,cJe,g1e,uJe,aC,hJe,fJe,dJe,pJe,y1e,UB,db,mJe,m1e,xJe,bJe,wJe,TJe,kJe,EJe,CJe,SJe,AJe,_Je,LJe,v1e,x1e=R(()=>{"use strict";gL();qs();_t();ut();rr();bi();Yl=new Map,VB=[],$B=new Map,d1e="color",p1e="fill",cJe="bgFill",g1e=",",uJe=de(),aC=new Map,hJe=o(t=>We.sanitizeText(t,uJe),"sanitizeText"),fJe=o(function(t,e=""){let r=aC.get(t);r||(r={id:t,styles:[],textStyles:[]},aC.set(t,r)),e?.split(g1e).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(d1e).exec(n)){let s=i.replace(p1e,cJe).replace(d1e,p1e);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),dJe=o(function(t,e=""){let r=Yl.get(t);e!=null&&(r.styles=e.split(g1e))},"addStyle2Node"),pJe=o(function(t,e){t.split(",").forEach(function(r){let n=Yl.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Yl.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),y1e=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=hJe(i.label)),i.type==="classDef"){fJe(i.id,i.css);continue}if(i.type==="applyClass"){pJe(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&dJe(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=($B.get(i.id)??0)+1;$B.set(i.id,a),i.id=a+"-"+i.id,VB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Yl.get(i.id);if(a===void 0?Yl.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&y1e(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l{V.debug("Clear called"),vr(),db={id:"root",type:"composite",children:[],columns:-1},Yl=new Map([["root",db]]),UB=[],aC=new Map,VB=[],$B=new Map},"clear");o(gJe,"typeStr2Type");o(yJe,"edgeTypeStr2Type");o(vJe,"edgeStrToEdgeData");m1e=0,xJe=o(()=>(m1e++,"id-"+Math.random().toString(36).substr(2,12)+"-"+m1e),"generateId"),bJe=o(t=>{db.children=t,y1e(t,db),UB=db.children},"setHierarchy"),wJe=o(t=>{let e=Yl.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),TJe=o(()=>[...Yl.values()],"getBlocksFlat"),kJe=o(()=>UB||[],"getBlocks"),EJe=o(()=>VB,"getEdges"),CJe=o(t=>Yl.get(t),"getBlock"),SJe=o(t=>{Yl.set(t.id,t)},"setBlock"),AJe=o(()=>console,"getLogger"),_Je=o(function(){return aC},"getClasses"),LJe={getConfig:o(()=>Or().block,"getConfig"),typeStr2Type:gJe,edgeTypeStr2Type:yJe,edgeStrToEdgeData:vJe,getLogger:AJe,getBlocksFlat:TJe,getBlocks:kJe,getEdges:EJe,setHierarchy:bJe,getBlock:CJe,setBlock:SJe,getColumns:wJe,getClasses:_Je,clear:mJe,generateId:xJe},v1e=LJe});var sC,DJe,b1e,w1e=R(()=>{"use strict";al();sC=o((t,e)=>{let r=X1,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Ws(n,i,a,e)},"fade"),DJe=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span,p { + color: ${t.titleColor}; + } + + + + .label text,span,p { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${sC(t.edgeLabelBackground,.5)}; + // background-color: + } + + .node .cluster { + // fill: ${sC(t.mainBkg,.5)}; + fill: ${sC(t.clusterBkg,.5)}; + stroke: ${sC(t.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span,p { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),b1e=DJe});function RJe(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function HB(t,e,r=0,n=0){V.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)HB(m,e);let s=NJe(t);i=s.width,a=s.height,V.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(V.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+mi*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,V.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)HB(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*mi-mi)/m;V.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}V.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function T1e(t,e){V.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(V.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*mi;V.debug("widthOfChildren 88",i,"posX");let a=0;V.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-mi,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=RJe(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-mi,V.debug("New row in layout for block",t.id," and child ",u.id,l)),V.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${mi}`),h.size){let g=f/2;u.size.x=s+mi+g,V.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${mi} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+mi)+d/2+mi,V.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${mi}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&T1e(u,e),a+=u?.widthInColumns??1,V.debug("abc88 columnsPos",u,a)}}V.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function k1e(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=k1e(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function E1e(t){let e=t.getBlock("root");if(!e)return;HB(e,t,0,0),T1e(e,t),V.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=k1e(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var mi,NJe,C1e=R(()=>{"use strict";ut();_t();mi=de()?.block?.padding??8;o(RJe,"calculateBlockPosition");NJe=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};V.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(HB,"setBlockSizes");o(T1e,"layoutBlocks");o(k1e,"findBounds");o(E1e,"layout")});function S1e(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=lm(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??Or()?.block?.padding??0}}async function MJe(t,e,r){let n=S1e(e,r,!1);if(n.type==="group")return;let i=await pm(t,n),a=i.node().getBBox(),s=r.getBlock(n.id);s.size={width:a.width,height:a.height,x:0,y:0,node:i},r.setBlock(s),i.remove()}async function IJe(t,e,r){let n=S1e(e,r,!0);r.getBlock(n.id).type!=="space"&&(await pm(t,n),e.intersect=n?.intersect,wv(n))}async function YB(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await YB(t,i.children,r,n)}async function A1e(t,e,r){await YB(t,e,r,MJe)}async function _1e(t,e,r){await YB(t,e,r,IJe)}async function L1e(t,e,r,n,i){let a=new lr({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];PE(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await IE(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),OE({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var D1e=R(()=>{"use strict";ya();qs();DO();M5();xr();o(S1e,"getNodeFromBlock");o(MJe,"calculateBlockSize");o(IJe,"insertBlockPositioned");o(YB,"performOperations");o(A1e,"calculateBlockSizes");o(_1e,"insertBlocks");o(L1e,"insertEdges")});var OJe,PJe,R1e,N1e=R(()=>{"use strict";Zt();qs();LO();ut();Yn();C1e();D1e();OJe=o(function(t,e){return e.db.getClasses()},"getClasses"),PJe=o(async function(t,e,r,n){let{securityLevel:i,block:a}=Or(),s=n.db,l;i==="sandbox"&&(l=$e("#i"+e));let u=i==="sandbox"?$e(l.nodes()[0].contentDocument.body):$e("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):$e(`[id="${e}"]`);LE(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await A1e(g,d,s);let y=E1e(s);if(await _1e(g,d,s),await L1e(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:S}=a;Sr(h,b,w,!!S),V.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),R1e={draw:PJe,getClasses:OJe}});var M1e={};hr(M1e,{diagram:()=>BJe});var BJe,I1e=R(()=>{"use strict";f1e();x1e();w1e();N1e();BJe={parser:h1e,db:v1e,renderer:R1e,styles:b1e}});var WB,qB,pb,B1e,XB,cs,Wc,oC,F1e,$Je,mb,z1e,G1e,$1e,V1e,lC,If,cC=R(()=>{"use strict";WB={L:"left",R:"right",T:"top",B:"bottom"},qB={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},pb={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},B1e=o(function(t){return cs(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),XB=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),cs=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),Wc=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),oC=o(function(t,e){let r=cs(t)&&Wc(e),n=Wc(t)&&cs(e);return r||n},"isArchitectureDirectionXY"),F1e=o(function(t){let e=t[0],r=t[1],n=cs(e)&&Wc(r),i=Wc(e)&&cs(r);return n||i},"isArchitecturePairXY"),$Je=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),mb=o(function(t,e){let r=`${t}${e}`;return $Je(r)?r:void 0},"getArchitectureDirectionPair"),z1e=o(function([t,e],r){let n=r[0],i=r[1];return cs(n)?Wc(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:cs(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),G1e=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),$1e=o(function(t){return t.type==="service"},"isArchitectureService"),V1e=o(function(t){return t.type==="junction"},"isArchitectureJunction"),lC=o(t=>t.data(),"edgeData"),If=o(t=>t.data(),"nodeData")});function Ci(t){let e=de().architecture;return e?.[t]?e[t]:U1e[t]}var U1e,nr,VJe,UJe,HJe,YJe,WJe,qJe,XJe,jJe,KJe,QJe,ZJe,JJe,eet,tet,Z0,gb=R(()=>{"use strict";sl();_t();Jk();bi();cC();U1e=mr.architecture,nr=new uf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:U1e,dataStructures:void 0,elements:{}})),VJe=o(()=>{nr.reset(),vr()},"clear"),UJe=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(nr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${nr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(nr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(nr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}nr.records.registeredIds[t]="node",nr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),HJe=o(()=>Object.values(nr.records.nodes).filter($1e),"getServices"),YJe=o(function({id:t,in:e}){nr.records.registeredIds[t]="node",nr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),WJe=o(()=>Object.values(nr.records.nodes).filter(V1e),"getJunctions"),qJe=o(()=>Object.values(nr.records.nodes),"getNodes"),XJe=o(t=>nr.records.nodes[t],"getNode"),jJe=o(function({id:t,icon:e,in:r,title:n}){if(nr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${nr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(nr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(nr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}nr.records.registeredIds[t]="group",nr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),KJe=o(()=>Object.values(nr.records.groups),"getGroups"),QJe=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!XB(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!XB(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(nr.records.nodes[t]===void 0&&nr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(nr.records.nodes[e]===void 0&&nr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=nr.records.nodes[t].in,f=nr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};nr.records.edges.push(d),nr.records.nodes[t]&&nr.records.nodes[e]&&(nr.records.nodes[t].edges.push(nr.records.edges[nr.records.edges.length-1]),nr.records.nodes[e].edges.push(nr.records.edges[nr.records.edges.length-1]))},"addEdge"),ZJe=o(()=>nr.records.edges,"getEdges"),JJe=o(()=>{if(nr.records.dataStructures===void 0){let t=Object.entries(nr.records.nodes).reduce((s,[l,u])=>(s[l]=u.edges.reduce((h,f)=>{if(f.lhsId===l){let d=mb(f.lhsDir,f.rhsDir);d&&(h[d]=f.rhsId)}else{let d=mb(f.rhsDir,f.lhsDir);d&&(h[d]=f.lhsId)}return h},{}),s),{}),e=Object.keys(t)[0],r={[e]:1},n=Object.keys(t).reduce((s,l)=>l===e?s:{...s,[l]:1},{}),i=o(s=>{let l={[s]:[0,0]},u=[s];for(;u.length>0;){let h=u.shift();if(h){r[h]=1,delete n[h];let f=t[h],[d,p]=l[h];Object.entries(f).forEach(([m,g])=>{r[g]||(l[g]=z1e([d,p],m),u.push(g))})}}return l},"BFS"),a=[i(e)];for(;Object.keys(n).length>0;)a.push(i(Object.keys(n)[0]));nr.records.dataStructures={adjList:t,spatialMaps:a}}return nr.records.dataStructures},"getDataStructures"),eet=o((t,e)=>{nr.records.elements[t]=e},"setElementForId"),tet=o(t=>nr.records.elements[t],"getElementById"),Z0={clear:VJe,setDiagramTitle:nn,getDiagramTitle:Xr,setAccTitle:kr,getAccTitle:Ar,setAccDescription:_r,getAccDescription:Lr,addService:UJe,getServices:HJe,addJunction:YJe,getJunctions:WJe,getNodes:qJe,getNode:XJe,addGroup:jJe,getGroups:KJe,addEdge:QJe,getEdges:ZJe,setElementForId:eet,getElementById:tet,getDataStructures:JJe};o(Ci,"getConfigField")});var ret,H1e,Y1e=R(()=>{"use strict";Lg();ut();sx();gb();ret=o((t,e)=>{cf(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),H1e={parse:o(async t=>{let e=await Fl("architecture",t);V.debug(e),ret(e,Z0)},"parse")}});var net,W1e,q1e=R(()=>{"use strict";net=o(t=>` + .edge { + stroke-width: ${t.archEdgeWidth}; + stroke: ${t.archEdgeColor}; + fill: none; + } + + .arrow { + fill: ${t.archEdgeArrowColor}; + } + + .node-bkg { + fill: none; + stroke: ${t.archGroupBorderColor}; + stroke-width: ${t.archGroupBorderWidth}; + stroke-dasharray: 8; + } + .node-icon-text { + display: flex; + align-items: center; + } + + .node-icon-text > div { + color: #fff; + margin: 1px; + height: fit-content; + text-align: center; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + } +`,"getStyles"),W1e=net});var KB=gi((yb,jB)=>{"use strict";o(function(e,r){typeof yb=="object"&&typeof jB=="object"?jB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof yb=="object"?yb.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(yb,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var S=x.source.owner.getEdges().indexOf(x);if(S==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(S,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),S=w.length,T=0;Tv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,S,T,E,_,A=this.nodes,L=A.length,M=0;Mw&&(y=w),vT&&(x=T),bw&&(y=w),vT&&(x=T),b=this.nodes.length){var L=0;v.forEach(function(M){M.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=A,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):C===D&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===D?f>u?(l[2]=_,l[3]=A,I=!0):(l[2]=E,l[3]=T,I=!0):O===D&&(f>u?(l[2]=S,l[3]=T,I=!0):(l[2]=L,l[3]=A,I=!0)),k&&I)return!1;if(u>f?h>d?(P=this.getCardinalDirection(C,D,4),F=this.getCardinalDirection(O,D,2)):(P=this.getCardinalDirection(-C,D,3),F=this.getCardinalDirection(-O,D,1)):h>d?(P=this.getCardinalDirection(-C,D,1),F=this.getCardinalDirection(-O,D,3)):(P=this.getCardinalDirection(C,D,2),F=this.getCardinalDirection(O,D,4)),!k)switch(P){case 1:$=m,B=u+-w/D,l[0]=B,l[1]=$;break;case 2:B=x,$=h+b*D,l[0]=B,l[1]=$;break;case 3:$=v,B=u+w/D,l[0]=B,l[1]=$;break;case 4:B=y,$=h+-b*D,l[0]=B,l[1]=$;break}if(!I)switch(F){case 1:Y=T,z=f+-N/D,l[2]=z,l[3]=Y;break;case 2:z=L,Y=d+M*D,l[2]=z,l[3]=Y;break;case 3:Y=A,z=f+N/D,l[2]=z,l[3]=Y;break;case 4:z=_,Y=d+-M*D,l[2]=z,l[3]=Y;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,S=void 0,T=void 0,E=void 0,_=void 0,A=void 0,L=void 0;return w=p-f,T=h-d,_=d*f-h*p,S=v-g,E=m-y,A=y*g-m*v,L=w*E-S*T,L===0?null:(x=(T*A-E*_)/L,b=(S*_-w*A)/L,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var _=E.getEdges(),x=0;x<_.length;x++){var A=_[x].getOtherEnd(E);if(S.get(E)!=A)if(!b.has(A))w.push(A),S.set(A,E);else{g=!1;break}}}if(!g)m=[];else{var L=[].concat(n(b));m.push(L);for(var x=0;x-1&&T.splice(N,1)}b=new Set,S=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(A,1);var L=S.getNeighborsList();L.forEach(function(k){if(y.indexOf(k)<0){var I=v.get(k),C=I-1;C==1&&E.push(k),v.set(k,C)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var S=0;Sh},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(it){for(var dt=[];it-- >0;)dt.push(0);return dt}(Math.min(this.m+1,this.n)),this.U=function(it){var dt=o(function lt(It){if(It.length==0)return 0;for(var mt=[],St=0;St0;)dt.push(0);return dt}(this.n),l=function(it){for(var dt=[];it-- >0;)dt.push(0);return dt}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;D--)if(this.s[D]!==0){for(var P=D+1;P=0;X--){if(function(it,dt){return it&&dt}(X0;){var ue=void 0,te=void 0;for(ue=I-2;ue>=-1&&ue!==-1;ue--)if(Math.abs(s[ue])<=ce+se*(Math.abs(this.s[ue])+Math.abs(this.s[ue+1]))){s[ue]=0;break}if(ue===I-2)te=4;else{var De=void 0;for(De=I-1;De>=ue&&De!==ue;De--){var oe=(De!==I?Math.abs(s[De]):0)+(De!==ue+1?Math.abs(s[De-1]):0);if(Math.abs(this.s[De])<=ce+se*oe){this.s[De]=0;break}}De===ue?te=3:De===I-1?te=1:(te=2,ue=De)}switch(ue++,te){case 1:{var ke=s[I-2];s[I-2]=0;for(var Ie=I-2;Ie>=ue;Ie--){var Se=n.hypot(this.s[Ie],ke),Ue=this.s[Ie]/Se,Pe=ke/Se;if(this.s[Ie]=Se,Ie!==ue&&(ke=-Pe*s[Ie-1],s[Ie-1]=Ue*s[Ie-1]),h)for(var _e=0;_e=this.s[ue+1]);){var je=this.s[ue];if(this.s[ue]=this.s[ue+1],this.s[ue+1]=je,h&&ueMath.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof vb=="object"&&typeof QB=="object"?QB.exports=r(KB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof vb=="object"?vb.coseBase=r(KB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(vb,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,S=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,_=l(551).LGraph,A=l(551).Transform,L=l(551).LinkedList;function M(){u.call(this),this.toBeTiled={},this.constraints={}}o(M,"CoSELayout"),M.prototype=Object.create(u.prototype);for(var N in u)M[N]=u[N];M.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},M.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},M.prototype.newNode=function(k){return new d(this.graphManager,k)},M.prototype.newEdge=function(k){return new p(null,null,k)},M.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},M.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},M.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},M.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var I=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(P){return I.has(P)});this.graphManager.setAllNodesToApplyGravitation(C)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var I=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(O){return I.has(O)});this.graphManager.setAllNodesToApplyGravitation(C),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},M.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),I=this.nodesWithGravity.filter(function(D){return k.has(D)});this.graphManager.setAllNodesToApplyGravitation(I),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var C=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(C,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},M.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),I={},C=0;C0&&this.updateDisplacements();for(var C=0;C0&&(O.fixedNodeWeight=P)}}if(this.constraints.relativePlacementConstraint){var F=new Map,B=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(J){k.fixedNodesOnHorizontal.add(J),k.fixedNodesOnVertical.add(J)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var $=this.constraints.alignmentConstraint.vertical,C=0;C<$.length;C++)this.dummyToNodeForVerticalAlignment.set("dummy"+C,[]),$[C].forEach(function(Z){F.set(Z,"dummy"+C),k.dummyToNodeForVerticalAlignment.get("dummy"+C).push(Z),k.fixedNodeSet.has(Z)&&k.fixedNodesOnHorizontal.add("dummy"+C)});if(this.constraints.alignmentConstraint.horizontal)for(var z=this.constraints.alignmentConstraint.horizontal,C=0;C=2*J.length/3;q--)Z=Math.floor(Math.random()*(q+1)),H=J[q],J[q]=J[Z],J[Z]=H;return J},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(J){if(J.left){var Z=F.has(J.left)?F.get(J.left):J.left,H=F.has(J.right)?F.get(J.right):J.right;k.nodesInRelativeHorizontal.includes(Z)||(k.nodesInRelativeHorizontal.push(Z),k.nodeToRelativeConstraintMapHorizontal.set(Z,[]),k.dummyToNodeForVerticalAlignment.has(Z)?k.nodeToTempPositionMapHorizontal.set(Z,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(Z)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(Z,k.idToNodeMap.get(Z).getCenterX())),k.nodesInRelativeHorizontal.includes(H)||(k.nodesInRelativeHorizontal.push(H),k.nodeToRelativeConstraintMapHorizontal.set(H,[]),k.dummyToNodeForVerticalAlignment.has(H)?k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(H)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(H).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(Z).push({right:H,gap:J.gap}),k.nodeToRelativeConstraintMapHorizontal.get(H).push({left:Z,gap:J.gap})}else{var q=B.has(J.top)?B.get(J.top):J.top,K=B.has(J.bottom)?B.get(J.bottom):J.bottom;k.nodesInRelativeVertical.includes(q)||(k.nodesInRelativeVertical.push(q),k.nodeToRelativeConstraintMapVertical.set(q,[]),k.dummyToNodeForHorizontalAlignment.has(q)?k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(q)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(q).getCenterY())),k.nodesInRelativeVertical.includes(K)||(k.nodesInRelativeVertical.push(K),k.nodeToRelativeConstraintMapVertical.set(K,[]),k.dummyToNodeForHorizontalAlignment.has(K)?k.nodeToTempPositionMapVertical.set(K,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(K)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(K,k.idToNodeMap.get(K).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(q).push({bottom:K,gap:J.gap}),k.nodeToRelativeConstraintMapVertical.get(K).push({top:q,gap:J.gap})}});else{var Y=new Map,Q=new Map;this.constraints.relativePlacementConstraint.forEach(function(J){if(J.left){var Z=F.has(J.left)?F.get(J.left):J.left,H=F.has(J.right)?F.get(J.right):J.right;Y.has(Z)?Y.get(Z).push(H):Y.set(Z,[H]),Y.has(H)?Y.get(H).push(Z):Y.set(H,[Z])}else{var q=B.has(J.top)?B.get(J.top):J.top,K=B.has(J.bottom)?B.get(J.bottom):J.bottom;Q.has(q)?Q.get(q).push(K):Q.set(q,[K]),Q.has(K)?Q.get(K).push(q):Q.set(K,[q])}});var X=o(function(Z,H){var q=[],K=[],se=new L,ce=new Set,ue=0;return Z.forEach(function(te,De){if(!ce.has(De)){q[ue]=[],K[ue]=!1;var oe=De;for(se.push(oe),ce.add(oe),q[ue].push(oe);se.length!=0;){oe=se.shift(),H.has(oe)&&(K[ue]=!0);var ke=Z.get(oe);ke.forEach(function(Ie){ce.has(Ie)||(se.push(Ie),ce.add(Ie),q[ue].push(Ie))})}ue++}}),{components:q,isFixed:K}},"constructComponents"),ie=X(Y,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=ie.components,this.fixedComponentsOnHorizontal=ie.isFixed;var j=X(Q,k.fixedNodesOnVertical);this.componentsOnVertical=j.components,this.fixedComponentsOnVertical=j.isFixed}}},M.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(j){var J=k.idToNodeMap.get(j.nodeId);J.displacementX=0,J.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var I=this.constraints.alignmentConstraint.vertical,C=0;C1){var B;for(B=0;BO&&(O=Math.floor(F.y)),P=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},M.radialLayout=function(k,I,C){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);M.branchRadialLayout(I,null,0,359,0,O);var D=_.calculateBounds(k),P=new A;P.setDeviceOrgX(D.getMinX()),P.setDeviceOrgY(D.getMinY()),P.setWorldOrgX(C.x),P.setWorldOrgY(C.y);for(var F=0;F1;){var q=H[0];H.splice(0,1);var K=X.indexOf(q);K>=0&&X.splice(K,1),J--,ie--}I!=null?Z=(X.indexOf(H[0])+1)%J:Z=0;for(var se=Math.abs(O-C)/ie,ce=Z;j!=ie;ce=++ce%J){var ue=X[ce].getOtherEnd(k);if(ue!=I){var te=(C+j*se)%360,De=(te+se)%360;M.branchRadialLayout(ue,k,te,De,D+P,P),j++}}},M.maxDiagonalInTree=function(k){for(var I=T.MIN_VALUE,C=0;CI&&(I=D)}return I},M.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},M.prototype.groupZeroDegreeMembers=function(){var k=this,I={};this.memberGroups={},this.idToDummyNode={};for(var C=[],O=this.graphManager.getAllNodes(),D=0;D"u"&&(I[B]=[]),I[B]=I[B].concat(P)}Object.keys(I).forEach(function($){if(I[$].length>1){var z="DummyCompound_"+$;k.memberGroups[z]=I[$];var Y=I[$][0].getParent(),Q=new d(k.graphManager);Q.id=z,Q.paddingLeft=Y.paddingLeft||0,Q.paddingRight=Y.paddingRight||0,Q.paddingBottom=Y.paddingBottom||0,Q.paddingTop=Y.paddingTop||0,k.idToDummyNode[z]=Q;var X=k.getGraphManager().add(k.newGraph(),Q),ie=Y.getChild();ie.add(Q);for(var j=0;jD?(O.rect.x-=(O.labelWidth-D)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-D)/2):O.labelPosHorizontal=="right"&&O.setWidth(D+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(P+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>P?(O.rect.y-=(O.labelHeight-P)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-P)/2):O.labelPosVertical=="bottom"&&O.setHeight(P+O.labelHeight))}})},M.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var I=this.compoundOrder[k],C=I.id,O=I.paddingLeft,D=I.paddingTop,P=I.labelMarginLeft,F=I.labelMarginTop;this.adjustLocations(this.tiledMemberPack[C],I.rect.x,I.rect.y,O,D,P,F)}},M.prototype.repopulateZeroDegreeMembers=function(){var k=this,I=this.tiledZeroDegreePack;Object.keys(I).forEach(function(C){var O=k.idToDummyNode[C],D=O.paddingLeft,P=O.paddingTop,F=O.labelMarginLeft,B=O.labelMarginTop;k.adjustLocations(I[C],O.rect.x,O.rect.y,D,P,F,B)})},M.prototype.getToBeTiled=function(k){var I=k.id;if(this.toBeTiled[I]!=null)return this.toBeTiled[I];var C=k.getChild();if(C==null)return this.toBeTiled[I]=!1,!1;for(var O=C.getNodes(),D=0;D0)return this.toBeTiled[I]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[I]=!1,!1}return this.toBeTiled[I]=!0,!0},M.prototype.getNodeDegree=function(k){for(var I=k.id,C=k.getEdges(),O=0,D=0;DY&&(Y=X.rect.height)}C+=Y+k.verticalPadding}},M.prototype.tileCompoundMembers=function(k,I){var C=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var D=I[O];if(C.tiledMemberPack[O]=C.tileNodes(k[O],D.paddingLeft+D.paddingRight),D.rect.width=C.tiledMemberPack[O].width,D.rect.height=C.tiledMemberPack[O].height,D.setCenter(C.tiledMemberPack[O].centerX,C.tiledMemberPack[O].centerY),D.labelMarginLeft=0,D.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var P=D.rect.width,F=D.rect.height;D.labelWidth&&(D.labelPosHorizontal=="left"?(D.rect.x-=D.labelWidth,D.setWidth(P+D.labelWidth),D.labelMarginLeft=D.labelWidth):D.labelPosHorizontal=="center"&&D.labelWidth>P?(D.rect.x-=(D.labelWidth-P)/2,D.setWidth(D.labelWidth),D.labelMarginLeft=(D.labelWidth-P)/2):D.labelPosHorizontal=="right"&&D.setWidth(P+D.labelWidth)),D.labelHeight&&(D.labelPosVertical=="top"?(D.rect.y-=D.labelHeight,D.setHeight(F+D.labelHeight),D.labelMarginTop=D.labelHeight):D.labelPosVertical=="center"&&D.labelHeight>F?(D.rect.y-=(D.labelHeight-F)/2,D.setHeight(D.labelHeight),D.labelMarginTop=(D.labelHeight-F)/2):D.labelPosVertical=="bottom"&&D.setHeight(F+D.labelHeight))}})},M.prototype.tileNodes=function(k,I){var C=this.tileNodesByFavoringDim(k,I,!0),O=this.tileNodesByFavoringDim(k,I,!1),D=this.getOrgRatio(C),P=this.getOrgRatio(O),F;return PB&&(B=j.getWidth())});var $=P/D,z=F/D,Y=Math.pow(C-O,2)+4*($+O)*(z+C)*D,Q=(O-C+Math.sqrt(Y))/(2*($+O)),X;I?(X=Math.ceil(Q),X==Q&&X++):X=Math.floor(Q);var ie=X*($+O)-O;return B>ie&&(ie=B),ie+=O*2,ie},M.prototype.tileNodesByFavoringDim=function(k,I,C){var O=m.TILING_PADDING_VERTICAL,D=m.TILING_PADDING_HORIZONTAL,P=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:I,verticalPadding:O,horizontalPadding:D,centerX:0,centerY:0};P&&(F.idealRowWidth=this.calcIdealRowWidth(k,C));var B=o(function(J){return J.rect.width*J.rect.height},"getNodeArea"),$=o(function(J,Z){return B(Z)-B(J)},"areaCompareFcn");k.sort(function(j,J){var Z=$;return F.idealRowWidth?(Z=P,Z(j.id,J.id)):Z(j,J)});for(var z=0,Y=0,Q=0;Q0&&(F+=k.horizontalPadding),k.rowWidth[C]=F,k.width0&&(B+=k.verticalPadding);var $=0;B>k.rowHeight[C]&&($=k.rowHeight[C],k.rowHeight[C]=B,$=k.rowHeight[C]-$),k.height+=$,k.rows[C].push(I)},M.prototype.getShortestRowIndex=function(k){for(var I=-1,C=Number.MAX_VALUE,O=0;OC&&(I=O,C=k.rowWidth[O]);return I},M.prototype.canAddHorizontal=function(k,I,C){if(k.idealRowWidth){var O=k.rows.length-1,D=k.rowWidth[O];return D+I+k.horizontalPadding<=k.idealRowWidth}var P=this.getShortestRowIndex(k);if(P<0)return!0;var F=k.rowWidth[P];if(F+k.horizontalPadding+I<=k.width)return!0;var B=0;k.rowHeight[P]0&&(B=C+k.verticalPadding-k.rowHeight[P]);var $;k.width-F>=I+k.horizontalPadding?$=(k.height+B)/(F+I+k.horizontalPadding):$=(k.height+B)/k.width,B=C+k.verticalPadding;var z;return k.widthP&&I!=C){O.splice(-1,1),k.rows[C].push(D),k.rowWidth[I]=k.rowWidth[I]-P,k.rowWidth[C]=k.rowWidth[C]+P,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,B=0;BF&&(F=O[B].height);I>0&&(F+=k.verticalPadding);var $=k.rowHeight[I]+k.rowHeight[C];k.rowHeight[I]=F,k.rowHeight[C]0)for(var ie=D;ie<=P;ie++)X[0]+=this.grid[ie][F-1].length+this.grid[ie][F].length-1;if(P0)for(var ie=F;ie<=B;ie++)X[3]+=this.grid[D-1][ie].length+this.grid[D][ie].length-1;for(var j=T.MAX_VALUE,J,Z,H=0;H{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var Je=0;Ye.forEach(function(je){we=="horizontal"?(ye.set(je,x.has(je)?b[x.get(je)]:Ce.get(je)),Je+=ye.get(je)):(ye.set(je,x.has(je)?w[x.get(je)]:Ce.get(je)),Je+=ye.get(je))}),Je=Je/Ye.length,tt.forEach(function(je){Te.has(je)||ye.set(je,Je)})}else{var Ve=0;tt.forEach(function(je){we=="horizontal"?Ve+=x.has(je)?b[x.get(je)]:Ce.get(je):Ve+=x.has(je)?w[x.get(je)]:Ce.get(je)}),Ve=Ve/tt.length,tt.forEach(function(je){ye.set(je,Ve)})}});for(var Ze=o(function(){var Ye=ze.shift(),Je=ae.get(Ye);Je.forEach(function(Ve){if(ye.get(Ve.id)je&&(je=mt),Stkt&&(kt=St)}}catch(Qn){xt=!0,it=Qn}finally{try{!at&&dt.return&&dt.return()}finally{if(xt)throw it}}var gr=(Je+je)/2-(Ve+kt)/2,xn=!0,jt=!1,rn=void 0;try{for(var Er=tt[Symbol.iterator](),Kn;!(xn=(Kn=Er.next()).done);xn=!0){var hn=Kn.value;ye.set(hn,ye.get(hn)+gr)}}catch(Qn){jt=!0,rn=Qn}finally{try{!xn&&Er.return&&Er.return()}finally{if(jt)throw rn}}})}return ye},"findAppropriatePositionForRelativePlacement"),N=o(function(ae){var we=0,Te=0,Ce=0,Ae=0;if(ae.forEach(function(He){He.left?b[x.get(He.left)]-b[x.get(He.right)]>=0?we++:Te++:w[x.get(He.top)]-w[x.get(He.bottom)]>=0?Ce++:Ae++}),we>Te&&Ce>Ae)for(var Ge=0;GeTe)for(var Me=0;MeAe)for(var ye=0;ye1)y.fixedNodeConstraint.forEach(function(ne,ae){O[ae]=[ne.position.x,ne.position.y],D[ae]=[b[x.get(ne.nodeId)],w[x.get(ne.nodeId)]]}),P=!0;else if(y.alignmentConstraint)(function(){var ne=0;if(y.alignmentConstraint.vertical){for(var ae=y.alignmentConstraint.vertical,we=o(function(ye){var He=new Set;ae[ye].forEach(function(gt){He.add(gt)});var ze=new Set([].concat(u(He)).filter(function(gt){return B.has(gt)})),Ze=void 0;ze.size>0?Ze=b[x.get(ze.values().next().value)]:Ze=L(He).x,ae[ye].forEach(function(gt){O[ne]=[Ze,w[x.get(gt)]],D[ne]=[b[x.get(gt)],w[x.get(gt)]],ne++})},"_loop2"),Te=0;Te0?Ze=b[x.get(ze.values().next().value)]:Ze=L(He).y,Ce[ye].forEach(function(gt){O[ne]=[b[x.get(gt)],Ze],D[ne]=[b[x.get(gt)],w[x.get(gt)]],ne++})},"_loop3"),Ge=0;GeQ&&(Q=Y[ie].length,X=ie);if(Q0){var Ue={x:0,y:0};y.fixedNodeConstraint.forEach(function(ne,ae){var we={x:b[x.get(ne.nodeId)],y:w[x.get(ne.nodeId)]},Te=ne.position,Ce=A(Te,we);Ue.x+=Ce.x,Ue.y+=Ce.y}),Ue.x/=y.fixedNodeConstraint.length,Ue.y/=y.fixedNodeConstraint.length,b.forEach(function(ne,ae){b[ae]+=Ue.x}),w.forEach(function(ne,ae){w[ae]+=Ue.y}),y.fixedNodeConstraint.forEach(function(ne){b[x.get(ne.nodeId)]=ne.position.x,w[x.get(ne.nodeId)]=ne.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var Pe=y.alignmentConstraint.vertical,_e=o(function(ae){var we=new Set;Pe[ae].forEach(function(Ae){we.add(Ae)});var Te=new Set([].concat(u(we)).filter(function(Ae){return B.has(Ae)})),Ce=void 0;Te.size>0?Ce=b[x.get(Te.values().next().value)]:Ce=L(we).x,we.forEach(function(Ae){B.has(Ae)||(b[x.get(Ae)]=Ce)})},"_loop4"),me=0;me0?Ce=w[x.get(Te.values().next().value)]:Ce=L(we).y,we.forEach(function(Ae){B.has(Ae)||(w[x.get(Ae)]=Ce)})},"_loop5"),ge=0;ge{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var X1e=gi((xb,JB)=>{"use strict";o(function(e,r){typeof xb=="object"&&typeof JB=="object"?JB.exports=r(ZB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof xb=="object"?xb.cytoscapeFcose=r(ZB()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(xb,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(S){v=!0,x=S}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&P.merge(z)});for(var F=0;F1){w=x[0],S=w.connectedEdges().length,x.forEach(function(D){D.connectedEdges().length0&&g.set("dummy"+(g.size+1),_),A},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,S=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var _=E.value,A=u(_,2),L=A[0],M=A[1],N=m.cy.getElementById(L);if(N){var k=N.boundingBox(),I=p.xCoords[M]-k.w/2,C=p.xCoords[M]+k.w/2,O=p.yCoords[M]-k.h/2,D=p.yCoords[M]+k.h/2;Iy&&(y=C),Ox&&(x=D)}}}catch(z){w=!0,S=z}finally{try{!b&&T.return&&T.return()}finally{if(w)throw S}}var P=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function(z){return z+P}),p.yCoords=p.yCoords.map(function(z){return z+F})}else{Object.keys(p).forEach(function(z){var Y=p[z],Q=Y.getRect().x,X=Y.getRect().x+Y.getRect().width,ie=Y.getRect().y,j=Y.getRect().y+Y.getRect().height;Qy&&(y=X),iex&&(x=j)});var B=d.x-(y+g)/2,$=d.y-(x+v)/2;Object.keys(p).forEach(function(z){var Y=p[z];Y.setCenter(Y.getCenterX()+B,Y.getCenterY()+$)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,S=void 0,T=void 0,E=void 0,_=d.descendants().not(":parent"),A=_.length,L=0;Lw&&(y=w),vT&&(x=T),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var S=b.cy,T=b.eles,E=T.nodes(),_=T.edges(),A=void 0,L=void 0,M=void 0,N={};b.randomize&&(A=w.nodeIndexes,L=w.xCoords,M=w.yCoords);var k=o(function(z){return typeof z=="function"},"isFn"),I=o(function(z,Y){return k(z)?z(Y):z},"optFn"),C=u.calcParentsWithoutChildren(S,T),O=o(function $(z,Y,Q,X){for(var ie=Y.length,j=0;j0){var se=void 0;se=Q.getGraphManager().add(Q.newGraph(),H),$(se,Z,Q,X)}}},"processChildrenList"),D=o(function(z,Y,Q){for(var X=0,ie=0,j=0;j0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=X/ie:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),P=o(function(z,Y){Y.fixedNodeConstraint&&(z.constraints.fixedNodeConstraint=Y.fixedNodeConstraint),Y.alignmentConstraint&&(z.constraints.alignmentConstraint=Y.alignmentConstraint),Y.relativePlacementConstraint&&(z.constraints.relativePlacementConstraint=Y.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,B=F.newGraphManager();return O(B.addRoot(),u.getTopMostNodes(E),F,b),D(F,B,_),P(F,b),F.runLayout(),N},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,S){for(var T=0;T0)if(D){var B=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,B),k.forEach(function(oe){var ke=oe.boundingBox();I.push({x:ke.x1+ke.w/2,y:ke.y1+ke.h/2})}),T.randomize&&k.forEach(function(oe){T.eles=oe,A.push(m(T))}),T.quality=="default"||T.quality=="proof"){var $=E.collection();if(T.tile){var z=new Map,Y=[],Q=[],X=0,ie={nodeIndexes:z,xCoords:Y,yCoords:Q},j=[];if(k.forEach(function(oe,ke){oe.edges().length==0&&(oe.nodes().forEach(function(Ie,Se){$.merge(oe.nodes()[Se]),Ie.isParent()||(ie.nodeIndexes.set(oe.nodes()[Se].id(),X++),ie.xCoords.push(oe.nodes()[0].position().x),ie.yCoords.push(oe.nodes()[0].position().y))}),j.push(ke))}),$.length>1){var J=$.boundingBox();I.push({x:J.x1+J.w/2,y:J.y1+J.h/2}),k.push($),A.push(ie);for(var Z=j.length-1;Z>=0;Z--)k.splice(j[Z],1),A.splice(j[Z],1),I.splice(j[Z],1)}}k.forEach(function(oe,ke){T.eles=oe,N.push(y(T,A[ke])),d.relocateComponent(I[ke],N[ke],T)})}else k.forEach(function(oe,ke){d.relocateComponent(I[ke],A[ke],T)});var H=new Set;if(k.length>1){var q=[],K=_.filter(function(oe){return oe.css("display")=="none"});k.forEach(function(oe,ke){var Ie=void 0;if(T.quality=="draft"&&(Ie=A[ke].nodeIndexes),oe.nodes().not(K).length>0){var Se={};Se.edges=[],Se.nodes=[];var Ue=void 0;oe.nodes().not(K).forEach(function(Pe){if(T.quality=="draft")if(!Pe.isParent())Ue=Ie.get(Pe.id()),Se.nodes.push({x:A[ke].xCoords[Ue]-Pe.boundingbox().w/2,y:A[ke].yCoords[Ue]-Pe.boundingbox().h/2,width:Pe.boundingbox().w,height:Pe.boundingbox().h});else{var _e=d.calcBoundingBox(Pe,A[ke].xCoords,A[ke].yCoords,Ie);Se.nodes.push({x:_e.topLeftX,y:_e.topLeftY,width:_e.width,height:_e.height})}else N[ke][Pe.id()]&&Se.nodes.push({x:N[ke][Pe.id()].getLeft(),y:N[ke][Pe.id()].getTop(),width:N[ke][Pe.id()].getWidth(),height:N[ke][Pe.id()].getHeight()})}),oe.edges().forEach(function(Pe){var _e=Pe.source(),me=Pe.target();if(_e.css("display")!="none"&&me.css("display")!="none")if(T.quality=="draft"){var W=Ie.get(_e.id()),fe=Ie.get(me.id()),ge=[],re=[];if(_e.isParent()){var he=d.calcBoundingBox(_e,A[ke].xCoords,A[ke].yCoords,Ie);ge.push(he.topLeftX+he.width/2),ge.push(he.topLeftY+he.height/2)}else ge.push(A[ke].xCoords[W]),ge.push(A[ke].yCoords[W]);if(me.isParent()){var ne=d.calcBoundingBox(me,A[ke].xCoords,A[ke].yCoords,Ie);re.push(ne.topLeftX+ne.width/2),re.push(ne.topLeftY+ne.height/2)}else re.push(A[ke].xCoords[fe]),re.push(A[ke].yCoords[fe]);Se.edges.push({startX:ge[0],startY:ge[1],endX:re[0],endY:re[1]})}else N[ke][_e.id()]&&N[ke][me.id()]&&Se.edges.push({startX:N[ke][_e.id()].getCenterX(),startY:N[ke][_e.id()].getCenterY(),endX:N[ke][me.id()].getCenterX(),endY:N[ke][me.id()].getCenterY()})}),Se.nodes.length>0&&(q.push(Se),H.add(ke))}});var se=O.packComponents(q,T.randomize).shifts;if(T.quality=="draft")A.forEach(function(oe,ke){var Ie=oe.xCoords.map(function(Ue){return Ue+se[ke].dx}),Se=oe.yCoords.map(function(Ue){return Ue+se[ke].dy});oe.xCoords=Ie,oe.yCoords=Se});else{var ce=0;H.forEach(function(oe){Object.keys(N[oe]).forEach(function(ke){var Ie=N[oe][ke];Ie.setCenter(Ie.getCenterX()+se[ce].dx,Ie.getCenterY()+se[ce].dy)}),ce++})}}}else{var P=T.eles.boundingBox();if(I.push({x:P.x1+P.w/2,y:P.y1+P.h/2}),T.randomize){var F=m(T);A.push(F)}T.quality=="default"||T.quality=="proof"?(N.push(y(T,A[0])),d.relocateComponent(I[0],N[0],T)):d.relocateComponent(I[0],A[0],T)}var ue=o(function(ke,Ie){if(T.quality=="default"||T.quality=="proof"){typeof ke=="number"&&(ke=Ie);var Se=void 0,Ue=void 0,Pe=ke.data("id");return N.forEach(function(me){Pe in me&&(Se={x:me[Pe].getRect().getCenterX(),y:me[Pe].getRect().getCenterY()},Ue=me[Pe])}),T.nodeDimensionsIncludeLabels&&(Ue.labelWidth&&(Ue.labelPosHorizontal=="left"?Se.x+=Ue.labelWidth/2:Ue.labelPosHorizontal=="right"&&(Se.x-=Ue.labelWidth/2)),Ue.labelHeight&&(Ue.labelPosVertical=="top"?Se.y+=Ue.labelHeight/2:Ue.labelPosVertical=="bottom"&&(Se.y-=Ue.labelHeight/2))),Se==null&&(Se={x:ke.position("x"),y:ke.position("y")}),{x:Se.x,y:Se.y}}else{var _e=void 0;return A.forEach(function(me){var W=me.nodeIndexes.get(ke.id());W!=null&&(_e={x:me.xCoords[W],y:me.yCoords[W]})}),_e==null&&(_e={x:ke.position("x"),y:ke.position("y")}),{x:_e.x,y:_e.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var te=d.calcParentsWithoutChildren(E,_),De=_.filter(function(oe){return oe.css("display")=="none"});T.eles=_.not(De),_.nodes().not(":parent").not(De).layoutPositions(S,T,ue),te.length>0&&te.forEach(function(oe){oe.position(ue(oe))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,S=new Map,T=[],E=[],_=[],A=[],L=[],M=[],N=[],k=[],I=void 0,C=void 0,O=1e8,D=1e-9,P=m.piTol,F=m.samplingType,B=m.nodeSeparation,$=void 0,z=o(function(){for(var we=0,Te=0,Ce=!1;Te<$;){we=Math.floor(Math.random()*C),Ce=!1;for(var Ae=0;Ae=Ge;){ye=Ae[Ge++];for(var tt=T[ye],Ye=0;YeZe&&(Ze=L[Ve],gt=Ve)}return gt},"BFS"),Q=o(function(we){var Te=void 0;if(we){Te=Math.floor(Math.random()*C),I=Te;for(var Ae=0;Ae=1)break;Ze=ze}for(var tt=0;tt=1)break;Ze=ze}for(var Je=0;Je0&&(Te.isParent()?T[we].push(S.get(Te.id())):T[we].push(Te.id()))})});var te=o(function(we){var Te=w.get(we),Ce=void 0;b.get(we).forEach(function(Ae){g.getElementById(Ae).isParent()?Ce=S.get(Ae):Ce=Ae,T[Te].push(Ce),T[w.get(Ce)].push(we)})},"_loop"),De=!0,oe=!1,ke=void 0;try{for(var Ie=b.keys()[Symbol.iterator](),Se;!(De=(Se=Ie.next()).done);De=!0){var Ue=Se.value;te(Ue)}}catch(ae){oe=!0,ke=ae}finally{try{!De&&Ie.return&&Ie.return()}finally{if(oe)throw ke}}C=w.size;var Pe=void 0;if(C>2){$=C{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var T1,J0,eF=R(()=>{"use strict";V1();T1=o(t=>`${t}`,"wrapIcon"),J0={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:T1('')},server:{body:T1('')},disk:{body:T1('')},internet:{body:T1('')},cloud:{body:T1('')},unknown:FC,blank:{body:T1("")}}}});var j1e,K1e,Q1e,Z1e,J1e=R(()=>{"use strict";V1();_t();Al();gb();eF();cC();j1e=o(async function(t,e){let r=Ci("padding"),n=Ci("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=lC(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:S}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),_=r+4;if(d&&(cs(h)?x+=h==="L"?-_:_:b+=h==="T"?-_:_+18),y&&(cs(m)?T+=m==="L"?-_:_:E+=m==="T"?-_:_+18),!d&&Z0.getNode(u)?.type==="junction"&&(cs(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&Z0.getNode(p)?.type==="junction"&&(cs(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let A=t.insert("g");if(A.insert("path").attr("d",`M ${x},${b} L ${w},${S} L${T},${E} `).attr("class","edge"),f){let L=cs(h)?pb[h](x,a):x-s,M=Wc(h)?pb[h](b,a):b-s;A.insert("polygon").attr("points",qB[h](a)).attr("transform",`translate(${L},${M})`).attr("class","arrow")}if(g){let L=cs(m)?pb[m](T,a):T-s,M=Wc(m)?pb[m](E,a):E-s;A.insert("polygon").attr("points",qB[m](a)).attr("transform",`translate(${L},${M})`).attr("class","arrow")}if(v){let L=oC(h,m)?"XY":cs(h)?"X":"Y",M=0;L==="X"?M=Math.abs(x-T):L==="Y"?M=Math.abs(b-E)/1.5:M=Math.abs(x-T)/2;let N=A.append("g");if(await ta(N,v,{useHtmlLabels:!1,width:M,classes:"architecture-service-label"},de()),N.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),L==="X")N.attr("transform","translate("+w+", "+S+")");else if(L==="Y")N.attr("transform","translate("+w+", "+S+") rotate(-90)");else if(L==="XY"){let k=mb(h,m);if(k&&F1e(k)){let I=N.node().getBoundingClientRect(),[C,O]=G1e(k);N.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*C*O*45})`);let D=N.node().getBoundingClientRect();N.attr("transform",` + translate(${w}, ${S-I.height/2}) + translate(${C*D.width/2}, ${O*D.height/2}) + rotate(${-1*C*O*45}, 0, ${I.height/2}) + `)}}}}}))},"drawEdges"),K1e=o(async function(t,e){let n=Ci("padding")*.75,i=Ci("fontSize"),s=Ci("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=If(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`${await zb(u.icon,{height:n,width:n,fallbackPrefix:J0.prefix})}`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await ta(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},de()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),Q1e=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Ci("iconSize");if(n.title){let h=i.append("g");await ta(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},de()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`${await zb(n.icon,{height:a,width:a,fallbackPrefix:J0.prefix})}`);else if(n.iconText){s.html(`${await zb("blank",{height:a,width:a,fallbackPrefix:J0.prefix})}`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),Z1e=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Ci("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function iet(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Ci("iconSize"),height:Ci("iconSize")},classes:"node-service"})})}function aet(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Ci("iconSize"),height:Ci("iconSize")},classes:"node-junction"})})}function set(t,e){e.nodes().map(r=>{let n=If(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function oet(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function cet(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=oC(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function uet(t){let e=t.map(i=>{let a={},s={};return Object.entries(i).forEach(([l,[u,h]])=>{a[h]||(a[h]=[]),s[u]||(s[u]=[]),a[h].push(l),s[u].push(l)}),{horiz:Object.values(a).filter(l=>l.length>1),vert:Object.values(s).filter(l=>l.length>1)}}),[r,n]=e.reduce(([i,a],{horiz:s,vert:l})=>[[...i,...s],[...a,...l]],[[],[]]);return{horizontal:r,vertical:n}}function het(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[WB[p]]:y,[WB[B1e(p)]]:f,gap:1.5*Ci("iconSize")}))})}}}}),e}function fet(t,e,r,n,{spatialMaps:i}){return new Promise(a=>{let s=$e("body").append("div").attr("id","cy").attr("style","display:none"),l=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Ci("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Ci("padding")}px`}}]});s.remove(),oet(r,l),iet(t,l),aet(e,l),cet(n,l);let u=uet(i),h=het(i),f=l.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(d){let[p,m]=d.connectedNodes(),{parent:g}=If(p),{parent:y}=If(m);return g===y?1.5*Ci("iconSize"):.5*Ci("iconSize")},edgeElasticity(d){let[p,m]=d.connectedNodes(),{parent:g}=If(p),{parent:y}=If(m);return g===y?.45:.001},alignmentConstraint:u,relativePlacementConstraint:h});f.one("layoutstop",()=>{function d(p,m,g,y){let v,x,{x:b,y:w}=p,{x:S,y:T}=m;x=(y-w+(b-g)*(w-T)/(b-S))/Math.sqrt(1+Math.pow((w-T)/(b-S),2)),v=Math.sqrt(Math.pow(y-w,2)+Math.pow(g-b,2)-Math.pow(x,2));let E=Math.sqrt(Math.pow(S-b,2)+Math.pow(T-w,2));v=v/E;let _=(S-b)*(y-w)-(T-w)*(g-b);switch(!0){case _>=0:_=1;break;case _<0:_=-1;break}let A=(S-b)*(g-b)+(T-w)*(y-w);switch(!0){case A>=0:A=1;break;case A<0:A=-1;break}return x=Math.abs(x)*_,v=v*A,{distances:x,weights:v}}o(d,"getSegmentWeights"),l.startBatch();for(let p of Object.values(l.edges()))if(p.data?.()){let{x:m,y:g}=p.source().position(),{x:y,y:v}=p.target().position();if(m!==y&&g!==v){let x=p.sourceEndpoint(),b=p.targetEndpoint(),{sourceDir:w}=lC(p),[S,T]=Wc(w)?[x.x,b.y]:[b.x,x.y],{weights:E,distances:_}=d(x,b,S,T);p.style("segment-distances",_),p.style("segment-weights",E)}}l.endBatch(),f.run()}),f.run(),l.ready(d=>{V.info("Ready",d),a(l)})})}var eye,det,tye,rye=R(()=>{"use strict";V1();vB();eye=Xi(X1e(),1);Zt();ut();pf();Yn();gb();eF();cC();J1e();Fb([{name:J0.prefix,icons:J0}]);rl.use(eye.default);o(iet,"addServices");o(aet,"addJunctions");o(set,"positionNodes");o(oet,"addGroups");o(cet,"addEdges");o(uet,"getAlignments");o(het,"getRelativeConstraints");o(fet,"layoutArchitecture");det=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=Ps(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await Q1e(i,p,a),Z1e(i,p,s);let g=await fet(a,s,l,u,h);await j1e(d,g),await K1e(m,g),set(i,g),Lo(void 0,f,Ci("padding"),Ci("useMaxWidth"))},"draw"),tye={draw:det}});var nye={};hr(nye,{diagram:()=>pet});var pet,iye=R(()=>{"use strict";Y1e();gb();q1e();rye();pet={parser:H1e,db:Z0,renderer:tye,styles:W1e}});var knt={};hr(knt,{default:()=>Tnt});V1();zC();Hf();var BX="c4",mCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),gCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(PX(),OX));return{id:BX,diagram:t}},"loader"),yCe={id:BX,detector:mCe,loader:gCe},FX=yCe;var Zre="flowchart",SNe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),ANe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(uT(),cT));return{id:Zre,diagram:t}},"loader"),_Ne={id:Zre,detector:SNe,loader:ANe},Jre=_Ne;var ene="flowchart-v2",LNe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),DNe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(uT(),cT));return{id:ene,diagram:t}},"loader"),RNe={id:ene,detector:LNe,loader:DNe},tne=RNe;var Dne="er",sMe=o(t=>/^\s*erDiagram/.test(t),"detector"),oMe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Lne(),_ne));return{id:Dne,diagram:t}},"loader"),lMe={id:Dne,detector:sMe,loader:oMe},Rne=lMe;var $le="gitGraph",NBe=o(t=>/^\s*gitGraph/.test(t),"detector"),MBe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Gle(),zle));return{id:$le,diagram:t}},"loader"),IBe={id:$le,detector:NBe,loader:MBe},Vle=IBe;var vce="gantt",wFe=o(t=>/^\s*gantt/.test(t),"detector"),TFe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yce(),gce));return{id:vce,diagram:t}},"loader"),kFe={id:vce,detector:wFe,loader:TFe},xce=kFe;var _ce="info",LFe=o(t=>/^\s*info/.test(t),"detector"),DFe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ace(),Sce));return{id:_ce,diagram:t}},"loader"),Lce={id:_ce,detector:LFe,loader:DFe};var zce="pie",UFe=o(t=>/^\s*pie/.test(t),"detector"),HFe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Fce(),Bce));return{id:zce,diagram:t}},"loader"),Gce={id:zce,detector:UFe,loader:HFe};var Jce="quadrantChart",lze=o(t=>/^\s*quadrantChart/.test(t),"detector"),cze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Zce(),Qce));return{id:Jce,diagram:t}},"loader"),uze={id:Jce,detector:lze,loader:cze},eue=uze;var Aue="xychart",Sze=o(t=>/^\s*xychart-beta/.test(t),"detector"),Aze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Sue(),Cue));return{id:Aue,diagram:t}},"loader"),_ze={id:Aue,detector:Sze,loader:Aze},_ue=_ze;var Hue="requirement",rGe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),nGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Uue(),Vue));return{id:Hue,diagram:t}},"loader"),iGe={id:Hue,detector:rGe,loader:nGe},Yue=iGe;var vhe="sequence",o$e=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),l$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yhe(),ghe));return{id:vhe,diagram:t}},"loader"),c$e={id:vhe,detector:o$e,loader:l$e},xhe=c$e;var Ihe="class",U$e=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),H$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Mhe(),Nhe));return{id:Ihe,diagram:t}},"loader"),Y$e={id:Ihe,detector:U$e,loader:H$e},Ohe=Y$e;var cfe="classDiagram",vVe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),xVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(lfe(),ofe));return{id:cfe,diagram:t}},"loader"),bVe={id:cfe,detector:vVe,loader:xVe},ufe=bVe;var tde="state",mUe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),gUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ede(),Jfe));return{id:tde,diagram:t}},"loader"),yUe={id:tde,detector:mUe,loader:gUe},rde=yUe;var ade="stateDiagram",xUe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),bUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ide(),nde));return{id:ade,diagram:t}},"loader"),wUe={id:ade,detector:xUe,loader:bUe},sde=wUe;var Tde="journey",VUe=o(t=>/^\s*journey/.test(t),"detector"),UUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wde(),bde));return{id:Tde,diagram:t}},"loader"),HUe={id:Tde,detector:VUe,loader:UUe},kde=HUe;ut();pf();Yn();var YUe=o((t,e,r)=>{V.debug(`rendering svg for syntax error +`);let n=Ps(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),Sr(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),fP={draw:YUe},Ede=fP;var WUe={db:{},renderer:fP,parser:{parse:o(()=>{},"parse")}},Cde=WUe;var Sde="flowchart-elk",qUe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),XUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(uT(),cT));return{id:Sde,diagram:t}},"loader"),jUe={id:Sde,detector:qUe,loader:XUe},Ade=jUe;var Jde="timeline",pHe=o(t=>/^\s*timeline/.test(t),"detector"),mHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Zde(),Qde));return{id:Jde,diagram:t}},"loader"),gHe={id:Jde,detector:pHe,loader:mHe},e0e=gHe;var vge="mindmap",TZe=o(t=>/^\s*mindmap/.test(t),"detector"),kZe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yge(),gge));return{id:vge,diagram:t}},"loader"),EZe={id:vge,detector:TZe,loader:kZe},xge=EZe;var Zge="sankey",WZe=o(t=>/^\s*sankey-beta/.test(t),"detector"),qZe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Qge(),Kge));return{id:Zge,diagram:t}},"loader"),XZe={id:Zge,detector:WZe,loader:qZe},Jge=XZe;var c1e="packet",oJe=o(t=>/^\s*packet-beta/.test(t),"detector"),lJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(l1e(),o1e));return{id:c1e,diagram:t}},"loader"),u1e={id:c1e,detector:oJe,loader:lJe};var O1e="block",FJe=o(t=>/^\s*block-beta/.test(t),"detector"),zJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(I1e(),M1e));return{id:O1e,diagram:t}},"loader"),GJe={id:O1e,detector:FJe,loader:zJe},P1e=GJe;var aye="architecture",met=o(t=>/^\s*architecture/.test(t),"detector"),get=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(iye(),nye));return{id:aye,diagram:t}},"loader"),yet={id:aye,detector:met,loader:get},sye=yet;Hf();_t();var oye=!1,k1=o(()=>{oye||(oye=!0,Jf("error",Cde,t=>t.toLowerCase().trim()==="error"),Jf("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Ub(FX,ufe,Ohe,Rne,xce,Lce,Gce,Yue,xhe,Ade,tne,Jre,xge,e0e,Vle,sde,rde,kde,eue,Jge,u1e,_ue,P1e,sye))},"addDiagrams");ut();Hf();_t();var lye=o(async()=>{V.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Uf).map(async([r,{detector:n,loader:i}])=>{if(i)try{cy(r)}catch{try{let{diagram:a,id:s}=await i();Jf(s,a,n)}catch(a){throw V.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Uf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){V.error(`Failed to load ${e.length} external diagrams`);for(let r of e)V.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");ut();Zt();var uC="comm",hC="rule",fC="decl";var cye="@import";var uye="@keyframes";var hye="@layer";var tF=Math.abs,bb=String.fromCharCode;function dC(t){return t.trim()}o(dC,"trim");function wb(t,e,r){return t.replace(e,r)}o(wb,"replace");function fye(t,e,r){return t.indexOf(e,r)}o(fye,"indexof");function ep(t,e){return t.charCodeAt(e)|0}o(ep,"charat");function Of(t,e,r){return t.slice(e,r)}o(Of,"substr");function wo(t){return t.length}o(wo,"strlen");function dye(t){return t.length}o(dye,"sizeof");function E1(t,e){return e.push(t),t}o(E1,"append");var pC=1,C1=1,pye=0,nl=0,Si=0,A1="";function mC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:pC,column:C1,length:s,return:"",siblings:l}}o(mC,"node");function mye(){return Si}o(mye,"char");function gye(){return Si=nl>0?ep(A1,--nl):0,C1--,Si===10&&(C1=1,pC--),Si}o(gye,"prev");function il(){return Si=nl2||S1(Si)>3?"":" "}o(xye,"whitespace");function bye(t,e){for(;--e&&il()&&!(Si<48||Si>102||Si>57&&Si<65||Si>70&&Si<97););return gC(t,Tb()+(e<6&&th()==32&&il()==32))}o(bye,"escaping");function rF(t){for(;il();)switch(Si){case t:return nl;case 34:case 39:t!==34&&t!==39&&rF(Si);break;case 40:t===41&&rF(t);break;case 92:il();break}return nl}o(rF,"delimiter");function wye(t,e){for(;il()&&t+Si!==57;)if(t+Si===84&&th()===47)break;return"/*"+gC(e,nl-1)+"*"+bb(t===47?t:il())}o(wye,"commenter");function Tye(t){for(;!S1(th());)il();return gC(t,nl)}o(Tye,"identifier");function Cye(t){return vye(vC("",null,null,null,[""],t=yye(t),0,[0],t))}o(Cye,"compile");function vC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",S=i,T=a,E=n,_=w;v;)switch(g=b,b=il()){case 40:if(g!=108&&ep(_,d-1)==58){fye(_+=wb(yC(b),"&","&\f"),"&\f",tF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:_+=yC(b);break;case 9:case 10:case 13:case 32:_+=xye(g);break;case 92:_+=bye(Tb()-1,7);continue;case 47:switch(th()){case 42:case 47:E1(vet(wye(il(),Tb()),e,r,u),u),(S1(g||1)==5||S1(th()||1)==5)&&wo(_)&&Of(_,-1,void 0)!==" "&&(_+=" ");break;default:_+="/"}break;case 123*y:l[h++]=wo(_)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(_=wb(_,/\f/g,"")),m>0&&(wo(_)-d||y===0&&g===47)&&E1(m>32?Eye(_+";",n,r,d-1,u):Eye(wb(_," ","")+";",n,r,d-2,u),u);break;case 59:_+=";";default:if(E1(E=kye(_,e,r,h,f,i,l,w,S=[],T=[],d,a),a),b===123)if(f===0)vC(_,e,E,E,S,a,d,l,T);else switch(p===99&&ep(_,3)===110?100:p){case 100:case 108:case 109:case 115:vC(t,E,E,n&&E1(kye(t,E,E,0,0,i,l,w,i,S=[],d,T),T),i,T,d,l,n?S:T);break;default:vC(_,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=_="",d=s;break;case 58:d=1+wo(_),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&gye()==125)continue}switch(_+=bb(b),b*y){case 38:x=f>0?1:(_+="\f",-1);break;case 44:l[h++]=(wo(_)-1)*x,x=1;break;case 64:th()===45&&(_+=yC(il())),p=th(),f=d=wo(w=_+=Tye(Tb())),b++;break;case 45:g===45&&wo(_)==2&&(y=0)}}return a}o(vC,"parse");function kye(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=dye(m),y=0,v=0,x=0;y0?m[b]+" "+w:wb(w,/&\f/g,m[b])))&&(u[x++]=S);return mC(t,e,r,i===0?hC:l,u,h,f,d)}o(kye,"ruleset");function vet(t,e,r,n){return mC(t,e,r,uC,bb(mye()),Of(t,2,-2),0,n)}o(vet,"comment");function Eye(t,e,r,n,i){return mC(t,e,r,fC,Of(t,0,n),Of(t,n+1,-1),n,i)}o(Eye,"declaration");function xC(t,e){for(var r="",n=0;n{Lye.forEach(t=>{t()}),Lye=[]},"attachFunctions");ut();var Rye=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");Vb();function qye(t){return typeof t>"u"||t===null}o(qye,"isNothing");function bet(t){return typeof t=="object"&&t!==null}o(bet,"isObject");function wet(t){return Array.isArray(t)?t:qye(t)?[]:[t]}o(wet,"toArray");function Tet(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;rl&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}o(nF,"getLine");function iF(t,e){return Wi.repeat(" ",e-t.length)+t}o(iF,"padStart");function Net(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=nF(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=Wi.repeat(" ",e.indent)+iF((t.line-u+1).toString(),f)+" | "+h.str+` +`+l;for(h=nF(t.buffer,n[s],i[s],t.position,d),l+=Wi.repeat(" ",e.indent)+iF((t.line+1).toString(),f)+" | "+h.str+` +`,l+=Wi.repeat("-",e.indent+f+3+h.pos)+`^ +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=nF(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=Wi.repeat(" ",e.indent)+iF((t.line+u+1).toString(),f)+" | "+h.str+` +`;return l.replace(/\n$/,"")}o(Net,"makeSnippet");var Met=Net,Iet=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],Oet=["scalar","sequence","mapping"];function Pet(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}o(Pet,"compileStyleAliases");function Bet(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(Iet.indexOf(r)===-1)throw new $s('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=Pet(e.styleAliases||null),Oet.indexOf(this.kind)===-1)throw new $s('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}o(Bet,"Type$1");var Va=Bet;function Nye(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}o(Nye,"compileList");function Fet(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),att=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function stt(t){return!(t===null||!att.test(t)||t[t.length-1]==="_")}o(stt,"resolveYamlFloat");function ott(t){var e,r;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}o(ott,"constructYamlFloat");var ltt=/^[-+]?[0-9]+e/;function ctt(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Wi.isNegativeZero(t))return"-0.0";return r=t.toString(10),ltt.test(r)?r.replace("e",".e"):r}o(ctt,"representYamlFloat");function utt(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Wi.isNegativeZero(t))}o(utt,"isFloat");var htt=new Va("tag:yaml.org,2002:float",{kind:"scalar",resolve:stt,construct:ott,predicate:utt,represent:ctt,defaultStyle:"lowercase"}),jye=Uet.extend({implicit:[qet,Qet,itt,htt]}),ftt=jye,Kye=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Qye=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function dtt(t){return t===null?!1:Kye.exec(t)!==null||Qye.exec(t)!==null}o(dtt,"resolveYamlTimestamp");function ptt(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=Kye.exec(t),e===null&&(e=Qye.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}o(ptt,"constructYamlTimestamp");function mtt(t){return t.toISOString()}o(mtt,"representYamlTimestamp");var gtt=new Va("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:dtt,construct:ptt,instanceOf:Date,represent:mtt});function ytt(t){return t==="<<"||t===null}o(ytt,"resolveYamlMerge");var vtt=new Va("tag:yaml.org,2002:merge",{kind:"scalar",resolve:ytt}),hF=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function xtt(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=hF;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8===0}o(xtt,"resolveYamlBinary");function btt(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=hF,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}o(btt,"constructYamlBinary");function wtt(t){var e="",r=0,n,i,a=t.length,s=hF;for(n=0;n>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}o(wtt,"representYamlBinary");function Ttt(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}o(Ttt,"isBinary");var ktt=new Va("tag:yaml.org,2002:binary",{kind:"scalar",resolve:xtt,construct:btt,predicate:Ttt,represent:wtt}),Ett=Object.prototype.hasOwnProperty,Ctt=Object.prototype.toString;function Stt(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r>10)+55296,(t-65536&1023)+56320)}o(Htt,"charFromCodepoint");var nve=new Array(256),ive=new Array(256);for(tp=0;tp<256;tp++)nve[tp]=Oye(tp)?1:0,ive[tp]=Oye(tp);var tp;function Ytt(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Zye,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}o(Ytt,"State$1");function ave(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=Met(r),new $s(e,r)}o(ave,"generateError");function Gt(t,e){throw ave(t,e)}o(Gt,"throwError");function TC(t,e){t.onWarning&&t.onWarning.call(null,ave(t,e))}o(TC,"throwWarning");var Pye={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Gt(e,"duplication of %YAML directive"),n.length!==1&&Gt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Gt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Gt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&TC(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Gt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],tve.test(i)||Gt(e,"ill-formed tag handle (first argument) of the TAG directive"),Bf.call(e.tagMap,i)&&Gt(e,'there is a previously declared suffix for "'+i+'" tag handle'),rve.test(a)||Gt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Gt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};function Pf(t,e,r,n){var i,a,s,l;if(e1&&(t.result+=Wi.repeat(` +`,e-1))}o(dF,"writeFoldedLines");function Wtt(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Vs(m)||D1(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Vs(i)||r&&D1(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Vs(i)||r&&D1(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Vs(n))break}else{if(t.position===t.lineStart&&CC(t)||r&&D1(m))break;if(qc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ai(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(Pf(t,a,s,!1),dF(t,t.line-u),a=s=t.position,l=!1),rp(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return Pf(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}o(Wtt,"readPlainScalar");function qtt(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Pf(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else qc(r)?(Pf(t,n,i,!0),dF(t,Ai(t,!1,e)),n=i=t.position):t.position===t.lineStart&&CC(t)?Gt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Gt(t,"unexpected end of the stream within a single quoted scalar")}o(qtt,"readSingleQuotedScalar");function Xtt(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return Pf(t,r,t.position,!0),t.position++,!0;if(l===92){if(Pf(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),qc(l))Ai(t,!1,e);else if(l<256&&nve[l])t.result+=ive[l],t.position++;else if((s=Vtt(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=$tt(l))>=0?a=(a<<4)+s:Gt(t,"expected hexadecimal character");t.result+=Htt(a),t.position++}else Gt(t,"unknown escape sequence");r=n=t.position}else qc(l)?(Pf(t,r,n,!0),dF(t,Ai(t,!1,e)),r=n=t.position):t.position===t.lineStart&&CC(t)?Gt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Gt(t,"unexpected end of the stream within a double quoted scalar")}o(Xtt,"readDoubleQuotedScalar");function jtt(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ai(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Gt(t,"expected the node content, but found ','"):Gt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Vs(h)&&(d=p=!0,t.position++,Ai(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,N1(t,e,bC,!1,!0),v=t.tag,y=t.result,Ai(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ai(t,!0,e),N1(t,e,bC,!1,!0),x=t.result),m?R1(t,l,g,v,y,x,n,i,a):d?l.push(R1(t,null,g,v,y,x,n,i,a)):l.push(y),Ai(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Gt(t,"unexpected end of the stream within a flow collection")}o(jtt,"readFlowCollection");function Ktt(t,e){var r,n,i=aF,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)aF===i?i=d===43?Mye:Btt:Gt(t,"repeat of a chomping mode identifier");else if((f=Utt(d))>=0)f===0?Gt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Gt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(rp(d)){do d=t.input.charCodeAt(++t.position);while(rp(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!qc(d)&&d!==0)}for(;d!==0;){for(fF(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),qc(d)){u++;continue}if(t.lineIndente)&&u!==0)Gt(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),N1(t,e,wC,!0,i)&&(v?g=t.result:y=t.result),v||(R1(t,d,p,m,g,y,s,l,u),m=g=y=null),Ai(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Gt(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&Gt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Gt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}o(N1,"composeNode");function trt(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ai(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Vs(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Gt(t,"directive name must not be less than one character in length");s!==0;){for(;rp(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!qc(s));break}if(qc(s))break;for(r=t.position;s!==0&&!Vs(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&fF(t),Bf.call(Pye,n)?Pye[n](t,n,i):TC(t,'unknown document directive "'+n+'"')}if(Ai(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ai(t,!0,-1)):a&&Gt(t,"directives end mark is expected"),N1(t,t.lineIndent-1,wC,!1,!0),Ai(t,!0,-1),t.checkLineBreaks&&ztt.test(t.input.slice(e,t.position))&&TC(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&CC(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ai(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var n=sve(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i=55296&&r<=56319&&e+1=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}o(kb,"codePointAt");function mve(t){var e=/^\n* /;return e.test(t)}o(mve,"needIndentIndicator");var gve=1,cF=2,yve=3,vve=4,L1=5;function Rrt(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=Lrt(kb(t,0))&&Drt(kb(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=kb(t,u),!Ab(h))return L1;y=y&&$ye(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=kb(t,u),h===Cb)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!Ab(h))return L1;y=y&&$ye(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?gve:a===Sb?L1:cF:r>9&&mve(t)?L1:s?a===Sb?L1:cF:p?vve:yve}o(Rrt,"chooseScalarStyle");function Nrt(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===Sb?'""':"''";if(!t.noCompatMode&&(Trt.indexOf(e)!==-1||krt.test(e)))return t.quotingType===Sb?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return _rt(t,h)}switch(o(u,"testAmbiguity"),Rrt(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case gve:return e;case cF:return"'"+e.replace(/'/g,"''")+"'";case yve:return"|"+Vye(e,t.indent)+Uye(zye(e,a));case vve:return">"+Vye(e,t.indent)+Uye(zye(Mrt(e,s),a));case L1:return'"'+Irt(e)+'"';default:throw new $s("impossible error: invalid scalar style")}}()}o(Nrt,"writeScalar");function Vye(t,e){var r=mve(t)?String(e):"",n=t[t.length-1]===` +`,i=n&&(t[t.length-2]===` +`||t===` +`),a=i?"+":n?"":"-";return r+a+` +`}o(Vye,"blockHeader");function Uye(t){return t[t.length-1]===` +`?t.slice(0,-1):t}o(Uye,"dropEndingNewline");function Mrt(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,Hye(t.slice(0,h),e)}(),i=t[0]===` +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` +`:"")+Hye(u,e),i=a}return n}o(Mrt,"foldString");function Hye(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` +`+t.slice(i,a),i=a+1),s=l;return u+=` +`,t.length-i>e&&s>i?u+=t.slice(i,s)+` +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}o(Hye,"foldLine");function Irt(t){for(var e="",r=0,n,i=0;i=65536?i+=2:i++)r=kb(t,i),n=Ua[r],!n&&Ab(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||Crt(r);return e}o(Irt,"escapeString");function Ort(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&rh(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}o(Ort,"writeFlowSequence");function Yye(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&rh(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=lF(t,e)),t.dump&&Cb===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}o(Yye,"writeBlockSequence");function Prt(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),rh(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}o(Prt,"writeFlowMapping");function Brt(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new $s("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&Cb===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=lF(t,e)),rh(t,e+1,f,!0,d)&&(t.dump&&Cb===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}o(Brt,"writeBlockMapping");function Wye(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}o(Wye,"detectType");function rh(t,e,r,n,i,a,s){t.tag=null,t.dump=r,Wye(t,r,!1)||Wye(t,r,!0);var l=lve.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(Brt(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(Prt(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?Yye(t,e-1,t.dump,i):Yye(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(Ort(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&Nrt(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new $s("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}o(rh,"writeNode");function Frt(t,e){var r=[],n=[],i,a;for(uF(t,r,n),i=0,a=n.length;it.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),Hrt=o(t=>{let{text:e,metadata:r}=wve(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Yrt=o(t=>{let e=Lt.detectInit(t)??{},r=Lt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:EX(t),directive:e}},"processDirectives");function gF(t){let e=Urt(t),r=Hrt(e),n=Yrt(r.text),i=Ts(r.config,n.directive);return t=Rye(n.text),{code:t,title:r.title,config:i}}o(gF,"preprocessDiagram");Z7();Kb();xr();function Tve(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(Tve,"toBase64");var Wrt=5e4,qrt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Xrt="sandbox",jrt="loose",Krt="http://www.w3.org/2000/svg",Qrt="http://www.w3.org/1999/xlink",Zrt="http://www.w3.org/1999/xhtml",Jrt="100%",ent="100%",tnt="border:0;margin:0;",rnt="margin:0",nnt="allow-top-navigation-by-user-activation allow-popups",int='The "iframe" tag is not supported by your browser.',ant=["foreignobject"],snt=["dominant-baseline"];function Ave(t){let e=gF(t);return Q1(),jz(e.config??{}),e}o(Ave,"processAndSetConfigs");async function ont(t,e){k1();try{let{code:r,config:n}=Ave(t);return{diagramType:(await _ve(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(ont,"parse");var kve=o((t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),lnt=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{Qt(l.styles)||s.forEach(u=>{r+=kve(l.id,u,l.styles)}),Qt(l.textStyles)||(r+=kve(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),cnt=o((t,e,r,n)=>{let i=lnt(t,r),a=D$(e,i,t.themeVariables);return xC(Cye(`${n}{${a}}`),Sye)},"createUserStyles"),unt=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=to(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),hnt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":ent,n=Tve(`${t}`);return``},"putIntoIFrame"),Eve=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Krt);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function Cve(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(Cve,"sandboxedIframe");var fnt=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),dnt=o(async function(t,e,r){k1();let n=Ave(e);e=n.code;let i=Or();V.debug(i),e.length>(i?.maxTextSize??Wrt)&&(e=qrt);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let I=$e(p?l:h).node();I&&"remove"in I&&I.remove()},"removeTempElements"),d=$e("body"),p=i.securityLevel===Xrt,m=i.securityLevel===jrt,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=Cve($e(r),s);d=$e(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=$e(r);Eve(d,t,u,`font-family: ${g}`,Qrt)}else{if(fnt(document,t,u,s),p){let k=Cve($e("body"),s);d=$e(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=$e("body");Eve(d,t,u)}let y,v;try{y=await _1.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await _1.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,S=w.firstChild,T=y.renderer.getClasses?.(e,y),E=cnt(i,b,T,a),_=document.createElement("style");_.innerHTML=E,w.insertBefore(_,S);try{await y.renderer.draw(e,t,fx,y)}catch(k){throw i.suppressErrorRendering?f():Ede.draw(e,t,fx),k}let A=d.select(`${h} svg`),L=y.db.getAccTitle?.(),M=y.db.getAccDescription?.();mnt(b,A,L,M),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",Zrt);let N=d.select(h).node().innerHTML;if(V.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),N=unt(N,p,yr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();N=hnt(N,k)}else m||(N=Sve.default.sanitize(N,{ADD_TAGS:ant,ADD_ATTR:snt}));if(Dye(),v)throw v;return f(),{diagramType:b,svg:N,bindFunctions:y.db.bindFunctions}},"render");function pnt(t={}){let e=On({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),Wz(e),e?.theme&&e.theme in Co?e.themeVariables=Co[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=Co.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?n7(e):i7();$1(r.logLevel),k1()}o(pnt,"initialize");var _ve=o((t,e={})=>{let{code:r}=gF(t);return _1.fromText(r,e)},"getDiagramFromText");function mnt(t,e,r,n){Aye(e,t),_ye(e,r,n,e.attr("id"))}o(mnt,"addA11yInfo");var Ff=Object.freeze({render:dnt,parse:ont,getDiagramFromText:_ve,initialize:pnt,getConfig:Or,setConfig:Zb,getSiteConfig:i7,updateSiteConfig:qz,reset:o(()=>{Q1()},"reset"),globalReset:o(()=>{Q1(uh)},"globalReset"),defaultConfig:uh});$1(Or().logLevel);Q1(Or());oT();xr();var gnt=o((t,e,r)=>{V.warn(t),r9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Lve=o(async function(t={querySelector:".mermaid"}){try{await ynt(t)}catch(e){if(r9(e)&&V.error(e.str),nh.parseError&&nh.parseError(e),!t.suppressErrors)throw V.error("Use the suppressErrors option to suppress these errors"),e}},"run"),ynt=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Ff.getConfig();V.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");V.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(V.debug("Start On Load: "+n?.startOnLoad),Ff.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Lt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){V.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=Gb(Lt.entityDecode(s)).trim().replace(//gi,"
    ");let f=Lt.detectInit(s);f&&V.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await Mve(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){gnt(d,l,nh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),Dve=o(function(t){Ff.initialize(t)},"initialize"),vnt=o(async function(t,e,r){V.warn("mermaid.init is deprecated. Please use run instead."),t&&Dve(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await Lve(n)},"init"),xnt=o(async(t,{lazyLoad:e=!0}={})=>{k1(),Ub(...t),e===!1&&await lye()},"registerExternalDiagrams"),Rve=o(function(){if(nh.startOnLoad){let{startOnLoad:t}=Ff.getConfig();t&&nh.run().catch(e=>V.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",Rve,!1)}var bnt=o(function(t){nh.parseError=t},"setParseErrorHandler"),SC=[],yF=!1,Nve=o(async()=>{if(!yF){for(yF=!0;SC.length>0;){let t=SC.shift();if(t)try{await t()}catch(e){V.error("Error executing queue",e)}}yF=!1}},"executeQueue"),wnt=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Ff.parse(t,e).then(l=>{a(l),r(l)},l=>{V.error("Error parsing",l),nh.parseError?.(l),s(l),n(l)})}),"performCall");SC.push(i),Nve().catch(n)}),"parse"),Mve=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Ff.render(t,e,r).then(u=>{s(u),n(u)},u=>{V.error("Error parsing",u),nh.parseError?.(u),l(u),i(u)})}),"performCall");SC.push(a),Nve().catch(i)}),"render"),nh={startOnLoad:!0,mermaidAPI:Ff,parse:wnt,render:Mve,init:vnt,run:Lve,registerExternalDiagrams:xnt,registerLayoutLoaders:gD,initialize:Dve,parseError:void 0,contentLoaded:Rve,setParseErrorHandler:bnt,detectType:lp,registerIconPacks:Fb},Tnt=nh;return $ve(knt);})(); +/*! Check if previously processed */ +/*! + * Wait for document loaded before starting the execution + */ +/*! Bundled license information: + +dompurify/dist/purify.js: + (*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE *) + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) + +cytoscape/dist/cytoscape.esm.mjs: + (*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + *) + (*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + *) + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) + +js-yaml/dist/js-yaml.mjs: + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) +*/ +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default; diff --git a/src/README.md b/src/README.md index c1c804c..ec43325 100644 --- a/src/README.md +++ b/src/README.md @@ -1,5 +1,14 @@ # Introduction +```mermaid + xychart-beta + title "Sales Revenue" + x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec] + y-axis "Revenue (in $)" 4000 --> 11000 + bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] + line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] +``` + Semaphore is a responsive web UI for running Ansible playbooks, Terraform/OpenTofu and Pulumi code. From d59117ed06e715bf1e6578d271716c889e803f29 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 23 Dec 2024 22:37:04 +0500 Subject: [PATCH 031/170] style: ansible lint --- deploy/roles/build/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/roles/build/tasks/main.yml b/deploy/roles/build/tasks/main.yml index 88bb56b..b4fdba2 100644 --- a/deploy/roles/build/tasks/main.yml +++ b/deploy/roles/build/tasks/main.yml @@ -11,7 +11,7 @@ - name: Remove old book - file: + ansible.builtin.file: path: "{{ playbook_dir }}/../book" state: absent From 5a543bc9ea98b93d6bc5f244ccca14684c7d2e7e Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 23 Dec 2024 22:51:26 +0500 Subject: [PATCH 032/170] feat: prepare only required files --- deploy/convert_to_index.sh | 4 +++- deploy/site.yml | 5 ----- src/README.md | 17 +++++++++++------ 3 files changed, 14 insertions(+), 12 deletions(-) delete mode 100644 deploy/site.yml diff --git a/deploy/convert_to_index.sh b/deploy/convert_to_index.sh index 7f79506..9c949e1 100755 --- a/deploy/convert_to_index.sh +++ b/deploy/convert_to_index.sh @@ -37,5 +37,7 @@ find . -type f -name "index.html" | while read file; do sed -i 's/"\.\//"..\//g' "$file" fi - node ../deploy/mermaid-preprocessing/index.js "$file" + if grep -q 'mermaid' "$file"; then + node ../deploy/mermaid-preprocessing/index.js "$file" + fi done diff --git a/deploy/site.yml b/deploy/site.yml deleted file mode 100644 index b4c3938..0000000 --- a/deploy/site.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Deploy the book - hosts: site - roles: - - deploy diff --git a/src/README.md b/src/README.md index ec43325..37f930e 100644 --- a/src/README.md +++ b/src/README.md @@ -1,12 +1,17 @@ # Introduction ```mermaid - xychart-beta - title "Sales Revenue" - x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec] - y-axis "Revenue (in $)" 4000 --> 11000 - bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] - line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] +gitGraph + commit + commit + branch develop + checkout develop + commit + commit + checkout main + merge develop + commit + commit ``` Semaphore is a responsive web UI for running Ansible playbooks, Terraform/OpenTofu and Pulumi code. From 9fe29c7361c2ccc419dc920b526517b8ab64a115 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 23 Dec 2024 22:52:16 +0500 Subject: [PATCH 033/170] feat: prepare only required files --- src/README.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/README.md b/src/README.md index 37f930e..c1c804c 100644 --- a/src/README.md +++ b/src/README.md @@ -1,19 +1,5 @@ # Introduction -```mermaid -gitGraph - commit - commit - branch develop - checkout develop - commit - commit - checkout main - merge develop - commit - commit -``` - Semaphore is a responsive web UI for running Ansible playbooks, Terraform/OpenTofu and Pulumi code. From deb9500bbb86fb82752fa6229f0cdd66fa1d1da1 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 23 Dec 2024 23:18:38 +0500 Subject: [PATCH 034/170] feat: add FAQ --- src/SUMMARY.md | 6 +- src/faq/troubleshooting.md | 123 +++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 src/faq/troubleshooting.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 8035c4c..1da37f0 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -2,7 +2,7 @@ * [Introduction](./README.md) -* [Administration Guide]() +* [Administrator Guide]() * [Installation](./administration-guide/installation.md) * [Manual Installation](./administration-guide/installation\_manually.md) * [Configuration](./administration-guide/configuration.md) @@ -22,7 +22,6 @@ * [API](./administration-guide/api.md) * [CI/CD](./administration-guide/cicd.md) * [Runners](./administration-guide/runners.md) - * [🤯 Troubleshooting](./administration-guide/troubleshooting.md) * [User Guide]() * [Projects](./user-guide/projects.md) @@ -36,3 +35,6 @@ * [Repositories](./user-guide/repositories.md) * [Bitbucket Access Token](./user-guide/repositories/bitbucket_access_token.md) * [Integrations](./user-guide/integrations.md) + +* [FAQ]() + * [🤯 Troubleshooting](./faq/troubleshooting.md) diff --git a/src/faq/troubleshooting.md b/src/faq/troubleshooting.md new file mode 100644 index 0000000..34adc23 --- /dev/null +++ b/src/faq/troubleshooting.md @@ -0,0 +1,123 @@ +# Troubleshooting + +## Renner prints error 404 + +### How to fix + +[Getting 401 error code from Runner](https://github.com/semaphoreui/semaphore/discussions/1873?converting=1) + +--- + +## Gathering Facts issue for localhost + +The issue can occur on Semaphore UI installed via [Snap](https://snapcraft.io/semaphore) or [Docker](https://hub.docker.com/r/semaphoreui/semaphore). + +``` +4:10:16 PM +TASK [Gathering Facts] ********************************************************* +4:10:17 PM +fatal: [localhost]: FAILED! => changed=false +``` + +### Why this happens + +For more information about localhost use in Ansible, read this article [Implicit 'localhost'](https://docs.ansible.com/ansible/latest/inventory/implicit_localhost.html). + +Ansible tries to gather facts locally, but Ansible is located in a limited isolated container which doesn't allow this. + +### How to fix this + +There are two ways: + +1. Disable facts gathering: + +```yaml +- hosts: localhost + gather_facts: False + roles: + - ... +``` + +2. Explicitly set the connection type to **ssh**: +``` +[localhost] +127.0.0.1 ansible_connection=ssh ansible_ssh_user=your_localhost_user +``` +--- +## panic: pq: SSL is not enabled on the server + +This means that your Postgres doesn't work by SSL. + +### How to fix this + +Add option `sslmode=disable` to the configuration file: + +```json + "postgres": { + "host": "localhost", + "user": "pastgres", + "pass": "pwd", + "name": "semaphore", + "options": { + "sslmode": "disable" + } + }, +``` +--- +## fatal: bad numeric config value '0' for 'GIT_TERMINAL_PROMPT': invalid unit + +This means that you are trying to access a repository over HTTPS that requires authentication. + +### How to fix this + +* Go to **Key Store** screen. +* Create a new key `Login with password` type. +* Specify your login for GitHub/BitBucket/etc. +* Specify the password. You can't use your account password for GitHub/BitBucket, you should use a Personal Access Token (PAT) instead of it. Read more [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token). +* After creating the key, go to the **Repositories** screen, find your repository and specify the key. + +--- + +## unable to read LDAP response packet: unexpected EOF + +Most likely, you are trying to connect to the LDAP server using an insecure method, although it expects a secure connection (via TLS). + +### How to fix this + +Enable TLS in your `config.json` file: + +```json +... +"ldap_needtls": true +... +``` + +--- + +## LDAP Result Code 49 "Invalid Credentials" + +You have the wrong password or `binddn`. + +### How to fix this + +Use `ldapwhoami` tool and check if your binddn works: + +```bash +ldapwhoami\ + -H ldap://ldap.com:389\ + -D "CN=/your/ldap_binddn/value/in/config/file"\ + -x\ + -W +``` + +It will ask interactively for the password and should return code **0** and echo out the **DN** as specified. + +You also can read the following articles: +* [ldapsearch: Invalid credentials (49)](https://serverfault.com/q/771549/443463) +* [https://github.com/semaphoreui/semaphore/issues/906](https://github.com/semaphoreui/semaphore/issues/906) + +--- + +## LDAP Result Code 32 "No Such Object" + +Coming soon. From 3fd010b32f711cbaa9b78a94a9971d1892200109 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 24 Dec 2024 00:03:08 +0500 Subject: [PATCH 035/170] feat: enable folding --- book.toml | 4 ++++ src/README.md | 34 ++++++++++++++++++++++++++++++++++ theme/header.css | 5 +++++ 3 files changed, 43 insertions(+) diff --git a/book.toml b/book.toml index 30d15f3..6189efb 100644 --- a/book.toml +++ b/book.toml @@ -20,3 +20,7 @@ site-url = "https://semaphoreui.com" [output.html.search] enable = true limit-results = 10 + +[output.html.fold] +enable = true +level = 1 \ No newline at end of file diff --git a/src/README.md b/src/README.md index c1c804c..e7feeeb 100644 --- a/src/README.md +++ b/src/README.md @@ -1,5 +1,39 @@ # Introduction +```mermaid +gantt + title Project Timeline + dateFormat YYYY-MM-DD + + section Done + Charts :des1, 2024-12-04, 2024-12-21 + Terraform Backend 🅿🆁🅾 :des2, 2024-12-04, 2024-12-21 + + section In Progress + Support SSL :des3, 2024-12-22, 2024-12-22 + + section Todo + Two step authentication :des4, 2024-12-23, 2024-12-25 + Ansible Template: Limits and Tags :des5, 2024-12-27, 2024-12-30 + Custom Templates and import/export templates :des6, 2024-12-29, 2025-01-02 + Pulumi Templates 🅿🆁🅾 :des7, 2024-12-22, 2024-12-28 + Allow multiple Variable Groups for a Template :des8, 2025-01-03, 2025-01-04 + Export logs to external system 🅿🆁🅾 :des9, 2025-01-05, 2025-01-12 + Allow to use user owned SSH key / Shared keys :des10, 2024-12-26, 2024-12-26 + + section Undefined + Ansible Template: Support Ansible Lint :des11, after des10, 1d + LDAP auto login :des12, after des11, 1d + Ansible Template: Task Slicing 🅿🆁🅾 :des13, after des12, 1d + Ansible Inventory: Apps :des14, after des13, 1d + Ansible Inventory: Monitoring 🅿🆁🅾 :des15, after des14, 1d + Ansible Template: Support Mitogen :des16, after des15, 1d + Docker Stack Templates 🅿🆁🅾 :des17, after des16, 1d + Refactor authentication system :des18, after des17, 1d + HashiCorp Vault Support 🅿🆁🅾 :des19, after des18, 1d + Create official Helm Chart :des20, after des19, 1d +``` + Semaphore is a responsive web UI for running Ansible playbooks, Terraform/OpenTofu and Pulumi code. diff --git a/theme/header.css b/theme/header.css index f5306f9..f500354 100644 --- a/theme/header.css +++ b/theme/header.css @@ -8,3 +8,8 @@ .light .menu-icon { opacity: 1; } + + +.chapter > .chapter-item > .toggle { + display: none; +} \ No newline at end of file From 13befd130fddae2e417dd48b0df714e57c974da4 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 24 Dec 2024 10:49:20 +0500 Subject: [PATCH 036/170] feat: layout --- deploy/convert_to_index.sh | 10 ++++ deploy/mermaid-preprocessing/package.json | 1 + src/README.md | 67 ++++++++++++++--------- theme/head.hbs | 31 +++++++++++ theme/header.css | 12 ++++ 5 files changed, 94 insertions(+), 27 deletions(-) diff --git a/deploy/convert_to_index.sh b/deploy/convert_to_index.sh index 9c949e1..e287acc 100755 --- a/deploy/convert_to_index.sh +++ b/deploy/convert_to_index.sh @@ -22,6 +22,8 @@ find . -type f -name "*.html" ! -name "index.html" | while read file; do done +BUILD_VERSION=$RANDOM + find . -type f -name "index.html" | while read file; do if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' 's/\/index\.html/\//g' "$file" @@ -29,15 +31,23 @@ find . -type f -name "index.html" | while read file; do sed -i '' 's/\.html/\//g' "$file" sed -i '' 's/"\.\.\//"..\/..\//g' "$file" sed -i '' 's/"\.\//"..\//g' "$file" + + sed -i '' "s/\.css/.css?v=$BUILD_VERSION/g" "$file" + sed -i '' "s/\.js/.js?v=$BUILD_VERSION/g" "$file" else sed -i 's/\/index\.html/\//g' "$file" sed -i 's/index\.html/\//g' "$file" sed -i 's/\.html/\//g' "$file" sed -i 's/"\.\.\//"..\/..\//g' "$file" sed -i 's/"\.\//"..\//g' "$file" + sed -i "s/\.css/.css?v=$BUILD_VERSION/g" "$file" + sed -i "s/\.js/.js?v=$BUILD_VERSION/g" "$file" fi if grep -q 'mermaid' "$file"; then node ../deploy/mermaid-preprocessing/index.js "$file" fi done + + +sed -i "s/\.css/.css?v=$BUILD_VERSION/g" "book.js" \ No newline at end of file diff --git a/deploy/mermaid-preprocessing/package.json b/deploy/mermaid-preprocessing/package.json index 9da75b9..99e9b44 100644 --- a/deploy/mermaid-preprocessing/package.json +++ b/deploy/mermaid-preprocessing/package.json @@ -2,6 +2,7 @@ "name": "mermaid-preprocessing", "version": "1.0.0", "main": "index.js", + "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/src/README.md b/src/README.md index e7feeeb..16e659a 100644 --- a/src/README.md +++ b/src/README.md @@ -1,5 +1,33 @@ # Introduction +Semaphore is a responsive web UI for running Ansible playbooks, Terraform/OpenTofu and Pulumi code. + + + +Semaphore is written in pure Go and available for Windows, macOS and Linux (x64, ARM, ARM64). Semaphore is an open-source project with concise and high-quality code. + +Semaphore supports the following databases: + +* MySQL +* PostgreSQL +* [BoltDB](https://github.com/etcd-io/bbolt) – embedded key/value database + +With Semaphore you can: + +* [Build, deploy and rollback](./administration-guide/cicd.md) +* Group playbooks to projects +* Manage environments, inventories, repositories and access keys +* Run playbooks from the browser. Responsive UI allows the use of Semaphore on mobile devices +* Run playbooks by schedule +* View detailed logs of any playbook runs, at any time +* Delegate other users the running of playbooks +* Get notifications about playbook runs + +## Development roadmap + +We are developing Semaphore according to the [roadmap](https://github.com/orgs/semaphoreui/projects/11). + + ```mermaid gantt title Project Timeline @@ -34,35 +62,20 @@ gantt Create official Helm Chart :des20, after des19, 1d ``` -Semaphore is a responsive web UI for running Ansible playbooks, Terraform/OpenTofu and Pulumi code. - - - -Semaphore is written in pure Go and available for Windows, macOS and Linux (x64, ARM, ARM64). Semaphore is an open-source project with concise and high-quality code. - -Semaphore supports the following databases: - -* MySQL -* PostgreSQL -* [BoltDB](https://github.com/etcd-io/bbolt) – embedded key/value database - -With Semaphore you can: - -* [Build, deploy and rollback](./administration-guide/cicd.md) -* Group playbooks to projects -* Manage environments, inventories, repositories and access keys -* Run playbooks from the browser. Responsive UI allows the use of Semaphore on mobile devices -* Run playbooks by schedule -* View detailed logs of any playbook runs, at any time -* Delegate other users the running of playbooks -* Get notifications about playbook runs +## Links -Source code: [https://github.com/semaphoreui/semaphore](https://github.com/semaphoreui/semaphore). +* Source code: [https://github.com/semaphoreui/semaphore](https://github.com/semaphoreui/semaphore) +* Issue tracking: [https://github.com/semaphoreui/semaphore/issues](https://github.com/semaphoreui/semaphore/issues) +* Docker: [https://hub.docker.com/r/semaphoreui/semaphore](https://hub.docker.com/r/semaphoreui/semaphore) +* Snap: [https://snapcraft.io/semaphore](https://snapcraft.io/semaphore) +* Contact: [denis@semaphoreui.com](mailto:denis@semaphoreui.com) +* Docker container configurator: -Issue tracking: [https://github.com/semaphoreui/semaphore/issues](https://github.com/semaphoreui/semaphore/issues). + [![](https://img.shields.io/badge/docker_configurator-0050ab?style=for-the-badge&logo=docker)](https://semaphoreui.com/install/docker/) +* Our responsive community: -Docker: [https://hub.docker.com/r/semaphoreui/semaphore](https://hub.docker.com/r/semaphoreui/semaphore). + [![discord](https://img.shields.io/badge/discord_community-510b80?style=for-the-badge&logo=discord)](https://discord.gg/5R6k7hNGcH) -Snap: [https://snapcraft.io/semaphore](https://snapcraft.io/semaphore). +* Every day we add new features, fix bugs, support the community. We need your support: -Contact: [denis@semaphoreui.com](mailto:denis@semaphoreui.com) + [![sponsor](https://img.shields.io/badge/become_a_sponsor-d9c7ff?style=for-the-badge&logo=github-sponsors)](https://github.com/sponsors/semaphoreui) [![ko-fi](https://img.shields.io/badge/buy_me_a_coffee-0ba0e0?style=for-the-badge&logo=kofi)](https://ko-fi.com/fiftin) [![patreon](https://img.shields.io/badge/become_a_patreon-teal?style=for-the-badge&logo=patreon)](https://www.patreon.com/semaphoreui) \ No newline at end of file diff --git a/theme/head.hbs b/theme/head.hbs index f8919e0..deb350d 100644 --- a/theme/head.hbs +++ b/theme/head.hbs @@ -5,4 +5,35 @@ gtag('js', new Date()); gtag('config', 'G-SXDFVHLVBM'); + + + + + + \ No newline at end of file diff --git a/theme/header.css b/theme/header.css index f500354..2dd28dd 100644 --- a/theme/header.css +++ b/theme/header.css @@ -12,4 +12,16 @@ .chapter > .chapter-item > .toggle { display: none; +} + +svg { + border-radius: 6px; +} + +#disqus_thread { + padding-top: 100px; +} + +#disqus_thread > iframe { + color-scheme: normal; } \ No newline at end of file From fe14cee619250dbda43a4809c2366ef079170995 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 24 Dec 2024 11:25:24 +0500 Subject: [PATCH 037/170] feat: breadcrumbs --- deploy/add_breadcrumbs.py | 49 +++++++++++++++++++ src/administration-guide/installation/snap.md | 48 ++++++++++++++++++ theme/index.hbs | 7 +++ 3 files changed, 104 insertions(+) create mode 100644 deploy/add_breadcrumbs.py create mode 100644 src/administration-guide/installation/snap.md create mode 100644 theme/index.hbs diff --git a/deploy/add_breadcrumbs.py b/deploy/add_breadcrumbs.py new file mode 100644 index 0000000..3740404 --- /dev/null +++ b/deploy/add_breadcrumbs.py @@ -0,0 +1,49 @@ +import os +import re + +def generate_breadcrumbs(summary_file): + breadcrumbs = {} + with open(summary_file, "r") as f: + parent = None + for line in f: + match = re.match(r"\s*\* \[(.+)\]\((.*)\)", line) + if not match: + continue + + print(line) + + name, path = match.groups() + + if path == '': + continue + + if parent: + breadcrumbs[path] = breadcrumbs[parent] + [name] + else: + breadcrumbs[path] = [name] + + return breadcrumbs + +def inject_breadcrumbs(breadcrumbs, content_dir): + print(content_dir) + + for path, breadcrumb in breadcrumbs.items(): + file_path = os.path.join(content_dir, path) + + print(file_path) + + if not os.path.exists(file_path): + continue + + with open(file_path, "r+") as f: + content = f.read() + breadcrumb_html = " > ".join( + f'
    {n}' for n, p in zip(breadcrumb, breadcrumb[:-1]) + ) + f.seek(0) + f.write(f"\n" + content) + +summary_file = "../src/SUMMARY.md" +content_dir = "../src" +breadcrumbs = generate_breadcrumbs(summary_file) +inject_breadcrumbs(breadcrumbs, content_dir) \ No newline at end of file diff --git a/src/administration-guide/installation/snap.md b/src/administration-guide/installation/snap.md new file mode 100644 index 0000000..899c0d7 --- /dev/null +++ b/src/administration-guide/installation/snap.md @@ -0,0 +1,48 @@ + + +# Snap + +To install Semaphore via snap, run following command in terminal: + +```bash +sudo snap install semaphore +``` + +Semaphore will be available by URL [https://localhost:3000](https://localhost:3000). + +But to log in, you should create an admin user. Use the following commands: + +```bash +sudo snap stop semaphore + +sudo semaphore user add --admin \ +--login john \ +--name=John \ +--email=john1996@gmail.com \ +--password=12345 + +sudo snap start semaphore +``` + +You can check the status of the Semaphore service using the following command: + +```bash +sudo snap services semaphore +``` + +It should print the following table: + +``` +Service Startup Current Notes +semaphore.semaphored enabled active - +``` + +After installation, you can set up Semaphore via [Snap Configuration](https://snapcraft.io/docs/configuration-in-snaps). Use the following command to see your Semaphore configuration: + +```bash +sudo snap get semaphore +``` + + List of available options you can find in [Configuration options reference](./configuration#configuration-options). + +---- \ No newline at end of file diff --git a/theme/index.hbs b/theme/index.hbs new file mode 100644 index 0000000..d871d02 --- /dev/null +++ b/theme/index.hbs @@ -0,0 +1,7 @@ +{{#if current_page.path}} + +{{/if}} \ No newline at end of file From f7f907a7da2feb2a1881ef20d255935def8d5b6d Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 24 Dec 2024 14:11:47 +0500 Subject: [PATCH 038/170] feat: split --- book.toml | 3 + src/SUMMARY.md | 6 +- src/administration-guide/installation.md | 318 +----------------- .../installation/binary-file.md | 114 +++++++ .../installation/docker.md | 84 +++++ .../installation/package-manager.md | 75 +++++ src/administration-guide/installation/snap.md | 7 +- src/administration-guide/openid/authelia.md | 5 + src/administration-guide/openid/authentik.md | 5 + src/administration-guide/openid/gitea.md | 5 + src/administration-guide/openid/github.md | 5 + src/administration-guide/openid/gitlab.md | 5 + src/administration-guide/openid/google.md | 5 + src/administration-guide/openid/keycloak.md | 5 + src/administration-guide/openid/okta.md | 5 + theme/index.hbs | 7 - 16 files changed, 331 insertions(+), 323 deletions(-) create mode 100644 src/administration-guide/installation/binary-file.md create mode 100644 src/administration-guide/installation/docker.md create mode 100644 src/administration-guide/installation/package-manager.md delete mode 100644 theme/index.hbs diff --git a/book.toml b/book.toml index 6189efb..6556306 100644 --- a/book.toml +++ b/book.toml @@ -10,6 +10,9 @@ title = "Semaphore Docs" [preprocessor.mermaid] command = "mdbook-mermaid" +# [preprocessor.breadcrumbs] +# command = "/home/fiftin/src/semaphore/mdbook-breadcrumbs/target/release/mdbook-breadcrumbs" + [output.html] additional-css = ["theme/tabs.css", "theme/search.css", "theme/content.css", "theme/header.css"] additional-js = ["theme/tabs.js"] # "mermaid.min.js", "mermaid-init.js" diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 1da37f0..1ebc561 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -2,8 +2,12 @@ * [Introduction](./README.md) -* [Administrator Guide]() +* [Admin Guide]() * [Installation](./administration-guide/installation.md) + * [Snap](./administration-guide/installation/snap.md) + * [Package manager](./administration-guide/installation/package-manager.md) + * [Docker](./administration-guide/installation/docker.md) + * [Binary file](./administration-guide/installation/binary-file.md) * [Manual Installation](./administration-guide/installation\_manually.md) * [Configuration](./administration-guide/configuration.md) * [Upgrading](./administration-guide/upgrading.md) diff --git a/src/administration-guide/installation.md b/src/administration-guide/installation.md index 8bf8daf..4fb05be 100644 --- a/src/administration-guide/installation.md +++ b/src/administration-guide/installation.md @@ -2,213 +2,17 @@ You can install Semaphore in 4 ways: -* [Snap](./installation.md#snap) -* [Package manager](./installation.md#package-manager) -* [Docker](./installation.md#docker) -* [Binary file](./installation.md#binary-file) +* [Snap](./installation/snap) +* [Package manager](./installation/package-manager) +* [Docker](./installation/docker) +* [Binary file](./installation/binary-file) See also: -* [Run as service](./installation.md#run-as-a-service) +* [Run as service](./installation/binary-file.md#run-as-a-service) * [Manual installation](./installation_manually.md) ---- -### Snap - -To install Semaphore via snap, run following command in terminal: - -```bash -sudo snap install semaphore -``` - -Semaphore will be available by URL [https://localhost:3000](https://localhost:3000). - -But to log in, you should create an admin user. Use the following commands: - -```bash -sudo snap stop semaphore - -sudo semaphore user add --admin \ ---login john \ ---name=John \ ---email=john1996@gmail.com \ ---password=12345 - -sudo snap start semaphore -``` - -You can check the status of the Semaphore service using the following command: - -```bash -sudo snap services semaphore -``` - -It should print the following table: - -``` -Service Startup Current Notes -semaphore.semaphored enabled active - -``` - -After installation, you can set up Semaphore via [Snap Configuration](https://snapcraft.io/docs/configuration-in-snaps). Use the following command to see your Semaphore configuration: - -```bash -sudo snap get semaphore -``` - - List of available options you can find in [Configuration options reference](./configuration#configuration-options). - ----- - -### Package manager - -
    - Python, Ansible and Git should be installed on your system. -
    - -Look into the [manual installation](./installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! - -Download package file from [Releases page](https://github.com/semaphoreui/semaphore/releases). - - `*.deb` for Debian and Ubuntu, `*.rpm` for CentOS and RedHat. - -Here are several installation commands, depending on the package manager: - - -{{#tabs }} - -{{#tab name="Debian / Ubuntu (x64)"}} -```bash -wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_amd64.deb - -sudo dpkg -i semaphore_2.10.43_linux_amd64.deb -``` -{{#endtab }} - -{{#tab name="Debian / Ubuntu (ARM64)" }} -```bash -wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.deb - -sudo dpkg -i semaphore_2.10.43_linux_arm64.deb -``` -{{#endtab }} - -{{#tab name="CentOS (x64)" }} -```bash -wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_amd64.rpm - -sudo yum install semaphore_2.10.43_linux_amd64.rpm -``` -{{#endtab }} - -{{#tab name="CentOS (ARM64)" }} -```bash -wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.rpm - -sudo yum install semaphore_2.10.43_linux_arm64.rpm -``` -{{#endtab }} - -{{#endtabs }} - -Setup Semaphore by using the following command: - -``` -semaphore setup -``` - -Now you can run Semaphore: - -``` -semaphore server --config=./config.json -``` - -Semaphore will be available via this URL [https://localhost:3000](https://localhost:3000). - ----- - -### Docker - - Create a `docker-compose.yml` file with following content: - -```yaml -services: - # uncomment this section and comment out the mysql section to use postgres instead of mysql - #postgres: - #restart: unless-stopped - #image: postgres:14 - #hostname: postgres - #volumes: - # - semaphore-postgres:/var/lib/postgresql/data - #environment: - # POSTGRES_USER: semaphore - # POSTGRES_PASSWORD: semaphore - # POSTGRES_DB: semaphore - # if you wish to use postgres, comment the mysql service section below - mysql: - restart: unless-stopped - image: mysql:8.0 - hostname: mysql - volumes: - - semaphore-mysql:/var/lib/mysql - environment: - MYSQL_RANDOM_ROOT_PASSWORD: 'yes' - MYSQL_DATABASE: semaphore - MYSQL_USER: semaphore - MYSQL_PASSWORD: semaphore - semaphore: - restart: unless-stopped - ports: - - 3000:3000 - image: semaphoreui/semaphore:latest - environment: - SEMAPHORE_DB_USER: semaphore - SEMAPHORE_DB_PASS: semaphore - SEMAPHORE_DB_HOST: mysql # for postgres, change to: postgres - SEMAPHORE_DB_PORT: 3306 # change to 5432 for postgres - SEMAPHORE_DB_DIALECT: mysql # for postgres, change to: postgres - SEMAPHORE_DB: semaphore - SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/ - SEMAPHORE_ADMIN_PASSWORD: changeme - SEMAPHORE_ADMIN_NAME: admin - SEMAPHORE_ADMIN_EMAIL: admin@localhost - SEMAPHORE_ADMIN: admin - SEMAPHORE_ACCESS_KEY_ENCRYPTION: gs72mPntFATGJs9qK0pQ0rKtfidlexiMjYCH9gWKhTU= - SEMAPHORE_LDAP_ACTIVATED: 'no' # if you wish to use ldap, set to: 'yes' - SEMAPHORE_LDAP_HOST: dc01.local.example.com - SEMAPHORE_LDAP_PORT: '636' - SEMAPHORE_LDAP_NEEDTLS: 'yes' - SEMAPHORE_LDAP_DN_BIND: 'uid=bind_user,cn=users,cn=accounts,dc=local,dc=shiftsystems,dc=net' - SEMAPHORE_LDAP_PASSWORD: 'ldap_bind_account_password' - SEMAPHORE_LDAP_DN_SEARCH: 'dc=local,dc=example,dc=com' - SEMAPHORE_LDAP_SEARCH_FILTER: "(\u0026(uid=%s)(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=local,dc=example,dc=com))" - TZ: UTC - depends_on: - - mysql # for postgres, change to: postgres -volumes: - semaphore-mysql: # to use postgres, switch to: semaphore-postgres -``` - -You must specify following confidential variables: - -* `MYSQL_PASSWORD` and `SEMAPHORE_DB_PASS` — password for the MySQL user. -* `SEMAPHORE_ADMIN_PASSWORD` — password for the Semaphore's admin user. -* `SEMAPHORE_ACCESS_KEY_ENCRYPTION` — key for encrypting access keys in database. It must be generated by using the following command: `head -c32 /dev/urandom | base64`. - - -Run the following command to start Semaphore with configured database (MySQL or Postgres): - -```bash -docker-compose up -``` - - Semaphore will be available via the following URL [http://localhost:3000](http://localhost:3000). - -For more information about the Docker Compose, see the [Docker Compose reference](https://docs.docker.com/compose/). ### Installing Additional Python Packages @@ -222,115 +26,3 @@ volumes: The packages specified in the requirements file will be installed when the container starts up. For more information about Python requirements files, see the [Pip Requirements File Format reference](https://pip.pypa.io/en/stable/reference/requirements-file-format/) - ----- - -### Binary file - -
    - Python, Ansible and Git should be installed on your system. -
    - -Look into the [manual installation](installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! - -Download the `*.tar.gz` for your platform from [Releases page](https://github.com/semaphoreui/semaphore/releases). Unpack it and setup Semaphore using the following commands: - -{{#tabs }} -{{#tab name="Linux (x64)" }} -``` -download/v2.10.43/semaphore_2.10.43_linux_amd64.tar.gz - -tar xf semaphore_2.10.43_linux_amd64.tar.gz - -./semaphore setup -``` -{{#endtab }} - -{{#tab name="Linux (ARM64)" }} -``` -wget https://github.com/semaphoreui/semaphore/releases/\ - -download/v2.10.43/semaphore_2.10.43_linux_arm64.tar.gz - -tar xf semaphore_2.10.43_linux_arm64.tar.gz - -./semaphore setup -``` -{{#endtab }} - -{{#tab name="Windows (x64)" }} -``` -Invoke-WebRequest ` --Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.10.43/semaphore_2.10.43_windows_amd64.zip") ` - --OutFile semaphore.zip - -Expand-Archive -Path semaphore.zip -DestinationPath ./ - -./semaphore setup -``` -{{#endtab }} -{{#endtabs }} - -Now you can run Semaphore: - -``` -./semaphore server --config=./config.json -``` - -Semaphore will be available via the following URL [https://localhost:3000](https://localhost:3000). - ----- - -### Run as a service - -For more detailed information — look into the [extended Systemd service documentation](./installation_manually.md#extended-systemd-service). - -If you installed Semaphore via a package manager, or by downloading a binary file, you should create the Semaphore service manually. - -Create the systemd service file: - -
    - Replace /path/to/semaphore and /path/to/config.json to your semaphore and config file path. -
    - -```bash -sudo cat > /etc/systemd/system/semaphore.service < + Installation + → Binary file + + +# Binary file + +
    + Python, Ansible and Git should be installed on your system. +
    + +Look into the [manual installation](installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! + +Download the `*.tar.gz` for your platform from [Releases page](https://github.com/semaphoreui/semaphore/releases). Unpack it and setup Semaphore using the following commands: + +{{#tabs }} +{{#tab name="Linux (x64)" }} +``` +download/v2.10.43/semaphore_2.10.43_linux_amd64.tar.gz + +tar xf semaphore_2.10.43_linux_amd64.tar.gz + +./semaphore setup +``` +{{#endtab }} + +{{#tab name="Linux (ARM64)" }} +``` +wget https://github.com/semaphoreui/semaphore/releases/\ + +download/v2.10.43/semaphore_2.10.43_linux_arm64.tar.gz + +tar xf semaphore_2.10.43_linux_arm64.tar.gz + +./semaphore setup +``` +{{#endtab }} + +{{#tab name="Windows (x64)" }} +``` +Invoke-WebRequest ` +-Uri ("https://github.com/semaphoreui/semaphore/releases/" + + "download/v2.10.43/semaphore_2.10.43_windows_amd64.zip") ` + +-OutFile semaphore.zip + +Expand-Archive -Path semaphore.zip -DestinationPath ./ + +./semaphore setup +``` +{{#endtab }} +{{#endtabs }} + +Now you can run Semaphore: + +``` +./semaphore server --config=./config.json +``` + +Semaphore will be available via the following URL [https://localhost:3000](https://localhost:3000). + +---- + +### Run as a service + +For more detailed information — look into the [extended Systemd service documentation](./installation_manually.md#extended-systemd-service). + +If you installed Semaphore via a package manager, or by downloading a binary file, you should create the Semaphore service manually. + +Create the systemd service file: + +
    + Replace /path/to/semaphore and /path/to/config.json to your semaphore and config file path. +
    + +```bash +sudo cat > /etc/systemd/system/semaphore.service < + Installation + → Docker + + +# Docker + + Create a `docker-compose.yml` file with following content: + +```yaml +services: + # uncomment this section and comment out the mysql section to use postgres instead of mysql + #postgres: + #restart: unless-stopped + #image: postgres:14 + #hostname: postgres + #volumes: + # - semaphore-postgres:/var/lib/postgresql/data + #environment: + # POSTGRES_USER: semaphore + # POSTGRES_PASSWORD: semaphore + # POSTGRES_DB: semaphore + # if you wish to use postgres, comment the mysql service section below + mysql: + restart: unless-stopped + image: mysql:8.0 + hostname: mysql + volumes: + - semaphore-mysql:/var/lib/mysql + environment: + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' + MYSQL_DATABASE: semaphore + MYSQL_USER: semaphore + MYSQL_PASSWORD: semaphore + semaphore: + restart: unless-stopped + ports: + - 3000:3000 + image: semaphoreui/semaphore:latest + environment: + SEMAPHORE_DB_USER: semaphore + SEMAPHORE_DB_PASS: semaphore + SEMAPHORE_DB_HOST: mysql # for postgres, change to: postgres + SEMAPHORE_DB_PORT: 3306 # change to 5432 for postgres + SEMAPHORE_DB_DIALECT: mysql # for postgres, change to: postgres + SEMAPHORE_DB: semaphore + SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/ + SEMAPHORE_ADMIN_PASSWORD: changeme + SEMAPHORE_ADMIN_NAME: admin + SEMAPHORE_ADMIN_EMAIL: admin@localhost + SEMAPHORE_ADMIN: admin + SEMAPHORE_ACCESS_KEY_ENCRYPTION: gs72mPntFATGJs9qK0pQ0rKtfidlexiMjYCH9gWKhTU= + SEMAPHORE_LDAP_ACTIVATED: 'no' # if you wish to use ldap, set to: 'yes' + SEMAPHORE_LDAP_HOST: dc01.local.example.com + SEMAPHORE_LDAP_PORT: '636' + SEMAPHORE_LDAP_NEEDTLS: 'yes' + SEMAPHORE_LDAP_DN_BIND: 'uid=bind_user,cn=users,cn=accounts,dc=local,dc=shiftsystems,dc=net' + SEMAPHORE_LDAP_PASSWORD: 'ldap_bind_account_password' + SEMAPHORE_LDAP_DN_SEARCH: 'dc=local,dc=example,dc=com' + SEMAPHORE_LDAP_SEARCH_FILTER: "(\u0026(uid=%s)(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=local,dc=example,dc=com))" + TZ: UTC + depends_on: + - mysql # for postgres, change to: postgres +volumes: + semaphore-mysql: # to use postgres, switch to: semaphore-postgres +``` + +You must specify following confidential variables: + +* `MYSQL_PASSWORD` and `SEMAPHORE_DB_PASS` — password for the MySQL user. +* `SEMAPHORE_ADMIN_PASSWORD` — password for the Semaphore's admin user. +* `SEMAPHORE_ACCESS_KEY_ENCRYPTION` — key for encrypting access keys in database. It must be generated by using the following command: `head -c32 /dev/urandom | base64`. + + +Run the following command to start Semaphore with configured database (MySQL or Postgres): + +```bash +docker-compose up +``` + + Semaphore will be available via the following URL [http://localhost:3000](http://localhost:3000). + +For more information about the Docker Compose, see the [Docker Compose reference](https://docs.docker.com/compose/). diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md new file mode 100644 index 0000000..84a9b8d --- /dev/null +++ b/src/administration-guide/installation/package-manager.md @@ -0,0 +1,75 @@ + + +# Package manager + +
    + Python, Ansible and Git should be installed on your system. +
    + +Look into the [manual installation](./installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! + +Download package file from [Releases page](https://github.com/semaphoreui/semaphore/releases). + + `*.deb` for Debian and Ubuntu, `*.rpm` for CentOS and RedHat. + +Here are several installation commands, depending on the package manager: + + +{{#tabs }} + +{{#tab name="Debian / Ubuntu (x64)"}} +```bash +wget https://github.com/semaphoreui/semaphore/releases/\ +download/v2.10.43/semaphore_2.10.43_linux_amd64.deb + +sudo dpkg -i semaphore_2.10.43_linux_amd64.deb +``` +{{#endtab }} + +{{#tab name="Debian / Ubuntu (ARM64)" }} +```bash +wget https://github.com/semaphoreui/semaphore/releases/\ +download/v2.10.43/semaphore_2.10.43_linux_arm64.deb + +sudo dpkg -i semaphore_2.10.43_linux_arm64.deb +``` +{{#endtab }} + +{{#tab name="CentOS (x64)" }} +```bash +wget https://github.com/semaphoreui/semaphore/releases/\ +download/v2.10.43/semaphore_2.10.43_linux_amd64.rpm + +sudo yum install semaphore_2.10.43_linux_amd64.rpm +``` +{{#endtab }} + +{{#tab name="CentOS (ARM64)" }} +```bash +wget https://github.com/semaphoreui/semaphore/releases/\ +download/v2.10.43/semaphore_2.10.43_linux_arm64.rpm + +sudo yum install semaphore_2.10.43_linux_arm64.rpm +``` +{{#endtab }} + +{{#endtabs }} + +Setup Semaphore by using the following command: + +``` +semaphore setup +``` + +Now you can run Semaphore: + +``` +semaphore server --config=./config.json +``` + +Semaphore will be available via this URL [https://localhost:3000](https://localhost:3000). + +---- \ No newline at end of file diff --git a/src/administration-guide/installation/snap.md b/src/administration-guide/installation/snap.md index 899c0d7..f56c3e4 100644 --- a/src/administration-guide/installation/snap.md +++ b/src/administration-guide/installation/snap.md @@ -1,5 +1,8 @@ - - + + # Snap To install Semaphore via snap, run following command in terminal: diff --git a/src/administration-guide/openid/authelia.md b/src/administration-guide/openid/authelia.md index 0c8c2f0..9893c10 100644 --- a/src/administration-guide/openid/authelia.md +++ b/src/administration-guide/openid/authelia.md @@ -1,3 +1,8 @@ + + # Authelia config Authelia `config.yaml`: diff --git a/src/administration-guide/openid/authentik.md b/src/administration-guide/openid/authentik.md index e4995be..5f3b888 100644 --- a/src/administration-guide/openid/authentik.md +++ b/src/administration-guide/openid/authentik.md @@ -1,3 +1,8 @@ + + # Authentik config `config.json`: diff --git a/src/administration-guide/openid/gitea.md b/src/administration-guide/openid/gitea.md index 8cc4cc6..cbf2517 100644 --- a/src/administration-guide/openid/gitea.md +++ b/src/administration-guide/openid/gitea.md @@ -1,3 +1,8 @@ + + # Gitea config `config.json`: diff --git a/src/administration-guide/openid/github.md b/src/administration-guide/openid/github.md index 7cf5eb0..0d05d8b 100644 --- a/src/administration-guide/openid/github.md +++ b/src/administration-guide/openid/github.md @@ -1,3 +1,8 @@ + + # GitHub config `config.json`: diff --git a/src/administration-guide/openid/gitlab.md b/src/administration-guide/openid/gitlab.md index 4f27bd6..d99bd78 100644 --- a/src/administration-guide/openid/gitlab.md +++ b/src/administration-guide/openid/gitlab.md @@ -1,3 +1,8 @@ + + # GitLab config `config.json`: diff --git a/src/administration-guide/openid/google.md b/src/administration-guide/openid/google.md index 5ea5fc9..85d426d 100644 --- a/src/administration-guide/openid/google.md +++ b/src/administration-guide/openid/google.md @@ -1,3 +1,8 @@ + + # Google config `config.json`: diff --git a/src/administration-guide/openid/keycloak.md b/src/administration-guide/openid/keycloak.md index 96ef312..203f7f0 100644 --- a/src/administration-guide/openid/keycloak.md +++ b/src/administration-guide/openid/keycloak.md @@ -1,3 +1,8 @@ + + # Keycloak config `config.json`: diff --git a/src/administration-guide/openid/okta.md b/src/administration-guide/openid/okta.md index b65859b..2ec89f8 100644 --- a/src/administration-guide/openid/okta.md +++ b/src/administration-guide/openid/okta.md @@ -1,3 +1,8 @@ + + # Okta config `config.json`: diff --git a/theme/index.hbs b/theme/index.hbs deleted file mode 100644 index d871d02..0000000 --- a/theme/index.hbs +++ /dev/null @@ -1,7 +0,0 @@ -{{#if current_page.path}} - -{{/if}} \ No newline at end of file From c2a29c4bb85384ae128fe276de59f0c0ec1746a4 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 24 Dec 2024 14:31:31 +0500 Subject: [PATCH 039/170] refactor: split docs --- src/SUMMARY.md | 8 ++++++-- src/administration-guide/cli.md | 18 ----------------- src/administration-guide/cli/users.md | 22 +++++++++++++++++++++ src/administration-guide/openid/azure.md | 5 +++++ src/user-guide/task-templates/ansible.md | 18 +++++++++++++++++ src/user-guide/task-templates/bash.md | 7 ++++++- src/user-guide/task-templates/powershell.md | 0 src/user-guide/task-templates/pulumi.md | 0 8 files changed, 57 insertions(+), 21 deletions(-) create mode 100644 src/administration-guide/cli/users.md create mode 100644 src/user-guide/task-templates/ansible.md create mode 100644 src/user-guide/task-templates/powershell.md create mode 100644 src/user-guide/task-templates/pulumi.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 1ebc561..78140f0 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -13,6 +13,7 @@ * [Upgrading](./administration-guide/upgrading.md) * [Security](./administration-guide/security.md) * [CLI](./administration-guide/cli.md) + * [User management](./administration-guide/cli/users.md) * [LDAP](./administration-guide/ldap.md) * [OpenID](./administration-guide/openid.md) * [GitHub config](./administration-guide/openid/github.md) @@ -30,8 +31,11 @@ * [User Guide]() * [Projects](./user-guide/projects.md) * [Task Templates](./user-guide/task-templates/README.md) - * [Terraform Template](./user-guide/task-templates/terraform.md) - * [Bash Template](./user-guide/task-templates/bash.md) + * [Ansible](./user-guide/task-templates/ansible.md) + * [Terraform](./user-guide/task-templates/terraform.md) + * [Bash](./user-guide/task-templates/bash.md) + * [PowerShell](./user-guide/task-templates/powershell.md) + * [Pulumi](./user-guide/task-templates/pulumi.md) * [Tasks](./user-guide/tasks.md) * [Key Store](./user-guide/key-store.md) * [Inventory](./user-guide/inventory.md) diff --git a/src/administration-guide/cli.md b/src/administration-guide/cli.md index 4afe3c2..f336629 100644 --- a/src/administration-guide/cli.md +++ b/src/administration-guide/cli.md @@ -23,24 +23,6 @@ Use this option for first time configuration. semaphore setup ``` -### User management - -Using CLI you can add, remove or change user. - -``` -semaphore user --help -``` - -#### How to add admin user -``` -semaphore user add --admin --login newAdmin --email new-admin@example.com --name "New Admin" --password "New$Password" -``` - -#### How to change user password -``` -semaphore user change-by-login --login myAdmin --password "New$Password" -``` - ### Vault management You can reencrypt your secrets in database with using following command: diff --git a/src/administration-guide/cli/users.md b/src/administration-guide/cli/users.md new file mode 100644 index 0000000..e0b7920 --- /dev/null +++ b/src/administration-guide/cli/users.md @@ -0,0 +1,22 @@ + + +# User management + +Using CLI you can add, remove or change user. + +``` +semaphore user --help +``` + +## How to add admin user +``` +semaphore user add --admin --login newAdmin --email new-admin@example.com --name "New Admin" --password "New$Password" +``` + +## How to change user password +``` +semaphore user change-by-login --login myAdmin --password "New$Password" +``` diff --git a/src/administration-guide/openid/azure.md b/src/administration-guide/openid/azure.md index d66d35c..dd42542 100644 --- a/src/administration-guide/openid/azure.md +++ b/src/administration-guide/openid/azure.md @@ -1,3 +1,8 @@ + + # Azure config `config.json`: diff --git a/src/user-guide/task-templates/ansible.md b/src/user-guide/task-templates/ansible.md new file mode 100644 index 0000000..25964a2 --- /dev/null +++ b/src/user-guide/task-templates/ansible.md @@ -0,0 +1,18 @@ + + +# Terraform + +Using Semaphore UI you can run Terraform code. To do this, you need to create a **Terraform Code Template**. + +1. Go go Task Templates section and click the **New Template** button. + +![](<../../.gitbook/assets/terraform_1.webp>) + +2. Set up the template and click the **Create** button. + +![](<../../.gitbook/assets/terraform_2.webp>) + +3. You can now run your Terraform code. \ No newline at end of file diff --git a/src/user-guide/task-templates/bash.md b/src/user-guide/task-templates/bash.md index 6c0fc90..05e4475 100644 --- a/src/user-guide/task-templates/bash.md +++ b/src/user-guide/task-templates/bash.md @@ -1,4 +1,9 @@ -# Bash Template + + +# Bash Using Semaphore UI you can run Bash scripts. To do this, you need to create a **Bash Script Template**. diff --git a/src/user-guide/task-templates/powershell.md b/src/user-guide/task-templates/powershell.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/task-templates/pulumi.md b/src/user-guide/task-templates/pulumi.md new file mode 100644 index 0000000..e69de29 From b6ee7c6b012c0dfa8620307f1943fbfa87dd29b8 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 24 Dec 2024 15:12:04 +0500 Subject: [PATCH 040/170] feat(cli): commands --- deploy/convert_to_index.sh | 8 ++-- src/SUMMARY.md | 2 + src/administration-guide/cli.md | 54 +++++++++++++++++++------ src/administration-guide/cli/runners.md | 6 +++ src/administration-guide/cli/users.md | 6 +-- src/administration-guide/cli/vaults.md | 14 +++++++ 6 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 src/administration-guide/cli/runners.md create mode 100644 src/administration-guide/cli/vaults.md diff --git a/deploy/convert_to_index.sh b/deploy/convert_to_index.sh index e287acc..ed2dee1 100755 --- a/deploy/convert_to_index.sh +++ b/deploy/convert_to_index.sh @@ -32,16 +32,16 @@ find . -type f -name "index.html" | while read file; do sed -i '' 's/"\.\.\//"..\/..\//g' "$file" sed -i '' 's/"\.\//"..\//g' "$file" - sed -i '' "s/\.css/.css?v=$BUILD_VERSION/g" "$file" - sed -i '' "s/\.js/.js?v=$BUILD_VERSION/g" "$file" + sed -i '' "s/\.css\"/.css\"?v=$BUILD_VERSION\"/g" "$file" + sed -i '' "s/\.js\"/.js\"?v=$BUILD_VERSION\"/g" "$file" else sed -i 's/\/index\.html/\//g' "$file" sed -i 's/index\.html/\//g' "$file" sed -i 's/\.html/\//g' "$file" sed -i 's/"\.\.\//"..\/..\//g' "$file" sed -i 's/"\.\//"..\//g' "$file" - sed -i "s/\.css/.css?v=$BUILD_VERSION/g" "$file" - sed -i "s/\.js/.js?v=$BUILD_VERSION/g" "$file" + sed -i "s/\.css\"/.css?v=$BUILD_VERSION\"/g" "$file" + sed -i "s/\.js\"/.js?v=$BUILD_VERSION\"/g" "$file" fi if grep -q 'mermaid' "$file"; then diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 78140f0..31d693d 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -14,6 +14,8 @@ * [Security](./administration-guide/security.md) * [CLI](./administration-guide/cli.md) * [User management](./administration-guide/cli/users.md) + * [Vault management](./administration-guide/cli/vaults.md) + * [Runner management](./administration-guide/cli/runners.md) * [LDAP](./administration-guide/ldap.md) * [OpenID](./administration-guide/openid.md) * [GitHub config](./administration-guide/openid/github.md) diff --git a/src/administration-guide/cli.md b/src/administration-guide/cli.md index f336629..fbed29f 100644 --- a/src/administration-guide/cli.md +++ b/src/administration-guide/cli.md @@ -1,35 +1,63 @@ # CLI -
    - For Semaphore installed via Snap you should use `sudo` for using CLI. This is completely safe because Semaphore works in a strict mode. -
    + -### Version +## Common config options + +| Option | Description | +|----------------------|-------------------------------------------| +|`--config config.json`| Path to the configuration file. | +|`--no-cofnig` | Do not use any configuration file. Only environment variable will be used. | +|`--log-level ERROR` | `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`, `PANIC` | + +## Version + +Print current version. ```bash semaphore version ``` -### Interactive setup -Use this option for first time configuration. +## Help +Print list of supported commands. -
    - Do not use this command for Semaphore installed via Snap. Use Snap Configuration instead. -
    +```bash +semaphore help +``` + +## Database migration + +Update database schema to latest version. + +``` +semaphore migrate +``` + +## Interactive setup + +Use this option for first time configuration. ``` semaphore setup ``` -### Vault management +## Server mode -You can reencrypt your secrets in database with using following command: +Start the server. ``` -semaphore vault rekey --old-key +semaphore server ``` -Your data will be decryped using `` and will be encrypted using option `access_key_encryption` from configuration key. +## Runner mode + +Start the runner. +``` +semaphore runner +``` diff --git a/src/administration-guide/cli/runners.md b/src/administration-guide/cli/runners.md new file mode 100644 index 0000000..b6264ee --- /dev/null +++ b/src/administration-guide/cli/runners.md @@ -0,0 +1,6 @@ + + +# Runners diff --git a/src/administration-guide/cli/users.md b/src/administration-guide/cli/users.md index e0b7920..b42f6f1 100644 --- a/src/administration-guide/cli/users.md +++ b/src/administration-guide/cli/users.md @@ -1,9 +1,9 @@ -# User management +# Users Using CLI you can add, remove or change user. diff --git a/src/administration-guide/cli/vaults.md b/src/administration-guide/cli/vaults.md new file mode 100644 index 0000000..8e0e895 --- /dev/null +++ b/src/administration-guide/cli/vaults.md @@ -0,0 +1,14 @@ + + +### Vaults + +You can reencrypt your secrets in database with using following command: + +``` +semaphore vault rekey --old-key +``` + +Your data will be decryped using `` and will be encrypted using option `access_key_encryption` from configuration key. From 60453826279a325acf890ee93c1338e07d05c314 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 24 Dec 2024 18:13:44 +0500 Subject: [PATCH 041/170] feat: add pages --- src/SUMMARY.md | 32 ++++++++--- src/administration-guide/cli/users.md | 2 + src/administration-guide/installation.md | 2 +- .../installation/binary-file.md | 2 +- .../installation/package-manager.md | 2 +- src/administration-guide/installation/snap.md | 2 +- src/administration-guide/security/apache.md | 1 + src/administration-guide/security/nginx.md | 54 +++++++++++++++++++ src/user-guide/admin/README.md | 1 + src/user-guide/admin/runners.md | 0 src/user-guide/admin/subscription.md | 1 + src/user-guide/admin/tasks.md | 0 src/user-guide/admin/users.md | 0 src/user-guide/projects/activity.md | 0 src/user-guide/projects/history.md | 0 src/user-guide/projects/runners.md | 0 src/user-guide/projects/settings.md | 0 src/user-guide/schedule.md | 0 src/user-guide/schedules.md | 1 + src/user-guide/task-templates/ansible.md | 6 +-- src/user-guide/task-templates/bash.md | 6 +-- src/user-guide/task-templates/powershell.md | 6 +++ src/user-guide/task-templates/pulumi.md | 6 +++ src/user-guide/task-templates/python.md | 6 +++ .../{terraform.md => terraform/README.md} | 7 ++- .../task-templates/terraform/states.md | 7 +++ .../task-templates/terraform/workspaces.md | 7 +++ src/user-guide/team.md | 0 28 files changed, 132 insertions(+), 19 deletions(-) create mode 100644 src/administration-guide/security/apache.md create mode 100644 src/administration-guide/security/nginx.md create mode 100644 src/user-guide/admin/README.md create mode 100644 src/user-guide/admin/runners.md create mode 100644 src/user-guide/admin/subscription.md create mode 100644 src/user-guide/admin/tasks.md create mode 100644 src/user-guide/admin/users.md create mode 100644 src/user-guide/projects/activity.md create mode 100644 src/user-guide/projects/history.md create mode 100644 src/user-guide/projects/runners.md create mode 100644 src/user-guide/projects/settings.md create mode 100644 src/user-guide/schedule.md create mode 100644 src/user-guide/schedules.md create mode 100644 src/user-guide/task-templates/python.md rename src/user-guide/task-templates/{terraform.md => terraform/README.md} (72%) create mode 100644 src/user-guide/task-templates/terraform/states.md create mode 100644 src/user-guide/task-templates/terraform/workspaces.md create mode 100644 src/user-guide/team.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 31d693d..5ae567f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -2,9 +2,9 @@ * [Introduction](./README.md) -* [Admin Guide]() +* [Administration Guide]() * [Installation](./administration-guide/installation.md) - * [Snap](./administration-guide/installation/snap.md) + * [Snap (deprecated)](./administration-guide/installation/snap.md) * [Package manager](./administration-guide/installation/package-manager.md) * [Docker](./administration-guide/installation/docker.md) * [Binary file](./administration-guide/installation/binary-file.md) @@ -12,10 +12,12 @@ * [Configuration](./administration-guide/configuration.md) * [Upgrading](./administration-guide/upgrading.md) * [Security](./administration-guide/security.md) + * [NGINX config](./administration-guide/security/nginx.md) + * [Apache config](./administration-guide/security/apache.md) * [CLI](./administration-guide/cli.md) - * [User management](./administration-guide/cli/users.md) - * [Vault management](./administration-guide/cli/vaults.md) - * [Runner management](./administration-guide/cli/runners.md) + * [Users](./administration-guide/cli/users.md) + * [Vaults](./administration-guide/cli/vaults.md) + * [Runners](./administration-guide/cli/runners.md) * [LDAP](./administration-guide/ldap.md) * [OpenID](./administration-guide/openid.md) * [GitHub config](./administration-guide/openid/github.md) @@ -32,19 +34,33 @@ * [User Guide]() * [Projects](./user-guide/projects.md) + * [History](./user-guide/projects/history.md) + * [Activity](./user-guide/projects/activity.md) + * [Settings](./user-guide/projects/settings.md) + * [Runners 🅿🆁🅾](./user-guide/projects/runners.md) * [Task Templates](./user-guide/task-templates/README.md) * [Ansible](./user-guide/task-templates/ansible.md) - * [Terraform](./user-guide/task-templates/terraform.md) - * [Bash](./user-guide/task-templates/bash.md) + * [Terraform/OpenTofu](./user-guide/task-templates/terraform/README.md) + * [Workspaces](./user-guide/task-templates/terraform/workspaces.md) + * [States 🅿🆁🅾](./user-guide/task-templates/terraform/states.md) + * [Shell/Bash scripts](./user-guide/task-templates/bash.md) * [PowerShell](./user-guide/task-templates/powershell.md) * [Pulumi](./user-guide/task-templates/pulumi.md) + * [Python](./user-guide/task-templates/python.md) * [Tasks](./user-guide/tasks.md) + * [Schedules](./user-guide/schedules.md) * [Key Store](./user-guide/key-store.md) * [Inventory](./user-guide/inventory.md) - * [Environment](./user-guide/environment.md) + * [Variable Groups](./user-guide/environment.md) * [Repositories](./user-guide/repositories.md) * [Bitbucket Access Token](./user-guide/repositories/bitbucket_access_token.md) * [Integrations](./user-guide/integrations.md) + * [Team](./user-guide/team.md) + * [Admin](./user-guide/admin/README.md) + * [Users](./user-guide/admin/users.md) + * [Runners](./user-guide/admin/runners.md) + * [Active Tasks](./user-guide/admin/tasks.md) + * [Subscription 🅿🆁🅾](./user-guide/admin/subscription.md) * [FAQ]() * [🤯 Troubleshooting](./faq/troubleshooting.md) diff --git a/src/administration-guide/cli/users.md b/src/administration-guide/cli/users.md index b42f6f1..abe3d64 100644 --- a/src/administration-guide/cli/users.md +++ b/src/administration-guide/cli/users.md @@ -12,11 +12,13 @@ semaphore user --help ``` ## How to add admin user + ``` semaphore user add --admin --login newAdmin --email new-admin@example.com --name "New Admin" --password "New$Password" ``` ## How to change user password + ``` semaphore user change-by-login --login myAdmin --password "New$Password" ``` diff --git a/src/administration-guide/installation.md b/src/administration-guide/installation.md index 4fb05be..de3b2fe 100644 --- a/src/administration-guide/installation.md +++ b/src/administration-guide/installation.md @@ -2,7 +2,7 @@ You can install Semaphore in 4 ways: -* [Snap](./installation/snap) +* [Snap (deprecated)](./installation/snap) * [Package manager](./installation/package-manager) * [Docker](./installation/docker) * [Binary file](./installation/binary-file) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index ccdf81a..12c500f 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -6,7 +6,7 @@ # Binary file
    - Python, Ansible and Git should be installed on your system. + Ansible and Git should be installed on your system.
    Look into the [manual installation](installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index 84a9b8d..d074756 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -6,7 +6,7 @@ # Package manager
    - Python, Ansible and Git should be installed on your system. + Ansible and Git should be installed on your system.
    Look into the [manual installation](./installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! diff --git a/src/administration-guide/installation/snap.md b/src/administration-guide/installation/snap.md index f56c3e4..69de6a1 100644 --- a/src/administration-guide/installation/snap.md +++ b/src/administration-guide/installation/snap.md @@ -3,7 +3,7 @@ → Snap -# Snap +# Snap (deprecated) To install Semaphore via snap, run following command in terminal: diff --git a/src/administration-guide/security/apache.md b/src/administration-guide/security/apache.md new file mode 100644 index 0000000..452c306 --- /dev/null +++ b/src/administration-guide/security/apache.md @@ -0,0 +1 @@ +# Apache config diff --git a/src/administration-guide/security/nginx.md b/src/administration-guide/security/nginx.md new file mode 100644 index 0000000..3bbf966 --- /dev/null +++ b/src/administration-guide/security/nginx.md @@ -0,0 +1,54 @@ + + +# Nginx config + +Configuration example: + +```yaml +server { + listen 443 ssl; + server_name _; + + # add Strict-Transport-Security to prevent man in the middle attacks + add_header Strict-Transport-Security "max-age=31536000" always; + + # SSL + ssl_certificate /etc/nginx/cert/cert.pem; + ssl_certificate_key /etc/nginx/cert/privkey.pem; + + # Recommendations from + # https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html + ssl_protocols TLSv1.1 TLSv1.2; + ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + + # required to avoid HTTP 411: see Issue #1486 + # (https://github.com/docker/docker/issues/1486) + chunked_transfer_encoding on; + + location / { + proxy_pass http://127.0.0.1:3000/; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_buffering off; + proxy_request_buffering off; + } + + location /api/ws { + proxy_pass http://127.0.0.1:3000/api/ws; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Origin ""; + } +} +``` \ No newline at end of file diff --git a/src/user-guide/admin/README.md b/src/user-guide/admin/README.md new file mode 100644 index 0000000..aad9415 --- /dev/null +++ b/src/user-guide/admin/README.md @@ -0,0 +1 @@ +# Admin diff --git a/src/user-guide/admin/runners.md b/src/user-guide/admin/runners.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/admin/subscription.md b/src/user-guide/admin/subscription.md new file mode 100644 index 0000000..4c796fe --- /dev/null +++ b/src/user-guide/admin/subscription.md @@ -0,0 +1 @@ +# Subscription Details 🅿🆁🅾 diff --git a/src/user-guide/admin/tasks.md b/src/user-guide/admin/tasks.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/admin/users.md b/src/user-guide/admin/users.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/projects/activity.md b/src/user-guide/projects/activity.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/projects/history.md b/src/user-guide/projects/history.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/projects/runners.md b/src/user-guide/projects/runners.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/projects/settings.md b/src/user-guide/projects/settings.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/schedule.md b/src/user-guide/schedule.md new file mode 100644 index 0000000..e69de29 diff --git a/src/user-guide/schedules.md b/src/user-guide/schedules.md new file mode 100644 index 0000000..f3960c0 --- /dev/null +++ b/src/user-guide/schedules.md @@ -0,0 +1 @@ +# Schedules diff --git a/src/user-guide/task-templates/ansible.md b/src/user-guide/task-templates/ansible.md index 25964a2..eee15dd 100644 --- a/src/user-guide/task-templates/ansible.md +++ b/src/user-guide/task-templates/ansible.md @@ -1,9 +1,9 @@ -# Terraform +# Ansible Using Semaphore UI you can run Terraform code. To do this, you need to create a **Terraform Code Template**. diff --git a/src/user-guide/task-templates/bash.md b/src/user-guide/task-templates/bash.md index 05e4475..9b2690f 100644 --- a/src/user-guide/task-templates/bash.md +++ b/src/user-guide/task-templates/bash.md @@ -1,9 +1,9 @@ -# Bash +# Shell/Bash scripts Using Semaphore UI you can run Bash scripts. To do this, you need to create a **Bash Script Template**. diff --git a/src/user-guide/task-templates/powershell.md b/src/user-guide/task-templates/powershell.md index e69de29..8360429 100644 --- a/src/user-guide/task-templates/powershell.md +++ b/src/user-guide/task-templates/powershell.md @@ -0,0 +1,6 @@ + + +# PowerShell diff --git a/src/user-guide/task-templates/pulumi.md b/src/user-guide/task-templates/pulumi.md index e69de29..e30c1e5 100644 --- a/src/user-guide/task-templates/pulumi.md +++ b/src/user-guide/task-templates/pulumi.md @@ -0,0 +1,6 @@ + + +# Pulumi diff --git a/src/user-guide/task-templates/python.md b/src/user-guide/task-templates/python.md new file mode 100644 index 0000000..bcbadb4 --- /dev/null +++ b/src/user-guide/task-templates/python.md @@ -0,0 +1,6 @@ + + +# Python diff --git a/src/user-guide/task-templates/terraform.md b/src/user-guide/task-templates/terraform/README.md similarity index 72% rename from src/user-guide/task-templates/terraform.md rename to src/user-guide/task-templates/terraform/README.md index 95bebeb..b598752 100644 --- a/src/user-guide/task-templates/terraform.md +++ b/src/user-guide/task-templates/terraform/README.md @@ -1,4 +1,9 @@ -# Terraform Template + + +# Terraform/OpenTofu Using Semaphore UI you can run Terraform code. To do this, you need to create a **Terraform Code Template**. diff --git a/src/user-guide/task-templates/terraform/states.md b/src/user-guide/task-templates/terraform/states.md new file mode 100644 index 0000000..0c94f02 --- /dev/null +++ b/src/user-guide/task-templates/terraform/states.md @@ -0,0 +1,7 @@ + + +# States 🅿🆁🅾 diff --git a/src/user-guide/task-templates/terraform/workspaces.md b/src/user-guide/task-templates/terraform/workspaces.md new file mode 100644 index 0000000..9ba1865 --- /dev/null +++ b/src/user-guide/task-templates/terraform/workspaces.md @@ -0,0 +1,7 @@ + + +# Workspaces diff --git a/src/user-guide/team.md b/src/user-guide/team.md new file mode 100644 index 0000000..e69de29 From 463477a23e93e783e6e6147deb79c92d9c7b34f5 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Tue, 14 Jan 2025 23:19:41 +0100 Subject: [PATCH 042/170] Update authentik.md --- src/administration-guide/openid/authentik.md | 24 +++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/administration-guide/openid/authentik.md b/src/administration-guide/openid/authentik.md index 5f3b888..bc32668 100644 --- a/src/administration-guide/openid/authentik.md +++ b/src/administration-guide/openid/authentik.md @@ -10,18 +10,20 @@ ```yaml { "oidc_providers": { - "authentik": { - "display_name": "Sign in with Authentik", - "provider_url": "https://authentik.example.com/application/o/test/", - "client_id": "***", - "client_secret": "***", - "redirect_url": "https://semaphore.example.com/api/auth/oidc/authentik/redirect/", - "scopes": ["openid", "profile", "email"], - "username_claim": "preferred_username", - "name_claim": "preferred_username" - } + "authentik": { + "display_name": "Sign in with Authentik", + "provider_url": "https://authentik.example.com/application/o//", + "client_id": "", + "client_secret": "", + "redirect_url": "https://semaphore.example.com/api/auth/oidc/authentik/redirect/", + "scopes": ["openid", "profile", "email"], + "username_claim": "preferred_username", + "name_claim": "preferred_username" + } } } ``` -Discussion on GitHub: [#1663](https://github.com/semaphoreui/semaphore/discussions/1663). \ No newline at end of file +Discussion on GitHub: [#1663](https://github.com/semaphoreui/semaphore/discussions/1663). + +See also description in [authentik docs](https://docs.goauthentik.io/integrations/services/semaphore/). From d26d4f0e100ce390018670877ca05b03a34fb04b Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 23 Jan 2025 14:16:55 +0500 Subject: [PATCH 043/170] feat: remove disqus --- theme/head.hbs | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/theme/head.hbs b/theme/head.hbs index deb350d..f7d04c5 100644 --- a/theme/head.hbs +++ b/theme/head.hbs @@ -7,8 +7,6 @@ - - - \ No newline at end of file + \ No newline at end of file From b0c89996ff978574c7dd89d7de0f75c702afbeb0 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 23 Jan 2025 14:45:45 +0500 Subject: [PATCH 044/170] feat: build --- deploy/convert_to_index.sh | 6 +++++- deploy/roles/build/tasks/main.yml | 1 + run.sh | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100755 run.sh diff --git a/deploy/convert_to_index.sh b/deploy/convert_to_index.sh index ed2dee1..b3bda72 100755 --- a/deploy/convert_to_index.sh +++ b/deploy/convert_to_index.sh @@ -50,4 +50,8 @@ find . -type f -name "index.html" | while read file; do done -sed -i "s/\.css/.css?v=$BUILD_VERSION/g" "book.js" \ No newline at end of file +if [[ "$OSTYPE" == "darwin"* ]]; then + sed -i '' "s/\.css/.css?v=$BUILD_VERSION/g" "book.js" +else + sed -i "s/\.css/.css?v=$BUILD_VERSION/g" "book.js" +fi \ No newline at end of file diff --git a/deploy/roles/build/tasks/main.yml b/deploy/roles/build/tasks/main.yml index b4fdba2..dc5b377 100644 --- a/deploy/roles/build/tasks/main.yml +++ b/deploy/roles/build/tasks/main.yml @@ -19,6 +19,7 @@ - name: Build The Book ansible.builtin.shell: cmd: . {{ ansible_env.HOME }}/.cargo/env && mdbook build + # cmd: mdbook build chdir: "{{ playbook_dir }}/.." creates: "{{ playbook_dir }}/../book/index.html" diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..faf131b --- /dev/null +++ b/run.sh @@ -0,0 +1,7 @@ +cd deploy + +source ./venv/bin/activate + +ansible-playbook -i invs/yc/hosts build.yml + +ansible-playbook -i invs/yc/hosts deploy.yml --vault-password-file ~/semaphore_pass \ No newline at end of file From b804a79a1ba98a026c6fdd7b11cc9dee04cdd054 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 23 Jan 2025 14:46:38 +0500 Subject: [PATCH 045/170] feat: build --- deploy/roles/build/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/roles/build/tasks/main.yml b/deploy/roles/build/tasks/main.yml index dc5b377..53ce541 100644 --- a/deploy/roles/build/tasks/main.yml +++ b/deploy/roles/build/tasks/main.yml @@ -19,7 +19,7 @@ - name: Build The Book ansible.builtin.shell: cmd: . {{ ansible_env.HOME }}/.cargo/env && mdbook build - # cmd: mdbook build + # cmd: mdbook build chdir: "{{ playbook_dir }}/.." creates: "{{ playbook_dir }}/../book/index.html" From f2745cdd3bbc705eea56abeaca686bee03fff452 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 29 Jan 2025 23:23:56 +0500 Subject: [PATCH 046/170] feat: update version --- run.sh | 2 +- .../installation/binary-file.md | 10 +++---- .../installation/package-manager.md | 16 ++++++------ src/administration-guide/upgrading.md | 26 +++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/run.sh b/run.sh index faf131b..6dce9f6 100755 --- a/run.sh +++ b/run.sh @@ -1,6 +1,6 @@ cd deploy -source ./venv/bin/activate +# source ./venv/bin/activate ansible-playbook -i invs/yc/hosts build.yml diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index 12c500f..ee69336 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -16,9 +16,9 @@ Download the `*.tar.gz` for your platform from [Releases page](https://github.co {{#tabs }} {{#tab name="Linux (x64)" }} ``` -download/v2.10.43/semaphore_2.10.43_linux_amd64.tar.gz +download/v2.12.3/semaphore_2.12.3_linux_amd64.tar.gz -tar xf semaphore_2.10.43_linux_amd64.tar.gz +tar xf semaphore_2.12.3_linux_amd64.tar.gz ./semaphore setup ``` @@ -28,9 +28,9 @@ tar xf semaphore_2.10.43_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.tar.gz +download/v2.12.3/semaphore_2.12.3_linux_arm64.tar.gz -tar xf semaphore_2.10.43_linux_arm64.tar.gz +tar xf semaphore_2.12.3_linux_arm64.tar.gz ./semaphore setup ``` @@ -40,7 +40,7 @@ tar xf semaphore_2.10.43_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.10.43/semaphore_2.10.43_windows_amd64.zip") ` + "download/v2.12.3/semaphore_2.12.3_windows_amd64.zip") ` -OutFile semaphore.zip diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index d074756..3b7bd9c 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -23,36 +23,36 @@ Here are several installation commands, depending on the package manager: {{#tab name="Debian / Ubuntu (x64)"}} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_amd64.deb +download/v2.12.3/semaphore_2.12.3_linux_amd64.deb -sudo dpkg -i semaphore_2.10.43_linux_amd64.deb +sudo dpkg -i semaphore_2.12.3_linux_amd64.deb ``` {{#endtab }} {{#tab name="Debian / Ubuntu (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.deb +download/v2.12.3/semaphore_2.12.3_linux_arm64.deb -sudo dpkg -i semaphore_2.10.43_linux_arm64.deb +sudo dpkg -i semaphore_2.12.3_linux_arm64.deb ``` {{#endtab }} {{#tab name="CentOS (x64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_amd64.rpm +download/v2.12.3/semaphore_2.12.3_linux_amd64.rpm -sudo yum install semaphore_2.10.43_linux_amd64.rpm +sudo yum install semaphore_2.12.3_linux_amd64.rpm ``` {{#endtab }} {{#tab name="CentOS (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.rpm +download/v2.12.3/semaphore_2.12.3_linux_arm64.rpm -sudo yum install semaphore_2.10.43_linux_arm64.rpm +sudo yum install semaphore_2.12.3_linux_arm64.rpm ``` {{#endtab }} diff --git a/src/administration-guide/upgrading.md b/src/administration-guide/upgrading.md index 30e8fc5..b7d8131 100644 --- a/src/administration-guide/upgrading.md +++ b/src/administration-guide/upgrading.md @@ -28,9 +28,9 @@ Install it using the package manager. ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_amd64.deb +download/v2.12.3/semaphore_2.12.3_linux_amd64.deb -sudo dpkg -i semaphore_2.10.43_linux_amd64.deb +sudo dpkg -i semaphore_2.12.3_linux_amd64.deb ``` {{#endtab }} @@ -38,9 +38,9 @@ sudo dpkg -i semaphore_2.10.43_linux_amd64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.deb +download/v2.12.3/semaphore_2.12.3_linux_arm64.deb -sudo dpkg -i semaphore_2.10.43_linux_arm64.deb +sudo dpkg -i semaphore_2.12.3_linux_arm64.deb ``` {{#endtab }} @@ -48,9 +48,9 @@ sudo dpkg -i semaphore_2.10.43_linux_arm64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_amd64.rpm +download/v2.12.3/semaphore_2.12.3_linux_amd64.rpm -sudo yum install semaphore_2.10.43_linux_amd64.rpm +sudo yum install semaphore_2.12.3_linux_amd64.rpm ``` {{#endtab }} @@ -58,9 +58,9 @@ sudo yum install semaphore_2.10.43_linux_amd64.rpm ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.rpm +download/v2.12.3/semaphore_2.12.3_linux_arm64.rpm -sudo yum install semaphore_2.10.43_linux_arm64.rpm +sudo yum install semaphore_2.12.3_linux_arm64.rpm ``` {{#endtab }} {{#endtabs }} @@ -80,9 +80,9 @@ Download a `*.tar.gz` for your platform from [Releases page](https://github.com/ ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_amd64.tar.gz +download/v2.12.3/semaphore_2.12.3_linux_amd64.tar.gz -tar xf semaphore_2.10.43_linux_amd64.tar.gz +tar xf semaphore_2.12.3_linux_amd64.tar.gz ``` {{#endtab }} @@ -90,9 +90,9 @@ tar xf semaphore_2.10.43_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.10.43/semaphore_2.10.43_linux_arm64.tar.gz +download/v2.12.3/semaphore_2.12.3_linux_arm64.tar.gz -tar xf semaphore_2.10.43_linux_arm64.tar.gz +tar xf semaphore_2.12.3_linux_arm64.tar.gz ``` {{#endtab }} @@ -100,7 +100,7 @@ tar xf semaphore_2.10.43_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.10.43/semaphore_2.10.43_windows_amd64.zip") ` + "download/v2.12.3/semaphore_2.12.3_windows_amd64.zip") ` -OutFile semaphore.zip Expand-Archive -Path semaphore.zip -DestinationPath ./ From 812109b1169de0a872ba61436a97ae89081c0cee Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 3 Feb 2025 14:51:19 +0500 Subject: [PATCH 047/170] feat: runners docs --- .../installation/binary-file.md | 10 +++---- .../installation/package-manager.md | 16 ++++++------ src/administration-guide/runners.md | 12 ++++++--- src/administration-guide/upgrading.md | 26 +++++++++---------- 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index ee69336..44a7dfd 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -16,9 +16,9 @@ Download the `*.tar.gz` for your platform from [Releases page](https://github.co {{#tabs }} {{#tab name="Linux (x64)" }} ``` -download/v2.12.3/semaphore_2.12.3_linux_amd64.tar.gz +download/v2.12.4/semaphore_2.12.4_linux_amd64.tar.gz -tar xf semaphore_2.12.3_linux_amd64.tar.gz +tar xf semaphore_2.12.4_linux_amd64.tar.gz ./semaphore setup ``` @@ -28,9 +28,9 @@ tar xf semaphore_2.12.3_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_arm64.tar.gz +download/v2.12.4/semaphore_2.12.4_linux_arm64.tar.gz -tar xf semaphore_2.12.3_linux_arm64.tar.gz +tar xf semaphore_2.12.4_linux_arm64.tar.gz ./semaphore setup ``` @@ -40,7 +40,7 @@ tar xf semaphore_2.12.3_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.12.3/semaphore_2.12.3_windows_amd64.zip") ` + "download/v2.12.4/semaphore_2.12.4_windows_amd64.zip") ` -OutFile semaphore.zip diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index 3b7bd9c..8de9fe4 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -23,36 +23,36 @@ Here are several installation commands, depending on the package manager: {{#tab name="Debian / Ubuntu (x64)"}} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_amd64.deb +download/v2.12.4/semaphore_2.12.4_linux_amd64.deb -sudo dpkg -i semaphore_2.12.3_linux_amd64.deb +sudo dpkg -i semaphore_2.12.4_linux_amd64.deb ``` {{#endtab }} {{#tab name="Debian / Ubuntu (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_arm64.deb +download/v2.12.4/semaphore_2.12.4_linux_arm64.deb -sudo dpkg -i semaphore_2.12.3_linux_arm64.deb +sudo dpkg -i semaphore_2.12.4_linux_arm64.deb ``` {{#endtab }} {{#tab name="CentOS (x64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_amd64.rpm +download/v2.12.4/semaphore_2.12.4_linux_amd64.rpm -sudo yum install semaphore_2.12.3_linux_amd64.rpm +sudo yum install semaphore_2.12.4_linux_amd64.rpm ``` {{#endtab }} {{#tab name="CentOS (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_arm64.rpm +download/v2.12.4/semaphore_2.12.4_linux_arm64.rpm -sudo yum install semaphore_2.12.3_linux_arm64.rpm +sudo yum install semaphore_2.12.4_linux_arm64.rpm ``` {{#endtab }} diff --git a/src/administration-guide/runners.md b/src/administration-guide/runners.md index 49b801e..9c6f9fa 100644 --- a/src/administration-guide/runners.md +++ b/src/administration-guide/runners.md @@ -21,7 +21,8 @@ To set up the server for working with running you should add following option to ```json { - "use_remote_runner": true + "use_remote_runner": true, + "runner_registration_token": "long string of random characters" } ``` @@ -38,7 +39,7 @@ But before using this command, you need to understand how runners are registered ### Registering the Runner on the Server There are two ways to register a runner on the Semaphore server: -1) Add it via the web interface. +1) Add it via the web interface or API. 2) Use the command line with the `semaphore runner register` command. #### Adding the Runner via the Web Interface @@ -71,7 +72,8 @@ As a result of running the `semaphore runner setup` command, a configuration fil // Runner specific options "runner": { - + "token": "your runner's token", + // or "token_file": "path/to/the/file/where/runner/saves/token" // Here you can provide other runner-specific options, @@ -118,6 +120,10 @@ semaphore runner unregister --config /path/to/your/config/file.json ## Security +Data transfer security is ensured by using asymmetric encryption: the server encrypts data using a public key, the runner decrypts it using a private key. + +Public and private keys are generated automatically when the runner registers on the server. +
    Use the HTTPS protocol for communication between the server and the runner, especially if they are not on the same private network.
    diff --git a/src/administration-guide/upgrading.md b/src/administration-guide/upgrading.md index b7d8131..521d19e 100644 --- a/src/administration-guide/upgrading.md +++ b/src/administration-guide/upgrading.md @@ -28,9 +28,9 @@ Install it using the package manager. ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_amd64.deb +download/v2.12.4/semaphore_2.12.4_linux_amd64.deb -sudo dpkg -i semaphore_2.12.3_linux_amd64.deb +sudo dpkg -i semaphore_2.12.4_linux_amd64.deb ``` {{#endtab }} @@ -38,9 +38,9 @@ sudo dpkg -i semaphore_2.12.3_linux_amd64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_arm64.deb +download/v2.12.4/semaphore_2.12.4_linux_arm64.deb -sudo dpkg -i semaphore_2.12.3_linux_arm64.deb +sudo dpkg -i semaphore_2.12.4_linux_arm64.deb ``` {{#endtab }} @@ -48,9 +48,9 @@ sudo dpkg -i semaphore_2.12.3_linux_arm64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_amd64.rpm +download/v2.12.4/semaphore_2.12.4_linux_amd64.rpm -sudo yum install semaphore_2.12.3_linux_amd64.rpm +sudo yum install semaphore_2.12.4_linux_amd64.rpm ``` {{#endtab }} @@ -58,9 +58,9 @@ sudo yum install semaphore_2.12.3_linux_amd64.rpm ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_arm64.rpm +download/v2.12.4/semaphore_2.12.4_linux_arm64.rpm -sudo yum install semaphore_2.12.3_linux_arm64.rpm +sudo yum install semaphore_2.12.4_linux_arm64.rpm ``` {{#endtab }} {{#endtabs }} @@ -80,9 +80,9 @@ Download a `*.tar.gz` for your platform from [Releases page](https://github.com/ ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_amd64.tar.gz +download/v2.12.4/semaphore_2.12.4_linux_amd64.tar.gz -tar xf semaphore_2.12.3_linux_amd64.tar.gz +tar xf semaphore_2.12.4_linux_amd64.tar.gz ``` {{#endtab }} @@ -90,9 +90,9 @@ tar xf semaphore_2.12.3_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.3/semaphore_2.12.3_linux_arm64.tar.gz +download/v2.12.4/semaphore_2.12.4_linux_arm64.tar.gz -tar xf semaphore_2.12.3_linux_arm64.tar.gz +tar xf semaphore_2.12.4_linux_arm64.tar.gz ``` {{#endtab }} @@ -100,7 +100,7 @@ tar xf semaphore_2.12.3_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.12.3/semaphore_2.12.3_windows_amd64.zip") ` + "download/v2.12.4/semaphore_2.12.4_windows_amd64.zip") ` -OutFile semaphore.zip Expand-Archive -Path semaphore.zip -DestinationPath ./ From 7e1b4d3be281fb8e360e821d6adc9d4a803f0382 Mon Sep 17 00:00:00 2001 From: JC <6977828+johnciavarella@users.noreply.github.com> Date: Fri, 7 Feb 2025 13:31:20 -0500 Subject: [PATCH 048/170] Update environment.md for variable groups Add TF variables and secrets explanation as well as example. --- src/user-guide/environment.md | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/user-guide/environment.md b/src/user-guide/environment.md index 382af1c..778f775 100644 --- a/src/user-guide/environment.md +++ b/src/user-guide/environment.md @@ -18,3 +18,54 @@ If you are not sure which resources are being used in an environment, follow ste 1. Click on the Environment. 2. Click the trash can icon next to the Environment. 3. Click Yes if you are sure you want to remove the environment. + +# Variable Groups + +## Using Variable Groups - Terraform +When you want utilize a stored environment variable or secret in your terraform template you must prefix the name with `TF_VAR_` for the terraform script to use it. + +**Example** +Passing Hetzner Cloud API key to OpenTofu/Terraform playbook. + +1. Click on Variable Group +2. Click `New Group` +3. Click on `Secrets` tab +4. Add `TV_VAR_hcloud_token` and add you `secret` in the hidden field +5. Click Save + +We will call our secret `TV_VAR_hcloud_token` as `var.hcloud_token` in +hetzner.tf +``` +terraform { + required_providers { + hcloud = { + source = "hetznercloud/hcloud" + version = "~> 1.45" + } + } +} + +# Declare the variable +variable "hcloud_token" { + type = string + description = "Hetzner Cloud API token" + sensitive = true # This prevents the token from being displayed in logs +} + +provider "hcloud" { + token = var.hcloud_token +} + +# Create a new server running debian +resource "hcloud_server" "webserver" { + name = "webserver" + image = "ubuntu-24.04" + server_type = "cpx11" + location = "ash" + ssh_keys = [ "mysshkey" ] + public_net { + ipv4_enabled = true + ipv6_enabled = true + } +} +``` From c9010b2335042ebb5ee3dfaa3ad838720cadd201 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Feb 2025 14:15:49 +0500 Subject: [PATCH 049/170] feat: update config for Apache --- deploy/build.yml | 2 +- src/administration-guide/security.md | 93 ++++----------------- src/administration-guide/security/apache.md | 46 ++++++++++ src/administration-guide/security/nginx.md | 4 +- 4 files changed, 67 insertions(+), 78 deletions(-) diff --git a/deploy/build.yml b/deploy/build.yml index 5fd1a37..445f83a 100644 --- a/deploy/build.yml +++ b/deploy/build.yml @@ -1,5 +1,5 @@ --- - name: Build the book - hosts: site + hosts: localhost roles: - build diff --git a/src/administration-guide/security.md b/src/administration-guide/security.md index 5545634..ff6903c 100644 --- a/src/administration-guide/security.md +++ b/src/administration-guide/security.md @@ -19,95 +19,36 @@ Why use encrypted connections? See: [Article](https://www.cloudflare.com/learnin Options you have: * VPN -* Reverse Proxy with SSL +* SSL ## VPN You can use a Client-to-Site VPN, that terminates on the Semaphore server, to encrypt & secure the connection. -## Reverse Proxy with SSL - -Semaphore doesn't support SSL/TLS on its own. - -You need to use a reverse proxy like -[NGINX](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) / -[Apache](https://httpd.apache.org/docs/current/howto/reverse_proxy.html) / -[HAProxy](https://www.haproxy.com/documentation/hapee/latest/onepage/) - in front of Semaphore to serve secure connections. - -### NGINX - -Configuration example: - -```yaml -server { - listen 443 ssl; - server_name _; - - # add Strict-Transport-Security to prevent man in the middle attacks - add_header Strict-Transport-Security "max-age=31536000" always; - - # SSL - ssl_certificate /etc/nginx/cert/cert.pem; - ssl_certificate_key /etc/nginx/cert/privkey.pem; - - # Recommendations from - # https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html - ssl_protocols TLSv1.1 TLSv1.2; - ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; - ssl_prefer_server_ciphers on; - ssl_session_cache shared:SSL:10m; - - # required to avoid HTTP 411: see Issue #1486 - # (https://github.com/docker/docker/issues/1486) - chunked_transfer_encoding on; - - location / { - proxy_pass http://127.0.0.1:3000/; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - proxy_set_header X-Forwarded-Proto $scheme; - - proxy_buffering off; - proxy_request_buffering off; - } - - location /api/ws { - proxy_pass http://127.0.0.1:3000/api/ws; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Origin ""; - } -} -``` +## SSL -### Apache +Semaphore supports SSL/TLS starting from v2.12. -``` - +Else you can use a reverse proxy in front of Semaphore to serve secure connections. For example: - ServerName yourapp.test +* [NGINX](./security/nginx.md) +* [Apache](./security/apache.md) + - ServerAdmin webmaster@localhost - - SSLEngine on - SSLCertificateFile /path/to/www_yoursite_com.crt - SSLCertificateKeyFile /path/to/www_yoursite_com.key +### Self-signed SSL certificate - - ProxyPass http://127.0.0.1:3000/ - ProxyPassReverse http://127.0.0.1:3000/ - - - ProxyPass ws://127.0.0.1:3000/api/ws/ - - ``` +openssl req -x509 -newkey rsa:4096 \ + -keyout key.pem -out cert.pem \ + -sha256 -days 3650 -nodes \ + -subj "/C=US/ST=California/L=San Francisco/O=CompanyName/OU=DevOps/CN=example.com" +``` + +### Let's Encrypt SSL certificate + +You can use [Certbot](https://certbot.eff.org/) to generate and automatically renew a Let's Encrypt SSL certificate. ### Others diff --git a/src/administration-guide/security/apache.md b/src/administration-guide/security/apache.md index 452c306..2819511 100644 --- a/src/administration-guide/security/apache.md +++ b/src/administration-guide/security/apache.md @@ -1 +1,47 @@ + + + # Apache config + +Make sure you have enabled following Apache modules: + +```bash +sudo a2enmod proxy +sudo a2enmod proxy_http +sudo a2enmod proxy_wstunnel +``` + +Add following virtual host to your Apache configuration: + +``` + + + ServerName example.com + + ServerAdmin webmaster@localhost + + SSLEngine on + SSLCertificateFile /path/to/example.com.crt + SSLCertificateKeyFile /path/to/example.com.key + + ProxyPreserveHost On + + + ProxyPass http://127.0.0.1:3000/ + ProxyPassReverse http://127.0.0.1:3000/ + + + + RewriteCond %{HTTP:Connection} Upgrade [NC] + RewriteCond %{HTTP:Upgrade} websocket [NC] + + ProxyPass ws://127.0.0.1:3000/api/ws/ + ProxyPassReverse ws://127.0.0.1:3000/api/ws/ + + + +``` diff --git a/src/administration-guide/security/nginx.md b/src/administration-guide/security/nginx.md index 3bbf966..78d74f8 100644 --- a/src/administration-guide/security/nginx.md +++ b/src/administration-guide/security/nginx.md @@ -6,12 +6,14 @@ # Nginx config + + Configuration example: ```yaml server { listen 443 ssl; - server_name _; + server_name example.com; # add Strict-Transport-Security to prevent man in the middle attacks add_header Strict-Transport-Security "max-age=31536000" always; From e20856cb1e176fd4079ca59375a0af07118c4961 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Feb 2025 14:26:18 +0500 Subject: [PATCH 050/170] ... --- src/administration-guide/security.md | 35 ++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/security.md b/src/administration-guide/security.md index ff6903c..1ba0df4 100644 --- a/src/administration-guide/security.md +++ b/src/administration-guide/security.md @@ -14,7 +14,7 @@ head -c32 /dev/urandom | base64 For security reasons, Semaphore **should not be used** over unencrypted HTTP! -Why use encrypted connections? See: [Article](https://www.cloudflare.com/learning/ssl/why-use-https/) +Why use encrypted connections? See: [Article from Cloudflare](https://www.cloudflare.com/learning/ssl/why-use-https/). Options you have: @@ -30,7 +30,30 @@ You can use a Client-to-Site VPN, that terminates on the Semaphore server, to en Semaphore supports SSL/TLS starting from v2.12. -Else you can use a reverse proxy in front of Semaphore to serve secure connections. For example: +**config.json**: +```json +{ + ... + "tsl": { + "enabled": true, + "cert_file": "/path/to/cert/example.com.cert", + "key_file": "/path/to/key/example.com.key" + } + ... +} +``` + +Or environment varibles (useful for Docker): + +```bash +export SEMAPHORE_TLS_ENABLED=True +export SEMAPHORE_TLS_CERT_FILE=/path/to/cert/example.com.cert +export SEMAPHORE_TLS_KEY_FILE=/path/to/key/example.com.key +``` + +--- + +Alternatively, you can use a reverse proxy in front of Semaphore to handle secure connections. For example: * [NGINX](./security/nginx.md) * [Apache](./security/apache.md) @@ -38,6 +61,7 @@ Else you can use a reverse proxy in front of Semaphore to serve secure connectio ### Self-signed SSL certificate +You can generate your own SSL certificate with using `openssl` CLI tool: ``` openssl req -x509 -newkey rsa:4096 \ @@ -50,6 +74,13 @@ openssl req -x509 -newkey rsa:4096 \ You can use [Certbot](https://certbot.eff.org/) to generate and automatically renew a Let's Encrypt SSL certificate. +Example for Apache: + +```bash +sudo snap install certbot +sudo certbot --apache -n --agree-tos -d example.com -m mail@example.com +``` + ### Others If you want to use any other reverse proxy - make sure to also forward websocket connections on the `/api/ws` route! From 85fe5436c14f83b552b856621253ac28ecc22892 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Feb 2025 19:24:33 +0500 Subject: [PATCH 051/170] ... --- build.sh | 5 + run.sh | 2 +- src/SUMMARY.md | 12 +- src/administration-guide/cicd.md | 16 +- src/administration-guide/cli.md | 9 +- src/administration-guide/cli/users.md | 11 +- src/administration-guide/configuration.md | 188 +++++------------- src/administration-guide/configuration/cli.md | 8 + .../configuration/config-file.md | 72 +++++++ .../configuration/env-vars.md | 7 + .../configuration/snap.md | 21 ++ src/administration-guide/installation.md | 2 +- src/administration-guide/security.md | 86 +------- src/administration-guide/security/apache.md | 2 +- src/administration-guide/security/database.md | 14 ++ src/administration-guide/security/network.md | 79 ++++++++ src/administration-guide/security/nginx.md | 2 +- theme/content.css | 5 + 18 files changed, 301 insertions(+), 240 deletions(-) create mode 100755 build.sh create mode 100644 src/administration-guide/configuration/cli.md create mode 100644 src/administration-guide/configuration/config-file.md create mode 100644 src/administration-guide/configuration/env-vars.md create mode 100644 src/administration-guide/configuration/snap.md create mode 100644 src/administration-guide/security/database.md create mode 100644 src/administration-guide/security/network.md diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..3c343d2 --- /dev/null +++ b/build.sh @@ -0,0 +1,5 @@ +cd deploy + +# source ./venv/bin/activate + +ansible-playbook build.yml \ No newline at end of file diff --git a/run.sh b/run.sh index 6dce9f6..206dc3b 100755 --- a/run.sh +++ b/run.sh @@ -2,6 +2,6 @@ cd deploy # source ./venv/bin/activate -ansible-playbook -i invs/yc/hosts build.yml +ansible-playbook build.yml ansible-playbook -i invs/yc/hosts deploy.yml --vault-password-file ~/semaphore_pass \ No newline at end of file diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 5ae567f..ee5df90 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -2,16 +2,22 @@ * [Introduction](./README.md) -* [Administration Guide]() +* [Admin Guide]() * [Installation](./administration-guide/installation.md) - * [Snap (deprecated)](./administration-guide/installation/snap.md) * [Package manager](./administration-guide/installation/package-manager.md) * [Docker](./administration-guide/installation/docker.md) * [Binary file](./administration-guide/installation/binary-file.md) + * [Snap (deprecated)](./administration-guide/installation/snap.md) * [Manual Installation](./administration-guide/installation\_manually.md) * [Configuration](./administration-guide/configuration.md) + * [Configuration file](./administration-guide/configuration/config-file.md) + * [Envrioment variables](./administration-guide/configuration/env-vars.md) + * [Interactive setup](./administration-guide/configuration/cli.md) + * [Snap configuration](./administration-guide/configuration/snap.md) * [Upgrading](./administration-guide/upgrading.md) * [Security](./administration-guide/security.md) + * [Database security](./administration-guide/security/database.md) + * [Network security](./administration-guide/security/network.md) * [NGINX config](./administration-guide/security/nginx.md) * [Apache config](./administration-guide/security/apache.md) * [CLI](./administration-guide/cli.md) @@ -29,7 +35,7 @@ * [Okta config](./administration-guide/openid/okta.md) * [Azure config](./administration-guide/openid/azure.md) * [API](./administration-guide/api.md) - * [CI/CD](./administration-guide/cicd.md) + * [Pipelines](./administration-guide/cicd.md) * [Runners](./administration-guide/runners.md) * [User Guide]() diff --git a/src/administration-guide/cicd.md b/src/administration-guide/cicd.md index aa08afc..4ccc522 100644 --- a/src/administration-guide/cicd.md +++ b/src/administration-guide/cicd.md @@ -1,11 +1,13 @@ -# CI/CD +# Pipelines -Semaphore supports `build` and `deploy` tasks. +Semaphore supports simple pipelins with using `build` and `deploy` tasks. Semaphore passes `semaphore_vars` variable to each Ansible playbook which it runs. You can use it in your Ansible tasks to get what type of task was run, which version should be build or deployed, who ran the task, etc. +--- + Example of `semaphore_vars` for `build` tasks: ```yaml @@ -32,25 +34,27 @@ semaphore_vars: This type of task is used to create [artifacts](https://en.wikipedia.org/wiki/Artifact\_\(software\_development\)). Each build task has autogenerated version. You should use variable `semaphore_vars.task_details.target_version` in your Ansible playbook to get what version of the artifact should be created. After the artifact is created, it can be used for deployment. -{% hint style="info" %} +--- + Example of `build` Ansible role: 1. Get app source code from GitHub 2. Compile source code 3. Pack created binary to a tarball with name `app-{{semaphore_vars.task_details.target_version}}.tar.gz` 4. Send `app-{{semaphore_vars.task_details.target_version}}.tar.gz` to an S3 bucket -{% endhint %} + + ### Deploy This type of task is used to deploy artifacts to destination servers. Each deployment task is associated with the build task. You should use variable `semaphore_vars.task_details.incoming_version` in your Ansible playbook to get what version of the artifact should be deployed. -{% hint style="info" %} +--- + Example of `deploy` Ansible role: 1. Download `app-{{semaphore_vars.task_details.incoming_version}}.tar.gz` from an S3 bucket to destination servers 2. Unpack `app-{{semaphore_vars.task_details.incoming_version}}.tar.gz` to destination directory 3. Create or update configuration files 4. Restart app service -{% endhint %} diff --git a/src/administration-guide/cli.md b/src/administration-guide/cli.md index fbed29f..4dd85fd 100644 --- a/src/administration-guide/cli.md +++ b/src/administration-guide/cli.md @@ -1,9 +1,10 @@ # CLI - + +* [Runners](./cli/runners.md) +* [Users](./cli/users.md) +* [Vaults](./cli/vaults.md) + ## Common config options diff --git a/src/administration-guide/cli/users.md b/src/administration-guide/cli/users.md index abe3d64..9795446 100644 --- a/src/administration-guide/cli/users.md +++ b/src/administration-guide/cli/users.md @@ -14,11 +14,18 @@ semaphore user --help ## How to add admin user ``` -semaphore user add --admin --login newAdmin --email new-admin@example.com --name "New Admin" --password "New$Password" +semaphore user add \ + --admin \ + --login newAdmin \ + --email new-admin@example.com \ + --name "New Admin" \ + --password "New$Password" ``` ## How to change user password ``` -semaphore user change-by-login --login myAdmin --password "New$Password" +semaphore user change-by-login \ + --login myAdmin \ + --password "New$Password" ``` diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index f35716a..bf0e2fb 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -1,147 +1,59 @@ # Configuration -There are 3 ways to configure Semaphore: +There are following ways to configure Semaphore: -* [Snap configuration](https://snapcraft.io/docs/configuration-in-snaps) -* [Interactive setup](./configuration.md#snap-configuration) -* [Configuration file](./configuration.md#configuration-file) +* [Configuration file](./configuration/config-file.md) +* [Envrioment variables](./configuration/env-vars.md) +* [Interactive setup](./configuration/snap.md) +* [Snap configuration (deprecated)](./configuration/snap.md) -## Snap configuration - -Snap configurations should be used for when Semaphore was installed via Snap. - -To see a list of available options, use the following command: - -```bash -sudo snap get semaphore -``` - -You can change each of these configurations. For example if you want to change Semaphore port, use following command: - -```bash -sudo snap set semaphore port=4444 -``` - -Don't forget to restart Semaphore after changing a configuration: - -```bash -sudo snap restart semaphore -``` - -## Interactive setup - -Use this option for first time configuration (not working for Semaphore installed via Snap). - -```bash -semaphore setup -``` - -## Configuration file - -Semaphore uses a `config.json` configuration file with following content: - -```javascript -{ - "bolt": { - "host": "/home/ubuntu/semaphore.bolt" - }, - "mysql": { - "host": "localhost", - "user": "root", - "pass": "*****", - "name": "semaphore", - "options": {} - }, - "postgres": { - "host": "localhost", - "user": "postgres", - "pass": "*****", - "name": "semaphore", - "options": {} - }, - "dialect": "postgres", - "port": "", - "interface": "", - "tmp_path": "/tmp/semaphore", - "cookie_hash": "*****", - "cookie_encryption": "*****", - "access_key_encryption": "*****", - "email_sender": "", - "email_host": "", - "email_port": "", - "web_host": "", - "ldap_binddn": "", - "ldap_bindpassword": "", - "ldap_server": "", - "ldap_searchdn": "", - "ldap_searchfilter": "", - "ldap_mappings": { - "dn": "", - "mail": "", - "uid": "", - "cn": "" - }, - "telegram_chat": "", - "telegram_token": "", - "concurrency_mode": "", - "max_parallel_tasks": 0, - "email_alert": false, - "telegram_alert": false, - "slack_alert": false, - "slack_url": "", - "microsoft_teams_alert": false, - "microsoft_teams_url": "", - "rocketchat_alert": false, - "rocketchat_url": "", - "ldap_enable": false, - "ldap_needtls": false -} -``` ## Configuration options -| Configuration file | Snap configuration | Description | -| ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| `bolt.host` | — | Path to the BoltDB database file | -| `mysql.host` | `mysql.host` | MySQL database host | -| `mysql.name` | `mysql.name` | MySQL database (schema) name | -| `mysql.user` | `mysql.user` | MySQL user name | -| `mysql.pass` | `mysql.pass` | MySQL user's password | -| `postgres.host` | `postgres.host` | Postgres database host | -| `postgres.name` | `postgres.name` | Postgres database (schema) name | -| `postgres.user` | `postgres.user` | Postgres user name | -| `postgres.pass` | `postgres.pass` | Postgres user's password | -| `dialect` | `dialect` | Can be `mysql`, `postgres `or `bolt` | -| `port` | `port` | TCP port on which the web interface will be available. Default: 3000 | -| `interface` | `interface` | Useful if your server has multiple network interfaces | -| `tmp_path` | — | Path to directory where cloned repositories and generated files are stored. Default: /tmp/semaphore | -| `access_key_encryption` | `access-key-encryption` | Secret key used for encrypting access keys in database. Read more in [Database encryption reference](./security.md#database-encryption). | -| `web_host` | `web-host` | Can be useful if you want to use Semaphore by the subpath, for example: [http://yourdomain.com/semaphore](http://yourdomain.com/semaphore). Do not add a trailing `/`. | -| `email_sender` | `email-sender` | | -| `email_host` | `email-host` | | -| `email_port` | `email-port` | | -| `email_secure` | `email-secure` | | -| `email_username` | `email-username` | | -| `email_password` | `email-password` | | -| `email_alert` | `email-alert` | | -| `telegram_alert` | `telegram-alert` | | -| `slack_alert` | `slack-alert` | Set to True to enable pushing alerts to slack. It should be used in combination with `slack_url` | -| `slack_url` | `slack-url` | The slack webhook url. Semaphore will used it to POST Slack formatted json alerts to the provided url. | -| `microsoft_teams_alert` | — | Set to True to enable pushing alerts to teams. It should be used in combination with `microsoft_teams_url`. | -| `microsoft_teams_url` | — | The teams webhook url. Semaphore will used it to POST alerts. | -| `rocketchat_alert` | `rocketchat-alert` | Set to True to enable pushing alerts to Rocket.Chat. It should be used in combination with `rocketchat_url`. Available since v2.9.56. | -| `rocketchat_url` | `rocketchat-url` | The rocketchat webhook url. Semaphore will used it to POST Rocket.Chat formatted json alerts to the provided url. Available since v2.9.56. | -| `ldap_enable` | `ldap-enable` | | -| `ldap_needtls` | `ldap-needtls` | | -| `ldap_binddn` | `ldap-binddn` | | -| `ldap_bindpassword` | `ldap-bindpassword` | | -| `ldap_server` | `ldap-server` | | -| `ldap_searchdn` | `ldap-searchdn` | | -| `concurrency_mode` | `concurrency-mode` | Can be *unset/empty* or `project` or `node`. When set to `project`, tasks will run in parallel if and only if they do not share the same project id, with no regard to the nodes/hosts that are affected. When set to `node`, a task will run in parallel if and only if the hosts affected by tasks already running does not intersect with the hosts that would be affected by the task in question. If `concurrency_mode` is not specified or left empty, no task will start before the previous one has finished. | -| `max_parallel_tasks` | `max-parallel-tasks` | Max allowed parallel tasks if `concurrency-mode` is enabled. Can also be set/changed within the Web UI (project settings). | -| `oidc_providers` ![Static Badge](https://img.shields.io/badge/new-red) | | OpenID provider settings. You can provide multiple OpenID providers. More about OpenID configuration read in [OpenID](./openid.md). | -| `password_login_disable` ![Static Badge](https://img.shields.io/badge/new-red) | | Disable login with using password. Only LDAP and OpenID. | -| `non_admin_can_create_project` ![Static Badge](https://img.shields.io/badge/new-red) | | Allow non-admin users to create new projects. | +Full list of available configuration options: + +| Config file option / Environment variable | Description | +| ----------------------- | --------------------------------------------------------- | +|
    `bolt.host`
    `SEMAPHORE_DB_HOST`

    | Path to the BoltDB database file. | +|
    `mysql.host`
    `SEMAPHORE_DB_HOST`

    | MySQL database host. | +|
    `mysql.name`
    `SEMAPHORE_DB_NAME`

    | MySQL database (schema) name. | +|
    `mysql.user`
    `SEMAPHORE_DB_USER`

    | MySQL user name. | +|
    `mysql.pass`
    `SEMAPHORE_DB_PASS`

    | MySQL user's password. | +|
    `postgres.host`
    `SEMAPHORE_DB_HOST`

    | Postgres database host. | +|
    `postgres.name`
    `SEMAPHORE_DB_NAME`

    | Postgres database (schema) name. | +|
    `postgres.user`
    `SEMAPHORE_DB_USER`

    | Postgres user name. | +|
    `postgres.pass`
    `SEMAPHORE_DB_PASS`

    | Postgres user's password. | +|
    `dialect`
    `SEMAPHORE_DB_DIALECT`

    | Can be `mysql`, `postgres `or `bolt` | +|
    `port`
    `SEMAPHORE_PORT`

    | TCP port on which the web interface will be available. Default: 3000 | +|
    `interface`
    `SEMAPHORE_INTERFACE`

    | Useful if your server has multiple network interfaces | +|
    `tmp_path`
    `SEMAPHORE_TMP_PATH`

    | Path to directory where cloned repositories and generated files are stored. Default: /tmp/semaphore | +|
    `access_key_encryption`
    `SEMAPHORE_ACCESS_KEY_ENCRYPTION`

    | Secret key used for encrypting access keys in database. Read more in [Database encryption reference](./security.md#database-encryption). | +|
    `web_host`
    `SEMAPHORE_WEB_ROOT`

    | Can be useful if you want to use Semaphore by the subpath, for example: [http://yourdomain.com/semaphore](http://yourdomain.com/semaphore). Do not add a trailing `/`. | +|
    `email_sender`
    `SEMAPHORE_EMAIL_SENDER`

    | | +|
    `email_host`
    `SEMAPHORE_EMAIL_HOST`

    | | +|
    `email_port`
    `SEMAPHORE_EMAIL_PORT`

    | | +|
    `email_secure`
    `SEMAPHORE_EMAIL_SECURE`

    | | +|
    `email_username`
    `SEMAPHORE_EMAIL_USERNAME`

    | | +|
    `email_password`
    `SEMAPHORE_EMAIL_PASSWORD`

    | | +|
    `email_alert`
    `SEMAPHORE_EMAIL_ALERT`

    | | +|
    `telegram_alert`
    `SEMAPHORE_DB_HOST`

    | | +|
    `slack_alert`
    `SEMAPHORE_DB_HOST`

    | Set to True to enable pushing alerts to slack. It should be used in combination with `slack_url` | +|
    `slack_url`
    `SEMAPHORE_DB_HOST`

    | The slack webhook url. Semaphore will used it to POST Slack formatted json alerts to the provided url. | +|
    `microsoft_teams_alert`
    `SEMAPHORE_MICROSOFT_TEAMS_ALERT`

    | Set to True to enable pushing alerts to teams. It should be used in combination with `microsoft_teams_url`. | +|
    `microsoft_teams_url`
    `SEMAPHORE_MICROSOFT_TEAMS_URL`

    | The teams webhook url. Semaphore will used it to POST alerts. | +|
    `rocketchat_alert`
    `SEMAPHORE_ROCKETCHAT_ALERT`

    | Set to True to enable pushing alerts to Rocket.Chat. It should be used in combination with `rocketchat_url`. Available since v2.9.56. | +|
    `rocketchat_url`
    `SEMAPHORE_ROCKETCHAT_URL`

    | The rocketchat webhook url. Semaphore will used it to POST Rocket.Chat formatted json alerts to the provided url. Available since v2.9.56. | +|
    `ldap_enable`
    `SEMAPHORE_LDAP_ENABLE`

    | | +|
    `ldap_needtls`
    `SEMAPHORE_LDAP_NEEDTLS`

    | | +|
    `ldap_binddn`
    `SEMAPHORE_LDAP_BIND_DN`

    | | +|
    `ldap_bindpassword`
    `SEMAPHORE_LDAP_BIND_PASSWORD`

    | | +|
    `ldap_server`
    `SEMAPHORE_LDAP_SERVER`

    | | +|
    `ldap_searchdn`
    `SEMAPHORE_LDAP_SEARCH_DN`

    | | +|
    `ldap_searchfilter`
    `SEMAPHORE_LDAP_SEARCH_FILTER`

    | | +|
    `max_parallel_tasks`
    `SEMAPHORE_MAX_PARALLEL_TASKS`

    | Max allowed parallel tasks for whole Semaphore instance. | +|
    `oidc_providers` ![Static Badge](https://img.shields.io/badge/v2.10+-red) | OpenID provider settings. You can provide multiple OpenID providers. More about OpenID configuration read in [OpenID](./openid.md).

    | +|
    `password_login_disable`
    `SEMAPHORE_PASSWORD_LOGIN_DISABLED`

    ![Static Badge](https://img.shields.io/badge/v2.10+-red)

    | Disable login with using password. Only LDAP and OpenID. | + ## Public URL @@ -152,3 +64,5 @@ For example you configured NGINX on the server which proxies queries to Semaphor Server address `https://exmaple.com` and you proxies all queries `https://exmaple.com/semaphore` to Semaphore. Your `web_host` will be `https://exmaple.com/semaphore`. + + diff --git a/src/administration-guide/configuration/cli.md b/src/administration-guide/configuration/cli.md new file mode 100644 index 0000000..454b42d --- /dev/null +++ b/src/administration-guide/configuration/cli.md @@ -0,0 +1,8 @@ + +# Interactive setup + +Use this option for first time configuration (not working for Semaphore installed via Snap). + +```bash +semaphore setup +``` \ No newline at end of file diff --git a/src/administration-guide/configuration/config-file.md b/src/administration-guide/configuration/config-file.md new file mode 100644 index 0000000..a918889 --- /dev/null +++ b/src/administration-guide/configuration/config-file.md @@ -0,0 +1,72 @@ + +# Configuration file + +You can use interactive config file generator: +* for [server](https://semaphoreui.com/install/binary/2_12/config) +* for [runner](https://semaphoreui.com/install/binary/2_12/runner). + +Semaphore uses a `config.json` configuration file with following content: + +```javascript +{ + "bolt": { + "host": "/home/ubuntu/semaphore.bolt" + }, + "mysql": { + "host": "localhost", + "user": "root", + "pass": "*****", + "name": "semaphore", + "options": {} + }, + "postgres": { + "host": "localhost", + "user": "postgres", + "pass": "*****", + "name": "semaphore", + "options": {} + }, + "dialect": "postgres", + "port": "", + "interface": "", + "tmp_path": "/tmp/semaphore", + "cookie_hash": "*****", + "cookie_encryption": "*****", + "access_key_encryption": "*****", + "email_sender": "", + "email_host": "", + "email_port": "", + "web_host": "", + "ldap_binddn": "", + "ldap_bindpassword": "", + "ldap_server": "", + "ldap_searchdn": "", + "ldap_searchfilter": "", + "ldap_mappings": { + "dn": "", + "mail": "", + "uid": "", + "cn": "" + }, + "telegram_chat": "", + "telegram_token": "", + "concurrency_mode": "", + "max_parallel_tasks": 0, + "email_alert": false, + "telegram_alert": false, + "slack_alert": false, + "slack_url": "", + "microsoft_teams_alert": false, + "microsoft_teams_url": "", + "rocketchat_alert": false, + "rocketchat_url": "", + "ldap_enable": false, + "ldap_needtls": false +} +``` + +Usage: + +```bash +semaphore server --config ./config.json +``` \ No newline at end of file diff --git a/src/administration-guide/configuration/env-vars.md b/src/administration-guide/configuration/env-vars.md new file mode 100644 index 0000000..54c4037 --- /dev/null +++ b/src/administration-guide/configuration/env-vars.md @@ -0,0 +1,7 @@ +# Environment variables + +With using environment variables you can override any available configuration option. + +You can use interactive evnvironment variables generator (for Docker): +* for [server](https://semaphoreui.com/install/docker/2_12/) +* for [runner](https://semaphoreui.com/install/docker/2_12/runner). diff --git a/src/administration-guide/configuration/snap.md b/src/administration-guide/configuration/snap.md new file mode 100644 index 0000000..c7d7572 --- /dev/null +++ b/src/administration-guide/configuration/snap.md @@ -0,0 +1,21 @@ +# Snap configuration + +Snap configurations should be used for when Semaphore was installed via Snap. + +To see a list of available options, use the following command: + +```bash +sudo snap get semaphore +``` + +You can change each of these configurations. For example if you want to change Semaphore port, use following command: + +```bash +sudo snap set semaphore port=4444 +``` + +Don't forget to restart Semaphore after changing a configuration: + +```bash +sudo snap restart semaphore +``` diff --git a/src/administration-guide/installation.md b/src/administration-guide/installation.md index de3b2fe..25cbe75 100644 --- a/src/administration-guide/installation.md +++ b/src/administration-guide/installation.md @@ -2,10 +2,10 @@ You can install Semaphore in 4 ways: -* [Snap (deprecated)](./installation/snap) * [Package manager](./installation/package-manager) * [Docker](./installation/docker) * [Binary file](./installation/binary-file) +* [Snap (deprecated)](./installation/snap) See also: * [Run as service](./installation/binary-file.md#run-as-a-service) diff --git a/src/administration-guide/security.md b/src/administration-guide/security.md index 1ba0df4..b5f9674 100644 --- a/src/administration-guide/security.md +++ b/src/administration-guide/security.md @@ -1,86 +1,4 @@ # Security -## Database encryption - -Sensitive data is stored in the database, in an encrypted form. You should set the configuration option `access_key_encryption` in configuration file to enable Access Keys encryption. It must be generated by command: - -```bash -head -c32 /dev/urandom | base64 -``` - ----- - -## Encrypted connection - -For security reasons, Semaphore **should not be used** over unencrypted HTTP! - -Why use encrypted connections? See: [Article from Cloudflare](https://www.cloudflare.com/learning/ssl/why-use-https/). - -Options you have: - -* VPN -* SSL - - -## VPN - -You can use a Client-to-Site VPN, that terminates on the Semaphore server, to encrypt & secure the connection. - -## SSL - -Semaphore supports SSL/TLS starting from v2.12. - -**config.json**: -```json -{ - ... - "tsl": { - "enabled": true, - "cert_file": "/path/to/cert/example.com.cert", - "key_file": "/path/to/key/example.com.key" - } - ... -} -``` - -Or environment varibles (useful for Docker): - -```bash -export SEMAPHORE_TLS_ENABLED=True -export SEMAPHORE_TLS_CERT_FILE=/path/to/cert/example.com.cert -export SEMAPHORE_TLS_KEY_FILE=/path/to/key/example.com.key -``` - ---- - -Alternatively, you can use a reverse proxy in front of Semaphore to handle secure connections. For example: - -* [NGINX](./security/nginx.md) -* [Apache](./security/apache.md) - - -### Self-signed SSL certificate - -You can generate your own SSL certificate with using `openssl` CLI tool: - -``` -openssl req -x509 -newkey rsa:4096 \ - -keyout key.pem -out cert.pem \ - -sha256 -days 3650 -nodes \ - -subj "/C=US/ST=California/L=San Francisco/O=CompanyName/OU=DevOps/CN=example.com" -``` - -### Let's Encrypt SSL certificate - -You can use [Certbot](https://certbot.eff.org/) to generate and automatically renew a Let's Encrypt SSL certificate. - -Example for Apache: - -```bash -sudo snap install certbot -sudo certbot --apache -n --agree-tos -d example.com -m mail@example.com -``` - -### Others - -If you want to use any other reverse proxy - make sure to also forward websocket connections on the `/api/ws` route! +* [Database security](./security/database.md) +* [Network security](./security/network.md) \ No newline at end of file diff --git a/src/administration-guide/security/apache.md b/src/administration-guide/security/apache.md index 2819511..4ddf38d 100644 --- a/src/administration-guide/security/apache.md +++ b/src/administration-guide/security/apache.md @@ -1,5 +1,5 @@ diff --git a/src/administration-guide/security/database.md b/src/administration-guide/security/database.md new file mode 100644 index 0000000..e2b81a6 --- /dev/null +++ b/src/administration-guide/security/database.md @@ -0,0 +1,14 @@ + + +# Database security + +## Data encryption + +Sensitive data is stored in the database, in an encrypted form. You should set the configuration option `access_key_encryption` in configuration file to enable Access Keys encryption. It must be generated by command: + +```bash +head -c32 /dev/urandom | base64 \ No newline at end of file diff --git a/src/administration-guide/security/network.md b/src/administration-guide/security/network.md new file mode 100644 index 0000000..d9ca3d1 --- /dev/null +++ b/src/administration-guide/security/network.md @@ -0,0 +1,79 @@ + + +# Network security + +For security reasons, Semaphore **should not be used** over unencrypted HTTP! + +Why use encrypted connections? See: [Article from Cloudflare](https://www.cloudflare.com/learning/ssl/why-use-https/). + +Options you have: + +* [VPN](#vpn) +* [SSL](#ssl) + +--- + +## VPN + +You can use a Client-to-Site VPN, that terminates on the Semaphore server, to encrypt & secure the connection. + +## SSL + +Semaphore supports SSL/TLS starting from v2.12. + +**config.json**: +```json +{ + ... + "tsl": { + "enabled": true, + "cert_file": "/path/to/cert/example.com.cert", + "key_file": "/path/to/key/example.com.key" + } + ... +} +``` + +Or environment varibles (useful for Docker): + +```bash +export SEMAPHORE_TLS_ENABLED=True +export SEMAPHORE_TLS_CERT_FILE=/path/to/cert/example.com.cert +export SEMAPHORE_TLS_KEY_FILE=/path/to/key/example.com.key +``` + +Alternatively, you can use a reverse proxy in front of Semaphore to handle secure connections. For example: + +* [NGINX](./nginx.md) +* [Apache](./apache.md) + + +### Self-signed SSL certificate + +You can generate your own SSL certificate with using `openssl` CLI tool: + +``` +openssl req -x509 -newkey rsa:4096 \ + -keyout key.pem -out cert.pem \ + -sha256 -days 3650 -nodes \ + -subj "/C=US/ST=California/L=San Francisco/O=CompanyName/OU=DevOps/CN=example.com" +``` + +### Let's Encrypt SSL certificate + +You can use [Certbot](https://certbot.eff.org/) to generate and automatically renew a Let's Encrypt SSL certificate. + +Example for Apache: + +```bash +sudo snap install certbot +sudo certbot --apache -n --agree-tos -d example.com -m mail@example.com +``` + +### Others + +If you want to use any other reverse proxy - make sure to also forward websocket connections on the `/api/ws` route! diff --git a/src/administration-guide/security/nginx.md b/src/administration-guide/security/nginx.md index 78d74f8..7d7f97e 100644 --- a/src/administration-guide/security/nginx.md +++ b/src/administration-guide/security/nginx.md @@ -1,5 +1,5 @@ diff --git a/theme/content.css b/theme/content.css index aa39039..ce10a78 100644 --- a/theme/content.css +++ b/theme/content.css @@ -4,4 +4,9 @@ .light .content img { box-shadow: 0 0 3px var(--searchbar-shadow-color); +} + +hr { + border: 0; + border-bottom: 1px solid rgba(150,150,150,0.1); } \ No newline at end of file From 080d184e8c42d26fb3f4390ab91b3bc04d132f89 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Feb 2025 21:07:12 +0500 Subject: [PATCH 052/170] ... --- src/administration-guide/configuration.md | 33 ++++++++++++++------ src/user-guide/environment.md | 37 ++++++++++++----------- 2 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index bf0e2fb..1bcff0a 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -23,12 +23,17 @@ Full list of available configuration options: |
    `postgres.name`
    `SEMAPHORE_DB_NAME`

    | Postgres database (schema) name. | |
    `postgres.user`
    `SEMAPHORE_DB_USER`

    | Postgres user name. | |
    `postgres.pass`
    `SEMAPHORE_DB_PASS`

    | Postgres user's password. | -|
    `dialect`
    `SEMAPHORE_DB_DIALECT`

    | Can be `mysql`, `postgres `or `bolt` | -|
    `port`
    `SEMAPHORE_PORT`

    | TCP port on which the web interface will be available. Default: 3000 | -|
    `interface`
    `SEMAPHORE_INTERFACE`

    | Useful if your server has multiple network interfaces | -|
    `tmp_path`
    `SEMAPHORE_TMP_PATH`

    | Path to directory where cloned repositories and generated files are stored. Default: /tmp/semaphore | +|
    `dialect`
    `SEMAPHORE_DB_DIALECT`

    | Can be `mysql`, `postgres `or `bolt` | +|
    `git_client`
    `SEMAPHORE_GIT_CLIENT`

    | | +|
    `ssh_config_path`
    `SEMAPHORE_SSH_PATH`

    | | +|
    `port`
    `SEMAPHORE_PORT`

    | TCP port on which the web interface will be available. Default: 3000 | +|
    `interface`
    `SEMAPHORE_INTERFACE`

    | Useful if your server has multiple network interfaces | +|
    `tmp_path`
    `SEMAPHORE_TMP_PATH`

    | Path to directory where cloned repositories and generated files are stored. Default: /tmp/semaphore | |
    `access_key_encryption`
    `SEMAPHORE_ACCESS_KEY_ENCRYPTION`

    | Secret key used for encrypting access keys in database. Read more in [Database encryption reference](./security.md#database-encryption). | -|
    `web_host`
    `SEMAPHORE_WEB_ROOT`

    | Can be useful if you want to use Semaphore by the subpath, for example: [http://yourdomain.com/semaphore](http://yourdomain.com/semaphore). Do not add a trailing `/`. | +|
    `web_host`
    `SEMAPHORE_WEB_ROOT`

    | Can be useful if you want to use Semaphore by the subpath, for example: [http://yourdomain.com/semaphore](http://yourdomain.com/semaphore). Do not add a trailing `/`. | +|
    `tls.enabled`
    `SEMAPHORE_TLS_ENABLED`

    | | +|
    `tls.cert_file`
    `SEMAPHORE_TLS_CERT_FILE`

    | | +|
    `tls.key_file`
    `SEMAPHORE_TLS_KEY_FILE`

    | | |
    `email_sender`
    `SEMAPHORE_EMAIL_SENDER`

    | | |
    `email_host`
    `SEMAPHORE_EMAIL_HOST`

    | | |
    `email_port`
    `SEMAPHORE_EMAIL_PORT`

    | | @@ -36,9 +41,11 @@ Full list of available configuration options: |
    `email_username`
    `SEMAPHORE_EMAIL_USERNAME`

    | | |
    `email_password`
    `SEMAPHORE_EMAIL_PASSWORD`

    | | |
    `email_alert`
    `SEMAPHORE_EMAIL_ALERT`

    | | -|
    `telegram_alert`
    `SEMAPHORE_DB_HOST`

    | | -|
    `slack_alert`
    `SEMAPHORE_DB_HOST`

    | Set to True to enable pushing alerts to slack. It should be used in combination with `slack_url` | -|
    `slack_url`
    `SEMAPHORE_DB_HOST`

    | The slack webhook url. Semaphore will used it to POST Slack formatted json alerts to the provided url. | +|
    `telegram_alert`
    `SEMAPHORE_TELEGRAM_ALERT`

    | | +|
    `telegram_chat`
    `SEMAPHORE_TELEGRAM_CHAT`

    | | +|
    `telegram_token`
    `SEMAPHORE_TELEGRAM_TOKEN`

    | | +|
    `slack_alert`
    `SEMAPHORE_SLACK_ALERT`

    | Set to True to enable pushing alerts to slack. It should be used in combination with `slack_url` | +|
    `slack_url`
    `SEMAPHORE_SLACK_URL`

    | The slack webhook url. Semaphore will used it to POST Slack formatted json alerts to the provided url. | |
    `microsoft_teams_alert`
    `SEMAPHORE_MICROSOFT_TEAMS_ALERT`

    | Set to True to enable pushing alerts to teams. It should be used in combination with `microsoft_teams_url`. | |
    `microsoft_teams_url`
    `SEMAPHORE_MICROSOFT_TEAMS_URL`

    | The teams webhook url. Semaphore will used it to POST alerts. | |
    `rocketchat_alert`
    `SEMAPHORE_ROCKETCHAT_ALERT`

    | Set to True to enable pushing alerts to Rocket.Chat. It should be used in combination with `rocketchat_url`. Available since v2.9.56. | @@ -51,9 +58,17 @@ Full list of available configuration options: |
    `ldap_searchdn`
    `SEMAPHORE_LDAP_SEARCH_DN`

    | | |
    `ldap_searchfilter`
    `SEMAPHORE_LDAP_SEARCH_FILTER`

    | | |
    `max_parallel_tasks`
    `SEMAPHORE_MAX_PARALLEL_TASKS`

    | Max allowed parallel tasks for whole Semaphore instance. | +|
    `max_task_duration_sec`
    `SEMAPHORE_MAX_TASK_DURATION_SEC`

    | Max allowed parallel tasks for whole Semaphore instance. | +|
    `max_tasks_per_template`
    `SEMAPHORE_MAX_TASKS_PER_TEMPLATE`

    | Max allowed parallel tasks for whole Semaphore instance. | |
    `oidc_providers` ![Static Badge](https://img.shields.io/badge/v2.10+-red) | OpenID provider settings. You can provide multiple OpenID providers. More about OpenID configuration read in [OpenID](./openid.md).

    | |
    `password_login_disable`
    `SEMAPHORE_PASSWORD_LOGIN_DISABLED`

    ![Static Badge](https://img.shields.io/badge/v2.10+-red)

    | Disable login with using password. Only LDAP and OpenID. | - +|
    `non_admin_can_create_project`
    `SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT`

    | | +|
    `env_vars`
    `SEMAPHORE_ENV_VARS`

    | | +|
    `forwarded_env_vars`
    `SEMAPHORE_FORWARDED_ENV_VARS`

    | | +|
    `apps`
    `SEMAPHORE_APPS`

    | | +|
    `use_remote_runner`
    `SEMAPHORE_USE_REMOTE_RUNNER`

    | | +|
    `use_remote_runner`
    `SEMAPHORE_USE_REMOTE_RUNNER`

    | | +|
    `runner_registration_token`
    `SEMAPHORE_RUNNER_REGISTRATION_TOKEN`

    | | ## Public URL diff --git a/src/user-guide/environment.md b/src/user-guide/environment.md index 778f775..909ebfa 100644 --- a/src/user-guide/environment.md +++ b/src/user-guide/environment.md @@ -1,28 +1,29 @@ -# Environment -The Environment section of Semaphore is a place to store additional variables for an inventory and must be stored in JSON format. -All task templates require an environment to be defined even if it is empty. +# Variable Groups -## Create an Environment -1. Click on the Environment tab. -2. Click on the New Environment button. -3. Name the Environment and type or paste in valid JSON variables. If you just need an empty Environment type in ```{}```. -## Updating an Environment -1. Click on the Environment tab. +The Variable Groups section of Semaphore is a place to store additional variables for an inventory and must be stored in JSON format. + +All task templates require an variable group to be defined even if it is empty. + +## Create an variable group +1. Click on the Variable Group tab. +2. Click on the New Variable Group button. +3. Name the Variable Group and type or paste in valid JSON variables. If you just need an empty Variable Group type in ```{}```. + +## Updating an variable group +1. Click on the Variable Groups tab. 2. Click the pencil icon. 3. Make changes and click save. -## Deleting the Environment -Before you remove an Environment, you must remove all resources tied to it. -If you are not sure which resources are being used in an environment, follow steps 1 and 2 below. It will show you which resources are being used, with links to those resources. - -1. Click on the Environment. -2. Click the trash can icon next to the Environment. -3. Click Yes if you are sure you want to remove the environment. +## Deleting the variable group +Before you remove an variable proup, you must remove all resources tied to it. +If you are not sure which resources are being used in an variable group, follow steps 1 and 2 below. It will show you which resources are being used, with links to those resources. -# Variable Groups +1. Click on the Variable Group. +2. Click the trash can icon next to the Variable Group. +3. Click Yes if you are sure you want to remove the variable group. ## Using Variable Groups - Terraform -When you want utilize a stored environment variable or secret in your terraform template you must prefix the name with `TF_VAR_` for the terraform script to use it. +When you want utilize a stored variable group variable or secret in your terraform template you must prefix the name with `TF_VAR_` for the terraform script to use it. **Example** Passing Hetzner Cloud API key to OpenTofu/Terraform playbook. From 14950d116dd287483c896ae0ba21562839d2e97e Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Feb 2025 23:36:09 +0500 Subject: [PATCH 053/170] ... --- src/SUMMARY.md | 9 ++++----- src/user-guide/admin/subscription.md | 2 +- src/user-guide/task-templates/terraform/states.md | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ee5df90..f0cd119 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -43,15 +43,14 @@ * [History](./user-guide/projects/history.md) * [Activity](./user-guide/projects/activity.md) * [Settings](./user-guide/projects/settings.md) - * [Runners 🅿🆁🅾](./user-guide/projects/runners.md) + * [Runners 🅿](./user-guide/projects/runners.md) * [Task Templates](./user-guide/task-templates/README.md) * [Ansible](./user-guide/task-templates/ansible.md) * [Terraform/OpenTofu](./user-guide/task-templates/terraform/README.md) * [Workspaces](./user-guide/task-templates/terraform/workspaces.md) - * [States 🅿🆁🅾](./user-guide/task-templates/terraform/states.md) + * [States 🅿](./user-guide/task-templates/terraform/states.md) * [Shell/Bash scripts](./user-guide/task-templates/bash.md) * [PowerShell](./user-guide/task-templates/powershell.md) - * [Pulumi](./user-guide/task-templates/pulumi.md) * [Python](./user-guide/task-templates/python.md) * [Tasks](./user-guide/tasks.md) * [Schedules](./user-guide/schedules.md) @@ -66,7 +65,7 @@ * [Users](./user-guide/admin/users.md) * [Runners](./user-guide/admin/runners.md) * [Active Tasks](./user-guide/admin/tasks.md) - * [Subscription 🅿🆁🅾](./user-guide/admin/subscription.md) + * [Subscription 🅿](./user-guide/admin/subscription.md) * [FAQ]() - * [🤯 Troubleshooting](./faq/troubleshooting.md) + * [Troubleshooting](./faq/troubleshooting.md) diff --git a/src/user-guide/admin/subscription.md b/src/user-guide/admin/subscription.md index 4c796fe..a02c8e0 100644 --- a/src/user-guide/admin/subscription.md +++ b/src/user-guide/admin/subscription.md @@ -1 +1 @@ -# Subscription Details 🅿🆁🅾 +# Subscription 🅿 diff --git a/src/user-guide/task-templates/terraform/states.md b/src/user-guide/task-templates/terraform/states.md index 0c94f02..6fe18d3 100644 --- a/src/user-guide/task-templates/terraform/states.md +++ b/src/user-guide/task-templates/terraform/states.md @@ -4,4 +4,4 @@ → States -# States 🅿🆁🅾 +# States 🅿 From f21d36e317db7ac3db740b66614db96b1c44e154 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 1 Mar 2025 02:06:42 +0500 Subject: [PATCH 054/170] ... --- src/administration-guide/configuration.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index 1bcff0a..09b1679 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -69,6 +69,9 @@ Full list of available configuration options: |
    `use_remote_runner`
    `SEMAPHORE_USE_REMOTE_RUNNER`

    | | |
    `use_remote_runner`
    `SEMAPHORE_USE_REMOTE_RUNNER`

    | | |
    `runner_registration_token`
    `SEMAPHORE_RUNNER_REGISTRATION_TOKEN`

    | | +|
    `auth.totp.enabled`
    `SEMAPHORE_TOTP_ENABLED`

    | | +|
    `auth.totp.allow_recovery`
    `SEMAPHORE_TOTP_ALLOW_RECOVERY`

    | | + ## Public URL From b6d8b1a2377bb11795813e8948854856f280972b Mon Sep 17 00:00:00 2001 From: "Kay J." Date: Sat, 8 Mar 2025 16:02:34 +0100 Subject: [PATCH 055/170] Fix TV_VAR_ typo There are some places where it was TV_VAR_* instead of TF_VAR_* --- src/user-guide/environment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user-guide/environment.md b/src/user-guide/environment.md index 909ebfa..e9322d4 100644 --- a/src/user-guide/environment.md +++ b/src/user-guide/environment.md @@ -31,10 +31,10 @@ Passing Hetzner Cloud API key to OpenTofu/Terraform playbook. 1. Click on Variable Group 2. Click `New Group` 3. Click on `Secrets` tab -4. Add `TV_VAR_hcloud_token` and add you `secret` in the hidden field +4. Add `TF_VAR_hcloud_token` and add you `secret` in the hidden field 5. Click Save -We will call our secret `TV_VAR_hcloud_token` as `var.hcloud_token` in +We will call our secret `TF_VAR_hcloud_token` as `var.hcloud_token` in hetzner.tf ``` terraform { From bb48e959defa4d8aab8b6140742be0126c397611 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Mar 2025 00:15:51 +0500 Subject: [PATCH 056/170] ... --- build.sh | 2 +- deploy/roles/build/tasks/main.yml | 4 ++-- src/administration-guide/security/network.md | 2 +- src/user-guide/key-store/gitlab.md | 10 ++++++++++ 4 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 src/user-guide/key-store/gitlab.md diff --git a/build.sh b/build.sh index 3c343d2..20b53c4 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,5 @@ cd deploy -# source ./venv/bin/activate +source ./venv/bin/activate ansible-playbook build.yml \ No newline at end of file diff --git a/deploy/roles/build/tasks/main.yml b/deploy/roles/build/tasks/main.yml index 53ce541..2324e8c 100644 --- a/deploy/roles/build/tasks/main.yml +++ b/deploy/roles/build/tasks/main.yml @@ -18,8 +18,8 @@ - name: Build The Book ansible.builtin.shell: - cmd: . {{ ansible_env.HOME }}/.cargo/env && mdbook build - # cmd: mdbook build + # cmd: . {{ ansible_env.HOME }}/.cargo/env && mdbook build + cmd: mdbook build chdir: "{{ playbook_dir }}/.." creates: "{{ playbook_dir }}/../book/index.html" diff --git a/src/administration-guide/security/network.md b/src/administration-guide/security/network.md index d9ca3d1..627d352 100644 --- a/src/administration-guide/security/network.md +++ b/src/administration-guide/security/network.md @@ -29,7 +29,7 @@ Semaphore supports SSL/TLS starting from v2.12. ```json { ... - "tsl": { + "tls": { "enabled": true, "cert_file": "/path/to/cert/example.com.cert", "key_file": "/path/to/key/example.com.key" diff --git a/src/user-guide/key-store/gitlab.md b/src/user-guide/key-store/gitlab.md new file mode 100644 index 0000000..fd11d16 --- /dev/null +++ b/src/user-guide/key-store/gitlab.md @@ -0,0 +1,10 @@ + + +# GitLab + +## GitLab repository access token + From 159ad09ef2d5db17120fe19b2da4c749df6e8f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20K=C3=A4mmerling?= Date: Sun, 23 Mar 2025 21:41:29 +0100 Subject: [PATCH 057/170] Fix broken link to manual installation in package manager docs --- src/administration-guide/installation/package-manager.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index 8de9fe4..4f192fb 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -9,7 +9,7 @@ Ansible and Git should be installed on your system. -Look into the [manual installation](./installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! +Look into the [manual installation](./../installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! Download package file from [Releases page](https://github.com/semaphoreui/semaphore/releases). @@ -72,4 +72,4 @@ semaphore server --config=./config.json Semaphore will be available via this URL [https://localhost:3000](https://localhost:3000). ----- \ No newline at end of file +---- From e4c0311e36e25a5623b50d7325dc8c2a70165e14 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:22:11 +0500 Subject: [PATCH 058/170] feat: teams --- src/SUMMARY.md | 1 + src/administration-guide/logs.md | 9 ++++ src/user-guide/schedule.md | 0 src/user-guide/team.md | 88 ++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 src/administration-guide/logs.md delete mode 100644 src/user-guide/schedule.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index f0cd119..8816cde 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -37,6 +37,7 @@ * [API](./administration-guide/api.md) * [Pipelines](./administration-guide/cicd.md) * [Runners](./administration-guide/runners.md) + * [Logs](./administration-guide/logs.md) * [User Guide]() * [Projects](./user-guide/projects.md) diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md new file mode 100644 index 0000000..457919f --- /dev/null +++ b/src/administration-guide/logs.md @@ -0,0 +1,9 @@ +# Logs + +Semaphore stores Task and Activity logs in the database. + +# Server log + +# Activity log + +# Task log \ No newline at end of file diff --git a/src/user-guide/schedule.md b/src/user-guide/schedule.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/user-guide/team.md b/src/user-guide/team.md index e69de29..74244f0 100644 --- a/src/user-guide/team.md +++ b/src/user-guide/team.md @@ -0,0 +1,88 @@ +# Teams + +In Semaphore UI, every project is associated with a **Team**. Only team members and admins can access the project. Each member of the team is assigned one of four predefined roles, which govern their level of access and the actions they can perform. + +> **Tip:** To avoid losing access to a project, it’s recommended to have at least two team members with the **Owner** role. + +--- + +## Team Roles + +Every team member has exactly one of these four roles: **Owner**, **Manager**, **Task Runner**, or **Guest**. Below are detailed descriptions of each role and its permissions. + +### Owner + +- **Full permissions:** Owners can do anything within the project, including managing roles, adding/removing members, and configuring any project settings. +- **Multiple wwners:** A project can have multiple Owners, ensuring there is more than one person with full privileges. +- **Restrictions on self-removal:** An Owner cannot remove themselves if they are the only Owner of the project. This prevents the project from being left without an Owner. +- **Managing other wwners:** Owners can manage (including remove or change roles of) all team members, including other Owners. + +### Manager + +- **Broad project control:** Managers have almost the same permissions as Owners, allowing them to handle most day-to-day tasks and manage the project environment. +- **Key restrictions:** Managers **cannot**: + - Remove the project. + - Remove or change the roles of Owners. +- **Typical use case:** Assign the Manager role to senior team members who need extensive access but don’t require the authority to delete the project or manage Owners. + +### Task Runner + +- **Run tasks:** Task Runners can execute any task template that exists within the project. +- **Read-only for other resources:** While they can run tasks, they only have read‐only access to other resources such as inventory, variables, repositories, etc. +- **Typical use case:** Developers or QA engineers who need to trigger and monitor tasks but do not need the ability to modify project settings or manage team membership. + +### Guest + +- **Read-only access:** Guests have read-only access to all project resources (e.g., viewing logs, inventories, dashboards). +- **No write permissions:** They cannot modify settings, run tasks, or change roles. +- **Typical use case:** Stakeholders or other collaborators who only need to view project status and details without making changes. + +--- + +## Managing team members + +- **Inviting new members:** **Owners** and **Managers** can invite new users to join the team and assign them an initial role. +- **Changing roles:** Owners can always change the roles of any team member. Managers can change the roles of **Task Runners** and **Guests**, but **not** other Managers or Owners. +- **Removing members:** Owners and Managers can remove team members with lower roles. + - An Owner can remove anyone (including other Owners), but cannot remove themselves if they are the sole Owner. + - A Manager can remove **Task Runners** and **Guests**, but **not** other Managers or Owners. + +--- + +## Best practices + +1. **Maintain redundancy:** Assign the **Owner** role to at least two people to ensure continuous access and prevent a single point of failure. +2. **Follow principle of least privilege:** + - Give team members the minimum role necessary for their tasks. + - Use **Task Runner** or **Guest** roles for those who only need limited permissions. +3. **Review membership regularly:** + - As team structures change, re‐evaluate roles. + - Revoke access or downgrade roles for users who no longer need high‐level privileges. +4. **Use managers for day-to-day administration:** + - Reserve the Owner role for a smaller group with ultimate authority. + - Delegate routine project management tasks to Managers to reduce the risk of accidental major changes or project deletions. + +--- + +## Frequently asked questions + +**1. Can an Owner remove another Owner?** +Yes, an Owner can remove or change the role of any other Owner, unless they are the only remaining Owner in the project. + +**2. Who can delete the project?** +Only **Owners** can delete a project. + +**3. Can Managers add or remove other Managers?** +No. Managers can only add or remove users with **Task Runner** or **Guest** roles. To manage Owners or other Managers, you must be an Owner. + +**4. What happens if I remove all Owners by accident?** +Semaphore UI prevents the removal of an Owner if it would leave the project with no Owners at all. There must be at least one Owner at all times. + +**5. Can Guests run tasks?** +No. Guests only have read‐only access and cannot trigger or manage tasks. + +--- + +## Conclusion + +Roles in Semaphore UI help you control access and manage permissions within each project. By choosing the appropriate role for every team member and following best practices, you ensure smooth collaboration, secure operations, and straightforward delegation of responsibilities. \ No newline at end of file From 8a77758af00cefa3a8683176a222c3df767c1373 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:22:38 +0500 Subject: [PATCH 059/170] ... --- src/user-guide/team.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user-guide/team.md b/src/user-guide/team.md index 74244f0..4bd86a3 100644 --- a/src/user-guide/team.md +++ b/src/user-guide/team.md @@ -6,7 +6,7 @@ In Semaphore UI, every project is associated with a **Team**. Only team members --- -## Team Roles +## Team roles Every team member has exactly one of these four roles: **Owner**, **Manager**, **Task Runner**, or **Guest**. Below are detailed descriptions of each role and its permissions. From de4fae6017345e9ffb8c5db46f4bc80cba0a5ffc Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:36:04 +0500 Subject: [PATCH 060/170] feat: logs docs --- src/administration-guide/logs.md | 52 ++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index 457919f..5d17100 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -1,9 +1,57 @@ # Logs -Semaphore stores Task and Activity logs in the database. +Semaphore stores Task and Activity logs in the database. +This allows to store all important information in the one place. +You don't need backup any files to prevent data loosing. Only cache stored in file system. # Server log +Semaphore doesn't use files for logging. All logs write to stdout. +If you run Semaphore as Systemd service you can see logs by command: + +``` +journalctl -u semaphore.service -f +``` + # Activity log -# Task log \ No newline at end of file +Activity logs includes all actions of user in the Semaphore: + +- Adding/removing resources like Templates, Inventories, Repositories, etc. +- Adding/removing team members. +- Running/stopping tasks. + +## Pro since 2.10 + +Allows to write Activity log to file. Add following configuration option to your `config.json`: + +```json +{ + "log": { + "events": { + "enabled": true, + "path": "./events.log" + } + } +} +``` + +Each row of the log has following format: + +``` +2024-01-03 12:00:34 user=234234 object=template +``` + +# Task log + +Task logs can be viewed in realtime or from history from web interface. + +You can configure how many tasks will be stored in the database for each template. Use following option for this: +* Environment variable: `SEMAPHORE_MAX_TASKS_PER_TEMPLATE=30` +* `config.json` option: + + ```json + { + "max_tasks_per_template": 30 + } + ``` \ No newline at end of file From f17cb270829e7fc9ea6bcf92c99b09578ff1ce67 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:43:11 +0500 Subject: [PATCH 061/170] ... --- src/administration-guide/logs.md | 89 ++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index 5d17100..069651a 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -1,57 +1,82 @@ # Logs -Semaphore stores Task and Activity logs in the database. -This allows to store all important information in the one place. -You don't need backup any files to prevent data loosing. Only cache stored in file system. +Semaphore writes server logs to **stdout** and stores **Task** and **Activity** logs in a **database**, centralizing key log information and eliminating the need to back up log files separately. The only data stored on the file system is caching data. -# Server log +--- -Semaphore doesn't use files for logging. All logs write to stdout. -If you run Semaphore as Systemd service you can see logs by command: +## Server log -``` +Semaphore does not log to files. Instead, all application logs are written to **stdout**. +If Semaphore is running as a systemd service, you can view the logs with the following command: + +```bash journalctl -u semaphore.service -f ``` -# Activity log +This provides a live (streaming) view of the logs. + +--- + +## Activity log -Activity logs includes all actions of user in the Semaphore: +The Activity Log captures all user actions performed in Semaphore, including: -- Adding/removing resources like Templates, Inventories, Repositories, etc. -- Adding/removing team members. -- Running/stopping tasks. +- Adding or removing resources (e.g., Templates, Inventories, Repositories). +- Adding or removing team members. +- Starting or stopping tasks. -## Pro since 2.10 +### Pro Version 2.10 and Later -Allows to write Activity log to file. Add following configuration option to your `config.json`: +Semaphore Pro 2.10+ supports writing the Activity Log to a file. To enable this, add the following configuration to your `config.json`: ```json { - "log": { - "events": { - "enabled": true, - "path": "./events.log" - } - } + "log": { + "events": { + "enabled": true, + "path": "./events.log" + } + } } ``` -Each row of the log has following format: +Each line in the file follows this format: ``` -2024-01-03 12:00:34 user=234234 object=template +2024-01-03 12:00:34 user=234234 object=template action=delete ``` -# Task log +--- -Task logs can be viewed in realtime or from history from web interface. +## Task log -You can configure how many tasks will be stored in the database for each template. Use following option for this: -* Environment variable: `SEMAPHORE_MAX_TASKS_PER_TEMPLATE=30` -* `config.json` option: +Task Logs detail the execution of tasks in Semaphore. You can view them in real-time or access historical logs through the web interface. - ```json - { - "max_tasks_per_template": 30 - } - ``` \ No newline at end of file +### Configuring task retention + +By default, Semaphore stores all tasks in the database. If you run a large number of tasks, the can occupy a significant amount of disk space. + +You can configure how many tasks are retained per template using one of the following approaches: + +1. **Environment Variable** + ```bash + SEMAPHORE_MAX_TASKS_PER_TEMPLATE=30 + ``` +2. **`config.json` Option** + ```json + { + "max_tasks_per_template": 30 + } + ``` + +When the number of tasks exceeds this limit, the oldest Task Logs are automatically deleted. + +--- + +## Summary + +- **Server log:** Written to stdout; viewable via `journalctl` if running under systemd. +- **Activity log:** Tracks all user actions. Optionally, Pro 2.10+ can write these to a file. +- **Task log:** Stores real-time and historical task execution logs. Retention is configurable per template. + +Following these guidelines ensures you have proper visibility into Semaphore UI operations while controlling storage usage and log retention. \ No newline at end of file From b5dffee0f48a75a603c174e2c41248f7ceb22789 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:43:54 +0500 Subject: [PATCH 062/170] ... --- src/administration-guide/logs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index 069651a..62b7280 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -25,7 +25,7 @@ The Activity Log captures all user actions performed in Semaphore, including: - Adding or removing team members. - Starting or stopping tasks. -### Pro Version 2.10 and Later +### Pro version 2.10 and later Semaphore Pro 2.10+ supports writing the Activity Log to a file. To enable this, add the following configuration to your `config.json`: From 1b0a8e0833875d8a2d64c9b607ed0d2fc484a024 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:47:48 +0500 Subject: [PATCH 063/170] fix: bold title --- theme/header.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/theme/header.css b/theme/header.css index 2dd28dd..068c250 100644 --- a/theme/header.css +++ b/theme/header.css @@ -24,4 +24,8 @@ svg { #disqus_thread > iframe { color-scheme: normal; +} + +.menu-title { + font-weight: bold; } \ No newline at end of file From 42d24eece373c03cb2e75620aa4f0c3d3702ad82 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:48:57 +0500 Subject: [PATCH 064/170] fix: typo --- src/user-guide/team.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user-guide/team.md b/src/user-guide/team.md index 4bd86a3..9faa8a0 100644 --- a/src/user-guide/team.md +++ b/src/user-guide/team.md @@ -13,7 +13,7 @@ Every team member has exactly one of these four roles: **Owner**, **Manager**, * ### Owner - **Full permissions:** Owners can do anything within the project, including managing roles, adding/removing members, and configuring any project settings. -- **Multiple wwners:** A project can have multiple Owners, ensuring there is more than one person with full privileges. +- **Multiple owners:** A project can have multiple Owners, ensuring there is more than one person with full privileges. - **Restrictions on self-removal:** An Owner cannot remove themselves if they are the only Owner of the project. This prevents the project from being left without an Owner. - **Managing other wwners:** Owners can manage (including remove or change roles of) all team members, including other Owners. From 6bdf49fd96c48b3ac5a2bff847f57288939b09c7 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:49:40 +0500 Subject: [PATCH 065/170] fix: typo --- src/user-guide/team.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/user-guide/team.md b/src/user-guide/team.md index 9faa8a0..9e4c177 100644 --- a/src/user-guide/team.md +++ b/src/user-guide/team.md @@ -20,9 +20,11 @@ Every team member has exactly one of these four roles: **Owner**, **Manager**, * ### Manager - **Broad project control:** Managers have almost the same permissions as Owners, allowing them to handle most day-to-day tasks and manage the project environment. -- **Key restrictions:** Managers **cannot**: + +- Managers **cannot**: - Remove the project. - Remove or change the roles of Owners. + - **Typical use case:** Assign the Manager role to senior team members who need extensive access but don’t require the authority to delete the project or manage Owners. ### Task Runner From dd4185073c1b0e86c39ca02d04d477a4979ac6f8 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:52:29 +0500 Subject: [PATCH 066/170] chore: move paragr --- src/user-guide/repositories.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user-guide/repositories.md b/src/user-guide/repositories.md index 91bbcea..a645884 100644 --- a/src/user-guide/repositories.md +++ b/src/user-guide/repositories.md @@ -1,9 +1,9 @@ # Repositories -![](<../.gitbook/assets/repository.webp>) - A Repository is a place to store and manage Ansible content like playbooks and roles. +![](<../.gitbook/assets/repository.webp>) + Semaphore understands Repositories that are: * a local file system (`/path/to/the/repo`) * a local Git repository (`file://`) From f99d66e87970c128a3879dd24c374e73e5179c8e Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:54:12 +0500 Subject: [PATCH 067/170] fix: missed title --- src/user-guide/repositories/bitbucket_access_token.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/user-guide/repositories/bitbucket_access_token.md b/src/user-guide/repositories/bitbucket_access_token.md index 10a05ff..171c480 100644 --- a/src/user-guide/repositories/bitbucket_access_token.md +++ b/src/user-guide/repositories/bitbucket_access_token.md @@ -1,3 +1,5 @@ +# Bitbucket Access Token + You can use a Bitbucket Access Token in Semaphore to access repositories from Bitbucket. First, you need to create an Access Token for your Bitbucket repository with read access permissions. From 1db0fb5a30dd3b1243583e6660dbca093509423d Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:55:06 +0500 Subject: [PATCH 068/170] feat: breadcrumb --- src/user-guide/repositories/bitbucket_access_token.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/user-guide/repositories/bitbucket_access_token.md b/src/user-guide/repositories/bitbucket_access_token.md index 171c480..61be3f7 100644 --- a/src/user-guide/repositories/bitbucket_access_token.md +++ b/src/user-guide/repositories/bitbucket_access_token.md @@ -1,3 +1,8 @@ + + # Bitbucket Access Token You can use a Bitbucket Access Token in Semaphore to access repositories from Bitbucket. From b7b477a85442931a36bd3fb00aae3c2820bc00ae Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:56:15 +0500 Subject: [PATCH 069/170] feat: breadcrumb --- src/user-guide/repositories/bitbucket_access_token.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/user-guide/repositories/bitbucket_access_token.md b/src/user-guide/repositories/bitbucket_access_token.md index 61be3f7..dd73d40 100644 --- a/src/user-guide/repositories/bitbucket_access_token.md +++ b/src/user-guide/repositories/bitbucket_access_token.md @@ -1,5 +1,6 @@ From 1377fe6ca3e856259a6869f44fefdf40250f3859 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 17:57:10 +0500 Subject: [PATCH 070/170] feat: breadcrumb --- src/user-guide/repositories/bitbucket_access_token.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/user-guide/repositories/bitbucket_access_token.md b/src/user-guide/repositories/bitbucket_access_token.md index dd73d40..61be3f7 100644 --- a/src/user-guide/repositories/bitbucket_access_token.md +++ b/src/user-guide/repositories/bitbucket_access_token.md @@ -1,6 +1,5 @@ From 10751d62133f102dbd9684dd14be5f4e886117e8 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:12:31 +0500 Subject: [PATCH 071/170] chore: formatting --- src/administration-guide/installation/binary-file.md | 3 +-- src/administration-guide/installation/cloud.md | 0 src/administration-guide/installation/k8s.md | 0 src/administration-guide/installation/package-manager.md | 3 +-- 4 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 src/administration-guide/installation/cloud.md create mode 100644 src/administration-guide/installation/k8s.md diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index 44a7dfd..6941476 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -6,10 +6,9 @@ # Binary file
    - Ansible and Git should be installed on your system. + Look into the [manual installation](installation_manually.md) on how to set-up your Python/Ansible/Systemd environment!
    -Look into the [manual installation](installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! Download the `*.tar.gz` for your platform from [Releases page](https://github.com/semaphoreui/semaphore/releases). Unpack it and setup Semaphore using the following commands: diff --git a/src/administration-guide/installation/cloud.md b/src/administration-guide/installation/cloud.md new file mode 100644 index 0000000..e69de29 diff --git a/src/administration-guide/installation/k8s.md b/src/administration-guide/installation/k8s.md new file mode 100644 index 0000000..e69de29 diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index 4f192fb..03b3021 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -6,10 +6,9 @@ # Package manager
    - Ansible and Git should be installed on your system. + Look into the [manual installation](./../installation_manually.md) on how to set-up your Python/Ansible/Systemd environment!
    -Look into the [manual installation](./../installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! Download package file from [Releases page](https://github.com/semaphoreui/semaphore/releases). From 7ee60d7d3adbb5ca58c359a17d9e250b3014745c Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:15:55 +0500 Subject: [PATCH 072/170] fix: links --- src/administration-guide/installation/binary-file.md | 2 +- src/administration-guide/installation/package-manager.md | 2 +- theme/content.css | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index 6941476..1bf5e5f 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -6,7 +6,7 @@ # Binary file
    - Look into the [manual installation](installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! + Look into the manual installation on how to set-up your Python/Ansible/Systemd environment!
    diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index 03b3021..dddbe8e 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -6,7 +6,7 @@ # Package manager
    - Look into the [manual installation](./../installation_manually.md) on how to set-up your Python/Ansible/Systemd environment! + Look into the manual installation on how to set-up your Python/Ansible/Systemd environment!
    diff --git a/theme/content.css b/theme/content.css index ce10a78..d7a8b35 100644 --- a/theme/content.css +++ b/theme/content.css @@ -9,4 +9,8 @@ hr { border: 0; border-bottom: 1px solid rgba(150,150,150,0.1); +} + +.warning { + color: var(--warning-border); } \ No newline at end of file From 8a54248382033e4175a8fe5a0bcc20c3d83c1af8 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:17:33 +0500 Subject: [PATCH 073/170] fix: links --- src/administration-guide/installation/binary-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index 1bf5e5f..dc1c482 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -6,7 +6,7 @@ # Binary file
    - Look into the manual installation on how to set-up your Python/Ansible/Systemd environment! + Look into the manual installation on how to set-up your Python/Ansible/Systemd environment!
    From f3904a359bbf10279c1775dd4a137c1c6b46f9a0 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:18:04 +0500 Subject: [PATCH 074/170] chore: update version --- .../installation/binary-file.md | 10 +++---- .../installation/package-manager.md | 16 ++++++------ src/administration-guide/upgrading.md | 26 +++++++++---------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index dc1c482..0b59fef 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -15,9 +15,9 @@ Download the `*.tar.gz` for your platform from [Releases page](https://github.co {{#tabs }} {{#tab name="Linux (x64)" }} ``` -download/v2.12.4/semaphore_2.12.4_linux_amd64.tar.gz +download/v2.12.10/semaphore_2.12.10_linux_amd64.tar.gz -tar xf semaphore_2.12.4_linux_amd64.tar.gz +tar xf semaphore_2.12.10_linux_amd64.tar.gz ./semaphore setup ``` @@ -27,9 +27,9 @@ tar xf semaphore_2.12.4_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_arm64.tar.gz +download/v2.12.10/semaphore_2.12.10_linux_arm64.tar.gz -tar xf semaphore_2.12.4_linux_arm64.tar.gz +tar xf semaphore_2.12.10_linux_arm64.tar.gz ./semaphore setup ``` @@ -39,7 +39,7 @@ tar xf semaphore_2.12.4_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.12.4/semaphore_2.12.4_windows_amd64.zip") ` + "download/v2.12.10/semaphore_2.12.10_windows_amd64.zip") ` -OutFile semaphore.zip diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index dddbe8e..0aa0b29 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -22,36 +22,36 @@ Here are several installation commands, depending on the package manager: {{#tab name="Debian / Ubuntu (x64)"}} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_amd64.deb +download/v2.12.10/semaphore_2.12.10_linux_amd64.deb -sudo dpkg -i semaphore_2.12.4_linux_amd64.deb +sudo dpkg -i semaphore_2.12.10_linux_amd64.deb ``` {{#endtab }} {{#tab name="Debian / Ubuntu (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_arm64.deb +download/v2.12.10/semaphore_2.12.10_linux_arm64.deb -sudo dpkg -i semaphore_2.12.4_linux_arm64.deb +sudo dpkg -i semaphore_2.12.10_linux_arm64.deb ``` {{#endtab }} {{#tab name="CentOS (x64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_amd64.rpm +download/v2.12.10/semaphore_2.12.10_linux_amd64.rpm -sudo yum install semaphore_2.12.4_linux_amd64.rpm +sudo yum install semaphore_2.12.10_linux_amd64.rpm ``` {{#endtab }} {{#tab name="CentOS (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_arm64.rpm +download/v2.12.10/semaphore_2.12.10_linux_arm64.rpm -sudo yum install semaphore_2.12.4_linux_arm64.rpm +sudo yum install semaphore_2.12.10_linux_arm64.rpm ``` {{#endtab }} diff --git a/src/administration-guide/upgrading.md b/src/administration-guide/upgrading.md index 521d19e..4a457ad 100644 --- a/src/administration-guide/upgrading.md +++ b/src/administration-guide/upgrading.md @@ -28,9 +28,9 @@ Install it using the package manager. ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_amd64.deb +download/v2.12.10/semaphore_2.12.10_linux_amd64.deb -sudo dpkg -i semaphore_2.12.4_linux_amd64.deb +sudo dpkg -i semaphore_2.12.10_linux_amd64.deb ``` {{#endtab }} @@ -38,9 +38,9 @@ sudo dpkg -i semaphore_2.12.4_linux_amd64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_arm64.deb +download/v2.12.10/semaphore_2.12.10_linux_arm64.deb -sudo dpkg -i semaphore_2.12.4_linux_arm64.deb +sudo dpkg -i semaphore_2.12.10_linux_arm64.deb ``` {{#endtab }} @@ -48,9 +48,9 @@ sudo dpkg -i semaphore_2.12.4_linux_arm64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_amd64.rpm +download/v2.12.10/semaphore_2.12.10_linux_amd64.rpm -sudo yum install semaphore_2.12.4_linux_amd64.rpm +sudo yum install semaphore_2.12.10_linux_amd64.rpm ``` {{#endtab }} @@ -58,9 +58,9 @@ sudo yum install semaphore_2.12.4_linux_amd64.rpm ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_arm64.rpm +download/v2.12.10/semaphore_2.12.10_linux_arm64.rpm -sudo yum install semaphore_2.12.4_linux_arm64.rpm +sudo yum install semaphore_2.12.10_linux_arm64.rpm ``` {{#endtab }} {{#endtabs }} @@ -80,9 +80,9 @@ Download a `*.tar.gz` for your platform from [Releases page](https://github.com/ ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_amd64.tar.gz +download/v2.12.10/semaphore_2.12.10_linux_amd64.tar.gz -tar xf semaphore_2.12.4_linux_amd64.tar.gz +tar xf semaphore_2.12.10_linux_amd64.tar.gz ``` {{#endtab }} @@ -90,9 +90,9 @@ tar xf semaphore_2.12.4_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.4/semaphore_2.12.4_linux_arm64.tar.gz +download/v2.12.10/semaphore_2.12.10_linux_arm64.tar.gz -tar xf semaphore_2.12.4_linux_arm64.tar.gz +tar xf semaphore_2.12.10_linux_arm64.tar.gz ``` {{#endtab }} @@ -100,7 +100,7 @@ tar xf semaphore_2.12.4_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.12.4/semaphore_2.12.4_windows_amd64.zip") ` + "download/v2.12.10/semaphore_2.12.10_windows_amd64.zip") ` -OutFile semaphore.zip Expand-Archive -Path semaphore.zip -DestinationPath ./ From 4913ed6838e84764098120a1fd1fe76feb78a610 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:19:04 +0500 Subject: [PATCH 075/170] chore: update version --- src/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 8816cde..bd06f2b 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -8,7 +8,7 @@ * [Docker](./administration-guide/installation/docker.md) * [Binary file](./administration-guide/installation/binary-file.md) * [Snap (deprecated)](./administration-guide/installation/snap.md) - * [Manual Installation](./administration-guide/installation\_manually.md) + * [Manual Installation](./administration-guide/installation\_manually.md) * [Configuration](./administration-guide/configuration.md) * [Configuration file](./administration-guide/configuration/config-file.md) * [Envrioment variables](./administration-guide/configuration/env-vars.md) From 9409ce04bf3ba0444a3d643a3eb70c83b0a3b437 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:24:14 +0500 Subject: [PATCH 076/170] chore: update version --- src/administration-guide/cli/runners.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/administration-guide/cli/runners.md b/src/administration-guide/cli/runners.md index b6264ee..2f893f5 100644 --- a/src/administration-guide/cli/runners.md +++ b/src/administration-guide/cli/runners.md @@ -4,3 +4,5 @@ # Runners + +We have separate section for [Runners](./runners.md). \ No newline at end of file From 11214a98edfff51cd40ec902280c54a4c35fc401 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:25:30 +0500 Subject: [PATCH 077/170] fix: link to runners --- src/administration-guide/cli/runners.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/cli/runners.md b/src/administration-guide/cli/runners.md index 2f893f5..a719ff5 100644 --- a/src/administration-guide/cli/runners.md +++ b/src/administration-guide/cli/runners.md @@ -5,4 +5,4 @@ # Runners -We have separate section for [Runners](./runners.md). \ No newline at end of file +We have separate section for [Runners](./../runners.md). \ No newline at end of file From dd7b3676c2c4e73b624f719ce2c745cbca88e8e9 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:40:14 +0500 Subject: [PATCH 078/170] chore: docs for log --- src/administration-guide/logs.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index 62b7280..786faa0 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -40,6 +40,13 @@ Semaphore Pro 2.10+ supports writing the Activity Log to a file. To enable this, } ``` +Or you can do this using following environment variables: + +```bash +export SEMAPHORE_EVENT_LOG_ENABLED=True +export SEMAPHORE_EVENT_LOG_PATH=./events.log +``` + Each line in the file follows this format: ``` From 5f73a4f2fbc226a16c836dce08a32c5120c96f04 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:47:20 +0500 Subject: [PATCH 079/170] chore: remove upgrade section --- src/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index bd06f2b..620701f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -14,7 +14,7 @@ * [Envrioment variables](./administration-guide/configuration/env-vars.md) * [Interactive setup](./administration-guide/configuration/cli.md) * [Snap configuration](./administration-guide/configuration/snap.md) - * [Upgrading](./administration-guide/upgrading.md) + * [Security](./administration-guide/security.md) * [Database security](./administration-guide/security/database.md) * [Network security](./administration-guide/security/network.md) From f13af1027e71f7f78c0b9fd75be78d755e55224e Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 18:48:35 +0500 Subject: [PATCH 080/170] chore: remove upgrade section --- src/SUMMARY.md | 2 +- src/administration-guide/cli/runners.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 620701f..bd06f2b 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -14,7 +14,7 @@ * [Envrioment variables](./administration-guide/configuration/env-vars.md) * [Interactive setup](./administration-guide/configuration/cli.md) * [Snap configuration](./administration-guide/configuration/snap.md) - + * [Upgrading](./administration-guide/upgrading.md) * [Security](./administration-guide/security.md) * [Database security](./administration-guide/security/database.md) * [Network security](./administration-guide/security/network.md) diff --git a/src/administration-guide/cli/runners.md b/src/administration-guide/cli/runners.md index a719ff5..9f4b967 100644 --- a/src/administration-guide/cli/runners.md +++ b/src/administration-guide/cli/runners.md @@ -5,4 +5,6 @@ # Runners -We have separate section for [Runners](./../runners.md). \ No newline at end of file +
    + We have separate section for Runners. +
    \ No newline at end of file From bddd1e01416ac468f74e0e2d801169077f326956 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 19:13:51 +0500 Subject: [PATCH 081/170] fix: landing page --- src/README.md | 46 ++-------------------------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/src/README.md b/src/README.md index 16e659a..62904e2 100644 --- a/src/README.md +++ b/src/README.md @@ -23,45 +23,6 @@ With Semaphore you can: * Delegate other users the running of playbooks * Get notifications about playbook runs -## Development roadmap - -We are developing Semaphore according to the [roadmap](https://github.com/orgs/semaphoreui/projects/11). - - -```mermaid -gantt - title Project Timeline - dateFormat YYYY-MM-DD - - section Done - Charts :des1, 2024-12-04, 2024-12-21 - Terraform Backend 🅿🆁🅾 :des2, 2024-12-04, 2024-12-21 - - section In Progress - Support SSL :des3, 2024-12-22, 2024-12-22 - - section Todo - Two step authentication :des4, 2024-12-23, 2024-12-25 - Ansible Template: Limits and Tags :des5, 2024-12-27, 2024-12-30 - Custom Templates and import/export templates :des6, 2024-12-29, 2025-01-02 - Pulumi Templates 🅿🆁🅾 :des7, 2024-12-22, 2024-12-28 - Allow multiple Variable Groups for a Template :des8, 2025-01-03, 2025-01-04 - Export logs to external system 🅿🆁🅾 :des9, 2025-01-05, 2025-01-12 - Allow to use user owned SSH key / Shared keys :des10, 2024-12-26, 2024-12-26 - - section Undefined - Ansible Template: Support Ansible Lint :des11, after des10, 1d - LDAP auto login :des12, after des11, 1d - Ansible Template: Task Slicing 🅿🆁🅾 :des13, after des12, 1d - Ansible Inventory: Apps :des14, after des13, 1d - Ansible Inventory: Monitoring 🅿🆁🅾 :des15, after des14, 1d - Ansible Template: Support Mitogen :des16, after des15, 1d - Docker Stack Templates 🅿🆁🅾 :des17, after des16, 1d - Refactor authentication system :des18, after des17, 1d - HashiCorp Vault Support 🅿🆁🅾 :des19, after des18, 1d - Create official Helm Chart :des20, after des19, 1d -``` - ## Links * Source code: [https://github.com/semaphoreui/semaphore](https://github.com/semaphoreui/semaphore) @@ -72,10 +33,7 @@ gantt * Docker container configurator: [![](https://img.shields.io/badge/docker_configurator-0050ab?style=for-the-badge&logo=docker)](https://semaphoreui.com/install/docker/) -* Our responsive community: - [![discord](https://img.shields.io/badge/discord_community-510b80?style=for-the-badge&logo=discord)](https://discord.gg/5R6k7hNGcH) - -* Every day we add new features, fix bugs, support the community. We need your support: +* Our responsive community: - [![sponsor](https://img.shields.io/badge/become_a_sponsor-d9c7ff?style=for-the-badge&logo=github-sponsors)](https://github.com/sponsors/semaphoreui) [![ko-fi](https://img.shields.io/badge/buy_me_a_coffee-0ba0e0?style=for-the-badge&logo=kofi)](https://ko-fi.com/fiftin) [![patreon](https://img.shields.io/badge/become_a_patreon-teal?style=for-the-badge&logo=patreon)](https://www.patreon.com/semaphoreui) \ No newline at end of file + [![discord](https://img.shields.io/badge/discord_community-510b80?style=for-the-badge&logo=discord)](https://discord.gg/5R6k7hNGcH) \ No newline at end of file From 219038d9488ced17ed384600efdc8418aff99c19 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 19:17:01 +0500 Subject: [PATCH 082/170] chore: text --- src/README.md | 6 ++++-- src/SUMMARY.md | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/README.md b/src/README.md index 62904e2..6d7877a 100644 --- a/src/README.md +++ b/src/README.md @@ -1,6 +1,8 @@ -# Introduction +# Welcome to Semaphore UI -Semaphore is a responsive web UI for running Ansible playbooks, Terraform/OpenTofu and Pulumi code. +## What is Semaphore UI? + +Modern UI and powerful API for Ansible, Terraform, OpenTofu, PowerShell and other DevOps tools. diff --git a/src/SUMMARY.md b/src/SUMMARY.md index bd06f2b..92126b1 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -1,6 +1,6 @@ # Table of contents -* [Introduction](./README.md) +* [Welcome to Semaphore UI](./README.md) * [Admin Guide]() * [Installation](./administration-guide/installation.md) From d969d86007eca4cf4c343a1425cd90d0b15cd1e0 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 19:23:54 +0500 Subject: [PATCH 083/170] chore: logo --- book.toml | 2 +- src/.gitbook/assets/semaphore700.png | Bin 0 -> 22766 bytes src/README.md | 2 +- theme/header.css | 5 ++++- 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 src/.gitbook/assets/semaphore700.png diff --git a/book.toml b/book.toml index 6556306..ae88584 100644 --- a/book.toml +++ b/book.toml @@ -3,7 +3,7 @@ authors = ["Denis Gukov"] language = "en" multilingual = false src = "src" -title = "Semaphore Docs" +title = "" [preprocessor.tabs] diff --git a/src/.gitbook/assets/semaphore700.png b/src/.gitbook/assets/semaphore700.png new file mode 100644 index 0000000000000000000000000000000000000000..9052af6a0e760a3779a71dceaf1772f05124ed55 GIT binary patch literal 22766 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 TWrTVBH;j_Jnq0N4Y1sb(_ZcxX literal 0 HcmV?d00001 diff --git a/src/README.md b/src/README.md index 6d7877a..9629b3f 100644 --- a/src/README.md +++ b/src/README.md @@ -2,7 +2,7 @@ ## What is Semaphore UI? -Modern UI and powerful API for Ansible, Terraform, OpenTofu, PowerShell and other DevOps tools. +Semaphore UI is a modern UI and powerful API for Ansible, Terraform, OpenTofu, PowerShell and other DevOps tools. diff --git a/theme/header.css b/theme/header.css index 068c250..b4db1cf 100644 --- a/theme/header.css +++ b/theme/header.css @@ -27,5 +27,8 @@ svg { } .menu-title { - font-weight: bold; + background-image: url(.gitbook/assets/semaphore700.png); + background-position: center; + background-repeat: no-repeat; + background-size: contain; } \ No newline at end of file From 382983f67f5ad4f5cc4c146de1fb9fe03a1235a3 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 20:07:18 +0500 Subject: [PATCH 084/170] feat: semaphroe docs logo --- src/.gitbook/assets/semaphore-docs.png | Bin 0 -> 8187 bytes theme/header.css | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 src/.gitbook/assets/semaphore-docs.png diff --git a/src/.gitbook/assets/semaphore-docs.png b/src/.gitbook/assets/semaphore-docs.png new file mode 100644 index 0000000000000000000000000000000000000000..13ae18d5e5f585ba9d48fa43c17372ebbdd560f9 GIT binary patch literal 8187 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

    N#tLH!^hyli0Dh;mv~_>3J@(5f!G z-$aCwFl=Zfm*oZ?0Utri4eFms=}t=9G0;Q{!wv#1X)_WqE)Uv(U~+425ung*{^i7L z<&o)U)J2S{Bbu4C&Z<}^+8d6H8cz8zq)(;qvT`1m}G2trakjcdr-}iuq0t3ucK(xHSXrw&I)-cO@S2w*Gm?SMYczx39h& zu`aZS`sSO+1#jZ445HI?4^T)oLlOuGE^BZt35=CHsoSkEc4X1DNDYA|+OoKd=Y443 zHQq&0jGB39+e+eR^81W?kHoqfiJtzjzs-V{FJsNU{}~%UrJ}{m-%N-b#V`{V1TB_y|;R3&cvnI$|MbV#{1)ze?Ti|KyO1vy-*qDIOZsw z_t%IkGCLbg&|xkOqbWyx6Ss`76~Wfn2YuzyzQ?&>8JfO`wt}AMN&?-RyDRbVC1h;d z#{TwasXVzI6@JtBWr>H1^idzPuQyBmia86r?``7yE26y9>;(G*_&wR1nyJO>C2Fi@ z=ZvT(+suZCQ!`cF2M+L~KAf7gc-5EpKNQ&RprLJX^X(loEkZNgHDktY5;B~H3t(%6 zuK!TPUH_0*x6n^^H!sTXb3FxqPi)M2d|&dU#JoZgm&SnJvpfRc+kzRaCt$%-g`Pbm zSoFW}Pzn}d|3o5C!Cn)rK(j3JL2JJCjm5p-KGI}x=(3Y2F+MitdoiaMZN?{;<*Hyy zn7iZNy-3)(fg@~(F{~j6CnYTHi%xJ-Wy7bz1~PTzN6y4LZqEe~dOaK8p^Nw?iKNn_ zP+rJ+#dwS9$#-(E&hO=Is2qOJ?MH`wN|?@YLhY}#*~d-B&V7)(tw1y{Ma z4LMz?jmMD$KW?(6Wx@xr;6&rRnF5CUZ{C@48gr%(xSP1fzwzIidggvX)MQi+X^J{q zdCmP~cmgiU1Tsth{0O75KcRKl{5;tk`Qx6l1~-)) z7z0tS;#0n$xITEWaWgxNe^LcHy)TDJ#odjqZ%+rH+8x}#eGX_D(up>ZxVZf=u|7~A zdbZ3oF0emB_nLhS{K@yViYQkn!-R(PWyY!0ms3Xik#7p+8_OdnEjGy_(qYzg&ra48 zs?%g@DV^#}yv4`UUi&e>y<+s%Wl_Ap30EL*#bcXt+L8i3F>Rb(f?5aH{GPUyf2lIl z#u0Q^Nc{uNLLj52(}l_VoXG8N4W$i^a@}mYcmLQB>*I>eEv&}nSrid}nvYu6^hEKy zvT3(}@G3+hrVQeQ-Fkj~7(aDr{cgj#00Wk{pR4c>rMW?=@@~ME$UOZW)ced(qbHI? z2i$@btko-Se;?4}pKhTJaCC1_*XFj*D8{!D-)H>E{8;cIH0Fx!FFwNov2}K}8-l*I za9E1ZX>q{0RjLj1$0LnvWNEB2iJkw-sB%-IFFUkFHxtr452f;^;a42eD}NoYfJ_a#~Fzbs5Hu~zwX9%is$lj)Ro9t%&CYE~|P-eUI8 zC~uO2MQt6J5;}R)(4{qdUQcT0G>iFHg000LeCzMUukVOOZP3=Q+zX}zYbUxQXy68DS+bH1lfb} zxjyIjrfNG!zHSjt643N_08@fO`NA(@?0Bw+Q Date: Tue, 8 Apr 2025 20:22:45 +0500 Subject: [PATCH 085/170] feat: add logo --- ...maphore-docs.png => semaphore-docs-dark.png} | Bin src/.gitbook/assets/semaphore-docs-light.png | Bin 0 -> 12510 bytes src/.gitbook/assets/semaphore700.png | Bin 22766 -> 0 bytes theme/header.css | 12 +++++++++++- 4 files changed, 11 insertions(+), 1 deletion(-) rename src/.gitbook/assets/{semaphore-docs.png => semaphore-docs-dark.png} (100%) create mode 100644 src/.gitbook/assets/semaphore-docs-light.png delete mode 100644 src/.gitbook/assets/semaphore700.png diff --git a/src/.gitbook/assets/semaphore-docs.png b/src/.gitbook/assets/semaphore-docs-dark.png similarity index 100% rename from src/.gitbook/assets/semaphore-docs.png rename to src/.gitbook/assets/semaphore-docs-dark.png diff --git a/src/.gitbook/assets/semaphore-docs-light.png b/src/.gitbook/assets/semaphore-docs-light.png new file mode 100644 index 0000000000000000000000000000000000000000..7db57e1af6de894cd1aa71ca6b2989067360af2e GIT binary patch literal 12510 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 TWrTVBH;j_Jnq0N4Y1sb(_ZcxX diff --git a/theme/header.css b/theme/header.css index a10f38a..01425f0 100644 --- a/theme/header.css +++ b/theme/header.css @@ -27,8 +27,18 @@ svg { } .menu-title { - background-image: url(/.gitbook/assets/semaphore-docs.png); background-position: center; background-repeat: no-repeat; background-size: 300px; +} + +.light .menu-title, +.rust .menu-title { + background-image: url(/.gitbook/assets/semaphore-docs-light.png); +} + +.coal .menu-title, +.navy .menu-title, +.ayu .menu-title { + background-image: url(/.gitbook/assets/semaphore-docs-dark.png); } \ No newline at end of file From 3cc9a8e7a347ebeabdc05df6d50b9377b2bd71b5 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 20:30:22 +0500 Subject: [PATCH 086/170] chore: logo size --- theme/header.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/header.css b/theme/header.css index 01425f0..50875ff 100644 --- a/theme/header.css +++ b/theme/header.css @@ -29,7 +29,7 @@ svg { .menu-title { background-position: center; background-repeat: no-repeat; - background-size: 300px; + background-size: 250px; } .light .menu-title, From 6d1ac2f1723dc29145fdf9d3fd08f19e8535743f Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 8 Apr 2025 23:28:38 +0500 Subject: [PATCH 087/170] feat: add logo --- src/.gitbook/assets/semaphore-docs-dark.png | Bin 8187 -> 8785 bytes src/.gitbook/assets/semaphore-docs-light.png | Bin 12510 -> 9413 bytes theme/header.css | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/.gitbook/assets/semaphore-docs-dark.png b/src/.gitbook/assets/semaphore-docs-dark.png index 13ae18d5e5f585ba9d48fa43c17372ebbdd560f9..89ab5681237cf478194d012550e7ac9a51eea7a6 100644 GIT binary patch literal 8785 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 Hu0mjf&jY1+ literal 8187 zcmXAuby!qS7sv0?DGf`*x)RbUAt?(iT@p(-{D7rPLQ=ZBLqa5^L_m-dmQE$4mIgr@ z0SRAU{o}?n=gvLfbLPyQXYMCPOGAm6fQ|qF0AjeZf(`&+!2jIC@o@f}Ihh+7|6K6h zl#M(AfL{9l2MGP*sN_#0tryJDOV`!T%h%Gw7V!1;<#j|ld0Jb#+48!2*ykNSr2_!w zXt;u$o?rftf`I(zwr!}F0d_)tL_)IsVM`HMWX&C^>=(+9zD`Zo=sG^RF!bP_)=kg+ z)-O1c=v{xX{V4S_kt(ct2L7eFBa;S00fwbbhMR4PM7G9bjA)F>g z&+Y=Z!v&q*T{Qkg9Nh#IIn^0*Lu^k0I^YWkJYGZxJii^nNXR=3z z3Z_j7(8*~g~ygj057r+UxO_X%j3Y%k*&p4`v^j^f4aY*nnaUx|JND)19kr#DIs*X5zl zF|&y*o^B*P4n+Vnpm@xBT3P#9Or8G=v$Y^IfF|J7%Y;}a4s7Hq0u` zKf4uIst3S!f}+|0jba?*RNQm{7U7td8wu~px)tpPIAcpWVoM{e9;TiGb`tSYxtM4M z!1d?#vM8VmT6$2-x9zPs{q~$8WX`Hk_5Zm@m($2tI}riwB*~SZ1JZDINf`_)+Ct6&nk2V%40L@*>HFM=}(4G!A0U} zJTglCB0^s`IawGKDr}x*S>2JmyPGL&vL}S|B)e z(odzTRO?@|@N{`o*~-0^AtA21-0*n}3)YaI5vVNzvs(E7`wKR6Qo$cOz*XXy02jBEnMW7kKO?rPurQVRzEN78(vr0K2LVM17!+jG(IrHjmCF%(|$$MFEl-y7{z8aG4tD*bKo{S>O8tH>3cV z1+E^3pdxqPf{vL0SNphv7u3owIL9m$2uc%usBrpLk+{CA1As;~W%tb}e8~|+&Fnq4rn0j>d zLNa6wD8xC=qHGLS2R}e#0xQ^P#ZTsukd>L*f;Y6C*{sxs{h|LW`e$ zUBRgNeu4LHhs!CwhNXU(l6JxZ=@ps#cV?ele=zLK#&7R1p!E88+LF=l2Tn{+SBjoK z^MBzd^X=;XYT#)A#8EE{lVMPAI%o*<3JY_dgeIa(%%^>$CZ$ zzpRAojQJj@QnJYfhE81Y0VV_%ANvI2G2BE$k^r&PI5;IX@Dlr&E3ryw;9|88CK62y z+*2Qalo;1EFDnLxEbabLNmJfE&Y&y-&Yq{*cgYR=R^$8%`(N7>jUpRW@wbI=8nx6kjI_gQ}y+) z@>l`cKVR)I5?RxD5V768J}5KU2*~s>upOZT2*q;d-GoDauNAf2rVxfWe!aly(QqeY zx7Sh*r0Sj{;zH5nD7(2Y*a*;fzvFB#bH;HaIQqy#0hkb@gQ$yK${mcyf4|I3vj?YQ zi>pArb?|;{713y$d>iGv1M1cHqH`);9v-_OJl+5oenHXYyJ4c$EP3`6js}n-?&@tdRDA+aCek#cukcRCe7~VQI zNJ+fPDyQi#;y9P#5(|d!tvkyyhO`B~s^*bCni^M697!0mSwYcKukQK8{K}IFDq_}x%y6AhUWuc5Y^K2{u-ugbK@1g zQezC^x)!J5G5#hVvut-v8>8HwmgdCN%?AqP9su*9ZHN)>$PXRA$8PVP5htTtQnB=0 zS3I$cqCL34kdRIMR~2~I{AE!&GEv(RdFBA5k0`bA~voF zWmNc35qGoQ5bC7Cupuiocg`PIlfHbesEkPMjKLV{M|{Oa&$U@KT;UAh+Vnty)nbeX zrIB^H(8ZL9hGn@fapQ`qox{g(f^maxbf%uD z8@3-1W^$IUm3Du3gz^E{J)iJCQh~Z~81d2VQV01Co-{e)=P z76S&_4kh_4M%H79;m;zN&zC8V?2sz-o;SfuZ)lFl{xfTx$jOy04p2wfNPUWqu)g=r zD~eK!mU($EfG$;Kme8YP*q^n}BV|mUB}b4?E)=WoBXdi36x-xo{%0v?!fVs#3I|o3 z*vP`z=ZWmroC$i@)7`s|rH_qTv71_DERq-DVH*VbcwIv*)5e%=6{`YuioJLU<_h}6 zg@~u7L}`o#?=tnF2Ha@K_b?Ltr0T8G<=x%(@C08xYss>}*%P+S*EoK<@@` z%hJUYA;wNeJiXZ8IMxLwHV@hhZ*m>*0|nPxr@U&j5sU46_xyK>Bv@|v8^I>W?rVWM zL}c)yC(6pZHVcts9k>)?DCNUviB{)s?Ni~|kmLW-XC}JudN%m} zF1+3&nlhwuH=#292=_Dl=I|B&S?WnAeYd&^iRy_Uc<1=OIo-}`N9awGo^4Jo=G*>f z@;X{+5W*C%baeLWFFYv!@!fyzLVP8N6-dY7Njyz#X#vE!O4B0fA&)U3_Rcln>vlV+>Y)f6*IYxczJi#4p*nwlM1t;utUq}Ql_Epo9c7`|aK7;I1ngB#1~p8&v$!$% z2ua-`5Ahbo7A7p--ry2*^S=h=_f0>j=KDWVyp*Nd|+qE>Q4l~rz- z31pIm&QVG5kDY(@6 zE^pW^2Fs$}qHc$c2z@y$AvNWxk)ja!kYEYN!q;rV`@Y@Sb!4+Pjl1`sId`N`|Wk+E1b1*NzjHcr1y43o&@t=6>AB*u0iy9lZV?OYf~TdysHbA#=@ zIq&AUv`bw%OU5)NS`G6y`LR*7SQ;X^@g?!?;bFdoSnb zEQwkD$cr%2fyX*mvjV08t$VBUAna8*`MoF=d?WRz6b3T~=b4!HVX;MHf>H_=)(YLp z4Fmfa%xeVhi}s8}!Q9i(u=sBU0Ui1}dV+W~0!-6_gmYLIGz29Ut?1U`Bz*;41hF*x z@^hsI%x+C=l+=+0(;)s#i-B>pU=>SH+?s!%!&(6SBYxGCQGpNmhZk~`ANC!VQ%HqT z%7`K_{IINWzi+3W<-!EZC;Ja|wnp|S5KeF9Yxq-%wnTBCPlj{o)Tj=gEL@ZF{9um$ zE|wapj9_=8ideJSLB^{4|8C`ee>KWaPyt&?SnkWl!GBGwOdn}p-1_ADWf8`vC4orV z`F&erO+;$H{I|vbVr0{^TSkr_j;5Oq6KC#deuR6zlnp71FpiKkHhBNCj%r-#?!or( zQ16O&SEJbFojg~RBaQ*M(z8%Nj@*~JSuVdHq36_=XkukJ7Ux&?GwK}=Os3DH( z@Kqjq4@$MJ*Wwc2ALT(QIm>HVxA`XnDAZq@3-g<170tjR_h_Dl5xN+z9h+DxuQx~# zb6a5Mn92EoG1#2xdmmr5DdRk3T^h(7yPbv3w~TP%Le(f36~Mxzva*OZl{+9qmoq+l_M)`5Y&Kky;@ zw=GITUhZ5HNwFxUmtos$9#Bam8f0f^n2mgf#<-;y?PsZ0Svnz(gptQP&wB*w{=2%u zwp9|)0pkiL_N-Q7h>fmGFfF!D8IAivWLQ~vLMc!;YZ!2droe!hWCU%h=!QJO>_IS{ zxkj8(h79VI&brn8Xl%wb*(Y+fAP~P!nA9N-(?kkBlUJhrtyk|xlJQGN&X8Y08z@Y{ zihz+?2+y5rMkhAf>{m5-Mq}bZwOsLMUIZQ%HJYFo4^qWj97oQ@@Q+%a;t~(zb z3OT~V@nC07M!zBOB;SdZZ@i%|(rWvyqOhLnandm$FtNzO*yK{p1ecRqG;Gju&P(XZ z)G`@f1%D3WXv!S7cbAO;Qd@J-ES_S#Is&dAb5f&ay9AVv%n`4$6XG8&Z=y}2Fu~?q zx;*0QvrTpbzHLG$1Jfff4=!rBJOW->kDlK9H48nuvcO?O4Uy(EA774vUb?D~%%tpi zP8X`iS<;;d^U`z*(`d!?zm5Gm8HJH5>`em^Rc9p%_f^wz>B@frG-0DUo!t*T${d%r zC>d#?(we=o9h^pwK>5gRrKnR^btpL1nZr`C%ukxqt*HX?^2{q zpgF_-UdeUxiiG2o64@qxNjm`<8^wHN@TGK1ak73KHcj!GG<73mez$XO z`(cHQpSY7(S%Lc2+H_f71-;^9mWc+n7s`tTW{k)2a50T++dW9FgbUY+e#Mv)cEL-c zKYO`aUUs}%5Uu01BpPAxyZ0>Xt)pt&*-}7oAHms%*qq6ZAxlqpyT}AY)KM%gef>1o z4OxJ6P^aUqG3$DQ{&Y!TjmIv=y=bYzS6kF&Ki0a~YLqg$n?u5-ji-kp#c51=E5-_` z|1eln=S%;^06*3x1xM|$oN8a@8XdX(I)7{2o#Ui+l0d&70cVrDH6YA8Zr>IR_aR}D z5qX1m7Z4}#9AmnX$$)ODi!hS6y^^SUj6D>t^|NhMAHin$+IdNhNk{ggg3s~AhnI;J(gZ!@p@?x0O8!HBh65m zz1;Gf6>m2{<8XP%rIV&V4$P~cv?9Lwp3kh)^*Wbg*jlaY{n$J$!GSP`Ie+5E6Mr(4 zh>md4nnj>!d})rc&Veftjl3gCqrH`$%y{l%#O$dyk+ihLW;O!_D=&pvK*Mn>^txJ3 zZH7EE2;XTlh{2krsD+3M2oEf;`!%E%oI~!uqrPJbH73a`+H{tkhICvI-<)dmnb+-%ylR*!S2k#^JsiOW%k4O_Q`b2Fua z8N8|3qu`856@%xqlvj7A55+`L2=}6jEjJNsweMH?MOxdvZ4hX{lXxV7tE0&2R6PCS zfPH(x?1jXqycq^+Ngi9STC-H}7q<3}xzp8I4b@49@ew6Dn*$Lg!$q@g0rDg{#%Dri zrOFE$Ppo9-5`(U#)NJd2@kJsBVjdC4uPXEe`YM!$eeS*dug)+qsIwrq#27k}b#IZo z@$;DZ((RQ1?{eb)VYb#7Z1SDcg?U@?eJBY+geE&J2Z!EvyaNIWwlqH+Hpzos^4|

    N#tLH!^hyli0Dh;mv~_>3J@(5f!G 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 Date: Sun, 13 Apr 2025 21:08:21 +0100 Subject: [PATCH 088/170] Docker Secrets recommendation This is per this issue thread https://github.com/semaphoreui/semaphore/issues/1268 , that states `_FILE` support exists in the code, but isn't stated in any documentation. --- src/administration-guide/installation/docker.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/administration-guide/installation/docker.md b/src/administration-guide/installation/docker.md index 63b8daa..a913921 100644 --- a/src/administration-guide/installation/docker.md +++ b/src/administration-guide/installation/docker.md @@ -72,6 +72,8 @@ You must specify following confidential variables: * `SEMAPHORE_ADMIN_PASSWORD` — password for the Semaphore's admin user. * `SEMAPHORE_ACCESS_KEY_ENCRYPTION` — key for encrypting access keys in database. It must be generated by using the following command: `head -c32 /dev/urandom | base64`. +If you are using Docker Swarm, it is strongly recommended that you don't embed credentials directly in the Compose file (nor in environment variables generally) and instead use [Docker Secrets](https://docs.docker.com/engine/swarm/secrets/). Semaphore [supports](https://github.com/semaphoreui/semaphore/issues/1268) a common Docker container pattern for retrieving settings from files instead of the environment by appending `_FILE` to the end of the environment variable name. See the [Docker documentation for an example](https://docs.docker.com/engine/swarm/secrets/#use-secrets-in-compose). + Run the following command to start Semaphore with configured database (MySQL or Postgres): From 04906cc1d514695f71cacb4bf2608e6981d87b53 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 13 Apr 2025 21:13:54 +0100 Subject: [PATCH 089/170] Docker compose - secrets example https://github.com/semaphoreui/semaphore/issues/1268 --- .../installation/docker.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/administration-guide/installation/docker.md b/src/administration-guide/installation/docker.md index a913921..043cd45 100644 --- a/src/administration-guide/installation/docker.md +++ b/src/administration-guide/installation/docker.md @@ -74,6 +74,25 @@ You must specify following confidential variables: If you are using Docker Swarm, it is strongly recommended that you don't embed credentials directly in the Compose file (nor in environment variables generally) and instead use [Docker Secrets](https://docs.docker.com/engine/swarm/secrets/). Semaphore [supports](https://github.com/semaphoreui/semaphore/issues/1268) a common Docker container pattern for retrieving settings from files instead of the environment by appending `_FILE` to the end of the environment variable name. See the [Docker documentation for an example](https://docs.docker.com/engine/swarm/secrets/#use-secrets-in-compose). +A limited example using secrets: + +```yaml +secrets: + semaphore_admin_pw: + file: semaphore_admin_password.txt + +services: + semaphore: + restart: unless-stopped + ports: + - 3000:3000 + image: semaphoreui/semaphore:latest + SEMAPHORE_ADMIN_PASSWORD_FILE: /run/secrets/semaphore_admin_pw + SEMAPHORE_ADMIN_NAME: admin + SEMAPHORE_ADMIN_EMAIL: admin@localhost + SEMAPHORE_ADMIN: admin +``` + Run the following command to start Semaphore with configured database (MySQL or Postgres): From b488c4320a0d8d10c79bd9b36006a9122500f8cf Mon Sep 17 00:00:00 2001 From: rob518183 <167966144+rob518183@users.noreply.github.com> Date: Tue, 15 Apr 2025 15:59:13 +0200 Subject: [PATCH 090/170] Update cli.md typo --- src/administration-guide/cli.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/cli.md b/src/administration-guide/cli.md index 4dd85fd..8832440 100644 --- a/src/administration-guide/cli.md +++ b/src/administration-guide/cli.md @@ -11,7 +11,7 @@ | Option | Description | |----------------------|-------------------------------------------| |`--config config.json`| Path to the configuration file. | -|`--no-cofnig` | Do not use any configuration file. Only environment variable will be used. | +|`--no-config` | Do not use any configuration file. Only environment variable will be used. | |`--log-level ERROR` | `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`, `PANIC` | ## Version From e4f497d8a367ccd0a268e8ee5d1163c87fa84c70 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 17 Apr 2025 11:48:08 +0500 Subject: [PATCH 091/170] chore: runner --- src/administration-guide/api.md | 10 ++++++++-- src/administration-guide/runners.md | 25 +++++++++++++++---------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 608ec4a..9b2427b 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -1,12 +1,18 @@ # API -### API documentation +## API reference

    Full API documentation is available in API reference.
    -### How to use the Semaphore API +## Creating API token + +### Create API token + + + +### CLI Login to Semaphore (password should be escaped, `slashy\\pass` instead of `slashy\pass` e.g.): diff --git a/src/administration-guide/runners.md b/src/administration-guide/runners.md index 9c6f9fa..525e19c 100644 --- a/src/administration-guide/runners.md +++ b/src/administration-guide/runners.md @@ -17,6 +17,8 @@ Using runners offers the following advantages: ## Set up +### Set up a server + To set up the server for working with running you should add following option to your Semaphore server configuration: ```json @@ -26,6 +28,15 @@ To set up the server for working with running you should add following option to } ``` +or with using environment variables: + +```bash +SEMAPHORE_USE_REMOTE_RUNNER=True +SEMAPHORE_RUNNER_REGISTRATION_TOKEN=long_string_of_random_characters +``` + +### Setup a runner + To set up the runner, use the following command: ```bash @@ -36,13 +47,13 @@ This command will create a configuration file at `/path/to/your/config/file.json But before using this command, you need to understand how runners are registered on the server. -### Registering the Runner on the Server +### Registering the runner on the server There are two ways to register a runner on the Semaphore server: 1) Add it via the web interface or API. 2) Use the command line with the `semaphore runner register` command. -#### Adding the Runner via the Web Interface +#### Adding the runner via the web UI @@ -58,7 +69,7 @@ or `echo REGISTRATION_TOKEN | semaphore runner register --stdin-registration-token --config /path/to/your/config/file.json` -### Configuration File +### Configuration file As a result of running the `semaphore runner setup` command, a configuration file like the following will be created: @@ -88,7 +99,7 @@ You can manually edit this file without needing to call `semaphore runner setup` To re-register the runner, you can use the `semaphore runner register` command. This will overwrite the token in the file specified in the configuration. -## Running the Runner +## Running the runner Now you can start the runner with the command: @@ -96,12 +107,6 @@ Now you can start the runner with the command: semaphore runner start --config /path/to/your/config/file.json ``` - - Your runner is ready to execute tasks ;) ## Runner unregistaration From 81ab19573e0992a682bc2170c788cf6329e4ced1 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Fri, 18 Apr 2025 01:46:35 +0500 Subject: [PATCH 092/170] feat: update docs --- src/administration-guide/api.md | 44 +++++- src/administration-guide/configuration.md | 10 +- .../configuration/config-file.md | 137 ++++++++++-------- 3 files changed, 120 insertions(+), 71 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 9b2427b..936c709 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -2,17 +2,37 @@ ## API reference -
    - Full API documentation is available in API reference. -
    +Semaphore UI provides two formats of API documentation, so you can choose the one that fits your workflow best: -## Creating API token +* [Swagger/OpenAPI](https://semaphoreui.com/api-docs) — ideal if you prefer an interactive, browser-based experience. +* [Postman](https://api.semaphoreui.com) — perfect if you want to leverage the full power of the Postman app for testing and exploring the API. -### Create API token +Both options include complete documentation of available endpoints, parameters, and example responses. + +## Getting Started with the API + +To start using the Semaphore API, you need to generate an API token. +This token must be included in the request header as: + +```http +Authorization: Bearer YOUR_API_TOKEN +``` + +### Creating an API Token + +There are two ways to create an API token: +- Through the web interface +- Using HTTP request + +#### Through the web interface + +You can create and manage your API tokens via the Semaphore web UI: -### CLI +#### Using HTTP request + +You can also authenticate and generate a session token using a direct HTTP request. Login to Semaphore (password should be escaped, `slashy\\pass` instead of `slashy\pass` e.g.): @@ -52,6 +72,12 @@ The command should return something similar to: `[{"id":"`**`YOUR_ACCESS_TOKEN`**`","created":"2017-03-11T13:13:13Z","expired":false,"user_id":1}]` +## Using token to make API requests + +Once you have your API token, include it in the **Authorization** header to authenticate your requests. + +### Launch a task + Use this token for launching a task or anything else: ```bash @@ -63,7 +89,11 @@ curl -v -XPOST \ http://localhost:3000/api/project/1/tasks ``` -Expire a token: +## Expiring an API token + +If you no longer need the token, you should expire it to keep your account secure. + +To manually revoke (expire) an API token, send a DELETE request to the token endpoint: ```bash curl -v -XDELETE \ diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index 09b1679..a7a8644 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -1,11 +1,11 @@ # Configuration -There are following ways to configure Semaphore: +Semaphore can be configured using several methods: -* [Configuration file](./configuration/config-file.md) -* [Envrioment variables](./configuration/env-vars.md) -* [Interactive setup](./configuration/snap.md) -* [Snap configuration (deprecated)](./configuration/snap.md) +* [Interactive setup](./configuration/snap.md) — guided configuration when running Semaphore for the first time. It creates `config.json`. +* [Configuration file](./configuration/config-file.md) — the primary and most flexible way to configure Semaphore. +* [Envrioment variables](./configuration/env-vars.md) — useful for containerized or cloud-native deployments. +* [Snap configuration (deprecated)](./configuration/snap.md) — legacy method used when installing via Snap packages. ## Configuration options diff --git a/src/administration-guide/configuration/config-file.md b/src/administration-guide/configuration/config-file.md index a918889..0b66788 100644 --- a/src/administration-guide/configuration/config-file.md +++ b/src/administration-guide/configuration/config-file.md @@ -1,72 +1,91 @@ # Configuration file -You can use interactive config file generator: -* for [server](https://semaphoreui.com/install/binary/2_12/config) -* for [runner](https://semaphoreui.com/install/binary/2_12/runner). +## Creating configuration file + +Semaphore uses a `config.json` file for its core configuration. You can generate this file interactively using built-in tools or through a web-based configurator. + +### Generate via CLI + +Use the following commands to generate the configuration file interactively: + +* For the Semaphore server: + ``` + semaphore setup + ``` +* For the Semaphore runner: + ``` + semaphore runner setup + ``` + +
    + For more details about runner configuration, see the Runners section. +
    + + +### Generate via Web + +Alternatively, you can use the web-based interactive configurator: +* [Server Configurator](https://semaphoreui.com/install/binary/2_13/config) +* [Runner Configurator](https://semaphoreui.com/install/binary/2_13/runner) + +## Configuration file example Semaphore uses a `config.json` configuration file with following content: ```javascript { - "bolt": { - "host": "/home/ubuntu/semaphore.bolt" - }, - "mysql": { - "host": "localhost", - "user": "root", - "pass": "*****", - "name": "semaphore", - "options": {} - }, - "postgres": { - "host": "localhost", - "user": "postgres", - "pass": "*****", - "name": "semaphore", - "options": {} - }, - "dialect": "postgres", - "port": "", - "interface": "", - "tmp_path": "/tmp/semaphore", - "cookie_hash": "*****", - "cookie_encryption": "*****", - "access_key_encryption": "*****", - "email_sender": "", - "email_host": "", - "email_port": "", - "web_host": "", - "ldap_binddn": "", - "ldap_bindpassword": "", - "ldap_server": "", - "ldap_searchdn": "", - "ldap_searchfilter": "", - "ldap_mappings": { - "dn": "", - "mail": "", - "uid": "", - "cn": "" - }, - "telegram_chat": "", - "telegram_token": "", - "concurrency_mode": "", - "max_parallel_tasks": 0, - "email_alert": false, - "telegram_alert": false, - "slack_alert": false, - "slack_url": "", - "microsoft_teams_alert": false, - "microsoft_teams_url": "", - "rocketchat_alert": false, - "rocketchat_url": "", - "ldap_enable": false, - "ldap_needtls": false -} + "mysql_test": { + "host": "127.0.0.1:3306", + "user": "root", + "pass": "***", + "name": "semaphore" + }, + + "dialect": "mysql", + + "git_client": "go_git", + + "auth": { + "totp": { + "enabled": false, + "allow_recovery": true + } + }, + + "use_remote_runner": true, + "runner_registration_token": "73fs***", + + "tmp_path": "/tmp/semaphore", + "cookie_hash": "96Nt***", + "cookie_encryption": "x0bs***", + "access_key_encryption": "j1ia***", + + "max_tasks_per_template": 3, + + "log": { + "events": { + "enabled": true, + "path": "./events.log" + } + }, + + "process": { + "chroot": "/opt/semaphore/sandbox" + } + } ``` -Usage: +## Configuration file usage + +* For Semaphore server: ```bash semaphore server --config ./config.json -``` \ No newline at end of file +``` + +* For Semaphore runner: + +```bash +semaphore runner start --config ./config.json +``` From d8127e7471abef51948df695a6c02db4d5396950 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Fri, 18 Apr 2025 10:27:01 +0500 Subject: [PATCH 093/170] feat: update docs --- src/administration-guide/api.md | 4 ++ src/administration-guide/configuration.md | 3 +- .../configuration/config-file.md | 4 +- .../installation/docker.md | 4 +- src/faq/troubleshooting.md | 21 +++++--- src/user-guide/repositories.md | 24 +++++---- src/user-guide/team.md | 50 ++++++++++++------- 7 files changed, 71 insertions(+), 39 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 936c709..7262f0b 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -72,6 +72,8 @@ The command should return something similar to: `[{"id":"`**`YOUR_ACCESS_TOKEN`**`","created":"2017-03-11T13:13:13Z","expired":false,"user_id":1}]` +--- + ## Using token to make API requests Once you have your API token, include it in the **Authorization** header to authenticate your requests. @@ -89,6 +91,8 @@ curl -v -XPOST \ http://localhost:3000/api/project/1/tasks ``` +--- + ## Expiring an API token If you no longer need the token, you should expire it to keep your account secure. diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index a7a8644..e6ebaab 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -72,8 +72,9 @@ Full list of available configuration options: |
    `auth.totp.enabled`
    `SEMAPHORE_TOTP_ENABLED`

    | | |
    `auth.totp.allow_recovery`
    `SEMAPHORE_TOTP_ALLOW_RECOVERY`

    | | +## Frequently asked questions -## Public URL +### 1. How to configure a public URL for Semaphore UI If you use nginx or other web server before Semaphore, you should provide configuration option `web_host`. diff --git a/src/administration-guide/configuration/config-file.md b/src/administration-guide/configuration/config-file.md index 0b66788..949c2f9 100644 --- a/src/administration-guide/configuration/config-file.md +++ b/src/administration-guide/configuration/config-file.md @@ -26,8 +26,8 @@ Use the following commands to generate the configuration file interactively: ### Generate via Web Alternatively, you can use the web-based interactive configurator: -* [Server Configurator](https://semaphoreui.com/install/binary/2_13/config) -* [Runner Configurator](https://semaphoreui.com/install/binary/2_13/runner) +* [Server configurator](https://semaphoreui.com/install/binary/2_13/config) +* [Runner configurator](https://semaphoreui.com/install/binary/2_13/runner) ## Configuration file example diff --git a/src/administration-guide/installation/docker.md b/src/administration-guide/installation/docker.md index 63b8daa..65272ec 100644 --- a/src/administration-guide/installation/docker.md +++ b/src/administration-guide/installation/docker.md @@ -79,6 +79,4 @@ Run the following command to start Semaphore with configured database (MySQL or docker-compose up ``` - Semaphore will be available via the following URL [http://localhost:3000](http://localhost:3000). - -For more information about the Docker Compose, see the [Docker Compose reference](https://docs.docker.com/compose/). + Semaphore will be available via the following URL [http://localhost:3000](http://localhost:3000). \ No newline at end of file diff --git a/src/faq/troubleshooting.md b/src/faq/troubleshooting.md index 34adc23..cd0ffd6 100644 --- a/src/faq/troubleshooting.md +++ b/src/faq/troubleshooting.md @@ -1,6 +1,6 @@ # Troubleshooting -## Renner prints error 404 +## 1. Renner prints error 404 ### How to fix @@ -8,7 +8,7 @@ --- -## Gathering Facts issue for localhost +## 2. Gathering Facts issue for localhost The issue can occur on Semaphore UI installed via [Snap](https://snapcraft.io/semaphore) or [Docker](https://hub.docker.com/r/semaphoreui/semaphore). @@ -44,7 +44,7 @@ There are two ways: 127.0.0.1 ansible_connection=ssh ansible_ssh_user=your_localhost_user ``` --- -## panic: pq: SSL is not enabled on the server +## 4. panic: pq: SSL is not enabled on the server This means that your Postgres doesn't work by SSL. @@ -63,8 +63,12 @@ Add option `sslmode=disable` to the configuration file: } }, ``` + + --- -## fatal: bad numeric config value '0' for 'GIT_TERMINAL_PROMPT': invalid unit + + +## 5. fatal: bad numeric config value '0' for 'GIT_TERMINAL_PROMPT': invalid unit This means that you are trying to access a repository over HTTPS that requires authentication. @@ -76,9 +80,12 @@ This means that you are trying to access a repository over HTTPS that requires a * Specify the password. You can't use your account password for GitHub/BitBucket, you should use a Personal Access Token (PAT) instead of it. Read more [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token). * After creating the key, go to the **Repositories** screen, find your repository and specify the key. + --- -## unable to read LDAP response packet: unexpected EOF + + +## 6. unable to read LDAP response packet: unexpected EOF Most likely, you are trying to connect to the LDAP server using an insecure method, although it expects a secure connection (via TLS). @@ -94,7 +101,7 @@ Enable TLS in your `config.json` file: --- -## LDAP Result Code 49 "Invalid Credentials" +## 7. LDAP Result Code 49 "Invalid Credentials" You have the wrong password or `binddn`. @@ -118,6 +125,6 @@ You also can read the following articles: --- -## LDAP Result Code 32 "No Such Object" +## 8. LDAP Result Code 32 "No Such Object" Coming soon. diff --git a/src/user-guide/repositories.md b/src/user-guide/repositories.md index a645884..c20d00e 100644 --- a/src/user-guide/repositories.md +++ b/src/user-guide/repositories.md @@ -21,26 +21,32 @@ For Remote Repositories that do not have authentication, you can create a Key wi ## Creating a New Repository 1. Make sure you have configured the key for the Repository you are about to add in the key store section. + 2. Go to the Repositories section of Semaphore, click the **New Repository** button in the upper right hand corner. + 3. Configure the Repository: - * Name Repository - * Add the URL. The URL must start with the following: - * `/path/to/the/repo` for a local folder on the file system - * `https://` for a remote Git Repository accessed over HTTPS - * `ssh://` for a remote Git Repository accessed over SSH - * `file://` for a local Git Repository - * `git://` for a remote Git Repository accessed over Git protocol - * Set the branch of the Repository, if you are not sure what it should be, it is probably master or main - * Select the **Access Key** you configured prior to setting up this Repository. + * Name Repository + * Add the URL. The URL must start with the following: + * `/path/to/the/repo` for a local folder on the file system + * `https://` for a remote Git Repository accessed over HTTPS + * `ssh://` for a remote Git Repository accessed over SSH + * `file://` for a local Git Repository + * `git://` for a remote Git Repository accessed over Git protocol + * Set the branch of the Repository, if you are not sure what it should be, it is probably master or main + * Select the **Access Key** you configured prior to setting up this Repository. + 4. Click Save once everything is configured. ## Editing an Existing Repository 1. Go to the Repositories section of Semaphore. + 2. Click on the pencil icon next to the Repository you wish to change, then you will be presented with the Repository configuration. ## Deleting a Repository Make sure the Repository that is about to be delete is not in use by any Task Templates. A Repository cannot be deleted if it is used in any Task Templates: 1. Go to the Repositories section of Semaphore. + 2. Click on the trash can icon on of the Repository you wish to delete. + 3. Click Yes on the confirmation pop-up if you are sure you want this Repository to be deleted. diff --git a/src/user-guide/team.md b/src/user-guide/team.md index 9e4c177..7aba4d9 100644 --- a/src/user-guide/team.md +++ b/src/user-guide/team.md @@ -2,20 +2,36 @@ In Semaphore UI, every project is associated with a **Team**. Only team members and admins can access the project. Each member of the team is assigned one of four predefined roles, which govern their level of access and the actions they can perform. -> **Tip:** To avoid losing access to a project, it’s recommended to have at least two team members with the **Owner** role. +
    +To avoid losing access to a project, it’s recommended to have at least two team members with the Owner role. +
    --- ## Team roles -Every team member has exactly one of these four roles: **Owner**, **Manager**, **Task Runner**, or **Guest**. Below are detailed descriptions of each role and its permissions. +Every team member has exactly one of these four roles: + +- **Owner** +- **Manager** +- **Task Runner** +- **Guest** + +Below are detailed descriptions of each role and its permissions. ### Owner -- **Full permissions:** Owners can do anything within the project, including managing roles, adding/removing members, and configuring any project settings. -- **Multiple owners:** A project can have multiple Owners, ensuring there is more than one person with full privileges. -- **Restrictions on self-removal:** An Owner cannot remove themselves if they are the only Owner of the project. This prevents the project from being left without an Owner. -- **Managing other wwners:** Owners can manage (including remove or change roles of) all team members, including other Owners. +- **Full permissions**
    + Owners can do anything within the project, including managing roles, adding/removing members, and configuring any project settings. + +- **Multiple owners**
    + A project can have multiple Owners, ensuring there is more than one person with full privileges. + +- **Restrictions on self-removal**
    + An Owner cannot remove themselves if they are the only Owner of the project. This prevents the project from being left without an Owner. + +- **Managing other wwners**
    + Owners can manage (including remove or change roles of) all team members, including other Owners. ### Manager @@ -30,13 +46,17 @@ Every team member has exactly one of these four roles: **Owner**, **Manager**, * ### Task Runner - **Run tasks:** Task Runners can execute any task template that exists within the project. + - **Read-only for other resources:** While they can run tasks, they only have read‐only access to other resources such as inventory, variables, repositories, etc. + - **Typical use case:** Developers or QA engineers who need to trigger and monitor tasks but do not need the ability to modify project settings or manage team membership. ### Guest - **Read-only access:** Guests have read-only access to all project resources (e.g., viewing logs, inventories, dashboards). + - **No write permissions:** They cannot modify settings, run tasks, or change roles. + - **Typical use case:** Stakeholders or other collaborators who only need to view project status and details without making changes. --- @@ -44,7 +64,9 @@ Every team member has exactly one of these four roles: **Owner**, **Manager**, * ## Managing team members - **Inviting new members:** **Owners** and **Managers** can invite new users to join the team and assign them an initial role. + - **Changing roles:** Owners can always change the roles of any team member. Managers can change the roles of **Task Runners** and **Guests**, but **not** other Managers or Owners. + - **Removing members:** Owners and Managers can remove team members with lower roles. - An Owner can remove anyone (including other Owners), but cannot remove themselves if they are the sole Owner. - A Manager can remove **Task Runners** and **Guests**, but **not** other Managers or Owners. @@ -68,23 +90,17 @@ Every team member has exactly one of these four roles: **Owner**, **Manager**, * ## Frequently asked questions -**1. Can an Owner remove another Owner?** +### 1. Can an Owner remove another Owner? Yes, an Owner can remove or change the role of any other Owner, unless they are the only remaining Owner in the project. -**2. Who can delete the project?** +### 2. Who can delete the project? Only **Owners** can delete a project. -**3. Can Managers add or remove other Managers?** +### 3. Can Managers add or remove other Managers? No. Managers can only add or remove users with **Task Runner** or **Guest** roles. To manage Owners or other Managers, you must be an Owner. -**4. What happens if I remove all Owners by accident?** +### 4. What happens if I remove all Owners by accident? Semaphore UI prevents the removal of an Owner if it would leave the project with no Owners at all. There must be at least one Owner at all times. -**5. Can Guests run tasks?** +### 5. Can Guests run tasks? No. Guests only have read‐only access and cannot trigger or manage tasks. - ---- - -## Conclusion - -Roles in Semaphore UI help you control access and manage permissions within each project. By choosing the appropriate role for every team member and following best practices, you ensure smooth collaboration, secure operations, and straightforward delegation of responsibilities. \ No newline at end of file From e8d66bc9fad2d77af32177bf7b228ee8ef2cb494 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 12:52:48 +0200 Subject: [PATCH 094/170] docs: add requirements explanation to repositories documentation Add detailed information about how Semaphore processes Ansible requirements.yml files, including: - Search locations and order for roles and collections - Processing logic for requirements files - Error handling behavior - Clarification on dual processing of root requirements.yml files --- src/user-guide/repositories.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/user-guide/repositories.md b/src/user-guide/repositories.md index c20d00e..61716cc 100644 --- a/src/user-guide/repositories.md +++ b/src/user-guide/repositories.md @@ -15,7 +15,7 @@ All Task Templates require a Repository in order to run. ## Authentication If you are using a remote Repository that requires authentication, you will need to configure a key in the **Key Store** section of Semaphore. -For remote Repositories that use SSH, you will need to use your SSH key in the **Key Store**. +For remote Repositories that use SSH, you will need to use your SSH key in the **Key Store**. For Remote Repositories that do not have authentication, you can create a Key with the type of `None`. @@ -50,3 +50,29 @@ A Repository cannot be deleted if it is used in any Task Templates: 2. Click on the trash can icon on of the Repository you wish to delete. 3. Click Yes on the confirmation pop-up if you are sure you want this Repository to be deleted. + +## Requirements +Upon project initialization Semaphore searches for and installs Ansible roles and collections from requirements.yml in the following locations and order. + +### Roles + +* /roles/requirements.yml +* /requirements.yml +* /roles/requirements.yml +* /requirements.yml + +### Collection + +* /collections/requirements.yml +* /requirements.yml +* /collections/requirements.yml +* /requirements.yml + +### Processing Logic + +* Each file is processed independently +* If a file exists, it will be processed according to its type (role or collection) +* If any file processing results in an error, the installation process stops and returns the error +* The same requirements.yml file in the root directories (/requirements.yml and /requirements.yml) is processed twice - once for roles and once for collections + +Semaphore will attempt to process all these locations regardless of whether previous locations were found or successfully processed, except in the case of errors. From 98633c10b22a8222d1085913b30dc6b9fbf76a3e Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 13:07:29 +0200 Subject: [PATCH 095/170] Update image references in Ansible task template guide --- src/.gitbook/assets/ansible_1.png | Bin 0 -> 81776 bytes src/.gitbook/assets/ansible_2.png | Bin 0 -> 76589 bytes src/user-guide/task-templates/ansible.md | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 src/.gitbook/assets/ansible_1.png create mode 100644 src/.gitbook/assets/ansible_2.png diff --git a/src/.gitbook/assets/ansible_1.png b/src/.gitbook/assets/ansible_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a93a5fe8fd66bfbe84a07d7c942c3e8d7d2633 GIT binary patch literal 81776 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%0DbbXsznw(vECWR%Xcf#*a&C z7O*A}m$SW5j4wxFI{tAZM?Kj}m8K@=DwBS{l_GIs5>AYke$J!EgybrEipYUH1Hokh z%#nuRIXNNjt|or5)fR2lr;saG>Jx@=*-iO&IZAA} z7ZWYOx0MNQO76KMyJX4B&AO$%&MXO_UjvmbMCnKJ=Lm`U&EL3H*T0jq-mP-iag#Nn zUJDMBFH}ZRE`n^#*NHiWYmD5$Qmd&5e$h%~Z~l$h0IW+NCkJI2+9^@oIr-gqn(n*B zJZzk!Lt1`q_m)2)vlhutSY97-*<1Kv>DyX39s5h7ig~vwnE@AIw_I}t`P*F?l{44; zy`NKGL0~!IXN#R>bfd%i`oT6a z24wM5p|jCRO*4;A0q++#8o0PMzdb)UfN5&%4E>R0ZC3LVf=>4yKU1Z}SAdG!f`s5= zy&F(8?by;3=MBe|@^#7#vR=Pj$?o%#9og1OetpUN$B+L7Hef23qwbtvQZM}`X%xte Pb7^VlUN5+MKj_~86Oae{ literal 0 HcmV?d00001 diff --git a/src/.gitbook/assets/ansible_2.png b/src/.gitbook/assets/ansible_2.png new file mode 100644 index 0000000000000000000000000000000000000000..84f8ef573d1905a2828e0e8407000a26900b7b9f GIT binary patch literal 76589 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�>IeU=scy`i8Nm`+Vmw*0j z@8bA?D(#3wCO+5>)GnBZf#Cm`*29FA%WQENecsT}5ou84!r{H-cDIH}>D?|rAFsAB zRi;b(oJ@3xtp~3D2OZxfiShh(Q-t9tOtABm4USXe^3BSbBnN-p1)U3Tlq4wrfv~~J zD6~zP8f9t)D89SiQ0uR2GtM&t~hRvh;HFcnH}_Th#{cVDGB%g!qehgA{lDClc#IE|6V z0Q2Q+hI`RJXXQ`qEU~s)eo0xkIE3b!Zn1U6wc+QsQPs41l4jGVu;BV@erGgkTL~`u z9+dZZf^6((Hqyw)fVSUOg!r&9@}spkveL!s*@1Fs8S4w*{S8xK%^j1|y>FV~36DCU zp!ztfu=@?fqthrM3hOQNK9tP2OZECwsCRtY496riOY;VXCs5eZ5Azw#{AS|!EcI;c zGnHv64BB~OZI?@yYh1S@a!1;nbI3MCUc%kwBEhJs$Aei;9Ni6yxaevHrYR|9(+2(IuAk;^ z@&fsEtz~aTg55q#8OvS5NvumM4bG=pNVAZ!ARywCRmQCl#ccgsZb;dX;MmRWuC9&@ ztKN6b%YDKWOPF(R&TLRK{0I3>QD1B#4VuLr|C(}NAqz;CSVXo`1NBp?DHI61GY6vz|O_lhuK*%;!h!lJFeLLVC$njOojOR zop(3Gv1e(A$|D?SlXtxo=cDyzMC(_v=@T}YvD3Djbf(AAZWc3xv1;?K!>Vs$K1A#1 z9clj?IfK7r-4QB)(1o>3T9o);(q-6*m3mb!mlMNAz@P_)GVHNZ{(tKKq_#bn*BlNb zlX|0>`=L(x-|O@z4roXJysgmAF?`F$F#5b*jjeIjmt+Ms*H8bHkkGv^JBjF8lAzpiT_O&xGRHGWIcQ4n~uZsWXc^Q`IsYMH>cf4pD=yvO zGIpg1&ZDmoi>Co6?>N!&7+XM1Lcsd|p@59>s+Ete4y_uR=N!Id@|m~4`zH0x zYr9Xxwq`ROENRN-3l_jD^lqVkIk+SD-VY?_(k^r9oOZs!eQYc!?QUPPa_WD{4DzmG0k{ zn|%ilGhLu3K%yLZXLq--a>^`MtCSUg531}*&YW5w$udz0TNmvAd3Ww4p=!j99?h3M zbNiZ(cevT|hWtA>C`xIC%nraHws#zm5Sr^-l@n@DpRV3sualJv$Arst;x4(Ci2J$^ zT#$OJ^|Ar1i&i{rQSFA?=i&r(xdcX%0)VfPoeZqO3#FcP|3hr+btolFx3RRswM8WE z82@)U@WfLDrSd$NZD9x#-X4=nTYbxAlaRzGPP&{Z<$c(5v+?Qu-l^u^Y3JMQ>H+xV z*Styq%;C~00wBCK;0yE0$~o?EZUv7&7j)I;i5XlhHY*!X?7=gjc@?rA;J~H1^9NTH zv*Db4)GmBN7~N9n9J~)Y;4?TF7FlE?RqWkeWd6e}d}l4j%YRrwLc3sbD_wr7)qme$ z?OcuM^IwljND-aDL!w4zIMq~cK2Hq%p>K$!;OTr$@R=4=5Xf<}*K`hNA1LH7u@C+B zK8U0wAOM1qTvI$MYappZab!IF?<4oc`er1(bq^kRyHLeF5XAFb75pL_ibz+93M?HX5u#I$-s0WwICDee&ev z+EWbZFK|Tye4bv0IauwoWSjgLE4S;r#b7f8j|+U4_KWPhgQ{M^x8Pl*!Ra89YUtz zJG53Sm10VK{03-K8Gq?oAMq=P=oOl_27+4GG&BxInx23Qh-0qa1V|A?HGdSv&9+bH zWa5K!WpwG^{Y`WEmal!F8JDpcU7xt?#Vsx_&cM*@*{OV3swcY}t=p-7L~wqYZ`g0o z83|Wkl*$|JtIt~Vu1U4EqJsltIWz-zLxWI!+VdjQUYZ{tadel--`T9BeJkQIJ?n<^ zr9J#Q&HUOqyv~NJZu3ItL>|Re5-2Op#X2TTy&es{@P{UomR0Rb!8AZGHr(Nq`8uB# zAJl`T9Km!O$uGjVcVFKX`!{+SZ#V_#=m8LzGkwePrcq5>DWmhHees-7f@R?2Y#3sE zKFCn`wzjq-mfW*E5w!(j&Uv{zxkA8iY7^&XmTdAuHDz;r24>F4?GeM8>Hy%bnSIA_ z*Q5>RH-7$&`@MDCE=5AnXM$lDB2_YIKufiSLIa;K{Bjt;j}ycDrJ{7dB|QFIER~tp zZRw4rP2%G-M0S3MRBNLWHV({h(g(+cUK}KoFIKaPnp!HPE^wh5J?KDp^3Bk~=pzJG zn8PA^E3Og0Q4l>one*SLxolliyiOyw;uWB$Em2fV%xJLR3VEyY9ccoY;Fc+u9*u`t z+`N>;_cC9q=(F03p+m~-V%0b-5CeT^oBF{}*|PH%JRZ8q%UQ~}OlIwWA-g3|fKIs= z@p=`G?ZJWln^$D!lg!IVfo?nk6TA672Sg`bb>yOuW+d^jz_`qXKAG;epKf>m8V!*c zRuJH)dx7eEmfx`6LrbKRSnQRw*Qs+J4p@y~1~aEr%*|^un@7*6AkQMXU~`mc?DcXs z{pT8aNtIWz=;;mH)@tV{4clIP_f|BWgxicW+rzELxCZ7HY*Ry%abz884xK^FFM?24 zQv~h}dWJGN_`~_kmeFB(YKbJJJ5jy zRA^JgJDL-l<%75&$_G#m3+dD#$9R*3+!^Lk&?F2#mL(+sQuC?4;oBv~&!|WprSE+Y zOMv3bH+s>xzTkCKB zSvV_;6?=3-73W`}?IL_UCcgbh5diE{kRE2huQL{^7R<#5ab+lCVItrW84{U`Up2tx z!veu4lp$p|m~JpoHC3<0gMapSx#1+h8oFqY%!dZ1*N@tL|4NPn^U$O@6{(;y7Uv~~ zB>5!TQ>UF{JKa_5Ahq&Vj>@-xpI_p5MXXZ5MF;-_MHI0N<{u&BLFSW&M>epESQghccbV>0jmabwc8u*qraS(Rw{+pu;)%*9GBOK872;Ofe0fmgTR{~QMRa8Sh{qo8mcbpa}(q>KH zl_tt`j&fW}7+T-1G-qUDXoa=TEtvC_%WHAn|tEm>ES}DW_X8O#tjpG0iXvfT_gDe$$L(A zui~mh!~-)#-|6Y@UrM8eY6HWuH>Ou;ubSMi#n6UKSz0)K4o|8MR77a2V^8;+W&*QX z^Svb>p9U7LSp7XdunTt%>qt@TJ9cQ_$x1Q4%yps`fAz9<(L15{J4so}F|ZyZMHu7l z0(#hxzzBfi-1btM@2^9A28k-*SPabAwt~3CKVMgVb{}fj?>Rg3`GJaov0Mjs<@5Ea zltqQ76u?VfUC4$c(|h92@9}uNzGct{Fp45eu3F`0gg-ZkGk{LZdWXtJB5 zH?20AqTZ_aJLq~|5gu|}PF$M$xv-?{3ECfu_nz_rJvvD6C6jx*veb#O-WGA&c$}IB zVu+U>FQ7hHLof3dh&NlAnoDbXcqnlXma9fgIM=ha1_opPWa^4xT#fy2(c-7XpPZ zy%|(B^x@{Ulr=0X?QbOdVTPzZ{O0uNz=5W?ip8F(mF7W1x-KYc(xpROPxU6?Dzse~ zpNwV6tXOglq8gHVo$%boOmPEIZOOZyFT}vNG*bHNOZ@(sn9j&Vk+Aa|mgz7|u08ZBRLTSK4XDuSYnP zZt^|QlLxl0-+rOn1NI1=MA$tX?%*6IWxoN|`8O2GfH3!yJswl6wGvY~<1q<;3EPSD zX6Li^^^F=P)AZ1+W{SYKDWZW%SF zypFNhIVuw^B5Zs`Mh=ATiHzOo0lp#c_U?8;po7jfYU zFDD{+a!s$qD#=u(g4teQbSCM^tR;1rC_1htl!mM3(F<({VVB>{njNk@htm-m#vp;l z5K^oupp6;D*d7>IdHneq*`e@5pO*8LYw;L}a@_4++-y>4N9X?hk*ik%;woSiU*#}c z0P0kQ?eHR$A-Si^Y&GGGiHwGlY~*6MxRnUt4sBBEtd7u4x>@`Mm%wAarz!NIz!GsB zuL#?2T6xOj@b#nCQ%mSCqeynt>O-9+;e9A*FnhcXvkde@Hx6OT27Xw5Q)bE-2gJ&d zFjh7;>AC(=vC$lhEl+3{@A~Mis;2=hYkT$&_g(zrOm?yn@dH{`gB)Kb+)nx8yZt;j zgR5{w#V~YJd66yw-YJxvEd_7*Ta4G9P3=x@T2m z_AK{i$Eb4JqjcgINfU_@U2-sMx*}fGQ5rqJ= znoWwA;Lt*jiJ@OKkQ-(Et590bUZ=Fy)MtFs9w7Sap(645X>8G&e-qCI1L{uObQo-t zYQ*g2W5M0;90(g>JI=o~hFe{9w|Svok-5R&xP)kz&I2evreczNoz8zm2(K)VdjFbk zlxFSn;@yon)|-G5sbu&c(2FcG6K|P`tOh*uvyfr5@>;-PEB&M*NsvYgtVs}u$sO<8 z%W!w)m$eNzAed#7i)`Nm5u3!Uh< zchcowN&~i;-DtOb!N9e8&KW0WpXEjq>Ls^9Mei?}_DWoWYfY&$I&CEd4(3HUOD$;5 z$9Hu}Q(tVNQB4#bd?mKgy~`frV$lmYZFM4dKMAj=&;!{(V69FmHj}nUNTE4zyF#=( z$6~#ZbiQ{KeLfj_#t<`>@f69t9%wk?(?mDelagv~V5Cw&b~Zy?B>(L>($YX|+l+JV z&-wgIQ)o!-+VnVr*vrnkvD zZ{ls43y0Kv$F_?@U1c$Ua52)I@|C9ho-wv~YOzl5@Z)LsBP_P+arcS<7rm( z%H{4MFWU`aZaN4x?^HSo%klE@MPgn3*rdod%AkIoiO0ogPSbc8U1>mz8$8EHjfeeG z{o>2Kv#IX6zSl~S@ZC@Jnt`d8m%w@E>%EFC7NW#xe=AW1f$)o@SnB5^SpuCb2A0v5 zSHjUHS0DroxkYKvVZFb3$GrCs7MaR}Qj9+&A$E~^jF3D_HS%dd0`_;(^Jc38)~yR_ ze3oJy;W6^5%ygDiS6PTBz$i{hz>8%?Vy<7ng?Yv4l&U_O;r{)_Og_O{)Kv*)-tKBk z@B5({Gq(UYZ%p|kJnuv&<#lal9?l$M2I=8Ds4+)ZFJtpFnD@iin}k1_(8MHTdykq4 z`b~va-VD8~?g`Fe;MDb>L{sn@Dt--Ba~q&s+GcV@KC8|Vf6pm@eehC?AM2W&T=|~W%W>@*<4Z_^ z=(>c2l>$CtBfaRl;^dRN+XZS4tIV5%GS*%e*$+O)N%!FBU@E|P=${%dmY}!oTPH5?{;oyTa8%r=)0_wf2+-bgHnT?n{ZN@ zDBLi@frMGgo?$!!jwA^4J%y1y$2u=Rs0!A+A!hu;6TbFP(wT7i875J{oKqO!cS)Um z#{7>Zqx(%oU#7@`rTzW?``c7Apq}quG7ca{5p$mVcs>R1-%sH~ol#(F$wd~FW|$EB zW&dl;r$Ozd6_c9x3%HH_liI~;h@Kwj;pF1G2>%-o7cGUg-2XpxyBTn%IpZ#R`>zc8 zf8)Zuz5s%3MZGecNci{v!42?-`Hv3|`D@>Jj}k9l1=V05TxidpApTSAaZ&z{?;Q+h zD;{*Epq?M}z=-UizE|r^hm^fwJFx8a9|!mBSKn>PetNTP;2`DEH8{??`uBgWw5Rhc--U%GTye14yZ>Mvg!S| zN_uno+ox%`qTMzj-cC0Lh8(al%Ah6^>0AxQd(;*$dHQ!;xE+QvmEde_B7gu7jYhi! z{`V0K2SoXzyj2AWmeChhBB%t~x$B%}WuTbVbG-mVP7UXF0KPL&?yJB6ltl6VKm$*o zE|VNX$~C34@aRk1DtXZYe=P=6-kE?(gY|)huY|aIa9yJquGbQsdzj z6LVkeO$beDi2{4Q73YhyoEtBZ``b%I!bJBlT9UKk;l{O8VZ)7;;p=OV*+6cfqM|a# z)Abez4tz#q{b|yU+zt>pK)imX9lfuttc?G=6Y_>HCjGx$K-#XD3oGG23XuTp)Mh-= zfKpxX8NiOd58ickS$4Ft;MW|giHSJ^rA--3Yv3-MsP~MwP|@D~Tm_lc(1kU4k9FCS z9lG(WSm)|NmPR8$CIfw-8Ld$Rmj85?AHo#|DxZEJG5|&H>YNh)D)WbGI!O;83tV$= zU9q`3WEVdBz@`Z*RK2a}iw!Ky%(t>xJ~>WQ-Bk$}0u&v@m&Qhf4EQRbL_1rW?D(o8 z4F3No@WjL={|7n14*HkO!|Vu6{$G|23-@0l{%_j;sS?lD|34iLra;hET4FoQn*G>} z(dbtnh|7QmkplI#@=q_8hgewchL%ZW{`;X455R%f%-lR7A)d+&0Ea0^%^*Vq)jMC> zC$&!iO+du~+y>zWjrcGHkbT({A)UncPJ_1;u3+o@YZN08_zgzCkt`U-KueZ9-R&3L zjzIsIhKGe%0^Ats?^!58pD*aPgvtG2u6I_xt&qTzVkDKAmo|$pWjG3vI@AI^e4)Uu z@jKlaPyl1<@+{p{of@Oi>CWN>hnJZGvVGGsY+gdb~9BG zx@mPH5Z|XA&w^dc>{E@G=Ci?~yy4;IBi@Yvd5As3|FM?5Y$x>SBN*^N*40yv8hq6} z>UP&I&@ZXDN+Ux);Q=HIv2Wi#_MX(8fCtGdKVbX>RV%v&hZEt845`=udGgA9SdL3h zhHgzfbWWMHpL||p3gUa;NDJchfSP09;(rMQnBCijm}Y?BrCbMsRq1QLZ#?LpAN!tU zBNO~eLv+kZA)L0W!kU_^%I{dyCG(xLMsm^CzH-KVyk|GsFPj|C zJPx#u7^zVxNk8%V?31=)L@xo&Ewi?Z1R()Xy49sOzXUd*c5p~$6StEt6%4YPpTJTr zwgAI%fCa{&jg;MxR$#1Nr_FN-8*8EdbvX0xYlgbbfc1`^DR79rp5R;jJpamn_XYE} zz>Z@C0s%cSM^tahy==zbpXmt79H!Q50=Sn*ytyGm=8r&r-q{vs!WuXyTQ}s^KIp9mT!O@fznAsBr+J} zvId$;h+X$J2Wj4@yzj{znkUBo7k{jAtzt!Axn)B8HOsr9Do!}pz{~2<)msL{lqOz4SJC( zg30y9KE_Afyzl6^cXeqIrGSj-;SFrBsyV!64`ePjpnc#cdbRHH^>imIhHUGaye}4V zOQNp#i7XQ%rYNkRyYLamFya0*Jp+`T9l$$+j3Z)F*j+F5Tjp)!i#iuwO}caf=4Pn| z5N_Axv}9Q_?0Dn`E2_|9$!~CPU;U_Mh`L2Vd7p@)7By?tnM9Ql#l#jr)Q~-iCKe_| zG8uv%%~VGlVkO2?tH1-+Y!T~zTBgSUsFPShX-xMAC|ff=EJJ0QjBpmCt zrte6#o6y0HM%B&%qa+&rXb2RLuk@NJDwWzxgBrG$VnQZ;APV)vc3$aPAS`^=-yU_3G^)cg;f=H%%;noBX z@1pONJugy#XzE>4yxL7=@-zKAdq25K_z(wxvkewqQCM8eEG!?KdS&!L5HC?IIu?A5 z@|k&JWhmtav_ZMWd*`KIvc9rRdH1u*s*t~xQzF+rfstE1p&1k%U5ydX4xioOsA{vW z!GG904b^|J_bJGz5n_ki20gB;-#0;66%-Kg6&$42nBxi$4Avqab+Jz`@|?HI(&VQh z6%e~8FAqTbR{p03GeS0sE$NlHr&iv9Sh?VhKZ(A$Q2+LV_d~%2KlMTqG(~)#Q_7)F zN6dvMj+jC{*f4Mx6&!?>2vO0U(z(7yg+ZuSw_6SE5F3<+`z&OJqDtd@H=6Olm@l0R z&wC3*DmFh78yDy-hnA-6FdZWS>Sx-nfq>V-af>!t2{G-l!bA4}50Y51yV7O|0>Q@t z`{xI+ifF*c#@(1gXZi1_3bfyW%kYcmHG$v$7-0MHjPp_=hDCHxjLMg4KI+2}(>1 z!7c13p$_Ba0uBrqexLjfL7ykam#Ut@v;^+COm!asl1E#hGo9~N7u%l#fnl2YXbi*+ zGf79G^I;9Ip2HCHY$X&Op)vOyvyJQ$RlzH~3cu?oE3 zEL|@;MiDcWN3?=0fb2?0&<>YUY`p+|$|ydtSXzRV_#=w+`lTc?P_{0l|4e7p%iqP{ zyIR_vf2vydR#i3x>mrkTA(Hy?FcW83 zD?-Y%F8eZlPXgb>I6C;7X@nQz*GL}5YfJmm!l0`D^Mf^aeM8-y{%Gw_&}{3VZnLqh zaQkD1%rHV>g!ihlau_fp1%(CYSq>gx0Q3+?~n=bK1&zk#Ty%)@-n1=+dyfTU@WsEdzAP?`S@aFIviu`DV>r02;W11;?cn3K=GX(UIeOz6` z4f}HpuH`>pZ1b#j5Bc9o3p%al?Tc*ieRvdd8WDcltHzwx`8log=op$Hhg|HoZ9(@$9o@g@4vd}a9Vt=j~Joo$iei?P;>~t0`-K63@ z=5I(b$?80yOr}^G-`LsF(c+$K>o7V#7FQGV*tunE5LCW#MakHQg~@)>?uz%T=s2UJ zSaJJ3&xk|q-;Fbj(>i{J_lo@Rb%v0{t7GN)(5NI)aCSV>PYy zhpEaE0k^l^RGm8n_B*;nf|H826;;oWb247P2u|g{s;c#^uB{*KC-wMzE?rwP&m#nX zO#9ZAFfTg-Lw9?^nzED(`prUGv9w48mZgWYao=mQ>(_s~C&58v%g>@Zchtp}HgOHP z{T|7zb$-GH`3&R_mSW`(zp0TCR^_|NZ;R_w z*f#^M4LdO}WMG*k{O7w8b!j&5mbDG2QbN5h_<%CV@}PxK}+n_1%5) zsM>2rVBNm%t);aJ-pF45D5vSfajcy-PvVyHQDU>CHJx(LYm_bRM5fxy2BF*a2VEtO zI(@#4zH`dtiS;#sZA^Yc-+pYd4%?Z1s{y2NDDn4sbCx zp5Ym_b>U1jBPz!F$-HUnG*0H#ra=!CKd#1T4#kqZ!d~MHe-(zrq?zFQ2G5u<>#!$1 zV<1*w8`S37IOb_o^8DA!Px8B-Wokmc)5>>=Bx6N=es9*H(EKKnwU&q5*J<$V7^|Cb zf0MKqiTB2!v9gLw7gS9wpr@O!tE_GGngOSFcBr!C+r@*!Lk!qaus&A4qWM75(mp$F zG_-J`Y$|+SHPz|@Hc%KG^^%#t@Yh?Xy0@n$EN7uEH8?hfE#T5CYXt~0Yei)|cC)4C z&#@aMU#@X^{z&co8mGIA^x&ce0>3Yo8i|eNfD{=)XWoC7lDn1ZkiEDGd7z=NCW3O( zi|5(ONM7_7XWtyFYU0n)RjE^+oShe7@%aVn1ofXvScFEa!3i)9wJcaLXBVYzM|t89 zggQrN0RQS5C$Gdt6SlTI3k4q51jS{xjG-O`BGK%w)pK8py(!O6EeJs7MB=i_x}Ngz zj_Ddn#Jmr%y3Mbs@e|DG>2oc3>3k@)qhwV-d2? zNwK&Iv6Q=w?nxgJQVU)@n}B=#!+wC9S0OUcj@sf`LbOEyOM2Y08|7wEu}ME~Y1I9x zfRk0MurecrH9~UtJE%sce2(m6^B&dpPoiCDwL}J&7s_ic30%Pvp{U`)avFBLfZxW) zONdp)Gv%+>XlX)SnVo=ZsI0C0TTsi7ZY9+qOF0(OCA%@K$(XbK7w}P&bMs;44(w37 zIiOW68yRxAF+ z-#!#n%E4(uV__j%(OBKusMMz43MWI6+PAB#mG_?IJ>N9bErlYXs z1i|&-q(UX0H`XI^_`)y#gOYQw3e~;XHz_(`2**`gRniU%<=1%n)H*$g5`q5_8XdT)a?C8*2`qwcUj>gAr^e!*`Mq{rNf#4GkqFB|UxG z+j|cmJ}iljiHSLN zvWVNxY&-THAPyYWV83_z_mfzd|1gh$`HupQgR?Kr9{1lL;hp{OY+la3I(tUUSAPHf z-sJeYqqSP#n?BPMbK97~;24GH&%T?x=uX|=(<3ObRi;{5ShS%~0AKWP8w1V^Z0b7j z2l-$y0ko2lQQ)3~?+BD2Mi0ma16D}>T;1Y1`|KvP@;j8$cR+m~OHLM>D*$I6P>3KS z{^a97!w(s-62btPW0id$XLyodvgpC>3 zV+2b(dT3}UJtJf9_qcT`Ce6as1+kUFi#~$$Va<$*?}?V(?)o%64b2gdGuYVJpphBI z=gf-oOm~5C0v>FXx_{9qL%;+oUpvg-{Vv@y|o9 zG-^6LJpA0lL(4NOGZXmrG3(-I6HB3E$h`(Wu22O{yk*+5zf$bTWS=Bt7w68M&sUUn z8PjQ#{3t4Lc`OtKiJChNuoFF+rHYl@{q;7GY?wGMg8bF;~je?Sn?sR)V+HL`w z8J5-d@O6YzWlVxwwUvn&-FvbR(q1PAE3h#!>+5q>dTG_$zk|aqrJ_4iBVpq;&-0h$ z zpt&tpQX=xTU{^pRsYtI>o@m}mG9|a#h!EtaO?^osw@X_5JUG~prTyCN?0*5cdetg? z=m0%PL4Z1f$1N~lOPED+!m~19B63a+juIFgV@cJQ#`2$IYz!rvvgMao&i@gpJ9L_I z*&*Z8lzz~jl`LQC46hLYuP?D&Ba6-G%sXQ%VD3E{r`+gLDT*468MV<%u2W$sIaMpG zAEN$k%?}*U3s{9Y52aj@!^YYknT#*nFG(6CtK(w)Ypz#hDj(#uijhRz6pwLmA^lS5 z_X6`~!R#0<$XxRd#WLXAK(cmUo~ZXCzcZEuRb>|VUQf2p_s_TMUmqw z67>RX89`HFo6HLrw1Qqp=d$*l+n51RSnC-ABmr^7?q1{HlT^>OJfJ2)6N^8eh+J3p zlBYUt5wCH{M=w-``fmFTu?i{Pr+k{){R)_@Jjmhi!eNQgnGmjgv|)6=?R#2>3n_OJ z)mPT#hb!+82(YncJvXGAEdOQMM*4I=Lr!CEAv1h;SY3(y;5%@Mp5M`mctrf5aM=v8 zy)>ZnQ`t^waZT zP}{hzedc8zE0eBMumcc3X{vMO-lUDWmRlWVLbIqwBWoyMCBPwYM~NnG1}?h8l>nf4RR-H5p_}6tQ3Af`-W?$a)X5;-u&u^ES67mTlepJQZXG*^=IFla_o{=_9nCT#X8f~Mht9W}y)7>9@`72*gg z=sDSy9Wo!PfdULEDJhD%MG(@Zq!?RSSxxC0yj)0vdPz$L5jKOfHT&_~9D~|29L$N+ ze5q|g<1VnbTY8I96p0N09YP##x@mVX9H;ys?DuD9xOH#j4geoHlPzHYf@`Y4ch=C}S`k zD%X)GDgS-I*x;9|hC+lBrP`$#X)Ci?9HdFfRF>Vkd6R$TyMkoCZdm7NE>m?-!@wzD zqIKSV3FbE@VR>oUF9_hXC{uZ`H*hrboZsLX)dKcW!VBmqd(w`mf>kb-1?*VaBfi^WTVk0A9;^5P^gH}FX(?1Dq}al3>)3%tbw`lkIkI%h}2@iOxcev%i7xm1%M zY52g-OyR4sJMd*1SmW~3MIpY0(F)jrbjx!WSXzVb833u^)UJ5Tm7PsD>37d=r| z_Z{rX2PNBKDZU4bK&iG*dx6URDYVGDA;*tf&%|`my$Qu#z!({(yu30$w3u%C@$zND zICpv$Ya;ffPk>POTw0HoMHvi8k-Vzf2TMC-y37>S<&Tz)H*li?)mXEi)~KpMAq^;- zsas)6iE!|!5~j}32Z>R&K8jpq>-TbT6V@|0<#2H^8r0w~fo`#J)-r)v)g{Fd<3Om; z=DWJ~!pC)$0fISrv+{!5RiUx%4SHM{vE}i4ud3o>nl*4J{Th+|p6U88zo=#~EcoG5 z-!G+esj8}yFv?PXyxmGQ233+v-x~$Vi00>?1&hFWe0XlPdQ#A~qEzbXCLomB`+$_P zf*8R!!fLBVb6q|Sl=~(Yq5)#gDk?f69CuOerU2MQ%ins2f>(JgPud39+i=%SEEh-& z&kugS^T@3LWBmEKvqatdwkWpcYm+{^hUM|Nmo`H6XluHDUaa68J!PtXjpOGLY{5Q= zjSPzn3pc>6FL`#k1_My+33a}Gf#*X)D5oB<2pRy}Ce=#41BSN%O%)i4 zHPIN177yn4x1hz1s`HxsDm|6OC2fZm4V{e^2ZVFdj59xFi3b*oCHUHR%r~Eudu^4- z`BI*zlQ?XrZZc?dG|&~uX}+MVo3N`LY*YhlFQ@cjU?@Gd8F||Lxs9H4PlCtd`lKL{ zf0-3<>z*!uY8Zb+`iU^t_RGolVSp⋘Z5#<#;(~rH1uTVHU{*mzTQtpig8%%lmZCl>j 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 F{2$vbi@yK> literal 0 HcmV?d00001 diff --git a/src/user-guide/task-templates/ansible.md b/src/user-guide/task-templates/ansible.md index eee15dd..eb65b15 100644 --- a/src/user-guide/task-templates/ansible.md +++ b/src/user-guide/task-templates/ansible.md @@ -5,14 +5,14 @@ # Ansible -Using Semaphore UI you can run Terraform code. To do this, you need to create a **Terraform Code Template**. +Using Semaphore UI you can run Ansible code. To do this, you need to create an **Ansible Code Template**. 1. Go go Task Templates section and click the **New Template** button. -![](<../../.gitbook/assets/terraform_1.webp>) +![](<../../.gitbook/assets/ansible_1.png>) 2. Set up the template and click the **Create** button. -![](<../../.gitbook/assets/terraform_2.webp>) +![](<../../.gitbook/assets/ansible_2.png>) -3. You can now run your Terraform code. \ No newline at end of file +3. You can now run your Ansible code. From 8085b57f5bcf34728db6d45e0597d905f198e76f Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 13:36:53 +0200 Subject: [PATCH 096/170] Add reference to the Kubernetes installation guide --- src/SUMMARY.md | 1 + src/administration-guide/installation.md | 3 ++- src/administration-guide/installation/k8s.md | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 92126b1..29d6c57 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -7,6 +7,7 @@ * [Package manager](./administration-guide/installation/package-manager.md) * [Docker](./administration-guide/installation/docker.md) * [Binary file](./administration-guide/installation/binary-file.md) + * [Kubernetes (Helm chart)](./administration-guide/installation/k8s.md) * [Snap (deprecated)](./administration-guide/installation/snap.md) * [Manual Installation](./administration-guide/installation\_manually.md) * [Configuration](./administration-guide/configuration.md) diff --git a/src/administration-guide/installation.md b/src/administration-guide/installation.md index 25cbe75..dc498e0 100644 --- a/src/administration-guide/installation.md +++ b/src/administration-guide/installation.md @@ -1,10 +1,11 @@ # Installation -You can install Semaphore in 4 ways: +You can install Semaphore in multiple ways: * [Package manager](./installation/package-manager) * [Docker](./installation/docker) * [Binary file](./installation/binary-file) +* [Kubernetes (Helm chart)](./installation/k8s) * [Snap (deprecated)](./installation/snap) See also: diff --git a/src/administration-guide/installation/k8s.md b/src/administration-guide/installation/k8s.md index e69de29..c2f5097 100644 --- a/src/administration-guide/installation/k8s.md +++ b/src/administration-guide/installation/k8s.md @@ -0,0 +1,10 @@ +

    + +# Kubernetes (Helm chart) + +Semaphore provides a helm chart for installation on Kubernetes. The chart is available via the Semaphore Helm repository: [https://semaphoreui.github.io/charts](https://semaphoreui.github.io/charts). + +A thorough documentation can be found on artifacthub.io: [Semaphore Helm Chart](https://artifacthub.io/packages/helm/semaphoreui/semaphore). From ec77ee63739be7ac11420bfc02c76d6ff2bc10d2 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 13:37:42 +0200 Subject: [PATCH 097/170] Remove useless sentence --- src/administration-guide/installation/k8s.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/installation/k8s.md b/src/administration-guide/installation/k8s.md index c2f5097..d054310 100644 --- a/src/administration-guide/installation/k8s.md +++ b/src/administration-guide/installation/k8s.md @@ -5,6 +5,6 @@ # Kubernetes (Helm chart) -Semaphore provides a helm chart for installation on Kubernetes. The chart is available via the Semaphore Helm repository: [https://semaphoreui.github.io/charts](https://semaphoreui.github.io/charts). +Semaphore provides a helm chart for installation on Kubernetes. A thorough documentation can be found on artifacthub.io: [Semaphore Helm Chart](https://artifacthub.io/packages/helm/semaphoreui/semaphore). From 7a5d1be08d4209beec06e843a96edf80385afbc5 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 14:11:45 +0200 Subject: [PATCH 098/170] Formatting --- src/user-guide/repositories.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user-guide/repositories.md b/src/user-guide/repositories.md index 61716cc..4deab92 100644 --- a/src/user-guide/repositories.md +++ b/src/user-guide/repositories.md @@ -73,6 +73,6 @@ Upon project initialization Semaphore searches for and installs Ansible roles an * Each file is processed independently * If a file exists, it will be processed according to its type (role or collection) * If any file processing results in an error, the installation process stops and returns the error -* The same requirements.yml file in the root directories (/requirements.yml and /requirements.yml) is processed twice - once for roles and once for collections +* The same requirements.yml file in the root directories (**/requirements.yml** and **/requirements.yml**) is processed twice - once for roles and once for collections Semaphore will attempt to process all these locations regardless of whether previous locations were found or successfully processed, except in the case of errors. From 7aeb2b48f308fe6b1feb85dffdca66d9b6f2bf67 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 16:09:32 +0200 Subject: [PATCH 099/170] Fixed multiple wrong links --- src/administration-guide/installation/binary-file.md | 2 +- src/administration-guide/installation/snap.md | 4 ++-- src/administration-guide/openid.md | 2 +- src/user-guide/task-templates/README.md | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index 0b59fef..8f2f8e8 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -62,7 +62,7 @@ Semaphore will be available via the following URL [https://localhost:3000](https ### Run as a service -For more detailed information — look into the [extended Systemd service documentation](./installation_manually.md#extended-systemd-service). +For more detailed information — look into the [extended Systemd service documentation](../installation_manually.md#extended-systemd-service). If you installed Semaphore via a package manager, or by downloading a binary file, you should create the Semaphore service manually. diff --git a/src/administration-guide/installation/snap.md b/src/administration-guide/installation/snap.md index 69de6a1..414d249 100644 --- a/src/administration-guide/installation/snap.md +++ b/src/administration-guide/installation/snap.md @@ -46,6 +46,6 @@ After installation, you can set up Semaphore via [Snap Configuration](https://sn sudo snap get semaphore ``` - List of available options you can find in [Configuration options reference](./configuration#configuration-options). + List of available options you can find in [Configuration options reference](../configuration.md#configuration-options). ----- \ No newline at end of file +---- diff --git a/src/administration-guide/openid.md b/src/administration-guide/openid.md index 7d66161..cbcb2e9 100644 --- a/src/administration-guide/openid.md +++ b/src/administration-guide/openid.md @@ -47,7 +47,7 @@ All SSO provider options: | `scopes` | | | `username_claim` | Username claim expression[\*](#claim-expression). | | `email_claim` | Email claim expression[\*](#claim-expression). | -| `name_claim` | Profile Name claim expression[\*](openid/#claim-expression). | +| `name_claim` | Profile Name claim expression[\*](#claim-expression). | | `order` | Position of the provider button on the Sign in screen. | | `endpoint.issuer` | | | `endpoint.auth` | | diff --git a/src/user-guide/task-templates/README.md b/src/user-guide/task-templates/README.md index 0598c3b..8d3c663 100644 --- a/src/user-guide/task-templates/README.md +++ b/src/user-guide/task-templates/README.md @@ -14,9 +14,9 @@ Templates define how to run an Ansible Playbook. The template allows you to spec The task template can be one of the following types: -* [Task](./#task) -* [Build](./#build) -* [Deploy](./#deploy) +* [Task](#task) +* [Build](#build) +* [Deploy](#deploy) ### Task From 5693d119478b9e9ea7475b237239b6ed1b52c775 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 16:33:18 +0200 Subject: [PATCH 100/170] Moving README.md to terraform.md --- .../task-templates/{terraform/README.md => terraform.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/user-guide/task-templates/{terraform/README.md => terraform.md} (100%) diff --git a/src/user-guide/task-templates/terraform/README.md b/src/user-guide/task-templates/terraform.md similarity index 100% rename from src/user-guide/task-templates/terraform/README.md rename to src/user-guide/task-templates/terraform.md From f634e6d5b7bbd3b70ad3e59a3fec6727b5575895 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 16:35:02 +0200 Subject: [PATCH 101/170] Reorganize task templates documentation - Moving Ansible-specific content into own category - Creating an overview in the main Task Template site --- src/SUMMARY.md | 2 +- src/user-guide/task-templates/README.md | 56 +++--------------------- src/user-guide/task-templates/ansible.md | 53 ++++++++++++++++++++-- 3 files changed, 57 insertions(+), 54 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 92126b1..a3b4335 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -47,7 +47,7 @@ * [Runners 🅿](./user-guide/projects/runners.md) * [Task Templates](./user-guide/task-templates/README.md) * [Ansible](./user-guide/task-templates/ansible.md) - * [Terraform/OpenTofu](./user-guide/task-templates/terraform/README.md) + * [Terraform/OpenTofu](./user-guide/task-templates/terraform.md) * [Workspaces](./user-guide/task-templates/terraform/workspaces.md) * [States 🅿](./user-guide/task-templates/terraform/states.md) * [Shell/Bash scripts](./user-guide/task-templates/bash.md) diff --git a/src/user-guide/task-templates/README.md b/src/user-guide/task-templates/README.md index 0598c3b..c379234 100644 --- a/src/user-guide/task-templates/README.md +++ b/src/user-guide/task-templates/README.md @@ -1,53 +1,9 @@ # Task Templates -Templates define how to run an Ansible Playbook. The template allows you to specify the following parameters: +Templates define how to run Semaphore tasks. Currently the following task types are supported: -* Playbook repository -* Playbook filename -* Inventory -* Environment -* Vault password file -* Extra CLI arguments -* and much more - -![](../../.gitbook/assets/template\_new\_ipad.png) - -The task template can be one of the following types: - -* [Task](./#task) -* [Build](./#build) -* [Deploy](./#deploy) - -### Task - -Just runs specified playbooks with specified parameters. - -### Build - -This type of template should be used to create [artifacts](https://en.wikipedia.org/wiki/Artifact\_\(software\_development\)). The start version of the artifact can be specified in a template parameter. Each run increments the artifact version. - -![](<../../.gitbook/assets/template\_new\_build\_ipad (1).png>) - -Semaphore doesn't support artifacts out-of-box, it only provides task versioning. You should implement the artifact creation yourself. Read the article [CI/CD](../../administration-guide/cicd.md) to know how to do this. - -### Deploy - -This type of template should be used to deploy artifacts to the destination servers. Each `deploy` template is associated with a `build` template. - -![](../../.gitbook/assets/template\_new\_deploy\_ipad.png) - -This allows you to deploy a specific version of the artifact to the servers. - -### Schedule - -You can set up task scheduling by specifying a cron schedule in the template settings. Cron expression format you can find in [documentation](https://pkg.go.dev/github.com/robfig/cron/v3#hdr-CRON\_Expression\_Format). - -![](../../.gitbook/assets/template\_schedule.png) - -#### Run a task when a new commit is added to the repository - -You can use cron to periodically check for new commits in the repository and trigger a task upon their arrival. - -For example you have source code of the app in the git repository. You can add it to **Repositories** and trigger the Build task for new commits. - -![](../../.gitbook/assets/template\_schedule\_commit.png) +* [Ansible](./ansible.md) +* [Terraform/OpenTofu](./terraform.md) +* [Shell](./bash.md) +* [Powershell](./powershell.md) +* [Python](./python.md) diff --git a/src/user-guide/task-templates/ansible.md b/src/user-guide/task-templates/ansible.md index eb65b15..8abd6d4 100644 --- a/src/user-guide/task-templates/ansible.md +++ b/src/user-guide/task-templates/ansible.md @@ -7,12 +7,59 @@ Using Semaphore UI you can run Ansible code. To do this, you need to create an **Ansible Code Template**. -1. Go go Task Templates section and click the **New Template** button. +1. Go go **Task Templates** section, click on **New Template** and then **Ansible Playbook**. ![](<../../.gitbook/assets/ansible_1.png>) -2. Set up the template and click the **Create** button. +2. Set up the template. + +The template allows you to specify the following parameters: + +* Repository +* Path to playbook file +* Inventory +* Variable Groups +* Vaults +* and much more ![](<../../.gitbook/assets/ansible_2.png>) -3. You can now run your Ansible code. +An ansible-playbook template can be one of the following types: + +* [Task](#task) +* [Build](#build) +* [Deploy](#deploy) + +### Task + +Just runs specified playbooks with specified parameters. + +### Build + +This type of template should be used to create [artifacts](https://en.wikipedia.org/wiki/Artifact\_\(software\_development\)). The start version of the artifact can be specified in a template parameter. Each run increments the artifact version. + +![](<../../.gitbook/assets/template\_new\_build\_ipad (1).png>) + +Semaphore doesn't support artifacts out-of-box, it only provides task versioning. You should implement the artifact creation yourself. Read the article [CI/CD](../../administration-guide/cicd.md) to know how to do this. + +### Deploy + +This type of template should be used to deploy artifacts to the destination servers. Each `deploy` template is associated with a `build` template. + +![](../../.gitbook/assets/template\_new\_deploy\_ipad.png) + +This allows you to deploy a specific version of the artifact to the servers. + +### Schedule + +You can set up task scheduling by specifying a cron schedule in the template settings. Cron expression format you can find in [documentation](https://pkg.go.dev/github.com/robfig/cron/v3#hdr-CRON\_Expression\_Format). + +![](../../.gitbook/assets/template\_schedule.png) + +#### Run a task when a new commit is added to the repository + +You can use cron to periodically check for new commits in the repository and trigger a task upon their arrival. + +For example you have source code of the app in the git repository. You can add it to **Repositories** and trigger the Build task for new commits. + +![](../../.gitbook/assets/template\_schedule\_commit.png) From a2724835ed2382f3696920ae96806e8b00f9bcaa Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 16:40:31 +0200 Subject: [PATCH 102/170] Update Ansible template terminology --- src/user-guide/task-templates/ansible.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user-guide/task-templates/ansible.md b/src/user-guide/task-templates/ansible.md index 8abd6d4..8a0a395 100644 --- a/src/user-guide/task-templates/ansible.md +++ b/src/user-guide/task-templates/ansible.md @@ -5,7 +5,7 @@ # Ansible -Using Semaphore UI you can run Ansible code. To do this, you need to create an **Ansible Code Template**. +Using Semaphore UI you can run Ansible playbooks. To do this, you need to create an **Ansible Playbook** Template. 1. Go go **Task Templates** section, click on **New Template** and then **Ansible Playbook**. From 86428dd67f5ab35ab8420129204bf032ae3c35f3 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 17:12:45 +0200 Subject: [PATCH 103/170] Add schedules documentation --- src/.gitbook/assets/schedule01.png | Bin 0 -> 40727 bytes src/.gitbook/assets/schedule02.png | Bin 0 -> 19265 bytes src/.gitbook/assets/schedule03.png | Bin 0 -> 17119 bytes src/user-guide/schedules.md | 109 +++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 src/.gitbook/assets/schedule01.png create mode 100644 src/.gitbook/assets/schedule02.png create mode 100644 src/.gitbook/assets/schedule03.png diff --git a/src/.gitbook/assets/schedule01.png b/src/.gitbook/assets/schedule01.png new file mode 100644 index 0000000000000000000000000000000000000000..38e7a06c62ba46dca44c3730a7b14a00c1b405d3 GIT binary patch literal 40727 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 K*}?};-~2yD*n(dG literal 0 HcmV?d00001 diff --git a/src/.gitbook/assets/schedule03.png b/src/.gitbook/assets/schedule03.png new file mode 100644 index 0000000000000000000000000000000000000000..263810aa496f03c6d1dc82f1dbfcb7acc48ce375 GIT binary patch literal 17119 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 Nlr@z~6rTV6KLDyjt*Zb4 literal 0 HcmV?d00001 diff --git a/src/user-guide/schedules.md b/src/user-guide/schedules.md index f3960c0..f4c4e54 100644 --- a/src/user-guide/schedules.md +++ b/src/user-guide/schedules.md @@ -1 +1,110 @@ # Schedules +# Schedules + +The schedule function in Semaphore allows to automate the execution of templates (e.g. playbook runs) at predefined intervals. This feature allows to implement routine automation tasks, such as regular backups, compliance checks, system updates, and more. + +## Setup and Configuration + +### Accessing the Schedule Feature + +1. Log in to your Ansible Semaphore web interface +2. Navigate to the "Schedule" tab in the main navigation menu +3. Click the "New Schedule" button in the top right corner to create a new schedule + +![](<../.gitbook/assets/schedule01.png>) + +### Creating a New Schedule + +When creating a new schedule, you'll need to configure the following options: + +| Field | Description | +|-------|-------------| +| Name | A descriptive name for the scheduled task | +| Template | The specific Task Template to execute | +| Timing | Either in cron format for more fexibility or using the built-in options for common intervals | + +![](<../.gitbook/assets/schedule02.png>) ![](<../.gitbook/assets/schedule03.png>) + +### Cron Format Syntax + +The schedule uses standard cron syntax with five fields: + +``` +┌─────── minute (0-59) +│ ┌────── hour (0-23) +│ │ ┌───── day of month (1-31) +│ │ │ ┌───── month (1-12) +│ │ │ │ ┌───── day of week (0-6) (Sunday=0) +│ │ │ │ │ +│ │ │ │ │ +* * * * * +``` + +Examples: +- `*/15 * * * *` - Run every 15 minutes +- `0 2 * * *` - Run at 2:00 AM every day +- `0 0 * * 0` - Run at midnight on Sundays +- `0 9 1 * *` - Run at 9:00 AM on the first day of every month + +## Use Cases + +### System Maintenance + +```yaml +# Example playbook for system updates +--- +- hosts: all + become: yes + tasks: + - name: Update apt cache + apt: + update_cache: yes + + - name: Upgrade all packages + apt: + upgrade: yes + + - name: Remove dependencies that are no longer required + apt: + autoremove: yes +``` + +Schedule this playbook to run weekly during off-hours to ensure systems stay up-to-date. + +### Backup Operations + +Create schedules for database backups with different frequencies: +- Daily backups that retain for one week +- Weekly backups that retain for one month +- Monthly backups that retain for one year + +### Compliance Checks + +Schedule regular compliance scans to ensure systems meet security requirements: + +```yaml +# Example compliance check playbook +--- +- hosts: all + tasks: + - name: Run compliance checks + script: /path/to/compliance_script.sh + + - name: Collect compliance reports + fetch: + src: /var/log/compliance-report.log + dest: reports/{{ inventory_hostname }}/ + flat: yes +``` + +### Environment Provisioning and Cleanup + +For development or testing environments. Schedule cloud environment creation in the morning and teardown in the evening to optimize costs. + +## Best Practices + +* Use descriptive names for schedules that indicate both function and timing (e.g. "Weekly-Backup-Sunday-2AM") +* Avoid scheduling too many resource-intensive tasks concurrently +* Consider the effect of long-running scheduled tasks on other schedules +* Test schedules with short intervals before setting up production schedules with longer intervals +* Document the purpose and expected outcomes of scheduled tasks From 5c39eccc054d8e96dfe9392930aa794126587f65 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 17:14:30 +0200 Subject: [PATCH 104/170] Remove duplicate heading in schedules.md --- src/user-guide/schedules.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/user-guide/schedules.md b/src/user-guide/schedules.md index f4c4e54..495a5ca 100644 --- a/src/user-guide/schedules.md +++ b/src/user-guide/schedules.md @@ -1,5 +1,4 @@ # Schedules -# Schedules The schedule function in Semaphore allows to automate the execution of templates (e.g. playbook runs) at predefined intervals. This feature allows to implement routine automation tasks, such as regular backups, compliance checks, system updates, and more. From 35404117a2231d9ca3f1affe0a3a3186ea63ea99 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Fri, 18 Apr 2025 21:52:58 +0200 Subject: [PATCH 105/170] Add link to crontab.guru in schedules documentation --- src/user-guide/schedules.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/user-guide/schedules.md b/src/user-guide/schedules.md index 495a5ca..cb59bde 100644 --- a/src/user-guide/schedules.md +++ b/src/user-guide/schedules.md @@ -45,6 +45,8 @@ Examples: - `0 0 * * 0` - Run at midnight on Sundays - `0 9 1 * *` - Run at 9:00 AM on the first day of every month +Very helpful cron expression generator: [https://crontab.guru/](https://crontab.guru/) + ## Use Cases ### System Maintenance From ddb4b6dd29c9f4f361971e6289d24f7fec88f9b5 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 20 Apr 2025 00:33:12 +0500 Subject: [PATCH 106/170] feat: update version --- .../installation/binary-file.md | 10 +++---- .../installation/package-manager.md | 16 ++++++------ src/administration-guide/upgrading.md | 26 +++++++++---------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index 8f2f8e8..79748ce 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -15,9 +15,9 @@ Download the `*.tar.gz` for your platform from [Releases page](https://github.co {{#tabs }} {{#tab name="Linux (x64)" }} ``` -download/v2.12.10/semaphore_2.12.10_linux_amd64.tar.gz +download/v2.13.14/semaphore_2.13.14_linux_amd64.tar.gz -tar xf semaphore_2.12.10_linux_amd64.tar.gz +tar xf semaphore_2.13.14_linux_amd64.tar.gz ./semaphore setup ``` @@ -27,9 +27,9 @@ tar xf semaphore_2.12.10_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_arm64.tar.gz +download/v2.13.14/semaphore_2.13.14_linux_arm64.tar.gz -tar xf semaphore_2.12.10_linux_arm64.tar.gz +tar xf semaphore_2.13.14_linux_arm64.tar.gz ./semaphore setup ``` @@ -39,7 +39,7 @@ tar xf semaphore_2.12.10_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.12.10/semaphore_2.12.10_windows_amd64.zip") ` + "download/v2.13.14/semaphore_2.13.14_windows_amd64.zip") ` -OutFile semaphore.zip diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index 0aa0b29..e322931 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -22,36 +22,36 @@ Here are several installation commands, depending on the package manager: {{#tab name="Debian / Ubuntu (x64)"}} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_amd64.deb +download/v2.13.14/semaphore_2.13.14_linux_amd64.deb -sudo dpkg -i semaphore_2.12.10_linux_amd64.deb +sudo dpkg -i semaphore_2.13.14_linux_amd64.deb ``` {{#endtab }} {{#tab name="Debian / Ubuntu (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_arm64.deb +download/v2.13.14/semaphore_2.13.14_linux_arm64.deb -sudo dpkg -i semaphore_2.12.10_linux_arm64.deb +sudo dpkg -i semaphore_2.13.14_linux_arm64.deb ``` {{#endtab }} {{#tab name="CentOS (x64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_amd64.rpm +download/v2.13.14/semaphore_2.13.14_linux_amd64.rpm -sudo yum install semaphore_2.12.10_linux_amd64.rpm +sudo yum install semaphore_2.13.14_linux_amd64.rpm ``` {{#endtab }} {{#tab name="CentOS (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_arm64.rpm +download/v2.13.14/semaphore_2.13.14_linux_arm64.rpm -sudo yum install semaphore_2.12.10_linux_arm64.rpm +sudo yum install semaphore_2.13.14_linux_arm64.rpm ``` {{#endtab }} diff --git a/src/administration-guide/upgrading.md b/src/administration-guide/upgrading.md index 4a457ad..7f24593 100644 --- a/src/administration-guide/upgrading.md +++ b/src/administration-guide/upgrading.md @@ -28,9 +28,9 @@ Install it using the package manager. ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_amd64.deb +download/v2.13.14/semaphore_2.13.14_linux_amd64.deb -sudo dpkg -i semaphore_2.12.10_linux_amd64.deb +sudo dpkg -i semaphore_2.13.14_linux_amd64.deb ``` {{#endtab }} @@ -38,9 +38,9 @@ sudo dpkg -i semaphore_2.12.10_linux_amd64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_arm64.deb +download/v2.13.14/semaphore_2.13.14_linux_arm64.deb -sudo dpkg -i semaphore_2.12.10_linux_arm64.deb +sudo dpkg -i semaphore_2.13.14_linux_arm64.deb ``` {{#endtab }} @@ -48,9 +48,9 @@ sudo dpkg -i semaphore_2.12.10_linux_arm64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_amd64.rpm +download/v2.13.14/semaphore_2.13.14_linux_amd64.rpm -sudo yum install semaphore_2.12.10_linux_amd64.rpm +sudo yum install semaphore_2.13.14_linux_amd64.rpm ``` {{#endtab }} @@ -58,9 +58,9 @@ sudo yum install semaphore_2.12.10_linux_amd64.rpm ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_arm64.rpm +download/v2.13.14/semaphore_2.13.14_linux_arm64.rpm -sudo yum install semaphore_2.12.10_linux_arm64.rpm +sudo yum install semaphore_2.13.14_linux_arm64.rpm ``` {{#endtab }} {{#endtabs }} @@ -80,9 +80,9 @@ Download a `*.tar.gz` for your platform from [Releases page](https://github.com/ ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_amd64.tar.gz +download/v2.13.14/semaphore_2.13.14_linux_amd64.tar.gz -tar xf semaphore_2.12.10_linux_amd64.tar.gz +tar xf semaphore_2.13.14_linux_amd64.tar.gz ``` {{#endtab }} @@ -90,9 +90,9 @@ tar xf semaphore_2.12.10_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.12.10/semaphore_2.12.10_linux_arm64.tar.gz +download/v2.13.14/semaphore_2.13.14_linux_arm64.tar.gz -tar xf semaphore_2.12.10_linux_arm64.tar.gz +tar xf semaphore_2.13.14_linux_arm64.tar.gz ``` {{#endtab }} @@ -100,7 +100,7 @@ tar xf semaphore_2.12.10_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.12.10/semaphore_2.12.10_windows_amd64.zip") ` + "download/v2.13.14/semaphore_2.13.14_windows_amd64.zip") ` -OutFile semaphore.zip Expand-Archive -Path semaphore.zip -DestinationPath ./ From 625a2e853a1e6043cfd453be3041b4e31574dd5e Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 20 Apr 2025 16:57:20 +0500 Subject: [PATCH 107/170] feat: security --- src/administration-guide/installation.md | 26 +++- src/administration-guide/security.md | 125 +++++++++++++++++- src/administration-guide/security/kerberos.md | 0 3 files changed, 142 insertions(+), 9 deletions(-) create mode 100644 src/administration-guide/security/kerberos.md diff --git a/src/administration-guide/installation.md b/src/administration-guide/installation.md index dc498e0..541513a 100644 --- a/src/administration-guide/installation.md +++ b/src/administration-guide/installation.md @@ -1,12 +1,26 @@ # Installation -You can install Semaphore in multiple ways: +You can install Semaphore in multiple ways, depending on your operating system, environment, and preferences: -* [Package manager](./installation/package-manager) -* [Docker](./installation/docker) -* [Binary file](./installation/binary-file) -* [Kubernetes (Helm chart)](./installation/k8s) -* [Snap (deprecated)](./installation/snap) +* **Package manager**
    + Install Semaphore using a native package for your distribution (e.g., apt for Debian/Ubuntu or dnf for RHEL-based systems). This is the easiest way to get started on Linux servers and integrates well with system services.
    + [Learn more »](./installation/package-manager) + +* **Docker**
    + Run Semaphore as a container using Docker or Docker Compose. Ideal for fast setup, sandboxed environments, and CI/CD pipelines. Recommended for users who prefer infrastructure as code.
    + [Learn more »](./installation/docker) + +* **Binary file**
    + Download a precompiled binary from the releases page. Great for manual installation or embedding in custom workflows. Works across Linux, macOS, and Windows (via WSL).
    + [Learn more »](./installation/binary-file) + +* **Kubernetes (Helm chart)**
    + Deploy Semaphore into a Kubernetes cluster using Helm. Best suited for production-grade, scalable infrastructure. Supports easy configuration and upgrades via Helm values.
    + [Learn more »](./installation/k8s) + +* **Snap (deprecated)**
    + Previously available as a Snap package. This method is deprecated and no longer maintained. Users are advised to switch to one of the supported methods above.
    + [Learn more »](./installation/snap) See also: * [Run as service](./installation/binary-file.md#run-as-a-service) diff --git a/src/administration-guide/security.md b/src/administration-guide/security.md index b5f9674..d005bda 100644 --- a/src/administration-guide/security.md +++ b/src/administration-guide/security.md @@ -1,4 +1,123 @@ -# Security +# 🔐 Security + +## Introduction + +Security is a top priority in Semaphore UI. Whether you're automating critical infrastructure tasks or managing team access to sensitive systems, Semaphore UI is designed to provide robust, secure operations out of the box. This section outlines how Semaphore handles security and what you should consider when deploying it in production. + +## Authentication & authorization + +Semaphore supports secure authentication and flexible authorization mechanisms: + +- **Login methods:** + - **Username/password**
    Default method using credentials stored in the Semaphore database. Passwords are hashed using a strong algorithm (bcrypt). + + - **LDAP**
    Allows integration with enterprise directory services. Supports user/group filtering and secure connections via LDAPS. + + - **OpenID Connect (OIDC)**
    Enables single sign-on with identity providers like Google, Azure AD, or Keycloak. Supports custom claims and group mappings. + +- **Two-Factor authentication (2FA)**
    TOTP-based 2FA is available and recommended for all users. + +- **Role-based access control**
    You can assign different roles to users such as Admin, Maintainer, or Viewer, limiting access based on responsibility. + +- **Session management**
    Sessions are protected with secure HTTP cookies. Session expiration and logout mechanisms ensure minimal exposure. + + +## Secrets & credentials + +Managing secrets securely is a core feature: + +- **Encrypted key store**
    Credentials and secret variables are encrypted at rest using AES encryption. + +- **Environment isolation**
    Secrets are only passed to jobs at runtime and are not exposed to the container environment directly. + +- **SSH keys and tokens**
    Users are responsible for uploading valid SSH keys and tokens. These are encrypted and only used when running tasks. + + +## Running untrusted code / playbooks + +Semaphore runs user-defined playbooks and commands, which can be risky: + +- **Container isolation**
    Tasks are executed in isolated Docker containers. These containers have no access to the host system. + +- **Least privilege**
    Containers run with minimal permissions and can be restricted further using Docker flags. + +- **Chroot execution**
    Semaphore can execute tasks inside a chroot jail to further isolate the execution environment from the host system. + +- **Task process user**
    Tasks can be executed under a dedicated non-root system user (e.g., `semaphore`) to reduce the impact of potential exploits. This is optional and can be configured based on system policies. + + +## Secure Deployment + +To ensure Semaphore is securely deployed: + +- **Use HTTPS**
    + Semaphore supports HTTPS both via its **built-in TLS support** and through a **reverse proxy like Nginx**. It is strongly recommended to enable HTTPS in production. + + To enable built-in HTTPS support add following block to **config.json**: + ```json + { + ... + "tls": { + "enabled": true, + "cert_file": "/path/to/cert/example.com.cert", + "key_file": "/path/to/key/example.com.key" + } + ... + } + ``` + +- **Run behind a firewall**
    Limit access to the Semaphore UI and database to only trusted IPs. + +- **Database security**
    Use strong passwords and restrict database access to Semaphore only. + +## Updates & patch management + +Security updates are published regularly: + +- **Stay updated**
    Always use the latest stable release. + +- **Changelog**
    Review changes on GitHub before updating. + +- **Automatic updates**
    If using Docker, consider automation pipelines for regular updates. + + + + + + + + + +## Reporting Vulnerabilities + +Found a vulnerability? Help us keep Semaphore secure: + +- **Responsible disclosure**
    Please email us at `security@semaphoreui.com`. + +- **No public exploits**
    Do not share vulnerabilities publicly until patched. + +- **Acknowledgments**
    Security researchers may be acknowledged in release notes if desired. -* [Database security](./security/database.md) -* [Network security](./security/network.md) \ No newline at end of file diff --git a/src/administration-guide/security/kerberos.md b/src/administration-guide/security/kerberos.md new file mode 100644 index 0000000..e69de29 From 4175d7927bf968e2b951433d6ffe8a438394369f Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 20 Apr 2025 19:41:59 +0500 Subject: [PATCH 108/170] fix: title : --- book.toml | 2 +- deploy/prepare_header_title.sh | 4 ++-- src/SUMMARY.md | 1 + src/administration-guide/notifications.md | 1 + theme/header.css | 1 + 5 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 src/administration-guide/notifications.md diff --git a/book.toml b/book.toml index ae88584..6556306 100644 --- a/book.toml +++ b/book.toml @@ -3,7 +3,7 @@ authors = ["Denis Gukov"] language = "en" multilingual = false src = "src" -title = "" +title = "Semaphore Docs" [preprocessor.tabs] diff --git a/deploy/prepare_header_title.sh b/deploy/prepare_header_title.sh index ce46314..0847e58 100755 --- a/deploy/prepare_header_title.sh +++ b/deploy/prepare_header_title.sh @@ -7,9 +7,9 @@ echo "Move HTML files to their own directories and rename them to index.html" find . -type f -name "index.html" | while read file; do if [[ "$OSTYPE" == "darwin"* ]]; then - sed -i '' 's/\>Semaphore Docs\ Semaphore DocsSemaphore Docs\Semaphore Docs\ Semaphore DocsSemaphore Docs\ Date: Sun, 20 Apr 2025 21:24:37 +0500 Subject: [PATCH 109/170] feat: notifications --- src/SUMMARY.md | 4 ++-- src/administration-guide/notifications.md | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 55d3912..ee4bbaf 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -64,11 +64,11 @@ * [Bitbucket Access Token](./user-guide/repositories/bitbucket_access_token.md) * [Integrations](./user-guide/integrations.md) * [Team](./user-guide/team.md) - * [Admin](./user-guide/admin/README.md) + * [FAQ]() * [Troubleshooting](./faq/troubleshooting.md) diff --git a/src/administration-guide/notifications.md b/src/administration-guide/notifications.md index 8774b8d..5c01c08 100644 --- a/src/administration-guide/notifications.md +++ b/src/administration-guide/notifications.md @@ -1 +1,4 @@ -# Notifications \ No newline at end of file +# Notifications + +Semaphore UI supports following notifications: + From e3a47bf05ec16bdc0eebde3a243ebc3a3b0bdcda Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 21 Apr 2025 01:40:56 +0500 Subject: [PATCH 110/170] feat: kerberos --- src/SUMMARY.md | 1 + src/user-guide/inventory/kerberos.md | 68 ++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/user-guide/inventory/kerberos.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ee4bbaf..4419382 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -59,6 +59,7 @@ * [Schedules](./user-guide/schedules.md) * [Key Store](./user-guide/key-store.md) * [Inventory](./user-guide/inventory.md) + * [Kerberos](./user-guide/inventory/kerberos.md) * [Variable Groups](./user-guide/environment.md) * [Repositories](./user-guide/repositories.md) * [Bitbucket Access Token](./user-guide/repositories/bitbucket_access_token.md) diff --git a/src/user-guide/inventory/kerberos.md b/src/user-guide/inventory/kerberos.md new file mode 100644 index 0000000..3ef00f5 --- /dev/null +++ b/src/user-guide/inventory/kerberos.md @@ -0,0 +1,68 @@ +# Kerberos authentication (Ansible + WinRM) + +Semaphore supports Kerberos authentication when running playbooks against Windows hosts via WinRM. + +## Inventory configuration + +```ini +[windows] +hostname + +[windows:vars] +ansible_port=5985 +ansible_connection=winrm +ansible_winrm_server_cert_validation=ignore +ansible_winrm_transport=ntlm +ansible_winrm_kinit_mode=managed +ansible_winrm_scheme=http +``` + +Also make sure: + +* A username and password are provided (Semaphore credentials) +* The user format is `domain\\username` (e.g., `CORP\\admin`) if needed + +The key setting is: + +```ini +ansible_winrm_kinit_mode=managed +``` + +This tells Ansible to **automatically acquire a Kerberos ticket** using the provided username/password without requiring you to manually run kinit. + + +## Example Playbook + +```yaml +- hosts: all + gather_facts: false + + tasks: + - win_ping: +``` + +This verifies basic connectivity using WinRM + Kerberos. + + +## Semaphore UI host requirements + +On the Semaphore host, install the following packages: + +```bash +sudo apt install libkrb5-dev krb5-user +``` + +Then edit `/etc/krb5.conf` and set your default realm (domain name): + +```ini +[libdefaults] + default_realm = YOUR.DOMAIN.NAME +``` + +This must match your Active Directory domain. + +## Notes + +* You do not need to run kinit manually — Ansible handles ticket acquisition when `ansible_winrm_kinit_mode=managed` is set. + +* Works with the default NTLM transport (no SSL needed if using HTTP and `cert_validation=ignore`). \ No newline at end of file From 5fac1beed19ce22b654a3858288ce1a28f9bb37d Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 21 Apr 2025 01:43:55 +0500 Subject: [PATCH 111/170] chore: add breadcrombs --- src/user-guide/inventory/kerberos.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/user-guide/inventory/kerberos.md b/src/user-guide/inventory/kerberos.md index 3ef00f5..383d262 100644 --- a/src/user-guide/inventory/kerberos.md +++ b/src/user-guide/inventory/kerberos.md @@ -1,3 +1,10 @@ + + + # Kerberos authentication (Ansible + WinRM) Semaphore supports Kerberos authentication when running playbooks against Windows hosts via WinRM. From 660c0cd2a105176acb44027de6871e9a8e785f25 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 21 Apr 2025 01:44:31 +0500 Subject: [PATCH 112/170] chore: formatting --- src/user-guide/inventory/kerberos.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user-guide/inventory/kerberos.md b/src/user-guide/inventory/kerberos.md index 383d262..fa51197 100644 --- a/src/user-guide/inventory/kerberos.md +++ b/src/user-guide/inventory/kerberos.md @@ -5,9 +5,9 @@ -# Kerberos authentication (Ansible + WinRM) +# Kerberos authentication -Semaphore supports Kerberos authentication when running playbooks against Windows hosts via WinRM. +Semaphore supports Kerberos authentication when running playbooks against **Windows hosts via WinRM**. ## Inventory configuration From b39df05e5db92e7a2177858fb9ca54e3e011d5dd Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 21 Apr 2025 02:06:58 +0500 Subject: [PATCH 113/170] chore: update script --- deploy/prepare_header_title.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/prepare_header_title.sh b/deploy/prepare_header_title.sh index 0847e58..a6b33ae 100755 --- a/deploy/prepare_header_title.sh +++ b/deploy/prepare_header_title.sh @@ -7,9 +7,9 @@ echo "Move HTML files to their own directories and rename them to index.html" find . -type f -name "index.html" | while read file; do if [[ "$OSTYPE" == "darwin"* ]]; then - sed -i '' 's/\>Semaphore Docs\Semaphore Docs//g' "$file" else - sed -i 's/\>Semaphore Docs\Semaphore Docs/>/g' "$file" fi done From a0140508b74589b8a0304dbbd31fe92cd61fed33 Mon Sep 17 00:00:00 2001 From: rob518183 <167966144+rob518183@users.noreply.github.com> Date: Tue, 22 Apr 2025 09:00:11 +0200 Subject: [PATCH 114/170] Update ldap.md --- src/administration-guide/ldap.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/administration-guide/ldap.md b/src/administration-guide/ldap.md index 81e932c..a6dadb1 100644 --- a/src/administration-guide/ldap.md +++ b/src/administration-guide/ldap.md @@ -24,8 +24,8 @@ All SSO provider options: | Parameter | Environment Variables | Description | | --------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------- | -| `ldap_binddn` | `SEMAPHORE_LDAP_BIND_DN` | | -| `ldap_bindpassword` | `SEMAPHORE_LDAP_BIND_PASSWORD` | Password of LDAP user which used as Bind DN. | +| `ldap_binddn` | `SEMAPHORE_LDAP_BIND_DN` | Name of LDAP user object to bind. | +| `ldap_bindpassword` | `SEMAPHORE_LDAP_BIND_PASSWORD` | Password of LDAP user defined in Bind DN. | | `ldap_server` | `SEMAPHORE_LDAP_SERVER` | LDAP server host including port. For example: `localhost:389`. | | `ldap_searchdn` | `SEMAPHORE_LDAP_SEARCH_DN` | Scope where users will be searched. For example: `ou=users,dc=example,dc=org`. | | `ldap_searchfilter` | `SEMAPHORE_LDAP_SEARCH_FILTER` | Users search expression. Default: `(&(objectClass=inetOrgPerson)(uid=%s))`, where `%s` will replaced to entered login. | @@ -54,6 +54,7 @@ Semaphore is attempting to claim the email field first. If it is empty, the expr ### Troubleshooting Use `ldapwhoami` tool to check if your **BindDN** works: +This tool is provided by the **openldap-clients** package. ```bash ldapwhoami\ @@ -66,7 +67,7 @@ ldapwhoami\ It will ask interactively for the password, and should return code **0** and echo out the **DN** as specified.
    - Please read Troubleshooting section if you have issues with LDAP. + Please read Troubleshooting section if you have issues with LDAP.
    @@ -144,4 +145,4 @@ docker run -d -p 3000:3000 --name semaphore \ -e 'SEMAPHORE_LDAP_MAPPING_MAIL={{ .cn }}@ldap.semaphore.run' \ -e 'SEMAPHORE_LDAP_MAPPING_UID=|' \ -e 'SEMAPHORE_LDAP_MAPPING_CN=cn' \ - semaphoreui/semaphore:latest --> \ No newline at end of file + semaphoreui/semaphore:latest --> From 357ef125614e10f2bb47fbf6b9ba4ffdfc703298 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Tue, 22 Apr 2025 12:31:20 +0200 Subject: [PATCH 115/170] Replaced duplicate ansible template explanation with an overview and links to different template types --- src/user-guide/task-templates/README.md | 54 +++---------------------- 1 file changed, 5 insertions(+), 49 deletions(-) diff --git a/src/user-guide/task-templates/README.md b/src/user-guide/task-templates/README.md index 5859340..c379234 100644 --- a/src/user-guide/task-templates/README.md +++ b/src/user-guide/task-templates/README.md @@ -2,52 +2,8 @@ Templates define how to run Semaphore tasks. Currently the following task types are supported: -* Playbook repository -* Playbook filename -* Inventory -* Environment -* Vault password file -* Extra CLI arguments -* and much more - -![](../../.gitbook/assets/template\_new\_ipad.png) - -The task template can be one of the following types: - -* [Task](#task) -* [Build](#build) -* [Deploy](#deploy) - -### Task - -Just runs specified playbooks with specified parameters. - -### Build - -This type of template should be used to create [artifacts](https://en.wikipedia.org/wiki/Artifact\_\(software\_development\)). The start version of the artifact can be specified in a template parameter. Each run increments the artifact version. - -![](<../../.gitbook/assets/template\_new\_build\_ipad (1).png>) - -Semaphore doesn't support artifacts out-of-box, it only provides task versioning. You should implement the artifact creation yourself. Read the article [CI/CD](../../administration-guide/cicd.md) to know how to do this. - -### Deploy - -This type of template should be used to deploy artifacts to the destination servers. Each `deploy` template is associated with a `build` template. - -![](../../.gitbook/assets/template\_new\_deploy\_ipad.png) - -This allows you to deploy a specific version of the artifact to the servers. - -### Schedule - -You can set up task scheduling by specifying a cron schedule in the template settings. Cron expression format you can find in [documentation](https://pkg.go.dev/github.com/robfig/cron/v3#hdr-CRON\_Expression\_Format). - -![](../../.gitbook/assets/template\_schedule.png) - -#### Run a task when a new commit is added to the repository - -You can use cron to periodically check for new commits in the repository and trigger a task upon their arrival. - -For example you have source code of the app in the git repository. You can add it to **Repositories** and trigger the Build task for new commits. - -![](../../.gitbook/assets/template\_schedule\_commit.png) +* [Ansible](./ansible.md) +* [Terraform/OpenTofu](./terraform.md) +* [Shell](./bash.md) +* [Powershell](./powershell.md) +* [Python](./python.md) From 4c1b1788bc9d037d5c2514aa941aedc253e998f2 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Tue, 22 Apr 2025 12:47:45 +0200 Subject: [PATCH 116/170] Add a dedicated claims policy for Semaphore that includes more user attributes (groups, email, name, etc.) in the ID token --- src/administration-guide/openid/authelia.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/administration-guide/openid/authelia.md b/src/administration-guide/openid/authelia.md index 9893c10..1e22876 100644 --- a/src/administration-guide/openid/authelia.md +++ b/src/administration-guide/openid/authelia.md @@ -9,9 +9,20 @@ Authelia `config.yaml`: ```yaml identity_providers: oidc: + claims_policies: + semaphore_claims_policy: + id_token: + - groups + - email + - email_verified + - alt_emails + - preferred_username + - name + clients: - client_id: semaphore client_name: Semaphore client_secret: 'your_secret' + claims_policy: semaphore_claims_policy public: false authorization_policy: two_factor redirect_uris: From ac9e023d016227183fdb6601d438cd3a88e157da Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Tue, 22 Apr 2025 12:51:22 +0200 Subject: [PATCH 117/170] Fixed indentation --- src/administration-guide/openid/authelia.md | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/administration-guide/openid/authelia.md b/src/administration-guide/openid/authelia.md index 1e22876..7676b79 100644 --- a/src/administration-guide/openid/authelia.md +++ b/src/administration-guide/openid/authelia.md @@ -18,20 +18,20 @@ identity_providers: - alt_emails - preferred_username - name - clients: - - client_id: semaphore - client_name: Semaphore - client_secret: 'your_secret' - claims_policy: semaphore_claims_policy - public: false - authorization_policy: two_factor - redirect_uris: - - https://your-semaphore-domain.com/api/auth/oidc/authelia/redirect - scopes: - - openid - - profile - - email - userinfo_signed_response_alg: none + clients: + - client_id: semaphore + client_name: Semaphore + client_secret: 'your_secret' + claims_policy: semaphore_claims_policy + public: false + authorization_policy: two_factor + redirect_uris: + - https://your-semaphore-domain.com/api/auth/oidc/authelia/redirect + scopes: + - openid + - profile + - email + userinfo_signed_response_alg: none ``` Semaphore `config.json`: From 59345a22c465377480c5f1b7d57beaadec8cc821 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 26 Apr 2025 16:19:21 +0500 Subject: [PATCH 118/170] fix: update docs --- src/administration-guide/api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 7262f0b..1272591 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -21,10 +21,10 @@ Authorization: Bearer YOUR_API_TOKEN ### Creating an API Token There are two ways to create an API token: -- Through the web interface +- Through the web interface (singe 2.14) - Using HTTP request -#### Through the web interface +#### Through the web interface (singe 2.14) You can create and manage your API tokens via the Semaphore web UI: From 2a5273e4161aaafec3c68cb9c9f6ef948c47189d Mon Sep 17 00:00:00 2001 From: Ted Strzalkowski Date: Sun, 27 Apr 2025 09:30:49 -0700 Subject: [PATCH 119/170] Add documentation for Telegram alerts Telegram alerts require some setup before configuring alerts. This change will outline those necessary steps to help new users get working without support. --- src/administration-guide/configuration.md | 6 +-- src/administration-guide/notifications.md | 47 +++++++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index e6ebaab..7d58678 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -41,9 +41,9 @@ Full list of available configuration options: |
    `email_username`
    `SEMAPHORE_EMAIL_USERNAME`

    | | |
    `email_password`
    `SEMAPHORE_EMAIL_PASSWORD`

    | | |
    `email_alert`
    `SEMAPHORE_EMAIL_ALERT`

    | | -|
    `telegram_alert`
    `SEMAPHORE_TELEGRAM_ALERT`

    | | -|
    `telegram_chat`
    `SEMAPHORE_TELEGRAM_CHAT`

    | | -|
    `telegram_token`
    `SEMAPHORE_TELEGRAM_TOKEN`

    | | +|
    `telegram_alert`
    `SEMAPHORE_TELEGRAM_ALERT`

    | Set to True to enable pushing alerts to Telegram. It should be used in combination with `telegram_chat` and `telegram_token`. | +|
    `telegram_chat`
    `SEMAPHORE_TELEGRAM_CHAT`

    | Set to the Chat ID for the chat to send alerts to. Read more in [Telegram Notifications Setup](./notifications.md#chat-id) | +|
    `telegram_token`
    `SEMAPHORE_TELEGRAM_TOKEN`

    | Set to the Authorization Token for the bot that will receive the alert payload. Read more in [Telegram Notifications Setup](./notifications.md#bot-setup) | |
    `slack_alert`
    `SEMAPHORE_SLACK_ALERT`

    | Set to True to enable pushing alerts to slack. It should be used in combination with `slack_url` | |
    `slack_url`
    `SEMAPHORE_SLACK_URL`

    | The slack webhook url. Semaphore will used it to POST Slack formatted json alerts to the provided url. | |
    `microsoft_teams_alert`
    `SEMAPHORE_MICROSOFT_TEAMS_ALERT`

    | Set to True to enable pushing alerts to teams. It should be used in combination with `microsoft_teams_url`. | diff --git a/src/administration-guide/notifications.md b/src/administration-guide/notifications.md index 5c01c08..cc3cae2 100644 --- a/src/administration-guide/notifications.md +++ b/src/administration-guide/notifications.md @@ -2,3 +2,50 @@ Semaphore UI supports following notifications: +* email +* slack +* telegram + +## Telegram + +### Pre-requisites + +In order to configure Semaphore UI to send alerts via Telegram, a few steps are required beforehand on the Telegram side. You'll need to create your own bot that will receive the webhook and you'll need to know the ID of the chat you want to send the message to. + +#### Bot setup + +The easiest way to set up your own bot is to use @BotFather. + +1. In your Telegram client, message @BotFather with `/start`. +1. Follow the prompts to create a new bot and take note of the Authorization Token given in the last step. Note: this token is secret and should be treated as such. +1. Message your new bot with `/start` to start the bot so it can receive messages. + +#### Chat ID + +1. In your Telegram client, message @RawDataBot with any message. +1. Copy the value for the `id` key in the `chat` map. + +#### Testing + +You can use cURL to validate your settings above as follows: + +``` +curl -X POST https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage \ + -d chat_id=YOUR_CHAT_ID \ + -d text="Test message from curl" +``` + +### Configuration + +Using the Chat ID and Token from the previous steps, you can now configure Semaphore UI to send Telegram Alerts as follows: + +``` +telegram_alert: True +telegram_chat: +telegram_token: +``` + +### Per-project Chat IDs + +Each project can use a unique Chat ID. This allows you to separate notifications by project rather than have them all go to the same chat. This overrides the global Chat ID from above. + From f06b33315f7dc87be6dce2a217fe6f7323a69c51 Mon Sep 17 00:00:00 2001 From: Guilhem <39101054+gchalard@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:00:33 +0200 Subject: [PATCH 120/170] Fix orthographic error pipelin --> pipeline --- src/administration-guide/cicd.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/cicd.md b/src/administration-guide/cicd.md index 4ccc522..8ee0e4f 100644 --- a/src/administration-guide/cicd.md +++ b/src/administration-guide/cicd.md @@ -1,6 +1,6 @@ # Pipelines -Semaphore supports simple pipelins with using `build` and `deploy` tasks. +Semaphore supports simple pipelines with using `build` and `deploy` tasks. Semaphore passes `semaphore_vars` variable to each Ansible playbook which it runs. From 5353090d65b5220b2b82fd0ba38cc62ce36371bd Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 30 Apr 2025 12:21:48 +0500 Subject: [PATCH 121/170] feat: update logs docs --- src/administration-guide/logs.md | 55 ++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index 786faa0..d6a7829 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -27,26 +27,69 @@ The Activity Log captures all user actions performed in Semaphore, including: ### Pro version 2.10 and later -Semaphore Pro 2.10+ supports writing the Activity Log to a file. To enable this, add the following configuration to your `config.json`: +**Semaphore Pro** 2.10+ supports writing the Activity Log and Task log to a file. To enable this, add the following configuration to your `config.json`: ```json { "log": { "events": { "enabled": true, - "path": "./events.log" + "logger": { + "filename": "./events.log" + // other logger options + } + }, + "tasks": { + "enabled": true, + "logger": { + "filename": "./tasks.log" + // other logger options + } } } } ``` + Or you can do this using following environment variables: ```bash export SEMAPHORE_EVENT_LOG_ENABLED=True export SEMAPHORE_EVENT_LOG_PATH=./events.log + +export SEMAPHORE_TASK_LOG_ENABLED=True +export SEMAPHORE_TASK_LOG_PATH=./tasks.log ``` +#### Events logging options + +| Parameter | Environment Variables | Description | +| --------------------- | --------------------- | --------------------- | +| `enabled` | `SEMAPHORE_EVENT_LOG_ENABLED` | Enable event logging to file. | +| `format` | `SEMAPHORE_EVENT_LOG_FORMAT` | Log record format. Can be `raw` or `json`. | +| `logger` | `SEMAPHORE_EVENT_LOG_LOGGER` | Logger opitons. | + +#### Tasks logging options + +| Parameter | Environment Variables | Description | +| --------------------- | --------------------- | --------------------- | +| `enabled` | `SEMAPHORE_TASK_LOG_ENABLED` | Enable task logging to file. | +| `format` | `SEMAPHORE_TASK_LOG_FORMAT` | Log record format. Can be `raw` or `json`. | +| `logger` | `SEMAPHORE_TASK_LOG_LOGGER` | Logger opitons. | + +#### Logger options + +| Parameter | Type | Description | +| --------------------- | ------- | --------------------- | +| `filename` | String | Path and name of the file to write logs to. Backup log files will be retained in the same directory. It uses -lumberjack.log in temporary if empty. | +| `maxsize` | Integer | The maximum size in megabytes of the log file before it gets rotated. It defaults to 100 megabytes. | +| `maxage` | Integer | The maximum number of days to retain old log files based on the timestamp encoded in their filename. Note that a day is defined as 24 hours and may not exactly correspond to calendar days due to daylight savings, leap seconds, etc. The default is not to remove old log files based on age. | +| `maxbackups` | Integer | The maximum number of old log files to retain. The default is to retain all old log files (though MaxAge may still cause them to get deleted.) | +| `localtime` | Boolean | Determines if the time used for formatting the timestamps in backup files is the computer's local time. The default is to use UTC time. | +| `compress` | Boolean | Determines if the rotated log files should be compressed using gzip. The default is not to perform compression. | + + + Each line in the file follows this format: ``` @@ -55,9 +98,9 @@ Each line in the file follows this format: --- -## Task log +## Task history -Task Logs detail the execution of tasks in Semaphore. You can view them in real-time or access historical logs through the web interface. +Semaphore stores information about task execution in the database. Task history provides a detailed view of all executed tasks, including their status and logs. You can monitor tasks in real time or review historical logs through the web interface. ### Configuring task retention @@ -83,7 +126,7 @@ When the number of tasks exceeds this limit, the oldest Task Logs are automatica ## Summary - **Server log:** Written to stdout; viewable via `journalctl` if running under systemd. -- **Activity log:** Tracks all user actions. Optionally, Pro 2.10+ can write these to a file. -- **Task log:** Stores real-time and historical task execution logs. Retention is configurable per template. +- **Activity and tasks log:** Tracks all user actions. Optionally, **Pro 2.10+** can write these to a file. +- **Task history:** Stores real-time and historical task execution logs. Retention is configurable per template. Following these guidelines ensures you have proper visibility into Semaphore UI operations while controlling storage usage and log retention. \ No newline at end of file From 41f3766939aec042ee1f2e940f47dcb26425af31 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 30 Apr 2025 12:44:49 +0500 Subject: [PATCH 122/170] schedule: timezone --- src/user-guide/schedules.md | 46 +++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/src/user-guide/schedules.md b/src/user-guide/schedules.md index cb59bde..3de0951 100644 --- a/src/user-guide/schedules.md +++ b/src/user-guide/schedules.md @@ -2,9 +2,35 @@ The schedule function in Semaphore allows to automate the execution of templates (e.g. playbook runs) at predefined intervals. This feature allows to implement routine automation tasks, such as regular backups, compliance checks, system updates, and more. -## Setup and Configuration +Make sure to restart the Semaphore service after making changes for them to take effect. -### Accessing the Schedule Feature +## Setup and configuration + +## Timezone configuration + +By default, the schedule feature operates in the UTC timezone. However, this can be customized to match your local timezone or specific requirements. + +You can change the timezone by updating the configuration file or setting an environment variable: + +1. **Using the configuration file**: + Add or update the `timezone` field in your Semaphore configuration file: + ```json + { + "schedule": { + "timezone": "America/New_York" + } + } + ``` + +2. **Using an environment variable**: + Set the `SEMAPHORE_SCHEDULE_TIMEZONE` environment variable: + ```bash + export SEMAPHORE_SCHEDULE_TIMEZONE="America/New_York" + ``` + +For a list of valid timezone values, refer to the [IANA Time Zone Database](https://www.iana.org/time-zones). + +### Accessing the schedule feature 1. Log in to your Ansible Semaphore web interface 2. Navigate to the "Schedule" tab in the main navigation menu @@ -12,7 +38,7 @@ The schedule function in Semaphore allows to automate the execution of templates ![](<../.gitbook/assets/schedule01.png>) -### Creating a New Schedule +### Creating a new schedule When creating a new schedule, you'll need to configure the following options: @@ -24,7 +50,7 @@ When creating a new schedule, you'll need to configure the following options: ![](<../.gitbook/assets/schedule02.png>) ![](<../.gitbook/assets/schedule03.png>) -### Cron Format Syntax +### Cron format syntax The schedule uses standard cron syntax with five fields: @@ -47,9 +73,9 @@ Examples: Very helpful cron expression generator: [https://crontab.guru/](https://crontab.guru/) -## Use Cases +## Use cases -### System Maintenance +### System maintenance ```yaml # Example playbook for system updates @@ -72,14 +98,14 @@ Very helpful cron expression generator: [https://crontab.guru/](https://crontab. Schedule this playbook to run weekly during off-hours to ensure systems stay up-to-date. -### Backup Operations +### Backup operations Create schedules for database backups with different frequencies: - Daily backups that retain for one week - Weekly backups that retain for one month - Monthly backups that retain for one year -### Compliance Checks +### Compliance checks Schedule regular compliance scans to ensure systems meet security requirements: @@ -98,11 +124,11 @@ Schedule regular compliance scans to ensure systems meet security requirements: flat: yes ``` -### Environment Provisioning and Cleanup +### Environment provisioning and cleanup For development or testing environments. Schedule cloud environment creation in the morning and teardown in the evening to optimize costs. -## Best Practices +## Best practices * Use descriptive names for schedules that indicate both function and timing (e.g. "Weekly-Backup-Sunday-2AM") * Avoid scheduling too many resource-intensive tasks concurrently From d4cc1b97e4a2eccdb96af6d043dd3bf9765a2fb3 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 30 Apr 2025 13:12:46 +0500 Subject: [PATCH 123/170] ... --- src/SUMMARY.md | 16 ++++++++-------- .../task-templates/{ => apps}/ansible.md | 12 ++++++------ src/user-guide/task-templates/{ => apps}/bash.md | 4 ++-- .../task-templates/{ => apps}/powershell.md | 0 .../task-templates/{ => apps}/python.md | 0 .../task-templates/{ => apps}/terraform.md | 4 ++-- .../{ => apps}/terraform/states.md | 5 +++-- .../{ => apps}/terraform/workspaces.md | 2 +- .../task-templates/{pulumi.md => survey-vars.md} | 5 +++-- 9 files changed, 25 insertions(+), 23 deletions(-) rename src/user-guide/task-templates/{ => apps}/ansible.md (85%) rename src/user-guide/task-templates/{ => apps}/bash.md (82%) rename src/user-guide/task-templates/{ => apps}/powershell.md (100%) rename src/user-guide/task-templates/{ => apps}/python.md (100%) rename src/user-guide/task-templates/{ => apps}/terraform.md (81%) rename src/user-guide/task-templates/{ => apps}/terraform/states.md (52%) rename src/user-guide/task-templates/{ => apps}/terraform/workspaces.md (61%) rename src/user-guide/task-templates/{pulumi.md => survey-vars.md} (53%) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 4419382..b0a4e50 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -46,15 +46,15 @@ * [History](./user-guide/projects/history.md) * [Activity](./user-guide/projects/activity.md) * [Settings](./user-guide/projects/settings.md) - * [Runners 🅿](./user-guide/projects/runners.md) + * [Runners (💎 Pro)](./user-guide/projects/runners.md) * [Task Templates](./user-guide/task-templates/README.md) - * [Ansible](./user-guide/task-templates/ansible.md) - * [Terraform/OpenTofu](./user-guide/task-templates/terraform.md) - * [Workspaces](./user-guide/task-templates/terraform/workspaces.md) - * [States 🅿](./user-guide/task-templates/terraform/states.md) - * [Shell/Bash scripts](./user-guide/task-templates/bash.md) - * [PowerShell](./user-guide/task-templates/powershell.md) - * [Python](./user-guide/task-templates/python.md) + * [Ansible](./user-guide/apps/task-templates/apps/ansible.md) + * [Terraform/OpenTofu](./user-guide/task-templates/apps/terraform.md) + * [Workspaces](./user-guide/task-templates/apps/terraform/workspaces.md) + * [States (💎 Pro)](./user-guide/task-templates/apps/terraform/states.md) + * [Shell/Bash scripts](./user-guide/task-templates/apps/bash.md) + * [PowerShell](./user-guide/task-templates/apps/powershell.md) + * [Python](./user-guide/task-templates/apps/python.md) * [Tasks](./user-guide/tasks.md) * [Schedules](./user-guide/schedules.md) * [Key Store](./user-guide/key-store.md) diff --git a/src/user-guide/task-templates/ansible.md b/src/user-guide/task-templates/apps/ansible.md similarity index 85% rename from src/user-guide/task-templates/ansible.md rename to src/user-guide/task-templates/apps/ansible.md index 8a0a395..2335d19 100644 --- a/src/user-guide/task-templates/ansible.md +++ b/src/user-guide/task-templates/apps/ansible.md @@ -9,7 +9,7 @@ Using Semaphore UI you can run Ansible playbooks. To do this, you need to create 1. Go go **Task Templates** section, click on **New Template** and then **Ansible Playbook**. -![](<../../.gitbook/assets/ansible_1.png>) +![](<../../../.gitbook/assets/ansible_1.png>) 2. Set up the template. @@ -22,7 +22,7 @@ The template allows you to specify the following parameters: * Vaults * and much more -![](<../../.gitbook/assets/ansible_2.png>) +![](<../../../.gitbook/assets/ansible_2.png>) An ansible-playbook template can be one of the following types: @@ -38,7 +38,7 @@ Just runs specified playbooks with specified parameters. This type of template should be used to create [artifacts](https://en.wikipedia.org/wiki/Artifact\_\(software\_development\)). The start version of the artifact can be specified in a template parameter. Each run increments the artifact version. -![](<../../.gitbook/assets/template\_new\_build\_ipad (1).png>) +![](<../../../.gitbook/assets/template\_new\_build\_ipad (1).png>) Semaphore doesn't support artifacts out-of-box, it only provides task versioning. You should implement the artifact creation yourself. Read the article [CI/CD](../../administration-guide/cicd.md) to know how to do this. @@ -46,7 +46,7 @@ Semaphore doesn't support artifacts out-of-box, it only provides task versioning This type of template should be used to deploy artifacts to the destination servers. Each `deploy` template is associated with a `build` template. -![](../../.gitbook/assets/template\_new\_deploy\_ipad.png) +![](../../../.gitbook/assets/template\_new\_deploy\_ipad.png) This allows you to deploy a specific version of the artifact to the servers. @@ -54,7 +54,7 @@ This allows you to deploy a specific version of the artifact to the servers. You can set up task scheduling by specifying a cron schedule in the template settings. Cron expression format you can find in [documentation](https://pkg.go.dev/github.com/robfig/cron/v3#hdr-CRON\_Expression\_Format). -![](../../.gitbook/assets/template\_schedule.png) +![](../../../.gitbook/assets/template\_schedule.png) #### Run a task when a new commit is added to the repository @@ -62,4 +62,4 @@ You can use cron to periodically check for new commits in the repository and tri For example you have source code of the app in the git repository. You can add it to **Repositories** and trigger the Build task for new commits. -![](../../.gitbook/assets/template\_schedule\_commit.png) +![](../../../.gitbook/assets/template\_schedule\_commit.png) diff --git a/src/user-guide/task-templates/bash.md b/src/user-guide/task-templates/apps/bash.md similarity index 82% rename from src/user-guide/task-templates/bash.md rename to src/user-guide/task-templates/apps/bash.md index 9b2690f..758ea26 100644 --- a/src/user-guide/task-templates/bash.md +++ b/src/user-guide/task-templates/apps/bash.md @@ -9,10 +9,10 @@ Using Semaphore UI you can run Bash scripts. To do this, you need to create a ** 1. Go go Task Templates section and click the **New Template** button. -![](<../../.gitbook/assets/bash_1.png>) +![](<../../../.gitbook/assets/bash_1.png>) 2. Set up the template and click the **Create** button. -![](<../../.gitbook/assets/bash_2.png>) +![](<../../../.gitbook/assets/bash_2.png>) 3. You can now run your Bash script. \ No newline at end of file diff --git a/src/user-guide/task-templates/powershell.md b/src/user-guide/task-templates/apps/powershell.md similarity index 100% rename from src/user-guide/task-templates/powershell.md rename to src/user-guide/task-templates/apps/powershell.md diff --git a/src/user-guide/task-templates/python.md b/src/user-guide/task-templates/apps/python.md similarity index 100% rename from src/user-guide/task-templates/python.md rename to src/user-guide/task-templates/apps/python.md diff --git a/src/user-guide/task-templates/terraform.md b/src/user-guide/task-templates/apps/terraform.md similarity index 81% rename from src/user-guide/task-templates/terraform.md rename to src/user-guide/task-templates/apps/terraform.md index b598752..4f15113 100644 --- a/src/user-guide/task-templates/terraform.md +++ b/src/user-guide/task-templates/apps/terraform.md @@ -9,10 +9,10 @@ Using Semaphore UI you can run Terraform code. To do this, you need to create a 1. Go go Task Templates section and click the **New Template** button. -![](<../../.gitbook/assets/terraform_1.webp>) +![](<../../../.gitbook/assets/terraform_1.webp>) 2. Set up the template and click the **Create** button. -![](<../../.gitbook/assets/terraform_2.webp>) +![](<../../../.gitbook/assets/terraform_2.webp>) 3. You can now run your Terraform code. \ No newline at end of file diff --git a/src/user-guide/task-templates/terraform/states.md b/src/user-guide/task-templates/apps/terraform/states.md similarity index 52% rename from src/user-guide/task-templates/terraform/states.md rename to src/user-guide/task-templates/apps/terraform/states.md index 6fe18d3..e1aefc9 100644 --- a/src/user-guide/task-templates/terraform/states.md +++ b/src/user-guide/task-templates/apps/terraform/states.md @@ -1,7 +1,8 @@ -# States 🅿 +# States (💎 Pro) + diff --git a/src/user-guide/task-templates/terraform/workspaces.md b/src/user-guide/task-templates/apps/terraform/workspaces.md similarity index 61% rename from src/user-guide/task-templates/terraform/workspaces.md rename to src/user-guide/task-templates/apps/terraform/workspaces.md index 9ba1865..fb362ae 100644 --- a/src/user-guide/task-templates/terraform/workspaces.md +++ b/src/user-guide/task-templates/apps/terraform/workspaces.md @@ -1,6 +1,6 @@ diff --git a/src/user-guide/task-templates/pulumi.md b/src/user-guide/task-templates/survey-vars.md similarity index 53% rename from src/user-guide/task-templates/pulumi.md rename to src/user-guide/task-templates/survey-vars.md index e30c1e5..6e54ee8 100644 --- a/src/user-guide/task-templates/pulumi.md +++ b/src/user-guide/task-templates/survey-vars.md @@ -1,6 +1,7 @@ -# Pulumi + +![](https://www.semaphoreui.com/uploads/v2.14/survey.webp) \ No newline at end of file From ed9f8476afb3ea966ed9e447e91c011e05d284db Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 7 May 2025 15:47:16 +0500 Subject: [PATCH 124/170] ... --- src/administration-guide/api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 1272591..c0cf242 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -21,10 +21,10 @@ Authorization: Bearer YOUR_API_TOKEN ### Creating an API Token There are two ways to create an API token: -- Through the web interface (singe 2.14) +- Through the web interface (since 2.14) - Using HTTP request -#### Through the web interface (singe 2.14) +#### Through the web interface (since 2.14) You can create and manage your API tokens via the Semaphore web UI: From dcd06a85424412b3da8c1a877c0da138df5bb7bb Mon Sep 17 00:00:00 2001 From: Jonathan Hull <43802921+IguanaBob@users.noreply.github.com> Date: Thu, 8 May 2025 10:04:44 -0500 Subject: [PATCH 125/170] Update configuration.md Document email_tls configuration option. --- src/administration-guide/configuration.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index 7d58678..51b09d3 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -38,6 +38,7 @@ Full list of available configuration options: |
    `email_host`
    `SEMAPHORE_EMAIL_HOST`

    | | |
    `email_port`
    `SEMAPHORE_EMAIL_PORT`

    | | |
    `email_secure`
    `SEMAPHORE_EMAIL_SECURE`

    | | +|
    `email_tls`
    `SEMAPHORE_EMAIL_TLS`

    | | |
    `email_username`
    `SEMAPHORE_EMAIL_USERNAME`

    | | |
    `email_password`
    `SEMAPHORE_EMAIL_PASSWORD`

    | | |
    `email_alert`
    `SEMAPHORE_EMAIL_ALERT`

    | | From 23da066a767ebcfac70805eed07f6e908cd770b9 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 11 May 2025 13:07:20 +0500 Subject: [PATCH 126/170] feat: add readme --- README.md | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 126 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f42f9f..fe9cafe 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,128 @@ # Semaphore Docs -We use [mdBook](https://github.com/rust-lang/mdBook) engine. \ No newline at end of file +Semaphore Docs is the official documentation site for [Semaphore UI](https://github.com/semaphoreui/semaphore), a modern UI and API for Ansible, Terraform, OpenTofu, PowerShell, and other DevOps tools. This documentation is built using [mdBook](https://github.com/rust-lang/mdBook) and includes guides for both administrators and users. + +## Table of Contents + +- [Features](#features) +- [Getting Started](#getting-started) +- [Installation](#installation) +- [Usage](#usage) +- [Project Structure](#project-structure) +- [Contributing](#contributing) +- [License](#license) +- [Contact & Community](#contact--community) + +--- + +## Features + +- **Comprehensive Admin & User Guides**: Covers installation, configuration, security, API, pipelines, and more. +- **Custom Theming**: Uses custom CSS and JS for tabs, search, and content styling. +- **Mermaid Diagrams**: Integrated support for [Mermaid](https://mermaid-js.github.io/) diagrams. +- **Search**: Built-in search with result limiting. +- **Edit Links**: Direct links to edit pages on GitHub. +- **Responsive Design**: Usable on desktop and mobile devices. + +--- + +## Getting Started + +### Prerequisites + +- [mdBook](https://github.com/rust-lang/mdBook) (install via `cargo install mdbook`) +- [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid) (for diagram support) +- [Ansible](https://docs.ansible.com/) (for build/deploy scripts) +- Python 3 (for some deploy scripts) +- (Optional) Access to the deployment environment and Ansible vault password for full deployment + +--- + +## Installation + +1. **Clone the repository:** + ```sh + git clone https://github.com/semaphoreui/semaphore-docs.git + cd semaphore-docs + ``` + +2. **Install mdBook and plugins:** + ```sh + cargo install mdbook + cargo install mdbook-mermaid + ``` + +3. **(Optional) Set up Python virtual environment for deployment:** + ```sh + cd deploy + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt # if requirements.txt exists + ``` + +4. **Install Ansible collections:** + ```sh + ansible-galaxy collection install -r requirements.yml + ``` + +--- + +## Usage + +### Build the Documentation + +To build the documentation locally: + +```sh +mdbook build +``` + +Or use the provided script (requires Ansible and Python venv): + +```sh +./build.sh +``` + +### Serve Locally + +To preview the documentation with live reload: + +```sh +mdbook serve +``` + +Visit [http://localhost:3000](http://localhost:3000) in your browser. + +### Deploy + +Deployment is managed via Ansible playbooks. To deploy (requires access and vault password): + +```sh +./run.sh +``` + +--- + +## Project Structure + +- `src/` – Main documentation source (Markdown files, SUMMARY.md for navigation) +- `theme/` – Custom CSS, JS, and theme assets +- `deploy/` – Ansible playbooks, scripts, and deployment configuration +- `book.toml` – mdBook configuration (plugins, theme, analytics, etc.) +- `build.sh` / `run.sh` – Helper scripts for building and deploying +- `book/` – Built static site (output) +- `user-guide/`, `administration-guide/`, `faq/` – Main documentation sections + +--- + +## Contributing + +Contributions are welcome! To contribute: + +1. Fork the repository and create your branch. +2. Make your changes in the `src/` directory. +3. Update `src/SUMMARY.md` to add new pages to the navigation. +4. Build and preview your changes locally. +5. Submit a pull request. + +For major changes, please open an issue first to discuss your proposal. \ No newline at end of file From 095931501e685dc6475e7cc256d735cfe0a9f642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Tomczak?= <116025688+MichalTomczakSE@users.noreply.github.com> Date: Mon, 12 May 2025 11:40:03 +0200 Subject: [PATCH 127/170] fix: correction of a typo --- src/administration-guide/configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index 51b09d3..21c31cd 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -81,8 +81,8 @@ If you use nginx or other web server before Semaphore, you should provide config For example you configured NGINX on the server which proxies queries to Semaphore. -Server address `https://exmaple.com` and you proxies all queries `https://exmaple.com/semaphore` to Semaphore. +Server address `https://example.com` and you proxies all queries `https://example.com/semaphore` to Semaphore. -Your `web_host` will be `https://exmaple.com/semaphore`. +Your `web_host` will be `https://example.com/semaphore`. From d2b4ce3ba2b3c258ea340dc1fc1d5a0089bdaffc Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 12 May 2025 21:32:24 +0500 Subject: [PATCH 128/170] feat: add tf http backend docs --- README.md | 127 +----------------- src/SUMMARY.md | 6 +- src/user-guide/key-store.md | 6 +- src/user-guide/projects/activity.md | 6 + src/user-guide/projects/history.md | 6 + src/user-guide/projects/runners.md | 7 + src/user-guide/projects/settings.md | 6 + .../task-templates/apps/terraform/states.md | 60 ++++++++- .../apps/terraform/workspaces.md | 2 +- 9 files changed, 90 insertions(+), 136 deletions(-) diff --git a/README.md b/README.md index fe9cafe..5f42f9f 100644 --- a/README.md +++ b/README.md @@ -1,128 +1,3 @@ # Semaphore Docs -Semaphore Docs is the official documentation site for [Semaphore UI](https://github.com/semaphoreui/semaphore), a modern UI and API for Ansible, Terraform, OpenTofu, PowerShell, and other DevOps tools. This documentation is built using [mdBook](https://github.com/rust-lang/mdBook) and includes guides for both administrators and users. - -## Table of Contents - -- [Features](#features) -- [Getting Started](#getting-started) -- [Installation](#installation) -- [Usage](#usage) -- [Project Structure](#project-structure) -- [Contributing](#contributing) -- [License](#license) -- [Contact & Community](#contact--community) - ---- - -## Features - -- **Comprehensive Admin & User Guides**: Covers installation, configuration, security, API, pipelines, and more. -- **Custom Theming**: Uses custom CSS and JS for tabs, search, and content styling. -- **Mermaid Diagrams**: Integrated support for [Mermaid](https://mermaid-js.github.io/) diagrams. -- **Search**: Built-in search with result limiting. -- **Edit Links**: Direct links to edit pages on GitHub. -- **Responsive Design**: Usable on desktop and mobile devices. - ---- - -## Getting Started - -### Prerequisites - -- [mdBook](https://github.com/rust-lang/mdBook) (install via `cargo install mdbook`) -- [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid) (for diagram support) -- [Ansible](https://docs.ansible.com/) (for build/deploy scripts) -- Python 3 (for some deploy scripts) -- (Optional) Access to the deployment environment and Ansible vault password for full deployment - ---- - -## Installation - -1. **Clone the repository:** - ```sh - git clone https://github.com/semaphoreui/semaphore-docs.git - cd semaphore-docs - ``` - -2. **Install mdBook and plugins:** - ```sh - cargo install mdbook - cargo install mdbook-mermaid - ``` - -3. **(Optional) Set up Python virtual environment for deployment:** - ```sh - cd deploy - python3 -m venv venv - source venv/bin/activate - pip install -r requirements.txt # if requirements.txt exists - ``` - -4. **Install Ansible collections:** - ```sh - ansible-galaxy collection install -r requirements.yml - ``` - ---- - -## Usage - -### Build the Documentation - -To build the documentation locally: - -```sh -mdbook build -``` - -Or use the provided script (requires Ansible and Python venv): - -```sh -./build.sh -``` - -### Serve Locally - -To preview the documentation with live reload: - -```sh -mdbook serve -``` - -Visit [http://localhost:3000](http://localhost:3000) in your browser. - -### Deploy - -Deployment is managed via Ansible playbooks. To deploy (requires access and vault password): - -```sh -./run.sh -``` - ---- - -## Project Structure - -- `src/` – Main documentation source (Markdown files, SUMMARY.md for navigation) -- `theme/` – Custom CSS, JS, and theme assets -- `deploy/` – Ansible playbooks, scripts, and deployment configuration -- `book.toml` – mdBook configuration (plugins, theme, analytics, etc.) -- `build.sh` / `run.sh` – Helper scripts for building and deploying -- `book/` – Built static site (output) -- `user-guide/`, `administration-guide/`, `faq/` – Main documentation sections - ---- - -## Contributing - -Contributions are welcome! To contribute: - -1. Fork the repository and create your branch. -2. Make your changes in the `src/` directory. -3. Update `src/SUMMARY.md` to add new pages to the navigation. -4. Build and preview your changes locally. -5. Submit a pull request. - -For major changes, please open an issue first to discuss your proposal. \ No newline at end of file +We use [mdBook](https://github.com/rust-lang/mdBook) engine. \ No newline at end of file diff --git a/src/SUMMARY.md b/src/SUMMARY.md index b0a4e50..e012f9c 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -46,12 +46,12 @@ * [History](./user-guide/projects/history.md) * [Activity](./user-guide/projects/activity.md) * [Settings](./user-guide/projects/settings.md) - * [Runners (💎 Pro)](./user-guide/projects/runners.md) + * [Runners (Pro)](./user-guide/projects/runners.md) * [Task Templates](./user-guide/task-templates/README.md) - * [Ansible](./user-guide/apps/task-templates/apps/ansible.md) + * [Ansible](./user-guide/task-templates/apps/ansible.md) * [Terraform/OpenTofu](./user-guide/task-templates/apps/terraform.md) * [Workspaces](./user-guide/task-templates/apps/terraform/workspaces.md) - * [States (💎 Pro)](./user-guide/task-templates/apps/terraform/states.md) + * [HTTP Backend (Pro)](./user-guide/task-templates/apps/terraform/states.md) * [Shell/Bash scripts](./user-guide/task-templates/apps/bash.md) * [PowerShell](./user-guide/task-templates/apps/powershell.md) * [Python](./user-guide/task-templates/apps/python.md) diff --git a/src/user-guide/key-store.md b/src/user-guide/key-store.md index b7d2b96..a88a460 100644 --- a/src/user-guide/key-store.md +++ b/src/user-guide/key-store.md @@ -6,7 +6,7 @@ It is helpful to have configured all required access keys before setting up othe ## Types -### SSH +### 1. SSH SSH Keys are used to access remote servers as well as remote Repositories. If you need assistance quickly generating a key and placing it on your host, [here is a quick guide.](https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-20-04) @@ -18,7 +18,7 @@ Below are links to the docs for some common Git Repositories: * [GitLab](https://docs.gitlab.com/ee/user/ssh.html) * [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/set-up-an-ssh-key/) -### Login With Password +### 2. Login With Password Login With Password is a username and password/access token combination that can be used to do the following: * Authenticate to remote hosts (although this is less secure than using SSH keys) * Sudo credentials on remote hosts @@ -29,5 +29,5 @@ Login With Password is a username and password/access token combination that can This type of secret can be used as Personal Access Token (PAT) or secret string. Simply leave the Login field empty. -### None +### 3. None This is used as a filler for Repos that do not require authentication, like an Open-Source Repository on GitLab. diff --git a/src/user-guide/projects/activity.md b/src/user-guide/projects/activity.md index e69de29..745a780 100644 --- a/src/user-guide/projects/activity.md +++ b/src/user-guide/projects/activity.md @@ -0,0 +1,6 @@ + + +# Activity diff --git a/src/user-guide/projects/history.md b/src/user-guide/projects/history.md index e69de29..888dfd9 100644 --- a/src/user-guide/projects/history.md +++ b/src/user-guide/projects/history.md @@ -0,0 +1,6 @@ + + +# History diff --git a/src/user-guide/projects/runners.md b/src/user-guide/projects/runners.md index e69de29..e94fb56 100644 --- a/src/user-guide/projects/runners.md +++ b/src/user-guide/projects/runners.md @@ -0,0 +1,7 @@ + + +# Runners (Pro) + diff --git a/src/user-guide/projects/settings.md b/src/user-guide/projects/settings.md index e69de29..ec8cc68 100644 --- a/src/user-guide/projects/settings.md +++ b/src/user-guide/projects/settings.md @@ -0,0 +1,6 @@ + + +# Settings diff --git a/src/user-guide/task-templates/apps/terraform/states.md b/src/user-guide/task-templates/apps/terraform/states.md index e1aefc9..334109b 100644 --- a/src/user-guide/task-templates/apps/terraform/states.md +++ b/src/user-guide/task-templates/apps/terraform/states.md @@ -1,8 +1,62 @@ -# States (💎 Pro) +# HTTP Backend (Pro) + +The Semaphore UI HTTP backend for Terraform provides a secure and convenient way to store and manage Terraform state files directly within Semaphore. This feature is available in the Pro plan and offers several advantages: + +## Features + +- **Secure State Storage**: State files are encrypted and stored securely within Semaphore +- **State Locking**: Prevents concurrent modifications to the same state file +- **Version History**: Track changes to your infrastructure state over time +- **UI Integration**: Manage state files directly through the Semaphore interface + +## Configuration + +To use the Semaphore UI HTTP backend, add the following configuration to your Terraform configuration: + +```hcl +terraform { + backend "http" { + address = "https:///api/terraform/state/" + lock_address = "https:///api/terraform/state//lock" + unlock_address = "https:///api/terraform/state//lock" + username = "semaphore" + password = "" + } +} +``` + +Replace the following placeholders: +- ``: Your Semaphore instance URL +- ``: Your Semaphore project ID +- ``: Your Semaphore API token + +## Accessing State Files + +You can access and manage your Terraform state files through the Semaphore UI: + +1. Navigate to your project in Semaphore +2. Go to the "Terraform" section +3. Select "States" from the sidebar +4. View, download, or manage your state files + +## Best Practices + +- Always use state locking when working in team environments +- Regularly backup your state files +- Use meaningful names for your state files +- Keep your API tokens secure and rotate them periodically + +## Limitations + +- Maximum state file size: 100MB +- State locking timeout: 5 minutes +- Maximum number of state versions: 100 per project + +For more information about managing Terraform state in Semaphore, refer to the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings/backends/http). diff --git a/src/user-guide/task-templates/apps/terraform/workspaces.md b/src/user-guide/task-templates/apps/terraform/workspaces.md index fb362ae..bfe5a89 100644 --- a/src/user-guide/task-templates/apps/terraform/workspaces.md +++ b/src/user-guide/task-templates/apps/terraform/workspaces.md @@ -1,6 +1,6 @@ From d130d2eaa74c26686ede67e6d18f32a9fd1060ef Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 13 May 2025 00:35:41 +0500 Subject: [PATCH 129/170] ... --- src/.gitbook/assets/tf-workspace.webp | Bin 0 -> 414434 bytes src/user-guide/task-templates/apps/bash.md | 4 +- .../task-templates/apps/terraform/states.md | 12 ++-- .../apps/terraform/workspaces.md | 66 ++++++++++++++++++ 4 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 src/.gitbook/assets/tf-workspace.webp diff --git a/src/.gitbook/assets/tf-workspace.webp b/src/.gitbook/assets/tf-workspace.webp new file mode 100644 index 0000000000000000000000000000000000000000..927b5e9817c89670f27e1b047586a6b4b6d4cde1 GIT binary patch literal 414434 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

    SFpWcjmNq(9?2cVGPfPA?5#on4{^vcW7 zBi--`N;6jPd-0pLz`V<4Zb;NWNV7zB)&!{xl5t>ubtJ@0%P}iTIpBuI9FU*gBnh6%cX|ZFME7nvs5baha zoc!L~vk11L)6bgT_!CeCxih5!`A}kaYHAXO7@8xh4iOr5NH^bp0-OG(uR@mH?srAt zj#}Ms4XdR&c8A94fwwCW3aK`zA1};{?*J-UTjsO5%|(C7Mz{k;it= zoMUo5!g{H%(mT|XF7-qpT@Za6J}YbgiEz8eukX^S8)Z8C0AQg_Y51>}A^#bIaU$>C zAlAz#@Hw@A?f0-iN)t%P2TBYXTjy)ik~+vTwydUnm3*w!G4-aN{L+13vLc^lASV)a zN5e9WmnRpS#kimMpJ^%HC%Dp7(^+tUcFSJ7@xd{E0~Oj~HY7vhS#?K=rJFdEi~31U zJhA?dYxu;8c%8#JlsH&|P6_UOGOxv#=eJI|h6@=4cd#gkk+(vxTuBUJV@!f1iBNqm ztAI<)97y~1o?BLBm{6B@pTt+G0|}0a7bmknJ10!iXIwhYQa7K2f6X3XPt7Lz!srSl zrf2XrI!T(21g(-Fa!3h1k^#Oy#DBF>qVv(@iN#Pn&VHvDKugpml(HD% z>12TZM)+S@naJ&i4+!|=R@pesO=izx0BWv$A2COl+awW3U}~v@%Rc|FNYD%5z*3s^ zJo&FsFBR8kc@Jl#Z)~J zahPrKSmRNoP5$cFm?H&#$eXV(i3*;{v0ac-enoGmIu(;q#}xZ;8&31A^uy+|=h3{F z`3|uC_k6H_;l8^<6^@)Vj!Zmi^J}*Ir)TW?Z9ty9jBOeThk29Mbi>_{1PnR*H_Ws| z!IbixHEv=2(s1Gyad;@c`H|MI>9X$=ZfRm^s`L%$e@|Vv(`{i}x=6%BV~81c!OpW` z@~w2c)d;=C_OeeBx*1?3ya{$J`)*ySE0FHp6(wZLh4kaJ5HzP%l+;i@*#6~SX^bf0 zu{+)OiPyu$;ziVk;MyEu z!-5zIhCk=C2-!N!!xr?3d=-vBo@=n+`L(^xWeSmLK@Zi}!&-`2_hvP113lp#t|Irp z^`yOzgg4*+z%C7a4w$~-&Y$`(1W{8d)ByP$zd@a>oAT0OW$TJiyaS}9ZhDd2aq9dY-{CxIe0?;E(R zx4d1)S0(eg(x!fS0{PNMJw08VmGjc=gs;`~k(0!8<0rc}1$nFG-)2>jui z_t3|1g&6!~z>8U1(@fQ7Z&Ot^W#bco0RZwO;Y%usiy1UOF%o0&6)H&&SSj9I8szd} z+OYd`8BHgWehzQMx$l57z~@(&>1I;? z*F(B}K{HnoYY{?xO7Viiwc}XVviG_qi=t7Ry#`)Nc#5FKp~yVqhmh?yc)QHEZ2(ZE z9)?pj{p$LFM9P26zEzS=>4l3vlF%$v8nO~9@7k4i0GzwtNvNAA@;6cu-pwlzy`Ms8 zh=?Y;HF1R+IZ*+JmwktidzZqZ<Xsc7#u_y8SlVX!lOipMIHd;KR6kbfdD90tlG z;wS2Fc-p3t|2)Y0xv?L`G6*kU>@0YI&r^0Mmn6e22ilfHVkgF%Z*JognL?yN9`qqY z208RhC`vz987P6;QyMft15zP=iyX>&$2IwLp5sW2G`W;>SJvidj#X;A?XA@MbQ32P zuSJf|rF2T@ij$yC0NtPiT!;Om9&*j;#?$}~hgHOSNZ6w|p~+$q%#rzUp5;`${K@R^ zb&JpMDi%Gl8=kSpZPRXRz=fvno^NUbIX*6xBi*yIIdcO>mxVjaA)F5f$7kv-%2(Vn zzkpFkyfPN$wi06@oz2J4A!E@sLb;N8g-(r60NpQh?`3q-4W$%YzeJ=%R^WFecx=;- zO0EbhE43X}S%lhogk4TqW$i`42F$&eB@@>2_sg)-Hbs;QeJ}x9S%t&g9HSHG z@AdBAZP?G%Ocb-btVwpE=(a^N(6oRM8!@nuyu)zuh{A4z<$H;ACS(89OnN zdLP9mPxKxHAud<;P#fj>a=ykdAH# z>;jpPs@EYD*e*npbf~ik$4OnXi8~5!<*JVLh(vT(Vypa|w&7st`vx3IVxA8ikIgL=yI4qL53AfrK-z}?8tS7sjsf58FU6);`KlV(LoFa4w_5iu z(1+rOJ&s4XlQNo*asj_uD4K_cu>IH&0Py3eP@EUZ(AXz7&E_kD-bVOfYB z{wut2o%90e9ewpc)AJnkp2fk}<<`-U3G5%phmXF>StIm2lKeuymwcND=M3ACQC8U3 zH69{`Q8aOfR%QxS&Law?gdymbjjfdBW0$F+?JObjj)?^N;n7TT#0)04#B!0B7mo09 z$S_+RAkz7qVwinbTG2%%>a`jvJeCdW3pP8wGy@>9lu?8pm&zG8N^b;%Dh&b7qmkgk zsr0JKs&T{I>t?gwdaPP2BLBtE=}bBXf!HKQohY!huY$q#Jmoi}hw_4^qn5nQb0ugT zc_OZMm<`D(baW*&SPs6X_eiV2{=T)RF@4$GC5It zlj#U4Emf%=z{A7bDqMcJ&p2uOo7i8IQOJEbfngCZ`e|IW?HUcLjRT{v-;%MlCuVN& zD^20l`O-_J<7_4z?Qbuh5STH>7xga0qj%K7?7JqFr;;lmRSsxv_egcE=a0yL`1vdt zgaRzW*tWg~I91KN}?H`txz#ak>tVolipX_ayh@U5|e7vsoaQ)4sLFPL9*w)|aJ z8EZ}(C9_p1`5l(kuy4~b6 z%G{N1tP~sDG^qo*BZBhr<4WhX^OsC*w7~+&?E6-K=f_Xd9kohsAH|jGPR9-4Lcv95 z!(l+exy%ek0EDSPaif$v;EYWh{Rtn@IznU!H$VnABkYD^zqZjWADCb@4T!2)y=p4n zrkK;S+t$gNrJ(%?{P$yN)O|N&9sZ0m>p32gP>>*gZ&95r+TI1Ar4sIl!tRswZ`WEt zaT(#f@%$U&{Lq) zpRraZn`efF;v?y5kTHk0m;kJg!N*5i{(2drcEa(eUs3{U>WF>IApDLsF&~;Nwrw z&<)Kf7!O0iHW z%~!Ga#x+c=;jLNda|DbXVJhsH73{ApU@7Mt=rNL72ich3&z=ohYB65WPKq^M;KXHq zCS$Tne|{v$U6VkGewMpR+<6%`4=ZGM?eW_ig* zy6iY?9fJsJ6R6qqM!pE`;a5UVRzMWj4+o=XJ7G^J930ZQJ{?438ZCR1ukRBj9YR`( zMN5;bc7YAUaUvzC*k6ltaU+cnRO@&5_2R030LcgB&u-|nsw(?cTZ0l)5q)x{t!2ds@tw|!L1%onu^-5EHDxh4RjJBY zbQEt3AFGTyHDOQOOA1~f2BaP#$}YqMfokuU$ctqR`u3e((Vk%gA$NC%meE(qe8?*|iiqlZO;TgzS)?!qQ$LfP5TBHnE&wfi% z>O`XR*zVV5e?FXV8Q_kh%+>@(Kv0oxU_D_2N3j^^v`fSl@ZJFgNWh#1M#oAGR3T$U zc9eoHo9p&p8S(VOx@i^h&@5)4m30O}uwld#H41a6-@O2^Fxk8`R4P{MKeE0>Q?=M3 zIjyK(CLxbFQ%4$X4G5`luGT*>E4|g7G|YVL+{o%d{dKeZ>EIKODFk^jVSJdZVr+5ylnda0 zFL@~KaJLL|URAMM3Vku9BK}|6>|d#SF` zZ+CD{E2n?(L<1Y;5B%!pK{GeW&rLz!e^lWhRtQTn*#EWn=;I++s*Ru(+t&T~M!^GWJ{p7h2$4*-%{6G=H7L!rbT zz%TS}OA^6+Tk43#(|jWBG*uZw!9rPSMM6zKk$9SIJ4Wf+2$14)7Qxl!Zj6@G8EDd8 zRPo*8iu#&wzx2j9G<~}ZC6dexl`Ah3e0_5?-f&btnhUu}eh_ZxZGqhORiK(Vh>6}k zE5z2SY%O1{ zuXqnR8J@kjLREQr5K$r1oz6jg>ufp!!1B2?#7hAj!hwqTt=`&B_FTjC4`Pj}1e{!~ zqGKtdy*$SBsualJ_)xb;n14-{Lu$h1ishV_4R_7ImNh7_dV&cTl^!#dxgQ-pJ6Lsa z#6kCW08|IXBK|~3M$>ha(B*sL2Aa78PMcCsZ0nK3xNy!j5~?dzu!c`3y|c0$dI8Q9 zD^S{HD(19PC6D5k9IHLkW7{@L9eaMi)=%oNY}tK`1DYW>lY--W!_o<+evoC(W(vOy zOqh7%Ano0!=7lRUeqHp2-U|z7+{O({`b^(l(|e1}xCJ%FjORpWepWq-Y+gJ>n{S-H(O@p5D~JLQ zzfiJW(?%EFV<-%u9G4;naE-rD-&9K9C)G>(P;gCG93#SV6PaY&{%<;~Be(oVJe2K2)^&Fo1BUQ|z=P5>T zf}EhyVtwBZ#GAFTKdhbK%My3+Es2g_rW^86)R^C+qM4&*M8ssIQ8y#Bl9q>C`hz%$ zM5aTRVT}Tqvwj(f!^Sw@Cts^b3o$FKlMwNncX03(7da=F?r)wuIJ+Qy5Qhy9c??NP zmG)}xbw07u`(J~9MN@Scn;vZ?{YB(eP}$}9uTpUXmpc6=UuzAhb`F2wkF-h+O2*-g zm!W(A_A)nV^}yT@R}G3njFhi?Waf=Tu|!-*=mLJ0dJW zzD5Ot^0%C2v&^Ou8pYCQubZk)V59#@_{bP^39~f(`c6<2Eg}Z9iCopi_{+4a4)jHI z1D2VzbicjVmR1NeeD*P>tUpP zo7*tqyN@0?amal z>bo`=jUO)$MoDmq%(6Q;W{iko^R+@y%D-uvn9)98tPWjftM@7L&nVqvf_5rX42`^u zzyAs(q}_U&A#Gs;>i%NeLf?aHiQbBtgg-EpS(hsiZr8n!Z4ZY6VQDpUd-k-EO~W&N zt3roZH1ZB&|G*OA;9$_)f?ng9SdV)wT~sH-`a4o);1y(3RXChBNFWdKYA{bP7ef)p z_Kozd4%1efLpD2jE`Uzv=1MV{zkx~ z$CH@IN5bnkKYTDV69yrOSN%xtND3KlEUHt^R*|>YIK$Tw{-^8^WNMZHX8!`LJL7Vu zN*jz@tvZ%wBlkkBwtoaaqaF9BG*MD}xT!!9)u^#Xl3;K7FQ)&zD>nXPxlz?q$+Wq? zM!a7?wM`Vb?LU71KCJq6X>ts~QOuAYeq!*ZpF}uzC|Mt;@ zhC}QlqpC3Z1v{;&QH%OlY_|S>_0Yi(YA~}ULi<&T#D1jD{WpdwOrfFDXaEv|`}3;m zuDQ+n2zCK|29WC66?G;zpFIJKG{3tPXa^}#sr@M~xHtt^lPxO_!;=yh6G@mAoY9cC zqQf&`D>KCQIj+L0NA+@C%+}#Idz6-Vwe!w?g?W*CbChN*T=t2cjQy-R&{ zZVOfKCej3H62Kh6C-V zWQp5USVL8R$q;B}-_F`!h7unU;Dpry*yka}Lm_>499l{eSX+ZbboSGO19a4)b%t(z zrFVT>BJk$a)a;5jD@jkCkw^?~Gpff}#BU0n9ooJBi$=%7M1=Gkn%3&%6DLrwz?ONc zT(fqshyPKI&4l8ev7)Eq&?E%ee&hAhZRE-`(&0wGTA0|_m?O#^kT{7{sPBX#i-e72 zJ`4~7vfYkvTZQv$k8aKu5VkkP2Recb7&-|W^d`g5A&tRt=~V-QE!{Zg_q%T+(bXRt zE3P&5mxWNrh@?cM)TgMt5~=`>gBJe-IZXde zVJ_s;%G(2-`*}JW8%*ieBfV7d{Sp$Dx?$yB?i@HVQ`+e}f(M0uGrT`wO>ye>`hQIj;6~WT zsq;*TzfY;XZ zjLEa)I_XERIb{umu(G%XQnb~Cp+piwmBf(i`c} z0b3e&+kDt_ZP17vXS+`NNIvm)qbk8|Y(^UpZowjnW+H)5Ibz?>J8|z#nr>ok(-5u0 zBXDFh0!D*ACX>mX>LPWsR1&`&!!^;tpEeykeMTKi4m!cVxysoor%ux-n(U|oOj9c_ zMFwDYk|Y`m0KRW`Gy4KQ7octm4?qETE&lQ6dVJCKoH-8|xGNR~kYLHo-*{O0DAW|V zd1)q9MI0F#1*XqIRn&7;^pH7jCY6Q%WCn_H-^U0MCby$+b-sHqh50bTZ9FbzW~T-5 zhi1_GxF#P5P3m0jekM;vxzu0I@br<`Alkb>^&G?h=BE_b?say#N+@} zDxv<3n%eN{YupXAVc3S<0C(|l;4L4V`CRh@HS^zfOUX0E-}B21^;p?BdRbq&G~2$?XElgUuLx zsUK<%A|~*&&3+j%5N8p^dsq-$aFHcw>(93S@B|w}(W#;>N{bmqBfa^CFfJ=E&9`RQ zqDP}dC7Gy18LY4VO4^g9JO@>zvMEZIo=US`=9VWKEr^37eYUEYFEDB!8YLA(z~Wj8}^j!q-ZtZY*q~=$fXLapq%B zFG~^2mN2RJ+F$gPsQ+BW_#hXG@ypUTtV9IrLT>{AIGY;CY?cH52vV9&M7RILiHHP< z|ApLV#o9_7wTl3AG-05fZevZR1*m!^g;h+@PpW~J`;JKY*_x@NWYEjRqgj;RB0dn? zW~TB!`2h3ua0DEvEie)?BB57a?lhczzMH!IGs4c#8pe z(ZBKtP`wi7YJJ*$9ZB0}a*XI42M$R~Kpm)OAVuStgv+geJcA$HN*R-JfrrXmhI-l2 zZp4hOLFK>%=e*E^v!p{S^39x2$Sv7<=1ACdrgwD?O&qmEVpGn?#fBHOcr1&_bzDbc zhqdmV^{&W$t44_Kj<{L#3+!rc5#q+}p%COpWH?SJT2D*t)lDMR)DkCZ|Lf)*3w|j#&xPSfbp8i-3MmdYu`f`n0{@lk{%9^4Xm9H`*%- z>z>zX^ay)S2R=$6k21#46GF`9TS1mhlwz4R zG;%%Esm9|kbN9#V-&mAl2I7gMudWI*({_xgZfS2zIF$uXLvtft<5YfcPDMN?i_-tB zin0Z1bUR`vj`R^{wj9R(9P_`%`vw||L*#^j-E_#u=&%#=R7cL;6~Jn>qem8}>g zBT&Flkd08N{%{n%_d|etQ3~1#)uhf4jJqy{oX`4-eDOj&yU^;-0<3g166g_0LjbwY z>4e0mp>=u(!U9swY+ZvA#7`#0SLzD9YrmYGg}hr_oyQ!V-BQjHx7;njC8fF`jp()8 z>zayXSe=~9p9R>#hgVKS^(6gM>Cjv_u|}en2w&t}y|fbTj450RGFqN3AXA55=5tGS z)A0%cwIHptTHL&36PE$>PX5ydWT7M0c4VJ(rAkY&>o#L^$MZorU_J&!CRg~mw76XO zLgv}y171X7sOVK*tzwPFf+E`TjL1w@2%;Xj5)r22_2!&vVJmNIkE-0?N9JY`0)XI(f(+};f;aL6Uq4efW%=Ba z+EP$6eY*Gu^)ayl?qu!WrvUU~hbX!N%|+$MAU3Xpd7`@XVfqR7iS4T2Jxg%X#!xF;W}^W7b>{djzELIz*LI}*o=taP(Q{Y5 z?hVvw{Xmh}wLT{7kifiLZ-l7M4r8)cPClAWi9?S8cV+-xyo3yDS27}DWvSVhr&A+ zf@v6RR78TbO9|;RTXt+_ZS=cNXRx0t6TXWi1qxNTtAo4_i=|8T&?WkOsF=r=h7hNy zUUKW`_$-Z1S;r$a+|3x_xl^XOp2=^(e+OTQqZxSa$dt~HR^Uk{yN>pAVDRVodCbmo zwe4cHWjZ0qkEe`SVtHX?nhj5pJTX`4IveK51#PaDv2l>`C( zr=*epJ__DILxCtu*Qrd88Vh6>avAbpT4$t8`f+`8VuES$u5&VVA7oW1G^0o81fP^s zQBSzMdTn;ff1j|d(OzJfKkNaEU7AbL2Mrrp-!sOhGliN(m|cM(0;=!Yo6Y-KVfePs z!jv@K-JTb;=2Td){#_=c-wl;;bsdyrv&$zIJ{4j7s3YJrK@=udw$b8I*{V8+&1dvf zPF{@)-~gwB#w9C#~C$(QZ3AdH;DUX9mk*1X*J{HViD3UXj<; zveZb&@`kmC0ywAPG(7X#v4w2+Rr*(PI6&PVk6qW^dE{P`^>$G+U8rzp@aKA|o478} zmgyW`O6M8RDAaZ`s#QOXpbXPw%RK@={0@1AFTO7A0#NI8i?>%PG>8Ue%f<`xS5+3N zY2z2LQz(SO-D$+X5)m!#FR$lT}3#PE=&#d`Qa+0te(r$(hgWk zOk@RUoW}BW#;D(xzN_>zX`4M=ghSpYfgw0ZVN&|WKM9wM&VfF!V0Pdxg}eB23MhHP zBrngDKxuF5i(e}B(;uUtPteR=7EE(B1%jm(UYyz!^xpoF^xCuV|6rL)ERF6nd8{+G zc4gG8YSXTNS6yDyi}N*j|XqnzAE5MEKygU|Clq6xE8yMB_my+G9$@Xu~n zRnpJ>ob&JVr~>k65;n{^kCEU-R&hCypH&`-=2`O=89$Uv;n0SDOSmvNW9w(TJ5>aw z?1T6(_Qii9K5UAdhMEu_Sliif;?Zv(D<%%0hr_9I4_2DLpXVyqxz7{iy?UQw6-N(A zkpxup3J`>jgQucK|3hgu#Kzz0j*Mm;Ff2?O&ZpE-C)nVA?>xJeTBn;rf|;`tBymlf9bW!Kg1Maj?j- z_Fvk~1%4Z>fSAu_zmx+SZ39xGb4V+gBd1e3HoGTYi;#&I_%GLuh+s>3dsnA&D;9cO zy>T}JlMn80TBpB~{)eEk^Ko9=L}hH(MVY(pX$bo%!1|Qq)_v>QOMNN2B2XJ!MM$GY zN+4M&FmbZ~W?ZqczPefjJ^!cTv$^*@>0}pl61%gQl1Ld4xlnb1i!;V*rNKjA^fqI_ zPTMn!@b5{RD5NUdTPDujVQ0{blKZ^Qu$BGbQq(P_$R6pd#fc{ddw#vLPyv>#923|% zKDIE#7-RGcXGOmw)r}ELbKA~5!%_oD{tUdrAGzJjJX!M&itt>Q`wu;uI+N_zMxaU>`qOBPBEzqLN0mvJT23ZsTFqTec9K{n=$_z#H z$v{?pkaZYvfFn8^4USi+Oa3)9Dc$uk3NgcCsMl8zB? zVj!YbFM+@}{g@sujm#|oriilPq$G{gAe$E17tr^f8JekLU97(H#Km7|;Jfwk#JndxtwdBjS_d-cI* z1-d*DxY04&H~0}z*a7pf(grou_^>!mQz`nQ7gGJqrVWowMHW@_zL0^X#5=G0K`Z1> zi%)$jGoA@Z7T&7!A)sgWkcT(*Un7%5#bCC@)CuP)&U~rer4sayw8p`r^6!r; zXh`f8qv5ZW(X#Dk&Fog)7PbN%!EsOC;}Y66l^tY6& zgGd)ad1=U9txjOGsC$9Z0K0lBJf3Tk-)fxyVPS|t3Ya!c?77xW}OkW-vPRLs5$#;R!k1mZtX}H$Kr%gh|-)vZS9us z$CZ+bl=DKbSxW*X`eX36w%(M6)RRSI{^|fq2QeDe6(f^N{<5V!Bpq_e9|5iAoK=lk z2JmN~()DfdBk#G3&&<4_g2*3J=P!=F?&Gw-5U|td8A-Pl@8&b{LwB#d!wOdNt5tvQ zM^CMF>FZvK_`ouhu|*>cg@FQ)2kuL3eqw{r8dhAwLNnCa9~O7+l@n9M5Px&-A#vsw zN7@fcXN@P2dOfrlZ4{eEXblr>FeM%bghc}1B9v}vIfol&ZAzh>BF({ya!+A?!3fcJ zUK|#Kbd1g*kR~2KPkRq(L0Kec;{Wp!ps7F}`kj-BxotudN3%$93pTjh$-`zGlS4ig z%EI@5PWe3DNQV{a`9xWg+_B115X6^%;dlp7{Aa8;x!GBN<=)4+c9FX=KU~tQ;oh;! zl4oQy9{yaoF zc-#d;ffAnEjrmV^!%*+3$UWmJv5JI8jb)0n;|P*I?w1vPCp3;04Xz;G@@*vhYUk%G z3@Za5uz4WNX2pcM*X+U1-$cT~>O`+XPwHVrYy4SNE{y*o#SnZ;C;zIRr7&ZdsTEu` zlos@FYK{+RM0IF6(_8|h4#C_AEe(xv8^bJxhfDRezOtwIlKeCU|vkcyCLDm$}W0@$@ar1UVSCbI&NerzL zQl)?Ddj)H-X7q15)_cYQTP;`noJN>g_AQn*s>*y6MkQBi&#ufZo1UTd0`&uLsa-Gb z6f-7IkpBvZ#|I?ctz-TLJ1!&XgQTLocxE?5**xB?rO9X)$M61#&M)_h5-z#g+DM>e z?`aWXZ(7i{P)+~9m0)7{!E=cBLjD2^nr4w$4~o_-!Yl9ZC2b`~aoRJ0=o(T&pZ+5} z#t~B7KlV1*B|PfM=ZlA_PqNKFec%i04rtuJ>IHP!*4dR;5kHI^Na%khomHeD4`q|| z`lZZb&KN3+RXm~1B*gyR(mbk!`0AIKyeXgHIt>|YSDg+GT4TZ_}2q! zUGlS;dFKbx`m~ge2tY4_(uSeQ@jI_ikM$vQ4aYHmadFFsdXf`~C~Q?*P%;l>h`cCt za?KL~UXGX7DEkwqMEkq-uKf%fLqKRoES8Ri`}@5iH*h}2PwKDt^RL?-G)N8Y@LI>x zLA&6J9o&b#C1CP;{QA0GWSRBx0K92Ix!M<1Khd4Z?@1%{2(i`H3qw7x(gBN45zHxJ zCFic7di>c~yjYfFsMf3cjX=4Nd&7LuF8tX};fAVDA>^57u}%}@rE;{vJ#Q%Xh(0N2 z%t*x6AR5XzpiA{?Z;rDJPMMf8W1}%K?tM#bo|py~X7#$)xEG&`zJ!pV6*;j-pxch> z9KWdqvepcSo$q z>dv)tr_&RrIbX))_*5b|<2^o@CIxL44Z}!=_J!OImMJ0=oP8c3(RPR?Li~&**?|E$ zaL(B`@3ak4huULNmm86G1{-}^=m3FSVsRQfipnmzhVTV!X7rySQK%Pf^(3k++Rnzh zn1FEm!(!&{EG(RVaVtuB+wS`xdX~Nk7b#m=O|8|ce`REbvFaxUGMCvzK4iI_qrk&q zmTWTN*W+42;uE#pbQ=T*PXlC47Jh)X&l3GMS6XvVL5%1>qc>Qr0nBGOEE4KGhNUG0 zEYc0$roJcO;?XbQTHPq9`>OiZ?g1NVP1I;_hw$OD;yXm(XV*|jC85HE3S`9cCeGou zEjmHS0R~#hc;%zcjrYveNl#hjedAaO1utk}5F?54yi|=f(hYb7t-k zf91xE#JX&6m-Ok9aso;6nvkMXB=K0>XaNHqL0@5|i0TnEE_KvDPDP<#ccyBUCS#aP zGa9$TVdQ>#=q`AU*F5pE9?pyMS}|;V13Tpy>#T0?c93faXV|Vv)1tLj|+@!bQL9 zZTwT)U|K1R`O;X&8@w4^`0+C-rKE3&vqHQAMwnmZBsVyz7jWt#m-tyar>aNF)ydw3 zFqwlfsb@2}(yZLv4Le(2$O8+H=9#^bx4DsedCEL{DD(b8FC+mu1~y{e)@bk(2V6?A zS|&&Q4e?NR!krQo#yLy=rEO1&|G0YWv4$YYqh}!?EkWfg`@7>8{_`9fT4Y>Omw~WO zPRqJHFMP@w>7CfrI{y|8Mi~RdtlSxD2~Fb(*;R@tvoZ%kBOC*TOn5_Vs42z@#!CdaB8T7z^Loh^%Yp z^fCn)D14++Glc>!#H$ldNXq8S2dx`{Qy64I#OvCWtf8MOym42&@TlW86#Vvs9eb7p zKUBfmm30DP!;UW(42N!BD0cDYE5-=w=y7o9wwkwkogK*?x)>b;DZ6aR4I9K#U;DOA zD5mLBXg86ws!^JlWdVX?YrVMj(uA7yXXn!^WIlYYhh_qXHu{4II`IoFx*^B_-o`rn z412(gx3mpv^19tmisvt=oXiXruB5xVMU!P`lhH*_43TDQQi zdZJ8#SQk#ojq50g7utgKQ+r+X^gIewwEtiCqbvaKFKt?5Xf( zmb?@{UgoD!7ET4emqFqYxTb4>kB4rJ0!!tt3&l_J?sAfYHIl534Xf)p)-ut>-Ylm9 zk6aod#Ug-+pEoPDkv&)k3zPKynQ#eIM`MPux+xOPO^5KKCCYf7UMf@UlFbGB0sEn*A{NPhzv`)2u5v>$gKgH?hWgGb0B$OhN5wj`elQYxnPG4=SWCRo(QdxW% z@q)VjtsLW>GGLg~^XyL!)+Uv}8VaZk6D|@Pp6~Cl)o{fb5x;{a0BqA+uN4)>a%sAX z=H$q6z$&ceRoPLS`mAF$6JY9m$QhGDYJEogDYw9gg(+yjq_;=*y|AdonFcmCJh{$5 zRex6`u>r!Z>9l30yw2CokV*1hG7MJ=#|+v?{>A7T``tyA>8L~o$F&3RRvr<<0HO&e zyICUimGd8&KEO2xax~arqyDK| zn-&6xklfO-Wo(VlRGpUwC2nu4Ja@Yk*8)%qYcU}1FDi}D&(kIkF7u8tnlN3zsrVF; z2oMIK?SdELK`>p;7I0we_pN(shnqxl^4t&-*)BFdq1NbaopG_Ib@I61db_U*L`{6g zJ$&o;e%SoOX{Os>kE=|FY)Jm)^Y5}zM)TokuNa1E6v|ri)_4OjX9j+ge{|OOyY}xT z!!OK$Nwi1mcjp+ z^IdN?06i?weiCtwpH=FeZu;2|dd(9E0JCk!UziVVwHd6jVox&|8#{YW0_jdGPp86l zhZ(E0sJF0x1aeT9iI}MV9%0Als+uf%esMbK@T z@VjWaz1^-oJw>16HD7ycL^j63Y!nAjCVdg1ez&$>qcv#yC&(ufd?&mNdimyerF%HE}$~ z5j^+JQ-NG`MtpGZ&IIiaHd++}PHZb&9mWQlU)$H-xLHys7be2UfJUN|G<|eReV6Tw z{@UJ}*Jkgka{bv1o}dpE55)RKmtDxGHZPhkc9sq_9e zrM$KtG6Xy5uha(m?hw&p^#$N(pl0DYlwv@<6TL( z>JrWLf&-SZ<~L<+`>zZhVSz)_U%&oSjY6(r;DRTW;hn7V6+{^+&(x0Te1oWvW?r&X zS>;1Q9A(d3P$y|Yfg&kzXHsxQXUa90_F@-gWp^d5fFP5p&<#_^BQc!f4GB}>SrmfD zp0s6bQa&2kT+2-%;hocZ70+_*%y`rE!Au@{T5`ivY*)8G?HpiSlLAug2k0dsvOZS< zZTfhtuNx;6$*-`u$t28Gl_YCBjgX$~=I|h=UZ(%dytV50)i3}LdBYRspmJGX<=4LK z(eJ$i>cy1*-dLst`}eq3ZR?+q>qIWoz>STRvYQ7Gs+((DD#;zX0Y}&gV8+L!JYg_ zX@U{iz#OkVbPqu$g7vHEx!&c6Bz6Y#C5D2;$DIRvI-2VP&HzOAUep!^%{sN+C|X#C zjrhppp587A-On4&5Mu)cCoTc$1Kn8Plokq-xy{rutjs7NYw1<={c5wCvLMpy@ghh$ z+NNO2u1O3!9tYAotB{8}_svb80i35b7 z;1_Q`V(4bDX|5qjr*G|L(lkQk+1M;NP`b-5PU*G2)sMM}J$03{f-E34|FkYUEHLEu zXR?z)%m8-qPcsWs#~NvUwkyfU3`(yp6{f&z#uu8T;3wTDA@Y{YE^!Fj zremxr!C9MSdUy-(%HpbFU?2Tkb9>v*9y*kmr-lJffr^`8W{7m z@?Jc|T-RSCF`MZ>1nUHS(E7Q%<#nKG*m(1J86*7s0FRTHBCkWzj9gzf60gLgGRDqb&}i@!v^%n)5DCiu!kuEtxKRU|Ae$`F8hO6yTwoZrq345egUr`-V*qa7g3F70r#RZ>^x|o<&NxwNkK|n_Gpjz<2VBovFop~c0}Wb*Ox@H{ zLa1b}dvwkl?F9145xP9QdHqTq-KA)CWhgUA#7d#JhIn#hv$hcjS_^Tjlq$)IlMG!G zw>@7(MnW{+_1vHLflnh1vA3owFnetoo1@at2PR}tkrpN}vN`cA_(gk~plS8K`E>ZDOpN0Ob&3xN#a97?$;d=tc62$5eR zzTXKu;;g)&)V5;u=L#$X+b)5g^!VAVG2cxX9*be2HwTQ@f6543tu^Mcc@|7Id`MUR+|#Svrj zAbp-E{5_Ha%2~ySK=!#E*EVfzKWzoa^f5iYYZD8c4r1g&=o(_7d`#R7&qC!mstJfl zXb4(#GSfY%48QIEH25*|)tvk2La-VUT@TY)J_dj#W+m&Y07skTiJBS;3Myn{7FJd~ zJpgJwdM&87GTbE$NCTthf$D^&gEFCcP9w+a3zF+!b)}X8s3U7K!<3z&%emA!`Y&Tt zYw>NP=AjUuyI1U6oP=PCZy0l=lhM$rc(r^27c_2?q<}W><9Wt*(lP zs){TX(t1RJZVP@6`X+z#^jk|Rs78%%j}OI7@C2_zAnw6yo@)-GtAJjklE};XNSz=V z1)LFxKX2QyduHg^z&?UV3xmT|DGw`nJh*eZyR^&MJ5E2cP<+0{H)@v?Ll_<8w$yyI$RxG;>c zyF=G9?cZS$^ylwVZ-Hw&Lo2%XW-|S5sF2ZV5mxKt->05tz z0OoZ?T0qpEgs}17pCp5SV+w#L)?E21%N&x#4gEp8LP8Ow z3I~WAw#J-rr`;I;uW6>8{1$vB8gPpOu$qgj72sbYUr1mL5uo-KdtT>s(;R`a_;w5{C0;*cyQFU}29IV;4RAKj z1Jo&e`PF{5zYv4zuZ6sVd+_BtVSlNAI@hzrG`CG36Zc?V1R`{PGr)a#i0wE{1`9$P zIB6s(?%kc^XZ)rPeiC<2t{;lcrCi3Cow~0O(?7fgm%-0uxjqa`b6~!Vx_hY-ystiY z>wy`f_JG&Sijy)L(oBM8%Qp}Co6@-Q_!(D?f-2Y$dZEp%0oh{ zjON7AI6RIRbF#l6avz@*BNW`kj~e^L`L3j#Bj4l=6DhJV+U)IgE5v?`4&xd`_kyH4 z&aGiS000oS!A|GGJZe9N&|GOBo-Vyne8mS-K7&)y7@%Ki9k1u;-8w*7tr;rt|~JhIguBvXObL=)8r zxnR85`^bNMDXH1r{)qj7slj_C0c}_j;f3yQeX+QGZ{z7y_T|ZD%gB=5dlv}*t)wuK zin(M_GmY^ne?P=l!^{rw^8k1VSl$A3(v9eaXyFs{jr2@iAIzSbf?oL0hsVL?|GF;f z-4vd^(0Jq zr?3iryG13vg>`9cDhWhNhf=+PqOm8T>9{k_Vlv!9|7FLqkB$AxEY|26-ZXm23^SgB z3ZS@fvD{f&rc?E>=m7x7wOR#Cvb>*QwG3-M8CJJu+>R(Im;dRj`XUDuZii< z2ek&Bh7-ZN7=&aw5PU_*gIfe z5U6P+7xH6q*B)(!4rnhJJOw5@50@r7x0ay%eccLhzD>t}$iB3^jf=#76>LjTTfIH)6@WsXYT7=P1LH`zY zz<`CI_$*})!gB)g3e@w^ylsUzAH+oo$x}8|iB6`llp2)2{4)k^bCh~@D%n+K$oH*{+(rRmWonoh zIFws! zJ5hImv*aX3&usltrgY?y6&Q3$q8TIXTmHEThx*YMXoI9WkL6A#J#Qc@@PLwN-7Xm8WniXrqMY=66 zMQ!wx?=!&Q3BKRA^thkN;HS{dwz?nHKy%d1Xt*hgycEz*A_KuT>80TpLK1(pNKy|B#iiK-~EcWiDpYj(`T!?Z%8 z#4>V2t_dJ~cgrsK0fAL#w7TE8iheuhn0|KK_i9GxcgXLK4!RWp^fbnI9jCF{Xsyki zQwwX3D^Y&tNh5W+UMA<^FsXz)?ZB3tU7+<9<{hcSmOMGKH92c&g50T$o{Nr55jZia zow#YU<*p<<;HG0iJ-F%c{jX2~~H9K(TCXC4vc46cw+1F7|3i0FR} z%@EG+W|e$NYjWzNdH4Aga5(TQO763m)Xw#;`3R3Y+hJ%g)vVG)c~0jSVtS6Sl6d%zY(e&2QS>##b zw*rl!Ky+uT6+nBt0ajWC^N+-JEV^^pVYq%TkNm#u$@87mUn#%5wdZ@t!!L5&uIq(a zgJjGRbj_z*Y)yH!i>>&4E{Fu3W2U|+A-|sBlY92*{+!hTUgzxj1Iq8{ml%r^0gfig zLbvN10~Qi9>JlB?YUExXhqM|X&7{-^#NOZ+^d~&qKGJkPAIP|~hK<JQuA@r89Kuxft{&~n@M;aSWcG4mY{gq{TQWg`Cots=EZs)fIm_7rSpI^CClEywCS z`*?4H@DGU13aDhjx7f71bbnJ2-3Megxq37eJ+hngxR&2#e(vN^;_$Sng&gkF09?-6 zF7l6WH5aaN{Bpre!ddd@qe4ba9IB~Q`o;Z(DylTxQ`@Crt$(vz;(3y}9?guqK0dEO z7-CU2PN+cbulbNcU1p#(x$M|s*SJYMwdKa%57}n*Lc6~1+Own;faTU`#~m&l{|r;S zZ?vv?MY1C{UfV;#?{bOn8Y%v>BRtuEK9=AWVr5%wi@%-F+hW2`R6`X_=V5+E4sw0J z7^Fs)xz?V{!hpWt0lQx-ac6zg2(0 zV@{!}u-ZK!71p}u*Z6w$bB<1Nwy>&V9Pr!jf1}qbUbO6I`C`?~14XU60SA#z4Xs(( z$%?awpXYcmno{zBa)agaYKI*IXcrXq;7El11!LIcy|ea(n4?=w*XL|k@#x}Fog;4} z9gfpR_sabUZs(*-&fv;N55F-thp+11&TuOo@Kg63ST3(>y`!8LcKi5OcD8z=nrgIw z?KaEs_v4x^5X*sZAwDL?K1bJOySjEn=Nr)MI|p`LFQvq)->*9!4%u}<-sJ-2gBt#2qKM+Hh$s`Q8H{%w06@HK z#(tR)pg96|vW``>Zu&I~4h2iaWc`l9kx;MKu0%CJ&<9A#;T2GlTYtgfRE5aIt2%ER zfSfgC?40lh*g2a2A3dBi=R3O@A8UfXnRCQ1B&1DjmD$BJ$NL4HRoRYxjpCh2d?VLC zY~KX9I6Vk1SN$!F1?JV0$N?HznU?bBkXi{v%^F(Yo8_G4ELkq4E(UH_+tlSsxi!-} zlwKS)+gvw)dHu>`u;;}~kB5n%N3roNMf-t;`l=1hIVTnB@_wHQDZWpeDHz!QOcDA3 zkIIv;p8LRJY3d*HXJ=DjWpN`F}(Vtc!N~k=rr!%?)QfxyUN?~MK z-lrtt6Ws}&KbR9BaN}{x*#X%-4w=zTyEElY#&s_*&5;;-ZP_n3jc^4J^HPQ_J2T)a}t{%JHC+u)T29ogr* zt+;Xagt^?Xldet>&sL`4M-`WUU)DkIa<~5Gy{1-wanT+bl0aF57bpzRJBo&%hh+N1 z4?Kvn=BF@l+=2&RMO^TxmR$aAYl|2>C+W_zG1wXvU)&d%W|(x?_fHQZkoWlW+FEhd zi zc&IbCQzLyjss-3Z%qhufk_vu4Z{A}A&Jj7NN5LIh9yA-;^#IX(J_G;C_&RszUqEcp zG058<41g(^TKS8)ml=?w=kVbayhgzLmhRdmS^Bi;51m2g{dLYjY5%!Jy{TwL#yZLy zLqOb5G!hSS)#P)j8iT(&F>80#+mjRu;Z!xz2{*6DYv{|qRn0J=R{cC3GdU(;Ju7pUF$- z@{UKQmmW(B_H#`-m?D>vV|rB|8rU4kncNcJuaN6P0%vtQOIwN*>!&=0^|Vf_2s%yF zJkhK35}AEpN|8*XUhN0->-(=7CIjK{Q+R(shO(7dasA7&bt4MQBj_$SY8D|_;6(_(+BM|R-UllxPBXCS?JW?*+ZNN$oOI+*M#$@+y2!1u>S%R|Wg+|DlK-NYDz} z*Z(t5lDd80FtT}1ub=vCA5}=|@yfSk=^ApY&M9GmkIlLK-26&M)lj5{(ZbBRnlht? zLHV9c3QR?B>f5lXQUX=4F=*oUkAC^LTT^+n&M(tmcwigJ>myKR(dlh|3gA#r70Rc5 z5Vy5Q1W@vVNPrzBd{Paf8%LZv-Z0rB^rbSzB502!qjzWbpBAHz5Ff%tn@^f-M~;>k z`N0eXdecYq!XpE(*JI@3(}Y$oG5k*6cdYVrrx&tzM-Ue@3IuT*6Msq_B|tRrA1s(u zSpvnh4)H;p00qr4?O+8I<_{BQJ!wl2e6}?qaZKlpJ;b)pT52KU2bAykW3&TR6ah;x zL6WiJCzma7Q zfc?uPB+>qA-wq$8)-Yz~8E}YTeN??ywB}+=uI?6so--}n7Z^@a=fK^Te ziPYx8sP96E%NtGliTzj~2+?q|WPl3-oWBCJKB3An8;&LnAJwN5PLQZ_4vd*cr?ma9KcqVKkfJ!Vjl#Vk03Hr0W*k2_o}|(>-KvNRcOw14HX<* zpvLYe4LKY~qbL?Y%ZCv}Fo|6!&uR|J zCeaJ|Zdcn>UcWprFsx2gZl>F?HDrK;`wSRVb#|$Vj@cDK-+3a-nzq-gd*T^RvW@&3=e{BLCQx>Ia7?v_ulIrnDrzHnO^v-xBc`J zBeRV9p}F@t-5Rrwa5IUyCJuuG1leRA;v-PEK2XwZL`-LxE6BPpQ}!zr#>DMFJJIO4 z@IkVxQ+Ot=0OSR{uVv8>x@`^yySh+LX&~mp!33+$d>r8A6|FazLl)FnX((WCFl+ zuW?lidN%WF$g{8-Ypzm4cnGV@ZC3gSdcor6QKD>IT;Ne~ZUSXB|Bl7k=Xolf7Rxw) zN-hJmgDR&NNo_||9&UVH8GG;<%f`l%LFKKlNqn`QLW5O%>NOA7a3(FLuH=0}xmy8ou&KXQ1C3N8e)|9TDsVl-sk!^`%H)$%M z6Z3-)9qv#MfV@C@{aKJV9y&?^?AlSoF4)tx1#>aun*gdC@eF;(vO{qXr5TE1>K*SfY z6Fw1kpdLv?EOrgmSi}se5wOrx6|>VTISJAc<|7Y=W^F?gsr(t*KdbH_nAZ<^hzY>1 z>La;!?Q6un8B>?5S}jolPRkx*hkbVaMt{vQ0K_E2CZ6?C0IK;uKCpOS{&68Khj2v@ zRFPGHLvc@J@hkED_;~8@9KfR!d;+?8``4Ty4cfZDJ1znxuT{u=XdKF9>=G@uWBbuG zcwbP}@)uqd2WPh+s2sH{e(07qG;F>Ama-s31*;?rfC2^%-kH6YJ$g~V^v50m0Bp^1 zs;ueRjA8{fHv7p8P!Kj2bJrF8R{``?DCO(hDx}ghcwS0s7e$WP={OiPV$zNXHo^g<<&19ne$mobDQI*E=l7#6QyrSj0hD5 zax7t)c|!uPYsNgx)#ERWYTAgc8@gl{oUTlnQxcv?+JV`Mq;s!+U>AzfU*cs6FJ>h` zppx8O&3SBA2OueayKC;<=B#|h`td$gCO-}rJDCrpNI}(}&oQhcFR#_ZU%23u19)35 z^H{*ZeDF;qF?(L6r=Vag`C|<|oaDevIO{NLZjCvkjvh)11+d~QL_LKinAcWwMY9sCSiKFo3iU^0Q)pmVh`nizKk1jFYJB0cyP9x+RdqoX>Fl zI7;cp>YLwF6~O6PVFYBm!@3%Qmbq$(22WRl2EtGLfXTVA9e8hCXkYGK{cE3sOJ7k; z-GhPxX}l~H2L1%_T=BDqVr-@W_O4>&!DAcSKP%lZbM^VC$s?N(Q(ovrzfot7UG~fOzPd5Ceyg#a$%vwTE@_J?OS7%L z6)em^`fLLJQCs#2*{LZZPf<@7RW{^}wRYZ~W4zBzq zF@=vta|N^>hUg02xD|Lkcv%ojxU`G}@cF5A9*t$)KPH}Uilu8*s~51EB@=xeMt+&+ zHxC5jOIPrlFPAxF+|6Gzmy%+T4*<3Usy}8=J)LTH*J8@ZHaQBd`7FLAH$1)8hMs< zRTOrY(;ZBO(l*0FtyGzy>_@biODNmO8d2S;7e?cgTq*D;2e2g|An~4{)p<;iiMAqI zf)@t@jOb*)#mgo#H$v>xq-EMwar9RWSGE2`3D(kf^RU|lca zq>9CENgv!SWpjl74v`8nm%Kf{#EO=Ni#dSsky+!&OiaLuYE zeM*JOHvk$dj4-9ezA0f1s8N0}SPg;Z0JfDWowgKeZ2XTt3J4Lz(c zH|wni@^K8<1Y<_>=TH20f^wdW>#P~vCZnP@@}5q}jJf7zwD>0=YHwCQD=ZEPk4Gx? zrLeIY!v^e;g;+?S*~eg^O2}r=7J10>J^F6ixa5unw?G+gWl5P4vBcGi)VS-fk)C+x z?eWKwdrMyg+@G1kKbSihU)KxUoBs`nm}@q8IH%NB91NtVjKgj8PlV2|4JtsBJum9w zLL&f8!G1&|LC?XBYGdQHKsjX>F61>J1eRo-YFzg=@FJ9q{fd8C2PXU}a(n%`Gz0{| zD(q+ul$){K+f7sYLE1M{wMxEfvCWiYSM9QHKIfqYNv+^#W z9wdDA(>m(mFv!LlLLg|UFvcDCo3n+!r8Ca{EW)4QiPXC$px-=Oo;fzS|Kpk@IbJ`w zdtpW=k~~@rTgG$7s-tA2`T(vx{XwieJpcgh>ekBiIXr%EWT1nX6q+gJ@P|l2CkueV zP>7`8WF^SEXSrhLn!^VTcWzupfC~k|O@h!Kk=ie~xk99sIQkapQ{RTJbn><#Aby2; zCTshwULO;ud|@gUQt6+gxK++a@(9$H3m1^t%-hx8vc7n=1KIHI<&S#P4M!r`!)%nI zf~V_)5TZ<%7^&yL<|5hKQ}WLKCZ8#edu=#Y*u&MFTP+9|O=pRMbi)i2*kV4KUxkXT zDmzv84xGv6v0@@a5~q!mkVCOe##f!MDo>wD#XW~LsviFh2SRtEYo2?tJJSK2BqiF{ zoQ|JlrT)xN&U_1At5z`ILnwXU`rbRo+C#1jOC6FRvCm%UAut$eS|iWU`XE>|3=tDL zqFR<7RJ*8DWsQ55U2aZj*A`XAx(9el-bhiNfE9miA~m&zRcI&bn&4GVwwG z;sMop4|x6iL%CQyq4;5xhx;TMfnozpy*n1)Yi%2}U4nk<{MO!rNY`TLmHDgw1kLhn zK1Z}uQ7W%Y6}t=lV9|Bq7hXc2sUp#T*&7MrHA~lR0h}b6=heK&dbOB)X7Hg-JvSe% zA+W$-*)oOus4vZE0~iVO_LmieXQOF103f+)Sc!~}E&G0^ z-{wG4VK*3wdXtB|#=o0I{%$#qAjpf^<9E!e!|uMtGIyyPO`xHA>3apzCCOAf{;@xe zU>ZsVH!g03`#|j%GM!JLG95^1KH1Q2FlZ`y$Qz~LxDZX^h<>D<@E~qeqx;@;2)M0s zO^w*c#|W?iaq}Yr1?(Mmi7Z>u5pU^}(2@Wn1xWh93=Um*l?eCH@sE{}oObAK!)6nQ zkNO3)pL1BhEW_Avngb^zPd+LKPQB`B6R``1pCaKH-A+)98j3^o;V>(Tvc112P0TAYO=?SqQ@cig9o={h znTz_U8AM-{eY^ZUrVj3GtFEOzzZ0FzOZpiehY1Zahml4;CKfqoPgK_KW+1yW=F5A@ z3wufQby8ho$BycgJh#m#im@OrwUzf+ju z5@qd3b=xJ=MQZW;{>GhsGy?K>KuPVHtBMyZ$W{w_KbFVFj3Ip3G6Q*b%dMn|hq zT3p~Ce2zbgVJ>9x-GwwCN*q+>X@`p~N*i2jnS;7&QzlPqTht0+$5{lp=RS==1o{I2 zs$NlxV-L`FA$*k%jusb2`!po7c%KaG=@qi@u-y%{KhP1tYS^=909^#o;ZV}uh1Fj$ z(VFx!wJ9EWzl;TTIN0WtCdITmNOH&V0mN1`dw;?(+z`R!r>3ry1Vb7uK-0Jh7p;k3 zPDDCM?>l_&3mYPcDl37hk9`6H{1C9vt>UV|R8Snd+V7QzSc{(%9^#xB>RSTGwG&IX z-v3+>hv6k)1egG5VxSQg+_^zd0@ufJsEvSYxZ-K)pZqLYWvAe*-a>8g4;wXq(wbFr zpGCO{WV0$hMAZdBS~6roW<|NjrOTfp7*}^He|N9$SR{b5lP&9KH|c~1(H@A|4i{C~ zk?@JIyW3&zTi%f(pf6$)Rssv+5on;{x4rgdW(gl64*o7NX?!NNA^4oq1za|BSxBz~ zCHd9c3$;jD^}(ZCTgw^BPn{U~;78oX#yHAA;zkjqPp0tF;G44|bO5Q%U zDmWHIXyAuW6hCGioqc?qib!SYEN012G{^(dp3^aHt<;dIp!Z(5c_YQ@Fthndk{@Y3 zj&&rrc>S5sJN^?)ave0$YSAeKg!!rsNer>(>rO-%6+Du^KUrf4_>{XDDL4Crda$^h zKwhXz61ih7W29lh{AhUT+e2(zeXIJ6_4lZeD**=~=KY*;AXJip)NxcPqRxuA_U(& zDHiWhO=HacT({RZgIYZ0Y!PQ!D9CkTL|5(xr+BQzl*cJ#qR8xr#+|Btz?;sIK&eM!XfXN>z>v{QjkEvVwjsRRwi>Z+kyimJ^ zbLZfJ7Zd;hh}{hUOKy7o zo6#8v2C`BG_Kr7b!y(9jTglXh_6!T@q5y+#%bvNz8^m*-|E99SxkJRf9k^L1-2J-= zmCY2uWvRi*uMbJg#ag7whZ4AKQlEF~>*rtdSLET{8i2cfBsWj4zPhqlVzJpwUvb;d zk2F8$)-9`F7CgWK{!qG!jFeBRw%NO;u@nlk{VjVeB##tEQbMxr%Y)r$iaN7>fcJu{ zS6~MGMOWSZZG`a|*5qVE7Lq+R2Qura#=JcDbzF;>bFr0>i0f7nT#)NYW{;V(YAt6_ z*N>Cvw=jyuwS$B=It|7ffjCPRKHj7|*GkkMO-U7Ai1pJ05y z?@U~3BbwFI4@(6C!%4%RDWVRyWQyeWJ%7fUMjDV&I5ur8-76a67JE6pv5dXf2$?cY zC0e4#x2v%gv$D?0^?;4^t1vL&wA$s>I%`I0YP_mXU+(Ik3<2vP0Mof)pm_f^Z$IED zTaGIUHrdND^5iE)XD6TE8?!Xbog&d|P1mn|LaY=L0s-`A>blqeTZnzX9Ve%zlfT~$ z-^O(gdnRHRje$p}yX{ZyRCt`NUoQ9MQdxN(rYmD=*XjL7BZm({6s{X%K*&or%!V}? zMby&9LiYzmn$@myxcCgWFfdPOY7=S2Uz+KtzlLApxG&H~7Pn6ewN1nn45(cZnF@cM zQPAatH4yad_U)TdLQX+i%ozi`uQQKey~z9wkM}DQc^$hAi|S*^%q_6-Zf1#Im`Ikr ztoZ)Pul-|0w}ihvn}~Wg>=DmYOW;N7K1Xu3S&PX{ZAVcTuQN5?p7-Vb0ee+qgaQs*wY3si2d!%p! zE3R2cA~)GW{3O{{{ROtO0>mO)C$&4O*TMQV57GC>0F~7{pC{1pJIu>Ne?I;rz>h>h z11ra|NUA|&Ehy1yZya^C6a>iHyqo{pU zn2~7prlmF_;%Fp91mrKbgUmlRfnZ`V7R_+K$B;w~t@N?lpA+E?dD-qAyB-CRd%3at z`Qh?HxP>1I=7nbq7c`uY)>9Z=4u8qWil%g@z<^n+F|B84NDmqXGg^B(PnK)=#SsQ6 z5u*d^Z#E!F1H4h_;X+XPsinl(D61n=SS!f!A{+1OZOAmigeYpTzvkc*`RB$w^xWca# z501@|8K01(_PL}uf#F|{k1NVH_ZeJOgUFz3F0-T+zxN3**Vk@JLakp%QK7SF7*^C|%v(Bz^W41&bJ&JeD#H_muGHw}p4$`p2&yoqGUz8kn7h87-F-gBw$ohx_try| zE82PJ`B}zr>(QJ<5(r~(Ui+4NYt7pPh0WX6K0ThWeM-xHd!pfP^kf2!npA60ob~|& zbJ#P|NuBioL@uZ>obpzi?odRQmHMX56d~k7S^bRbF3ZhStwqG4DVOzbI>}SRO^Z=p z6>DtxzdyNvx0sB+LutCVJ$snFmt)h+G_D2v(x=F8g^DOfJ7qHXYcp?L2u0-VshQa7IG+^3M_^dU~29bCZf zTi6Fj`$bvkr+$pzGTlg?4Xlib{)g)VDF0)`fPa%uaF%c?M5h8?#Re~ld}2fjy^W{M zg{z}Gd=2PFK54I|xE*&QhCk1NCv2~6-PEM|>fuAxg zVWMdjlgBl7C5dPa*H`_ys}IX~Yn-BHJs^tP*W0h2huVm*{|px5MP}EKBRFx@xW>gw^Rz`svI!7N8Id0TciL zm?#KX7%hAxX8FBg?;3^tp(o1f8Qllz?XW2*#GX817qk`4%jU(3-}aR&Z5|_3*+@t% ziDMu^CdbHvgl-5@CDYjc^?QVW1E3}cU)fLX-fw#Qh@LY=dwy|r{Pkw9wE-~0J)s-5 zl3jncrJnlj^M(xq!wiT2UzA;Qd|qqT4I10F-MC5Pq_J%@HXGY^<21Hy8;xz-ZuEZX z)!aLCXTF*Ill)Ge_dVx%&faUUwe~@3v=jM8G|{7&B~2DitdN)qf6s`vU@f8-SBQ@d z2{C@anjSpSXEdpSb3l1VjMk`LJz=bQ^AKW5V97UgBK`Uq$XSIC-*Jvj>1ti9VyceI z$hYsq2MrYbZRSvB3Pr}m_JNsn?BN=e#`yCh^sqBxjDVdI!U^Xuj|fpw9P#sh?> zHb%JCWvWy>a#~Y-8--j(DX2YN!f{n% z!J6mS+P}~V#Yh7w5p+OYg+#L?CptKcxs9?k(uOPrXMbXRGriy_j%92_V3+z46oZf$ zhtX7)v%XlrMkYo=Sf!$Rv5JG}5iFm4a;=P0j+?o!9Nuzg5vlLtIy0DOu^Rw45z`;9 z?8RWV#Ak)q<8(ck7{3LM*K|naO_C z`Z|>ZO2}@16NGHenuu4-jVTRDK@&}&S{3qvxB>B$rEw<~t8&NilX2pOX}6QMsWwB| z@LX!`5=U6iwa5&eBj1{zYpdJrYMD#dGA@hou`Y2F7?tXLR<*O=O1R^q;dBN-li}$J ziOUV|{S(4I&*x1;o@!x;-U0QUhwMyBd7Fq}5E8QoPVBZ@y-Y(n2mHuY)IN+gCb@WY z;QXdZ7WE%)7>=w=?%q`7Lj_tlLp^XJ!)w6YSZ;*wIT)*Mp}vp~iCvAy8+cl7=VgI= z@Sg*t#V+={aw9$>Nrq^E<|>_1`QCc%r8WTZm5kFh9jGhH#-FLwV0G@;YO0$aOv%7- zA&fB07G|u?Cc?9>N`EA+zb9Zj{xHUyR;syF$^Zk}|jEcQ}(fUATVW@zj zl1EQJ_0y zdyPM&r>fVIz~GLzmm5Hab9y#U6#$|^f?8qkc9tqqY}&tppmY=SAMdEs>Ml#E&$tR~ z*|sd(SvjlRsj=i)HLqJT8KmH@w#N$!M@J2IjkyBCCScA z0uD!g9J4m7P8{Ws*#itimF#xtBNCxbEf)^Dg3EMoD_J(SB=ukT_(DLRzlJ!!ibA-_ z<|aSyg+ZTM!zVOHN?U-bfvB(F_Y@nKry*2KrEO%zm4t$*ZEle!mkM6F5K5~W*yyWC)sGAmr+BU@B$OPF8muHE80wQFy9ZxK1HvDq%)1S0)-4Q z(~@T)jRD7OmdFH|nLRg{je6OYi$zio*6=tdX2o|#jG4?EFs8W=Zao5g5f?8z`H zQl~cjz(az?pX1dQ#Ia5O8Uo31^`bw)Ofq#+E#ic-t$0^)`}}kzj}H-nvOvbVB-iCJJZJX^o|BQe6OmxwZy0W zFOyx5YsBAlk+KN7cu&ps&c9v11np+Tti)}vcY4LYguY$_GG2Ly#|ds5w$9sLy&bz`vk(3&au~i2RpA9;D@KS*92hTOzKtQmEyI+ zCTd@2v19+$Jo-b>;e=&QizG>m=azZO?B% z8xXI&fY)2EPTng3;0_3o0RXIe6|OJxHhDI=?VQ(~W~_D$0772x0YUQ_13cDG5clVo zUYlO^fE9r0<=5x^AG|BP96TA%#?K5l>j%7hZeO3xk2{vV8oZ(a+%E%n`)BhP8QUE_ zo^*%$5qFEN7L)9TNXg)mEi^BBq}O${dN6i z;8A8(##=|z)9F>`sp7}^kBoJIt4EesDFESB<+b3x0|20T&3T1*Nqktp*0~4tdjXz- zU*%p1o-6LXt_f~=JKttlc0d12unN!Dqq_~%P%-Han^jv;n1V{m_ zUmzYUUNg>k-^Tx7e?<6U{Y0?eF%8%UsJv|{I8eD}I3_p&bO5peRj+TGUU}PP0DyZ> z49^QM0ATZC{Hfq=+=g~Y{H(n94GC3o9x%cQ){l;xOmTU=+jcv88%BBYPa~DYK_~w7#jI8g zH2vmckx=?lS}A1VHekSS-=-vX#tjx7L)1}k`FN=$83NaZ0zEwSV+jG-U!~2mElQX7 zdPsl}$)i~3U4^-5aDqvY5SSPblvUSd+pS_$_@E|2r0<&2uEm_({46gGvdeVj)pKb3 zgHg(0oL{jP$<3DAyu=zQkMAdqgMG067uHVuPiBaWa2CUb%(7#d*ZzV>7RYh%IT^eM zE6t`H=Fvj=8>*$oo08G8atMnS5flA9D3V8XFw9P^;IEoi z<5G4|l-5HpUSA$;Owc@oY$N7CA-gNPAYiL@&6U~C5qPSKQ5s1ZZNH04?-YV}7*TA} z);NBiJ}miVr3uR3GhtSBYzFiUUELOhvD4`}gdX?JtwtO%Ds4IZNB$WHfF z$UQ${WvP6$#`?xHZKz$(2Ue1#0J+owK0p4$g7Pzw_XRtpaoZN^+c^}`h1p)eyyiud zyBVp)s!U5}C9ItM-g$(QPRQkf8NUMs8R*RUEp$FXlDSq{Hf^zH@qO9rKaGt+YCK>;WM6WhRb@51OIOYsjaz@H8P4QYUmWGV7ku2bEs9 zLuZ)C{!ZXh!+@R=qZeEfjKBgYtc~1$jLmB=Sx=a0Z;cZ)%von)Nn|qz-{7E=Y9KA{ zxYK3rVgw_PPfxYX-oVGpH}l;VTKOu-W$)Sdx_Ia-yVO9`RI$1Oi`)v zECCBod*95m5m@iT7HW-8sYcAeQv62Zj @FKZ&(_hf9Fyb|6HC`pZxb$u*a&}k|* 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

    YNim>+i#6Q8gs${!8 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

    D*@IL-4SJ4N5@-M28HMtX{MQ21;sA^`doRzD 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

    U)ZI%T@nNoK5?BmTq1+DMHL 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 l47is7&^=oN$^Qrc+vC4U) + ![](<../../../.gitbook/assets/bash_1.png>) 2. Set up the template and click the **Create** button. -![](<../../../.gitbook/assets/bash_2.png>) + ![](<../../../.gitbook/assets/bash_2.png>) 3. You can now run your Bash script. \ No newline at end of file diff --git a/src/user-guide/task-templates/apps/terraform/states.md b/src/user-guide/task-templates/apps/terraform/states.md index 334109b..50e5603 100644 --- a/src/user-guide/task-templates/apps/terraform/states.md +++ b/src/user-guide/task-templates/apps/terraform/states.md @@ -6,14 +6,14 @@ # HTTP Backend (Pro) -The Semaphore UI HTTP backend for Terraform provides a secure and convenient way to store and manage Terraform state files directly within Semaphore. This feature is available in the Pro plan and offers several advantages: +The Semaphore UI HTTP backend for Terraform securely stores and manages Terraform state files directly within Semaphore. Available in the Pro plan, it offers several key advantages. ## Features -- **Secure State Storage**: State files are encrypted and stored securely within Semaphore -- **State Locking**: Prevents concurrent modifications to the same state file -- **Version History**: Track changes to your infrastructure state over time -- **UI Integration**: Manage state files directly through the Semaphore interface +- **Secure State Storage**: State files are encrypted and stored securely within Semaphore. +- **State Locking**: Prevents concurrent modifications to the same state file. +- **Version History**: Track changes to your infrastructure state over time. +- **UI Integration**: Manage state files directly through the Semaphore interface. ## Configuration @@ -31,6 +31,8 @@ terraform { } ``` + + Replace the following placeholders: - ``: Your Semaphore instance URL - ``: Your Semaphore project ID diff --git a/src/user-guide/task-templates/apps/terraform/workspaces.md b/src/user-guide/task-templates/apps/terraform/workspaces.md index bfe5a89..a243a03 100644 --- a/src/user-guide/task-templates/apps/terraform/workspaces.md +++ b/src/user-guide/task-templates/apps/terraform/workspaces.md @@ -5,3 +5,69 @@ # Workspaces + +Semaphore provides built-in support for Terraform workspaces, allowing you to manage multiple environments and configurations within a single project. This feature helps you maintain separate state files for different environments like development, staging, and production. + +![](<../../../../.gitbook/assets/tf-workspace.webp>) + +## Features + +- **Workspace Management**: Create, switch, and delete workspaces directly from the Semaphore UI. +- **State Isolation**: Each workspace maintains its own state file, preventing conflicts between environments. +- **Environment Variables**: Configure workspace-specific environment variables. +- **Workspace Selection**: Choose the target workspace when running Terraform commands. + +## Using Workspaces in Semaphore + +### Creating a Workspace + +1. Navigate to your project in Semaphore. +2. Go to the "Terraform" section. +3. Click on "Workspaces" in the sidebar. +4. Click "Create Workspace" and provide a name for your workspace. + +### Switching Workspaces + +You can switch between workspaces in two ways: + +1. **Through the UI**: + - Go to the "Terraform" section. + - Select "Workspaces" from the sidebar. + - Click on the desired workspace to make it active. + +2. **In your Terraform configuration**: + ```hcl + terraform { + workspace { + name = "development" # or "staging", "production", etc. + } + } + ``` + +### Workspace-specific Variables + +You can set workspace-specific variables in Semaphore: + +1. Go to your project settings. +2. Navigate to the **Variable Groups** section. +3. Add variables with workspace-specific prefixes: + ``` + TF_WORKSPACE_development_VAR_NAME=value + TF_WORKSPACE_staging_VAR_NAME=value + TF_WORKSPACE_production_VAR_NAME=value + ``` + +## Best Practices + +- Use descriptive names for your workspaces (e.g., `dev`, `staging`, `prod`). +- Keep workspace configurations consistent across your team. +- Use workspace-specific variables for environment-specific values. +- Regularly clean up unused workspaces to maintain a clean project structure. + +## Limitations + +- Maximum number of workspaces per project: 50 +- Workspace names must be unique within a project +- Workspace names cannot contain special characters (use alphanumeric characters and hyphens) + +For more information about Terraform workspaces, refer to the [Terraform documentation](https://developer.hashicorp.com/terraform/language/state/workspaces). From 652d0559e5efa34d6ea55f4473f2892b069be4eb Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 13 May 2025 17:41:38 +0500 Subject: [PATCH 130/170] feat: add workspaces pages --- src/.gitbook/assets/default-workspace.webp | Bin 0 -> 95042 bytes .../task-templates/apps/terraform/states.md | 13 +--- .../apps/terraform/workspaces.md | 57 ++++-------------- 3 files changed, 14 insertions(+), 56 deletions(-) create mode 100644 src/.gitbook/assets/default-workspace.webp diff --git a/src/.gitbook/assets/default-workspace.webp b/src/.gitbook/assets/default-workspace.webp new file mode 100644 index 0000000000000000000000000000000000000000..01076fd8e28547e6abb822d21406cefa10e0ac58 GIT binary patch literal 95042 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

    q#xn7U0_Zmd8`?_thwu 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 K`(H=?*ZMz^>?3jj literal 0 HcmV?d00001 diff --git a/src/user-guide/task-templates/apps/terraform/states.md b/src/user-guide/task-templates/apps/terraform/states.md index 50e5603..8d9c685 100644 --- a/src/user-guide/task-templates/apps/terraform/states.md +++ b/src/user-guide/task-templates/apps/terraform/states.md @@ -10,7 +10,7 @@ The Semaphore UI HTTP backend for Terraform securely stores and manages Terrafor ## Features -- **Secure State Storage**: State files are encrypted and stored securely within Semaphore. +- **Secure State Storage**: State files are stored securely within Semaphore. - **State Locking**: Prevents concurrent modifications to the same state file. - **Version History**: Track changes to your infrastructure state over time. - **UI Integration**: Manage state files directly through the Semaphore interface. @@ -52,13 +52,4 @@ You can access and manage your Terraform state files through the Semaphore UI: - Always use state locking when working in team environments - Regularly backup your state files - Use meaningful names for your state files -- Keep your API tokens secure and rotate them periodically - -## Limitations - -- Maximum state file size: 100MB -- State locking timeout: 5 minutes -- Maximum number of state versions: 100 per project - -For more information about managing Terraform state in Semaphore, refer to the [Terraform documentation](https://developer.hashicorp.com/terraform/language/settings/backends/http). - +- Keep your API tokens secure and rotate them periodically \ No newline at end of file diff --git a/src/user-guide/task-templates/apps/terraform/workspaces.md b/src/user-guide/task-templates/apps/terraform/workspaces.md index a243a03..b68044a 100644 --- a/src/user-guide/task-templates/apps/terraform/workspaces.md +++ b/src/user-guide/task-templates/apps/terraform/workspaces.md @@ -8,8 +8,6 @@ Semaphore provides built-in support for Terraform workspaces, allowing you to manage multiple environments and configurations within a single project. This feature helps you maintain separate state files for different environments like development, staging, and production. -![](<../../../../.gitbook/assets/tf-workspace.webp>) - ## Features - **Workspace Management**: Create, switch, and delete workspaces directly from the Semaphore UI. @@ -21,53 +19,22 @@ Semaphore provides built-in support for Terraform workspaces, allowing you to ma ### Creating a Workspace -1. Navigate to your project in Semaphore. -2. Go to the "Terraform" section. -3. Click on "Workspaces" in the sidebar. -4. Click "Create Workspace" and provide a name for your workspace. - -### Switching Workspaces - -You can switch between workspaces in two ways: +In the **Workspaces** section of the Terraform/OpenTofu template where you want to add a workspace, follow these steps: -1. **Through the UI**: - - Go to the "Terraform" section. - - Select "Workspaces" from the sidebar. - - Click on the desired workspace to make it active. +1. Click the ➕ button. +2. In the menu that appears, select **New Workspace**. +3. In the modal dialog, enter the workspace name and select the SSH key to be used for cloning modules. +4. Click the **Create** button to add the new workspace to the template. +5. You can now use this workspace to run tasks. -2. **In your Terraform configuration**: - ```hcl - terraform { - workspace { - name = "development" # or "staging", "production", etc. - } - } - ``` - -### Workspace-specific Variables - -You can set workspace-specific variables in Semaphore: - -1. Go to your project settings. -2. Navigate to the **Variable Groups** section. -3. Add variables with workspace-specific prefixes: - ``` - TF_WORKSPACE_development_VAR_NAME=value - TF_WORKSPACE_staging_VAR_NAME=value - TF_WORKSPACE_production_VAR_NAME=value - ``` +![](<../../../../.gitbook/assets/tf-workspace.webp>) -## Best Practices +### Switching workspaces -- Use descriptive names for your workspaces (e.g., `dev`, `staging`, `prod`). -- Keep workspace configurations consistent across your team. -- Use workspace-specific variables for environment-specific values. -- Regularly clean up unused workspaces to maintain a clean project structure. +You can set the default workspace for a Terraform/OpenTofu template by clicking the **MAKE DEFAULT** button. -## Limitations +![](<../../../../.gitbook/assets/default-workspace.webp>) -- Maximum number of workspaces per project: 50 -- Workspace names must be unique within a project -- Workspace names cannot contain special characters (use alphanumeric characters and hyphens) +### Workspace-specific variables -For more information about Terraform workspaces, refer to the [Terraform documentation](https://developer.hashicorp.com/terraform/language/state/workspaces). +Semaphore currently does not support workspace-specific variables. \ No newline at end of file From 9862615002ab20f2dcdc4f6edeaea8d2f01f5332 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 13 May 2025 18:07:51 +0500 Subject: [PATCH 131/170] feat: add links --- src/administration-guide/openid/keycloak.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/administration-guide/openid/keycloak.md b/src/administration-guide/openid/keycloak.md index 203f7f0..e1cc1fe 100644 --- a/src/administration-guide/openid/keycloak.md +++ b/src/administration-guide/openid/keycloak.md @@ -20,3 +20,16 @@ } } ``` + +## GitHub issues +* Question: Disable Certificate Validation for Keycloak Server [#2308](https://github.com/semaphoreui/semaphore/issues/2308) +* Question: TLS Verification Disable [#2314](https://github.com/semaphoreui/semaphore/issues/2314) +* Logout from Keycloak session when logging out from Semaphore [#1496](https://github.com/semaphoreui/semaphore/issues/1496) + +[Explore all issues >](https://github.com/semaphoreui/semaphore/issues?q=is%3Aissue%20keycloak) + +## GitHub discussions + +* Username is different from the "preferred_username" of OpenID [#1745](https://github.com/semaphoreui/semaphore/discussions/1745) + +[Explore all issues >](https://github.com/semaphoreui/semaphore/discussions?discussions_q=is%3Aopen+keycloak) \ No newline at end of file From bb1842d68147762605fdcab90defc041613219ff Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 13 May 2025 18:09:17 +0500 Subject: [PATCH 132/170] feat: ... --- src/administration-guide/openid/keycloak.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/administration-guide/openid/keycloak.md b/src/administration-guide/openid/keycloak.md index e1cc1fe..559128c 100644 --- a/src/administration-guide/openid/keycloak.md +++ b/src/administration-guide/openid/keycloak.md @@ -21,15 +21,17 @@ } ``` -## GitHub issues -* Question: Disable Certificate Validation for Keycloak Server [#2308](https://github.com/semaphoreui/semaphore/issues/2308) -* Question: TLS Verification Disable [#2314](https://github.com/semaphoreui/semaphore/issues/2314) -* Logout from Keycloak session when logging out from Semaphore [#1496](https://github.com/semaphoreui/semaphore/issues/1496) -[Explore all issues >](https://github.com/semaphoreui/semaphore/issues?q=is%3Aissue%20keycloak) +## Related GitHub Issues -## GitHub discussions +* [#2308](https://github.com/semaphoreui/semaphore/issues/2308) — How to disable certificate validation for Keycloak server +* [#2314](https://github.com/semaphoreui/semaphore/issues/2314) — Option to disable TLS verification +* [#1496](https://github.com/semaphoreui/semaphore/issues/1496) — Log out from Keycloak session when logging out from Semaphore -* Username is different from the "preferred_username" of OpenID [#1745](https://github.com/semaphoreui/semaphore/discussions/1745) +[Explore all Keycloak-related issues →](https://github.com/semaphoreui/semaphore/issues?q=is%3Aissue%20keycloak) -[Explore all issues >](https://github.com/semaphoreui/semaphore/discussions?discussions_q=is%3Aopen+keycloak) \ No newline at end of file +## Related GitHub Discussions + +* [#1745](https://github.com/semaphoreui/semaphore/discussions/1745) — Username differs from `preferred_username` in OpenID + +[Explore all Keycloak-related discussions →](https://github.com/semaphoreui/semaphore/discussions?discussions_q=is%3Aopen+keycloak) \ No newline at end of file From 3045dba51c5169bbb891a30ef7a36e045855b635 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 13 May 2025 18:18:00 +0500 Subject: [PATCH 133/170] ... --- src/administration-guide/openid/keycloak.md | 5 +++-- src/administration-guide/openid/okta.md | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/administration-guide/openid/keycloak.md b/src/administration-guide/openid/keycloak.md index 559128c..42d3a7d 100644 --- a/src/administration-guide/openid/keycloak.md +++ b/src/administration-guide/openid/keycloak.md @@ -32,6 +32,7 @@ ## Related GitHub Discussions -* [#1745](https://github.com/semaphoreui/semaphore/discussions/1745) — Username differs from `preferred_username` in OpenID +* [#1745](https://github.com/semaphoreui/semaphore/discussions/1745) — Username differs from `preferred_username` in OpenID +* [#1030](https://github.com/semaphoreui/semaphore/discussions/1030) — SAML support? -[Explore all Keycloak-related discussions →](https://github.com/semaphoreui/semaphore/discussions?discussions_q=is%3Aopen+keycloak) \ No newline at end of file +[Explore all Keycloak-related discussions →](https://github.com/semaphoreui/semaphore/discussions?discussions_q=keycloak) \ No newline at end of file diff --git a/src/administration-guide/openid/okta.md b/src/administration-guide/openid/okta.md index 2ec89f8..79e870e 100644 --- a/src/administration-guide/openid/okta.md +++ b/src/administration-guide/openid/okta.md @@ -19,4 +19,20 @@ } } } -``` \ No newline at end of file +``` + + +## Related GitHub Issues + +* [#1434](https://github.com/semaphoreui/semaphore/issues/1434) — Help with OIDC Azure AD configuration/debugging +* [#1864](https://github.com/semaphoreui/semaphore/issues/1864) — v2.9.56 breaks oidc auth with keycloak +* [#1329](https://github.com/semaphoreui/semaphore/issues/1329) — testing oidc_providers + +[Explore all Keycloak-related issues →](https://github.com/semaphoreui/semaphore/issues?q=is%3Aissue%20okta) + +## Related GitHub Discussions + +* [#2822](https://github.com/semaphoreui/semaphore/discussions/2822) — When setting up GitHub OpenID, parsing is not possible except for Email +* [#1030](https://github.com/semaphoreui/semaphore/discussions/1030) — SAML support? + +[Explore all Keycloak-related discussions →](https://github.com/semaphoreui/semaphore/discussions?discussions_q=okta) \ No newline at end of file From ed8d380491d8e5a8ef71a845e3214e8522f358e1 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 21 May 2025 10:36:26 +0500 Subject: [PATCH 134/170] feat(api): update docs --- src/administration-guide/api.md | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index c0cf242..1da5b6e 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -44,15 +44,6 @@ curl -v -c /tmp/semaphore-cookie -XPOST \ http://localhost:3000/api/auth/login ``` -Get a user tokens: - -```bash -curl -v -b /tmp/semaphore-cookie \ --H 'Content-Type: application/json' \ --H 'Accept: application/json' \ -http://localhost:3000/api/user/tokens -``` - Generate a new token, and get the new token: ```bash @@ -60,18 +51,18 @@ curl -v -b /tmp/semaphore-cookie -XPOST \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ http://localhost:3000/api/user/tokens - - -curl -v -b /tmp/semaphore-cookie \ --H 'Content-Type: application/json' \ --H 'Accept: application/json' \ -http://localhost:3000/api/user/tokens ``` The command should return something similar to: -`[{"id":"`**`YOUR_ACCESS_TOKEN`**`","created":"2017-03-11T13:13:13Z","expired":false,"user_id":1}]` - +```json +{ + "id": "YOUR_ACCESS_TOKEN", + "created": "2025-05-21T02:35:12Z", + "expired": false, + "user_id": 3 +} +``` --- ## Using token to make API requests From 4a0651f3addb729a811d53829d2709da1c948631 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 16 Jun 2025 11:07:27 +0500 Subject: [PATCH 135/170] chore: add logs --- src/administration-guide/logs.md | 6 +++--- src/user-guide/apps/task-templates/apps/ansible.md | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 src/user-guide/apps/task-templates/apps/ansible.md diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index d6a7829..681809f 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -67,7 +67,7 @@ export SEMAPHORE_TASK_LOG_PATH=./tasks.log | --------------------- | --------------------- | --------------------- | | `enabled` | `SEMAPHORE_EVENT_LOG_ENABLED` | Enable event logging to file. | | `format` | `SEMAPHORE_EVENT_LOG_FORMAT` | Log record format. Can be `raw` or `json`. | -| `logger` | `SEMAPHORE_EVENT_LOG_LOGGER` | Logger opitons. | +| `logger` | `SEMAPHORE_EVENT_LOG_LOGGER` | [Logger opitons](#logger-options). | #### Tasks logging options @@ -75,7 +75,7 @@ export SEMAPHORE_TASK_LOG_PATH=./tasks.log | --------------------- | --------------------- | --------------------- | | `enabled` | `SEMAPHORE_TASK_LOG_ENABLED` | Enable task logging to file. | | `format` | `SEMAPHORE_TASK_LOG_FORMAT` | Log record format. Can be `raw` or `json`. | -| `logger` | `SEMAPHORE_TASK_LOG_LOGGER` | Logger opitons. | +| `logger` | `SEMAPHORE_TASK_LOG_LOGGER` | [Logger opitons](#logger-options). | #### Logger options @@ -104,7 +104,7 @@ Semaphore stores information about task execution in the database. Task history ### Configuring task retention -By default, Semaphore stores all tasks in the database. If you run a large number of tasks, the can occupy a significant amount of disk space. +By default, Semaphore stores all tasks in the database. If you run a large number of tasks, thet can occupy a significant amount of disk space. You can configure how many tasks are retained per template using one of the following approaches: diff --git a/src/user-guide/apps/task-templates/apps/ansible.md b/src/user-guide/apps/task-templates/apps/ansible.md new file mode 100644 index 0000000..686275d --- /dev/null +++ b/src/user-guide/apps/task-templates/apps/ansible.md @@ -0,0 +1 @@ +# Ansible From 37fb00eac5bbc3d3019252b88e7d35cfd9f4a0d5 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 16 Jun 2025 11:13:15 +0500 Subject: [PATCH 136/170] feat: update version --- .../installation/binary-file.md | 10 +++---- .../installation/package-manager.md | 16 ++++++------ src/administration-guide/upgrading.md | 26 +++++++++---------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/administration-guide/installation/binary-file.md b/src/administration-guide/installation/binary-file.md index 79748ce..a559f44 100644 --- a/src/administration-guide/installation/binary-file.md +++ b/src/administration-guide/installation/binary-file.md @@ -15,9 +15,9 @@ Download the `*.tar.gz` for your platform from [Releases page](https://github.co {{#tabs }} {{#tab name="Linux (x64)" }} ``` -download/v2.13.14/semaphore_2.13.14_linux_amd64.tar.gz +download/v2.15.0/semaphore_2.15.0_linux_amd64.tar.gz -tar xf semaphore_2.13.14_linux_amd64.tar.gz +tar xf semaphore_2.15.0_linux_amd64.tar.gz ./semaphore setup ``` @@ -27,9 +27,9 @@ tar xf semaphore_2.13.14_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_arm64.tar.gz +download/v2.15.0/semaphore_2.15.0_linux_arm64.tar.gz -tar xf semaphore_2.13.14_linux_arm64.tar.gz +tar xf semaphore_2.15.0_linux_arm64.tar.gz ./semaphore setup ``` @@ -39,7 +39,7 @@ tar xf semaphore_2.13.14_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.13.14/semaphore_2.13.14_windows_amd64.zip") ` + "download/v2.15.0/semaphore_2.15.0_windows_amd64.zip") ` -OutFile semaphore.zip diff --git a/src/administration-guide/installation/package-manager.md b/src/administration-guide/installation/package-manager.md index e322931..e67e91a 100644 --- a/src/administration-guide/installation/package-manager.md +++ b/src/administration-guide/installation/package-manager.md @@ -22,36 +22,36 @@ Here are several installation commands, depending on the package manager: {{#tab name="Debian / Ubuntu (x64)"}} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_amd64.deb +download/v2.15.0/semaphore_2.15.0_linux_amd64.deb -sudo dpkg -i semaphore_2.13.14_linux_amd64.deb +sudo dpkg -i semaphore_2.15.0_linux_amd64.deb ``` {{#endtab }} {{#tab name="Debian / Ubuntu (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_arm64.deb +download/v2.15.0/semaphore_2.15.0_linux_arm64.deb -sudo dpkg -i semaphore_2.13.14_linux_arm64.deb +sudo dpkg -i semaphore_2.15.0_linux_arm64.deb ``` {{#endtab }} {{#tab name="CentOS (x64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_amd64.rpm +download/v2.15.0/semaphore_2.15.0_linux_amd64.rpm -sudo yum install semaphore_2.13.14_linux_amd64.rpm +sudo yum install semaphore_2.15.0_linux_amd64.rpm ``` {{#endtab }} {{#tab name="CentOS (ARM64)" }} ```bash wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_arm64.rpm +download/v2.15.0/semaphore_2.15.0_linux_arm64.rpm -sudo yum install semaphore_2.13.14_linux_arm64.rpm +sudo yum install semaphore_2.15.0_linux_arm64.rpm ``` {{#endtab }} diff --git a/src/administration-guide/upgrading.md b/src/administration-guide/upgrading.md index 7f24593..2a48399 100644 --- a/src/administration-guide/upgrading.md +++ b/src/administration-guide/upgrading.md @@ -28,9 +28,9 @@ Install it using the package manager. ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_amd64.deb +download/v2.15.0/semaphore_2.15.0_linux_amd64.deb -sudo dpkg -i semaphore_2.13.14_linux_amd64.deb +sudo dpkg -i semaphore_2.15.0_linux_amd64.deb ``` {{#endtab }} @@ -38,9 +38,9 @@ sudo dpkg -i semaphore_2.13.14_linux_amd64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_arm64.deb +download/v2.15.0/semaphore_2.15.0_linux_arm64.deb -sudo dpkg -i semaphore_2.13.14_linux_arm64.deb +sudo dpkg -i semaphore_2.15.0_linux_arm64.deb ``` {{#endtab }} @@ -48,9 +48,9 @@ sudo dpkg -i semaphore_2.13.14_linux_arm64.deb ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_amd64.rpm +download/v2.15.0/semaphore_2.15.0_linux_amd64.rpm -sudo yum install semaphore_2.13.14_linux_amd64.rpm +sudo yum install semaphore_2.15.0_linux_amd64.rpm ``` {{#endtab }} @@ -58,9 +58,9 @@ sudo yum install semaphore_2.13.14_linux_amd64.rpm ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_arm64.rpm +download/v2.15.0/semaphore_2.15.0_linux_arm64.rpm -sudo yum install semaphore_2.13.14_linux_arm64.rpm +sudo yum install semaphore_2.15.0_linux_arm64.rpm ``` {{#endtab }} {{#endtabs }} @@ -80,9 +80,9 @@ Download a `*.tar.gz` for your platform from [Releases page](https://github.com/ ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_amd64.tar.gz +download/v2.15.0/semaphore_2.15.0_linux_amd64.tar.gz -tar xf semaphore_2.13.14_linux_amd64.tar.gz +tar xf semaphore_2.15.0_linux_amd64.tar.gz ``` {{#endtab }} @@ -90,9 +90,9 @@ tar xf semaphore_2.13.14_linux_amd64.tar.gz ``` wget https://github.com/semaphoreui/semaphore/releases/\ -download/v2.13.14/semaphore_2.13.14_linux_arm64.tar.gz +download/v2.15.0/semaphore_2.15.0_linux_arm64.tar.gz -tar xf semaphore_2.13.14_linux_arm64.tar.gz +tar xf semaphore_2.15.0_linux_arm64.tar.gz ``` {{#endtab }} @@ -100,7 +100,7 @@ tar xf semaphore_2.13.14_linux_arm64.tar.gz ``` Invoke-WebRequest ` -Uri ("https://github.com/semaphoreui/semaphore/releases/" + - "download/v2.13.14/semaphore_2.13.14_windows_amd64.zip") ` + "download/v2.15.0/semaphore_2.15.0_windows_amd64.zip") ` -OutFile semaphore.zip Expand-Archive -Path semaphore.zip -DestinationPath ./ From 779b0c58272131908f88e7f70d271da584893504 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 16 Jun 2025 12:04:34 +0500 Subject: [PATCH 137/170] feat: link to built-in swagger --- src/administration-guide/api.md | 2 +- src/administration-guide/logs.md | 19 +++- src/administration-guide/runners.md | 4 +- src/user-guide/projects/runners.md | 131 ++++++++++++++++++++++++++++ 4 files changed, 151 insertions(+), 5 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 1da5b6e..96ca850 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -5,7 +5,7 @@ Semaphore UI provides two formats of API documentation, so you can choose the one that fits your workflow best: * [Swagger/OpenAPI](https://semaphoreui.com/api-docs) — ideal if you prefer an interactive, browser-based experience. -* [Postman](https://api.semaphoreui.com) — perfect if you want to leverage the full power of the Postman app for testing and exploring the API. +* **Built-in Swagger API documentation (PRO)** — interactive API documentation powered by Swagger UI. You can access it by navigating to `/swagger/index.html` on your Semaphore instance (e.g., `http://localhost:3000/swagger/index.html`). Both options include complete documentation of available endpoints, parameters, and example responses. diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index d6a7829..0d121a5 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -44,7 +44,11 @@ The Activity Log captures all user actions performed in Semaphore, including: "logger": { "filename": "./tasks.log" // other logger options - } + }, + "result_logger": { + "filename": "./task_results.log" + // other logger options + } } } } @@ -61,7 +65,9 @@ export SEMAPHORE_TASK_LOG_ENABLED=True export SEMAPHORE_TASK_LOG_PATH=./tasks.log ``` -#### Events logging options +#### Activity (events) logging options + +The Activity (events) logging options allow you to configure how Semaphore records user actions and system events to a file. These settings control the behavior of event logging, including whether it's enabled, the format of log entries, and specific logger configurations. When enabled, all user actions (like creating templates, managing teams, or running tasks) will be written to the specified log file according to these settings. | Parameter | Environment Variables | Description | | --------------------- | --------------------- | --------------------- | @@ -71,12 +77,21 @@ export SEMAPHORE_TASK_LOG_PATH=./tasks.log #### Tasks logging options +The Tasks logging options allow you to configure how Semaphore records task execution details to a file. These settings control the logging of task-related events, including task starts, completions, and their execution status. When enabled, all task operations and their outcomes will be written to the specified log file according to these settings, providing a detailed audit trail of task execution history. + | Parameter | Environment Variables | Description | | --------------------- | --------------------- | --------------------- | | `enabled` | `SEMAPHORE_TASK_LOG_ENABLED` | Enable task logging to file. | | `format` | `SEMAPHORE_TASK_LOG_FORMAT` | Log record format. Can be `raw` or `json`. | | `logger` | `SEMAPHORE_TASK_LOG_LOGGER` | Logger opitons. | +#### Task results logging options + +| Parameter | Environment Variables | Description | +| --------------------- | --------------------- | --------------------- | +| `result_logger` | `SEMAPHORE_TASK_RESULT_LOGGER` | Logger opitons. | + + #### Logger options | Parameter | Type | Description | diff --git a/src/administration-guide/runners.md b/src/administration-guide/runners.md index 525e19c..5b3874a 100644 --- a/src/administration-guide/runners.md +++ b/src/administration-guide/runners.md @@ -1,6 +1,6 @@ -# Runners +# Project Runners -Runners enable running tasks on a separate server from Semaphore UI. +Project Runners enable running tasks on a separate server from Semaphore UI. Semaphore runners operate on the same principle as GitLab or GitHub Actions runners: diff --git a/src/user-guide/projects/runners.md b/src/user-guide/projects/runners.md index e94fb56..9d3c581 100644 --- a/src/user-guide/projects/runners.md +++ b/src/user-guide/projects/runners.md @@ -5,3 +5,134 @@ # Runners (Pro) +Runners are a powerful feature in Semaphore Pro that enables distributed task execution across multiple servers. This feature allows you to run tasks on separate servers from your Semaphore UI instance, providing enhanced security, scalability, and resource management. + +## Overview + +Runners operate on a similar principle to GitLab or GitHub Actions runners: + +- A runner is deployed on a separate server from your Semaphore UI +- The runner connects to your Semaphore instance using a secure token +- When tasks are created, Semaphore delegates them to available runners +- Runners execute the tasks and report results back to Semaphore + +## Benefits + +Using runners provides several key advantages: + +1. **Enhanced Security** + - Runners can be deployed in isolated environments or restricted networks + - Sensitive operations can be executed in controlled environments + - Better separation of concerns between UI and execution environments + +2. **Improved Scalability** + - Distribute workload across multiple servers + - Add or remove runners based on demand + - Better resource utilization across your infrastructure + +3. **Flexible Deployment** + - Deploy runners close to your target infrastructure + - Run tasks in different network zones + - Support for various deployment models (on-premises, cloud, hybrid) + +## Using Runners + +### Prerequisites + +To use runners, you need: + +1. A Semaphore Pro license +2. A separate server for running the runner +3. Network connectivity between the runner and Semaphore UI +4. Proper configuration on both the Semaphore UI and runner servers + +### Configuration + +1. **Semaphore UI Configuration** + Enable remote runners in your Semaphore configuration: + + ```json + { + "use_remote_runner": true, + "runner_registration_token": "your-secure-token" + } + ``` + + Or using environment variables: + + ```bash + SEMAPHORE_USE_REMOTE_RUNNER=True + SEMAPHORE_RUNNER_REGISTRATION_TOKEN=your-secure-token + ``` + +2. **Runner Setup** + On your runner server: + + ```bash + # Generate runner configuration + semaphore runner setup --config /path/to/config.json + + # Register the runner + semaphore runner register --config /path/to/config.json + + # Start the runner + semaphore runner start --config /path/to/config.json + ``` + +### Managing Runners + +You can manage runners through the Semaphore UI: + +1. Navigate to the Runners section in your project +2. View all registered runners and their status +3. Add or remove runners as needed +4. Monitor runner health and performance + +### Security Considerations + +- Always use HTTPS for communication between runners and Semaphore UI +- Implement proper network security between runners and Semaphore UI +- Consider using isolated environments for sensitive operations + +## Best Practices + +1. **Resource Planning** + - Size your runners appropriately for your workload + - Monitor runner resource usage + - Scale runners based on demand + +2. **Network Configuration** + - Ensure proper network connectivity + - Configure firewalls appropriately + - Use secure communication channels + +3. **Maintenance** + - Regularly update runner software + - Monitor runner health + - Implement proper logging and monitoring + - Have a backup strategy for runner failures + +4. **Security** + - Follow the principle of least privilege + - Implement proper access controls + - Regular security audits + - Keep software up to date + +## Troubleshooting + +Common issues and solutions: + +1. **Runner Connection Issues** + - Verify network connectivity + - Check firewall settings + - Validate runner registration token + - Ensure proper SSL/TLS configuration + +2. **Task Execution Problems** + - Check runner logs + - Verify resource availability + - Ensure proper permissions + - Validate task configuration + +For more detailed troubleshooting, refer to the [Troubleshooting Guide](../../administration-guide/troubleshooting.md). + From 03af7c97644749d26ec21b6eaaf966d2bf61a599 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 16 Jun 2025 15:36:52 +0500 Subject: [PATCH 138/170] ... --- src/administration-guide/runners.md | 4 +- src/user-guide/projects/history.md | 163 ++++++++++++++++++++++++++++ src/user-guide/projects/runners.md | 58 ++-------- 3 files changed, 172 insertions(+), 53 deletions(-) diff --git a/src/administration-guide/runners.md b/src/administration-guide/runners.md index 5b3874a..525e19c 100644 --- a/src/administration-guide/runners.md +++ b/src/administration-guide/runners.md @@ -1,6 +1,6 @@ -# Project Runners +# Runners -Project Runners enable running tasks on a separate server from Semaphore UI. +Runners enable running tasks on a separate server from Semaphore UI. Semaphore runners operate on the same principle as GitLab or GitHub Actions runners: diff --git a/src/user-guide/projects/history.md b/src/user-guide/projects/history.md index 888dfd9..9207d98 100644 --- a/src/user-guide/projects/history.md +++ b/src/user-guide/projects/history.md @@ -4,3 +4,166 @@ # History + +The History page in Semaphore provides a comprehensive view of all task executions within your project. This feature allows you to track, analyze the execution history of your tasks, providing valuable insights into your automation workflows. + +## Overview + +The History page displays a chronological list of all task executions, including: + +- Task templates used +- Execution status (success, failure, in progress) +- Start and end times +- Duration +- User who initiated the task +- Task output and logs + +## Viewing Task History + +### Accessing History + +1. Navigate to your project in Semaphore +2. Click on "History" in the project sidebar +3. View the list of all task executions + +### History List Features + +The history list provides several features to help you manage and analyze task executions: + +1. **Filtering** + - Filter by task template + - Filter by status + - Filter by date range + - Filter by user + +2. **Sorting** + - Sort by execution time + - Sort by duration + - Sort by status + - Sort by template name + +3. **Search** + - Search by task ID + - Search by template name + - Search by user + - Search by status + +## Task Details + +Clicking on any task in the history list opens a detailed view showing: + +1. **Task Information** + - Task ID + - Template used + - Start and end times + - Duration + - Status + - User who ran the task + +2. **Execution Details** + - Complete task output + - Error messages (if any) + - Environment variables used + - Inventory information + - Repository details + +3. **Task Logs** + - Real-time log viewing + - Log download option + - Log search functionality + - Error highlighting + +## Task Management + +### Actions Available + +From the history view, you can: + +1. **View Task Output** + - Access complete task logs + - Download task output + - Search within logs + +2. **Rerun Tasks** + - Rerun successful tasks + - Rerun failed tasks + - Rerun with modified parameters + +3. **Delete Tasks** + - Remove individual tasks + - Bulk delete tasks + - Clean up old task history + +## Task Retention + +Semaphore allows you to configure how long task history is retained: + +1. **Default Behavior** + - All tasks are stored in the database + - No automatic deletion by default + +2. **Configuring Retention** + - Set maximum tasks per template + - Configure via environment variable: + ```bash + SEMAPHORE_MAX_TASKS_PER_TEMPLATE=30 + ``` + - Or via config.json: + ```json + { + "max_tasks_per_template": 30 + } + ``` + +3. **Retention Rules** + - When the limit is reached, oldest tasks are automatically deleted + - Deletion is per template + - Task logs are removed along with task records + +## Best Practices + +1. **Regular Maintenance** + - Review and clean up old task history + - Configure appropriate retention limits + - Archive important task outputs if needed + +2. **Monitoring** + - Regularly check task success rates + - Monitor task durations + - Review error patterns + +3. **Troubleshooting** + - Use task history to identify patterns + - Compare successful vs failed tasks + - Track changes in task behavior + +## Exporting History + +You can export task history for: + +1. **Audit Purposes** + - Compliance requirements + - Security reviews + - Performance analysis + +2. **Analysis** + - Track task success rates + - Monitor execution times + - Identify patterns + +3. **Backup** + - Archive important task history + - Maintain records for future reference + +## Security Considerations + +1. **Access Control** + - Task history is subject to project permissions + - Sensitive information in task output is protected + - Access logs are maintained + +2. **Data Protection** + - Secure storage of task history + - Proper cleanup of sensitive data + - Compliance with data retention policies + diff --git a/src/user-guide/projects/runners.md b/src/user-guide/projects/runners.md index 9d3c581..d61d85b 100644 --- a/src/user-guide/projects/runners.md +++ b/src/user-guide/projects/runners.md @@ -1,15 +1,15 @@ -# Runners (Pro) +# Project runners (Pro) -Runners are a powerful feature in Semaphore Pro that enables distributed task execution across multiple servers. This feature allows you to run tasks on separate servers from your Semaphore UI instance, providing enhanced security, scalability, and resource management. +Project Runners are a powerful feature in Semaphore Pro that enables distributed task execution across multiple servers. This feature allows you to run tasks on separate servers from your Semaphore UI instance, providing enhanced security, scalability, and resource management. ## Overview -Runners operate on a similar principle to GitLab or GitHub Actions runners: +Project runners operate on a similar principle to GitLab or GitHub Actions runners: - A runner is deployed on a separate server from your Semaphore UI - The runner connects to your Semaphore instance using a secure token @@ -35,7 +35,7 @@ Using runners provides several key advantages: - Run tasks in different network zones - Support for various deployment models (on-premises, cloud, hybrid) -## Using Runners +## Using Project Runners ### Prerequisites @@ -49,35 +49,10 @@ To use runners, you need: ### Configuration 1. **Semaphore UI Configuration** - Enable remote runners in your Semaphore configuration: - - ```json - { - "use_remote_runner": true, - "runner_registration_token": "your-secure-token" - } - ``` - - Or using environment variables: - - ```bash - SEMAPHORE_USE_REMOTE_RUNNER=True - SEMAPHORE_RUNNER_REGISTRATION_TOKEN=your-secure-token - ``` + 2. **Runner Setup** - On your runner server: - ```bash - # Generate runner configuration - semaphore runner setup --config /path/to/config.json - - # Register the runner - semaphore runner register --config /path/to/config.json - - # Start the runner - semaphore runner start --config /path/to/config.json - ``` ### Managing Runners @@ -116,23 +91,4 @@ You can manage runners through the Semaphore UI: - Follow the principle of least privilege - Implement proper access controls - Regular security audits - - Keep software up to date - -## Troubleshooting - -Common issues and solutions: - -1. **Runner Connection Issues** - - Verify network connectivity - - Check firewall settings - - Validate runner registration token - - Ensure proper SSL/TLS configuration - -2. **Task Execution Problems** - - Check runner logs - - Verify resource availability - - Ensure proper permissions - - Validate task configuration - -For more detailed troubleshooting, refer to the [Troubleshooting Guide](../../administration-guide/troubleshooting.md). - + - Keep software up to date \ No newline at end of file From 9f3113814e1e01ac484e6679de421fbc9252967d Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 16 Jun 2025 15:54:08 +0500 Subject: [PATCH 139/170] ... --- src/user-guide/projects/history.md | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/user-guide/projects/history.md b/src/user-guide/projects/history.md index 9207d98..ce1c0ec 100644 --- a/src/user-guide/projects/history.md +++ b/src/user-guide/projects/history.md @@ -5,7 +5,7 @@ # History -The History page in Semaphore provides a comprehensive view of all task executions within your project. This feature allows you to track, analyze the execution history of your tasks, providing valuable insights into your automation workflows. +The History screen in Semaphore provides a comprehensive view of all task executions within your project. This feature allows you to track, analyze the execution history of your tasks, providing valuable insights into your automation workflows. ## Overview @@ -23,9 +23,9 @@ The History page displays a chronological list of all task executions, including ### Accessing History 1. Navigate to your project in Semaphore -2. Click on "History" in the project sidebar +2. Click on "History" tab 3. View the list of all task executions - + ## Task Details @@ -79,20 +79,9 @@ Clicking on any task in the history list opens a detailed view showing: From the history view, you can: -1. **View Task Output** - - Access complete task logs - - Download task output - - Search within logs - -2. **Rerun Tasks** - - Rerun successful tasks - - Rerun failed tasks - - Rerun with modified parameters - -3. **Delete Tasks** - - Remove individual tasks - - Bulk delete tasks - - Clean up old task history +- Access complete task logs +- Download task output +- Search within logs ## Task Retention @@ -119,7 +108,7 @@ Semaphore allows you to configure how long task history is retained: - When the limit is reached, oldest tasks are automatically deleted - Deletion is per template - Task logs are removed along with task records - + \ No newline at end of file From a5abb0249ee77c67d152264e1761c1760fafa68b Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 17 Jun 2025 14:49:20 +0500 Subject: [PATCH 140/170] feat: runner text --- .vscode/settings.json | 2 +- src/.gitbook/assets/project_activity.webp | Bin 0 -> 149834 bytes src/.gitbook/assets/project_history.webp | Bin 0 -> 81938 bytes src/.gitbook/assets/project_settings.webp | Bin 0 -> 76380 bytes src/user-guide/projects/activity.md | 2 ++ src/user-guide/projects/history.md | 2 ++ src/user-guide/projects/settings.md | 4 ++++ 7 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 src/.gitbook/assets/project_activity.webp create mode 100644 src/.gitbook/assets/project_history.webp create mode 100644 src/.gitbook/assets/project_settings.webp diff --git a/.vscode/settings.json b/.vscode/settings.json index df27702..01758ab 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,6 @@ "liveServer.settings.root": "/book/", "filewatcher.commands": [ ], - "liveServer.settings.port": 5500, + "liveServer.settings.port": 5501, "ansible.python.interpreterPath": "/usr/bin/python3" } \ No newline at end of file diff --git a/src/.gitbook/assets/project_activity.webp b/src/.gitbook/assets/project_activity.webp new file mode 100644 index 0000000000000000000000000000000000000000..c0b56f0934589eb1098c03f6cbde93e4bc04ab16 GIT binary patch literal 149834 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 U00$;O00005FZ=NT0000002ER-VE_OC literal 0 HcmV?d00001 diff --git a/src/user-guide/projects/activity.md b/src/user-guide/projects/activity.md index 745a780..7e9a657 100644 --- a/src/user-guide/projects/activity.md +++ b/src/user-guide/projects/activity.md @@ -4,3 +4,5 @@ # Activity + +![](<../../.gitbook/assets/project_activity.webp>) \ No newline at end of file diff --git a/src/user-guide/projects/history.md b/src/user-guide/projects/history.md index ce1c0ec..788ac15 100644 --- a/src/user-guide/projects/history.md +++ b/src/user-guide/projects/history.md @@ -5,6 +5,8 @@ # History +![](<../../.gitbook/assets/project_history.webp>) + The History screen in Semaphore provides a comprehensive view of all task executions within your project. This feature allows you to track, analyze the execution history of your tasks, providing valuable insights into your automation workflows. ## Overview diff --git a/src/user-guide/projects/settings.md b/src/user-guide/projects/settings.md index ec8cc68..2469291 100644 --- a/src/user-guide/projects/settings.md +++ b/src/user-guide/projects/settings.md @@ -4,3 +4,7 @@ # Settings + +![](<../../.gitbook/assets/project_settings.webp>) + +The Settings page allows you to configure various aspects of your project, including notifications, and project-specific settings. This page is accessible to project administrators and provides centralized management of project configuration. From c6bd1e9b141741d17fd7736d5c0829b64da1b750 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 17 Jun 2025 14:52:53 +0500 Subject: [PATCH 141/170] ... --- src/user-guide/projects/activity.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/user-guide/projects/activity.md b/src/user-guide/projects/activity.md index 7e9a657..d559d8b 100644 --- a/src/user-guide/projects/activity.md +++ b/src/user-guide/projects/activity.md @@ -5,4 +5,14 @@ # Activity -![](<../../.gitbook/assets/project_activity.webp>) \ No newline at end of file +The Activity page provides a comprehensive audit trail of all actions and events that occur within your project. This feature tracks user activities, system events giving you complete visibility into what's happening in your project. + +![](<../../.gitbook/assets/project_activity.webp>) + +## Overview + +The Activity page displays a chronological feed of all project activities, including: + +- User actions (creating, editing, deleting resources) +- System events and notifications +- Access and permission changes \ No newline at end of file From b8db3c17deb491f79fa39a2f28f7e0a0c41df5cd Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 17 Jun 2025 16:02:17 +0500 Subject: [PATCH 142/170] ... --- src/user-guide/projects/runners.md | 4 ++-- src/user-guide/projects/settings.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/user-guide/projects/runners.md b/src/user-guide/projects/runners.md index d61d85b..d97d905 100644 --- a/src/user-guide/projects/runners.md +++ b/src/user-guide/projects/runners.md @@ -46,12 +46,12 @@ To use runners, you need: 3. Network connectivity between the runner and Semaphore UI 4. Proper configuration on both the Semaphore UI and runner servers -### Configuration + ### Managing Runners diff --git a/src/user-guide/projects/settings.md b/src/user-guide/projects/settings.md index 2469291..8520f75 100644 --- a/src/user-guide/projects/settings.md +++ b/src/user-guide/projects/settings.md @@ -5,6 +5,6 @@ # Settings -![](<../../.gitbook/assets/project_settings.webp>) - The Settings page allows you to configure various aspects of your project, including notifications, and project-specific settings. This page is accessible to project administrators and provides centralized management of project configuration. + +![](<../../.gitbook/assets/project_settings.webp>) From d0ee77048da6793210175e915bc188effa71df7f Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 17 Jun 2025 16:05:24 +0500 Subject: [PATCH 143/170] ... --- src/user-guide/projects/history.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user-guide/projects/history.md b/src/user-guide/projects/history.md index 788ac15..a515f74 100644 --- a/src/user-guide/projects/history.md +++ b/src/user-guide/projects/history.md @@ -5,10 +5,10 @@ # History -![](<../../.gitbook/assets/project_history.webp>) - The History screen in Semaphore provides a comprehensive view of all task executions within your project. This feature allows you to track, analyze the execution history of your tasks, providing valuable insights into your automation workflows. +![](<../../.gitbook/assets/project_history.webp>) + ## Overview The History page displays a chronological list of all task executions, including: From 7086ebd0a239c5d90369c5fd36e9630ec051febf Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 18 Jun 2025 01:00:57 +0500 Subject: [PATCH 144/170] ... --- src/.gitbook/assets/project_runners.webp | Bin 0 -> 78484 bytes src/user-guide/projects/runners.md | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 src/.gitbook/assets/project_runners.webp diff --git a/src/.gitbook/assets/project_runners.webp b/src/.gitbook/assets/project_runners.webp new file mode 100644 index 0000000000000000000000000000000000000000..ba23e58985f2200317ff71b53f6c3f6e06e3f5d5 GIT binary patch literal 78484 zcmd?RRajli(gg|xcL@^Q-Q6v?y9al7m!KiIOK^7!4#C~sA-H>RT{p5VduN~jocnSg zE>HcfHP@UyyQ^x98dZ&gxQIv?BQTJvu%MiZ96SEouj5KGh%{hIb|_PDUU||ek(_LT zECR+?__okcX4a3!BdC?km(P-s9fi$)nX*dHCJA5orez2DWIvCQKZIVj?f6)=)jup; z(7j)U{lZpzveL{og!iFs3E&UFdJw({eJXfHFv6Q@Tk_clygGw>;=9**I6dM!@G;_L z=Uel!xOx3dH;#9eagp)S`v~vM=Kzp>6Zv%WbaU);uM;J^)3)NX`|R_$1z5S30?+{X z=6&vc?tC6_$1-jK=71B=Du6B^??D_OyXAAO2)L<)0086=08eI5w9h3^p;wXjec59( zd@TTH0N%6YgDgN+7eH{2aLTs=81X3tzyYS7+Pdj3__iLc?+ea-F54#WOCCdyOxAsB zeWC&WPg6H-r({Q~n}7zN901?5&vo;{YQ*Y{k2`=1p!pQpPq(!?)Yjo+10Z?6dB`}; zXgFO@uxlh5()~(Mi-los=1IoS5t?Zr8CSc5a#p^AA z<~i>f@Q8lecUJ)b0G=-Z(g25tzMD3{bF@z=zysj%1ksLu(RSK)?=u3Zd0M|We~x_y z-1A+nR<$nshynNj6;G-UK2fK8d@Fp%Uw@){TK4rm2!M>3j3ylb-~<4;(|no%JOGpg zqu1+YTISz5Gn{mDRYlrFUx-2cHg+ah3G=9eKQdSeb}_&`dfkk1qmMJ+*Nk}5%k#$% z{=Dejdo9sFuh8(=_z&0q?S{3qA-YAAdsE4|AGnZ%+E(G`81JAUXR}C78wAdCX7uxF znqGCVzVRk-R_|XsYM*$Q@UE^t-^-A9u3U0d9yaFfu5!HQ38~fDQi1l@dA>3`{o4b6 zJ>%~ev3JvH;jq--m~38FjwrFocQCzQRxVwfB>F(6&7;NBO-F#k&57!caJ(uV!pbDe zw7Y)7f>C`c2IK^)cN~Dp<8UZo%rWe>;aD$4={XGlZI$#omJZv*6H|&SBf(CFJ! za}bT)ln=n*L|3&zC%6@7A>0P)*gU-&F9Z;$iFM)R6sQ{NhJ%pG0137qxzd0E)Qq-% zMgz~mR|lM$-(Ts^h5gmi2Wz*R?HZ-MoxqJ#^u*LA?0^%du)3M(uE8gueb?ZdFmX+I zS|7$t>?hUVneV+%g5U5`0gabF0$*y8ByCD2HGa8e@1fE~swZbT60XVVq?=}C0}o}a z?a}tJ!nLBRsLAYX5C>V)z}R)YgkVb2ZIo;6xjtliQ8_`|6*OvWI$IRU8UZ#WcIj|p z@IBBcWYFvo4-7d2v|FBN5~`ahF>97FR5)R=t>Hqa}UYmxM7C*7ayR?Z`LJdt1l=T8p&ok^ z9BZWB$>l*f(YQa%d~&+pYN>{$`0l)V;ipQu?r z5C2d z9cOPoNjPhfj&1XbWUpn4+RFSV*G8IhA+n$eYR8YRc`@6J=X{-cBQPKh4$K>|;< zG0Ew)SLS!hudFi3RsWA8l<{g>ZRq`=3!ao0(qw-IjDPs3N`IY`B+dUBecJ616tEl* z{~DD>rN9>V2#E@iBGr?SDHy{NWI?u4#TH%Hjt}m;Ir$?ARzCXd(?XMcCAeFNL! zzil~L{TmxG641tH;-y+To=6+Lqy`cDv407~sfe%kTZAGt z8D)D>xuk!KgTDujgDSoPs|aCd=HAIkZI=o7giMve#05HKOUz7YCn`;p&r-!RX}62X zdL3XTRo@q>7W^{+C}k9@Wa@|Z$#O1uR39Ae3{F5Ktf%6v$@A&GR@V{?lb(=;YkXe5-QMbIB)egz^l7E(ea zvP=9d`;S{X5fU_SezprFzQ(YF)}u#nukWbCWm`>$*foQr69r5$f=G^=AM1gMc{esp zL<=`?!T;`rO+Q|o*Q?2+ z>^Jq*Ne((WwH~C&VEQ=tqEY{b!n(YZru#qh47BbOPW`uo0bahw5Cw}RA0t_z zkMLnOr$SYR`wFvG^jwdRTWD~bh03TiOHbfONB6*Pp<0VuZ)nqe+g{6mq*91^O0<|a zixylmgnz?G@AWW3+HUy*-lPcD$N3g?pLh&M|A=MH^m=@*x*5r%n#YTzWA9WTCGI)O za1KJ@(gl7ob^Ar~j!V)Z(k%ywPb7A_ zS*>xCG%HM(32m{gm1;VOMG4tUHGHs!byFhF;bDcSNUdkl-`KiO3~7rqts}xMy~!P} zz@ymox?g}iT)u40^S!+if4|RF7F>?(T)$O>5`G|Q*x0baq@P%@62v5^_mmgZz=Pw7 z>^H*q$437(oPH;H9-Tc(XW?m4P*_eIehV|?!WVF?pQsdVQN=Del>=50jXYk!fTDwO zaL`uMo#QluTg>QF1tHZe`o4s+3B$0gdDV&?@JaXM@TG(^mEuCE52#)=~7`^8xkW%=jwH>nz_Ai38gNTu`|Vt^jFy*0c+LfdDh`_%%?yQ`G~f$~3Q=aDJ-5(0oEkLFcV`g((Pk zy5;o{(IR@)5K!vC9-aq&0jxBeSr4ncU#U%pVYbkgW)|96l;iT`>*7=PnUJre7UC|Z zXbH9hH@dNZ)<lJoFxH#V|A=G7-Y?h#Stb(iHNzf}rSaTyx z;-?ytZcJBS1Vmfk)cWch2bzleBsZ2NUmE-lY=QVe#AC6F??x|pPz_3Nnn=)>kF497 zaRT}D4^lJmolyQ^Y3R*NbCX)b6YSJQptbm>>BCVN@Pb{{*+-3L$4{dnI+FwaK^EX~ zSxvq}m6_DsvVK*5p^Wh2d*MN%uy?vdpmlKyEU&Aoo_Ev7m3(Mkq8RWxjTzO5fku=d z-3>wBE%S&;`*>dG3M+B5#D7SKRN9SH2lZh%@&e5}UjTa{{)LdZYh0jRDw!P-a!e-2 zOrQ0nIT!7;EDGmZKCL4)P!YV&_B`dPyeLG~lW9sJYn*EWqNg;gqWJ1{A5;>jn~khbBBG(nag|#|t7@=zSelb2L}9 zm-7-_%{%|&h*NdLZDo~xnWi@h=EuuqKVDkrXnMVud_s`k)_2A2n`RXfF$A^4k$E*U zj)K*!TO6Frx_50`U%tVZ>f9+%2ArVt2Hd?s&!kdw-O*vHM=-dR*IamgSl@7?t9?rR zJ3>u;W=Z5BjB)t4RQ7iUa``bWJ>)xUL1!DA`b_1Om+iU(3Q%DWV!|oIL4;f3I)e&R z6hDO%6?+*mW{?Z{FZis%i_dX99^WxZ*YC`{xqJ);o!GEAIN0&usmbz9U`*rIAJO2SOJl{> z{0yYgz52y85$0+uMO`BPHn? zw~E9=aaE|v<})lR;CC^22*~?Jl=@OJ=ho|g5~=ANy!~!syvDM`TaOe-I8`_zPt(?f ziLj~b0bP_3RUC9-t-1H9Z z$AiW`7(p89?An;J7&B`)Kj~6m0X97weLZp9{fBK?<=>;ko+Z)<+&DJa3)|{Z^5;+` z7Zaj=x&g?hmIye~_`hnsK*mlf=06&0^nL{*Ta);qlO0Nu7n&<`H51=qIP^J(_TYy*9u zrM1iD4Xvr9^MD@?|8>!O8YZHwz0wP&k?n{>ab#F3HSPt!zdp}*ejwo)grOCYXq_{2%zll0+M}JuS!rLWLSpyqw87=F;3cRR`{E|QoYEvt>zPHrgR$XaG zI+O6e6T{eU#}x?Z1j39mOpimzs$krf6leAfkyiqE4BQ7Dn3ZE&3@Nd~Yb`FCz>RmS z$o*{%(3vXJII$lE7H;@b!$;*deT*{M%`Bvw{sZyFb=o0r92iC#4849(wKzRC#u|0a z&-Q~__78_Ps#^vE)G0Vq{N3G(z&aQO(4g8q9-RYP-=h1^9`+}Du1ndIk?qtpJ(WZV zUWb8dMfgQcB{U(W$nRxzbs@RRP%dxf>GD17PFTS>2rmH=r>DxEpJ+^hZ&l z1{MCkD4nEDy^H zP7;Y?L)EAFlJ}rQ;6l79w!@ zNf$aoZR43FBy@An-6;dHm8mK52_&Geabj8b4-fXSVOYFcB?LJ;i*irD_~*X+PoV!z zh3&_3{pU7){bB+7n>4wh`;}sTM~0_wy6}Gh?yqs`zj2Wt3jMD+#&?-z_Y-ye*niM1 zmdsiMw*Ehy47<%qu{1aD7>qSbjMp)(%(@H&t{bxL@^3V4^_?L4WA14qx+nKqp@_Y= zd8K3}goX6RV{3e{KQSx_N9^&nm1!=r4rxJV$>*XXP_WD83t-Q`>N|fb{E`$4dqscE zFyRj`RA5)z0R#kngC#u+@0>qnOv#tXxKic1g?2~?3x+`63GtfL;Fi<3a=ujZ{xBd! z-qrHH6ln6gs)0k+zf03iP3eYQ(DgcLTRlNNl<>PAX8`g-xya|rZXq+=4_Pu2SaWt^ zLa`4iZuPp{Y9Bh+zf-kv_?-RA>xg}_CgOBe*US`>)~$z2+8k?`bdx0H74?COx#{=X zInw8D4^l+{-)xQmLLp&r%c3Z0*o>wKTcQY`97CTPm*#NjiWp!oN$rHFst?(5HI~|a zOP(>MHjUNzKS^wV;2T2C2hN`tCa}#RyN0K0J?8>))F&)-B^2Mlu29F>i}#+P5}ABSdJ=YA+jjhEg?Ka=D;?+ZD@)3 zZ<5##du}?jH)Hr)Y2zj+7Y(awaY_C=)%6@s7aw?V;oxdRYjQ@s-j{?1b^9j={{M|D zAzjFUN_{YRbzqb*ZVEghmq95*gmkPJ@+P@;=;e3jblQ~#^K8*DxIDZT-H{|3{rVbv zNB0KeWG-R0)FGPHzXe13Oup|#6ZVCW+V~Ng89rR{;n(rC23KrgdQJ;hY=#=Lk@pu~ zwcvLGcR)|vw0NQMrY=WXeIM4#9i!IcjMkM@K9s%|zD<86j6}nR0yV!`Noto(idmcz zgtiA)d>2m!c^_SYte=(gG?Q=-pBIg(wwL-Qu2Q{>&4`-Ha@_`2Ro}pO(wAqq+?YNm z>-X*ag`|nj34SRF9%d(pi6zPE{;7KkY z*>(lk!}}!tYF2o_0mzot$0(4^E1ssQ@C7E{R;ONur+H8@W%!xYB6jyXz7NJcG14yr zZ3((@t0KP|J=e~@2e&RB+|m;^E^sm|_+ryI-Ft^Sy6jB&56cWM?v#$X{HxFs`j8!} zb5S*3@G{3dpdhtf{jC`w6PkS%EzAQoNpgzK0pLfDgk zH6I%GdL{Zmm|4grE3RLgVm6k-PbV!mivKQp3Zy$+y0vIB|L|UdaBCZGt)D#!Tioj9 zHKs&<=drwsMKWx2`+5g?NiYM2Sw=c) zYTq&ZA|usA$W6R6mquUE8!>jE<7*8BOGnx~Z3C%7hMu$d8I-ap zXW`J6OS(PS9`!EC*X3U*RA(*<0`d(sly})*RY=_;ly;v@oM|mdf+dTCz{XO zL6ikBA--aK@qIDD1f}fb_X$7r_-E)@1gV$FXqv)fOe~O0koE{b@uHmGn#)C)3yi=s z2u_zq+NSeR68i>1Fy;Ab_V@xYjv5W)@tl$}VypIOSQ#CsGBrdtXQYi&zmw5-crzk0$(c`#?`k`A1W3tJMV?3A z(>T`@I3B_!KI|oo2_~p3N9Z>p{hN8}Jh?);hs6DdZ1%{2hy8E}W=#2Q(I-&ZZ&Bzk z#f6PRYiR-eTGgdsudkW^T{3rU>{){60Bniu&+71BvG7u0#*5rtlh!hSyYF91M+UgZ zHLHU5-pISJ*hawK@h+ad=>OMd6+4nNE0ww34ytVp+HBrYcxh6y@7nCIn-L-&IT72o zwO;&(QbOYh62gq_C*!k^s(%$(|DLM<5G!)&T@yv2s)mEzUI5X|dhVPG;H9l6+Q0d;j@^ZC^G zK@!Zo_ca!cj&Ynw}L|X#Ja7%i!0H%};X-e-eBjCp2A0leG6!<+{JvOb#MM z(Zfqm!tie;z}!EyzVBA6+|Gg3fRk)04|};E>PI2NCNu+7hdo03KH}}#ifRRa{&5fk@Ve%W_8{4%-s;KdZ!%BYAbbq2QkAbS zIUF-q1LMFXs2`a#BjWW2p8D(7zqTw)k2RLGb9MdHU?R9nCDX)FpIG|wN#UO1qoaxf zUb8Sv@AYpP^bdg{s@o+{-ZnzDwTUvYyz29Ys)q!be63z0{Hxn3FvS^DwvR^q7h)Ha zZ6kUV8=1UOM8EO|hZXc1Qe>^4`?~shgZ;xTjeko%w2#Jg#2wyXVjI6WP|nK$M_9D% ze8lQgN*LwLmpf`l59)c)tooM%wEcXAt2$Ns&&>TN6}#?R1@cybkjBwK&1=nuCvLRb zarUG9aOL|GTn$d<_A=m*F6Hi&NzuUzj$X}->9WnY;t!2u$_?;$xrH!sNap%T(%ZF# z<{vN2jbubMr5&i~=T}Vj+4Fp_x4b_w;XW`;Afzqx;`mKkPUam4_!^Xe3ahu#Ef41N zPlMG*u(aau>|({xLqLWIC?dloC;d`L__^K9bA`?%6aZlPTw=gRZJyrpa&w^PlY+_u znOb^H0ROv_*R->-cGxOXgK#{!v^I5#ZHN*Bb7XXrW!0}z`t@0znuXe}Y`Yi6k zgJVAkB;Befu^& z!H#Tc(ZRAFv6oMoJ!wt^@b5??`K4Ay4@y9ocT*+!ycj%r`6x$J&D!MS=!jw3Jl@e2 zDivLDa^4;H#cOEY&~(nQaLAJb$v$Udnu_z1*zx;n4cFCES6P z4W)xA=l_O(40^9{@aTWaCT1N;og;_#Jxt!HxfiT)B@8SS#&=*|&6ktCO688m+7HlV zd2NSJQaR(hm_*4#L0O;03d;o`UC*w&D88W?457$_?ASLIL1KihQ}&5@e=HOc$7>RB zmGF5m0_`r}YEDKNub}Br4%*0!oqNL}sBfh4ByK94V6oq4f%PTGnYIQGOdTu1@tC)YViyPm}-+p0%gEI=x|0BNW?+m3-G}`@yzQ42F-&7YX zw(-=AKtf_jlaHJB!S53*)INqTkz{zcRyid>*;j~Ns{15D^J;?;vq0L2cIql^18_gA zkVA=z9p1l7Ws(WaTsM`{UOHd*9W?{?O#tv2x`SwhqH>DwrF^D9a^44@KW^TuycWA= z@M-m6T~$e(MUNb_z)0wnG>Kf?zXdf(vI2nkyfX*%guAV^%}$~i3$j*~M~dSY%69WWhCrR{K7yU?3`=?D&Dw&oWcGI9WIHdalWrb73^7F- zgOQB7US(`4em{+pxyw2;BzvrC4Xbq#aZ2Xv#_%Ct#``v$pVoACY_8)z6f9Ed0 zRWEu*5?K}PH-CjDzxV5XuUSFajYnKt%J2UqTK&C)I4=ynJT0jT{@3XA?S9|k#}-)p zkxss<@vo%tA5^Up_rK$DT*|D@>ymT^KS%Z7=l+}CsM#p9pyfO8U({_dAUKA&VW2HZ za8@o@VE*S3B+7~T8T{Yc^nNP1(&MveBz>H( zT!Fr>ohA$7t23gjg)tyaR1bP^QWCOp2Cng{GYaJ)B(PuKtjH+BK|G6QXs*IW zrGm)CRYUIWNE@tIbc*>VkXTMq{H{ws)q3d?5zxf7S#nqDx6XTdVlNk?3D&ige|T$E zR7~hx=(j*s6ufWsA{uFXP!=hrNazg)qx4Nx7}XHP$?9NLVT;Li?&Q&%R6pAVL&SOX zit<;;kLaDCk;AEB;m~0H^7I8?%YH!Z5KOQ(Iz3y(jf%{|ALZ==oy5{oES0+5Em>`3 zOtFP;-uN-n)4rJ|A>tS5uGUu?e;Dh%d)*PF*uIAs35t?%R&m`~(5QLyv?EGFT%sNy zW2NKDbg>udH05k9kC^P~?i5TC87|vSiccR9b(_e~a@M6R{8{PX8GO^hX4$_aZG??n zE(7D7zHua!fhK9wNGT3qDw;e335jc>3pmLB&Ip$8Or3kpW$G;v6;LYui#5HO<5+cX zRB`cwHNH&|gw8fIoP~JdfPz1+tAO3g=3t%=bc&NsVNUR9H8 zzT@G{UqUe&76*4__N(#b<`4LCuH%=k3i>a<^%2kfqS);8^kk_UxH$Uyy+fz;$ybE)uD=(`NwL*`suMLZ(wd z;NYjd5da4|(kX295a!zWS~YDXHSmyo;AhUB`MCw9d|p$>(vF5FXp^yMzK)6CxYzsR z=lE8TZn5;*U69W0I%T%w28%3c>M_nE)&a4vZKyj@iFxLGWYN|dcjUw`J!RmT=uNoE zB=V^M@e^T${?Mf@S^rvubD*B49-*c{igIxvzWhar&JJ3t*18=B_FDgEEOZj6LO=e1 zGFHqJpm43LDP516h)5_#;iXz{5R7BHIn%Z*0Ko?NEtu+e}AnVxNY`gYVtNbaVTr9$M1?&7cn-OMQPz^}% zk$4H?fLtYI($BuWq6`vmGNbty!R2q1=0~ftLI;ugaJ*W6?7vBe5f-+J#Ms;~#Zd~{ zz?_yMK9jatU5Wi)rxd=apI|`YM$Ps3XwQF}_m2nv2D3hSM|R4gzaKyNKLeskV=}I< zVu$a)&o|iR(^W4i&~OhoGzs2bAoYJW)#6s`(ZHWou|M#%D$<^vl&>Qk(}6jliGmme z;)xYRzZ>emyKkbS8~)1_>)#pS@72;!GZsnt(d+fm_H&gyUY+h86FUX}E>;Eg#4tOC zD~#9*DE49Wugz}O3vVW%feN2F$hIMa0H^Pn&ccW?=h*RSY9BBUT*}bhRsJgs`Fd=m z5kr&GSzg^5BYAE^w(3v|KKAQ#2rK*FQz*^km8PzlnY&BFo>F9>#rwQ}LC+ zUZRSHSzz>{Dsbal5PqZvM`KX2|c>s#?p073f>vAE0UU)Gxc-X8x8f%-2;O>%!0 zR=#P`-k^7Ub%-tBX{_1nE}d6jkS7Y5#FWH!6kw|ETcU`@10(=AP;^FzQ+9^sSsiJtse5Ju;MM@*lAg<=FmHKow)=0jIvA6Hcvh7>VvPT4?$KBaD zHC^O1a_~rOO`;qGIgOPg)FzN!-sX4DPrcnl77FS?y>-yRyN|?eh3X#gk%%n=8DXm% z6({4_I5Aucdm0tEaZ|mf*)xC5jevQ?a&Lm{^QA!ND1>A|uBnx(%-Y6lPu9p}-HZg| zZA^1_`QyzwK@MF{tCy0=MX}g2Z0<^sn9@-y%k=9p6#Q~gJF=(i5z-lLm`GG*cd4pJ1w zYqyWv3{E9Pf7z1Qv<@(PdD@GlthJBlhK8m%DUR03nGNMMG+sgz$JVkFDKpt`Z%Egw z@EJoLKP*PRO?1zw*K^{-eRl79WXKo?>J~#TZ=RcPoxMSKL-<%`irdkPQ$29|)Oo9M zQ16+sG{03DU#>g!^!~VxOr~i0m4fK^&WqN|BKE^T;pC{F5E|G#FyI*=E)%$Y6UUGY&;vCcWcOrYQ=FuhBM_| zB5bT$W53X#Ph{v0Stpo~^$pTBe+tiWK9z>_J$;$Uc@`K7ByR!aD1aMl`N=m$Sw#9Y z3Hvrj!9|($b_`=@Q1vne_~L!GTE)WZtY@gp-Ak>CGTJd@iJ-)YR~;TRvrYawVG$q0 z0b3i7QR)MlJ9bUIyd^I9ZI8k!GlF7}XI~P|-&`0~&B#O#p4Uo0hu$*`#IG3FJHagy zfi_iV-z_<=BBo3c7U}a=dqieU98KlBCX&7r?woH(hkrrlyvEpZ-bvM2K7gX=&@n6Q zx=17{?9x{ONB8CD8LEVVqV@-i`QRlQ7^3Tz9?ZV(wHF`LPfv%C3kt}n3TjyT=!h88a zltG4X>D4pgZoEO!{%1H45`{LZa}XriInhpN8yvgRtY=0Phu6lKbUnCvSf?$r&c5;Su0!nwp)BYELfL+pWN zMB}NXE)Q-nYXe-kanMY&C_X!$gh8kECbHYd9=JbdKnqDy_abx1Nd zwkuwc)^Njp_)aF-BZ7@!NH719fB=|)?sFoAYo96copj20DF>>|)>8l`O4TgZ!PBwTCz+FM_V`+;u#qHy#?#spFdXu^eviRj=D9!vEm+G}~-wl-uZ>IX@ zlT>~TnJOZcuHb7BYzM~Bm+XhT7fUut`34FCqr2-5Jpv>VN+LS#qMfC>G7;8x1xZko zER({AGX0(qRK9j&2SV!@t zj3iN3$nx?UnTxjx8k5A-ILRjv0xQ?eZ~EF9s^9I-j6DJ%1n8urOe1V6BVQFN%~5 z#frG`N>mXbZr6{J8qft|vgcgwg8kXbQP)~wINJbaG_Z_qx&++%B~hJc6wJiop@PSU zNt8S^@~}*e4@v@rsQd3Aq+_S8=ACvyW{vp-$FJ|y@@8W3?I?iPNSv87@2Q@zu1r2V zPWJPR(D&hG*Lh~g5+4}IHsx8Ayz5h={?I(N6IIQv9zmjgx0L8`)L0E!T%!}DnS;s+zu ze2gw-B@qg0tW>e{mW}Ob`4;C`OU$rSQ*7;`zG8BfG^kM2*E~b_af^ZNxlhSl*&w3) z<~olGjs1N?{q*-bg$ymF`*;a0mn3s?oKH7JzEa4`o}RKY48Y;bksVq|wxTfN;O4>X z77rz|Ums~imlo(S5~RmKcvb#B1ROa)*Sogn8F=iC8=!}HW#VH&LC+YQb$p7ypsLqt z^T2RIs~O%}2-?9cfpX)$l7(k8#{Mh<`|Qya)~;!#mM0myD9Pp^zqa=b^J(oNTiRgb zyu=BH$3`ir(~cailQG+FY%j4LM~-ma!Pld#kOZ4Svc}~$;HG?qX>O$&7qN-T(zWP3 zqA=d%&u868%|ufSIQ;}0@$w-$rws(6Z!aC}^(7UD#q6%}fxwVIa=vrX@sUmO6?Qg2 z&`z^;2%AScJlsDK0JhRg!`SykDIgg+4+v15TUSez6hEMq(nN1KPv1Mx&*b&NdZVoC zWsBqTJ_y?!(F-VfE0OaalgVLVV>ETi5XaQMirfGOMK}yjjrfu_RjTUn;LvDyRBIL= zhK$&U&c1!W;q6OIu%o;)52?e1ID>tHK!~f)-q611eNQ!)GxBSC@EHx-E{_MaDD_oO zZuwZKPbt-(P%dv#^>9#G{N#hz8KAIUDa1aXG{KTr0GoluZxjhc?J_j>yLJ!0MAeOg zqp7rQQLs}=kArfeNdk$=6BqXLohN3RnqCqYcw0IBD84c7G4#noTIdOCYlCQ8{uqIc zW~tWzRX593<+|johDcgIbHz-wrVt1^C^Q;&?Od?Y^i#A5Gm6_=qMN>G)Qlp{IOA0Q zu9p)-IL28F|s_11H7G;%cbpMaUs7XUjq4j1|-c4_HKpBb;1^DmQID zU+uz3vs=^T^v)idFIP*Ulu?MExjCtdn!l(jB&g-Je{Hiu7b9}`j{YTe zDKXQPAZIh}RG%k@sjJXssfu^6WT_a*bm8r_-v73!!4z4%s1WP^=X*uV+%l<*w~)+iB7he_))&3kT0rnbbeMKy33SWNJ_g!{SQ z9#nkv<}=52UeT0~-y}8x0>b0`JCk& z*)eeaGGoEim(AN<8E01z>kJ$ENN;^HW4S!DeUY`-gg5p?ODu`dS?RJY0-E*B&5NN3 z&;rZT&wH_BBtUk-*`2TtiAgfg7?%8d zbTX*E_}^;v;|NQMY=~QkyuoAV5F>HW+>cdk4vkgkzE8b>W$SI>>?msf>i#@!4^^aq zcGh9(8q|+id)J7wklAOAh@Pc7)FWm`&o5tUE1aF;%%=7J3CDTTR&_j)_W})B+(lBU zwX%9$=BNkV1d6vHxkUMq3&SOJeFQ``n1fSyLsz!`bV^K<8D(l~*nIS(bP$9#zP5BV znET>n=SnAod=LYX+ycnge?4Oj2bUCQ6|WR(c`&-0T+O08YMz7fh7A2wAuig~v<@)y zwmH)Lfkfe&fB|}lyxAjdmT+HgZVJ@4U?&D$8Mr(qR88`wSH|0LxNK@biK6*17FaFb zW>0sIhIkvbA=a1_+XGarp#7&9Z(S-5=t-T|+2$BR@t1O#_!05WS(2?Rm=eu88I;zO zt7I{cbMweJ+|{=U8B?D?5>M#y9Q!hCjd??TfN`Ig;&YRCqwgwkR29%1DxNvhe93c6 z3{HJbq_0C`!_M_Lv7E=FdPt@n@rbBaD#i*dJVi{RjTX7qZMYso=P zL$I3KLaI5V*(jJ?iR9z0@pJ`-R^e&PNc?>b4FptYI(&QvON&9wkG5KnWD}neH zhOtk9S@OJ6x(htz)D7Xc2cpHsM!bu_xJqGo+g12fZb{>B)8%<}IO}jBF&ThA^LjnV z)fJ*F>$~g<5;d78T$QcZSr0;;3wYLU8MbGFLHlWl8`7cH-Y9a)Ot;4Y$s(7u!69no z7pRXYY_UV#klChYQf#qCysj#TuT%T9pV@tKRqu>pEouD}3^v{zpcnhvd9*^ve77-w za38pCm1SxpMm5Y&<~d>2&2wN>LfJ?Bn3XV?wBPnJ{(XBEZy^k@E)e{=F3{J%fL99w zTp)gBneT~SNYRM%=?h!q8il_=Z=qQ`OFaoAh-|*5b}7LUSgj5wrKPC;*!+_5wn%YO zvH|vqV)tTp20Qyj`Z2LjZRr!?T=YjnO7WCi>IT~USu!^0D*&h~oTaJJ+ruZOiPiAY zc3?EwU|xO@yZ%Oxh46$Rd4_k5&UMe>rk_j-_$A3wO`~fy0d;i|2%TyN#jI3RSUoub+Ma}Y2=`~|{ zZwS;G=$71c7?0P2-g^chAR)Rh$^<}?!0Ha+y_S#Hy@Yp!td43vC!5b8u2j$BXegUB za%?MrM@Eud6+17mfR38t^@2V(kQt_33^9c|RyvnLl_?pe7+h7&b)engqJH+M9DAfS z&e6^L*wn;c?sQd<5o>-`T-*ZK=#2)*byjSHJC*UN=327Qk1u5$#G2hNIEFyOU#>QO z%6AB)(sp4%7J)+gwTZmU=yak3GP@cRG0aBm5h-xZq<$-USUyjeSt`I?n-7-8XdH}fyfAZ)(X>Zf&DB1!QzyR;lv2)91N z6fD5sRRfMobF}rRc7g3wOfBh6y~ekucwi+%5xb*OpN-@9KG-I7?tBxd8M!hZNnmQm zaRn<74(cKE3cD?EXH-agl!G}1tOu36TW4Cu+2gPivo-(&s#7Hq;{oTA;;s6z-u)*> zqr!Dh{c24{D?KKHM188wJ<{<{?7=N>?|4^6dFJq^a-(C^6j`-BO1Abk$2w%cgbuN! zapRp3A#pUIpTw@5b;WOlft1uSnKGN9puCXszG98ZiwMbP48qT&y?u7?2QfI}B-{?{ zdm>=m?QW!>s*0%ZL4%=Cpy>u}hck5VnpEZOM=wDj4lmSg!$rFi|0Gg?`cW2PXdFig z7jhpF?2t=G%4SzIVMpN*x=@1yN*uF5P}qtRZ)Y-PHkKh(YzWqcfsGfX$CY0M#CLu3biL+}7XQaaFcKXEom8hB63;(J@1 znUp`}8@N^embR@BsM#JAn^u3Y1CBN~n@a8>FJo;`&x-m(1v^%Mf)70Kq`#h#{hJRT zj4A0*>>V5|=YV*w3=GkW1KoKRlbI!)OzbY3a1Qqyg&s%u5MD^VQ_(=bF2NmURXSFt zdOGx*?yh`SX#VK$6p#6_;WVdP!9DUJjgQX5SCNnI#jTWE!33Bnm{H7UKD+(B8#w>~ zS&4+cK^grp-$!Ty=NKsV)({WI*~%|;xP=MwWFS(Ct^=06wF-DIiQBXZnk-9zslYa? z8eEx^^5ax;3dU8pcv^ECY*_8fC811({=7dLKc->j~aT_>Bbiew^s3v$G=SMMYR5W7qDDE1Aq*M~+hT47NS zZ)b~GAHihAt9fsKNHAzPTLXy_7DU=cPpK4fdlx-RRFGM{g^`UK-}PFfm{%|@20@ep zsksI?uGUMe`#j5HEIq}B{e*esd8UD&krrKv{bg^8;{9g-ynKG>B3SSA+8&5$eS}zB z8zUp0ZhDJL$|9@mA!UXI%-O}ZspITi72A~@`2oMbF*)#(jC_`uoO&U-(vIYXx#tV- zmX4>&%(vP)Rh;RHWKf=UrMWNAKwYyw7#_GNJ(O2(k?G^TyJK1>X3BrNxb^0d`-}~j z;QGYm(&++dJOxfRD7Y0=q_xQ7D10RW9 z`9g~y0q;^EE;0M<=I@v2z`()B3HGJuyvs6j{XUo8;cL5gV1P~Fx2Wx1?yni?-vy7Y z1*t{iJWweUOpc1V2^@DP=TIkf2fWZ|7#)NPKDE@S^>}S=r#n+g*L)H6_+3-1Lx-tVZ!qxbO5%$hoC_YEN;81>Us`C(VL8sU zizV;_sXC)6(z5iWkEWaL9OG$J9ogAs4$)?Nva$dSw-)v%-VHD^Y@CYVEWmG9Ni%+m zft_DSrz4>Zkv0RicU_M87;shuTy*A<%G^N9zoLV)p=7=;iN&2qb*&k#*u;@Pi zI*M(#&j(Q=r~BcS_6xU-CjKCUb1bmR)(36XI*>F<29}nsu(ghtSHRAgV4Yi5LC7Qw z^!5SO)r?%3OT5$2%M>4rvF#^1>I&YY&#GA^z-2j`OO(&;c!8X$$Ea@OYt^M>Z$X(cljM$G6Ooil=4+p(`{r>yHem5`!DNKl-&~>Gi63Mf~tD|Cc?a}M0}9Ue$qO^p#q%#vZwYLn@f;`AE&s>0^P#YP)~{s>X_8gjA7L1`y_dD2Cz_Xa%W$ z!U!gOtVW>wF7V#ELKm+Bf_Rwhkameqe|e`9QrK|0nkC%H3RgKrJ}> z!lRD=Do8&kLNP+h8qT*)79cKo2`Ua*-6WIS_JZiDS6k@`<_XSW!cTp?ooE~qhWrj` z8f*92-nWwqc&cgl5sKfr?QD^c4_m8>JzDO0(+MRX!^lvX?GSmWcQTQs#R2xFyaDiE z{q$XG1e1gBXqaUN3V3)$e^pEEajGjpR51B zf7aCouAswJ*uS8amG8X8+*7HP5UdMt0eN<3=(w{24<;9L(piotT>xqB6RSBz|V2I zE#ZHz%j=wuhr!a5S-x=_D8aia+D*MR)__!ON{*la=wb2tOr6bx-2PHJV5~)~k8w3P zn&0D~0Da*2D3Rw{I6qt&l_709v0Vx~)R|7OtSjSJ1S-elqgDOf++|qu7D~Vic=-zS zmP9ZS1#R!$vaxy48=zSXTQ6xif~MoFcUj7J+Yb;@GpY<1L{woDWyFlZ9JzV?fw>tw z1l7JkQG;f+V;If?Y5u-Y5|_veFK)nQ$^ZZWza;I*#GVLZsqk$_H?;tLjFVoWQJIp%wmoD}-sMNlz0bs8}poc~Q`LSZ|PC%TQP_0+DxnA72BZ=6#{0h=mJWP%sX}#2MY99AfB+%D_f!56ky;|q!KKj)<4%Z;P9dqQe1pme z;l&`PX z{FlcCCHQ3mEEv;PhLr|y4zudkq=^fPcI#qPs@zHnuP#RD1%JIY5N+`|&kY;RLD#q5 zP1=`A+f=jb=hyurW8E@YS{^aE zhwoTQp^42J4SYA&(^Td5*p|=Bk!1Nkca$xd56fg`n#4^c>rU4}#IAQ`1K=+b!+ym1 z-79vwFpMPJCp3Lgj$471r!C@D-Ri|Gdn8dd6_o z7o3sHe10)%niI0jq7Eh3x0hKaCL1z?sTb?Fimy;h<~B|r@TQ2qo;MOUiG1;jv#uAM zD%=0R5a0{kn(v^a=D?+;R6i#GBH}{M!cVvu5J!LQ7(o7!ei?-z3B!6dxVvCm2+0#> zw_2!Ya@9j;Ijoba-ZfgThFSm&?NK#f+Tidlek2*itK*I&LPQtWh!o6&HL(j@aRQnV zF)HbMP?|GZiN>z{B1|-P-J9T}&&3|gRha62yzjfndRL*+G2_v#aqpxZ?zz4r^vZWl z5#}k_H7;2B9rbWEcJ*NYFjZ;ny%oS%Xb=4pHyBhip)ov0ZK%TRi~WWdvJw_2#DZnw zOu9)h3hfZh3@1?bH!sLQTxDP&54UXo{P{Y zVR4+2qy23lSy*O0|3lD1b(j`bIv;@83M?z=OAfnOOK6=KIA%B#CFP&fV5vH zq<1xwJwv?y#NdwAz$?D$%Eb;nEeK%9sgNv_@zPh6IcxWc#-B#$6%U4!D2-%XK!8$* z^=|vx3FmBgiHMUlO;YBnE{jcA^)#Xuiz=fA@({Ups1!YK{VF#A)~jeJsRX{dAOk(g zKGM2*pl&Urx>t00@6}*2W z_)oJ%e;JtRxdYn-5_zx*_W^eMWU#@*zz3Ll7uuGYFQz6VGe?foSf1;L*p|}#n&hhY zRFw0j!E3psgpWXZMOtu$gfKrB3Zp!cjyAuvFpMb zLx#l}8LYR7**}$fbabr>!mGP1h)Ul5I67VDW{dPC91`ycVT6{I3?qpj#XFyRuX`Q) z^ii6S%K4n@(xLWlnGped^UU|{;2GN=3s|l#hBok}U#-%CijiRr$zD>fR{j>;{_6y} zLc6MXCwj#ob6!^Ol#+G6SmCn(%eTMcuo%>$Z^~t;LD+r9JQl4YL`Z=%fuROf6J#T(GC ziN&p#h^Z@*xR2}wmW02is;GJ>@~^ib%>b~aORa0Nn>EacF%CqP(rPYd{RyPz*Kjsx z9x!1vbkwK`ln~bxh=eZ+qKFul7Gp^RZ)#|!JBOJup-^wCZ^3d2cIi$Zd&3jS`{bPL zW3((-Xc}3`qeR?1cL?Cl4Tm$26S&s=bU_%BwkO3*w+v8~1LzaA@&(xzr1{OkSH3rZ z6K;TBzJ1$9>Q2Ez36wGEpwK)XBtaQz%V<#y**C){*%RPoSo~rQBuYr zv&3EM1?2>Gp?8&>%+o)fb4{w)PKn3V7ZuN`N%TmCUU9>e&!`zuZp#gR>2QrmEqjsR zehG&^!otuZ>s>FGr|kuU3&5>fZ{f{$^E|MSjco2L8n5Rae+6M)MV{Mm^Yj&&O`VIiDvaxr^HLMa#d}B9}c{$+`%khFg$ryUwDK!XJDFxY^&Qs9?5M_R9bP)9 zlECg_VyrnK*gJO}y!>%pztP273HvMbfuwl&L)=A9j!D3b(y8_59b>1qK`zl#SMNWOca128W*M@Qff@5e!TADpy&- zY$t9%A=9K|+b;9zYlP~leRv2Ep>Vu(tT89jAK0HZPq^D6n<2)%&1o3bfmyQ1B@BN0 zFRd!nP2~9 zNFIa#aylW}PY5vVLzeNYcoJ3;t25SELlqCUr+uJAX`OL>#KR5GlHdzLVv2gf*=I;6 z%pXxywt+ROWXtjQU)pnGEe5k7|7fWj%@J!+zl{OAnK7~7m)OrmSnNGeq$t~W06~L? z0LJ#1sPa7Mr4d2i9KcE$eT^(37Am++m`e$Gp-IAtB5?@h`BVExfUa0~F+8N_gPjI8 z-EQ?k$yI%_60yanV*{v%r6+?cgz~7hC=a12a4i`aC#Dt(awjpQWMmp~txb>HCeOiy z2x@R4%nU9O9fNOuC~bk!XNffP+2HcwG!n46z3KJ zL@thTJ9MoiUikDwG~gsMh2AD|flMr**E3qKQV5yy%@<6ZZS zB@XjJ4-C1fhGW8QzsCn?E*lyxu?1v*yyrM5j%P^k{8H>vm8|*;sox034vxfgNd?{; zBUjDyK^B~dBv(+lz2jw@K(K398EJ##R+@_uWhSx-g%V!_J$5o{+vd?tIpKi2IC@|QEL1EfiRWTc$GT1y@umqy1Xf#|=PNBDwe0&4ZWPe`w! zOro_@(W1#}V2e<)QquJ*D>uhC$^+6E=Uzuc(PXiS=GLqYZRp&F2%1H)+^6YJ3$hv8 z7Gr8Yt};Pylo0P74Ftn~DBWJFYu0YRW;Iu{`^b0=f~z!EyZ{|PrCw~d6q7fv^rcfq zBzPsB0dhn}0}p15B`5%j4KE=(9Tt!O<5VvvkKiPIS=XnHs9w`g0e;w1Z{os8p`me1O@2j+fOezjy3zg!+!Ahf3(F|pQ-116fyapwGDzOe7==CMTw7N&pI zp(j^_EG$B!c*W*U=OSdS%dO!!Fe+g9CbB+))gbo`nER&eT$+W(=RG7HaE)XNwE@Ultwc_ zsMSGyBW#hFxqRcz(t-&kbWGXc5Q%tZpCf4G*G=Hfk>tl_$}Tyz z6%Lu4Gq+;d%`Qg1a1h*yen4KFrPB z8p6AE7q`b->tubM4^_$Wx6S=SOfI{-2!B-{VYU~y^$Rs(P;wA#wC^7tR;|C0?x7ly z)Z}3LRz`Hda=Z?gDDzwkr2Qy37$bh2Zvb%X!)o=-w9i{D>+Ir2j;8AR?~k{!&>G&W z`=75E5;Ryonv04E_S1AL9|y8GJjW15D?N4s4PKGoBZ%I>UE!d8tMtXSWI{iB0U~k^ z%12Kf#MR5J4mOGT{CVeTh}T^4p@o-?tFzl(ZRQ$?hi8<6Bq>p1DbRG$SGI3{gxhHl z?cSa$W7-8xl~sfq{^v zF?KkrGsg`*Tv;rpdj=|n5{Yv8A0uhAAQoH=w4l%S^R}Dp1Y!T3)R0A>S*q&fY39Ll zF-VWUsvsmk!DSJG+{w&bB;k*Qge)1+UIgbum)`|bb_Fx1GtLsUy;^4gLWr&_L*2fO%#wG{3!H3B8GS(@+SshR-}-|! zInIjUU^4NZ$JRHx>1*QUV+Srq4PtzdB?Rf^ZWXZ#I4NJ_fhvkrHOA%Ms>+E8O3+MT z2(ByJBbD4rztrz0s6^aW%b60uGQ~I!DO+4Fl zW!f>&QRInzUUqzn`2Ewenc+fN+M63|;LBDGMK;+151GfBgOmitpBpXpfld zc2M_ESt`2zj6gz7{wp%3H78ohF%Ui{zTP6R7BByrxmNY`(O8*chYqy* z)G~58nXn(EO<3n(+9>*QIHx*s^s`2fxc?yPBIS-`ZZEFib^S38r}4>1xENd4z;&xclsGS+!1qM{vaU6m^aG8*LQC&7;wz_Jw+^I z%WUIkw)i=~`7CIC8r(6p_)rhtLI4 zH%jA@UsklcP-S(q6AuvBErRJVJ4V|UjqR1SFjgYgN2-?t!ROrBr#lhtIljbV8oyJN z9FNK4#!j)NW4=pp?88)4qP29gV5t1RVhT{$895%=4U9xKOe@wJ?VOn{k&M zyvR=m%BIL7Kr(Udbq%4#0iM9t$4B2|@5RQj_;qpD2RO_L{fc8rPC%;#w(_6FOZ}ux zs?3a~^~TEQ>GwsAQfcT`qa)`zR-Q(mk$nbiAV=jF>l}~_8(bW%ViavP#w>S*AtphB zEPiuQGT>0AimNs$3%-zkL&0!^-&)IfCg3p4>3L$f%lt$xcNo zNZ79%Y9(({16JfZI5zrZUJ+E&viAifc>58L_d-zpgijYQTr7!Bx`5^-e+guwemRv)+*q7T<`2Z|?K zE`ybPD{4EH0_gXkHiBn0bsw@J9j+_%>f;eVuH9Z|(y;-LuOzGkcu*U>;hl3T*?_Q9 zD|7f8vf>hO_KmtOpDO7V1h*+xD+qR7E#OHjNBWsS@9WK~EwMU+=oQSof_NC(-I@~_ zeCt@vCro;!*Yt=)#exhIJ6-G&k(20)XI{o+r2OKBpSXmQ>*-HHD`G4clLYf^lZ2X1 zx-St~cBLo?xPOj%P-N@G#{I5b441(Yv<@MTA=+AHis^94|9r|(;$CUR_IpV*B?3G= z&JFTfj*@rV66`>{W3b`!?P=br)TXvf?4g#X6IBHMu%DWJDrl&Sgj?`%K};T%YABNB=z1NZ zMt_Mn0s4_Y3Px;iAQO=xz+?hU2(|E>h3p{n$e1=n#Yy}CitJhlfcZV8*Gxe30N~8_ zf3mpMqw8P^_k2@X=&piTZaJ?lSkVGTo&H`=04Ow#9Fc7X97B2)A<4b$0UWNT^s2s_XnavfMiwxMNT!qkH3dh$-=#(6qmVS4kYhBE@;$MIIcrXA~SxK+uM!@ z(1i{yv;(N5uhX6sV%LT?T(>XOejUDxLLRA6#9WFFLoR|L= zMO<=v6|aJ}F@OM_SSIIj4$TGX5b0lXJYS??%e8VB21dQ9xJnvM04yF3cA>PR4p=d^ z#)E9qD&2`69TO=o#e9OM*k)-g<#}4M-lnY_uYyCPN*ghJl%xGS4aD*>e3`I~SK#|q zM)|gyVzQ_i@wjl%n7w-AMLDy^4Y(Z2%Vy62|G@MTQmkUPjp*Wd&Y+&dgt{+9sAxF( zVs{N>c-$!Q8O8X&(SI_BtA*`E7&jVFJ!cX2u{A~NtTr2`!L#$`@qq^#|397ac62c) z^ZEj{&5NJR89oM!oLi-DQiE(Ap?uv)5rG1oN?dDXj>N({Delvg zEcZMy4`9{*^g92A$x=Ur0~Bt6Cg-)A$BR}r2)p^)O0!58wL6+C$JaB~GVPYAY~dqz z{K37D#d7W*^;7a<^rV&VWIwJaMEYA-Q1-9jU)b%fkED$0A-7M0s!yx&+6~D=HNB#h z0x9Y2ehPOH`)LE38`q}uJc}Em0Y27+wM&|UtHSr-&bqJs$U$P>(sp)MSnQnh&R7mC zb#Ul@?c>JG!>h$(KE)Ni{lvG%QYZ6?L)@eC(s>Y>f)1;7^%mIPmp$)EY~poF%7oA7 z4mzLwo9{&gAR}!$hM#k&7ex6P7|N5t=eA^0 z2gC+HneD%GcHiEc&A8QB#@yfWf;F(s+~Zrid+o#!E!w?&i&0Kz<=I*1fE@x`X(HnL zyBS+XIq~Zx=FxD}?fMY{$et-V8dt-p{y339vgV1_c0xSD>DkZL39{$GI^{@oM3t8wUm8ymf(Envq=9(u%mAzKnvO z!+audpjr4?WY;n)3IKY0kajWRYd@yKdj=i6J`ICFV;S-{YJr1ZDB2Ue{U%kkD2pn` zKnL_g{Fk zmL(PTBAOHui5lSi(;nYATM%LFBF&i|jA6Wt)67llSz|;ZxmE4o?>y_zX${o(6VvRe zY~}!wp)ni?MejfBpxb*XCu~6n0SKM@ z%D(0bWIMUDZ?@lhj#^>yd&!&c)2xU2$8YW14~|rDGkKRD|G@TkDPutvKjt;@R#|fZ z7TC2LkQbl5KGmqLsoC}Kz?TG*`+ZO`&fSdmwqG+~s?$So{~MG?FD2k`)`hv~BAhn4 z)ZxM$uq<(`Dmj>Bp-0*&J43uZ@8ZEAxxA)xZSwvf6#v*rK>+M7*`p1ZnGO)2p$!L{WShj&8xPeRJ^O%`!wy)@1AePDkNT?TNIj{ z4hUT=bz<4=V%OQXlu$JfMf;7+ik+?ZtRoLx;Hp|vOB$!8l;CWOUTg7dB6I?MOrEpq zy_Iv$Vp7VcLsE-+MzM(R1c*V1=Rdq8?+{ z@h+(7)lh;5y0}8_6=v6_KoM z5q_N)GF_9azU(8V2yK$+ojNL&WEs4Nl9n`o2w6_vrZt%ms3@`uiCy||Vtl(4bK7{z zkJlhiN!Z z^pp*W(25fDc_Ea1W@qBfy8+k522Y~a;mQqGBeGyKEYjE5v^Ot>E#?3aeY=0`ghRG$-R&eiaiREQhO|G-*nezOM5%?L6jd*8DJCc z6WHIgjOa^_={7qT3MjfWnB^(rNAV_%)S#%Ow)8INfMX1Puo7{R(9Ku#{m_|RDzN*m zoR5Dpgi#MWt=Uh$J<&<9c24w9oE`{BswA6_Q=h@rW*@rKr%$Vu;yov^GUFE%gn5aM zX^=(Z0o0*L;|>=R@BT2RHD|Im{nx_J*9Ram*9J>?8@ZDI!}$MX;VpTj^o2$hw^Qg;wbgWAKkZrLn3U$u(qXxKYvelN+S# zB6`)IAQW5#`X=`axVW(qZoGUVP{$GmqQO^?b%*+nU7j=`xg-QGO+r2z>FOMU>(G7a zZHdJ`2PUCXO!8uVhiga%4X`IN@B5{$d`^6Io@kneZzY4LupATSRHc+ockmi+s2YTE zUBmb5hp zlS3hTTJ`})aJHVrx<_gwZymuq9c4&?a9HHPcWPQrX0;f#CiOUWaSWNrg}2@cjZ9Z< z$ow2qyrgH*i&aG+8H>i#x00)0DW^qy+#(`^O(eb>G&qWso4*1pJxY!&m`Z?0e zjxUe%@JAMPX&O}nKpv{+m?@9Df}Bk`8oAM>*80m}&`V^3IHT8>Zk>F0XsP4`){z28 zGe|pnjEdSQR>hM`NQ5oWvDNaW*7Tq5*qCwm_}X$0C_g*~tJ|xh44LausJ&1V#v7jzZ|f?aE)957 zaYO!<`=s5}SVBS=h(AB0g&2Fvi4%W9eTznv94(d6=|gDxemVp&*#lciwoC$-=+JfC zidjm2;8(r97M!8$VIo?0gMm7I3?mHxiO;SPVlwfpD-e@XuF#QQb073Qk_XqH*Zg|x-&C) z8Vjl3-la zoaHuV)^WSEvYo_83F*FAE=QMclTGhkRO&^zDau_sbhhUXe2qEsHK)|8%ftv-ssO(6 zh>H|VqB*u}Pl7(=Dgzar9}2xYU%P#%X4yiMK7!_1P`|uviZsgU{S;;|nIN7l{_B}N;Oc$5eh56gjsj@MKi7*Q zOSYj7{kNv2LZ^x1U*2aG$bVCZv=k3R16da6#TYVAI`hV3lcXyRp<_E!`#y46J&M^? z8YN675eN_sNX74hM)Are9B6I#q`0dpef;*P5;@D;Jah-9hX#t>OvepfsJn}ji}ZIG@m4)0msqXf3BZ|SEqtrWg5&-)*TP|}8_xgyucvQ+-bXBV2E z%k_HNiTQw~9X%&2?)H?ZGvJg}j=#$D$Lho{Hm1il9j!Qn%&+of;nLLA0gVT1*yEBh z7SaJ}RMterB+3u_md^*IcSa-!|LP@=q`}d=ZVjr+u8m*wd#}kzalsRDERa6-MEppE z@8#P6aZbMV{oCgp#0hHvTK^^Mv+H;=VG{5^44vl+4oe2uNKmhX1dsp>;<~bA!LkB~ zMqwxL{Jh>Kz7Pv=ZOy?4v}wT7?J63qv&MxINF-^icQ1w{=7%PKPz-iBom4zdC-V`Y z!VQPSFQ#nmpI*T1cC=cN3{1Ve3e16g#iX;i=lim5V7L_CEMUKw;VlJdZ0Odl8)MwyJBWh-&@KF{?IUb?DBJZQ>OBkxY*$tb&eY$QD8ej^*$`&;@Bjkp z&l(VezEN8hl2~0^HrRc^1A9|cULfFMbzoGbL==x>)c^t|tXOYX5o)s3Z+y-a7bTII zk8uh$0uFYmmPz;~PU=v@Lq~J#bIyZ>EtLA&>wA;Kllc#iw#eYxo@GpniDu zY-H}G4^P5-1+PIPV=886Sy5lgJm$CWMpI@> zZ1mL+V_7>LqVEIZjhp6^uMzBxRo#qUD!eS|(kR}d6U99`JzHnY7LlwsiwuAzDbQpv zU9><7c}ZIC?!!FBw~-$q=6C*dU#}aXG}OI8Gcefcbh-7YezP46e{7)Td2_{NV$(#g zv$(5vWlJj=YVLPnk^sgdsrAR*{bXGbHUY*iST{ef<1d}`C>cx>dduYFTc!G zF@3d*{nwY~;Q+os;ti``p&NC6A5)-10F}1mKz{`wK#z^z@MKBgNN-fO5;d5>Qa83R zYrpn*oEvwHcSGWZDf#wWim5C1o|vLcOdrfJ2Rgsk4oB`GU6mF{|H8MHX5evt_@p9b z)fMZ*{ckRqk+8CaEWvUQPqxKOkA$H9q(Zgc~4U9JCtc(%h$#gO-*$mP;L)=^_T3(%KsRh%f$wr8TL0|GOKRr z{wuPO11Sq48D+nCr*_E`F=!BdjT~sgd^2Xb4NJ=;)L$@f(Yajmy-6zg@DX!{515m? zgzLoaWQ<)(<@JhMFeQ1ix$FGE4*+@6U=-%eVP3g|0Qia^JTZI|ENqtHned-~a)90o8`%job~dL^kvQR08AxEwBh7 zWNC_qqHv|=W#)#7w0)tT6AT~j%S|d{l){6;PVv$Btu0t`5VD=FXpJ`Y4jEw4DH9hc z@E%1aI6!tilu*$-qV-3K`4Mm6B88dr$vS(GdhrT^J|X7c4h3awanLLd`7;E z)Wr5!+%OB1JQYqkZB@Y1#Mrsv+=$@P-;>U*V>XPuFb;O_Gouf?ZMY8CCj;LVHANyF zeUm^D6!aW~R*MvrDBCS4&ebK{0ElS+`0QK%T@!rRCe#NBO_&?k;A@exPKN^825Egd zQ6zTCG*JZ@xM1c%kUAPj|KK3nv@;7q-gCiPE=H#t@rEV67dswyE^{0mwxd8OwKg(<)>iXGMSGb z@w}wR0lxFH1eVPRNyC9zWFAsTHF3mb&tS2bDt)S?iV^39pW_z;vHv_&-MDAp;IXkG z*6(hHekrCtnERMWVE(}tms#LSUo^uuNcQ4Vz?-->L41jjy`DEo4NGTcqs*9Sbc&Vy zDTBLv2%qZvG&JRb`B#+83Xv~kO%K38tVH65JC zBNw_RZY|@7u~JS@8ZQsMu9J+D1XGxAY{dhU^<@WMHHP%Q-`*KLCHv9O(ETHZ!~oQ% zh2geE#EwLZxw?bPYW~H_m?#2e%Y&H|3|X20066ah#rp{ z!+S@M^J&;kbae!J|6zi8fmi`HkpNFd4ajGedgt&6PO^n=ty9KnhP*o^@((*0MYV6F z4nL<6KM{<<3^DX{+Dk=3Ztz~W{f&yvrSr%_^#LY6=nqXT()N)S=(V9i@}-xt|H~9= zqnY&%rrIVX4J?3onz%&gu&iCsEK+HM8<71FhS%nC$vLE~1sfq`7)OP`eD z>)d>rS2PIp4P-+D;UpwqQC}Co5>~3$ZAha++W3$8>?;5&;U-Hyb$C%RgtJs4^DY+G zIvEr2d9H4+G^D?5{RDU%mM}sHWytIfBELxzYoq>VZ?X>vLGil6)QN2GL-ojIM zO~wrp(CpZrfD#rcS!EwrT(H-MMZBL8u%?60k!lr z8aUej9+k9FSo}!#=`R^M0TKgFj|9H8d-(wsgoUvu93X;q$`@?sD~+(o(O8DGHcpRi z(e2DYP`@AqD#rY!01t1Uq#bM0_fV{W9a=FUG}?dYk5=LvDJI4$0i$+hyTL7*?Y;vc z8(Y98mUwEku$PN|KiFnYt+a8C$Aa@G2l8l1@4ytgd4q_%2w)@ssUNqfmykRoYc+WN zD;p$hLUJtv_MXaMi}#x6%8HOeChvHjQc?y;VD6I6K`TgF)ZXwcSzR#2=7<@4A5v#z z-dtn*YM7PM!If_DyVkj2x&YVlt1j?eTG+-yEYBTZ#xA9CvzRijWe_;9OWYO6W4OcE zZB!^t28*^{GB0{Hky2$UI%PRMIoCpDinpW8sIz*m7x#7ee>nii;4-Mv0Dt8mfj-G@ z^&R9YImX96wG+j!6!|u;1k77=b9oIZ_tODPD{x32`W^w&`c2YL zrs8Y5F<5iKm zhF~+NQN)vPi54h?(P<{_Gx-ch%SHzF*;Lwho*TX(B)JYw)o8`T3pcbB$t(2X8^CZxHp*hwNZ`Dw% zSa>6ZOeUO{JuwSB>XFEM*J`Y#CYNwc)PzMPKr4`*=NP|TQe=pNTcuTOPNHI$LS~e@ zs!g3yeV(a$6A#&Y#LX22Aqb|mn*o}(Vd(+uq3)9-J*K;;_CcwrWBxQ2-1kd>qX1nr`l}`@&O5dr=FF5bYm5pN*3DV`^g$jw%_|uF z+IZ_9LDEqD)q_z8ITCZXHC;&KkUDYsp%|zQ2pxs406RlpyGzXXpr^+l^g==4WxyLB zWq5l1WDg0uX}xC5sH~rQ@D{oh%~c;^@XnnO4czy^y`PT8HC2h)1M8RTP+IwoXKDqv zp{Nc@g7}^XE2tvMH7O|s<F8;oTDkAq0YNAz2kGbweah52lU>rn*yvkhj4ZA%CeaAY7%yHe*(> zn?rS_T7}}=`NlbLEx-2~LBoleD%PdR-~fy4O9QOE+<~L2q{n^r^}&2nS!*8f?_xj|$%~`qJw*69 zNFR_DC#WCrSa68^Xj@`b{Bhh^iAhn|C$t3lx62pk?`$e-w{LVyWE;8+z7SyHQG0Sg2omaAdxDN*qr0&);1uXR20RbBk40Ped50GRwiAxLh-!D#X zA6NqMftHbRIac;?q@<2SV@KVzDs=iE9C{_yHF#@t{jA&PZ$w zUVw^9B!bbYQT{_XzNWSnCUBGQ?QAe$`Xv*EfQS$G9W{_9|6#6S;Ob}bAIW$s7We=I z^Gi|ZC+l2VTtcXDDh`YH5O>GY_F9S^j!zfRvr|2OO6!-WXB`?e|CdXC*tU|AV|Mmd zj!V;%xQQhaOa{-p@5_<`-hXX2yE0g}03~(m`RzCn7oYE8 z)nQic53DZ<&vgz8yA-Yz!6R}lZ~ZEV27Ddmr=~?)6U;z5dK_H=IfAHrMMR8IePu&E z*6U&Z4GqMVgzfVH6eIoU#ZI$1?7j#{hf%2rdsr@_VG!IW#iEIMZ8t?LmV17hp><@#bC}M{W}PuI zRLpYi^JN1|KdSV8U%Nn<6J1P%b9Mx%Ul3%c2KZyd1JYl*wf2#-CcG93@32S!QXBvP z02IU-!8!RCI-Y#>3RKKt@u|cX_x*MfQ&jC<3&efMa`uFZe}u|%3eg1>gm4&*og!w{)abL{szR*vV)3f@l`b03sBDnFHQ8N}Pfm>ZHnrjs@ zxx0o=SI=$3lwe|_%LCB*vGFzir!6LB6YSg1>m-qy74;Gk{JFyc1j7fs2c%qt|Iz|- z4HV_I8+yM*WZ4w-Bc8R#CVJvJ*@Xo^wY?FrGgMu#V8K1phF%VWoE-n|f<(rj2pE*Q zIns_Zn?kbp>6tE{_crU!4D%3}4#z{yTI*lb)V!(RMi~WSFnxIhQV%G*FwwDOJ50c9 z?mUoX^lbjDW~#?;Q0@px+ekD-d^Dv0s*hrZkC}l8P9Il5F6>jYo~8gwFjjnqork-o zD3TAA+l8JV_wR1#d=c|hCdCGYmP3#&$mw*&%Bj#cRwcH*?f>ZY9}>bYhGKoHe*9xj z{cYU9=JT>5lA+*og6Jtob8qab15c)wR=EzY#-7uPaVb*FWl1UHj0pX?1BV0&Z|PO3 zVI3P->dWPZfPl)1lF#T|lUT@NVDxq&wb}Bv{4z^Y;<+QQkt+G-3QMhT&UKrV4D ze4k><{V;(m71K1|E}`?6X=T&Tp3d61mCzLpNFY z0zgO?@5slDvR#?LnhcL!bYdT0e)<3Qev@o-rlPrr(kz_FA~B<51zfWI3$ECx@>}aI zL+}(AOwNx(YZG)Zf=df_AZIt?Kbfim8t&+f(2#zHNymOH2FS98t+k8O^nr!Jxs%Jj z*{^IMS+86*--ww3)I0HLAs`R!&Airp1HRbqU6;`_b)4=_fIk8Ty4A59&Ji|rGMtk! z$=Suw*5O?I!$le^-FW?aR)=9AQTV&Lg@f+g|De^xz-@*){QZV&GVRP3bpsP;gNg-1IBn{$u@nGKy&5tEZRd`( z=lH|L5SS>EAT(m4h;6a8l?#uO*QtPZO32qDLsxRax6v%I6yU)SyqKmxwp*BzgBya(Sgqdy_~aEjo<%W5HB z?gf<20%G)vKd^`$H;Kme+A#?^Dtf)%NdbPeA1L{dX75q9?65-u^8QW@DL{3RbRWwE zFff+6 wHn1mUPH-D+tRUkUYnDvfj;L4gjN|e%biGm1`anvPjhV}v@hNmWW#ys~k z=;}vKZ{g|yY(S<`&C=)f!F}x?XqQ^V3ae$~J}wU`ZmoL8SwAcp>Q$T7HJV3L)kLl3r{1!?Ys6Ui^;eDOhkF3f8(eUK ztxfhjD!1j!IRO|6Pi$4WG|(r~=S zwr#^`*5%m%X&FhF{{&%d2zQ`%b@{8VpunuBB|~A?e^St)tay`An%f?pKdnp4&LXY0Np-3;lx>H27}@5udn1cyaf;y-5}snZomOL(zdumdy9w zKeVwzcj+ByaLqDUyXkeDk12oPoM&#eGmYs^`9@PJrDQlRhbRD`WM14=p$7^Foa}zUCIcOZYOuX2Upc_y(tNRD|6f zT!<9CejS~6-;oXwvxi0dki_Kp(nC-AO8IT}ORv#5W}*e^u7DGVsmy^&#(QE zX_vw(_HU_m&qNT@*h&y_T=ZVpTnKay#${{LJX$20dh)b~clBE*anr)f0z$ZA*h3$Y z{kra-?)A=H6@CMeOC)qA30 zY-FnNen1|FAdO-VixK1gl0=a|e?-&C*&vm1wLjW(L+fZCDW?So!<(a28PC_gU)@ep zM|9m|oZ8AZ4|)6F5U@-Uzb%E3Ul`|%p$BGLTh@!@4Ry}PE)o4@ZPhnFkI6mBYwyq6 z0ZNX_lQjWaiF>)J+y?x?%Oa@|KcH}F&*qX$E0asQV@_wt47kzc8x!39v`5VQG;|?z z;7d;@@g1^*lKYw=^Ud7Q``3qzI9qPTK3#KDhX)&$3aA=H>zi%aHx9qbNa%dY;q}he zA)Eb!flBIhWMc6T#R2;{5BP%6-5=uL9dFs%^V%}T-&_Mtjg`n0I8ZUiov0{dX&*^0?I<6T#)AJ1@dzUvuz zKWFxYv#C`q32(2)#wb5*$UDIYTl~^~S@|Ktn&ozE037s5>_*)?t_yKSan>fEDvHqf zie*C`cr~3T56!RtQXO*Bi!3&#a{3LD{D1W9qUwdYN1x1_^LZwt;~O~gdDOisacvH% z(F+dEiXtj7H69j-%zsUlK`+MFUVLEt>tN!UGW)`JV}0lW||=We|%o7+MS8cy1u zk;zooz=CT078QpQ7$YQNg$wq{inlkW5<|{hZ3q9V@hDQ=RbPsrZL$7C0kKPsrXsKC zwNly7@CZ@P@)=xcg8sha9<_rrfr;CqfC?a`1eW?f_6``yeC0+n)9O`5=E5|WG??uy zy{I7k9)Qki;;W87Y4i*c~~tGVWLa{+(NT{wQ29ee5>j_-%HvdE^e!)c>Hm9 z86kB?JyIfs=ffoU)M)sRzScD!3n@b$;s#a{i2(XcQM1mDoNkT5Gm>7OJU~uXF|lp8 z7@{q6zJkY#Joj)7t$wd=h|*{S)Mh7$|N@&boKD98c9jwO)W5o3g3aO4tZ;CF{X6 z+-CN6izpU6g|0c=B!@tciTLWh-2MN3nG_-RR4}_U?KG%zf?Hb2{PIV_9n|*C%)7?2 z_^9aO0n`*F-z$B(TugtajrYFq-G1|9oD%zHLZ|Zj3k7b4Ars`c54EEufTE69-=yC&*jr{MqzaG znbyrW5fD9(VFQ<6_L6<|DnBJ$(u$`$wzNjBEt?KfV}KMAJ2=V53(Mml!;2B)VGQ|h zv488K)I>MPXoZ9P7**}FW>^~9NvN|%J4nv!9lp8h$r%26^$Yw_RmWY{26dG9qD#f` zDR|Bt*lQ`s&Wa#1TqB0-kRHP){@J>Fsp;(PlORyma)7qiJJEsu&s;RJ#>*yQEqyR$ z@a2SrQ1o5X)5x^U!A(VWa$P6W3aS^N%2YgZBM^ zIRgy=;j8WvWi^O7|LFEYJK7*O;{u42D1y#RN)^KfKaR)&piTMl>PH1PT*BQtBk0WL z*^YJ246>=aJ}I*?MN%Fy`@7=UWW1I1^S zO*bB9UK780Xj=3KbLx6{W+g-vFilliGEgRE>DM(?9{9HjT^fFsG(ezfmu6RcL5S!V zh~5_ijklvzyh-;F#)-R@QjGXu{b+Tpia;(I7OY8GkEgu`Yyvlv_PlhimlEKA8>yle zv$gDJk?)Hgd0K4t%hbsyCcQz6f~*#A37tSJYM3_favKb2+~xPzU+qw2Rx3mxZfp~H z!*Pm|I0XN*34qp$RD?~o-najj90eDyvaOIqQ<|(m5L00b$YRf3)E~A?F(WgXd7MBR z_LY=4-lOdy!;Vd*OT;zbdTu{wU_1p5p0HRd)-xo=1G^jXT=Fc)V?fppR3EUwv$=F^ zfy)foC8uT#qL&jjlOz^+IDu4-S2BHhg%_8&29+m__a(};xPTEx*kQ>#-sdOBSr#W@ zWrW+JJntP5*j{cMFs+A={R?OrkW&RU&w41-EjBPj-sH|&(*Nn4Bh=+8R=Nj3`)VoX^j16qTT?3R5V}kDNJ$gz9g&ZKba$#OY1N2~1gbHRw zeO&j`R>^RF8LJgMv+5tAb0xzVixSv1aYkG?4k=*Ud=i8s!)~U7Z^ZOeh{te>bE0B` zv2M!kKrhiVaLbQ~=XRn;z_F8%TA|rlEuSCA92v2X80a`O zjtt)5X}}+o3q1K+5Ps4P z26c{gBj`-cgbh5V?a4Wg2n1(4k$5Oo%PNqlZDDy17JMDjMbrZ{{|>kaVDV0o3J`d^ zPvue3H$}q%kbfI}ynr*K@#LB7rSAn(t4sq%^otrN=c)?@y|vod|`=QrN7{ zZjf$G-XV4)i4A*J`oZm{2ZE#{Q?;zKf!1lQKKGqyj;=v*N~QC8>fPST!^!Uy)v*BF z^t2LB_;w-~Pw;2M`3j}mvb226F(Ox(tRvHN#6@L1}6Ajk+^cH1h*I!Jo zd{s*^_3SU|KZyM?iOBX=Selxes^m;$3GQ@eOTvX8!S0BAu?-VgRM>IoJ`LEr7W>gF zCTBYh%V%De&guzT2Oqk!a=c=^)J|Cr2IgF&qWmptaM#eR=P=sjagXnK(J{{x9VfM) za5>xLDHi>eH4)p;x<+g7ZNws zq2~iz8?)Rve5Y^fqMnkV+>SmUQu!L3b!7M7$oZPuv#CiGp&r!RI&=%|jfiELaDr3-&~7YOFU-0~mdVj1XPDLrz7(zV0>O;YmpxjwH~Gf?94P zFAPX_5Wzl-kD^*k0e-D@1w8PL6y}RT;JFr_IcK+b- zn)Ax&H*OyQ3x9qBb*a;QKb>~U<(n$$VNPq2X=o5MytY|97 zr-LxBc=W-1od-O{r_m-o0rWWkN$~-sq!T(+*Sk@@5B7o{6v?CEcNsX<*rzPYwf z=0&PQ%Hdr6)wO}AzlU)-a`~Ao{W$(&{e9vGcD>Jf)tDk6(NG%BQN+Oj9 zACc(2r8phdv7kLcuu7$;0A0fGgEvF-Nh#dC3=10}TaZVD(Z3%A0~oy4-lR#~wf;gU zhuR+9$}BZG(e!$UcK5y%g1qIL9f#;1U{iCI}p)td8CD-}2$_I;HQ3Is=kk>w~ z@Cw?|w_eKjCcORXF$z|JC?a$j94QnV*sml2Y)DYaUuVH7qtUSa&EB-*L2Jghmwy!KEBLB@=Y!g*?Y3fMfy3ZY2+QDx0>D*z z^^Z)KzmYtq?`uI4Jx=hZw~+qmqmvKE%zfnKxMv^!`bUU9B-#}cH0c}hHZRyzT``B~ z?jOr-Jo}cI1L!0v@U@x(1-#h9D;;%j$EqScKI6o^1k+aA6;bcs;6`xI2(9=|ap~5N zg8OCtdU^^vU58SiBoQj?3wv~0B992VD2?gZ50j3!Nh>ZpChF7OqJobRk zV1H_@^$qTF&i;WgrtJKnBmHuMynR?7U*OweNO(AweiX!olY;r1<9l}%r=3fx2_ykGN1D8})iA@$? z6Xn{ii|(1VA50CR4TR0E?a49E2}YxXG>_RlD!wzpvz({hpRqBSHEdzC55g|U-`6iU zNBx=A;=Z-t#p!USQ$jljpJ zZ&p>d=$Rk`<=1g@3*QA|of~AZU*ZZX%)B{fOTh1RPbE}UjMu=NlhvE6Xu%y)O_}e~ zrzIAdP<%LQd}zy@=N@VXXz*k}6*j`X&IFxVMj!-V1!ISEUsEiavT`~bo_O*v@SBm!*c z>W#jomZ+jgHOTOX$3~wjh3{!&Ql!_|?=+Pv;uZx>VB1U`e zyqpN=P0I&Z}05}<$j!fQyhw)8@~H7r+lsf9zd#IND9E}`LLhc zE9;WQc9n2E00F=PXbxyir9ln!KL|-6YQ+cZcz_p`v#$vx>6|YI#j$p*(IAKFbb%=%2 zL0(?q(2?~?ne{AiQ)e8GZzd0^FQ+>rA2`^e+&j~H!slQ?pE#ej%?;VWKZ5JT5(H^( ztw;mn3KcD2?t?}gi5wUHzMjr}q#VjXtl1V*P~$%&x5gzCSFl(21c%svA<2{9w(r$G0TTIFxAx@7Ap(;m>;Kgp!Eff%$R9&9N#y9 zokIaYXXX`yW>LleA>Tfpw`n+6Fi5oYUU>k#xcgPn?Cp+1l`#LE{}#I%dZfy@I)*e8 z5C?-LjPHynw#vhLLp~V|z0n+=ps)Y{000<40000H;=lj^3nD-O00;4400A6}+~|Oy znZ93}{Ew6zw=l@Hbd9;+Gl+M8vNQCyIHYieq$?I5@QqP6@1$X!p>?_PH+s7L@-G^V zEEg$GurYD&5~{nOY0z<{^0i$9>7WwTym5Fh8w;l6VmAU$n7soNZ@eBvwXkKJ?8Ix- z>-q6FOZXjDdh`}|q+P%HFMTH1ioN*HYMGXU=2S$KrW}CR&nwkFs#fe!s!Uni?;RW| zRaNg!l_!qZn=3cSYo|c_b2|ZG=80+flrs?EOJ8W__t_EkSR zvW1{s2P9u6)R8o~3Jpt-F%%o4;WEpm-|xS8`DL?zPkM3M13kA$(%T0(g(i|Gv7& z4uCxfvX$eL+#Q0MZxtP$a*i}E>p}Ppg+#tcxpGP>g(|hcxyj{-;iOXKSl`{9XlhX_ zg+Led1NGL7!-V+e62m%f%&~(p#)A6r5FtQZZUifXVc*PIjjoWy-37*6uGg1;^&qxb zBVoLWK!PaHg36A!KSeqGJp=p zYKMjR3N4L^6!%YPdD=RyeG!Q+^P1}Js#!nT4J_fI$phg%ngsxzwG>Jbr!yzo>>w2{ zpu6t?ATFy(OmLGJLDDd^;H_>)q6UN3IuF2z)0=9;^LT~ByIWA0<82~j1SqzJJ&hxW zwI^1%87F_ig;d}Yg0rM=zOIUs%!-bvp`2w7ksz4ix>gx%0f=zSI zx{j1IuW&B7WzlI&9=p&>AkgfjK%o0Nb5-}mk6<3rfQs^FlV83xyQe`RoZ>G;hTXQQ zwFM87J2y#Rnqq>8zxR@H1f~~Myn|sz8|&|J{6*}4LXY=Hn#^nTb8Ihd{;L*B;o)Qs z4-yOvP6frdQMsE*0ARpAI=D*p0&D#Wtj?xL;7<(ouwCn>m)w}90psRlpIB=BsKf0% zQ948**}C*C>8gOA7*0zLQum@@&kCrk)-JNO+#*=?fWjWt_Ik%(B6%JtH#7GtZ4u0v{r&~m%>*;Aj~>8w+G84-T5G* zq(~B<)trl%2usn#xE#t$UG-Ra4;ZCjb(LIGv%6S$pmx06FX=x@QcX580;JTklVU)N zXI3b0R)yzu{d5Jywx|-V2v*gt7|E1=N(V?k&T?U+bPrla%qEcmcM+*8^j&lUBtHrtA@?7zN?Zt1oQZ7Q zwzuMie2O&IRa8K==;41X0tDNV@rOsv+F<065A*(L^3ehK-AVQh6JaF)zvpST=QbR` z1SaidroE-X)6YfQ4UmHd3?&A8YVTQ4D8DssEk7}5pkos( z6Cj1mk8&eQh)thXs3c?-;-xc|L*BSC=35HYmXI6a36_ZghbJV0gfC>LtBi5?6`|3t zwx)CdZ_Q+Di-TxoS5V8Fh=I{vTb*QpIG$p^r*grH9j@=&*v8yrQPk@<6|>(qhGb7# z91;kwbl!OKz=myn-9Ln;od3#Z_A;HV)d*%3!;Ke5!|0iN{7QNGWqP{j`N{Sou7fSS zt3AuO_*cexHSLoPZ4j<`+&$!0a*cMXfiD-ZXo$_@E2FHQZ*E>+vwnAtNGo`=$iXVG zKhNI{_L>X)yF;1m{9g0^B~Ezkk8yH6NcAyCaa0A4TLM0Lol?R=!9iuFL7EtCU^j(4 z@)d+%IK>W|C0U?vm?kDumlCw6fu8nP3x@O}Ia{J}c7%{!dxSQhN=(*)wMj`MqWXtc zl!+y>hkk;jQEetB+Fr_V6A&frhPlMTeT31| zx*m9E8qA$8(#0x(5S`w{QsQXj9Dv^%BI$|=i7lp7qLe5&>TML{J@zFbd&wU^C9?WL96=ak1mW>+_eA?$aa+KJ{MJgvBf;7|58X)H&wB$1_Lch(oU5uW^RSUudB3Aa^IauW zdGzZZC4*et6v=pd3FT5RF)epwJN3W2iW)>Anaue58YdlRI;Z4SGy@MJZYV)0V5`(uT0fuxq*Vzd%6{>jqD{$DIAXy2UPbF2DIHT&nJPhNpS5>)gtf zcZ6ZJ$wA1pgh5;k-4D&Hw5l)2ji>?$nCUb)=In*{_-p(6nVNNo_eDJ^4dheR6qq}8 zwns~PcM+`1n!oddUa7o75hiG%DZfH}P6xdfsYsG#b#1-h*F#&--XH8e+!rtH zjI-@GaG#TRSI&ZJ+V8&^z>C)1Qa>_=y}mD_f!?)`tCzifrFj0I%}t5;;=fuI)k69S zmxyWf>GOYwbRJjep#3x{B2>7o*Mzzlt@Nx$(;Zt=GAP_Sm$|rW!b$!;edK-v-<+9> zyu+(`>0}2^ndPDaA^d(J*{^_<1dgyy`5&jOxzYXD@Js#J?7oLGHl>U3gkWZ`>{{2| zzBbF1HA%PT50SnGX3KjiewXW1!f)c$C?`KC?4h>Nc-IEd0ZQGCCK#{mKh;rczAFZR zAVL;a=*HKjP|C;d>1mXgdJy-Kr_kq&>K=fCpvV=qEl0e6Y~pfYWIrES5q8ImK4d24 z_=OarwCv3N`eO!F3yKIiVhnpC;-8$(&x?qTlLamBFg>+S6!=;wu0*mPX;dVbV%f_0WZB7C&%`hqy>XYyxq!jpE1z;c zX_K{MsEL;A`fvO?m7siurK-59^yrdHWdWX$4J38+nWv5W0IB&F8gP!7>?(}N&sAng zKYDy^E=@X9|0wrM+T>`PNq?7TF366TJr|et5@N77F_NtLO`dGWDi5Fv` zxeWy&xU!xP>`HqU@5H@#jTcxk&WU-E>1dC`5hst=VR9TsU!3nuJT9d={VLmc<`KDR za63!mSf{Cp9+2L?@DDQ~&?~007(;0000v%>V!ZDg}T502V}m00NenAkiUi)9?B^b7aP2@7hYgOHrE+FTR#*1rurUZpw7$YfeIY8?`9m${iccV5{1y3L zx&09kw$1<~U%rm{MY8w3X}0a;iA@umg~^BQLM7VfS}vSftcZm;rn_KtS;yKd7VU(1 z4zsxaq}v3q?1YFT3K~4-+<>k;Jx>5D3RS^tQP+~pZ_v}bwI_?R6c@PR9VF=Bh(D@2 z(Sy{Oi`kJS1~>+Pa{&$e?{%=BYcMmmEM+?LhF=84v?>*wn05xSkEy`uJZ=cb>>&Jobf{fTXFE=Gf} zV(C$tVlh%aAQwy}M&jX~4Dt?VJaTbWQRVRu$d%I{J2t zli_=q>jt((U{xGKr3B_|`c|7+uelV-uiJV2eJ?!ZTN6i z$sDq@ooM=2`Cog&u@mD09)1rT4c=w%*vW~~x}CV)E4Mc8U%ui#pOvw6?!ju`*o?0) zJ?K{YwEjKpTu7Y|)MqGb>!0|!H=S+*pMPKz@7u}HOAG0uyK|~FQs@&dl8TSFpedmr z@nXW0{qAy_R1&%L{SqbZ#4P!N-qMNK)-;Ndv`vZ~0D%9_KvF87I?>NFrP%m&d|6E? zXa0$4ZZwjloFLD1;#sLG^ZPk7PW0HVj%7R&aJUvpw_1uBNF5n>ks(Uo`;uCDPZknq z148-$Fj@`_SGcJkk{YB+Ed$u+vu6a~z7F`chM$(9Z^4Jcp4t^O!HCkrCVb_+J& z5d*%5xh=sxj#nPqHMTd+j>Vy59FN!yd4jpl-zv&F2D~t|w9bhl4|Zpma)&VwxR4->& z*}rme!7zO^zXuQ7nMARLF0UJbriw$*2u(E5Rb1a5&=^OV{b+K<)a?HO!nzJQyFmO> zX{_z%i%{ZvR1}6nuJ-)gd2K~zOkuDKi1EMmOQok}l+p}}`{5L2TNxQ0emCew5}Pxa zR%8EeQtpc@;j-hhJUjEA`qiFjmQ7`C7UOPQ9KZp0{ST1q!7t;=McWB%?c~v!@{kbJ zli@{T27~?1krT(ek1TdZWSS?pOWNFck&bcYMz97xo~Cf&@lmq&+P5ky&?*WV&7R!}tZELOw({r->q#by;=V8qn*b zdv$c=hDO&)z#X=6boPeR2R5mbPR7gbc3Q8(MDNMXtE5AKLu}kZ*Q;Y}U2>sm^z9j4)vdxDCbF1xa|TK*_xj{tPz| zmI*Ry?$I1kAvi4OMkSIE&$mX2XD5QInC^fxa5XQP6uOs~D$(`%X_n4L#6H$W1%-Dq z9?1Fe%IH{7<&$Uch;UA?hM##prVYD9GR%>N z2v*rKh-^_8ErEpwpq>^6QCr}AZ5}A1rF*j9#D_T4&>k8C7eVFj&D6JwS);s7{f`R# zUC#&%L-~Vs&+%>Izra2bBI%)ATj=zEO8d@F)sN#ACII=Wli#io&@>Z_8g^6$Ssslp zPKzufg)f*&uonsPVBnY=-laD8|2@-symw|DDvOD5Bu5%#D)4Eom@AV_!DWBLZRM_YOI z445rYo!)^zYM~fnA7oG<0U=7FI06Xp8!+6UbvF#xx=dbGC_}WD(h%;p2){K~^Na1n zF9o~D1uPKDxq#HiDy$hrj!Ed>(yYS2C2E7XZAQF*CPFV&d5YiQ^sunUR+So{@VyAD zUgq^`oY|u-Tl=U$h=KKWWH33AOYZaQQnq&?WXPJ`R;V?IdLKL->X(r8_su*ot@GY5 z-*jj84XE@L2RqpKuSdBXv*?XA1+gSXqPm=;_-Kd8fsHQf*6|zU%|7t_&4yap^Y~;o zit>Mk9HzS_P8JjPxeLJ2_Z0|W(Kvm$qwo_1_4>qx8nNLp*76@xfsJ2-c zx(-L#GpR|UoVNt$kOLJ_rCMT)vkV>x_k_+q78;e}qRkliHoh*g1(b}YFtwLyO@55D zw{9jau^La3|D| zi{Dm_K4EMCm(0NJ&h5L1(+C0UR**|IUV%VK1t^8QzV%!_l0?2ws?1tuiJXQiY?0xh z>);2J@nuqDfZuu90!wB=@uzMj&EJZAsf1-~tXA`zDbMWOl zlXlW~JI-+9OUEu`2BU8Re&RvZvmRg)VwwIZ#3g}_96kg*oaVDqtYt|IkWN~02wkI*3aOISN8Bh4)F`p|BemZ_wXN_Xg%47=^?S5IuhS>^?-5E zfyhL)P?;~bNK-N~$Gt4+j4H5rCCZaUsCvZ!$smy=)HRA+(=VpcxHXo)+xIrfJRX~^ho=SU8%VRixC7o)dd4nN zhfqaPAuLObP&{1YBuG4JQDMC+TP}T8Q1TEzO_ybRNb&rA;qzc8y z`)~&e`Yp}|^b8qG{fut#&9E5%>R|)G^fXuRL|2%%busVp54P=cI1{}Wa@i7w8IqkQ z0>nb97O3PI5a||mGl%O|h#-a+0X;iIvml~47Sx(#oTz=lFJ;n5@MkseFg6~zq*rq2 zlsm0H%C?yPQxFCeDIKj4@rhGX_WtI5-}HsY3@eI$U8rQxhBQ^S;Jqa;xm`ms%}KGMICl6365pSJu>1#+Yz zUn0u^10q})h7#m%obA7|<1b}_gbe{l6aIS=$bkJxizntT&jNwNcSgLlALc_4eG0IU zS1p#yiD-aMAVy7FeolxuX(SG`D?a2V5-%$6A8eCrR94q7xr%($9n}jt1i$H8nt04H z2ZPL@%mwZ*`XF4n)bOdQ`>RCet1HGMZEyJ#aV|hpg}=fFoAEkhnWG{p zD6jv+ingmXi4&HB^g-_DZ}XZz0y5(T`es&(W=Af)J<5G|whv(um-BxX${OnlIhWp~ z9+4Fp0G)ZOTDfMhN~=l>^n+GGD+{4k-WAS>Vex`0lL>uk04qD`98(Qk3 z$__Rq*>w6XN@kA07g~OkT&1uTp1q&0=_bik9L*(QvT|?Q5!nA^z>BR5q-d#&kW@B3vI#=1v12;YH zh%%6g?naU^1_49n5{EAyfAf(Cu2z_O_^O#k`0i}jMbbpFCNu>r7P^5yk$HS*kl77G ze!&9&3DF`4trDa^m@c*tD^9hTq4dz*Rm6~PhVEijmZ3W^MfmZWE(%~Ol!t0~KIU3Q z(3q{s2^;I-Zp@moNLc``uX~gGx`G)6^|H&U?d3fLuB~W?l_D2S;gSy3dsO7%4rpR= zG|}k`{YFe5PGl)L$Jzhk@M6yviiX^Cb79&jUTX0tfwO4>kRfj_#r}v~R_=8{?2u2u z@75Ho!})f;-kk*q6zY{6by%VZT-fgI#!Lo0(w2|)L)HTd;$j!a{sw5wjaPMIAH{~q zP$KB{&}98h>;yx-1xZiKigo*(G^-l>1?Hy|RwlWQ91bvw%k2!>5^vfM8HBVx75wEb zgxo}g;NiFQofHIaxVAW1BF);8_)m=I>cJ`8-lnZ|^38^lBvC1>{hqqPgb}W#WOjPo z;iWN#_!``k*NfrGJ)1(ku5>;B%0I6>`@f`MDI`*5DNyb-k&aL4>+R5rH4p)efff2$ z`}jhV4g--k0GXQE;ovI&5(sYn2amOue^BtTY!lHyISL?f`=;|JRg9=BvC?LQA6$=; zU?t{C_%=DuZQ8aCloy^ZD?MVF7vh$Tu#81b_dd=AjE!V9cS}uH;?uZTbWT-L@h7$T z<56Y;FI#niNnTR1#3MW`?eO`vEPN2Epv2scB;GaKG%tweZJVf5&DBG@+SMY>`@;66 z>8Bsrpcb3BRF#Lx(Ix5nz8#YEnW#;dFBH{jE~(1r?-@%p%1E=S)SS0c0S}Q%xMu}x zSXkj}A5*u)`A2(IQBTX{IIh3R0)m$QnM7dl#t2@Dd>MVlTGfg^=<8-kzODru5YNBD zN>(u4*n8=DRZ#C9OrV-Bu4n-Nu!37Tz#8mZ=^U5tH1xWW&@IbOrtSY!17t`V@ zBYjbJ$UiAef!!k4Rtm-o#|3}@00001V_rTq-hj@Qp${W7KR{IBe5F4@+2zgQapL~d z9lrU7ewy+Jzxx$ymZKuE`x3rR%K1Ahv04@c90000002i5n000q$Bx#=1v4|zxsp*Z9Tj+>4WtWD){HUsj-pUm|H5Msw zUe>Seg=Z{tF&h0*?+|zq+Q*o}%%ufXvYKlpFGe#bXhLr$9(|hBr!^PJIk2ae;~*c% zrclMM%dNqC@QQ_;2Hd{x)Fp6tOC7*~9Jx#8A!Tn5#vP^#n*zj1Xf`vf_5&>c`Z zT=HFfPY_O-gs)bc%|eNo!C=k4u>SKB-^53pNULpwaz?}rFwh9GEMtBgwz!_g-qnRz zck3WiJZJRa>efg0Tk?1h31G%=J)gAm&8{t;F)_=xqlxcUB?4jeYzP>$F;DhW% zRoNWtj4V8dq9{k>mB%-G7^M({7C67Yo~s9AN>>Y31JS4G_D0{M_h%w`kHv{M*QaeW z@8}JfDTFy0k5Tb^QPfK)puLHY;v^atsw!Kgph>F&&DR*~iV@&!Zb$DAir7@@rAsF$ z24A+)NXAe4;BI*pM_ELk-&x)P9%isHMmg-Ho@6L=k)TvMgZLT{$YFm@4y|N*K4-k~ z-%#Pf@AiY-4l+hkU?i(+UXj3`h{Lj?i$D(wJAF%6xp#Z|(u}q(BCU}0j&BZ5`^pM_ z9%YKr%*J7oaQdx1I?dflTkPA*_te_v+lCo9u3vLrQU#c`)`xB>-x^$R?FX>cWcz|+ z^|>mup5C@MJblA``QrdO<)J$U8@wTODQVhO^aG;2uP(aR{1TqXZK$jav4!?8fX$cXGaBZ%?nz z_tUK4wpZCJA~UPxhq?vb@)A=-QLEUQO)u)Ft;JbW%?J?=<1WS=lI$)dXtw<5byf9K zkqoZ-FM93B<{OkwtU0;Kbr86Fe`)0bUjx3j56VD2FVTy#&Io>VdBlKsHA~5pf8VW4 z`ET458J%11KOUae(RJp?U_%K*Ck*L74mJHo8&ZV?nc0{zFw`2_w3%fo?P&(yl)3Z$DETZvK0w82@IPinQb3T7_Bta1AkS-IuI8V*kC zQb|7@CBSY18r>Fs50)xtx)5CGtGkrU`Tzg}O*L53meBBhy5$SCt=}21hG{ovF#EhD zS;LwwB^u3CEIlvVzAas0-ixQF-j5}n$UoC=@cmwE;pALxgr*)GoI-NnF9z(US@8tc zx`nbL9izBMWqb2X@3fY?*Lh&E${}LHyILxw?1#JafY)xcL!_FeRipbW)jnrK%*sX3 z>ek(2gqh#W%9)h`4tL`zO3&a=djdo!Fi;Mn?gDS$Aacxt?pupHw~YwL(zOAVY|%z) zoj{Ig9|MChv+0eDu=L zit`>X4tF}=9tn#yWGWjvm{-+KkF0SND?*2;E@>jFYLuFH@EnuEYt%h*YA{sr(pKXe&2jP+$7%kgR5De2$+t5g32~n##PhB;*G^f*{g*0T9z+pSM%#V|^0FXIM@9^N^4ewdY2I_hSQFpmV& zmfCRls3_fN0-W6z%=Ef+->DwK=Y*&0v@pE!5eX>N*Pxm>^U~_=_H1D0>u#lOu=fS7^b=1+962YpY2)oM&}D-@QNU2nn6$sb`~R$4b!n9!M6e%-360La zCrAJVSoU!KRsjx*QG4h}Kuu*ipqy}w1Mw$Y{DT9zQ9`dFtx1=w$X-V#J`-^L^)FqY^9Mb$46pmJL6u=%osA zN7YYZ2hF+9HOs(e9%|otnLbze*}XZ@-!B`U!|T9!m>Kp-VwyPkvc5a;@*^Cb#hjRp z7`UULGr5m9KW-2E2C_Pc!IXMVy679&Y7O>;bb5wG7YWFcXiumPR}xrHc{zFJYe)rd z)R}Qaw2KRh+lkS+gB8*iNa5CYBIyTKA(|v{ zm;njaM0y6-x{t-3@59qtw?$*yjh0|@(3a1L{_2k}lhY%u9I+Y6i%`s7LbcRq>K$%yqP9m?kr|j^zmIZ&xDo*z_OtxoQKHEJt*V3K;F}IK z6|Y?b-S$sBK(79?KxRWlu^~A^Ohx3H79`R|grZ^@R=b$6yj}JZ8B#VO=gO%oOjW%m zL)=vj-odyEqn9RbYeH+jl|Y2D8(PQIGOqlxU9ZuMSyZ|}xIAPBn2;aW6TBTQbLwJ$ z?^cB)hbfhEFby0_oTYLS8+m<7pPY1WF7F3} zF`9SmSUQG81YRsMs}=AUIwO5uuTxIsn061_Ix3sgM8ZeoK`}$wc_4agR{AS$#<<0vpjadsgQxU$4R9j<;D|#=d zTJoHYTY|e8d2qZ#QXBT|YcfyY?gNdStM?19(8e(wRc+Jc@#%ae!_h;M$yUDRk->{P z1MyJbE%v6X1(IDCN$mdqGT@zAJD3tRJH-}%iix#&z#s(V4@8L{5j3?XjeaU$kYQh^ z>J_5q?U`NEr~`HtM%Y0EX*}LgZw{>Xob8W_nwZ8Q@*DA+t)$@K)}eDxcfAxDv^WVV zam^f9;BQ%+hO`~B88wT7kix|M4U;FzPFYSoYlt6kmswfk?SKUni(#IAe1{FR3OZe_SD4z} z17#RZj`Q~Fb{(xXH-Bn4YDS1(F^MQDv1mIr?}3=qrmL5~LR-0UXHvI<2TQ*K=;5q0 zUTBYY#7tNzW@sn@kXEi>B^% z8y7Z_8H9h)?0XWgN#u1K0~Krp?LlS#U2zS07lFVJF*iHar%+KCMsU%oO`>?D+-M5x zc~$e0DcirhH~n1f#t01+jBtIB6N)0;2dSp3^CCSgj z_BKI&l$04WIUE|&D|Psg3k-k{0~;XZ%xtvx?zK!8 z<)ZO$PPf3Jq9lBU`j76YbNHb%?e*>)q$RG+N+&RH2UxxsXuZU??Jt$V0Nz-Zf&H{$hD z@(HxlkWlR*q09SBI{zWW-vF5;5Ji!l15L=qO+WxxPqgWle7mFm(|V@@;6}Df`l42g-msuFod91Logg`cC45ftoPTTZalW%{5pr;V3e`|0RM;6D`I;l z+=GYzjub|^(d~&3kOt9?ndH|D@{!NlOU1}U@33~mzsC;=@^t3Y5NN_>z*Mf(c#}`v zlcO6_YSQ723mdGi@2F?xhsBD2WGBpk6PEl?2!hbEEp7qKHte@pm^BPzAzhP6$?>e6 zc5bvyO;CnzeJNk~x5-7_y)8@*l1cQ>lX^X|nX|L}9LbwFfC1br04{Tr;N@z5V3HsL zr!yS7Y*WXuA?7+GheE$fY&J(q9nN%)z;c|?4-*O9Q$1$f2{s2Hp zZazE{!y`4m)Q5MJN7U-5`-^Sa`#4M8@np`YpzEuwNNFbjJz^T!P$ITwf_{iJ2ghv_ zeF(ITAm9>P!M!x>lbIv^&kFJeCfduQFOk-^onwkwWmR|B_Y_&OW zdKQ`=D zS4bT5X*YHz1Sbtk^2@bcK2$*(D;welsronK2{y%Fc^HJ*h64=N|4;APKjYbMD`KG% zHrw{50?wF+!!+o>C(W_t_ZNp{c9gEYS8<89yE>B1ch2ZOG+5rjGEs~;j97Y~kc0kQ zb@_di`M(n<%@%JiRPUB=aF93ryJbcpq43*P_CHsxJH${L3<;t<3dH^wl~sxJt%7(_ zP);N%y7?>PJg2us>eQMS1YAv%@GoG!K%D02wB-M39FRyYge8f+H4kIP)%JJD z#@jD|!aGbV^~slDR$m@+==Jh=%`UgOzbLu~TBZaywxw)$z!sHqRQRjgVy)D5q4)70 zb1FanJ&HvzRPcwvM#-XZ1yo(3>QVYm{()Cwn*gfpx5OB-3z5d6{5CkNaMVnVa8!KD3i<;1puR)1<}5BcQidW&p3-K{9anTAmrGYFT)j?LBv5I=+T-JckvR6vTo5d9uLiQ;x&g-~oh~r0-A$Fu#xH5)D555giIFf|-P2I$q>uvT$`17fWiwN* zzK|sDE$`rlwfsZBA*h&kP0Fi*IKl_Y0WFIH^>+r$+hc6cRxdUl+0~ zm~_UMES&pZGurjM#MB^o(t+Mg%mK!Zoau(f>ahBe7j5lHLX@rxqXgun@ zktQb*?NMJ@9J1JRfx;gLUquIn88>ht%nRElRx{0eK;%zhW%NoV@Yt7bn7jE>)yh^j zYi8U=N=SC8RzvDgJh1Jy{KlvDAzxbXQ4f1*;+-;nN*H_8jW2h8{TXhUg)1#=rfLG?C-Yab|cPVZJE_68fXh9QkK7otp-4G*?1FtWq5J_9_kzAOwXioa9v<`p{wI>{S~J<0ote* zPprraurh^iSk1WH-4ic33s(SXcJ^iuFGsxi+DeLmc-F;d6XHYBk(E$=YhsXB5VXXP1*YXS`z5a=lyDt{jJ|1$d zR4@hg6_7v}CR$xn4NI+0cE`Ya6;x2j$ulQD#WvrC3E-J8F9EXS)*)whfdA+u1UA{_ zHvf#btPjXYKZ}M@fVHfzC{VGiFej%1aGq^khVrG|anxB;)3(=G_tdR}cK(y{u;zbx z^+<6exzh4htaZOW^ycIQu5}!#w00w-T0cslWt2PkX)wnLRrZIrv!=|n4-wf7$cQnI z5Lj&1i*ZFon63;hxE*TjW?=R9lr2B#Q(YEG@y+J&PfD7z4ixJN$hiaZV#g&((|-i3 zHA`Er-mm9f0!hqCr)T0;>ou414(5^k5zCbBSi|b;(aGed)-AuIHW*yg$$qI&dZi`` zX0C4b0I-;{dfvYlo~1Lm%>S?z0^ROxa_|~0hHe}Ai+6mR-ZYayx!^vH4L1RR4E@z` z>d%%kUxT|{+DCs}IuI7VFP}92Mvu`>+Mt}T#E*Vp@gw$R2{5zu-h%~#-XSVP3@FW0 z-GuX)WoI;)%t$HZ!c#9mmyA9$eIs%Z;n@E`kOSK_SyC`x0>-<0jD z&d@4Cmyr$PtH54K4TK`?ue9Tn_F^X;%Zxq7-|fHDv~L78WMo&LP?$~2u+grBY8-WS z1=ZT+oKVtAQH_gP8##G3KLJ%j=t7%P)nBxt$19}f+8IIL($lpx7uV6@L{J^5KIg1G zh#vM}W(-cUiJ5Jx^I^%j6zktcTM3h>jV_Yd zMvc^fTH~c}zzR!4wJtr5_H)>J$*^HaQeqkCN!~kbD3cuu&LyRtYePNq7EZFDHY4t& z&<+Wf*1~i-w#R<~!uCr3sO1a~Sp$YWq!1$q+z3yT6yq2MWH9g6l0kdL>lfDf3}K#h z2d@7Cy{{H+T7h^7aJ^u?hi?7Q^M9qB)IrrceP9D4)U?*2STE zphsiAzQ0QWcDRBHa{&N`-X>Ups%Zf z@;I*Kca@%glXRS&6)*zy_G3G0W(NT;b0j=@HVj@*36CmIyCWx7f@f{@VrA3!otWlB zOSM^Koed}N>Qv|UbDowC)(GlJ?N~x^J^!|Y*+%3l&)Y~A2z-l(pz`N+4jWp&=`yNj z%O>T8D+YMS3SieGlgNlaf?Z>;6}zDZh8g4HFvYmo?5B4`13Jn*ZL4UCOBn5w`mN%)6Ida{s5s;7rDgx`a2@Pam9$o%`VD5^eqE-9b!PM zVja774*ujEwUa{bz+FA%m6R!Rc)nu$(j@6|RPl-NA4w~)tP<@n(MUIp?@!Q%bRoJg zaBe#7yx_};+4|lY(cRVOHB2pj)$_i0CCUI(@WxRr)?c{|AAl=Ikq#zB-aIXVA{rJwV2cQSE;U-4l|g} zlcJV<+jW60EM)7$UN$=xFuT{6f%pj>c2Uvcwl-+o8{=O3*1k8t+G1sxCTFE-vnS`+ z>@d}S;QEgE10jRU)1m5ew?I3hk?|@;9YQg&^~9fn8usX|_CoF{^(d=RCn>e#+~#>+ zjk8^ojsGR|E<22;c8sk6m+rl|CQ!|ngGO3_s<%u~w)9qm5D=r#?+HW4b#HG0z*}!q zrz=;G_M~R!S{FEiyh%BAZCH3Hc5>nx`c9@jK1s$f%8FB{1;W<7?Bk-Kzr%xj?z0U! zL2LhAe<~O+Be=UZIdo4fC{)MAK^y^W7YeFE#%6$Hy+V#iI2LG&0Z0Oq3NAPFV*E>r zxVNnGhtx3S%`b_i8p44Ir)aqIjj;o0ENd!=w&=kB__bS9tV2x+M&TYI!sGV0YSI=3 zyVag19#!%5?@c@GlnDS=8dfCXt%78rrAg~I5iemK7(1r}#yC5>B+H-y9qUlv!CI==c@DG_!Bod7>~Xz(S2odgS}^%S8ccI!95B8L zKw`4mR4q?hHcxf~Mf0>tRy2rjMBm+Oj@zpnljmC_XX62{MpZR-wH?4Ms)cB(TJN!L z^4VH~&d?5Mb)XRb^_L>R!RC(w(cphtlmuG621&OR8^G`g0001w6wN=Aa_s-Q_Gh-k zB>1kFL#zPwo2Nf^3r7>XNHFF^$2B1U6E@jwTxdaHacxU3vIN7>_?psrov+52G&yMtGAyys7+J znch6F%&)Ag0iJ&c5%FvVZ#~?lt*DIxWg|R^PCDEP({IZs#Ug$~>h}Z$t#DnBCg~uZ zf0#e7@-vYe(b+pJmd-Up^ejWBF#ekAPegtVUK0K zLP(FLpZE@!ikD$OF@=GlE^e-hx0NEAWudbYqvP%3&vMSu%$m@5m$D0Thdi{{8O}J3 z1DE;;-X_Ig2}}j-S9@8-FZ61&{U5Qer#h>O$j6dGmS9k_1ry7qaRXSry^Ygvmqr=z z=#{_xB~sL6iyRAK{07g+wkFV6+O^x4Ze!dxL65P}J$B$FFM$9yvTMz)PtGIbToj>e z*5|SmHA|0itsJCrbUfQtSEV#rP@fVyJ9SfJ*BW_cY%6B;2CNr#_~k}thA2=`u2B)^ z^%Bh&CB-HiTnERvQ(8qP9X2?Q@4v(7Xm;0N!ccu+tD^ym#dGK8@cax`S?%a=I-7;Z zpcn#w?mHim>huog{a>Pj%0ue+d4BpRRr{=zC4>Z!{bZ55Y6)wVoVLgy@bcz%K1YK1 zYgOJ(hS-SWE_#{ZKR|IAdP_5qjK~$L7Egfp%GQ$f>W6 z_5d-o@B@r(@$>b`nW2VP<7Q=<{3MV=V&{3acL5MxGP~ua%#+}$7)b$r8Gx1l2=$O06DRGdbv3YCu9Q`BkWj$nZ zU)L{Z^*?u%m9aj32^IzLh8H6ibaE8*zuMh@RvEh2Yt9(p@YyB&V>~3;lf0Zp27rcV zJQ!*iNPPOW6IweAK2+hQ)bLt<9Jr2w)!DJ`F=?xoLNB9#KvU^zU_)^Edj_kJ@W-Bi zRr=(9;Led}ddO*Kp=rbol>GFr#s(>w0?%cml}Kc3kPD3ziMMW)mfP5B)F6y|eR7+@ z2Ke~U^tZb{n{+MKbq5bV4#E&BvAK5Dtx`xW$tL#Tvu6;?1yqVXc6yTQ8(1DWXkieOpR$&Dr?D{ z@y6lH#VsBB4r1ge7Kd5`JnUc{)K1oEi!vV@K|v7 z8jNDAoK)FmDyiFvpy$`h&R5IHT9 zJeW)<1m|*OcucYvm-olv3B91}2mE+QMl-pVJv5Q;-Q4vQvqXpaK|^)`1PXD9BS5fn zSJRawu( z-Wp^cj?MYQlb*j~-j%mS$;Fh$Qw&`OV=~tjT>^e4*KMG;NoOV%k?bU?gd@NR+K46)i9dH+v|KY9esi}TE zR-B#Cn+aB3n`8~88AA`P*yWO#_J&I66@DbRXAg>y8cc*VXruB|M^aC_cl5xn zM10Rx1U$6D@l8Y&vy!)T&gBR@EB>Hi)|U21qXaQlIe&K_OCCl}(ig~y^%eLjMM=ik zR+_lW@@?Bz6JlSx%39#CHhSt^0O2{8uQFaeffVSn#p3StBAg1LL9-19A70(uIG0!Jn^9( zb;}|U(#r(FO?kG5L*)S=cAy;_3wO`gR>$IQu;bo*m;`kWs53HhjzsN>?RHXa7-hdz)hn0e=W(QBG^Dm}nOuSDc!ZJm~13XA!&% z8Oa1+Q2o$s<^_Qff?lqmV;Vu7*NvdI8U0o@Q}Eaq`8`oNM_~0v5%^ZI9Jg+b>}T;rBpN@$*z~k zn$7+&!po^;^dkBcRGNwL0FY%K8bRG)pQFH&S@5okAK9IpasZtGK z#Mc=V8xf(tQaf+?h|ZJg1oXckKXTy1#(XJx3_R$PrAEICse{9&E zJy<#OZKLFF(xl={Z*XV*IO&NoEH-|Ds{0f~MH#KvoQCApUU`gx0&+Y?*u2;3r=E(`D$Zzf^GY z9_xG83tna#M;(QrUU=s3&X~6Cynx2_I$xtun_n0Z#J4*c zT~)A13}`KoQD4L5j&xv{H~IL>f8p} za{!gjsZz_Z@R}P>vsYAf2Fgss$)+i0sI*l38)#SjT1*rpS1pdS5oC5e-7|S(hy+i1 zxBLq#2;r9`lsU7`w&=11-M??Lfd+X;rDrYFT*wL3k8mcPZR~y71*0iLIbR*@u2=oH zDfHKBcP z;WWXXZsMglX(q5L3?bH6%_UD{uN+u@9Ys59(a!vxa({w{KgCj4i0$gF_;pr~*tR{Y zfMe3s`6#x+KlHD##CwcCcq#^* z8Yp|9L=XHUJdp>#U|bOrz+Jg0zjH)XR4#LW#pV(oeJl;dcEP-B;M&^E`YFX&>{S(LQ`xzN5 zMbFnWxwvhk;xV<)Ov>Fc%}~44+vp-g7CAV4AN?YyD(NkJALTb`-yqBe64!$C8a^>) zRMk7i-8M6-0yDdxZOM+wE8zZY3WJKT*T>`u#&ysE^ml-tq+#q#TS1N>(0<^gGocF^s3r7mqI z50zUQ;Oact$pYIus^d~w7Q8>aLquzMomzWLNr{_p4O_s~@&g%Rs2hni@}gAOwv89= z)~J{%Y))Z~kR<5U58yW#e0;BB$%s1M0}c?l5o#2;>D@^0|9d=#Nb^j_}OuY49de)3rXhODjeGn!50_ zueRj~q`^tPDKUF+Y8SRgz=73~yMQ1K-P(KxMm;C*3r^=mEvmZKg(f6><2!kgp*4s51TV|V;;2R^mZyYy+egyy*1uZfR z4KV;?G(I^3B>H?1Uv9`7GCunwMtw^-R1b*1?z1U-j%|9;ALjC2QvMI}uu)S?#~h>4^c{bq1CZPu3$8ol9i!nJl6BQ;M6Z7yJQP(mZRF*|y!^JMW2Krov6 zRhb+8c%wBT%K;~V2LmP%(D1lRDzhfxgPbFxhCq_+8|Aedd)juX^MO&{1>SOnV;{Ig z|9z{(JVa*}fRHH<2p8=H$3RqFl&f9z~G@9 zh~lo`IF~J*O1U`pj3S-R%xzpG7$>Kut6AIh7XgVr{!}&8Nec7a+6H{N$8sqypE}B=#5oM_Yjw`yqDynW)?g<5UXtWMiPf zn3(!2QYhLLUZ?`(qIU&{hY1Q5P>nY--Du0w${;-&QWpj$46hy)(69WS_ID0O6l{zT zu^eOq;}Y`>39`GtkW7=P=$-$Mh%rWnx9X(wQu_NKg`nTnpYH}S1$i7J3Sy6JMGBhJenW18*= zm9ZX}EyN%=H9LcNW@jgl<>usOWcnDb(*P#a98ax%6NX?7Lgtx8%6;ty;lRFWmPk;5 z+fz!fa4_n8siv%Y`N9+})P~NQXQBBfr0q@>Muevau&TKh)rxM4PAepnz?D1dJBt)9 z5s8JzxNwAcD=6gO+a`sh?ZDe3Rg@0bY%W>h_8S!!+W^62pJV7v_EP{L$Qdp;XoIk4 zG!1#k3V^}@z*reb1y+gwX)UFvH`y}E4i!o@HdrdVs-;XyNz`7&BM;OXjG^ELIFrgu zkosT=!Bswkz-kL4`cZUdoP`XsmV{ui)CG5aF`*r8855O6Sx9tF>$qbKA;7;nAOHnU zHHmwu&G9AeVX^lkqnUChD*ea!8wd_u*I$RPWo+A>Y=J?&jIsWuT&BHtag!japAVQ} zWV8=LCpay?Z-Qbg2+hSqeL+%$}+WC*Gg@inm0XHO%6NWXUW}q2WCDU;;P3RlF+gEg@W{51+z|-sf&BXQnuPa9>lkD97*eBhB7!`2%68S>30B z?J62J8gD;=nWWT4b%R7cQwXAr+m!z|x#opaP)Cp4?JNUk<66?NU0pL5Acu~Y9p9pO zDuZF(lvS^ME|Jt$YbR;O<>d#whbcMqKpV*25Vrnxp9 z8`WhU7*}7@KRMd$vE`j)J+#M9V-M0>DDgNJ#pBC#pPNAJCV6~FCA14c&?3%c^|C{i znEblDyzr(=#5o&@hrbUD+76DY%TRC&N$hdGf7A#QsAk0&B37E_R$r;{5xUoA`J}k_ z8riv_eY5Z7;?iuqin3T28s~38pM1~-+N^$ocU8D=O|AYkOMoT5Sun2O)w>6Y{1S;< zE?#fhzw-h3HL87V${$pdiMA-*SrXzB!*|==5!?2}u<`;siym-+ts~FoFL_U3qLwk) zHB;@>hfu7L&adfs9(Gb615NUr!GPBK`|}J+3@Fr}|3H91pYH83!f|dtMca|RpO0g_ zgn>Gwl_6b~H3tjr#1@w|2LRXVG5?Nd(i1p;+H0*y$c1z~=qeT(J zfP#Hk3II|HICA?Ho|KBTQJxr|&{ww^k-XeWV}rra^s^z{mVT(udfZ6zunM&h8~uq90O_}>uNpijI8a~ppUn^8m4A?;&C)9q*}0X{50 zTswIk2Q37XF0+bkwCk+foGzOeMyq?xbpFPgn1ph|+$}%)S)4;C!tU&5L)kwW2gS)) z)B?7MILibY;^7ndZV#Hojc4`HnvpJQy9;3(Ey`t9^XX4Pn+V9kVp*KZR|1o;+ZmTI z>KRs}%H9wTGSiU`&FEqGL9T%CSmzO=M}UK0`ckqq-urKxYPFNy&e<23WXQG#mK zBopQ%NsNxF;<7bC9E)ku9>kx3RXiUayf@?Q!pKfZ#odSh1krwgV3_W!3Jlbz7XRn} z@GDl|Hlz7CheYe|a>+b6?IV{_p{B=Z8uKPhu{!b&7X_ z=Km%s8OkK|r zt&I)M+_$~eT9^_s_Ndw%#Ildwn3s;;gmXtwa1Nf5V;pk??JS0d&Pp!kFU9pXdO9wF31TGJMN-r8Jh{vnNx$9hm>eoDThj+tjiMFZPW| zIhgGLL_A;2Y{UHe7)ENMqf0$V*!A@@r-dhU{1r5Pi;O;PU~2$mUHVPjITkg-;G&Ls z)4EKDV|u#FFuD??9I)(J9GIQUXdBY^bi|N>pn*r{o0GW*_WvV{h3LQ9*bcNg1c9Hu zWmsF>K0K~HYypO838VZyE05-&m}GQx1cX;rwqqMiP7s)Kxg4^s>>@z6&jCwA>u|KU z48009V!3H#T6>?9R}f) zI=FfZ*P5R0!;`JJ#t;n(CR%!@ehhnzlqMK@#M#FA&#GRM14GNfg}0BYEXXw9NY|St zzcl*3G?*!7$ODJ|@E)NGj4akRRu|g1vo@cF zetD?IRcRFfuxRPGHjD=f2!CZla3Plyl>6&_ES2^<3cK403@6-TOmvX{+UMYpk$~}V zQ9J|=#N7Kc`aWS7=Z{3c+r#Hbhn2M_xrEb2D$*nE#jP-aL9^(r{^qMIb#M|_hNR-7!@ z&+o84#|s^_(=y`P@-o9jf(Uyw@<>z3ykhC;@$X7q=se;5o%iN$j`+i2o%qG>DhLPp z{ci8xy_XPV;8du%0+rCkDEqyu9j zR(tpRKNA736J~`q-~lKqkv^RhE4;(lLqlkn2`w397YFWfKD6KqX;F#% zEujju3SMzagLI|AQ;xuP?1(|?|7K@Z{xhq4g;|LZYTkOwozYJx+a|`Vd{87gDv6|u z|CuHTx26{#L$Mh^ zHf=R=x3L2S?M6)2gh_;k6C-u#jYKc9`(ao)CWZx2VR*5ehv$>g5NS|h5@c1)@~BXT zr}#L3pv~QPa2N#!8@b^0bKHT#OqAdOCmB(*6U@Fz>0L=~53x%83-s9z$vg+_oA12< z6))H56heJ!?ur{kR(x}{ri!Jx2LDtmsZ5aIX|(j=8^&JbX1a)mC^M5sJ+dp|lu+;; zVDnv}a3L#-#eX-&xr>{IRBF2qfMi70M5%wg*ZvyFx`2xF%$&;!a`yPTDfe)w;RP_O zqmj9_sFPtW`gK(rS8QQ>oX4E&vm8=EF$50w@6LW*q^R}J=5gl)Z5b>EHn0*RT`KtE z7L2kBgZE2$!4>E?q5!r&O2afhIn)@muy1q^#l+Ap_p-<^YGF`U%g(LAurp>SYk67> z4h(A^-8axT9QJnkeQ4_O_wG3o`a^vH000vr-CG&v)V`>BlZ!&jxYD^>O9_yxP67yU z57);YBd&WS+#FrvO5Y441+3h5WDy)MXI84T)^w!E72Itau!gD}KK$^18-~{I+!|}= zY9l)oLhb~45HlI=pQb!YC?-%;At)rK@_k$D+)2J{003+bl1cNX8MH)M{X#$`r0$l+ z5f;BPfc5U=Cl^!eljjqPrr5n-dqVLq&@r&0^*@M$2U-M^JQgtj%~I?^LO3j9@|Y} z)^^>{**})#O`o^`001n8W^Ib&JeV-=zrp)aF}?~>|5Hag5U2A$kL-dWpDTdZ+5i9p zU;Sa=-~kl*eRTJZMOg^i(xOU_Yu(&-#Y*sy5M_Q>m`nZe+yDYa7->^it;sZXl_ML1 zmE<%!E1^)+?r|j&I1YixW^{VpN!$Pdj4S{E0G7A_003wYD=)~}WmIDql72gM2NX`m zEsi)fdo*T|<|E44xAjWyz!K|qz1A98G~gFkc;?t9O;KlrPj$qBEOl z1NRK^NUgb(bjVZr6#eO}Tmtu?7zIk=shc7xs7p8V1z(Xw@BZ0gBZ(UljejvF1|0T& zO-uoaWzu@ABwWEO;um;x!Fou$pEKyaC&6*!4=|FQ!&xwxy(8Q6$yp@yR)(U%+k}Kw z{GiWPYpErz9kzUVvLrAj)(LWHmZYZS{9F~>XU7t*2xh3@MyNpAo$;o4qk?N*3uXX8 z%|^I(A^*`&i~_LHpkvptMP)$OL1 zH6m*9z8y2WGN+j}0c0f`9=uJ9FlD|<{2>He`qSydSo`V@b7lS<3QA%X3KA~W3Mft?GeU?H=_3X<$=eulLE2y`}pf0jnT3fC#jQu0H z%iRS3@Y>=gHvO4hY?mM(IlE_ygB*K6Rc%e%3 zZIZrTvJGyrpT`EQrbf?qSc+_K{Cuj%HWfW6k{mIp*Q(t&3wwR|+qSvzc`Qm{EPc9h zTv#wPh*uX%JzdzW2{%1=N$($Fu!(snq%OO37yfLNPXFze5;&2u5+gY_%IV)T#_EP$ z8s`AYTitVMnHIdznZ_JuI>IEgalX!KtiqJ6`s3VCj z_-47kl8FNH;dV8z!>}$q+r!QHb=efgqQojcBa#^3IPzVE?+e*u!WSbHtusw17A+A! zsS;D8FAuLYExcZDKKvQj$&>w)j^NeHu|>s9ao0$!%poA6 zJ!p+@`IS)a2BwC7XhbO?c31U#)@3N0i>TES%X43;fmmnBBi5ZRzj>MXU!EdD8kE#` zhpN~dg`D9donEZpUSLkQqa?ztv;*D< z=*Rll$$W+5CjbD6(vm5sH|bkJOp+S2tHkX3-h2h7mDjGJT&Nvy?f9dV-sw*e0010> zP%k+SS7>BjFaVL{*+>8?GaFDRtKu7hzkmf^p-zPY$OVD0E1PQlJsTweIOz>fo_2!a z4Ww@v^Q!OwuG^qVVg-fk2+RmJKS4|~SCrwf`Q-z0008V3V)nAuaoCl8>M}sV)5&}w z2E^Uy&-{r^LZpAyC4hXcREJ}r!>SM;vFR@*II;`7-9_km3>E8++v!s`{X_-i_)=8El2*Q4*H6r$n26vG1i)s z&t%2Ve|JuOuj@1e0gyiFezM+@Xxs|4uut>-0oEQV;X&75nnsyeHqR%Xtcjon zosX#<^eK-BQWe&d4bM}ZBQzo4;#DeD$u1DnRma>o_DkX|fA2d5uItxV$Jt_=zx6q$ zFiqK>eGwS5=}@(sHmtyiS3O7TfJk+Beskfcnzu85Vwk9%Lt(#FjDP~baiQ_8R?$<}SGO0KJ z#rd`yWnsM|;{cWYgF8J7R|^qg4ihaHvDvN)d*ng@T0^{gi;bJhGFHV=tS7b!<;{MY zL3}&9&V&T`AX&G`p}Xmlw#ZHhu0-1>C80}I>3tZv0Ku5BE9Qr&2})QiQRbJ8dc^_D zOt1iw=QowDIBG(b(I8A2Hmrz8YnHzcEE&D4t7N$k*eEB_2#jx%!x?%GzWuf0QX8-= zfTjBsoh2SUbn`X|EWzUxF9N*sRP|5xG|e1FDsksQ@0LNgPseoR5;?KY|MTJ0YCZXg zApJ#$J*{ma&SH-DkNCc)VdXFV4~c2Zqh2>W(?%-rGrRqy*q^FHDO;7PcS<3NSyPFC&-R1`+7G7iC$??b;ShXwSSX z30ZI%WA^vG9!Fd+cL5?7BRhR`t{qC@i5tcDO=|*AO4xbh8jcwN%T^VK7X#~+H^wR| zh!B7T#G0j5IZrRwyDQeDX}^@nI=^*G%2GK!DgSqDs9=Zre2jDC(rR}?QI-`jLw{&* z+FxC^5AV-2S7$3qcxJ@nFb4Ey3r?VH+)5bUt(L0qlbE0;U+IM1gYSs(<%45ha=UYR z7*mTHB08HhU3X~0MONkPht?v^I%&`=G5*GaZV(rDTRu$f*VmHEb-X<_fK4gZm&x*R zK@qG~;#|>DaR}zA7?Ir0@K;~pW(WXK;zh8|<{IQJ2^L76@U1t?6s7&^^W|*a%_LBn zogRa%rh^V3c#NEP_gr0~1E5i!WJaV=wmFPx&O%wmY z^wP#(5+$5~G#x+OzyXpS;hZ3`6SbhYc1vt1*qsxy4SXt=8Pj%xHXd+rD-R6!X1R6A zQZoA3Y?8=S^d8|VvYGKaix+V!i3`yOtXRy(>@ z4jv)xNRL|+b|@4KIndMtG=_Nr54qoowK^>p+;QPF+{%VmBQtx25CaoY(9rL&)-!%R zA}t|Qxt0`N36#*`1T5xr@Y0{%-q?&zg4+2hAiD^>n{=#cV&vJ?8QfC?CUpzoJ9F`lHO=uM)_ z-b@zE*YT!@EjQKcU>tj!`b|*(WtD$gHh7i-Uh^n}+M_k6%9+YdUoDih0g!<6`*fcR zCeq{ji1#~FF?Z!9JD$+)w9|Roveq!*fS2uHXhu*mmkLAQ`ZXn zCCNL%8@9b-CDl&|W~P)W_F5P{kx)=p-1GY%WAJ z66e>MDQyjmm3Vevb`_r@L?1&aFf4h+i}ygI+H7tDK(vI4VXrtsOMzK@nK=**)i4$- zJN!->SnMb?2Vd#;N4b%;v*Wi(BTX12$t_J5#`pH%FRh6?UCPZxT+G8;c+UN*@UFLa}}-Cb`#2x&cOW$nO)V$ z?Ot}jbfoLjt{zbKz1f|4&V4n!f!?2z&1k4&rr4BzbCSC^JKX+*@ot@gsd<;b+l3`z z<(B;8iI2#TEu@5X=q(lKz=??reP>dK(X)aj-)!AGSkpKtKxfkE#jVYb-*ZQZ6uhx>Qgsu1l{e5PhFMmPmJNwmr_!v?hHJs5d@zn7ajYXuG}l2vlk_2LYrt$SQW`M80p$V)mT%-5 zwGxyapw=VBxOghCw8FExrfm@ps{(JhiaWTW?ShtB9&|N6tZbP{DyaGWjRr`%fxR$N zF?cF6#zFti0yDf0dyAJ3)AP-L4?aVzLoG$&?T489BCVpDixFgAq(f|0XbGyTF!&+} z8(S5&d`@lgqidQ0i|fcnzbgCM9h~IL^Vrr z+^pRq43~)=ROC{pz}bB;s^@SfJ+il3L{)&##TU{$HXuCUltXm`!vcK6AHL2rgA*P@H{W=G=BX>fuM;jk|BMINbacm zL+=;FOjC^SwI%_W>%n4j;X>6UAk13o?>a=ZgjdjwzKyrYw|?^)QkxjZofS3Bev@Mp zRDSCuqf<%$)u$Dtbm$Ax+M5eSkN_L<3O<{KqwBnFUZc{rEBs%cJ~z4|IqGbiI%L8E zy_?3Toqk3`9nlUDtdSXWsNLm#{dsw+W2ku|#gPmo@|NebjIzI$O6Tm(kqwuLc6~R| z=_UUg)6u0*H_qn4n7KbkKfo@Wng<8BcWH~zUt9BS61!AME}l<9p%4>pb6|7S51?uQ1zH_Hw->%di?5+`iDWU5Ng*`) zf8ZC+xBE4hEQ?g*9z0BF4bV1(D|*3o5GbmCnNiDSUb6d!^}eV937denH@R-OQ2X@lhoYjD}G!dcgSi zN0UqMJ{YHJ$%ktEGb9+N!MV~RAt$8;LRZc6VL@4)-PT_U2s6kWya_ZetGOQ#KsLk5 zf$2XUn!Z5H9(}=x8YEYjASuk`KFIdwA^Rc(tzTfOUe$$QcG`9&(%BY%m2p{_^As=a zV%Rvq{@4Y@N@yQ^po(u4g3O{j8U_~9(uj4r0Voa>rBWR#;xQpkB5fK|iFl#>VZ+K& zzFe}gZx{F`yJD_7Jh^UvJDD{;&{E%n_N4&~jE~tiTVBNb>r7h1srzN+id)59MN0WB z6{R&=+r5Abdb0n3@e;rvRCM7@nv1YzXQw~1aIdUF2y4AA1kSR^1*|Y{!hVVh?Nc^d zkyuUK!`5AOJ$!61?svxAE(N`Pg&>o+wy}99i6lai8lNYmXIXtsNU};NB_Ht;c^#I( z{8D!@8OV(xlX=D`DG@<*RZlBr|9=D0|5$J@2YTNR=ZqppN}|huzx+_kEw&VNFlM&? z!RHldr83rWP?TdCgrFv=x-+o7RQ(?Z}T;u=9N{=#NH7N&+ECY+0Jg`^BY(B@KA>2pY~Nolr` z6c7^{S~3`z)CF}TQS72sYt$eQV7G>zsa$C7Le&ja{hj0L0xrnoL6zy%ipL+4pudrG0h$zAv%2nNlQGYyWwZRPg?uW&tdI|C#5(MCUK>yrwN}J zSALm`!AF_k`JAc3mvpdWTAENI4egKDN=JS}`wIc~Zs05C zYObu&N$5|tu!ycREBr<+_qR85jcr`=*qdmzy@}i~-+p5?$!wR{09H{sVdm<1LGu4p zk0C-1AI7d>SV`PH7Jzt~beTrt7$eWyR<#b1Ju`?Lfic;2qk+`HC@MwK>^}Wpdm&YD z6YMjo1@0Pr7BPE>Mpb}&IS%{=E_;lI<_}$(i>4UPF3#19?%(8;jg$7{c}U6v9H6S7 zzfevGI2O<7bWIp$YZVLk8w{AeaKsQw(<5ArfBwEf>vid>*uN6c~V>BD5yKpSFcN`91IdtLqnCxl>1ndt@Xjvu1F@H_wp47Ds- z*V%EnX&77xRYM_qam!Kci8M zG%MyPM0v3JaRnA)d_w7ktck;iS!d41?sM!U09`*k+V6NIZqvLs7auI%Vt`H$aqO5) zALQ;t0^v3=9IeNzB3Xuu)0hR){=`&~^Z*?}s1S%Yxm~Zri`%Gl9%VD>=DUyOYyfOw z?Z%goP7|*sxR7~8V&Iwh(Z`66E|h{Lc&sH5#$fESx*|gAq}Sfu|fC+e4^s6A*M7=e49jmdS@4(hSDZ+kawsrdoZuNfekLhe|yaY=Y z4Y0#9$Gr>hSc!~xMEhk)X{3fc-Qmeh;Ao;s~uz3oi;@Tt9J)3 zRJ?sx(x4ZwWHy2tpa22F_Yv0q2(z7K(ABRZbPM}j#lOn#@^ywA7)qQpAeaGE6Qp2S z=zr1F-5}&aJiQi$Ay-6EU+WJdmdF`lNFG7jK!z;4t6863 zl4ps^f0IE8s%9Lne!PG}PTztk3_||p$)5C4?5oKw1cZd$L|spHxbfI#gzT9*0cV75?$PI>umyT}M%$ zW4Yft#y+JN2F?xn&tE@}VC_pwvG`VVxyR*;a!9Z}xEP~TKjT#%oM8|R1SiPUH&P+~ zB9Irpe{eA=X^1F%+sY(i|;zL=lG81JGTU&sA=btc&o9~{nuTm*@rSXV? zic+wA6Up@!#KSRYmZ@b@(*wFJ@+jF zZ@5vX&X)kSzW{sIo^(p#x9du5p3==2nzRm9eJd5pT)y(%!d$m( z5e#15qJ2cDTYqYj0cF5CF0`I?~|bzPb#L_DtiJSjx8SiesPyok`-;9r9U97zj-li{?h{srRtL1E8g zt1tuY8P>N_q$@srn)WkQ7!M0a-nB|z_y0z*9JRm|S~|Cq|0Z(f0yEEx zSd01ZAfc9f#0pki2XEP0fD3Vtq;*+OrGn#KxBvhTr+4l1ou1f~W~=57y!~KK1y=j#m8&G8`5#0hrNM>@67A-qX6Ko%w{VaD0#gO_a##UKX8NBu0El!LWb;8`Uv0 zeM3DGDmuUcU^1h0;F}^&=*<8Y%{6~zsK!dIZa@*Klkf97cu>y$=$7p9n`otMdH+ji zkWUyJ?i!QI17yJOAd4z@;*jZO_%HdZ{frW3Ou@Nmq_Z@6KS>bRm%jitbddLu%g+H2 z-w|QRf2lWZ<|2OHzH2dP)Qb_hNug7x_<^a~U<2kf2i4pVehyv4UN>af7$}_u7Uryk z3ZhH@1log74fY>?@$$G=hxsmwSpKByb*;+YtUvi+ZU`qPe$n&h+*^8{=voH8BA*N- zQ`@sya=t8)uk3gq&6C1!$|F(_IkzAyj}KF)x@S2=ee3ld82!;@lZQq#bvGfem%Ftm zi?S9LDontWTbz9k)ps3loe%N^YtKpCn7<^L{2=b5XCx)960Xy_G{@r4!)eppbyVIZ z$1jLI5iEa^>!`&f+FXX?y9?d9+rw-1Y>Sotp;P8N^#4JZZv@pe+Y8AUsPems()qz? z-J|XHm}mYmF>vB2NAGx!(1@`Fyuj9$$-ug=;}Ffi=NJp-tv&omrXbL{`X$HH&^>Q2 zLfo6HL<~f(uE#vWS1~f!>>b&21>CP|OV2Z;)({S)m#AJkoXDgN1z`Uv4UOMiY0uVQ|h2&~Jk03Z0=R0vV42XzZQu1o2C!f}@to;Q1D^aAEou>V#Ri z@oyZO*wP^KP<=;EIeZ8;;#OUQVK(%guq?(%!X4~ZTREx%tkXU)+V}-;FCEl_Ccr$W zf|a@~6-$u+mm0e#YI0=Zm*uLq+|Ed2N^xT-Oim8Is4prjsb&D^v zj8D=8KTPn#NwDQ_y_8A3P@VptaCwvx8N`k+nx+lO*#y_dkl+S(0AvA9TDvgQpj6D0 z7@op&-7>WWKaNQ#Tb0&SamH@q#0nbyw+yo}CV$B<=e7i~+{hq%5`mt4=BGRxSX1Dx z+~;JiO74b>wEY(qAw1b_xRwxE{(6Sy1#zgTjVWL$u`9QiN^n#?T1}A{MZ#I-VHSdb z6X^ag+6%8&U{!t{lcoHbmO`?0LS)rif?4Z zKNMrWwdvc-Rtz_>;mBl+#rz0;=|3~3Sxy3AVzU&kuGQ)BTpdj@JkpK)!E&Mucams{g367b_{nigb*@ET! zYWw0y^;Brn*NSmN0Wh2H7;<@yrWRD<*^!#^))~0a@Z0p+18nT?hp1|i;a#sWE?8Iv zq;ubi$2w@gWzKSS${AfpP@EMehVNyE=}?leK8X5B{|itv7Ov;;^470Uo^1bs76gs-k)rVv%u?TcY^ zDcJoSlALRd@^WCTDnG@dNAzar&J<__0FiuSa&4xCAB-r7PfoD_ e`WNNSp(WxAlEVN10006oSO5S3?~DKd0000O=2)2k literal 0 HcmV?d00001 diff --git a/src/user-guide/projects/runners.md b/src/user-guide/projects/runners.md index d97d905..7077809 100644 --- a/src/user-guide/projects/runners.md +++ b/src/user-guide/projects/runners.md @@ -7,6 +7,10 @@ Project Runners are a powerful feature in Semaphore Pro that enables distributed task execution across multiple servers. This feature allows you to run tasks on separate servers from your Semaphore UI instance, providing enhanced security, scalability, and resource management. + +![](<../../.gitbook/assets/project_runners.webp>) + + ## Overview Project runners operate on a similar principle to GitLab or GitHub Actions runners: From 54eb28c871eab103d5a9028be5a8dc9a7c754f2b Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 25 Jun 2025 12:26:19 +0500 Subject: [PATCH 145/170] feat: cli -> migrations --- src/SUMMARY.md | 1 + src/administration-guide/cli.md | 1 + src/administration-guide/cli/migrations.md | 31 ++++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/administration-guide/cli/migrations.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index e012f9c..8e43dca 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -25,6 +25,7 @@ * [Users](./administration-guide/cli/users.md) * [Vaults](./administration-guide/cli/vaults.md) * [Runners](./administration-guide/cli/runners.md) + * [Daatabase migrations](./administration-guide/cli/migrations.md) * [LDAP](./administration-guide/ldap.md) * [OpenID](./administration-guide/openid.md) * [GitHub config](./administration-guide/openid/github.md) diff --git a/src/administration-guide/cli.md b/src/administration-guide/cli.md index 8832440..7487aa0 100644 --- a/src/administration-guide/cli.md +++ b/src/administration-guide/cli.md @@ -4,6 +4,7 @@ * [Runners](./cli/runners.md) * [Users](./cli/users.md) * [Vaults](./cli/vaults.md) +* [Database migrations](./cli/migrations.md) ## Common config options diff --git a/src/administration-guide/cli/migrations.md b/src/administration-guide/cli/migrations.md new file mode 100644 index 0000000..db9f667 --- /dev/null +++ b/src/administration-guide/cli/migrations.md @@ -0,0 +1,31 @@ +

    + +# Database migrations + +Using CLI you can apply database migrations or undo them. + +``` +semaphore migrations --help +``` + +## Applying migrations + +### Applying all migrations +``` +semaphore migrate +``` + +### Applying migrations to specific version + +``` +semaphore migrate --apply-to +``` + +## Rolling back migrations + +``` +semaphore migrate --undo-to +``` \ No newline at end of file From 3a17f535a6caa8a2523dfaa08b0e6d0492b53a14 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 25 Jun 2025 12:31:48 +0500 Subject: [PATCH 146/170] feat(cli): docs for migation --- src/administration-guide/cli/migrations.md | 44 ++++++++++++++++++---- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/administration-guide/cli/migrations.md b/src/administration-guide/cli/migrations.md index db9f667..f4d075e 100644 --- a/src/administration-guide/cli/migrations.md +++ b/src/administration-guide/cli/migrations.md @@ -3,29 +3,59 @@ → Database migrations -# Database migrations +# Database Migrations -Using CLI you can apply database migrations or undo them. +Database migrations allow you to update or roll back your Semaphore database schema to match the requirements of different Semaphore versions. This is essential for upgrades, downgrades, and maintaining compatibility. + +## Getting Help + +To see all available migration commands and options, run: ``` semaphore migrations --help ``` -## Applying migrations +## Applying Migrations + +### Apply All Pending Migrations + +To apply all available migrations and bring your database up to date: -### Applying all migrations ``` semaphore migrate ``` -### Applying migrations to specific version +### Apply Migrations Up to a Specific Version + +To migrate your database schema up to a specific version, use: ``` semaphore migrate --apply-to ``` -## Rolling back migrations +- ``: The target migration version (e.g., `2.15` or `2.14.4`). + +**Example:** +``` +semaphore migrate --apply-to 2.15.1 +``` + +## Rolling Back Migrations + +To undo migrations and roll back your database schema to a previous version: ``` semaphore migrate --undo-to -``` \ No newline at end of file +``` + +- ``: The migration version you want to roll back to (e.g., `2.13` or `2.14.4`). + +**Example:** +``` +semaphore migrate --undo-to 2.13 +``` + +## Troubleshooting + +- Always back up your database before applying or rolling back migrations. +- If you encounter errors, check the logs for details and ensure your CLI version matches your Semaphore server version. From d6686f3faee65acb3901519abd08f4083096e554 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:58:34 +0200 Subject: [PATCH 147/170] feat(docker): add documentation for installing Python dependencies --- .../installation/docker.md | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/administration-guide/installation/docker.md b/src/administration-guide/installation/docker.md index a1aa830..dea2ec0 100644 --- a/src/administration-guide/installation/docker.md +++ b/src/administration-guide/installation/docker.md @@ -15,13 +15,13 @@ services: #restart: unless-stopped #image: postgres:14 #hostname: postgres - #volumes: + #volumes: # - semaphore-postgres:/var/lib/postgresql/data #environment: # POSTGRES_USER: semaphore # POSTGRES_PASSWORD: semaphore # POSTGRES_DB: semaphore - # if you wish to use postgres, comment the mysql service section below + # if you wish to use postgres, comment the mysql service section below mysql: restart: unless-stopped image: mysql:8.0 @@ -51,7 +51,7 @@ services: SEMAPHORE_ADMIN_EMAIL: admin@localhost SEMAPHORE_ADMIN: admin SEMAPHORE_ACCESS_KEY_ENCRYPTION: gs72mPntFATGJs9qK0pQ0rKtfidlexiMjYCH9gWKhTU= - SEMAPHORE_LDAP_ACTIVATED: 'no' # if you wish to use ldap, set to: 'yes' + SEMAPHORE_LDAP_ACTIVATED: 'no' # if you wish to use ldap, set to: 'yes' SEMAPHORE_LDAP_HOST: dc01.local.example.com SEMAPHORE_LDAP_PORT: '636' SEMAPHORE_LDAP_NEEDTLS: 'yes' @@ -87,6 +87,7 @@ services: ports: - 3000:3000 image: semaphoreui/semaphore:latest + environment: SEMAPHORE_ADMIN_PASSWORD_FILE: /run/secrets/semaphore_admin_pw SEMAPHORE_ADMIN_NAME: admin SEMAPHORE_ADMIN_EMAIL: admin@localhost @@ -100,4 +101,26 @@ Run the following command to start Semaphore with configured database (MySQL or docker-compose up ``` - Semaphore will be available via the following URL [http://localhost:3000](http://localhost:3000). \ No newline at end of file + Semaphore will be available via the following URL [http://localhost:3000](http://localhost:3000). + +## Installing Additional Python Dependencies + +When the Semaphore container starts, it can automatically install additional Python packages that you may need for your Ansible playbooks. To use this feature: + +1. Create a `requirements.txt` file with your Python dependencies +2. Mount this file to the container at the path specified by `SEMAPHORE_CONFIG_PATH` (defaults to `/etc/semaphore`) + +Example update to your `docker-compose.yml`: + +```yaml +services: + semaphore: + restart: unless-stopped + ports: + - 3000:3000 + image: semaphoreui/semaphore:latest + volumes: + - ./requirements.txt:/etc/semaphore/requirements.txt +``` + +During container startup, Semaphore will detect the `requirements.txt` file and automatically run `pip3 install --upgrade -r ${SEMAPHORE_CONFIG_PATH}/requirements.txt` to install the specified packages. From af34d1e2a51be21ff5d9c9b01d8410ade2d095d3 Mon Sep 17 00:00:00 2001 From: madic-creates <3735459+madic-creates@users.noreply.github.com> Date: Tue, 22 Jul 2025 17:01:28 +0200 Subject: [PATCH 148/170] Fixed typos --- src/SUMMARY.md | 2 +- src/administration-guide/configuration.md | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 8e43dca..bdb1219 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -12,7 +12,7 @@ * [Manual Installation](./administration-guide/installation\_manually.md) * [Configuration](./administration-guide/configuration.md) * [Configuration file](./administration-guide/configuration/config-file.md) - * [Envrioment variables](./administration-guide/configuration/env-vars.md) + * [Environment variables](./administration-guide/configuration/env-vars.md) * [Interactive setup](./administration-guide/configuration/cli.md) * [Snap configuration](./administration-guide/configuration/snap.md) * [Upgrading](./administration-guide/upgrading.md) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index 21c31cd..d3ece89 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -4,7 +4,7 @@ Semaphore can be configured using several methods: * [Interactive setup](./configuration/snap.md) — guided configuration when running Semaphore for the first time. It creates `config.json`. * [Configuration file](./configuration/config-file.md) — the primary and most flexible way to configure Semaphore. -* [Envrioment variables](./configuration/env-vars.md) — useful for containerized or cloud-native deployments. +* [Environment variables](./configuration/env-vars.md) — useful for containerized or cloud-native deployments. * [Snap configuration (deprecated)](./configuration/snap.md) — legacy method used when installing via Snap packages. @@ -84,5 +84,3 @@ For example you configured NGINX on the server which proxies queries to Semaphor Server address `https://example.com` and you proxies all queries `https://example.com/semaphore` to Semaphore. Your `web_host` will be `https://example.com/semaphore`. - - From f7e30bd104b7303f37fa4acb0f6f00f146626594 Mon Sep 17 00:00:00 2001 From: Philip Flohr Date: Tue, 29 Jul 2025 10:00:49 +0200 Subject: [PATCH 149/170] Fix typo in team.md --- src/user-guide/team.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user-guide/team.md b/src/user-guide/team.md index 7aba4d9..75eaa57 100644 --- a/src/user-guide/team.md +++ b/src/user-guide/team.md @@ -30,7 +30,7 @@ Below are detailed descriptions of each role and its permissions. - **Restrictions on self-removal**
    An Owner cannot remove themselves if they are the only Owner of the project. This prevents the project from being left without an Owner. -- **Managing other wwners**
    +- **Managing other owners**
    Owners can manage (including remove or change roles of) all team members, including other Owners. ### Manager From 803326c9d9dc44f987b208e1b27845dc4b10183b Mon Sep 17 00:00:00 2001 From: Bengt Giger Date: Thu, 7 Aug 2025 15:08:35 +0200 Subject: [PATCH 150/170] Added a note to use the Ansible prompt 'Limit' setting for API calls with limit option --- src/user-guide/task-templates/apps/ansible.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/user-guide/task-templates/apps/ansible.md b/src/user-guide/task-templates/apps/ansible.md index 2335d19..f0c2d82 100644 --- a/src/user-guide/task-templates/apps/ansible.md +++ b/src/user-guide/task-templates/apps/ansible.md @@ -34,6 +34,8 @@ An ansible-playbook template can be one of the following types: Just runs specified playbooks with specified parameters. +If you intend to launch the template with an API call with the *limit* feature, make sure to activate the option *Ansible prompts: Limit*. Otherwise the limit set in the API call will be ignored. For the API triggered task, this will not cause any interactive prompt, the task will run unattended. + ### Build This type of template should be used to create [artifacts](https://en.wikipedia.org/wiki/Artifact\_\(software\_development\)). The start version of the artifact can be specified in a template parameter. Each run increments the artifact version. From 69fed5d393957712cc2c2222f7c5f06d321e5bab Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 17 Aug 2025 23:54:13 +0500 Subject: [PATCH 151/170] feat: tf backend docs --- src/.gitbook/assets/tf_backend_override.webp | Bin 0 -> 101388 bytes .../task-templates/apps/terraform/states.md | 60 ++++++++++-------- 2 files changed, 35 insertions(+), 25 deletions(-) create mode 100644 src/.gitbook/assets/tf_backend_override.webp diff --git a/src/.gitbook/assets/tf_backend_override.webp b/src/.gitbook/assets/tf_backend_override.webp new file mode 100644 index 0000000000000000000000000000000000000000..16fe454d535a59e038c58f2f56c75fa6cb6cfac6 GIT binary patch literal 101388 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�uv%{c>ZMx!6Ol^&@A$ssHA6W%_+ZnECLSks1 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�a{)94^5FI#KP=5>CLf2 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 + +Optionally, you can specify the name of the configuration file that will be dynamically created during execution. This is useful if your code already contains a backend configuration file and you need to override it dynamically to work with Semaphore's built-in backend. + +### Using the HTTP backend outside Semaphore + +You can use the built-in HTTP backend not only when running tasks inside Semaphore, but also when executing Terraform code outside of Semaphore, such as from your local terminal. + +To enable this, Semaphore allows you to create aliases (unique HTTP endpoint) for your state storage. These aliases make it easy to reference your state files from external environments. + +To set this up, go to the **Workspaces** tab, select the desired workspace, and add an alias. You will also need to choose a key with a username and password, which will be used to authenticate access to the backend. + + + +After this, you need to add the backend settings to your Terraform code: + +``` terraform { backend "http" { - address = "https:///api/terraform/state/" - lock_address = "https:///api/terraform/state//lock" - unlock_address = "https:///api/terraform/state//lock" - username = "semaphore" - password = "" + address = "http://localhost:3000/api/terraform/***" + username = "***" + password = "***" } } ``` - - + \ No newline at end of file From 56a9b0f1578386c73653efd11c5ba4d65ed34829 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 18 Aug 2025 00:07:28 +0500 Subject: [PATCH 152/170] feat: tf backend docs --- .../task-templates/apps/terraform/states.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/user-guide/task-templates/apps/terraform/states.md b/src/user-guide/task-templates/apps/terraform/states.md index fa83fd2..d074cc1 100644 --- a/src/user-guide/task-templates/apps/terraform/states.md +++ b/src/user-guide/task-templates/apps/terraform/states.md @@ -57,9 +57,8 @@ terraform { } ``` - \ No newline at end of file +Now Terraform will use Semaphore's built-in HTTP backend even when running from your terminal: + +``` +terraform apply +``` From 65c22e67391ff32f314e9a71e215ac75807be0f9 Mon Sep 17 00:00:00 2001 From: princinv <79614477+princinv@users.noreply.github.com> Date: Wed, 20 Aug 2025 00:45:15 -0600 Subject: [PATCH 153/170] Update logs.md spellcheck: opitons --> options --- src/administration-guide/logs.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/administration-guide/logs.md b/src/administration-guide/logs.md index 321949a..9d374ff 100644 --- a/src/administration-guide/logs.md +++ b/src/administration-guide/logs.md @@ -73,7 +73,7 @@ The Activity (events) logging options allow you to configure how Semaphore recor | --------------------- | --------------------- | --------------------- | | `enabled` | `SEMAPHORE_EVENT_LOG_ENABLED` | Enable event logging to file. | | `format` | `SEMAPHORE_EVENT_LOG_FORMAT` | Log record format. Can be `raw` or `json`. | -| `logger` | `SEMAPHORE_EVENT_LOG_LOGGER` | [Logger opitons](#logger-options). | +| `logger` | `SEMAPHORE_EVENT_LOG_LOGGER` | [Logger options](#logger-options). | #### Tasks logging options @@ -83,13 +83,13 @@ The Tasks logging options allow you to configure how Semaphore records task exec | --------------------- | --------------------- | --------------------- | | `enabled` | `SEMAPHORE_TASK_LOG_ENABLED` | Enable task logging to file. | | `format` | `SEMAPHORE_TASK_LOG_FORMAT` | Log record format. Can be `raw` or `json`. | -| `logger` | `SEMAPHORE_TASK_LOG_LOGGER` | [Logger opitons](#logger-options). | +| `logger` | `SEMAPHORE_TASK_LOG_LOGGER` | [Logger options](#logger-options). | #### Task results logging options | Parameter | Environment Variables | Description | | --------------------- | --------------------- | --------------------- | -| `result_logger` | `SEMAPHORE_TASK_RESULT_LOGGER` | Logger opitons. | +| `result_logger` | `SEMAPHORE_TASK_RESULT_LOGGER` | Logger options. | #### Logger options @@ -144,4 +144,4 @@ When the number of tasks exceeds this limit, the oldest Task Logs are automatica - **Activity and tasks log:** Tracks all user actions. Optionally, **Pro 2.10+** can write these to a file. - **Task history:** Stores real-time and historical task execution logs. Retention is configurable per template. -Following these guidelines ensures you have proper visibility into Semaphore UI operations while controlling storage usage and log retention. \ No newline at end of file +Following these guidelines ensures you have proper visibility into Semaphore UI operations while controlling storage usage and log retention. From 0111a0de72187dc16eb538d72e3b51d3d0fe6e96 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 22 Aug 2025 23:19:26 +0500 Subject: [PATCH 154/170] Create zitadel.md --- src/administration-guide/openid/zitadel.md | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/administration-guide/openid/zitadel.md diff --git a/src/administration-guide/openid/zitadel.md b/src/administration-guide/openid/zitadel.md new file mode 100644 index 0000000..9e0fa92 --- /dev/null +++ b/src/administration-guide/openid/zitadel.md @@ -0,0 +1,25 @@ + + +# Zitadel config + +`config.json`: +```json +{ + "oidc_providers": { + "zitadel": + { + "provider_url": "https://your-domain.zitadel.cloud", + "display_name": "ZITADEL", + "client_id": "***", + "client_secret": "***", + "redirect_url": "https://your-domain.com:3000/api/auth/oidc/zitadel/redirect", + "email_claim": "email" + }, + } +} +``` + +Tutorial on Zitadel: [OpenID Connect Endpoints in ZITADEL](https://zitadel.com/docs/apis/openidoauth/endpoints). From 9235cddfdd5dccbcf325c550ebfd1de57515ef11 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 22 Aug 2025 23:26:00 +0500 Subject: [PATCH 155/170] Update zitadel.md --- src/administration-guide/openid/zitadel.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/administration-guide/openid/zitadel.md b/src/administration-guide/openid/zitadel.md index 9e0fa92..11aad01 100644 --- a/src/administration-guide/openid/zitadel.md +++ b/src/administration-guide/openid/zitadel.md @@ -23,3 +23,6 @@ ``` Tutorial on Zitadel: [OpenID Connect Endpoints in ZITADEL](https://zitadel.com/docs/apis/openidoauth/endpoints). + +# Known issues: +* to avoid error `claim 'email' missing or has bad format` add user Info inside ID Token in the Zitadel console. From b2e7621ac45fc34be2d095de6200ec19d9f12abe Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 23 Aug 2025 17:55:44 +0500 Subject: [PATCH 156/170] feat: config examples --- src/.gitbook/assets/swagger-link.webp | Bin 0 -> 13136 bytes src/SUMMARY.md | 8 ++++++- src/administration-guide/api.md | 4 +++- src/administration-guide/notifications.md | 7 +++--- .../notifications/email.md | 20 ++++++++++++++++++ .../notifications/slack.md | 7 ++++++ .../notifications/teams.md | 7 ++++++ .../notifications/telegram.md | 18 ++++++++++++++++ src/administration-guide/openid.md | 1 + src/administration-guide/openid/zitadel.md | 3 ++- 10 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 src/.gitbook/assets/swagger-link.webp create mode 100644 src/administration-guide/notifications/email.md create mode 100644 src/administration-guide/notifications/slack.md create mode 100644 src/administration-guide/notifications/teams.md create mode 100644 src/administration-guide/notifications/telegram.md diff --git a/src/.gitbook/assets/swagger-link.webp b/src/.gitbook/assets/swagger-link.webp new file mode 100644 index 0000000000000000000000000000000000000000..bb9632bb6149e47a3559f0f57ce3bc013cda972e GIT binary patch literal 13136 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 ORAu$w+rfYB_1^$1M{b7z literal 0 HcmV?d00001 diff --git a/src/SUMMARY.md b/src/SUMMARY.md index bdb1219..3b79dee 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -25,7 +25,7 @@ * [Users](./administration-guide/cli/users.md) * [Vaults](./administration-guide/cli/vaults.md) * [Runners](./administration-guide/cli/runners.md) - * [Daatabase migrations](./administration-guide/cli/migrations.md) + * [Database migrations](./administration-guide/cli/migrations.md) * [LDAP](./administration-guide/ldap.md) * [OpenID](./administration-guide/openid.md) * [GitHub config](./administration-guide/openid/github.md) @@ -36,11 +36,17 @@ * [Keycloak config](./administration-guide/openid/keycloak.md) * [Okta config](./administration-guide/openid/okta.md) * [Azure config](./administration-guide/openid/azure.md) + * [Zitadel config](./administration-guide/openid/zitadel.md) * [API](./administration-guide/api.md) * [Pipelines](./administration-guide/cicd.md) * [Runners](./administration-guide/runners.md) * [Logs](./administration-guide/logs.md) * [Notifications](./administration-guide/notifications.md) + * [Email](./administration-guide/notifications/email.md) + * [Telegram](./administration-guide/notifications/telegram.md) + * [Slack](./administration-guide/notifications/slack.md) + * [Teams](./administration-guide/notifications/teams.md) + * [User Guide]() * [Projects](./user-guide/projects.md) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 96ca850..f011f6b 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -5,7 +5,9 @@ Semaphore UI provides two formats of API documentation, so you can choose the one that fits your workflow best: * [Swagger/OpenAPI](https://semaphoreui.com/api-docs) — ideal if you prefer an interactive, browser-based experience. -* **Built-in Swagger API documentation (PRO)** — interactive API documentation powered by Swagger UI. You can access it by navigating to `/swagger/index.html` on your Semaphore instance (e.g., `http://localhost:3000/swagger/index.html`). +* **Built-in Swagger API documentation** — interactive API documentation powered by Swagger UI. You can access on **API Tokens** page on your Semaphore instance. + + ![](<../.gitbook/assets/swagger-link.webp>) Both options include complete documentation of available endpoints, parameters, and example responses. diff --git a/src/administration-guide/notifications.md b/src/administration-guide/notifications.md index cc3cae2..fd79a37 100644 --- a/src/administration-guide/notifications.md +++ b/src/administration-guide/notifications.md @@ -2,9 +2,10 @@ Semaphore UI supports following notifications: -* email -* slack -* telegram +* [Email](/administration-guide/notifications/email) +* [Slack](/administration-guide/notifications/slack) +* [Telegram](/administration-guide/notifications/telegram) +* [Teams](/administration-guide/notifications/teams) ## Telegram diff --git a/src/administration-guide/notifications/email.md b/src/administration-guide/notifications/email.md new file mode 100644 index 0000000..32d7265 --- /dev/null +++ b/src/administration-guide/notifications/email.md @@ -0,0 +1,20 @@ + + +# Email notifications + +Example `config.json` for configuring AWS SMTP email notifications: + +```json +{ + "email_alert": true, + "email_sender": "noreply@example.com", + "email_host": "email-smtp.us-east-1.amazonaws.com", + "email_port": "587", + "email_secure": true, + "email_username": "", + "email_password": "", +} +``` \ No newline at end of file diff --git a/src/administration-guide/notifications/slack.md b/src/administration-guide/notifications/slack.md new file mode 100644 index 0000000..7a6a031 --- /dev/null +++ b/src/administration-guide/notifications/slack.md @@ -0,0 +1,7 @@ + + +# Slack notifications + diff --git a/src/administration-guide/notifications/teams.md b/src/administration-guide/notifications/teams.md new file mode 100644 index 0000000..b304565 --- /dev/null +++ b/src/administration-guide/notifications/teams.md @@ -0,0 +1,7 @@ + + +# Teams notifications + diff --git a/src/administration-guide/notifications/telegram.md b/src/administration-guide/notifications/telegram.md new file mode 100644 index 0000000..4a5430e --- /dev/null +++ b/src/administration-guide/notifications/telegram.md @@ -0,0 +1,18 @@ + + +# Telegram notifications + +`config.json` example: + +```json +{ + "telegram_alert": true, + "telegram_token": "64********:AAG****_rM6obyR********************", + "telegram_chat": "", +} +``` + +You can override the default Chat ID for each project in the project settings page. \ No newline at end of file diff --git a/src/administration-guide/openid.md b/src/administration-guide/openid.md index cbcb2e9..f580215 100644 --- a/src/administration-guide/openid.md +++ b/src/administration-guide/openid.md @@ -12,6 +12,7 @@ Links: * [Keycloak config](./openid/keycloak.md) * [Okta config](./openid/okta.md) * [Azure config](./openid/azure.md) +* [Zitadel config](./openid/zitadel.md) Example of SSO provider configuration: diff --git a/src/administration-guide/openid/zitadel.md b/src/administration-guide/openid/zitadel.md index 11aad01..a0e1ae6 100644 --- a/src/administration-guide/openid/zitadel.md +++ b/src/administration-guide/openid/zitadel.md @@ -24,5 +24,6 @@ Tutorial on Zitadel: [OpenID Connect Endpoints in ZITADEL](https://zitadel.com/docs/apis/openidoauth/endpoints). -# Known issues: +## Known issues: + * to avoid error `claim 'email' missing or has bad format` add user Info inside ID Token in the Zitadel console. From b22f738472c49a603d9897f80672c84404c4df08 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 23 Aug 2025 18:08:59 +0500 Subject: [PATCH 157/170] fix: titles --- src/administration-guide/notifications.md | 53 ++++--------------- .../notifications/ding.md | 15 ++++++ .../notifications/email.md | 5 +- .../notifications/gotify.md | 16 ++++++ .../notifications/rocket.md | 15 ++++++ .../notifications/slack.md | 10 +++- .../notifications/teams.md | 12 ++++- .../notifications/telegram.md | 44 ++++++++++++++- 8 files changed, 122 insertions(+), 48 deletions(-) create mode 100644 src/administration-guide/notifications/ding.md create mode 100644 src/administration-guide/notifications/gotify.md create mode 100644 src/administration-guide/notifications/rocket.md diff --git a/src/administration-guide/notifications.md b/src/administration-guide/notifications.md index fd79a37..30a3b6a 100644 --- a/src/administration-guide/notifications.md +++ b/src/administration-guide/notifications.md @@ -1,52 +1,21 @@ # Notifications -Semaphore UI supports following notifications: +Semaphore can send notifications about task and project activity to popular channels. Configure a global notifier in `config.json`, and (where supported) override certain options per project. + +Supported providers: * [Email](/administration-guide/notifications/email) * [Slack](/administration-guide/notifications/slack) * [Telegram](/administration-guide/notifications/telegram) -* [Teams](/administration-guide/notifications/teams) - -## Telegram - -### Pre-requisites - -In order to configure Semaphore UI to send alerts via Telegram, a few steps are required beforehand on the Telegram side. You'll need to create your own bot that will receive the webhook and you'll need to know the ID of the chat you want to send the message to. - -#### Bot setup - -The easiest way to set up your own bot is to use @BotFather. - -1. In your Telegram client, message @BotFather with `/start`. -1. Follow the prompts to create a new bot and take note of the Authorization Token given in the last step. Note: this token is secret and should be treated as such. -1. Message your new bot with `/start` to start the bot so it can receive messages. - -#### Chat ID - -1. In your Telegram client, message @RawDataBot with any message. -1. Copy the value for the `id` key in the `chat` map. - -#### Testing - -You can use cURL to validate your settings above as follows: - -``` -curl -X POST https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage \ - -d chat_id=YOUR_CHAT_ID \ - -d text="Test message from curl" -``` - -### Configuration - -Using the Chat ID and Token from the previous steps, you can now configure Semaphore UI to send Telegram Alerts as follows: +* [Microsoft Teams](/administration-guide/notifications/teams) +* [RocketChat](/administration-guide/notifications/rocket) +* [DingTalk](/administration-guide/notifications/ding) +* [Gotify](/administration-guide/notifications/gotify) -``` -telegram_alert: True -telegram_chat: -telegram_token: -``` +## How it works -### Per-project Chat IDs +- **Global configuration**: Enable a provider and set its connection options in `config.json` on the Semaphore server. See each provider page for the exact keys. +- **Events**: Notifications are sent on key task lifecycle events (e.g., start, success, failure) and are posted to the configured channel/webhook. +- **Per-project overrides**: Some providers allow per-project overrides. For example, Telegram supports a project-specific chat ID. -Each project can use a unique Chat ID. This allows you to separate notifications by project rather than have them all go to the same chat. This overrides the global Chat ID from above. diff --git a/src/administration-guide/notifications/ding.md b/src/administration-guide/notifications/ding.md new file mode 100644 index 0000000..6e210a2 --- /dev/null +++ b/src/administration-guide/notifications/ding.md @@ -0,0 +1,15 @@ + + +# DingTalk notifications + +`config.json` example: + +```json +{ + "dingtalk_alert": true, + "dingtalk_url": "...", +} +``` \ No newline at end of file diff --git a/src/administration-guide/notifications/email.md b/src/administration-guide/notifications/email.md index 32d7265..7723e86 100644 --- a/src/administration-guide/notifications/email.md +++ b/src/administration-guide/notifications/email.md @@ -17,4 +17,7 @@ Example `config.json` for configuring AWS SMTP email notifications: "email_username": "", "email_password": "", } -``` \ No newline at end of file +``` + +Explanation of key setting: +* `email_secure` — enables **StartTLS** to upgrade the connection to a secure, encrypted channel. \ No newline at end of file diff --git a/src/administration-guide/notifications/gotify.md b/src/administration-guide/notifications/gotify.md new file mode 100644 index 0000000..a3c4408 --- /dev/null +++ b/src/administration-guide/notifications/gotify.md @@ -0,0 +1,16 @@ + + +# Gotify notifications + +`config.json` example: + +```json +{ + "gotify_alert": true, + "gotify_url": "...", + "gotify_token": "***", +} +``` \ No newline at end of file diff --git a/src/administration-guide/notifications/rocket.md b/src/administration-guide/notifications/rocket.md new file mode 100644 index 0000000..63546ab --- /dev/null +++ b/src/administration-guide/notifications/rocket.md @@ -0,0 +1,15 @@ + + +# RocketChat notifications + +`config.json` example: + +```json +{ + "rocketchat_alert": true, + "rocketchat_url": "...", +} +``` \ No newline at end of file diff --git a/src/administration-guide/notifications/slack.md b/src/administration-guide/notifications/slack.md index 7a6a031..24e84cc 100644 --- a/src/administration-guide/notifications/slack.md +++ b/src/administration-guide/notifications/slack.md @@ -1,7 +1,15 @@ # Slack notifications +`config.json` example: + +```json +{ + "slack_alert": true, + "slack_url": "...", +} +``` \ No newline at end of file diff --git a/src/administration-guide/notifications/teams.md b/src/administration-guide/notifications/teams.md index b304565..cd6d9b8 100644 --- a/src/administration-guide/notifications/teams.md +++ b/src/administration-guide/notifications/teams.md @@ -1,7 +1,15 @@ -# Teams notifications +# Microsoft Teams notifications +`config.json` example: + +```json +{ + "microsoft_teams_alert": true, + "microsoft_teams_url": "...", +} +``` diff --git a/src/administration-guide/notifications/telegram.md b/src/administration-guide/notifications/telegram.md index 4a5430e..a291dfd 100644 --- a/src/administration-guide/notifications/telegram.md +++ b/src/administration-guide/notifications/telegram.md @@ -1,10 +1,47 @@ # Telegram notifications +### Pre-requisites + +In order to configure Semaphore UI to send alerts via Telegram, a few steps are required beforehand on the Telegram side. You'll need to create your own bot that will receive the webhook and you'll need to know the ID of the chat you want to send the message to. + +#### Bot setup + +The easiest way to set up your own bot is to use @BotFather. + +1. In your Telegram client, message @BotFather with `/start`. +1. Follow the prompts to create a new bot and take note of the Authorization Token given in the last step. Note: this token is secret and should be treated as such. +1. Message your new bot with `/start` to start the bot so it can receive messages. + +#### Chat ID + +1. In your Telegram client, message @RawDataBot with any message. +1. Copy the value for the `id` key in the `chat` map. + +#### Testing + +You can use cURL to validate your settings above as follows: + +``` +curl -X POST https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage \ + -d chat_id=YOUR_CHAT_ID \ + -d text="Test message from curl" +``` + +### Configuration + +Using the Chat ID and Token from the previous steps, you can now configure Semaphore UI to send Telegram Alerts as follows: + +``` +telegram_alert: True +telegram_chat: +telegram_token: +``` + `config.json` example: ```json @@ -15,4 +52,7 @@ } ``` -You can override the default Chat ID for each project in the project settings page. \ No newline at end of file + +### Per-project Chat IDs + +Each project can use a unique Chat ID. This allows you to separate notifications by project rather than have them all go to the same chat. This overrides the global Chat ID from above. \ No newline at end of file From 6d2ac7d577a4feb4c9dd888d26b87a999c9f6a3d Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 24 Aug 2025 10:58:52 +0500 Subject: [PATCH 158/170] feat: add cloud page --- src/SUMMARY.md | 10 ++- src/administration-guide/README.md | 62 +++++++++++++++++++ src/administration-guide/installation.md | 4 ++ .../installation/cloud.md | 22 +++++++ 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/administration-guide/README.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 3b79dee..09354e8 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -2,10 +2,11 @@ * [Welcome to Semaphore UI](./README.md) -* [Admin Guide]() +* [Admin Guide](./administration-guide/README.md) * [Installation](./administration-guide/installation.md) * [Package manager](./administration-guide/installation/package-manager.md) * [Docker](./administration-guide/installation/docker.md) + * [Cloud](./administration-guide/installation/cloud.md) * [Binary file](./administration-guide/installation/binary-file.md) * [Kubernetes (Helm chart)](./administration-guide/installation/k8s.md) * [Snap (deprecated)](./administration-guide/installation/snap.md) @@ -21,6 +22,7 @@ * [Network security](./administration-guide/security/network.md) * [NGINX config](./administration-guide/security/nginx.md) * [Apache config](./administration-guide/security/apache.md) + * [Kerberos](./administration-guide/security/kerberos.md) * [CLI](./administration-guide/cli.md) * [Users](./administration-guide/cli/users.md) * [Vaults](./administration-guide/cli/vaults.md) @@ -31,6 +33,7 @@ * [GitHub config](./administration-guide/openid/github.md) * [Google config](./administration-guide/openid/google.md) * [GitLab config](./administration-guide/openid/gitlab.md) + * [Gitea config](./administration-guide/openid/gitea.md) * [Authelia config](./administration-guide/openid/authelia.md) * [Authentik config](./administration-guide/openid/authentik.md) * [Keycloak config](./administration-guide/openid/keycloak.md) @@ -46,6 +49,11 @@ * [Telegram](./administration-guide/notifications/telegram.md) * [Slack](./administration-guide/notifications/slack.md) * [Teams](./administration-guide/notifications/teams.md) + * [Rocket.Chat](./administration-guide/notifications/rocket.md) + * [DingTalk](./administration-guide/notifications/ding.md) + * [Gotify](./administration-guide/notifications/gotify.md) + + * [Troubleshooting](./administration-guide/troubleshooting.md) * [User Guide]() diff --git a/src/administration-guide/README.md b/src/administration-guide/README.md new file mode 100644 index 0000000..11895a4 --- /dev/null +++ b/src/administration-guide/README.md @@ -0,0 +1,62 @@ +# Administration Guide + +Use this guide to install, configure, secure, operate, and upgrade Semaphore. + +## Start here + +- Installation options: package manager, Docker/Compose, binary, Kubernetes (Helm), Snap (deprecated) +- Post-install configuration: config file, environment variables, interactive CLI setup +- Security essentials: reverse proxy, TLS, database and network hardening +- Authentication: LDAP and OpenID Connect providers +- Operations: CLI, runners, logs, notifications +- Maintenance: upgrading and troubleshooting + +## Quick links + +- Installation: [Overview](./installation.md) + - [Package manager](./installation/package-manager.md) + - [Docker](./installation/docker.md) + - [Binary file](./installation/binary-file.md) + - [Kubernetes (Helm chart)](./installation/k8s.md) + - [Cloud](./installation/cloud.md) + - [Snap (deprecated)](./installation/snap.md) + - [Manual installation](./installation_manually.md) +- Configuration: [Overview](./configuration.md) + - [Configuration file](./configuration/config-file.md) + - [Environment variables](./configuration/env-vars.md) + - [Interactive setup](./configuration/cli.md) + - [Snap configuration](./configuration/snap.md) +- Security: [Overview](./security.md) + - [Database security](./security/database.md) + - [Network security](./security/network.md) + - [NGINX config](./security/nginx.md) + - [Apache config](./security/apache.md) + - [Kerberos](./security/kerberos.md) +- Authentication: + - [LDAP](./ldap.md) + - [OpenID](./openid.md) + - [GitHub](./openid/github.md) + - [Google](./openid/google.md) + - [GitLab](./openid/gitlab.md) + - [Gitea](./openid/gitea.md) + - [Authelia](./openid/authelia.md) + - [Authentik](./openid/authentik.md) + - [Keycloak](./openid/keycloak.md) + - [Okta](./openid/okta.md) + - [Azure](./openid/azure.md) + - [Zitadel](./openid/zitadel.md) +- Operations: + - [CLI](./cli.md) + - [Runners](./runners.md) + - [Logs](./logs.md) + - [Notifications](./notifications.md) + - [Email](./notifications/email.md) + - [Telegram](./notifications/telegram.md) + - [Slack](./notifications/slack.md) + - [Teams](./notifications/teams.md) + - [Rocket.Chat](./notifications/rocket.md) + - [DingTalk](./notifications/ding.md) + - [Gotify](./notifications/gotify.md) +- Maintenance: + - [Upgrading](./upgrading.md) + - [Troubleshooting](./troubleshooting.md) diff --git a/src/administration-guide/installation.md b/src/administration-guide/installation.md index 541513a..ea11117 100644 --- a/src/administration-guide/installation.md +++ b/src/administration-guide/installation.md @@ -10,6 +10,10 @@ You can install Semaphore in multiple ways, depending on your operating system, Run Semaphore as a container using Docker or Docker Compose. Ideal for fast setup, sandboxed environments, and CI/CD pipelines. Recommended for users who prefer infrastructure as code.
    [Learn more »](./installation/docker) +* **Cloud**
    + Guidance for deploying Semaphore to cloud platforms using VMs, containers, or Kubernetes with managed services.
    + [Learn more »](./installation/cloud) + * **Binary file**
    Download a precompiled binary from the releases page. Great for manual installation or embedding in custom workflows. Works across Linux, macOS, and Windows (via WSL).
    [Learn more »](./installation/binary-file) diff --git a/src/administration-guide/installation/cloud.md b/src/administration-guide/installation/cloud.md index e69de29..7c11598 100644 --- a/src/administration-guide/installation/cloud.md +++ b/src/administration-guide/installation/cloud.md @@ -0,0 +1,22 @@ +# Cloud deployment + +You can run Semaphore in any cloud environment using the same supported installation methods: + +- Virtual machines: install via package manager or binary, and run behind a reverse proxy such as NGINX. Use a managed database (e.g., Amazon RDS, Cloud SQL) for reliability. +- Containers: deploy with Docker or Docker Compose on a VM or container service. See persistent volumes and environment configuration in the Docker guide. +- Kubernetes: deploy with the official Helm chart. Use cloud storage classes and managed databases. + +Essentials: + +- Configure external URL and TLS at your load balancer or reverse proxy. +- Store sensitive values (DB credentials, OAuth secrets) in a secure secret manager or Kubernetes Secrets. +- Use managed databases for production and enable regular backups. +- Put runners close to your workloads to reduce latency and egress. + +Related guides: + +- [Docker](../installation/docker.md) +- [Kubernetes (Helm chart)](../installation/k8s.md) +- [Binary file](../installation/binary-file.md) +- [Security hardening](../security.md) + From 9811d868dc194e645f7998ebc5988f55e5f0b120 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 24 Aug 2025 11:09:00 +0500 Subject: [PATCH 159/170] feat: add missed pages to navigation --- src/SUMMARY.md | 5 ++++- src/user-guide/README.md | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/user-guide/README.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 09354e8..4dd61d7 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -56,7 +56,7 @@ * [Troubleshooting](./administration-guide/troubleshooting.md) -* [User Guide]() +* [User Guide](./user-guide/README.md) * [Projects](./user-guide/projects.md) * [History](./user-guide/projects/history.md) * [Activity](./user-guide/projects/activity.md) @@ -70,11 +70,14 @@ * [Shell/Bash scripts](./user-guide/task-templates/apps/bash.md) * [PowerShell](./user-guide/task-templates/apps/powershell.md) * [Python](./user-guide/task-templates/apps/python.md) + * [Survey Variables](./user-guide/task-templates/survey-vars.md) * [Tasks](./user-guide/tasks.md) * [Schedules](./user-guide/schedules.md) * [Key Store](./user-guide/key-store.md) + * [GitLab](./user-guide/key-store/gitlab.md) * [Inventory](./user-guide/inventory.md) * [Kerberos](./user-guide/inventory/kerberos.md) + * [NetBox dynamic inventory](./user-guide/netbox-dynamic-inventory.md) * [Variable Groups](./user-guide/environment.md) * [Repositories](./user-guide/repositories.md) * [Bitbucket Access Token](./user-guide/repositories/bitbucket_access_token.md) diff --git a/src/user-guide/README.md b/src/user-guide/README.md new file mode 100644 index 0000000..eabfe9a --- /dev/null +++ b/src/user-guide/README.md @@ -0,0 +1,43 @@ +# User Guide + +Learn how to use Semaphore day-to-day: create projects, run tasks, manage inventories, keys, variables, and more. + +## Start here + +- Organize work with projects and teams +- Connect repositories and key store +- Define inventories and variable groups +- Create task templates and run tasks on schedule + +## Quick links + +- Projects: [Overview](./projects.md) + - [History](./projects/history.md) + - [Activity](./projects/activity.md) + - [Settings](./projects/settings.md) + - [Runners (Pro)](./projects/runners.md) +- Tasks and schedules: + - [Tasks](./tasks.md) + - [Schedules](./schedules.md) +- Task Templates: [Overview](./task-templates/README.md) + - [Ansible](./task-templates/apps/ansible.md) + - [Terraform/OpenTofu](./task-templates/apps/terraform.md) + - [Workspaces](./task-templates/apps/terraform/workspaces.md) + - [HTTP Backend (Pro)](./task-templates/apps/terraform/states.md) + - [Shell/Bash scripts](./task-templates/apps/bash.md) + - [PowerShell](./task-templates/apps/powershell.md) + - [Python](./task-templates/apps/python.md) + - [Survey Variables](./task-templates/survey-vars.md) +- Variables and secrets: + - [Variable Groups](./environment.md) + - [Key Store](./key-store.md) + - [GitLab](./key-store/gitlab.md) +- Inventory: + - [Inventory](./inventory.md) + - [Kerberos](./inventory/kerberos.md) + - [NetBox dynamic inventory](./netbox-dynamic-inventory.md) +- Repositories: + - [Repositories](./repositories.md) + - [Bitbucket Access Token](./repositories/bitbucket_access_token.md) +- Integrations: [Overview](./integrations.md) +- Team management: [Overview](./team.md) From 3eef176ab09759d9b9578634149ac17deb545fe3 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 24 Aug 2025 11:23:56 +0500 Subject: [PATCH 160/170] feat: sync docs with release notes --- src/administration-guide/api.md | 4 +- src/administration-guide/cli/users.md | 18 ++++++++ src/administration-guide/cli/vaults.md | 4 ++ src/administration-guide/configuration.md | 2 +- .../configuration/config-file.md | 4 ++ .../configuration/env-vars.md | 42 +++++++++++++++++++ .../installation/docker.md | 3 ++ .../notifications/email.md | 6 ++- src/administration-guide/openid.md | 15 +++++++ src/administration-guide/runners.md | 4 ++ src/administration-guide/security.md | 4 +- src/user-guide/environment.md | 2 +- src/user-guide/integrations.md | 8 ++++ src/user-guide/projects/history.md | 4 ++ src/user-guide/projects/settings.md | 9 ++++ src/user-guide/schedules.md | 6 +++ src/user-guide/task-templates/README.md | 6 +++ src/user-guide/task-templates/apps/ansible.md | 18 ++++++++ .../task-templates/apps/terraform.md | 16 ++++++- src/user-guide/tasks.md | 4 ++ 20 files changed, 171 insertions(+), 8 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index f011f6b..6062108 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -5,7 +5,7 @@ Semaphore UI provides two formats of API documentation, so you can choose the one that fits your workflow best: * [Swagger/OpenAPI](https://semaphoreui.com/api-docs) — ideal if you prefer an interactive, browser-based experience. -* **Built-in Swagger API documentation** — interactive API documentation powered by Swagger UI. You can access on **API Tokens** page on your Semaphore instance. +* **Built-in Swagger API documentation** — interactive API documentation powered by Swagger UI. You can access it on your instance. ![](<../.gitbook/assets/swagger-link.webp>) @@ -23,7 +23,7 @@ Authorization: Bearer YOUR_API_TOKEN ### Creating an API Token There are two ways to create an API token: -- Through the web interface (since 2.14) +- Through the web interface - Using HTTP request #### Through the web interface (since 2.14) diff --git a/src/administration-guide/cli/users.md b/src/administration-guide/cli/users.md index 9795446..b7a7198 100644 --- a/src/administration-guide/cli/users.md +++ b/src/administration-guide/cli/users.md @@ -29,3 +29,21 @@ semaphore user change-by-login \ --login myAdmin \ --password "New$Password" ``` + +## TOTP management + +Manage time-based one-time password (2FA) via CLI: + +``` +semaphore user totp --help +``` + +Examples: + +``` +# Enable TOTP for a user +semaphore user totp enable --login john + +# Generate recovery codes (if allowed by config) +semaphore user totp recovery --login john +``` diff --git a/src/administration-guide/cli/vaults.md b/src/administration-guide/cli/vaults.md index 8e0e895..c587376 100644 --- a/src/administration-guide/cli/vaults.md +++ b/src/administration-guide/cli/vaults.md @@ -12,3 +12,7 @@ semaphore vault rekey --old-key ``` Your data will be decryped using `` and will be encrypted using option `access_key_encryption` from configuration key. + +#### Multiple vault passwords (Ansible) + +You can define multiple Ansible Vault passwords in the Key Store and attach them to an Ansible template. During execution, Semaphore will provide all configured passwords to Ansible so it can decrypt any referenced vaults. diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index d3ece89..026a386 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -23,7 +23,7 @@ Full list of available configuration options: |
    `postgres.name`
    `SEMAPHORE_DB_NAME`

    | Postgres database (schema) name. | |
    `postgres.user`
    `SEMAPHORE_DB_USER`

    | Postgres user name. | |
    `postgres.pass`
    `SEMAPHORE_DB_PASS`

    | Postgres user's password. | -|
    `dialect`
    `SEMAPHORE_DB_DIALECT`

    | Can be `mysql`, `postgres `or `bolt` | +|
    `dialect`
    `SEMAPHORE_DB_DIALECT`

    | Can be `sqlite` (default), `postgres`, `mysql` or `bolt` (deprecated). | |
    `git_client`
    `SEMAPHORE_GIT_CLIENT`

    | | |
    `ssh_config_path`
    `SEMAPHORE_SSH_PATH`

    | | |
    `port`
    `SEMAPHORE_PORT`

    | TCP port on which the web interface will be available. Default: 3000 | diff --git a/src/administration-guide/configuration/config-file.md b/src/administration-guide/configuration/config-file.md index 949c2f9..bb4fc25 100644 --- a/src/administration-guide/configuration/config-file.md +++ b/src/administration-guide/configuration/config-file.md @@ -63,6 +63,10 @@ Semaphore uses a `config.json` configuration file with following content: "max_tasks_per_template": 3, + "schedule": { + "timezone": "UTC" + }, + "log": { "events": { "enabled": true, diff --git a/src/administration-guide/configuration/env-vars.md b/src/administration-guide/configuration/env-vars.md index 54c4037..c8443b0 100644 --- a/src/administration-guide/configuration/env-vars.md +++ b/src/administration-guide/configuration/env-vars.md @@ -5,3 +5,45 @@ With using environment variables you can override any available configuration op You can use interactive evnvironment variables generator (for Docker): * for [server](https://semaphoreui.com/install/docker/2_12/) * for [runner](https://semaphoreui.com/install/docker/2_12/runner). + +--- + +## Application environment for apps (Ansible, Terraform, etc.) + +Semaphore can pass environment variables to application processes (Ansible, Terraform/OpenTofu, Python, PowerShell, etc.). There are two related options: + +- `env_vars` / `SEMAPHORE_ENV_VARS`: static key-value pairs that will be set for app processes. +- `forwarded_env_vars` / `SEMAPHORE_FORWARDED_ENV_VARS`: a list of variable names the server will forward from its own process environment. + +Example configuration file: + +```json +{ + "env_vars": { + "HTTP_PROXY": "http://proxy.internal:3128", + "ANSIBLE_STDOUT_CALLBACK": "yaml" + }, + "forwarded_env_vars": [ + "AWS_ACCESS_KEY_ID", + "AWS_SECRET_ACCESS_KEY", + "GOOGLE_APPLICATION_CREDENTIALS" + ] +} +``` + +Equivalent with environment variables: + +```bash +export SEMAPHORE_ENV_VARS='{"HTTP_PROXY":"http://proxy.internal:3128","ANSIBLE_STDOUT_CALLBACK":"yaml"}' +export SEMAPHORE_FORWARDED_ENV_VARS='["AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","GOOGLE_APPLICATION_CREDENTIALS"]' +``` + +Notes: +- Forwarding is explicit: only variables listed in `forwarded_env_vars` are inherited by app processes. +- Secrets should be provided securely (for example via Docker/Kubernetes secrets) and then forwarded using `forwarded_env_vars`. + +--- + +## Secret environment variables in Variable Groups + +In addition to global environment variables, you can define per-project secrets in Variable Groups. Secret keys are masked in the UI and logs. See `User Guide → Variable Groups` for usage and Terraform integration with `TF_VAR_*` variables. diff --git a/src/administration-guide/installation/docker.md b/src/administration-guide/installation/docker.md index dea2ec0..6fbc44e 100644 --- a/src/administration-guide/installation/docker.md +++ b/src/administration-guide/installation/docker.md @@ -45,6 +45,9 @@ services: SEMAPHORE_DB_PORT: 3306 # change to 5432 for postgres SEMAPHORE_DB_DIALECT: mysql # for postgres, change to: postgres SEMAPHORE_DB: semaphore + # To use SQLite instead of MySQL/Postgres (v2.16+) + # SEMAPHORE_DB_DIALECT: sqlite + # SEMAPHORE_DB: "/etc/semaphore/semaphore.sqlite" SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/ SEMAPHORE_ADMIN_PASSWORD: changeme SEMAPHORE_ADMIN_NAME: admin diff --git a/src/administration-guide/notifications/email.md b/src/administration-guide/notifications/email.md index 7723e86..076d32e 100644 --- a/src/administration-guide/notifications/email.md +++ b/src/administration-guide/notifications/email.md @@ -16,8 +16,12 @@ Example `config.json` for configuring AWS SMTP email notifications: "email_secure": true, "email_username": "", "email_password": "", + "email_tls": true, + "email_tls_min_version": "1.2" } ``` Explanation of key setting: -* `email_secure` — enables **StartTLS** to upgrade the connection to a secure, encrypted channel. \ No newline at end of file +* `email_secure` — enables **StartTLS** to upgrade the connection to a secure, encrypted channel. +* `email_tls` — force TLS usage for SMTP connections. +* `email_tls_min_version` — minimal allowed TLS version (e.g. `1.2`). \ No newline at end of file diff --git a/src/administration-guide/openid.md b/src/administration-guide/openid.md index f580215..def5e03 100644 --- a/src/administration-guide/openid.md +++ b/src/administration-guide/openid.md @@ -32,6 +32,21 @@ Example of SSO provider configuration: } ``` +### Configure via environment variable + +When running in containers it may be convenient to configure providers using a single environment variable: + +```bash +SEMAPHORE_OIDC_PROVIDERS='{ + "github": { + "client_id": "***", + "client_secret": "***" + } +}' +``` + +This value must be a valid JSON string matching the `oidc_providers` structure above. + All SSO provider options: | Parameter | Description | diff --git a/src/administration-guide/runners.md b/src/administration-guide/runners.md index 525e19c..5a8da95 100644 --- a/src/administration-guide/runners.md +++ b/src/administration-guide/runners.md @@ -109,6 +109,10 @@ semaphore runner start --config /path/to/your/config/file.json Your runner is ready to execute tasks ;) +### Runner tags (Pro) + +You can assign one or more tags to a project runner. Templates can then require a tag so tasks run only on matching runners. Configure tags when adding a runner in the project UI, and set the required tag in the template settings. + ## Runner unregistaration You can remove runner using the web interfance. diff --git a/src/administration-guide/security.md b/src/administration-guide/security.md index d005bda..4f378ee 100644 --- a/src/administration-guide/security.md +++ b/src/administration-guide/security.md @@ -15,7 +15,7 @@ Semaphore supports secure authentication and flexible authorization mechanisms: - **OpenID Connect (OIDC)**
    Enables single sign-on with identity providers like Google, Azure AD, or Keycloak. Supports custom claims and group mappings. -- **Two-Factor authentication (2FA)**
    TOTP-based 2FA is available and recommended for all users. +- **Two-Factor authentication (2FA)**
    TOTP-based 2FA is available and recommended for all users. It can be enabled per user and supports optional recovery codes. See configuration options `auth.totp.enabled` and `auth.totp.allow_recovery`. - **Role-based access control**
    You can assign different roles to users such as Admin, Maintainer, or Viewer, limiting access based on responsibility. @@ -31,7 +31,7 @@ Managing secrets securely is a core feature: - **Environment isolation**
    Secrets are only passed to jobs at runtime and are not exposed to the container environment directly. - **SSH keys and tokens**
    Users are responsible for uploading valid SSH keys and tokens. These are encrypted and only used when running tasks. - +- **HashiCorp Vault integration (Pro)**
    Secrets can be stored in an external Vault instance. Choose storage per-secret when creating or editing a secret. ## Running untrusted code / playbooks diff --git a/src/user-guide/environment.md b/src/user-guide/environment.md index e9322d4..ae7a445 100644 --- a/src/user-guide/environment.md +++ b/src/user-guide/environment.md @@ -22,7 +22,7 @@ If you are not sure which resources are being used in an variable group, follow 2. Click the trash can icon next to the Variable Group. 3. Click Yes if you are sure you want to remove the variable group. -## Using Variable Groups - Terraform +## Using Variable Groups - Terraform/OpenTofu When you want utilize a stored variable group variable or secret in your terraform template you must prefix the name with `TF_VAR_` for the terraform script to use it. **Example** diff --git a/src/user-guide/integrations.md b/src/user-guide/integrations.md index ac82eaf..f47cb09 100644 --- a/src/user-guide/integrations.md +++ b/src/user-guide/integrations.md @@ -21,3 +21,11 @@ With matchers, you can define parameters of the incoming request. When these par With an extractor, you can extract the necessary data from the incoming request and pass it to the task as environment variables. For the extracted variables to be passed to the task, you must create an environment with the corresponding keys. Ensure that the environment keys match the variables defined in the extractor, as this allows the task to receive and use the correct environment variables. + +## Task parameters + +Integrations can trigger tasks with parameters. Use value extractors to build a JSON payload for task parameters and configure the template to accept prompted values. + +## Notes on aliases and matchers + +For integrations configured with an alias endpoint, matchers are not used. Prefer token/HMAC authentication as needed and pass parameters via extractors. diff --git a/src/user-guide/projects/history.md b/src/user-guide/projects/history.md index a515f74..2f7cf95 100644 --- a/src/user-guide/projects/history.md +++ b/src/user-guide/projects/history.md @@ -75,6 +75,10 @@ Clicking on any task in the history list opens a detailed view showing: - Log search functionality - Error highlighting +### Statistics + +The project provides a statistics page summarizing task outcomes over a selected time range, with filtering by user. + ## Task Management ### Actions Available diff --git a/src/user-guide/projects/settings.md b/src/user-guide/projects/settings.md index 8520f75..69bbaf1 100644 --- a/src/user-guide/projects/settings.md +++ b/src/user-guide/projects/settings.md @@ -8,3 +8,12 @@ The Settings page allows you to configure various aspects of your project, including notifications, and project-specific settings. This page is accessible to project administrators and provides centralized management of project configuration. ![](<../../.gitbook/assets/project_settings.webp>) + +## Runners (Pro) + +Project runners can be attached to a project. You can also require a specific runner by tag in a template: + +1. In `Project → Runners`, add a runner and specify a tag. +2. In `Project → Templates → `, set the required runner tag. + +This ensures the task is executed on a runner matching the tag. diff --git a/src/user-guide/schedules.md b/src/user-guide/schedules.md index 3de0951..b5c685f 100644 --- a/src/user-guide/schedules.md +++ b/src/user-guide/schedules.md @@ -135,3 +135,9 @@ For development or testing environments. Schedule cloud environment creation in * Consider the effect of long-running scheduled tasks on other schedules * Test schedules with short intervals before setting up production schedules with longer intervals * Document the purpose and expected outcomes of scheduled tasks + +--- + +## Task parameters + +Schedules can pass parameters to tasks. Enable prompts for the required fields in the template, then define parameter values in the schedule configuration so each run supplies the desired overrides (for example branch, variables, flags). diff --git a/src/user-guide/task-templates/README.md b/src/user-guide/task-templates/README.md index c379234..70921f9 100644 --- a/src/user-guide/task-templates/README.md +++ b/src/user-guide/task-templates/README.md @@ -7,3 +7,9 @@ Templates define how to run Semaphore tasks. Currently the following task types * [Shell](./bash.md) * [Powershell](./powershell.md) * [Python](./python.md) + +--- + +## Parallel tasks + +By default, tasks from the same template execute sequentially. To allow concurrent runs of the same template, enable the "Allow parallel tasks" option in the template settings. diff --git a/src/user-guide/task-templates/apps/ansible.md b/src/user-guide/task-templates/apps/ansible.md index f0c2d82..6ae4cf0 100644 --- a/src/user-guide/task-templates/apps/ansible.md +++ b/src/user-guide/task-templates/apps/ansible.md @@ -65,3 +65,21 @@ You can use cron to periodically check for new commits in the repository and tri For example you have source code of the app in the git repository. You can add it to **Repositories** and trigger the Build task for new commits. ![](../../../.gitbook/assets/template\_schedule\_commit.png) + +### Tags, skip-tags and limit + +Templates support Ansible CLI options: + +- `--tags` +- `--skip-tags` +- `--limit` + +These can be set in the template and overridden when creating a task. Ensure corresponding prompts are enabled if you plan to pass these values via API. + +### Multiple vault passwords + +You can attach multiple Vault passwords from the Key Store to a template. During execution, Ansible will attempt to decrypt using the provided passwords. + +### Verbosity level + +You can adjust Ansible verbosity for a task (for example `-v`, `-vvv`) from the template/task form to aid troubleshooting. diff --git a/src/user-guide/task-templates/apps/terraform.md b/src/user-guide/task-templates/apps/terraform.md index 4f15113..e4f5775 100644 --- a/src/user-guide/task-templates/apps/terraform.md +++ b/src/user-guide/task-templates/apps/terraform.md @@ -15,4 +15,18 @@ Using Semaphore UI you can run Terraform code. To do this, you need to create a ![](<../../../.gitbook/assets/terraform_2.webp>) -3. You can now run your Terraform code. \ No newline at end of file +3. You can now run your Terraform code. + +--- + +## Workspaces + +Semaphore supports Terraform/OpenTofu workspaces natively. See `Workspaces` for creating and switching workspaces and integrating SSH keys for private modules. + +## Backend override and HTTP backend (Pro) + +You can enable the option to override backend settings in a template to use the built-in HTTP backend without modifying your Terraform code. For using the HTTP backend outside of Semaphore, create a backend alias and add the generated address, username and password to your Terraform configuration. See `HTTP Backend (Pro)` for details. + +## Destroy flag and state migration + +The Terraform task form supports `-destroy` and `-migrate-state` flags. Use them when planning or destroying infrastructure, or when migrating state. \ No newline at end of file diff --git a/src/user-guide/tasks.md b/src/user-guide/tasks.md index 3f0f0e1..699c293 100644 --- a/src/user-guide/tasks.md +++ b/src/user-guide/tasks.md @@ -12,6 +12,10 @@ When the task is running, or it has finished, you can see the task status and th ![](<../.gitbook/assets/image (7).png>) +### Raw log view + +You can open the unprocessed raw task log from the task log window via the RAW LOG action. + ## Tasks log retention You'll notice that logs of previous runs of your tasks are available in the tasks template or in the dashboard. From e71edf934639dc4425e1750cf20e1723d3ac7262 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 24 Aug 2025 11:29:51 +0500 Subject: [PATCH 161/170] feat: add content --- src/administration-guide/api.md | 1 + src/administration-guide/security.md | 14 ++++++++++++++ src/administration-guide/upgrading.md | 5 +++++ 3 files changed, 20 insertions(+) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 6062108..c03e354 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -6,6 +6,7 @@ Semaphore UI provides two formats of API documentation, so you can choose the on * [Swagger/OpenAPI](https://semaphoreui.com/api-docs) — ideal if you prefer an interactive, browser-based experience. * **Built-in Swagger API documentation** — interactive API documentation powered by Swagger UI. You can access it on your instance. +* [Official Postman Collection](https://www.postman.com/semaphoreui) — explore and test all endpoints in Postman. ![](<../.gitbook/assets/swagger-link.webp>) diff --git a/src/administration-guide/security.md b/src/administration-guide/security.md index 4f378ee..0cf2810 100644 --- a/src/administration-guide/security.md +++ b/src/administration-guide/security.md @@ -116,7 +116,21 @@ Semaphore collects minimal user data: Found a vulnerability? Help us keep Semaphore secure: - **Responsible disclosure**
    Please email us at `security@semaphoreui.com`. + +### Vulnerability resolution targets +We aim to resolve reported vulnerabilities within the following target windows: + +- Critical: within 30 days +- High: within 60 days +- Medium: within 90 days +- Low: best effort, typically within 180 days + +Out-of-cycle patches may be released for actively exploited issues affecting latest stable releases. + +### Code security tooling + +We use CodeQL, Codacy, Snyk and Renovate to analyze the codebase and dependencies, and to automate dependency updates. - **No public exploits**
    Do not share vulnerabilities publicly until patched. - **Acknowledgments**
    Security researchers may be acknowledged in release notes if desired. diff --git a/src/administration-guide/upgrading.md b/src/administration-guide/upgrading.md index 2a48399..050221f 100644 --- a/src/administration-guide/upgrading.md +++ b/src/administration-guide/upgrading.md @@ -73,6 +73,11 @@ sudo yum install semaphore_2.15.0_linux_arm64.rpm ### Binary +--- + +## Migrating from Snap to package/binary + +Snap installation is deprecated. If you are migrating from Snap to a package or binary installation on the same host and were using BoltDB, ensure you move the BoltDB file and repositories directory and update the corresponding paths in `config.json` for `database.boltdb` and `tmp_path`. Also adjust file ownership for the service user (e.g., `semaphore`). Download a `*.tar.gz` for your platform from [Releases page](https://github.com/semaphoreui/semaphore/releases). Unpack the binary to the directory where your old Semaphore binary is located. {{#tabs }} From 1731b6191774a5ab6385174a58410400f0ce006b Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 24 Aug 2025 12:50:32 +0500 Subject: [PATCH 162/170] feat: intro --- src/SUMMARY.md | 1 + src/administration-guide/README.md | 28 +++++++++++++++++++++--- src/administration-guide/introduction.md | 25 +++++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 src/administration-guide/introduction.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 4dd61d7..e6c66c7 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -3,6 +3,7 @@ * [Welcome to Semaphore UI](./README.md) * [Admin Guide](./administration-guide/README.md) + * [Installation](./administration-guide/installation.md) * [Package manager](./administration-guide/installation/package-manager.md) * [Docker](./administration-guide/installation/docker.md) diff --git a/src/administration-guide/README.md b/src/administration-guide/README.md index 11895a4..ef79263 100644 --- a/src/administration-guide/README.md +++ b/src/administration-guide/README.md @@ -1,15 +1,37 @@ # Administration Guide -Use this guide to install, configure, secure, operate, and upgrade Semaphore. +Welcome to the Semaphore UI Administration Guide. This guide provides comprehensive information for installing, configuring, and maintaining your Semaphore instance. -## Start here +## What is Semaphore UI? + +Semaphore UI is a modern, open-source web interface for running automation tasks. It is designed to be a lightweight, fast, and easy-to-use alternative to more complex automation platforms. + +It allows you to securely manage and execute tasks for: +* **Ansible** playbooks +* **Terraform/OpenTofu** infrastructure-as-code +* **PowerShell** and **Shell** scripts +* **Python** scripts + +## Core Features & Philosophy + +Understanding Semaphore's design principles can help you get the most out of it: + +* **Lightweight and Performant**: Semaphore is written in **Go** and distributed as a **single binary file**. It has minimal resource requirements (CPU/RAM) and does not require external dependencies like Kubernetes, Docker, or a JVM. This makes it fast, efficient, and easy to deploy. +* **Simple to Install and Maintain**: You can get Semaphore running in minutes. Installation can be as simple as downloading the binary and running it. The simple architecture makes upgrades and maintenance straightforward. +* **Flexible Deployment**: Run it as a binary, as a systemd service, or in a Docker container. It's suitable for everything from a personal homelab to enterprise environments. +* **Self-Hosted and Secure**: Semaphore is a self-hosted solution. All your data, credentials, and logs remain on your own infrastructure, giving you full control. Credentials are always encrypted in the database. +* **Powerful Integrations**: While simple, Semaphore supports powerful features like LDAP/OpenID authentication, detailed role-based access control (RBAC) per project, remote runners for scaling out task execution, and a full REST API for programmatic access. + +This guide will walk you through setting up and managing these features for your specific needs. + + ## Quick links diff --git a/src/administration-guide/introduction.md b/src/administration-guide/introduction.md new file mode 100644 index 0000000..8adcea3 --- /dev/null +++ b/src/administration-guide/introduction.md @@ -0,0 +1,25 @@ +# Introduction + +Welcome to the Semaphore UI Administration Guide. This guide provides comprehensive information for installing, configuring, and maintaining your Semaphore instance. + +## What is Semaphore UI? + +Semaphore UI is a modern, open-source web interface for running automation tasks. It is designed to be a lightweight, fast, and easy-to-use alternative to more complex automation platforms. + +It allows you to securely manage and execute tasks for: +* **Ansible** playbooks +* **Terraform/OpenTofu** infrastructure-as-code +* **PowerShell** and **Shell** scripts +* **Python** scripts + +## Core Features & Philosophy + +Understanding Semaphore's design principles can help you get the most out of it: + +* **Lightweight and Performant**: Semaphore is written in **Go** and distributed as a **single binary file**. It has minimal resource requirements (CPU/RAM) and does not require external dependencies like Kubernetes, Docker, or a JVM. This makes it fast, efficient, and easy to deploy. +* **Simple to Install and Maintain**: You can get Semaphore running in minutes. Installation can be as simple as downloading the binary and running it. The simple architecture makes upgrades and maintenance straightforward. +* **Flexible Deployment**: Run it as a binary, as a systemd service, or in a Docker container. It's suitable for everything from a personal homelab to enterprise environments. +* **Self-Hosted and Secure**: Semaphore is a self-hosted solution. All your data, credentials, and logs remain on your own infrastructure, giving you full control. Credentials are always encrypted in the database. +* **Powerful Integrations**: While simple, Semaphore supports powerful features like LDAP/OpenID authentication, detailed role-based access control (RBAC) per project, remote runners for scaling out task execution, and a full REST API for programmatic access. + +This guide will walk you through setting up and managing these features for your specific needs. From 1750b1fbdf1903f051cfb29a4cd172fa57065484 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 24 Aug 2025 21:11:37 +0500 Subject: [PATCH 163/170] feat: slack docs --- .../notifications/slack.md | 75 ++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/src/administration-guide/notifications/slack.md b/src/administration-guide/notifications/slack.md index 24e84cc..a8a29bc 100644 --- a/src/administration-guide/notifications/slack.md +++ b/src/administration-guide/notifications/slack.md @@ -5,11 +5,84 @@ # Slack notifications +Slack notifications allow you to receive real-time updates about your Semaphore workflows directly in your Slack channels. This integration helps teams stay informed about build statuses, deployment results, and other important events without having to constantly check the Semaphore dashboard. + +To set up Slack notifications, you need to create a webhook URL that connects Semaphore to your desired Slack channel. This webhook acts as a secure communication bridge between the two platforms. + +## Creating Slack webhook + +### Step 1. Open Slack API Settings + +1. Go to [https://api.slack.com/apps](https://api.slack.com/apps). +2. Click **Create New App** → choose **From Scratch**. +3. Give your app a name (e.g., `Semaphore Bot`) and select your **Slack workspace**. + +--- + +### Step 2. Enable Incoming Webhooks + +1. Inside the app settings, go to **Features → Incoming Webhooks**. +2. Switch **ctivate Incoming Webhooks** → **On**. + +--- + +### Step 3. Create a Webhook URL + +1. Click **dd New Webhook to Workspace**. +2. Select the xxchannelxx where messages should be sent. +3. Click **Allow**. +4. You’ll see a **Webhook URL** like: + + ``` + https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx + ``` + +--- + +### Step 4. Test Your Webhook + +Use `curl` to test: + +```bash +curl -X POST -H 'Content-type: application/json' \ +--data '{"text":"Hello from Semaphore UI 🚀"}' \ +https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx +``` + +If everything is set up, you’ll see the message in the selected Slack channel. + + +## Semaphore configuration + +Once you have your Slack webhook URL, you can configure Semaphore to send notifications in several ways: + +### Configuration Methods + +You can enable Slack notifications using either configuration files or environment variables. + +#### Method 1: Configuration File + +Add the following settings to your Semaphore configuration file: + +- `slack_alert`: Set to `true` to enable Slack notifications +- `slack_url`: Your webhook URL from the previous step + `config.json` example: ```json { "slack_alert": true, - "slack_url": "...", + "slack_url": "https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx", } +``` + +#### Method 2: Environment Variables + +Alternatively, you can use environment variables to configure Slack notifications. This method is particularly useful for containerized deployments or when you want to keep sensitive information separate from configuration files. + +Environemnt variables: + +``` +SEMAPHORE_SLACK_ALERT=True +SEMAPHORE_SLACK_URL=https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx ``` \ No newline at end of file From 04000cd452f0992b99e3020aae95f2ebaea36679 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 24 Aug 2025 21:18:24 +0500 Subject: [PATCH 164/170] feat: slack docs --- src/administration-guide/notifications/slack.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/administration-guide/notifications/slack.md b/src/administration-guide/notifications/slack.md index a8a29bc..d2c052f 100644 --- a/src/administration-guide/notifications/slack.md +++ b/src/administration-guide/notifications/slack.md @@ -11,7 +11,7 @@ To set up Slack notifications, you need to create a webhook URL that connects Se ## Creating Slack webhook -### Step 1. Open Slack API Settings +### Step 1. Open Slack API settings 1. Go to [https://api.slack.com/apps](https://api.slack.com/apps). 2. Click **Create New App** → choose **From Scratch**. @@ -19,14 +19,14 @@ To set up Slack notifications, you need to create a webhook URL that connects Se --- -### Step 2. Enable Incoming Webhooks +### Step 2. Enable incoming webhooks 1. Inside the app settings, go to **Features → Incoming Webhooks**. 2. Switch **ctivate Incoming Webhooks** → **On**. --- -### Step 3. Create a Webhook URL +### Step 3. Create a webhook URL 1. Click **dd New Webhook to Workspace**. 2. Select the xxchannelxx where messages should be sent. @@ -39,7 +39,7 @@ To set up Slack notifications, you need to create a webhook URL that connects Se --- -### Step 4. Test Your Webhook +### Step 4. Test your webhook Use `curl` to test: @@ -56,11 +56,9 @@ If everything is set up, you’ll see the message in the selected Slack channel. Once you have your Slack webhook URL, you can configure Semaphore to send notifications in several ways: -### Configuration Methods - You can enable Slack notifications using either configuration files or environment variables. -#### Method 1: Configuration File +### Method 1: Configuration file Add the following settings to your Semaphore configuration file: @@ -76,12 +74,10 @@ Add the following settings to your Semaphore configuration file: } ``` -#### Method 2: Environment Variables +### Method 2: Environment variables Alternatively, you can use environment variables to configure Slack notifications. This method is particularly useful for containerized deployments or when you want to keep sensitive information separate from configuration files. -Environemnt variables: - ``` SEMAPHORE_SLACK_ALERT=True SEMAPHORE_SLACK_URL=https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx From 30e089572b5220a2c2c0fea5f9472d1b9daa10d8 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 25 Aug 2025 18:13:13 +0500 Subject: [PATCH 165/170] ... --- src/administration-guide/configuration.md | 100 +++++++++++++++------- 1 file changed, 67 insertions(+), 33 deletions(-) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index 026a386..9e52730 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -14,6 +14,26 @@ Full list of available configuration options: | Config file option / Environment variable | Description | | ----------------------- | --------------------------------------------------------- | +| **Common** || +|
    `git_client`
    `SEMAPHORE_GIT_CLIENT`

    | Type of Git client. Can be `cmd_git` or `go_git`. | +|
    `ssh_config_path`
    `SEMAPHORE_SSH_PATH`

    | Path to SSH configuration file. | +|
    `port`
    `SEMAPHORE_PORT`

    | TCP port on which the web interface will be available. Default: 3000 | +|
    `interface`
    `SEMAPHORE_INTERFACE`

    | Useful if your server has multiple network interfaces | +|
    `tmp_path`
    `SEMAPHORE_TMP_PATH`

    | Path to directory where cloned repositories and generated files are stored. Default: /tmp/semaphore | +|
    `max_parallel_tasks`
    `SEMAPHORE_MAX_PARALLEL_TASKS`

    | Max number of parallel tasks that can be run on the server. | +|
    `max_task_duration_sec`
    `SEMAPHORE_MAX_TASK_DURATION_SEC`

    | Max duration of a task in seconds. | +|
    `max_tasks_per_template`
    `SEMAPHORE_MAX_TASKS_PER_TEMPLATE`

    | Maximum number of recent tasks stored in the database for each template. | +|
    `schedule.timezone`
    `SEMAPHORE_SCHEDULE_TIMEZONE`

    | Timezone used for scheduling tasks and cron jobs. | +|
    `oidc_providers` ![Static Badge](https://img.shields.io/badge/v2.10+-red) | OpenID provider settings. You can provide multiple OpenID providers. More about OpenID configuration read in [OpenID](./openid.md).

    | +|
    `password_login_disable`
    `SEMAPHORE_PASSWORD_LOGIN_DISABLED`

    ![Static Badge](https://img.shields.io/badge/v2.10+-red)

    | Deny password login. | +|
    `non_admin_can_create_project`
    `SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT`

    | Allow non-admin users to create projects. | +|
    `env_vars`
    `SEMAPHORE_ENV_VARS`

    | JSON map which contains environment variables. | +|
    `forwarded_env_vars`
    `SEMAPHORE_FORWARDED_ENV_VARS`

    | JSON array of environment variables which will be forwarded from system. | +|
    `apps`
    `SEMAPHORE_APPS`

    | JSON map which contains apps configuration. | +|
    `use_remote_runner`
    `SEMAPHORE_USE_REMOTE_RUNNER`

    | | +|
    `runner_registration_token`
    `SEMAPHORE_RUNNER_REGISTRATION_TOKEN`

    | | +| **Database** || +|
    `sqlite.host`
    `SEMAPHORE_DB_HOST`

    | Path to the SQLite database file. | |
    `bolt.host`
    `SEMAPHORE_DB_HOST`

    | Path to the BoltDB database file. | |
    `mysql.host`
    `SEMAPHORE_DB_HOST`

    | MySQL database host. | |
    `mysql.name`
    `SEMAPHORE_DB_NAME`

    | MySQL database (schema) name. | @@ -24,54 +44,68 @@ Full list of available configuration options: |
    `postgres.user`
    `SEMAPHORE_DB_USER`

    | Postgres user name. | |
    `postgres.pass`
    `SEMAPHORE_DB_PASS`

    | Postgres user's password. | |
    `dialect`
    `SEMAPHORE_DB_DIALECT`

    | Can be `sqlite` (default), `postgres`, `mysql` or `bolt` (deprecated). | -|
    `git_client`
    `SEMAPHORE_GIT_CLIENT`

    | | -|
    `ssh_config_path`
    `SEMAPHORE_SSH_PATH`

    | | -|
    `port`
    `SEMAPHORE_PORT`

    | TCP port on which the web interface will be available. Default: 3000 | -|
    `interface`
    `SEMAPHORE_INTERFACE`

    | Useful if your server has multiple network interfaces | -|
    `tmp_path`
    `SEMAPHORE_TMP_PATH`

    | Path to directory where cloned repositories and generated files are stored. Default: /tmp/semaphore | +|
    `*.options`
    `SEMAPHORE_DB_OPTIONS`

    | JSON map which contains database connection options. | +| **Security** || |
    `access_key_encryption`
    `SEMAPHORE_ACCESS_KEY_ENCRYPTION`

    | Secret key used for encrypting access keys in database. Read more in [Database encryption reference](./security.md#database-encryption). | +|
    `cookie_hash`
    `SEMAPHORE_COOKIE_HASH`

    | Secret key used to sign cookies. | +|
    `cookie_encryption`
    `SEMAPHORE_COOKIE_ENCRYPTION`

    | Secret key used to encrypt cookies. | |
    `web_host`
    `SEMAPHORE_WEB_ROOT`

    | Can be useful if you want to use Semaphore by the subpath, for example: [http://yourdomain.com/semaphore](http://yourdomain.com/semaphore). Do not add a trailing `/`. | -|
    `tls.enabled`
    `SEMAPHORE_TLS_ENABLED`

    | | -|
    `tls.cert_file`
    `SEMAPHORE_TLS_CERT_FILE`

    | | -|
    `tls.key_file`
    `SEMAPHORE_TLS_KEY_FILE`

    | | -|
    `email_sender`
    `SEMAPHORE_EMAIL_SENDER`

    | | -|
    `email_host`
    `SEMAPHORE_EMAIL_HOST`

    | | -|
    `email_port`
    `SEMAPHORE_EMAIL_PORT`

    | | -|
    `email_secure`
    `SEMAPHORE_EMAIL_SECURE`

    | | -|
    `email_tls`
    `SEMAPHORE_EMAIL_TLS`

    | | -|
    `email_username`
    `SEMAPHORE_EMAIL_USERNAME`

    | | -|
    `email_password`
    `SEMAPHORE_EMAIL_PASSWORD`

    | | -|
    `email_alert`
    `SEMAPHORE_EMAIL_ALERT`

    | | +|
    `tls.enabled`
    `SEMAPHORE_TLS_ENABLED`

    | Enable or disable TLS (HTTPS) for secure communication with the Semaphore server. | +|
    `tls.cert_file`
    `SEMAPHORE_TLS_CERT_FILE`

    | Path to TLS certificate file. | +|
    `tls.key_file`
    `SEMAPHORE_TLS_KEY_FILE`

    | Path to TLS key file. | +|
    `tls.http_redirect_port`
    `SEMAPHORE_TLS_HTTP_REDIRECT_PORT`

    | Port to redirect HTTP traffic to HTTPS. | +|
    `auth.totp.enabled`
    `SEMAPHORE_TOTP_ENABLED`

    | Enable Two-factor authentication with using TOTP. | +|
    `auth.totp.allow_recovery`
    `SEMAPHORE_TOTP_ALLOW_RECOVERY`

    | Allow users to reset TOTP using a recovery code. | +| **Process** || +|
    `process.user`
    `SEMAPHORE_PROCESS_USER`

    | User to run Semaphore process. | +|
    `process.uid`
    `SEMAPHORE_PROCESS_UID`

    | UID to run Semaphore process. | +|
    `process.gid`
    `SEMAPHORE_PROCESS_GID`

    | GID to run Semaphore process. | +|
    `process.chroot`
    `SEMAPHORE_PROCESS_CHROOT`

    | Chroot directory for Semaphore process. | +| **Email** || +|
    `email_sender`
    `SEMAPHORE_EMAIL_SENDER`

    | Email address of the sender. | +|
    `email_host`
    `SEMAPHORE_EMAIL_HOST`

    | SMTP server hostname. | +|
    `email_port`
    `SEMAPHORE_EMAIL_PORT`

    | SMTP server port. | +|
    `email_secure`
    `SEMAPHORE_EMAIL_SECURE`

    | Enable StartTLS to upgrade an unencrypted SMTP connection to a secure, encrypted one. | +|
    `email_tls`
    `SEMAPHORE_EMAIL_TLS`

    | Use SSL or TLS connection for communication with the SMTP server. | +|
    `email_tls_min_version`
    `SEMAPHORE_EMAIL_TLS_MIN_VERSION`

    | Minimum TLS version to use for the connection. | +|
    `email_username`
    `SEMAPHORE_EMAIL_USERNAME`

    | Username for SMTP server authentication. | +|
    `email_password`
    `SEMAPHORE_EMAIL_PASSWORD`

    | Password for SMTP server authentication. | +|
    `email_alert`
    `SEMAPHORE_EMAIL_ALERT`

    | Flag which enables email alerts. | +| **Messengers** || |
    `telegram_alert`
    `SEMAPHORE_TELEGRAM_ALERT`

    | Set to True to enable pushing alerts to Telegram. It should be used in combination with `telegram_chat` and `telegram_token`. | |
    `telegram_chat`
    `SEMAPHORE_TELEGRAM_CHAT`

    | Set to the Chat ID for the chat to send alerts to. Read more in [Telegram Notifications Setup](./notifications.md#chat-id) | |
    `telegram_token`
    `SEMAPHORE_TELEGRAM_TOKEN`

    | Set to the Authorization Token for the bot that will receive the alert payload. Read more in [Telegram Notifications Setup](./notifications.md#bot-setup) | |
    `slack_alert`
    `SEMAPHORE_SLACK_ALERT`

    | Set to True to enable pushing alerts to slack. It should be used in combination with `slack_url` | |
    `slack_url`
    `SEMAPHORE_SLACK_URL`

    | The slack webhook url. Semaphore will used it to POST Slack formatted json alerts to the provided url. | -|
    `microsoft_teams_alert`
    `SEMAPHORE_MICROSOFT_TEAMS_ALERT`

    | Set to True to enable pushing alerts to teams. It should be used in combination with `microsoft_teams_url`. | -|
    `microsoft_teams_url`
    `SEMAPHORE_MICROSOFT_TEAMS_URL`

    | The teams webhook url. Semaphore will used it to POST alerts. | +|
    `microsoft_teams_alert`
    `SEMAPHORE_MICROSOFT_TEAMS_ALERT`

    | Flag which enables Microsoft Teams alerts. | +|
    `microsoft_teams_url`
    `SEMAPHORE_MICROSOFT_TEAMS_URL`

    | Microsoft Teams webhook URL. | |
    `rocketchat_alert`
    `SEMAPHORE_ROCKETCHAT_ALERT`

    | Set to True to enable pushing alerts to Rocket.Chat. It should be used in combination with `rocketchat_url`. Available since v2.9.56. | |
    `rocketchat_url`
    `SEMAPHORE_ROCKETCHAT_URL`

    | The rocketchat webhook url. Semaphore will used it to POST Rocket.Chat formatted json alerts to the provided url. Available since v2.9.56. | -|
    `ldap_enable`
    `SEMAPHORE_LDAP_ENABLE`

    | | +|
    `dingtalk_alert`
    `SEMAPHORE_DINGTALK_ALERT`

    | Enable Dingtalk alerts. | +|
    `dingtalk_url`
    `SEMAPHORE_DINGTALK_URL`

    | Dingtalk messenger webhook URL. | +|
    `gotify_alert`
    `SEMAPHORE_GOTIFY_ALERT`

    | Enable Gotify alerts. | +|
    `gotify_url`
    `SEMAPHORE_GOTIFY_URL`

    | Gotify server URL. | +|
    `gotify_token`
    `SEMAPHORE_GOTIFY_TOKEN`

    | Gotify server token. | +| **LDAP** || +|
    `ldap_enable`
    `SEMAPHORE_LDAP_ENABLE`

    | Flag which enables LDAP authentication. | |
    `ldap_needtls`
    `SEMAPHORE_LDAP_NEEDTLS`

    | | |
    `ldap_binddn`
    `SEMAPHORE_LDAP_BIND_DN`

    | | |
    `ldap_bindpassword`
    `SEMAPHORE_LDAP_BIND_PASSWORD`

    | | |
    `ldap_server`
    `SEMAPHORE_LDAP_SERVER`

    | | |
    `ldap_searchdn`
    `SEMAPHORE_LDAP_SEARCH_DN`

    | | |
    `ldap_searchfilter`
    `SEMAPHORE_LDAP_SEARCH_FILTER`

    | | -|
    `max_parallel_tasks`
    `SEMAPHORE_MAX_PARALLEL_TASKS`

    | Max allowed parallel tasks for whole Semaphore instance. | -|
    `max_task_duration_sec`
    `SEMAPHORE_MAX_TASK_DURATION_SEC`

    | Max allowed parallel tasks for whole Semaphore instance. | -|
    `max_tasks_per_template`
    `SEMAPHORE_MAX_TASKS_PER_TEMPLATE`

    | Max allowed parallel tasks for whole Semaphore instance. | -|
    `oidc_providers` ![Static Badge](https://img.shields.io/badge/v2.10+-red) | OpenID provider settings. You can provide multiple OpenID providers. More about OpenID configuration read in [OpenID](./openid.md).

    | -|
    `password_login_disable`
    `SEMAPHORE_PASSWORD_LOGIN_DISABLED`

    ![Static Badge](https://img.shields.io/badge/v2.10+-red)

    | Disable login with using password. Only LDAP and OpenID. | -|
    `non_admin_can_create_project`
    `SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT`

    | | -|
    `env_vars`
    `SEMAPHORE_ENV_VARS`

    | | -|
    `forwarded_env_vars`
    `SEMAPHORE_FORWARDED_ENV_VARS`

    | | -|
    `apps`
    `SEMAPHORE_APPS`

    | | -|
    `use_remote_runner`
    `SEMAPHORE_USE_REMOTE_RUNNER`

    | | -|
    `use_remote_runner`
    `SEMAPHORE_USE_REMOTE_RUNNER`

    | | -|
    `runner_registration_token`
    `SEMAPHORE_RUNNER_REGISTRATION_TOKEN`

    | | -|
    `auth.totp.enabled`
    `SEMAPHORE_TOTP_ENABLED`

    | | -|
    `auth.totp.allow_recovery`
    `SEMAPHORE_TOTP_ALLOW_RECOVERY`

    | | +|
    `ldap_mappings.dn`
    `SEMAPHORE_LDAP_MAPPING_DN`

    | LDAP attribute to use as the distinguished name (DN) mapping for user authentication. | +|
    `ldap_mappings.mail`
    `SEMAPHORE_LDAP_MAPPING_MAIL`

    | LDAP attribute to use as the email address mapping for user authentication. | +|
    `ldap_mappings.uid`
    `SEMAPHORE_LDAP_MAPPING_UID`

    | LDAP attribute to use as the user ID (UID) mapping for user authentication. | +|
    `ldap_mappings.cn`
    `SEMAPHORE_LDAP_MAPPING_CN`

    | LDAP attribute to use as the common name (CN) mapping for user authentication. | +| **Logging** || +|
    `log.events.format`
    `SEMAPHORE_EVENT_LOG_FORMAT`

    | Event log format. Can be `json` or empty for text. | +|
    `log.events.enabled`
    `SEMAPHORE_EVENT_LOG_ENABLED`

    | Enable or disable event logging. | +|
    `log.events.logger`
    `SEMAPHORE_EVENT_LOGGER`

    | JSON map which contains event logger configuration. | +|
    `log.tasks.format`
    `SEMAPHORE_TASK_LOG_FORMAT`

    | Task log format. Can be `json` or empty for text. | +|
    `log.tasks.enabled`
    `SEMAPHORE_TASK_LOG_ENABLED`

    | Enable or disable task logging. | +|
    `log.tasks.logger`
    `SEMAPHORE_TASK_LOGGER`

    | JSON map which contains task logger configuration. | +|
    `log.tasks.result_logger`
    `SEMAPHORE_TASK_RESULT_LOGGER`

    | JSON map which contains task result logger configuration. | ## Frequently asked questions From 725f99e0d0191fc5cbaac42e925ee7fb729f8c61 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 25 Aug 2025 18:34:50 +0500 Subject: [PATCH 166/170] ... --- src/administration-guide/configuration.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/administration-guide/configuration.md b/src/administration-guide/configuration.md index 9e52730..596bbc2 100644 --- a/src/administration-guide/configuration.md +++ b/src/administration-guide/configuration.md @@ -57,10 +57,10 @@ Full list of available configuration options: |
    `auth.totp.enabled`
    `SEMAPHORE_TOTP_ENABLED`

    | Enable Two-factor authentication with using TOTP. | |
    `auth.totp.allow_recovery`
    `SEMAPHORE_TOTP_ALLOW_RECOVERY`

    | Allow users to reset TOTP using a recovery code. | | **Process** || -|
    `process.user`
    `SEMAPHORE_PROCESS_USER`

    | User to run Semaphore process. | -|
    `process.uid`
    `SEMAPHORE_PROCESS_UID`

    | UID to run Semaphore process. | -|
    `process.gid`
    `SEMAPHORE_PROCESS_GID`

    | GID to run Semaphore process. | -|
    `process.chroot`
    `SEMAPHORE_PROCESS_CHROOT`

    | Chroot directory for Semaphore process. | +|
    `process.user`
    `SEMAPHORE_PROCESS_USER`

    | User under which wrapped processes (such as Ansible, Terraform, or OpenTofu) will run. | +|
    `process.uid`
    `SEMAPHORE_PROCESS_UID`

    | ID of user under which wrapped processes (such as Ansible, Terraform, or OpenTofu) will run. | +|
    `process.gid`
    `SEMAPHORE_PROCESS_GID`

    | ID for group under which wrapped processes (such as Ansible, Terraform, or OpenTofu) will run. | +|
    `process.chroot`
    `SEMAPHORE_PROCESS_CHROOT`

    | Chroot directory for wrapped processes. | | **Email** || |
    `email_sender`
    `SEMAPHORE_EMAIL_SENDER`

    | Email address of the sender. | |
    `email_host`
    `SEMAPHORE_EMAIL_HOST`

    | SMTP server hostname. | @@ -88,12 +88,12 @@ Full list of available configuration options: |
    `gotify_token`
    `SEMAPHORE_GOTIFY_TOKEN`

    | Gotify server token. | | **LDAP** || |
    `ldap_enable`
    `SEMAPHORE_LDAP_ENABLE`

    | Flag which enables LDAP authentication. | -|
    `ldap_needtls`
    `SEMAPHORE_LDAP_NEEDTLS`

    | | -|
    `ldap_binddn`
    `SEMAPHORE_LDAP_BIND_DN`

    | | -|
    `ldap_bindpassword`
    `SEMAPHORE_LDAP_BIND_PASSWORD`

    | | -|
    `ldap_server`
    `SEMAPHORE_LDAP_SERVER`

    | | -|
    `ldap_searchdn`
    `SEMAPHORE_LDAP_SEARCH_DN`

    | | -|
    `ldap_searchfilter`
    `SEMAPHORE_LDAP_SEARCH_FILTER`

    | | +|
    `ldap_needtls`
    `SEMAPHORE_LDAP_NEEDTLS`

    | Flag to enable or disable TLS for LDAP connections. | +|
    `ldap_binddn`
    `SEMAPHORE_LDAP_BIND_DN`

    | The distinguished name (DN) used to bind to the LDAP server for authentication. | +|
    `ldap_bindpassword`
    `SEMAPHORE_LDAP_BIND_PASSWORD`

    | The password used to bind to the LDAP server for authentication. | +|
    `ldap_server`
    `SEMAPHORE_LDAP_SERVER`

    | The hostname and port of the LDAP server (e.g., ldap-server.com:1389). | +|
    `ldap_searchdn`
    `SEMAPHORE_LDAP_SEARCH_DN`

    | The base distinguished name (DN) used for searching users in the LDAP directory (e.g., dc=example,dc=org). | +|
    `ldap_searchfilter`
    `SEMAPHORE_LDAP_SEARCH_FILTER`

    | The filter used to search for users in the LDAP directory (e.g., (&(objectClass=inetOrgPerson)(uid=%s))). | |
    `ldap_mappings.dn`
    `SEMAPHORE_LDAP_MAPPING_DN`

    | LDAP attribute to use as the distinguished name (DN) mapping for user authentication. | |
    `ldap_mappings.mail`
    `SEMAPHORE_LDAP_MAPPING_MAIL`

    | LDAP attribute to use as the email address mapping for user authentication. | |
    `ldap_mappings.uid`
    `SEMAPHORE_LDAP_MAPPING_UID`

    | LDAP attribute to use as the user ID (UID) mapping for user authentication. | From 8c3aac9cf95538de859f6106da77034dbbfbb3fa Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 25 Aug 2025 19:09:06 +0500 Subject: [PATCH 167/170] ... --- src/administration-guide/api.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index c03e354..2db8bb7 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -6,11 +6,11 @@ Semaphore UI provides two formats of API documentation, so you can choose the on * [Swagger/OpenAPI](https://semaphoreui.com/api-docs) — ideal if you prefer an interactive, browser-based experience. * **Built-in Swagger API documentation** — interactive API documentation powered by Swagger UI. You can access it on your instance. -* [Official Postman Collection](https://www.postman.com/semaphoreui) — explore and test all endpoints in Postman. - ![](<../.gitbook/assets/swagger-link.webp>) -Both options include complete documentation of available endpoints, parameters, and example responses. +* [Official Postman Collection](https://www.postman.com/semaphoreui) — explore and test all endpoints in Postman. + +All options include complete documentation of available endpoints, parameters, and example responses. ## Getting Started with the API From 26fb3e1462b06c48e2b56febc9d60f75665e890c Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 25 Aug 2025 19:10:13 +0500 Subject: [PATCH 168/170] ... --- src/administration-guide/api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/administration-guide/api.md b/src/administration-guide/api.md index 2db8bb7..c90b76f 100644 --- a/src/administration-guide/api.md +++ b/src/administration-guide/api.md @@ -5,10 +5,10 @@ Semaphore UI provides two formats of API documentation, so you can choose the one that fits your workflow best: * [Swagger/OpenAPI](https://semaphoreui.com/api-docs) — ideal if you prefer an interactive, browser-based experience. +* [Official Postman Collection](https://www.postman.com/semaphoreui) — explore and test all endpoints in Postman. * **Built-in Swagger API documentation** — interactive API documentation powered by Swagger UI. You can access it on your instance. - ![](<../.gitbook/assets/swagger-link.webp>) -* [Official Postman Collection](https://www.postman.com/semaphoreui) — explore and test all endpoints in Postman. + ![](<../.gitbook/assets/swagger-link.webp>) All options include complete documentation of available endpoints, parameters, and example responses. From caf63631f4e0112d70c678368eb282e02efb76ce Mon Sep 17 00:00:00 2001 From: PhilippVWC Date: Mon, 8 Sep 2025 09:51:42 +0200 Subject: [PATCH 169/170] docs: fix typo --- src/user-guide/environment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user-guide/environment.md b/src/user-guide/environment.md index ae7a445..9641c59 100644 --- a/src/user-guide/environment.md +++ b/src/user-guide/environment.md @@ -2,7 +2,7 @@ The Variable Groups section of Semaphore is a place to store additional variables for an inventory and must be stored in JSON format. -All task templates require an variable group to be defined even if it is empty. +All task templates require a variable group to be defined even if it is empty. ## Create an variable group 1. Click on the Variable Group tab. From 47a4db8d074a82b058c6c55a315e33e921228ac9 Mon Sep 17 00:00:00 2001 From: Jo Lauryssens Date: Sun, 21 Sep 2025 11:41:42 +0200 Subject: [PATCH 170/170] fix: use updated url to authentik documentation --- src/administration-guide/openid/authentik.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/administration-guide/openid/authentik.md b/src/administration-guide/openid/authentik.md index bc32668..bfdd992 100644 --- a/src/administration-guide/openid/authentik.md +++ b/src/administration-guide/openid/authentik.md @@ -26,4 +26,4 @@ Discussion on GitHub: [#1663](https://github.com/semaphoreui/semaphore/discussions/1663). -See also description in [authentik docs](https://docs.goauthentik.io/integrations/services/semaphore/). +See also description in [authentik docs](https://integrations.goauthentik.io/infrastructure/semaphore/).